|
1 | 1 |
|
2 | 2 | /** |
3 | | - * A Web Frontend Library |
4 | 3 | * The OpenScript Namespace |
5 | | - * @author Levi Kamara Zwannah |
6 | | - * @link [Github](https://github.com/levizwannah) |
7 | | - * @link [Documentation](https://levizwannah.github.io/OpenScript.Js) |
8 | 4 | */ |
9 | 5 | var OpenScript = { |
10 | 6 |
|
@@ -174,7 +170,7 @@ var OpenScript = { |
174 | 170 | } |
175 | 171 |
|
176 | 172 | this.qs = new URLSearchParams(url.search); |
177 | | - |
| 173 | + |
178 | 174 | map.get('->')[1](); |
179 | 175 |
|
180 | 176 | this.reset.value = false; |
@@ -500,79 +496,7 @@ var OpenScript = { |
500 | 496 | this.emitter.on(this.EVENTS.rerendered, (th) => th.rerendered = true); |
501 | 497 | this.emitter.on(this.EVENTS.bound, (th) => th.bound = true); |
502 | 498 | this.emitter.on(this.EVENTS.mounted, (th) => th.mounted = true); |
503 | | - this.emitter.on(this.EVENTS.visible, (th) => th.visible = true); |
504 | | - |
505 | | - let obj = this; |
506 | | - let seen = new Set(); |
507 | | - |
508 | | - do { |
509 | | - if(!(obj instanceof OpenScript.Component)) break; |
510 | | - |
511 | | - for(let method of Object.getOwnPropertyNames(obj)){ |
512 | | - if(seen.has(method)) continue; |
513 | | - |
514 | | - if(typeof this[method] !== "function") continue; |
515 | | - if(method.length < 3) continue; |
516 | | - |
517 | | - if(method[0] !== '$' && method[1] !== "_") continue; |
518 | | - |
519 | | - let meta = method.substring(1).split(/\$/g); |
520 | | - |
521 | | - let events = meta[0].split(/_/g); |
522 | | - events.shift(); |
523 | | - let cmpName = this.name; |
524 | | - |
525 | | - let subjects = meta.slice(1); |
526 | | - |
527 | | - if(!subjects?.length) subjects = [this.name, 'on']; |
528 | | - |
529 | | - let methods = {on: true, onAll: true}; |
530 | | - |
531 | | - let stack = []; |
532 | | - |
533 | | - for(let i = 0; i < subjects.length; i++){ |
534 | | - |
535 | | - let current = subjects[i]; |
536 | | - stack.push(current); |
537 | | - |
538 | | - while(stack.length){ |
539 | | - i++; |
540 | | - current = subjects[i] ?? null; |
541 | | - |
542 | | - if(current && methods[current]){ |
543 | | - stack.push(current); |
544 | | - } |
545 | | - else { |
546 | | - stack.push('on'); |
547 | | - i--; |
548 | | - } |
549 | | - |
550 | | - let m = stack.pop(); |
551 | | - let cmp = stack.pop(); |
552 | | - |
553 | | - for(let j = 0; j < events.length; j++) { |
554 | | - let ev = events[j]; |
555 | | - |
556 | | - if(!ev.length) continue; |
557 | | - |
558 | | - h[m](cmp, ev, (component, event, ...args) => { |
559 | | - |
560 | | - try{ |
561 | | - h.getComponent(cmpName)[method](h.getComponent(cmpName), component, event, ...args); |
562 | | - } |
563 | | - catch(e){ |
564 | | - console.error(e); |
565 | | - } |
566 | | - |
567 | | - }); |
568 | | - } |
569 | | - } |
570 | | - } |
571 | | - |
572 | | - seen.add(method); |
573 | | - } |
574 | | - } |
575 | | - while (obj = Object.getPrototypeOf(obj)); |
| 499 | + this.emitter.on(this.EVENTS.visible, (th) => th.visible = true); |
576 | 500 | } |
577 | 501 |
|
578 | 502 | /** |
@@ -665,11 +589,84 @@ var OpenScript = { |
665 | 589 | * @emits pre-mount |
666 | 590 | */ |
667 | 591 | async mount() { |
| 592 | + h.component(this.name, this); |
| 593 | + |
668 | 594 | this.claimListeners(); |
669 | 595 | this.emit(this.EVENTS.premount); |
670 | | - h.component(this.name, this); |
671 | 596 | await this.bind(); |
672 | 597 | this.emit(this.EVENTS.mounted); |
| 598 | + |
| 599 | + let obj = this; |
| 600 | + let seen = new Set(); |
| 601 | + |
| 602 | + do { |
| 603 | + if(!(obj instanceof OpenScript.Component)) break; |
| 604 | + |
| 605 | + for(let method of Object.getOwnPropertyNames(obj)){ |
| 606 | + if(seen.has(method)) continue; |
| 607 | + |
| 608 | + if(typeof this[method] !== "function") continue; |
| 609 | + if(method.length < 3) continue; |
| 610 | + |
| 611 | + if(method[0] !== '$' && method[1] !== "_") continue; |
| 612 | + |
| 613 | + let meta = method.substring(1).split(/\$/g); |
| 614 | + |
| 615 | + let events = meta[0].split(/_/g); |
| 616 | + events.shift(); |
| 617 | + let cmpName = this.name; |
| 618 | + |
| 619 | + let subjects = meta.slice(1); |
| 620 | + |
| 621 | + if(!subjects?.length) subjects = [this.name, 'on']; |
| 622 | + |
| 623 | + let methods = {on: true, onAll: true}; |
| 624 | + |
| 625 | + let stack = []; |
| 626 | + |
| 627 | + for(let i = 0; i < subjects.length; i++){ |
| 628 | + |
| 629 | + let current = subjects[i]; |
| 630 | + stack.push(current); |
| 631 | + |
| 632 | + while(stack.length){ |
| 633 | + i++; |
| 634 | + current = subjects[i] ?? null; |
| 635 | + |
| 636 | + if(current && methods[current]){ |
| 637 | + stack.push(current); |
| 638 | + } |
| 639 | + else { |
| 640 | + stack.push('on'); |
| 641 | + i--; |
| 642 | + } |
| 643 | + |
| 644 | + let m = stack.pop(); |
| 645 | + let cmp = stack.pop(); |
| 646 | + |
| 647 | + for(let j = 0; j < events.length; j++) { |
| 648 | + let ev = events[j]; |
| 649 | + |
| 650 | + if(!ev.length) continue; |
| 651 | + |
| 652 | + h[m](cmp, ev, (component, event, ...args) => { |
| 653 | + |
| 654 | + try{ |
| 655 | + h.getComponent(cmpName)[method](h.getComponent(cmpName), component, event, ...args); |
| 656 | + } |
| 657 | + catch(e){ |
| 658 | + console.error(e); |
| 659 | + } |
| 660 | + |
| 661 | + }); |
| 662 | + } |
| 663 | + } |
| 664 | + } |
| 665 | + |
| 666 | + seen.add(method); |
| 667 | + } |
| 668 | + } |
| 669 | + while (obj = Object.getPrototypeOf(obj)); |
673 | 670 | } |
674 | 671 |
|
675 | 672 | /** |
@@ -805,7 +802,7 @@ var OpenScript = { |
805 | 802 |
|
806 | 803 | // check if we have previously emitted this event |
807 | 804 | listeners.forEach(a => { |
808 | | - if(this.emitter.emitted[event]) a(); |
| 805 | + if(this.emitter.emitted[event]) a(this, event); |
809 | 806 |
|
810 | 807 | this.emitter.on(event, a); |
811 | 808 | }); |
@@ -858,7 +855,7 @@ var OpenScript = { |
858 | 855 | * @returns {DocumentFragment|HTMLElement|String|Array<DocumentFragment|HTMLElement|String>} |
859 | 856 | */ |
860 | 857 | render(...args) { |
861 | | - return h.toElement("<ojs></ojs>"); |
| 858 | + return h.ojs(...args); |
862 | 859 | } |
863 | 860 |
|
864 | 861 | /** |
|
0 commit comments