原来控制台打印 "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 假成功/不还原/删判据)
205 lines
6.2 KiB
JavaScript
205 lines
6.2 KiB
JavaScript
/*!
|
||
* 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()
|
||
}
|
||
}
|