@nextcloud/vue
Version:
Nextcloud vue components
1 lines • 4.62 kB
Source Map (JSON)
{"version":3,"file":"customPickerElements.mjs","sources":["../../src/functions/reference/customPickerElements.ts"],"sourcesContent":["/**\n * SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors\n * SPDX-License-Identifier: AGPL-3.0-or-later\n */\n\nimport { logger } from '../../utils/logger.ts'\n\nwindow._vue_richtext_custom_picker_elements ??= {}\nwindow._registerCustomPickerElement ??= registerCustomPickerElement\n\n/**\n * Representation of the render callback result\n * It contains a dom element and an object (Vue instance or other fancy things)\n */\nexport class NcCustomPickerRenderResult {\n\tpublic element: HTMLElement\n\tpublic object: object\n\n\t/**\n\t * @param element - The HTML element\n\t * @param object - The object\n\t */\n\tconstructor(element: HTMLElement, object: object) {\n\t\tthis.element = element\n\t\tthis.object = object\n\t}\n}\n\ninterface CustomPickerElementProps {\n\tproviderId: number\n\taccessible: boolean\n}\n\ntype CustomPickerElementRegistrationCallback = (el: HTMLElement, options: CustomPickerElementProps) => void\ntype CustomPickerElementDestroyCallback = (el: HTMLElement, result: NcCustomPickerRenderResult) => void\n\nexport interface CustomPickerElement {\n\tid: string\n\tsize: 'small' | 'normal' | 'large' | 'full'\n\n\tcallback: CustomPickerElementRegistrationCallback\n\tonDestroy: CustomPickerElementDestroyCallback\n}\n\n/**\n * @param id - Id of the element to check\n */\nexport function isCustomPickerElementRegistered(id: string): boolean {\n\treturn !!window._vue_richtext_custom_picker_elements[id]\n}\n\n/**\n * @param id - Id of the element to get\n */\nexport function getCustomPickerElementSize(id: string): 'small' | 'normal' | 'large' | 'full' | null {\n\tconst size = window._vue_richtext_custom_picker_elements[id]?.size\n\tif (size && ['small', 'normal', 'large', 'full'].includes(size)) {\n\t\treturn size\n\t}\n\treturn null\n}\n\n/**\n * @param id - Id of element to register\n * @param callback - Render callback\n * @param onDestroy - Cleanup callback\n * @param size - Size of the element\n */\nexport function registerCustomPickerElement(\n\tid: string,\n\tcallback: CustomPickerElementRegistrationCallback,\n\tonDestroy: CustomPickerElementDestroyCallback = () => {},\n\tsize: CustomPickerElement['size'] = 'large',\n) {\n\tif (window._vue_richtext_custom_picker_elements[id]) {\n\t\tlogger.error(`Custom reference picker element for id ${id} already registered`)\n\t\treturn\n\t}\n\n\twindow._vue_richtext_custom_picker_elements[id] = {\n\t\tid,\n\t\tcallback,\n\t\tonDestroy,\n\t\tsize,\n\t}\n}\n\n/**\n * @param el - element to render to\n * @param options - Element options\n */\nexport function renderCustomPickerElement(el: HTMLElement, options: CustomPickerElementProps) {\n\tconst { providerId, accessible } = options\n\tif (!window._vue_richtext_custom_picker_elements[providerId]) {\n\t\tlogger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`)\n\t\treturn\n\t}\n\n\treturn window._vue_richtext_custom_picker_elements[providerId]\n\t\t.callback(el, { providerId, accessible })\n}\n\n/**\n * @param providerId - Provider id of element to destroy\n * @param el - The element to destroy element from\n * @param renderResult - The render result\n */\nexport function destroyCustomPickerElement(providerId: string, el: HTMLElement, renderResult: NcCustomPickerRenderResult) {\n\tif (!window._vue_richtext_custom_picker_elements[providerId]) {\n\t\treturn\n\t}\n\n\twindow._vue_richtext_custom_picker_elements[providerId]\n\t\t.onDestroy(el, renderResult)\n}\n"],"names":[],"mappings":";AAOA,OAAO,yCAAyC,CAAA;AAChD,OAAO,iCAAiC;AAMjC,MAAM,2BAA2B;AAAA,EAChC;AAAA,EACA;AAAA;AAAA;AAAA;AAAA;AAAA,EAMP,YAAY,SAAsB,QAAgB;AACjD,SAAK,UAAU;AACf,SAAK,SAAS;AAAA,EACf;AACD;AAqBO,SAAS,gCAAgC,IAAqB;AACpE,SAAO,CAAC,CAAC,OAAO,qCAAqC,EAAE;AACxD;AAKO,SAAS,2BAA2B,IAA0D;AACpG,QAAM,OAAO,OAAO,qCAAqC,EAAE,GAAG;AAC9D,MAAI,QAAQ,CAAC,SAAS,UAAU,SAAS,MAAM,EAAE,SAAS,IAAI,GAAG;AAChE,WAAO;AAAA,EACR;AACA,SAAO;AACR;AAQO,SAAS,4BACf,IACA,UACA,YAAgD,MAAM;AAAC,GACvD,OAAoC,SACnC;AACD,MAAI,OAAO,qCAAqC,EAAE,GAAG;AACpD,WAAO,MAAM,0CAA0C,EAAE,qBAAqB;AAC9E;AAAA,EACD;AAEA,SAAO,qCAAqC,EAAE,IAAI;AAAA,IACjD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EAAA;AAEF;AAMO,SAAS,0BAA0B,IAAiB,SAAmC;AAC7F,QAAM,EAAE,YAAY,WAAA,IAAe;AACnC,MAAI,CAAC,OAAO,qCAAqC,UAAU,GAAG;AAC7D,WAAO,MAAM,6DAA6D,UAAU,iBAAiB;AACrG;AAAA,EACD;AAEA,SAAO,OAAO,qCAAqC,UAAU,EAC3D,SAAS,IAAI,EAAE,YAAY,YAAY;AAC1C;AAOO,SAAS,2BAA2B,YAAoB,IAAiB,cAA0C;AACzH,MAAI,CAAC,OAAO,qCAAqC,UAAU,GAAG;AAC7D;AAAA,EACD;AAEA,SAAO,qCAAqC,UAAU,EACpD,UAAU,IAAI,YAAY;AAC7B;"}