fix 更多栏目

This commit is contained in:
kate522 committed 2026-09-05 17:32:18 +08:00
1 parent 5b89fc200b
commit 05a6b6fc54
28 files changed
+440 -2295

No files matched your search

+3
View File
@@ -362,6 +362,9 @@
if (link.closest("[data-aksrt-ajax-list='off']")) return;
// The canonical pagination engine exclusively owns these controls.
if (link.closest("[data-aksrt-pagination], .aksrt-comment-pagination")) return;
// 排序菜单与 pane 触发器是 runtime post_ajax 管线(zib_ajax_option_menu /
// zib_index_tab 契约)的专属控件,这里不能并行处理造成双请求。
if (link.closest(".ajax-option, .post_ajax_trigger")) return;
var href = link.getAttribute("href") || link.getAttribute("ajax-href") || link.getAttribute("data-aksrt-ajax-url");
if (!href && !link.getAttribute("data-aksrt-ajax-url")) return;
+7 -7
View File
@@ -36,10 +36,12 @@
var iasMax = isComment
? ((window.aksrtData && typeof aksrtData.commentIasMax !== "undefined") ? parseInt(aksrtData.commentIasMax, 10) : 0)
: ((window.aksrtData && typeof aksrtData.iasMax !== "undefined") ? parseInt(aksrtData.iasMax, 10) : 0);
var homepagePanel = container.closest("[data-home-tab-panel]");
var target = homepagePanel || container.previousElementSibling;
if (!homepagePanel && target && target.classList && target.classList.contains("content-stream__footer")) {
target = target.previousElementSibling;
// legacy 契约:分页容器与列表同处一个 .ajaxpager 内(首页 tab pane、归档流),
// 此时追加目标就是列表容器本身,新卡片插到分页控件之前。
var listContainer = container.closest(".ajaxpager, .posts-row");
var target = container.previousElementSibling;
if (listContainer && container.parentNode === listContainer) {
target = listContainer;
}
if (isComment) {
var commentList = container.closest("#comment-list, .commentlist, ol.commentlist") ||
@@ -165,9 +167,7 @@
temp.innerHTML = res.data.html;
var newItems = temp.children;
while (newItems.length > 0) {
if (homepagePanel && container.parentNode === target) {
target.insertBefore(newItems[0], container);
} else if (container.parentNode === target) {
if (container.parentNode === target) {
target.insertBefore(newItems[0], container);
} else {
target.appendChild(newItems[0]);
-688
View File
@@ -1,688 +0,0 @@
/**
* Homepage Fixed - Interactive Layer (v2.0 legacy-aligned)
*
* Unified AJAX protocol for homepage tabs, sort, and pagination.
* Uses legacy-style ajaxpager DOM conventions and custom event flow:
* post_ajax.before → fetch → post_ajax.ed → aksrt:posts:rendered
*
* @package AKSRT
* @since 4.0.0
*/
(function () {
'use strict';
var DEFAULT_SORT = 'modified';
var REST_PATH = '/wp-json/aksrt/v1/homepage/tab-posts';
/* ============================================================
* Utilities
* ============================================================ */
function getRenderedPostCount(scope) {
if (!scope) return 0;
return scope.querySelectorAll('.posts-item, .posts-mini').length;
}
function getHomepagePerPage(panel) {
var panelCount = getRenderedPostCount(panel);
if (panelCount > 0) return panelCount;
var configured = window.aksrtData && parseInt(aksrtData.homepagePostsPerPage, 10);
if (configured && configured > 0) return configured;
var latestPanel = document.querySelector('[data-home-tab-panel="latest"]');
var latestCount = getRenderedPostCount(latestPanel);
return latestCount || 10;
}
function getDefaultSort() {
var configured = window.aksrtData && aksrtData.homepageDefaultSort;
var allowed = ['modified', 'date', 'views', 'like', 'comment_count', 'favorite', 'rand'];
return allowed.indexOf(configured) !== -1 ? configured : DEFAULT_SORT;
}
function getDefaultView() {
var panel = document.querySelector('[data-home-tab-panel][data-view]');
return panel && panel.getAttribute('data-view') === 'card' ? 'card' : 'list';
}
function isStickyTabsEnabled() {
return !(window.aksrtData && aksrtData.homepageStickyTabs === false);
}
function getRestBaseUrl() {
var baseUrl = (window.aksrtData && aksrtData.siteUrl) || '/';
return baseUrl.replace(/\/?$/, '');
}
function getCurrentSort(stream) {
var activeLink = stream ? stream.querySelector('.aksrt-homepage__sortbar-link.is-active, .aksrt-homepage__sortbar-dropdown-item.is-active') : null;
return (activeLink && activeLink.getAttribute('data-sort')) || getDefaultSort();
}
function setActiveSortLink(sortbar, sort) {
var links = sortbar.querySelectorAll('.aksrt-homepage__sortbar-link, .aksrt-homepage__sortbar-dropdown-item');
links.forEach(function (link) {
link.classList.toggle('is-active', link.getAttribute('data-sort') === sort);
});
// Update dropdown trigger text to match the active item
var activeItem = sortbar.querySelector('.aksrt-homepage__sortbar-dropdown-item[data-sort="' + sort + '"]');
var trigger = sortbar.querySelector('[data-sort-dropdown-trigger]');
if (activeItem && trigger) {
trigger.firstChild.textContent = activeItem.textContent;
}
}
function getStreamViewMode(stream) {
var panel = getActivePanel(stream);
return panel && panel.getAttribute('data-view') === 'card' ? 'card' : 'list';
}
function getActivePanel(stream) {
return stream.querySelector('.aksrt-homepage__panel.is-active, .aksrt-homepage__panel:not([hidden])');
}
function getPanelTermId(panel) {
if (!panel) return 0;
var target = panel.getAttribute('data-home-tab-panel');
if (target === 'latest') return 0;
var match = target ? target.match(/^term-(\d+)$/) : null;
return match ? parseInt(match[1], 10) : 0;
}
function getPanelTabOrderby(panel) {
if (!panel) return '';
return panel.getAttribute('data-tab-orderby') || '';
}
function buildRestUrl(options) {
options = options || {};
return getRestBaseUrl() + REST_PATH +
'?term_id=' + encodeURIComponent(options.termId || 0) +
'&page=' + encodeURIComponent(options.page || 1) +
'&per_page=' + encodeURIComponent(options.perPage || 10) +
'&sort=' + encodeURIComponent(options.sort || getDefaultSort()) +
'&panel=' + encodeURIComponent(options.panel || 'latest') +
'&tab_orderby=' + encodeURIComponent(options.tabOrderby || '');
}
/* ============================================================
* legacy-style event dispatching
* ============================================================ */
/**
* Dispatch post_ajax.before — fired before AJAX request is sent.
* Detail: { termId, page, sort, viewMode, panel, url }
*/
function dispatchBeforeEvent(container, detail) {
try {
container.dispatchEvent(new CustomEvent('post_ajax.before', {
bubbles: true,
detail: detail
}));
} catch (e) { /* */ }
}
/**
* Dispatch post_ajax.ed — fired after AJAX response is injected.
* Detail: { termId, page, sort, viewMode, panel, total, hasMore }
*/
function dispatchAfterEvent(container, detail) {
try {
container.dispatchEvent(new CustomEvent('post_ajax.ed', {
bubbles: true,
detail: detail
}));
} catch (e) { /* */ }
}
/**
* Dispatch aksrt:posts:rendered — fired after DOM is hydrated (lazyload etc).
* Detail: { viewMode, panel }
*/
function dispatchRenderedEvent(container, detail) {
try {
container.dispatchEvent(new CustomEvent('aksrt:posts:rendered', {
bubbles: true,
detail: detail
}));
} catch (e) { /* */ }
}
/* ============================================================
* Skeleton, lazyload, and hydration
* ============================================================ */
function buildSkeleton(count) {
count = count || 3;
var wrapper = document.createElement('div');
wrapper.className = 'aksrt-homepage__tab-skeleton';
for (var i = 0; i < count; i++) {
var item = document.createElement('div');
item.className = 'aksrt-homepage__tab-skeleton-item';
item.innerHTML =
'<div class="aksrt-homepage__tab-skeleton-thumb"></div>' +
'<div class="aksrt-homepage__tab-skeleton-body">' +
'<div class="aksrt-homepage__tab-skeleton-line"></div>' +
'<div class="aksrt-homepage__tab-skeleton-line"></div>' +
'<div class="aksrt-homepage__tab-skeleton-line"></div>' +
'</div>';
wrapper.appendChild(item);
}
return wrapper;
}
/**
* Hydrate a panel after AJAX content injection.
* Sets data-view, re-binds lazy images, and dispatches events.
*/
function notifyPostsRendered(panel, viewMode) {
var postsContainer = panel.matches('.aksrt-homepage__posts, .posts-row')
? panel
: panel.querySelector('.aksrt-homepage__posts, .posts-row');
if (postsContainer) {
postsContainer.setAttribute('data-view', viewMode || getDefaultView());
}
dispatchRenderedEvent(panel, {
viewMode: viewMode || getDefaultView(),
panel: panel.getAttribute('data-home-tab-panel') || ''
});
}
/* ============================================================
* Unified AJAX panel loader
* ============================================================ */
function renderPanelPager(panel, options, hasMore) {
var existing = panel.querySelector('.aksrt-homepage__panel-footer');
if (existing) existing.remove();
if (!hasMore) return;
var footer = document.createElement('div');
footer.className = 'aksrt-homepage__panel-footer';
var button = document.createElement('button');
button.type = 'button';
button.className = 'aksrt-homepage__more';
button.textContent = (window.aksrtData && aksrtData.ajaxTrigger) || '加载更多';
button.addEventListener('click', function () {
button.disabled = true;
button.textContent = (window.aksrtData && aksrtData.ajaxLoading) || '正在加载...';
requestHomepagePanel(panel, {
termId: options.termId,
page: options.page + 1,
perPage: options.perPage,
sort: options.sort,
viewMode: options.viewMode,
panel: options.panel,
tabOrderby: options.tabOrderby,
append: true
});
});
footer.appendChild(button);
panel.appendChild(footer);
}
function buildErrorState(panel, requestOptions) {
var wrapper = document.createElement('div');
wrapper.className = 'aksrt-homepage__tab-error';
var msg = document.createElement('p');
msg.textContent = (window.aksrtData && aksrtData.ajaxLoadError) || '加载失败,请重试';
wrapper.appendChild(msg);
var retry = document.createElement('button');
retry.type = 'button';
retry.className = 'aksrt-homepage__tab-retry';
retry.innerHTML = '<i class="fa fas fa-redo"></i> ' +
((window.aksrtData && aksrtData.ajaxRetry) || '重试');
retry.addEventListener('click', function () {
requestHomepagePanel(panel, requestOptions);
});
wrapper.appendChild(retry);
return wrapper;
}
/**
* Core AJAX loader. Shared by tab switch, sort change, pagination, and widget tabs.
*
* Dispatches the full legacy-aligned event lifecycle:
* 1. post_ajax.before (before fetch)
* 2. [inject HTML]
* 3. post_ajax.ed (after inject, before hydrate)
* 4. aksrt:posts:rendered (after lazyload rebind)
*/
function requestHomepagePanel(panel, requestOptions) {
var options = {
termId: requestOptions.termId || 0,
page: requestOptions.page || 1,
perPage: requestOptions.perPage || getHomepagePerPage(panel),
sort: requestOptions.sort || getDefaultSort(),
viewMode: requestOptions.viewMode || getDefaultView(),
panel: requestOptions.panel || panel.getAttribute('data-home-tab-panel') || 'latest',
tabOrderby: requestOptions.tabOrderby || getPanelTabOrderby(panel) || '',
append: requestOptions.append === true
};
var restUrl = buildRestUrl(options);
var retryCount = 0;
var maxRetries = 1;
// 1. Pre-request event
dispatchBeforeEvent(panel, {
termId: options.termId,
page: options.page,
sort: options.sort,
viewMode: options.viewMode,
panel: options.panel,
url: restUrl
});
// Full refreshes replace the panel; append requests keep existing cards.
if (!options.append) {
panel.innerHTML = '';
panel.appendChild(buildSkeleton(options.perPage > 6 ? 4 : 3));
}
function markLoaded() {
panel.dataset.loaded = 'true';
panel.dataset.loadedPage = String(options.page);
panel.dataset.loadedSort = options.tabOrderby || options.sort;
panel.dataset.loadedTermId = String(options.termId);
}
function doFetch() {
fetch(restUrl, {
method: 'GET',
headers: { Accept: 'application/json' },
credentials: 'same-origin'
})
.then(function (response) {
if (!response.ok) throw new Error('HTTP ' + response.status);
return response.json();
})
.then(function (data) {
if (!options.append) panel.innerHTML = '';
markLoaded();
if (data && data.html) {
// 2. Inject or append article nodes without nesting a posts-row wrapper.
if (options.append) {
var oldFooter = panel.querySelector('.aksrt-homepage__panel-footer');
if (oldFooter) oldFooter.remove();
var fragment = document.createElement('div');
fragment.innerHTML = data.html;
while (fragment.firstChild) panel.appendChild(fragment.firstChild);
} else {
panel.innerHTML = data.html;
}
renderPanelPager(panel, options, !!data.has_more);
// 3. Post-inject event
dispatchAfterEvent(panel, {
termId: options.termId,
page: options.page,
sort: options.sort,
viewMode: options.viewMode,
panel: options.panel,
total: data.total || 0,
hasMore: !!data.has_more
});
// 4. Hydrate + rendered event
notifyPostsRendered(panel, options.viewMode);
// 5. legacy 契约:post_ajax.ed 之后调用全局 auto_fun 重扫新内容
if (typeof window.auto_fun === 'function') window.auto_fun();
return;
}
// Empty response
var empty = document.createElement('div');
empty.className = 'no-results';
empty.innerHTML = '<p>' + ((window.aksrtData && aksrtData.ajaxEmpty) || '暂无文章') + '</p>';
panel.appendChild(empty);
dispatchAfterEvent(panel, {
termId: options.termId,
page: options.page,
sort: options.sort,
viewMode: options.viewMode,
panel: options.panel,
total: 0,
hasMore: false
});
})
.catch(function () {
if (retryCount < maxRetries) {
retryCount++;
window.setTimeout(doFetch, 3000);
return;
}
if (!options.append) panel.innerHTML = '';
var failedFooter = panel.querySelector('.aksrt-homepage__panel-footer');
if (failedFooter) failedFooter.remove();
panel.appendChild(buildErrorState(panel, options));
});
}
doFetch();
}
/* ============================================================
* Tab Navigation
* ============================================================ */
function initHomeTabs(scope) {
var tablists = (scope || document).querySelectorAll('[data-aksrt-home-tabs]');
tablists.forEach(function (list, listIndex) {
var stream = list.closest('.aksrt-homepage__stream');
if (!stream) return;
var buttons = Array.from(list.querySelectorAll('[data-home-tab-target]'));
var panels = Array.from(stream.querySelectorAll('[data-home-tab-panel]'));
if (buttons.length < 2 || !panels.length) return;
function getPanel(button) {
var target = button.getAttribute('data-home-tab-target');
return panels.find(function (p) {
return p.getAttribute('data-home-tab-panel') === target;
});
}
function activate(button) {
var target = button.getAttribute('data-home-tab-target');
var panel = getPanel(button);
var termId = getPanelTermId(panel);
var currentSort = getCurrentSort(stream);
var viewMode = getStreamViewMode(stream);
var tabOrderby = button.getAttribute('data-tab-orderby') || getPanelTabOrderby(panel) || '';
// Toggle active state on tab buttons
buttons.forEach(function (item) {
var isActive = item === button;
var itemWrap = item.closest('.aksrt-homepage__tab-item');
if (itemWrap) itemWrap.classList.toggle('is-active', isActive);
item.setAttribute('aria-selected', isActive ? 'true' : 'false');
item.tabIndex = isActive ? 0 : -1;
});
// Toggle active state on panels (ajaxpager convention)
panels.forEach(function (tabPanel) {
var isActive = tabPanel === panel;
tabPanel.classList.toggle('is-active', isActive);
if (isActive) {
tabPanel.removeAttribute('hidden');
tabPanel.setAttribute('aria-hidden', 'false');
} else {
tabPanel.setAttribute('hidden', '');
tabPanel.setAttribute('aria-hidden', 'true');
}
});
// Load content if needed (lazy AJAX load like legacy)
// For tab panels, the "loaded sort" check uses tabOrderby, not main stream sort
var effectiveSort = tabOrderby || currentSort;
if (panel && (panel.dataset.loaded !== 'true' || panel.dataset.loadedSort !== effectiveSort)) {
requestHomepagePanel(panel, {
termId: termId,
page: 1,
perPage: getHomepagePerPage(panel),
sort: currentSort,
viewMode: viewMode,
panel: target,
tabOrderby: tabOrderby
});
}
}
// Set up ARIA relationships
buttons.forEach(function (button) {
var target = button.getAttribute('data-home-tab-target');
var panel = getPanel(button);
var buttonId = 'aksrt-home-tab-' + listIndex + '-' + target;
button.id = button.id || buttonId;
if (panel) {
panel.id = panel.id || buttonId + '-panel';
panel.setAttribute('aria-labelledby', button.id);
button.setAttribute('aria-controls', panel.id);
// Add ajaxpager class for legacy DOM convention
panel.classList.add('ajaxpager');
}
button.addEventListener('click', function () { activate(button); });
button.addEventListener('keydown', function (event) {
if (event.key !== 'ArrowRight' && event.key !== 'ArrowLeft') return;
event.preventDefault();
var direction = event.key === 'ArrowRight' ? 1 : -1;
var currentIndex = buttons.indexOf(button);
var nextIndex = (currentIndex + direction + buttons.length) % buttons.length;
var nextButton = buttons[nextIndex];
if (nextButton) {
nextButton.focus();
activate(nextButton);
}
});
});
// Mark server-rendered panels as already loaded. The panel itself owns
// the posts-row contract, so checking descendants would miss SSR items.
panels.forEach(function (panel) {
if (getRenderedPostCount(panel) < 1) return;
panel.dataset.loaded = 'true';
panel.dataset.loadedPage = '1';
panel.dataset.loadedSort = getCurrentSort(stream);
panel.dataset.loadedTermId = String(getPanelTermId(panel));
});
// Activate initial tab
var initialButton = buttons.find(function (b) {
return b.getAttribute('aria-selected') === 'true';
}) || buttons[0];
activate(initialButton);
});
}
/* ============================================================
* Sortbar Dropdown Toggle
* ============================================================ */
function initSortbarDropdown() {
document.querySelectorAll('[data-sort-dropdown-trigger]').forEach(function (trigger) {
var wrapper = trigger.closest('.aksrt-homepage__sortbar-dropdown');
if (!wrapper) return;
var menu = wrapper.querySelector('.aksrt-homepage__sortbar-dropdown-menu');
if (!menu) return;
function close() {
menu.setAttribute('hidden', '');
trigger.setAttribute('aria-expanded', 'false');
}
function toggle() {
var isOpen = !menu.hasAttribute('hidden');
if (isOpen) {
close();
} else {
menu.removeAttribute('hidden');
trigger.setAttribute('aria-expanded', 'true');
}
}
trigger.addEventListener('click', function (e) {
e.preventDefault();
e.stopPropagation();
toggle();
});
// Close when clicking an item
menu.addEventListener('click', function (e) {
var item = e.target.closest('.aksrt-homepage__sortbar-dropdown-item');
if (!item) return;
// Update trigger text
trigger.firstChild.textContent = item.textContent;
// Update active state
menu.querySelectorAll('.aksrt-homepage__sortbar-dropdown-item').forEach(function (el) {
el.classList.toggle('is-active', el === item);
});
close();
});
// Close on outside click
document.addEventListener('click', function (e) {
if (!wrapper.contains(e.target)) close();
});
// Close on Escape
document.addEventListener('keydown', function (e) {
if (e.key === 'Escape' && !menu.hasAttribute('hidden')) {
close();
trigger.focus();
}
});
});
}
/* ============================================================
* Sortbar AJAX
* ============================================================ */
function initSortbar() {
document.querySelectorAll('.aksrt-homepage__stream').forEach(function (stream) {
var sortbar = stream.querySelector('.aksrt-homepage__sortbar');
if (!sortbar) return;
sortbar.addEventListener('click', function (event) {
var link = event.target.closest('.aksrt-homepage__sortbar-link, .aksrt-homepage__sortbar-dropdown-item');
var activePanel = getActivePanel(stream);
var sort = link ? link.getAttribute('data-sort') : '';
var termId = getPanelTermId(activePanel);
if (!link || !activePanel || !sort) return;
event.preventDefault();
setActiveSortLink(sortbar, sort);
requestHomepagePanel(activePanel, {
termId: termId,
page: 1,
perPage: getHomepagePerPage(activePanel),
sort: sort,
viewMode: getStreamViewMode(stream),
panel: activePanel.getAttribute('data-home-tab-panel') || 'latest',
});
});
});
}
/* ============================================================
* Sticky Tabs
* ============================================================ */
function supportsStickyPosition() {
if (window.CSS && typeof window.CSS.supports === 'function') {
return window.CSS.supports('position', 'sticky') || window.CSS.supports('position', '-webkit-sticky');
}
var testNode = document.createElement('div');
testNode.style.position = 'sticky';
return testNode.style.position.indexOf('sticky') !== -1;
}
function getStickyOffset() {
var docStyles = window.getComputedStyle(document.documentElement);
var offset = parseFloat(docStyles.getPropertyValue('--nav-height') || '60');
return isNaN(offset) ? 60 : offset;
}
function initStickyTabs() {
if (!isStickyTabsEnabled()) return;
document.querySelectorAll('.aksrt-homepage__tabs.home-tab-nav-box').forEach(function (tabs) {
var parent = tabs.parentNode;
var sentinel = tabs.previousElementSibling;
var canUseSticky = supportsStickyPosition();
var hasObserver = 'IntersectionObserver' in window;
var observer = null;
if (!parent || tabs.getAttribute('data-sticky-tabs') === 'false') return;
if (!sentinel || !sentinel.classList.contains('aksrt-homepage__tabs-sentinel')) {
sentinel = document.createElement('div');
sentinel.className = 'aksrt-homepage__tabs-sentinel';
parent.insertBefore(sentinel, tabs);
}
function clearAffixBox() {
sentinel.style.height = '1px';
tabs.style.left = '';
tabs.style.width = '';
}
function syncAffixBox() {
var rect = sentinel.getBoundingClientRect();
sentinel.style.height = tabs.offsetHeight + 'px';
tabs.style.left = rect.left + 'px';
tabs.style.width = rect.width + 'px';
}
function setStickyState(isStuck) {
tabs.classList.toggle('is-stuck', isStuck);
if (!canUseSticky) {
tabs.classList.toggle('is-affixed', isStuck);
if (isStuck) { syncAffixBox(); } else { clearAffixBox(); }
return;
}
tabs.classList.remove('is-affixed');
clearAffixBox();
}
function evaluateFallbackState() {
setStickyState(sentinel.getBoundingClientRect().top <= getStickyOffset());
}
if (canUseSticky && hasObserver) {
var bindObserver = function () {
if (observer) observer.disconnect();
observer = new IntersectionObserver(function (entries) {
setStickyState(!entries[0].isIntersecting);
}, { rootMargin: '-' + getStickyOffset() + 'px 0px 0px 0px', threshold: [1] });
observer.observe(sentinel);
};
bindObserver();
window.addEventListener('resize', bindObserver);
return;
}
window.addEventListener('scroll', evaluateFallbackState, { passive: true });
window.addEventListener('resize', evaluateFallbackState);
evaluateFallbackState();
});
}
/* ============================================================
* Init
* ============================================================ */
function init() {
if (document.body.dataset.aksrtHomeFixedInit === '1') return;
document.body.dataset.aksrtHomeFixedInit = '1';
initHomeTabs();
initSortbarDropdown();
initSortbar();
initStickyTabs();
}
if (document.readyState === 'loading') {
document.addEventListener('DOMContentLoaded', init);
} else {
init();
}
})();
+1 -1
View File
@@ -1 +1 @@
(function($,window2,document2){"use strict";function closeNotyf($element){$element.addClass("notyn-out"),window2.setTimeout(function(){$element.remove()},1e3)}function notyf2(message,type,time,id){var $body=jQuery(document2.body);jQuery(".notyn").length||$body.append('<div class="notyn"></div>'),type=type||"success",type==="error"&&(type="danger"),time=time||5e3,time=time<100?time*1e3:time;var idAttribute=id?' id="'+id+'"':"",$notification=jQuery('<div class="noty1"'+idAttribute+'><div class="notyf '+type+'">'+message+"</div></div>"),shouldClose=!id;id&&jQuery("#"+id).length?(jQuery("#"+id).find(".notyf").removeClass().addClass("notyf "+type).html(message),$notification=jQuery("#"+id),shouldClose=!0):jQuery(".notyn").append($notification),shouldClose&&window2.setTimeout(function(){closeNotyf($notification)},time)}jQuery(document2.body).on("click",".noty1",function(){closeNotyf(jQuery(this))}),window2.notyf=notyf2})(jQuery,window,document),(function(window2){"use strict";var allowedKinds={identity:!0,badges:!0,orders:!0,vip:!0},allowedEvents={click:!0,shell:!0,"first-content":!0,ready:!0,"action-start":!0,"action-end":!0,unauthorized:!0,error:!0},sessions=Object.create(null),sequence=0,maxSessions=100;function normalize(value,fallback){var normalized=String(value||fallback||"").toLowerCase().replace(/[^a-z0-9-]/g,"");return normalized||fallback}function now(){return window2.performance&&typeof window2.performance.now=="function"?window2.performance.now():0}function markName(session,event){return"aksrt-modal-"+session.kind+"-"+session.id+"-"+event}function emit(session,event){if(!(!window2.performance||typeof window2.performance.mark!="function")){var name=markName(session,event);if(window2.performance.mark(name),session.marks[event]=name,typeof window2.performance.measure=="function"&&session.marks.click&&event!=="click")try{window2.performance.measure("aksrt-modal-"+session.kind+"-"+session.id+"-click-to-"+event,session.marks.click,name)}catch{}}}function start(kind){var safeKind=normalize(kind,"unknown");allowedKinds[safeKind]||(safeKind="unknown"),sequence+=1;var id=String(sequence),session={id,kind:safeKind,startedAt:now(),marks:Object.create(null)};sessions[id]=session,emit(session,"click");for(var ids=Object.keys(sessions);ids.length>maxSessions;)delete sessions[ids.shift()];return id}function mark(id,event){var session=sessions[String(id||"")],safeEvent=normalize(event,"error");!session||!allowedEvents[safeEvent]||emit(session,safeEvent)}function finish(id){mark(id,"ready")}function fail(id){mark(id,"error")}window2.AksrtModalTelemetry={start,mark,finish,error:fail}})(window),(function(window2){"use strict";function data(){return window2.aksrtData||window2.aksrt||{}}function createIdempotencyKey(){if(window2.crypto&&typeof window2.crypto.randomUUID=="function")return window2.crypto.randomUUID();if(!window2.crypto||typeof window2.crypto.getRandomValues!="function")throw new Error("当前浏览器无法生成安全的操作标识");var bytes=new Uint8Array(16);window2.crypto.getRandomValues(bytes),bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;var hex=Array.prototype.map.call(bytes,function(value){return value.toString(16).padStart(2,"0")}).join("");return hex.slice(0,8)+"-"+hex.slice(8,12)+"-"+hex.slice(12,16)+"-"+hex.slice(16,20)+"-"+hex.slice(20)}function restBase(){var config=data(),raw=config.restUrl||config.apiUrl||config.rest_url||"",siteUrl=config.siteUrl||config.homeUrl||window2.location.origin+"/";return window2.location.protocol==="https:"&&siteUrl.substring(0,5)==="http:"&&(siteUrl="https:"+siteUrl.substring(5)),raw?String(raw).replace(/\/$/,""):String(siteUrl).replace(/\/$/,"")+"/index.php?rest_route=/aksrt/v1"}function appendQuery(url2,query){if(!query)return url2;var parts=[];return typeof query=="string"?parts=query.replace(/^\?/,"").split("&").filter(Boolean):typeof query=="object"&&Object.keys(query).forEach(function(key){query[key]===void 0||query[key]===null||parts.push(encodeURIComponent(key)+"="+encodeURIComponent(String(query[key])))}),parts.length?url2+(url2.indexOf("?")>=0?"&":"?")+parts.join("&"):url2}function url(path,query){path=String(path||"");var inlineQuery="",queryIndex=path.indexOf("?");if(queryIndex>=0&&(inlineQuery=path.slice(queryIndex+1),path=path.slice(0,queryIndex)),/^https?:\/\//i.test(path))return appendQuery(path,query||inlineQuery);path.charAt(0)!=="/"&&(path="/"+path);var base=restBase(),result=(base.indexOf("rest_route=")>=0,base+path);return appendQuery(result,query||inlineQuery)}function headers(options){var config=data(),source=options&&options.headers||{},result={},nonce=config.restNonce||config.nonce||"";return Object.keys(source).forEach(function(key){result[key]=source[key]}),result.Accept||(result.Accept="application/json, text/html;q=0.9, */*;q=0.8"),nonce&&!result["X-WP-Nonce"]&&(result["X-WP-Nonce"]=nonce),options&&options.body!==void 0&&options.body!==null&&!(window2.FormData&&options.body instanceof window2.FormData)&&!result["Content-Type"]&Line truncated
(function($,window2,document2){"use strict";function closeNotyf($element){$element.addClass("notyn-out"),window2.setTimeout(function(){$element.remove()},1e3)}function notyf2(message,type,time,id){var $body=jQuery(document2.body);jQuery(".notyn").length||$body.append('<div class="notyn"></div>'),type=type||"success",type==="error"&&(type="danger"),time=time||5e3,time=time<100?time*1e3:time;var idAttribute=id?' id="'+id+'"':"",$notification=jQuery('<div class="noty1"'+idAttribute+'><div class="notyf '+type+'">'+message+"</div></div>"),shouldClose=!id;id&&jQuery("#"+id).length?(jQuery("#"+id).find(".notyf").removeClass().addClass("notyf "+type).html(message),$notification=jQuery("#"+id),shouldClose=!0):jQuery(".notyn").append($notification),shouldClose&&window2.setTimeout(function(){closeNotyf($notification)},time)}jQuery(document2.body).on("click",".noty1",function(){closeNotyf(jQuery(this))}),window2.notyf=notyf2})(jQuery,window,document),(function(window2){"use strict";var allowedKinds={identity:!0,badges:!0,orders:!0,vip:!0},allowedEvents={click:!0,shell:!0,"first-content":!0,ready:!0,"action-start":!0,"action-end":!0,unauthorized:!0,error:!0},sessions=Object.create(null),sequence=0,maxSessions=100;function normalize(value,fallback){var normalized=String(value||fallback||"").toLowerCase().replace(/[^a-z0-9-]/g,"");return normalized||fallback}function now(){return window2.performance&&typeof window2.performance.now=="function"?window2.performance.now():0}function markName(session,event){return"aksrt-modal-"+session.kind+"-"+session.id+"-"+event}function emit(session,event){if(!(!window2.performance||typeof window2.performance.mark!="function")){var name=markName(session,event);if(window2.performance.mark(name),session.marks[event]=name,typeof window2.performance.measure=="function"&&session.marks.click&&event!=="click")try{window2.performance.measure("aksrt-modal-"+session.kind+"-"+session.id+"-click-to-"+event,session.marks.click,name)}catch{}}}function start(kind){var safeKind=normalize(kind,"unknown");allowedKinds[safeKind]||(safeKind="unknown"),sequence+=1;var id=String(sequence),session={id,kind:safeKind,startedAt:now(),marks:Object.create(null)};sessions[id]=session,emit(session,"click");for(var ids=Object.keys(sessions);ids.length>maxSessions;)delete sessions[ids.shift()];return id}function mark(id,event){var session=sessions[String(id||"")],safeEvent=normalize(event,"error");!session||!allowedEvents[safeEvent]||emit(session,safeEvent)}function finish(id){mark(id,"ready")}function fail(id){mark(id,"error")}window2.AksrtModalTelemetry={start,mark,finish,error:fail}})(window),(function(window2){"use strict";function data(){return window2.aksrtData||window2.aksrt||{}}function createIdempotencyKey(){if(window2.crypto&&typeof window2.crypto.randomUUID=="function")return window2.crypto.randomUUID();if(!window2.crypto||typeof window2.crypto.getRandomValues!="function")throw new Error("当前浏览器无法生成安全的操作标识");var bytes=new Uint8Array(16);window2.crypto.getRandomValues(bytes),bytes[6]=bytes[6]&15|64,bytes[8]=bytes[8]&63|128;var hex=Array.prototype.map.call(bytes,function(value){return value.toString(16).padStart(2,"0")}).join("");return hex.slice(0,8)+"-"+hex.slice(8,12)+"-"+hex.slice(12,16)+"-"+hex.slice(16,20)+"-"+hex.slice(20)}function restBase(){var config=data(),raw=config.restUrl||config.apiUrl||config.rest_url||"",siteUrl=config.siteUrl||config.homeUrl||window2.location.origin+"/";return window2.location.protocol==="https:"&&siteUrl.substring(0,5)==="http:"&&(siteUrl="https:"+siteUrl.substring(5)),raw?String(raw).replace(/\/$/,""):String(siteUrl).replace(/\/$/,"")+"/index.php?rest_route=/aksrt/v1"}function appendQuery(url2,query){if(!query)return url2;var parts=[];return typeof query=="string"?parts=query.replace(/^\?/,"").split("&").filter(Boolean):typeof query=="object"&&Object.keys(query).forEach(function(key){query[key]===void 0||query[key]===null||parts.push(encodeURIComponent(key)+"="+encodeURIComponent(String(query[key])))}),parts.length?url2+(url2.indexOf("?")>=0?"&":"?")+parts.join("&"):url2}function url(path,query){path=String(path||"");var inlineQuery="",queryIndex=path.indexOf("?");if(queryIndex>=0&&(inlineQuery=path.slice(queryIndex+1),path=path.slice(0,queryIndex)),/^https?:\/\//i.test(path))return appendQuery(path,query||inlineQuery);path.charAt(0)!=="/"&&(path="/"+path);var base=restBase(),result=(base.indexOf("rest_route=")>=0,base+path);return appendQuery(result,query||inlineQuery)}function headers(options){var config=data(),source=options&&options.headers||{},result={},nonce=config.restNonce||config.nonce||"";return Object.keys(source).forEach(function(key){result[key]=source[key]}),result.Accept||(result.Accept="application/json, text/html;q=0.9, */*;q=0.8"),nonce&&!result["X-WP-Nonce"]&&(result["X-WP-Nonce"]=nonce),options&&options.body!==void 0&&options.body!==null&&!(window2.FormData&&options.body instanceof window2.FormData)&&!result["Content-Type"]&Line truncated