#160 patch opening by notion://url on linux + tab bugfixes

This commit is contained in:
dragonwocky 2020-10-15 12:19:21 +11:00
parent 21b8c3ca15
commit e826b9ff73
Signed by: dragonwocky
GPG Key ID: C7A48B7846AA706D
8 changed files with 66 additions and 28 deletions

View File

@ -13,13 +13,14 @@ a flexibility update.
higher up on the list = higher priority of application = loaded last in order to override others. higher up on the list = higher priority of application = loaded last in order to override others.
(excluding the core, which though pinned to the top of the list is always loaded first so theming (excluding the core, which though pinned to the top of the list is always loaded first so theming
variables can be modified.) variables can be modified.)
- new: in-page columns disabled/wrapped and wider pages when the window is narrower than 600px - new: in-page columns are disabled/wrapped and pages are wider when
for improved responsiveness. the window is narrower than 600px for improved responsiveness.
- new: relaunch button in tray menu. - new: relaunch button in tray menu.
- new: a core mod option to make transitions snappy/0s. - new: a core mod option to make transitions snappy/0s.
- new: a core mod option for a default page id/url (all new windows will load it instead of the - new: a core mod option for a default page id/url (all new windows will load it instead of the
normal "most recent" page). normal "most recent" page).
- new: css variables for increasing line spacing/paragraph margins. - new: css variables for increasing line spacing/paragraph margins.
- new: patch the notion:// url scheme/protocol to work on linux.
- improved: menu will now respect integrated titlebar setting. - improved: menu will now respect integrated titlebar setting.
- improved: use keyup listeners instead of a globalShortcut for the enhancements menu toggle. - improved: use keyup listeners instead of a globalShortcut for the enhancements menu toggle.
- bugfix: removed messenger emoji set as the provider no longer supports it. - bugfix: removed messenger emoji set as the provider no longer supports it.

View File

