123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170 |
- (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
- }, '*');
- };
- }());
|