@diplodoc/transform 4.0.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.
- package/CHANGELOG.diplodoc.md +38 -0
- package/CHANGELOG.md +404 -0
- package/LICENSE +21 -0
- package/README.md +41 -0
- package/README.ru.md +36 -0
- package/dist/css/yfm.css +736 -0
- package/dist/css/yfm.css.map +7 -0
- package/dist/css/yfm.min.css +2 -0
- package/dist/css/yfm.min.css.map +7 -0
- package/dist/js/code.d.ts +1 -0
- package/dist/js/cut.d.ts +1 -0
- package/dist/js/index.d.ts +5 -0
- package/dist/js/polyfill.d.ts +1 -0
- package/dist/js/tabs.d.ts +1 -0
- package/dist/js/term/index.d.ts +1 -0
- package/dist/js/term/utils.d.ts +10 -0
- package/dist/js/utils.d.ts +2 -0
- package/dist/js/yfm.js +432 -0
- package/dist/js/yfm.js.map +7 -0
- package/dist/js/yfm.min.js +2 -0
- package/dist/js/yfm.min.js.map +7 -0
- package/lib/getObject.d.ts +2 -0
- package/lib/getObject.js +11 -0
- package/lib/getObject.js.map +1 -0
- package/lib/headings.d.ts +4 -0
- package/lib/headings.js +73 -0
- package/lib/headings.js.map +1 -0
- package/lib/highlight.d.ts +3 -0
- package/lib/highlight.js +29 -0
- package/lib/highlight.js.map +1 -0
- package/lib/index.d.ts +7 -0
- package/lib/index.js +35 -0
- package/lib/index.js.map +1 -0
- package/lib/liquid/conditions.d.ts +4 -0
- package/lib/liquid/conditions.js +181 -0
- package/lib/liquid/conditions.js.map +1 -0
- package/lib/liquid/cycles.d.ts +4 -0
- package/lib/liquid/cycles.js +160 -0
- package/lib/liquid/cycles.js.map +1 -0
- package/lib/liquid/errors.d.ts +3 -0
- package/lib/liquid/errors.js +13 -0
- package/lib/liquid/errors.js.map +1 -0
- package/lib/liquid/evaluation.d.ts +3 -0
- package/lib/liquid/evaluation.js +138 -0
- package/lib/liquid/evaluation.js.map +1 -0
- package/lib/liquid/filters.d.ts +9 -0
- package/lib/liquid/filters.js +22 -0
- package/lib/liquid/filters.js.map +1 -0
- package/lib/liquid/index.d.ts +9 -0
- package/lib/liquid/index.js +87 -0
- package/lib/liquid/index.js.map +1 -0
- package/lib/liquid/lexical.d.ts +14 -0
- package/lib/liquid/lexical.js +79 -0
- package/lib/liquid/lexical.js.map +1 -0
- package/lib/liquid/services/argv.d.ts +15 -0
- package/lib/liquid/services/argv.js +17 -0
- package/lib/liquid/services/argv.js.map +1 -0
- package/lib/liquid/sourceMap.d.ts +24 -0
- package/lib/liquid/sourceMap.js +56 -0
- package/lib/liquid/sourceMap.js.map +1 -0
- package/lib/liquid/substitutions.d.ts +2 -0
- package/lib/liquid/substitutions.js +36 -0
- package/lib/liquid/substitutions.js.map +1 -0
- package/lib/liquid/utils.d.ts +8 -0
- package/lib/liquid/utils.js +24 -0
- package/lib/liquid/utils.js.map +1 -0
- package/lib/log.d.ts +18 -0
- package/lib/log.js +54 -0
- package/lib/log.js.map +1 -0
- package/lib/md.d.ts +14 -0
- package/lib/md.js +96 -0
- package/lib/md.js.map +1 -0
- package/lib/plugins/anchors/collect.d.ts +5 -0
- package/lib/plugins/anchors/collect.js +81 -0
- package/lib/plugins/anchors/collect.js.map +1 -0
- package/lib/plugins/anchors/constants.d.ts +2 -0
- package/lib/plugins/anchors/constants.js +6 -0
- package/lib/plugins/anchors/constants.js.map +1 -0
- package/lib/plugins/anchors/index.d.ts +7 -0
- package/lib/plugins/anchors/index.js +134 -0
- package/lib/plugins/anchors/index.js.map +1 -0
- package/lib/plugins/changelog/collect.d.ts +8 -0
- package/lib/plugins/changelog/collect.js +50 -0
- package/lib/plugins/changelog/collect.js.map +1 -0
- package/lib/plugins/changelog/index.d.ts +6 -0
- package/lib/plugins/changelog/index.js +131 -0
- package/lib/plugins/changelog/index.js.map +1 -0
- package/lib/plugins/changelog/types.d.ts +10 -0
- package/lib/plugins/changelog/types.js +3 -0
- package/lib/plugins/changelog/types.js.map +1 -0
- package/lib/plugins/checkbox/checkbox.d.ts +7 -0
- package/lib/plugins/checkbox/checkbox.js +91 -0
- package/lib/plugins/checkbox/checkbox.js.map +1 -0
- package/lib/plugins/checkbox/index.d.ts +8 -0
- package/lib/plugins/checkbox/index.js +12 -0
- package/lib/plugins/checkbox/index.js.map +1 -0
- package/lib/plugins/code.d.ts +3 -0
- package/lib/plugins/code.js +61 -0
- package/lib/plugins/code.js.map +1 -0
- package/lib/plugins/cut.d.ts +3 -0
- package/lib/plugins/cut.js +70 -0
- package/lib/plugins/cut.js.map +1 -0
- package/lib/plugins/deflist.d.ts +3 -0
- package/lib/plugins/deflist.js +8 -0
- package/lib/plugins/deflist.js.map +1 -0
- package/lib/plugins/file/const.d.ts +27 -0
- package/lib/plugins/file/const.js +47 -0
- package/lib/plugins/file/const.js.map +1 -0
- package/lib/plugins/file/file.d.ts +8 -0
- package/lib/plugins/file/file.js +63 -0
- package/lib/plugins/file/file.js.map +1 -0
- package/lib/plugins/file/index.d.ts +4 -0
- package/lib/plugins/file/index.js +9 -0
- package/lib/plugins/file/index.js.map +1 -0
- package/lib/plugins/images/collect.d.ts +8 -0
- package/lib/plugins/images/collect.js +43 -0
- package/lib/plugins/images/collect.js.map +1 -0
- package/lib/plugins/images/index.d.ts +10 -0
- package/lib/plugins/images/index.js +81 -0
- package/lib/plugins/images/index.js.map +1 -0
- package/lib/plugins/imsize/const.d.ts +7 -0
- package/lib/plugins/imsize/const.js +12 -0
- package/lib/plugins/imsize/const.js.map +1 -0
- package/lib/plugins/imsize/helpers.d.ts +6 -0
- package/lib/plugins/imsize/helpers.js +64 -0
- package/lib/plugins/imsize/helpers.js.map +1 -0
- package/lib/plugins/imsize/index.d.ts +8 -0
- package/lib/plugins/imsize/index.js +12 -0
- package/lib/plugins/imsize/index.js.map +1 -0
- package/lib/plugins/imsize/plugin.d.ts +3 -0
- package/lib/plugins/imsize/plugin.js +188 -0
- package/lib/plugins/imsize/plugin.js.map +1 -0
- package/lib/plugins/includes/collect.d.ts +8 -0
- package/lib/plugins/includes/collect.js +49 -0
- package/lib/plugins/includes/collect.js.map +1 -0
- package/lib/plugins/includes/index.d.ts +8 -0
- package/lib/plugins/includes/index.js +98 -0
- package/lib/plugins/includes/index.js.map +1 -0
- package/lib/plugins/links/collect.d.ts +7 -0
- package/lib/plugins/links/collect.js +74 -0
- package/lib/plugins/links/collect.js.map +1 -0
- package/lib/plugins/links/constants.d.ts +1 -0
- package/lib/plugins/links/constants.js +5 -0
- package/lib/plugins/links/constants.js.map +1 -0
- package/lib/plugins/links/index.d.ts +24 -0
- package/lib/plugins/links/index.js +178 -0
- package/lib/plugins/links/index.js.map +1 -0
- package/lib/plugins/meta.d.ts +3 -0
- package/lib/plugins/meta.js +8 -0
- package/lib/plugins/meta.js.map +1 -0
- package/lib/plugins/monospace.d.ts +3 -0
- package/lib/plugins/monospace.js +109 -0
- package/lib/plugins/monospace.js.map +1 -0
- package/lib/plugins/notes.d.ts +3 -0
- package/lib/plugins/notes.js +103 -0
- package/lib/plugins/notes.js.map +1 -0
- package/lib/plugins/sup.d.ts +3 -0
- package/lib/plugins/sup.js +8 -0
- package/lib/plugins/sup.js.map +1 -0
- package/lib/plugins/table/index.d.ts +3 -0
- package/lib/plugins/table/index.js +215 -0
- package/lib/plugins/table/index.js.map +1 -0
- package/lib/plugins/tabs.d.ts +4 -0
- package/lib/plugins/tabs.js +4 -0
- package/lib/plugins/tabs.js.map +1 -0
- package/lib/plugins/term/constants.d.ts +1 -0
- package/lib/plugins/term/constants.js +5 -0
- package/lib/plugins/term/constants.js.map +1 -0
- package/lib/plugins/term/index.d.ts +3 -0
- package/lib/plugins/term/index.js +108 -0
- package/lib/plugins/term/index.js.map +1 -0
- package/lib/plugins/term/termDefinitions.d.ts +4 -0
- package/lib/plugins/term/termDefinitions.js +125 -0
- package/lib/plugins/term/termDefinitions.js.map +1 -0
- package/lib/plugins/typings.d.ts +12 -0
- package/lib/plugins/typings.js +3 -0
- package/lib/plugins/typings.js.map +1 -0
- package/lib/plugins/utils.d.ts +6 -0
- package/lib/plugins/utils.js +30 -0
- package/lib/plugins/utils.js.map +1 -0
- package/lib/plugins/video/const.d.ts +10 -0
- package/lib/plugins/video/const.js +22 -0
- package/lib/plugins/video/const.js.map +1 -0
- package/lib/plugins/video/index.d.ts +8 -0
- package/lib/plugins/video/index.js +104 -0
- package/lib/plugins/video/index.js.map +1 -0
- package/lib/plugins/video/parsers.d.ts +6 -0
- package/lib/plugins/video/parsers.js +64 -0
- package/lib/plugins/video/parsers.js.map +1 -0
- package/lib/plugins/video/types.d.ts +34 -0
- package/lib/plugins/video/types.js +3 -0
- package/lib/plugins/video/types.js.map +1 -0
- package/lib/plugins/video/utils.d.ts +2 -0
- package/lib/plugins/video/utils.js +25 -0
- package/lib/plugins/video/utils.js.map +1 -0
- package/lib/plugins.d.ts +3 -0
- package/lib/plugins.js +36 -0
- package/lib/plugins.js.map +1 -0
- package/lib/sanitize.d.ts +12 -0
- package/lib/sanitize.js +572 -0
- package/lib/sanitize.js.map +1 -0
- package/lib/title.d.ts +7 -0
- package/lib/title.js +18 -0
- package/lib/title.js.map +1 -0
- package/lib/typings.d.ts +57 -0
- package/lib/typings.js +3 -0
- package/lib/typings.js.map +1 -0
- package/lib/utils.d.ts +13 -0
- package/lib/utils.js +79 -0
- package/lib/utils.js.map +1 -0
- package/lib/utilsFS.d.ts +27 -0
- package/lib/utilsFS.js +89 -0
- package/lib/utilsFS.js.map +1 -0
- package/lib/yfmlint/index.d.ts +26 -0
- package/lib/yfmlint/index.js +72 -0
- package/lib/yfmlint/index.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/index.d.ts +9 -0
- package/lib/yfmlint/markdownlint-custom-rule/index.js +22 -0
- package/lib/yfmlint/markdownlint-custom-rule/index.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm001.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm001.js +28 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm001.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm002.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm002.js +33 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm002.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm003.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm003.js +33 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm003.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm004.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm004.js +28 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm004.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm005.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm005.js +28 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm005.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm006.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm006.js +28 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm006.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm007.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm007.js +29 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm007.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm008.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm008.js +28 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm008.js.map +1 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm009.d.ts +2 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm009.js +47 -0
- package/lib/yfmlint/markdownlint-custom-rule/yfm009.js.map +1 -0
- package/lib/yfmlint/typings.d.ts +12 -0
- package/lib/yfmlint/typings.js +3 -0
- package/lib/yfmlint/typings.js.map +1 -0
- package/lib/yfmlint/utils.d.ts +9 -0
- package/lib/yfmlint/utils.js +22 -0
- package/lib/yfmlint/utils.js.map +1 -0
- package/lib/yfmlint/yfmlint.d.ts +3 -0
- package/lib/yfmlint/yfmlint.js +69 -0
- package/lib/yfmlint/yfmlint.js.map +1 -0
- package/package.json +106 -0
- package/src/.eslintrc +10 -0
- package/src/js/code.ts +65 -0
- package/src/js/cut.ts +57 -0
- package/src/js/index.ts +6 -0
- package/src/js/polyfill.js +27 -0
- package/src/js/term/index.ts +79 -0
- package/src/js/term/utils.ts +151 -0
- package/src/js/utils.ts +9 -0
- package/src/scss/_anchor.scss +33 -0
- package/src/scss/_code.scss +23 -0
- package/src/scss/_common.scss +407 -0
- package/src/scss/_cut.scss +42 -0
- package/src/scss/_file.scss +35 -0
- package/src/scss/_highlight.scss +96 -0
- package/src/scss/_note.scss +73 -0
- package/src/scss/_print.scss +20 -0
- package/src/scss/_term.scss +79 -0
- package/src/scss/_variables.scss +16 -0
- package/src/scss/yfm.scss +11 -0
- package/src/transform/getObject.ts +10 -0
- package/src/transform/headings.ts +88 -0
- package/src/transform/highlight.ts +33 -0
- package/src/transform/index.ts +50 -0
- package/src/transform/liquid/conditions.ts +259 -0
- package/src/transform/liquid/cycles.ts +244 -0
- package/src/transform/liquid/errors.ts +10 -0
- package/src/transform/liquid/evaluation.ts +145 -0
- package/src/transform/liquid/filters.ts +19 -0
- package/src/transform/liquid/index.ts +141 -0
- package/src/transform/liquid/lexical.ts +86 -0
- package/src/transform/liquid/services/argv.ts +23 -0
- package/src/transform/liquid/sourceMap.ts +72 -0
- package/src/transform/liquid/substitutions.ts +40 -0
- package/src/transform/liquid/utils.ts +30 -0
- package/src/transform/log.ts +60 -0
- package/src/transform/md.ts +123 -0
- package/src/transform/plugins/anchors/collect.ts +101 -0
- package/src/transform/plugins/anchors/constants.ts +2 -0
- package/src/transform/plugins/anchors/index.ts +166 -0
- package/src/transform/plugins/changelog/collect.ts +66 -0
- package/src/transform/plugins/changelog/index.ts +164 -0
- package/src/transform/plugins/changelog/types.ts +10 -0
- package/src/transform/plugins/checkbox/checkbox.ts +107 -0
- package/src/transform/plugins/checkbox/index.ts +15 -0
- package/src/transform/plugins/code.ts +79 -0
- package/src/transform/plugins/cut.ts +98 -0
- package/src/transform/plugins/deflist.ts +5 -0
- package/src/transform/plugins/file/README.md +34 -0
- package/src/transform/plugins/file/const.ts +46 -0
- package/src/transform/plugins/file/file.ts +82 -0
- package/src/transform/plugins/file/index.ts +10 -0
- package/src/transform/plugins/images/collect.ts +60 -0
- package/src/transform/plugins/images/index.ts +119 -0
- package/src/transform/plugins/imsize/const.ts +7 -0
- package/src/transform/plugins/imsize/helpers.ts +75 -0
- package/src/transform/plugins/imsize/index.ts +14 -0
- package/src/transform/plugins/imsize/plugin.ts +214 -0
- package/src/transform/plugins/includes/collect.ts +73 -0
- package/src/transform/plugins/includes/index.ts +127 -0
- package/src/transform/plugins/links/collect.ts +92 -0
- package/src/transform/plugins/links/constants.ts +1 -0
- package/src/transform/plugins/links/index.ts +218 -0
- package/src/transform/plugins/meta.ts +5 -0
- package/src/transform/plugins/monospace.ts +141 -0
- package/src/transform/plugins/notes.ts +134 -0
- package/src/transform/plugins/sup.ts +5 -0
- package/src/transform/plugins/table/index.ts +290 -0
- package/src/transform/plugins/tabs.ts +3 -0
- package/src/transform/plugins/term/constants.ts +1 -0
- package/src/transform/plugins/term/index.ts +139 -0
- package/src/transform/plugins/term/termDefinitions.ts +177 -0
- package/src/transform/plugins/typings.ts +14 -0
- package/src/transform/plugins/utils.ts +38 -0
- package/src/transform/plugins/video/const.ts +20 -0
- package/src/transform/plugins/video/index.ts +134 -0
- package/src/transform/plugins/video/parsers.ts +65 -0
- package/src/transform/plugins/video/types.ts +27 -0
- package/src/transform/plugins/video/utils.ts +24 -0
- package/src/transform/plugins.ts +35 -0
- package/src/transform/sanitize.ts +596 -0
- package/src/transform/title.ts +22 -0
- package/src/transform/typings.ts +64 -0
- package/src/transform/utils.ts +91 -0
- package/src/transform/utilsFS.ts +128 -0
- package/src/transform/yfmlint/README.md +48 -0
- package/src/transform/yfmlint/index.ts +124 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/index.ts +9 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm001.ts +36 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm002.ts +33 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm003.ts +33 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm004.ts +27 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm005.ts +27 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm006.ts +26 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm007.ts +28 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm008.ts +26 -0
- package/src/transform/yfmlint/markdownlint-custom-rule/yfm009.ts +54 -0
- package/src/transform/yfmlint/typings.ts +13 -0
- package/src/transform/yfmlint/utils.ts +31 -0
- package/src/transform/yfmlint/yfmlint.ts +73 -0
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
// Process @[youtube](youtubeVideoID)
|
|
2
|
+
// Process @[vimeo](vimeoVideoID)
|
|
3
|
+
// Process @[vine](vineVideoID)
|
|
4
|
+
// Process @[prezi](preziID)
|
|
5
|
+
// Process @[osf](guid)
|
|
6
|
+
|
|
7
|
+
import type MarkdownIt from 'markdown-it';
|
|
8
|
+
import type {PluginWithOptions} from 'markdown-it';
|
|
9
|
+
import type ParserInline from 'markdown-it/lib/parser_inline';
|
|
10
|
+
import type Renderer from 'markdown-it/lib/renderer';
|
|
11
|
+
|
|
12
|
+
import type {VideoFullOptions, VideoPluginOptions, VideoToken} from './types';
|
|
13
|
+
import {parseVideoUrl} from './parsers';
|
|
14
|
+
import {defaults, VideoService} from './const';
|
|
15
|
+
|
|
16
|
+
// eslint-disable-next-line valid-jsdoc
|
|
17
|
+
/**
|
|
18
|
+
* Video plugin for markdown-it.
|
|
19
|
+
* Forked from https://github.com/CenterForOpenScience/markdown-it-video/tree/0.6.3
|
|
20
|
+
*/
|
|
21
|
+
const video: PluginWithOptions<VideoPluginOptions> = (md, options) => {
|
|
22
|
+
const theOptions: VideoFullOptions = {...defaults, ...options};
|
|
23
|
+
const theMd = md;
|
|
24
|
+
|
|
25
|
+
theMd.renderer.rules.video = tokenizeVideo(theMd, theOptions);
|
|
26
|
+
theMd.inline.ruler.before('emphasis', 'video', videoEmbed(theMd, theOptions));
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
function tokenizeVideo(md: MarkdownIt, options: VideoFullOptions): Renderer.RenderRule {
|
|
30
|
+
return (tokens, idx) => {
|
|
31
|
+
const videoID = md.utils.escapeHtml((tokens[idx] as VideoToken).videoID);
|
|
32
|
+
const service = md.utils.escapeHtml((tokens[idx] as VideoToken).service).toLowerCase();
|
|
33
|
+
const checkUrl =
|
|
34
|
+
/http(?:s?):\/\/(?:www\.)?[a-zA-Z0-9-:.]{1,}\/render(?:\/)?[a-zA-Z0-9.&;?=:%]{1,}url=http(?:s?):\/\/[a-zA-Z0-9 -:.]{1,}\/[a-zA-Z0-9]{1,5}\/\?[a-zA-Z0-9.=:%]{1,}/;
|
|
35
|
+
let num;
|
|
36
|
+
|
|
37
|
+
if (service === VideoService.Osf && videoID) {
|
|
38
|
+
num = Math.random() * 0x10000;
|
|
39
|
+
|
|
40
|
+
if (videoID.match(checkUrl)) {
|
|
41
|
+
return (
|
|
42
|
+
'<div id="' +
|
|
43
|
+
num +
|
|
44
|
+
'" class="mfr mfr-file"></div><script>' +
|
|
45
|
+
'$(document).ready(function () {new mfr.Render("' +
|
|
46
|
+
num +
|
|
47
|
+
'", "' +
|
|
48
|
+
videoID +
|
|
49
|
+
'");' +
|
|
50
|
+
' }); </script>'
|
|
51
|
+
);
|
|
52
|
+
}
|
|
53
|
+
return (
|
|
54
|
+
'<div id="' +
|
|
55
|
+
num +
|
|
56
|
+
'" class="mfr mfr-file"></div><script>' +
|
|
57
|
+
'$(document).ready(function () {new mfr.Render("' +
|
|
58
|
+
num +
|
|
59
|
+
'", "https://mfr.osf.io/' +
|
|
60
|
+
'render?url=https://osf.io/' +
|
|
61
|
+
videoID +
|
|
62
|
+
'/?action=download%26mode=render");' +
|
|
63
|
+
' }); </script>'
|
|
64
|
+
);
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
const {width, height} = options[service as VideoService];
|
|
68
|
+
|
|
69
|
+
return videoID === ''
|
|
70
|
+
? ''
|
|
71
|
+
: '<div class="embed-responsive embed-responsive-16by9"><iframe class="embed-responsive-item ' +
|
|
72
|
+
service +
|
|
73
|
+
'-player" type="text/html" width="' +
|
|
74
|
+
width +
|
|
75
|
+
'" height="' +
|
|
76
|
+
height +
|
|
77
|
+
'" src="' +
|
|
78
|
+
options.url(service, videoID, options) +
|
|
79
|
+
'" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe></div>';
|
|
80
|
+
};
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
const EMBED_REGEX = /@\[([a-zA-Z].+)]\([\s]*(.*?)[\s]*[)]/im;
|
|
84
|
+
function videoEmbed(md: MarkdownIt, _options: VideoFullOptions): ParserInline.RuleInline {
|
|
85
|
+
return (state, silent) => {
|
|
86
|
+
const theState = state;
|
|
87
|
+
const oldPos = state.pos;
|
|
88
|
+
|
|
89
|
+
if (
|
|
90
|
+
state.src.charCodeAt(oldPos) !== 0x40 /* @ */ ||
|
|
91
|
+
state.src.charCodeAt(oldPos + 1) !== 0x5b /* [ */
|
|
92
|
+
) {
|
|
93
|
+
return false;
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
const match = EMBED_REGEX.exec(state.src.slice(state.pos, state.src.length));
|
|
97
|
+
|
|
98
|
+
if (!match || match.length < 3) {
|
|
99
|
+
return false;
|
|
100
|
+
}
|
|
101
|
+
|
|
102
|
+
const service = match[1];
|
|
103
|
+
const videoID = parseVideoUrl(service, match[2]);
|
|
104
|
+
|
|
105
|
+
if (videoID === false) {
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
const serviceStart = oldPos + 2;
|
|
110
|
+
const serviceEnd = md.helpers.parseLinkLabel(state, oldPos + 1, false);
|
|
111
|
+
|
|
112
|
+
//
|
|
113
|
+
// We found the end of the link, and know for a fact it's a valid link;
|
|
114
|
+
// so all that's left to do is to call tokenizer.
|
|
115
|
+
//
|
|
116
|
+
if (!silent) {
|
|
117
|
+
theState.pos = serviceStart;
|
|
118
|
+
// @ts-expect-error
|
|
119
|
+
theState.service = theState.src.slice(serviceStart, serviceEnd);
|
|
120
|
+
const newState = new theState.md.inline.State(service, theState.md, theState.env, []);
|
|
121
|
+
newState.md.inline.tokenize(newState);
|
|
122
|
+
|
|
123
|
+
const token = theState.push('video', '', 0);
|
|
124
|
+
(token as VideoToken).videoID = videoID;
|
|
125
|
+
(token as VideoToken).service = service;
|
|
126
|
+
token.level = theState.level;
|
|
127
|
+
}
|
|
128
|
+
|
|
129
|
+
theState.pos += theState.src.indexOf(')', theState.pos);
|
|
130
|
+
return true;
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
|
|
134
|
+
export = video;
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import {VideoService} from './const';
|
|
2
|
+
|
|
3
|
+
const ytRegex = /^.*((youtu.be\/)|(v\/)|(\/u\/\w\/)|(embed\/)|(watch\?))\??v?=?([^#&?]*).*/;
|
|
4
|
+
export function youtubeParser(url: string) {
|
|
5
|
+
const match = url.match(ytRegex);
|
|
6
|
+
return match && match[7].length === 11 ? match[7] : url;
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
const vimeoRegex =
|
|
10
|
+
/https?:\/\/(?:www\.|player\.)?vimeo.com\/(?:channels\/(?:\w+\/)?|groups\/([^/]*)\/videos\/|album\/(\d+)\/video\/|)(\d+)(?:$|\/|\?)/;
|
|
11
|
+
export function vimeoParser(url: string) {
|
|
12
|
+
const match = url.match(vimeoRegex);
|
|
13
|
+
return match && typeof match[3] === 'string' ? match[3] : url;
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
const vineRegex = /^http(?:s?):\/\/(?:www\.)?vine\.co\/v\/([a-zA-Z0-9]{1,13}).*/;
|
|
17
|
+
export function vineParser(url: string) {
|
|
18
|
+
const match = url.match(vineRegex);
|
|
19
|
+
return match && match[1].length === 11 ? match[1] : url;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
const preziRegex = /^https:\/\/prezi.com\/(.[^/]+)/;
|
|
23
|
+
export function preziParser(url: string) {
|
|
24
|
+
const match = url.match(preziRegex);
|
|
25
|
+
return match ? match[1] : url;
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
// TODO: Write regex for staging and local servers.
|
|
29
|
+
const mfrRegex =
|
|
30
|
+
/^http(?:s?):\/\/(?:www\.)?mfr\.osf\.io\/render\?url=http(?:s?):\/\/osf\.io\/([a-zA-Z0-9]{1,5})\/\?action=download/;
|
|
31
|
+
export function mfrParser(url: string) {
|
|
32
|
+
const match = url.match(mfrRegex);
|
|
33
|
+
return match ? match[1] : url;
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
export function parseVideoUrl(service: string, url: string): string | false {
|
|
37
|
+
let videoID = '';
|
|
38
|
+
|
|
39
|
+
switch (service.toLowerCase()) {
|
|
40
|
+
case VideoService.YouTube:
|
|
41
|
+
videoID = youtubeParser(url);
|
|
42
|
+
break;
|
|
43
|
+
case VideoService.Vimeo:
|
|
44
|
+
videoID = vimeoParser(url);
|
|
45
|
+
break;
|
|
46
|
+
case VideoService.Vine:
|
|
47
|
+
videoID = vineParser(url);
|
|
48
|
+
break;
|
|
49
|
+
case VideoService.Prezi:
|
|
50
|
+
videoID = preziParser(url);
|
|
51
|
+
break;
|
|
52
|
+
case VideoService.Osf:
|
|
53
|
+
videoID = mfrParser(url);
|
|
54
|
+
break;
|
|
55
|
+
default:
|
|
56
|
+
return false;
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
// If the videoID field is empty, regex currently make it the close parenthesis.
|
|
60
|
+
if (videoID === ')') {
|
|
61
|
+
videoID = '';
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
return videoID;
|
|
65
|
+
}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import type Token from 'markdown-it/lib/token';
|
|
2
|
+
import type {VideoService} from './const';
|
|
3
|
+
|
|
4
|
+
export type VideoToken = Token & {
|
|
5
|
+
service: string;
|
|
6
|
+
videoID: string;
|
|
7
|
+
};
|
|
8
|
+
|
|
9
|
+
export type VideoServicesOptions = {
|
|
10
|
+
[VideoService.YouTube]: {width: number; height: number};
|
|
11
|
+
[VideoService.Vimeo]: {width: number; height: number};
|
|
12
|
+
[VideoService.Vine]: {width: number; height: number; embed: 'simple' | string};
|
|
13
|
+
[VideoService.Prezi]: {width: number; height: number};
|
|
14
|
+
[VideoService.Osf]: {width: string; height: string};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
export type VideoFullOptions = VideoServicesOptions & {
|
|
18
|
+
url: VideoUrlFn;
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
export type VideoPluginOptions = Partial<VideoFullOptions>;
|
|
22
|
+
|
|
23
|
+
export type VideoUrlFn = (
|
|
24
|
+
service: string,
|
|
25
|
+
videoID: string,
|
|
26
|
+
options: VideoServicesOptions,
|
|
27
|
+
) => string;
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import type {VideoUrlFn} from './types';
|
|
2
|
+
|
|
3
|
+
export const videoUrl: VideoUrlFn = (service, videoID, options) => {
|
|
4
|
+
switch (service) {
|
|
5
|
+
case 'youtube':
|
|
6
|
+
return 'https://www.youtube.com/embed/' + videoID;
|
|
7
|
+
case 'vimeo':
|
|
8
|
+
return 'https://player.vimeo.com/video/' + videoID;
|
|
9
|
+
case 'vine':
|
|
10
|
+
return 'https://vine.co/v/' + videoID + '/embed/' + options.vine.embed;
|
|
11
|
+
case 'prezi':
|
|
12
|
+
return (
|
|
13
|
+
'https://prezi.com/embed/' +
|
|
14
|
+
videoID +
|
|
15
|
+
'/?bgcolor=ffffff&lock_to_path=0&autoplay=0&autohide_ctrls=0&' +
|
|
16
|
+
'landing_data=bHVZZmNaNDBIWnNjdEVENDRhZDFNZGNIUE43MHdLNWpsdFJLb2ZHanI5N1lQVHkxSHFxazZ0UUNCRHloSXZROHh3PT0&' +
|
|
17
|
+
'landing_sign=1kD6c0N6aYpMUS0wxnQjxzSqZlEB8qNFdxtdjYhwSuI'
|
|
18
|
+
);
|
|
19
|
+
case 'osf':
|
|
20
|
+
return 'https://mfr.osf.io/render?url=https://osf.io/' + videoID + '/?action=download';
|
|
21
|
+
default:
|
|
22
|
+
return service;
|
|
23
|
+
}
|
|
24
|
+
};
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type {MarkdownItPluginCb} from './plugins/typings';
|
|
2
|
+
|
|
3
|
+
import meta from './plugins/meta';
|
|
4
|
+
import deflist from './plugins/deflist';
|
|
5
|
+
import cut from './plugins/cut';
|
|
6
|
+
import notes from './plugins/notes';
|
|
7
|
+
import anchors from './plugins/anchors';
|
|
8
|
+
import tabs from './plugins/tabs';
|
|
9
|
+
import code from './plugins/code';
|
|
10
|
+
import sup from './plugins/sup';
|
|
11
|
+
import video from './plugins/video';
|
|
12
|
+
import monospace from './plugins/monospace';
|
|
13
|
+
import yfmTable from './plugins/table';
|
|
14
|
+
import file from './plugins/file';
|
|
15
|
+
import imsize from './plugins/imsize';
|
|
16
|
+
import term from './plugins/term';
|
|
17
|
+
|
|
18
|
+
const defaultPlugins = [
|
|
19
|
+
meta,
|
|
20
|
+
deflist,
|
|
21
|
+
cut,
|
|
22
|
+
notes,
|
|
23
|
+
anchors,
|
|
24
|
+
tabs,
|
|
25
|
+
code,
|
|
26
|
+
sup,
|
|
27
|
+
video,
|
|
28
|
+
monospace,
|
|
29
|
+
yfmTable,
|
|
30
|
+
file,
|
|
31
|
+
imsize,
|
|
32
|
+
term,
|
|
33
|
+
] as MarkdownItPluginCb[];
|
|
34
|
+
|
|
35
|
+
export = defaultPlugins;
|