@ -114,8 +114,16 @@ team to take to heart for future improvements."
## features ## features
once applied, modules can be configured via the graphical menu, which is opened from most of the enhancer's functionality is split into configurable enhancement modules,
the tray/menubar icon or with `OPTION/ALT+E`. but some basic improvements are built in by default:
- the notion:// url scheme/protocol is patched to work on linux.
- in-page columns are disabled/wrapped and pages are wider when
the window is narrower than 600px for improved responsiveness.
- a tray/menubar icon: links relevant to the enhancer + buttons to manage notion windows.
once applied, modules can be configured via the graphical menu,
which is opened from the tray/menubar ic,on or with `OPTION/ALT+E`.
![](https://user-images.githubusercontent.com/16874139/93692603-954fd980-fb38-11ea-9d52-82ac53449d33.png) ![](https://user-images.githubusercontent.com/16874139/93692603-954fd980-fb38-11ea-9d52-82ac53449d33.png)

View File

@ -18,7 +18,7 @@ module.exports = (store, __exports) => {
document.defaultView.addEventListener('keyup', (event) => { document.defaultView.addEventListener('keyup', (event) => {
// additional hotkeys // additional hotkeys
if (event.code === 'F5') location.reload(); if (event.key === 'F5') location.reload();
// open menu on hotkey toggle // open menu on hotkey toggle
const hotkey = toKeyEvent(store().menu_toggle); const hotkey = toKeyEvent(store().menu_toggle);
let triggered = true; let triggered = true;
@ -49,7 +49,6 @@ module.exports = (store, __exports) => {
triggered = true; triggered = true;
for (let prop in close_tab_keybinding) for (let prop in close_tab_keybinding)
if (close_tab_keybinding[prop] !== event[prop]) triggered = false; if (close_tab_keybinding[prop] !== event[prop]) triggered = false;
console.log(triggered, event);
if (triggered) electron.ipcRenderer.sendToHost('enhancer:close-tab'); if (triggered) electron.ipcRenderer.sendToHost('enhancer:close-tab');
} }
}); });

View File

@ -118,7 +118,7 @@ window['__start'] = async () => {
const $popup = document.querySelector('#popup'); const $popup = document.querySelector('#popup');
document.addEventListener('keyup', (event) => { document.addEventListener('keyup', (event) => {
if (event.code === 'F5') location.reload(); if (event.key === 'F5') location.reload();
// further-configuration popup // further-configuration popup
if ( if (
$popup.classList.contains('visible') && $popup.classList.contains('visible') &&
@ -126,12 +126,13 @@ window['__start'] = async () => {
) )
$popup.classList.remove('visible'); $popup.classList.remove('visible');
// close window on hotkey toggle // close window on hotkey toggle
console.log();
const hotkey = toKeyEvent(coreStore().menu_toggle); const hotkey = toKeyEvent(coreStore().menu_toggle);
let triggered = true; let triggered = true;
for (let prop in hotkey) for (let prop in hotkey)
if (hotkey[prop] !== event[prop]) triggered = false; if (hotkey[prop] !== event[prop]) triggered = false;
if (triggered) electron.remote.getCurrentWindow().close(); if (triggered || ((event.ctrlKey || event.metaKey) && event.key === 'w'))
electron.remote.getCurrentWindow().close();
console.log(event.ctrlKey, event.key);
// focus search // focus search
const meta = const meta =
!(event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey; !(event.ctrlKey || event.metaKey) && !event.altKey && !event.shiftKey;

View File

@ -108,14 +108,20 @@ module.exports = (store, __exports) => {
document document
.querySelectorAll('.dragged-over') .querySelectorAll('.dragged-over')
.forEach((el) => el.classList.remove('dragged-over')); .forEach((el) => el.classList.remove('dragged-over'));
document
.querySelectorAll('.slideIn')
.forEach((el) => el.classList.remove('slideIn'));
const from = getTab(this.views.tabs[+this.$dragging]), const from = getTab(this.views.tabs[+this.$dragging]),
to = getTab(event.target); to = getTab(event.target);
if (!from[1].classList.contains('new') && from[0] !== to[0]) if (!from[1].classList.contains('new') && from[0] !== to[0])
to[1].parentElement.insertBefore(from[1], to[1]); to[1].parentElement.insertBefore(from[1], to[1]);
from[1].classList.remove('slideIn');
this.$dragging = null; this.$dragging = null;
document
.querySelector('#tabs')
.appendChild(document.querySelector('.tab.new'));
}); });
document.addEventListener('keyup', (event) => { document.addEventListener('keyup', (event) => {
if (!electron.remote.getCurrentWindow().isFocused()) return;
// switch between tabs via key modifier // switch between tabs via key modifier
const select_tab_modifier = toKeyEvent( const select_tab_modifier = toKeyEvent(
store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier store('e1692c29-475e-437b-b7ff-3eee872e1a42').select_modifier
@ -139,8 +145,8 @@ module.exports = (store, __exports) => {
triggered = true; triggered = true;
for (let prop in close_tab_keybinding) for (let prop in close_tab_keybinding)
if (close_tab_keybinding[prop] !== event[prop]) triggered = false; if (close_tab_keybinding[prop] !== event[prop]) triggered = false;
console.log(triggered, event); if (triggered && document.querySelector('.tab.current .close'))
if (triggered) this.closeTab(this.views.current.id); document.querySelector('.tab.current .close').click();
}); });
} }
@ -219,7 +225,7 @@ module.exports = (store, __exports) => {
? idToNotionURL(store().default_page) ? idToNotionURL(store().default_page)
: this.views.current.$el().src : this.views.current.$el().src
); );
this.views.html[id].getWebContents().openDevTools(); // this.views.html[id].getWebContents().openDevTools();
} }
}); });
} }
@ -297,8 +303,8 @@ module.exports = (store, __exports) => {
this.newTab(); this.newTab();
break; break;
case 'enhancer:close-tab': case 'enhancer:close-tab':
if (event.target.id == this.views.current.id) if (document.querySelector('.tab.current .close'))
this.closeTab(+event.target.id); document.querySelector('.tab.current .close').click();
break; break;
} }
} }

0
mods/core/systemMenu.js Normal file
View File

View File

