mirror of
https://ghfast.top/https://github.com/zsjy/halo-theme-dream2.0-plus.git
synced 2025-03-15 16:39:40 +08:00
新增:标签云侧边栏支持3D样式
This commit is contained in:
parent
ab3f936fb2
commit
66c8cedc76
@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "halo-theme-dream2.0",
|
"name": "halo-theme-dream2.0",
|
||||||
"version": "1.3.0",
|
"version": "1.3.1.1",
|
||||||
"description": "梦之城,童话梦境,动漫类型博客主题。",
|
"description": "梦之城,童话梦境,动漫类型博客主题。",
|
||||||
"main": "index.js",
|
"main": "index.js",
|
||||||
"author": "nineya",
|
"author": "nineya",
|
||||||
|
@ -935,6 +935,16 @@ spec:
|
|||||||
label: 开启
|
label: 开启
|
||||||
- value: false
|
- value: false
|
||||||
label: 关闭
|
label: 关闭
|
||||||
|
- $formkit: radio
|
||||||
|
name: show_tagcloud_style
|
||||||
|
label: 侧边栏标签云-标签云显示风格
|
||||||
|
help: '若未添加侧边栏标签云,建议保持默认风格。'
|
||||||
|
value: false
|
||||||
|
options:
|
||||||
|
- value: false
|
||||||
|
label: 默认
|
||||||
|
- value: true
|
||||||
|
label: 3D
|
||||||
- group: page_config
|
- group: page_config
|
||||||
label: '页面设置'
|
label: '页面设置'
|
||||||
formSchema:
|
formSchema:
|
||||||
|
@ -3117,6 +3117,13 @@ button.swiper-pagination-bullet {
|
|||||||
color: var(--dark-c) !important;
|
color: var(--dark-c) !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
&.tagcloud .tagcloud3d {
|
||||||
|
min-width: auto !important;
|
||||||
|
overflow: hidden !important;
|
||||||
|
margin: 0 auto;
|
||||||
|
min-height: 180px !important;
|
||||||
|
}
|
||||||
|
|
||||||
&.love {
|
&.love {
|
||||||
position: relative;
|
position: relative;
|
||||||
color: #fff;
|
color: #fff;
|
||||||
|
@ -442,7 +442,7 @@ const commonContext = {
|
|||||||
},
|
},
|
||||||
/* 激活侧边栏人生倒计时 */
|
/* 激活侧边栏人生倒计时 */
|
||||||
initTimeCount() {
|
initTimeCount() {
|
||||||
if (!$('.card.widget.timelife').length) {
|
if (!$('.timelife').length) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
let timelife = [
|
let timelife = [
|
||||||
@ -573,6 +573,22 @@ const commonContext = {
|
|||||||
DreamConfig.effects_universe_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/universe.min.js?mew=${DreamConfig.theme_version}`)
|
DreamConfig.effects_universe_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/universe.min.js?mew=${DreamConfig.theme_version}`)
|
||||||
DreamConfig.effects_circle_magic_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/circleMagic.min.js?mew=${DreamConfig.theme_version}`)
|
DreamConfig.effects_circle_magic_mode && Utils.cachedScript(`${DreamConfig.theme_base}/js/effects/circleMagic.min.js?mew=${DreamConfig.theme_version}`)
|
||||||
},
|
},
|
||||||
|
/*初始化标签云滚动样式*/
|
||||||
|
initTagCloud() {
|
||||||
|
if (!$('.tagcloud').length || !DreamConfig.show_tagcloud_style) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
tagcloud({
|
||||||
|
selector: '.tagcloud .card-content', //元素选择器
|
||||||
|
fontsize: 18, //基本字体大小, 单位px
|
||||||
|
radius: 75, //滚动半径, 单位px
|
||||||
|
mspeed: 'slow', //滚动最大速度, 取值: slow, normal(默认), fast
|
||||||
|
ispeed: 'slow', //滚动初速度, 取值: slow, normal(默认), fast
|
||||||
|
direction: 45, //初始滚动方向, 取值角度(顺时针360): 0对应top, 90对应left, 135对应right-bottom(默认)...
|
||||||
|
keep: false //鼠标移出组件后是否继续随鼠标滚动, 取值: false, true(默认) 对应 减速至初速度滚动, 随鼠标滚动
|
||||||
|
})
|
||||||
|
},
|
||||||
// /* 加载主动推送、统计脚本等参数 */
|
// /* 加载主动推送、统计脚本等参数 */
|
||||||
// loadMaintain() {
|
// loadMaintain() {
|
||||||
// DreamConfig.enable_baidu_push && Utils.baiduPush()
|
// DreamConfig.enable_baidu_push && Utils.baiduPush()
|
||||||
|
295
src/js/tagcloud.js
Normal file
295
src/js/tagcloud.js
Normal file
@ -0,0 +1,295 @@
|
|||||||
|
/*
|
||||||
|
* 3d标签云
|
||||||
|
* 功能:鼠标移入标签,当前标签静止放大
|
||||||
|
* 说明:
|
||||||
|
* */
|
||||||
|
window.tagcloud = (function (win, doc) { // ns
|
||||||
|
// 判断对象
|
||||||
|
function isObject(obj) {
|
||||||
|
return Object.prototype.toString.call(obj) === '[object Object]'
|
||||||
|
}
|
||||||
|
|
||||||
|
// 构造函数
|
||||||
|
function TagCloud(options) {
|
||||||
|
var self = this
|
||||||
|
|
||||||
|
self.config = TagCloud._getConfig(options)
|
||||||
|
self.box = self.config.element //组件元素
|
||||||
|
self.fontsize = self.config.fontsize //平均字体大小
|
||||||
|
self.radius = self.config.radius //滚动半径
|
||||||
|
self.depth = 2 * self.radius //滚动深度
|
||||||
|
self.size = 2 * self.radius //随鼠标滚动变速作用区域
|
||||||
|
|
||||||
|
self.mspeed = TagCloud._getMsSpeed(self.config.mspeed)
|
||||||
|
self.ispeed = TagCloud._getIsSpeed(self.config.ispeed)
|
||||||
|
self.items = self._getItems()
|
||||||
|
|
||||||
|
self.direction = self.config.direction //初始滚动方向
|
||||||
|
self.keep = self.config.keep //鼠标移出后是否保持之前滚动
|
||||||
|
|
||||||
|
//初始化
|
||||||
|
self.active = false //是否为激活状态
|
||||||
|
self.lasta = 1
|
||||||
|
self.lastb = 1
|
||||||
|
self.mouseX0 = self.ispeed * Math.sin(self.direction * Math.PI / 180) //鼠标与滚动圆心x轴初始距离
|
||||||
|
self.mouseY0 = -self.ispeed * Math.cos(self.direction * Math.PI / 180) //鼠标与滚动圆心y轴初始距离
|
||||||
|
self.mouseX = self.mouseX0 //鼠标与滚动圆心x轴距离
|
||||||
|
self.mouseY = self.mouseY0 //鼠标与滚动圆心y轴距离
|
||||||
|
self.index = -1
|
||||||
|
|
||||||
|
//鼠标移入
|
||||||
|
TagCloud._on(self.box, 'mouseover', function () {
|
||||||
|
self.active = true
|
||||||
|
})
|
||||||
|
//鼠标移出
|
||||||
|
TagCloud._on(self.box, 'mouseout', function () {
|
||||||
|
self.active = false
|
||||||
|
})
|
||||||
|
|
||||||
|
//鼠标在内移动
|
||||||
|
TagCloud._on(self.keep ? win : self.box, 'mousemove', function (ev) {
|
||||||
|
var oEvent = win.event || ev
|
||||||
|
var boxPosition = self.box.getBoundingClientRect()
|
||||||
|
self.mouseX = (oEvent.clientX - (boxPosition.left + self.box.offsetWidth / 2)) / 5
|
||||||
|
self.mouseY = (oEvent.clientY - (boxPosition.top + self.box.offsetHeight / 2)) / 5
|
||||||
|
})
|
||||||
|
|
||||||
|
for (var j = 0, len = self.items.length; j < len; j++) {
|
||||||
|
self.items[j].element.index = j
|
||||||
|
|
||||||
|
//鼠标移出子元素,当前元素静止放大
|
||||||
|
self.items[j].element.onmouseover = function () {
|
||||||
|
self.index = this.index
|
||||||
|
}
|
||||||
|
|
||||||
|
//鼠标移出子元素,当前元素继续滚动
|
||||||
|
self.items[j].element.onmouseout = function () {
|
||||||
|
self.index = -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//定时更新
|
||||||
|
TagCloud.boxs.push(self.box)
|
||||||
|
self.update(self) //初始更新
|
||||||
|
self.box.style.visibility = 'visible'
|
||||||
|
self.box.style.position = 'relative'
|
||||||
|
self.box.style.minHeight = 1.2 * self.size + 'px'
|
||||||
|
self.box.style.minWidth = 2.5 * self.size + 'px'
|
||||||
|
for (var j2 = 0, len2 = self.items.length; j2 < len2; j2++) {
|
||||||
|
self.items[j2].element.style.position = 'absolute'
|
||||||
|
self.items[j2].element.style.zIndex = j2 + 1
|
||||||
|
}
|
||||||
|
self.up = setInterval(function () {
|
||||||
|
self.update(self)
|
||||||
|
}, 25)
|
||||||
|
}
|
||||||
|
|
||||||
|
//实例
|
||||||
|
TagCloud.boxs = [] //实例元素数组
|
||||||
|
// 静态方法们
|
||||||
|
TagCloud._set = function (element) {
|
||||||
|
if (TagCloud.boxs.indexOf(element) === -1) {//ie8不支持数组的indexOf方法
|
||||||
|
return true
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//添加数组IndexOf方法
|
||||||
|
if (!Array.prototype.indexOf) {
|
||||||
|
Array.prototype.indexOf = function (elt /*, from*/) {
|
||||||
|
var len = this.length >>> 0
|
||||||
|
var from = Number(arguments[1]) || 0
|
||||||
|
from = (from < 0)
|
||||||
|
? Math.ceil(from)
|
||||||
|
: Math.floor(from)
|
||||||
|
if (from < 0)
|
||||||
|
from += len
|
||||||
|
|
||||||
|
for (; from < len; from++) {
|
||||||
|
if (from in this && this[from] === elt)
|
||||||
|
return from
|
||||||
|
}
|
||||||
|
return -1
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
TagCloud._getConfig = function (config) {
|
||||||
|
var defaultConfig = { //默认值
|
||||||
|
fontsize: 16, //基本字体大小, 单位px
|
||||||
|
radius: 60, //滚动半径, 单位px
|
||||||
|
mspeed: 'normal', //滚动最大速度, 取值: slow, normal(默认), fast
|
||||||
|
ispeed: 'normal', //滚动初速度, 取值: slow, normal(默认), fast
|
||||||
|
direction: 135, //初始滚动方向, 取值角度(顺时针360): 0对应top, 90对应left, 135对应right-bottom(默认)...
|
||||||
|
keep: true //鼠标移出组件后是否继续随鼠标滚动, 取值: false, true(默认) 对应 减速至初速度滚动, 随鼠标滚动
|
||||||
|
}
|
||||||
|
|
||||||
|
if (isObject(config)) {
|
||||||
|
for (var i in config) {
|
||||||
|
// eslint-disable-next-line no-prototype-builtins
|
||||||
|
if (Object.prototype.hasOwnProperty.call(config, i)) {//hasOwnProperty()用来判断一个属性是定义在对象本身而不是继承自原型链//config.hasOwnProperty(i)
|
||||||
|
defaultConfig[i] = config[i] //用户配置
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return defaultConfig// 配置 Merge
|
||||||
|
}
|
||||||
|
TagCloud._getMsSpeed = function (mspeed) { //滚动最大速度
|
||||||
|
var speedMap = {
|
||||||
|
slow: 1.5,
|
||||||
|
normal: 3,
|
||||||
|
fast: 5
|
||||||
|
}
|
||||||
|
return speedMap[mspeed] || 3
|
||||||
|
}
|
||||||
|
TagCloud._getIsSpeed = function (ispeed) { //滚动初速度
|
||||||
|
var speedMap = {
|
||||||
|
slow: 10,
|
||||||
|
normal: 25,
|
||||||
|
fast: 50
|
||||||
|
}
|
||||||
|
return speedMap[ispeed] || 25
|
||||||
|
}
|
||||||
|
TagCloud._getSc = function (a, b) {
|
||||||
|
var l = Math.PI / 180
|
||||||
|
//数组顺序0,1,2,3表示asin,acos,bsin,bcos
|
||||||
|
return [
|
||||||
|
Math.sin(a * l),
|
||||||
|
Math.cos(a * l),
|
||||||
|
Math.sin(b * l),
|
||||||
|
Math.cos(b * l)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
TagCloud._on = function (ele, eve, handler, cap) {
|
||||||
|
if (ele.addEventListener) {
|
||||||
|
ele.addEventListener(eve, handler, cap)
|
||||||
|
} else if (ele.attachEvent) {
|
||||||
|
ele.attachEvent('on' + eve, handler)
|
||||||
|
} else {
|
||||||
|
ele['on' + eve] = handler
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// 原型方法
|
||||||
|
TagCloud.prototype = {
|
||||||
|
constructor: TagCloud, // 反向引用构造器
|
||||||
|
|
||||||
|
update: function () {
|
||||||
|
var self = this, a, b
|
||||||
|
|
||||||
|
if (!self.active && !self.keep) {
|
||||||
|
self.mouseX = Math.abs(self.mouseX - self.mouseX0) < 1 ? self.mouseX0 : (self.mouseX + self.mouseX0) / 2 //重置鼠标与滚动圆心x轴距离
|
||||||
|
self.mouseY = Math.abs(self.mouseY - self.mouseY0) < 1 ? self.mouseY0 : (self.mouseY + self.mouseY0) / 2 //重置鼠标与滚动圆心y轴距离
|
||||||
|
}
|
||||||
|
|
||||||
|
a = -(Math.min(Math.max(-self.mouseY, -self.size), self.size) / self.radius) * self.mspeed
|
||||||
|
b = (Math.min(Math.max(-self.mouseX, -self.size), self.size) / self.radius) * self.mspeed
|
||||||
|
|
||||||
|
if (Math.abs(a) <= 0.01 && Math.abs(b) <= 0.01) {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
self.lasta = a
|
||||||
|
self.lastb = b
|
||||||
|
|
||||||
|
var sc = TagCloud._getSc(a, b)
|
||||||
|
|
||||||
|
for (var j = 0, len = self.items.length; j < len; j++) {
|
||||||
|
|
||||||
|
var rx1 = self.items[j].x,
|
||||||
|
ry1 = self.items[j].y * sc[1] + self.items[j].z * (-sc[0]),
|
||||||
|
rz1 = self.items[j].y * sc[0] + self.items[j].z * sc[1]
|
||||||
|
|
||||||
|
var rx2 = rx1 * sc[3] + rz1 * sc[2],
|
||||||
|
rz2 = rz1 * sc[3] - rx1 * sc[2]
|
||||||
|
|
||||||
|
if (self.index === j) {
|
||||||
|
|
||||||
|
self.items[j].scale = 1 //取值范围0.6 ~ 3
|
||||||
|
self.items[j].fontsize = 16
|
||||||
|
self.items[j].alpha = 1
|
||||||
|
self.items[j].element.style.zIndex = 99
|
||||||
|
} else {
|
||||||
|
var per = self.depth / (self.depth + rz2)
|
||||||
|
self.items[j].x = rx2
|
||||||
|
self.items[j].y = ry1
|
||||||
|
self.items[j].z = rz2
|
||||||
|
|
||||||
|
self.items[j].scale = per //取值范围0.6 ~ 3
|
||||||
|
self.items[j].fontsize = Math.ceil(per * 2) + self.fontsize - 6
|
||||||
|
self.items[j].alpha = 1.5 * per - 0.5
|
||||||
|
self.items[j].element.style.zIndex = Math.ceil(per * 10 - 5)
|
||||||
|
}
|
||||||
|
self.items[j].element.style.fontSize = self.items[j].fontsize + 'px'
|
||||||
|
self.items[j].element.style.left = self.items[j].x + (self.box.offsetWidth - self.items[j].offsetWidth) / 2 + 'px'
|
||||||
|
self.items[j].element.style.top = self.items[j].y + (self.box.offsetHeight - self.items[j].offsetHeight) / 2 + 'px'
|
||||||
|
self.items[j].element.style.filter = 'alpha(opacity=' + 100 * self.items[j].alpha + ')'
|
||||||
|
self.items[j].element.style.opacity = self.items[j].alpha
|
||||||
|
}
|
||||||
|
},
|
||||||
|
|
||||||
|
_getItems: function () {
|
||||||
|
var self = this,
|
||||||
|
items = [],
|
||||||
|
element = self.box.children, // children 全部是Element
|
||||||
|
length = element.length,
|
||||||
|
item
|
||||||
|
|
||||||
|
for (var i = 0; i < length; i++) {
|
||||||
|
item = {}
|
||||||
|
item.angle = {}
|
||||||
|
item.angle.phi = Math.acos(-1 + (2 * i + 1) / length)
|
||||||
|
item.angle.theta = Math.sqrt((length + 1) * Math.PI) * item.angle.phi
|
||||||
|
item.element = element[i]
|
||||||
|
item.offsetWidth = item.element.offsetWidth
|
||||||
|
item.offsetHeight = item.element.offsetHeight
|
||||||
|
item.x = self.radius * 1.5 * Math.cos(item.angle.theta) * Math.sin(item.angle.phi)
|
||||||
|
item.y = self.radius * 1.5 * Math.sin(item.angle.theta) * Math.sin(item.angle.phi)
|
||||||
|
item.z = self.radius * 1.5 * Math.cos(item.angle.phi)
|
||||||
|
item.element.style.left = item.x + (self.box.offsetWidth - item.offsetWidth) / 2 + 'px'
|
||||||
|
item.element.style.top = item.y + (self.box.offsetHeight - item.offsetHeight) / 2 + 'px'
|
||||||
|
items.push(item)
|
||||||
|
}
|
||||||
|
|
||||||
|
return items //单元素数组
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!doc.querySelectorAll) {//ie7不支持querySelectorAll,所以要重新定义
|
||||||
|
doc.querySelectorAll = function (selectors) {
|
||||||
|
var style = doc.createElement('style'), elements = [], element
|
||||||
|
doc.documentElement.firstChild.appendChild(style)
|
||||||
|
doc._qsa = []
|
||||||
|
|
||||||
|
style.styleSheet.cssText = selectors + '{x-qsa:expression(document._qsa && document._qsa.push(this))}'
|
||||||
|
window.scrollBy(0, 0)
|
||||||
|
style.parentNode.removeChild(style)
|
||||||
|
|
||||||
|
while (doc._qsa.length) {
|
||||||
|
element = doc._qsa.shift()
|
||||||
|
element.style.removeAttribute('x-qsa')
|
||||||
|
elements.push(element)
|
||||||
|
}
|
||||||
|
doc._qsa = null
|
||||||
|
return elements
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return function (options) { // factory
|
||||||
|
options = options || {} // 短路语法
|
||||||
|
var selector = options.selector || '.tagcloud', //默认选择class为tagcloud的元素
|
||||||
|
elements = doc.querySelectorAll(selector),
|
||||||
|
instance = []
|
||||||
|
for (var index = 0, len = elements.length; index < len; index++) {
|
||||||
|
options.element = elements[index]
|
||||||
|
if (TagCloud._set(options.element)) {
|
||||||
|
instance.push(new TagCloud(options))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return instance
|
||||||
|
}
|
||||||
|
|
||||||
|
})(window, document)
|
2
templates/assets/css/style.min.css
vendored
2
templates/assets/css/style.min.css
vendored
File diff suppressed because one or more lines are too long
2
templates/assets/js/btoc.min.js
vendored
2
templates/assets/js/btoc.min.js
vendored
@ -1 +1 @@
|
|||||||
(()=>{function s(t,e){this.tocList=t,this.elementList=function t(e,n){if(null==e)return null;var i=e.children;if(0===i.length)return null;for(var s=[],o=0;o<i.length;o++){var l=i[o];-1!==n.indexOf(l.tagName)&&s.push(l),s.push.apply(s,t(l,n))}return s}(e,this.tocList),this.eIndex=0,this.build=function(){return null==this.elementList||0===this.elementList.length?"":this.analysis(-1,this.tocList.indexOf(this.elementList[this.eIndex].tagName))},this.analysis=function(t,e){for(var n="<ul class='menu-list'>";this.eIndex<this.elementList.length;){var i=this.elementList[this.eIndex],s=this.tocList.indexOf(i.tagName);if(t<s&&s<=e){e=s;var o=i.id,l=i.innerText;if(null!=o&&""!==o||(o=l+"_"+this.eIndex,i.setAttribute("id",o)),n+=`<li><a data-id="#${o}"><i class="ri-attachment-2"></i>${l}</a>`,this.eIndex++,this.eIndex>=this.elementList.length){n+="</li>";break}(s=this.tocList.indexOf(this.elementList[this.eIndex].tagName))>e&&(n+=this.analysis(e,s)),n+="</li>"}else if(s<=t)break}return n+"</ul>"}}const r=[];function t(t){const i=new Set,s=new Map,o=Array.from(t.querySelectorAll(".menu-list > li > a"));for(const t of o){const r=t.getAttribute("data-id").trim().slice(1),i=document.getElementById(r);i&&s.set(i,t)}const l=Array.from(s.keys()),e=new IntersectionObserver(e=>{for(const n of e)n.isIntersecting?i.add(n.target):i.delete(n.target);let n;if(i.size?n=[...i].sort((t,e)=>t.offsetTop-e.offsetTop)[0]:l.length&&(n=l.filter(t=>t.offsetTop<window.scrollY).sort((t,e)=>e.offsetTop-t.offsetTop)[0]),n&&s.has(n)){o.forEach(t=>t.classList.remove("is-active"));const e=s.get(n);e.classList.add("is-active");let t=e.parentElement.parentElement;for(;t.classList.contains("menu-list")&&"li"===t.parentElement.tagName.toLowerCase();)t.parentElement.children[0].classList.add("is-active"),t=t.parentElement.parentElement}},{threshold:0});for(const t of l){if(e.observe(t),s.has(t)){const r=s.get(t);r.addEventListener("click",()=>{let n,t=document.getElementById(r.getAttribute("data-id").substring(1)).getBoundingClientRect(),i=window.pageYOffset,s=i+t.top-50,o=(s-i)/20,l=i>s?-1:1;window.requestAnimationFrame(function t(e){(i+=o)*l<s*l?(window.scrollTo(0,i),n=window.requestAnimationFrame(t)):(window.scrollTo(0,s),window.cancelAnimationFrame(n))})})}s.has(t)&&(t.style.scrollMargin="1em")}r.push(e)}s.init=function(t){var e=t.tocList,n=t.contentElement,t=t.tocElement;if(null==e||0===e.length||null==n)return $(t).children().remove(),!1;for(var i=0;i<e.length;i++)e[i]=e[i].toUpperCase();n=new s(e,n).build();$(t).html(n)},window.tocPjax=function(){r.forEach(t=>{t.disconnect()}),r.splice(0),s.init({tocList:["h1","h2","h3","h4","h5"],contentElement:$(".main-content:not(.not-toc)")[0],tocElement:".toc-content"}),void 0!==window.IntersectionObserver&&document.querySelectorAll(".toc-content").forEach(t)}})();
|
(()=>{function s(t,e){this.tocList=t,this.elementList=function t(e,n){if(null==e)return null;var i=e.children;if(0===i.length)return null;for(var s=[],o=0;o<i.length;o++){var l=i[o];-1!==n.indexOf(l.tagName)&&s.push(l),s.push.apply(s,t(l,n))}return s}(e,this.tocList),this.eIndex=0,this.build=function(){return null==this.elementList||0===this.elementList.length?"":this.analysis(-1,this.tocList.indexOf(this.elementList[this.eIndex].tagName))},this.analysis=function(t,e){for(var n="<ul class='menu-list'>";this.eIndex<this.elementList.length;){var i=this.elementList[this.eIndex],s=this.tocList.indexOf(i.tagName);if(t<s&&s<=e){e=s;var o=i.id,l=i.innerText;if(null!=o&&""!==o||(o=l+"_"+this.eIndex,i.setAttribute("id",o)),n+=`<li><a data-id="#${o}"><i class="ri-attachment-2"></i>${l}</a>`,this.eIndex++,this.eIndex>=this.elementList.length){n+="</li>";break}(s=this.tocList.indexOf(this.elementList[this.eIndex].tagName))>e&&(n+=this.analysis(e,s)),n+="</li>"}else if(s<=t)break}return n+"</ul>"}}const r=[];function t(t){const i=new Set,s=new Map,o=Array.from(t.querySelectorAll(".menu-list > li > a"));for(const t of o){const r=t.getAttribute("data-id").trim().slice(1),i=document.getElementById(r);i&&s.set(i,t)}const l=Array.from(s.keys()),e=new IntersectionObserver(e=>{for(const n of e)n.isIntersecting?i.add(n.target):i.delete(n.target);let n;if(i.size?n=[...i].sort((t,e)=>t.offsetTop-e.offsetTop)[0]:l.length&&(n=l.filter(t=>t.offsetTop<window.scrollY).sort((t,e)=>e.offsetTop-t.offsetTop)[0]),n&&s.has(n)){o.forEach(t=>t.classList.remove("is-active"));const e=s.get(n);e.classList.add("is-active");let t=e.parentElement.parentElement;for(;t.classList.contains("menu-list")&&"li"===t.parentElement.tagName.toLowerCase();)t.parentElement.children[0].classList.add("is-active"),t=t.parentElement.parentElement}},{threshold:0});for(const t of l){if(e.observe(t),s.has(t)){const r=s.get(t);r.addEventListener("click",()=>{let n,t=document.getElementById(r.getAttribute("data-id").substring(1)).getBoundingClientRect(),i=window.pageYOffset,s=i+t.top-50,o=(s-i)/20,l=i>s?-1:1;window.requestAnimationFrame(function t(e){(i+=o)*l<s*l?(window.scrollTo(0,i),n=window.requestAnimationFrame(t)):(window.scrollTo(0,s),window.cancelAnimationFrame(n))})})}s.has(t)&&(t.style.scrollMargin="1em")}r.push(e)}s.init=function(t){var e=t.tocList,n=t.contentElement,t=t.tocElement;if(null==e||0===e.length||null==n)return $(t).children().remove(),!1;for(var i=0;i<e.length;i++)e[i]=e[i].toUpperCase();n=new s(e,n).build();$(t).html(n)},window.tocPjax=function(){r.forEach(t=>{t.disconnect()}),r.splice(0),s.init({tocList:["h1","h2","h3","h4","h5","h6"],contentElement:$(".main-content:not(.not-toc)")[0],tocElement:".toc-content"}),void 0!==window.IntersectionObserver&&document.querySelectorAll(".toc-content").forEach(t)}})();
|
4
templates/assets/js/common.min.js
vendored
4
templates/assets/js/common.min.js
vendored
File diff suppressed because one or more lines are too long
2
templates/assets/js/dshare.min.js
vendored
2
templates/assets/js/dshare.min.js
vendored
File diff suppressed because one or more lines are too long
2
templates/assets/js/effects/lantern.min.js
vendored
2
templates/assets/js/effects/lantern.min.js
vendored
File diff suppressed because one or more lines are too long
1
templates/assets/js/tagcloud.min.js
vendored
Normal file
1
templates/assets/js/tagcloud.min.js
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
window.tagcloud=function(a,l){function u(e){var s=this;s.config=u._getConfig(e),s.box=s.config.element,s.fontsize=s.config.fontsize,s.radius=s.config.radius,s.depth=2*s.radius,s.size=2*s.radius,s.mspeed=u._getMsSpeed(s.config.mspeed),s.ispeed=u._getIsSpeed(s.config.ispeed),s.items=s._getItems(),s.direction=s.config.direction,s.keep=s.config.keep,s.active=!1,s.lasta=1,s.lastb=1,s.mouseX0=s.ispeed*Math.sin(s.direction*Math.PI/180),s.mouseY0=-s.ispeed*Math.cos(s.direction*Math.PI/180),s.mouseX=s.mouseX0,s.mouseY=s.mouseY0,s.index=-1,u._on(s.box,"mouseover",function(){s.active=!0}),u._on(s.box,"mouseout",function(){s.active=!1}),u._on(s.keep?a:s.box,"mousemove",function(e){var e=a.event||e,t=s.box.getBoundingClientRect();s.mouseX=(e.clientX-(t.left+s.box.offsetWidth/2))/5,s.mouseY=(e.clientY-(t.top+s.box.offsetHeight/2))/5});for(var t=0,i=s.items.length;t<i;t++)s.items[t].element.index=t,s.items[t].element.onmouseover=function(){s.index=this.index},s.items[t].element.onmouseout=function(){s.index=-1};u.boxs.push(s.box),s.update(s),s.box.style.visibility="visible",s.box.style.position="relative",s.box.style.minHeight=1.2*s.size+"px",s.box.style.minWidth=2.5*s.size+"px";for(var o=0,n=s.items.length;o<n;o++)s.items[o].element.style.position="absolute",s.items[o].element.style.zIndex=o+1;s.up=setInterval(function(){s.update(s)},25)}return u.boxs=[],u._set=function(e){if(-1===u.boxs.indexOf(e))return!0},Array.prototype.indexOf||(Array.prototype.indexOf=function(e){var t=this.length>>>0,s=Number(arguments[1])||0;for((s=s<0?Math.ceil(s):Math.floor(s))<0&&(s+=t);s<t;s++)if(s in this&&this[s]===e)return s;return-1}),u._getConfig=function(e){var t={fontsize:16,radius:60,mspeed:"normal",ispeed:"normal",direction:135,keep:!0};if("[object Object]"===Object.prototype.toString.call(e))for(var s in e)Object.prototype.hasOwnProperty.call(e,s)&&(t[s]=e[s]);return t},u._getMsSpeed=function(e){return{slow:1.5,normal:3,fast:5}[e]||3},u._getIsSpeed=function(e){return{slow:10,normal:25,fast:50}[e]||25},u._getSc=function(e,t){var s=Math.PI/180;return[Math.sin(e*s),Math.cos(e*s),Math.sin(t*s),Math.cos(t*s)]},u._on=function(e,t,s,i){e.addEventListener?e.addEventListener(t,s,i):e.attachEvent?e.attachEvent("on"+t,s):e["on"+t]=s},u.prototype={constructor:u,update:function(){var e,t,s=this;if(s.active||s.keep||(s.mouseX=Math.abs(s.mouseX-s.mouseX0)<1?s.mouseX0:(s.mouseX+s.mouseX0)/2,s.mouseY=Math.abs(s.mouseY-s.mouseY0)<1?s.mouseY0:(s.mouseY+s.mouseY0)/2),e=-Math.min(Math.max(-s.mouseY,-s.size),s.size)/s.radius*s.mspeed,t=Math.min(Math.max(-s.mouseX,-s.size),s.size)/s.radius*s.mspeed,!(Math.abs(e)<=.01&&Math.abs(t)<=.01)){s.lasta=e,s.lastb=t;for(var i=u._getSc(e,t),o=0,n=s.items.length;o<n;o++){var a=s.items[o].x,l=s.items[o].y*i[1]+s.items[o].z*-i[0],m=s.items[o].y*i[0]+s.items[o].z*i[1],r=a*i[3]+m*i[2],m=m*i[3]-a*i[2];s.index===o?(s.items[o].scale=1,s.items[o].fontsize=16,s.items[o].alpha=1,s.items[o].element.style.zIndex=99):(a=s.depth/(s.depth+m),s.items[o].x=r,s.items[o].y=l,s.items[o].z=m,s.items[o].scale=a,s.items[o].fontsize=Math.ceil(2*a)+s.fontsize-6,s.items[o].alpha=1.5*a-.5,s.items[o].element.style.zIndex=Math.ceil(10*a-5)),s.items[o].element.style.fontSize=s.items[o].fontsize+"px",s.items[o].element.style.left=s.items[o].x+(s.box.offsetWidth-s.items[o].offsetWidth)/2+"px",s.items[o].element.style.top=s.items[o].y+(s.box.offsetHeight-s.items[o].offsetHeight)/2+"px",s.items[o].element.style.filter="alpha(opacity="+100*s.items[o].alpha+")",s.items[o].element.style.opacity=s.items[o].alpha}}},_getItems:function(){for(var e,t=this,s=[],i=t.box.children,o=i.length,n=0;n<o;n++)(e={}).angle={},e.angle.phi=Math.acos((2*n+1)/o-1),e.angle.theta=Math.sqrt((o+1)*Math.PI)*e.angle.phi,e.element=i[n],e.offsetWidth=e.element.offsetWidth,e.offsetHeight=e.element.offsetHeight,e.x=1.5*t.radius*Math.cos(e.angle.theta)*Math.sin(e.angle.phi),e.y=1.5*t.radius*Math.sin(e.angle.theta)*Math.sin(e.angle.phi),e.z=1.5*t.radius*Math.cos(e.angle.phi),e.element.style.left=e.x+(t.box.offsetWidth-e.offsetWidth)/2+"px",e.element.style.top=e.y+(t.box.offsetHeight-e.offsetHeight)/2+"px",s.push(e);return s}},l.querySelectorAll||(l.querySelectorAll=function(e){var t,s=l.createElement("style"),i=[];for(l.documentElement.firstChild.appendChild(s),l._qsa=[],s.styleSheet.cssText=e+"{x-qsa:expression(document._qsa && document._qsa.push(this))}",window.scrollBy(0,0),s.parentNode.removeChild(s);l._qsa.length;)(t=l._qsa.shift()).style.removeAttribute("x-qsa"),i.push(t);return l._qsa=null,i}),function(e){for(var t=(e=e||{}).selector||".tagcloud",s=l.querySelectorAll(t),i=[],o=0,n=s.length;o<n;o++)e.element=s[o],u._set(e.element)&&i.push(new u(e));return i}}(window,document);
|
@ -100,6 +100,8 @@
|
|||||||
DreamConfig["effects_lantern_left"] = effects_lantern_left;
|
DreamConfig["effects_lantern_left"] = effects_lantern_left;
|
||||||
DreamConfig["effects_lantern_right"] = effects_lantern_right;
|
DreamConfig["effects_lantern_right"] = effects_lantern_right;
|
||||||
|
|
||||||
|
DreamConfig["show_tagcloud_style"] = [[${theme.config.sidebar.show_tagcloud_style}]];
|
||||||
|
|
||||||
DreamConfig["theme_version"] = [[${theme.spec.version}]];
|
DreamConfig["theme_version"] = [[${theme.spec.version}]];
|
||||||
DreamConfig["theme_base"] = "[(${#theme.assets('/')})]";
|
DreamConfig["theme_base"] = "[(${#theme.assets('/')})]";
|
||||||
[(${!#strings.isEmpty(theme.config.post.code_fold_line)?'DreamConfig["code_fold_line"] = "' + theme.config.post.code_fold_line + '";': ''})]
|
[(${!#strings.isEmpty(theme.config.post.code_fold_line)?'DreamConfig["code_fold_line"] = "' + theme.config.post.code_fold_line + '";': ''})]
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
<script th:src="@{/assets/js/btoc.min.js(mew=${theme.spec.version})}"></script>
|
<script th:src="@{/assets/js/btoc.min.js(mew=${theme.spec.version})}"></script>
|
||||||
<script th:if="${isFirstIndex == true && !#lists.isEmpty(theme.config.basic_style.carousel_options)}" data-pjax
|
<script th:if="${isFirstIndex == true && !#lists.isEmpty(theme.config.basic_style.carousel_options)}" data-pjax
|
||||||
th:src="@{/assets/lib/swiper@8.4.6/swiper-bundle.min.js}"></script>
|
th:src="@{/assets/lib/swiper@8.4.6/swiper-bundle.min.js}"></script>
|
||||||
|
<script th:if="${theme.config.sidebar.show_tagcloud_style}" th:src="@{/assets/js/tagcloud.min.js(mew=${theme.spec.version})}"></script>
|
||||||
<script th:src="@{/assets/js/common.min.js(mew=${theme.spec.version})}"></script>
|
<script th:src="@{/assets/js/common.min.js(mew=${theme.spec.version})}"></script>
|
||||||
|
|
||||||
<th:block th:if="${isPost}">
|
<th:block th:if="${isPost}">
|
||||||
|
@ -4,14 +4,15 @@
|
|||||||
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 32 : T(java.lang.Integer).parseInt(theme.config.sidebar.tags_num)},
|
th:with="num = ${#strings.isEmpty(theme.config.sidebar.tags_num)? 32 : T(java.lang.Integer).parseInt(theme.config.sidebar.tags_num)},
|
||||||
tags = ${tagFinder.list(1,num)},
|
tags = ${tagFinder.list(1,num)},
|
||||||
isEmpty = ${#lists.isEmpty(tags)},
|
isEmpty = ${#lists.isEmpty(tags)},
|
||||||
enableTagsColor = ${theme.config.sidebar.enable_tag_color}">
|
enableTagsColor = ${theme.config.sidebar.enable_tagcloud_color},
|
||||||
|
showTagCloudStyle = ${theme.config.sidebar.show_tagcloud_style}">
|
||||||
|
|
||||||
<div class="card-title">
|
<div class="card-title">
|
||||||
<i class="ri-cloud-line card-title-label"></i><span>标签云</span>
|
<i class="ri-cloud-line card-title-label"></i><span>标签云</span>
|
||||||
<a th:if="${theme.config.sidebar.tagcloud_more}" class="card-more" th:href="@{/tags}">更多<i class="ri-arrow-right-double-line"></i></a>
|
<a th:if="${theme.config.sidebar.tagcloud_more}" class="card-more" th:href="@{/tags}">更多<i class="ri-arrow-right-double-line"></i></a>
|
||||||
</div>
|
</div>
|
||||||
<div th:if="${isEmpty}" class="card-empty">暂无标签</div>
|
<div th:if="${isEmpty}" class="card-empty">暂无标签</div>
|
||||||
<div th:unless="${isEmpty}" class="card-content">
|
<div th:unless="${isEmpty}" th:class="'card-content' + ${showTagCloudStyle ? ' tagcloud3d' : ''}">
|
||||||
<a
|
<a
|
||||||
th:each="tag : ${tags}"
|
th:each="tag : ${tags}"
|
||||||
th:href="@{${tag.status.permalink}}"
|
th:href="@{${tag.status.permalink}}"
|
||||||
|
@ -22,6 +22,6 @@ spec:
|
|||||||
settingName: theme-dream-setting
|
settingName: theme-dream-setting
|
||||||
configMapName: theme-dream-configMap
|
configMapName: theme-dream-configMap
|
||||||
# 版本号
|
# 版本号
|
||||||
version: 1.3.0.5000001
|
version: 1.3.1.1
|
||||||
# 最低支持的 Halo 版本
|
# 最低支持的 Halo 版本
|
||||||
require: ">=2.0.0"
|
require: ">=2.0.0"
|
Loading…
x
Reference in New Issue
Block a user