/*
* 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('