highmark-markdown 1.1.22 → 1.1.24

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 (201) hide show
  1. package/example.js +350 -1393
  2. package/lib/example/view/button/page.js +1 -1
  3. package/lib/example/view/button/tab/css.js +1 -1
  4. package/lib/example/view/button/tab/html.js +1 -1
  5. package/lib/example/view/button/tab/markdown.js +1 -1
  6. package/lib/example/view/button/tab/markdownStyle.js +1 -1
  7. package/lib/example/view/button/tab/plainText.js +1 -1
  8. package/lib/example/view/button/tab/preview.js +1 -1
  9. package/lib/example/view/button/tab.js +1 -1
  10. package/lib/example/view/div/container/css.js +1 -1
  11. package/lib/example/view/div/container/html.js +1 -1
  12. package/lib/example/view/div/container/markdown.js +1 -1
  13. package/lib/example/view/div/container/markdownStyle.js +1 -1
  14. package/lib/example/view/div/container/plainText.js +1 -1
  15. package/lib/example/view/div/container/preview.js +1 -1
  16. package/lib/example/view/div/html.js +1 -1
  17. package/lib/example/view/div/preview.js +1 -1
  18. package/lib/example/view/div/sizeable/left.js +1 -1
  19. package/lib/example/view/div/tabButtons.js +1 -1
  20. package/lib/example/view/textarea/css.js +1 -1
  21. package/lib/example/view/textarea/markdown.js +1 -1
  22. package/lib/example/view/textarea/markdownStyle.js +1 -1
  23. package/lib/example/view/textarea/parseTree/css.js +1 -1
  24. package/lib/example/view/textarea/parseTree/html.js +1 -1
  25. package/lib/example/view/textarea/parseTree/markdown.js +1 -1
  26. package/lib/example/view/textarea/parseTree/markdownStyle.js +1 -1
  27. package/lib/example/view/textarea/parseTree.js +1 -1
  28. package/lib/example/view/textarea/plainText.js +1 -1
  29. package/lib/example/view/xmp.js +1 -1
  30. package/lib/example/view.js +2 -3
  31. package/lib/markdown/lexer.js +2 -3
  32. package/lib/markdown/parser.js +1 -1
  33. package/lib/markdownStyle/lexer.js +2 -3
  34. package/lib/markdownStyle/parser.js +1 -1
  35. package/lib/node/css/amount.js +1 -1
  36. package/lib/node/css/argument.js +1 -1
  37. package/lib/node/css/arguments.js +1 -1
  38. package/lib/node/css/class.js +1 -1
  39. package/lib/node/css/colour.js +1 -1
  40. package/lib/node/css/declaration.js +1 -1
  41. package/lib/node/css/identifier.js +1 -1
  42. package/lib/node/css/name.js +1 -1
  43. package/lib/node/css/pseudoClass.js +1 -1
  44. package/lib/node/css/ruleName.js +1 -1
  45. package/lib/node/css/ruleSet.js +1 -1
  46. package/lib/node/css/selector.js +1 -1
  47. package/lib/node/css/selectors.js +1 -1
  48. package/lib/node/css/selectorsList.js +1 -1
  49. package/lib/node/css/string.js +1 -1
  50. package/lib/node/css/topmost.js +1 -1
  51. package/lib/node/css/value.js +1 -1
  52. package/lib/node/css/values.js +1 -1
  53. package/lib/node/css.js +1 -1
  54. package/lib/node/html/directive/contents.js +1 -1
  55. package/lib/node/html/directive/footnotes.js +1 -1
  56. package/lib/node/html/directive/index.js +1 -1
  57. package/lib/node/html/directive/pageNumber.js +1 -1
  58. package/lib/node/html/directive.js +1 -1
  59. package/lib/node/html/division.js +57 -49
  60. package/lib/node/html/error.js +1 -1
  61. package/lib/node/html/footnote.js +20 -1
  62. package/lib/node/html/heading/index.js +1 -1
  63. package/lib/node/html/heading/primary.js +1 -1
  64. package/lib/node/html/heading/quaternary.js +1 -1
  65. package/lib/node/html/heading/secondary.js +1 -1
  66. package/lib/node/html/heading/tertiary.js +1 -1
  67. package/lib/node/html/heading.js +1 -1
  68. package/lib/node/html/image.js +1 -1
  69. package/lib/node/html/item/contents.js +1 -1
  70. package/lib/node/html/item/footnote.js +5 -5
  71. package/lib/node/html/item/index.js +1 -1
  72. package/lib/node/html/item/ordered.js +1 -1
  73. package/lib/node/html/item/unordered.js +1 -1
  74. package/lib/node/html/line/block.js +1 -1
  75. package/lib/node/html/line.js +1 -1
  76. package/lib/node/html/link/email.js +1 -1
  77. package/lib/node/html/link/footnote.js +44 -23
  78. package/lib/node/html/link/hyper.js +1 -1
  79. package/lib/node/html/list/contents.js +1 -1
  80. package/lib/node/html/list/index.js +1 -1
  81. package/lib/node/html/list/ordered.js +1 -1
  82. package/lib/node/html/list/unordered.js +1 -1
  83. package/lib/node/html/listing/block.js +1 -1
  84. package/lib/node/html/listing/inline.js +1 -1
  85. package/lib/node/html/paragraph.js +1 -1
  86. package/lib/node/html/reference.js +1 -1
  87. package/lib/node/html/table.js +1 -1
  88. package/lib/node/html/tableBody.js +1 -1
  89. package/lib/node/html/tableBodyCell.js +1 -1
  90. package/lib/node/html/tableBodyRow.js +1 -1
  91. package/lib/node/html/tableHead.js +1 -1
  92. package/lib/node/html/tableHeadCell.js +1 -1
  93. package/lib/node/html/tableHeadRow.js +1 -1
  94. package/lib/node/html/text/block.js +1 -1
  95. package/lib/node/html/text/comma.js +1 -1
  96. package/lib/node/html/text/emphasised.js +1 -1
  97. package/lib/node/html/text/inline.js +1 -1
  98. package/lib/node/html/text/plain.js +1 -1
  99. package/lib/node/html/text/strong.js +1 -1
  100. package/lib/node/html/text/stronglyEmphasised.js +1 -1
  101. package/lib/node/html/text.js +1 -1
  102. package/lib/node/html/topmost.js +10 -8
  103. package/lib/node/html.js +1 -1
  104. package/lib/node/markdown/blockEnd.js +1 -1
  105. package/lib/node/markdown/blockStart.js +1 -1
  106. package/lib/node/markdown/className.js +1 -1
  107. package/lib/node/markdown/directive/embed.js +1 -1
  108. package/lib/node/markdown/directive/include.js +1 -1
  109. package/lib/node/markdown/error.js +1 -1
  110. package/lib/node/markdown/footnote.js +1 -1
  111. package/lib/node/markdown/hyperlink.js +1 -1
  112. package/lib/node/markdown/image.js +1 -1
  113. package/lib/node/markdown/item/ordered.js +1 -1
  114. package/lib/node/markdown/link/email.js +1 -1
  115. package/lib/node/markdown/link/footnote.js +1 -1
  116. package/lib/node/markdown/listng/block.js +1 -1
  117. package/lib/node/markdown/listng/inline.js +1 -1
  118. package/lib/node/markdown/path.js +1 -1
  119. package/lib/node/markdown/reference.js +1 -1
  120. package/lib/node/markdown/subDivision.js +1 -1
  121. package/lib/node/markdown/text/block.js +1 -1
  122. package/lib/node/markdown/text/plain.js +1 -1
  123. package/lib/node/markdown/text.js +1 -1
  124. package/lib/node/markdown/topmost.js +1 -1
  125. package/lib/node/markdown.js +1 -1
  126. package/lib/node/markdownStyle/amount.js +1 -1
  127. package/lib/node/markdownStyle/argument.js +1 -1
  128. package/lib/node/markdownStyle/arguments.js +1 -1
  129. package/lib/node/markdownStyle/colour.js +1 -1
  130. package/lib/node/markdownStyle/declaration.js +1 -1
  131. package/lib/node/markdownStyle/error.js +1 -1
  132. package/lib/node/markdownStyle/identifier.js +1 -1
  133. package/lib/node/markdownStyle/name.js +1 -1
  134. package/lib/node/markdownStyle/nonsense.js +1 -1
  135. package/lib/node/markdownStyle/pseudoClass.js +1 -1
  136. package/lib/node/markdownStyle/ruleName.js +1 -1
  137. package/lib/node/markdownStyle/ruleSet.js +1 -1
  138. package/lib/node/markdownStyle/selector.js +1 -1
  139. package/lib/node/markdownStyle/selectors.js +1 -1
  140. package/lib/node/markdownStyle/selectorsList.js +1 -1
  141. package/lib/node/markdownStyle/string.js +1 -1
  142. package/lib/node/markdownStyle/topmost.js +1 -1
  143. package/lib/node/markdownStyle/value.js +1 -1
  144. package/lib/node/markdownStyle/values.js +1 -1
  145. package/lib/node/markdownStyle.js +1 -1
  146. package/lib/styleElement/markdown/default.js +1 -1
  147. package/lib/transform/css/ruleSet.js +1 -1
  148. package/lib/transform/css/selectors.js +1 -1
  149. package/lib/transform/html/division.js +4 -4
  150. package/lib/transform/html/footnote.js +3 -22
  151. package/lib/transform/html/heading/index.js +1 -1
  152. package/lib/transform/html/index.js +12 -12
  153. package/lib/transform/html/indexAnchor.js +2 -2
  154. package/lib/transform/html/item/contents.js +1 -1
  155. package/lib/transform/html/item/footnote.js +4 -4
  156. package/lib/transform/html/item/index.js +1 -1
  157. package/lib/transform/html/line.js +1 -8
  158. package/lib/transform/html/link/contents.js +1 -1
  159. package/lib/transform/html/link/footnote.js +1 -1
  160. package/lib/transform/html/list/contents.js +8 -8
  161. package/lib/transform/html/list/footnotes.js +1 -1
  162. package/lib/transform/html/list/index.js +1 -1
  163. package/lib/transform/html/pageNumber.js +1 -1
  164. package/lib/transform/html.js +3 -23
  165. package/lib/transform/markdown/directive/embed.js +3 -3
  166. package/lib/transform/markdown/directive/ignore.js +1 -1
  167. package/lib/transform/markdown/directive/include.js +1 -1
  168. package/lib/transform/markdown/subDivision.js +1 -1
  169. package/lib/transform/markdown.js +1 -1
  170. package/lib/utilities/division.js +9 -135
  171. package/lib/utilities/html.js +3 -12
  172. package/package.json +1 -1
  173. package/src/example/view.js +1 -13
  174. package/src/node/html/division.js +77 -70
  175. package/src/node/html/footnote.js +21 -0
  176. package/src/node/html/heading/index.js +1 -1
  177. package/src/node/html/item/footnote.js +2 -3
  178. package/src/node/html/link/email.js +1 -1
  179. package/src/node/html/link/footnote.js +48 -32
  180. package/src/node/html/topmost.js +9 -13
  181. package/src/transform/html/division.js +2 -2
  182. package/src/transform/html/footnote.js +2 -24
  183. package/src/transform/html/index.js +13 -13
  184. package/src/transform/html/indexAnchor.js +1 -1
  185. package/src/transform/html/item/footnote.js +4 -4
  186. package/src/transform/html/line.js +0 -8
  187. package/src/transform/html/list/contents.js +5 -7
  188. package/src/transform/html.js +2 -26
  189. package/src/transform/markdown/directive/embed.js +2 -2
  190. package/src/utilities/division.js +8 -170
  191. package/src/utilities/html.js +2 -10
  192. package/lib/transform/html/directive/contents.js +0 -116
  193. package/lib/transform/html/directive/footnotes.js +0 -108
  194. package/lib/transform/html/directive/index.js +0 -116
  195. package/lib/transform/html/directive/pageNumber.js +0 -108
  196. package/lib/transform/html/link/nestedFootnote.js +0 -108
  197. package/src/transform/html/directive/contents.js +0 -19
  198. package/src/transform/html/directive/footnotes.js +0 -12
  199. package/src/transform/html/directive/index.js +0 -19
  200. package/src/transform/html/directive/pageNumber.js +0 -12
  201. package/src/transform/html/link/nestedFootnote.js +0 -12
