From 100226427db6bba659552106cf72025f8bd55a11 Mon Sep 17 00:00:00 2001 From: isUnknown Date: Mon, 8 Dec 2025 13:59:33 +0100 Subject: [PATCH] feat: intercept Cmd+P to print PagedJS preview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Override default print behavior to print the active iframe content (PagedJS rendered preview) instead of the main page. Works with both Cmd+P (Mac) and Ctrl+P (Windows/Linux). 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude --- src/App.vue | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/src/App.vue b/src/App.vue index 890f9ff..1ed8894 100644 --- a/src/App.vue +++ b/src/App.vue @@ -4,7 +4,7 @@ import EditorPanel from './components/editor/EditorPanel.vue'; import ElementPopup from './components/ElementPopup.vue'; import PagePopup from './components/PagePopup.vue'; import PreviewLoader from './components/PreviewLoader.vue'; -import { onMounted, ref, watch, computed, provide } from 'vue'; +import { onMounted, onUnmounted, ref, watch, computed, provide } from 'vue'; import { useStylesheetStore } from './stores/stylesheet'; import Coloris from '@melloware/coloris'; @@ -274,7 +274,25 @@ watch( } ); -onMounted(() => renderPreview(true)); +// Handle Cmd+P / Ctrl+P to print the iframe content +const handlePrint = (event) => { + if ((event.metaKey || event.ctrlKey) && event.key === 'p') { + event.preventDefault(); + const frame = activeFrame.value; + if (frame && frame.contentWindow) { + frame.contentWindow.print(); + } + } +}; + +onMounted(() => { + renderPreview(true); + window.addEventListener('keydown', handlePrint); +}); + +onUnmounted(() => { + window.removeEventListener('keydown', handlePrint); +});