2024-05-07 12:31:42 +08:00

1 line
8.5 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.

(()=>{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"]()})();