|
1 | 1 | // ==UserScript==
|
2 | 2 | // @name YouTube JS Engine Tamer
|
3 | 3 | // @namespace UserScripts
|
4 |
| -// @version 0.18.5 |
| 4 | +// @version 0.18.6 |
5 | 5 | // @match https://www.youtube.com/*
|
6 | 6 | // @match https://www.youtube-nocookie.com/embed/*
|
7 | 7 | // @match https://studio.youtube.com/live_chat*
|
|
3579 | 3579 |
|
3580 | 3580 | const csb = (a, b) => { for (const c in a) if (a.hasOwnProperty(c) && b[c]) return c; return null }
|
3581 | 3581 | const createStampDomArrayFnE1_ = async function (a, b, c, d, shouldTriggerRendererStamperFinished, h) {
|
| 3582 | + |
| 3583 | + const t892 = this.__$$fs892$$__ = `${Math.floor(Math.random() * 314159265359 + 314159265359).toString(36)}`; |
3582 | 3584 | // c - mapping
|
3583 | 3585 | // d - reuseComponents
|
3584 | 3586 | // e - events (shouldTriggerRendererStamperFinished)
|
|
3592 | 3594 | const c_ = c;
|
3593 | 3595 | const a_ = a;
|
3594 | 3596 |
|
| 3597 | + const {data, __data} = this; // for data integrity check |
| 3598 | + |
3595 | 3599 | const doDeferRenderStamperBinding_ = async (cp) => {
|
3596 | 3600 | const i = cp[stampIdxSb];
|
3597 | 3601 | const u = a_[i];
|
|
3607 | 3611 | const hasElement = !!domShell.firstElementChild;
|
3608 | 3612 | const noscript = document.createElement('noscript');
|
3609 | 3613 | // document.body.appendChild(noscript);
|
| 3614 | + |
| 3615 | + let doc = document; |
| 3616 | + // ---------- doc ---------- |
| 3617 | + // let docHTML = '<html></html>'; |
| 3618 | + // try { |
| 3619 | + // docHTML = trustedTypes.defaultPolicy.createHTML(docHTML) || docHTML; |
| 3620 | + // } catch (e) { } |
| 3621 | + // try { |
| 3622 | + // const parser = new DOMParser(); |
| 3623 | + // doc = parser.parseFromString(docHTML, "text/html"); |
| 3624 | + // } catch (e) { } |
| 3625 | + // ---------- doc ---------- |
| 3626 | + |
| 3627 | + // document.documentElement.appendChild.call(doc.documentElement, noscript); |
| 3628 | + // nativeRemoveE.call(noscript); |
| 3629 | + // doc = null; |
| 3630 | + parser = null; |
| 3631 | + // console.log(doc,38); |
| 3632 | + |
3610 | 3633 | const nofn = () => true;
|
3611 | 3634 | const n = a_.length;
|
3612 | 3635 | const fns = new Array(n);
|
3613 | 3636 | let cxt = 0;
|
3614 | 3637 |
|
3615 |
| - let mutex = Promise.resolve(0); |
3616 | 3638 | let qxd = hasElement ? new WeakSet() : null;
|
3617 | 3639 | const nextTickFnE1 = () => {
|
3618 | 3640 | a_.some((u, i) => {
|
|
3626 | 3648 | const cp = this.createComponent_(c[x], u[x], d);
|
3627 | 3649 | cp[stampIdxSb] = i;
|
3628 | 3650 | doDeferRenderStamperBinding_(cp);
|
3629 |
| - mutex = mutex.then(() => { |
| 3651 | + // mutex = mutex.then(() => { |
3630 | 3652 | noscript.appendChild(cp);
|
3631 |
| - }); |
| 3653 | + // }); |
3632 | 3654 |
|
3633 | 3655 | // Promise.resolve(cp).then(doDeferRenderStamperBinding_);
|
3634 | 3656 | let q = cp;
|
|
3679 | 3701 |
|
3680 | 3702 | cp[stampIdxSb] = i;
|
3681 | 3703 | doDeferRenderStamperBinding_(cp);
|
3682 |
| - mutex = mutex.then(() => { |
| 3704 | + // mutex = mutex.then(() => { |
3683 | 3705 | noscript.appendChild(cp); // ui formation
|
3684 |
| - }); |
| 3706 | + // }); |
3685 | 3707 |
|
3686 | 3708 | // Promise.resolve(cp).then(doDeferRenderStamperBinding_);
|
3687 | 3709 | let q = cp;
|
|
3730 | 3752 | fns.length = 0;
|
3731 | 3753 | qxd = null;
|
3732 | 3754 |
|
| 3755 | + |
| 3756 | + |
| 3757 | + // document.documentElement.appendChild.call(doc.documentElement, noscript); |
| 3758 | + // nativeRemoveE.call(noscript); |
| 3759 | + |
3733 | 3760 | // nativeRemoveE.call(noscript);
|
3734 | 3761 | noscript.remove(); // trigger isAttached change
|
3735 | 3762 | const hostElement = this.hostElement;
|
|
3748 | 3775 |
|
3749 | 3776 |
|
3750 | 3777 | /** @type {DocumentFragment} */
|
3751 |
| - const gFragment = document.createDocumentFragment(); |
| 3778 | + // const gFragment = document.createDocumentFragment(); |
| 3779 | + const gFragment = doc.createDocumentFragment(); |
| 3780 | + |
| 3781 | + const fnE = () => { |
| 3782 | + const evt = new CustomEvent("yt-rendererstamper-finished", { |
| 3783 | + bubbles: !0, |
| 3784 | + cancelable: !1, |
| 3785 | + composed: !0, |
| 3786 | + detail: { |
| 3787 | + container |
| 3788 | + } |
| 3789 | + }); |
| 3790 | + hostElement.dispatchEvent(evt); |
| 3791 | + }; |
3752 | 3792 |
|
3753 |
| - mutex = mutex.then(async() => { |
| 3793 | + let f1, f2; |
| 3794 | + f1 = async() => { |
3754 | 3795 |
|
3755 | 3796 | // await new Promise(r=>setTimeout(r, 1000));
|
3756 | 3797 |
|
| 3798 | + if (t892 !== this.__$$fs892$$__ || this.data !== data || this.__data !== __data) return; |
3757 | 3799 |
|
3758 | 3800 | if (!hasElement && !!domShell.firstElementChild) return;
|
3759 | 3801 | if (hostElement.isConnected === false || this.isAttached === false || !hostElement.contains(container) || container.__domApi !== domShell) {
|
|
3775 | 3817 | // const t2 = performance.now();
|
3776 | 3818 |
|
3777 | 3819 | // console.log('createStampDomArrayFn_{T2}', t2-t1);
|
3778 |
| - }).then(async () => { |
| 3820 | + |
| 3821 | + nextBrowserTick_(f2); |
| 3822 | + }; |
| 3823 | + |
| 3824 | + f2 = async () => { |
| 3825 | + |
| 3826 | + if (t892 !== this.__$$fs892$$__ || this.data !== data || this.__data !== __data) return; |
3779 | 3827 |
|
3780 | 3828 | if (!hasElement && !!domShell.firstElementChild) return;
|
3781 | 3829 | if (hostElement.isConnected === false || this.isAttached === false || !hostElement.contains(container) || container.__domApi !== domShell) {
|
|
3820 | 3868 | // console.log('createStampDomArrayFn_{T3}', t2-t1); // time consuming
|
3821 | 3869 |
|
3822 | 3870 | if (shouldTriggerRendererStamperFinished) {
|
3823 |
| - nextBrowserTick_(() => { |
3824 |
| - const evt = new CustomEvent("yt-rendererstamper-finished", { |
3825 |
| - bubbles: !0, |
3826 |
| - cancelable: !1, |
3827 |
| - composed: !0, |
3828 |
| - detail: { |
3829 |
| - container |
3830 |
| - } |
3831 |
| - }); |
3832 |
| - hostElement.dispatchEvent(evt); |
3833 |
| - })(); |
| 3871 | + nextBrowserTick_(fnE); |
3834 | 3872 | }
|
3835 | 3873 |
|
3836 | 3874 | // this.flushRenderStamperComponentBindings_();
|
3837 | 3875 |
|
3838 | 3876 |
|
3839 | 3877 |
|
3840 | 3878 |
|
3841 |
| - }); |
| 3879 | + }; |
| 3880 | + |
| 3881 | + nextBrowserTick_(f1); |
| 3882 | + |
3842 | 3883 | };
|
3843 | 3884 |
|
3844 | 3885 |
|
3845 | 3886 | const stampIdxSb = Symbol();
|
3846 |
| - const byPassIs55 = new Set(['ytd-rich-grid-renderer', 'ytd-rich-item-renderer', 'ytd-rich-grid-media', 'ytd-rich-section-renderer', 'ytd-rich-shelf-renderer']); // some issues for the view model |
| 3887 | + // const byPassIs55 = new Set(['ytd-rich-grid-renderer', 'ytd-rich-item-renderer', 'ytd-rich-grid-media', 'ytd-rich-section-renderer', 'ytd-rich-shelf-renderer']); // some issues for the view model |
| 3888 | + const byPassIs55 = new Set(['ytd-rich-grid-renderer', 'ytd-rich-shelf-renderer']); |
3847 | 3889 | const createStampDomArrayFn_ = (fn) => {
|
3848 | 3890 | if (val_kevlar_should_maintain_stable_list === null) {
|
3849 | 3891 | const config_ = ((window.yt || 0).config_ || 0);
|
|
0 commit comments