highmark-markdown 1.0.183 → 1.0.185

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.
Files changed (266) hide show
  1. package/example.js +10243 -6411
  2. package/lib/constants.js +9 -1
  3. package/lib/defaultMarkdownStyle.js +2 -2
  4. package/lib/example/importer.js +3 -3
  5. package/lib/example/indexOptions.js +1 -98
  6. package/lib/example/view/div/container/markdown.js +2 -2
  7. package/lib/example/view/div/container/markdownStyle.js +2 -2
  8. package/lib/example/view/div/container.js +2 -2
  9. package/lib/example/view/div/pageButtons.js +7 -4
  10. package/lib/example/view/div/preview.js +1 -5
  11. package/lib/example/view/div/sizeable/left.js +2 -2
  12. package/lib/example/view/div/tabButtons/right.js +5 -5
  13. package/lib/example/view/textarea/markdown.js +2 -2
  14. package/lib/example/view/textarea/markdownStyle.js +2 -2
  15. package/lib/example/view/textarea/parseTree/html.js +2 -2
  16. package/lib/example/view/textarea/plainText.js +1 -5
  17. package/lib/example/view/xmp.js +1 -5
  18. package/lib/example/view.js +51 -48
  19. package/lib/index/list.js +4 -4
  20. package/lib/index.js +2 -2
  21. package/lib/map/node/html.js +13 -7
  22. package/lib/map/node/markdown.js +5 -24
  23. package/lib/markdown/bnf.js +2 -2
  24. package/lib/node/html/anchor.js +49 -64
  25. package/lib/node/html/blockLine.js +23 -4
  26. package/lib/node/{markdown/paragraph.js → html/directive/contents.js} +20 -14
  27. package/lib/node/{markdown/strongText.js → html/directive/footnotes.js} +20 -14
  28. package/lib/node/{markdown/emphasisedText.js → html/directive/index.js} +20 -14
  29. package/lib/node/{markdown/inlineText.js → html/directive/pageNumber.js} +20 -14
  30. package/lib/node/html/division.js +118 -7
  31. package/lib/node/html/footnote.js +4 -10
  32. package/lib/node/html/heading/index.js +71 -10
  33. package/lib/node/html/heading/primary.js +8 -7
  34. package/lib/node/html/heading/quaternary.js +8 -7
  35. package/lib/node/html/heading/secondary.js +8 -7
  36. package/lib/node/html/heading/tertiary.js +8 -7
  37. package/lib/node/html/heading.js +165 -0
  38. package/lib/node/html/image.js +7 -6
  39. package/lib/node/html/item/contents.js +22 -8
  40. package/lib/node/html/item/footnote.js +144 -0
  41. package/lib/node/html/item/index.js +27 -43
  42. package/lib/node/html/line.js +55 -2
  43. package/lib/node/html/link/contents.js +34 -14
  44. package/lib/node/html/link/email.js +32 -8
  45. package/lib/node/html/link/footnote.js +95 -5
  46. package/lib/node/html/link/hyper.js +32 -8
  47. package/lib/node/html/link/index.js +66 -35
  48. package/lib/node/html/list/contents.js +22 -8
  49. package/lib/node/html/list/footnotes.js +39 -12
  50. package/lib/node/html/list/index.js +22 -8
  51. package/lib/node/html/pageNumber.js +70 -23
  52. package/lib/node/html/{item/footnotes.js → reference.js} +14 -14
  53. package/lib/node/{markdown/heading/primary.js → html/text/comma.js} +38 -28
  54. package/lib/node/html/text/index.js +146 -0
  55. package/lib/node/html/text/stronglyEmphasised.js +15 -8
  56. package/lib/node/html/text.js +43 -5
  57. package/lib/node/html/topmost.js +67 -1
  58. package/lib/node/html.js +77 -4
  59. package/lib/node/markdown/directive/{embee.js → embed.js} +1 -1
  60. package/lib/node/markdown/division.js +13 -22
  61. package/lib/node/markdown/link/footnote.js +5 -102
  62. package/lib/node/markdown/subDivision.js +2 -2
  63. package/lib/node/markdown/text/block.js +1 -1
  64. package/lib/node/markdown/text.js +25 -29
  65. package/lib/ruleNames.js +87 -81
  66. package/lib/style/selector.js +4 -4
  67. package/lib/{node/markdown/heading/tertiary.js → transform/html/directive/contents.js} +23 -28
  68. package/lib/{node/markdown/stronglyEmphasisedText.js → transform/html/directive/footnotes.js} +15 -14
  69. package/lib/{node/markdown/line.js → transform/html/directive/index.js} +19 -18
  70. package/lib/transform/html/directive/pageNumber.js +108 -0
  71. package/lib/transform/html/division.js +130 -0
  72. package/lib/transform/html/footnote.js +159 -0
  73. package/lib/transform/html/heading/index.js +109 -0
  74. package/lib/transform/html/index.js +159 -0
  75. package/lib/transform/{indexAnchor.js → html/indexAnchor.js} +20 -20
  76. package/lib/transform/html/item/contents.js +130 -0
  77. package/lib/transform/html/item/footnote.js +117 -0
  78. package/lib/transform/html/item/index.js +117 -0
  79. package/lib/transform/html/line.js +123 -0
  80. package/lib/transform/html/link/contents.js +130 -0
  81. package/lib/transform/html/link/footnote.js +158 -0
  82. package/lib/transform/html/link/nestedFootnote.js +108 -0
  83. package/lib/transform/html/list/contents.js +180 -0
  84. package/lib/transform/html/list/footnotes.js +117 -0
  85. package/lib/transform/html/list/index.js +118 -0
  86. package/lib/transform/html/pageNumber.js +117 -0
  87. package/lib/transform/html.js +168 -0
  88. package/lib/transform/markdown/directive/embed.js +14 -9
  89. package/lib/transform/markdown/directive/ignore.js +12 -38
  90. package/lib/transform/markdown/directive/include.js +11 -6
  91. package/lib/transform/markdown/subDivision.js +18 -50
  92. package/lib/transform/markdown.js +148 -0
  93. package/lib/utilities/contents.js +16 -16
  94. package/lib/utilities/division.js +247 -0
  95. package/lib/utilities/footnotes.js +8 -8
  96. package/lib/utilities/html.js +37 -79
  97. package/lib/utilities/index.js +23 -16
  98. package/lib/utilities/markdown.js +2 -10
  99. package/lib/utilities/string.js +16 -10
  100. package/lib/utilities/whitespace.js +33 -0
  101. package/package.json +6 -6
  102. package/src/constants.js +2 -0
  103. package/src/defaultMarkdownStyle.js +6 -9
  104. package/src/example/importer.js +11 -5
  105. package/src/example/indexOptions.js +0 -97
  106. package/src/example/view/div/container/markdown.js +1 -1
  107. package/src/example/view/div/container/markdownStyle.js +1 -1
  108. package/src/example/view/div/container.js +1 -1
  109. package/src/example/view/div/pageButtons.js +8 -2
  110. package/src/example/view/div/preview.js +0 -6
  111. package/src/example/view/div/sizeable/left.js +1 -1
  112. package/src/example/view/div/tabButtons/right.js +3 -3
  113. package/src/example/view/textarea/markdown.js +1 -0
  114. package/src/example/view/textarea/markdownStyle.js +1 -0
  115. package/src/example/view/textarea/parseTree/html.js +1 -1
  116. package/src/example/view/textarea/plainText.js +0 -6
  117. package/src/example/view/xmp.js +0 -6
  118. package/src/example/view.js +75 -74
  119. package/src/index/list.js +3 -3
  120. package/src/index.js +1 -1
  121. package/src/map/node/html.js +29 -11
  122. package/src/map/node/markdown.js +8 -65
  123. package/src/markdown/bnf.js +112 -149
  124. package/src/node/html/anchor.js +34 -43
  125. package/src/node/html/blockLine.js +33 -4
  126. package/src/node/html/directive/contents.js +9 -0
  127. package/src/node/html/directive/footnotes.js +9 -0
  128. package/src/node/html/directive/index.js +9 -0
  129. package/src/node/html/directive/pageNumber.js +9 -0
  130. package/src/node/html/division.js +154 -4
  131. package/src/node/html/footnote.js +1 -7
  132. package/src/node/html/heading/index.js +78 -2
  133. package/src/node/html/heading/primary.js +6 -4
  134. package/src/node/html/heading/quaternary.js +6 -4
  135. package/src/node/html/heading/secondary.js +6 -4
  136. package/src/node/html/heading/tertiary.js +6 -4
  137. package/src/node/html/heading.js +59 -0
  138. package/src/node/html/image.js +8 -5
  139. package/src/node/html/item/contents.js +25 -2
  140. package/src/node/html/item/footnote.js +39 -0
  141. package/src/node/html/item/index.js +35 -16
  142. package/src/node/html/line.js +41 -2
  143. package/src/node/html/link/contents.js +32 -5
  144. package/src/node/html/link/email.js +51 -17
  145. package/src/node/html/link/footnote.js +98 -2
  146. package/src/node/html/link/hyper.js +51 -17
  147. package/src/node/html/link/index.js +63 -30
  148. package/src/node/html/list/contents.js +25 -2
  149. package/src/node/html/list/footnotes.js +34 -2
  150. package/src/node/html/list/index.js +25 -2
  151. package/src/node/html/pageNumber.js +60 -16
  152. package/src/node/html/reference.js +13 -0
  153. package/src/node/html/text/comma.js +29 -0
  154. package/src/node/html/text/index.js +43 -0
  155. package/src/node/html/text/stronglyEmphasised.js +22 -11
  156. package/src/node/html/text.js +3 -3
  157. package/src/node/html/topmost.js +93 -1
  158. package/src/node/html.js +34 -6
  159. package/src/node/markdown/division.js +11 -227
  160. package/src/node/markdown/link/footnote.js +6 -82
  161. package/src/node/markdown/subDivision.js +1 -1
  162. package/src/node/markdown/text/block.js +1 -1
  163. package/src/node/markdown/text.js +38 -39
  164. package/src/ruleNames.js +11 -8
  165. package/src/style/selector.js +3 -4
  166. package/src/transform/html/directive/contents.js +19 -0
  167. package/src/transform/html/directive/footnotes.js +12 -0
  168. package/src/transform/html/directive/index.js +19 -0
  169. package/src/transform/html/directive/pageNumber.js +12 -0
  170. package/src/transform/html/division.js +33 -0
  171. package/src/transform/html/footnote.js +66 -0
  172. package/src/transform/html/heading/index.js +14 -0
  173. package/src/transform/html/index.js +77 -0
  174. package/src/transform/html/indexAnchor.js +24 -0
  175. package/src/transform/html/item/contents.js +48 -0
  176. package/src/transform/html/item/footnote.js +21 -0
  177. package/src/transform/html/item/index.js +21 -0
  178. package/src/transform/html/line.js +27 -0
  179. package/src/transform/html/link/contents.js +40 -0
  180. package/src/transform/html/link/footnote.js +58 -0
  181. package/src/transform/html/link/nestedFootnote.js +12 -0
  182. package/src/transform/html/list/contents.js +86 -0
  183. package/src/transform/html/list/footnotes.js +20 -0
  184. package/src/transform/html/list/index.js +27 -0
  185. package/src/transform/html/pageNumber.js +20 -0
  186. package/src/transform/html.js +78 -0
  187. package/src/transform/markdown/directive/embed.js +6 -7
  188. package/src/transform/markdown/directive/ignore.js +3 -9
  189. package/src/transform/markdown/directive/include.js +3 -3
  190. package/src/transform/markdown/subDivision.js +5 -17
  191. package/src/transform/markdown.js +9 -0
  192. package/src/utilities/contents.js +12 -12
  193. package/src/utilities/division.js +256 -0
  194. package/src/utilities/footnotes.js +5 -5
  195. package/src/utilities/html.js +39 -86
  196. package/src/utilities/index.js +26 -16
  197. package/src/utilities/markdown.js +0 -8
  198. package/src/utilities/string.js +5 -3
  199. package/src/utilities/whitespace.js +21 -0
  200. package/lib/node/markdown/anchor.js +0 -171
  201. package/lib/node/markdown/contentsItem.js +0 -112
  202. package/lib/node/markdown/directive/pageNumber.js +0 -163
  203. package/lib/node/markdown/heading/quaternary.js +0 -121
  204. package/lib/node/markdown/heading/secondary.js +0 -121
  205. package/lib/node/markdown/heading.js +0 -140
  206. package/lib/node/markdown/item/footnotes.js +0 -120
  207. package/lib/node/markdown/link/contents.js +0 -156
  208. package/lib/node/markdown/link/index.js +0 -117
  209. package/lib/node/markdown/list/contents.js +0 -112
  210. package/lib/node/markdown/list/footnotes.js +0 -165
  211. package/lib/node/markdown/list/index.js +0 -112
  212. package/lib/transform/contentsDirective.js +0 -112
  213. package/lib/transform/contentsItem.js +0 -134
  214. package/lib/transform/contentsLink.js +0 -115
  215. package/lib/transform/contentsList.js +0 -193
  216. package/lib/transform/footnote.js +0 -181
  217. package/lib/transform/footnoteIdentifier.js +0 -120
  218. package/lib/transform/footnotesDirective.js +0 -112
  219. package/lib/transform/footnotesItem.js +0 -123
  220. package/lib/transform/footnotesList.js +0 -172
  221. package/lib/transform/index.js +0 -166
  222. package/lib/transform/indexDirective.js +0 -112
  223. package/lib/transform/indexHeading.js +0 -104
  224. package/lib/transform/indexItem.js +0 -113
  225. package/lib/transform/indexList.js +0 -121
  226. package/lib/transform/line.js +0 -111
  227. package/lib/transform/pageNumberDirective.js +0 -112
  228. package/src/node/html/item/footnotes.js +0 -13
  229. package/src/node/markdown/anchor.js +0 -45
  230. package/src/node/markdown/contentsItem.js +0 -21
  231. package/src/node/markdown/directive/pageNumber.js +0 -34
  232. package/src/node/markdown/emphasisedText.js +0 -7
  233. package/src/node/markdown/heading/primary.js +0 -9
  234. package/src/node/markdown/heading/quaternary.js +0 -9
  235. package/src/node/markdown/heading/secondary.js +0 -9
  236. package/src/node/markdown/heading/tertiary.js +0 -9
  237. package/src/node/markdown/heading.js +0 -47
  238. package/src/node/markdown/inlineText.js +0 -7
  239. package/src/node/markdown/item/footnotes.js +0 -39
  240. package/src/node/markdown/line.js +0 -17
  241. package/src/node/markdown/link/contents.js +0 -31
  242. package/src/node/markdown/link/index.js +0 -18
  243. package/src/node/markdown/list/contents.js +0 -21
  244. package/src/node/markdown/list/footnotes.js +0 -45
  245. package/src/node/markdown/list/index.js +0 -21
  246. package/src/node/markdown/paragraph.js +0 -7
  247. package/src/node/markdown/strongText.js +0 -7
  248. package/src/node/markdown/stronglyEmphasisedText.js +0 -7
  249. package/src/transform/contentsDirective.js +0 -18
  250. package/src/transform/contentsItem.js +0 -55
  251. package/src/transform/contentsLink.js +0 -28
  252. package/src/transform/contentsList.js +0 -110
  253. package/src/transform/footnote.js +0 -51
  254. package/src/transform/footnoteIdentifier.js +0 -27
  255. package/src/transform/footnotesDirective.js +0 -18
  256. package/src/transform/footnotesItem.js +0 -25
  257. package/src/transform/footnotesList.js +0 -77
  258. package/src/transform/index.js +0 -90
  259. package/src/transform/indexAnchor.js +0 -27
  260. package/src/transform/indexDirective.js +0 -18
  261. package/src/transform/indexHeading.js +0 -18
  262. package/src/transform/indexItem.js +0 -29
  263. package/src/transform/indexList.js +0 -33
  264. package/src/transform/line.js +0 -19
  265. package/src/transform/pageNumberDirective.js +0 -18
  266. /package/src/node/markdown/directive/{embee.js → embed.js} +0 -0
