refactor: rename the theme brand and every identifier from AKSRT to Jio

Full-project rename. `git grep -i aksrt` is now empty apart from the
DBMigrator 3.3.0 changelog note that documents the rename itself.

Code identifiers
- PHP namespace AKSRT\ -> Jio\ (composer PSR-4 + 378 declarations)
- global constants AKSRT_* -> JIO_* (VERSION/DIR/URI, PAY_TYPE_*, CAPTCHA_*)
- procedural functions, hooks, options, meta keys, table names,
  cookies, query vars, ajax actions and nonces: aksrt_ -> jio_
- text domain aksrt -> jio; Theme Name -> Jio
- JS globals: aksrtData/aksrtAdminData/... -> jioData/jioAdminData/...,
  window.AKSRTCaptcha & friends -> window.JioCaptcha, Aksrt* -> Jio*
- Vue components Aks*.vue -> Jio*.vue (15 files renamed + imports)
- CSS classes/data-attrs/custom properties: aksrt- -> jio-
- REST namespace aksrt/v1 -> jio/v1 (incl. payment gateway callbacks)

Storage layer
- DB tables {prefix}aksrt_* -> {prefix}jio_*; SCHEMA_VERSION 3.2.0 -> 3.3.0
  so dbDelta creates the new names on install
- widget id_base aksrt_widget_* -> jio_widget_*
- uninstall.php drop list rebuilt from the actual migrator tables
  (dropped 3 stale entries, added the 17 missing ones)

Removed
- hardcoded https://api.aksrt.com/version.json default update endpoint;
  get_endpoint() now reads the 「更新端点」 setting and do_check() no-ops
  when it is empty

Files renamed: inc/helpers/aksrt-*.php -> jio-*.php (54),
assets/admin/src/components/form/Aks*.vue -> Jio*.vue (15).
Build artifacts regenerated: assets/css/build, assets/js/runtime,
assets/admin/build.

Verified: audit-psr4-paths errors=0, audit-admin-contracts errors=0
(warnings=56, unchanged baseline), 813/813 widget-system tests,
44/44 phpunit, php -l clean across all PHP.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
kate522andClaude Opus 5 committed 2026-11-01 20:05:04 +08:00
1 parent 5b16bc6e15
commit 35bb96e82f
997 files changed
+28216 -28188

No files matched your search

