Subversion Repositories HomeAutomation

Rev

Rev 2147 | Rev 2192 | Go to most recent revision | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | SVN | RSS feed

Rev 2147 Rev 2154
1
<?php
1
<?php
2
require_once("backend.php");
2
require_once("backend.php");
3
require_once("config.php");
3
require_once("config.php");
4
?>
4
?>
5
<!DOCTYPE HTML>
5
<!DOCTYPE HTML>
6
<html>
6
<html>
7
  <head>
7
  <head>
8
    <meta charset="utf-8">
8
    <meta charset="utf-8">
9
    <meta name="viewport" content="width=device-width, initial-scale=1">
9
    <meta name="viewport" content="width=device-width, initial-scale=1">
10
    <title>Home Automation Control Center</title>
10
    <title>Home Automation Control Center</title>
11
    <link rel="stylesheet" href="jquery.mobile-1.1.1.min.css" />
11
    <link rel="stylesheet" href="jquery.mobile-1.1.1.min.css" />
12
    <script src="jquery-1.7.2.min.js"></script>
12
    <script src="jquery-1.7.2.min.js"></script>
-
 
13
    <script src="jquery.timeago.js"></script>
13
    <script src="jquery.mobile-1.1.1.min.js"></script>
14
    <script src="jquery.mobile-1.1.1.min.js"></script>
14
    <script src="jquery.tmpl.min.js"></script>
15
    <script src="jquery.tmpl.min.js"></script>
15
 
16
 
16
    <style>
17
    <style>
17
    <?php
18
    <?php
18
      foreach ($pages as $page)
19
      foreach ($pages as $page)
19
      {
20
      {
20
        include("pages/" . $page . "/style.css");
21
        include("pages/" . $page . "/style.css");
21
      }
22
      }
22
    ?>
23
    ?>
23
 
24
 
24
      .ui-li-heading {
25
      .ui-li-heading {
25
        white-space: normal;
26
        white-space: normal;
26
      }
27
      }
27
    </style>
28
    </style>
28
 
29
 
29
    <?php
30
    <?php
30
      foreach ($pages as $page)
31
      foreach ($pages as $page)
31
      {
32
      {
32
        include("pages/" . $page . "/template.html");
33
        include("pages/" . $page . "/template.html");
33
      }
34
      }
34
    ?>
35
    ?>
35
 
36
 
36
    <script id="page-template" type="text/x-jquery-tmpl" data-enhance="false">
37
    <script id="page-template" type="text/x-jquery-tmpl" data-enhance="false">
37
      <div id="page-${name}" data-role="page" data-theme="a" id="page-{name}">
38
      <div id="page-${name}" data-role="page" data-theme="a" id="page-{name}">
38
        <div data-id="PersistentFooter" data-role="header" data-position="fixed" data-tap-toggle="false">
39
        <div data-id="PersistentFooter" data-role="header" data-position="fixed" data-tap-toggle="false">
39
          <div data-role="navbar">
40
          <div data-role="navbar">
40
            <ul class="navbar-container"></ul>
41
            <ul class="navbar-container"></ul>
41
          </div>
42
          </div>
42
        </div>
43
        </div>
43
        <div data-role="content"></div>
44
        <div data-role="content"></div>
44
      </div>
45
      </div>
45
    </script>
46
    </script>
46
 
47
 
47
    <script id="pagelink-template" type="text/x-jquery-tmpl" data-enhance="false">
48
    <script id="pagelink-template" type="text/x-jquery-tmpl" data-enhance="false">
48
      <span>
49
      <span>
49
        <a href="#" data-role="button">${title}</a>
50
        <a href="#" data-role="button">${title}</a>
50
      </span>
51
      </span>
51
    </script>
52
    </script>
52
 
53
 
53
    <script>
54
    <script>
54
      $.mobile.ignoreContentEnabled = true;
55
      $.mobile.ignoreContentEnabled = true;
55
      $.mobile.transitionFallbacks.pop = "none";
56
      $.mobile.transitionFallbacks.pop = "none";
