Skip to content

Commit

Permalink
feat: need return text when text/html exit
Browse files Browse the repository at this point in the history
  • Loading branch information
pubuzhixing8 committed May 27, 2024
1 parent 299948a commit 05639a2
Show file tree
Hide file tree
Showing 3 changed files with 22 additions and 22 deletions.
26 changes: 9 additions & 17 deletions packages/src/utils/clipboard/clipboard.ts
Original file line number Diff line number Diff line change
@@ -1,20 +1,15 @@
import { Element } from 'slate';
import {
getDataTransferClipboard,
getDataTransferClipboardText,
setDataTransferClipboard,
setDataTransferClipboardText
} from './data-transfer';
import { getDataTransferClipboard, setDataTransferClipboard, setDataTransferClipboardText } from './data-transfer';
import { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';
import { isClipboardReadSupported, isClipboardWriteSupported, isClipboardWriteTextSupported } from './common';
import { ClipboardData } from '../../types/clipboard';
import { SlateFragmentAttributeKey, getSlateFragmentAttribute } from '../dom';

export const buildHTMLText = (contentContainer: HTMLElement, attach: HTMLElement, data: Element[]) => {
export const buildHTMLText = (wrapper: HTMLElement, attach: HTMLElement, data: Element[]) => {
const stringObj = JSON.stringify(data);
const encoded = window.btoa(encodeURIComponent(stringObj));
attach.setAttribute(SlateFragmentAttributeKey, encoded);
return contentContainer.innerHTML;
return wrapper.innerHTML;
};

export const getClipboardFromHTMLText = (html: string): ClipboardData => {
Expand Down Expand Up @@ -48,9 +43,6 @@ export const getClipboardData = async (dataTransfer?: DataTransfer): Promise<Cli
return { files: Array.from(dataTransfer.files) };
}
clipboardData = getDataTransferClipboard(dataTransfer);
if (!clipboardData || (clipboardData && Object.keys(clipboardData).length === 0)) {
clipboardData = getDataTransferClipboardText(dataTransfer);
}
return clipboardData;
}
if (isClipboardReadSupported()) {
Expand All @@ -60,13 +52,13 @@ export const getClipboardData = async (dataTransfer?: DataTransfer): Promise<Cli
};

/**
* @param contentContainer 通过 contentContainer.innerHTML 获取字符串,将字符串写入粘贴板
* @param attach attach 必须是 contentContainer 的子元素,用于附加编辑器 json 数据
* @param wrapper 通过 wrapper.innerHTML 获取字符串,将字符串写入粘贴板
* @param attach attach 必须是 wrapper 的子元素,用于附加编辑器 json 数据
* @returns void
*/
export const setClipboardData = async (
clipboardData: ClipboardData,
contentContainer: HTMLElement,
wrapper: HTMLElement,
attach: HTMLElement,
dataTransfer?: Pick<DataTransfer, 'getData' | 'setData'>
) => {
Expand All @@ -75,12 +67,12 @@ export const setClipboardData = async (
}
const { elements, text } = clipboardData;
if (isClipboardWriteSupported()) {
const htmlText = buildHTMLText(contentContainer, attach, elements);
const htmlText = buildHTMLText(wrapper, attach, elements);
return await setNavigatorClipboard(htmlText, elements, text);
}

if (dataTransfer) {
const htmlText = buildHTMLText(contentContainer, attach, elements);
const htmlText = buildHTMLText(wrapper, attach, elements);
setDataTransferClipboard(dataTransfer, htmlText);
setDataTransferClipboardText(dataTransfer, text);
return;
Expand All @@ -89,7 +81,7 @@ export const setClipboardData = async (
// Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty
// Such as contextmenu copy in Firefox.
if (isClipboardWriteTextSupported()) {
const htmlText = buildHTMLText(contentContainer, attach, elements);
const htmlText = buildHTMLText(wrapper, attach, elements);
return await navigator.clipboard.writeText(htmlText);
}
};
17 changes: 12 additions & 5 deletions packages/src/utils/clipboard/data-transfer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
import { Element } from 'slate';
import { getClipboardFromHTMLText } from './clipboard';
import { ClipboardData } from '../../types/clipboard';

Expand All @@ -17,11 +16,19 @@ export const getDataTransferClipboard = (data: Pick<DataTransfer, 'getData' | 's
if (htmlClipboardData) {
return htmlClipboardData;
}
return {
html
};
const textData = getDataTransferClipboardText(data);
if (textData) {
return {
html,
...textData
};
} else {
return { html };
}
} else {
const textData = getDataTransferClipboardText(data);
return textData;
}
return null;
};

export const getDataTransferClipboardText = (data: Pick<DataTransfer, 'getData' | 'setData'> | null): ClipboardData => {
Expand Down
1 change: 1 addition & 0 deletions packages/src/utils/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,4 @@ export * from './range-list';
export * from './block-card';
export * from './global-normalize';
export * from './throttle';
export * from './clipboard/clipboard';

0 comments on commit 05639a2

Please sign in to comment.