+79 -79
View File
@@ -1,7 +1,7 @@
/**
* AKSRT VIP pay modal — JSON view model + canonical purchase coordinator.
* Jio VIP pay modal — JSON view model + canonical purchase coordinator.
*
* @package AKSRT
* @package Jio
*/
(function () {
"use strict";
@@ -116,7 +116,7 @@
input.type = "radio";
input.name = "vip_product_id";
input.value = String(item.package_id);
input.setAttribute("data-aksrt-vip-package", "");
input.setAttribute("data-jio-vip-package", "");
input.checked = index === 0;
append(label, input);
@@ -217,7 +217,7 @@
// 渠道显隐:通用 data-controller 契约(==/!= 匹配当前 payment_method);
// 选中 card_pass 时隐藏套餐(.charge-box),与参考主题 pay.js 行为一致。
function applyVipMethodVisibility(root) {
var pane = root.closest ? root.closest(".aksrt-vip-pane") : null;
var pane = root.closest ? root.closest(".jio-vip-pane") : null;
pane = pane || root;
var value = selectedMethod(pane);
pane.querySelectorAll('[data-controller="payment_method"]').forEach(function (el) {
@@ -232,7 +232,7 @@
}
// ===== 积分兑换会员弹窗(参考主题 refresh_modal 同构静态壳) =====
// 弹窗壳由服务端静态输出(inc/helpers/aksrt-vip.php → wp_footer),
// 弹窗壳由服务端静态输出(inc/helpers/jio-vip.php → wp_footer),
// 此处只负责开合与提交,形态对齐余额充值/购买积分弹窗的自包含开关:
// .in 显隐 + .modal-backdrop + body.modal-open + ESC,不依赖 jQuery/Bootstrap
// modal 运行时。
@@ -241,7 +241,7 @@
var pointsFocusReturn = null;
function pointsModal() {
return document.querySelector("[data-aksrt-vip-points-modal]");
return document.querySelector("[data-jio-vip-points-modal]");
}
function openPointsModal(trigger) {
@@ -257,7 +257,7 @@
if (!pointsBackdrop) {
pointsBackdrop = document.createElement("div");
pointsBackdrop.className = "modal-backdrop fade in";
pointsBackdrop.setAttribute("data-aksrt-vip-points-backdrop", "1");
pointsBackdrop.setAttribute("data-jio-vip-points-backdrop", "1");
document.body.appendChild(pointsBackdrop);
}
document.body.classList.add("modal-open");
@@ -293,28 +293,28 @@
notyf("请选择兑换套餐", "danger");
return;
}
var coordinator = window.AksrtVipPurchaseCoordinator;
var coordinator = window.JioVipPurchaseCoordinator;
if (!coordinator || typeof coordinator.exchange !== "function") {
notyf("会员兑换暂不可用", "danger");
return;
}
button.disabled = true;
button.classList.add("is-loading");
notyf("正在兑换会员…", "load", "", "aksrt-vip-points-toast");
notyf("正在兑换会员…", "load", "", "jio-vip-points-toast");
coordinator.exchange({ packageId: packageId, tags: ["vip", "orders"] }).then(function (response) {
button.disabled = false;
button.classList.remove("is-loading");
if (response && response.ok) {
var data = response.data || response.json || {};
notyf(data.message || "兑换成功,正在刷新…", "success", 5, "aksrt-vip-points-toast");
notyf(data.message || "兑换成功,正在刷新…", "success", 5, "jio-vip-points-toast");
window.setTimeout(function () { window.location.reload(); }, 800);
return;
}
notyf(response && response.json && response.json.message ? response.json.message : "兑换失败,请重试。", "danger", 5, "aksrt-vip-points-toast");
notyf(response && response.json && response.json.message ? response.json.message : "兑换失败,请重试。", "danger", 5, "jio-vip-points-toast");
}).catch(function () {
button.disabled = false;
button.classList.remove("is-loading");
notyf("网络异常,请稍后重试。", "danger", 5, "aksrt-vip-points-toast");
notyf("网络异常,请稍后重试。", "danger", 5, "jio-vip-points-toast");
});
}
@@ -337,11 +337,11 @@
var hidden = modal.querySelector('input[name="product_id"]');
if (hidden) hidden.value = card.getAttribute("data-value") || "";
});
var form = modal.querySelector("[data-aksrt-vip-points-form]");
var form = modal.querySelector("[data-jio-vip-points-form]");
if (form) {
form.addEventListener("submit", function (event) {
event.preventDefault();
exchangePoints(modal.querySelector("[data-aksrt-vip-points-submit]"));
exchangePoints(modal.querySelector("[data-jio-vip-points-submit]"));
});
}
document.addEventListener("keydown", function (event) {
@@ -369,14 +369,14 @@
var allowed = view.allowed_actions || {};
var reasons = view.action_reasons || {};
var modal = node("div", "box-body payvip-modal");
modal.setAttribute("data-aksrt-vip-modal", "");
if (view.version && view.version.catalog) modal.setAttribute("data-aksrt-vip-version", view.version.catalog);
modal.setAttribute("data-jio-vip-modal", "");
if (view.version && view.version.catalog) modal.setAttribute("data-jio-vip-version", view.version.catalog);
// 关闭按钮(Zibll 原版内联 SVG close 图标)。
var close = document.createElement("button");
close.type = "button";
close.className = "close";
close.setAttribute("data-aksrt-modal-close", "");
close.setAttribute("data-jio-modal-close", "");
close.setAttribute("aria-hidden", "true");
close.setAttribute("aria-label", "关闭");
var closeSvg = document.createElementNS("http://www.w3.org/2000/svg", "svg");
@@ -456,7 +456,7 @@
append(tabs, tabItem);
// pane(Zibll tab-pane fade active in)。
var pane = node("div", "tab-pane fade aksrt-vip-pane" + (active ? " active in" : ""));
var pane = node("div", "tab-pane fade jio-vip-pane" + (active ? " active in" : ""));
pane.id = tabId;
pane.hidden = !active;
var form = document.createElement("form");
@@ -492,10 +492,10 @@
// fa-angle-right;点击开服务端静态兑换弹窗(不再跳转用户中心)。
var pointsLink = node("a", "btn-block but mb10 padding-lg c-green mini-radius");
pointsLink.href = "javascript:;";
pointsLink.setAttribute("data-aksrt-vip-points-open", "");
pointsLink.setAttribute("data-jio-vip-points-open", "");
// 入口文案跟随自定义货币名称(后台「积分配置 → 自定义货币名称」),
// 与它打开的服务端静态弹窗标题保持同一命名。
var currencyName = (catalog.currency_name || (window.aksrtData && window.aksrtData.currencyName) || "积分");
var currencyName = (catalog.currency_name || (window.jioData && window.jioData.currencyName) || "积分");
pointsLink.innerHTML = '<svg class="icon" aria-hidden="true"><use xlink:href="#icon-points-color"></use></svg>'
+ currencyName + "兑换会员"
+ '<i class="fa fas fa-angle-right em12 ml10" aria-hidden="true"></i>';
@@ -529,7 +529,7 @@
append(modal, content);
// 卡密渠道初始显隐(选中 card_pass 时隐藏套餐、显示卡密输入盒)。
modal.querySelectorAll(".aksrt-vip-pane").forEach(function (pane) {
modal.querySelectorAll(".jio-vip-pane").forEach(function (pane) {
applyVipMethodVisibility(pane);
});
append(body, modal);
@@ -543,7 +543,7 @@
}
function selectedPackage(root) {
var checked = root.querySelector('[data-aksrt-vip-package]:checked');
var checked = root.querySelector('[data-jio-vip-package]:checked');
return checked ? parseInt(checked.value, 10) : 0;
}
@@ -563,7 +563,7 @@
return;
}
if (!button || button.disabled) return;
var coordinator = window.AksrtVipPurchaseCoordinator;
var coordinator = window.JioVipPurchaseCoordinator;
if (!coordinator || typeof coordinator.start !== "function") {
notyf("会员购买暂不可用", "danger");
return;
@@ -572,7 +572,7 @@
button.disabled = true;
button.classList.add("is-loading");
activePurchaseToastId = "aksrt-vip-purchase-toast";
activePurchaseToastId = "jio-vip-purchase-toast";
notyf("正在创建会员订单…", "load", "", activePurchaseToastId);
activePurchase = coordinator.start({
packageId: packageId,
@@ -580,17 +580,17 @@
tags: ["vip", "orders"],
onPending: function (data) {
waitingPayment = true;
if (window.AksrtPayCashier) {
window.AksrtPayCashier.handle(data, { onClose: cancelActivePurchase });
if (window.JioPayCashier) {
window.JioPayCashier.handle(data, { onClose: cancelActivePurchase });
}
notyf(data.message || "请完成支付,支付成功后将自动刷新。", "info", 5, activePurchaseToastId);
activePurchaseToastId = "aksrt-vip-payment-toast";
activePurchaseToastId = "jio-vip-payment-toast";
notyf("等待支付结果…", "load", "", activePurchaseToastId);
},
onSuccess: function (result) {
activePurchase = null;
restoreButton(button);
var toastId = waitingPayment ? "aksrt-vip-payment-toast" : "aksrt-vip-purchase-toast";
var toastId = waitingPayment ? "jio-vip-payment-toast" : "jio-vip-purchase-toast";
notyf((result.data && result.data.message) || "开通成功,正在刷新…", "success", 5, toastId);
activePurchaseToastId = "";
window.setTimeout(function () { window.location.reload(); }, 800);
@@ -598,13 +598,13 @@
onFailure: function (result) {
activePurchase = null;
restoreButton(button);
notyf(result.data && result.data.message ? result.data.message : "支付未完成,请重试。", "danger", 5, "aksrt-vip-payment-toast");
notyf(result.data && result.data.message ? result.data.message : "支付未完成,请重试。", "danger", 5, "jio-vip-payment-toast");
activePurchaseToastId = "";
},
onTimeout: function () {
activePurchase = null;
restoreButton(button);
notyf("支付状态暂未确认,请稍后在订单中心查看。", "danger", 5, "aksrt-vip-payment-toast");
notyf("支付状态暂未确认,请稍后在订单中心查看。", "danger", 5, "jio-vip-payment-toast");
activePurchaseToastId = "";
},
onError: function (response) {
@@ -616,7 +616,7 @@
var login = document.querySelector(".signin-loader");
if (login) login.click();
}
notyf(message, "danger", 5, activePurchaseToastId || "aksrt-vip-purchase-toast");
notyf(message, "danger", 5, activePurchaseToastId || "jio-vip-purchase-toast");
activePurchaseToastId = "";
},
});
@@ -633,14 +633,14 @@
return;
}
if (!button || button.disabled) return;
var request = window.AksrtRequest;
var request = window.JioRequest;
if (!request || typeof request.request !== "function") {
notyf("会员兑换暂不可用", "danger");
return;
}
button.disabled = true;
button.classList.add("is-loading");
notyf("正在兑换会员…", "load", "", "aksrt-vip-purchase-toast");
notyf("正在兑换会员…", "load", "", "jio-vip-purchase-toast");
var key = typeof request.createIdempotencyKey === "function" ? request.createIdempotencyKey() : "";
request.request("/pay/card-pass/redeem", {
method: "POST",
@@ -654,29 +654,29 @@
button.disabled = false;
button.classList.remove("is-loading");
if (!response.ok || (response.json && response.json.code && !response.json.success)) {
notyf((response.json && response.json.message) || "兑换失败", "danger", 5, "aksrt-vip-purchase-toast");
notyf((response.json && response.json.message) || "兑换失败", "danger", 5, "jio-vip-purchase-toast");
return;
}
var data = response.data || (response.json && response.json.data) || {};
if (window.AksrtModalRuntime && typeof window.AksrtModalRuntime.invalidate === "function") {
window.AksrtModalRuntime.invalidate(["vip", "orders"]);
if (window.JioModalRuntime && typeof window.JioModalRuntime.invalidate === "function") {
window.JioModalRuntime.invalidate(["vip", "orders"]);
}
notyf(data.message || "兑换成功,正在刷新…", "success", 5, "aksrt-vip-purchase-toast");
notyf(data.message || "兑换成功,正在刷新…", "success", 5, "jio-vip-purchase-toast");
window.setTimeout(function () { window.location.reload(); }, 800);
}).catch(function () {
button.disabled = false;
button.classList.remove("is-loading");
notyf("网络错误,请重试", "danger", 5, "aksrt-vip-purchase-toast");
notyf("网络错误,请重试", "danger", 5, "jio-vip-purchase-toast");
});
}
function bindModalUi(root) {
if (!root || root.dataset.aksrtVipBound === "1") return;
root.dataset.aksrtVipBound = "1";
if (!root || root.dataset.jioVipBound === "1") return;
root.dataset.jioVipBound = "1";
root.addEventListener("click", function (event) {
var methodItem = event.target.closest ? event.target.closest('[data-for="payment_method"]') : null;
if (methodItem) {
var pane = methodItem.closest(".aksrt-vip-pane") || root;
var pane = methodItem.closest(".jio-vip-pane") || root;
pane.querySelectorAll('[data-for="payment_method"]').forEach(function (el) {
el.classList.toggle("active", el === methodItem);
});
@@ -692,7 +692,7 @@
root.querySelectorAll("[data-vip-tab]").forEach(function (item) {
if (item.parentElement) item.parentElement.classList.toggle("active", item === tab);
});
root.querySelectorAll(".aksrt-vip-pane").forEach(function (pane) {
root.querySelectorAll(".jio-vip-pane").forEach(function (pane) {
var active = pane.id === id;
pane.classList.toggle("active", active);
pane.classList.toggle("in", active);
@@ -702,7 +702,7 @@
var submit = event.target.closest("[data-vip-submit]");
if (submit) {
event.preventDefault();
purchaseFromPane(submit.closest(".aksrt-vip-pane") || root, submit);
purchaseFromPane(submit.closest(".jio-vip-pane") || root, submit);
}
});
}
@@ -710,37 +710,37 @@
// 骨架屏:仿弹窗真实布局(用户框 + 等级卡 + 双列套餐面板)。
// 线条/色块复用全局骨架类(build/public.min.css),VIP 专属形状见 vip-modal.css。
function vipSkeleton() {
var skeleton = node("div", "aksrt-vip-modal-skeleton");
var skeleton = node("div", "jio-vip-modal-skeleton");
skeleton.setAttribute("aria-live", "polite");
skeleton.setAttribute("aria-busy", "true");
// 用户框:头像圆 + 两行文字。
var user = node("div", "aksrt-vip-modal-skeleton__user");
append(user, node("span", "aksrt-vip-modal-skeleton__avatar"));
var userLines = node("span", "aksrt-vip-modal-skeleton__lines");
append(userLines, node("span", "aksrt-modal-runtime__skeleton-line is-wide"));
append(userLines, node("span", "aksrt-modal-runtime__skeleton-line is-short"));
var user = node("div", "jio-vip-modal-skeleton__user");
append(user, node("span", "jio-vip-modal-skeleton__avatar"));
var userLines = node("span", "jio-vip-modal-skeleton__lines");
append(userLines, node("span", "jio-modal-runtime__skeleton-line is-wide"));
append(userLines, node("span", "jio-modal-runtime__skeleton-line is-short"));
append(user, userLines);
append(skeleton, user);
// 等级卡行(vip-cardminis):两张 tab 占位。
var tabs = node("div", "aksrt-vip-modal-skeleton__tabs");
append(tabs, node("span", "aksrt-vip-modal-skeleton__tab"));
append(tabs, node("span", "aksrt-vip-modal-skeleton__tab"));
var tabs = node("div", "jio-vip-modal-skeleton__tabs");
append(tabs, node("span", "jio-vip-modal-skeleton__tab"));
append(tabs, node("span", "jio-vip-modal-skeleton__tab"));
append(skeleton, tabs);
// 双列面板:左权益信息 + 右套餐区(套餐卡、支付方式行、提交按钮条)。
var pane = node("div", "aksrt-vip-modal-skeleton__pane");
var info = node("div", "aksrt-vip-modal-skeleton__info");
append(info, node("span", "aksrt-modal-runtime__skeleton-line is-wide"));
append(info, node("span", "aksrt-modal-runtime__skeleton-line"));
append(info, node("span", "aksrt-modal-runtime__skeleton-line is-short"));
var pane = node("div", "jio-vip-modal-skeleton__pane");
var info = node("div", "jio-vip-modal-skeleton__info");
append(info, node("span", "jio-modal-runtime__skeleton-line is-wide"));
append(info, node("span", "jio-modal-runtime__skeleton-line"));
append(info, node("span", "jio-modal-runtime__skeleton-line is-short"));
append(pane, info);
var products = node("div", "aksrt-vip-modal-skeleton__products");
append(products, node("span", "aksrt-modal-runtime__skeleton-block"));
append(products, node("span", "aksrt-modal-runtime__skeleton-block"));
append(products, node("span", "aksrt-modal-runtime__skeleton-line is-short"));
append(products, node("span", "aksrt-vip-modal-skeleton__button"));
var products = node("div", "jio-vip-modal-skeleton__products");
append(products, node("span", "jio-modal-runtime__skeleton-block"));
append(products, node("span", "jio-modal-runtime__skeleton-block"));
append(products, node("span", "jio-modal-runtime__skeleton-line is-short"));
append(products, node("span", "jio-vip-modal-skeleton__button"));
append(pane, products);
append(skeleton, pane);
@@ -751,10 +751,10 @@
var level = trigger
? parseInt(trigger.getAttribute("vip-level") || trigger.getAttribute("data-vip-level") || "1", 10) || 1
: 1;
window.AksrtModalRuntime.openRemote({
window.JioModalRuntime.openRemote({
url: "/pay/vip/modal",
query: { vip_level: level },
className: "aksrt-vip-modal-shell",
className: "jio-vip-modal-shell",
skeleton: vipSkeleton(),
telemetry: "vip",
kind: "vip",
@@ -769,7 +769,7 @@
var unauthorized = error && error.code === "unauthorized";
notyf(unauthorized ? "请先登录" : ((error && error.message) || "会员套餐加载失败,请重试"), "danger");
if (unauthorized) {
window.AksrtModalRuntime.close("unauthorized");
window.JioModalRuntime.close("unauthorized");
var login = document.querySelector(".signin-loader");
if (login) login.click();
}
@@ -779,24 +779,24 @@
var prefetchedLevels = Object.create(null);
// 与 openRemote 同一 cacheKey(method + AksrtRequest.url),命中同一份缓存/flight。
// 与 openRemote 同一 cacheKey(method + JioRequest.url),命中同一份缓存/flight。
function vipModalCacheKey(level) {
return "GET:" + window.AksrtRequest.url("/pay/vip/modal", { vip_level: level });
return "GET:" + window.JioRequest.url("/pay/vip/modal", { vip_level: level });
}
// 意图预热:悬停/聚焦开通入口时按等级预热弹窗数据(不打开弹窗,失败静默)。
// 点击打开时若预热请求在途,cache.acquire 的 flight 去重会自动合并。
function prefetchVipModal(trigger) {
if (!trigger || !window.AksrtModalCache || !window.AksrtRequest) return;
if (!trigger || !window.JioModalCache || !window.JioRequest) return;
var level = parseInt(trigger.getAttribute("vip-level") || trigger.getAttribute("data-vip-level") || "1", 10) || 1;
if (level < 1 || level > 2) level = 1;
if (prefetchedLevels[level]) return;
prefetchedLevels[level] = true;
var cache = window.AksrtModalCache;
var cache = window.JioModalCache;
if (cache.get && cache.get(vipModalCacheKey(level)).hit) return;
try {
cache.acquire(vipModalCacheKey(level), function () {
return window.AksrtRequest.request("/pay/vip/modal", {
return window.JioRequest.request("/pay/vip/modal", {
method: "GET",
query: { vip_level: level },
});
@@ -812,7 +812,7 @@
function vipTriggerFrom(event) {
var target = event.target;
if (!target || !target.closest) return null;
return target.closest(".pay-vip, a.pay-vip, .float-btn.pay-vip, [data-aksrt-pay-vip]");
return target.closest(".pay-vip, a.pay-vip, .float-btn.pay-vip, [data-jio-pay-vip]");
}
function bindPrefetch() {
@@ -825,10 +825,10 @@
}
function onDocClick(event) {
var trigger = event.target.closest(".pay-vip, a.pay-vip, .float-btn.pay-vip, [data-aksrt-pay-vip]");
var trigger = event.target.closest(".pay-vip, a.pay-vip, .float-btn.pay-vip, [data-jio-pay-vip]");
if (!trigger) return;
var href = (trigger.getAttribute("href") || "").trim();
if (href && href !== "#" && href.indexOf("javascript:") !== 0 && !trigger.classList.contains("pay-vip") && !trigger.hasAttribute("data-aksrt-pay-vip") && !trigger.hasAttribute("vip-level") && !trigger.hasAttribute("data-vip-level")) {
if (href && href !== "#" && href.indexOf("javascript:") !== 0 && !trigger.classList.contains("pay-vip") && !trigger.hasAttribute("data-jio-pay-vip") && !trigger.hasAttribute("vip-level") && !trigger.hasAttribute("data-vip-level")) {
return;
}
event.preventDefault();
@@ -847,19 +847,19 @@
}
// VIP 弹窗被收银二维码弹窗替换(reason=replace)时保持轮询;用户主动关闭才取消。
document.addEventListener("aksrt:modal:close", function (event) {
document.addEventListener("jio:modal:close", function (event) {
var detail = event && event.detail ? event.detail : {};
var options = detail.session && detail.session.options ? detail.session.options : {};
if (options.kind !== "vip" || detail.reason === "replace") return;
cancelActivePurchase();
});
// 积分兑换入口(data-aksrt-vip-points-open)文档级委托:一处绑定同时覆盖
// 积分兑换入口(data-jio-vip-points-open)文档级委托:一处绑定同时覆盖
// /user/vip/ 页面静态输出的入口横条与会员购买弹窗内运行时注入的同款按钮
// (事件冒泡至 document,弹窗内不再单独挂监听)。
function bindPointsEntry() {
document.addEventListener("click", function (event) {
var pointsLink = event.target.closest ? event.target.closest("[data-aksrt-vip-points-open]") : null;
var pointsLink = event.target.closest ? event.target.closest("[data-jio-vip-points-open]") : null;
if (!pointsLink) return;
event.preventDefault();
openPointsModal(pointsLink);
@@ -867,13 +867,13 @@
}
function bindOnce() {
if (window.__aksrtPayVipBound) return;
window.__aksrtPayVipBound = true;
if (window.__jioPayVipBound) return;
window.__jioPayVipBound = true;
document.addEventListener("click", onDocClick, true);
bindPrefetch();
bindPointsModal();
bindPointsEntry();
}
jQuery(document).off("auto_fun.aksrt-pay-vip").on("auto_fun.aksrt-pay-vip", bindOnce);
jQuery(document).off("auto_fun.jio-pay-vip").on("auto_fun.jio-pay-vip", bindOnce);
})();