From ed10290a376b1086d1380807e7db9162642e8eb9 Mon Sep 17 00:00:00 2001 From: Coleman Watts Date: Wed, 19 Feb 2020 16:45:39 -0500 Subject: [PATCH] Menubar - Add "Find menu item..." search feature Allows user to locate menu items by typing a few letters. Find tool is located under the "Home" (Civi logo) menu. --- css/crm-menubar.css | 16 ++++++++++ extension-compatibility.json | 5 ++++ js/crm.menubar.js | 46 +++++++++++++++++++++++++++-- templates/CRM/common/accesskeys.hlp | 2 +- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/css/crm-menubar.css b/css/crm-menubar.css index 5b584524f4..63f421f121 100644 --- a/css/crm-menubar.css +++ b/css/crm-menubar.css @@ -183,6 +183,22 @@ body.crm-menubar-over-cms-menu #crm-menubar-toggle-position a i { transform: rotate(180deg); } +/* Drilldown menu item finder */ +#civicrm-menu [data-name=MenubarDrillDown] > a { + padding-top: 2px; + padding-bottom: 2px; +} +#crm-menubar-drilldown { + padding: 4px; + background-color: #eee; +} +#crm-menubar-drilldown:focus { + background-color: white; +} +#crm-menubar-drilldown + .sub-arrow:before { + margin-top: 5px; +} + @media (min-width: $breakMin) { /* Switch to desktop layout diff --git a/extension-compatibility.json b/extension-compatibility.json index b7b4031ae3..2424792ee3 100644 --- a/extension-compatibility.json +++ b/extension-compatibility.json @@ -1,4 +1,9 @@ { + "com.civibridge.quickmenu": { + "obsolete": "5.24", + "disable": true, + "uninstall": true + }, "org.civicrm.exportui": { "obsolete": "5.23", "disable": true, diff --git a/js/crm.menubar.js b/js/crm.menubar.js index 9fa49f63d6..eba37ed3c4 100644 --- a/js/crm.menubar.js +++ b/js/crm.menubar.js @@ -78,12 +78,17 @@ }) .on('show.smapi', function(e, menu) { // Focus menu when opened with an accesskey - $(menu).siblings('a[accesskey]').focus(); + if ($(menu).parent().data('name') === 'Home') { + $('#crm-menubar-drilldown').focus(); + } else { + $(menu).siblings('a[accesskey]').focus(); + } }) .smartmenus(CRM.menubar.settings); initialized = true; CRM.menubar.initializeResponsive(); CRM.menubar.initializeSearch(); + CRM.menubar.initializeDrill(); }); } }, @@ -144,6 +149,9 @@ getItem: function(itemName) { return traverse(CRM.menubar.data.menu, itemName, 'get'); }, + findItems: function(searchTerm) { + return findRecursive(CRM.menubar.data.menu, searchTerm.toLowerCase().replace(/ /g, '')); + }, addItems: function(position, targetName, items) { var list, container, $ul; if (position === 'before' || position === 'after') { @@ -376,6 +384,14 @@ return !$('ul.crm-quickSearch-results').is(':visible:not(.ui-state-disabled)'); }); }, + initializeDrill: function() { + $('#civicrm-menu').on('keyup', '#crm-menubar-drilldown', function() { + var term = $(this).val(), + results = term ? CRM.menubar.findItems(term).slice(0, 20) : []; + $(this).parent().next('ul').html(getTpl('branch')({items: results, branchTpl: getTpl('branch'), drillTpl: _.noop})); + $('#civicrm-menu').smartmenus('refresh').smartmenus('itemActivate', $(this).closest('a')); + }); + }, treeTpl: '