\n"
- pageText+="
\n" #endxy
pageText+="- Connect \n" - pageText+="
- Disconnect \n" - pageText+="
- Reset \n" - pageText+="
- Pause \n" + pageText+="
- Connect \n" + pageText+="
- Disconnect \n" + pageText+="
- Reset \n" + pageText+="
- Pause \n" for i in gPronterPtr.cpbuttons: - pageText+="
- "+i[0]+" \n" + pageText+="
- "+i.label+" \n" #for i in gPronterPtr.custombuttons: # print(str(i)); @@ -303,38 +303,38 @@ class WebInterface(object): pageText+="" pageText+='" pageText+="
"
pageText+=""
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;
+}