@diplodoc/transform 4.70.4 → 4.72.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (44) hide show
  1. package/dist/css/_yfm-only.css +4 -4
  2. package/dist/css/_yfm-only.css.map +3 -3
  3. package/dist/css/_yfm-only.min.css +1 -1
  4. package/dist/css/_yfm-only.min.css.map +3 -3
  5. package/dist/css/base.css.map +1 -1
  6. package/dist/css/base.min.css.map +1 -1
  7. package/dist/css/print.css.map +1 -1
  8. package/dist/css/yfm.css +4 -4
  9. package/dist/css/yfm.css.map +3 -3
  10. package/dist/css/yfm.min.css +1 -1
  11. package/dist/css/yfm.min.css.map +3 -3
  12. package/dist/js/base.js +396 -215
  13. package/dist/js/base.js.map +4 -4
  14. package/dist/js/base.min.js +1 -6
  15. package/dist/js/base.min.js.map +4 -4
  16. package/dist/js/yfm.js +429 -228
  17. package/dist/js/yfm.js.map +4 -4
  18. package/dist/js/yfm.min.js +1 -6
  19. package/dist/js/yfm.min.js.map +4 -4
  20. package/dist/scss/{_inline-code.scss → _tooltip.scss} +1 -1
  21. package/dist/scss/_yfm-only.scss +1 -1
  22. package/lib/plugins/anchors/index.js +1 -1
  23. package/lib/plugins/anchors/index.js.map +1 -1
  24. package/lib/plugins/images/index.js +7 -0
  25. package/lib/plugins/images/index.js.map +1 -1
  26. package/lib/plugins/term/termDefinitions.js +54 -27
  27. package/lib/plugins/term/termDefinitions.js.map +1 -1
  28. package/lib/typings.d.ts +10 -0
  29. package/package.json +2 -2
  30. package/src/js/anchor.ts +27 -3
  31. package/src/js/{inline-code/constant.ts → constant.ts} +1 -9
  32. package/src/js/inline-code/index.ts +24 -42
  33. package/src/js/tooltip/constant.ts +25 -0
  34. package/src/js/tooltip/index.ts +2 -0
  35. package/src/js/tooltip/tooltip.ts +263 -0
  36. package/src/js/tooltip/types.ts +59 -0
  37. package/src/js/tooltip/utils.ts +247 -0
  38. package/src/scss/{_inline-code.scss → _tooltip.scss} +1 -1
  39. package/src/scss/_yfm-only.scss +1 -1
  40. package/src/transform/plugins/anchors/index.ts +1 -1
  41. package/src/transform/plugins/images/index.ts +8 -0
  42. package/src/transform/plugins/term/termDefinitions.ts +71 -33
  43. package/src/transform/typings.ts +10 -0
  44. package/src/js/inline-code/utils.ts +0 -217
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/plugins/images/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/plugins/images/index.ts"],"names":[],"mappings":"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"}
@@ -4,29 +4,72 @@ exports.termDefinitions = termDefinitions;
4
4
  const constants_1 = require("./constants");
