@diplodoc/transform 4.34.2-beta1 → 4.35.0-beta2
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.
- package/dist/css/_yfm-only.css +164 -0
- package/dist/css/_yfm-only.css.map +7 -0
- package/dist/css/_yfm-only.min.css +2 -0
- package/dist/css/_yfm-only.min.css.map +7 -0
- package/dist/css/base.css +580 -0
- package/dist/css/base.css.map +7 -0
- package/dist/css/base.min.css +2 -0
- package/dist/css/base.min.css.map +7 -0
- package/dist/css/print.css.map +2 -2
- package/dist/css/yfm.css +124 -98
- package/dist/css/yfm.css.map +3 -3
- package/dist/css/yfm.min.css +1 -1
- package/dist/css/yfm.min.css.map +3 -3
- package/dist/js/_yfm-only.js +223 -0
- package/dist/js/_yfm-only.js.map +7 -0
- package/dist/js/_yfm-only.min.js +2 -0
- package/dist/js/_yfm-only.min.js.map +7 -0
- package/dist/js/base.js +138 -0
- package/dist/js/base.js.map +7 -0
- package/dist/js/base.min.js +2 -0
- package/dist/js/base.min.js.map +7 -0
- package/dist/js/yfm.js +100 -100
- package/dist/js/yfm.js.map +3 -3
- package/dist/js/yfm.min.js +1 -1
- package/dist/js/yfm.min.js.map +3 -3
- package/lib/md.d.ts +2 -2
- package/lib/md.js +2 -2
- package/lib/plugins/csp.d.ts +6 -0
- package/lib/plugins/csp.js +26 -0
- package/lib/plugins/csp.js.map +1 -0
- package/lib/plugins/includes/collect.js +16 -11
- package/lib/plugins/includes/collect.js.map +1 -1
- package/lib/plugins/includes/types.d.ts +1 -0
- package/lib/plugins/tabs.js +11 -1
- package/lib/plugins/tabs.js.map +1 -1
- package/lib/plugins/utils.d.ts +1 -0
- package/lib/plugins/utils.js +10 -1
- package/lib/plugins/utils.js.map +1 -1
- package/lib/plugins/video/const.d.ts +8 -1
- package/lib/plugins/video/const.js +4 -0
- package/lib/plugins/video/const.js.map +1 -1
- package/lib/plugins/video/index.js +12 -3
- package/lib/plugins/video/index.js.map +1 -1
- package/lib/plugins/video/parsers.d.ts +3 -1
- package/lib/plugins/video/parsers.js +59 -28
- package/lib/plugins/video/parsers.js.map +1 -1
- package/lib/plugins/video/types.d.ts +6 -27
- package/lib/plugins/video/utils.js +5 -1
- package/lib/plugins/video/utils.js.map +1 -1
- package/lib/preprocessors/included/index.js +1 -1
- package/lib/preprocessors/included/index.js.map +1 -1
- package/package.json +2 -2
- package/src/js/_yfm-only.ts +1 -0
- package/src/js/base.ts +2 -0
- package/src/js/index.ts +2 -3
- package/src/scss/_yfm-only.scss +12 -0
- package/src/scss/base.scss +4 -0
- package/src/scss/yfm.scss +2 -9
- package/src/transform/index.ts +2 -2
- package/src/transform/md.ts +2 -2
- package/src/transform/plugins/changelog/collect.ts +2 -2
- package/src/transform/plugins/includes/collect.ts +18 -23
- package/src/transform/plugins/includes/types.ts +1 -0
- package/src/transform/plugins/tabs.ts +11 -1
- package/src/transform/plugins/utils.ts +16 -0
- package/src/transform/plugins/video/const.ts +11 -0
- package/src/transform/plugins/video/index.ts +15 -3
- package/src/transform/plugins/video/parsers.ts +63 -28
- package/src/transform/plugins/video/types.ts +8 -7
- package/src/transform/plugins/video/utils.ts +5 -1
- package/src/transform/preprocessors/included/index.ts +1 -1
|
@@ -6,6 +6,9 @@
|
|
|
6
6
|
// Process @[osf](guid)
|
|
7
7
|
// Process @[yandex](videoID)
|
|
8
8
|
// Process @[vk](videoID)
|
|
9
|
+
// Process @[dzen](videoID)
|
|
10
|
+
// Process @[rutube](videoID)
|
|
11
|
+
const utils_1 = require("../utils");
|
|
9
12
|
const parsers_1 = require("./parsers");
|
|
10
13
|
const const_1 = require("./const");
|
|
11
14
|
// eslint-disable-next-line valid-jsdoc
|
|
@@ -60,9 +63,10 @@ function tokenizeVideo(md, options) {
|
|
|
60
63
|
};
|
|
61
64
|
}
|
|
62
65
|
const EMBED_REGEX = /@\[([a-zA-Z].+)]\([\s]*(.*?)[\s]*[)]/im;
|
|
63
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
64
66
|
function videoEmbed(md, _options) {
|
|
65
67
|
return (state, silent) => {
|
|
68
|
+
var _a;
|
|
69
|
+
var _b;
|
|
66
70
|
const theState = state;
|
|
67
71
|
const oldPos = state.pos;
|
|
68
72
|
if (state.src.charCodeAt(oldPos) !== 0x40 /* @ */ ||
|
|
@@ -74,10 +78,11 @@ function videoEmbed(md, _options) {
|
|
|
74
78
|
return false;
|
|
75
79
|
}
|
|
76
80
|
const service = match[1];
|
|
77
|
-
const
|
|
78
|
-
if (
|
|
81
|
+
const parsed = (0, parsers_1.parseVideoUrl)(service, match[2]);
|
|
82
|
+
if (parsed === false) {
|
|
79
83
|
return false;
|
|
80
84
|
}
|
|
85
|
+
const [videoID, csp] = parsed;
|
|
81
86
|
const serviceStart = oldPos + 2;
|
|
82
87
|
const serviceEnd = md.helpers.parseLinkLabel(state, oldPos + 1, false);
|
|
83
88
|
//
|
|
@@ -96,6 +101,10 @@ function videoEmbed(md, _options) {
|
|
|
96
101
|
token.level = theState.level;
|
|
97
102
|
}
|
|
98
103
|
theState.pos += theState.src.indexOf(')', theState.pos);
|
|
104
|
+
if (csp) {
|
|
105
|
+
(_a = (_b = state.env).meta) !== null && _a !== void 0 ? _a : (_b.meta = {});
|
|
106
|
+
(0, utils_1.append)(state.env.meta, 'csp', csp);
|
|
107
|
+
}
|
|
99
108
|
return true;
|
|
100
109
|
};
|
|
101
110
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/index.ts"],"names":[],"mappings":";AAAA,qCAAqC;AACrC,iCAAiC;AACjC,+BAA+B;AAC/B,4BAA4B;AAC5B,uBAAuB;AACvB,6BAA6B;AAC7B,yBAAyB;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,4 +5,6 @@ export declare function preziParser(url: string): string;
|
|
|
5
5
|
export declare function mfrParser(url: string): string;
|
|
6
6
|
export declare function yandexParser(url: string): string;
|
|
7
7
|
export declare function vkParser(url: string): string;
|
|
8
|
-
export declare function
|
|
8
|
+
export declare function rutubeParser(url: string): string;
|
|
9
|
+
export declare function dzenParser(url: string): string;
|
|
10
|
+
export declare function parseVideoUrl(service: string, url: string): false | readonly [string, Record<string, string[]> | undefined];
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.parseVideoUrl = exports.vkParser = exports.yandexParser = exports.mfrParser = exports.preziParser = exports.vineParser = exports.vimeoParser = exports.youtubeParser = void 0;
|
|
4
|
-
const const_1 = require("./const");
|
|
3
|
+
exports.parseVideoUrl = exports.dzenParser = exports.rutubeParser = exports.vkParser = exports.yandexParser = exports.mfrParser = exports.preziParser = exports.vineParser = exports.vimeoParser = exports.youtubeParser = void 0;
|
|
5
4
|
const ytRegex = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
|
|
6
5
|
function youtubeParser(url) {
|
|
7
6
|
const match = url.match(ytRegex);
|
|
@@ -39,44 +38,76 @@ function yandexParser(url) {
|
|
|
39
38
|
return match ? match[1] : url;
|
|
40
39
|
}
|
|
41
40
|
exports.yandexParser = yandexParser;
|
|
42
|
-
const vkRegex = /^https:\/\/vk
|
|
41
|
+
const vkRegex = /^https:\/\/vk\.com\/video_ext\.php\?(oid=[-\d]+&id=[-\d]+)/;
|
|
43
42
|
function vkParser(url) {
|
|
44
43
|
const match = url.match(vkRegex);
|
|
45
44
|
return match ? match[1] : url;
|
|
46
45
|
}
|
|
47
46
|
exports.vkParser = vkParser;
|
|
47
|
+
const rutubeRegex = /^https:\/\/rutube\.ru\/video\/([a-zA-Z0-9]+)\/?/;
|
|
48
|
+
function rutubeParser(url) {
|
|
49
|
+
const match = url.match(rutubeRegex);
|
|
50
|
+
return match ? match[1] : url;
|
|
51
|
+
}
|
|
52
|
+
exports.rutubeParser = rutubeParser;
|
|
53
|
+
const dzenRegex = /^https:\/\/dzen\.ru\/video\/watch\/([a-zA-Z0-9]+)/;
|
|
54
|
+
function dzenParser(url) {
|
|
55
|
+
const match = url.match(dzenRegex);
|
|
56
|
+
return match ? match[1] : url;
|
|
57
|
+
}
|
|
58
|
+
exports.dzenParser = dzenParser;
|
|
59
|
+
const supportedServices = Object.entries({
|
|
60
|
+
osf: {
|
|
61
|
+
extract: mfrParser,
|
|
62
|
+
},
|
|
63
|
+
prezi: {
|
|
64
|
+
extract: preziParser,
|
|
65
|
+
},
|
|
66
|
+
vimeo: {
|
|
67
|
+
extract: vimeoParser,
|
|
68
|
+
},
|
|
69
|
+
vine: {
|
|
70
|
+
extract: vineParser,
|
|
71
|
+
},
|
|
72
|
+
yandex: {
|
|
73
|
+
extract: yandexParser,
|
|
74
|
+
},
|
|
75
|
+
youtube: {
|
|
76
|
+
extract: youtubeParser,
|
|
77
|
+
},
|
|
78
|
+
vk: {
|
|
79
|
+
extract: vkParser,
|
|
80
|
+
csp: {
|
|
81
|
+
'frame-src': 'https://vk.com/',
|
|
82
|
+
},
|
|
83
|
+
},
|
|
84
|
+
rutube: {
|
|
85
|
+
extract: rutubeParser,
|
|
86
|
+
csp: {
|
|
87
|
+
'frame-src': 'https://rutube.ru/play/embed/',
|
|
88
|
+
},
|
|
89
|
+
},
|
|
90
|
+
dzen: {
|
|
91
|
+
extract: dzenParser,
|
|
92
|
+
csp: {
|
|
93
|
+
'frame-src': 'https://dzen.ru/embed/',
|
|
94
|
+
},
|
|
95
|
+
},
|
|
96
|
+
});
|
|
48
97
|
function parseVideoUrl(service, url) {
|
|
49
98
|
let videoID = '';
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
case const_1.VideoService.Vimeo:
|
|
55
|
-
videoID = vimeoParser(url);
|
|
56
|
-
break;
|
|
57
|
-
case const_1.VideoService.Vine:
|
|
58
|
-
videoID = vineParser(url);
|
|
59
|
-
break;
|
|
60
|
-
case const_1.VideoService.Prezi:
|
|
61
|
-
videoID = preziParser(url);
|
|
62
|
-
break;
|
|
63
|
-
case const_1.VideoService.Osf:
|
|
64
|
-
videoID = mfrParser(url);
|
|
65
|
-
break;
|
|
66
|
-
case const_1.VideoService.Yandex:
|
|
67
|
-
videoID = yandexParser(url);
|
|
68
|
-
break;
|
|
69
|
-
case const_1.VideoService.Vk:
|
|
70
|
-
videoID = vkParser(url);
|
|
71
|
-
break;
|
|
72
|
-
default:
|
|
73
|
-
return false;
|
|
99
|
+
const normalizedService = service.toLowerCase();
|
|
100
|
+
const parsed = supportedServices.find(([name]) => name === normalizedService);
|
|
101
|
+
if (!parsed) {
|
|
102
|
+
return false;
|
|
74
103
|
}
|
|
104
|
+
const [, videoParser] = parsed;
|
|
105
|
+
videoID = videoParser.extract(url);
|
|
75
106
|
// If the videoID field is empty, regex currently make it the close parenthesis.
|
|
76
107
|
if (videoID === ')') {
|
|
77
108
|
videoID = '';
|
|
78
109
|
}
|
|
79
|
-
return videoID;
|
|
110
|
+
return [videoID, videoParser.csp];
|
|
80
111
|
}
|
|
81
112
|
exports.parseVideoUrl = parseVideoUrl;
|
|
82
113
|
//# sourceMappingURL=parsers.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/parsers.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"parsers.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/parsers.ts"],"names":[],"mappings":"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"}
|
|
@@ -5,34 +5,13 @@ export declare type VideoToken = Token & {
|
|
|
5
5
|
videoID: string;
|
|
6
6
|
};
|
|
7
7
|
export declare type VideoServicesOptions = {
|
|
8
|
-
[VideoService
|
|
9
|
-
width: number;
|
|
10
|
-
height: number;
|
|
8
|
+
[service in VideoService]: {
|
|
9
|
+
width: number | string;
|
|
10
|
+
height: number | string;
|
|
11
11
|
};
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
};
|
|
16
|
-
[VideoService.Vine]: {
|
|
17
|
-
width: number;
|
|
18
|
-
height: number;
|
|
19
|
-
embed: 'simple' | string;
|
|
20
|
-
};
|
|
21
|
-
[VideoService.Prezi]: {
|
|
22
|
-
width: number;
|
|
23
|
-
height: number;
|
|
24
|
-
};
|
|
25
|
-
[VideoService.Osf]: {
|
|
26
|
-
width: string;
|
|
27
|
-
height: string;
|
|
28
|
-
};
|
|
29
|
-
[VideoService.Yandex]: {
|
|
30
|
-
width: number;
|
|
31
|
-
height: number;
|
|
32
|
-
};
|
|
33
|
-
[VideoService.Vk]: {
|
|
34
|
-
width: number;
|
|
35
|
-
height: number;
|
|
12
|
+
} & {
|
|
13
|
+
vine: {
|
|
14
|
+
embed: 'simple' | (string & {});
|
|
36
15
|
};
|
|
37
16
|
};
|
|
38
17
|
export declare type VideoFullOptions = VideoServicesOptions & {
|
|
@@ -17,9 +17,13 @@ const videoUrl = (service, videoID, options) => {
|
|
|
17
17
|
case 'osf':
|
|
18
18
|
return `https://mfr.osf.io/render?url=https://osf.io/${videoID}/?action=download`;
|
|
19
19
|
case 'yandex':
|
|
20
|
-
return `https://runtime.video.cloud.yandex.net/player/${videoID}`;
|
|
20
|
+
return `https://runtime.video.cloud.yandex.net/player/video/${videoID}`;
|
|
21
21
|
case 'vk':
|
|
22
22
|
return `https://vk.com/video_ext.php?${videoID}`;
|
|
23
|
+
case 'rutube':
|
|
24
|
+
return `https://rutube.ru/play/embed/${videoID}`;
|
|
25
|
+
case 'dzen':
|
|
26
|
+
return `https://dzen.ru/video/embed/${videoID}`;
|
|
23
27
|
default:
|
|
24
28
|
return service;
|
|
25
29
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,QAAQ,GAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC9D,QAAQ,OAAO,EAAE;QACb,KAAK,SAAS;YACV,OAAO,iCAAiC,OAAO,EAAE,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,kCAAkC,OAAO,EAAE,CAAC;QACvD,KAAK,MAAM;YACP,OAAO,qBAAqB,OAAO,UAAU,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtE,KAAK,OAAO;YACR,OAAO,CACH,2BAA2B,OAAO,EAAE;gBACpC,8EAA8E;gBAC9E,+GAA+G;gBAC/G,0DAA0D,CAC7D,CAAC;QACN,KAAK,KAAK;YACN,OAAO,gDAAgD,OAAO,mBAAmB,CAAC;QACtF,KAAK,QAAQ;YACT,OAAO,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/transform/plugins/video/utils.ts"],"names":[],"mappings":";;;AAEO,MAAM,QAAQ,GAAe,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,EAAE;IAC9D,QAAQ,OAAO,EAAE;QACb,KAAK,SAAS;YACV,OAAO,iCAAiC,OAAO,EAAE,CAAC;QACtD,KAAK,OAAO;YACR,OAAO,kCAAkC,OAAO,EAAE,CAAC;QACvD,KAAK,MAAM;YACP,OAAO,qBAAqB,OAAO,UAAU,OAAO,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QACtE,KAAK,OAAO;YACR,OAAO,CACH,2BAA2B,OAAO,EAAE;gBACpC,8EAA8E;gBAC9E,+GAA+G;gBAC/G,0DAA0D,CAC7D,CAAC;QACN,KAAK,KAAK;YACN,OAAO,gDAAgD,OAAO,mBAAmB,CAAC;QACtF,KAAK,QAAQ;YACT,OAAO,uDAAuD,OAAO,EAAE,CAAC;QAC5E,KAAK,IAAI;YACL,OAAO,gCAAgC,OAAO,EAAE,CAAC;QACrD,KAAK,QAAQ;YACT,OAAO,gCAAgC,OAAO,EAAE,CAAC;QACrD,KAAK,MAAM;YACP,OAAO,+BAA+B,OAAO,EAAE,CAAC;QACpD;YACI,OAAO,OAAO,CAAC;KACtB;AACL,CAAC,CAAC;AA5BW,QAAA,QAAQ,YA4BnB"}
|
|
@@ -47,7 +47,7 @@ const index = (input, options, md) => {
|
|
|
47
47
|
const { included, path, root } = options;
|
|
48
48
|
// To reduce file reading we can include the file content into the generated content
|
|
49
49
|
if (included) {
|
|
50
|
-
const lines = input.split('\n') || [];
|
|
50
|
+
const lines = (input === null || input === void 0 ? void 0 : input.split('\n')) || [];
|
|
51
51
|
// The finction reads the files from bottom to top(!). It stops the loop if it does not have anything to swap.
|
|
52
52
|
// If the function finds something to process then it restarts the loop because the position of the last element has been moved.
|
|
53
53
|
// eslint-disable-next-line no-unmodified-loop-condition
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/preprocessors/included/index.ts"],"names":[],"mappings":";AAAA,2CAAiD;AAIjD,MAAM,cAAc,GAAG,wCAAwC,CAAC;AAChE,MAAM,kBAAkB,GAAG,2BAA2B,CAAC;AAEvD,MAAM,cAAc,GAAG,CACnB,KAAe,EACf,KAAa,EACb,EACI,IAAI,EACJ,IAAI,GAIP,EACD,EAAuB,EACzB,EAAE;IACA,MAAM,gBAAgB,GAAG,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC;IAC5C,MAAM,GAAG,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;IACzB,MAAM,KAAK,GAAG,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC,cAAc,CAAC,CAAC;IAEzC,iCAAiC;IACjC,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,KAAK,CAAC;KAChB;IAED,MAAM,mBAAmB,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAErC,0BAA0B;IAC1B,IAAI,CAAC,mBAAmB,EAAE;QACtB,OAAO,KAAK,CAAC;KAChB;IAED,oEAAoE;IACpE,MAAM,IAAI,GAAG,EAAE,CAAC;IAChB,IAAI,IAAI,GAAG,KAAK,CAAC;IACjB,OAAO,IAAI,GAAG,KAAK,CAAC,MAAM,EAAE;QACxB,IAAI,EAAE,CAAC;QACP,MAAM,GAAG,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC;QACxB,IAAI,GAAG,KAAK,IAAI,EAAE;YACd,MAAM;SACT;QACD,IAAI,GAAG,aAAH,GAAG,uBAAH,GAAG,CAAE,KAAK,CAAC,kBAAkB,CAAC,EAAE;YAChC,MAAM;SACT;QACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;KAClB;IAED,kCAAkC;IAClC,IAAI,gBAAgB,EAAE;QAClB,IAAI,CAAC,EAAE,CAAC,QAAQ,EAAE;YACd,EAAE,CAAC,QAAQ,GAAG,EAAE,CAAC;SACpB;QAED,iCAAiC;QACjC,MAAM,WAAW,GAAG,IAAA,4BAAkB,EAAC,mBAAmB,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;QAExE,6BAA6B;QAC7B,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KAC9C;IAED,0CAA0C;IAC1C,KAAK,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAErC,OAAO,IAAI,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,KAAK,GAEN,CAAC,KAAK,EAAE,OAAO,EAAE,EAAuB,EAAE,EAAE;IAC7C,MAAM,EAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAC,GAAG,OAAO,CAAC;IAEvC,oFAAoF;IACpF,IAAI,QAAQ,EAAE;QACV,MAAM,KAAK,GAAG,KAAK,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/transform/preprocessors/included/index.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@diplodoc/transform",
|
|
3
|
-
"version": "4.
|
|
3
|
+
"version": "4.35.0-beta2",
|
|
4
4
|
"description": "A simple transformer of text in YFM (Yandex Flavored Markdown) to HTML",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"markdown",
|
|
@@ -42,7 +42,7 @@
|
|
|
42
42
|
},
|
|
43
43
|
"dependencies": {
|
|
44
44
|
"@diplodoc/cut-extension": "^0.3.0",
|
|
45
|
-
"@diplodoc/tabs-extension": "^3.5.0
|
|
45
|
+
"@diplodoc/tabs-extension": "^3.5.0",
|
|
46
46
|
"chalk": "^4.1.2",
|
|
47
47
|
"cheerio": "^1.0.0",
|
|
48
48
|
"css": "^3.0.0",
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import './term';
|
package/src/js/base.ts
ADDED
package/src/js/index.ts
CHANGED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
Note: This file excludes "cut" and "tabs" as they are handled separately
|
|
3
|
+
in dedicated extensions (packages). In the future, "note", "file", "term"
|
|
4
|
+
and "table" will also be excluded from this file and moved to yfm.scss,
|
|
5
|
+
once they are moved to separate packages. Direct usage is not recommended,
|
|
6
|
+
as the file is subject to changes without prior notice.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
@import 'note';
|
|
10
|
+
@import 'file';
|
|
11
|
+
@import 'table';
|
|
12
|
+
@import 'term';
|
package/src/scss/yfm.scss
CHANGED
|
@@ -1,12 +1,5 @@
|
|
|
1
|
-
@import '
|
|
2
|
-
@import '
|
|
3
|
-
@import 'anchor';
|
|
4
|
-
@import 'highlight';
|
|
5
|
-
@import 'code';
|
|
6
|
-
@import 'file';
|
|
7
|
-
@import 'term';
|
|
8
|
-
@import 'table';
|
|
1
|
+
@import 'base';
|
|
2
|
+
@import 'yfm-only';
|
|
9
3
|
@import 'modal';
|
|
10
|
-
|
|
11
4
|
@import '@diplodoc/cut-extension/runtime';
|
|
12
5
|
@import '@diplodoc/tabs-extension/runtime';
|
package/src/transform/index.ts
CHANGED
|
@@ -4,7 +4,7 @@ import {bold} from 'chalk';
|
|
|
4
4
|
|
|
5
5
|
import {log} from './log';
|
|
6
6
|
import liquidSnippet from './liquid';
|
|
7
|
-
import
|
|
7
|
+
import initMarkdownIt from './md';
|
|
8
8
|
|
|
9
9
|
function applyLiquid(input: string, options: OptionsType) {
|
|
10
10
|
const {
|
|
@@ -36,7 +36,7 @@ function emitResult(html: string, env: EnvType): OutputType {
|
|
|
36
36
|
// eslint-disable-next-line consistent-return
|
|
37
37
|
function transform(originInput: string, options: OptionsType = {}) {
|
|
38
38
|
const input = applyLiquid(originInput, options);
|
|
39
|
-
const {parse, compile, env} =
|
|
39
|
+
const {parse, compile, env} = initMarkdownIt(options);
|
|
40
40
|
|
|
41
41
|
try {
|
|
42
42
|
return emitResult(compile(parse(input)), env);
|
package/src/transform/md.ts
CHANGED
|
@@ -12,7 +12,7 @@ import extractTitle from './title';
|
|
|
12
12
|
import getHeadings from './headings';
|
|
13
13
|
import sanitizeHtml from './sanitize';
|
|
14
14
|
|
|
15
|
-
function
|
|
15
|
+
function initMarkdownIt(options: OptionsType) {
|
|
16
16
|
const {
|
|
17
17
|
allowHTML = false,
|
|
18
18
|
linkify = false,
|
|
@@ -172,4 +172,4 @@ function initCompiler(md: MarkdownIt, options: OptionsType, env: EnvType) {
|
|
|
172
172
|
};
|
|
173
173
|
}
|
|
174
174
|
|
|
175
|
-
export =
|
|
175
|
+
export = initMarkdownIt;
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {bold} from 'chalk';
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import initMarkdownIt from '../../md';
|
|
4
4
|
import imsize from '../imsize';
|
|
5
5
|
import {MarkdownItPluginOpts} from '../typings';
|
|
6
6
|
|
|
@@ -12,7 +12,7 @@ const BLOCK_START = '{% changelog %}';
|
|
|
12
12
|
const BLOCK_END = '{% endchangelog %}';
|
|
13
13
|
|
|
14
14
|
function parseChangelogs(str: string, path?: string) {
|
|
15
|
-
const {parse, compile, env} =
|
|
15
|
+
const {parse, compile, env} = initMarkdownIt({
|
|
16
16
|
plugins: [changelogPlugin, imsize],
|
|
17
17
|
extractChangelogs: true,
|
|
18
18
|
path,
|
|
@@ -12,7 +12,6 @@ function processRecursive(
|
|
|
12
12
|
includePath: string,
|
|
13
13
|
targetDestPath: string,
|
|
14
14
|
options: IncludeCollectOpts,
|
|
15
|
-
appendix: Map<string, string>,
|
|
16
15
|
) {
|
|
17
16
|
const {path, log, copyFile, includedParentPath: includedParentPathNullable, included} = options;
|
|
18
17
|
const includedParentPath = includedParentPathNullable || path;
|
|
@@ -34,20 +33,16 @@ function processRecursive(
|
|
|
34
33
|
const includedRelativePath = getRelativePath(includedParentPath, includePath);
|
|
35
34
|
|
|
36
35
|
// The appendix is the map that protects from multiple include files
|
|
37
|
-
if (!appendix
|
|
36
|
+
if (!options.appendix?.has(includedRelativePath)) {
|
|
38
37
|
// Recursive function to include the depth structure
|
|
39
|
-
const includeContent = collectRecursive(
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
includedParentPath,
|
|
45
|
-
},
|
|
46
|
-
appendix,
|
|
47
|
-
);
|
|
38
|
+
const includeContent = collectRecursive(content, {
|
|
39
|
+
...options,
|
|
40
|
+
path: includePath,
|
|
41
|
+
includedParentPath,
|
|
42
|
+
});
|
|
48
43
|
|
|
49
44
|
// Add to appendix set structure
|
|
50
|
-
appendix
|
|
45
|
+
options.appendix?.set(
|
|
51
46
|
includedRelativePath,
|
|
52
47
|
`{% included (${includedRelativePath}) %}\n${includeContent}\n{% endincluded %}`,
|
|
53
48
|
);
|
|
@@ -59,11 +54,7 @@ function processRecursive(
|
|
|
59
54
|
}
|
|
60
55
|
}
|
|
61
56
|
|
|
62
|
-
function collectRecursive(
|
|
63
|
-
result: string,
|
|
64
|
-
options: IncludeCollectOpts,
|
|
65
|
-
appendix: Map<string, string>,
|
|
66
|
-
) {
|
|
57
|
+
function collectRecursive(result: string, options: IncludeCollectOpts) {
|
|
67
58
|
const {root, path, destPath = '', log, singlePage} = options;
|
|
68
59
|
|
|
69
60
|
const INCLUDE_REGEXP = /{%\s*include\s*(notitle)?\s*\[(.+?)]\((.+?)\)\s*%}/g;
|
|
@@ -100,7 +91,7 @@ function collectRecursive(
|
|
|
100
91
|
|
|
101
92
|
includesPaths.push(includePath);
|
|
102
93
|
|
|
103
|
-
processRecursive(includePath, targetDestPath, options
|
|
94
|
+
processRecursive(includePath, targetDestPath, options);
|
|
104
95
|
|
|
105
96
|
includesPaths.pop();
|
|
106
97
|
}
|
|
@@ -109,13 +100,17 @@ function collectRecursive(
|
|
|
109
100
|
}
|
|
110
101
|
|
|
111
102
|
function collect(input: string, options: IncludeCollectOpts) {
|
|
112
|
-
const
|
|
103
|
+
const shouldWriteAppendix = !options.appendix;
|
|
113
104
|
|
|
114
|
-
|
|
105
|
+
options.appendix = options.appendix ?? new Map();
|
|
115
106
|
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
107
|
+
input = collectRecursive(input, options);
|
|
108
|
+
|
|
109
|
+
if (shouldWriteAppendix) {
|
|
110
|
+
// Appendix should be appended to the end of the file (it supports depth structure, so the included files will have included as well)
|
|
111
|
+
if (options.appendix.size > 0) {
|
|
112
|
+
input += '\n' + [...options.appendix.values()].join('\n');
|
|
113
|
+
}
|
|
119
114
|
}
|
|
120
115
|
|
|
121
116
|
return input;
|
|
@@ -1,3 +1,13 @@
|
|
|
1
1
|
import {transform} from '@diplodoc/tabs-extension';
|
|
2
2
|
|
|
3
|
-
export = transform({
|
|
3
|
+
export = transform({
|
|
4
|
+
bundle: false,
|
|
5
|
+
features: {
|
|
6
|
+
enabledVariants: {
|
|
7
|
+
radio: true,
|
|
8
|
+
regular: true,
|
|
9
|
+
dropdown: true,
|
|
10
|
+
accordion: true,
|
|
11
|
+
},
|
|
12
|
+
},
|
|
13
|
+
});
|
|
@@ -37,3 +37,19 @@ export const сarriage = platform === 'win32' ? '\r\n' : '\n';
|
|
|
37
37
|
export function generateID() {
|
|
38
38
|
return Math.random().toString(36).substr(2, 8);
|
|
39
39
|
}
|
|
40
|
+
|
|
41
|
+
export function append<T extends Record<string, []>, Key extends keyof T>(
|
|
42
|
+
target: T,
|
|
43
|
+
key: Key,
|
|
44
|
+
...values: T[Key]
|
|
45
|
+
) {
|
|
46
|
+
if (!target[key]) {
|
|
47
|
+
target[key] = values;
|
|
48
|
+
|
|
49
|
+
return;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
values.forEach((value) => target[key].push(value));
|
|
53
|
+
|
|
54
|
+
return target;
|
|
55
|
+
}
|
|
@@ -11,8 +11,17 @@ export enum VideoService {
|
|
|
11
11
|
Osf = 'osf',
|
|
12
12
|
Yandex = 'yandex',
|
|
13
13
|
Vk = 'vk',
|
|
14
|
+
Rutube = 'rutube',
|
|
15
|
+
Dzen = 'dzen',
|
|
14
16
|
}
|
|
15
17
|
|
|
18
|
+
export type Service = {
|
|
19
|
+
csp?: Record<string, string[]>;
|
|
20
|
+
extract(url: string): string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type Services = [VideoService, Service][];
|
|
24
|
+
|
|
16
25
|
export const defaults: VideoFullOptions = {
|
|
17
26
|
url: videoUrl,
|
|
18
27
|
youtube: {width: 640, height: 390},
|
|
@@ -22,4 +31,6 @@ export const defaults: VideoFullOptions = {
|
|
|
22
31
|
osf: {width: '100%', height: '100%'},
|
|
23
32
|
yandex: {width: 640, height: 390},
|
|
24
33
|
vk: {width: 640, height: 390},
|
|
34
|
+
dzen: {width: 640, height: 390},
|
|
35
|
+
rutube: {width: 640, height: 390},
|
|
25
36
|
};
|
|
@@ -5,6 +5,8 @@
|
|
|
5
5
|
// Process @[osf](guid)
|
|
6
6
|
// Process @[yandex](videoID)
|
|
7
7
|
// Process @[vk](videoID)
|
|
8
|
+
// Process @[dzen](videoID)
|
|
9
|
+
// Process @[rutube](videoID)
|
|
8
10
|
|
|
9
11
|
import type MarkdownIt from 'markdown-it';
|
|
10
12
|
// eslint-disable-next-line no-duplicate-imports
|
|
@@ -13,6 +15,8 @@ import type ParserInline from 'markdown-it/lib/parser_inline';
|
|
|
13
15
|
import type Renderer from 'markdown-it/lib/renderer';
|
|
14
16
|
import type {VideoFullOptions, VideoPluginOptions, VideoToken} from './types';
|
|
15
17
|
|
|
18
|
+
import {append} from '../utils';
|
|
19
|
+
|
|
16
20
|
import {parseVideoUrl} from './parsers';
|
|
17
21
|
import {VideoService, defaults} from './const';
|
|
18
22
|
|
|
@@ -80,7 +84,7 @@ function tokenizeVideo(md: MarkdownIt, options: VideoFullOptions): Renderer.Rend
|
|
|
80
84
|
}
|
|
81
85
|
|
|
82
86
|
const EMBED_REGEX = /@\[([a-zA-Z].+)]\([\s]*(.*?)[\s]*[)]/im;
|
|
83
|
-
|
|
87
|
+
|
|
84
88
|
function videoEmbed(md: MarkdownIt, _options: VideoFullOptions): ParserInline.RuleInline {
|
|
85
89
|
return (state, silent) => {
|
|
86
90
|
const theState = state;
|
|
@@ -100,12 +104,14 @@ function videoEmbed(md: MarkdownIt, _options: VideoFullOptions): ParserInline.Ru
|
|
|
100
104
|
}
|
|
101
105
|
|
|
102
106
|
const service = match[1];
|
|
103
|
-
const
|
|
107
|
+
const parsed = parseVideoUrl(service, match[2]);
|
|
104
108
|
|
|
105
|
-
if (
|
|
109
|
+
if (parsed === false) {
|
|
106
110
|
return false;
|
|
107
111
|
}
|
|
108
112
|
|
|
113
|
+
const [videoID, csp] = parsed;
|
|
114
|
+
|
|
109
115
|
const serviceStart = oldPos + 2;
|
|
110
116
|
const serviceEnd = md.helpers.parseLinkLabel(state, oldPos + 1, false);
|
|
111
117
|
|
|
@@ -127,6 +133,12 @@ function videoEmbed(md: MarkdownIt, _options: VideoFullOptions): ParserInline.Ru
|
|
|
127
133
|
}
|
|
128
134
|
|
|
129
135
|
theState.pos += theState.src.indexOf(')', theState.pos);
|
|
136
|
+
|
|
137
|
+
if (csp) {
|
|
138
|
+
state.env.meta ??= {};
|
|
139
|
+
append(state.env.meta, 'csp', csp);
|
|
140
|
+
}
|
|
141
|
+
|
|
130
142
|
return true;
|
|
131
143
|
};
|
|
132
144
|
}
|