@quadrats/common 0.6.7 → 0.7.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 (85) hide show
  1. package/blockquote/createBlockquote.d.ts +1 -1
  2. package/blockquote/createBlockquote.js +33 -33
  3. package/blockquote/index.cjs.js +32 -34
  4. package/bold/createBold.d.ts +2 -1
  5. package/bold/createBold.js +6 -4
  6. package/bold/index.cjs.js +6 -6
  7. package/divider/createDivider.d.ts +1 -1
  8. package/divider/createDivider.js +29 -29
  9. package/divider/index.cjs.js +29 -31
  10. package/embed/createEmbed.js +40 -40
  11. package/embed/deserializeEmbedElementToData.js +6 -6
  12. package/embed/index.cjs.js +54 -56
  13. package/embed/serializeEmbedCode.js +8 -8
  14. package/embed/strategies/facebook/index.cjs.js +45 -47
  15. package/embed/strategies/facebook/index.d.ts +5 -5
  16. package/embed/strategies/facebook/index.js +45 -45
  17. package/embed/strategies/instagram/index.cjs.js +29 -31
  18. package/embed/strategies/instagram/index.d.ts +3 -3
  19. package/embed/strategies/instagram/index.js +29 -29
  20. package/embed/strategies/podcast-apple/index.cjs.js +16 -18
  21. package/embed/strategies/podcast-apple/index.d.ts +4 -4
  22. package/embed/strategies/podcast-apple/index.js +16 -16
  23. package/embed/strategies/spotify/index.cjs.js +14 -16
  24. package/embed/strategies/spotify/index.d.ts +4 -4
  25. package/embed/strategies/spotify/index.js +14 -14
  26. package/embed/strategies/twitter/index.cjs.js +41 -43
  27. package/embed/strategies/twitter/index.d.ts +4 -4
  28. package/embed/strategies/twitter/index.js +41 -41
  29. package/embed/strategies/vimeo/index.cjs.js +14 -16
  30. package/embed/strategies/vimeo/index.d.ts +3 -3
  31. package/embed/strategies/vimeo/index.js +14 -14
  32. package/embed/strategies/youtube/index.cjs.js +14 -16
  33. package/embed/strategies/youtube/index.d.ts +3 -3
  34. package/embed/strategies/youtube/index.js +14 -14
  35. package/embed/typings.d.ts +1 -1
  36. package/file-uploader/_virtual/_tslib.js +3 -1
  37. package/file-uploader/createFileUploader.js +76 -76
  38. package/file-uploader/getFilesFromInput.js +24 -24
  39. package/file-uploader/index.cjs.js +102 -102
  40. package/file-uploader/typings.d.ts +6 -6
  41. package/footnote/createFootnote.d.ts +1 -1
  42. package/footnote/createFootnote.js +65 -65
  43. package/footnote/index.cjs.js +65 -67
  44. package/footnote/typings.d.ts +1 -1
  45. package/heading/constants.js +1 -1
  46. package/heading/createHeading.d.ts +1 -1
  47. package/heading/createHeading.js +45 -45
  48. package/heading/index.cjs.js +46 -48
  49. package/heading/typings.d.ts +1 -1
  50. package/highlight/createHighlight.d.ts +2 -1
  51. package/highlight/createHighlight.js +6 -4
  52. package/highlight/index.cjs.js +6 -6
  53. package/image/constants.js +4 -4
  54. package/image/createImage.js +195 -195
  55. package/image/getImageElementCommonProps.js +6 -6
  56. package/image/getImageFigureElementCommonProps.js +5 -5
  57. package/image/index.cjs.js +211 -213
  58. package/image/isHostingNotRequired.js +2 -2
  59. package/image/typings.d.ts +8 -8
  60. package/input-block/createInputBlock.js +37 -37
  61. package/input-block/index.cjs.js +37 -39
  62. package/input-widget/typings.d.ts +1 -1
  63. package/italic/createItalic.d.ts +2 -1
  64. package/italic/createItalic.js +6 -4
  65. package/italic/index.cjs.js +6 -6
  66. package/link/createLink.js +147 -147
  67. package/link/index.cjs.js +146 -148
  68. package/link/typings.d.ts +2 -2
  69. package/list/constants.js +4 -4
  70. package/list/createList.js +185 -185
  71. package/list/index.cjs.js +188 -190
  72. package/list/typings.d.ts +4 -4
  73. package/package.json +4 -4
  74. package/read-more/createReadMore.d.ts +1 -1
  75. package/read-more/createReadMore.js +51 -51
  76. package/read-more/index.cjs.js +50 -52
  77. package/strikethrough/createStrikethrough.d.ts +2 -1
  78. package/strikethrough/createStrikethrough.js +6 -4
  79. package/strikethrough/index.cjs.js +6 -6
  80. package/toggle-mark/createToggleMarkCreator.d.ts +4 -4
  81. package/toggle-mark/createToggleMarkCreator.js +36 -36
  82. package/toggle-mark/index.cjs.js +36 -38
  83. package/underline/createUnderline.d.ts +2 -1
  84. package/underline/createUnderline.js +6 -4
  85. package/underline/index.cjs.js +6 -6