56
      $.mobile.transitionFallbacks.flip = "none";
57
      $.mobile.transitionFallbacks.flip = "none";
57
      $.mobile.transitionFallbacks.turn = "none";
58
      $.mobile.transitionFallbacks.turn = "none";
58
      $.mobile.transitionFallbacks.flow = "none";
59
      $.mobile.transitionFallbacks.flow = "none";
59
      $.mobile.transitionFallbacks.slidefade = "none";
60
      $.mobile.transitionFallbacks.slidefade = "none";
60
      $.mobile.transitionFallbacks.slide = "none";
61
      $.mobile.transitionFallbacks.slide = "none";
61
      $.mobile.transitionFallbacks.slideup = "none";
62
      $.mobile.transitionFallbacks.slideup = "none";
62
      $.mobile.transitionFallbacks.slidedown = "none";
63
      $.mobile.transitionFallbacks.slidedown = "none";
63
      $.mobile.defaultPageTransition = "none";
64
      $.mobile.defaultPageTransition = "none";
64
      $.mobile.ajaxEnabled = false;
65
      $.mobile.ajaxEnabled = false;
65
 
66
 
66
      var commandActive = false;
67
      var commandActive = false;
67
      var commandQueue = [];
68
      var commandQueue = [];
68
 
69
 
69
      function sendCommand(command, callback)
70
      function sendCommand(command, callback)
70
      {
71
      {
71
        if (commandActive)
72
        if (commandActive)
72
        {
73
        {
73
          commandQueue.push({ command: command, callback: callback });
74
          commandQueue.push({ command: command, callback: callback });
74
        }
75
        }
75
        else
76
        else
76
        {
77
        {
77
          commandActive = true;
78
          commandActive = true;
78
 
79
 
79
          jQuery.getJSON("backend.php?ajax", { command: command }, function(jsonData)
80
          jQuery.getJSON("backend.php?ajax", { command: command }, function(jsonData)
80
          {
81
          {
81
            handleCommandResponse(true, jsonData, callback);
82
            handleCommandResponse(true, jsonData, callback);
82
          }).error(function()
83
          }).error(function()
83
          {
84
          {
84
            handleCommandResponse(false, {}, callback);
85
            handleCommandResponse(false, {}, callback);
85
          });
86
          });
86
        }
87
        }
87
      }
88
      }
88
 
89
 
89
      function handleCommandResponse(success, jsonData, callback)
90
      function handleCommandResponse(success, jsonData, callback)
90
      {
91
      {
91
        commandActive = false;
92
        commandActive = false;
92
 
93
 
93
        if (commandQueue.length > 0)
94
        if (commandQueue.length > 0)
94
        {
95
        {
95
          var commandItem = commandQueue.shift();
96
          var commandItem = commandQueue.shift();
96
 
97
 
97
          sendCommand(commandItem.command, commandItem.callback);
98
          sendCommand(commandItem.command, commandItem.callback);
98
        }
99
        }
99
 
100
 
100
        if (success)
101
        if (success)
101
        {
102
        {
102
          if (callback)
103
          if (callback)
103
          {
104
          {
104
            callback(jsonData);
105
            callback(jsonData);
105
          }
106
          }
106
        }
107
        }
107
        else
108
        else
108
        {
109
        {
109
          console.log("command failed!");
110
          console.log("command failed!");
110
        }
111
        }
111
      }
112
      }
112
    </script>
113
    </script>
113
 
114
 
114
    <script>
115
    <script>
115
      var pages = {};
116
      var pages = {};
116
 
117
 
117
    <?php
118
    <?php
118
      foreach ($pages as $page)
119
      foreach ($pages as $page)
119
      {
120
      {
120
        include("pages/" . $page . "/script.js");
121
        include("pages/" . $page . "/script.js");
121
      }
122
      }
122
    ?>
123
    ?>
123
    </script>
124
    </script>
124
 
125
 
125
    <script>
126
    <script>
126
 
127
 
127
      var aliasNames = <?php echo json_encode($aliasNames); ?>;
