Files
wordpress-kratos-yang/assets/js/kratos.js
T
laoyang c058ecc827 4.2.0 控制台标识改为 Kratos Yang + 当前版本号,版本号只剩一份真源 #35
原来控制台打印 "Kratos v3.1.8",硬编码在 assets/js/kratos.js 的
KRATOS_VERSION 变量里,只在 consoleConfig() 用一次。版本号的真源本来
就在 PHP 侧(functions.php 的 THEME_VERSION,读 style.css 的 Version:),
JS 里再存一份副本必然漂移 —— 主题已到 4.x,那里还停在 3.1.8,
用户在控制台看到的版本号落后 9 个小版本。

改法不是把 3.1.8 换成 4.2.0(下个版本还得再改一次),而是删掉这份副本:
inc/theme-core.php 的 wp_localize_script $data 数组里加 'version' => THEME_VERSION,
JS 从 window.kratos.version 取。wp_localize_script 在脚本标签之前注入,
所以 kratos.min.js 执行时它已经存在。

kratos.min.js 无构建脚本、是手工压缩产物,同步改了里面的字面量。
取不到版本号时只打印 "Kratos Yang",不凭空补默认值 —— 后台预览、
维护页等没走 wp_enqueue_scripts 的场景不该在控制台报错。

判据三层:
- _console421_check.py        23/0(静态两份 JS + PHP 注入 + node vm 真跑 min.js)
- _console421_falsify.py      6/6(含"只改源码不重压"、"硬编码成本版号")
- _console421_meta_falsify.py 5/5(判据恒绿/恒红/inject 假成功/不还原/删判据)
2026-10-28 18:23:36 +08:00