@@ -4,9 +4,24 @@ import HTMLNode from "../../../node/html";
4
4
 
5
5
  import { CONTENTS_PREPEND } from "../../../prepends";
6
6
  import { HREF_ATTRIBUTE_NAME } from "../../../attributeNames";
7
+ import { CONTENTS_LINK_RULE_NAME } from "../../../ruleNames";
7
8
 
8
9
  export default class ContentsLinkHTMLNode extends HTMLNode {
9
- getIdentifier() { return this.outerNode.getIdentifier(); }
10
+ constructor(outerNode, parentNode, childNodes, domElement, identifier) {
11
+ super(outerNode, parentNode, childNodes, domElement);
12
+
13
+ this.identifier = identifier;
14
+ }
15
+
16
+ getIdentifier() {
17
+ return this.identifier;
18
+ }
19
+
20
+ getRuleName() {
21
+ const ruleName = CONTENTS_LINK_RULE_NAME;
22
+
23
+ return ruleName;
24
+ }
10
25
 
11
26
  attributeName(context) {
12
27
  const attributeName = HREF_ATTRIBUTE_NAME;
@@ -16,17 +31,29 @@ export default class ContentsLinkHTMLNode extends HTMLNode {
16
31
 
17
32
  attributeValue(context) {
18
33
  const prepend = CONTENTS_PREPEND,
19
- identifier = this.getIdentifier(),
20
- attributeValue = `#${prepend}-${identifier}`;
34
+ attributeValue = `#${prepend}-${this.identifier}`;
21
35
 
22
36
  return attributeValue;
23
37
  }
24
38
 
39
+ asString() {
40
+ const ruleName = this.getRuleName(),
41
+ string = ruleName; ///
42
+
43
+ return string;
44
+ }
45
+
25
46
  static tagName = "a";
26
47
 
27
48
  static className = "contents-link";
28
49
 
29
- static fromNothing() { return HTMLNode.fromNothing(ContentsLinkHTMLNode); }
50
+ static fromLineHTMLTransformAndIdentifier(lineHTMLTransform, identifier) {
51
+ const lineHTMLNode = lineHTMLTransform.getLineHTMLNode(),
52
+ childNodes = [
53
+ lineHTMLNode
54
+ ],
55
+ contentsLinkHTMLNode = HTMLNode.fromChildNodes(ContentsLinkHTMLNode, childNodes, identifier);
30
56
 
31
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(ContentsLinkHTMLNode, outerNode); }
57
+ return contentsLinkHTMLNode;
58
+ }
32
59
  }
@@ -7,6 +7,13 @@ import { HREF_ATTRIBUTE_NAME } from "../../../attributeNames";
7
7
  export default class EmailLinkHTMLNode extends HTMLNode {
8
8
  isSimple() { return this.outerNode.isSimple(); }
9
9
 
10
+ content(context) {
11
+ const emailAddress = this.emailAddress(context),
12
+ content = emailAddress; ///
13
+
14
+ return content;
15
+ }
16
+
10
17
  emailAddress(context) { return this.outerNode.emailAddress(context); }
11
18
 
12
19
  attributeName(context) {
@@ -23,34 +30,61 @@ export default class EmailLinkHTMLNode extends HTMLNode {
23
30
  }
24
31
 
25
32
  mount(parentDOMElement, siblingDOMElement, context) {
26
- super.mount(parentDOMElement, siblingDOMElement, context);
27
-
28
33
  const simple = this.isSimple();
29
34
 
30
- if (simple) {
31
- const emailAddress = this.emailAddress(context),
32
- content = emailAddress, ///
33
- textNode = document.createTextNode(content),
34
- domElement = textNode, ///
35
- parentDOMElement = this.domElement, ///
36
- siblingDOMElement = null;
37
-
38
- parentDOMElement.insertBefore(domElement, siblingDOMElement)
35
+ if (!simple) {
36
+ super.mount(parentDOMElement, siblingDOMElement, context);
37
+
38
+ return;
39
39
  }
40
+
41
+ let domElement;
42
+
43
+ domElement = this.createDOMElement(context);
44
+
45
+ this.setDOMElement(domElement);
46
+
47
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
48
+
49
+ parentDOMElement = domElement; ///
50
+
51
+ siblingDOMElement = null;
52
+
53
+ const content = this.content(context),
54
+ textNode = document.createTextNode(content);
55
+
56
+ domElement = textNode; ///
57
+
58
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
40
59
  }
41
60
 
42
61
  unmount(parentDOMElement, context) {
43
62
  const simple = this.isSimple();
44
63
 
45
- if (simple) {
46
- const parentDOMElement = this.domElement,
47
- firstChild = parentDOMElement.firstChild,
48
- domElement = firstChild; ///
64
+ if (!simple) {
65
+ super.unmount(parentDOMElement, context);
66
+
67
+ return;
68
+ }
49
69
 
50
- parentDOMElement.removeChild(domElement)
70
+ let domElement;
71
+
72
+ {
73
+ domElement = this.getDOMElement();
74
+
75
+ const parentDOMElement = domElement, ///
76
+ firstChild = domElement.firstChild
77
+
78
+ domElement = firstChild; ///
79
+
80
+ parentDOMElement.removeChild(domElement);
51
81
  }
52
82
 
53
- super.unmount(parentDOMElement, context);
83
+ domElement = this.getDOMElement();
84
+
85
+ parentDOMElement.removeChild(domElement);
86
+
87
+ this.resetDOMElement();
54
88
  }
55
89
 
56
90
  asPlainText(context) {
@@ -2,10 +2,35 @@
2
2
 
3
3
  import HTMLNode from "../../../node/html";
4
4
 
5
+ import { EMPTY_STRING } from "../../../constants";
5
6
  import { FOOTNOTE_PREPEND } from "../../../prepends";
6
7
  import { HREF_ATTRIBUTE_NAME } from "../../../attributeNames";
7
8
 
8
9
  export default class FootnoteLinkHTMLNode extends HTMLNode {
10
+ constructor(outerNode, parentNode, childNodes, domElement, number) {
11
+ super(outerNode, parentNode, childNodes, domElement);
12
+
13
+ this.number = number;
14
+ }
15
+
16
+ getNumber() {
17
+ return this.number;
18
+ }
19
+
20
+ setNumber(number) {
21
+ this.number = number;
22
+ }
23
+
24
+ content(context) {
25
+ const content = (this.number !== null) ?
26
+ this.number :
27
+ EMPTY_STRING;
28
+
29
+ return content;
30
+ }
31
+
32
+ identifier(context) { return this.outerNode.identifier(context); }
33
+
9
34
  attributeName(context) {
10
35
  const attributeName = HREF_ATTRIBUTE_NAME;
11
36
 
@@ -20,6 +45,63 @@ export default class FootnoteLinkHTMLNode extends HTMLNode {
20
45
  return attributeValue;
21
46
  }
22
47
 
48
+ mount(parentDOMElement, siblingDOMElement, context) {
49
+ let domElement;
50
+
51
+ domElement = this.createDOMElement(context);
52
+
53
+ this.setDOMElement(domElement);
54
+
55
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
56
+
57
+ parentDOMElement = domElement; ///
58
+
59
+ siblingDOMElement = null;
60
+
61
+ const content = this.content(context),
62
+ textNode = document.createTextNode(content);
63
+
64
+ domElement = textNode; ///
65
+
66
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
67
+ }
68
+
69
+ unmount(parentDOMElement, context) {
70
+ let domElement;
71
+
72
+ {
73
+ domElement = this.getDOMElement();
74
+
75
+ const parentDOMElement = domElement, ///
76
+ firstChild = domElement.firstChild
77
+
78
+ domElement = firstChild; ///
79
+
80
+ parentDOMElement.removeChild(domElement);
81
+ }
82
+
83
+ domElement = this.getDOMElement();
84
+
85
+ parentDOMElement.removeChild(domElement);
86
+
87
+ this.resetDOMElement();
88
+ }
89
+
90
+ asHTML(indent, context) {
91
+ let html;
92
+
93
+ indent = this.adjustIndent(indent);
94
+
95
+ const childNodesHTML = this.childNodesAsHTML(indent, context),
96
+ startingTag = this.startingTag(context),
97
+ closingTag = this.closingTag(context);
98
+
99
+ html = `${indent}${startingTag}${childNodesHTML}${closingTag}
100
+ `;
101
+
102
+ return html;
103
+ }
104
+
23
105
  childNodesAsHTML(indent, context) {
24
106
  const content = this.content(context),
25
107
  childNodesHTML = content; ///
@@ -27,7 +109,21 @@ export default class FootnoteLinkHTMLNode extends HTMLNode {
27
109
  return childNodesHTML;
28
110
  }
29
111
 
30
- static fromNothing() { return HTMLNode.fromNothing(FootnoteLinkHTMLNode); }
112
+ static tagName = "a";
113
+
114
+ static className = "footnote";
115
+
116
+ static fromNothing() {
117
+ const number = null,
118
+ footnoteLinkHTMLNode = HTMLNode.fromNothing(FootnoteLinkHTMLNode, number);
119
+
120
+ return footnoteLinkHTMLNode;
121
+ }
122
+
123
+ static fromOuterNode(outerNode) {
124
+ const number = null,
125
+ footnoteLinkHTMLNode = HTMLNode.fromOuterNode(FootnoteLinkHTMLNode, outerNode, number);
31
126
 
32
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(FootnoteLinkHTMLNode, outerNode); }
127
+ return footnoteLinkHTMLNode;
128
+ }
33
129
  }
@@ -9,6 +9,13 @@ export default class HyperlinkHTMLNode extends HTMLNode {
9
9
 
10
10
  url(context) { return this.outerNode.url(context); }
11
11
 
12
+ content(context) {
13
+ const url = this.url(context),
14
+ content = url; ///
15
+
16
+ return content;
17
+ }
18
+
12
19
  attributeName(context) {
13
20
  const attributeName = HREF_ATTRIBUTE_NAME;
14
21
 
@@ -23,34 +30,61 @@ export default class HyperlinkHTMLNode extends HTMLNode {
23
30
  }
24
31
 
25
32
  mount(parentDOMElement, siblingDOMElement, context) {
26
- super.mount(parentDOMElement, siblingDOMElement, context);
27
-
28
33
  const simple = this.isSimple();
29
34
 
30
- if (simple) {
31
- const url = this.url(context),
32
- content = url, ///
33
- textNode = document.createTextNode(content),
34
- domElement = textNode, ///
35
- parentDOMElement = this.domElement, ///
36
- siblingDOMElement = null;
37
-
38
- parentDOMElement.insertBefore(domElement, siblingDOMElement)
35
+ if (!simple) {
36
+ super.mount(parentDOMElement, siblingDOMElement, context);
37
+
38
+ return;
39
39
  }
40
+
41
+ let domElement;
42
+
43
+ domElement = this.createDOMElement(context);
44
+
45
+ this.setDOMElement(domElement);
46
+
47
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
48
+
49
+ parentDOMElement = domElement; ///
50
+
51
+ siblingDOMElement = null;
52
+
53
+ const content = this.content(context),
54
+ textNode = document.createTextNode(content);
55
+
56
+ domElement = textNode; ///
57
+
58
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
40
59
  }
41
60
 
42
61
  unmount(parentDOMElement, context) {
43
62
  const simple = this.isSimple();
44
63
 
45
- if (simple) {
46
- const parentDOMElement = this.domElement,
47
- firstChild = parentDOMElement.firstChild,
48
- domElement = firstChild; ///
64
+ if (!simple) {
65
+ super.unmount(parentDOMElement, context);
66
+
67
+ return;
68
+ }
49
69
 
50
- parentDOMElement.removeChild(domElement)
70
+ let domElement;
71
+
72
+ {
73
+ domElement = this.getDOMElement();
74
+
75
+ const parentDOMElement = domElement, ///
76
+ firstChild = domElement.firstChild
77
+
78
+ domElement = firstChild; ///
79
+
80
+ parentDOMElement.removeChild(domElement);
51
81
  }
52
82
 
53
- super.unmount(parentDOMElement, context);
83
+ domElement = this.getDOMElement();
84
+
85
+ parentDOMElement.removeChild(domElement);
86
+
87
+ this.resetDOMElement();
54
88
  }
55
89
 
56
90
  asPlainText(context) {
@@ -2,10 +2,28 @@
2
2
 
3
3
  import HTMLNode from "../../../node/html";
4
4
 
5
+ import { EMPTY_STRING } from "../../../constants";
5
6
  import { INDEX_PREPEND } from "../../../prepends";
6
7
  import { HREF_ATTRIBUTE_NAME } from "../../../attributeNames";
8
+ import { INDEX_LINK_RULE_NAME } from "../../../ruleNames";
7
9
 
8
10
  export default class IndexLinkHTMLNode extends HTMLNode {
11
+ constructor(outerNode, parentNode, childNodes, domElement, pageNumber) {
12
+ super(outerNode, parentNode, childNodes, domElement);
13
+
14
+ this.pageNumber = pageNumber;
15
+ }
16
+
17
+ getIndexLink() {
18
+ return this.pageNumber;
19
+ }
20
+
21
+ getRuleName() {
22
+ const ruleName = INDEX_LINK_RULE_NAME;
23
+
24
+ return ruleName;
25
+ }
26
+
9
27
  attributeName(context) {
10
28
  const attributeName = HREF_ATTRIBUTE_NAME;
11
29
 
@@ -13,60 +31,75 @@ export default class IndexLinkHTMLNode extends HTMLNode {
13
31
  }
14
32
 
15
33
  attributeValue(context) {
16
- const content = this.content(context),
17
- attributeValue = `#${INDEX_PREPEND}-${content}`;
34
+ const prepend = INDEX_PREPEND,
35
+ attributeValue = `#${prepend}-${this.pageNumber}`;
18
36
 
19
37
  return attributeValue;
20
38
  }
21
39
 
22
- asHTML(indent, context) {
23
- const childNodesHTML = this.childNodesAsHTML(indent, context),
24
- startingTag = this.startingTag(context),
25
- closingTag = this.closingTag(context),
26
- html = `${startingTag}${childNodesHTML}${closingTag}`;
40
+ mount(parentDOMElement, siblingDOMElement, context) {
41
+ super.mount(parentDOMElement, siblingDOMElement, context);
27
42
 
28
- return html;
29
- }
43
+ let domElement;
30
44
 
31
- childNodesAsHTML(indent, context) {
32
- const content = this.content(context),
33
- childNodesHTML = content; ///
45
+ domElement = this.getDOMElement();
34
46
 
35
- return childNodesHTML;
36
- }
47
+ parentDOMElement = domElement; ///
37
48
 
38
- createDOMElement(context) {
39
- let domElement;
49
+ siblingDOMElement = null;
40
50
 
41
- const content = this.content(context),
51
+ const content = this.pageNumber, ///
42
52
  textNode = document.createTextNode(content);
43
53
 
44
- domElement = super.createDOMElement(context);
54
+ domElement = textNode; ///
55
+
56
+ parentDOMElement.insertBefore(domElement, siblingDOMElement);
57
+ }
58
+
59
+ unmount(parentDOMElement, context) {
60
+ {
61
+ let domElement;
45
62
 
46
- const parentDOMElement = domElement; ///
63
+ domElement = this.getDOMElement();
47
64
 
48
- domElement = textNode; ///
65
+ const parentDOMElement = domElement, ///
66
+ lastChild = domElement.lastChild
49
67
 
50
- parentDOMElement.appendChild(domElement);
68
+ domElement = lastChild; ///
51
69
 
52
- domElement = parentDOMElement; ///
70
+ parentDOMElement.removeChild(domElement);
71
+ }
53
72
 
54
- return domElement;
73
+ super.unmount(parentDOMElement, context);
55
74
  }
56
75
 
57
- createChildNodeDOMElements(context) {
58
- const content = this.content(context),
59
- textNode = document.createTextNode(content),
60
- domElement = textNode; ///
76
+ asPlainText(context) {
77
+ const plainText = EMPTY_STRING;
61
78
 
62
- this.addDOMElement(domElement);
79
+ return plainText;
80
+ }
81
+
82
+ childNodesAsHTML(indent, context) {
83
+ const childNodesHTML = `${this.pageNumber}
84
+ `;
85
+
86
+ return childNodesHTML;
87
+ }
88
+
89
+ asString() {
90
+ const ruleName = this.getRuleName(),
91
+ string = ruleName; ///
92
+
93
+ return string;
63
94
  }
64
95
 
65
96
  static tagName = "a";
66
97
 
67
98
  static className = "index";
68
99
 
69
- static fromNothing() { return HTMLNode.fromNothing(IndexLinkHTMLNode); }
100
+ static fromPageNumber(pageNumber) {
101
+ const indexLinkHTMLNode = HTMLNode.fromNothing(IndexLinkHTMLNode, pageNumber);
70
102
 
71
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(IndexLinkHTMLNode, outerNode); }
103
+ return indexLinkHTMLNode;
104
+ }
72
105
  }
@@ -2,12 +2,35 @@
2
2
 
3
3
  import HTMLNode from "../../../node/html";
4
4
 
5
+ import { CONTENTS_LIST_RULE_NAME } from "../../../ruleNames";
6
+
5
7
  export default class ContentsListHTMLNode extends HTMLNode {
8
+ getRuleName() {
9
+ const ruleName = CONTENTS_LIST_RULE_NAME;
10
+
11
+ return ruleName;
12
+ }
13
+
14
+ asString() {
15
+ const ruleName = this.getRuleName(),
16
+ string = ruleName; ///
17
+
18
+ return string;
19
+ }
20
+
6
21
  static tagName = "ul";
7
22
 
8
23
  static className = "contents";
9
24
 
10
- static fromNothing() { return HTMLNode.fromNothing(ContentsListHTMLNode); }
25
+ static fromContentsItemHTMLTransforms(contentsItemHTMLTransforms) {
26
+ const contentsItemHTMLNodes = contentsItemHTMLTransforms.map((contentsItemHTMLTransform) => {
27
+ const contentsItemHTMLNode = contentsItemHTMLTransform.getContentsItemHTMLNode();
28
+
29
+ return contentsItemHTMLNode;
30
+ }),
31
+ childNodes = contentsItemHTMLNodes, ///
32
+ contentsListHTMLNode = HTMLNode.fromChildNodes(ContentsListHTMLNode, childNodes);
11
33
 
12
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(ContentsListHTMLNode, outerNode); }
34
+ return contentsListHTMLNode;
35
+ }
13
36
  }
@@ -3,8 +3,25 @@
3
3
  import HTMLNode from "../../../node/html";
4
4
 
5
5
  import { START_ATTRIBUTE_NAME } from "../../../attributeNames";
6
+ import { FOOTNOTES_LIST_RULE_NAME } from "../../../ruleNames";
6
7
 
7
8
  export default class FootnotesListHTMLNode extends HTMLNode {
9
+ constructor(outerNode, parentNode, childNodes, domElement, start) {
10
+ super(outerNode, parentNode, childNodes, domElement);
11
+
12
+ this.start = start;
13
+ }
14
+
15
+ getStart() {
16
+ return this.start;
17
+ }
18
+
19
+ getRuleName() {
20
+ const ruleName = FOOTNOTES_LIST_RULE_NAME;
21
+
22
+ return ruleName;
23
+ }
24
+
8
25
  attributeName(context) {
9
26
  const attributeName = START_ATTRIBUTE_NAME;
10
27
 
@@ -17,11 +34,26 @@ export default class FootnotesListHTMLNode extends HTMLNode {
17
34
  return attributeValue;
18
35
  }
19
36
 
37
+ asString() {
38
+ const ruleName = this.getRuleName(),
39
+ string = ruleName; ///
40
+
41
+ return string;
42
+ }
43
+
20
44
  static tagName = "ol";
21
45
 
22
46
  static className = "footnotes";
23
47
 
24
- static fromNothing() { return HTMLNode.fromNothing(FootnotesListHTMLNode); }
48
+ static fromStartAndFootnoteItemHTMLTransforms(start, footnoteItemHTMLTransforms) {
49
+ const footnoteItemHTMLNodes = footnoteItemHTMLTransforms.map((footnoteItemHTMLTransform) => {
50
+ const footnoteItemHTMLNode = footnoteItemHTMLTransform.getFootnoteItemHTMLNode();
51
+
52
+ return footnoteItemHTMLNode;
53
+ }),
54
+ childNodes = footnoteItemHTMLNodes, ///
55
+ footnotesListHTMLNode = HTMLNode.fromChildNodes(FootnotesListHTMLNode, childNodes, start);
25
56
 
26
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(FootnotesListHTMLNode, outerNode); }
57
+ return footnotesListHTMLNode;
58
+ }
27
59
  }
@@ -2,12 +2,35 @@
2
2
 
3
3
  import HTMLNode from "../../../node/html";
4
4
 
5
+ import { INDEX_LIST_RULE_NAME } from "../../../ruleNames";
6
+
5
7
  export default class IndexListHTMLNode extends HTMLNode {
8
+ getRuleName() {
9
+ const ruleName = INDEX_LIST_RULE_NAME;
10
+
11
+ return ruleName;
12
+ }
13
+
14
+ asString() {
15
+ const ruleName = this.getRuleName(),
16
+ string = ruleName; ///
17
+
18
+ return string;
19
+ }
20
+
6
21
  static tagName = "ul";
7
22
 
8
23
  static className = "index";
9
24
 
10
- static fromNothing() { return HTMLNode.fromNothing(IndexListHTMLNode); }
25
+ static fromIndexItemHTMLTransforms(indexItemHTMLTransforms) {
26
+ const indexItemHTMLNodes = indexItemHTMLTransforms.map((indexItemHTMLTransform) => {
27
+ const indexListHTMLNode = indexItemHTMLTransform.getIndexItemHTMLNode();
28
+
29
+ return indexListHTMLNode;
30
+ }),
31
+ childNodes = indexItemHTMLNodes,
32
+ indexListHTMLNode = HTMLNode.fromChildNodes(IndexListHTMLNode, childNodes);
11
33
 
12
- static fromOuterNode(outerNode) { return HTMLNode.fromOuterNode(IndexListHTMLNode, outerNode); }
34
+ return indexListHTMLNode;
35
+ }
13
36
  }