b6d4ebb9fd147734b384c043c9871a315947e539
[project/luci.git] / applications / luci-app-ddns / luasrc / view / ddns / overview_status.htm
1
2 <!-- ++ BEGIN ++ Dynamic DNS ++ overview_status.htm ++ -->
3 <script type="text/javascript">//<![CDATA[
4
5         // helper to extract section from objects id
6         // cbi.ddns.SECTION._xyz
7         function _id2section(id) {
8                 var x = id.split(".");
9                 return x[2];
10         }
11
12         // helper to move status data to the relevant
13         // screen objects
14         // called by XHR.poll and onclick_startstop
15         function _data2elements(data) {
16                 // Service sections
17                 for( i = 1; i < data.length; i++ )
18                 {
19                         var section = data[i].section   // Section to handle
20                         var cbx = document.getElementById("cbid.ddns." + section + ".enabled");         // Enabled
21                         var btn = document.getElementById("cbid.ddns." + section + "._startstop");      // Start/Stop button
22                         var rip = document.getElementById("cbid.ddns." + section + "._domainIP.two");   // Registered IP
23                         var lup = document.getElementById("cbid.ddns." + section + "._update.one");     // Last Update
24                         var nup = document.getElementById("cbid.ddns." + section + "._update.two");     // Next Update
25                         if ( !(cbx && btn && rip && lup && nup) ) { return; }   // security check
26
27                         // process id
28                         if (data[i].pid > 0) {
29                                 // stop always possible if process running
30                                 btn.value = "PID: " + data[i].pid;
31                                 btn.className = "cbi-button cbi-input-reset";
32                         } else {
33                                 // default Start / enabled
34                                 btn.value = "<%:Start%>";
35                                 btn.className = "cbi-button cbi-input-apply";
36                         }
37                         btn.disabled = false;   // button enabled
38
39                         // last update
40                         switch (data[i].datelast) {
41                                 case "_empty_":
42                                         lup.innerHTML = '<em><%:Unknown error%></em>' ;
43                                         break;
44                                 case "_never_":
45                                         lup.innerHTML = '<em><%:Never%></em>' ;
46                                         break;
47                                 default:
48                                         lup.innerHTML = data[i].datelast;
49                                         break;
50                         }
51
52                         // next update
53                         switch (data[i].datenext) {
54                                 case "_empty_":
55                                         nup.innerHTML = '<em><%:Unknown error%></em>' ;
56                                         break;
57                                 case "_verify_":
58                                         nup.innerHTML = '<em><%:Verify%></em>';
59                                         break;
60                                 case "_runonce_":
61                                 case "_stopped_":
62                                 case "_disabled_":
63                                         if (cbx.checked && data[i].datenext == "_runonce_") {
64                                                 nup.innerHTML = '<em><%:Run once%></em>';
65                                         } else if (cbx.checked) {
66                                                 nup.innerHTML = '<em><%:Stopped%></em>';
67                                         } else {
68                                                 nup.innerHTML = '<em><%:Disabled%></em>';
69                                                 btn.value = '----------';
70                                                 btn.className = "cbi-button cbi-input-button";  // no image
71                                                 btn.disabled = true;    // disabled
72                                         }
73                                         break;
74                                 default:
75                                         nup.innerHTML = data[i].datenext;
76                                         break;
77                         }
78
79                         // domain
80                         // (data[i].domain ignored here
81
82                         // registered IP
83                         // rip.innerHTML = "Registered IP";
84                         if (data[i].domain == "_nodomain_")
85                                 rip.innerHTML = '';
86                         else if (data[i].reg_ip == "_nodata_")
87                                 rip.innerHTML = '<em><%:No data%></em>';
88                         else
89                                 rip.innerHTML = data[i].reg_ip;
90
91                         // monitored interfacce
92                         // data[i].iface ignored here
93                 }
94         }
95
96         // event handler for enabled checkbox
97         function onchange_enabled(id) {
98                 // run original function in cbi.js
99                 // whatever is done there
100                 cbi_d_update(id);
101
102                 var section = _id2section(id);
103                 var cbx = document.getElementById("cbid.ddns." + section + ".enabled");
104                 var btn = document.getElementById("cbid.ddns." + section + "._startstop");
105                 if ( !(cbx && btn) ) { return; }        // security check
106
107                 var pid_txt = btn.value;
108                 var pid_found = ( pid_txt.search("PID") >= 0 ) ? true : false;
109
110                 if (pid_found) {
111                         // btn.value = "PID: 0000";
112                         btn.className = "cbi-button cbi-button-reset";
113                         btn.disabled = false;
114                 } else if (cbx.checked) {
115                         btn.value = "<%:Start%>";
116                         btn.className = "cbi-button cbi-button-apply";
117                         btn.disabled = false;
118                 } else {
119                         btn.value = '----------';
120                         btn.className = "cbi-button cbi-input-button";  // no image
121                         btn.disabled = true;            // disabled
122                 }
123         }
124
125         // event handler for start/stop button
126         function onclick_startstop(id) {
127                 // extract section
128                 var section = _id2section(id);
129                 // get elements
130                 var cbx = document.getElementById("cbid.ddns." + section + ".enabled");         // Enabled
131                 var obj = document.getElementById("cbi-ddns-overview-status-legend");           // object defined below to make in-/visible
132                 if ( !(obj && cbx) ) { return; }        // security check
133
134                 // make me visible
135                 obj.parentNode.style.display = "block";
136
137                 // do start/stop
138                 var btnXHR = new XHR();
139                 btnXHR.post('<%=url('admin/services/ddns/startstop')%>/' + section + '/' + cbx.checked, { token: '<%=token%>' },
140                         function(x, data) {
141                                 if (x.responseText == "_uncommitted_") {
142                                         // we need a trick to display Ampersand "&" in stead of "&#38;" or "&amp;"
143                                         // after translation
144                                         txt="<%:Please [Save & Apply] your changes first%>";
145                                         alert( txt.replace(new RegExp("<%:&%>", "g"), "&") );
146                                 } else {
147                                         // should have data because status changed
148                                         // so update screen
149                                         if (data) { _data2elements(data); }
150                                 }
151                                 // make me invisible
152                                 obj.parentNode.style.display = "none";
153                         }
154                 );
155         }
156
157         // force to immediate show status on page load (not waiting for XHR.poll)
158         XHR.get('<%=url('admin/services/ddns/status')%>', null,
159                 function(x, data) {
160                         if (data) { _data2elements(data); }
161                 }
162         );
163
164         // define only ONE XHR.poll in a page because if one is running it blocks the other one
165         // optimum is to define on Map or Section Level from here you can reach all elements
166         // we need update every 15 seconds only
167         XHR.poll(15, '<%=url('admin/services/ddns/status')%>', null,
168                 function(x, data) {
169                         if (data) { _data2elements(data); }
170                 }
171         );
172
173 //]]></script>
174
175 <fieldset class="cbi-section" style="display:none">
176         <legend id="cbi-ddns-overview-status-legend"><%:Applying changes%></legend>
177         <img src="<%=resource%>/icons/loading.gif" alt="<%:Loading%>" style="vertical-align:middle" />
178         <span id="cbi-ddns-overview-status-text"><%:Waiting for changes to be applied...%></span>
179 </fieldset>
180 <!-- ++ END ++ Dynamic DNS ++ overview_status.htm ++ -->