diff --git a/core/file_area_list.js b/core/file_area_list.js index 637c3c3e..6c31a763 100644 --- a/core/file_area_list.js +++ b/core/file_area_list.js @@ -306,68 +306,17 @@ exports.getModule = class FileAreaList extends MenuModule { return this.updateCustomViewTextsWithFilter(category, startId, this.currentFileEntry.entryInfo); } - displayArtAndPrepViewController(name, options, cb) { - const self = this; - const config = this.menuConfig.config; - - async.waterfall( - [ - function readyAndDisplayArt(callback) { - if(options.clearScreen) { - self.client.term.rawWrite(ansi.resetScreen()); - } - - theme.displayThemedAsset( - config.art[name], - self.client, - { font : self.menuConfig.font, trailingLF : false }, - (err, artData) => { - return callback(err, artData); - } - ); - }, - function prepeareViewController(artData, callback) { - if(_.isUndefined(self.viewControllers[name])) { - const vcOpts = { - client : self.client, - formId : FormIds[name], - }; - - if(!_.isUndefined(options.noInput)) { - vcOpts.noInput = options.noInput; - } - - const vc = self.addViewController(name, new ViewController(vcOpts)); - - if('details' === name) { - try { - self.detailsInfoArea = { - top : artData.mciMap.XY2.position, - bottom : artData.mciMap.XY3.position, - }; - } catch(e) { - return callback(Errors.DoesNotExist('Missing XY2 and XY3 position indicators!')); - } - } - - const loadOpts = { - callingMenu : self, - mciMap : artData.mciMap, - formId : FormIds[name], - }; - - return vc.loadFromMenuConfig(loadOpts, callback); - } - - self.viewControllers[name].setFocus(true); - return callback(null); - - }, - ], - err => { - return cb(err); + displayArtDataPrepCallback(name, artData, viewController) { + if ('details' === name) { + try { + this.detailsInfoArea = { + top: artData.mciMap.XY2.position, + bottom: artData.mciMap.XY3.position, + }; + } catch(e) { + throw Errors.DoesNotExist('Missing XY2 and XY3 position indicators!'); } - ); + } } displayBrowsePage(clearScreen, cb) { @@ -388,7 +337,12 @@ exports.getModule = class FileAreaList extends MenuModule { return callback(null); }, function prepArtAndViewController(callback) { - return self.displayArtAndPrepViewController('browse', { clearScreen : clearScreen }, callback); + return self.displayArtAndPrepViewController( + 'browse', + FormIds.browse, + { clearScreen : clearScreen, artDataPrep: self.displayArtDataPrepCallback.bind(self) }, + callback + ); }, function loadCurrentFileInfo(callback) { self.currentFileEntry = new FileEntry(); @@ -457,12 +411,17 @@ exports.getModule = class FileAreaList extends MenuModule { } displayDetailsPage(cb) { - const self = this; + const self = this; async.series( [ function prepArtAndViewController(callback) { - return self.displayArtAndPrepViewController('details', { clearScreen : true }, callback); + return self.displayArtAndPrepViewController( + 'details', + FormIds.details, + { clearScreen : true, artDataPrep: self.displayArtDataPrepCallback.bind(self) }, + callback + ); }, function populateViews(callback) { self.populateCustomLabels('details', MciViewIds.details.customRangeStart); @@ -678,7 +637,16 @@ exports.getModule = class FileAreaList extends MenuModule { gotoTopPos(); } - return self.displayArtAndPrepViewController(name, { clearScreen : false, noInput : true }, callback); + return self.displayArtAndPrepViewController( + name, + FormIds[name], + { + clearScreen : false, + noInput : true, + artDataPrep: self.displayArtDataPrepCallback.bind(self) + }, + callback + ); }, function populateViews(callback) { self.lastDetailsViewController = self.viewControllers[name]; diff --git a/core/file_base_download_manager.js b/core/file_base_download_manager.js index 8487697f..2d34ec55 100644 --- a/core/file_base_download_manager.js +++ b/core/file_base_download_manager.js @@ -168,7 +168,11 @@ exports.getModule = class FileBaseDownloadQueueManager extends MenuModule { async.series( [ function prepArtAndViewController(callback) { - return self.displayArtAndPrepViewController('queueManager', { clearScreen : clearScreen }, callback); + return self.displayArtAndPrepViewController( + 'queueManager', FormIds.queueManager, + { clearScreen : clearScreen }, + callback + ); }, function populateViews(callback) { return self.updateDownloadQueueView(callback); @@ -181,57 +185,4 @@ exports.getModule = class FileBaseDownloadQueueManager extends MenuModule { } ); } - - displayArtAndPrepViewController(name, options, cb) { - const self = this; - const config = this.menuConfig.config; - - async.waterfall( - [ - function readyAndDisplayArt(callback) { - if(options.clearScreen) { - self.client.term.rawWrite(ansi.resetScreen()); - } - - theme.displayThemedAsset( - config.art[name], - self.client, - { font : self.menuConfig.font, trailingLF : false }, - (err, artData) => { - return callback(err, artData); - } - ); - }, - function prepeareViewController(artData, callback) { - if(_.isUndefined(self.viewControllers[name])) { - const vcOpts = { - client : self.client, - formId : FormIds[name], - }; - - if(!_.isUndefined(options.noInput)) { - vcOpts.noInput = options.noInput; - } - - const vc = self.addViewController(name, new ViewController(vcOpts)); - - const loadOpts = { - callingMenu : self, - mciMap : artData.mciMap, - formId : FormIds[name], - }; - - return vc.loadFromMenuConfig(loadOpts, callback); - } - - self.viewControllers[name].setFocus(true); - return callback(null); - - }, - ], - err => { - return cb(err); - } - ); - } }; diff --git a/core/file_base_web_download_manager.js b/core/file_base_web_download_manager.js index cf509cd9..6d4fe5db 100644 --- a/core/file_base_web_download_manager.js +++ b/core/file_base_web_download_manager.js @@ -173,7 +173,12 @@ exports.getModule = class FileBaseWebDownloadQueueManager extends MenuModule { async.series( [ function prepArtAndViewController(callback) { - return self.displayArtAndPrepViewController('queueManager', { clearScreen : clearScreen }, callback); + return self.displayArtAndPrepViewController( + 'queueManager', + FormIds.queueManager, + { clearScreen : clearScreen }, + callback + ); }, function prepareQueueDownloadLinks(callback) { const webDlExpireTimeFormat = self.menuConfig.config.webDlExpireTimeFormat || 'YYYY-MMM-DD @ h:mm'; @@ -226,57 +231,4 @@ exports.getModule = class FileBaseWebDownloadQueueManager extends MenuModule { } ); } - - displayArtAndPrepViewController(name, options, cb) { - const self = this; - const config = this.menuConfig.config; - - async.waterfall( - [ - function readyAndDisplayArt(callback) { - if(options.clearScreen) { - self.client.term.rawWrite(ansi.resetScreen()); - } - - theme.displayThemedAsset( - config.art[name], - self.client, - { font : self.menuConfig.font, trailingLF : false }, - (err, artData) => { - return callback(err, artData); - } - ); - }, - function prepeareViewController(artData, callback) { - if(_.isUndefined(self.viewControllers[name])) { - const vcOpts = { - client : self.client, - formId : FormIds[name], - }; - - if(!_.isUndefined(options.noInput)) { - vcOpts.noInput = options.noInput; - } - - const vc = self.addViewController(name, new ViewController(vcOpts)); - - const loadOpts = { - callingMenu : self, - mciMap : artData.mciMap, - formId : FormIds[name], - }; - - return vc.loadFromMenuConfig(loadOpts, callback); - } - - self.viewControllers[name].setFocus(true); - return callback(null); - - }, - ], - err => { - return cb(err); - } - ); - } }; diff --git a/core/menu_module.js b/core/menu_module.js index 0e4cfc2d..9ea78c94 100644 --- a/core/menu_module.js +++ b/core/menu_module.js @@ -11,6 +11,7 @@ const stringFormat = require('../core/string_format.js'); const MultiLineEditTextView = require('../core/multi_line_edit_text_view.js').MultiLineEditTextView; const Errors = require('../core/enig_error.js').Errors; const { getPredefinedMCIValue } = require('../core/predefined_mci.js'); +const EnigAssert = require('./enigma_assert'); // deps const async = require('async'); @@ -563,6 +564,66 @@ exports.MenuModule = class MenuModule extends PluginModule { }); } + displayArtAndPrepViewController(name, formId, options, cb) { + const config = this.menuConfig.config; + EnigAssert(_.isObject(config)); + + async.waterfall( + [ + (callback) => { + if(options.clearScreen) { + this.client.term.rawWrite(ansi.resetScreen()); + } + + theme.displayThemedAsset( + config.art[name], + this.client, + { font : this.menuConfig.font, trailingLF : false }, + (err, artData) => { + return callback(err, artData); + } + ); + }, + (artData, callback) => { + if(_.isUndefined(this.viewControllers[name])) { + const vcOpts = { + client : this.client, + formId : formId, + }; + + if(!_.isUndefined(options.noInput)) { + vcOpts.noInput = options.noInput; + } + + const vc = this.addViewController(name, new ViewController(vcOpts)); + + if (_.isFunction(options.artDataPrep)) { + try { + options.artDataPrep(name, artData, vc); + } catch(e) { + return callback(e); + } + } + + const loadOpts = { + callingMenu : this, + mciMap : artData.mciMap, + formId : formId, + }; + + return vc.loadFromMenuConfig(loadOpts, callback); + } + + this.viewControllers[name].setFocus(true); + return callback(null); + }, + ], + err => { + return cb(err); + } + ); + } + setViewText(formName, mciId, text, appendMultiLine) { const view = this.getView(formName, mciId); if(!view) {