diff --git a/core/menu_module.js b/core/menu_module.js index 3c5f10eb..e052b1db 100644 --- a/core/menu_module.js +++ b/core/menu_module.js @@ -152,8 +152,8 @@ function MenuModule(options) { self.prevMenu(); } } - - if(!_.isObject(self.menuConfig.form) && !_.isString(self.menuConfig.prompt)) { + + if(_.has(self.menuConfig, 'runtime.autoNext') && true === self.menuConfig.runtime.autoNext) { /* If 'next' is supplied, we'll use it. Otherwise, utlize fallback which may be explicit (supplied) or non-explicit (previous menu) diff --git a/core/menu_util.js b/core/menu_util.js index 936992d2..601888a8 100644 --- a/core/menu_util.js +++ b/core/menu_util.js @@ -22,8 +22,6 @@ exports.loadMenu = loadMenu; exports.getFormConfigByIDAndMap = getFormConfigByIDAndMap; exports.handleAction = handleAction; exports.handleNext = handleNext; -//exports.applyGeneralThemeCustomization = applyGeneralThemeCustomization; -//exports.applyMciThemeCustomization = applyMciThemeCustomization; function getMenuConfig(client, name, cb) { var menuConfig; diff --git a/core/theme.js b/core/theme.js index d4846b5f..b87a1ce8 100644 --- a/core/theme.js +++ b/core/theme.js @@ -205,15 +205,21 @@ function getMergedTheme(menuConfig, promptConfig, theme) { [ 'menus', 'prompts' ].forEach(function areaEntry(areaName) { _.keys(mergedTheme[areaName]).forEach(function menuEntry(menuName) { + var createdFormSection = false; + var mergedThemeMenu = mergedTheme[areaName][menuName]; + if(_.has(theme, [ 'customization', areaName, menuName ])) { + if('telnetConnected' === menuName || 'mainMenuLastCallers' === menuName) { + console.log('break me') + } + var menuTheme = theme.customization[areaName][menuName]; - var mergedThemeMenu = mergedTheme[areaName][menuName]; // config block is direct assign/overwrite // :TODO: should probably be _.merge() if(menuTheme.config) { - mergedThemeMenu.config = _.assign(mergedThemeMenu || {}, menuTheme.config); + mergedThemeMenu.config = _.assign(mergedThemeMenu.config || {}, menuTheme.config); } if('menus' === areaName) { @@ -221,12 +227,36 @@ function getMergedTheme(menuConfig, promptConfig, theme) { getFormKeys(mergedThemeMenu.form).forEach(function formKeyEntry(formKey) { applyToForm(mergedThemeMenu.form[formKey], menuTheme, formKey); }); + } else { + if(_.isObject(menuTheme.mci)) { + // + // Not specified at menu level means we apply anything from the + // theme to form.0.mci{} + // + mergedThemeMenu.form = { 0 : { mci : { } } }; + mergeMciProperties(mergedThemeMenu.form[0], menuTheme); + createdFormSection = true; + } } } else if('prompts' === areaName) { // no 'form' or form keys for prompts -- direct to mci applyToForm(mergedThemeMenu, menuTheme); } } + + // + // Finished merging for this menu/prompt + // + // If the following conditions are true, set runtime.autoNext to true: + // * This is a menu + // * There is/was no explicit 'form' section + // * There is no 'prompt' specified + // + if('menus' === areaName && !_.isString(mergedThemeMenu.prompt) && + (createdFormSection || !_.isObject(mergedThemeMenu.form))) + { + mergedThemeMenu.runtime = _.merge(mergedThemeMenu.runtime || {}, { autoNext : true } ); + } }); });