@@ -1,23 +1,22 @@
1
1
  "use strict";
2
2
 
3
+ import { arrayUtilities } from "necessary";
4
+
3
5
  import HTMLNode from "../../node/html";
4
6
  import PageNumberHTMLNode from "../../node/html/pageNumber";
5
7
  import PageNumberHTMLTransform from "../../transform/html/pageNumber";
6
8
  import IndexAnchorHTMLTransform from "../../transform/html/indexAnchor";
9
+ import FootnoteItemHTMLTransform from "../../transform/html/item/footnote";
7
10
  import FootnotesListHTMLTransform from "../../transform/html/list/footnotes";
8
11
 
9
12
  import { DIVISION_MARKDOWN_RULE_NAME } from "../../ruleNames/markdown";
10
- import { groupHTMLNodes,
11
- removeHTMLNodes,
12
- addFootnoteHTMLNodes,
13
- removeFootnoteHTMLNodes,
14
- paginateGroupedHTMLNodes,
15
- numberFootnoteLinkHTMLNodes,
16
- removeFootnotesDirectiveHTMLNode,
17
- removePageNumberDirectiveHTMLNode,
18
- removeNestedFootnoteLinkHTMLNodes,
19
- lineHTMLTransformsFromFootnoteHTMLTransforms,
20
- footnoteItemHTMLTransformsFromLineHTMLTransforms } from "../../utilities/division";
13
+ import { groupHTMLNodes, removeHTMLNodes, paginateGroupedHTMLNodes } from "../../utilities/division";
14
+ import { footnotesHTMLNodesFromNode,
15
+ footnoteLinkHTMLNodesFromNode,
16
+ footnotesDirectiveHTMLNodeFromNode,
17
+ pageNumberDirectiveHTMLNodeFromNode } from "../../utilities/html";
18
+
19
+ const { extract } = arrayUtilities;
21
20
 
