Welcome

Welcome is a Microsoft Edge Extension to automatically accept when people request to join your Google Meet meeting.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name                Welcome
// @name:zh-TW          歡迎蒞臨
// @name:zh-CN          歡迎蒞臨
// @namespace           veringsek
// @match               http://meet.google.com/*
// @match               https://meet.google.com/*
// @grant               none
// @version             0.0.6
// @author              veringsek
// @description         Welcome is a Microsoft Edge Extension to automatically accept when people request to join your Google Meet meeting.
// @description:zh-TW   歡迎蒞臨是一個微軟 Edge 瀏覽器的擴充功能,能自動允許使用者加入 Google Meet 會議。
// @description:zh-CN   歡迎蒞臨是一個微軟 Edge 瀏覽器的擴充功能,能自動允許使用者加入 Google Meet 會議。
// ==/UserScript==

function ScanningProcess(actions) {
    this.actions = actions;
    this.stage = 0;
    this.runner = null;
}
ScanningProcess.prototype.run = function () {
    if (this.stage >= this.actions.length) return false;
    let action = this.actions[this.stage];
    this.runner = setInterval(() => {
        if (action.func()) {
            clearInterval(this.runner);
            this.stage += 1;
            this.run();
        }
    }, action.duration);
    return true;
};

function toggleWelcome(welcome) {
    if (welcome === undefined) {
        globalThis.welcome = !globalThis.welcome;
    } else {
        globalThis.welcome = welcome;
    }
    let icnWelcome = document.getElementById('icnWelcome');
    let btnWelcome = document.getElementById('btnWelcome');
    let tipWelcome = document.getElementById('tipWelcome');
    if (globalThis.welcome) {
        console.log(`Welcome is on.`);
        document.getElementById('svgWelcomeOn').style.display = '';
        document.getElementById('svgWelcomeOff').style.display = 'none';
        btnWelcome.style.background = ``;
        tipWelcome.innerHTML = 'Everyone is welcomed to this meeting now.';
    } else {
        console.log(`Welcome is off.`);
        document.getElementById('svgWelcomeOff').style.display = '';
        document.getElementById('svgWelcomeOn').style.display = 'none';
        btnWelcome.style.background = `#ea4335`;
        tipWelcome.innerText = 'Permission is needed to join this meeting.';
    }
}

const DIV_BUTTONS = 'R5ccN';
const TARGET = 3;

globalThis.sp = new ScanningProcess([{
    func: function () {
        let divButtons;
        try {
            divButtons = document.getElementsByClassName(DIV_BUTTONS)[0];

            let divWelcome = divButtons.children[TARGET].cloneNode(true);
            let btnWelcome = divWelcome.getElementsByTagName('button')[0];
            btnWelcome.id = 'btnWelcome';
            btnWelcome.addEventListener('click', ev => toggleWelcome());
            btnWelcome.setAttribute('data-tooltip-id', 'tipWelcome');

            let icnGoogleMaterial = divWelcome.getElementsByTagName('i')[0];
            icnGoogleMaterial.style.display = 'none';

            let icnWelcome = document.createElement('span');
            icnWelcome.id = 'icnWelcome';

            let svgWelcomeOff = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
            svgWelcomeOff.id = 'svgWelcomeOff';
            svgWelcomeOff.style.display = 'none';
            svgWelcomeOff.setAttribute('viewBox', '0 0 576 512');
            let pathWelcomeOff = document.createElementNS('http://www.w3.org/2000/svg', 'path');
            pathWelcomeOff.setAttribute('d', `M560 448H480V50.75C480 22.75 458.5 0 432 0h-288C117.5 0 96 22.75 96 50.75V448H16C7.125 448 0 455.1 0 464v32C0 504.9 7.125 512 16 512h544c8.875 0 16-7.125 16-16v-32C576 455.1 568.9 448 560 448zM384 288c-17.62 0-32-14.38-32-32s14.38-32 32-32s32 14.38 32 32S401.6 288 384 288z`);
            svgWelcomeOff.appendChild(pathWelcomeOff);
            icnWelcome.appendChild(svgWelcomeOff);

            let svgWelcomeOn = document.createElementNS('http://www.w3.org/2000/svg', 'svg');
            svgWelcomeOn.id = 'svgWelcomeOn';
            svgWelcomeOn.style.display = 'none';
            svgWelcomeOn.setAttribute('viewBox', '0 0 576 512');
            let pathWelcomeOn = document.createElementNS('http://www.w3.org/2000/svg', 'path');
            pathWelcomeOn.setAttribute('d', `M560 448H512V113.5c0-27.25-21.5-49.5-48-49.5L352 64.01V128h96V512h112c8.875 0 16-7.125 16-15.1v-31.1C576 455.1 568.9 448 560 448zM280.3 1.007l-192 49.75C73.1 54.51 64 67.76 64 82.88V448H16c-8.875 0-16 7.125-16 15.1v31.1C0 504.9 7.125 512 16 512H320V33.13C320 11.63 300.5-4.243 280.3 1.007zM232 288c-13.25 0-24-14.37-24-31.1c0-17.62 10.75-31.1 24-31.1S256 238.4 256 256C256 273.6 245.3 288 232 288z`);
            svgWelcomeOn.appendChild(pathWelcomeOn);
            icnWelcome.appendChild(svgWelcomeOn);

            let tipWelcome = divWelcome.querySelector('*[role=tooltip]');
            tipWelcome.id = 'tipWelcome';

            icnGoogleMaterial.parentElement.insertBefore(icnWelcome, icnGoogleMaterial);

            divButtons.insertBefore(divWelcome, divButtons.children[TARGET]);

            toggleWelcome(false);
            return true;
        } catch (error) {
            console.log(error);
            return false;
        }
    },
    duration: 1000
}, {
    func: function () {
        if (!globalThis.welcome) return false;
        try {
            let btnAccept = document.querySelector('*[role=dialog]')?.getElementsByTagName('button')[1];
            if (btnAccept.getAttribute('data-mdc-dialog-action') === 'accept') {
                btnAccept.click();
            }
        } catch {
            return false;
        }
    },
    duration: 500
}]);
globalThis.sp.run();