unicode-input-toolconverter 0.2.0
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/.babelrc.json +3 -0
- package/.editorconfig +16 -0
- package/.nojekyll +0 -0
- package/.nyc_output/out.json +173804 -0
- package/.nyc_output/processinfo/index.json +1 -0
- package/CHANGES.md +11 -0
- package/COPYING.LESSER.txt +180 -0
- package/COPYING.txt +687 -0
- package/README.md +65 -0
- package/_locales/en-US/messages.json +3126 -0
- package/_locales/hu-HU/messages.json +3126 -0
- package/_locales/pt-BR/messages.json +3126 -0
- package/_locales/sv-SE/messages.json +3126 -0
- package/babel.config.json +5 -0
- package/browser_action/characterSelection.js +91 -0
- package/browser_action/charrefConverters.js +389 -0
- package/browser_action/chartBuild.js +155 -0
- package/browser_action/encodingBehaviors.js +72 -0
- package/browser_action/encodings.js +97 -0
- package/browser_action/entities.js +12 -0
- package/browser_action/entityBehaviors.js +96 -0
- package/browser_action/index-es.html +15 -0
- package/browser_action/index-instrumented.html +16 -0
- package/browser_action/index-pages.html +16 -0
- package/browser_action/index.html +16 -0
- package/browser_action/index.iife.min.js +2 -0
- package/browser_action/index.iife.min.js.map +1 -0
- package/browser_action/index.instrumented.iife.min.js +2 -0
- package/browser_action/index.instrumented.iife.min.js.map +1 -0
- package/browser_action/index.js +95 -0
- package/browser_action/preferences/prefDefaults.js +52 -0
- package/browser_action/service-worker/sw-activateCallback.js +53 -0
- package/browser_action/service-worker/sw-locales.json +6 -0
- package/browser_action/service-worker/sw-resources.json +73 -0
- package/browser_action/service-worker/sw-unicode-data.json +3 -0
- package/browser_action/styles/unicode-dialog.css +391 -0
- package/browser_action/templateUtils/elements.js +12 -0
- package/browser_action/templateUtils/fill.js +3 -0
- package/browser_action/templateUtils/validation.js +6 -0
- package/browser_action/templates/chartBuild.js +185 -0
- package/browser_action/templates/index.js +1304 -0
- package/browser_action/templatesElementCustomization/widgets.js +56 -0
- package/browser_action/unicode/UnicodeConverter.js +793 -0
- package/browser_action/unicode/charrefunicodeDb.js +258 -0
- package/browser_action/unicode/getScriptInfoForCodePoint.js +646 -0
- package/browser_action/unicode/hangul.js +253 -0
- package/browser_action/unicode/lastScriptNames.json +5 -0
- package/browser_action/unicode/parseUnihanFromTextFileStrings.js +56 -0
- package/browser_action/unicode/unicodeFieldInfo.js +120 -0
- package/browser_action/unicode/unicodeScripts.js +4912 -0
- package/browser_action/unicode/unihan.js +129 -0
- package/browser_action/unicode/unihanDbPopulate.js +26 -0
- package/browser_action/unicodecharref.js +1480 -0
- package/browser_action/utils/DOMUtils.js +122 -0
- package/browser_action/utils/FetchUtils.js +19 -0
- package/browser_action/utils/TextUtils.js +28 -0
- package/browser_action/utils/TypedArrayUtils.js +21 -0
- package/browser_action/utils/semicolonSeparatedToArray.js +12 -0
- package/browser_action/utils/setupServiceWorker.js +193 -0
- package/cypress.config.js +21 -0
- package/download/entities/copyright-software-20021231.html +70 -0
- package/download/entities/html5-uppercase.ent +54 -0
- package/download/entities/htmlmathml-f.ent +2164 -0
- package/download/entities/isoamsa.ent +201 -0
- package/download/entities/isoamsb.ent +177 -0
- package/download/entities/isoamsc.ent +77 -0
- package/download/entities/isoamsn.ent +148 -0
- package/download/entities/isoamso.ent +107 -0
- package/download/entities/isoamsr.ent +238 -0
- package/download/entities/isobox.ent +95 -0
- package/download/entities/isocyr1.ent +122 -0
- package/download/entities/isocyr2.ent +81 -0
- package/download/entities/isodia.ent +69 -0
- package/download/entities/isogrk1.ent +104 -0
- package/download/entities/isogrk2.ent +75 -0
- package/download/entities/isogrk3.ent +98 -0
- package/download/entities/isogrk4.ent +98 -0
- package/download/entities/isolat1.ent +117 -0
- package/download/entities/isolat2.ent +176 -0
- package/download/entities/isomfrk.ent +107 -0
- package/download/entities/isomopf.ent +81 -0
- package/download/entities/isomscr.ent +107 -0
- package/download/entities/isonum.ent +131 -0
- package/download/entities/isopub.ent +140 -0
- package/download/entities/isotech.ent +216 -0
- package/download/entities/mmlalias.ent +598 -0
- package/download/entities/mmlextra.ent +154 -0
- package/download/entities/predefined.ent +52 -0
- package/download/entities/w3centities-f.ent +2276 -0
- package/download/entities/xhtml1-lat1.ent +143 -0
- package/download/entities/xhtml1-special.ent +78 -0
- package/download/entities/xhtml1-symbol.ent +171 -0
- package/eslint.config.js +66 -0
- package/icons/openWindow16.png +0 -0
- package/icons/openWindow24.png +0 -0
- package/lgtm.yml +5 -0
- package/lib/background.html +11 -0
- package/lib/background.js +13 -0
- package/lib/overlay.css +6 -0
- package/manifest.json +37 -0
- package/package.json +121 -0
- package/polyfills/browser-polyfill.min.js +8 -0
- package/polyfills/browser-polyfill.min.js.map +1 -0
- package/server.js +61 -0
- package/sw.js +259 -0
- package/tools/entities-import.js +62 -0
- package/tools/findEsResources.js +30 -0
- package/tools/list-locales.js +17 -0
- package/tools/parseUnicodeCharts.js +428 -0
- package/tools/ucd-import.js +24 -0
- package/tools/unicode-charts.html +596 -0
- package/tools/unihan-import.js +72 -0
- package/unicode_copyright.txt +46 -0
- package/vendor/camelcase/index.js +110 -0
- package/vendor/fflate/esm/browser.js +2665 -0
- package/vendor/intl-dom/dist/index.esm.js +2962 -0
- package/vendor/jamilih/dist/jml-es.js +2359 -0
- package/vendor/jquery/dist/jquery.js +10716 -0
- package/vendor/json-6/dist/index.mjs +1783 -0
- package/vendor/miller-columns/dist/index-es.min.js +1 -0
- package/vendor/miller-columns/miller-columns.css +75 -0
- package/vendor/simple-prefs/dist/index.esm.js +286 -0
- package/web-ext-config.cjs +13 -0
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import {$} from '../../vendor/jamilih/dist/jml-es.js';
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {Integer} i
|
|
5
|
+
* @returns {void}
|
|
6
|
+
*/
|
|
7
|
+
function removeViewChildren (i) {
|
|
8
|
+
const view = $('#_detailedView' + i);
|
|
9
|
+
while (view.firstChild) {
|
|
10
|
+
view.firstChild.remove();
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* @param {string} sel
|
|
15
|
+
* @param {Element} item
|
|
16
|
+
* @returns {void}
|
|
17
|
+
*/
|
|
18
|
+
function placeItem (sel, item) {
|
|
19
|
+
const firstchld = $(sel).firstChild;
|
|
20
|
+
if (firstchld !== null) {
|
|
21
|
+
firstchld.replaceWith(item);
|
|
22
|
+
} else {
|
|
23
|
+
$(sel).append(item);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
const // xulns = 'https://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul',
|
|
28
|
+
htmlns = 'https://www.w3.org/1999/xhtml';
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* @param {string} el
|
|
32
|
+
* @returns {Element}
|
|
33
|
+
*/
|
|
34
|
+
function createHTMLElement (el) {
|
|
35
|
+
// return document.createElementNS(htmlns, el);
|
|
36
|
+
return document.createElement(el);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* @param {string} el
|
|
41
|
+
* @returns {Element}
|
|
42
|
+
*/
|
|
43
|
+
|
|
44
|
+
/*
|
|
45
|
+
function createXULElement (el) {
|
|
46
|
+
return document.createElementNS(xulns, el);
|
|
47
|
+
}
|
|
48
|
+
*/
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/for-await...of
|
|
52
|
+
* @see https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/asyncIterator
|
|
53
|
+
*/
|
|
54
|
+
class AsyncStreamIterable {
|
|
55
|
+
/**
|
|
56
|
+
* @param {Stream} stream
|
|
57
|
+
*/
|
|
58
|
+
constructor (stream) {
|
|
59
|
+
this._stream = stream;
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
/**
|
|
63
|
+
* @returns {void}
|
|
64
|
+
* @yields {Integer}
|
|
65
|
+
*/
|
|
66
|
+
async *[Symbol.asyncIterator] () {
|
|
67
|
+
const reader = this._stream.getReader();
|
|
68
|
+
try {
|
|
69
|
+
while (true) {
|
|
70
|
+
// eslint-disable-next-line no-await-in-loop -- Generator
|
|
71
|
+
const {done, value} = await reader.read();
|
|
72
|
+
if (done) {
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
yield value;
|
|
76
|
+
}
|
|
77
|
+
} finally {
|
|
78
|
+
reader.releaseLock();
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* @callback ProgressCallback
|
|
85
|
+
* @param {Float} percentComplete
|
|
86
|
+
* @returns {string}
|
|
87
|
+
*/
|
|
88
|
+
|
|
89
|
+
/**
|
|
90
|
+
* @param {PlainObject} cfg
|
|
91
|
+
* @param {string} cfg.url
|
|
92
|
+
* @param {Element} cfg.progressElement
|
|
93
|
+
* @param {ProgressCallback} cfg.progress
|
|
94
|
+
* @returns {Promise<{
|
|
95
|
+
* receivedLength: Integer, totalBytes: Integer, chunks: Integer[]
|
|
96
|
+
* }>}
|
|
97
|
+
*/
|
|
98
|
+
async function showProgress ({url, progressElement, progress}) {
|
|
99
|
+
const response = await fetch(url);
|
|
100
|
+
const totalBytes = response.headers.get('content-length');
|
|
101
|
+
progressElement.max = totalBytes;
|
|
102
|
+
|
|
103
|
+
const chunks = [];
|
|
104
|
+
let receivedLength = 0;
|
|
105
|
+
for await (const value of new AsyncStreamIterable(response.body)) {
|
|
106
|
+
chunks.push(value);
|
|
107
|
+
receivedLength += value.length;
|
|
108
|
+
|
|
109
|
+
const percentComplete = ((
|
|
110
|
+
receivedLength / totalBytes
|
|
111
|
+
) * 100);
|
|
112
|
+
|
|
113
|
+
progressElement.value = percentComplete;
|
|
114
|
+
progressElement.textContent = progress(percentComplete);
|
|
115
|
+
}
|
|
116
|
+
return {receivedLength, totalBytes, chunks};
|
|
117
|
+
}
|
|
118
|
+
|
|
119
|
+
export {
|
|
120
|
+
removeViewChildren, placeItem, createHTMLElement, htmlns,
|
|
121
|
+
showProgress
|
|
122
|
+
};
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {string} path
|
|
3
|
+
* @returns {JSON}
|
|
4
|
+
*/
|
|
5
|
+
const getJSON = async (path) => {
|
|
6
|
+
const response = await fetch(path);
|
|
7
|
+
return await response.json();
|
|
8
|
+
};
|
|
9
|
+
|
|
10
|
+
/**
|
|
11
|
+
* @param {string} path
|
|
12
|
+
* @returns {JSON}
|
|
13
|
+
*/
|
|
14
|
+
const getText = async (path) => {
|
|
15
|
+
const response = await fetch(path);
|
|
16
|
+
return await response.text();
|
|
17
|
+
};
|
|
18
|
+
|
|
19
|
+
export {getJSON, getText};
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Todo: Move to own library
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* @param {object} [cfg]
|
|
5
|
+
* @param {HTMLTextAreaElement|HTMLInputElement} cfg.textReceptacle
|
|
6
|
+
* @param {string} cfg.value
|
|
7
|
+
* @param {boolean} [cfg.focusIn]
|
|
8
|
+
* @returns {void}
|
|
9
|
+
*/
|
|
10
|
+
function insertIntoOrOverExisting ({
|
|
11
|
+
textReceptacle, value, focusIn = true
|
|
12
|
+
} = {}) {
|
|
13
|
+
const {length: len} = textReceptacle.value;
|
|
14
|
+
const start = textReceptacle.selectionStart;
|
|
15
|
+
const end = textReceptacle.selectionEnd;
|
|
16
|
+
|
|
17
|
+
if (focusIn) {
|
|
18
|
+
textReceptacle.focus();
|
|
19
|
+
}
|
|
20
|
+
const pre = textReceptacle.value.slice(0, Math.max(0, start));
|
|
21
|
+
const post = textReceptacle.value.slice(end, len);
|
|
22
|
+
textReceptacle.value = pre + value + post;
|
|
23
|
+
|
|
24
|
+
textReceptacle.selectionStart = pre.length + value.length;
|
|
25
|
+
textReceptacle.selectionEnd = pre.length + value.length;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
export {insertIntoOrOverExisting};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @param {PlainObject} cfg
|
|
3
|
+
* @param {Integer} cfg.receivedLength
|
|
4
|
+
* @param {Integer[]} cfg.chunks
|
|
5
|
+
* @returns {Uint8Array}
|
|
6
|
+
*/
|
|
7
|
+
function joinChunks ({
|
|
8
|
+
chunks,
|
|
9
|
+
receivedLength
|
|
10
|
+
}) {
|
|
11
|
+
// Combine into single `Uint8Array`
|
|
12
|
+
const compressed = new Uint8Array(receivedLength);
|
|
13
|
+
let pos = 0;
|
|
14
|
+
for (const chunk of chunks) {
|
|
15
|
+
compressed.set(chunk, pos);
|
|
16
|
+
pos += chunk.length;
|
|
17
|
+
}
|
|
18
|
+
return compressed;
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
export {joinChunks};
|
|
@@ -0,0 +1,193 @@
|
|
|
1
|
+
/* eslint-disable no-console -- Debugging */
|
|
2
|
+
/**
|
|
3
|
+
* @param {string} [serviceWorkerPath]
|
|
4
|
+
* @returns {Promise<void>}
|
|
5
|
+
*/
|
|
6
|
+
async function setupServiceWorker (
|
|
7
|
+
serviceWorkerPath = '../sw.js'
|
|
8
|
+
) {
|
|
9
|
+
let registration = await navigator.serviceWorker.getRegistration(
|
|
10
|
+
serviceWorkerPath
|
|
11
|
+
);
|
|
12
|
+
if (!registration ||
|
|
13
|
+
// Not sure these are possible here:
|
|
14
|
+
registration.installing || registration.waiting || registration.active
|
|
15
|
+
) {
|
|
16
|
+
const persistent = await navigator.storage.persist();
|
|
17
|
+
if (!persistent) {
|
|
18
|
+
console.log('Denied persistent storage');
|
|
19
|
+
}
|
|
20
|
+
try {
|
|
21
|
+
registration = await navigator.serviceWorker.register(
|
|
22
|
+
serviceWorkerPath,
|
|
23
|
+
{
|
|
24
|
+
type: 'module'
|
|
25
|
+
}
|
|
26
|
+
);
|
|
27
|
+
} catch (err) {
|
|
28
|
+
console.log('err', err);
|
|
29
|
+
alert(`
|
|
30
|
+
There was an error during registration (for offline ability).
|
|
31
|
+
Please refresh the page if you wish to reattempt.
|
|
32
|
+
`);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
// "The browser checks for updates automatically after navigations and
|
|
38
|
+
// functional events, but you can also trigger them manually"
|
|
39
|
+
// -- https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#manual_updates
|
|
40
|
+
const hourly = 60 * 60 * 1000;
|
|
41
|
+
setInterval(() => {
|
|
42
|
+
registration.update();
|
|
43
|
+
}, hourly);
|
|
44
|
+
|
|
45
|
+
registration.addEventListener('updatefound', (/* e */) => {
|
|
46
|
+
const newWorker = registration.installing;
|
|
47
|
+
|
|
48
|
+
// statechange won't catch this installing event as already installing
|
|
49
|
+
|
|
50
|
+
newWorker.addEventListener('statechange', async () => {
|
|
51
|
+
const {state} = newWorker;
|
|
52
|
+
switch (state) {
|
|
53
|
+
case 'installing':
|
|
54
|
+
console.log('Installing new worker');
|
|
55
|
+
break;
|
|
56
|
+
case 'installed':
|
|
57
|
+
console.log('Installation status', state);
|
|
58
|
+
/* alert(
|
|
59
|
+
`
|
|
60
|
+
A new version of this offlinable app has been downloaded.
|
|
61
|
+
|
|
62
|
+
If you have work to complete in this tab, you can dismiss
|
|
63
|
+
this dialog now and continue working with the old version.
|
|
64
|
+
|
|
65
|
+
However, when you are finished, you should close this tab
|
|
66
|
+
and any other old tabs for this site in order to be able to
|
|
67
|
+
begin using the new version.
|
|
68
|
+
`
|
|
69
|
+
); */
|
|
70
|
+
break;
|
|
71
|
+
case 'redundant': // discarded. Either failed install, or it's been
|
|
72
|
+
// replaced by a newer version
|
|
73
|
+
// Shouldn't be replaced since we aren't skipping waiting/claiming,
|
|
74
|
+
console.log('Installation status', state);
|
|
75
|
+
// Todo: Try updating again if get redundant here
|
|
76
|
+
await alert(
|
|
77
|
+
`
|
|
78
|
+
There was an error during installation (to allow offline/speeded
|
|
79
|
+
cache use).
|
|
80
|
+
|
|
81
|
+
If you have work to complete in this tab, you can dismiss
|
|
82
|
+
this dialog now and continue working with the old version.
|
|
83
|
+
|
|
84
|
+
However, when you are finished, you may wish to close this tab
|
|
85
|
+
and any other old tabs for this site in order to try again
|
|
86
|
+
for offline installation.
|
|
87
|
+
`
|
|
88
|
+
);
|
|
89
|
+
break;
|
|
90
|
+
// These shouldn't occur as we are not skipping waiting (?)
|
|
91
|
+
case 'activating':
|
|
92
|
+
console.log('Activating new worker');
|
|
93
|
+
break;
|
|
94
|
+
case 'activated':
|
|
95
|
+
console.log('Activated new worker');
|
|
96
|
+
break;
|
|
97
|
+
default:
|
|
98
|
+
throw new Error(`Unknown worker update state: ${state}`);
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
});
|
|
102
|
+
|
|
103
|
+
navigator.serviceWorker.addEventListener('message', ({data}) => {
|
|
104
|
+
const {message, type, name, errorType} = data;
|
|
105
|
+
console.log('msg1', message, registration);
|
|
106
|
+
switch (type) {
|
|
107
|
+
case 'log':
|
|
108
|
+
console.log(message);
|
|
109
|
+
return;
|
|
110
|
+
case 'beginInstall':
|
|
111
|
+
console.log('Install: Begun...');
|
|
112
|
+
return;
|
|
113
|
+
case 'finishedInstall':
|
|
114
|
+
console.log('Install: Finished...');
|
|
115
|
+
return;
|
|
116
|
+
case 'beginActivate': // Just use `e.source`?
|
|
117
|
+
console.log('Activate: Caching finished');
|
|
118
|
+
console.log('Activate: Begin database resources storage...');
|
|
119
|
+
// r.active is also available for mere "activating"
|
|
120
|
+
// as we are now
|
|
121
|
+
return;
|
|
122
|
+
case 'finishedActivate':
|
|
123
|
+
console.log('Activate: Finished...');
|
|
124
|
+
// Still not controlled even after activation is
|
|
125
|
+
// ready, so refresh page
|
|
126
|
+
|
|
127
|
+
// Seems to be working (unlike `location.replace`),
|
|
128
|
+
// but if problems, could add `true` but as forces
|
|
129
|
+
// from server not cache, what will happen here? (also
|
|
130
|
+
// `controller` may be `null` with force-reload)
|
|
131
|
+
location.reload();
|
|
132
|
+
// location.replace(location); // Avoids adding to browser history)
|
|
133
|
+
return;
|
|
134
|
+
case 'error':
|
|
135
|
+
console.log(
|
|
136
|
+
message + `${
|
|
137
|
+
errorType === 'dbError' ? `Database error ${name}` : ''
|
|
138
|
+
}; trying again...`
|
|
139
|
+
);
|
|
140
|
+
break;
|
|
141
|
+
default:
|
|
142
|
+
console.error('Unexpected type', type);
|
|
143
|
+
break;
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
|
|
147
|
+
const worker = registration.installing || registration.waiting ||
|
|
148
|
+
registration.active;
|
|
149
|
+
switch (worker.state) {
|
|
150
|
+
case 'installing':
|
|
151
|
+
// If it fails, will instead be `redundant`; but will try again:
|
|
152
|
+
// 1. automatically (?) per https://developers.google.com/web/fundamentals/primers/service-workers/#the_service_worker_life_cycle
|
|
153
|
+
// 2. upon reattempting registration (?) per https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API/Using_Service_Workers
|
|
154
|
+
console.log('installing1');
|
|
155
|
+
break;
|
|
156
|
+
case 'installed':
|
|
157
|
+
// Waiting ensures only one version of our service worker active
|
|
158
|
+
// No dedicated "waiting" state so handle here
|
|
159
|
+
// Inform user that currently waiting for old tabs (and this one) to
|
|
160
|
+
// close so install can proceed
|
|
161
|
+
console.log('installed1');
|
|
162
|
+
break;
|
|
163
|
+
case 'activating':
|
|
164
|
+
// May be called more than once in case fails?
|
|
165
|
+
// May not be activated but only activating so need action in case no
|
|
166
|
+
// other tabs open to do so?
|
|
167
|
+
alert(`
|
|
168
|
+
Please wait for a short while as we work to update to a new version.
|
|
169
|
+
`);
|
|
170
|
+
break;
|
|
171
|
+
case 'activated': {
|
|
172
|
+
// We should be able to use the following to distinguish when
|
|
173
|
+
// active but force-reloaded (will be `null` unlike
|
|
174
|
+
// `r.active` apparently)
|
|
175
|
+
const {controller} = navigator.serviceWorker;
|
|
176
|
+
console.log('activated1', controller);
|
|
177
|
+
break;
|
|
178
|
+
} case 'redundant':
|
|
179
|
+
// Either:
|
|
180
|
+
// 1. A new service worker is replacing the current service worker (though
|
|
181
|
+
// presumably only if `skipWaiting`)
|
|
182
|
+
// 2. The current service worker is being discarded due to an install
|
|
183
|
+
// failure
|
|
184
|
+
// May have been `r.installing` (?)
|
|
185
|
+
// Todo: Could try registering again later (this will reload after an alert)
|
|
186
|
+
console.log('redundant1');
|
|
187
|
+
break;
|
|
188
|
+
default:
|
|
189
|
+
break;
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
export default setupServiceWorker;
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import {defineConfig} from 'cypress';
|
|
2
|
+
|
|
3
|
+
import plugins from './cypress/plugins/index.js';
|
|
4
|
+
|
|
5
|
+
export default defineConfig({
|
|
6
|
+
env: {
|
|
7
|
+
codeCoverage: {
|
|
8
|
+
url: 'http://localhost:8000/__coverage__'
|
|
9
|
+
}
|
|
10
|
+
},
|
|
11
|
+
chromeWebSecurity: false,
|
|
12
|
+
video: false,
|
|
13
|
+
e2e: {
|
|
14
|
+
// We've imported your old cypress plugins here.
|
|
15
|
+
// You may want to clean this up later by importing these.
|
|
16
|
+
setupNodeEvents (on, config) {
|
|
17
|
+
return plugins(on, config);
|
|
18
|
+
},
|
|
19
|
+
baseUrl: 'http://localhost:8000'
|
|
20
|
+
}
|
|
21
|
+
});
|
|
@@ -0,0 +1,70 @@
|
|
|
1
|
+
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
|
2
|
+
<html xml:lang="en" xmlns="http://www.w3.org/1999/xhtml" lang="en"><head>
|
|
3
|
+
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><meta name="generator" content="HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org"><title>W3C Software Notice and License</title></head><body id="www-w3-org" class="w3c_public w3c_javascript w3c_screen"><div id="w3c_container">
|
|
4
|
+
|
|
5
|
+
|
|
6
|
+
<div id="w3c_main">
|
|
7
|
+
<h1 class="title">W3C Software Notice and License</h1>
|
|
8
|
+
<div id="w3c_content_body">
|
|
9
|
+
<div class="line">
|
|
10
|
+
<p class="intro tPadding">This work (and included software, documentation such as READMEs, or other
|
|
11
|
+
related items) is being provided by the copyright holders under the following
|
|
12
|
+
license.</p>
|
|
13
|
+
<h2>License</h2>
|
|
14
|
+
|
|
15
|
+
<p class="tPadding">
|
|
16
|
+
By obtaining, using and/or copying this work, you (the licensee)
|
|
17
|
+
agree that you have read, understood, and will comply with the following
|
|
18
|
+
terms and conditions.</p>
|
|
19
|
+
|
|
20
|
+
<p>Permission to copy, modify, and distribute this software and its
|
|
21
|
+
documentation, with or without modification, for any purpose and without
|
|
22
|
+
fee or royalty is hereby granted, provided that you include the following on
|
|
23
|
+
ALL copies of the software and documentation or portions thereof, including
|
|
24
|
+
modifications:</p>
|
|
25
|
+
|
|
26
|
+
<ul class="show_items"><li>The full text of this NOTICE in a location viewable to users of the
|
|
27
|
+
redistributed or derivative work.</li><li>Any pre-existing intellectual property disclaimers, notices, or terms
|
|
28
|
+
and conditions. If none exist, the <a href="http://www.w3.org/Consortium/Legal/2002/copyright-software-short-notice-20021231.html">W3C Software Short
|
|
29
|
+
Notice</a> should be included (hypertext is preferred, text is permitted)
|
|
30
|
+
within the body of any redistributed or derivative code.</li><li>Notice of any changes or modifications to the files, including the date
|
|
31
|
+
changes were made. (We recommend you provide URIs to the location from
|
|
32
|
+
which the code is derived.)</li></ul>
|
|
33
|
+
|
|
34
|
+
<h2>Disclaimers</h2>
|
|
35
|
+
|
|
36
|
+
<p>THIS SOFTWARE AND DOCUMENTATION IS PROVIDED "AS IS," AND COPYRIGHT HOLDERS
|
|
37
|
+
MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING BUT NOT
|
|
38
|
+
LIMITED TO, WARRANTIES OF MERCHANTABILITY OR FITNESS FOR ANY PARTICULAR
|
|
39
|
+
PURPOSE OR THAT THE USE OF THE SOFTWARE OR DOCUMENTATION WILL NOT INFRINGE
|
|
40
|
+
ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS.</p>
|
|
41
|
+
|
|
42
|
+
<p>COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR
|
|
43
|
+
CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE SOFTWARE OR
|
|
44
|
+
DOCUMENTATION.</p>
|
|
45
|
+
|
|
46
|
+
<p>The name and trademarks of copyright holders may NOT be used in
|
|
47
|
+
advertising or publicity pertaining to the software without specific, written
|
|
48
|
+
prior permission. Title to copyright in this software and any associated
|
|
49
|
+
documentation will at all times remain with copyright holders.</p>
|
|
50
|
+
|
|
51
|
+
<h2>Notes</h2>
|
|
52
|
+
|
|
53
|
+
<p>This version: http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231</p>
|
|
54
|
+
|
|
55
|
+
<p>This formulation of W3C's notice and license became active on December 31
|
|
56
|
+
2002. This version removes the copyright ownership notice such that this
|
|
57
|
+
license can be used with materials other than those owned by the W3C,
|
|
58
|
+
reflects that ERCIM is now a host of the W3C, includes references to this
|
|
59
|
+
specific dated version of the license, and removes the ambiguous grant of
|
|
60
|
+
"use". Otherwise, this version is the same as the <a href="http://www.w3.org/Consortium/Legal/copyright-software-19980720">previous
|
|
61
|
+
version</a> and is written so as to preserve the <a href="http://www.gnu.org/philosophy/license-list.html#GPLCompatibleLicenses">Free
|
|
62
|
+
Software Foundation's assessment of GPL compatibility</a> and <a href="http://www.opensource.org/licenses/W3C.php">OSI's certification</a>
|
|
63
|
+
under the <a href="http://www.opensource.org/docs/definition.php">Open Source
|
|
64
|
+
Definition</a>.</p>
|
|
65
|
+
</div>
|
|
66
|
+
</div>
|
|
67
|
+
</div>
|
|
68
|
+
</div>
|
|
69
|
+
</div>
|
|
70
|
+
</body></html>
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
|
|
2
|
+
<!--
|
|
3
|
+
File html5-uppercase.ent produced by the XSL script entities.xsl
|
|
4
|
+
from input data in unicode.xml.
|
|
5
|
+
|
|
6
|
+
Copyright 1998 - 2011 W3C.
|
|
7
|
+
|
|
8
|
+
Use and distribution of this code are permitted under the terms of
|
|
9
|
+
either of the following two licences:
|
|
10
|
+
|
|
11
|
+
1) W3C Software Notice and License.
|
|
12
|
+
http://www.w3.org/Consortium/Legal/2002/copyright-software-20021231.html
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
2) The license used for the WHATWG HTML specification,
|
|
16
|
+
which states, in full:
|
|
17
|
+
You are granted a license to use, reproduce and create derivative
|
|
18
|
+
works of this document.
|
|
19
|
+
|
|
20
|
+
|
|
21
|
+
Please report any errors to David Carlisle
|
|
22
|
+
via the public W3C list www-math@w3.org.
|
|
23
|
+
|
|
24
|
+
The numeric character values assigned to each entity
|
|
25
|
+
(should) match the Unicode assignments in Unicode 5.x.
|
|
26
|
+
|
|
27
|
+
-->
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
<!--
|
|
31
|
+
|
|
32
|
+
Public identifier: -//W3C//ENTITIES uppercase aliases for HTML//EN//XML
|
|
33
|
+
System identifier: http://www.w3.org/2003/entities/2007/html5-uppercase.ent
|
|
34
|
+
|
|
35
|
+
The public identifier should always be used verbatim.
|
|
36
|
+
The system identifier may be changed to suit local requirements.
|
|
37
|
+
|
|
38
|
+
Typical invocation:
|
|
39
|
+
|
|
40
|
+
<!ENTITY % html5-uppercase PUBLIC
|
|
41
|
+
"-//W3C//ENTITIES uppercase aliases for HTML//EN//XML"
|
|
42
|
+
"http://www.w3.org/2003/entities/2007/html5-uppercase.ent"
|
|
43
|
+
>
|
|
44
|
+
%html5-uppercase;
|
|
45
|
+
|
|
46
|
+
-->
|
|
47
|
+
|
|
48
|
+
<!ENTITY AMP "&#38;" ><!--AMPERSAND -->
|
|
49
|
+
<!ENTITY COPY "©" ><!--COPYRIGHT SIGN -->
|
|
50
|
+
<!ENTITY GT ">" ><!--GREATER-THAN SIGN -->
|
|
51
|
+
<!ENTITY LT "&#60;" ><!--LESS-THAN SIGN -->
|
|
52
|
+
<!ENTITY QUOT """ ><!--QUOTATION MARK -->
|
|
53
|
+
<!ENTITY REG "®" ><!--REGISTERED SIGN -->
|
|
54
|
+
<!ENTITY TRADE "™" ><!--TRADE MARK SIGN -->
|