111 lines
2.3 KiB
Plaintext
111 lines
2.3 KiB
Plaintext
// @ts-nocheck
|
||
import {IconCollection} from './components/l-icon/types'
|
||
// #ifndef UNI-APP-X
|
||
|
||
// #ifdef VUE3
|
||
import { reactive } from 'vue';
|
||
function definePlugin(options: any) {
|
||
return options
|
||
}
|
||
// #endif
|
||
|
||
// #ifdef VUE2
|
||
import Vue from 'vue'
|
||
let reactive = Vue.observable
|
||
type VueApp = any
|
||
// #endif
|
||
|
||
type UTSJSONObject = any//Record<string, any>
|
||
|
||
// #endif
|
||
|
||
let topApp : VueApp | null = null;
|
||
const _iconCollection = reactive<IconCollection>({
|
||
has: true,
|
||
// #ifdef UNI-APP-X
|
||
icons: new Map<string, any|null>()
|
||
// #endif
|
||
|
||
// #ifndef UNI-APP-X
|
||
icons: {}
|
||
// #endif
|
||
})
|
||
|
||
|
||
export function useIconHost(iconHost : string) {
|
||
// #ifdef UNI-APP-X
|
||
uni.setStorageSync('$limeIconsHost', iconHost)
|
||
// #endif
|
||
// #ifndef UNI-APP-X
|
||
uni.$limeIconsHost = iconHost
|
||
// #endif
|
||
}
|
||
let isInstall = false
|
||
export function useIconCollection(iconCollection: UTSJSONObject|null = {}) {
|
||
if(!isInstall) {
|
||
console.warn('[lime-icon]: useIconCollection 请先注册,app.use(limeIcons, null, iconjson)')
|
||
return
|
||
}
|
||
// #ifdef UNI-APP-X
|
||
const map = (iconCollection as UTSJSONObject).toMap()
|
||
if(map.size != 0) {
|
||
uni.setStorageSync('$limeIconCollection', iconCollection)
|
||
_iconCollection.icons = map
|
||
}
|
||
// #endif
|
||
// #ifndef UNI-APP-X
|
||
if(Object.keys(iconCollection).length != 0) {
|
||
uni.setStorageSync('$limeIconCollection', iconCollection)
|
||
_iconCollection.icons = iconCollection
|
||
}
|
||
// #endif
|
||
}
|
||
|
||
function useProvide() {
|
||
if(topApp == null) return
|
||
isInstall = true
|
||
// #ifdef VUE3
|
||
topApp!.provide('$iconCollection', _iconCollection)
|
||
// #endif
|
||
// #ifndef VUE3
|
||
topApp.mixin({
|
||
provide: {
|
||
$iconCollection: _iconCollection
|
||
}
|
||
})
|
||
// #endif
|
||
}
|
||
|
||
// #ifdef VUE3
|
||
export const limeIcons = definePlugin({
|
||
install: (app: VueApp, iconHost: string | null, iconCollection: UTSJSONObject | null):void => {
|
||
topApp = app;
|
||
if(iconHost != null || iconHost != '') {
|
||
useIconHost(iconHost!)
|
||
}
|
||
if(iconCollection != null) {
|
||
useProvide()
|
||
useIconCollection(iconCollection)
|
||
}
|
||
}
|
||
})
|
||
// #endif
|
||
|
||
// #ifdef VUE2
|
||
export const limeIcons = {
|
||
install: (app: any, options: any[]) => {
|
||
topApp = app;
|
||
let [iconHost, iconCollection] = options
|
||
if(iconHost != null && typeof iconHost == 'object') {
|
||
iconCollection = iconHost
|
||
}
|
||
if(iconHost && iconHost != '') {
|
||
useIconHost(iconHost!)
|
||
}
|
||
if(iconCollection != null) {
|
||
useProvide()
|
||
useIconCollection(iconCollection)
|
||
}
|
||
}
|
||
}
|
||
// #endif |