@@ -1,11 +1,11 @@
1
1
  import { EmbedElement, EmbedStrategy } from '@quadrats/common/embed';
2
- export declare type TwitterEmbedType = 'tweet';
3
- export declare type TwitterEmbedElementData = {
2
+ export type TwitterEmbedType = 'tweet';
3
+ export type TwitterEmbedElementData = {
4
4
  embedType: TwitterEmbedType;
5
5
  tweetId: string;
6
6
  };
7
- export declare type TwitterEmbedElement = EmbedElement & TwitterEmbedElementData;
8
- export declare type TwitterEmbedStrategy = EmbedStrategy<TwitterEmbedElementData, string>;
7
+ export type TwitterEmbedElement = EmbedElement & TwitterEmbedElementData;
8
+ export type TwitterEmbedStrategy = EmbedStrategy<TwitterEmbedElementData, string>;
9
9
  export declare function getTwitterTweetDataFromUrl(url: string): TwitterEmbedElementData | undefined;
10
10
  export declare function getTwitterTweetDataFromBlockquote(embedCode: string): TwitterEmbedElementData | undefined;
11
11
  export declare const TwitterEmbedStrategy: TwitterEmbedStrategy;
@@ -1,44 +1,44 @@
1
- function getTwitterTweetDataFromUrl(url) {
2
- const result = /^https:\/\/twitter.com\/[\w]*\/status\/([\w-]*)/i.exec(url);
3
- if (result) {
4
- const [, tweetId] = result;
5
- return {
6
- embedType: 'tweet',
7
- tweetId,
8
- };
9
- }
10
- }
11
- function getTwitterTweetDataFromBlockquote(embedCode) {
12
- const template = document.createElement('template');
13
- template.innerHTML = embedCode;
14
- const { firstChild } = template.content;
15
- if (!firstChild || firstChild.nodeName !== 'BLOCKQUOTE') {
16
- return;
17
- }
18
- const blockquote = firstChild;
19
- const link = blockquote.lastChild;
20
- const url = link === null || link === void 0 ? void 0 : link.getAttribute('href');
21
- return url ? getTwitterTweetDataFromUrl(url) : undefined;
22
- }
23
- // eslint-disable-next-line @typescript-eslint/no-redeclare
24
- const TwitterEmbedStrategy = {
25
- serialize: (embedCode) => {
26
- const getter = embedCode.startsWith('<blockquote') ? getTwitterTweetDataFromBlockquote : getTwitterTweetDataFromUrl;
27
- return getter(embedCode);
28
- },
29
- deserialize: (data) => {
30
- if (data.embedType === 'tweet') {
31
- return data.tweetId;
32
- }
33
- return '';
34
- },
35
- isElementDataValid: (data) => {
36
- if (data.embedType === 'tweet') {
37
- const { tweetId } = data;
38
- return typeof tweetId === 'string' && !!tweetId;
39
- }
40
- return true;
41
- },
1
+ function getTwitterTweetDataFromUrl(url) {
2
+ const result = /^https:\/\/twitter.com\/[\w]*\/status\/([\w-]*)/i.exec(url);
3
+ if (result) {
4
+ const [, tweetId] = result;
5
+ return {
6
+ embedType: 'tweet',
7
+ tweetId,
8
+ };
9
+ }
10
+ }
11
+ function getTwitterTweetDataFromBlockquote(embedCode) {
12
+ const template = document.createElement('template');
13
+ template.innerHTML = embedCode;
14
+ const { firstChild } = template.content;
15
+ if (!firstChild || firstChild.nodeName !== 'BLOCKQUOTE') {
16
+ return;
17
+ }
18
+ const blockquote = firstChild;
19
+ const link = blockquote.lastChild;
20
+ const url = link === null || link === void 0 ? void 0 : link.getAttribute('href');
21
+ return url ? getTwitterTweetDataFromUrl(url) : undefined;
22
+ }
23
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
24
+ const TwitterEmbedStrategy = {
25
+ serialize: (embedCode) => {
26
+ const getter = embedCode.startsWith('<blockquote') ? getTwitterTweetDataFromBlockquote : getTwitterTweetDataFromUrl;
27
+ return getter(embedCode);
28
+ },
29
+ deserialize: (data) => {
30
+ if (data.embedType === 'tweet') {
31
+ return data.tweetId;
32
+ }
33
+ return '';
34
+ },
35
+ isElementDataValid: (data) => {
36
+ if (data.embedType === 'tweet') {
37
+ const { tweetId } = data;
38
+ return typeof tweetId === 'string' && !!tweetId;
39
+ }
40
+ return true;
41
+ },
42
42
  };
43
43
 
44
44
  export { TwitterEmbedStrategy, getTwitterTweetDataFromBlockquote, getTwitterTweetDataFromUrl };
@@ -1,21 +1,19 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- // eslint-disable-next-line @typescript-eslint/no-redeclare
6
- const VimeoEmbedStrategy = {
7
- serialize: (embedCode) => {
8
- var _a;
9
- const videoId = (_a = (/^https:\/\/vimeo.com\/([\w-]*)/i.exec(embedCode)
10
- || /^https:\/\/player.vimeo.com\/video\/([\w-]*)/i.exec(embedCode))) === null || _a === void 0 ? void 0 : _a[1];
11
- if (videoId) {
12
- return {
13
- videoId,
14
- };
15
- }
16
- },
17
- deserialize: ({ videoId }) => `https://player.vimeo.com/video/${videoId}`,
18
- isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
3
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
4
+ const VimeoEmbedStrategy = {
5
+ serialize: (embedCode) => {
6
+ var _a;
7
+ const videoId = (_a = (/^https:\/\/vimeo.com\/([\w-]*)/i.exec(embedCode)
8
+ || /^https:\/\/player.vimeo.com\/video\/([\w-]*)/i.exec(embedCode))) === null || _a === void 0 ? void 0 : _a[1];
9
+ if (videoId) {
10
+ return {
11
+ videoId,
12
+ };
13
+ }
14
+ },
15
+ deserialize: ({ videoId }) => `https://player.vimeo.com/video/${videoId}`,
16
+ isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
19
17
  };
20
18
 
21
19
  exports.VimeoEmbedStrategy = VimeoEmbedStrategy;
@@ -1,7 +1,7 @@
1
1
  import { EmbedElement, EmbedStrategy } from '@quadrats/common/embed';
2
- export declare type VimeoEmbedElementData = {
2
+ export type VimeoEmbedElementData = {
3
3
  videoId: string;
4
4
  };
5
- export declare type VimeoEmbedElement = EmbedElement & VimeoEmbedElementData;
6
- export declare type VimeoEmbedStrategy = EmbedStrategy<VimeoEmbedElementData, string>;
5
+ export type VimeoEmbedElement = EmbedElement & VimeoEmbedElementData;
6
+ export type VimeoEmbedStrategy = EmbedStrategy<VimeoEmbedElementData, string>;
7
7
  export declare const VimeoEmbedStrategy: VimeoEmbedStrategy;
@@ -1,17 +1,17 @@
1
- // eslint-disable-next-line @typescript-eslint/no-redeclare
2
- const VimeoEmbedStrategy = {
3
- serialize: (embedCode) => {
4
- var _a;
5
- const videoId = (_a = (/^https:\/\/vimeo.com\/([\w-]*)/i.exec(embedCode)
6
- || /^https:\/\/player.vimeo.com\/video\/([\w-]*)/i.exec(embedCode))) === null || _a === void 0 ? void 0 : _a[1];
7
- if (videoId) {
8
- return {
9
- videoId,
10
- };
11
- }
12
- },
13
- deserialize: ({ videoId }) => `https://player.vimeo.com/video/${videoId}`,
14
- isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
1
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
2
+ const VimeoEmbedStrategy = {
3
+ serialize: (embedCode) => {
4
+ var _a;
5
+ const videoId = (_a = (/^https:\/\/vimeo.com\/([\w-]*)/i.exec(embedCode)
6
+ || /^https:\/\/player.vimeo.com\/video\/([\w-]*)/i.exec(embedCode))) === null || _a === void 0 ? void 0 : _a[1];
7
+ if (videoId) {
8
+ return {
9
+ videoId,
10
+ };
11
+ }
12
+ },
13
+ deserialize: ({ videoId }) => `https://player.vimeo.com/video/${videoId}`,
14
+ isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
15
15
  };
16
16
 
17
17
  export { VimeoEmbedStrategy };
@@ -1,21 +1,19 @@
1
1
  'use strict';
2
2
 
3
- Object.defineProperty(exports, '__esModule', { value: true });
4
-
5
- // eslint-disable-next-line @typescript-eslint/no-redeclare
6
- const YoutubeEmbedStrategy = {
7
- serialize: (embedCode) => {
8
- var _a, _b;
9
- const videoIdByShort = (_a = /^https:\/\/youtu.be\/([\w-]*)/.exec(embedCode)) === null || _a === void 0 ? void 0 : _a[1];
10
- const videoId = videoIdByShort !== null && videoIdByShort !== void 0 ? videoIdByShort : (_b = /^https:\/\/www.youtube.com\/(watch\?v=|embed\/)([\w-]*)/i.exec(embedCode)) === null || _b === void 0 ? void 0 : _b[2];
11
- if (videoId) {
12
- return {
13
- videoId,
14
- };
15
- }
16
- },
17
- deserialize: ({ videoId }) => `https://www.youtube.com/embed/${videoId}`,
18
- isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
3
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
4
+ const YoutubeEmbedStrategy = {
5
+ serialize: (embedCode) => {
6
+ var _a, _b;
7
+ const videoIdByShort = (_a = /^https:\/\/youtu.be\/([\w-]*)/.exec(embedCode)) === null || _a === void 0 ? void 0 : _a[1];
8
+ const videoId = videoIdByShort !== null && videoIdByShort !== void 0 ? videoIdByShort : (_b = /^https:\/\/www.youtube.com\/(watch\?v=|embed\/)([\w-]*)/i.exec(embedCode)) === null || _b === void 0 ? void 0 : _b[2];
9
+ if (videoId) {
10
+ return {
11
+ videoId,
12
+ };
13
+ }
14
+ },
15
+ deserialize: ({ videoId }) => `https://www.youtube.com/embed/${videoId}`,
16
+ isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
19
17
  };
20
18
 
21
19
  exports.YoutubeEmbedStrategy = YoutubeEmbedStrategy;
@@ -1,7 +1,7 @@
1
1
  import { EmbedElement, EmbedStrategy } from '@quadrats/common/embed';
2
- export declare type YoutubeEmbedElementData = {
2
+ export type YoutubeEmbedElementData = {
3
3
  videoId: string;
4
4
  };
5
- export declare type YoutubeEmbedElement = EmbedElement & YoutubeEmbedElementData;
6
- export declare type YoutubeEmbedStrategy = EmbedStrategy<YoutubeEmbedElementData, string>;
5
+ export type YoutubeEmbedElement = EmbedElement & YoutubeEmbedElementData;
6
+ export type YoutubeEmbedStrategy = EmbedStrategy<YoutubeEmbedElementData, string>;
7
7
  export declare const YoutubeEmbedStrategy: YoutubeEmbedStrategy;
@@ -1,17 +1,17 @@
1
- // eslint-disable-next-line @typescript-eslint/no-redeclare
2
- const YoutubeEmbedStrategy = {
3
- serialize: (embedCode) => {
4
- var _a, _b;
5
- const videoIdByShort = (_a = /^https:\/\/youtu.be\/([\w-]*)/.exec(embedCode)) === null || _a === void 0 ? void 0 : _a[1];
6
- const videoId = videoIdByShort !== null && videoIdByShort !== void 0 ? videoIdByShort : (_b = /^https:\/\/www.youtube.com\/(watch\?v=|embed\/)([\w-]*)/i.exec(embedCode)) === null || _b === void 0 ? void 0 : _b[2];
7
- if (videoId) {
8
- return {
9
- videoId,
10
- };
11
- }
12
- },
13
- deserialize: ({ videoId }) => `https://www.youtube.com/embed/${videoId}`,
14
- isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
1
+ // eslint-disable-next-line @typescript-eslint/no-redeclare
2
+ const YoutubeEmbedStrategy = {
3
+ serialize: (embedCode) => {
4
+ var _a, _b;
5
+ const videoIdByShort = (_a = /^https:\/\/youtu.be\/([\w-]*)/.exec(embedCode)) === null || _a === void 0 ? void 0 : _a[1];
6
+ const videoId = videoIdByShort !== null && videoIdByShort !== void 0 ? videoIdByShort : (_b = /^https:\/\/www.youtube.com\/(watch\?v=|embed\/)([\w-]*)/i.exec(embedCode)) === null || _b === void 0 ? void 0 : _b[2];
7
+ if (videoId) {
8
+ return {
9
+ videoId,
10
+ };
11
+ }
12
+ },
13
+ deserialize: ({ videoId }) => `https://www.youtube.com/embed/${videoId}`,
14
+ isElementDataValid: ({ videoId }) => typeof videoId === 'string' && !!videoId,
15
15
  };
16
16
 
17
17
  export { YoutubeEmbedStrategy };
@@ -19,7 +19,7 @@ export interface EmbedStrategy<EmbedData extends Record<string, unknown>, Render
19
19
  readonly deserialize: (element: EmbedElement & EmbedData) => RenderData;
20
20
  readonly isElementDataValid: (data: Record<keyof EmbedData, unknown>) => boolean;
21
21
  }
22
- export declare type EmbedStrategies<Provider extends string> = Record<Provider, EmbedStrategy<any, any>>;
22
+ export type EmbedStrategies<Provider extends string> = Record<Provider, EmbedStrategy<any, any>>;
23
23
  export interface Embed<P extends string, T extends Editor = Editor> extends WithElementType, Withable {
24
24
  strategies: EmbedStrategies<P>;
25
25
  insertEmbed(editor: T, providers: P[], embedCode: string, defaultNode?: Node | string): void;
@@ -1,4 +1,4 @@
1
- /*! *****************************************************************************
1
+ /******************************************************************************
2
2
  Copyright (c) Microsoft Corporation.
3
3
 
4
4
  Permission to use, copy, modify, and/or distribute this software for any
@@ -12,6 +12,8 @@ LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR
12
12
  OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
13
13
  PERFORMANCE OF THIS SOFTWARE.
14
14
  ***************************************************************************** */
15
+ /* global Reflect, Promise */
16
+
15
17
 
16
18
  function __awaiter(thisArg, _arguments, P, generator) {
17
19
  function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
@@ -1,84 +1,84 @@
1
1
  import { __awaiter } from './_virtual/_tslib.js';
2
2
  import { readFileAsDataURL } from '@quadrats/utils';
3
- import { Transforms, createParagraphElement, HistoryEditor } from '@quadrats/core';
3
+ import { HistoryEditor, Transforms, createParagraphElement } from '@quadrats/core';
4
4
  import { FILE_UPLOADER_TYPE } from './constants.js';
5
5
  import { getFilesFromInput } from './getFilesFromInput.js';
6
6
 
7
- function createFileUploader(options = {}) {
8
- const { type = FILE_UPLOADER_TYPE } = options;
9
- const createFileUploaderElement = (editor, file, options) => __awaiter(this, void 0, void 0, function* () {
10
- const { createElement, getBody, getHeaders, getUrl, uploader, } = options;
11
- const [mime] = file.type.split('/');
12
- const createByMime = createElement[mime];
13
- if (!createByMime) {
14
- return;
15
- }
16
- const { dataURL: createElementByDataURL, response: createElementByResponse } = createByMime;
17
- const headers = yield (getHeaders === null || getHeaders === void 0 ? void 0 : getHeaders(file));
18
- const xhr = uploader || new XMLHttpRequest();
19
- const dataURL = yield readFileAsDataURL(file);
20
- let sent = false;
21
- const fileUploaderElement = {
22
- type,
23
- register: (getPath, onProgress) => {
24
- xhr.onload = () => {
25
- if (xhr.status < 400) {
26
- const path = getPath();
27
- if (path) {
28
- HistoryEditor.withoutSaving(editor, () => {
29
- Transforms.removeNodes(editor, { at: path });
30
- Transforms.insertNodes(editor, createElementByResponse(xhr.response), { at: path });
31
- });
32
- }
33
- }
34
- else {
35
- throw xhr.response;
36
- }
37
- };
38
- xhr.upload.onprogress = ({ loaded, total }) => onProgress((loaded * 100) / total);
39
- if (!sent) {
40
- sent = true;
41
- xhr.send(getBody(file));
42
- }
43
- return () => {
44
- xhr.onload = null;
45
- xhr.upload.onprogress = null;
46
- };
47
- },
48
- children: [createElementByDataURL(dataURL)],
49
- };
50
- xhr.open('POST', getUrl(file));
51
- if (headers) {
52
- for (const headerName in headers) {
53
- xhr.setRequestHeader(headerName, headers[headerName]);
54
- }
55
- }
56
- return fileUploaderElement;
57
- });
58
- const upload = (editor, options) => __awaiter(this, void 0, void 0, function* () {
59
- const { accept, multiple } = options;
60
- const files = yield getFilesFromInput({ accept, multiple });
61
- if (!files) {
62
- return;
63
- }
64
- files.reduce((prev, file) => __awaiter(this, void 0, void 0, function* () {
65
- yield prev;
66
- return createFileUploaderElement(editor, file, options).then((fileUploaderElement) => {
67
- if (fileUploaderElement) {
68
- Transforms.insertNodes(editor, [fileUploaderElement, createParagraphElement()], options);
69
- Transforms.move(editor);
70
- }
71
- });
72
- }), Promise.resolve());
73
- });
74
- return {
75
- type,
76
- createFileUploaderElement,
77
- upload,
78
- with(editor) {
79
- return editor;
80
- },
81
- };
7
+ function createFileUploader(options = {}) {
8
+ const { type = FILE_UPLOADER_TYPE } = options;
9
+ const createFileUploaderElement = (editor, file, options) => __awaiter(this, void 0, void 0, function* () {
10
+ const { createElement, getBody, getHeaders, getUrl, uploader, } = options;
11
+ const [mime] = file.type.split('/');
12
+ const createByMime = createElement[mime];
13
+ if (!createByMime) {
14
+ return;
15
+ }
16
+ const { dataURL: createElementByDataURL, response: createElementByResponse } = createByMime;
17
+ const headers = yield (getHeaders === null || getHeaders === void 0 ? void 0 : getHeaders(file));
18
+ const xhr = uploader || new XMLHttpRequest();
19
+ const dataURL = yield readFileAsDataURL(file);
20
+ let sent = false;
21
+ const fileUploaderElement = {
22
+ type,
23
+ register: (getPath, onProgress) => {
24
+ xhr.onload = () => {
25
+ if (xhr.status < 400) {
26
+ const path = getPath();
27
+ if (path) {
28
+ HistoryEditor.withoutSaving(editor, () => {
29
+ Transforms.removeNodes(editor, { at: path });
30
+ Transforms.insertNodes(editor, createElementByResponse(xhr.response), { at: path });
31
+ });
32
+ }
33
+ }
34
+ else {
35
+ throw xhr.response;
36
+ }
37
+ };
38
+ xhr.upload.onprogress = ({ loaded, total }) => onProgress((loaded * 100) / total);
39
+ if (!sent) {
40
+ sent = true;
41
+ xhr.send(getBody(file));
42
+ }
43
+ return () => {
44
+ xhr.onload = null;
45
+ xhr.upload.onprogress = null;
46
+ };
47
+ },
48
+ children: [createElementByDataURL(dataURL)],
49
+ };
50
+ xhr.open('POST', getUrl(file));
51
+ if (headers) {
52
+ for (const headerName in headers) {
53
+ xhr.setRequestHeader(headerName, headers[headerName]);
54
+ }
55
+ }
56
+ return fileUploaderElement;
57
+ });
58
+ const upload = (editor, options) => __awaiter(this, void 0, void 0, function* () {
59
+ const { accept, multiple } = options;
60
+ const files = yield getFilesFromInput({ accept, multiple });
61
+ if (!files) {
62
+ return;
63
+ }
64
+ files.reduce((prev, file) => __awaiter(this, void 0, void 0, function* () {
65
+ yield prev;
66
+ return createFileUploaderElement(editor, file, options).then((fileUploaderElement) => {
67
+ if (fileUploaderElement) {
68
+ Transforms.insertNodes(editor, [fileUploaderElement, createParagraphElement()], options);
69
+ Transforms.move(editor);
70
+ }
71
+ });
72
+ }), Promise.resolve());
73
+ });
74
+ return {
75
+ type,
76
+ createFileUploaderElement,
77
+ upload,
78
+ with(editor) {
79
+ return editor;
80
+ },
81
+ };
82
82
  }
83
83
 
84
84
  export { createFileUploader };
@@ -1,27 +1,27 @@
1
- function getFilesFromInput(options = {}) {
2
- const { accept, multiple } = options;
3
- return new Promise((resolve) => {
4
- const inputEl = document.createElement('input');
5
- if (accept) {
6
- inputEl.accept = accept.join(',');
7
- }
8
- inputEl.multiple = !!multiple;
9
- inputEl.type = 'file';
10
- inputEl.addEventListener('change', () => {
11
- const { files: fileList } = inputEl;
12
- if (!fileList || !fileList.length) {
13
- resolve(undefined);
14
- }
15
- else {
16
- const files = [];
17
- for (const file of fileList) {
18
- files.push(file);
19
- }
20
- resolve(files);
21
- }
22
- });
23
- inputEl.click();
24
- });
1
+ function getFilesFromInput(options = {}) {
2
+ const { accept, multiple } = options;
3
+ return new Promise((resolve) => {
4
+ const inputEl = document.createElement('input');
5
+ if (accept) {
6
+ inputEl.accept = accept.join(',');
7
+ }
8
+ inputEl.multiple = !!multiple;
9
+ inputEl.type = 'file';
10
+ inputEl.addEventListener('change', () => {
11
+ const { files: fileList } = inputEl;
12
+ if (!fileList || !fileList.length) {
13
+ resolve(undefined);
14
+ }
15
+ else {
16
+ const files = [];
17
+ for (const file of fileList) {
18
+ files.push(file);
19
+ }
20
+ resolve(files);
21
+ }
22
+ });
23
+ inputEl.click();
24
+ });
25
25
  }
26
26
 
27
27
  export { getFilesFromInput };