智能照明系统APP-本地串口
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 
LightingSystemApp-serial/.svn/pristine/45/4591895bee71b4603186f0118e7...

149 lines
3.1 KiB

import {
isFn
} from 'uni-shared'
import {
invokeMethod,
getCurrentPageVm
} from '../../platform'
import { CanvasContext } from '../context/canvas'
import { MapContext } from '../context/create-map-context'
import { VideoContext } from '../context/create-video-context'
import { EditorContext } from '../context/editor'
const ContextClasss = {
canvas: CanvasContext,
map: MapContext,
video: VideoContext,
editor: EditorContext
}
function convertContext (result) {
if (result && result.context) {
const { id, name, page } = result.context
const ContextClass = ContextClasss[name]
result.context = ContextClass && new ContextClass(id, page)
}
}
class NodesRef {
constructor (selectorQuery, component, selector, single) {
this._selectorQuery = selectorQuery
this._component = component
this._selector = selector
this._single = single
}
boundingClientRect (callback) {
this._selectorQuery._push(
this._selector,
this._component,
this._single, {
id: true,
dataset: true,
rect: true,
size: true
},
callback)
return this._selectorQuery
}
fields (fields, callback) {
this._selectorQuery._push(
this._selector,
this._component,
this._single,
fields,
callback
)
return this._selectorQuery
}
scrollOffset (callback) {
this._selectorQuery._push(
this._selector,
this._component,
this._single, {
id: true,
dataset: true,
scrollOffset: true
},
callback
)
return this._selectorQuery
}
context (callback) {
this._selectorQuery._push(
this._selector,
this._component,
this._single, {
context: true
},
callback
)
return this._selectorQuery
}
}
class SelectorQuery {
constructor (page) {
this._page = page
this._queue = []
this._queueCb = []
}
exec (callback) {
invokeMethod('requestComponentInfo', this._page, this._queue, res => {
const queueCbs = this._queueCb
res.forEach((result, index) => {
if (Array.isArray(result)) {
result.forEach(convertContext)
} else {
convertContext(result)
}
const queueCb = queueCbs[index]
if (isFn(queueCb)) {
queueCb.call(this, result)
}
})
isFn(callback) && callback.call(this, res)
})
}
['in'] (component) {
// app-plus 平台传递 id
this._component = component._$id || component
return this
}
select (selector) {
return new NodesRef(this, this._component, selector, true)
}
selectAll (selector) {
return new NodesRef(this, this._component, selector, false)
}
selectViewport () {
return new NodesRef(this, 0, '', true)
}
_push (selector, component, single, fields, callback) {
this._queue.push({
component,
selector,
single,
fields
})
this._queueCb.push(callback)
}
}
export function createSelectorQuery (context) {
if (context) {
return new SelectorQuery(context)
}
return new SelectorQuery(getCurrentPageVm('createSelectorQuery'))
}