diff --git a/repo/core/buttons.js b/repo/core/buttons.js
index e50de06..bae94cd 100644
--- a/repo/core/buttons.js
+++ b/repo/core/buttons.js
@@ -15,7 +15,7 @@ module.exports = (store) => {
buttons = {
element: helpers.createElement('
'),
insert: [
- ...((store('mods', {})['72886371-dada-49a7-9afc-9f275ecf29d3'] || {})
+ ...((store('mods')['72886371-dada-49a7-9afc-9f275ecf29d3'] || {})
.enabled
? ['alwaysontop']
: []),
diff --git a/repo/core/client.js b/repo/core/client.js
index 4d683ca..3315093 100644
--- a/repo/core/client.js
+++ b/repo/core/client.js
@@ -19,12 +19,16 @@ module.exports = (store, __exports) => {
// additional hotkeys
document.defaultView.addEventListener('keyup', (event) => {
if (event.code === 'F5') location.reload();
- // open menu on hotkey toggle
- const hotkey = toKeyEvent(store().menu_toggle);
- let triggered = true;
- for (let prop in hotkey)
- if (hotkey[prop] !== event[prop]) triggered = false;
- if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
+ if (
+ !(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled
+ ) {
+ // open menu on hotkey toggle
+ const hotkey = toKeyEvent(store().menu_toggle);
+ let triggered = true;
+ for (let prop in hotkey)
+ if (hotkey[prop] !== event[prop]) triggered = false;
+ if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
+ }
});
const attempt_interval = setInterval(enhance, 500);
@@ -43,7 +47,11 @@ module.exports = (store, __exports) => {
document.body.classList.add('snappy-transitions');
// frameless
- if (store().frameless && !store().tiling_mode && !store().tabs) {
+ if (
+ store().frameless &&
+ !store().tiling_mode &&
+ !(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled
+ ) {
document.body.classList.add('frameless');
// draggable area
document
@@ -56,7 +64,9 @@ module.exports = (store, __exports) => {
}
// window buttons
- if (!store().tabs) {
+ if (
+ !(store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled
+ ) {
const buttons = require('./buttons.js')(store);
document
.querySelector('.notion-topbar > div[style*="display: flex"]')
@@ -153,7 +163,9 @@ module.exports = (store, __exports) => {
'--theme--code_inline-background',
].map((rule) => [rule, getStyle(rule)])
);
- if (store().tabs) {
+ if (
+ (store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled
+ ) {
electron.ipcRenderer.sendToHost(
'enhancer:set-tab-theme',
[
@@ -179,7 +191,7 @@ module.exports = (store, __exports) => {
);
electron.ipcRenderer.on('enhancer:get-menu-theme', setThemeVars);
- if (store().tabs) {
+ if ((store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled) {
let tab_title = '';
__electronApi.setWindowTitle = (title) => {
if (tab_title !== title) {
diff --git a/repo/core/menu.js b/repo/core/menu.js
index bb5913f..60a0d20 100644
--- a/repo/core/menu.js
+++ b/repo/core/menu.js
@@ -426,11 +426,13 @@ window['__start'] = async () => {
};
mod.elem = helpers.createElement(`
${mod.name}`
: `class="toggle">
{
- if (store().tabs) {
+ if ((store('mods')['e1692c29-475e-437b-b7ff-3eee872e1a42'] || {}).enabled) {
class Index extends React.PureComponent {
constructor() {
super(...arguments);
@@ -156,22 +157,44 @@ module.exports = (store, __exports) => {
const list = new Map(this.state.tabs);
while (this.state.tabs.get(id)) id++;
list.delete(id);
- if (this.views.html[id]) {
- this.views.html[id].style.opacity = '0';
- let unhide;
- unhide = () => {
- this.views.html[id].style.opacity = '';
- this.views.html[id].removeEventListener('did-stop-loading', unhide);
- };
- this.views.html[id].addEventListener('did-stop-loading', unhide);
- this.views.html[id].loadURL(this.views.current.$el().src);
- }
- this.openTab(id, list);
+ console.log(
+ store().default_page
+ ? `notion://www.notion.so/${store().default_page}`
+ : this.views.current.$el().src
+ );
+ this.openTab(id, list, true);
}
- openTab(id, state = new Map(this.state.tabs)) {
+ openTab(id, state = new Map(this.state.tabs), load) {
if (!id && id !== 0) return;
this.views.current.id = id;
- this.setState({ tabs: state.set(id, true) }, this.focusTab.bind(this));
+ this.setState({ tabs: state.set(id, true) }, async () => {
+ this.focusTab();
+ if (load) {
+ await new Promise((res, rej) => {
+ let attempt;
+ attempt = setInterval(() => {
+ if (!document.body.contains(this.views.html[id])) return;
+ clearInterval(attempt);
+ res();
+ }, 50);
+ });
+ this.views.html[id].style.opacity = '0';
+ let unhide;
+ unhide = () => {
+ this.views.html[id].style.opacity = '';
+ this.views.html[id].removeEventListener(
+ 'did-stop-loading',
+ unhide
+ );
+ };
+ this.views.html[id].addEventListener('did-stop-loading', unhide);
+ this.views.html[id].loadURL(
+ store().default_page
+ ? `notion://www.notion.so/${store().default_page}`
+ : this.views.current.$el().src
+ );
+ }
+ });
}
closeTab(id) {
if ((!id && id !== 0) || !this.state.tabs.get(id)) return;
@@ -733,16 +756,28 @@ module.exports = (store, __exports) => {
window['__start'] = () => {
document.head.innerHTML += ``;
+ // open menu on hotkey toggle
+ document.addEventListener('keyup', (event) => {
+ const hotkey = toKeyEvent(store().menu_toggle);
+ let triggered = true;
+ for (let prop in hotkey)
+ if (hotkey[prop] !== event[prop]) triggered = false;
+ if (triggered) electron.ipcRenderer.send('enhancer:open-menu');
+ });
+
const parsed = url.parse(window.location.href, true),
- notionUrl =
- parsed.query.path ||
- schemeHelpers.getSchemeUrl({
- httpUrl: config.default.baseURL,
- protocol: config.default.protocol,
- });
+ notionUrl = store().default_page
+ ? `notion://www.notion.so/${store().default_page}`
+ : parsed.query.path ||
+ schemeHelpers.getSchemeUrl({
+ httpUrl: config.default.baseURL,
+ protocol: config.default.protocol,
+ });
delete parsed.search;
delete parsed.query;
- const plainUrl = url.format(parsed);
+ const plainUrl = store().default_page
+ ? `notion://www.notion.so/${store().default_page}`
+ : url.format(parsed);
window.history.replaceState(undefined, undefined, plainUrl);
document.title = localizationHelper
@@ -769,6 +804,26 @@ module.exports = (store, __exports) => {
const __start = window['__start'];
window['__start'] = () => {
__start();
+
+ if (store().default_page) {
+ new Promise((res, rej) => {
+ let attempt;
+ attempt = setInterval(() => {
+ if (
+ !document.getElementById('notion') ||
+ !document.getElementById('notion').loadURL
+ )
+ return;
+ clearInterval(attempt);
+ res();
+ }, 50);
+ }).then(() => {
+ document
+ .getElementById('notion')
+ .loadURL(`notion://www.notion.so/${store().default_page}`);
+ });
+ }
+
const dragarea = document.querySelector(
'#root [style*="-webkit-app-region: drag"]'
),
diff --git a/repo/tabs/mod.js b/repo/tabs/mod.js
new file mode 100644
index 0000000..1585c43
--- /dev/null
+++ b/repo/tabs/mod.js
@@ -0,0 +1,19 @@
+/*
+ * tabs
+ * (c) 2020 dragonwocky (https://dragonwocky.me/)
+ * under the MIT license
+ */
+
+'use strict';
+
+// this is just a pseudo mod to "separate" the options
+// from the core module - the core still handles actually
+// making it work.
+module.exports = {
+ id: 'e1692c29-475e-437b-b7ff-3eee872e1a42',
+ tags: ['core', 'extension'],
+ name: 'tabs',
+ desc: 'have multiple notion pages open in a single window.',
+ version: '0.1.0',
+ author: 'dragonwocky',
+};