PageSourceSearch

https://hptoto.win/js/custom/quick_menus.min.js?v=7k5yjalts6dycvsp3vqc

js hptoto.win collected 2026-10-09 22:15:24 UTC 10,588 bytes, 1 lines download raw bytes

1async function getData(n){const e=document.querySelector('meta[name="csrf-token"]').getAttribute("content");return await fetch(n,{method:"GET",headers:{"X-CSRF-TOKEN":e,"Content-Type":"application/json"}})}!function(){const n=document.createElement("style");if(n.innerText="\n    :root {\n        --pm-primary-color: #6366f1;\n        --pm-primary-hover: #4f46e5;\n        --pm-bg-glass: rgba(255, 255, 255, 0.8);\n        --pm-sidebar-bg: rgba(255, 255, 255, 0.95);\n        --pm-text-color: #1f2937;\n        --pm-text-muted: #6b7280;\n        --pm-shadow-lg: 0 10px 15px -3px rgba(0, 0, 0, 0.1), 0 4px 6px -2px rgba(0, 0, 0, 0.05);\n        --pm-shadow-xl: 0 20px 25px -5px rgba(0, 0, 0, 0.1), 0 10px 10px -5px rgba(0, 0, 0, 0.04);\n        --pm-transition-speed: 0.3s;\n    }\n\n    /* Menu Button Styles */\n    .pm-menu-btn-container {\n        position: fixed;\n        bottom: 30px;\n        left: 30px;\n        z-index: 1000;\n        font-family: 'Inter', sans-serif;\n    }\n\n    .pm-menu-btn {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        padding: 12px 24px;\n        background: white;\n        border: none;\n        border-radius: 50px !important;\n        box-shadow: var(--pm-shadow-lg);\n        cursor: pointer !important;\n        transition: all var(--pm-transition-speed) ease;\n        color: var(--pm-text-color);\n        font-weight: 600;\n        font-size: 16px;\n        backdrop-filter: blur(10px);\n        -webkit-backdrop-filter: blur(10px);\n        overflow: hidden;\n        position: relative;\n    }\n\n    .pm-menu-btn::before {\n        content: '';\n        position: absolute;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100%;\n        opacity: 0;\n        transition: opacity var(--pm-transition-speed);\n        z-index: -1;\n    }\n\n    .pm-menu-btn:hover {\n        transform: translateY(-2px);\n        box-shadow: var(--pm-shadow-xl);\n    }\n\n    .pm-menu-btn:hover::before {\n        opacity: 1;\n    }\n\n    .pm-menu-btn i {\n        font-size: 24px;\n        transition: transform var(--pm-transition-speed);\n    }\n\n    .pm-menu-btn:hover i {\n        transform: rotate(180deg);\n    }\n\n    /* Sidebar Styles */\n    .pm-sidebar {\n        position: fixed;\n        bottom: 90px;\n        left: 30px;\n        width: 280px;\n        height: auto;\n        max-height: calc(100vh - 120px);\n        background: var(--pm-sidebar-bg);\n        box-shadow: var(--pm-shadow-xl);\n        z-index: 999;\n        /* Start hidden: scaled down and transparent */\n        transform: scale(0.9) translateY(20px);\n        opacity: 0;\n        visibility: hidden;\n        transition: all var(--pm-transition-speed) cubic-bezier(0.16, 1, 0.3, 1);\n        display: flex;\n        flex-direction: column;\n        backdrop-filter: blur(20px);\n        -webkit-backdrop-filter: blur(20px);\n        border-radius: 20px;\n        border: 1px solid rgba(255, 255, 255, 0.5);\n        font-family: 'Inter', sans-serif;\n    }\n\n    .pm-sidebar.active {\n        transform: scale(1) translateY(0);\n        opacity: 1;\n        visibility: visible;\n    }\n\n    .pm-sidebar-header {\n        padding: 20px 24px;\n        display: flex;\n        align-items: center;\n        justify-content: space-between;\n        border-bottom: 1px solid rgba(0, 0, 0, 0.05);\n    }\n\n    .pm-brand {\n        font-size: 15px;\n        font-weight: 700;\n        color: var(--pm-primary-color);\n        display: flex;\n        flex-direction: column;\n    }\n\n    .pm-menu-list {\n        list-style: none;\n        padding: 12px;\n        margin: 0;\n        flex-grow: 0;\n        overflow-y: auto;\n    }\n\n    .pm-menu-item {\n        margin-bottom: 4px;\n        position: relative !important;\n        top: auto !important;\n        opacity: 1 !important;\n    }\n\n    .pm-menu-link {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        padding: 12px 16px;\n        text-decoration: none;\n        color: var(--pm-text-color) !important;\n        border-radius: 12px;\n        transition: all 0.2s;\n        font-weight: 500;\n        font-size: 14px;\n    }\n\n    .pm-menu-link:hover {\n        background: rgba(99, 102, 241, 0.08);\n        color: var(--pm-primary-color);\n    }\n\n    .pm-menu-link img {\n        width: 32px;\n    }\n\n    .pm-menu-link.active {\n        background: var(--pm-primary-color);\n        color: white;\n        box-shadow: 0 4px 12px rgba(99, 102, 241, 0.3);\n    }\n\n    .pm-sidebar-footer {\n        padding: 12px;\n        border-top: 1px solid rgba(0, 0, 0, 0.05);\n        display: flex;\n        flex-direction: column;\n        gap: 10px;\n    }\n\n    .pm-user-profile {\n        display: flex;\n        align-items: center;\n        gap: 12px;\n        padding: 12px;\n        background: rgba(0, 0, 0, 0.02);\n        border-radius: 12px;\n    }\n\n    .pm-avatar {\n        width: 36px;\n        height: 36px;\n        border-radius: 50%;\n        background: linear-gradient(135deg, #FF6B6B, #4ECDC4);\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        color: white;\n        font-weight: 600;\n        font-size: 14px;\n    }\n\n    .pm-user-info h4 {\n        margin: 0;\n        font-size: 14px;\n        color: var(--pm-text-color);\n    }\n\n    .pm-user-info p {\n        margin: 2px 0 0;\n        font-size: 11px;\n        color: var(--pm-text-muted);\n    }\n\n    .pm-close-menu-btn {\n        width: 100%;\n        padding: 12px;\n        background-color: #f3f4f6;\n        border: none;\n        border-radius: 12px;\n        color: var(--pm-text-muted);\n        font-weight: 600;\n        cursor: pointer;\n        transition: all 0.2s;\n        display: flex;\n        align-items: center;\n        justify-content: center;\n        gap: 8px;\n        font-family: 'Inter', sans-serif;\n    }\n\n    .pm-close-menu-btn:hover {\n        background-color: #e5e7eb;\n        color: var(--pm-text-color);\n    }\n\n    /* Overlay/Backdrop */\n    .pm-backdrop {\n        position: fixed;\n        top: 0;\n        left: 0;\n        width: 100%;\n        height: 100vh;\n        background: rgba(0, 0, 0, 0.2);\n        backdrop-filter: blur(2px);\n        z-index: 998;\n        opacity: 0;\n        pointer-events: none;\n        transition: opacity var(--pm-transition-speed);\n    }\n\n    .pm-backdrop.active {\n        opacity: 1;\n        pointer-events: auto;\n    }\n\n    .container-item-label .label-item {\n        margin: 0;\n    }\n\n    #pmCloseMenuBtn {\n        border-radius: 20px;\n        width: 60%;\n        font-size: smaller;\n    }\n    \n    .pm-sidebar-footer {\n        align-items: center;\n    }\n    \n    i.ph.ph-x {\n        font-weight: bolder;\n        font-size: large;\n    }\n    \n    .pm-menu-item {\n        border-radius: 30px;\n    }\n\n    @media (max-width: 480px) {\n        .pm-sidebar {\n            width: calc(100% - 40px);\n            left: 20px;\n            bottom: 150px;\n        }\n\n        .pm-menu-btn-container {\n            bottom: 80px;\n            left: 20px;\n        }\n    }\n    ",document.head.appendChild(n),!document.getElementById("pm-fonts")){const n=document.createElement("link");n.id="pm-fonts",n.href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap",n.rel="stylesheet",document.head.appendChild(n)}if(!document.querySelector('script[src*="phosphor-icons"]')){const n=document.createElement("script");n.src="https://unpkg.com/@phosphor-icons/web",document.head.appendChild(n)}const e=document.createElement("div");e.innerHTML='\n    \x3c!-- Toggle Button --\x3e\n    <div class="pm-menu
1-btn-container">\n        <button class="pm-menu-btn" id="pmMenuToggle">\n            <i class="ph ph-list"></i>\n            <span>Menu</span>\n        </button>\n    </div>\n\n    \x3c!-- Sidebar --\x3e\n    <div class="pm-backdrop" id="pmBackdrop"></div>\n    <aside class="pm-sidebar" id="pmSidebar">\n        <div class="pm-sidebar-header">\n            <div class="pm-brand">\n                <p>Menu Cepat</p>\n                <small id=\'header-label\'>Akses Menu Cepat</small>\n            </div>\n        </div>\n\n        <ul class="pm-menu-list" id="pmMenuList">\n            \x3c!-- Items will be injected via JS --\x3e\n            <li style="padding: 20px; text-align: center; color: #9ca3af;">Loading...</li>\n        </ul>\n\n        <div class="pm-sidebar-footer">\n            <button class="pm-close-menu-btn" id="pmCloseMenuBtn">\n                <i class="ph ph-x"></i>\n                Close Menu\n            </button>\n        </div>\n    </aside>\n    ',document.body.appendChild(e);const t=document.getElementById("pmMenuToggle"),i=document.getElementById("pmSidebar"),o=document.getElementById("pmBackdrop"),a=document.getElementById("pmCloseMenuBtn");function r(){i.classList.remove("active"),o.classList.remove("active")}t&&t.addEventListener("click",(function(){i.classList.toggle("active"),o.classList.toggle("active")})),o&&o.addEventListener("click",r),a&&a.addEventListener("click",r),document.addEventListener("keydown",(function(n){"Escape"===n.key&&r()})),async function(){const n=document.getElementById("pmMenuList"),e=document.getElementById("header-label"),t=document.querySelector(".pm-menu-btn-container");try{const i="/json/quick_menus",o=await getData(i),a=await o.json(),r=a.data.items||[];if(r.length>0){if(a.custom_css){const n=document.createElement("style");n.innerText=a.custom_css,document.head.appendChild(n)}t&&(t.style.display="block"),n.innerHTML=r.map((n=>
1`\n                    <li class="pm-menu-item">\n                        <a href="${n.url}" class="pm-menu-link">\n                            <img src="${n.icon}" alt="${n.label}">\n                            <div class='container-item-label'>\n                                <p class='label-item'>${n.label}</p>\n                                <small class='desc-item'>${n.description}</small>\n                            </div>\n                        </a>\n                    </li>\n                `)).join("");const i=window.location.pathname;n.querySelectorAll(".pm-menu-link").forEach((n=>{n.getAttribute("href")===i&&n.classList.add("active")})),e.innerText=a.header}else t&&(t.style.display="none"),n.innerHTML='<li style="padding: 15px; text-align: center; color: #6b7280;">No items found.</li>'}catch(e){n.innerHTML='<li style="padding: 15px; text-align: center; color: #ef4444;">Error loading menu.</li>'}}()}();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.