use inherited color for link to build log
[web/firmware-selector-openwrt-org.git] / index.js
index 4b6cb28017c9ca6dc5361da2e1e1879026551c9b..6264c8a90129df5b31dca6ef329af9301b740327 100644 (file)
--- a/index.js
+++ b/index.js
@@ -33,32 +33,22 @@ function build_asa_request() {
     return;
   }
 
-  function showStatus(text) {
+  function showStatus(message, url) {
     show('buildstatus');
-    $('buildstatus').innerHTML = text;
+    var tr = message.startsWith('tr-') ? message : '';
+    if (url) {
+      $('buildstatus').innerHTML = '<a href="' + url + '" class="' + tr + '">' + message + '</a>';
+    } else {
+      $('buildstatus').innerHTML = '<span class="' + tr + '"></span>';
+    }
     translate();
   }
 
-  function handleError(response) {
-    hide('buildspinner');
-
-    response.json()
-      .then(mobj => {
-        var message = mobj['message'] || '<span class="tr-build-failed"></span>';
-        if (mobj.buildlog == true) {
-          var url = config.asu_url + '/store/' + mobj.bin_dir + '/buildlog.txt';
-          showStatus('<a href="' + url + '">' + message + '</a>');
-        } else {
-          showStatus(message);
-        }
-      });
-  }
-
   // hide image view
   updateImages();
 
   show('buildspinner');
-  showStatus('<span class="tr-request-image"></span>');
+  showStatus('tr-request-image');
 
   var request_data = {
     'target': current_model.target,
@@ -76,11 +66,12 @@ function build_asa_request() {
     switch (response.status) {
       case 200:
         hide('buildspinner');
-        showStatus('<span class="tr-build-successful"></span>');
+        showStatus('tr-build-successful');
 
         response.json()
         .then(mobj => {
           var download_url = config.asu_url + '/store/' + mobj.bin_dir;
+          showStatus('tr-build-successful', download_url + '/buildlog.txt');
           updateImages(
             mobj.version_number,
             mobj.version_code,
@@ -91,13 +82,19 @@ function build_asa_request() {
         });
         break;
       case 202:
-        showStatus('<span class="tr-check-again"></span>');
+        showStatus('tr-check-again');
         setTimeout(_ => { build_asa_request() }, 5000);
         break;
       case 400: // bad request
       case 422: // bad package
       case 500: // build failed
-        handleError(response);
+        hide('buildspinner');
+        response.json()
+        .then(mobj => {
+          var message = mobj['message'] || 'tr-build-failed';
+          var url = mobj.buildlog ? (config.asu_url + '/store/' + mobj.bin_dir + '/buildlog.txt') : undefined;
+          showStatus(message, url);
+        })
         break;
     }
   })
@@ -280,13 +277,18 @@ function setupAutocompleteList(input, items, as_list, onbegin, onend) {
 // for attended sysupgrade
 function updatePackageList(version, target) {
   // set available packages
-  fetch(config.versions[version] + '/' + target +  '/index.json')
+  fetch(config.asu_url + '/' + config.versions[version] + '/' + target +  '/index.json')
   .then(response => response.json())
   .then(all_packages => {
     setupAutocompleteList($('packages'), all_packages, true, _ => {}, textarea => {
       textarea.value = split(textarea.value)
-        .filter((value, index, self) => self.indexOf(value) === index) // make list unique
-        //.filter((value, index) => all_packages.indexOf(value) !== -1) // limit to available packages
+        // make list unique, ignore minus
+        .filter((value, index, self) => {
+          var i = self.indexOf(value.replace(/^\-/, ''));
+          return (i === index) || (i < 0);
+        })
+        // limit to available packages, ignore minus
+        .filter((value, index) => all_packages.indexOf(value.replace(/^\-/, '')) !== -1)
         .join(' ');
     });
   });
@@ -387,41 +389,45 @@ function updateImages(version, code, date, model, url, mobj, is_custom) {
 function init() {
   var build_date = "unknown"
   setupSelectList($('versions'), Object.keys(config.versions), version => {
-    fetch(config.versions[version] + '/profiles.json')
-      .then(obj => {
-        build_date = obj.headers.get('last-modified');
-        return obj.json();
-      })
-      .then(obj => {
-        // handle native openwrt json format
-        if ('profiles' in obj) {
-          obj['models'] = {}
-          for (const [key, value] of Object.entries(obj['profiles'])) {
-            obj['models'][get_model_titles(value.titles)] = value
-            obj['models'][get_model_titles(value.titles)]['id'] = key
-          }
+    var url = config.versions[version];
+    if (config.asu_url) {
+      url = config.asu_url + '/' + url + '/profiles.json';
+    }
+    fetch(url)
+    .then(obj => {
+      build_date = obj.headers.get('last-modified');
+      return obj.json();
+    })
+    .then(obj => {
+      // handle native openwrt json format
+      if ('profiles' in obj) {
+        obj['models'] = {}
+        for (const [key, value] of Object.entries(obj['profiles'])) {
+          obj['models'][get_model_titles(value.titles)] = value
+          obj['models'][get_model_titles(value.titles)]['id'] = key
+        }
+      }
+      return obj
+    })
+    .then(obj => {
+      setupAutocompleteList($('models'), Object.keys(obj['models']), false, updateImages, models => {
+        var model = models.value;
+        if (model in obj['models']) {
+          var url = obj.url || 'unknown';
+          var code = obj.version_code || 'unknown';
+          var mobj = obj['models'][model];
+          updateImages(version, code, build_date, model, url, mobj, false);
+          current_model = mobj;
+        } else {
+          updateImages();
+          current_model = {};
         }
-        return obj 
-      })
-      .then(obj => {
-        setupAutocompleteList($('models'), Object.keys(obj['models']), false, updateImages, models => {
-          var model = models.value;
-          if (model in obj['models']) {
-            var url = obj.url || 'unknown';
-            var code = obj.version_code || 'unknown';
-            var mobj = obj['models'][model];
-            updateImages(version, code, build_date, model, url, mobj, false);
-            current_model = mobj;
-          } else {
-            updateImages();
-            current_model = {};
-          }
-        });
-
-        // trigger model update when selected version changes
-        $('models').onfocus();
       });
+
+      // trigger model update when selected version changes
+      $('models').onfocus();
     });
+  });
 
   if (config.asu_url) {
     show('custom');