123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149 |
- // @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)
- }
|