/* * https://developer.mozilla.org/en-US/docs/Web/Events/DOMContentLoaded * * contentloaded.js * * Author: Diego Perini (diego.perini at gmail.com) * Summary: cross-browser wrapper for DOMContentLoaded * Updated: 20101020 * License: MIT * Version: 1.2 * * URL: * http://javascript.nwbox.com/ContentLoaded/ * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE * */ // @win window reference // @fn function reference function contentLoaded(win, fn) { var done = false, top = true, doc = win.document, root = doc.documentElement, modern = doc.addEventListener, add = modern ? 'addEventListener' : 'attachEvent', rem = modern ? 'removeEventListener' : 'detachEvent', pre = modern ? '' : 'on', init = function(e) { if (e.type == 'readystatechange' && doc.readyState != 'complete') return; (e.type == 'load' ? win : doc)[rem](pre + e.type, init, false); if (!done && (done = true)) fn.call(win, e.type || e); }, poll = function() { try { root.doScroll('left'); } catch(e) { setTimeout(poll, 50); return; } init('poll'); }; if (doc.readyState == 'complete') fn.call(win, 'lazy'); else { if (!modern && root.doScroll) { try { top = !win.frameElement; } catch(e) { } if (top) poll(); } doc[add](pre + 'DOMContentLoaded', init, false); doc[add](pre + 'readystatechange', init, false); win[add](pre + 'load', init, false); } } function ajax(url, method, params, callback) { var obj; try { obj = new XMLHttpRequest(); } catch (e) { try { obj = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { obj = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) { alert("Your browser does not support Ajax."); return false; } } } obj.onreadystatechange = function () { if (obj.readyState == 4) { callback(obj); } }; obj.open(method, url, true); obj.setRequestHeader("X-Requested-With", "XMLHttpRequest"); obj.setRequestHeader("Content-type","application/x-www-form-urlencoded"); obj.send(params); return obj; } (function () { function trimCodeBlock(code, pad) { var i, ilen; pad = pad || 0; code = code.replace(/&/g, "&").replace(//g, ">"); //escape html special chars code = code.split('\n'); for (i = 0; i < 10; i++) { if (code[0].trim() === '') { code.splice(0, 1); } } var offset = 0; for (i = 0, ilen = code[0].length; i < ilen; i++) { if (code[0].charAt(i) != " ") { break; } offset++; } for (i = 0, ilen = code.length; i < ilen; i++) { code[i] = new Array(pad + 1).join(' ') + code[i].substring(offset); } return code; } function bindDumpButton() { Handsontable.Dom.addEvent(document.body, 'click', function (e) { var element = e.target || e.srcElement; if (element.nodeName == "BUTTON" && element.name == 'dump') { var name = element.getAttribute('data-dump'); var instance = element.getAttribute('data-instance'); var hot = window[instance]; console.log('data of ' + name, hot.getData()); } }); } function bindFiddleButton() { Handsontable.Dom.addEvent(document.body, 'click', function (e) { var element = e.target || e.srcElement; if (element.className == "jsFiddleLink") { var keys = ['common']; var runfiddle = element.getAttribute('data-runfiddle'); if (!runfiddle) { throw new Error("Edit in jsFiddle button does not contain runfiddle data"); } keys.push(runfiddle); var index = window.location.href.lastIndexOf("/") + 1; var baseUrl = window.location.href.substr(0, index); var tags = []; var css = ''; var js = ''; var html = ''; var onDomReady = true; tags.push('\n'); tags.push('\n'); for (var i = 0, ilen = keys.length; i < ilen; i++) { var dataFillde = document.querySelectorAll('[data-jsfiddle=' + keys[i] + ']'); for (var x = 0, len = dataFillde.length; x < len; x++) { var tag; if (dataFillde[x].nodeName === 'LINK') { tag = dataFillde[x].outerHTML; } else if (dataFillde[x].nodeName === 'SCRIPT' && dataFillde[x].src) { tag = dataFillde[x].outerHTML; } else if (dataFillde[x].nodeName === 'SCRIPT') { js += trimCodeBlock(dataFillde[x].innerHTML, 2).join('\n') + '\n'; } else if (dataFillde[x].nodeName === 'STYLE') { css += trimCodeBlock(dataFillde[x].innerHTML).join('\n') + '\n'; } else { //DIV var clone = dataFillde[x].cloneNode(true); var clonedExample = clone.querySelector('#' + runfiddle); clonedExample.innerHTML = ''; //clear example HTML, just leave container var originalHT = dataFillde[x].querySelector('#' + runfiddle); var originalStyle = originalHT.getAttribute('data-originalstyle'); if (originalStyle) { clonedExample.setAttribute('style', originalStyle); } var aName = clone.querySelectorAll('a[name]'); var hotHidden = clone.querySelectorAll('handsontable.hidden'); for (var n = 0, nLen = aName.length; n < nLen; n++) { aName[n].parentNode.removeChild(aName[n]); } for (var h = 0, hLen = hotHidden.length; h < hLen; h++) { hotHidden[h].parentNode.removeChild(hotHidden[h]); } html += trimCodeBlock(clone.innerHTML).join('\n'); } if (tag) { tag = tag.replace(' data-jsfiddle="' + keys[i] + '"', ''); if (tag.indexOf('href="http') === -1 && tag.indexOf('href="//') && tag.indexOf('src="http') === -1 && tag.indexOf('src="//')) { tag = tag.replace('href="', 'href="' + baseUrl); tag = tag.replace('src="', 'src="' + baseUrl); tag = tag.replace('demo/../', ''); if (this.nodeName === 'LINK' && this.rel === "import") { //web component imports must be loaded throught a CORS-enabling proxy, because our local server does not support it yet tag = tag.replace('href="http://', 'href="http://www.corsproxy.com/'); onDomReady = false; } } tags.push(tag) } } } tags.push(''); tags.push('