mirror of
https://github.com/logseq/logseq.git
synced 2026-05-02 01:46:35 +00:00
Enhance/more ns plugin api (#4828)
* improve(plugin): WIP add settings schema * improve(plugin): add identity for settings modal * improve(plugin): WIP add settings input * fix(ui): scrollbar overlay of modal panel content * improve(plugin): WIP add more render types of setting item * improve(plugin): WIP polish settings items * improve(plugin): WIP settings list of plugins * improve(plugin): more settings types & polish releated ui * fix(plugin): sometimes disable plugin not work * improve(plugin): polish ui of plugin settings * fix(dev): warning of lint * improve(plugin): add api of settings changed * chore: build libs core * fix(ui): width of settings panel wrap * improve(plugin): separate layouts data from settings aio file * imporve(plugin): container size of single plugin settings * fix: add missing state * improve(plugin): add Git ns * improve(plugin): git related api * improve(api): type of git result * chore: build libs core * fix(dev): kondo lint * fix(plugin): use cdn sdk when js entry * chore: build libs core * fix(plugin): env condition * improve(plugin): add UI ns * fix(api): arguments of datascript query * enhance(api): manageable message instance of UI tools * enhance(api): WIP add experiments api * enhance(api): WIP add resources state of plugin * improve(plugin): add status of loading script resources * improve(plugin): more opts for script loader * improve(plugin): WIP add fenced code renderer hook * improve(plugin): fenced code renderer hook * fix(plugin): resource root path of plugin fs location * imporve(plugin): support local files for loading scripts * improve(plugin): types of expirements api * fix: typo of class * enhance(api): add namespace related apis * enhance(api): add linked refrences related apis * enhance(plugin): add sample links to related api comments * improve(plugin): add db changed hook & optimize strategy of caller for hooks * improve(plugin): compatible commands registration for old sdk * improve(plugin): collect user sdk version for plugin local * improve(plugin): add internal callable apis for user sdk * chore(plugin): missing files & bump libs version * improve(plugin): compatiable for old sdk about hook messaging optimization * improve(plugin): db hook optimization for old sdk * enhance(ux): auto focus searchbar when open plugins list * improve(plugin): api of a hook from specific block changed event * improve(plugin): api of db block change hook * improve(plugin): add show bracket user config of api * improve(plugin): api of db block change hook * fix(api): toggle collapsed of block * improve(api): try to init grpah with git before exec git commands * improve(plugin): attributes of sandbox container * improve(dev): support register command with keybinding * improve(plugin): add api of register shortcut command * fix(plugin): reubild slash commands when new command registration * fix(dev): lint * improve(dev): lint script of libs codebase * chore(dev): remove useless codes * improve(plugin):sanitize path string of plugin repo value * fix(plugin): rebuild commands list when unregister a plugin * fix(ui): overflow width of query result table * chore: rebuild libs core * improve(plugin): add assets related apis * chore: rebuild libs core * improve(plugin): support replace state of into block in page api * improve(plugin): prepend/append child block in page * improve(plugin): polished exceptions message of plugin update/install * fix(plugin): update settings within gui * improve(ux): debounce change event of input for plugin settings gui * chore: rebuild libs core * enhance(plugin): catch exception of hook plugin
This commit is contained in:
@@ -5,16 +5,16 @@ import { LSPluginUser } from './LSPlugin.user'
|
||||
// @ts-ignore
|
||||
const { importHTML, createSandboxContainer } = window.QSandbox || {}
|
||||
|
||||
function userFetch (url, opts) {
|
||||
function userFetch(url, opts) {
|
||||
if (!url.startsWith('http')) {
|
||||
url = url.replace('file://', '')
|
||||
return new Promise(async (resolve, reject) => {
|
||||
try {
|
||||
const content = await window.apis.doAction(['readFile', url])
|
||||
resolve({
|
||||
text () {
|
||||
text() {
|
||||
return content
|
||||
}
|
||||
},
|
||||
})
|
||||
} catch (e) {
|
||||
console.error(e)
|
||||
@@ -32,9 +32,7 @@ class LSPluginShadowFrame extends EventEmitter<'mounted' | 'unmounted'> {
|
||||
private _loaded = false
|
||||
private _unmountFns: Array<() => Promise<void>> = []
|
||||
|
||||
constructor (
|
||||
private _pluginLocal: PluginLocal
|
||||
) {
|
||||
constructor(private _pluginLocal: PluginLocal) {
|
||||
super()
|
||||
|
||||
_pluginLocal._dispose(() => {
|
||||
@@ -42,20 +40,20 @@ class LSPluginShadowFrame extends EventEmitter<'mounted' | 'unmounted'> {
|
||||
})
|
||||
}
|
||||
|
||||
async load () {
|
||||
async load() {
|
||||
const { name, entry } = this._pluginLocal.options
|
||||
|
||||
if (this.loaded || !entry) return
|
||||
|
||||
const { template, execScripts } = await importHTML(entry, { fetch: userFetch })
|
||||
const { template, execScripts } = await importHTML(entry, {
|
||||
fetch: userFetch,
|
||||
})
|
||||
|
||||
this._mount(template, document.body)
|
||||
|
||||
const sandbox = createSandboxContainer(
|
||||
name, {
|
||||
elementGetter: () => this._root?.firstChild,
|
||||
}
|
||||
)
|
||||
const sandbox = createSandboxContainer(name, {
|
||||
elementGetter: () => this._root?.firstChild,
|
||||
})
|
||||
|
||||
const global = sandbox.instance.proxy as any
|
||||
|
||||
@@ -75,8 +73,8 @@ class LSPluginShadowFrame extends EventEmitter<'mounted' | 'unmounted'> {
|
||||
this._loaded = true
|
||||
}
|
||||
|
||||
_mount (content: string, container: HTMLElement) {
|
||||
const frame = this._frame = document.createElement('div')
|
||||
_mount(content: string, container: HTMLElement) {
|
||||
const frame = (this._frame = document.createElement('div'))
|
||||
frame.classList.add('lsp-shadow-sandbox')
|
||||
frame.id = this._pluginLocal.id
|
||||
|
||||
@@ -88,29 +86,27 @@ class LSPluginShadowFrame extends EventEmitter<'mounted' | 'unmounted'> {
|
||||
this.emit('mounted')
|
||||
}
|
||||
|
||||
_unmount () {
|
||||
_unmount() {
|
||||
for (const fn of this._unmountFns) {
|
||||
fn && fn.call(null)
|
||||
}
|
||||
}
|
||||
|
||||
destroy () {
|
||||
destroy() {
|
||||
this.frame?.parentNode?.removeChild(this.frame)
|
||||
}
|
||||
|
||||
get loaded (): boolean {
|
||||
get loaded(): boolean {
|
||||
return this._loaded
|
||||
}
|
||||
|
||||
get document () {
|
||||
get document() {
|
||||
return this._root?.firstChild as HTMLElement
|
||||
}
|
||||
|
||||
get frame (): HTMLElement {
|
||||
get frame(): HTMLElement {
|
||||
return this._frame!
|
||||
}
|
||||
}
|
||||
|
||||
export {
|
||||
LSPluginShadowFrame
|
||||
}
|
||||
export { LSPluginShadowFrame }
|
||||
|
||||
Reference in New Issue
Block a user