CETEIcean 1.3.0 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- 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 = "";
|