]>
git.wh0rd.org - chrome-ext/web-power-switch.git/blob - popup.js
1 // Written by Mike Frysinger <vapier@gmail.com>. Released into the public domain. Suck it.
3 var url_base
, user
, pass
;
5 function fetchpage(url
, callback
) {
6 url
= url_base
+ '/' + url
;
8 var xhr
= new XMLHttpRequest();
11 xhr
.onreadystatechange = function(state
) {
12 if (xhr
.readyState
== 4) {
13 if (xhr
.status
== 200) {
17 setstatus('Could not connect;<br>check your ' +
18 '<a href="' + chrome
.extension
.getURL('options.html') + '" target=_blank>settings</a>');
19 console
.log('connect error', state
);
23 xhr
.onerror = function(error
) {
25 setstatus('onerror; see console');
26 console
.log('xhr error:', error
);
29 console
.log('fetching', url
)
30 xhr
.withCredentials
= true;
31 xhr
.open('GET', url
, true, user
, pass
);
32 xhr
.responseType
= 'document';
33 // The user/pass options above don't seem to work, so do it ourselves.
34 xhr
.setRequestHeader('Authorization', 'Basic ' + btoa(user
+ ':' + pass
));
37 setstatus('Exception; see console');
38 console
.log('exception:', e
);
43 return o
.toUpperCase() === 'ON' ? 'OFF' : 'ON';
46 function toggleit(button
) {
47 var outlet_num
= button
.id
;
48 var old_status
= button
.data
;
49 var new_status
= onoff(button
.data
);
50 var url
= 'outlet?' + outlet_num
+ '=' + new_status
;
52 fetchpage(url
, function(xhr
, state
) {
53 console
.log('switch ' + outlet_num
+ ': ' + old_status
+ ' -> ' + new_status
);
54 button
.value
= 'Switch ' + old_status
;
55 button
.data
= new_status
;
62 function toggle_confirmed() {
63 clearTimeout(this.timeout
);
64 this.onclick
= toggle_confirm
;
68 function toggle_confirm() {
70 this.onclick
= toggle_confirmed
;
71 this.oldvalue
= this.value
;
72 this.value
= 'Confirm!?';
73 this.timeout
= setTimeout(function() {
74 button
.value
= button
.oldvalue
;
75 button
.onclick
= toggle_confirm
;
80 return str
.replace(/^\s+|\s+$/, '');
83 function initpopup(xhr
, state
) {
84 var tbl
= document
.getElementById('buttons');
85 var row
, cell
, button
;
87 console
.log(xhr
, state
);
89 // There is no clean API for extracting the current state.
93 <th bgcolor="#DDDDFF" align=left>
94 Controller: !!!Web Power Switch 6
99 var th
, ths
= state
.currentTarget
.responseXML
.querySelectorAll('th');
100 for (var i
= 0; th
= ths
[i
]; ++i
) {
101 if (th
.bgColor
!= '#DDDDFF')
104 var controller_name
= trim(th
.innerText
);
105 if (controller_name
.slice(0, 12) != 'Controller: ')
108 row
= tbl
.insertRow(-1);
109 cell
= row
.insertCell(-1);
111 cell
.align
= 'center';
112 cell
.innerText
= controller_name
.slice(12);
113 cell
.innerHTML
= '<a href="' + url_base
+ '" target="_blank">' + cell
.innerHTML
+ '</a>'
117 <tr bgcolor="#F4F4F4"><td align=center>1</td>
118 <td>Outlet 1</td><td>
119 <b><font color=red>OFF</font></b></td><td>
120 <a href=outlet?1=ON>Switch ON</a>
122 <!-- <a href=outlet?1=CCL>Cycle</a> -->
126 var tr
, trs
= state
.currentTarget
.responseXML
.querySelectorAll('tr');
127 for (var i
= 0; tr
= trs
[i
]; ++i
) {
128 if (tr
.bgColor
!= '#F4F4F4')
131 var outlet_num
= trim(tr
.children
[0].innerText
);
132 var outlet_name
= trim(tr
.children
[1].innerText
);
133 var current_status
= trim(tr
.children
[2].innerText
);
134 var new_status
= trim(tr
.children
[3].innerText
);
135 var confirmable
= tr
.children
[3].children
[0].hasAttribute('onclick');
137 row
= tbl
.insertRow(-1);
138 cell
= row
.insertCell(-1);
139 if (outlet_name
=== '')
140 cell
.innerHTML
= '<i>unnamed</i>';
142 cell
.innerText
= outlet_name
+ ':';
143 cell
= row
.insertCell(-1);
144 button
= document
.createElement('input');
145 button
.type
= 'button';
146 button
.id
= outlet_num
;
147 button
.value
= new_status
;
148 button
.data
= current_status
;
149 button
.onclick
= confirmable
? toggle_confirm
: toggle
;
150 cell
.appendChild(button
);
156 function setstatus(msg
) {
157 var status
= document
.getElementById('status');
158 status
.innerHTML
= msg
;
159 status
.style
.visibility
= msg
? '' : 'hidden';
160 status
.style
.float = msg
? '' : 'left';
161 status
.style
.position
= msg
? '' : 'absolute';
164 document
.addEventListener('DOMContentLoaded', function() {
165 storage
.get(settings_keys
, function(settings
) {
166 url_base
= settings
['url'] || settings_defaults
['url'];
167 user
= settings
['user'] || settings_defaults
['user'];
168 pass
= settings
['pass'] || settings_defaults
['pass'];
169 fetchpage('index.htm', initpopup
);