diff --git a/printrun/webinterface.py b/printrun/webinterface.py index 3f51f37..72c6c59 100644 --- a/printrun/webinterface.py +++ b/printrun/webinterface.py @@ -23,7 +23,7 @@ from printrun.printrun_utils import configfile, imagefile, sharedfile users = {} def PrintHeader(): - return '\n\nPronterface-Web\n\n\n\n' + return '\n\nPronterface-Web\n\n\n\n\n' def PrintMenu(): return '' @@ -284,14 +284,14 @@ class WebInterface(object): pageText = PrintHeader()+self.name+PrintMenu() pageText+="
\n" pageText+="
\n" - pageText+="
\n" #endxy pageText+="
" pageText+="" pageText+='' - pageText+='Z 10' - pageText+='Z 1' - pageText+='Z .1' - pageText+='Z -.1' - pageText+='Z -1' - pageText+='Z -10' + pageText+='Z 10' + pageText+='Z 1' + pageText+='Z .1' + pageText+='Z -.1' + pageText+='Z -1' + pageText+='Z -10' pageText+="" #TODO Map Z Moves pageText+="
\n" #endz @@ -374,11 +374,14 @@ def KillWebInterfaceThread(): cherrypy.engine.exit() def StartWebInterfaceThread(webInterface): - current_dir = os.path.dirname(os.path.abspath(__file__)) + current_dir = os.path.dirname(os.path.abspath(__file__)) cherrypy.config.update({'engine.autoreload_on':False}) cherrypy.config.update(configfile(webInterface.pface.web_config or "http.config")) conf = {'/css/style.css': {'tools.staticfile.on': True, - 'tools.staticfile.filename': sharedfile('css/style.css'), + 'tools.staticfile.filename': sharedfile('web/style.css'), + }, + '/js/asyncCommand.js': {'tools.staticfile.on': True, + 'tools.staticfile.filename': sharedfile('web/js/asyncCommand.js'), }, '/images/control_xy.png': {'tools.staticfile.on': True, 'tools.staticfile.filename': imagefile('control_xy.png'), diff --git a/css/style.css b/web/css/style.css similarity index 100% rename from css/style.css rename to web/css/style.css diff --git a/web/js/asyncCommand.js b/web/js/asyncCommand.js new file mode 100644 index 0000000..f37ec8c --- /dev/null +++ b/web/js/asyncCommand.js @@ -0,0 +1,79 @@ +function pronterfaceWebInterface_setup(){ + pronterfaceWebInterface_attachAsync(); +} + +function pronterfaceWebInterface_attachAsync(){ + + var list = []; + if(document.getElementsByClassName){ + list = document.getElementsByClassName('command'); + }else if(document.getElementsByTagName){ + list = document.getElementsByTagName('a'); + list.concat( document.getElementsByTagName('area') ); + //TODO filter list via checking the className attributes + }else{ + console && console.error && console.error('unable to gather list of elements'); + return false; + } + + for(var i=0; i < list.length; i++){ + list[i].addEventListener && list[i].addEventListener( 'click', function(e){return pronterfaceWebInterface_asyncCommand(null, e);}, true ); + list[i].attachEvent && list[i].attachEvent( 'onclick', function(e){return pronterfaceWebInterface_asyncCommand(null, e);} ); + } + + return true; +} + + +function pronterfaceWebInterface_asyncCommand( urlOrElement, event ){ + + if( ! urlOrElement && event.target) + urlOrElement = event.target; + + var url = null; + if( typeof urlOrElement == 'string' ){ + url = urlOrElement; + }else{ + url = urlOrElement&&urlOrElement.href; + } + + if( typeof url != 'string' ){ + console && console.error && console.error('url not a string', urlOrElement, url); + return true; + } + + var httpRequest; + if (window.XMLHttpRequest) { // Mozilla, Safari, ... + httpRequest = new XMLHttpRequest(); + } else if (window.ActiveXObject) { // IE 8 and older + httpRequest = new ActiveXObject("Microsoft.XMLHTTP"); + } + + if( ! httpRequest ){ + alert('no AJAX available?'); + // follow link + return true; + } + + //onreadystatechange + //onerror + httpRequest.open( 'GET', url, true); + httpRequest.send(null); + + // don't follow link + if( event ){ + event.stopImmediatePropagation && event.stopImmediatePropagation(); + event.defaultPrevented = true; + event.preventDefault && event.preventDefault(); + } + return false; +} + + +if (document.addEventListener) { + document.addEventListener("DOMContentLoaded", pronterfaceWebInterface_setup, false); +} else if (document.attachEvent) { + document.attachEvent("onreadystatechange", pronterfaceWebInterface_setup); +} else { + document.onload = pronterfaceWebInterface_setup; +}