205 lines
6.2 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
/*!
* Kratos Yang
* Yongquan Yang <yangyq.net>
*/
; (function () {
'use strict'
/* 🔴 这里**故意不存**版本号。
*
* 历史上这里有个变量存着写死的旧版本号,只在下面 consoleConfig()
* 里用一次。问题是版本号的真源在 PHP 侧
* (functions.php 的 THEME_VERSION,读 style.css 的 `Version:`),
* JS 里再存一份副本,每次升版本都得记得改两处 —— 事实上那个数字
* 一直停在 3.1.x 没动过,主题已经 4.x 了,控制台还在报旧版本。
*
* 现在统一从 wp_localize_script 注入的 window.kratos.version 取
* (inc/theme-core.php 的 $data 数组),版本号只有一份。
*
* 注释里也不写具体版本数字:否则「文件里不许出现旧版本号」这类判据
* 都得先剥注释才能判,而剥注释本身就是常出错的一步。
*/
var navbarConfig = function () {
$('#navbutton').on('click', function () {
$('.navbar-toggler').toggleClass('nav-close')
})
}
var tooltipConfig = function () {
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
}
var gotopConfig = function () {
$(window).on('load', function () {
var $win = $(window)
if ($win.scrollTop() > 200) {
$('.gotop').addClass('active')
} else {
$('.gotop').removeClass('active')
}
$win.scroll(function () {
if ($win.scrollTop() > 200) {
$('.gotop').addClass('active')
} else {
$('.gotop').removeClass('active')
}
})
})
$('.gotop').on('click', function (event) {
event.preventDefault()
$('html, body').animate({
scrollTop: $('html').offset().top
}, 500)
return false
})
}
var searchConfig = function () {
$('.search').on('click', function (e) {
$('.search-form').animate({
width: '200px'
}, 200), $('.search-form input').css('display', 'block')
$(document).one('click', function () {
$('.search-form').animate({
width: '0'
}, 100), $('.search-form input').hide()
})
e.stopPropagation()
})
$('.search-form').on('click', function (e) {
e.stopPropagation()
})
}
var wechatConfig = function () {
$('.wechat').mouseout(function () {
$('.wechat-pic')[0].style.display = 'none'
})
$('.wechat').mouseover(function () {
$('.wechat-pic')[0].style.display = 'block'
})
}
var smiliesConfig = function () {
$('#addsmile').on("click", function (e) {
$('.smile').toggleClass('open')
$(document).one("click", function () {
$('.smile').toggleClass('open')
})
e.stopPropagation()
return false
})
}
var postlikeConfig = function () {
$.fn.postLike = function () {
if ($(this).hasClass('done')) {
layer.msg(kratos.repeat, function () { })
return false
} else {
$(this).addClass('done')
layer.msg(kratos.thanks)
var id = $(this).data("id"),
action = $(this).data('action')
var ajax_data = {
action: "love",
um_id: id,
um_action: action
}
$.post(kratos.site + '/wp-admin/admin-ajax.php', ajax_data, function (data) { })
return false
}
}
$(document).on("click", ".btn-thumbs", function () {
$(this).postLike()
})
}
var donateConfig = function () {
$("#donate").on('click', function () {
layer.open({
type: 1,
area: ['300px', '370px'],
title: kratos.donate,
resize: false,
scrollbar: false,
content: '<div class="donate-box"><div class="meta-pay text-center my-2"><strong>' + kratos.scan + '</strong></div><div class="qr-pay text-center"><img class="pay-img" id="alipay_qr" src="' + kratos.alipay + '"><img class="pay-img d-none" id="wechat_qr" src="' + kratos.wechat + '"></div><div class="choose-pay text-center mt-2"><input id="alipay" type="radio" name="pay-method" checked><label for="alipay" class="pay-button"><img src="' + kratos.directory + '/assets/img/payment/alipay.png"></label><input id="wechatpay" type="radio" name="pay-method"><label for="wechatpay" class="pay-button"><img src="' + kratos.directory + '/assets/img/payment/wechat.png"></label></div></div>'
})
$(".choose-pay input[type='radio']").click(function () {
var id = $(this).attr("id")
if (id == 'alipay') { $(".qr-pay #alipay_qr").removeClass('d-none'); $(".qr-pay #wechat_qr").addClass('d-none') };
if (id == 'wechatpay') { $(".qr-pay #alipay_qr").addClass('d-none'); $(".qr-pay #wechat_qr").removeClass('d-none') };
})
})
}
var accordionConfig = function () {
$(document).on('click', '.acheader', function (event) {
var $this = $(this)
$this.closest('.accordion').find('.contents').slideToggle(300)
if ($this.closest('.accordion').hasClass('active')) {
$this.closest('.accordion').removeClass('active')
} else {
$this.closest('.accordion').addClass('active')
}
event.preventDefault()
})
}
var consoleConfig = function () {
/* kratos 对象由 wp_localize_script 在脚本标签**之前**注入。
* 取不到就当没这个功能,绝不因为版本号缺失在控制台报错。
* (后台预览、维护页等场景可能没走 wp_enqueue_scripts) */
var ver = (window.kratos && window.kratos.version) || ''
console.log('\n Kratos Yang' + (ver ? ' v' + ver : '') + '\n\n https://code.yangyq.net/laoyang/wordpress-kratos-yang \n\n')
}
$(function () {
accordionConfig()
navbarConfig()
tooltipConfig()
gotopConfig()
searchConfig()
wechatConfig()
smiliesConfig()
postlikeConfig()
donateConfig()
consoleConfig()
})
}())
function grin (tag) {
var myField
tag = ' ' + tag + ' '
if (document.getElementById('comment') && document.getElementById('comment').type == 'textarea') {
myField = document.getElementById('comment')
} else {
return false
}
if (document.selection) {
myField.focus()
sel = document.selection.createRange()
sel.text = tag
myField.focus()
}
else if (myField.selectionStart || myField.selectionStart == '0') {
var startPos = myField.selectionStart
var endPos = myField.selectionEnd
var cursorPos = endPos
myField.value = myField.value.substring(0, startPos)
+ tag
+ myField.value.substring(endPos, myField.value.length)
cursorPos += tag.length
myField.focus()
myField.selectionStart = cursorPos
myField.selectionEnd = cursorPos
}
else {
myField.value += tag
myField.focus()
}
}