From ff351447829641de32e59a7332f354d945df88fa Mon Sep 17 00:00:00 2001 From: Oleguer Llopart Date: Tue, 12 Dec 2023 11:20:45 +0100 Subject: [PATCH] New: Label to display only the contents of a master folder --- CHANGELOG.md | 3 +- README.md | 2 +- scripts/dom.js | 58 ++++++++++++++++++++++++++----- scripts/dom/labels.js | 11 ++++++ scripts/opencomic.js | 16 ++++++++- scripts/recently-opened.js | 2 +- scripts/settings.js | 2 ++ templates/index.content.left.html | 17 +++++++-- 8 files changed, 96 insertions(+), 15 deletions(-) create mode 100644 scripts/dom/labels.js diff --git a/CHANGELOG.md b/CHANGELOG.md index f37bed930..4216c8e9a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,7 +8,8 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), ##### 🚀 New Features -- Option to set maximum size of temporary files, preserving them when closing the app +- Option to set maximum size of temporary files, preserving them when closing the app [`a727249`](https://github.com/ollm/OpenComic/commit/a7272499407191064f9d6bd7c42ecf3bb1231a83) +- Label to display only the contents of a master folder ##### 🐛 Bug Fixes diff --git a/README.md b/README.md index 9ae90c8ec..14fe6d112 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@
-[Screenshots](https://github.com/ollm/OpenComic/blob/master/SCREENSHOTS.MD) | [Features](#features) | [Changelog](https://github.com/ollm/OpenComic/blob/master/CHANGELOG.md) | [Download](#download-beta-v100-beta5) +[Screenshots](https://github.com/ollm/OpenComic/blob/master/SCREENSHOTS.MD) | [Features](#features) | [Changelog](https://github.com/ollm/OpenComic/blob/master/CHANGELOG.md) | [Download](#download-v100)
diff --git a/scripts/dom.js b/scripts/dom.js index 3d459ec1b..c16fcd09f 100644 --- a/scripts/dom.js +++ b/scripts/dom.js @@ -1,5 +1,6 @@ const domPoster = require(p.join(appDir, 'scripts/dom/poster.js')), domManager = require(p.join(appDir, 'scripts/dom/dom.js')), + labels = require(p.join(appDir, 'scripts/dom/labels.js')), search = require(p.join(appDir, 'scripts/dom/search.js')); /*Page - Index*/ @@ -338,6 +339,13 @@ async function reloadIndex() if(indexPathA) indexPathControlA.pop(); } +var indexLabel = {}; + +function setIndexLabel(config) +{ + indexLabel = config; +} + var currentPath = false, currentPathScrollTop = [], fromDeepLoadNow = 0; async function loadIndexPage(animation = true, path = false, content = false, keepScroll = false, mainPath = false, fromGoBack = false, notAutomaticBrowsing = false, fromDeepLoad = false) @@ -359,6 +367,9 @@ async function loadIndexPage(animation = true, path = false, content = false, ke if(currentPathScrollTop[path === false ? 0 : path]) keepScroll = currentPathScrollTop[path === false ? 0 : path]; + let _indexLabel = indexLabel; + indexLabel = {}; + currentPath = path; if(!path) @@ -410,7 +421,7 @@ async function loadIndexPage(animation = true, path = false, content = false, ke { for(let key in masterFolders) { - if(fs.existsSync(masterFolders[key])) + if(fs.existsSync(masterFolders[key]) && (!_indexLabel.masterFolder || _indexLabel.masterFolder == masterFolders[key])) { let file = fileManager.file(masterFolders[key]); let files = await file.readDir(); @@ -441,7 +452,7 @@ async function loadIndexPage(animation = true, path = false, content = false, ke // Get comics in library let comicsStorage = storage.get('comics'); - if(!isEmpty(comicsStorage)) + if(!isEmpty(comicsStorage) && !_indexLabel.masterFolder) { for(let key in comicsStorage) { @@ -494,7 +505,7 @@ async function loadIndexPage(animation = true, path = false, content = false, ke if(!content) { - if(template.contentLeft('.menu-list').length === 0) template.loadContentLeft('index.content.left.html', animation); + if(template.contentLeft('.menu-list').length === 0) dom.loadIndexContentLeft(animation); template.loadGlobalElement('index.elements.menus.html', 'menus'); floatingActionButton(true, 'dom.addComicButtons();'); } @@ -532,7 +543,7 @@ async function loadIndexPage(animation = true, path = false, content = false, ke { if(readingActive) { - template.loadContentLeft('index.content.left.html', animation); + dom.loadIndexContentLeft(animation); } template.loadGlobalElement('index.elements.menus.html', 'menus'); @@ -627,15 +638,40 @@ async function loadIndexPage(animation = true, path = false, content = false, ke if(readingActive) readingActive = false; - if(!isFromRecentlyOpened) - selectMenuItem('library'); - else - selectMenuItem('recently-opened'); + if(isEmpty(_indexLabel)) + { + if(!isFromRecentlyOpened) + selectMenuItem('library'); + else + selectMenuItem('recently-opened'); + } shortcuts.register('browse'); gamepad.updateBrowsableItems(path ? sha1(path) : 'library'); } +function loadIndexContentLeft(animation, isFromSettings = false) +{ + let masterFolders = storage.get('masterFolders'); + + let _masterFolders = []; + + for(let i = 0, len = masterFolders.length; i < len; i++) + { + _masterFolders.push({ + name: p.basename(masterFolders[i]), + path: masterFolders[i], + }); + } + + handlebarsContext.masterFolders = _masterFolders; + handlebarsContext.isFromSettings = isFromSettings; + + template.loadContentLeft('index.content.left.html', animation); + + handlebarsContext.isFromSettings = false; +} + function compressedError(error) { //console.log(error); @@ -1064,7 +1100,7 @@ function changeLanguage(lan) template.contentRight('.language-list.active').removeClass('active'); template.contentRight('.language-list-'+lan).addClass('active'); - template.loadContentLeft('index.content.left.html', false); + dom.loadIndexContentLeft(false); template.loadHeader('languages.header.html', false); storage.updateVar('config', 'language', lan); @@ -1661,12 +1697,15 @@ gamepad.setButtonEvent('reading', 1, function(key, button) { module.exports = { loadIndexPage: loadIndexPage, + loadIndexContentLeft: loadIndexContentLeft, + setIndexLabel: setIndexLabel, reloadIndex: reloadIndex, loadRecentlyOpened: loadRecentlyOpened, loadLanguagesPage: loadLanguagesPage, loadSettingsPage: loadSettingsPage, loadThemePage: loadThemePage, changeLanguage: changeLanguage, + selectMenuItem: selectMenuItem, floatingActionButton: floatingActionButton, setCurrentPageVars: setCurrentPageVars, changeView: changeView, @@ -1699,6 +1738,7 @@ module.exports = { metadataPathName: metadataPathName, fromLibrary: fromLibrary, search: search, + labels: labels, this: domManager.this, query: domManager.query, queryAll: domManager.queryAll, diff --git a/scripts/dom/labels.js b/scripts/dom/labels.js new file mode 100644 index 000000000..563093571 --- /dev/null +++ b/scripts/dom/labels.js @@ -0,0 +1,11 @@ + +function masterFolder(folder, index) +{ + dom.selectMenuItem('master-folder-'+index); + dom.setIndexLabel({masterFolder: folder}); + dom.loadIndexPage(true); +} + +module.exports = { + masterFolder: masterFolder, +}; \ No newline at end of file diff --git a/scripts/opencomic.js b/scripts/opencomic.js index 72ee97b6f..f2b2de5f6 100644 --- a/scripts/opencomic.js +++ b/scripts/opencomic.js @@ -341,8 +341,8 @@ async function startApp() template.loadContentRight('index.content.right.empty.html', false); template.loadHeader('index.header.html', false); - template.loadContentLeft('index.content.left.html', false); template.loadGlobalElement('index.elements.menus.html', 'menus'); + dom.loadIndexContentLeft(false); if(!toOpenFile) { @@ -940,6 +940,20 @@ hb.registerHelper('compare', function(lvalue, operator, rvalue, options) { }); +hb.registerHelper('ifOr', function() { + + let options = arguments[arguments.length - 1]; + + for(let i = 0, len = arguments.length - 1; i < len; i++) + { + if(!playmax.empty(arguments[i])) + return options.fn(this); + } + + return options.inverse(this); + +}); + hb.registerHelper('for', function(from, to, incr, options) { var accum = ''; diff --git a/scripts/recently-opened.js b/scripts/recently-opened.js index 649dd68f5..a0b96f50b 100644 --- a/scripts/recently-opened.js +++ b/scripts/recently-opened.js @@ -126,7 +126,7 @@ async function load(animation = true, content = false) if(!content) { - if(template.contentLeft('.menu-list').length === 0) template.loadContentLeft('index.content.left.html', animation); + if(template.contentLeft('.menu-list').length === 0) dom.loadIndexContentLeft(animation); template.loadGlobalElement('index.elements.menus.html', 'menus'); dom.floatingActionButton(false); } diff --git a/scripts/settings.js b/scripts/settings.js index dff94284f..6fb6c249c 100644 --- a/scripts/settings.js +++ b/scripts/settings.js @@ -202,6 +202,7 @@ function removeMasterFolder(key) storage.set('masterFolders', masterFolders); updateMasterFolders(); + dom.loadIndexContentLeft(true, true); } } @@ -224,6 +225,7 @@ function addMasterFolder() storage.set('masterFolders', masterFolders); updateMasterFolders(); + dom.loadIndexContentLeft(true, true); } } diff --git a/templates/index.content.left.html b/templates/index.content.left.html index 628cd9ced..d13838503 100644 --- a/templates/index.content.left.html +++ b/templates/index.content.left.html @@ -1,6 +1,6 @@