网站首页 网站源码
website
站点相关全部源代码,隐藏了一些关于服务器的信息
(() => {
    'use strict';

    const globalNamespace = window.UIComponents || {};

    function toArray(source) {
        if (!source) {
            return [];
        }

        if (typeof source === 'string') {
            return Array.from(document.querySelectorAll(source));
        }

        if (source instanceof HTMLFormElement) {
            return [source];
        }

        return Array.from(source);
    }

    function buildLoadingMarkup(text) {
        const safeText = typeof text === 'string' && text.trim().length > 0 ? text : '处理中...';
        return `<span class="loading-content"><span class="loading-spinner" role="presentation"></span><span class="loading-text">${safeText}</span></span>`;
    }

    function attachSubmitLoading(formOrSelector, options = {}) {
        const forms = toArray(formOrSelector);

        forms.forEach(form => {
            if (!(form instanceof HTMLFormElement)) {
                return;
            }

            if (form.dataset.submitLoadingInit === 'true') {
                return;
            }

            const buttonSelector = options.buttonSelector || form.dataset.submitButton || 'button[type="submit"]';
            const submitButton = form.querySelector(buttonSelector);

            if (!submitButton) {
                return;
            }

            form.dataset.submitLoadingInit = 'true';

            form.addEventListener('submit', event => {
                if (form.dataset.submitLoadingActive === 'true') {
                    event.preventDefault();
                    return;
                }

                form.dataset.submitLoadingActive = 'true';
                form.classList.add('is-loading');

                const loadingText = options.loadingText
                    || submitButton.getAttribute('data-loading-text')
                    || form.getAttribute('data-loading-text')
                    || '处理中...';

                if (!submitButton.dataset.originalContent) {
                    submitButton.dataset.originalContent = submitButton.innerHTML;
                }

                submitButton.disabled = true;
                submitButton.setAttribute('aria-disabled', 'true');
                submitButton.classList.add('is-loading');
                submitButton.setAttribute('aria-live', 'polite');
                submitButton.innerHTML = buildLoadingMarkup(loadingText);

                const targetSelector = options.loadingTarget || form.getAttribute('data-loading-target');
                const loadingTarget = targetSelector ? form.closest(targetSelector) : form.closest('.container');

                if (loadingTarget) {
                    loadingTarget.classList.add('is-loading');
                    loadingTarget.setAttribute('aria-busy', 'true');
                }
            });
        });
    }

    globalNamespace.attachSubmitLoading = attachSubmitLoading;

    window.UIComponents = globalNamespace;

    document.addEventListener('DOMContentLoaded', () => {
        const autoForms = document.querySelectorAll('form[data-submit-loading]');
        if (autoForms.length > 0) {
            attachSubmitLoading(autoForms);
        }
    });
})();

loading