From 20ede93eb1ed7dbd2daf56e9920dac4a76fd21e0 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Fri, 31 Jan 2025 23:27:23 +0100 Subject: [PATCH 1/6] Add feature: copy current URL as markdown --- l10n | 2 +- .../base/zen-components/ZenCommonUtils.mjs | 15 +++++++++++++++ .../zen-components/ZenKeyboardShortcuts.mjs | 18 +++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/l10n b/l10n index cb32b48cb..98c54b87d 160000 --- a/l10n +++ b/l10n @@ -1 +1 @@ -Subproject commit cb32b48cb58a807012e082a41190108463d25683 +Subproject commit 98c54b87df6b7ef1fe1747ca317ed0e4d4037fbc diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index 0ecabfac8..16adcee0d 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -72,6 +72,21 @@ var gZenCommonActions = { ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); } }, + CopyCurrentURLAsMarkdownToClipboard() { + const currentUrl = gBrowser.currentURI.spec; + const tabTitle = gBrowser.selectedTab.label; + if (currentUrl && tabTitle) { + const markdownLink = `[${tabTitle}](${currentUrl})` + let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); + str.data = markdownLink; + let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); + transferable.init(getLoadContext()); + transferable.addDataFlavor('text/plain'); + transferable.setTransferData('text/plain', str); + Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); + ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); + } + }, throttle(f, delay) { let timer = 0; diff --git a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs index dee74be78..c41273e88 100644 --- a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs +++ b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs @@ -80,6 +80,7 @@ const defaultKeyboardGroups = { 'zen-search-find-again-shortcut-prev', ], pageOperations: [ + 'zen-text-action-copy-url-markdown-shortcut', 'zen-text-action-copy-url-shortcut', 'zen-location-open-shortcut', 'zen-location-open-shortcut-alt', @@ -755,7 +756,7 @@ class ZenKeyboardShortcutsLoader { } class ZenKeyboardShortcutsVersioner { - static LATEST_KBS_VERSION = 7; + static LATEST_KBS_VERSION = 8; constructor() {} @@ -907,6 +908,21 @@ class ZenKeyboardShortcutsVersioner { gZenKeyboardShortcutsManager._hasToLoadDefaultDevtools = true; window.addEventListener('zen-devtools-keyset-added', listener); } + if (version < 8) { + // Migrate from 7 to 8 + // In this new version, we add the "Copy URL as Markdown" shortcut to the default shortcuts + data.push( + new KeyShortcut( + 'zen-copy-url-markdown', + 'C', + '', + ZEN_OTHER_SHORTCUTS_GROUP, + KeyShortcutModifiers.fromObject({ accel: true, shift: true, alt: true }), + 'code:gZenCommonActions.CopyCurrentURLAsMarkdownToClipboard()', + 'zen-text-action-copy-url-markdown-shortcut' + ) + ) + } return data; } } From e39419af25693b32d64dceebd639e63b3d5fa396 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Sat, 1 Feb 2025 22:42:01 +0100 Subject: [PATCH 2/6] fix indentation woops --- .../base/zen-components/ZenCommonUtils.mjs | 24 +++++++++---------- .../zen-components/ZenKeyboardShortcuts.mjs | 24 +++++++++---------- 2 files changed, 24 insertions(+), 24 deletions(-) diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index 16adcee0d..ad4fc1805 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -73,18 +73,18 @@ var gZenCommonActions = { } }, CopyCurrentURLAsMarkdownToClipboard() { - const currentUrl = gBrowser.currentURI.spec; - const tabTitle = gBrowser.selectedTab.label; - if (currentUrl && tabTitle) { - const markdownLink = `[${tabTitle}](${currentUrl})` - let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); - str.data = markdownLink; - let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); - transferable.init(getLoadContext()); - transferable.addDataFlavor('text/plain'); - transferable.setTransferData('text/plain', str); - Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); - ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); + const currentTabs = gZenViewSplitter.getTabsInCurrentView() + if (currentTabs) { + const stringArray = currentTabs.map(t => `[${t.label}](${t.linkedBrowser.currentURI.spec})`) + const markdownString = stringArray.join("\n") + let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); + str.data = markdownString; + let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); + transferable.init(getLoadContext()); + transferable.addDataFlavor('text/plain'); + transferable.setTransferData('text/plain', str); + Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); + ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); } }, diff --git a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs index c41273e88..8cd251b42 100644 --- a/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs +++ b/src/browser/base/zen-components/ZenKeyboardShortcuts.mjs @@ -909,19 +909,19 @@ class ZenKeyboardShortcutsVersioner { window.addEventListener('zen-devtools-keyset-added', listener); } if (version < 8) { - // Migrate from 7 to 8 - // In this new version, we add the "Copy URL as Markdown" shortcut to the default shortcuts - data.push( - new KeyShortcut( - 'zen-copy-url-markdown', - 'C', - '', - ZEN_OTHER_SHORTCUTS_GROUP, - KeyShortcutModifiers.fromObject({ accel: true, shift: true, alt: true }), - 'code:gZenCommonActions.CopyCurrentURLAsMarkdownToClipboard()', - 'zen-text-action-copy-url-markdown-shortcut' - ) + // Migrate from 7 to 8 + // In this new version, we add the "Copy URL as Markdown" shortcut to the default shortcuts + data.push( + new KeyShortcut( + 'zen-copy-url-markdown', + 'C', + '', + ZEN_OTHER_SHORTCUTS_GROUP, + KeyShortcutModifiers.fromObject({ accel: true, shift: true, alt: true }), + 'code:gZenCommonActions.CopyCurrentURLAsMarkdownToClipboard()', + 'zen-text-action-copy-url-markdown-shortcut' ) + ) } return data; } From 9bad51b94e356ba949cf131fb856e5f55ccf1880 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Sat, 1 Feb 2025 23:24:21 +0100 Subject: [PATCH 3/6] copy all urls in split view --- src/browser/base/zen-components/ZenCommonUtils.mjs | 8 +++++--- src/browser/base/zen-components/ZenViewSplitter.mjs | 9 +++++++++ 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index ad4fc1805..280625adb 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -60,10 +60,12 @@ class ZenPreloadedFeature { var gZenCommonActions = { copyCurrentURLToClipboard() { - const currentUrl = gBrowser.currentURI.spec; - if (currentUrl) { + const currentTabs = gZenViewSplitter.getTabsInCurrentView() + if (currentTabs) { + const stringArray = currentTabs.map(t => `${t.linkedBrowser.currentURI.spec}`) + const markdownString = stringArray.join("\n") let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); - str.data = currentUrl; + str.data = markdownString; let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); transferable.init(getLoadContext()); transferable.addDataFlavor('text/plain'); diff --git a/src/browser/base/zen-components/ZenViewSplitter.mjs b/src/browser/base/zen-components/ZenViewSplitter.mjs index fb715e2a5..ef3e75a2f 100644 --- a/src/browser/base/zen-components/ZenViewSplitter.mjs +++ b/src/browser/base/zen-components/ZenViewSplitter.mjs @@ -1136,6 +1136,15 @@ class ZenViewSplitter extends ZenDOMOperatedFeature { : [gBrowser.selectedTab, tabs[nextTabIndex]]; this.splitTabs(selected_tabs, gridType); } + + /** + * Gets all the tabs in the current view. + * @returns {Tab[]} The tabs in the current view. + */ + getTabsInCurrentView() { + if (this.currentView < 0) return [gBrowser.selectedTab]; + return this._data[this.currentView].tabs; + } } window.gZenViewSplitter = new ZenViewSplitter(); From eea432418ecdf50080fc76cacc8da383c2218f57 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Mon, 3 Feb 2025 00:48:09 +0100 Subject: [PATCH 4/6] copying all tabs in view depends on setting --- .../base/zen-components/ZenCommonUtils.mjs | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index 280625adb..ecc7f6dcf 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -60,12 +60,23 @@ class ZenPreloadedFeature { var gZenCommonActions = { copyCurrentURLToClipboard() { - const currentTabs = gZenViewSplitter.getTabsInCurrentView() - if (currentTabs) { - const stringArray = currentTabs.map(t => `${t.linkedBrowser.currentURI.spec}`) - const markdownString = stringArray.join("\n") + let urlStringToCopy = ""; + if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-all-tab-urls-in-view', false)) { + const currentTabs = gZenViewSplitter.getTabsInCurrentView(); + if (currentTabs) { + const stringArray = currentTabs.map(t => `${t.linkedBrowser.currentURI.spec}`); + urlStringToCopy = stringArray.join("\n"); + } + } else { + const currentUrl = gBrowser.currentURI.spec; + if (currentUrl) { + + urlStringToCopy = `${currentUrl}` + } + } + if (urlStringToCopy) { let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); - str.data = markdownString; + str.data = urlStringToCopy; let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); transferable.init(getLoadContext()); transferable.addDataFlavor('text/plain'); @@ -75,10 +86,21 @@ var gZenCommonActions = { } }, CopyCurrentURLAsMarkdownToClipboard() { - const currentTabs = gZenViewSplitter.getTabsInCurrentView() - if (currentTabs) { - const stringArray = currentTabs.map(t => `[${t.label}](${t.linkedBrowser.currentURI.spec})`) - const markdownString = stringArray.join("\n") + let markdownString = ""; + if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-all-tab-urls-in-view', false)) { + const currentTabs = gZenViewSplitter.getTabsInCurrentView(); + if (currentTabs) { + const stringArray = currentTabs.map(t => `[${t.label}](${t.linkedBrowser.currentURI.spec})`); + markdownString = stringArray.join("\n"); + } + } else { + const currentUrl = gBrowser.currentURI.spec; + const tabTitle = gBrowser.selectedTab.label; + if (currentUrl && tabTitle) { + markdownString = `[${tabTitle}](${currentUrl})`; + } + } + if (markdownString) { let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); str.data = markdownString; let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); From ffbe58b8088d3e869c1834e641c38548427c4fb9 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Mon, 3 Feb 2025 04:09:14 +0100 Subject: [PATCH 5/6] different settings for either shortcut --- src/browser/base/zen-components/ZenCommonUtils.mjs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index ecc7f6dcf..dfba3db1c 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -61,7 +61,7 @@ class ZenPreloadedFeature { var gZenCommonActions = { copyCurrentURLToClipboard() { let urlStringToCopy = ""; - if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-all-tab-urls-in-view', false)) { + if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-current-url.copy-all-in-split-view', false)) { const currentTabs = gZenViewSplitter.getTabsInCurrentView(); if (currentTabs) { const stringArray = currentTabs.map(t => `${t.linkedBrowser.currentURI.spec}`); @@ -87,7 +87,7 @@ var gZenCommonActions = { }, CopyCurrentURLAsMarkdownToClipboard() { let markdownString = ""; - if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-all-tab-urls-in-view', false)) { + if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-current-url-as-markdown.copy-all-in-split-view', false)) { const currentTabs = gZenViewSplitter.getTabsInCurrentView(); if (currentTabs) { const stringArray = currentTabs.map(t => `[${t.label}](${t.linkedBrowser.currentURI.spec})`); From 7758b14f26c85048eb3d47804db023bec07290e1 Mon Sep 17 00:00:00 2001 From: EmilyxFox <48589793+EmilyxFox@users.noreply.github.com> Date: Mon, 3 Feb 2025 22:05:47 +0100 Subject: [PATCH 6/6] removed copy all in split view feature. it needs more work --- .../base/zen-components/ZenCommonUtils.mjs | 54 ++++++------------- .../base/zen-components/ZenViewSplitter.mjs | 9 ---- 2 files changed, 15 insertions(+), 48 deletions(-) diff --git a/src/browser/base/zen-components/ZenCommonUtils.mjs b/src/browser/base/zen-components/ZenCommonUtils.mjs index dfba3db1c..c0252eb7b 100644 --- a/src/browser/base/zen-components/ZenCommonUtils.mjs +++ b/src/browser/base/zen-components/ZenCommonUtils.mjs @@ -60,23 +60,10 @@ class ZenPreloadedFeature { var gZenCommonActions = { copyCurrentURLToClipboard() { - let urlStringToCopy = ""; - if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-current-url.copy-all-in-split-view', false)) { - const currentTabs = gZenViewSplitter.getTabsInCurrentView(); - if (currentTabs) { - const stringArray = currentTabs.map(t => `${t.linkedBrowser.currentURI.spec}`); - urlStringToCopy = stringArray.join("\n"); - } - } else { - const currentUrl = gBrowser.currentURI.spec; - if (currentUrl) { - - urlStringToCopy = `${currentUrl}` - } - } - if (urlStringToCopy) { + const currentUrl = gBrowser.currentURI.spec; + if (currentUrl) { let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); - str.data = urlStringToCopy; + str.data = currentUrl; let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); transferable.init(getLoadContext()); transferable.addDataFlavor('text/plain'); @@ -86,29 +73,18 @@ var gZenCommonActions = { } }, CopyCurrentURLAsMarkdownToClipboard() { - let markdownString = ""; - if (Services.prefs.getBoolPref('zen.keyboard.shortcuts.copy-current-url-as-markdown.copy-all-in-split-view', false)) { - const currentTabs = gZenViewSplitter.getTabsInCurrentView(); - if (currentTabs) { - const stringArray = currentTabs.map(t => `[${t.label}](${t.linkedBrowser.currentURI.spec})`); - markdownString = stringArray.join("\n"); - } - } else { - const currentUrl = gBrowser.currentURI.spec; - const tabTitle = gBrowser.selectedTab.label; - if (currentUrl && tabTitle) { - markdownString = `[${tabTitle}](${currentUrl})`; - } - } - if (markdownString) { - let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); - str.data = markdownString; - let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); - transferable.init(getLoadContext()); - transferable.addDataFlavor('text/plain'); - transferable.setTransferData('text/plain', str); - Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); - ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); + const currentUrl = gBrowser.currentURI.spec; + const tabTitle = gBrowser.selectedTab.label; + if (currentUrl && tabTitle) { + const markdownLink = `[${tabTitle}](${currentUrl})`; + let str = Cc['@mozilla.org/supports-string;1'].createInstance(Ci.nsISupportsString); + str.data = markdownLink; + let transferable = Cc['@mozilla.org/widget/transferable;1'].createInstance(Ci.nsITransferable); + transferable.init(getLoadContext()); + transferable.addDataFlavor('text/plain'); + transferable.setTransferData('text/plain', str); + Services.clipboard.setData(transferable, null, Ci.nsIClipboard.kGlobalClipboard); + ConfirmationHint.show(document.getElementById('PanelUI-menu-button'), 'zen-copy-current-url-confirmation'); } }, diff --git a/src/browser/base/zen-components/ZenViewSplitter.mjs b/src/browser/base/zen-components/ZenViewSplitter.mjs index ef3e75a2f..fb715e2a5 100644 --- a/src/browser/base/zen-components/ZenViewSplitter.mjs +++ b/src/browser/base/zen-components/ZenViewSplitter.mjs @@ -1136,15 +1136,6 @@ class ZenViewSplitter extends ZenDOMOperatedFeature { : [gBrowser.selectedTab, tabs[nextTabIndex]]; this.splitTabs(selected_tabs, gridType); } - - /** - * Gets all the tabs in the current view. - * @returns {Tab[]} The tabs in the current view. - */ - getTabsInCurrentView() { - if (this.currentView < 0) return [gBrowser.selectedTab]; - return this._data[this.currentView].tabs; - } } window.gZenViewSplitter = new ZenViewSplitter();