Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,11 @@
</template>

<script>
import { renderCustomPickerElement, isCustomPickerElementRegistered, destroyCustomPickerElement } from './../../../functions/reference/customPickerElements.js'
import {
renderCustomPickerElement,
isCustomPickerElementRegistered,
destroyCustomPickerElement,
} from '../../../functions/reference/customPickerElements.ts'

export default {
name: 'NcCustomPickerElement',
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,7 @@
</template>

<script>
import { searchProvider } from './../../../functions/reference/providerHelper.js'
import { searchProvider } from '../../../functions/reference/providerHelper.ts'
import { isUrl } from './utils.js'
import NcEmptyContent from '../../NcEmptyContent/index.ts'
import NcHighlight from '../../NcHighlight/index.ts'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -38,8 +38,8 @@ import NcCustomPickerElement from './NcCustomPickerElement.vue'
import NcProviderList from './NcProviderList.vue'
import NcRawLinkInput from './NcRawLinkInput.vue'
import NcSearch from './NcSearch.vue'
import { isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'
import { touchProvider } from './../../../functions/reference/providerHelper.js'
import { isCustomPickerElementRegistered } from '../../../functions/reference/customPickerElements.ts'
import { touchProvider } from '../../../functions/reference/providerHelper.ts'

const MODES = {
providerList: 1,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,7 @@

<script>
import NcReferencePicker from './NcReferencePicker.vue'
import { getCustomPickerElementSize, isCustomPickerElementRegistered } from './../../../functions/reference/customPickerElements.js'
import { getCustomPickerElementSize, isCustomPickerElementRegistered } from '../../../functions/reference/customPickerElements.ts'
import NcButton from '../../NcButton/index.ts'
import NcModal from '../../NcModal/index.js'
import { t } from '../../../l10n.js'
Expand Down
6 changes: 3 additions & 3 deletions src/components/NcRichText/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -11,20 +11,20 @@ import NcReferenceWidget from './NcReferenceWidget.vue'
import NcReferencePicker from './NcReferencePicker/NcReferencePicker.vue'
import NcReferencePickerModal from './NcReferencePicker/NcReferencePickerModal.vue'
import NcSearch from './NcReferencePicker/NcSearch.vue'
import { getLinkWithPicker } from './../../functions/reference/referencePickerModal.js'
import { getLinkWithPicker } from '../../functions/reference/referencePickerModal.ts'
import {
getProvider,
getProviders,
sortProviders,
searchProvider,
anyLinkProviderId,
} from '../../functions/reference/providerHelper.js'
} from '../../functions/reference/providerHelper.ts'
import {
registerCustomPickerElement,
renderCustomPickerElement,
isCustomPickerElementRegistered,
NcCustomPickerRenderResult,
} from '../../functions/reference/customPickerElements.js'
} from '../../functions/reference/customPickerElements.ts'

export default NcRichText

Expand Down
79 changes: 0 additions & 79 deletions src/functions/reference/customPickerElements.js

This file was deleted.

117 changes: 117 additions & 0 deletions src/functions/reference/customPickerElements.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,117 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

import logger from '../../utils/logger'

window._vue_richtext_custom_picker_elements ??= {}
window._registerCustomPickerElement ??= registerCustomPickerElement

/**
* Representation of the render callback result
* It contains a dom element and an object (Vue instance or other fancy things)
*/
export class NcCustomPickerRenderResult {

public element: HTMLElement
public object: object

/**
* @param element - The HTML element
* @param object - The object
*/
constructor(element: HTMLElement, object: object) {
this.element = element
this.object = object
}

}

interface CustomPickerElementProps {
providerId: number
accessible: boolean
}

type CustomPickerElementRegistrationCallback = (el: HTMLElement, options: CustomPickerElementProps) => void
type CustomPickerElementDestroyCallback = (el: HTMLElement, result: NcCustomPickerRenderResult) => void

export interface CustomPickerElement {
id: string
size: 'small' | 'normal' | 'large' | 'full'

callback: CustomPickerElementRegistrationCallback
onDestroy: CustomPickerElementDestroyCallback
}

/**
* @param id - Id of the element to check
*/
export function isCustomPickerElementRegistered(id: string): boolean {
return !!window._vue_richtext_custom_picker_elements[id]
}

/**
* @param id - Id of the element to get
*/
export function getCustomPickerElementSize(id: string): 'small' | 'normal' | 'large' | 'full' | null {
const size = window._vue_richtext_custom_picker_elements[id]?.size
if (['small', 'normal', 'large', 'full'].includes(size)) {
return size
}
return null
}

/**
* @param id - Id of element to register
* @param callback - Render callback
* @param onDestroy - Cleanup callback
* @param size - Size of the element
*/
export function registerCustomPickerElement(
id: string,
callback: CustomPickerElementRegistrationCallback,
onDestroy: CustomPickerElementDestroyCallback = () => {},
size: CustomPickerElement['size'] = 'large',
) {
if (window._vue_richtext_custom_picker_elements[id]) {
logger.error(`Custom reference picker element for id ${id} already registered`)
return
}

window._vue_richtext_custom_picker_elements[id] = {
id,
callback,
onDestroy,
size,
}
}

/**
* @param el - element to render to
* @param options - Element options
*/
export function renderCustomPickerElement(el: HTMLElement, options: CustomPickerElementProps) {
const { providerId, accessible } = options
if (!window._vue_richtext_custom_picker_elements[providerId]) {
logger.error(`Custom reference picker element for reference provider ID ${providerId} not registered`)
return
}

return window._vue_richtext_custom_picker_elements[providerId]
.callback(el, { providerId, accessible })
}

/**
* @param providerId - Provider id of element to destroy
* @param el - The element to destroy element from
* @param renderResult - The render result
*/
export function destroyCustomPickerElement(providerId: string, el: HTMLElement, renderResult: NcCustomPickerRenderResult) {
if (!window._vue_richtext_custom_picker_elements[providerId]) {
return
}

window._vue_richtext_custom_picker_elements[providerId]
.onDestroy(el, renderResult)
}
38 changes: 0 additions & 38 deletions src/functions/reference/index.js

This file was deleted.

34 changes: 34 additions & 0 deletions src/functions/reference/index.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,34 @@
/**
* SPDX-FileCopyrightText: 2023 Nextcloud GmbH and Nextcloud contributors
* SPDX-License-Identifier: AGPL-3.0-or-later
*/

export {
type ReferenceWidgetProps,
type ReferenceWidgetRenderProperties,

registerWidget,
renderWidget,
isWidgetRegistered,
hasInteractiveView,
} from './widgets.ts'

export { getLinkWithPicker } from './referencePickerModal.ts'

export {
type ReferenceProvider,

getProvider,
getProviders,
sortProviders,
searchProvider,
anyLinkProviderId,
} from './providerHelper.ts'

export {
type CustomPickerElement,
registerCustomPickerElement,
renderCustomPickerElement,
isCustomPickerElementRegistered,
NcCustomPickerRenderResult,
} from './customPickerElements.ts'
Loading
Loading