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