CETEIcean 1.3.0 → 1.6.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/.vscode/settings.json +6 -0
- package/README.md +8 -0
- package/package.json +6 -5
- package/rollup.config.js +2 -2
- package/src/CETEI.js +22 -8
- package/src/behaviors.js +5 -0
- package/src/dom.js +4 -0
- package/src/utilities.js +6 -1
- package/test/TCW22.html +16 -2
- package/test/addBehaviorTest.html +2 -2
- package/test/tcw20.html +960 -0
- package/tutorial_en/README.md +3 -1
- package/tutorial_es/README.md +104 -25
- package/tutorial_es/screenshots/ceteicean_es1.png +0 -0
- package/tutorial_es/screenshots/ceteicean_es2.png +0 -0
- package/tutorial_es/screenshots/ceteicean_es3.png +0 -0
- package/tutorial_es/screenshots/ceteicean_es4.png +0 -0
- package/tutorial_es/screenshots/ceteicean_es5.png +0 -0
- package/xslt/make-CETEIcean-3.xsl +81 -0
- package/xslt/make-CETEIcean.xsl +2 -2
package/README.md
CHANGED
@@ -44,6 +44,14 @@ CETEIcean.getHTML5("URL_TO_YOUR_TEI.xml", function(data) {
|
|
44
44
|
})
|
45
45
|
```
|
46
46
|
|
47
|
+
By default, CETEIcean saves and restores the scroll position for a document via a URL fragment. To turn this behavior off, particularly when using CETEIcean for Server Side Rendering, you can set the `ignoreFragmentId` option to `true`:
|
48
|
+
|
49
|
+
```js
|
50
|
+
new CETEI({
|
51
|
+
ignoreFragmentId: true
|
52
|
+
})
|
53
|
+
```
|
54
|
+
|
47
55
|
### Other methods
|
48
56
|
|
49
57
|
#### getHTML5( url, callback, perElementFn )
|
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "CETEIcean",
|
3
|
-
"version": "1.
|
3
|
+
"version": "1.6.0",
|
4
4
|
"description": "JavaScript library to load a TEI XML document and register it as HTML5 custom elements.",
|
5
5
|
"main": "src/CETEI.js",
|
6
6
|
"keywords": [
|
@@ -16,12 +16,13 @@
|
|
16
16
|
"url": "https://github.com/TEIC/CETEIcean.git"
|
17
17
|
},
|
18
18
|
"devDependencies": {
|
19
|
-
"babel
|
20
|
-
"babel
|
19
|
+
"@babel/core": "^7.15.5",
|
20
|
+
"@babel/preset-env": "7.15.6",
|
21
|
+
"babel-preset-env": "^1.7.0",
|
21
22
|
"http-server": "^0.12.3",
|
22
23
|
"onchange": "^6.1.1",
|
23
|
-
"rollup": "
|
24
|
-
"rollup
|
24
|
+
"rollup": "^2.57.0",
|
25
|
+
"@rollup/plugin-babel": "^5.3.0",
|
25
26
|
"rollup-plugin-terser": "1.0.1",
|
26
27
|
"terser": "^3.17.0"
|
27
28
|
},
|
package/rollup.config.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
import babel from 'rollup
|
1
|
+
import babel from '@rollup/plugin-babel';
|
2
2
|
import { terser } from 'rollup-plugin-terser';
|
3
3
|
|
4
4
|
export default {
|
@@ -16,7 +16,7 @@ export default {
|
|
16
16
|
"modules": false,
|
17
17
|
"targets": {
|
18
18
|
"chrome": 65,
|
19
|
-
"safari":
|
19
|
+
"safari": 13,
|
20
20
|
"firefox": 60
|
21
21
|
}
|
22
22
|
}]
|
package/src/CETEI.js
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
import defaultBehaviors from './defaultBehaviors';
|
2
2
|
import * as utilities from './utilities';
|
3
3
|
import {addBehaviors, addBehavior, applyBehaviors, removeBehavior} from './behaviors';
|
4
|
-
import {learnElementNames} from './dom';
|
4
|
+
import {learnElementNames, learnCustomElementNames} from './dom';
|
5
5
|
|
6
6
|
class CETEI {
|
7
7
|
constructor(options){
|
@@ -30,6 +30,7 @@ class CETEI {
|
|
30
30
|
this.hasStyle = false;
|
31
31
|
this.prefixDefs = [];
|
32
32
|
this.debug = this.options.debug === true ? true : false;
|
33
|
+
this.discardContent = this.options.discardContent === true ? true : false;
|
33
34
|
|
34
35
|
if (this.options.base) {
|
35
36
|
this.base = this.options.base;
|
@@ -50,6 +51,7 @@ class CETEI {
|
|
50
51
|
window.removeEventListener("ceteiceanload", CETEI.restorePosition);
|
51
52
|
}
|
52
53
|
}
|
54
|
+
|
53
55
|
}
|
54
56
|
|
55
57
|
/*
|
@@ -95,8 +97,8 @@ class CETEI {
|
|
95
97
|
*/
|
96
98
|
makeHTML5(XML, callback, perElementFn){
|
97
99
|
// XML is assumed to be a string
|
98
|
-
|
99
|
-
return this.domToHTML5(XML_dom, callback, perElementFn);
|
100
|
+
this.XML_dom = ( new DOMParser() ).parseFromString(XML, "text/xml");
|
101
|
+
return this.domToHTML5(this.XML_dom, callback, perElementFn);
|
100
102
|
}
|
101
103
|
|
102
104
|
/*
|
@@ -215,6 +217,17 @@ class CETEI {
|
|
215
217
|
}
|
216
218
|
}
|
217
219
|
|
220
|
+
/*
|
221
|
+
Convenience method for HTML pages containing pre-processed CETEIcean Custom
|
222
|
+
Elements. Usage:
|
223
|
+
const c = new CETEI();
|
224
|
+
c.processPage();
|
225
|
+
*/
|
226
|
+
processPage() {
|
227
|
+
this.els = learnCustomElementNames(document);
|
228
|
+
this.applyBehaviors();
|
229
|
+
}
|
230
|
+
|
218
231
|
/*
|
219
232
|
To change a namespace -> prefix mapping, the namespace must first be
|
220
233
|
unset. Takes a namespace URI. In order to process a TEI P4 document, e.g.,
|
@@ -261,7 +274,11 @@ append(fn, elt) {
|
|
261
274
|
}
|
262
275
|
|
263
276
|
appendBasic(elt, content) {
|
264
|
-
|
277
|
+
if (this.discardContent) {
|
278
|
+
elt.innerHTML = "";
|
279
|
+
} else {
|
280
|
+
utilities.hideContent(elt, true);
|
281
|
+
}
|
265
282
|
elt.appendChild(content);
|
266
283
|
}
|
267
284
|
|
@@ -358,10 +375,7 @@ insert(elt, strings) {
|
|
358
375
|
// If we have before and after tags have them parsed by
|
359
376
|
// .innerHTML and then add the content to the resulting child
|
360
377
|
if (strings[0].match("<[^>]+>") && strings[1] && strings[1].match("<[^>]+>")) {
|
361
|
-
span.innerHTML = strings[0] + (strings[1]?strings[1]:"");
|
362
|
-
for (let node of Array.from(elt.childNodes)) {
|
363
|
-
span.firstElementChild.appendChild(node.cloneNode(true));
|
364
|
-
}
|
378
|
+
span.innerHTML = strings[0] + elt.innerHTML + (strings[1]?strings[1]:"");
|
365
379
|
} else {
|
366
380
|
span.innerHTML = strings[0];
|
367
381
|
span.setAttribute("data-before", strings[0].replace(/<[^>]+>/g,"").length);
|
package/src/behaviors.js
CHANGED
@@ -19,6 +19,11 @@ export function addBehaviors(bhvs) {
|
|
19
19
|
}
|
20
20
|
}
|
21
21
|
}
|
22
|
+
if (bhvs["functions"]) {
|
23
|
+
for (let fn of Object.keys(bhvs["functions"])) {
|
24
|
+
this.utilities[fn] = bhvs["functions"][fn];
|
25
|
+
}
|
26
|
+
}
|
22
27
|
if (bhvs["handlers"]) {
|
23
28
|
console.log("Behavior handlers are no longer used.")
|
24
29
|
}
|
package/src/dom.js
CHANGED
@@ -13,4 +13,8 @@ export function learnElementNames(XML_dom, namespaces) {
|
|
13
13
|
// Add the root element to the array
|
14
14
|
els.add(qname(root));
|
15
15
|
return els
|
16
|
+
}
|
17
|
+
|
18
|
+
export function learnCustomElementNames(HTML_dom) {
|
19
|
+
return Array.from(HTML_dom.querySelectorAll("*[data-origname]"), e => e.localName.replace(/(\w+)-.+/,"$1:") + e.getAttribute("data-origname"));
|
16
20
|
}
|
package/src/utilities.js
CHANGED
@@ -71,6 +71,12 @@ export function hideContent(elt, rewriteIds = true) {
|
|
71
71
|
hidden.setAttribute("data-original", "");
|
72
72
|
for (let node of Array.from(elt.childNodes)) {
|
73
73
|
if (node !== hidden) {
|
74
|
+
if (node.nodeType === Node.ELEMENT_NODE) {
|
75
|
+
node.setAttribute("data-processed", "");
|
76
|
+
for (let e of node.querySelectorAll("*")) {
|
77
|
+
e.setAttribute("data-processed", "");
|
78
|
+
}
|
79
|
+
}
|
74
80
|
hidden.appendChild(elt.removeChild(node));
|
75
81
|
}
|
76
82
|
}
|
@@ -202,7 +208,6 @@ export function serialize(el, stripElt, ws) {
|
|
202
208
|
return str;
|
203
209
|
}
|
204
210
|
|
205
|
-
|
206
211
|
export function unEscapeEntities(str) {
|
207
212
|
return str.replace(/>/, ">")
|
208
213
|
.replace(/"/, "\"")
|
package/test/TCW22.html
CHANGED
@@ -2,11 +2,25 @@
|
|
2
2
|
<html>
|
3
3
|
<head>
|
4
4
|
<meta charset="utf-8">
|
5
|
-
<link rel="stylesheet" href="
|
5
|
+
<link rel="stylesheet" href="https://teic.github.io/css/tei.css" title="no title" charset="utf-8">
|
6
6
|
<script src="https://cdn.polyfill.io/v1/polyfill.js?features=modernizr:promises&unknown=polyfill" charset="utf-8"></script>
|
7
7
|
<script src="../dist/CETEI.js" charset="utf-8"></script>
|
8
8
|
<script type="text/javascript">
|
9
|
-
|
9
|
+
let ct = new CETEI();
|
10
|
+
let b = {
|
11
|
+
"tei": {
|
12
|
+
"title": [
|
13
|
+
["tei-titlestmt>tei-title", function(e) {
|
14
|
+
let head = document.createElement("tei-head");
|
15
|
+
head.innerHTML = e.innerHTML;
|
16
|
+
let body = this.dom.querySelector("tei-body");
|
17
|
+
body.insertBefore(head, body.firstElementChild);
|
18
|
+
}]
|
19
|
+
]
|
20
|
+
}
|
21
|
+
}
|
22
|
+
ct.addBehaviors(b);
|
23
|
+
ct.getHTML5('https://raw.githubusercontent.com/TEIC/Documentation/master/TCW/tcw22.xml?new=' + Date.now(), function(data) {
|
10
24
|
document.getElementsByTagName("body")[0].appendChild(data);
|
11
25
|
});
|
12
26
|
</script>
|
@@ -19,7 +19,7 @@
|
|
19
19
|
* is an HTML element. The function names must match the name of the
|
20
20
|
* element they will be applied to.
|
21
21
|
***********************************/
|
22
|
-
c.addBehaviors({"
|
22
|
+
c.addBehaviors({"tei":{
|
23
23
|
// Overrides the default ptr behavior, displaying a short link
|
24
24
|
"ptr": function(elt) {
|
25
25
|
var link = document.createElement("a");
|
@@ -34,7 +34,7 @@
|
|
34
34
|
return b;
|
35
35
|
},
|
36
36
|
// Inserts the first array element before tei:add, and the second, after.
|
37
|
-
"add": ["
|
37
|
+
"add": ["<b>`","´</b>"]
|
38
38
|
}});
|
39
39
|
c.getHTML5('testTEI.xml', function(data) {
|
40
40
|
document.getElementById("TEI").innerHTML = "";
|