You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
204 lines
4.8 KiB
JavaScript
204 lines
4.8 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
window.parent.postMessage("reload", "*");
|
|
|
|
function defined(value) {
|
|
return value !== undefined;
|
|
}
|
|
|
|
function print(value) {
|
|
if (value === null) {
|
|
return "null";
|
|
} else if (defined(value)) {
|
|
return value.toString();
|
|
}
|
|
return "undefined";
|
|
}
|
|
|
|
console.originalLog = console.log;
|
|
console.log = function (d1) {
|
|
console.originalLog.apply(console, arguments);
|
|
window.parent.postMessage(
|
|
{
|
|
log: print(d1),
|
|
},
|
|
"*"
|
|
);
|
|
};
|
|
|
|
console.originalWarn = console.warn;
|
|
console.warn = function (d1) {
|
|
console.originalWarn.apply(console, arguments);
|
|
window.parent.postMessage(
|
|
{
|
|
warn: defined(d1) ? d1.toString() : "undefined",
|
|
},
|
|
"*"
|
|
);
|
|
};
|
|
|
|
console.originalError = console.error;
|
|
console.error = function (d1) {
|
|
console.originalError.apply(console, arguments);
|
|
if (!defined(d1)) {
|
|
window.parent.postMessage(
|
|
{
|
|
error: "undefined",
|
|
},
|
|
"*"
|
|
);
|
|
return;
|
|
}
|
|
|
|
// Look for d1.stack, "bucket.html:line:char"
|
|
var lineNumber = -1;
|
|
var errorMsg = d1.toString();
|
|
if (typeof d1.stack === "string") {
|
|
var stack = d1.stack;
|
|
var pos = stack.indexOf(Sandcastle.bucket);
|
|
if (pos < 0) {
|
|
pos = stack.indexOf("<anonymous>");
|
|
}
|
|
if (pos >= 0) {
|
|
var lineStart = stack.indexOf(":", pos);
|
|
if (lineStart > pos) {
|
|
var lineEnd1 = stack.indexOf(":", lineStart + 1);
|
|
var lineEnd2 = stack.indexOf("\n", lineStart + 1);
|
|
if (
|
|
lineEnd2 > lineStart &&
|
|
(lineEnd2 < lineEnd1 || lineEnd1 < lineStart)
|
|
) {
|
|
lineEnd1 = lineEnd2;
|
|
}
|
|
if (lineEnd1 > lineStart) {
|
|
/*eslint-disable no-empty*/
|
|
try {
|
|
lineNumber = parseInt(
|
|
stack.substring(lineStart + 1, lineEnd1),
|
|
10
|
|
);
|
|
} catch (ex) {}
|
|
/*eslint-enable no-empty*/
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
if (lineNumber >= 0) {
|
|
window.parent.postMessage(
|
|
{
|
|
error: errorMsg,
|
|
lineNumber: lineNumber,
|
|
},
|
|
"*"
|
|
);
|
|
} else {
|
|
window.parent.postMessage(
|
|
{
|
|
error: errorMsg,
|
|
},
|
|
"*"
|
|
);
|
|
}
|
|
};
|
|
|
|
window.onerror = function (errorMsg, url, lineNumber) {
|
|
if (defined(lineNumber)) {
|
|
if (defined(url) && url.indexOf(Sandcastle.bucket) > -1) {
|
|
// if the URL is the bucket itself, ignore it
|
|
url = "";
|
|
}
|
|
if (lineNumber < 1) {
|
|
// Change lineNumber to the local one for highlighting.
|
|
/*eslint-disable no-empty*/
|
|
try {
|
|
var pos = errorMsg.indexOf(Sandcastle.bucket + ":");
|
|
if (pos < 0) {
|
|
pos = errorMsg.indexOf("<anonymous>");
|
|
}
|
|
if (pos >= 0) {
|
|
pos += 12;
|
|
lineNumber = parseInt(errorMsg.substring(pos), 10);
|
|
}
|
|
} catch (ex) {}
|
|
/*eslint-enable no-empty*/
|
|
}
|
|
window.parent.postMessage(
|
|
{
|
|
error: errorMsg,
|
|
url: url,
|
|
lineNumber: lineNumber,
|
|
},
|
|
"*"
|
|
);
|
|
} else {
|
|
window.parent.postMessage(
|
|
{
|
|
error: errorMsg,
|
|
url: url,
|
|
},
|
|
"*"
|
|
);
|
|
}
|
|
console.originalError.apply(console, [errorMsg]);
|
|
return false;
|
|
};
|
|
|
|
Sandcastle.declare = function (obj) {
|
|
/*eslint-disable no-empty*/
|
|
try {
|
|
//Browsers such as IE don't have a stack property until you actually throw the error.
|
|
var stack = "";
|
|
try {
|
|
throw new Error();
|
|
} catch (ex) {
|
|
stack = ex.stack.toString();
|
|
}
|
|
var needle = Sandcastle.bucket + ":"; // Firefox
|
|
var pos = stack.indexOf(needle);
|
|
if (pos < 0) {
|
|
needle = " (<anonymous>:"; // Chrome
|
|
pos = stack.indexOf(needle);
|
|
}
|
|
if (pos < 0) {
|
|
needle = " (Unknown script code:"; // IE 11
|
|
pos = stack.indexOf(needle);
|
|
}
|
|
if (pos >= 0) {
|
|
pos += needle.length;
|
|
var lineNumber = parseInt(stack.substring(pos), 10);
|
|
Sandcastle.registered.push({
|
|
obj: obj,
|
|
lineNumber: lineNumber,
|
|
});
|
|
}
|
|
} catch (ex) {}
|
|
/*eslint-enable no-empty*/
|
|
};
|
|
|
|
Sandcastle.highlight = function (obj) {
|
|
if (typeof obj !== "undefined") {
|
|
for (var i = 0, len = Sandcastle.registered.length; i < len; ++i) {
|
|
if (
|
|
obj === Sandcastle.registered[i].obj ||
|
|
obj.primitive === Sandcastle.registered[i].obj
|
|
) {
|
|
window.parent.postMessage(
|
|
{
|
|
highlight: Sandcastle.registered[i].lineNumber,
|
|
},
|
|
"*"
|
|
);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
window.parent.postMessage(
|
|
{
|
|
highlight: 0,
|
|
},
|
|
"*"
|
|
);
|
|
};
|
|
})();
|