@grafana/ui
Version:
Grafana Components Library
1 lines • 4 kB
Source Map (JSON)
{"version":3,"file":"clipboard.mjs","sources":["../../../src/slate-plugins/clipboard.ts"],"sourcesContent":["import { Plugin } from 'slate-react';\n\nconst getCopiedText = (textBlocks: string[], startOffset: number, endOffset: number) => {\n if (!textBlocks.length) {\n return undefined;\n }\n\n const excludingLastLineLength = textBlocks.slice(0, -1).join('').length + textBlocks.length - 1;\n return textBlocks.join('\\n').slice(startOffset, excludingLastLineLength + endOffset);\n};\n\n// Remove unicode special symbol - byte order mark (BOM), U+FEFF.\nconst removeBom = (str: string | undefined): string | undefined => {\n return str?.replace(/[\\uFEFF]/g, '');\n};\n\nexport function ClipboardPlugin(): Plugin {\n const clipboardPlugin: Plugin = {\n onCopy(event, editor, next) {\n event.preventDefault();\n\n const { document, selection } = editor.value;\n const {\n start: { offset: startOffset },\n end: { offset: endOffset },\n } = selection;\n const selectedBlocks = document\n .getLeafBlocksAtRange(selection)\n .toArray()\n .map((block) => block.text);\n\n const copiedText = removeBom(getCopiedText(selectedBlocks, startOffset, endOffset));\n if (copiedText && event.clipboardData) {\n event.clipboardData.setData('Text', copiedText);\n }\n\n return true;\n },\n\n onPaste(event, editor, next) {\n event.preventDefault();\n if (event.clipboardData) {\n const pastedValue = removeBom(event.clipboardData.getData('Text'));\n const lines = pastedValue?.split('\\n');\n\n if (lines && lines.length) {\n editor.insertText(lines[0]);\n for (const line of lines.slice(1)) {\n editor.splitBlock().insertText(line);\n }\n }\n }\n\n return true;\n },\n };\n\n return {\n ...clipboardPlugin,\n onCut(event, editor, next) {\n clipboardPlugin.onCopy!(event, editor, next);\n editor.deleteAtRange(editor.value.selection);\n\n return true;\n },\n };\n}\n"],"names":[],"mappings":"AAEA,MAAM,aAAgB,GAAA,CAAC,UAAsB,EAAA,WAAA,EAAqB,SAAsB,KAAA;AACtF,EAAI,IAAA,CAAC,WAAW,MAAQ,EAAA;AACtB,IAAO,OAAA,KAAA,CAAA;AAAA;AAGT,EAAM,MAAA,uBAAA,GAA0B,UAAW,CAAA,KAAA,CAAM,CAAG,EAAA,CAAA,CAAE,CAAE,CAAA,IAAA,CAAK,EAAE,CAAA,CAAE,MAAS,GAAA,UAAA,CAAW,MAAS,GAAA,CAAA;AAC9F,EAAA,OAAO,WAAW,IAAK,CAAA,IAAI,EAAE,KAAM,CAAA,WAAA,EAAa,0BAA0B,SAAS,CAAA;AACrF,CAAA;AAGA,MAAM,SAAA,GAAY,CAAC,GAAgD,KAAA;AACjE,EAAO,OAAA,GAAA,IAAA,IAAA,GAAA,KAAA,CAAA,GAAA,GAAA,CAAK,QAAQ,WAAa,EAAA,EAAA,CAAA;AACnC,CAAA;AAEO,SAAS,eAA0B,GAAA;AACxC,EAAA,MAAM,eAA0B,GAAA;AAAA,IAC9B,MAAA,CAAO,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA;AAC1B,MAAA,KAAA,CAAM,cAAe,EAAA;AAErB,MAAA,MAAM,EAAE,QAAA,EAAU,SAAU,EAAA,GAAI,MAAO,CAAA,KAAA;AACvC,MAAM,MAAA;AAAA,QACJ,KAAA,EAAO,EAAE,MAAA,EAAQ,WAAY,EAAA;AAAA,QAC7B,GAAA,EAAK,EAAE,MAAA,EAAQ,SAAU;AAAA,OACvB,GAAA,SAAA;AACJ,MAAM,MAAA,cAAA,GAAiB,QACpB,CAAA,oBAAA,CAAqB,SAAS,CAAA,CAC9B,OAAQ,EAAA,CACR,GAAI,CAAA,CAAC,KAAU,KAAA,KAAA,CAAM,IAAI,CAAA;AAE5B,MAAA,MAAM,aAAa,SAAU,CAAA,aAAA,CAAc,cAAgB,EAAA,WAAA,EAAa,SAAS,CAAC,CAAA;AAClF,MAAI,IAAA,UAAA,IAAc,MAAM,aAAe,EAAA;AACrC,QAAM,KAAA,CAAA,aAAA,CAAc,OAAQ,CAAA,MAAA,EAAQ,UAAU,CAAA;AAAA;AAGhD,MAAO,OAAA,IAAA;AAAA,KACT;AAAA,IAEA,OAAA,CAAQ,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA;AAC3B,MAAA,KAAA,CAAM,cAAe,EAAA;AACrB,MAAA,IAAI,MAAM,aAAe,EAAA;AACvB,QAAA,MAAM,cAAc,SAAU,CAAA,KAAA,CAAM,aAAc,CAAA,OAAA,CAAQ,MAAM,CAAC,CAAA;AACjE,QAAM,MAAA,KAAA,GAAQ,2CAAa,KAAM,CAAA,IAAA,CAAA;AAEjC,QAAI,IAAA,KAAA,IAAS,MAAM,MAAQ,EAAA;AACzB,UAAO,MAAA,CAAA,UAAA,CAAW,KAAM,CAAA,CAAC,CAAC,CAAA;AAC1B,UAAA,KAAA,MAAW,IAAQ,IAAA,KAAA,CAAM,KAAM,CAAA,CAAC,CAAG,EAAA;AACjC,YAAO,MAAA,CAAA,UAAA,EAAa,CAAA,UAAA,CAAW,IAAI,CAAA;AAAA;AACrC;AACF;AAGF,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AAEA,EAAO,OAAA;AAAA,IACL,GAAG,eAAA;AAAA,IACH,KAAA,CAAM,KAAO,EAAA,MAAA,EAAQ,IAAM,EAAA;AACzB,MAAgB,eAAA,CAAA,MAAA,CAAQ,KAAO,EAAA,MAAA,EAAQ,IAAI,CAAA;AAC3C,MAAO,MAAA,CAAA,aAAA,CAAc,MAAO,CAAA,KAAA,CAAM,SAAS,CAAA;AAE3C,MAAO,OAAA,IAAA;AAAA;AACT,GACF;AACF;;;;"}