// @ts-nocheck // #ifdef MP function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean) { const { proxy, $vm } = context context = $vm || proxy if ((selector.startsWith('.') || selector.startsWith('#'))) { const queue = [context] let result = null while (queue.length > 0) { const child = queue.shift(); const flag = child?.selectComponent(selector) if (flag) { if (!needAll) { return result = flag.$vm } return result = child.selectAllComponents(selector).map(item => item.$vm) } else { child.$children && (queue.push(...child.$children)); } } return result } else { const { $templateRefs } = context.$ const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector const nameMap = {} for (var i = 0; i < $templateRefs.length; i++) { const item = $templateRefs[i] nameMap[item.i] = item.r } let result = [] if (context.$children.length) { const queue = [...context.$children] while (queue.length > 0) { const child = queue.shift(); if (child.type?.name === selectorValue || child.$?.type?.name === selectorValue) { result.push(child) } else if (child.$refs && child.$refs[selectorValue]) { result = child.$refs[selectorValue] } else if (nameMap[child.id] === selectorValue) { result.push(child) } else { child.$children && (queue.push(...child.$children)); } if (result.length && !needAll) { return; } } } return needAll ? result : result[0] } } // #endif // #ifdef H5 function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean){ const {_, component } = context const child = {component: _ || component || context, children: null , subTree: null, props: null} let result = [] let queue = [child] const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector while(queue.length > 0 ) { const child = queue.shift() const {component, children , props, subTree} = child if(component?.type?.name == selectorValue) { result.push(component) } else if(selector.startsWith('$') && component && (props?.ref == selectorValue || component[key][selectorValue])) { if(props?.ref == selectorValue) { //exposed result.push(component) } else if(component[key][selectorValue]) { result.push(component[key][selectorValue]) } } else if(!selector.startsWith('$') && component?.exposed && new RegExp(`\\b${selectorValue}\\b`).test(component.attrs[key])) { // exposed result.push(component) } else if(children && Array.isArray(children)) { queue.push(...children) } else if(!component && subTree) { queue.push(subTree) } else if(component?.subTree) { queue.push(component.subTree) } if(result.length && !needAll) { break } } return needAll ? result : result[0] } // #endif // #ifdef APP function findChildren(selector : string, context : ComponentPublicInstance, needAll : boolean){ let result = [] const selectorValue = /#|\.|@|$/.test(selector) ? selector.substring(1) : selector const queue = [context] while(queue.length > 0) { const child = queue.shift() const {component, children, props, subTree} = child const isComp = component && props && component.exposed && !node if(child.type && child.type.name === selectorValue) { result.push(component) } else if(props?.[key] === selectorValue && node) { result.push(child) } else if(selector.startsWith('$') && isComp && (props.ref === selectorValue || props.ref_key === selectorValue)) { // exposed result.push(component) } else if(!selector.startsWith('$') && isComp && new RegExp(`\\b${selectorValue}\\b`).test(props[key])) { // exposed result.push(component) } else if(subTree) { queue.push(subTree) } else if(component && component.subTree){ queue.push(component.subTree) } else if(children && Array.isArray(children)) { queue.push(...children) } if(result.length && !needAll) { break; } } return needAll ? result : result[0] } // #endif class Query { context : ComponentPublicInstance | null = null selector : string = '' // components : ComponentPublicInstance[] = [] constructor(selector : string, context : ComponentPublicInstance | null) { this.selector = selector this.context = context } in(context : ComponentPublicInstance) : Query { return new Query(this.selector, context) } find() : ComponentPublicInstance | null { return findChildren(this.selector, this.context, false) } findAll() : ComponentPublicInstance[] | null { return findChildren(this.selector, this.context, true) } closest() : ComponentPublicInstance | null { return null } } export function selectComponent(selector: string) { return new Query(selector) }