@signageos/front-display 14.21.3 → 14.22.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2 -9
- package/dist/bundle.js +64 -1
- package/dist/bundle.js.map +4 -4
- package/dist/console.js +246 -344
- package/dist/webWorker.js +1 -1
- package/dist/webWorker.js.map +4 -4
- package/package.json +2 -1
package/dist/console.js
CHANGED
|
@@ -4,410 +4,312 @@
|
|
|
4
4
|
Include console.js to any application to display a semi-transparent overlay
|
|
5
5
|
with contents of the web console. This is useful for environments where the
|
|
6
6
|
console is not available. This code should work in almost any browser and does
|
|
7
|
-
not need to be transpiled
|
|
8
|
-
|
|
9
|
-
A query string after console.js can be used to set primitive settings values (such as depth, fontSize, disableShadow, defaultColor).
|
|
7
|
+
not need to be transpiled
|
|
10
8
|
|
|
11
9
|
Example use:
|
|
12
|
-
<script type="text/javascript" language="javascript" src="js/console.js
|
|
10
|
+
<script type="text/javascript" language="javascript" src="js/console.js"></script>
|
|
13
11
|
*/
|
|
14
12
|
'use strict';
|
|
15
13
|
|
|
16
|
-
|
|
17
|
-
var SETTINGS = {
|
|
18
|
-
/** Maximal depth of displayed object, if depth is exhausted remaining values are rendered inline. */
|
|
19
|
-
depth: 3,
|
|
20
|
-
|
|
21
|
-
/** Which console methods are displayed on screen, currently supported methods are: error, warn, info, log. */
|
|
22
|
-
patchedMethods: /** @type {ConsoleMethod[]} */ (['error', 'warn', 'info', 'log']),
|
|
23
|
-
|
|
24
|
-
/** Dictionary of console method => color, for each patched method. */
|
|
25
|
-
colors: /** @type {Record<string, string>} */ ({
|
|
26
|
-
error: 'lightcoral',
|
|
27
|
-
warn: 'gold',
|
|
28
|
-
}),
|
|
29
|
-
|
|
30
|
-
/** Default color of text, if colors does not contain value for a method. */
|
|
31
|
-
defaultColor: 'white',
|
|
32
|
-
|
|
33
|
-
/** Font size of the console */
|
|
34
|
-
fontSize: '14px',
|
|
14
|
+
var errorsMap = {};
|
|
35
15
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
*/
|
|
43
|
-
polyfillErrorStack: false,
|
|
44
|
-
};
|
|
45
|
-
|
|
46
|
-
/** @param {string} name */
|
|
47
|
-
function getParameterByName(name) {
|
|
48
|
-
name = name.replace(/[\[\]]/g, '\\$&');
|
|
49
|
-
var regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)'),
|
|
50
|
-
results = regex.exec(/** @type {HTMLScriptElement} */ (document.currentScript).src);
|
|
51
|
-
if (!results) {
|
|
52
|
-
return null;
|
|
53
|
-
}
|
|
54
|
-
if (!results[2]) {
|
|
55
|
-
return '';
|
|
56
|
-
}
|
|
57
|
-
return decodeURIComponent(results[2].replace(/\+/g, ' '));
|
|
16
|
+
// Polyfill for Error constructor with stack for older browsers
|
|
17
|
+
var ErrorOrig = Error;
|
|
18
|
+
var ErrorWithStack = function (message) {
|
|
19
|
+
this.name = 'Error';
|
|
20
|
+
if (!(this instanceof ErrorWithStack)) {
|
|
21
|
+
return new ErrorWithStack(message);
|
|
58
22
|
}
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
SETTINGS.defaultColor = getParameterByName('defaultColor') || SETTINGS.defaultColor;
|
|
65
|
-
SETTINGS.polyfillErrorStack = getParameterByName('polyfillErrorStack') !== null;
|
|
23
|
+
var stack;
|
|
24
|
+
try {
|
|
25
|
+
throw new ErrorOrig();
|
|
26
|
+
} catch (error) {
|
|
27
|
+
stack = error.stack;
|
|
66
28
|
}
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
throw new ErrorOrig();
|
|
82
|
-
} catch (error) {
|
|
83
|
-
stack = error.stack;
|
|
84
|
-
}
|
|
85
|
-
this.constructor = ErrorWithStack;
|
|
86
|
-
this.message = message;
|
|
87
|
-
this.stack = stack;
|
|
88
|
-
errorsMap[message] = this;
|
|
89
|
-
};
|
|
90
|
-
ErrorWithStack.prototype = ErrorOrig.prototype;
|
|
91
|
-
window.Error = /** @type {any} */ (ErrorWithStack);
|
|
92
|
-
|
|
93
|
-
// Polyfill ErrorEvent.error of addEventListener('error') for older browsers
|
|
94
|
-
window.addEventListener('error', function (event) {
|
|
95
|
-
if (event.error === undefined) {
|
|
96
|
-
// Not standardized. ErrorEvent.message can be prefixed with 'Error: ' or 'Uncaught Error: ' based on version of chrome
|
|
97
|
-
var errorMessage = Object.keys(errorsMap).find(function (key) {
|
|
98
|
-
return event.message.indexOf(key) !== -1;
|
|
99
|
-
});
|
|
100
|
-
if (errorMessage) {
|
|
101
|
-
var error = errorsMap[errorMessage];
|
|
102
|
-
delete errorsMap[errorMessage];
|
|
103
|
-
// @ts-ignore error is not defined in ErrorEvent for old browsers so it's not read-only
|
|
104
|
-
event.error = error;
|
|
105
|
-
}
|
|
106
|
-
}
|
|
29
|
+
this.constructor = ErrorWithStack;
|
|
30
|
+
this.message = message;
|
|
31
|
+
this.stack = stack;
|
|
32
|
+
errorsMap[message] = this;
|
|
33
|
+
};
|
|
34
|
+
ErrorWithStack.prototype = ErrorOrig.prototype;
|
|
35
|
+
window.Error = ErrorWithStack;
|
|
36
|
+
|
|
37
|
+
// Polyfill ErrorEvent.error of addEventListener('error') for older browsers
|
|
38
|
+
window.addEventListener('error', function (event) {
|
|
39
|
+
if (event.error === undefined) {
|
|
40
|
+
// Not standardized. ErrorEvent.message can be prefixed with 'Error: ' or 'Uncaught Error: ' based on version of chrome
|
|
41
|
+
var errorMessage = Object.keys(errorsMap).find(function (key) {
|
|
42
|
+
return event.message.indexOf(key) !== -1;
|
|
107
43
|
});
|
|
44
|
+
if (errorMessage) {
|
|
45
|
+
var error = errorsMap[errorMessage];
|
|
46
|
+
delete errorsMap[errorMessage];
|
|
47
|
+
// @ts-ignore error is not defined in ErrorEvent for old browsers so it's not read-only
|
|
48
|
+
event.error = error;
|
|
49
|
+
}
|
|
108
50
|
}
|
|
51
|
+
});
|
|
109
52
|
|
|
110
|
-
|
|
111
|
-
var preMountQueue = [];
|
|
112
|
-
|
|
113
|
-
/** @type {HTMLIFrameElement} */
|
|
114
|
-
var iframe;
|
|
115
|
-
|
|
116
|
-
/** @type {HTMLTableElement} */
|
|
117
|
-
var log;
|
|
118
|
-
|
|
119
|
-
/**
|
|
120
|
-
* @param {string} level
|
|
121
|
-
* @param {unknown} content
|
|
122
|
-
*/
|
|
123
|
-
function reportToScreen(level, content) {
|
|
124
|
-
if (preMountQueue === null) {
|
|
125
|
-
var color = SETTINGS.colors[level] || SETTINGS.defaultColor;
|
|
126
|
-
|
|
127
|
-
var row = document.createElement('tr');
|
|
53
|
+
var DEFAULT_DEPTH = 3;
|
|
128
54
|
|
|
129
|
-
|
|
55
|
+
// Console settings
|
|
56
|
+
/** @type {ConsoleMethod[]} */
|
|
57
|
+
var patchedMethods = ['error', 'warn', 'info', 'log'];
|
|
130
58
|
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
59
|
+
/** @type {Record<string, string>} */
|
|
60
|
+
var colors = {
|
|
61
|
+
error: 'lightcoral',
|
|
62
|
+
warn: 'gold',
|
|
63
|
+
};
|
|
134
64
|
|
|
135
|
-
|
|
136
|
-
pre.style.margin = '0';
|
|
65
|
+
// Console settings end
|
|
137
66
|
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
row.appendChild(td);
|
|
141
|
-
});
|
|
67
|
+
/** @type {[string, unknown][] | null} */
|
|
68
|
+
var preMountQueue = [];
|
|
142
69
|
|
|
143
|
-
|
|
70
|
+
/** @type {HTMLTableElement} */
|
|
71
|
+
var log;
|
|
144
72
|
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
73
|
+
/**
|
|
74
|
+
* @param {string} level
|
|
75
|
+
* @param {unknown} content
|
|
76
|
+
*/
|
|
77
|
+
function reportToScreen(level, content) {
|
|
78
|
+
if (preMountQueue === null) {
|
|
79
|
+
var color = colors[level];
|
|
80
|
+
if (!color) {
|
|
81
|
+
color = 'white';
|
|
148
82
|
}
|
|
149
|
-
}
|
|
150
|
-
|
|
151
|
-
/**
|
|
152
|
-
* @param {unknown} content
|
|
153
|
-
* @param {number} depth
|
|
154
|
-
* @returns {HTMLElement}
|
|
155
|
-
*/
|
|
156
|
-
function formatAny(content, depth) {
|
|
157
|
-
var indent = SETTINGS.depth - depth;
|
|
158
|
-
|
|
159
|
-
if (depth <= 0 || isInlineable(content, depth)) {
|
|
160
|
-
try {
|
|
161
|
-
return block([
|
|
162
|
-
JSON.stringify(content, function (_, v) {
|
|
163
|
-
return typeof v === 'bigint' ? v.toString() + 'n' : v;
|
|
164
|
-
}),
|
|
165
|
-
]);
|
|
166
|
-
} catch (e) {
|
|
167
|
-
return block(['{ ... }']);
|
|
168
|
-
}
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
/** @type {(string | HTMLElement)[]} */
|
|
172
|
-
var lines = [];
|
|
173
83
|
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
lines.push(']');
|
|
180
|
-
return block(lines);
|
|
181
|
-
}
|
|
84
|
+
addLine(['[' + level + ']:', formatAny(content)], color);
|
|
85
|
+
} else {
|
|
86
|
+
preMountQueue.push([level, content]);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
182
89
|
|
|
183
|
-
|
|
184
|
-
|
|
90
|
+
/**
|
|
91
|
+
* @param {(string | HTMLDivElement)[]} content
|
|
92
|
+
* @param {string} color
|
|
93
|
+
*/
|
|
94
|
+
function addLine(content, color) {
|
|
95
|
+
var row = document.createElement('tr');
|
|
185
96
|
|
|
186
|
-
|
|
187
|
-
lines.push(block([indentWS(indent + 1), 'message: "' + content.message + '"\n']));
|
|
97
|
+
row.style.color = color;
|
|
188
98
|
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
return block(lines);
|
|
193
|
-
}
|
|
99
|
+
content.forEach(function (itm) {
|
|
100
|
+
var td = document.createElement('td');
|
|
101
|
+
td.style.verticalAlign = 'top';
|
|
194
102
|
|
|
195
|
-
|
|
196
|
-
|
|
103
|
+
var pre = document.createElement('pre');
|
|
104
|
+
pre.style.margin = '0';
|
|
197
105
|
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
lines.push('}');
|
|
203
|
-
return block(lines);
|
|
204
|
-
}
|
|
106
|
+
pre.appendChild(typeof itm === 'string' ? document.createTextNode(itm + '\n') : itm);
|
|
107
|
+
td.appendChild(pre);
|
|
108
|
+
row.appendChild(td);
|
|
109
|
+
});
|
|
205
110
|
|
|
206
|
-
|
|
207
|
-
return block([content + 'n']);
|
|
208
|
-
}
|
|
111
|
+
var firstChild = log.childNodes[0];
|
|
209
112
|
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
}
|
|
113
|
+
log.insertBefore(row, firstChild);
|
|
114
|
+
}
|
|
213
115
|
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
116
|
+
/**
|
|
117
|
+
* @param {unknown} content
|
|
118
|
+
* @param {number} [depth]
|
|
119
|
+
* @returns {HTMLDivElement}
|
|
120
|
+
*/
|
|
121
|
+
function formatAny(content, depth) {
|
|
122
|
+
depth = depth === undefined ? DEFAULT_DEPTH : depth;
|
|
221
123
|
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
}
|
|
124
|
+
if (depth <= 0) {
|
|
125
|
+
return indentedBlock(['{...}']);
|
|
126
|
+
}
|
|
226
127
|
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
var proto = Object.getPrototypeOf(content);
|
|
230
|
-
if (proto.constructor) {
|
|
231
|
-
lines.push(proto.constructor.name, ' ');
|
|
232
|
-
}
|
|
233
|
-
}
|
|
234
|
-
|
|
235
|
-
lines.push('{\n');
|
|
236
|
-
Object.keys(content).forEach(function (key) {
|
|
237
|
-
lines.push(block([indentWS(indent + 1), key + ': ', formatAny(content[key], depth - 1), '\n']));
|
|
238
|
-
});
|
|
239
|
-
lines.push(indentWS(indent) + '}');
|
|
240
|
-
return block(lines);
|
|
241
|
-
}
|
|
128
|
+
/** @type {(string | HTMLDivElement)[]} */
|
|
129
|
+
var lines = [];
|
|
242
130
|
|
|
243
|
-
|
|
244
|
-
|
|
245
|
-
} catch (e) {
|
|
246
|
-
return block(['{ Unable to display value ' + String(content) + ' }']);
|
|
247
|
-
}
|
|
131
|
+
if (isInlineable(content)) {
|
|
132
|
+
return indentedBlock([JSON.stringify(content)]);
|
|
248
133
|
}
|
|
249
134
|
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
lines.forEach(function (itm) {
|
|
256
|
-
el.appendChild(typeof itm === 'string' ? document.createTextNode(itm) : itm);
|
|
135
|
+
if (Array.isArray(content)) {
|
|
136
|
+
lines.push('[');
|
|
137
|
+
content.forEach(function (itm) {
|
|
138
|
+
lines.push(formatAny(itm));
|
|
257
139
|
});
|
|
258
|
-
|
|
140
|
+
lines.push(']');
|
|
141
|
+
return indentedBlock(lines);
|
|
259
142
|
}
|
|
260
143
|
|
|
261
|
-
|
|
262
|
-
|
|
263
|
-
return repeatString(' ', i);
|
|
264
|
-
}
|
|
144
|
+
if (content instanceof Error) {
|
|
145
|
+
lines.push('Error {');
|
|
265
146
|
|
|
266
|
-
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
270
|
-
|
|
271
|
-
/**
|
|
272
|
-
* @param {ConsoleMethod} level
|
|
273
|
-
*/
|
|
274
|
-
function patch(level) {
|
|
275
|
-
var original = window.console[level];
|
|
276
|
-
|
|
277
|
-
var func = function () {
|
|
278
|
-
var args = Array.prototype.slice.call(arguments);
|
|
279
|
-
reportToScreen(level, args);
|
|
280
|
-
original.apply(console, args);
|
|
281
|
-
};
|
|
282
|
-
window.console[level] = func.bind(window.console);
|
|
147
|
+
lines.push(indentedBlock(['name: "' + content.name + '"']));
|
|
148
|
+
lines.push(indentedBlock(['message: "' + content.message + '"']));
|
|
149
|
+
lines.push(indentedBlock(['stack: "' + String(content.stack) + '"']));
|
|
150
|
+
lines.push('}');
|
|
151
|
+
return indentedBlock(lines);
|
|
283
152
|
}
|
|
284
153
|
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
* @param {number} depth
|
|
288
|
-
* @returns {boolean}
|
|
289
|
-
*/
|
|
290
|
-
function isInlineable(content, depth) {
|
|
291
|
-
if (depth <= 0) {
|
|
292
|
-
return false;
|
|
293
|
-
}
|
|
154
|
+
if (content instanceof ErrorEvent) {
|
|
155
|
+
lines.push('ErrorEvent {');
|
|
294
156
|
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
}
|
|
157
|
+
lines.push(indentedBlock(['message: "' + content.message + '"']));
|
|
158
|
+
lines.push(indentedBlock(['filename: "' + content.filename.substr(content.filename.length - 50) + '"']));
|
|
159
|
+
lines.push(indentedBlock(['lineno:colno: ' + content.lineno + ':' + content.colno]));
|
|
160
|
+
lines.push(indentedBlock(['error: ', formatAny(content.error)]));
|
|
161
|
+
lines.push('}');
|
|
162
|
+
return indentedBlock(lines);
|
|
163
|
+
}
|
|
300
164
|
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
});
|
|
305
|
-
}
|
|
165
|
+
if (typeof content === 'bigint') {
|
|
166
|
+
return indentedBlock([content + 'n']);
|
|
167
|
+
}
|
|
306
168
|
|
|
307
|
-
|
|
169
|
+
if (typeof content === 'symbol' || content === undefined) {
|
|
170
|
+
return indentedBlock([String(content)]);
|
|
308
171
|
}
|
|
309
172
|
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
function isPlainObject(value) {
|
|
315
|
-
if (typeof value !== 'object' || value === null) {
|
|
316
|
-
return false;
|
|
173
|
+
if (typeof content === 'function') {
|
|
174
|
+
var name = content.name;
|
|
175
|
+
if (!name) {
|
|
176
|
+
name = 'function';
|
|
317
177
|
}
|
|
318
|
-
|
|
319
|
-
var proto = Object.getPrototypeOf(value);
|
|
320
|
-
return proto !== null && Object.getPrototypeOf(proto) === null;
|
|
178
|
+
return indentedBlock([name + '()']);
|
|
321
179
|
}
|
|
322
180
|
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
result += str;
|
|
331
|
-
}
|
|
332
|
-
return result;
|
|
181
|
+
if (content && typeof content === 'object') {
|
|
182
|
+
lines.push('{');
|
|
183
|
+
Object.keys(content).forEach(function (key) {
|
|
184
|
+
lines.push(indentedBlock([key + ': ', formatAny(content[key], depth - 1)]));
|
|
185
|
+
});
|
|
186
|
+
lines.push('}');
|
|
187
|
+
return indentedBlock(lines);
|
|
333
188
|
}
|
|
334
189
|
|
|
335
|
-
|
|
336
|
-
|
|
190
|
+
try {
|
|
191
|
+
return indentedBlock([JSON.stringify(content)]);
|
|
192
|
+
} catch (e) {
|
|
193
|
+
return indentedBlock(['{ Unable to display value ' + String(content) + ' }']);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
|
|
197
|
+
/**
|
|
198
|
+
* @param {(string | HTMLDivElement)[]} lines
|
|
199
|
+
*/
|
|
200
|
+
function indentedBlock(lines) {
|
|
201
|
+
var block = document.createElement('div');
|
|
202
|
+
block.style.paddingLeft = '1em';
|
|
203
|
+
block.style.whiteSpace = 'pre';
|
|
204
|
+
|
|
205
|
+
lines.forEach(function (itm) {
|
|
206
|
+
block.appendChild(typeof itm === 'string' ? document.createTextNode(itm + '\n') : itm);
|
|
337
207
|
});
|
|
208
|
+
return block;
|
|
209
|
+
}
|
|
338
210
|
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
211
|
+
/**
|
|
212
|
+
* All console keys which values are callable
|
|
213
|
+
* @typedef {{ [K in keyof Console]: Console[K] extends (...x: any[]) => any ? K : never}[keyof Console]} ConsoleMethod
|
|
214
|
+
*/
|
|
343
215
|
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
iframe.style.left = '0';
|
|
350
|
-
iframe.style.right = '0';
|
|
351
|
-
iframe.style.bottom = '0';
|
|
352
|
-
iframe.style.zIndex = '99999';
|
|
353
|
-
iframe.style.width = '100%';
|
|
354
|
-
iframe.style.height = '100%';
|
|
355
|
-
iframe.style.border = 'none';
|
|
356
|
-
iframe.style.fontSize = SETTINGS.fontSize;
|
|
357
|
-
iframe.style.fontFamily = "'courier new',monospace";
|
|
358
|
-
iframe.style.pointerEvents = 'none';
|
|
359
|
-
|
|
360
|
-
log = document.createElement('table');
|
|
361
|
-
|
|
362
|
-
log.style.position = 'absolute';
|
|
363
|
-
log.style.top = '0';
|
|
364
|
-
log.style.left = '0';
|
|
365
|
-
log.style.right = '0';
|
|
366
|
-
log.style.bottom = '0';
|
|
367
|
-
log.style.zIndex = '99999';
|
|
368
|
-
if (!SETTINGS.disableShadow) {
|
|
369
|
-
log.style.textShadow = repeatString('0px 0px 6px #000, ', 10) + '0px 0px 8px #000';
|
|
370
|
-
}
|
|
371
|
-
log.style.color = 'white';
|
|
372
|
-
log.style.whiteSpace = 'pre';
|
|
373
|
-
log.style.fontSize = SETTINGS.fontSize;
|
|
216
|
+
/**
|
|
217
|
+
* @param {ConsoleMethod} level
|
|
218
|
+
*/
|
|
219
|
+
function patch(level) {
|
|
220
|
+
var original = window.console[level];
|
|
374
221
|
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
378
|
-
|
|
222
|
+
var func = function () {
|
|
223
|
+
var args = Array.prototype.slice.call(arguments);
|
|
224
|
+
reportToScreen(level, args);
|
|
225
|
+
original.apply(console, args);
|
|
226
|
+
};
|
|
227
|
+
window.console[level] = func.bind(window.console);
|
|
228
|
+
}
|
|
229
|
+
|
|
230
|
+
/**
|
|
231
|
+
* @param {unknown} content
|
|
232
|
+
* @param {number} [depth]
|
|
233
|
+
* @returns {boolean}
|
|
234
|
+
*/
|
|
235
|
+
function isInlineable(content, depth) {
|
|
236
|
+
depth = depth === undefined ? DEFAULT_DEPTH : depth;
|
|
237
|
+
if (depth <= 0) {
|
|
238
|
+
return false;
|
|
239
|
+
}
|
|
379
240
|
|
|
380
|
-
|
|
241
|
+
if (Array.isArray(content)) {
|
|
242
|
+
return content.every(function (c) {
|
|
243
|
+
return isInlineable(c, depth - 1);
|
|
244
|
+
});
|
|
245
|
+
}
|
|
381
246
|
|
|
382
|
-
|
|
383
|
-
|
|
247
|
+
if (isPlainObject(content)) {
|
|
248
|
+
return Object.keys(content).every(function (k) {
|
|
249
|
+
return isInlineable(/** @type {any} */ content[k], depth - 1);
|
|
250
|
+
});
|
|
251
|
+
}
|
|
384
252
|
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
});
|
|
388
|
-
}
|
|
253
|
+
return typeof content === 'boolean' || typeof content === 'number' || typeof content === 'string' || content === null;
|
|
254
|
+
}
|
|
389
255
|
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
256
|
+
/**
|
|
257
|
+
* @param {unknown} value
|
|
258
|
+
* @returns {value is object}
|
|
259
|
+
*/
|
|
260
|
+
function isPlainObject(value) {
|
|
261
|
+
if (typeof value !== 'object' || value === null) {
|
|
262
|
+
return false;
|
|
395
263
|
}
|
|
396
264
|
|
|
397
|
-
var
|
|
265
|
+
var proto = Object.getPrototypeOf(value);
|
|
266
|
+
return proto !== null && Object.getPrototypeOf(proto) === null;
|
|
267
|
+
}
|
|
398
268
|
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
269
|
+
patchedMethods.forEach(function (m) {
|
|
270
|
+
patch(m);
|
|
271
|
+
});
|
|
272
|
+
|
|
273
|
+
function init() {
|
|
274
|
+
if (!preMountQueue) {
|
|
275
|
+
return;
|
|
405
276
|
}
|
|
406
277
|
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
278
|
+
log = document.createElement('table');
|
|
279
|
+
document.body.appendChild(log);
|
|
280
|
+
|
|
281
|
+
log.style.position = 'absolute';
|
|
282
|
+
log.style.top = '0';
|
|
283
|
+
log.style.left = '0';
|
|
284
|
+
log.style.right = '0';
|
|
285
|
+
log.style.bottom = '0';
|
|
286
|
+
log.style.zIndex = '99999';
|
|
287
|
+
log.style.textShadow = '-1px -1px 0 #000, 1px -1px 0 #000, -1px 1px 0 #000, 1px 1px 0 #000';
|
|
288
|
+
log.style.color = 'white';
|
|
289
|
+
log.style.whiteSpace = 'pre';
|
|
290
|
+
log.style.fontFamily = "'courier new',monospace";
|
|
291
|
+
|
|
292
|
+
var q = preMountQueue;
|
|
293
|
+
preMountQueue = null;
|
|
294
|
+
|
|
295
|
+
q.forEach(function (entry) {
|
|
296
|
+
reportToScreen(entry[0], entry[1]);
|
|
297
|
+
});
|
|
298
|
+
}
|
|
299
|
+
|
|
300
|
+
var documentReady = document.readyState === 'complete' || document.readyState === 'interactive';
|
|
301
|
+
|
|
302
|
+
if (documentReady) {
|
|
303
|
+
init();
|
|
304
|
+
} else {
|
|
305
|
+
window.addEventListener('DOMContentLoaded', function () {
|
|
306
|
+
init();
|
|
410
307
|
});
|
|
308
|
+
}
|
|
309
|
+
|
|
310
|
+
window.addEventListener('error', function () {
|
|
311
|
+
var args = Array.prototype.slice.call(arguments);
|
|
312
|
+
reportToScreen('onerror', args);
|
|
313
|
+
});
|
|
411
314
|
|
|
412
|
-
|
|
413
|
-
})();
|
|
315
|
+
reportToScreen('ready', 'On screen console has loaded');
|