128
      var aliasNames = <?php echo json_encode($aliasNames); ?>;
128
      var pageConfigurations = <?php echo json_encode($pageConfiguration); ?>;
129
      var pageConfigurations = <?php echo json_encode($pageConfiguration); ?>;
129
      var pageInstances = { };
130
      var pageInstances = { };
130
      var serverTimeOffset = 0;
131
      var serverTimeOffset = 0;
131
 
132
 
132
      function getServerTimestamp()
133
      function getServerTimestamp()
133
      {
134
      {
134
        return ((new Date()).getTime()) - serverTimeOffset
135
        return ((new Date()).getTime()) - serverTimeOffset
135
      }
136
      }
136
 
137
 
137
      $(document).ready(function(event)
138
      $(document).ready(function(event)
138
      {
139
      {
139
        sendCommand("(new Date()).getTime();", function(timestamp)
140
        sendCommand("(new Date()).getTime();", function(timestamp)
140
        {
141
        {
141
          serverTimeOffset = ((new Date()).getTime()) - parseInt(timestamp, 10);
142
          serverTimeOffset = ((new Date()).getTime()) - parseInt(timestamp, 10);
142
        });
143
        });
143
 
144
 
144
        jQuery.each(pageConfigurations, function(n, configuration)
145
        jQuery.each(pageConfigurations, function(n, configuration)
145
        {
146
        {
146
          var pageName = configuration.page + "_" + n;
147
          var pageName = configuration.page + "_" + n;
147
 
148
 
148
          pageInstances[pageName] = configuration;
149
          pageInstances[pageName] = configuration;
149
 
150
 
150
          pageInstances[pageName].name = pageName;
151
          pageInstances[pageName].name = pageName;
151
 
152
 
152
          pageInstances[pageName].pageElement = $("#page-template").tmpl(pageInstances[pageName]).appendTo($("body")).page();
153
          pageInstances[pageName].pageElement = $("#page-template").tmpl(pageInstances[pageName]).appendTo($("body")).page();
153
          pageInstances[pageName].pageContentElement = pageInstances[pageName].pageElement.find(":jqmData(role=content)");
154
          pageInstances[pageName].pageContentElement = pageInstances[pageName].pageElement.find(":jqmData(role=content)");
154
 
155
 
155
          if (pages[configuration.page] && pages[configuration.page].init)
156
          if (pages[configuration.page] && pages[configuration.page].init)
156
          {
157
          {
157
            pages[configuration.page].init(pageInstances[pageName]);
158
            pages[configuration.page].init(pageInstances[pageName]);
158
          }
159
          }
159
        });
160
        });
160
 
161
 
161
       
162
       
162
        jQuery.each(pageInstances, function(pageName, pageInstance)
163
        jQuery.each(pageInstances, function(pageName, pageInstance)
163
        {
164
        {
164
          var navbarContainerElement = pageInstances[pageName].pageElement.find("ul.navbar-container");
165
          var navbarContainerElement = pageInstances[pageName].pageElement.find("ul.navbar-container");
165
 
166
 
166
          jQuery.each(pageInstances, function(pageName2, pageInstance2)
167
          jQuery.each(pageInstances, function(pageName2, pageInstance2)
167
          {
168
          {
168
            if (pageInstance === pageInstance2)
169
            if (pageInstance === pageInstance2)
169
            {
170
            {
170
              $("<li class=''><a href='#page-" + pageName2 + "' class='ui-btn-active ui-state-persist'>" + pageInstance2.title + "</a></li>").appendTo(navbarContainerElement);
171
              $("<li class=''><a href='#page-" + pageName2 + "' class='ui-btn-active ui-state-persist'>" + pageInstance2.title + "</a></li>").appendTo(navbarContainerElement);
171
            }
172
            }
172
            else
173
            else
173
            {
174
            {
174
              $("<li class=''><a href='#page-" + pageName2 + "'>" + pageInstance2.title + "</a></li>").appendTo(navbarContainerElement);
175
              $("<li class=''><a href='#page-" + pageName2 + "'>" + pageInstance2.title + "</a></li>").appendTo(navbarContainerElement);
175
            }
176
            }
176
          });
177
          });
177
        });
178
        });
178
 
179
 
179
        $(":jqmData(role=header)").navbar();
180
        $(":jqmData(role=header)").navbar();
180
 
181
 
181
       
182
       
182
        /*$(".ui-page").on("swipeleft", function()
183
        /*$(".ui-page").on("swipeleft", function()
183
        {
184
        {
184
          var nextpage = $(this).nextAll(":jqmData(role=page)");
185
          var nextpage = $(this).nextAll(":jqmData(role=page)");
185
 
186
 
186
          if (nextpage.length > 0)
187
          if (nextpage.length > 0)
187
          {
188
          {
188
            $.mobile.changePage("#" + nextpage[0].id, { transition: "none", changeHash: true });
189
            $.mobile.changePage("#" + nextpage[0].id, { transition: "none", changeHash: true });
189
          }
190
          }
190
          else
191
          else
191
          {
192
          {
192
            nextpage = $(":jqmData(role=page)");
193
            nextpage = $(":jqmData(role=page)");
193
 
194
 
194
            $.mobile.changePage("#" + nextpage[0].id, { transition: "none", changeHash: true });
195
            $.mobile.changePage("#" + nextpage[0].id, { transition: "none", changeHash: true });
195
          }
196
          }
196
        });
197
        });
197
       
198
       
198
        $(".ui-page").on("swiperight", function()
199
        $(".ui-page").on("swiperight", function()
199
        {
200
        {
200
          var prevpage = $(this).prevAll(":jqmData(role=page)");
201
          var prevpage = $(this).prevAll(":jqmData(role=page)");
201
 
202
 
202
          if (prevpage.length > 0)
203
          if (prevpage.length > 0)
203
          {
204
          {
204
            $.mobile.changePage("#" + prevpage[0].id, { transition: "none", reverse: true, changeHash: true });
205
            $.mobile.changePage("#" + prevpage[0].id, { transition: "none", reverse: true, changeHash: true });
205
          }
206
          }
206
          else
207
          else
207
          {
208
          {
208
            prevpage = $(":jqmData(role=page)");
209
            prevpage = $(":jqmData(role=page)");
209
 
210
 
210
            $.mobile.changePage("#" + prevpage[prevpage.length - 1].id, { transition: "none", reverse: true, changeHash: true });
211
            $.mobile.changePage("#" + prevpage[prevpage.length - 1].id, { transition: "none", reverse: true, changeHash: true });
211
          }
212
          }
212
        });*/
213
        });*/
213
 
214
 
214
        $(":jqmData(role=navbar)").delegate("a", "vclick", function(event)
215
        $(":jqmData(role=navbar)").delegate("a", "vclick", function(event)
215
        {
216
        {
216
          if(!$(event.target).hasClass("ui-disabled"))
217
          if(!$(event.target).hasClass("ui-disabled"))
217
          {
218
          {
218
            $(":jqmData(role=navbar)").find("a").not(".ui-state-persist").removeClass($.mobile.activeBtnClass);
219
            $(":jqmData(role=navbar)").find("a").not(".ui-state-persist").removeClass($.mobile.activeBtnClass);
219
            $(this).addClass($.mobile.activeBtnClass);
220
            $(this).addClass($.mobile.activeBtnClass);
220
          }
221
          }
221
        });
222
        });
222
 
223
 
223
        if (document.location.hash === "" || document.location.hash === "#")
224
        if (document.location.hash === "" || document.location.hash === "#")
224
        {
225
        {
225
          document.location.hash = "#" + $(":jqmData(role=page)").attr("id");
226
          document.location.hash = "#" + $(":jqmData(role=page)").attr("id");
226
        }
227
        }
227
 
228
 
228
        $.mobile.changePage($(document.location.hash));
229
        $.mobile.changePage($(document.location.hash));
229
 
230
 
230
      });
