<? @include_once("../includes/common.php");?> <? /* <!-- JavaScript plugins (requires jQuery) --> <script src="/resources/js/jquery-1.9.0.min.js"></script> <script src="/resources/jquery-color/jquery.color.min.js"></script> <script src="/resources/hammer.js/dist/hammer.min.js"></script> <script src="/resources/hammer.js/plugins/hammer.fakemultitouch.js"></script> <!--[if !IE]> --> <script> Hammer.plugins.fakeMultitouch(); </script> <!-- <![endif]--> <script src="/resources/hammer.js/dist/jquery.hammer.min.js"></script> <!-- Include all compiled plugins (below), or include individual files as needed --> <script src="/resources/bootstrap/js/bootstrap.min.js"></script> <!-- Optionally enable responsive features in IE8 --> <script src="/resources/js/respond.min.js"></script> <!-- bootstrap switch --> <script src="/resources/bootstrap-switch/static/js/bootstrap-switch.min.yui.js"></script> <!-- Snap.js --> <script src="/resources/Snap.js/snap.min.js"></script> <!-- AppScroll.js --> <script src="/resources/AppScroll.js/AppScroll.min.js"></script> <!-- EventSource (aka Server-Sent Events) --> <script src="/resources/EventSource/eventsource.js"></script> */ ?> <script src="<?=$BASEGUIPATH;?>/js/combined.min.js"></script> <? //if($_DOMOTIKA['webspeech']!="no") if(FALSE) {?> <script src="/resources/speech/annyang.min.js"></script> <?}?> <script> //document.documentElement.requestFullscreen(); var ttsEnabled=<?=$_DOMOTIKA['tts']?>; var slideEnabled=<?=$_DOMOTIKA['slide']?>; var speechEnabled='<?=$_DOMOTIKA['webspeech']?>'; if(speechEnabled=='touch' && document.createElement('input').webkitSpeech==undefined) { testSpeech=window.webkitSpeechRecognition || window.mozSpeechRecognition || window.msSpeechRecognition || window.oSpeechRecognition || window.SpeechRecognition; if(testSpeech) { $("#speechbutton").show(); // it isn't chrome with webkit-speech attribute, but it support WEB Speech API } else { $("#speechbutton").hide(); speechEnabled=='no'; } } else { speechEnabled='touch-chrome'; } speechStartWord='*terms'; if(speechEnabled=='continuous') speechStartWord='ok domotica *terms'; //var scroller = new AppScroll({ // toolbar: $('#topbar')[0], // scroller: $('#content')[0] //}) var audioTagSupport = !!(document.createElement('audio').canPlayType); function tmpPopover(el, cont, placement, timeout) { console.debug(cont); //el.popover("destroy"); el.popover({ placement: placement, content: cont, delay: {show: 100, hide: timeout}, container: el, trigger: "manual"}); console.debug(el.popover); el.popover("show"); el.find(".popover-content").html(cont); setTimeout(function(){el.popover("destroy")}, timeout); } function playTTS(text, lang, force) { if(typeof(force)==='undefined') force=false; if(typeof(lang)==='undefined') lang = "it"; if (!audioTagSupport) return false; if (text=='') return false; if (ttsEnabled!=1 && force===false) return false; var audio = document.createElement('audio'); // XXX BUG: webkit based browsers seems to not work with https:// in <audio>, so, we fix this to http audio.setAttribute('src', 'http://translate.google.com/translate_tts?tl='+lang+'&q=' + encodeURIComponent(text)); audio.load(); audio.play(); } function speechResult(data) { if(data.result=='succeed') { var resp=data.data[0]; if(resp=='NOACT') resp="Nessuna corrispondenza"; tmpPopover($("#speech"), resp, 'top', 1500); playTTS(resp); } } function sendSpeech(spobj) { $.post("/rest/v1.2/actions/speech_text/json", spobj.serialize(), speechResult ); } // Test SpeechAPI function setSpeechText(terms) { $("#speech [name=text]").val(terms); $("#speechsm [name=text]").val(terms); console.debug("SpeechRecognized: "+terms) sendSpeech($("#speech")); } var commands = { speechStartWord: setSpeechText }; /* if(speechEnabled=='touch' || speechEnabled=='continuous') { annyang.init(commands); annyang.setLanguage('<?=$_DOMOTIKA['speechlang']?>'); } if(speechEnabled=='continuous') annyang.start(); else if(speechEnabled=='touch') annyang.recognition.continuous=false; */ var popupFader = function(ftype, title, message, timeout){ if(typeof(timeout)==='undefined') timeout = 1500; $("#alertTitle").text(title); r("#alertMessage").text(" "+message); $("#alertPopup").removeClass(); $("#alertPopup").addClass("alert alert-"+ftype); $("#alertContainer").fadeIn(100); $("#alertContainer").fadeOut({duration:timeout, easing:'easeInQuint'}); }; <? if($left || $right) { ?> var snapper = new Snap({ resistance: 0, easing: 'linear', transitionSpeed: 0.1, tapToClose: false, element: $('#content')[0], //dragger: $('#content')[0], dragger: $('[data-domotika-dragger="true"]')[0], minDragDistance: 20, slideIntent: 30, //touchToDrag: slideEnabled }); <? } ?> <? if($left || $right) { ?> snapper.on('animating', function(e) { if($(window).width()>768) mval=Math.min(Math.ceil((75/100)*$(window).width()), 800); else mval=Math.max(Math.ceil((75/100)*$(window).width()), 266); <? if($left) { ?> if(snapper.state().info.opening=='left' && snapper.state().state!='left' && $(".left-drawer").css("width")!=mval+"px") { $(".left-drawer").css("width", mval); snapper.settings({maxPosition: mval,easing:'ease',transitionSpeed:0.3}); snapper.on('animated', function(e){ snapper.off('animated'); snapper.open('left'); }); } <? } ?> <? if($left && $right) { ?> else <? } ?><? if($right) { ?>if(snapper.state().info.opening=='right' && snapper.state().state!='right' && $(".right-drawer").css("width")!=mval+"px") { $(".right-drawer").css("width", mval) snapper.settings({minPosition: -mval,easing:'ease',transitionSpeed:0.3}); snapper.on('animated', function(e){ snapper.off('animated'); snapper.open('right'); }); } <? } ?> }); <? } ?> <? if($left) { ?> //$('#open-left').on('click', $('#open-left').fastClick( function(e) { if(snapper.state().state=='left') snapper.close('left'); else { snapper.open('left'); } }); <? } ?> <? if($right) { ?> //$('#open-right').on('click', $('#open-right').fastClick( function(e) { if(snapper.state().state=='right') snapper.close('right'); else { snapper.open('right'); } }); <? } ?> function notifylistitem(text, source, nid, ndate) { var nd = new Date(parseInt(ndate*1000)); var ndate=nd.toLocaleString(); var nli='<?=notifyListItem();?>'; nli=nli.replace('[TXT]', text); nli=nli.replace('[NDATE]', ndate); nli=nli.replace('[NSOURCE]', source); nli=nli.replace('[NID]', nid); return nli; } //$("#notifybutton").on('click', $("#notifybutton").fastClick( function(e) { if($("#notifypanel").is(":hidden")) { var hval=Math.ceil((75/100)*$(window).height()); var wval=Math.min(Math.ceil((75/100)*$(window).width()), 500); $("#notifypanel").css("height", hval); $("#notifypanel").css("width", wval); $(".notifylist").css("height", hval-78); $("#notifications").empty(); $.get("/rest/v1.2/notifications/json", function(r){ for(i=0;i<r.data.length;i++) { $("#notifications").prepend(notifylistitem(r.data[i].message, r.data[i].source, r.data[i].id, r.data[i].added)); } }); } $.get("/rest/v1.2/notifications/count/json", function(r){ $("#notifybadge").text(r.data);}); $("#notifypanel").slideToggle(200); }); $('#speech').bind('webkitspeechchange',function(event) { event.preventDefault(); sendSpeech($("#speech")); }); $('#speechsm').bind('webkitspeechchange',function(event) { event.preventDefault(); sendSpeech($("#speech")); }); $("#speech").keypress(function(event) { var keycode = (event.keyCode ? event.keyCode : event.which); if(keycode == 13) { event.preventDefault(); sendSpeech($("#speech")); } }); $("#speechsm").keypress(function(event) { var keycode = (event.keyCode ? event.keyCode : event.which); if(keycode == 13) { event.preventDefault(); sendSpeech($("#speechsm")); } }); var es = new EventSource("/sse"); var syncReceived = function(event) { var res=$.parseJSON(event.data); $.each(res.data.statuses, function(idx, val){ console.debug(val); switch(val[3]) { case 'relay': var sel="data-domotika-relid"; $("[data-domotika-ampid="+val[0]+"]").each( function() { $(this).text(val[2]/10); } ); $("[data-domotika-ampcol="+val[0]+"]").each( function() { var ampere=val[2]/10; if(ampere>0 && ampere<8) { var badgecolor="badge-success"; }else if(ampere>=8 && ampere<11) { var badgecolor="badge-info"; }else if(ampere>=11 && ampere<14) { var badgecolor="badge-warning"; }else if(ampere>=14) { var badgecolor="badge-danger"; } else { var badgecolor=""; } $(this).alterClass("badge-*", badgecolor); } ); break; case 'input': var sel="data-domotika-inpid"; $("[data-domotika-inpled="+val[0]+"]").each( function() { if(val[1]>0) { $(this).alterClass($(this).attr('data-dmcolor-off'), $(this).attr('data-dmcolor-on')); } else { $(this).alterClass($(this).attr('data-dmcolor-on'), $(this).attr('data-dmcolor-off')); } } ); break; case 'analog': $("[data-domotika-analed="+val[0]+"]").each( function() { console.debug("analed"); } ); $("[data-domotika-anaid="+val[0]+"]").each( function() { console.debug("anaid"); } ); break; case 'action': var sel="data-domotika-actid"; $("[data-domotika-act2textid="+val[0]+"]").each( function() { if(val[2]>0) { $(this).text($(this).attr('data-dmtext-on')); } else { $(this).text($(this).attr('data-dmtext-off')); } } ); $("[data-domotika-act2col="+val[0]+"]").each( function() { if(val[2]>0) { $(this).alterClass($(this).attr('data-dmcolor-off'), $(this).attr('data-dmcolor-on')); } else { $(this).alterClass($(this).attr('data-dmcolor-on'), $(this).attr('data-dmcolor-off')); } } ); break; } if(val[3]!="analog") { $("["+sel+"="+val[0]+"]").each( function() { if($(this).prop("nodeName")=="BUTTON") { if(val[1]>0) { $(this).alterClass($(this).attr('data-dmcolor-off'), $(this).attr('data-dmcolor-on')); $(this).text($(this).attr('data-dmtext-on')); } else { $(this).alterClass($(this).attr('data-dmcolor-on'), $(this).attr('data-dmcolor-off')); $(this).text($(this).attr('data-dmtext-off')); } } else if($(this).prop("nodeName")=="DIV" && $(this).hasClass('has-switch')) { $(this).bootstrapSwitch('setState', val[1], true); } } ); } // if !=analog }); }; var notificationReceived = function(event) { var data=$.parseJSON(event.data); var nt=data.data; var ts=data.ts $.get("/rest/v1.2/notifications/count/json", function(r){ $("#notifybadge").text(r.data);}); tmpPopover($("#notifybutton"), "New Notify: "+nt.msg, 'left', 1000); if($("#notifypanel").is(":visible")) { $("#notifications").prepend(notifylistitem(nt.msg, nt.source, nt.nid, ts)); $("#notifyid-"+nt.nid).animate({backgroundColor: "#0080ff"},200); $("#notifyid-"+nt.nid).animate({backgroundColor: "#fff"},3500); } playTTS("nuova notifica,"+nt.msg); }; var deleteNotification = function(el) { el.fadeOut(500, function(){el.remove();}); $.ajax({url: "/rest/v1.2/notifications/"+el.attr('id').split("-")[1]+"/json", type:"DELETE", success: function(res){ $.get("/rest/v1.2/notifications/count/json", function(r){ $("#notifybadge").text(r.data); }); } }); } $("#notifications").hammer().on("swipeleft", ".notify-swipe-deletable", function() { deleteNotification($(this)); }); $("#notifications").on("click", 'i.notify-deletable', function() { deleteNotification($(this).parent().parent()); }); $("#notify-removeall").on("click", function(){ $.ajax({url: "/rest/v1.2/notifications/", type:"DELETE", success:function(res){ $("#notifypanel").slideToggle(200); $.get("/rest/v1.2/notifications/count/json",function(r){ $("#notifybadge").text(r.data); }); }}); }); var setDaemonStatus = function(event) { var data=$.parseJSON(event.data); if(data.data=='boardsdetection') { $("#modal_fixed").load('/resources/modals/autodetection_run.html'); $("#modal_fixed").modal('show'); } else if(data.data=='normal') { $("#modal_fixed").modal('hide'); $("#modal_fixed").empty(); location.reload(); } } es.addEventListener("daemonstatus", setDaemonStatus); es.addEventListener("notify", notificationReceived); es.addEventListener("sync", syncReceived); es.onerror = function(event){ if(es.readystate=='CLOSED') es = new EventSource("/sse"); } $.get("/rest/v1.2/daemonstatus/json", function(r){ if(r.data=='boardsdetection') { $("#modal_fixed").load('/resources/modals/autodetection_run.html'); $("#modal_fixed").modal('show'); } } ); setInterval(function(i){ console.debug("setinterval"); $.get("/rest/v1.2/keepalive/json", function(r){ console.debug(r); console.debug("getok"); //if('vibrate' in navigator) { // // ... vibrate for a second // navigator.vibrate(1000); //} if(r.data=='SLOGGEDOUT') { location.reload(); } if($("#modal_offline").attr('aria-hidden')=='false') $("#modal_offline").modal('hide'); }).fail(function(r){ console.debug("getfail"); console.debug(r); $("#modal_offline").modal('show'); } ); },5000); $.get("/rest/v1.2/notifications/count/json", function(r){ $("#notifybadge").text(r.data);}); </script>