diff --git a/experiments/msg_stream.html b/experiments/msg_stream.html new file mode 100644 index 00000000..c85e2fb4 --- /dev/null +++ b/experiments/msg_stream.html @@ -0,0 +1,62 @@ + +
+ + + + + + + + + + + + + + + + + + + + + + + diff --git a/experiments/o3.js b/experiments/o3.js new file mode 100644 index 00000000..b63dd408 --- /dev/null +++ b/experiments/o3.js @@ -0,0 +1,293 @@ +/* + * See the NOTICE file distributed with this work for additional + * information regarding copyright ownership. + * + * This is free software; you can redistribute it and/or modify it + * under the terms of the GNU Lesser General Public License as + * published by the Free Software Foundation; either version 2.1 of + * the License, or (at your option) any later version. + * + * This software is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details. + * + * You should have received a copy of the GNU Lesser General Public + * License along with this software; if not, write to the Free + * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA + * 02110-1301 USA, or see the FSF site: http://www.fsf.org. + * + */ + +// #ifdef __WITH_O3 +/** + * Helper class that aids in creating and controlling Ajax O3 instances + * + * @author Mike de Boer + * @version %I%, %G% + * @since 2.1 + * @namespace o3 + * @private + */ + + +(function(global) { +var sId = "Ajax.org", + sDefProduct = "O3Stem", + bAvailable = null, + iVersion = null, + embedded = false, + oO3Count = 0; + bEmbed = false, + sPlatform = null, + oInstMap = {}; + +function detect(o) { + var version; + var name = o && o.fullname ? o.fullname : "Ajax.org O3"; + + if (window.external && window.external.o3) { + version = window.external.o3.versionInfo.match(/v([\d]+\.[\d]+)/)[1]; + embedded = true; + } + else if (navigator.plugins && navigator.plugins[name]) { + version = navigator.plugins[name].description.match(/v([\d]+\.[\d]+)/)[1]; + } + else { + try { + var axo = new ActiveXObject(name); + version = axo.versionInfo.match(/v([\d]+\.[\d]+)/)[1]; + } + catch (e) {} + } + + if (version) { + iVersion = parseFloat(version); + bAvailable = true; + } + else { + iVersion = 0; + bAvailable = false; + } +} + +function sniff() { + var sAgent = navigator.userAgent.toLowerCase(); + var is_opera = sAgent.indexOf("opera") !== -1; + var is_konqueror = sAgent.indexOf("konqueror") != -1; + var is_safari = !is_opera && ((navigator.vendor + && navigator.vendor.match(/Apple/) ? true : false) + || sAgent.indexOf("safari") != -1 || is_konqueror); + var is_ie = (document.all && !is_opera && !is_safari); + bEmbed = !(is_ie && !is_opera); + + // OS sniffing: + + // windows... + if (sAgent.indexOf("win") != -1 || sAgent.indexOf("16bit") != -1) { + sPlatform = "win"; + if (sAgent.indexOf("win16") != -1 + || sAgent.indexOf("16bit") != -1 + || sAgent.indexOf("windows 3.1") != -1 + || sAgent.indexOf("windows 16-bit") != -1) + sPlatform += "16"; + else if (sAgent.indexOf("win32") != -1 + || sAgent.indexOf("32bit") != -1) + sPlatform += "32"; + else if (sAgent.indexOf("win32") != -1 + || sAgent.indexOf("32bit") != -1) + sPlatform += "64"; + } + // mac... + if (sAgent.indexOf("mac") != -1) { + sPlatform = "mac"; + if (sAgent.indexOf("ppc") != -1 || sAgent.indexOf("powerpc") != -1) + sPlatform += "ppc"; + else if (sAgent.indexOf("os x") != -1) + sPlatform += "osx"; + } + // linux... + if (sAgent.indexOf("inux") != -1) { + sPlatform = "linux"; + if (sAgent.indexOf("i686") > -1 || sAgent.indexOf("i386") > -1) + sPlatform += "32"; + else if (sAgent.indexOf("86_64")) + sPlatform += "64"; + else if (sAgent.indexOf("arm")) + sPlatform += "arm"; + } +} + +function installerUrl(o) { + return "http://www.ajax.org/o3/installer" + + (sPlatform ? "/platform/" + sPlatform : "") + + (o.guid ? "/guid/" + encodeURIComponent(o.guid) : ""); +} + +function escapeHtml(s) { + var c, ret = ""; + + if (s == null) return null; + + for (var i = 0, j = s.length; i < j; i++) { + c = s.charCodeAt(i); + if (((c > 96) && (c < 123)) || (( c > 64) && (c < 91)) + || ((c > 43) && (c < 58) && (c != 47)) || (c == 95)) + ret = ret + String.fromCharCode(c); + else + ret = ret + "" + c + ";"; + } + return ret; +} + +function createHtml(options) { + var out = []; + if (typeof options.width == "undefined") + options.width = 0; + if (typeof options.height == "undefined") + options.height = 0; + + out.push(bEmbed + ? '' : ''); + + return out.join(""); +} + +function register(o, options) { + // do some funky registering stuff... + var key = (options.guid ? options.guid : "ajax.o3") + + (options.name ? "." + options.name : ""); + + if (!oInstMap[key]) + oInstMap[key] = []; + oInstMap[key].push(o); +} + +function get(guid) { + for (var i in oInstMap) { + if (i.indexOf(guid) > -1) + return oInstMap[i][0]; + } + + return null; +} + +function destroy(o) { + if (typeof o == "string") //guid provided + o = get(o); + if (!o) return; + // destroy references and domNode of this/ each plugin instance... + var i, j, k, inst; + for (i in oInstMap) { + inst = oInstMap[i]; + if (!inst.length) continue; + for (j = inst.length -1; j >= 0; j--) { + // if we're searching for 'o', check for a match first + if (o && inst[j] != o) continue; + for (k in o) { + if (typeof o[k] == "function") + o[k] = null; + } + inst[j].parentNode.removeChild(inst[j]); + inst.splice(j, 1); + } + } + + if (!o) + oInstMap = {}; +} + +// global API: +global.o3 = { + isAvailable: function(o) { + if (bAvailable === null) + detect(o); + + return bAvailable && ((o && o.version) ? iVersion === o.version : true); + }, + + getVersion: function() { + if (iVersion === null) + detect(); + + return iVersion; + }, + + create: function(guid, options) { + if (!options && typeof guid == "object") { + options = guid; + options.guid = false; + } + else { + options = options || {}; + options.guid = guid || false; + } + if (!options["fullname"]) { + options.fullname = (options.product || sDefProduct) + + (options.guid ? "-" + options.guid : "") + } + + // mini-browser sniffing: + sniff(); + + if (!this.isAvailable(options)) { + var sUrl = installerUrl(options); + return typeof options["oninstallprompt"] == "function" + ? options.oninstallprompt(sUrl) + : window.open(sUrl, "_blank"); + } + + if (typeof options["params"] == "undefined") + options.params = {}; + if (typeof options.params["type"] == "undefined") + options.params.type = "application/" + (options.fullname || "o3-XXXXXXXX"); + + options.id = sId + (options.name ? options.name : ""); + + var oO3; + if (!embedded) { + (options["parent"] || document.body).appendChild( + document.createElement("div")).innerHTML = createHtml(options); + + oO3 = document.getElementById(options.id); + } else { + oO3 = window.external.o3; + } + + if (oO3) { + register(oO3, options); + if (typeof options["onready"] == "function") + options.onready(oO3); + + return oO3; + } + + + return false; + }, + + destroy: destroy, + + get: get +}; + +})(this); + +// #endif diff --git a/experiments/o3debugger.html b/experiments/o3debugger.html new file mode 100644 index 00000000..d26ba98d --- /dev/null +++ b/experiments/o3debugger.html @@ -0,0 +1,532 @@ + + + + + + + + + +