]> git.wh0rd.org - chrome-ext/web-power-switch.git/blobdiff - popup.js
options: improve field handling
[chrome-ext/web-power-switch.git] / popup.js
index 7ba21e2505df7cb947b21b1a30bb5e7b91871813..22c31604dccc3be9d89a189555ed4f36a887c637 100644 (file)
--- a/popup.js
+++ b/popup.js
@@ -14,8 +14,11 @@ function fetchpage(url, callback) {
                                        callback(xhr, state);
                                } else {
                                        xhr.setstatus = true;
-                                       setstatus('Could not connect;<br>check your ' +
-                                                 '<a href="' + chrome.extension.getURL('options.html') + '" target=_blank>settings</a>');
+                                       setstatus(
+                                               'Could not connect;<br>check your ' +
+                                               '<a id="open-settings" href="">settings</a>'
+                                       );
+                                       document.getElementById('open-settings').onclick = open_settings_page;
                                        console.log('connect error', state);
                                }
                        }
@@ -88,6 +91,31 @@ function initpopup(xhr, state) {
 
        // There is no clean API for extracting the current state.
        // Example result:
+       /*
+               <tr>
+               <th bgcolor="#DDDDFF" align=left>
+               Controller: !!!Web Power Switch 6
+               </th>
+               </tr>
+       */
+
+       var th, ths = state.currentTarget.responseXML.querySelectorAll('th');
+       for (var i = 0; th = ths[i]; ++i) {
+               if (th.bgColor != '#DDDDFF')
+                       continue;
+
+               var controller_name = trim(th.innerText);
+               if (controller_name.slice(0, 12) != 'Controller: ')
+                       continue;
+
+               row = tbl.insertRow(-1);
+               cell = row.insertCell(-1);
+               cell.colSpan = 2;
+               cell.align = 'center';
+               cell.innerText = controller_name.slice(12);
+               cell.innerHTML = '<a href="' + url_base + '" target="_blank">' + cell.innerHTML + '</a>'
+       }
+
        /*
                <tr bgcolor="#F4F4F4"><td align=center>1</td>
                <td>Outlet 1</td><td>
@@ -111,7 +139,10 @@ function initpopup(xhr, state) {
 
                row = tbl.insertRow(-1);
                cell = row.insertCell(-1);
-               cell.innerText = outlet_name + ':';
+               if (outlet_name === '')
+                       cell.innerHTML = '<i>unnamed</i>';
+               else
+                       cell.innerText = outlet_name + ':';
                cell = row.insertCell(-1);
                button = document.createElement('input');
                button.type = 'button';
@@ -133,11 +164,34 @@ function setstatus(msg) {
        status.style.position   = msg ? '' : 'absolute';
 }
 
+function open_settings_page() {
+       chrome.runtime.openOptionsPage();
+}
+
 document.addEventListener('DOMContentLoaded', function() {
        storage.get(settings_keys, function(settings) {
                url_base = settings['url'] || settings_defaults['url'];
                user = settings['user'] || settings_defaults['user'];
                pass = settings['pass'] || settings_defaults['pass'];
-               fetchpage('index.htm', initpopup);
+               chrome.permissions.contains({
+                       origins: [url_base + '/*']
+               }, function(granted) {
+                       if (granted) {
+                               fetchpage('index.htm', initpopup);
+                       } else {
+                               setstatus(
+                                       'Missing permissions;<br>please visit the ' +
+                                       '<a id="open-settings" href="">settings page</a>' +
+                                       '<br>to grant access.<br>' +
+                                       '<center><input id=retry type=submit value=Retry></center>'
+                               );
+                               document.getElementById('open-settings').onclick = open_settings_page;
+                               // Work around http://crbug.com/125706.
+                               document.getElementById('retry').onclick = function() {
+                                       chrome.permissions.request({origins: [url_base + '/*']});
+                                       fetchpage('index.htm', initpopup);
+                               };
+                       }
+               });
        });
 });