mirror of
https://ghfast.top/https://github.com/zsjy/halo-theme-dream2.0-plus.git
synced 2025-03-16 12:29:41 +08:00
1 line
8.5 KiB
JavaScript
1 line
8.5 KiB
JavaScript
(()=>{var __webpack_modules__={"./src/js/post.js":()=>{eval("let postContextInitial = false\r\nconst postContext = {\r\n /* 初始化代码块 */\r\n initCodeBlock() {\r\n const $code = $('*:not(figure) > pre > code')\r\n if ($code.length === 0) return\r\n $code.each(function (index) {\r\n const $pre = $(this).parent()\r\n let clazz = $(this).attr('class')\r\n // 通过class初始化代码块标题和是否默认关闭\r\n let title = ''\r\n let lines = false\r\n let isClose = false\r\n if (clazz != null) {\r\n let str1 = clazz.match(/[|<](.*)$/)\r\n let str2 = clazz.match(/:select/)\r\n if (str1 || str2) {\r\n let num = 0\r\n if (str2) {\r\n num = str2.index\r\n if (str1) {\r\n if (str1[1].endsWith(str2[0])) {\r\n str1[1] = str1[1].substring(0, str1[1].length - str2[0].length)\r\n }\r\n } else {\r\n title = clazz.substring(9, str2.index)\r\n }\r\n lines = true\r\n }\r\n if (str1) {\r\n num = str1.index < num ? str1.index : num\r\n if (str1[0][0] === '<') {\r\n isClose = true\r\n }\r\n title = str1[1]\r\n }\r\n $(this).attr('class', clazz.substring(0, num))\r\n if (!title) title = clazz.substring(9, num)\r\n } else {\r\n title = clazz.substring(9)\r\n }\r\n }\r\n // 生成行号\r\n let codes = $(this).text().split('\\n') || []\r\n let nums = codes.length\r\n let lineDigit = String(nums).length\r\n if (lineDigit === 1) lineDigit = 2\r\n let lis = ''\r\n for (var i = 0; i < nums; i++) {\r\n lis += `<li ${(lines && /^\\s*\\|\\+\\s+/.test(codes[i]))? 'class=\"code-select\"' : ''}>${String(i + 1).padStart(lineDigit, 0)}</li>`\r\n }\r\n if (lines) {\r\n $(this).text($(this).text().replace(/(^\\s*)\\|\\+\\s/gm,'$1'))\r\n }\r\n // 代码块的id,用于代码块复制和折叠\r\n let id = `codeBlock${index}-${new Date().getTime()}`\r\n let close = ''\r\n if (isClose) {\r\n close = ' close'\r\n $(this).parent().hide()\r\n }\r\n // 生成标题栏的按钮\r\n let titleButton = `<div><i class=\"ri-arrow-down-s-line${close}\" data-code='#${id}'></i><i class=\"ri-file-copy-2-line btn-clipboard\" title=\"复制代码\" data-clipboard-target='#${id}'></i></div>`\r\n\r\n // 组装代码块\r\n $(this).attr('id', id)\r\n $pre.prepend(`<ul>${lis}</ul>`)\r\n if (nums > DreamConfig.code_fold_line) {\r\n $pre.wrap('<figure class=\"fold hljs\"></figure>').append('<div class=\"expand-done\"><i class=\"ri-arrow-up-double-line\"></i></div>')\r\n } else {\r\n $pre.wrap('<figure class=\"hljs\"></figure>')\r\n }\r\n $pre.parent().prepend(`<figcaption>${title}${titleButton}</figcaption>`)\r\n })\r\n },\r\n /* 初始化文艺模式 */\r\n initLiterature() {\r\n $('.literature-content>p:not([class]),.literature-content>mew-hide>p:not([class])').each(function () {\r\n if ($(this).children(':not(code,a,strong,em,ins,b,s,br,span.pwd)').length === 0) {\r\n $(this).addClass('note')\r\n }\r\n })\r\n },\r\n /* 初始化喜欢功能 */\r\n /* 点赞 */\r\n initLike() {\r\n Utils.initLikeButton('.admire .agree.like', 'posts')\r\n },\r\n /* 代码块高亮 */\r\n initHighlighting() {\r\n // 初始化代码块高亮工具\r\n hljs.highlightAll()\r\n },\r\n /**\r\n * 初始化分享\r\n */\r\n initShare() {\r\n if (!window.DShare) return\r\n let imageUrl = $('.cover-image').css('background-image')\r\n imageUrl && (imageUrl = imageUrl.substring(5, imageUrl.length - 2))\r\n DShare.create('.dshare', {image: imageUrl, imageSelector: '.main-content'})\r\n },\r\n /* 代码块复制 */\r\n initClipboard() {\r\n if (window.clipboard) {\r\n return\r\n }\r\n // 初始化代码块复制插件,一个界面仅需初始化一次\r\n window.clipboard = new ClipboardJS('.btn-clipboard')\r\n clipboard.on('error', function (e) {\r\n e.clearSelection()\r\n Qmsg.error('您的浏览器不支持复制')\r\n })\r\n clipboard.on('success', function () {\r\n Qmsg.success('复制成功')\r\n })\r\n },\r\n /* 初始化图片折叠 */\r\n foldImage() {\r\n if (!DreamConfig.img_fold_height) return\r\n const $galleryList = $('.article .gallery-item>[data-fancybox]>img')\r\n $galleryList.parent().addClass('fold')\r\n $galleryList.each(function () {\r\n const $gallery = $(this).parent()\r\n if (this.complete) {\r\n if (this.scrollHeight >= DreamConfig.img_fold_height) {\r\n $gallery.append('<div class=\"expand-done\"><i class=\"ri-arrow-up-double-line\"></i></div>')\r\n } else {\r\n $gallery.removeClass('fold')\r\n }\r\n } else {\r\n this.onload = function () {\r\n if (this.scrollHeight >= DreamConfig.img_fold_height) {\r\n $gallery.append('<div class=\"expand-done\"><i class=\"ri-arrow-up-double-line\"></i></div>')\r\n } else {\r\n $gallery.removeClass('fold')\r\n }\r\n }\r\n }\r\n })\r\n },\r\n /* 初始化事件 */\r\n initEvent() {\r\n if (postContextInitial) return\r\n let $body = $('body')\r\n // 代码块展开和关闭点击事件\r\n $body.on('click', 'figure>figcaption .ri-arrow-down-s-line', function () {\r\n let $this = $(this)\r\n if ($this.is('.close')) {\r\n $($this.attr('data-code')).parent().slideDown(200)\r\n $this.removeClass('close')\r\n } else {\r\n $($this.attr('data-code')).parent().slideUp(200)\r\n $this.addClass('close')\r\n }\r\n })\r\n // 代码内容块展开和折叠点击事件\r\n $body.on('click', 'figure > pre > .expand-done', function () {\r\n Utils.foldBlock($(this).parent().parent())\r\n })\r\n // 图片的展开和折叠事件\r\n $body.on('click', '.gallery-item .expand-done', function (e) {\r\n e.stopPropagation()\r\n Utils.foldBlock($(this).parent())\r\n })\r\n // 喜欢\r\n Utils.initLikeEvent('.admire .agree.like', 'posts', ($elem) => $elem.find('span').find('span'))\r\n // 隐藏内容\r\n window.onCommentSuccessEvent = (comment, target) => {\r\n let name = encrypt('mew-hide-' + target)\r\n let commentIds = localStorage.getItem(name)\r\n commentIds = commentIds ? JSON.parse(decrypt(commentIds)) : []\r\n let id = String(comment.postId)\r\n if (commentIds.includes(id)) {\r\n return\r\n }\r\n commentIds.push(id)\r\n $(`.main-content[data-target='${target}'][data-id='${id}'] mew-hide[hide]`)\r\n .each(function () {\r\n $(this).before(decrypt(this.getAttribute('hide')))\r\n $(this).remove()\r\n commonContext.initGallery()\r\n postContext.initCodeBlock()\r\n postContext.initLiterature()\r\n postContext.initHighlighting()\r\n if (this.getAttribute('toc') === 'true') commonContext.initTocAndNotice()\r\n })\r\n localStorage.setItem(name, encrypt(JSON.stringify(commentIds)))\r\n }\r\n postContextInitial = true\r\n },\r\n /* 初始化公式 */\r\n initKatex() {\r\n let $mainContent = $('.main-content')\r\n if (!window.katex && $mainContent.length !== 0) {\r\n return\r\n }\r\n $mainContent.find('.katex--inline').each(function (index, domEle) {\r\n katex.render(domEle.innerText, domEle, { displayMode: false })\r\n })\r\n $mainContent.find('.katex--display').each(function (index, domEle) {\r\n katex.render(domEle.innerText, domEle, { displayMode: true })\r\n })\r\n }\r\n}\r\nwindow.postPjax = function (serialNumber) {\r\n if ($('.main-content').length === 0) return\r\n Object.keys(postContext).forEach(\r\n (c) => window.pjaxSerialNumber === serialNumber && postContext[c]()\r\n )\r\n}\r\n!(function () {\r\n const advances = ['initEvent', 'initCodeBlock', 'initLiterature', 'initLike', 'foldImage']\r\n Object.keys(postContext).forEach(\r\n (c) => !window.pjaxSerialNumber && advances.includes(c) && postContext[c]()\r\n )\r\n\r\n document.addEventListener('DOMContentLoaded', function () {\r\n Object.keys(postContext).forEach(\r\n (c) => !window.pjaxSerialNumber && !advances.includes(c) && postContext[c]()\r\n )\r\n })\r\n})()\n\n//# sourceURL=webpack://halo-theme-dream2.0-plus/./src/js/post.js?")}},__webpack_exports__={};__webpack_modules__["./src/js/post.js"]()})(); |