@diplodoc/transform 4.28.1 → 4.29.0-beta1

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.
@@ -1,98 +1,3 @@
1
- import type Core from 'markdown-it/lib/parser_core';
2
- import type Token from 'markdown-it/lib/token';
3
- import {MarkdownItPluginCb} from './typings';
4
- import {MatchTokenFunction, nestedCloseTokenIdxFactory as closeTokenFactory} from './utils';
1
+ import {transform} from '@diplodoc/cut-extension';
5
2
 
6
- const CUT_REGEXP = /^{%\s*cut\s*["|'](.*)["|']\s*%}/;
7
-
8
- const matchCloseToken: MatchTokenFunction = (tokens, i) => {
9
- return (
10
- tokens[i].type === 'paragraph_open' &&
11
- tokens[i + 1].type === 'inline' &&
12
- tokens[i + 1].content.trim() === '{% endcut %}'
13
- );
14
- };
15
-
16
- const matchOpenToken = (tokens: Token[], i: number) => {
17
- return (
18
- tokens[i].type === 'paragraph_open' &&
19
- tokens[i + 1].type === 'inline' &&
20
- tokens[i + 1].content.match(CUT_REGEXP)
21
- );
22
- };
23
-
24
- const findCloseTokenIdx = closeTokenFactory('Cut', matchOpenToken, matchCloseToken);
25
-
26
- const cut: MarkdownItPluginCb = (md, {path, log}) => {
27
- const plugin: Core.RuleCore = (state) => {
28
- const tokens = state.tokens;
29
- let i = 0;
30
-
31
- while (i < tokens.length) {
32
- const match = matchOpenToken(tokens, i);
33
-
34
- if (match) {
35
- const closeTokenIdx = findCloseTokenIdx(tokens, i + 4, path, log);
36
-
37
- if (!closeTokenIdx) {
38
- i += 3;
39
- continue;
40
- }
41
-
42
- const newOpenToken = new state.Token('yfm_cut_open', 'details', 1);
43
- newOpenToken.attrSet('class', 'yfm-cut');
44
- newOpenToken.map = tokens[i].map;
45
-
46
- const titleOpen = new state.Token('yfm_cut_title_open', 'summary', 1);
47
- titleOpen.attrSet('class', 'yfm-cut-title');
48
-
49
- const titleInline = state.md.parseInline(
50
- match[1] === undefined ? 'ad' : match[1],
51
- state.env,
52
- )[0];
53
-
54
- const titleClose = new state.Token('yfm_cut_title_close', 'summary', -1);
55
-
56
- const contentOpen = new state.Token('yfm_cut_content_open', 'div', 1);
57
- contentOpen.attrSet('class', 'yfm-cut-content');
58
-
59
- if (newOpenToken.map) {
60
- const contentOpenStart = newOpenToken.map[0] + 1;
61
- const contentOpenEnd = newOpenToken.map[0] + 2;
62
-
63
- contentOpen.map = [contentOpenStart, contentOpenEnd];
64
- }
65
-
66
- const contentClose = new state.Token('yfm_cut_content_close', 'div', -1);
67
-
68
- const newCloseToken = new state.Token('yfm_cut_close', 'details', -1);
69
- newCloseToken.map = tokens[closeTokenIdx].map;
70
-
71
- const insideTokens = [
72
- newOpenToken,
73
- titleOpen,
74
- titleInline,
75
- titleClose,
76
- contentOpen,
77
- ...tokens.slice(i + 3, closeTokenIdx),
78
- contentClose,
79
- newCloseToken,
80
- ];
81
-
82
- tokens.splice(i, closeTokenIdx - i + 3, ...insideTokens);
83
-
84
- i++;
85
- } else {
86
- i++;
87
- }
88
- }
89
- };
90
-
91
- try {
92
- md.core.ruler.before('curly_attributes', 'cut', plugin);
93
- } catch (e) {
94
- md.core.ruler.push('cut', plugin);
95
- }
96
- };
97
-
98
- export = cut;
3
+ export = transform({bundle: false});
@@ -99,6 +99,7 @@ const term: MarkdownItPluginCb = (md, options) => {
99
99
  token = new state.Token('term_open', 'i', 1);
100
100
  token.attrSet('class', 'yfm yfm-term_title');
101
101
  token.attrSet('term-key', ':' + termKey);
102
+ token.attrSet('role', 'term');
102
103
  token.attrSet('aria-describedby', ':' + termKey + '_element');
103
104
  token.attrSet('tabindex', '0');
104
105
  token.attrSet('id', generateID());
package/src/js/cut.ts DELETED
@@ -1,57 +0,0 @@
1
- import {getEventTarget, isCustom} from './utils';
2
-
3
- const Selector = {
4
- CUT: '.yfm .yfm-cut',
5
- TITLE: '.yfm .yfm-cut-title',
6
- CONTENT: '.yfm .yfm-cut-content',
7
- };
8
-
9
- const ClassName = {
10
- OPEN: 'open',
11
- };
12
-
13
- function toggleCut(element: HTMLElement) {
14
- const cutNode = element.parentNode;
15
-
16
- if (!(cutNode instanceof HTMLElement)) {
17
- return;
18
- }
19
-
20
- cutNode.classList.toggle(ClassName.OPEN);
21
- }
22
-
23
- function matchTitle(target: EventTarget | null) {
24
- if (!(target instanceof HTMLElement)) {
25
- return false;
26
- }
27
-
28
- return target?.matches?.(Selector.TITLE);
29
- }
30
-
31
- function findTitleInPath(event: MouseEvent): HTMLElement | undefined {
32
- const target = getEventTarget(event);
33
-
34
- if (matchTitle(target)) {
35
- return target as HTMLElement;
36
- }
37
-
38
- const path = event.composedPath?.();
39
-
40
- return path?.find(matchTitle) as HTMLElement | undefined;
41
- }
42
-
43
- if (typeof document !== 'undefined') {
44
- document.addEventListener('click', (event) => {
45
- if (isCustom(event)) {
46
- return;
47
- }
48
-
49
- const title = findTitleInPath(event);
50
-
51
- if (!title) {
52
- return;
53
- }
54
-
55
- toggleCut(title);
56
- });
57
- }