highmark-markdown 0.0.379 → 0.0.382

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 (100) hide show
  1. package/example.js +4764 -3417
  2. package/lib/attributeNames.js +5 -1
  3. package/lib/constants.js +1 -5
  4. package/lib/defaultMarkdownStyle.js +2 -2
  5. package/lib/example/constants.js +15 -7
  6. package/lib/example/customEventTypes.js +5 -1
  7. package/lib/example/view/button/page.js +168 -0
  8. package/lib/example/view/div/html.js +2 -2
  9. package/lib/example/view/div/pageButtons.js +270 -0
  10. package/lib/example/view/div/preview.js +105 -13
  11. package/lib/example/view/textarea/css.js +2 -2
  12. package/lib/example/view/xmp.js +2 -4
  13. package/lib/example/view.js +88 -34
  14. package/lib/example.js +2 -2
  15. package/lib/index.js +15 -11
  16. package/lib/markdown/bnf.js +2 -2
  17. package/lib/mixins/node.js +10 -3
  18. package/lib/node/markdown/anchor.js +5 -2
  19. package/lib/node/markdown/blockLine.js +3 -2
  20. package/lib/node/markdown/contentsLink.js +4 -4
  21. package/lib/node/markdown/directive/contents.js +6 -6
  22. package/lib/node/markdown/directive/embee.js +12 -12
  23. package/lib/node/markdown/directive/footnotes.js +6 -6
  24. package/lib/node/markdown/directive/ignore.js +6 -6
  25. package/lib/node/markdown/directive/include.js +6 -6
  26. package/lib/node/markdown/directive/pageNumber.js +74 -9
  27. package/lib/node/markdown/directive.js +128 -0
  28. package/lib/node/markdown/directives.js +33 -2
  29. package/lib/node/markdown/division.js +128 -28
  30. package/lib/node/markdown/emailLink.js +8 -1
  31. package/lib/node/markdown/endOfLine.js +8 -1
  32. package/lib/node/markdown/footnoteItem.js +3 -3
  33. package/lib/node/markdown/footnotesList.js +95 -27
  34. package/lib/node/markdown/heading/primary.js +2 -1
  35. package/lib/node/markdown/heading/quaternary.js +2 -1
  36. package/lib/node/markdown/heading/secondary.js +2 -1
  37. package/lib/node/markdown/heading/tertiary.js +2 -1
  38. package/lib/node/markdown/heading.js +8 -1
  39. package/lib/node/markdown/line.js +8 -1
  40. package/lib/node/markdown/subDivision.js +17 -10
  41. package/lib/node/markdown.js +15 -1
  42. package/lib/replacement.js +185 -0
  43. package/lib/utilities/childNodes.js +7 -5
  44. package/lib/utilities/content.js +7 -7
  45. package/lib/utilities/markdown.js +87 -0
  46. package/lib/utilities/node.js +163 -0
  47. package/lib/utilities/query.js +25 -9
  48. package/package.json +1 -1
  49. package/src/attributeNames.js +1 -0
  50. package/src/constants.js +0 -1
  51. package/src/defaultMarkdownStyle.js +5 -1
  52. package/src/example/constants.js +4 -2
  53. package/src/example/customEventTypes.js +1 -0
  54. package/src/example/view/button/page.js +48 -0
  55. package/src/example/view/div/html.js +0 -1
  56. package/src/example/view/div/pageButtons.js +98 -0
  57. package/src/example/view/div/preview.js +51 -11
  58. package/src/example/view/textarea/css.js +1 -1
  59. package/src/example/view/xmp.js +1 -5
  60. package/src/example/view.js +117 -51
  61. package/src/example.js +2 -2
  62. package/src/index.js +9 -6
  63. package/src/markdown/bnf.js +21 -23
  64. package/src/mixins/node.js +20 -2
  65. package/src/node/markdown/anchor.js +7 -2
  66. package/src/node/markdown/blockLine.js +3 -3
  67. package/src/node/markdown/contentsLink.js +3 -3
  68. package/src/node/markdown/directive/contents.js +3 -3
  69. package/src/node/markdown/directive/embee.js +8 -8
  70. package/src/node/markdown/directive/footnotes.js +3 -3
  71. package/src/node/markdown/directive/ignore.js +3 -3
  72. package/src/node/markdown/directive/include.js +3 -3
  73. package/src/node/markdown/directive/pageNumber.js +53 -5
  74. package/src/node/markdown/directive.js +13 -0
  75. package/src/node/markdown/directives.js +10 -1
  76. package/src/node/markdown/division.js +144 -26
  77. package/src/node/markdown/emailLink.js +6 -0
  78. package/src/node/markdown/endOfLine.js +6 -0
  79. package/src/node/markdown/footnoteItem.js +1 -1
  80. package/src/node/markdown/footnotesList.js +87 -31
  81. package/src/node/markdown/heading/primary.js +2 -0
  82. package/src/node/markdown/heading/quaternary.js +2 -0
  83. package/src/node/markdown/heading/secondary.js +2 -0
  84. package/src/node/markdown/heading/tertiary.js +2 -0
  85. package/src/node/markdown/heading.js +6 -0
  86. package/src/node/markdown/line.js +12 -1
  87. package/src/node/markdown/subDivision.js +18 -12
  88. package/src/node/markdown.js +19 -0
  89. package/src/replacement.js +158 -0
  90. package/src/utilities/childNodes.js +6 -4
  91. package/src/utilities/content.js +12 -20
  92. package/src/utilities/markdown.js +103 -0
  93. package/src/utilities/node.js +158 -0
  94. package/src/utilities/query.js +22 -6
  95. package/lib/replacementNodeAndTokens.js +0 -149
  96. package/lib/utilities/footnotes.js +0 -20
  97. package/lib/utilities/replace.js +0 -66
  98. package/src/replacementNodeAndTokens.js +0 -152
  99. package/src/utilities/footnotes.js +0 -16
  100. package/src/utilities/replace.js +0 -31
