From dcf17403b9c915f6bc07b808e66f2baf6ed62168 Mon Sep 17 00:00:00 2001 From: Lex Lim Date: Thu, 10 Apr 2025 12:19:08 +0000 Subject: [PATCH] =?UTF-8?q?=E9=80=82=E9=85=8D=E6=89=93=E5=8D=B0=E6=A8=A1?= =?UTF-8?q?=E5=BC=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/ext.isekai.collapse.js | 63 ++++++++++----- modules/ext.isekai.collapse.less | 6 ++ modules/ext.isekai.widgets.global.less | 4 + .../ext.isekai.previewPageList.js | 76 ++++++++++--------- .../ext.isekai.previewPageList.less | 4 + 5 files changed, 98 insertions(+), 55 deletions(-) diff --git a/modules/ext.isekai.collapse.js b/modules/ext.isekai.collapse.js index 2ecd15f..fd7834b 100644 --- a/modules/ext.isekai.collapse.js +++ b/modules/ext.isekai.collapse.js @@ -1,33 +1,54 @@ (function($) { $('.isekai-collapse').addClass('animate') + + function expand(titleElem, containerElem, contentElem) { + containerElem.prop('open', true); + var collapsedHeight = titleElem.outerHeight(); + containerElem.css('height', collapsedHeight); + requestAnimationFrame(function() { + var expandedHeight = collapsedHeight + contentElem.outerHeight(); + containerElem.css('height', expandedHeight); + }); + } + function collapse(titleElem, containerElem, contentElem) { + var collapsedHeight = titleElem.outerHeight(); + var expandedHeight = collapsedHeight + contentElem.outerHeight(); + containerElem.css('height', expandedHeight); + requestAnimationFrame(function() { + containerElem.addClass('closing').css('height', collapsedHeight); + setTimeout(function() { + containerElem.prop('open', false).removeClass('closing'); + }, 260); + }); + } + $('.isekai-collapse .isekai-collapse-title').on('click', '', function(e) { e.preventDefault(); var titleElem = $(this); var containerElem = titleElem.parent('.isekai-collapse'); var contentElem = containerElem.find('.isekai-collapse-content'); if (containerElem.prop('open')) { // 需要收起 - var collapsedHeight = titleElem.outerHeight(); - var expandedHeight = collapsedHeight + contentElem.outerHeight(); - containerElem.css('height', expandedHeight); - console.log('expandedHeight', expandedHeight); - requestAnimationFrame(function() { - console.log('collapsedHeight', collapsedHeight); - containerElem.addClass('closing').css('height', collapsedHeight); - setTimeout(function() { - containerElem.prop('open', false).removeClass('closing'); //.css('height', 'auto'); - }, 260); - }); + collapse(titleElem, containerElem, contentElem); } else { // 需要展开 - containerElem.prop('open', true); - var collapsedHeight = titleElem.outerHeight(); - containerElem.css('height', collapsedHeight); - requestAnimationFrame(function() { - var expandedHeight = collapsedHeight + contentElem.outerHeight(); - containerElem.css('height', expandedHeight); - /*setTimeout(function() { - containerElem.css('height', 'auto'); - }, 260);*/ - }); + expand(titleElem, containerElem, contentElem); } }); + + function onMediaQueryChanged(mediaQueryList) { + console.log('mediaQuery', mediaQueryList.matches); + if (mediaQueryList.matches) { + // 打印时展开所有折叠 + $('.isekai-collapse').each(function() { + $(this).prop('open', true); + }); + } + } + + if (window.matchMedia) { + var mediaQueryList = window.matchMedia('print'); + onMediaQueryChanged(mediaQueryList); + mediaQueryList.addEventListener('change', function(e) { + onMediaQueryChanged(mediaQueryList); + }); + } })(jQuery); diff --git a/modules/ext.isekai.collapse.less b/modules/ext.isekai.collapse.less index c0f4aa5..5e0b00b 100644 --- a/modules/ext.isekai.collapse.less +++ b/modules/ext.isekai.collapse.less @@ -60,6 +60,12 @@ &.closing[open] > .isekai-collapse-title:before { transform: rotate(0); } + + @media print { + &::details-content { + display: block; + } + } } .isekai-indent > .isekai-collapse { diff --git a/modules/ext.isekai.widgets.global.less b/modules/ext.isekai.widgets.global.less index 45919d4..cae6747 100644 --- a/modules/ext.isekai.widgets.global.less +++ b/modules/ext.isekai.widgets.global.less @@ -114,6 +114,10 @@ list-style: none; background-color: transparent; + @media print { + padding-bottom: 0 !important; + } + .isekai-list-item { display: -webkit-box; display: -ms-flexbox; diff --git a/modules/previewPageList/ext.isekai.previewPageList.js b/modules/previewPageList/ext.isekai.previewPageList.js index ddc06e7..13b8dc7 100644 --- a/modules/previewPageList/ext.isekai.previewPageList.js +++ b/modules/previewPageList/ext.isekai.previewPageList.js @@ -167,38 +167,46 @@ function htmlDecode(input) { return doc.documentElement.textContent; } -let previewPageList = document.querySelectorAll('.isekai-preview-page-list-card'); -if (previewPageList.length > 0) { - const App = require("./PreviewPageList.vue"); - previewPageList.forEach((previewPageListDom) => { - try { - let props = {}; - let dataset = previewPageListDom.dataset; - - props.autoFocus = (dataset.autofocus == '1'); - props.lazyLoad = (dataset.lazyload == '1'); - - switch (dataset.loader) { - case 'pages': - let pagesJsonEl = document.querySelector('script[type="application/json"][data-pages]'); - let pageList = []; - if (pagesJsonEl) { - let jsonStr = htmlDecode(pagesJsonEl.innerText); - pageList = JSON.parse(jsonStr); - } - props.pageListLoader = new PresetPageListLoader(pageList); - break; - case 'category': - let category = dataset.category; - props.pageListLoader = new CategoryPageListLoader(category); - break; - default: - console.error('Unknown loader: ' + dataset.loader); - } +(function() { + // 打印模式下不加载 + var mediaQueryList = window.matchMedia('print'); + if (mediaQueryList.matches) { + return; + } - Vue.createMwApp(App, props).mount(previewPageListDom); - } catch (e) { - console.error(e); - } - }); -} \ No newline at end of file + let previewPageList = document.querySelectorAll('.isekai-preview-page-list-card'); + if (previewPageList.length > 0) { + const App = require("./PreviewPageList.vue"); + previewPageList.forEach((previewPageListDom) => { + try { + let props = {}; + let dataset = previewPageListDom.dataset; + + props.autoFocus = (dataset.autofocus == '1'); + props.lazyLoad = (dataset.lazyload == '1'); + + switch (dataset.loader) { + case 'pages': + let pagesJsonEl = document.querySelector('script[type="application/json"][data-pages]'); + let pageList = []; + if (pagesJsonEl) { + let jsonStr = htmlDecode(pagesJsonEl.innerText); + pageList = JSON.parse(jsonStr); + } + props.pageListLoader = new PresetPageListLoader(pageList); + break; + case 'category': + let category = dataset.category; + props.pageListLoader = new CategoryPageListLoader(category); + break; + default: + console.error('Unknown loader: ' + dataset.loader); + } + + Vue.createMwApp(App, props).mount(previewPageListDom); + } catch (e) { + console.error(e); + } + }); + } +})(); \ No newline at end of file diff --git a/modules/previewPageList/ext.isekai.previewPageList.less b/modules/previewPageList/ext.isekai.previewPageList.less index 7a7840a..bc07529 100644 --- a/modules/previewPageList/ext.isekai.previewPageList.less +++ b/modules/previewPageList/ext.isekai.previewPageList.less @@ -2,6 +2,10 @@ .isekai-preview-page-list-card { height: @preview-page-list-height; + + @media print { + height: auto; + } } .isekai-preview-page-list-card > .card-header {