{"id":110,"date":"2025-11-21T21:31:30","date_gmt":"2025-11-21T14:31:30","guid":{"rendered":"https:\/\/edms.lpsci.ac.th\/?page_id=110"},"modified":"2025-11-22T15:35:50","modified_gmt":"2025-11-22T08:35:50","slug":"elementor-110","status":"publish","type":"page","link":"https:\/\/edms.lpsci.ac.th\/","title":{"rendered":"Login Home"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-page\" data-elementor-id=\"110\" class=\"elementor elementor-110\">\n\t\t\t\t<div class=\"elementor-element elementor-element-b25d887 e-con-full e-flex e-con e-parent\" data-id=\"b25d887\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t<div class=\"elementor-element elementor-element-0740d5a elementor-widget elementor-widget-html\" data-id=\"0740d5a\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"html.default\">\n\t\t\t\t\t<!DOCTYPE html>\r\n<html lang=\"th\">\r\n<head>\r\n    <meta charset=\"UTF-8\">\r\n    <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\">\r\n    <title>\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a | EDMS LPSCI<\/title>\r\n    <style>\r\n        \/* CSS \u0e17\u0e35\u0e48\u0e16\u0e39\u0e01\u0e41\u0e01\u0e49\u0e44\u0e02\u0e43\u0e2b\u0e49\u0e40\u0e15\u0e47\u0e21\u0e2b\u0e19\u0e49\u0e32\u0e08\u0e2d\u0e41\u0e25\u0e30\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07 *\/\r\n        body {\r\n            \/* \u0e01\u0e33\u0e2b\u0e19\u0e14\u0e43\u0e2b\u0e49 body \u0e40\u0e15\u0e47\u0e21\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e39\u0e07\u0e02\u0e2d\u0e07 viewport *\/\r\n            height: 100vh;\r\n            width: 100vw;\r\n            font-family: 'Inter', Arial, sans-serif; \/* \u0e43\u0e0a\u0e49 Inter \u0e41\u0e25\u0e30 fallback \u0e40\u0e1b\u0e47\u0e19 Arial *\/\r\n            background-color: #f4f4f9;\r\n            \/* \u0e43\u0e0a\u0e49 Flexbox \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07\u0e40\u0e19\u0e37\u0e49\u0e2d\u0e2b\u0e32 *\/\r\n            display: flex;\r\n            justify-content: center; \/* \u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07\u0e41\u0e19\u0e27\u0e19\u0e2d\u0e19 *\/\r\n            align-items: center;    \/* \u0e08\u0e31\u0e14\u0e01\u0e36\u0e48\u0e07\u0e01\u0e25\u0e32\u0e07\u0e41\u0e19\u0e27\u0e15\u0e31\u0e49\u0e07 *\/\r\n            margin: 0;\r\n            padding: 0;\r\n        }\r\n\r\n        .login-container {\r\n            background-color: #ffffff;\r\n            padding: 40px; \/* \u0e40\u0e1e\u0e34\u0e48\u0e21 padding \u0e43\u0e2b\u0e49\u0e14\u0e39\u0e43\u0e2b\u0e0d\u0e48\u0e02\u0e36\u0e49\u0e19 *\/\r\n            border-radius: 10px;\r\n            box-shadow: 0 8px 20px rgba(0, 0, 0, 0.15); \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e07\u0e32\u0e43\u0e2b\u0e49\u0e42\u0e14\u0e14\u0e40\u0e14\u0e48\u0e19 *\/\r\n            width: 100%;\r\n            max-width: 450px; \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e19\u0e32\u0e14\u0e04\u0e27\u0e32\u0e21\u0e01\u0e27\u0e49\u0e32\u0e07\u0e2a\u0e39\u0e07\u0e2a\u0e38\u0e14\u0e02\u0e2d\u0e07\u0e01\u0e25\u0e48\u0e2d\u0e07 *\/\r\n            text-align: center;\r\n        }\r\n\r\n        .logo {\r\n            margin-bottom: 25px;\r\n        }\r\n\r\n        .logo img {\r\n            max-width: 180px; \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e19\u0e32\u0e14\u0e42\u0e25\u0e42\u0e01\u0e49 *\/\r\n            height: auto;\r\n            border-radius: 5px; \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e2d\u0e1a\u0e21\u0e19\u0e43\u0e2b\u0e49\u0e42\u0e25\u0e42\u0e01\u0e49 *\/\r\n        }\r\n\r\n        h1 {\r\n            color: #1a1a1a;\r\n            margin-bottom: 30px;\r\n            font-size: 1.7em;\r\n        }\r\n\r\n        .input-group {\r\n            margin-bottom: 20px;\r\n            text-align: left;\r\n        }\r\n\r\n        .input-group label {\r\n            display: block;\r\n            margin-bottom: 8px;\r\n            color: #333;\r\n            font-weight: bold;\r\n        }\r\n\r\n        .input-group input[type=\"text\"], \r\n        .input-group input[type=\"password\"] {\r\n            width: 100%;\r\n            padding: 12px;\r\n            border: 1px solid #ddd;\r\n            border-radius: 6px;\r\n            box-sizing: border-box;\r\n            font-size: 1em;\r\n            transition: border-color 0.3s, box-shadow 0.3s;\r\n        }\r\n        \r\n        \/* \u0e1b\u0e23\u0e31\u0e1a\u0e2a\u0e44\u0e15\u0e25\u0e4c\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e42\u0e1f\u0e01\u0e31\u0e2a\u0e17\u0e35\u0e48\u0e0a\u0e48\u0e2d\u0e07\u0e01\u0e23\u0e2d\u0e01\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25 *\/\r\n        .input-group input:focus {\r\n            border-color: #007bff;\r\n            outline: none;\r\n            box-shadow: 0 0 5px rgba(0, 123, 255, 0.5); \/* \u0e40\u0e1e\u0e34\u0e48\u0e21\u0e04\u0e27\u0e32\u0e21\u0e40\u0e02\u0e49\u0e21\u0e40\u0e07\u0e32\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e42\u0e1f\u0e01\u0e31\u0e2a *\/\r\n        }\r\n\r\n        .login-button {\r\n            width: 100%;\r\n            padding: 12px;\r\n            background-color: #007bff;\r\n            color: white;\r\n            border: none;\r\n            border-radius: 6px;\r\n            cursor: pointer;\r\n            font-size: 1.1em;\r\n            font-weight: bold;\r\n            margin-bottom: 20px;\r\n            transition: background-color 0.3s, transform 0.2s, opacity 0.3s;\r\n        }\r\n\r\n        .login-button:hover:not(:disabled) {\r\n            background-color: #0056b3;\r\n            transform: translateY(-2px); \/* \u0e40\u0e2d\u0e1f\u0e40\u0e1f\u0e01\u0e15\u0e4c\u0e22\u0e01\u0e02\u0e36\u0e49\u0e19\u0e40\u0e25\u0e47\u0e01\u0e19\u0e49\u0e2d\u0e22 *\/\r\n        }\r\n\r\n        .login-button:disabled {\r\n            background-color: #a0c3e6; \/* \u0e2a\u0e35\u0e40\u0e17\u0e32\u0e2d\u0e48\u0e2d\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d disabled *\/\r\n            cursor: not-allowed;\r\n            opacity: 0.8;\r\n        }\r\n\r\n        \/* \u0e1b\u0e23\u0e31\u0e1a CSS \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a links-group \u0e43\u0e2b\u0e49\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e2d\u0e22\u0e39\u0e48\u0e15\u0e23\u0e07\u0e01\u0e25\u0e32\u0e07\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e41\u0e04\u0e48\u0e25\u0e34\u0e07\u0e01\u0e4c\u0e40\u0e14\u0e35\u0e22\u0e27 *\/\r\n        .links-group {\r\n            text-align: center;\r\n        }\r\n        \r\n        .links-group a {\r\n            display: inline-block;\r\n            margin: 0; \/* \u0e25\u0e1a margin \u0e0b\u0e49\u0e32\u0e22-\u0e02\u0e27\u0e32\u0e17\u0e35\u0e48\u0e44\u0e21\u0e48\u0e08\u0e33\u0e40\u0e1b\u0e47\u0e19\u0e2d\u0e2d\u0e01 *\/\r\n            color: #6c757d; \r\n            text-decoration: none;\r\n            transition: color 0.3s;\r\n            font-size: 0.95em;\r\n        }\r\n\r\n        .links-group a:hover {\r\n            color: #007bff;\r\n            text-decoration: underline;\r\n        }\r\n\r\n        \/* \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e16\u0e32\u0e19\u0e30 *\/\r\n        .status-message {\r\n            margin-bottom: 15px;\r\n            min-height: 1.2em; \/* \u0e01\u0e31\u0e19\u0e44\u0e21\u0e48\u0e43\u0e2b\u0e49\u0e40\u0e01\u0e34\u0e14 CLS \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e21\u0e35\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e02\u0e36\u0e49\u0e19\u0e21\u0e32 *\/\r\n            font-size: 0.95em;\r\n            font-weight: 500;\r\n        }\r\n        .status-message.error {\r\n            color: #dc3545; \/* \u0e2a\u0e35\u0e41\u0e14\u0e07\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14 *\/\r\n        }\r\n        .status-message.success {\r\n            color: #28a745; \/* \u0e2a\u0e35\u0e40\u0e02\u0e35\u0e22\u0e27\u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08 *\/\r\n        }\r\n    <\/style>\r\n<\/head>\r\n<body>\r\n    <div class=\"login-container\">\r\n        <!-- \u0e42\u0e25\u0e42\u0e01\u0e49 -->\r\n        <div class=\"logo\">\r\n            <!-- \u0e42\u0e25\u0e42\u0e01\u0e49 LPSCI -->\r\n            <img decoding=\"async\" src=\"https:\/\/i.postimg.cc\/cgHPgwhV\/(n)LPSCI-LOGO-NAVI-copy-2.png\" alt=\"\u0e42\u0e25\u0e42\u0e01\u0e49 EDMS LPSCI\">\r\n        <\/div>\r\n        \r\n        <h1>\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a | EDMS LPSCI<\/h1>\r\n\r\n        <!-- \u0e40\u0e1e\u0e34\u0e48\u0e21 ID \u0e43\u0e2b\u0e49 Form \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e14\u0e49\u0e27\u0e22 JavaScript -->\r\n        <form id=\"login-form\"> \r\n            \r\n            <!-- \u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 (User) -->\r\n            <div class=\"input-group\">\r\n                <label for=\"username\">\u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 (User)<\/label>\r\n                <input type=\"text\" id=\"username\" name=\"username\" placeholder=\"\u0e01\u0e23\u0e2d\u0e01\u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\" required>\r\n            <\/div>\r\n\r\n            <!-- \u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 (Password) -->\r\n            <div class=\"input-group\">\r\n                <label for=\"password\">\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 (Password)<\/label>\r\n                <input type=\"password\" id=\"password\" name=\"password\" placeholder=\"\u0e01\u0e23\u0e2d\u0e01\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\" required>\r\n            <\/div>\r\n            \r\n            <!-- \u0e1e\u0e37\u0e49\u0e19\u0e17\u0e35\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e16\u0e32\u0e19\u0e30 -->\r\n            <div id=\"message\" class=\"status-message\"><\/div>\r\n\r\n            <!-- \u0e1b\u0e38\u0e48\u0e21\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a - \u0e40\u0e1e\u0e34\u0e48\u0e21 ID -->\r\n            <button type=\"submit\" class=\"login-button\" id=\"login-btn\">\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a<\/button>\r\n        <\/form>\r\n\r\n        <!-- \u0e25\u0e34\u0e07\u0e01\u0e4c\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e40\u0e15\u0e34\u0e21 (\u0e40\u0e2b\u0e25\u0e37\u0e2d\u0e41\u0e04\u0e48\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e43\u0e2b\u0e21\u0e48) -->\r\n        <div class=\"links-group\">\r\n            <a href=\"https:\/\/edms.lpsci.ac.th\/?page_id=127\" target=\"_blank\">\u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e43\u0e2b\u0e21\u0e48<\/a>\r\n        <\/div>\r\n    <\/div>\r\n\r\n    <script>\r\n        \/\/ *** 1. \u0e15\u0e49\u0e2d\u0e07\u0e41\u0e17\u0e19\u0e17\u0e35\u0e48\u0e14\u0e49\u0e27\u0e22 URL \u0e02\u0e2d\u0e07 Google Apps Script Web App \u0e17\u0e35\u0e48\u0e04\u0e38\u0e13 Deploy \u0e41\u0e25\u0e49\u0e27 ***\r\n        const APPS_SCRIPT_URL = 'https:\/\/docs.google.com\/spreadsheets\/d\/1TYu-vAtWScSLG4C7lBH8A9Kmf4bV3g6wifk12cesf3c\/edit?gid=0#gid=0';\r\n        \r\n        \/\/ *** 2. URL \u0e1b\u0e25\u0e32\u0e22\u0e17\u0e32\u0e07\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e25\u0e47\u0e2d\u0e01\u0e2d\u0e34\u0e19\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e15\u0e32\u0e21\u0e17\u0e35\u0e48\u0e23\u0e49\u0e2d\u0e07\u0e02\u0e2d ***\r\n        const REDIRECT_URL = 'https:\/\/edms.lpsci.ac.th\/?page_id=177';\r\n\r\n        const loginForm = document.getElementById('login-form');\r\n        const loginButton = document.getElementById('login-btn');\r\n        const messageElement = document.getElementById('message');\r\n\r\n        \/**\r\n         * \u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e1a\u0e19 UI\r\n         * @param {string} text - \u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21\u0e17\u0e35\u0e48\u0e08\u0e30\u0e41\u0e2a\u0e14\u0e07\r\n         * @param {boolean} isError - \u0e40\u0e1b\u0e47\u0e19 true \u0e16\u0e49\u0e32\u0e40\u0e1b\u0e47\u0e19\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\r\n         *\/\r\n        function showMessage(text, isError = false) {\r\n            messageElement.textContent = text;\r\n            messageElement.classList.remove('error', 'success');\r\n            if (isError) {\r\n                messageElement.classList.add('error');\r\n            } else {\r\n                messageElement.classList.add('success');\r\n            }\r\n        }\r\n\r\n        \/\/ \u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e2b\u0e19\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\r\n        const sleep = (ms) => new Promise(resolve => setTimeout(resolve, ms));\r\n\r\n        \/\/ \u0e08\u0e31\u0e14\u0e01\u0e32\u0e23\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e1f\u0e2d\u0e23\u0e4c\u0e21\u0e16\u0e39\u0e01\u0e2a\u0e48\u0e07\r\n        loginForm.addEventListener('submit', async function(event) {\r\n            event.preventDefault(); \/\/ \u0e1b\u0e49\u0e2d\u0e07\u0e01\u0e31\u0e19\u0e01\u0e32\u0e23\u0e42\u0e2b\u0e25\u0e14\u0e2b\u0e19\u0e49\u0e32\u0e43\u0e2b\u0e21\u0e48\r\n\r\n            if (APPS_SCRIPT_URL === '') {\r\n                showMessage('\u26a0\ufe0f \u0e01\u0e23\u0e38\u0e13\u0e32\u0e15\u0e31\u0e49\u0e07\u0e04\u0e48\u0e32 APPS_SCRIPT_URL \u0e01\u0e48\u0e2d\u0e19\u0e08\u0e36\u0e07\u0e08\u0e30\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e44\u0e14\u0e49', true);\r\n                return;\r\n            }\r\n\r\n            const username = document.getElementById('username').value.trim();\r\n            const password = document.getElementById('password').value;\r\n\r\n            \/\/ \u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e02\u0e49\u0e2d\u0e21\u0e39\u0e25\u0e40\u0e1a\u0e37\u0e49\u0e2d\u0e07\u0e15\u0e49\u0e19\r\n            if (!username || !password) {\r\n                showMessage('\u0e01\u0e23\u0e38\u0e13\u0e32\u0e01\u0e23\u0e2d\u0e01\u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e41\u0e25\u0e30\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e43\u0e2b\u0e49\u0e04\u0e23\u0e1a\u0e16\u0e49\u0e27\u0e19', true);\r\n                return;\r\n            }\r\n\r\n            \/\/ \u0e41\u0e2a\u0e14\u0e07\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e01\u0e33\u0e25\u0e31\u0e07\u0e14\u0e33\u0e40\u0e19\u0e34\u0e19\u0e01\u0e32\u0e23\r\n            loginButton.disabled = true;\r\n            loginButton.textContent = '\u0e01\u0e33\u0e25\u0e31\u0e07\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a...';\r\n            showMessage('\u0e01\u0e33\u0e25\u0e31\u0e07\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a...', false);\r\n\r\n            \/\/ \u0e43\u0e0a\u0e49 Exponential Backoff \u0e2a\u0e33\u0e2b\u0e23\u0e31\u0e1a\u0e01\u0e32\u0e23\u0e40\u0e23\u0e35\u0e22\u0e01 API\r\n            const maxRetries = 5;\r\n            let currentRetry = 0;\r\n\r\n            const makeApiCall = async () => {\r\n                const url = new URL(APPS_SCRIPT_URL);\r\n                url.searchParams.append('action', 'login');\r\n                url.searchParams.append('user', username);\r\n                url.searchParams.append('pass', password);\r\n\r\n                const response = await fetch(url.toString(), {\r\n                    method: 'GET',\r\n                    mode: 'cors'\r\n                });\r\n\r\n                if (!response.ok) {\r\n                    \/\/ Throw error for retry logic to catch\r\n                    throw new Error(`HTTP error! status: ${response.status}`);\r\n                }\r\n                \r\n                \/\/ \u0e04\u0e32\u0e14\u0e2b\u0e27\u0e31\u0e07\u0e01\u0e32\u0e23\u0e15\u0e2d\u0e1a\u0e01\u0e25\u0e31\u0e1a\u0e40\u0e1b\u0e47\u0e19 JSON { success: true\/false, message: '...' }\r\n                return await response.json(); \r\n            };\r\n\r\n            while (currentRetry < maxRetries) {\r\n                try {\r\n                    const result = await makeApiCall(); \r\n\r\n                    if (result.success === true) {\r\n                        showMessage('\u2705 \u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08! \u0e01\u0e33\u0e25\u0e31\u0e07\u0e19\u0e33\u0e44\u0e1b\u0e22\u0e31\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01...', false);\r\n                        \r\n                        \/\/ Redirect \u0e44\u0e1b\u0e22\u0e31\u0e07 URL \u0e17\u0e35\u0e48\u0e01\u0e33\u0e2b\u0e19\u0e14\r\n                        \/\/ \u0e43\u0e0a\u0e49 window.top.location.href \u0e40\u0e1e\u0e37\u0e48\u0e2d\u0e40\u0e1b\u0e25\u0e35\u0e48\u0e22\u0e19\u0e40\u0e2a\u0e49\u0e19\u0e17\u0e32\u0e07\u0e2b\u0e19\u0e49\u0e32\u0e2b\u0e25\u0e31\u0e01 (\u0e01\u0e23\u0e13\u0e35\u0e42\u0e04\u0e49\u0e14\u0e19\u0e35\u0e49\u0e16\u0e39\u0e01\u0e1d\u0e31\u0e07\u0e43\u0e19 iframe)\r\n                        setTimeout(() => {\r\n                            window.top.location.href = REDIRECT_URL; \r\n                        }, 1500);\r\n                        return; \/\/ \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e1f\u0e31\u0e07\u0e01\u0e4c\u0e0a\u0e31\u0e19\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\r\n\r\n                    } else {\r\n                        showMessage('\u274c \u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19\u0e2b\u0e23\u0e37\u0e2d\u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19\u0e44\u0e21\u0e48\u0e16\u0e39\u0e01\u0e15\u0e49\u0e2d\u0e07 \u0e01\u0e23\u0e38\u0e13\u0e32\u0e25\u0e2d\u0e07\u0e43\u0e2b\u0e21\u0e48\u0e2d\u0e35\u0e01\u0e04\u0e23\u0e31\u0e49\u0e07', true);\r\n                        break; \/\/ \u0e2d\u0e2d\u0e01\u0e08\u0e32\u0e01\u0e01\u0e32\u0e23\u0e27\u0e19\u0e0b\u0e49\u0e33\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e21\u0e35\u0e1c\u0e25\u0e25\u0e31\u0e1e\u0e18\u0e4c \u0e41\u0e15\u0e48\u0e44\u0e21\u0e48\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\r\n                    }\r\n                } catch (error) {\r\n                    currentRetry++;\r\n                    if (currentRetry < maxRetries) {\r\n                        const delay = Math.pow(2, currentRetry) * 1000 + Math.random() * 500; \/\/ \u0e2b\u0e19\u0e48\u0e27\u0e07\u0e40\u0e27\u0e25\u0e32\u0e40\u0e1e\u0e34\u0e48\u0e21\u0e02\u0e36\u0e49\u0e19\r\n                        \/\/ \u0e44\u0e21\u0e48\u0e41\u0e2a\u0e14\u0e07\u0e02\u0e49\u0e2d\u0e04\u0e27\u0e32\u0e21 retry \u0e43\u0e19 console\r\n                        await sleep(delay);\r\n                    } else {\r\n                        \/\/ \u0e40\u0e21\u0e37\u0e48\u0e2d\u0e25\u0e2d\u0e07\u0e04\u0e23\u0e1a\u0e08\u0e33\u0e19\u0e27\u0e19\u0e04\u0e23\u0e31\u0e49\u0e07\u0e41\u0e25\u0e49\u0e27\r\n                        console.error('Login error (Exceeded max retries):', error);\r\n                        showMessage('\ud83d\udea8 \u0e40\u0e01\u0e34\u0e14\u0e02\u0e49\u0e2d\u0e1c\u0e34\u0e14\u0e1e\u0e25\u0e32\u0e14\u0e43\u0e19\u0e01\u0e32\u0e23\u0e40\u0e0a\u0e37\u0e48\u0e2d\u0e21\u0e15\u0e48\u0e2d\u0e40\u0e0b\u0e34\u0e23\u0e4c\u0e1f\u0e40\u0e27\u0e2d\u0e23\u0e4c \u0e42\u0e1b\u0e23\u0e14\u0e15\u0e23\u0e27\u0e08\u0e2a\u0e2d\u0e1a\u0e04\u0e2d\u0e19\u0e42\u0e0b\u0e25', true);\r\n                    }\r\n                }\r\n            }\r\n            \r\n            \/\/ \u0e23\u0e35\u0e40\u0e0b\u0e47\u0e15\u0e1b\u0e38\u0e48\u0e21\u0e41\u0e25\u0e30\u0e2a\u0e16\u0e32\u0e19\u0e30\u0e40\u0e21\u0e37\u0e48\u0e2d\u0e40\u0e2a\u0e23\u0e47\u0e08\u0e2a\u0e34\u0e49\u0e19\u0e01\u0e23\u0e30\u0e1a\u0e27\u0e19\u0e01\u0e32\u0e23 (\u0e44\u0e21\u0e48\u0e27\u0e48\u0e32\u0e08\u0e30\u0e2a\u0e33\u0e40\u0e23\u0e47\u0e08\u0e2b\u0e23\u0e37\u0e2d\u0e25\u0e49\u0e21\u0e40\u0e2b\u0e25\u0e27\u0e43\u0e19\u0e01\u0e32\u0e23\u0e25\u0e2d\u0e07\u0e17\u0e31\u0e49\u0e07\u0e2b\u0e21\u0e14)\r\n            loginButton.disabled = false;\r\n            loginButton.textContent = '\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a';\r\n        });\r\n    <\/script>\r\n<\/body>\r\n<\/html>\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t","protected":false},"excerpt":{"rendered":"<p>\u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a | EDMS LPSCI \u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a | EDMS LPSCI \u0e0a\u0e37\u0e48\u0e2d\u0e1c\u0e39\u0e49\u0e43\u0e0a\u0e49\u0e07\u0e32\u0e19 (User) \u0e23\u0e2b\u0e31\u0e2a\u0e1c\u0e48\u0e32\u0e19 (Password) \u0e40\u0e02\u0e49\u0e32\u0e2a\u0e39\u0e48\u0e23\u0e30\u0e1a\u0e1a \u0e2a\u0e21\u0e31\u0e04\u0e23\u0e2a\u0e21\u0e32\u0e0a\u0e34\u0e01\u0e43\u0e2b\u0e21\u0e48<\/p>\n","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"saved_in_kubio":false,"footnotes":""},"class_list":["post-110","page","type-page","status-publish","hentry"],"kubio_ai_page_context":{"short_desc":"","purpose":"general"},"_links":{"self":[{"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/pages\/110","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=110"}],"version-history":[{"count":20,"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/pages\/110\/revisions"}],"predecessor-version":[{"id":183,"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=\/wp\/v2\/pages\/110\/revisions\/183"}],"wp:attachment":[{"href":"https:\/\/edms.lpsci.ac.th\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=110"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}