From b5fd50fe7affd5f77277fae2e9426e3335c3aa8b Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 5 Oct 2019 10:05:07 +0100 Subject: [PATCH 1/4] Add toggle for saving open tabs This toggles the setting to save tabs when you close patchbay. The setting is not yet enabled. --- app/html/settings/save-tabs.js | 41 ++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 app/html/settings/save-tabs.js diff --git a/app/html/settings/save-tabs.js b/app/html/settings/save-tabs.js new file mode 100644 index 00000000..1c21946b --- /dev/null +++ b/app/html/settings/save-tabs.js @@ -0,0 +1,41 @@ +const nest = require('depnest') +const { h } = require('mutant') + +exports.gives = nest({ + 'app.html.settings': true +}) + + +exports.needs = nest({ + 'app.html.settings': 'map', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' +}) + +exports.create = function (api) { + return nest({ + 'app.html.settings': saveTabs + }) + + function saveTabs () { + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + const toggleSaveTabs = (ev) => { + api.settings.sync.set({ patchbay: { saveTabs: ev.target.checked } }) + } + + return { + group: 'general', + title: 'Save Tabs', + body: h('SaveTabsStyles', [ + h('p', [ + 'Save open tabs when Patchbay is closed', + h('input', { + type: 'checkbox', + checked: saveTabs, + 'ev-change': toggleSaveTabs + }) + ]) + ]) + } + } +} From 2ddb1e6a14b2a9f232fa71e272398d1c0a85381c Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 5 Oct 2019 12:23:18 +0100 Subject: [PATCH 2/4] Store tabs when open if the feature is enabled If the setting is enabled, then when we open a new tab, check if it is already in the list; if not add it. --- app/sync/go-to.js | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/app/sync/go-to.js b/app/sync/go-to.js index 2d5c8dca..9eff28f5 100644 --- a/app/sync/go-to.js +++ b/app/sync/go-to.js @@ -8,7 +8,9 @@ exports.needs = nest({ 'history.obs.store': 'first', 'history.sync.push': 'first', 'router.async.normalise': 'first', - 'router.async.router': 'first' + 'router.async.router': 'first', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' }) exports.create = function (api) { @@ -59,6 +61,24 @@ exports.create = function (api) { page.id = page.id || locationId tabs.add(page, !openBackground, split) + // Save Tabs: If enabled then add it to default tabs. + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + if (saveTabs()) { + const openTabs = api.settings.obs.get('patchbay.openTabs', []) + var _tabs = openTabs() + + var newTab = Object.values(loc)[0] + if (loc.page) { + newTab = '/' + newTab + } + + if (_tabs.indexOf(newTab) === -1) { + _tabs.push(newTab) + + api.settings.sync.set({ patchbay: { openTabs: _tabs } }) + } + } + if (openBackground) { const history = api.history.obs.store() var _history = history() From b148764e602c84c8a0bbcf2915906ac84b331ead Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 5 Oct 2019 15:31:39 +0100 Subject: [PATCH 3/4] Remove pages from open tabs list when closed If the save open tabs feature enabled, then if the page is in the opne tabs list, delete it from the list when closing the tab. --- app/html/tabs.js | 25 ++++++++++++++++++++++++- 1 file changed, 24 insertions(+), 1 deletion(-) diff --git a/app/html/tabs.js b/app/html/tabs.js index 01d4abde..a0b705d5 100644 --- a/app/html/tabs.js +++ b/app/html/tabs.js @@ -13,7 +13,9 @@ exports.needs = nest({ 'app.sync.goTo': 'first', 'app.sync.locationId': 'first', 'history.obs.store': 'first', - 'history.sync.push': 'first' + 'history.sync.push': 'first', + 'settings.obs.get': 'first', + 'settings.sync.set': 'first' }) exports.create = function (api) { @@ -44,6 +46,27 @@ exports.create = function (api) { return api.app.sync.locationId(loc) !== page.id }) history.set(prunedHistory) + + const defaultTabs = api.settings.obs.get('patchbay.defaultTabs', false) + + const saveTabs = api.settings.obs.get('patchbay.saveTabs', false) + if (saveTabs()) { + const openTabs = api.settings.obs.get('patchbay.openTabs', []) + var _openTabs = openTabs() + + var closedTab = JSON.parse(page.id) + var theTab = Object.values(closedTab)[0] + + if (closedTab.page) { + theTab = '/' + theTab + } + + var index = _openTabs.indexOf(theTab) + if (index !== -1) { + _openTabs.splice(index, 1) + api.settings.sync.set({ patchbay: { openTabs: _openTabs } }) + } + } } const search = api.app.html.searchBar() From 3f95e4a10e8b4f61515cbd3f702b3ce265c463e3 Mon Sep 17 00:00:00 2001 From: Lance Wicks Date: Sat, 5 Oct 2019 16:40:05 +0100 Subject: [PATCH 4/4] Initial tabs controlled by save tabs setting Based on the saved open tabs checkbox setting we will open on load all the tabs either from the default list or from save open tabs. --- app/html/app.js | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/app/html/app.js b/app/html/app.js index d1df72d6..877cb045 100644 --- a/app/html/app.js +++ b/app/html/app.js @@ -12,8 +12,17 @@ exports.create = function (api) { return nest('app.html.app', app) function app (initialTabs) { + var saveTabs = api.settings.sync.get('patchbay.saveTabs') + var _initialTabs + + if (saveTabs) { + _initialTabs = api.settings.sync.get('patchbay.openTabs') + } else { + _initialTabs = api.settings.sync.get('patchbay.defaultTabs') + } + return h('App', api.app.html.tabs({ - initial: initialTabs || api.settings.sync.get('patchbay.defaultTabs') + initial: initialTabs || _initialTabs })) } }