@iconfu/svg-inject
Version:
simple bulletproof svg injector
114 lines (96 loc) • 2.81 kB
JavaScript
var runTests = function(testFuncs, testNum) {
var failed = false;
var successCount = 0;
window.fail = function() {
failed = true;
document.getElementById('success').style.display = 'none';
document.getElementById('failed').style.display = 'block';
document.getElementById('running').style.display = 'none';
console.error(new Error());
};
window.failCallback = function() {
var err = new Error();
return function() {
console.error(err);
window.fail();
};
};
window.success = function() {
if (!failed && ++successCount == (typeof testNum !== 'undefined' ? 1 : testFuncs.length)) {
document.getElementById('success').style.display = 'block';
document.getElementById('running').style.display = 'none';
}
};
window.testNotInjected = function(id) {
};
window.testInjected = function(id) {
};
window.isEqualElseFail = function(count, num, callback) {
if (count === num) {
callback && callback();
return true;
} else if (count > num) {
window.fail();
return false;
}
};
for (var i = 0; i < testFuncs.length; ++i) {
if (typeof testNum !== 'undefined') {
// testing only one test
if (i === testNum) {
testFuncs[i]();
} else {
// set dummy function
window['SVGInject' + (i + 1)] = function() {};
window['SVGInject' + (i + 1)].err = function() {};
}
} else {
testFuncs[i]();
}
}
};
var domReady = function(callback) {
var ready = false;
var detach = function() {
if(document.addEventListener) {
document.removeEventListener("DOMContentLoaded", completed);
window.removeEventListener("load", completed);
} else {
document.detachEvent("onreadystatechange", completed);
window.detachEvent("onload", completed);
}
};
var completed = function() {
if(!ready && (document.addEventListener || event.type === "load" || document.readyState === "complete")) {
ready = true;
detach();
callback();
}
};
if(document.readyState === "complete") {
callback();
} else if(document.addEventListener) {
document.addEventListener("DOMContentLoaded", completed);
window.addEventListener("load", completed);
} else {
document.attachEvent("onreadystatechange", completed);
window.attachEvent("onload", completed);
var top = false;
try {
top = window.frameElement === null && document.documentElement;
} catch(e) {}
if(top && top.doScroll) {
(function scrollCheck() {
if(ready) return;
try {
top.doScroll("left");
} catch(e) {
return setTimeout(scrollCheck, 50);
}
ready = true;
detach();
callback();
})();
}
}
};