summaryrefslogtreecommitdiffstats
path: root/test/uscxml/templates/xhtml-invoker.html
diff options
context:
space:
mode:
Diffstat (limited to 'test/uscxml/templates/xhtml-invoker.html')
-rw-r--r--test/uscxml/templates/xhtml-invoker.html228
1 files changed, 228 insertions, 0 deletions
diff --git a/test/uscxml/templates/xhtml-invoker.html b/test/uscxml/templates/xhtml-invoker.html
new file mode 100644
index 0000000..7773231
--- /dev/null
+++ b/test/uscxml/templates/xhtml-invoker.html
@@ -0,0 +1,228 @@
+<html xmlns="http://www.w3.org/1999/xhtml">
+ <head>
+ <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
+ <script type="text/javascript">
+ // see http://stackoverflow.com/questions/1206937/javascript-domready
+ var domLoaded = function(callback) {
+ /* Internet Explorer */
+ /*@cc_on
+ @if (@_win32 || @_win64)
+ document.write('<script id="ieScriptLoad" defer src="//:"><\/script>');
+ document.getElementById('ieScriptLoad').onreadystatechange = function() {
+ if (this.readyState == 'complete') {
+ var head= document.getElementsByTagName('head')[0];
+ var script= document.createElement('script');
+ script.type= 'text/javascript';
+ script.src= 'http://wicked-good-xpath.googlecode.com/files/wgxpath.install.js';
+ head.appendChild(script);
+ wgxpath.install();
+
+ // see http://stackoverflow.com/questions/1811116/ie-support-for-dom-importnode
+ document.importNode = function(node, allChildren) {
+ switch (node.nodeType) {
+ case document.ELEMENT_NODE:
+ var newNode = document.createElementNS(node.namespaceURI, node.nodeName);
+ if(node.attributes && node.attributes.length > 0)
+ for(var i = 0, il = node.attributes.length; i < il; i++)
+ newNode.setAttribute(node.attributes[i].nodeName, node.getAttribute(node.attributes[i].nodeName));
+ if(allChildren && node.childNodes && node.childNodes.length > 0)
+ for(var i = 0, il = node.childNodes.length; i < il; i++)
+ newNode.appendChild(document.importNode(node.childNodes[i], allChildren));
+ return newNode;
+ break;
+ case document.TEXT_NODE:
+ case document.CDATA_SECTION_NODE:
+ case document.COMMENT_NODE:
+ return document.createTextNode(node.nodeValue);
+ break;
+ }
+ }
+
+ callback();
+ }
+ };
+ @end @*/
+ /* Mozilla, Chrome, Opera */
+ if (document.addEventListener) {
+ document.addEventListener('DOMContentLoaded', callback, false);
+ return;
+ }
+ /* Safari, iCab, Konqueror */
+ if (/KHTML|WebKit|iCab/i.test(navigator.userAgent)) {
+ var DOMLoadTimer = setInterval(function () {
+ if (/loaded|complete/i.test(document.readyState)) {
+ callback();
+ clearInterval(DOMLoadTimer);
+ }
+ }, 10);
+ return;
+ }
+ /* Other web browsers */
+ window.onload = callback;
+ };
+
+ </script>
+ <script type="text/javascript">
+
+ function CometSession(options) {
+ /**
+ * Support for two-channel asynchronous http communication
+ */
+ for (var key in options) {
+ if (options.hasOwnProperty(key)) {
+ this[key] = options[key];
+ }
+ }
+ var self = this;
+
+ this.xhr = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0"));
+ this.cometPoll = (window.XMLHttpRequest ? new XMLHttpRequest() : new ActiveXObject("MSXML2.XMLHTTP.3.0"));
+
+ this.createUUID = function() {
+ // http://www.ietf.org/rfc/rfc4122.txt
+ var s = [];
+ var hexDigits = "0123456789abcdef";
+ for (var i = 0; i < 36; i++) {
+ s[i] = hexDigits.substr(Math.floor(Math.random() * 0x10), 1);
+ }
+ s[14] = "4"; // bits 12-15 of the time_hi_and_version field to 0010
+ s[19] = hexDigits.substr((s[19] & 0x3) | 0x8, 1); // bits 6-7 of the clock_seq_hi_and_reserved to 01
+ s[8] = s[13] = s[18] = s[23] = "-";
+ var uuid = s.join("");
+ return uuid;
+ }
+
+ this.longpoll = function() {
+ self.cometPoll.onreadystatechange = function() {
+ if (self.cometPoll.readyState === 4) {
+ if (self.cometPoll.status !== 200) {
+ self.longpoll();
+ return;
+ }
+ self.onRcvd(self.cometPoll);
+ self.longpoll();
+ }
+ };
+ // use token until we have a context
+ self.cometPoll.open("GET", self.server + (self.query ? "?" + self.query : ""));
+ self.cometPoll.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+ self.cometPoll.setRequestHeader("Connection", "close");
+ self.cometPoll.send(null);
+ };
+
+ this.post = function(name, data) {
+ self.xhr.open("POST", self.server + (self.query ? "?" + self.query : ""));
+ self.xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
+ self.xhr.setRequestHeader('X-SCXML-Name', name);
+ self.xhr.send(data);
+ }
+
+ // serialize an object to be send
+ this.send = function(name, thing) {
+ var data;
+ // see also: https://raw.github.com/douglascrockford/JSON-js/master/cycle.js
+ // dispatch over thingy type here
+ if (typeof thing === "object") {
+ var seen = [];
+ // will not work on opera as thing is checked for cycles first
+ data = JSON.stringify(thing, function(key, val) {
+ if (isNode(val)) {
+ // return a selection of attributes
+ return {
+ id: val.id,
+ tagName: val.tagName,
+ localName: val.localName
+ };
+ }
+ if (isWindow(val)) {
+ return;
+ }
+ if (typeof val === "object") {
+ if (seen.indexOf(val) >= 0)
+ return;
+ seen.push(val)
+ }
+ return val
+ });
+ } else {
+ data = thing;
+ }
+ this.post(name, data);
+ }
+
+ // helper function to determine whether something is a html node
+ var isNode = function(o){
+ return (
+ typeof Node === "object" ? o instanceof Node :
+ o && typeof o === "object" && typeof o.nodeType === "number" && typeof o.nodeName==="string"
+ );
+ }
+
+ // helper function to determine whether something is a window
+ var isWindow = function(o){
+ return (
+ typeof Window === "object" ? o instanceof Window :
+ o && typeof o === "object" && typeof o.menubar === "object"
+ );
+ }
+
+ }
+
+ </script>
+
+ <script type="text/javascript">
+ domLoaded(function () {
+ scxml = new CometSession({
+ element: document.getElementById("${scxml.invokeId}"),
+ server: "${scxml.server}",
+ onRcvd : function(data) {
+ if (data.responseXML) {
+ var type = data.getResponseHeader("X-SCXML-Type") || "replacechildren";
+ var domTarget = data.getResponseHeader("X-SCXML-XPath") || "/html/body";
+ var domAttr = data.getResponseHeader("X-SCXML-Attr");
+ var result = document.evaluate(domTarget, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null);
+
+ for (var i = 0, l = result.snapshotLength; i < l; i++) {
+ var item = result.snapshotItem(i);
+ var node = document.importNode(data.responseXML.firstChild, true);
+ switch (type) {
+ case "firstchild":
+ item.insertBefore(node, item.firstChild);
+ break;
+ case "lastchild":
+ item.appendChild(node);
+ break;
+ case "previoussibling":
+ item.parentNode.insertBefore(node, item);
+ break;
+ case "nextsibling":
+ item.parentNode.insertBefore(node, item.nextSibling);
+ break;
+ case "replace":
+ item.parentNode.replaceChild(node, item);
+ break;
+ case "delete":
+ item.parentNode.removeChild(item);
+ break;
+ case "addattribute":
+ item.setAttribute(domAttr, node);
+ break;
+ case "replacechildren":
+ while(item.hasChildNodes()) {
+ item.removeChild(item.firstChild);
+ }
+ item.appendChild(node);
+ default:
+ break;
+ }
+ }
+ }
+ }
+ });
+ scxml.longpoll();
+ });
+ </script>
+
+ </head>
+ <body></body>
+</html>