5
5
  const INCLUDE_LINE_RE = /^{%\s*include\s/;
6
6
  const NEW_LINE_RE = /^(\r\n|\r|\n)/;
7
- const TERM_DEF_RE = /^\[\*(\w+)\]:/;
7
+ const TERM_DEF_RE = /^\[\*([^[\]]+)\]:/;
8
+ /**
9
+ * @param state - markdown-it block state
10
+ * @param line - line number to read
11
+ * @returns raw source text of the given line
12
+ */
13
+ function getNextLineContent(state, line) {
14
+ const start = state.bMarks[line];
15
+ const end = state.eMarks[line];
16
+ return start === end ? state.src[start] : state.src.slice(start, end);
17
+ }
8
18
  /**
9
19
  * Checks whether the first non-blank line after {@link fromLine} is an
10
20
  * `{% include %}` directive. Used to allow blank-line gaps between
11
21
  * consecutive includes inside a single term definition.
12
22
  *
13
- * @param {StateBlock} state - The markdown-it state block containing parsing information
14
- * @param {number} fromLine - The line number from which to start searching for include directives
15
- * @param {number} endLine - The last line number to search within
16
- * @returns {boolean} Returns true if an include directive is found after blank lines, false otherwise
23
+ * @param state - markdown-it block state
24
+ * @param fromLine - line number from which to start searching
25
+ * @param endLine - last line number to search within
26
+ * @returns true if the first non-blank line is an include directive
17
27
  */
18
28
  function hasIncludeAfterBlanks(state, fromLine, endLine) {
19
29
  for (let line = fromLine + 1; line <= endLine; line++) {
20
30
  const start = state.bMarks[line];
21
31
  const end = state.eMarks[line];
22
- if (start === end)
32
+ if (start === end) {
23
33
  continue;
34
+ }
24
35
  const content = state.src.slice(start, end);
25
36
  return INCLUDE_LINE_RE.test(content.trimStart());
26
37
  }
27
38
  return false;
28
39
  }
40
+ /**
41
+ * Scans forward from {@link startLine} to find where the current term
42
+ * definition ends.
43
+ *
44
+ * When `multilineTermDefinitions` is enabled, the definition continues
45
+ * past blank lines and stops only at the next `[*key]:` or end of block.
46
+ * Otherwise blank lines terminate the definition unless followed by an
47
+ * `{% include %}` directive (legacy behaviour).
48
+ *
49
+ * @param state - markdown-it block state
50
+ * @param startLine - line where the current definition starts
51
+ * @param endLine - last line of the block
52
+ * @param multiline - whether multiline mode is enabled
53
+ * @returns line number where the definition ends
54
+ */
55
+ function findDefinitionEnd(state, startLine, endLine, multiline) {
56
+ let currentLine = startLine;
57
+ for (; currentLine < endLine; currentLine++) {
58
+ const nextLine = getNextLineContent(state, currentLine + 1);
59
+ if (TERM_DEF_RE.test(nextLine)) {
60
+ break;
61
+ }
62
+ if (!multiline && NEW_LINE_RE.test(nextLine)) {
63
+ if (!hasIncludeAfterBlanks(state, currentLine + 1, endLine)) {
64
+ break;
65
+ }
66
+ }
67
+ state.line = currentLine + 1;
68
+ }
69
+ return currentLine;
70
+ }
29
71
  function termDefinitions(md, options) {
72
+ const multiline = options.multilineTermDefinitions === true;
30
73
  return (state, startLine, endLine, silent) => {
31
74
  let ch;
32
75
  let labelEnd;
@@ -55,27 +98,7 @@ function termDefinitions(md, options) {
55
98
  pos++;
56
99
  }
57
100
  }
58
- let currentLine = startLine;
59
- // Allow multiline term definition.
60
- // Blank lines normally terminate the definition, but we look ahead
61
- // past them: if the next non-blank line is an {% include %} directive,
62
- // we keep scanning so that multiple includes can be part of one term.
63
- for (; currentLine < endLine; currentLine++) {
64
- const nextLineStart = state.bMarks[currentLine + 1];
65
- const nextLineEnd = state.eMarks[currentLine + 1];
66
- const nextLine = nextLineStart === nextLineEnd
67
- ? state.src[nextLineStart]
68
- : state.src.slice(nextLineStart, nextLineEnd);
69
- if (TERM_DEF_RE.test(nextLine)) {
70
- break;
71
- }
72
- if (NEW_LINE_RE.test(nextLine)) {
73
- if (!hasIncludeAfterBlanks(state, currentLine + 1, endLine)) {
74
- break;
75
- }
76
- }
77
- state.line = currentLine + 1;
78
- }
101
+ const currentLine = findDefinitionEnd(state, startLine, endLine, multiline);
79
102
  max = state.eMarks[currentLine];
80
103
  if (!labelEnd || labelEnd < 0 || state.src.charCodeAt(labelEnd + 1) !== 0x3a /* : */) {
81
104
  return false;
@@ -120,12 +143,16 @@ function processTermDefinition(md, options, state, currentLine, startLine, endLi
120
143
  if (typeof state.env.terms[':' + label] === 'undefined') {
121
144
  state.env.terms[':' + label] = title;
122
145
  }
146
+ const fromInclude = Array.isArray(state.env.includes) && state.env.includes.length > 0;
123
147
  token = new state.Token('dfn_open', 'dfn', 1);
124
148
  token.attrSet('class', 'yfm yfm-term_dfn');
125
149
  token.attrSet('id', ':' + label + '_element');
126
150
  token.attrSet('role', 'dialog');
127
151
  token.attrSet('aria-live', 'polite');
128
152
  token.attrSet('aria-modal', 'true');
153
+ if (fromInclude) {
154
+ token.attrSet('from-include', 'true');
155
+ }
129
156
  state.tokens.push(token);
130
157
  const titleTokens = md.parse(title, state.env);
131
158
  for (const titleToken of titleTokens) {
@@ -1 +1 @@
1
- {"version":3,"file":"termDefinitions.js","sourceRoot":"","sources":["../../../src/transform/plugins/term/termDefinitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"termDefinitions.js","sourceRoot":"","sources":["../../../src/transform/plugins/term/termDefinitions.ts"],"names":[],"mappings":";;AAyFA,0CAgEC;AArJD,2CAA8C;AAE9C,MAAM,eAAe,GAAG,iBAAiB,CAAC;AAC1C,MAAM,WAAW,GAAG,eAAe,CAAC;AACpC,MAAM,WAAW,GAAG,mBAAmB,CAAC;AAExC;;;;GAIG;AACH,SAAS,kBAAkB,CAAC,KAAiB,EAAE,IAAY;IACvD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAE/B,OAAO,KAAK,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED;;;;;;;;;GASG;AACH,SAAS,qBAAqB,CAAC,KAAiB,EAAE,QAAgB,EAAE,OAAe;IAC/E,KAAK,IAAI,IAAI,GAAG,QAAQ,GAAG,CAAC,EAAE,IAAI,IAAI,OAAO,EAAE,IAAI,EAAE,EAAE,CAAC;QACpD,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACjC,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QAE/B,IAAI,KAAK,KAAK,GAAG,EAAE,CAAC;YAChB,SAAS;QACb,CAAC;QAED,MAAM,OAAO,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QAC5C,OAAO,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,EAAE,CAAC,CAAC;IACrD,CAAC;IACD,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;;;;;;GAcG;AACH,SAAS,iBAAiB,CACtB,KAAiB,EACjB,SAAiB,EACjB,OAAe,EACf,SAAkB;IAElB,IAAI,WAAW,GAAG,SAAS,CAAC;IAE5B,OAAO,WAAW,GAAG,OAAO,EAAE,WAAW,EAAE,EAAE,CAAC;QAC1C,MAAM,QAAQ,GAAG,kBAAkB,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,CAAC,CAAC;QAE5D,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,MAAM;QACV,CAAC;QAED,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC3C,IAAI,CAAC,qBAAqB,CAAC,KAAK,EAAE,WAAW,GAAG,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC;gBAC1D,MAAM;YACV,CAAC;QACL,CAAC;QAED,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC;IACjC,CAAC;IAED,OAAO,WAAW,CAAC;AACvB,CAAC;AAED,SAAgB,eAAe,CAAC,EAAc,EAAE,OAA6B;IACzE,MAAM,SAAS,GAAG,OAAO,CAAC,wBAAwB,KAAK,IAAI,CAAC;IAE5D,OAAO,CAAC,KAAiB,EAAE,SAAiB,EAAE,OAAe,EAAE,MAAe,EAAE,EAAE;QAC9E,IAAI,EAAE,CAAC;QACP,IAAI,QAAQ,CAAC;QACb,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAC5D,IAAI,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;QAElC,IAAI,GAAG,GAAG,CAAC,IAAI,GAAG,EAAE,CAAC;YACjB,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;QACD,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YAC/C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,MAAM,UAAU,GAAG,GAAG,CAAC;QAEvB,OAAO,GAAG,GAAG,GAAG,EAAE,GAAG,EAAE,EAAE,CAAC;YACtB,EAAE,GAAG,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YAC/B,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBACtB,OAAO,KAAK,CAAC;YACjB,CAAC;iBAAM,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7B,QAAQ,GAAG,GAAG,CAAC;gBACf,MAAM;YACV,CAAC;iBAAM,IAAI,EAAE,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;gBAC7B,GAAG,EAAE,CAAC;YACV,CAAC;QACL,CAAC;QAED,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;QAE5E,GAAG,GAAG,KAAK,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC;QAEhC,IAAI,CAAC,QAAQ,IAAI,QAAQ,GAAG,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,QAAQ,GAAG,CAAC,CAAC,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC;YACnF,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,IAAI,MAAM,EAAE,CAAC;YACT,OAAO,IAAI,CAAC;QAChB,CAAC;QAED,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAC,OAAO,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;QAC5E,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,GAAG,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC;QAExD,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC3C,OAAO,KAAK,CAAC;QACjB,CAAC;QAED,OAAO,qBAAqB,CACxB,EAAE,EACF,OAAO,EACP,KAAK,EACL,WAAW,EACX,SAAS,EACT,OAAO,EACP,KAAK,EACL,KAAK,CACR,CAAC;IACN,CAAC,CAAC;AACN,CAAC;AAED,SAAS,qBAAqB,CAC1B,EAAc,EACd,OAA6B,EAC7B,KAAiB,EACjB,WAAmB,EACnB,SAAiB,EACjB,OAAe,EACf,KAAa,EACb,KAAa;;IAEb,IAAI,KAAK,CAAC;IAEV,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACnB,KAAK,CAAC,GAAG,CAAC,KAAK,GAAG,EAAE,CAAC;IACzB,CAAC;IAED,MAAM,yBAAyB,GAAG,IAAI,MAAM,CAAC,6BAAiB,EAAE,IAAI,CAAC,CAAC;IACtE,4BAA4B;IAE5B,MAAM,EAAC,SAAS,EAAC,GAAG,OAAO,CAAC;IAE5B,IAAI,yBAAyB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QACrD,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IAED,gCAAgC;IAChC,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,IAAI,SAAS,EAAE,CAAC;QAC5C,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,YAAY,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;QAC7C,KAAK,CAAC,MAAM,GAAG,IAAI,CAAC;QACpB,KAAK,CAAC,GAAG,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;QACnC,KAAK,CAAC,OAAO,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;QAChC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACzB,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC;QAC7B,OAAO,IAAI,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,KAAK,WAAW,EAAE,CAAC;QACtD,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,GAAG,KAAK,CAAC,GAAG,KAAK,CAAC;IACzC,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;IAEvF,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,UAAU,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,OAAO,EAAE,kBAAkB,CAAC,CAAC;IAC3C,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,GAAG,KAAK,GAAG,UAAU,CAAC,CAAC;IAC9C,KAAK,CAAC,OAAO,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAC;IAChC,KAAK,CAAC,OAAO,CAAC,WAAW,EAAE,QAAQ,CAAC,CAAC;IACrC,KAAK,CAAC,OAAO,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;IAEpC,IAAI,WAAW,EAAE,CAAC;QACd,KAAK,CAAC,OAAO,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAC1C,CAAC;IAED,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,MAAM,WAAW,GAAG,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,CAAC,CAAC;IAE/C,KAAK,MAAM,UAAU,IAAI,WAAW,EAAE,CAAC;QACnC,IAAI,MAAA,UAAU,CAAC,QAAQ,0CAAE,MAAM,EAAE,CAAC;YAC9B,UAAU,CAAC,OAAO,GAAG,EAAE,CAAC;QAC5B,CAAC;QAED,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC;YAClB,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;YAC9B,SAAS;QACb,CAAC;QAED,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,GAAG,UAAU,CAAC,GAAG,CAAC;QAEpC,UAAU,CAAC,GAAG,GAAG,CAAC,KAAK,GAAG,SAAS,EAAE,GAAG,GAAG,SAAS,CAAC,CAAC;QACtD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAClC,CAAC;IAED,KAAK,GAAG,IAAI,KAAK,CAAC,KAAK,CAAC,WAAW,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC,CAAC;IAEhD,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAEzB,mDAAmD;IACnD,KAAK,CAAC,IAAI,GAAG,WAAW,GAAG,CAAC,CAAC;IAE7B,OAAO,IAAI,CAAC;AAChB,CAAC"}
package/lib/typings.d.ts CHANGED
@@ -110,6 +110,15 @@ export interface MarkdownItPluginOpts {
110
110
  enabled: boolean;
111
111
  maxFileSize: number;
112
112
  };
113
+ /**
114
+ * When true, term definitions continue past blank lines until the next
115
+ * `[*key]:` or end of block. Designed for documents where all term
116
+ * definitions are placed at the end of the file.
117
+ *
118
+ * When false (default), a blank line terminates the definition unless
119
+ * the next non-blank line is an `{% include %}` directive.
120
+ */
121
+ multilineTermDefinitions?: boolean;
113
122
  }
114
123
  export type MarkdownItPluginCb<T extends {} = {}> = {
115
124
  (md: MarkdownIt, opts: T & MarkdownItPluginOpts): void;
@@ -129,4 +138,5 @@ export type CssWhiteList = {
129
138
  export type ImageOptions = {
130
139
  width: string | undefined | null;
131
140
  height: string | undefined | null;
141
+ title: string | undefined | null;
132
142
  };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@diplodoc/transform",
3
- "version": "4.70.4",
3
+ "version": "4.72.0",
4
4
  "description": "A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML",
5
5
  "keywords": [
6
6
  "markdown",
@@ -49,7 +49,7 @@
49
49
  "lint": "lint update && lint",
50
50
  "lint:fix": "lint update && lint fix",
51
51
  "pre-commit": "lint update && lint-staged",
52
- "prepare": "husky"
52
+ "prepare": "husky || exit 0"
53
53
  },
54
54
  "dependencies": {
55
55
  "@diplodoc/cut-extension": "^1.1.1",
package/src/js/anchor.ts CHANGED
@@ -1,8 +1,28 @@
1
+ import type {Lang} from 'src/transform/typings';
2
+
3
+ import {createTooltipFactory} from './tooltip';
1
4
  import {copyToClipboard, getEventTarget, isCustom} from './utils';
5
+ import {COPIED_LANG_TOKEN} from './constant';
2
6
 
7
+ const ALLOWED_PROTOCOL_RE = /^(?:https?|file):$/;
3
8
  const ANCHOR_BUTTON_SELECTOR = '.yfm-clipboard-anchor';
4
9
 
10
+ const tooltip = createTooltipFactory();
11
+
12
+ function getLink(target: HTMLElement) {
13
+ const href = target.nodeName === 'A' ? (target as HTMLAnchorElement).href : target.dataset.href;
14
+ const link = new URL(href || '', window.location.href);
15
+
16
+ if (ALLOWED_PROTOCOL_RE.test(link.protocol)) {
17
+ return link.href;
18
+ }
19
+
20
+ return window.location.href;
21
+ }
22
+
5
23
  if (typeof document !== 'undefined') {
24
+ tooltip.init();
25
+
6
26
  document.addEventListener('click', (event) => {
7
27
  const target = getEventTarget(event) as HTMLElement;
8
28
 
@@ -10,9 +30,13 @@ if (typeof document !== 'undefined') {
10
30
  return;
11
31
  }
12
32
 
13
- const href = target.getAttribute('data-href') || '';
14
- const link = new URL(href, window.location.href).toString();
33
+ const link = getLink(target);
34
+
35
+ copyToClipboard(link).then(() => {
36
+ const lang = document.documentElement.lang || 'en';
37
+ const tooltipText = COPIED_LANG_TOKEN[lang as Lang] ?? COPIED_LANG_TOKEN.en;
15
38
 
16
- copyToClipboard(link);
39
+ tooltip.show(target, tooltipText);
40
+ });
17
41
  });
18
42
  }
@@ -1,14 +1,6 @@
1
1
  import type {Lang} from 'src/transform/typings';
2
2
 
3
- export const INLINE_CODE = '.yfm-clipboard-inline-code';
4
-
5
- export const INLINE_CODE_ID = 'tooltip_inline_clipboard_dialog';
6
-
7
- export const INLINE_CODE_CLASS = 'yfm inline_code_tooltip';
8
-
9
- export const OPEN_CLASS = 'open';
10
-
11
- export const LANG_TOKEN: Record<Lang, string> = {
3
+ export const COPIED_LANG_TOKEN: Record<Lang, string> = {
12
4
  ru: 'Скопировано',
13
5
  en: 'Copied',
14
6
  ar: 'تم النسخ',
@@ -1,13 +1,16 @@
1
+ import type {Lang} from 'src/transform/typings';
2
+
3
+ import {createTooltipFactory} from '../tooltip';
1
4
  import {copyToClipboard, getEventTarget, isCustom} from '../utils';
5
+ import {COPIED_LANG_TOKEN} from '../constant';
6
+
7
+ const CLASS_INLINE_CODE = 'yfm-clipboard-inline-code';
8
+ const INLINE_CODE = `.${CLASS_INLINE_CODE}`;
2
9
 
3
- import {INLINE_CODE, OPEN_CLASS} from './constant';
4
- import {
5
- closeTooltip,
6
- getInlineCodeByTooltip,
7
- getTooltipElement,
8
- setTooltipPosition,
9
- tooltipWorker,
10
- } from './utils';
10
+ const tooltip = createTooltipFactory({
11
+ // NOTE: Add additional className for backward capability
12
+ additionalClassName: 'inline_code_tooltip',
13
+ });
11
14
 
12
15
  export function inlineCopyFn(target: HTMLElement) {
13
16
  const innerText = target.innerText;
@@ -17,14 +20,18 @@ export function inlineCopyFn(target: HTMLElement) {
17
20
  }
18
21
 
19
22
  copyToClipboard(innerText).then(() => {
20
- tooltipWorker(target);
23
+ const lang = document.documentElement.lang || 'en';
24
+ const tooltipText = COPIED_LANG_TOKEN[lang as Lang] ?? COPIED_LANG_TOKEN.en;
25
+
26
+ tooltip.show(target, tooltipText);
21
27
  });
22
28
  }
23
29
 
24
30
  if (typeof document !== 'undefined') {
31
+ tooltip.init();
32
+
25
33
  document.addEventListener('click', (event) => {
26
34
  const target = getEventTarget(event) as HTMLElement;
27
-
28
35
  const inline = target.matches(INLINE_CODE);
29
36
 
30
37
  if (isCustom(event) || !inline) {
@@ -37,45 +44,20 @@ if (typeof document !== 'undefined') {
37
44
  document.addEventListener('keydown', (event) => {
38
45
  if (event.key === 'Enter' && document.activeElement) {
39
46
  const activeElement = document.activeElement as HTMLElement;
40
- const classInlineCode = INLINE_CODE.replace('.', '');
41
-
42
- if (!activeElement.classList.contains(classInlineCode)) {
43
- return;
44
- }
45
-
46
- const innerText = activeElement.innerText;
47
47
 
48
- if (!innerText) {
48
+ if (!activeElement.classList.contains(CLASS_INLINE_CODE)) {
49
49
  return;
50
50
  }
51
51
 
52
- copyToClipboard(innerText).then(() => {
53
- tooltipWorker(activeElement);
54
- });
52
+ inlineCopyFn(activeElement);
55
53
  }
56
54
 
57
- const inlineTooltip = getTooltipElement();
55
+ if (event.key === 'Escape' && tooltip.visible) {
56
+ const reference = tooltip.getActiveReference();
58
57
 
59
- if (event.key === 'Escape' && inlineTooltip) {
60
- closeTooltip(inlineTooltip);
61
- getInlineCodeByTooltip(inlineTooltip)?.focus(); // Set focus back to open button after closing popup
58
+ tooltip.hide();
59
+ // Set focus back to open button after closing popup
60
+ reference?.focus();
62
61
  }
63
62
  });
64
-
65
- window.addEventListener('resize', () => {
66
- const inlineTooltip = getTooltipElement();
67
- if (!inlineTooltip) {
68
- return;
69
- }
70
-
71
- const inlineId = inlineTooltip.getAttribute('inline-id') || '';
72
- const inlineCodeElement = document.getElementById(inlineId);
73
-
74
- if (!inlineCodeElement) {
75
- inlineTooltip.classList.toggle(OPEN_CLASS);
76
- return;
77
- }
78
-
79
- setTooltipPosition(inlineTooltip, inlineCodeElement);
80
- });
81
63
  }
@@ -0,0 +1,25 @@
1
+ import type {OffsetValues, Side, SideObject} from './types';
2
+
3
+ export const PAGE_CONTAINER_SELECTOR = '.dc-doc-page__content';
4
+
5
+ export const TOOLTIP_BASE_CLASS = 'yfm yfm-tooltip';
6
+
7
+ export const TOOLTIP_OPEN_CLASS = 'open';
8
+
9
+ export const TOOLTIP_DATA_ATTR = 'data-tooltip-id';
10
+
11
+ export const DEFAULT_OFFSET_VALUES: OffsetValues = {mainAxis: 5};
12
+
13
+ export const OPPOSITE_SIDES: Record<Side, Side> = {
14
+ top: 'bottom',
15
+ bottom: 'top',
16
+ left: 'right',
17
+ right: 'left',
18
+ };
19
+
20
+ export const DEFAULT_SIDE_OBJECT: SideObject = {
21
+ top: 0,
22
+ bottom: 0,
23
+ left: 0,
24
+ right: 0,
25
+ };
@@ -0,0 +1,2 @@
1
+ export type {TooltipOptions} from './types';
2
+ export {createTooltipFactory} from './tooltip';
@@ -0,0 +1,263 @@
1
+ import type {
2
+ Coords,
3
+ TooltipContext,
4
+ TooltipContextElements,
5
+ TooltipElementOptions,
6
+ TooltipOptions,
7
+ } from './types';
8
+
9
+ import {
10
+ DEFAULT_OFFSET_VALUES,
11
+ PAGE_CONTAINER_SELECTOR,
12
+ TOOLTIP_BASE_CLASS,
13
+ TOOLTIP_DATA_ATTR,
14
+ TOOLTIP_OPEN_CLASS,
15
+ } from './constant';
16
+ import {
17
+ computePosition,
18
+ convertToRelativeToOffsetParentRect,
19
+ createRect,
20
+ generateId,
21
+ getElementRect,
22
+ getViewportRect,
23
+ updateRect,
24
+ } from './utils';
25
+
26
+ interface TooltipState {
27
+ currentId: string | null;
28
+ timer: ReturnType<typeof setTimeout> | null;
29
+ unsubscribe: (() => void) | null;
30
+ }
31
+
32
+ export function createTooltipFactory(options: TooltipOptions = {}) {
33
+ const {closeDelay = 1_000, additionalClassName} = options;
34
+ let initialized = false;
35
+
36
+ const state: TooltipState = {
37
+ currentId: null,
38
+ timer: null,
39
+ unsubscribe: null,
40
+ };
41
+
42
+ const getActiveTooltip = () => {
43
+ if (!state.currentId) {
44
+ return null;
45
+ }
46
+
47
+ return document.getElementById(state.currentId);
48
+ };
49
+
50
+ const getActiveReference = () => {
51
+ if (!state.currentId) {
52
+ return null;
53
+ }
54
+
55
+ return getReferenceByTooltipId(state.currentId);
56
+ };
57
+
58
+ const hide = () => {
59
+ const tooltip = getActiveTooltip();
60
+
61
+ if (state.timer) {
62
+ clearTimeout(state.timer);
63
+ state.timer = null;
64
+ }
65
+
66
+ if (state.unsubscribe) {
67
+ state.unsubscribe();
68
+ state.unsubscribe = null;
69
+ }
70
+
71
+ if (tooltip) {
72
+ tooltip.classList.remove(TOOLTIP_OPEN_CLASS);
73
+ detachTooltip(tooltip);
74
+
75
+ state.currentId = null;
76
+ }
77
+ };
78
+
79
+ const show = (reference: HTMLElement, text: string) => {
80
+ hide();
81
+
82
+ const tooltip = createTooltipElement({text, className: additionalClassName});
83
+ const update = updateTooltipPosition.bind(null, options, reference, tooltip);
84
+
85
+ state.currentId = tooltip.id;
86
+
87
+ attachTooltip(tooltip, reference);
88
+
89
+ state.unsubscribe = subscribeToScroll(reference, update);
90
+
91
+ tooltip.classList.add(TOOLTIP_OPEN_CLASS);
92
+
93
+ update();
94
+
95
+ if (closeDelay > 0) {
96
+ state.timer = setTimeout(hide, closeDelay);
97
+ }
98
+ };
99
+
100
+ const handleUpdate = () => {
101
+ const activeTooltip = getActiveTooltip();
102
+ const activeReference = getActiveReference();
103
+
104
+ if (activeTooltip && !activeReference) {
105
+ hide();
106
+ return;
107
+ }
108
+
109
+ if (activeTooltip && activeReference) {
110
+ updateTooltipPosition(options, activeReference, activeTooltip);
111
+ }
112
+ };
113
+
114
+ const init = () => {
115
+ if (!initialized) {
116
+ initialized = true;
117
+
118
+ window.addEventListener('scroll', handleUpdate);
119
+ window.addEventListener('resize', handleUpdate);
120
+ }
121
+ };
122
+
123
+ const cleanup = () => {
124
+ if (initialized) {
125
+ initialized = false;
126
+
127
+ window.removeEventListener('scroll', handleUpdate);
128
+ window.removeEventListener('resize', handleUpdate);
129
+ }
130
+ };
131
+
132
+ return {
133
+ get visible() {
134
+ return Boolean(state.currentId);
135
+ },
136
+ getActiveReference,
137
+ show,
138
+ hide,
139
+ init,
140
+ cleanup,
141
+ };
142
+ }
143
+
144
+ function createTooltipElement(options: TooltipElementOptions) {
145
+ const {text, className} = options;
146
+
147
+ const id = generateId();
148
+ const tooltip = document.createElement('div');
149
+
150
+ tooltip.id = id;
151
+ tooltip.className = className ? `${TOOLTIP_BASE_CLASS} ${className}` : TOOLTIP_BASE_CLASS;
152
+
153
+ tooltip.setAttribute('role', 'tooltip');
154
+ tooltip.setAttribute('aria-live', 'polite');
155
+
156
+ tooltip.textContent = text;
157
+
158
+ return tooltip;
159
+ }
160
+
161
+ function attachTooltip(tooltip: HTMLElement, reference: HTMLElement) {
162
+ const container = document.querySelector(PAGE_CONTAINER_SELECTOR) || document.body;
163
+ const ariaLive = reference.getAttribute('aria-live');
164
+
165
+ reference.setAttribute(TOOLTIP_DATA_ATTR, tooltip.id);
166
+
167
+ if (ariaLive) {
168
+ tooltip.setAttribute('aria-live', ariaLive);
169
+ }
170
+
171
+ container.appendChild(tooltip);
172
+ }
173
+
174
+ function detachTooltip(tooltip: HTMLElement) {
175
+ if (tooltip.id) {
176
+ const reference = getReferenceByTooltipId(tooltip.id);
177
+
178
+ reference?.removeAttribute(TOOLTIP_DATA_ATTR);
179
+ }
180
+
181
+ tooltip.remove();
182
+ }
183
+
184
+ function getReferenceByTooltipId(id: string) {
185
+ return document.querySelector<HTMLElement>(`[${TOOLTIP_DATA_ATTR}="${id}"]`);
186
+ }
187
+
188
+ function subscribeToScroll(reference: HTMLElement, update: () => void) {
189
+ const scrollableElement = getParentScrollableElement(reference);
190
+
191
+ scrollableElement.addEventListener('scroll', update);
192
+
193
+ return () => {
194
+ scrollableElement.removeEventListener('scroll', update);
195
+ };
196
+ }
197
+
198
+ function getParentScrollableElement(target: HTMLElement) {
199
+ const closestScrollableParent = target.closest('table') || target.closest('code');
200
+
201
+ return closestScrollableParent || target.parentElement || document.body;
202
+ }
203
+
204
+ function createTooltipContext(
205
+ referenceElement: HTMLElement,
206
+ tooltipElement: HTMLElement,
207
+ ): TooltipContext | null {
208
+ const tooltipParent = tooltipElement.parentElement;
209
+
210
+ if (!tooltipParent) {
211
+ return null;
212
+ }
213
+
214
+ const elements: TooltipContextElements = {
215
+ reference: referenceElement,
216
+ tooltip: tooltipElement,
217
+ offsetParent: tooltipParent,
218
+ };
219
+
220
+ const viewport = getViewportRect();
221
+ const reference = getElementRect(referenceElement);
222
+ const {width, height} = tooltipElement.getBoundingClientRect();
223
+
224
+ return {
225
+ isRtl: document.dir === 'rtl',
226
+ viewport,
227
+ reference,
228
+ tooltip: createRect({top: 0, left: 0, width, height}),
229
+ elements,
230
+ };
231
+ }
232
+
233
+ function updateTooltipPosition(
234
+ options: TooltipOptions,
235
+ referenceElement: HTMLElement,
236
+ tooltipElement: HTMLElement,
237
+ ) {
238
+ const context = createTooltipContext(referenceElement, tooltipElement);
239
+
240
+ if (!context) {
241
+ return;
242
+ }
243
+
244
+ const coords = getTooltipCoords(context, options);
245
+
246
+ tooltipElement.style.top = `${coords.y}px`;
247
+ tooltipElement.style.left = `${coords.x}px`;
248
+ }
249
+
250
+ function getTooltipCoords(context: TooltipContext, options: TooltipOptions): Coords {
251
+ const {placement = 'bottom-start', offset = DEFAULT_OFFSET_VALUES, flip = true} = options;
252
+ const {reference, tooltip, viewport, isRtl} = context;
253
+
254
+ const {coords} = computePosition(reference, tooltip, viewport, placement, offset, isRtl, flip);
255
+
256
+ const rect = updateRect(tooltip, {top: coords.y, left: coords.x});
257
+ const relativeRect = convertToRelativeToOffsetParentRect(rect, context.elements.offsetParent);
258
+
259
+ return {
260
+ x: relativeRect.left,
261
+ y: relativeRect.top,
262
+ };
263
+ }