22
21
  export default class DivisionHTMLNode extends HTMLNode {
23
22
  constructor(outerNode, parentNode, childNodes, domElement, divisionClassName) {
@@ -42,41 +41,36 @@ export default class DivisionHTMLNode extends HTMLNode {
42
41
  return ruleNme;
43
42
  }
44
43
 
45
- fromFirstHTMLNode(callback) {
46
- this.fromFirstChildNode((firstChildNode) => {
47
- const firstHTMLNode = firstChildNode; ///
48
-
49
- callback(firstHTMLNode);
50
- });
51
- }
44
+ pageNumber() {
45
+ const pageNumber = this.fromFirstLastChildNode((firstLastChildNode) => {
46
+ let pageNumber = null;
52
47
 
53
- resolve(divisionHTMLNodes, context) {
54
- const node = this;
48
+ const firstLastChildNodePageNumberHTMLNode = (firstLastChildNode instanceof PageNumberHTMLNode);
55
49
 
56
- removeNestedFootnoteLinkHTMLNodes(node);
50
+ if (firstLastChildNodePageNumberHTMLNode) {
51
+ const pageNumberHTMLNode = firstLastChildNode; ///
57
52
 
58
- const pageNumberDirectiveHTMLTransform = removePageNumberDirectiveHTMLNode(node),
59
- footnotesDirectiveHTMLNode = removeFootnotesDirectiveHTMLNode(node),
60
- footnoteHTMLTransforms = removeFootnoteHTMLNodes(node);
53
+ pageNumber = pageNumberHTMLNode.getPageNumber();
54
+ }
61
55
 
62
- if (footnotesDirectiveHTMLNode !== null) {
63
- addFootnoteHTMLNodes(footnoteHTMLTransforms, node, context);
64
- }
56
+ return pageNumber;
57
+ });
65
58
 
66
- this.paginate(pageNumberDirectiveHTMLTransform, divisionHTMLNodes, context);
59
+ return pageNumber;
67
60
  }
68
61
 
69
- paginate(pageNumberDirectiveHTMLTransform, divisionHTMLNodes, context) {
70
- const node = this, ///
71
- outerNode = this.getOuterNode(),
72
- pageNumbers = (pageNumberDirectiveHTMLTransform !== null),
73
- identifierMap = {},
74
- divisionClassName = outerNode.className(context);
62
+ paginate(divisionHTMLNodes, context) {
63
+ const node = this,
64
+ footnotesDirectiveHTMLNode = footnotesDirectiveHTMLNodeFromNode(node),
65
+ pageNumberDirectiveHTMLNode = pageNumberDirectiveHTMLNodeFromNode(node);
75
66
 
76
67
  const htmlNodes = removeHTMLNodes(node),
77
68
  groupedHTMLNodesArray = groupHTMLNodes(htmlNodes),
78
69
  paginatedHTMLNodesArray = paginateGroupedHTMLNodes(groupedHTMLNodesArray, context);
79
70
 
71
+ const outerNode = this.getOuterNode(),
72
+ divisionClassName = outerNode.className(context);
73
+
80
74
  paginatedHTMLNodesArray.forEach((paginatedHTMLNodes) => {
81
75
  let pageNumber;
82
76
 
@@ -84,19 +78,12 @@ export default class DivisionHTMLNode extends HTMLNode {
84
78
 
85
79
  const divisionHTMLNode = DivisionHTMLNode.fromPaginatedHTMLNodesAndDivisionClassName(paginatedHTMLNodes, divisionClassName);
86
80
 
87
- divisionHTMLNode.resolveFootnotes(identifierMap, context);
88
-
89
- if (pageNumbers) {
90
- const pageNumberHTMLTransform = PageNumberHTMLTransform.fromPageNumber(pageNumber);
91
-
92
- pageNumberHTMLTransform.appendToDivisionHTMLNode(divisionHTMLNode);
93
-
94
- this.fromFirstHTMLNode((firstHTMLNode) => {
95
- const indexAnchorHTMLTransform = IndexAnchorHTMLTransform.fromPageNumber(pageNumber),
96
- htmlNode = firstHTMLNode; ///
81
+ if (footnotesDirectiveHTMLNode !== null) {
82
+ divisionHTMLNode.resolveFootnotes(context);
83
+ }
97
84
 
98
- indexAnchorHTMLTransform.appendToHTMLNode(htmlNode);
99
- });
85
+ if (pageNumberDirectiveHTMLNode !== null) {
86
+ divisionHTMLNode.resolvePageNumber(pageNumber, context);
100
87
  }
101
88
 
102
89
  divisionHTMLNodes.push(divisionHTMLNode);
@@ -109,43 +96,63 @@ export default class DivisionHTMLNode extends HTMLNode {
109
96
  });
110
97
  }
111
98
 
112
- pageNumber() {
113
- const pageNumber = this.fromFirstLastChildNode((firstLastChildNode) => {
114
- let pageNumber = null;
99
+ resolveFootnotes(context) {
100
+ const node = this, ///
101
+ footnoteHTMLNodes = footnotesHTMLNodesFromNode(node),
102
+ footnoteLinkHTMLNodes = footnoteLinkHTMLNodesFromNode(node);
115
103
 
116
- const firstLastChildNodePageNumberHTMLNode = (firstLastChildNode instanceof PageNumberHTMLNode);
104
+ let start = 0;
117
105
 
118
- if (firstLastChildNodePageNumberHTMLNode) {
119
- const pageNumberHTMLNode = firstLastChildNode; ///
106
+ const footnoteItemHTMLTransforms = [];
120
107
 
121
- pageNumber = pageNumberHTMLNode.getPageNumber();
122
- }
108
+ footnoteLinkHTMLNodes.forEach((footnoteLinkHTMLNode) => {
109
+ const identifier = footnoteLinkHTMLNode.identifier(context),
110
+ footnoteHTMLNode = extract(footnoteHTMLNodes, (footnoteHTMLNode) => {
111
+ const identifierMatches = footnoteHTMLNode.matchIdentifier(identifier);
123
112
 
124
- return pageNumber;
125
- });
113
+ if (identifierMatches) {
114
+ return true;
115
+ }
116
+ }) || null;
126
117
 
127
- return pageNumber;
128
- }
118
+ if (footnoteHTMLNode !== null) {
119
+ const number = start; ///
129
120
 
130
- resolveFootnotes(identifierMap, context) {
131
- let footnotesListHTMLTransform = null;
121
+ footnoteLinkHTMLNode.setNumber(number);
132
122
 
133
- const node = this, ///
134
- footnoteHTMLTransforms = removeFootnoteHTMLNodes(node),
135
- footnoteHTMLTransformsLength = footnoteHTMLTransforms.length;
123
+ const paragraphHTMLNode = footnoteHTMLNode.getParagraphHTMLNode(),
124
+ footnoteItemHTMLTransform = FootnoteItemHTMLTransform.fromParagraphHTMLNOdeAndIdentifier(paragraphHTMLNode, identifier)
136
125
 
137
- if (footnoteHTMLTransformsLength > 0) {
138
- const divisionHTMLNode = node, ///
139
- start = numberFootnoteLinkHTMLNodes(footnoteHTMLTransforms, identifierMap, node, context),
140
- lineHTMLTransforms = lineHTMLTransformsFromFootnoteHTMLTransforms(footnoteHTMLTransforms),
141
- footnoteItemHTMLTransforms = footnoteItemHTMLTransformsFromLineHTMLTransforms(lineHTMLTransforms, identifierMap, start);
126
+ footnoteItemHTMLTransforms.push(footnoteItemHTMLTransform);
142
127
 
143
- footnotesListHTMLTransform = FootnotesListHTMLTransform.fromStartAndFootnoteItemHTMLTransforms(start, footnoteItemHTMLTransforms);
128
+ start++;
129
+ } else {
130
+ footnoteLinkHTMLNode.resetNumber()
131
+ }
132
+ });
133
+
134
+ const footnoteItemHTMLTransformsLength = footnoteItemHTMLTransforms.length;
135
+
136
+ if (footnoteItemHTMLTransformsLength > 0) {
137
+ const divisionHTMLNode = node, ///
138
+ footnotesListHTMLTransform = FootnotesListHTMLTransform.fromStartAndFootnoteItemHTMLTransforms(start, footnoteItemHTMLTransforms);
144
139
 
145
140
  footnotesListHTMLTransform.appendToDivisionHTMLNode(divisionHTMLNode);
146
141
  }
142
+ }
143
+
144
+ resolvePageNumber(pageNumber, context) {
145
+ const divisionHTMLNode = this, ///
146
+ pageNumberHTMLTransform = PageNumberHTMLTransform.fromPageNumber(pageNumber);
147
+
148
+ pageNumberHTMLTransform.appendToDivisionHTMLNode(divisionHTMLNode);
147
149
 
148
- return footnotesListHTMLTransform;
150
+ this.fromFirstChildNode((firstChildNode) => {
151
+ const indexAnchorHTMLTransform = IndexAnchorHTMLTransform.fromPageNumber(pageNumber),
152
+ htmlNode = firstChildNode; ///
153
+
154
+ indexAnchorHTMLTransform.appendToHTMLNode(htmlNode);
155
+ });
149
156
  }
150
157
 
151
158
  asString() {
@@ -4,6 +4,27 @@ import HTMLNode from "../../node/html";
4
4
  import {EMPTY_STRING} from "../../constants";
5
5
 
6
6
  export default class FootnoteHTMLNode extends HTMLNode {
7
+ getParagraphHTMLNode() {
8
+ const paragraphHTMLNode = this.fromSecondChildNode((secondChildNode) => {
9
+ const paragraphHTMLNode = secondChildNode; ///
10
+
11
+ return paragraphHTMLNode;
12
+ });
13
+
14
+ return paragraphHTMLNode;
15
+ }
16
+
17
+ matchIdentifier(identifier, context) {
18
+ const identifierA = identifier; ///
19
+
20
+ identifier = this.identifier(context);
21
+
22
+ const identifierB = identifier, ///
23
+ identifierMatches = (identifierA === identifierB);
24
+
25
+ return identifierMatches;
26
+ }
27
+
7
28
  identifier(context) {
8
29
  const markdownNode = this.getMarkdownNode(),
9
30
  identifier = markdownNode.identifier(context);
@@ -56,7 +56,7 @@ export default class IndexHeadingHTMLNode extends HTMLNode {
56
56
  domElement = this.getDOMElement();
57
57
 
58
58
  const parentDOMElement = domElement, ///
59
- firstChild = domElement.firstChild
59
+ firstChild = domElement.firstChild;
60
60
 
61
61
  domElement = firstChild; ///
62
62
 
@@ -24,13 +24,12 @@ export default class FootnoteItemHTMLNode extends HTMLNode {
24
24
 
25
25
  static className = "footnote";
26
26
 
27
- static fromLineTMLTransformAndIdentifier(lineHTMLTransform, identifier) {
27
+ static fromParagraphTMLNodeAndIdentifier(paragraphHTMLNode, identifier) {
28
28
  const prepend = FOOTNOTE_PREPEND,
29
29
  anchorHTMLNode = AnchorHTMLNode.fromPrependAndIdentifier(prepend, identifier),
30
- lineHTMLNode = lineHTMLTransform.getLineHTMLNode(),
31
30
  childHTMLNodes = [
32
31
  anchorHTMLNode,
33
- lineHTMLNode
32
+ paragraphHTMLNode
34
33
  ],
35
34
  footnoteItemHTMLNode = HTMLNode.fromChildHTMLNodes(FootnoteItemHTMLNode, childHTMLNodes);
36
35
 
@@ -88,7 +88,7 @@ export default class EmailLinkHTMLNode extends HTMLNode {
88
88
  domElement = this.getDOMElement();
89
89
 
90
90
  const parentDOMElement = domElement, ///
91
- firstChild = domElement.firstChild
91
+ firstChild = domElement.firstChild;
92
92
 
93
93
  domElement = firstChild; ///
94
94
 
@@ -22,10 +22,12 @@ export default class FootnoteLinkHTMLNode extends HTMLNode {
22
22
  this.number = number;
23
23
  }
24
24
 
25
+ resetNumber() {
26
+ this.number = null;
27
+ }
28
+
25
29
  content(context) {
26
- const content = (this.number !== null) ?
27
- this.number :
28
- EMPTY_STRING;
30
+ const content = this.number; ///
29
31
 
30
32
  return content;
31
33
  }
@@ -52,68 +54,82 @@ export default class FootnoteLinkHTMLNode extends HTMLNode {
52
54
  }
53
55
 
54
56
  mount(parentDOMElement, siblingDOMElement, context) {
55
- let domElement;
57
+ if (this.number !== null) {
58
+ let domElement;
56
59
 
57
- domElement = this.createDOMElement(context);
60
+ domElement = this.createDOMElement(context);
58
61
 
59
- this.setDOMElement(domElement);
62
+ this.setDOMElement(domElement);
60
63
 
61
- (siblingDOMElement !== null) ?
62
- insertAfter(domElement, parentDOMElement, siblingDOMElement) :
63
- insertBeforehand(domElement, parentDOMElement);
64
+ (siblingDOMElement !== null) ?
65
+ insertAfter(domElement, parentDOMElement, siblingDOMElement) :
66
+ insertBeforehand(domElement, parentDOMElement);
64
67
 
65
- parentDOMElement = domElement; ///
68
+ parentDOMElement = domElement; ///
66
69
 
67
- const content = this.content(context),
68
- textNode = document.createTextNode(content);
70
+ const content = this.content(context),
71
+ textNode = document.createTextNode(content);
69
72
 
70
- domElement = textNode; ///
73
+ domElement = textNode; ///
71
74
 
72
- insertAfterwards(domElement, parentDOMElement);
75
+ insertAfterwards(domElement, parentDOMElement);
73
76
 
74
- domElement = this.getDOMElement();
77
+ domElement = this.getDOMElement();
75
78
 
76
- siblingDOMElement = domElement; ///
79
+ siblingDOMElement = domElement; ///
80
+ }
77
81
 
78
82
  return siblingDOMElement;
79
83
  }
80
84
 
81
85
  unmount(parentDOMElement) {
82
- let domElement;
86
+ if (this.number !== null) {
87
+ let domElement;
83
88
 
84
- {
85
- domElement = this.getDOMElement();
89
+ {
90
+ domElement = this.getDOMElement();
86
91
 
87
- const parentDOMElement = domElement, ///
88
- firstChild = domElement.firstChild
92
+ const parentDOMElement = domElement, ///
93
+ firstChild = domElement.firstChild;
89
94
 
90
- domElement = firstChild; ///
95
+ domElement = firstChild; ///
91
96
 
92
- remove(domElement, parentDOMElement);
93
- }
97
+ remove(domElement, parentDOMElement);
98
+ }
94
99
 
95
- domElement = this.getDOMElement();
100
+ domElement = this.getDOMElement();
96
101
 
97
- remove(domElement, parentDOMElement);
102
+ remove(domElement, parentDOMElement);
98
103
 
99
- this.resetDOMElement();
104
+ this.resetDOMElement();
105
+ }
100
106
  }
101
107
 
102
108
  asHTML(indent, context) {
103
109
  let html;
104
110
 
105
- indent = this.adjustIndent(indent);
111
+ if (this.number === null) {
112
+ html = EMPTY_STRING;
113
+ } else {
114
+ indent = this.adjustIndent(indent);
106
115
 
107
- const childNodesHTML = this.childNodesAsHTML(indent, context),
108
- startingTag = this.startingTag(context),
109
- closingTag = this.closingTag(context);
116
+ const childNodesHTML = this.childNodesAsHTML(indent, context),
117
+ startingTag = this.startingTag(context),
118
+ closingTag = this.closingTag(context);
110
119
 
111
- html = `${indent}${startingTag}${childNodesHTML}${closingTag}
120
+ html = `${indent}${startingTag}${childNodesHTML}${closingTag}
112
121
  `;
122
+ }
113
123
 
114
124
  return html;
115
125
  }
116
126
 
127
+ asPlainText(context) {
128
+ const plainText = EMPTY_STRING;
129
+
130
+ return plainText;
131
+ }
132
+
117
133
  childNodesAsHTML(indent, context) {
118
134
  const content = this.content(context),
119
135
  childNodesHTML = content; ///
@@ -4,8 +4,6 @@ import HTMLNode from "../../node/html";
4
4
  import IndexHTMLTransform from "../../transform/html/index";
5
5
  import DivisionHTMLTransform from "../../transform/html/division";
6
6
  import ContentsListHTMLTransform from "../../transform/html/list/contents";
7
- import IndexDirectiveHTMLTransform from "../../transform/html/directive/index";
8
- import ContentsDirectiveHTMLTransform from "../../transform/html/directive/contents";
9
7
 
10
8
  import { HTML_MARKDOWN_RULE_NAME } from "../../ruleNames/markdown";
11
9
  import { divisionHTMLNodesFromNode, indexDirectiveHTMLNodeFromNode, contentsDirectiveHTMLNodeFromNode } from "../../utilities/html";
@@ -54,7 +52,7 @@ export default class TopmostHTMLNode extends HTMLNode {
54
52
  divisionHTMLTransforms.forEach((divisionHTMLTransform) => {
55
53
  divisionHTMLTransform.remove();
56
54
 
57
- divisionHTMLTransform.resolve(divisionHTMLNodes, context);
55
+ divisionHTMLTransform.paginate(divisionHTMLNodes, context);
58
56
  });
59
57
 
60
58
  delete context.pageNumber;
@@ -77,12 +75,11 @@ export default class TopmostHTMLNode extends HTMLNode {
77
75
  }
78
76
 
79
77
  const divisionHTMLNodes = this.getDivisionHTMLNodes(),
80
- indexDirectiveHTMLTransform = IndexDirectiveHTMLTransform.fromIndexDirectiveHTMLNode(indexDirectiveHTMLNode),
81
- indexHTMLTransform = IndexHTMLTransform.fromIndexDirectiveHTMLTransformAndDivisionHTMLNodes(indexDirectiveHTMLTransform, divisionHTMLNodes, context);
78
+ indexHTMLTransform = IndexHTMLTransform.fromIndexDirectiveHTMLNodeAndDivisionHTMLNodes(indexDirectiveHTMLNode, divisionHTMLNodes, context);
82
79
 
83
- (indexHTMLTransform !== null) ?
84
- indexHTMLTransform.replaceIndexDirectiveHTMLTransform(indexDirectiveHTMLTransform) :
85
- indexDirectiveHTMLTransform.remove();
80
+ if (indexHTMLTransform !== null) {
81
+ indexHTMLTransform.addAfterIndexDirectiveHTMLNode(indexDirectiveHTMLNode);
82
+ }
86
83
  }
87
84
 
88
85
  addContents(context) {
@@ -94,12 +91,11 @@ export default class TopmostHTMLNode extends HTMLNode {
94
91
  }
95
92
 
96
93
  const topmostHTMLNode = this, ///
97
- contentsDirectiveHTMLTransform = ContentsDirectiveHTMLTransform.fromContentsDirectiveHTMLNode(contentsDirectiveHTMLNode),
98
- contentsListHTMLTransform = ContentsListHTMLTransform.fromContentsDirectiveHTMLTransformAndTopmostHTMLNode(contentsDirectiveHTMLTransform, topmostHTMLNode, context);
94
+ contentsListHTMLTransform = ContentsListHTMLTransform.fromContentsDirectiveHTMLNodeAndTopmostHTMLNode(contentsDirectiveHTMLNode, topmostHTMLNode, context);
99
95
 
100
- (contentsListHTMLTransform !== null) ?
101
- contentsListHTMLTransform.replaceContentsDirectiveHTMLTransform(contentsDirectiveHTMLTransform) :
102
- contentsDirectiveHTMLTransform.remove();
96
+ if (contentsListHTMLTransform !== null) {
97
+ contentsListHTMLTransform.addAfterContentsDirectiveHTMLNode(contentsDirectiveHTMLNode);
98
+ }
103
99
  }
104
100
 
105
101
  adjustIndent(indent) {
@@ -18,10 +18,10 @@ export default class DivisionHTMLTransform extends HTMLTransform {
18
18
  parentNode.appendChildNode(childNode);
19
19
  }
20
20
 
21
- resolve(divisionHTMLNodes, context) {
21
+ paginate(divisionHTMLNodes, context) {
22
22
  const divisionHTMLNode = this.getDivisionHTMLNode();
23
23
 
24
- divisionHTMLNode.resolve(divisionHTMLNodes, context);
24
+ divisionHTMLNode.paginate(divisionHTMLNodes, context);
25
25
  }
26
26
 
27
27
  static fromDivisionHTMLNode(divisionHTMLNode) {
@@ -10,17 +10,6 @@ export default class FootnoteHTMLTransform extends HTMLTransform {
10
10
  return identifier;
11
11
  }
12
12
 
13
- getLineHTMLNode() {
14
- const paragraphHTMLNode = this.getParagraphHTMLNode(),
15
- lineHTMLNode = paragraphHTMLNode.fromFirstChildNode((firstChildNode) => {
16
- const lineHTMLNode = firstChildNode; ///
17
-
18
- return lineHTMLNode;
19
- });
20
-
21
- return lineHTMLNode;
22
- }
23
-
24
13
  getFootnoteHTMLNode() {
25
14
  const htmlNode = this.getHTMLNode(),
26
15
  footnoteHTMLNode = htmlNode; ///
@@ -39,22 +28,11 @@ export default class FootnoteHTMLTransform extends HTMLTransform {
39
28
  return paragraphHTMLNode;
40
29
  }
41
30
 
42
- matchIdentifier(identifier, context) {
43
- const identifierA = identifier; ///
44
-
45
- identifier = this.identifier(context);
46
-
47
- const identifierB = identifier, ///
48
- identifierMatches = (identifierA === identifierB);
49
-
50
- return identifierMatches;
51
- }
52
-
53
31
  addAfterFootnoteLinkHTMLTransform(footnoteLinkHTMLTransform) {
54
32
  const containingHTMLNode = footnoteLinkHTMLTransform.getContainingHTMLNode(),
55
- existingHTMLNode = containingHTMLNode; ///
33
+ siblingHTMLNode = containingHTMLNode; ///
56
34
 
57
- this.addAfter(existingHTMLNode);
35
+ this.addAfter(siblingHTMLNode);
58
36
  }
59
37
 
60
38
  static fromFootnoteHTMLNode(footnoteHTMLNde) {
@@ -17,26 +17,26 @@ export default class IndexHTMLTransform extends HTMLTransform {
17
17
  return this.htmlNodes;
18
18
  }
19
19
 
20
- replace(replacedHTMLNode) {
21
- const parentNode = replacedHTMLNode.getParentNode(),
22
- replacedChildNode = replacedHTMLNode, ///
23
- replacementChildNodes = this.htmlNodes; ///
24
-
25
- parentNode.replaceChildNode(replacedChildNode, replacementChildNodes);
20
+ addAfter(siblingHTMLNode) {
21
+ const childNode = siblingHTMLNode, ///
22
+ parentNode = childNode.getParentNode(),
23
+ index = parentNode.indexOfChildNode(childNode),
24
+ startIndex = index + 1,
25
+ addedChildNodes = this.htmlNodes; ///
26
+
27
+ parentNode.addChildNodes(addedChildNodes, startIndex);
26
28
  }
27
29
 
28
- replaceIndexDirectiveHTMLTransform(indexDirectiveHTMLTransform) {
29
- const indexDirectiveHTMLNode = indexDirectiveHTMLTransform.getIndexDirectiveHTMLNode(),
30
- replacedHTMLNode = indexDirectiveHTMLNode; ///
30
+ addAfterIndexDirectiveHTMLNode(indexDirectiveHTMLNode) {
31
+ const siblingHTMLNode = indexDirectiveHTMLNode; ///
31
32
 
32
- this.replace(replacedHTMLNode)
33
+ this.addAfter(siblingHTMLNode);
33
34
  }
34
35
 
35
- static fromIndexDirectiveHTMLTransformAndDivisionHTMLNodes(indexDirectiveHTMLTransform, divisionHTMLNodes, context) {
36
+ static fromIndexDirectiveHTMLNodeAndDivisionHTMLNodes(indexDirectiveHTMLNode, divisionHTMLNodes, context) {
36
37
  let indexHTMLTransform = null;
37
38
 
38
- const indexDirectiveHTMLNode = indexDirectiveHTMLTransform.getIndexDirectiveHTMLNode(),
39
- indexList = IndexList.fromIndexDirectiveHTMLNodeAndDivisionHTMLNodes(indexDirectiveHTMLNode, divisionHTMLNodes, context),
39
+ const indexList = IndexList.fromIndexDirectiveHTMLNodeAndDivisionHTMLNodes(indexDirectiveHTMLNode, divisionHTMLNodes, context),
40
40
  indexHTMLTransforms = [];
41
41
 
42
42
  letters.forEach((letter) => {
@@ -9,7 +9,7 @@ export default class IndexAnchorTMLTransform extends HTMLTransform {
9
9
  appendToHTMLNode(htmlNode) {
10
10
  const parentHTMLNode = htmlNode; ///
11
11
 
12
- this.appendTo(parentHTMLNode);
12
+ this.prependTo(parentHTMLNode);
13
13
  }
14
14
 
15
15
  static fromPageNumber(pageNumber) {
@@ -11,10 +11,10 @@ export default class FootnoteItemHTMLTransform extends HTMLTransform {
11
11
  return footnoteItemHTMLNode;
12
12
  }
13
13
 
14
- static fromLineTMLTransformAndIdentifier(lineHTMLTransform, identifier) {
15
- const footnoteItemHTMLNode = FootnoteItemHTMLNode.fromLineTMLTransformAndIdentifier(lineHTMLTransform, identifier),
16
- ascendantNode = footnoteItemHTMLNode, ///
17
- footnoteItemTransform = lineHTMLTransform.expand(FootnoteItemHTMLTransform, ascendantNode);
14
+ static fromParagraphHTMLNOdeAndIdentifier(paragraphHTMLNode, identifier) {
15
+ const footnoteItemHTMLNode = FootnoteItemHTMLNode.fromParagraphTMLNodeAndIdentifier(paragraphHTMLNode, identifier),
16
+ htmlNode = footnoteItemHTMLNode, ///
17
+ footnoteItemTransform = HTMLTransform.fromHTMLNode(FootnoteItemHTMLTransform, htmlNode);
18
18
 
19
19
  return footnoteItemTransform;
20
20
  }
@@ -16,12 +16,4 @@ export default class LineHTMLTransform extends HTMLTransform {
16
16
 
17
17
  return paragraphHTMLTransform;
18
18
  }
19
-
20
- static fromFootnoteHTMLTransform(footnoteHTMLTransform) {
21
- const lineHTMLNode = footnoteHTMLTransform.getLineHTMLNode(),
22
- htmlNode = lineHTMLNode, ///
23
- paragraphHTMLTransform = HTMLTransform.fromHTMLNode(LineHTMLTransform, htmlNode);
24
-
25
- return paragraphHTMLTransform;
26
- }
27
19
  }
@@ -14,19 +14,17 @@ const { filter } = arrayUtilities,
14
14
  { isLessThan } = nodeUtilities;
15
15
 
16
16
  class ContentsListHTMLTransform extends HTMLTransform {
17
- replaceContentsDirectiveHTMLTransform(contentsDirectiveHTMLTransform) {
18
- const contentsDirectiveHTMLNode = contentsDirectiveHTMLTransform.getContentsDirectiveHTMLNode(),
19
- replacedHTMLNode = contentsDirectiveHTMLNode; ///
17
+ addAfterContentsDirectiveHTMLNode(contentsDirectiveHTMLNode) {
18
+ const siblingHTMLNode = contentsDirectiveHTMLNode; ///
20
19
 
21
- super.replace(replacedHTMLNode);
20
+ super.addAfter(siblingHTMLNode);
22
21
  }
23
22
 
24
- static fromContentsDirectiveHTMLTransformAndTopmostHTMLNode(contentsDirectiveHTMLTransform, topmostHTMLNode, context) {
23
+ static fromContentsDirectiveHTMLNodeAndTopmostHTMLNode(contentsDirectiveHTMLNode, topmostHTMLNode, context) {
25
24
  let contentsListHTMLTransform = null;
26
25
 
27
26
  const node = topmostHTMLNode, ///
28
- headingHTMLNodes = headingHTMLNodesFromNode(node),
29
- contentsDirectiveHTMLNode = contentsDirectiveHTMLTransform.getContentsDirectiveHTMLNode();
27
+ headingHTMLNodes = headingHTMLNodesFromNode(node);
30
28
 
31
29
  filter(headingHTMLNodes, (headingHTMLNode) => {
32
30
  const contentsDirectiveHTMLNodeLessThanHeadingHTMLNode = isLessThan(contentsDirectiveHTMLNode, headingHTMLNode);