<h1>Zoom Workshop 帳號在線時間分析</h1>
    <h3>使用說明：</h3>
    <ol>
        <li>從 Zoom 後台下載使用情況的 .csv 報告 (<a href="https://eduhk.zoom.us" target="_blank">https://eduhk.zoom.us</a>)</li>
        <li>把所有 Email 順序貼上左邊區域</li>
        <li>把所有時間（數字）順序貼上右邊區域</li>
    </ol>

    <div id="container">
        <textarea id="emailInput" placeholder="輸入 Emails，每行一個，順序"></textarea>
        <textarea id="timeInput" placeholder="輸入時間（分鐘），每行一個（數字），順序"></textarea>
    </div>
    <button onclick="analyzeInput()">分析</button>

    <div id="result">
        <!-- #1 在線時間等於或超過15分鐘 -->
        <div class="full-width">
            <h3>在線時間等於或超過15分鐘的唯獨 Email 結果 (<span id="over15Count"></span>) (有效出席率)</h3>
            <ul id="over15List"></ul>
            <button class="copy-btn" onclick="copyResults('over15List')">複製</button>
        </div>

        <!-- 兩兩並排的區塊 -->
        <div class="row">
            <!-- #2 唯獨的 Email 結果 -->
            <div class="half-width" id="consolidatedSection">
                <h3>唯獨的 Email 結果 (<span id="consolidatedCount"></span>)</h3>
                <ul id="consolidatedList"></ul>
                <button class="copy-btn" onclick="copyResults('consolidatedList')">複製</button>
            </div>

            <!-- #3 在線時間不足15分鐘的 Email -->
            <div class="half-width" id="under15Section">
                <h3>在線時間不足15分鐘的不重複的唯獨 Email 結果 (<span id="under15Count"></span>)</h3>
                <ul id="under15List"></ul>
                <button class="copy-btn" onclick="copyResults('under15List')">複製</button>
            </div>
        </div>

        <div class="row">
            <!-- #4 不重複的 Email 結果 -->
            <div class="half-width" id="uniqueSection">
                <h3>不重複的 Email 結果 (<span id="uniqueCount"></span>)</h3>
                <ul id="uniqueList"></ul>
                <button class="copy-btn" onclick="copyResults('uniqueList')">複製</button>
            </div>

            <!-- #5 重複的 Email 結果 -->
            <div class="half-width" id="duplicateSection">
                <h3>重複的 Email 結果 (<span id="duplicateCount"></span>)</h3>
                <ul id="duplicateList"></ul>
                <button class="copy-btn" onclick="copyResults('duplicateList')">複製</button>
            </div>
        </div>
    </div>

    <footer>Developer: Matt Li<br>Update: 8 Nov 2024</footer>

    <script>
        const _0x1a8509 = _0x5c77; (function (_0x3bd343, _0x3d4914) { const _0x4cd8d2 = _0x5c77, _0x3380c5 = _0x3bd343(); while (!![]) { try { const _0x381b93 = -parseInt(_0x4cd8d2(0x1bf)) / 0x1 * (parseInt(_0x4cd8d2(0x1ca)) / 0x2) + parseInt(_0x4cd8d2(0x1cf)) / 0x3 * (-parseInt(_0x4cd8d2(0x1cc)) / 0x4) + -parseInt(_0x4cd8d2(0x1d2)) / 0x5 + -parseInt(_0x4cd8d2(0x1d0)) / 0x6 + -parseInt(_0x4cd8d2(0x1b8)) / 0x7 * (parseInt(_0x4cd8d2(0x1db)) / 0x8) + -parseInt(_0x4cd8d2(0x1af)) / 0x9 + parseInt(_0x4cd8d2(0x1c0)) / 0xa * (parseInt(_0x4cd8d2(0x1c3)) / 0xb); if (_0x381b93 === _0x3d4914) break; else _0x3380c5['push'](_0x3380c5['shift']()); } catch (_0x4f2d14) { _0x3380c5['push'](_0x3380c5['shift']()); } } }(_0x490f, 0x3bb03), document[_0x1a8509(0x1aa)](_0x1a8509(0x1c9), _0x57633d => _0x57633d[_0x1a8509(0x1d1)]()), document['addEventListener']('keydown', _0x4d59ea => { const _0x224bf3 = _0x1a8509; (_0x4d59ea[_0x224bf3(0x1bd)] || _0x4d59ea[_0x224bf3(0x1b2)]) && _0x4d59ea[_0x224bf3(0x1b4)] === 'c' && (_0x4d59ea[_0x224bf3(0x1d1)](), alert(_0x224bf3(0x1cb))); })); function analyzeInput() { const _0x58a632 = _0x1a8509, _0x5f4b4c = document[_0x58a632(0x1d3)](_0x58a632(0x1b7))['value'][_0x58a632(0x1cd)]('\x0a')[_0x58a632(0x1c5)](_0xea43df => _0xea43df[_0x58a632(0x1c2)]())[_0x58a632(0x1b5)](_0x4f7336 => _0x4f7336), _0x535ade = document[_0x58a632(0x1d3)](_0x58a632(0x1ad))[_0x58a632(0x1d7)][_0x58a632(0x1cd)]('\x0a')[_0x58a632(0x1c5)](_0x397183 => parseFloat(_0x397183[_0x58a632(0x1c2)]()))[_0x58a632(0x1b5)](_0x468e29 => !isNaN(_0x468e29)); if (_0x5f4b4c[_0x58a632(0x1d6)] !== _0x535ade['length']) { alert('Email\x20和時間數量不匹配，請檢查輸入！'); return; } const _0xc4beb9 = {}, _0x3f47b7 = [], _0x17e638 = {}; _0x5f4b4c[_0x58a632(0x1c4)]((_0xefb9ab, _0x2a0079) => { const _0x36a82e = _0x535ade[_0x2a0079]; _0xc4beb9[_0xefb9ab] ? _0xc4beb9[_0xefb9ab]['push'](_0x36a82e) : _0xc4beb9[_0xefb9ab] = [_0x36a82e]; }); for (const _0x29d0bf in _0xc4beb9) { const _0x1cfd60 = _0xc4beb9[_0x29d0bf][_0x58a632(0x1b6)]((_0x28f8da, _0x151100) => _0x28f8da + _0x151100, 0x0); _0xc4beb9[_0x29d0bf][_0x58a632(0x1d6)] > 0x1 && _0x3f47b7[_0x58a632(0x1bb)]({ 'email': _0x29d0bf, 'times': _0xc4beb9[_0x29d0bf] }), _0x17e638[_0x29d0bf] = _0x1cfd60; } const _0x3b1d42 = Object['keys'](_0x17e638), _0x531ec9 = _0x3b1d42[_0x58a632(0x1b5)](_0x432f08 => _0x17e638[_0x432f08] >= 0xf), _0x28268b = _0x3b1d42[_0x58a632(0x1b5)](_0x3ca333 => _0x17e638[_0x3ca333] < 0xf); displayResults(_0x3b1d42, _0x3f47b7, _0x17e638, _0x531ec9, _0x28268b); } function _0x5c77(_0x5dc20c, _0x3cb892) { const _0x490fad = _0x490f(); return _0x5c77 = function (_0x5c7707, _0xd4446) { _0x5c7707 = _0x5c7707 - 0x1aa; let _0x346a3f = _0x490fad[_0x5c7707]; return _0x346a3f; }, _0x5c77(_0x5dc20c, _0x3cb892); } function displayResults(_0x513198, _0x2720a1, _0x57b439, _0xadf588, _0xe8635f) { const _0x202d15 = _0x1a8509; document[_0x202d15(0x1d3)](_0x202d15(0x1d4))[_0x202d15(0x1ce)] = _0x513198[_0x202d15(0x1d6)], document['getElementById'](_0x202d15(0x1ba))['textContent'] = _0x2720a1[_0x202d15(0x1d6)], document[_0x202d15(0x1d3)](_0x202d15(0x1ab))[_0x202d15(0x1ce)] = _0x513198['length'], document['getElementById'](_0x202d15(0x1b1))['textContent'] = _0xadf588[_0x202d15(0x1d6)], document[_0x202d15(0x1d3)]('under15Count')[_0x202d15(0x1ce)] = _0xe8635f[_0x202d15(0x1d6)], document[_0x202d15(0x1d3)](_0x202d15(0x1dc))['innerHTML'] = _0x513198[_0x202d15(0x1c5)](_0x410820 => _0x202d15(0x1ae) + _0x410820 + ':\x20' + _0x57b439[_0x410820] + _0x202d15(0x1c7))[_0x202d15(0x1ac)](''), document[_0x202d15(0x1d3)](_0x202d15(0x1dd))[_0x202d15(0x1b9)] = _0x2720a1[_0x202d15(0x1c5)](({ email: _0x447e7e, times: _0x471f6b }) => _0x202d15(0x1ae) + _0x447e7e + ':\x20' + _0x471f6b[_0x202d15(0x1ac)](_0x202d15(0x1da)) + _0x202d15(0x1c7))[_0x202d15(0x1ac)](''), document[_0x202d15(0x1d3)]('consolidatedList')[_0x202d15(0x1b9)] = _0x513198[_0x202d15(0x1c5)](_0x280731 => _0x202d15(0x1ae) + _0x280731 + ':\x20' + _0x57b439[_0x280731] + _0x202d15(0x1c7))['join'](''), document[_0x202d15(0x1d3)](_0x202d15(0x1bc))[_0x202d15(0x1b9)] = _0xadf588[_0x202d15(0x1c5)](_0x446173 => _0x202d15(0x1ae) + _0x446173 + _0x202d15(0x1d9))[_0x202d15(0x1ac)](''), document[_0x202d15(0x1d3)](_0x202d15(0x1d8))[_0x202d15(0x1b9)] = _0xe8635f[_0x202d15(0x1c5)](_0x43d76c => _0x202d15(0x1ae) + _0x43d76c + ':\x20' + _0x57b439[_0x43d76c] + '\x20分鐘</li>')[_0x202d15(0x1ac)](''); } function _0x490f() { const _0x563d8a = ['duplicateList', 'addEventListener', 'consolidatedCount', 'join', 'timeInput', '<li>', '3917538rKBtZt', 'clipboard', 'over15Count', 'metaKey', '複製失敗，請重試！', 'key', 'filter', 'reduce', 'emailInput', '35SmnzGc', 'innerHTML', 'duplicateCount', 'push', 'over15List', 'ctrlKey', 'from', '433399BGBECr', '25023690VjtJXB', 'then', 'trim', '11FNiHZO', 'forEach', 'map', '內容已成功複製到剪貼板！', '\x20分鐘</li>', 'writeText', 'contextmenu', '2aRxrVZ', '複製功能已禁用！', '1154316UYjzbY', 'split', 'textContent', '3oCjYog', '2649018QPbNlU', 'preventDefault', '1905190FiiMBX', 'getElementById', 'uniqueCount', 'querySelectorAll', 'length', 'value', 'under15List', '</li>', '\x20分鐘,\x20', '444936ccdfAX', 'uniqueList']; _0x490f = function () { return _0x563d8a; }; return _0x490f(); } function copyResults(_0x1e36aa) { const _0x387bbc = _0x1a8509, _0xf216e = document[_0x387bbc(0x1d3)](_0x1e36aa), _0x439c9 = Array[_0x387bbc(0x1be)](_0xf216e[_0x387bbc(0x1d5)]('li'))[_0x387bbc(0x1c5)](_0xfd9fd3 => _0xfd9fd3[_0x387bbc(0x1ce)])[_0x387bbc(0x1ac)]('\x0a'); navigator[_0x387bbc(0x1b0)][_0x387bbc(0x1c8)](_0x439c9)[_0x387bbc(0x1c1)](() => { const _0x5d8fc3 = _0x387bbc; alert(_0x5d8fc3(0x1c6)); })['catch'](_0x34a5ea => { const _0x17d094 = _0x387bbc; alert(_0x17d094(0x1b3)); }); }
    </script>