@@ -7,11 +7,7 @@ import { Element } from "easy";
7
7
  import { EMPTY_STRING } from "../constants";
8
8
 
9
9
  class XMP extends Element {
10
- update(htmls) {
11
- htmls = htmls.join(EMPTY_STRING);
12
-
13
- const html = `${htmls}`;
14
-
10
+ update(html) {
15
11
  this.html(html);
16
12
  }
17
13
 
@@ -16,6 +16,9 @@ import RightSizeableDiv from "./view/div/sizeable/right";
16
16
  import MarkdownContainerDiv from "./view/div/container/markdown";
17
17
  import MarkdownStyleContainerDiv from "./view/div/container/markdownStyle";
18
18
 
19
+ import { postprocess } from "../utilities/markdown";
20
+ import { LINES_PER_PAGE, CHARACTERS_PER_LINE, INTRODUCTION_CLASS_NAME } from "./constants";
21
+
19
22
  const markdownLexer = MarkdownLexer.fromNothing(),
20
23
  markdownParser = MarkdownParser.fromNothing(),
21
24
  markdownStyleLexer = MarkdownStyleLexer.fromNothing(),
@@ -26,6 +29,12 @@ class View extends Element {
26
29
  this.markdownStyle();
27
30
  }
28
31
 
32
+ pageUpdateCustomHandler = (event, element, index) => {
33
+ this.clearPage();
34
+
35
+ this.updatePage(index);
36
+ }
37
+
29
38
  markdownCustomHandler = (event, element) => {
30
39
  this.markdown();
31
40
  }
@@ -63,66 +72,75 @@ class View extends Element {
63
72
  lexer = markdownLexer, ///
64
73
  parser = markdownParser, ///
65
74
  content = markdown, ///
66
- tokens = lexer.tokenise(content),
67
- startRule = parser.getStartRule(),
68
75
  startOfContent = true,
76
+ startRule = parser.getStartRule(),
77
+ tokens = lexer.tokenise(content),
69
78
  node = parser.parse(tokens, startRule, startOfContent);
70
79
 
80
+ this.setTokens(tokens);
81
+
71
82
  if (node !== null) {
72
- const pageNumber = 1,
73
- divisionMarkdownNode = node, ///
74
- divisionMarkdownNodes = [
75
- divisionMarkdownNode
76
- ],
83
+ const divisionClassName = INTRODUCTION_CLASS_NAME,
84
+ divisionMarkdownNode = node; ///
85
+
86
+ divisionMarkdownNode.setDivisionClassName(divisionClassName);
87
+
88
+ const linesPerPage = LINES_PER_PAGE,
89
+ charactersPerLine = CHARACTERS_PER_LINE,
77
90
  context = {
78
91
  tokens,
79
92
  importer,
80
- pageNumber,
81
- divisionMarkdownNodes
82
- };
93
+ linesPerPage,
94
+ charactersPerLine
95
+ },
96
+ divisionMarkdownNodes = postprocess(divisionMarkdownNode, context);
83
97
 
84
- divisionMarkdownNode.resolveIncludes(context);
98
+ this.setDivisionMarkdownNodes(divisionMarkdownNodes);
85
99
 
86
- divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
87
- divisionMarkdownNode.resolveEmbeddings(context);
100
+ const index = 0,
101
+ length = divisionMarkdownNodes.length,
102
+ parseTree = divisionMarkdownNode.asParseTree(tokens);
88
103
 
89
- divisionMarkdownNode.createFootnotes(context);
90
- });
104
+ this.updatePage(index);
91
105
 
92
- divisionMarkdownNodes.some((divisionMarkdownNode) => {
93
- const contentsCreated = divisionMarkdownNode.createContents(context);
106
+ this.updatePageButtonsDiv(length);
94
107
 
95
- if (contentsCreated) {
96
- return true;
97
- }
98
- });
108
+ this.updateMarkdownParseTreeTextarea(parseTree);
109
+ } else {
110
+ this.clearPage();
99
111
 
100
- const htmls = [],
101
- domElements = [];
112
+ this.clearPageButtonsDiv();
102
113
 
103
- divisionMarkdownNodes.forEach((divisionMarkdownNode) => {
104
- const html = divisionMarkdownNode.asHTML(context),
105
- domElement = divisionMarkdownNode.createDOMElement(context);
114
+ this.clearMarkdownParseTreeTextarea();
106
115
 
107
- htmls.push(html);
116
+ const divisionMarkdownNodes = null;
108
117
 
109
- domElements.push(domElement);
110
- });
118
+ this.setDivisionMarkdownNodes(divisionMarkdownNodes);
119
+ }
120
+ }
111
121
 
