From 63cb5dfc1e3926c891c8e67f4a31f65f6a0f6f5c Mon Sep 17 00:00:00 2001
From: Caleb James DeLisle <cjd@cjdns.fr>
Date: Wed, 13 Sep 2017 12:04:24 +0200
Subject: [PATCH] Make less loader rewrite urls to use version parameter

---
 www/common/LessLoader.js | 33 +++++++++++++++++++++++++++++----
 1 file changed, 29 insertions(+), 4 deletions(-)

diff --git a/www/common/LessLoader.js b/www/common/LessLoader.js
index 61cacfbeb..75ad7d693 100644
--- a/www/common/LessLoader.js
+++ b/www/common/LessLoader.js
@@ -19,8 +19,14 @@ define([
     }
 
     var fixURL = function (url) {
-        var mark = (url.indexOf('?') !== -1) ? '&' : '?';
-        return url + mark + key;
+        // data: blob: etc
+        if (!/^(\/|http)/.test(url)) { return url; }
+        var ua = url.split('#');
+        var mark = (ua[0].indexOf('?') !== -1) ? '&' : '?';
+        ua[0] = ua[0] + mark + key;
+        var out = ua.join('#');
+        console.log(url + "  -->  " + out);
+        return out;
     };
 
     var doXHR = Less.FileManager.prototype.doXHR;
@@ -48,6 +54,22 @@ define([
         localStorage['LESS_CACHE'] = key;
     };
 
+    var fixAllURLs = function (source) {
+        var urlRegEx = /@import\s*("([^"]*)"|'([^']*)')|url\s*\(\s*(\s*"([^"]*)"|'([^']*)'|[^\)]*\s*)\s*\)/ig;
+        var result, url;
+
+        while (!!(result = urlRegEx.exec(source))) {
+            url = result[3] || result[2] || result[5] || result[6] || result[4];
+            var newUrl = fixURL(url);
+            var quoteLen = result[5] || result[6] ? 1 : 0;
+            source = source.substr(0, urlRegEx.lastIndex - url.length - quoteLen - 1)
+               + newUrl + source.substr(urlRegEx.lastIndex - quoteLen - 1);
+            urlRegEx.lastIndex = urlRegEx.lastIndex + (newUrl.length - url.length);
+        }
+
+        return source;
+    };
+
     module.exports.load = function (url /*:string*/, cb /*:()=>void*/) {
         checkCache();
         if (localStorage['LESS_CACHE|' + key + '|' + url]) {
@@ -60,8 +82,11 @@ define([
                 console.log(err);
                 return;
             }
-            localStorage['LESS_CACHE|' + key + '|' + url] = css.css;
-            inject(css.css, url);
+            var output = fixAllURLs(css.css);
+            window.lc = window.lc || {};
+            window.lc['LESS_CACHE|' + key + '|' + url] = output;
+            localStorage['LESS_CACHE|' + key + '|' + url] = output;
+            inject(output, url);
             cb();
         }, window.less);
     };