UNPKG

13.7 kBSource Map (JSON)View Raw
1{"version":3,"file":"selectorQuery.js","sources":["../../../src/api/wxml/selectorQuery.ts"],"sourcesContent":["import Taro from '@tarojs/api'\nimport { isFunction } from '@tarojs/shared'\n\nimport { findDOM } from '../../utils'\nimport { CanvasContext } from '../canvas/CanvasContext'\nimport { NodesRef } from './nodesRef'\n\ntype TElement = Document | HTMLElement | Element\n\ninterface ISelectorQueryQueue {\n component: TaroGeneral.IAnyObject\n selector: string\n single: boolean\n fields\n}\n\ntype TSelectorQueryQueueCallback = (res: ISelectorQueryQueue) => void\n\nfunction filter (fields, dom?: HTMLElement, selector?: string) {\n if (!dom) return null\n\n const isViewport = selector === '.taro_page'\n const { id, dataset, rect, size, scrollOffset, properties = [], computedStyle = [], nodeCanvasType, node, context } = fields\n const res: any = {}\n\n if (nodeCanvasType && node) {\n const tagName = dom.tagName\n res.node = {\n id: dom.id,\n $taroElement: dom\n }\n if (/^taro-canvas-core/i.test(tagName)) {\n const type = (dom as any).type! || ''\n res.nodeCanvasType = type\n const canvas = dom.getElementsByTagName('canvas')[0]\n if (/^(2d|webgl)/i.test(type) && canvas) {\n res.node = canvas\n } else {\n res.node = null\n }\n } else {\n // TODO https://developers.weixin.qq.com/miniprogram/dev/api/ui/scroll/ScrollViewContext.html\n // if (/^taro-scroll-view-core/i.test(tagName))\n res.nodeCanvasType = ''\n res.node = dom\n }\n return res\n }\n if (context) {\n const tagName = dom.tagName\n if (/^taro-video-core/i.test(tagName)) {\n // TODO HTMLVideoElement to VideoContext\n return { context: dom as unknown as Taro.VideoContext }\n } else if (/^taro-canvas-core/i.test(tagName)) {\n const type = (dom as any).type! || '2d'\n const canvas = dom?.querySelector('canvas') as HTMLCanvasElement\n const ctx = canvas?.getContext(type) as CanvasRenderingContext2D\n return { context: new CanvasContext(canvas, ctx) }\n } else if (/^taro-live-player-core/i.test(tagName)) {\n console.error('暂时不支持通过 NodesRef.context 获取 LivePlayerContext')\n } else if (/^taro-editor-core/i.test(tagName)) {\n console.error('暂时不支持通过 NodesRef.context 获取 EditorContext')\n } else if (/^taro-map-core/i.test(tagName)) {\n console.error('暂时不支持通过 NodesRef.context 获取 MapContext')\n }\n return\n }\n if (id) res.id = dom.id\n if (dataset) res.dataset = Object.assign({}, dom.dataset)\n if (rect || size) {\n const { left, right, top, bottom, width, height } = dom.getBoundingClientRect()\n if (rect) {\n if (!isViewport) {\n res.left = left\n res.right = right\n res.top = top\n res.bottom = bottom\n } else {\n res.left = 0\n res.right = 0\n res.top = 0\n res.bottom = 0\n }\n }\n if (size) {\n if (!isViewport) {\n res.width = width\n res.height = height\n } else {\n res.width = dom.clientWidth\n res.height = dom.clientHeight\n }\n }\n }\n if (scrollOffset) {\n res.scrollLeft = dom.scrollLeft\n res.scrollTop = dom.scrollTop\n }\n if (properties.length) {\n properties.forEach(prop => {\n const attr = dom.getAttribute(prop)\n if (attr) res[prop] = attr\n })\n }\n if (computedStyle.length) {\n const styles = window.getComputedStyle(dom)\n computedStyle.forEach(key => {\n const value = styles.getPropertyValue(key) || styles[key]\n if (value) res[key] = value\n })\n }\n\n return res\n}\n\n/**\n * WXML节点信息API\n * @return {Object} SelectorQuery 对象实例\n */\nfunction queryBat (queue: ISelectorQueryQueue[], cb: (...args: any[]) => any): void {\n const result: any[] = []\n\n queue.forEach(item => {\n const { selector, single, fields, component } = item\n // selector 的容器节点\n /* eslint-disable */\n const container: TElement = (\n component !== null ?\n (findDOM(component) as HTMLElement || document) :\n document\n )\n /* eslint-enable */\n\n // 特殊处理 ---- 选自己\n let selectSelf = false\n if (container !== document) {\n const $nodeList = container.parentNode?.querySelectorAll(selector)\n if ($nodeList) {\n for (let i = 0, len = $nodeList.length; i < len; ++i) {\n if (container === $nodeList[i]) {\n selectSelf = true\n break\n }\n }\n }\n }\n\n if (single) {\n const el = selectSelf === true ? container : container.querySelector(selector)\n result.push(filter(fields, el as HTMLElement, selector))\n } else {\n const $children = container.querySelectorAll(selector)\n const children: TElement[] = []\n selectSelf === true && children.push(container)\n for (let i = 0, len = $children.length; i < len; ++i) {\n children.push($children[i])\n }\n result.push(children.map(dom => filter(fields, dom as HTMLElement)))\n }\n })\n cb(result)\n}\n\nexport class SelectorQuery implements Taro.SelectorQuery {\n _defaultWebviewId: string | null\n _webviewId: string | null\n _queue: ISelectorQueryQueue[]\n _queueCb: (TSelectorQueryQueueCallback | null)[]\n _component?: TaroGeneral.IAnyObject\n\n constructor () {\n this._defaultWebviewId = null\n this._webviewId = null\n this._queue = []\n this._queueCb = []\n this._component\n }\n\n in (component: TaroGeneral.IAnyObject) {\n this._component = component\n return this\n }\n\n select (selector: string) {\n // 小程序里跨自定义组件的后代选择器 '>>>' 在 h5 替换为普通后代选择器 '>'\n if (typeof selector === 'string') selector = selector.replace('>>>', '>')\n return new NodesRef(selector, this, true)\n }\n\n selectAll (selector: string) {\n // 小程序里跨自定义组件的后代选择器 '>>>' 在 h5 替换为普通后代选择器 '>'\n if (typeof selector === 'string') selector = selector.replace('>>>', '>')\n return new NodesRef(selector, this, false)\n }\n\n selectViewport () {\n return new NodesRef('.taro_page', this, true)\n }\n\n exec (cb) {\n queryBat(this._queue, res => {\n const _queueCb = this._queueCb\n res.forEach((item, index) => {\n const cb = _queueCb[index]\n isFunction(cb) && cb.call(this, item)\n })\n isFunction(cb) && cb.call(this, res)\n })\n return this as unknown as Taro.NodesRef\n }\n\n _push (selector: string, component, single, fields, callback: TSelectorQueryQueueCallback | null = null) {\n this._queue.push({\n component,\n selector,\n single,\n fields\n })\n this._queueCb.push(callback)\n }\n}\n"],"names":[],"mappings":"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"}
\No newline at end of file