From 582a8cc6421c96ebae0c6261f4fd9707a1c62051 Mon Sep 17 00:00:00 2001 From: dragonwocky Date: Thu, 9 Jul 2020 14:58:10 +1000 Subject: [PATCH] replace unicode window button icons with svgs --- CHANGELOG.md | 11 +++++++++- README.md | 6 +----- customiser.py | 10 ++++------ docs.json | 2 +- docs/changelog.html | 13 ++++++++++-- docs/index.html | 7 ++----- docs/{logo.png => notion.png} | Bin docs/styling.html | 2 +- logo.png => notion.png | Bin resources/icons/alwaysontop_off.svg | 3 +++ resources/icons/alwaysontop_on.svg | 3 +++ resources/icons/close.svg | 4 ++++ resources/icons/mac.png | Bin 0 -> 7192 bytes resources/icons/maximise_off.svg | 3 +++ resources/icons/maximise_on.svg | 3 +++ resources/icons/minimise.svg | 3 +++ resources/icons/tray.ico | Bin 0 -> 112696 bytes resources/preload.js | 30 ++++++++++++++++++++++------ resources/theme.css | 3 +++ resources/tray.js | 24 ++++++++++++---------- resources/user.css | 27 +++++++++++++++++-------- 21 files changed, 109 insertions(+), 45 deletions(-) rename docs/{logo.png => notion.png} (100%) rename logo.png => notion.png (100%) create mode 100644 resources/icons/alwaysontop_off.svg create mode 100644 resources/icons/alwaysontop_on.svg create mode 100644 resources/icons/close.svg create mode 100644 resources/icons/mac.png create mode 100644 resources/icons/maximise_off.svg create mode 100644 resources/icons/maximise_on.svg create mode 100644 resources/icons/minimise.svg create mode 100644 resources/icons/tray.ico diff --git a/CHANGELOG.md b/CHANGELOG.md index c7d7c0c..336ee72 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,11 +5,20 @@ but can still easily be enabled by following instructions in the [docs](README.m ### v0.6.1 (wip) -- new: semi-mac support? installs, but can't confirm changes have taken effect. +- new: mac support (identical functionality to others platforms with the + exception of the native minimise/maximise/close buttons being kept, as they integrate + better with the OS while not being out-of-place in notion). +- improved: replaced button symbols with svgs for multi-platform support. +- improved: window close button is now red on hover (thanks to [@torchatlas](https://github.com/torchatlas)). - bugfix: `cleaner.py` patched for linux. +- bugfix: tray now operates as expected on linux. - bugfix: odd mix of `\\` and `/` being used for windows filepaths. - bugfix: app no longer crashes when sidebar is toggled. +known remaining/confirmed issues: + +- russian symbols not supported by UTF-8 + ### v0.6.0 (2020-06-30) - style: custom fonts. diff --git a/README.md b/README.md index b13725c..6ad6541 100644 --- a/README.md +++ b/README.md @@ -65,13 +65,9 @@ experienced problems with the notion app, or just want to add something a bit mo default windows titlebar/frame has been replaced by one more fitting to the theme of the app. this includes the addition of an extra button, "always on top" -symbolised with an arrow (4th from the right). when toggled to point up, +symbolised with an arrow. when toggled to point up, notion will remain the top visible window even if not focused. -to customise which characters are used for these buttons, open in the `resources/preload.js` file, -find the relevant button icon (lines 69 - 82) and replace it with your chosen unicode character (e.g. -replacing `return '⨉';` with `return '🙄';`). - ### nicer scrollbars i mean, yeah. get rid of those ugly default scrollbars and use nice inconspicuous diff --git a/customiser.py b/customiser.py index dead398..100f58a 100755 --- a/customiser.py +++ b/customiser.py @@ -118,7 +118,7 @@ try: f' ...linking to {os.path.join(".", "resources", "user.css")}') with open(os.path.join(__dirname__, 'resources', 'preload.js'), 'r', encoding='UTF-8') as insert: append.write(insert.read().replace( - '☃☃☃assets☃☃☃', os.path.join(enhancer_folder, 'resources').replace('\\', '/'))) + '☃☃☃resources☃☃☃', os.path.join(enhancer_folder, 'resources').replace('\\', '/'))) else: print( f' * {os.path.join(filepath, "app","renderer","preload.js")} was not found: step skipped.') @@ -192,11 +192,9 @@ try: with open(os.path.join(filepath, "app", "main", "main.js"), 'a', encoding='UTF-8') as append: with open(os.path.join(__dirname__, 'resources', 'tray.js'), 'r', encoding='UTF-8') as insert: append.write('\n' + insert.read().replace( - '☃☃☃hotkey☃☃☃', hotkey)) - print( - f' ...copying tray icon {os.path.join(".", "logo.png")} to {os.path.join(filepath, "app", "main")}') - copyfile(os.path.join(__dirname__, 'logo.png'), - os.path.join(filepath, "app", "main", "logo.png")) + '☃☃☃hotkey☃☃☃', hotkey).replace( + '☃☃☃resources☃☃☃', os.path.join(enhancer_folder, 'resources').replace('\\', '/')) + ) print( f' ...copying datastore wrapper {os.path.join(".", "resources", "store.js")} to {os.path.join(filepath, "app")}') copyfile(os.path.join(__dirname__, 'resources', 'store.js'), diff --git a/docs.json b/docs.json index 7d4288c..f101b7e 100644 --- a/docs.json +++ b/docs.json @@ -8,7 +8,7 @@ "url": "https://dragonwocky.me/notion-enhancer/" }, "icon": { - "light": "logo.png" + "light": "notion.png" }, "overwrite": true, "exclude": [ diff --git a/docs/changelog.html b/docs/changelog.html index 5094605..aed0bc2 100644 --- a/docs/changelog.html +++ b/docs/changelog.html @@ -1,4 +1,4 @@ -changelog | notion enhancer

notion enhancer

+changelog | notion enhancer

notion enhancer

@@ -13,10 +13,19 @@ but can still easily be enabled by following instructions in the v0.6.1 (wip)

    -
  • new: semi-mac support? installs, but can't confirm changes have taken effect.
  • +
  • new: mac support (identical functionality to others platforms with the +exception of the native minimise/maximise/close buttons being kept, as they integrate +better with the OS while not being out-of-place in notion).
  • +
  • improved: replaced button symbols with svgs for multi-platform support.
  • +
  • improved: window close button is now red on hover (thanks to @torchatlas).
  • bugfix: cleaner.py patched for linux.
  • +
  • bugfix: tray now operates as expected on linux.
  • bugfix: odd mix of \\ and / being used for windows filepaths.
  • bugfix: app no longer crashes when sidebar is toggled.
  • +
+

known remaining/confirmed issues:

+
    +
  • russian symbols not supported by UTF-8
diff --git a/docs/index.html b/docs/index.html index ba93e40..6740e37 100644 --- a/docs/index.html +++ b/docs/index.html @@ -1,4 +1,4 @@ -notion enhancer

notion enhancer

+notion enhancer

notion enhancer

@@ -70,11 +70,8 @@ additionally, if you ever need to change or reset your notion build, the c

default windows titlebar/frame has been replaced by one more fitting to the theme of the app.

this includes the addition of an extra button, "always on top" -symbolised with an arrow (4th from the right). when toggled to point up, +symbolised with an arrow. when toggled to point up, notion will remain the top visible window even if not focused.

-

to customise which characters are used for these buttons, open in the resources/preload.js file, -find the relevant button icon (lines 69 - 82) and replace it with your chosen unicode character (e.g. -replacing return '⨉'; with return '🙄';).

diff --git a/docs/logo.png b/docs/notion.png similarity index 100% rename from docs/logo.png rename to docs/notion.png diff --git a/docs/styling.html b/docs/styling.html index ef24b6e..94e0680 100644 --- a/docs/styling.html +++ b/docs/styling.html @@ -1,4 +1,4 @@ -styling | notion enhancer

notion enhancer

+styling | notion enhancer

notion enhancer

diff --git a/logo.png b/notion.png similarity index 100% rename from logo.png rename to notion.png diff --git a/resources/icons/alwaysontop_off.svg b/resources/icons/alwaysontop_off.svg new file mode 100644 index 0000000..592e011 --- /dev/null +++ b/resources/icons/alwaysontop_off.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/icons/alwaysontop_on.svg b/resources/icons/alwaysontop_on.svg new file mode 100644 index 0000000..56afa32 --- /dev/null +++ b/resources/icons/alwaysontop_on.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/icons/close.svg b/resources/icons/close.svg new file mode 100644 index 0000000..2b75d8d --- /dev/null +++ b/resources/icons/close.svg @@ -0,0 +1,4 @@ + + + + diff --git a/resources/icons/mac.png b/resources/icons/mac.png new file mode 100644 index 0000000000000000000000000000000000000000..83412d4389f76c295c72992f782dfb3d9f987542 GIT binary patch literal 7192 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 + + diff --git a/resources/icons/maximise_on.svg b/resources/icons/maximise_on.svg new file mode 100644 index 0000000..b8967f4 --- /dev/null +++ b/resources/icons/maximise_on.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/icons/minimise.svg b/resources/icons/minimise.svg new file mode 100644 index 0000000..82c5364 --- /dev/null +++ b/resources/icons/minimise.svg @@ -0,0 +1,3 @@ + + + diff --git a/resources/icons/tray.ico b/resources/icons/tray.ico new file mode 100644 index 0000000000000000000000000000000000000000..b46f68cf8ad88d1dc489d49700ca4da9b7cc473f GIT binary patch literal 112696 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 { css = ['user']; if (store.theme) css.push('theme'); css.forEach((file) => { - file = fs.readFileSync(`☃☃☃assets☃☃☃/${file}.css`); // will be set by python script + file = fs.readFileSync(`☃☃☃resources☃☃☃/${file}.css`); // will be set by python script let style = document.createElement('style'); style.type = 'text/css'; style.innerHTML = file; @@ -72,18 +72,34 @@ require('electron').remote.getGlobal('setTimeout')(() => { .querySelector('.notion-topbar-share-menu') .parentElement.classList.add('notion-topbar-actions'); - const button_icons = { + const button_icons_raw = { + alwaysontop_on: fs.readFileSync( + '☃☃☃resources☃☃☃/icons/alwaysontop_on.svg' + ), + alwaysontop_off: fs.readFileSync( + '☃☃☃resources☃☃☃/icons/alwaysontop_off.svg' + ), + minimize: fs.readFileSync('☃☃☃resources☃☃☃/icons/minimise.svg'), + maximize_on: fs.readFileSync('☃☃☃resources☃☃☃/icons/maximise_on.svg'), + maximize_off: fs.readFileSync('☃☃☃resources☃☃☃/icons/maximise_off.svg'), + close: fs.readFileSync('☃☃☃resources☃☃☃/icons/close.svg'), + }, + button_icons = { alwaysontop() { - return appwindow.isAlwaysOnTop() ? '🠙' : '🠛'; + return appwindow.isAlwaysOnTop() + ? button_icons_raw.alwaysontop_on + : button_icons_raw.alwaysontop_off; // '🠙' : '🠛' }, minimize() { - return '⚊'; + return button_icons_raw.minimize; // '⚊' }, maximize() { - return appwindow.isMaximized() ? '🗗' : '🗖'; + return appwindow.isMaximized() + ? button_icons_raw.maximize_on + : button_icons_raw.maximize_off; // '🗗' : '🗖' }, close() { - return '⨉'; + return button_icons_raw.close; // '⨉' }, }, button_actions = { @@ -118,6 +134,8 @@ require('electron').remote.getGlobal('setTimeout')(() => { close: document.querySelector('.window-button.btn-close'), }; + console.log(button_icons_raw); + button_elements.alwaysontop.innerHTML = button_icons.alwaysontop(); button_elements.alwaysontop.onclick = button_actions.alwaysontop; diff --git a/resources/theme.css b/resources/theme.css index 8048a2a..e0fa1f6 100644 --- a/resources/theme.css +++ b/resources/theme.css @@ -85,6 +85,9 @@ background: var(--theme-button) !important; box-shadow: 0 0 0 0.5px var(--theme-button_border); } +.window-button.btn-close:hover { + background: #e81123 !important; +} [style*='background: rgb(63, 68, 71)'] { background: var(--theme-card) !important; diff --git a/resources/tray.js b/resources/tray.js index 5628e28..912c249 100644 --- a/resources/tray.js +++ b/resources/tray.js @@ -28,19 +28,23 @@ function enhancements() { }, }); tray = new Tray( - new nativeImage.createFromPath(path.join(__dirname, 'logo.png')).resize({ - width: 16, - height: 16, - }) + isMac + ? new nativeImage.createFromPath('☃☃☃resources☃☃☃/icons/logo.png').resize( + { + width: 16, + height: 16, + } + ) + : '☃☃☃resources☃☃☃/icons/tray.ico' ); const contextMenu = Menu.buildFromTemplate([ { id: 'startup', - label: 'Run on Startup', + label: 'Run on startup', type: 'checkbox', checked: electron_1.app.getLoginItemSettings().openAtLogin, click: () => { - contextMenu.getMenuItemById('openhidden').checked + contextMenu.getMenuItemById('startup').checked ? electron_1.app.setLoginItemSettings({ openAtLogin: true }) : electron_1.app.setLoginItemSettings({ openAtLogin: false }); tray.setContextMenu(contextMenu); @@ -48,7 +52,7 @@ function enhancements() { }, { id: 'openhidden', - label: 'Hide on Open', + label: 'Hide on open', type: 'checkbox', checked: store.openhidden, click: () => { @@ -58,7 +62,7 @@ function enhancements() { }, { id: 'maximized', - label: 'Open Maximised', + label: 'Open maximised', type: 'checkbox', checked: store.maximized, click: () => { @@ -68,7 +72,7 @@ function enhancements() { }, { id: 'tray', - label: 'Close to Tray', + label: 'Close to tray', type: 'checkbox', checked: store.tray, click: () => { @@ -78,7 +82,7 @@ function enhancements() { }, { id: 'theme', - label: 'Load Custom Theme', + label: 'Load theme.css', type: 'checkbox', checked: store.theme, click: () => { diff --git a/resources/user.css b/resources/user.css index 2a28bde..fa98c88 100644 --- a/resources/user.css +++ b/resources/user.css @@ -58,7 +58,25 @@ border-radius: 4px; font-size: 16px; transition-duration: 0.2s; - cursor: default; + cursor: default; /* -- not sure? on windows native window buttons have the default cursor, + but other buttons in the titlebar have cursor: pointer */ +} +.window-button svg { + margin-top: 8px; + width: 14px; + height: 14px; +} +.window-button svg path { + fill: currentColor; +} +.window-button svg line { + stroke: currentColor; +} +.window-button.btn-close:hover { + background: #e81123 !important; +} +.window-button.btn-close:hover svg line { + stroke: white; } /* window control buttons: light theme */ @@ -74,13 +92,6 @@ background: rgb(71, 76, 80); } -/* set close button to red on hover */ - -.btn-close:hover{ - background: #E81123 !important; - color: white; -} - /* scrollbar: pointer */ .notion-scroller { cursor: auto;