231
      });
231
 
232
 
232
      var dialogCloseTimer = null;
233
      var dialogCloseTimer = null;
233
      var dialogCloseCallback = null;
234
      var dialogCloseCallback = null;
234
 
235
 
235
      function openDialog(titleText, contentsHtml, autoCloseTimeout, closeCallback)
236
      function openDialog(titleText, contentsHtml, autoCloseTimeout, closeCallback)
236
      {
237
      {
237
        closeDialog();
238
        closeDialog();
238
 
239
 
239
        $("#dialog .dialog-title").text(titleText);
240
        $("#dialog .dialog-title").text(titleText);
240
        $("#dialog .dialog-contents").html(contentsHtml);
241
        $("#dialog .dialog-contents").html(contentsHtml);
241
        $("#dialog a").on("click", function(event)
242
        $("#dialog a").on("click", function(event)
242
        {
243
        {
243
          closeDialog();
244
          closeDialog();
244
          event.preventDefault();
245
          event.preventDefault();
245
          return false;
246
          return false;
246
        });
247
        });
247
     
248
     
248
        dialogCloseCallback = closeCallback;
249
        dialogCloseCallback = closeCallback;
249
 
250
 
250
        $.mobile.changePage($("#dialog"), { role: "dialog"});
251
        $.mobile.changePage($("#dialog"), { role: "dialog"});
251
 
252
 
252
        $("#dialog").dialog({ close: function(event)
253
        $("#dialog").dialog({ close: function(event)
253
        {
254
        {
254
          var callback = dialogCloseCallback;
255
          var callback = dialogCloseCallback;
255
 
256
 
256
          closeDialog();
257
          closeDialog();
257
 
258
 
258
          if (callback)
259
          if (callback)
259
          {
260
          {
260
            callback();
261
            callback();
261
          }
262
          }
262
        }});
263
        }});
263
 
264
 
264
 
265
 
265
        if (autoCloseTimeout)
266
        if (autoCloseTimeout)
266
        {
267
        {
267
          dialogCloseTimer = setTimeout(closeDialog, autoCloseTimeout);
268
          dialogCloseTimer = setTimeout(closeDialog, autoCloseTimeout);
268
        }
269
        }
269
      }
270
      }