@ -33,7 +33,7 @@ module.exports = (store, __exports) => {
// menu // menu
electron.ipcMain.on('enhancer:open-menu', (event, arg) => { electron.ipcMain.on('enhancer:open-menu', (event, arg) => {
openExtensionMenu(); openEnhancerMenu();
}); });
electron.ipcMain.on('enhancer:set-menu-theme', (event, arg) => { electron.ipcMain.on('enhancer:set-menu-theme', (event, arg) => {
if (!enhancer_menu) return; if (!enhancer_menu) return;
@ -81,13 +81,13 @@ module.exports = (store, __exports) => {
}; };
} }
function openExtensionMenu() { function openEnhancerMenu() {
if (enhancer_menu) return enhancer_menu.show(); if (enhancer_menu) return enhancer_menu.show();
const window_state = require(`${helpers.__notion.replace( const window_state = require(`${helpers.__notion.replace(
/\\/g, /\\/g,
'/' '/'
)}/app/node_modules/electron-window-state/index.js`)({ )}/app/node_modules/electron-window-state/index.js`)({
file: 'menu-windowstate.json', file: 'enhancerMenu.windowState.json',
path: helpers.__data, path: helpers.__data,
defaultWidth: 275, defaultWidth: 275,
defaultHeight: 600, defaultHeight: 600,
@ -106,7 +106,7 @@ module.exports = (store, __exports) => {
width: window_state.width, width: window_state.width,
height: window_state.height, height: window_state.height,
webPreferences: { webPreferences: {
preload: path.resolve(`${__dirname}/menu.js`), preload: path.resolve(`${__dirname}/enhancerMenu.js`),
nodeIntegration: true, nodeIntegration: true,
session: electron.session.fromPartition('persist:notion'), session: electron.session.fromPartition('persist:notion'),
}, },
@ -116,6 +116,7 @@ module.exports = (store, __exports) => {
window_state.saveState(enhancer_menu); window_state.saveState(enhancer_menu);
enhancer_menu = null; enhancer_menu = null;
}); });
// enhancer_menu.webContents.openDevTools();
} }
// tray // tray
@ -165,7 +166,7 @@ module.exports = (store, __exports) => {
type: 'normal', type: 'normal',
label: 'Enhancements', label: 'Enhancements',
accelerator: store().menu_toggle, accelerator: store().menu_toggle,
click: openExtensionMenu, click: openEnhancerMenu,
}, },
{ {
type: 'normal', type: 'normal',

View File

@ -90,18 +90,40 @@ module.exports = async function ({ overwrite_version, friendly_errors } = {}) {
filter: (stats) => stats.isFile() && stats.path.endsWith('.js'), filter: (stats) => stats.isFile() && stats.path.endsWith('.js'),
} }
)) { )) {
insertion_target = path.resolve( const insertion_file = path.resolve(
`${helpers.__notion}/app/${insertion_target}` `${helpers.__notion}/app/${insertion_target}`
); );
fs.appendFile( if (insertion_target === 'main/main.js') {
insertion_target, // https://github.com/dragonwocky/notion-enhancer/issues/160
`\n\n//notion-enhancer\nrequire('${helpers.realpath( // patch the notion:// url scheme/protocol to work on linux
__dirname fs.readFile(insertion_file, 'utf8', (err, data) => {
)}/loader.js')(__filename, exports);` if (err) throw err;
); fs.writeFile(
insertion_file,
`${data.replace(
/process.platform === "win32"/g,
'process.platform === "win32" || process.platform === "linux"'
)}\n\n//notion-enhancer\nrequire('${helpers.realpath(
__dirname
)}/loader.js')(__filename, exports);`,
'utf8',
(err) => {
if (err) throw err;
}
);
});
} else {
fs.appendFile(
insertion_file,
`\n\n//notion-enhancer\nrequire('${helpers.realpath(
__dirname
)}/loader.js')(__filename, exports);`
);
}
} }
// not resolved, nothing depends on it so it's just a "let it do its thing" // not resolved, nothing else in application depends on it
// so it's just a "let it do its thing"
console.info(' ...recording enhancement version.'); console.info(' ...recording enhancement version.');
fs.outputFile( fs.outputFile(
path.resolve(`${helpers.__notion}/app/ENHANCER_VERSION.txt`), path.resolve(`${helpers.__notion}/app/ENHANCER_VERSION.txt`),