Subversion Repositories HomeAutomation

Rev

Rev 2146 | Rev 2154 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | SVN | RSS feed

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