112
- this.updateXMP(htmls);
122
+ updatePage(index) {
123
+ const divisionMarkdownNodes = this.getDivisionMarkdownNodes(),
124
+ divisionMarkdownNode = divisionMarkdownNodes[index],
125
+ tokens = this.getTokens(),
126
+ context = {
127
+ tokens
128
+ },
129
+ length = null,
130
+ html = divisionMarkdownNode.asHTML(context),
131
+ domElement = divisionMarkdownNode.createDOMElement(context);
113
132
 
114
- this.updatePreviewDiv(domElements);
133
+ this.updateXMP(html);
115
134
 
116
- const parseTree = node.asParseTree(tokens);
135
+ this.updatePreviewDiv(domElement);
117
136
 
118
- this.updateMarkdownParseTreeTextarea(parseTree);
119
- } else {
120
- this.clearXMP();
137
+ this.updatePageButtonsDiv(length, index);
138
+ }
121
139
 
122
- this.clearPreviewDiv();
140
+ clearPage() {
141
+ this.clearXMP();
123
142
 
124
- this.clearMarkdownParseTreeTextarea();
125
- }
143
+ this.clearPreviewDiv();
126
144
  }
127
145
 
128
146
  markdownStyle() {
@@ -140,6 +158,40 @@ class View extends Element {
140
158
  this.updateMarkdownStyle();
141
159
  }
142
160
 
161
+ getTokens() {
162
+ const { tokens } = this.getState();
163
+
164
+ return tokens;
165
+ }
166
+
167
+ setTokens(tokens) {
168
+ this.updateState({
169
+ tokens
170
+ });
171
+ }
172
+
173
+ getDivisionMarkdownNodes() {
174
+ const { divisionMarkdownNodes } = this.getState();
175
+
176
+ return divisionMarkdownNodes;
177
+ }
178
+
179
+ setDivisionMarkdownNodes(divisionMarkdownNodes) {
180
+ this.updateState({
181
+ divisionMarkdownNodes
182
+ });
183
+ }
184
+
185
+ setInitialState() {
186
+ const tokens = null,
187
+ divisionMarkdownNodes = null;
188
+
189
+ this.setState({
190
+ tokens,
191
+ divisionMarkdownNodes
192
+ });
193
+ }
194
+
143
195
  childElements() {
144
196
  return (
145
197
 
@@ -168,7 +220,7 @@ class View extends Element {
168
220
  <SubHeading>
169
221
  Preview
170
222
  </SubHeading>
171
- <PreviewDiv/>
223
+ <PreviewDiv onCustomPageUpdate={this.pageUpdateCustomHandler} />
172
224
  </RowsDiv>
173
225
  </RowDiv>
174
226
  </RowsDiv>
@@ -181,6 +233,8 @@ class View extends Element {
181
233
  initialise() {
182
234
  this.assignContext();
183
235
 
236
+ this.setInitialState();
237
+
184
238
  const { initialMarkdown, initialMarkdownStyle } = this.constructor,
185
239
  markdownStyle = initialMarkdownStyle, ///
186
240
  markdown = initialMarkdown; ///
@@ -192,17 +246,6 @@ class View extends Element {
192
246
  this.update();
193
247
  }
194
248
 
195
- static initialMarkdownStyle = `pageNumber {
196
- colour: red;
197
- }
198
- `;
199
-
200
- static initialMarkdown = `* Occam [^occam].
201
-
202
- [^occam]: Occam.
203
-
204
- `;
205
-
206
249
  static tagName = "div";
207
250
 
208
251
  static ignoredProperties = [
@@ -212,6 +255,29 @@ class View extends Element {
212
255
  static defaultProperties = {
213
256
  className: "view"
214
257
  };
258
+
259
+ static initialMarkdown = `
260
+
261
+ Occam [^occam].
262
+
263
+ A paragraph to trigger the pagination.
264
+
265
+ Occam and Florence [^occam] [^florence].
266
+
267
+ [^occam]: Occam footnote.
268
+
269
+ [^florence]: Florence footnote.
270
+
271
+ @footnotes
272
+
273
+ @pageNumber
274
+ `;
275
+
276
+ static initialMarkdownStyle = `width: 100%;
277
+ position: absolute;
278
+ min-height: 100%;
279
+ padding-top: 5rem;
280
+ `;
215
281
  }
216
282
 
217
283
  export default withStyle(View)`
@@ -221,7 +287,7 @@ export default withStyle(View)`
221
287
  `;
222
288
 
223
289
  function importer(filePath, context) {
224
- const content = `# Primary heading
290
+ const content = `#Introuction
225
291
  `,
226
292
  startOfContent = true,
227
293
  startRule = markdownParser.getStartRule(),
package/src/example.js CHANGED
@@ -9,13 +9,13 @@ import { mediaTypeNames, MarkdownStyleElement, DefaultMarkdownStyleElement } fro
9
9
 
10
10
  import View from "./example/view";
11
11
 
12
- import { PREVIEW_DIV_DIVS_SELECTORS_STRING } from "./example/constants";
12
+ import { INTRODUCTION_DIV_SELECTORS_STRING } from "./example/constants";
13
13
 
14
14
  const { renderStyles } = withStyle,
15
15
  { PREVIEW_MEDIA_TYPE_NAME } = mediaTypeNames;
16
16
 
17
17
  const mediaTypeName = PREVIEW_MEDIA_TYPE_NAME,
18
- selectorsString = PREVIEW_DIV_DIVS_SELECTORS_STRING;
18
+ selectorsString = INTRODUCTION_DIV_SELECTORS_STRING;
19
19
 
20
20
  DefaultMarkdownStyleElement.fromMediaTypeNameAndSelectorsString(mediaTypeName, selectorsString);
21
21
 
package/src/index.js CHANGED
@@ -1,17 +1,20 @@
1
1
  "use strict";
2
2
 
3
+ export { default as MarkdownLexer } from "./markdown/lexer";
4
+ export { default as MarkdownParser } from "./markdown/parser";
5
+ export { default as MarkdownStyleLexer } from "./markdownStyle/lexer";
6
+ export { default as MarkdownStyleParser } from "./markdownStyle/parser";
7
+
8
+ export { default as cssUtilities } from "./utilities/css";
9
+ export { default as queryUtilities } from "./utilities/query";
10
+ export { default as markdownUtilities } from "./utilities/markdown";
11
+
3
12
  export { default as nodeMap } from "./nodeMap";
4
13
  export { default as ruleNames } from "./ruleNames";
5
14
  export { default as tokenTypes } from "./tokenTypes";
6
15
  export { default as elementMap } from "./elementMap";
7
- export { default as cssUtilities } from "./utilities/css";
8
16
  export { default as MarkdownNode } from "./node/markdown";
9
- export { default as MarkdownLexer } from "./markdown/lexer";
10
17
  export { default as mediaTypeNames } from "./mediaTypeNames";
11
- export { default as MarkdownParser } from "./markdown/parser";
12
- export { default as queryUtilities } from "./utilities/query";
13
- export { default as MarkdownStyleLexer } from "./markdownStyle/lexer";
14
- export { default as MarkdownStyleParser } from "./markdownStyle/parser";
15
18
  export { default as MarkdownStyleElement } from "./styleElement/markdown";
16
19
  export { default as defaultMarkdownStyle } from "./defaultMarkdownStyle";
17
20
  export { default as DefaultMarkdownStyleElement } from "./styleElement/markdown/default";
@@ -41,28 +41,26 @@ const bnf = `
41
41
  ;
42
42
 
43
43
 
44
- directives ::= ( pageNumber
45
-
46
- | embedDirective
47
-
48
- | ignoreDirective
49
-
50
- | includeDirective
51
-
52
- | contentsDirective
53
-
54
- | footnotesDirective ) ( endOfLine ( pageNumber
55
-
56
- | embedDirective
57
-
58
- | ignoreDirective
59
-
60
- | includeDirective
61
-
62
- | contentsDirective
63
-
64
- | footnotesDirective ) )* ;
65
-
44
+ directives ::= pageNumber
45
+
46
+ | ignoreDirective
47
+
48
+ | contentsDirective
49
+
50
+ | footnotesDirective
51
+
52
+ | (
53
+
54
+ ( embedDirective
55
+
56
+ | includeDirective ) ( endOfLine ( embedDirective
57
+
58
+ | includeDirective ) )*
59
+
60
+ )
61
+
62
+ ;
63
+
66
64
 
67
65
  primaryHeading. ::= "#" line ;
68
66
 
@@ -244,7 +242,7 @@ const bnf = `
244
242
  ;
245
243
 
246
244
 
247
- anchor. ::= [identifier] ;
245
+ anchor. ::= ε ;
248
246
 
249
247
 
250
248
  reference. ::= [reference] ;
@@ -1,8 +1,25 @@
1
1
  "use strict";
2
2
 
3
- function removeChildNode(childNode) {
3
+ import { arrayUtilities } from "necessary";
4
+
5
+ const { first, last } = arrayUtilities;
6
+
7
+ function removeChildNodes(removedChildNodes) {
8
+ const childNodes = this.getChildNodes(),
9
+ firstRemovedChildNode = first(removedChildNodes),
10
+ lastRemovedChildNode = last(removedChildNodes),
11
+ firstIndex = childNodes.indexOf(firstRemovedChildNode), ///
12
+ lastIndex = childNodes.indexOf(lastRemovedChildNode), ///
13
+ start = firstIndex, ///
14
+ end = lastIndex + 1,
15
+ deleteCount = end - start;
16
+
17
+ childNodes.splice(start, deleteCount);
18
+ }
19
+
20
+ function removeChildNode(removedChildNode) {
4
21
  const childNodes = this.getChildNodes(),
5
- index = childNodes.indexOf(childNode),
22
+ index = childNodes.indexOf(removedChildNode),
6
23
  start = index, ///
7
24
  deleteCount = 1;
8
25
 
@@ -51,6 +68,7 @@ function getDescendantNodes(descendantNodes = []) {
51
68
  }
52
69
 
53
70
  const nodeMixins = {
71
+ removeChildNodes,
54
72
  removeChildNode,
55
73
  appendChildNode,
56
74
  prependChildNode,
@@ -1,5 +1,7 @@
1
1
  "use strict";
2
2
 
3
+ import { EpsilonNode } from "occam-parsers";
4
+
3
5
  import MarkdownNode from "../../node/markdown";
4
6
 
5
7
  import { EMPTY_STRING } from "../../constants";
@@ -47,8 +49,11 @@ export default class AnchorMarkdownNode extends MarkdownNode {
47
49
  clone() { return super.clone(this.identifier); }
48
50
 
49
51
  static fromIdentifier(identifier) {
50
- const ruleName = ANCHOR_RULE_NAME,
51
- childNodes = [],
52
+ const epsilonNode = EpsilonNode.fromNothing(),
53
+ ruleName = ANCHOR_RULE_NAME,
54
+ childNodes = [
55
+ epsilonNode
56
+ ],
52
57
  opacity = null,
53
58
  anchorMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(AnchorMarkdownNode, ruleName, childNodes, opacity, identifier);
54
59
 
@@ -3,6 +3,7 @@
3
3
  import MarkdownNode from "../../node/markdown";
4
4
 
5
5
  import { contentFromNode } from "../../utilities/content";
6
+ import { leadingIndexFromNodeAndTokens } from "../../utilities/node";
6
7
 
7
8
  export default class BlockLineMarkdownNode extends MarkdownNode {
8
9
  content(context) {
@@ -13,9 +14,8 @@ export default class BlockLineMarkdownNode extends MarkdownNode {
13
14
 
14
15
  content = contentFromNode(node, context);
15
16
 
16
- const firstSignificantToken = this.getFirstSignificantToken(),
17
- firstSignificantTokenIndex = tokens.indexOf(firstSignificantToken),
18
- previousTokenIndex = firstSignificantTokenIndex - 1,
17
+ const leadingIndex = leadingIndexFromNodeAndTokens(node, tokens),
18
+ previousTokenIndex = leadingIndex - 1,
19
19
  previousToken = tokens[previousTokenIndex],
20
20
  previousTokenWhitespaceToken = previousToken.isWhitespaceToken();
21
21
 
@@ -2,8 +2,8 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
+ import Replacement from "../../replacement";
5
6
  import MarkdownNode from "../../node/markdown";
6
- import ReplacementNodeAndTokens from "../../replacementNodeAndTokens";
7
7
 
8
8
  import { HREF_ATTRIBUTE_NAME } from "../../attributeNames";
9
9
  import { CONTENTS_LINK_RULE_NAME } from "../../ruleNames";
@@ -61,13 +61,13 @@ export default class ContentsLinkMarkdownNode extends MarkdownNode {
61
61
  const lineMarkdownNode = headingMarkdownNode.getLineMarkdownNode(),
62
62
  childNode = lineMarkdownNode, ///
63
63
  node = childNode, ///
64
- replacementNodeAndTokens = ReplacementNodeAndTokens.fromNode(node, context),
64
+ replacement = Replacement.fromNode(node, context),
65
65
  ruleName = CONTENTS_LINK_RULE_NAME,
66
66
  childNodes = [
67
67
  childNode
68
68
  ],
69
69
  opacity = null,
70
- tokens = replacementNodeAndTokens.getTokens(),
70
+ tokens = replacement.getTokens(),
71
71
  identifier = headingMarkdownNode.identifier(context);
72
72
 
73
73
  contentsLinkMarkdownNode = MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsLinkMarkdownNode, ruleName, childNodes, opacity, tokens, identifier);
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import MarkdownNode from "../../../node/markdown";
3
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
4
4
 
5
- export default class ContentsDirectiveMarkdownNode extends MarkdownNode {
6
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsDirectiveMarkdownNode, ruleName, childNodes, opacity); }
5
+ export default class ContentsDirectiveMarkdownNode extends DirectiveMarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(ContentsDirectiveMarkdownNode, ruleName, childNodes, opacity); }
7
7
  }
@@ -2,14 +2,14 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import MarkdownNode from "../../../node/markdown";
6
- import ReplacementNodeAndTokens from "../../../replacementNodeAndTokens";
5
+ import Replacement from "../../../replacement";
6
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
7
7
 
8
8
  const { last } = arrayUtilities;
9
9
 
10
- export default class EmbedDirectiveMarkdownNode extends MarkdownNode {
11
- replacementNodeAndTokens(context) {
12
- let replacementNodeAndTokens = null;
10
+ export default class EmbedDirectiveMarkdownNode extends DirectiveMarkdownNode {
11
+ replacement(context) {
12
+ let replacement = null;
13
13
 
14
14
  const { importer = null } = context;
15
15
 
@@ -29,11 +29,11 @@ export default class EmbedDirectiveMarkdownNode extends MarkdownNode {
29
29
  const node = importedNode, ///
30
30
  tokens = importedTokens; ///
31
31
 
32
- replacementNodeAndTokens = ReplacementNodeAndTokens.fromNodeAndTokens(node, tokens);
32
+ replacement = Replacement.fromNodeAndTokens(node, tokens);
33
33
  }
34
34
  }
35
35
 
36
- return replacementNodeAndTokens;
36
+ return replacement;
37
37
  }
38
38
 
39
39
  filePath(context) {
@@ -46,5 +46,5 @@ export default class EmbedDirectiveMarkdownNode extends MarkdownNode {
46
46
  return filePath;
47
47
  }
48
48
 
49
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(EmbedDirectiveMarkdownNode, ruleName, childNodes, opacity); }
49
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(EmbedDirectiveMarkdownNode, ruleName, childNodes, opacity); }
50
50
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import MarkdownNode from "../../../node/markdown";
3
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
4
4
 
5
- export default class FootnotesDirectiveMarkdownNode extends MarkdownNode {
6
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(FootnotesDirectiveMarkdownNode, ruleName, childNodes, opacity); }
5
+ export default class FootnotesDirectiveMarkdownNode extends DirectiveMarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(FootnotesDirectiveMarkdownNode, ruleName, childNodes, opacity); }
7
7
  }
@@ -1,7 +1,7 @@
1
1
  "use strict";
2
2
 
3
- import MarkdownNode from "../../../node/markdown";
3
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
4
4
 
5
- export default class IgnoreDirectiveMarkdownNode extends MarkdownNode {
6
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IgnoreDirectiveMarkdownNode, ruleName, childNodes, opacity); }
5
+ export default class IgnoreDirectiveMarkdownNode extends DirectiveMarkdownNode {
6
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(IgnoreDirectiveMarkdownNode, ruleName, childNodes, opacity); }
7
7
  }
@@ -2,11 +2,11 @@
2
2
 
3
3
  import { arrayUtilities } from "necessary";
4
4
 
5
- import MarkdownNode from "../../../node/markdown";
5
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
6
6
 
7
7
  const { push, last } = arrayUtilities;
8
8
 
9
- export default class IncludeDirectiveMarkdownNode extends MarkdownNode {
9
+ export default class IncludeDirectiveMarkdownNode extends DirectiveMarkdownNode {
10
10
  resolveIncludes(context) {
11
11
  let html = null;
12
12
 
@@ -56,5 +56,5 @@ export default class IncludeDirectiveMarkdownNode extends MarkdownNode {
56
56
  return filePath;
57
57
  }
58
58
 
59
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(IncludeDirectiveMarkdownNode, ruleName, childNodes, opacity); }
59
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(IncludeDirectiveMarkdownNode, ruleName, childNodes, opacity); }
60
60
  }
@@ -1,15 +1,56 @@
1
1
  "use strict";
2
2
 
3
- import MarkdownNode from "../../../node/markdown";
3
+ import DirectiveMarkdownNode from "../../../node/markdown/directive";
4
+
5
+ export default class PageNumberDirectiveMarkdownNode extends DirectiveMarkdownNode {
6
+ constructor(ruleName, childNodes, precedence, opacity, domElement, pageNumber) {
7
+ super(ruleName, childNodes, precedence, opacity, domElement);
8
+
9
+ this.pageNumber = pageNumber;
10
+ }
11
+
12
+ getPageNumber() {
13
+ return this.pageNumber;
14
+ }
15
+
16
+ setPageNumber(pageNumber) {
17
+ this.pageNumber = pageNumber;
18
+ }
4
19
 
5
- export default class PageNumberDirectiveMarkdownNode extends MarkdownNode {
6
20
  content(context) {
7
- const { pageNumber } = context,
8
- content = pageNumber;
21
+ const content = this.pageNumber;
9
22
 
10
23
  return content;
11
24
  }
12
25
 
26
+ asHTML(indent, context) {
27
+ indent = this.adjustIndent(indent);
28
+
29
+ const childNodesHTML = this.childNodesAsHTML(indent, context),
30
+ startingTag = this.startingTag(context),
31
+ closingTag = this.closingTag(context),
32
+ html = `${indent}${startingTag}${childNodesHTML}${closingTag}
33
+ `;
34
+
35
+ return html;
36
+ }
37
+
38
+ createDOMElement(context) {
39
+ const tagName = this.tagName(context),
40
+ className = this.className(context),
41
+ domElement = document.createElement(tagName);
42
+
43
+ Object.assign(domElement, {
44
+ className
45
+ });
46
+
47
+ this.setDOMElement(domElement);
48
+
49
+ this.createChildNodeDOMElements(context);
50
+
51
+ return domElement;
52
+ }
53
+
13
54
  childNodesAsHTML(indent, context) {
14
55
  const content = this.content(context),
15
56
  childNodesHTML = content; ///
@@ -25,5 +66,12 @@ export default class PageNumberDirectiveMarkdownNode extends MarkdownNode {
25
66
  this.addDOMElement(domElement);
26
67
  }
27
68
 
28
- static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(PageNumberDirectiveMarkdownNode, ruleName, childNodes, opacity); }
69
+ clone() { return super.clone(this.number); }
70
+
71
+ static fromRuleNameChildNodesAndOpacity(ruleName, childNodes, opacity) {
72
+ const pageNumber = null,
73
+ pageNumberDirectiveMarkdownNode = DirectiveMarkdownNode.fromRuleNameChildNodesAndOpacity(PageNumberDirectiveMarkdownNode, ruleName, childNodes, opacity, pageNumber);
74
+
75
+ return pageNumberDirectiveMarkdownNode;
76
+ }
29
77
  }
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+
3
+ import MarkdownNode from "../../node/markdown";
4
+
5
+ export default class DirectiveMarkdownNode extends MarkdownNode {
6
+ lines(context) {
7
+ const lines = 0;
8
+
9
+ return lines;
10
+ }
11
+
12
+ static fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity) { return MarkdownNode.fromRuleNameChildNodesAndOpacity(Class, ruleName, childNodes, opacity); }
13
+ }