270
 
271
 
271
      function closeDialog()
272
      function closeDialog()
272
      {
273
      {
273
        if (dialogCloseTimer)
274
        if (dialogCloseTimer)
274
        {
275
        {
275
          clearTimeout(dialogCloseTimer);
276
          clearTimeout(dialogCloseTimer);
276
          dialogCloseTimer = null;
277
          dialogCloseTimer = null;
277
        }
278
        }
278
 
279
 
279
        if ($("#dialog").is(":visible"))
280
        if ($("#dialog").is(":visible"))
280
        {
281
        {
281
          $("#dialog").dialog("close");
282
          $("#dialog").dialog("close");
282
 
283
 
283
          if (dialogCloseCallback)
284
          if (dialogCloseCallback)
284
          {
285
          {
285
            dialogCloseCallback();
286
            dialogCloseCallback();
286
          }
287
          }
287
        }
288
        }
288
 
289
 
289
        dialogCloseCallback = null;
290
        dialogCloseCallback = null;
290
      }
291
      }
291
 
292
 
292
 
293
 
293
    </script>
294
    </script>
294
  </head>
295
  </head>
295
 
296
 
296
  <body>
297
  <body>
297
    <div data-role="dialog" id="dialog">
298
    <div data-role="dialog" id="dialog">
298
      <div data-role="content">
299
      <div data-role="content">
299
        <h3 class="dialog-title"></h3>
300
        <h3 class="dialog-title"></h3>
300
        <p class="dialog-contents"></p>
301
        <p class="dialog-contents"></p>
301
        <a href="#" data-role="button" data-theme="c">Close</a>
302
        <a href="#" data-role="button" data-theme="c">Close</a>
302
      </div>
303
      </div>
303
    </div>
304
    </div>
304
 
305
 
305
  </body>
306
  </body>
306
</html>
307
</html>
307
 
308