From 889e370a103a9f0c7c5260b17aac6c0de035192f Mon Sep 17 00:00:00 2001 From: Nate Date: Wed, 18 Mar 2020 11:54:31 -0600 Subject: [PATCH] Template: Add keyboard shortcut Settings, restore message display. --- resources/footer.php | 2 + themes/default/app_config.php | 58 +++++++- themes/default/template.php | 246 ++++++++++++++++++---------------- 3 files changed, 190 insertions(+), 116 deletions(-) diff --git a/resources/footer.php b/resources/footer.php index cce827a2e1..35e4fcfcd4 100644 --- a/resources/footer.php +++ b/resources/footer.php @@ -230,6 +230,8 @@ $view->assign('login_logo_source', $login_logo_source); $view->assign('login_logo_width', $login_logo_width); $view->assign('login_logo_height', $login_logo_height); + //messages + $view->assign('messages', message::html(true, ' ')); //render the view $output = $view->render('template.php'); diff --git a/themes/default/app_config.php b/themes/default/app_config.php index 76576ed8d5..5aa17cef61 100644 --- a/themes/default/app_config.php +++ b/themes/default/app_config.php @@ -2037,5 +2037,61 @@ $apps[$x]['default_settings'][$y]['default_setting_value'] = "fas fa-times"; $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; $apps[$x]['default_settings'][$y]['default_setting_description'] = ""; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "814ed631-a315-4bde-a822-4038432ae2a6"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_check_all_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [ctrl]+[a], list,edit: to check all"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "48d7d44b-9e2b-4e6c-a4e5-c75e7e76d4db"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_add_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [insert], list: to add"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "422747c2-07bb-48f5-8358-6df70054fd1f"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_copy_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [ctrl]+[c], list,edit: to copy"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "2c0621d4-da12-40c1-8878-fc45a2f76d08"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_toggle_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [space], list: to toggle checked"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "4500e534-77fb-4318-bf13-0c108ece62b1"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_delete_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "false"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [delete], list: to delete checked, edit: to delete"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "c7d5ac85-556a-4b9a-8e12-743456dbc17f"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_submit_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [enter] - default behavior to submit form, when present"; + $y++; + $apps[$x]['default_settings'][$y]['default_setting_uuid'] = "f5f1ecec-5c31-4b32-a126-4857ee671224"; + $apps[$x]['default_settings'][$y]['default_setting_category'] = "theme"; + $apps[$x]['default_settings'][$y]['default_setting_subcategory'] = "keyboard_shortcut_save_enabled"; + $apps[$x]['default_settings'][$y]['default_setting_name'] = "boolean"; + $apps[$x]['default_settings'][$y]['default_setting_value'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_enabled'] = "true"; + $apps[$x]['default_settings'][$y]['default_setting_description'] = "key: [ctrl]+[s], edit: to save"; -?> +?> \ No newline at end of file diff --git a/themes/default/template.php b/themes/default/template.php index 58e199b736..d7aa20382a 100644 --- a/themes/default/template.php +++ b/themes/default/template.php @@ -167,7 +167,7 @@ $(document).ready(function() { {/literal} - // echo message::html(true, ' '); + {$messages} //message bar hide on hover {literal} @@ -219,31 +219,35 @@ //keyboard shortcut scripts //key: [enter] - retain default behavior to submit form, when present - note: safari does not honor the first submit element when hiding it using 'display: none;' in the setAttribute method - {literal} - var action_bar_actions, first_form, first_submit; - action_bar_actions = document.querySelector('div#action_bar.action_bar > div.actions'); - first_form = document.querySelector('form#frm'); + {if $settings.theme.keyboard_shortcut_submit_enabled} + {literal} + var action_bar_actions, first_form, first_submit; + action_bar_actions = document.querySelector('div#action_bar.action_bar > div.actions'); + first_form = document.querySelector('form#frm'); - if (action_bar_actions !== null) { - if (first_form !== null) { - first_submit = document.createElement('input'); - first_submit.type = 'submit'; - first_submit.id = 'default_submit'; - first_submit.setAttribute('style','position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;'); - first_form.prepend(first_submit); - window.addEventListener('keydown',function(e){ - if (e.which == 13 && (e.target.tagName == 'INPUT' || e.target.tagName == 'SELECT')) { - if (typeof window.submit_form === 'function') { submit_form(); } - else { document.getElementById('frm').submit(); } - } - }); + if (action_bar_actions !== null) { + if (first_form !== null) { + first_submit = document.createElement('input'); + first_submit.type = 'submit'; + first_submit.id = 'default_submit'; + first_submit.setAttribute('style','position: absolute; left: -10000px; top: auto; width: 1px; height: 1px; overflow: hidden;'); + first_form.prepend(first_submit); + window.addEventListener('keydown',function(e){ + if (e.which == 13 && (e.target.tagName == 'INPUT' || e.target.tagName == 'SELECT')) { + if (typeof window.submit_form === 'function') { submit_form(); } + else { document.getElementById('frm').submit(); } + } + }); + } } - } - {/literal} + {/literal} + {/if} //common (used by delete and toggle) - var list_checkboxes; - list_checkboxes = document.querySelectorAll('table.list tr.list-row td.checkbox input[type=checkbox]'); + {if $settings.theme.keyboard_shortcut_delete_enabled || $settings.theme.keyboard_shortcut_toggle_enabled} + var list_checkboxes; + list_checkboxes = document.querySelectorAll('table.list tr.list-row td.checkbox input[type=checkbox]'); + {/if} //keyup event listener {literal} @@ -286,40 +290,44 @@ {/literal} //key: [insert], list: to add - {literal} - if (e.which == 45 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { - e.preventDefault(); - var list_add_button; - list_add_button = document.getElementById('btn_add'); - if (list_add_button === null || list_add_button === 'undefined') { - list_add_button = document.querySelector('button[name=btn_add]'); + {if $settings.theme.keyboard_shortcut_add_enabled} + {literal} + if (e.which == 45 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + e.preventDefault(); + var list_add_button; + list_add_button = document.getElementById('btn_add'); + if (list_add_button === null || list_add_button === 'undefined') { + list_add_button = document.querySelector('button[name=btn_add]'); + } + if (list_add_button !== null) { list_add_button.click(); } } - if (list_add_button !== null) { list_add_button.click(); } - } - {/literal} + {/literal} + {/if} //key: [delete], list: to delete checked, edit: to delete - {literal} - if (e.which == 46 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { - e.preventDefault(); - if (list_checkboxes.length !== 0) { - var list_delete_button; - list_delete_button = document.querySelector('button[name=btn_delete]'); - if (list_delete_button === null || list_delete_button === 'undefined') { - list_delete_button = document.getElementById('btn_delete'); + {if $settings.theme.keyboard_shortcut_delete_enabled} + {literal} + if (e.which == 46 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + e.preventDefault(); + if (list_checkboxes.length !== 0) { + var list_delete_button; + list_delete_button = document.querySelector('button[name=btn_delete]'); + if (list_delete_button === null || list_delete_button === 'undefined') { + list_delete_button = document.getElementById('btn_delete'); + } + if (list_delete_button !== null) { list_delete_button.click(); } } - if (list_delete_button !== null) { list_delete_button.click(); } - } - else { - var edit_delete_button; - edit_delete_button = document.querySelector('button[name=btn_delete]'); - if (edit_delete_button === null || edit_delete_button === 'undefined') { - edit_delete_button = document.getElementById('btn_delete'); + else { + var edit_delete_button; + edit_delete_button = document.querySelector('button[name=btn_delete]'); + if (edit_delete_button === null || edit_delete_button === 'undefined') { + edit_delete_button = document.getElementById('btn_delete'); + } + if (edit_delete_button !== null) { edit_delete_button.click(); } } - if (edit_delete_button !== null) { edit_delete_button.click(); } } - } - {/literal} + {/literal} + {/if} //keyup end {literal} @@ -332,76 +340,84 @@ {/literal} //key: [space], list: to toggle checked - note: for default [space] checkbox behavior (ie. toggle focused checkbox) include in the if statement: && !(e.target.tagName == 'INPUT' && e.target.type == 'checkbox') - {literal} - if (e.which == 32 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA' && list_checkboxes.length !== 0) { - e.preventDefault(); - var list_toggle_button; - list_toggle_button = document.querySelector('button[name=btn_toggle]'); - if (list_toggle_button === null || list_toggle_button === 'undefined') { - list_toggle_button = document.getElementById('btn_toggle'); - } - if (list_toggle_button !== null) { list_toggle_button.click(); } - } - {/literal} - - //key: [ctrl]+[a], list,edit: to check all - {literal} - if ((((e.which == 97 || e.which == 65) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || e.which == 19) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { - var list_checkbox_all; - list_checkbox_all = document.querySelectorAll('table.list tr.list-header th.checkbox input[name=checkbox_all]'); - if (list_checkbox_all !== null && list_checkbox_all.length > 0) { - e.preventDefault(); - for (var x = 0, max = list_checkbox_all.length; x < max; x++) { - list_checkbox_all[x].click(); - } - } - var edit_checkbox_all; - edit_checkbox_all = document.querySelectorAll('td.edit_delete_checkbox_all > span > input[name=checkbox_all]'); - if (edit_checkbox_all !== null && edit_checkbox_all.length > 0) { - e.preventDefault(); - for (var x = 0, max = edit_checkbox_all.length; x < max; x++) { - edit_checkbox_all[x].click(); - } - } - } - {/literal} - - //key: [ctrl]+[s], edit: to save - {literal} - if (((e.which == 115 || e.which == 83) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || (e.which == 19)) { - e.preventDefault(); - var edit_save_button; - edit_save_button = document.getElementById('btn_save'); - if (edit_save_button === null || edit_save_button === 'undefined') { - edit_save_button = document.querySelector('button[name=btn_save]'); - } - if (edit_save_button !== null) { edit_save_button.click(); } - } - {/literal} - - //key: [ctrl]+[c], list,edit: to copy - {if $browser_name_short == 'Safari'} //emulate with detecting [c] only, as [command] and [control] keys are ignored when captured + {if $settings.theme.keyboard_shortcut_toggle_enabled} {literal} - if ((e.which == 99 || e.which == 67) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { - {/literal} - {else} - {literal} - if ((((e.which == 99 || e.which == 67) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || (e.which == 19)) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + if (e.which == 32 && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA' && list_checkboxes.length !== 0) { + e.preventDefault(); + var list_toggle_button; + list_toggle_button = document.querySelector('button[name=btn_toggle]'); + if (list_toggle_button === null || list_toggle_button === 'undefined') { + list_toggle_button = document.getElementById('btn_toggle'); + } + if (list_toggle_button !== null) { list_toggle_button.click(); } + } {/literal} {/if} - {literal} - var current_selection, copy_button; - current_selection = window.getSelection(); - if (current_selection === null || current_selection == 'undefined' || current_selection.toString() == '') { - e.preventDefault(); - copy_button = document.getElementById('btn_copy'); - if (copy_button === null || copy_button === 'undefined') { - copy_button = document.querySelector('button[name=btn_copy]'); + + //key: [ctrl]+[a], list,edit: to check all + {if $settings.theme.keyboard_shortcut_check_all_enabled} + {literal} + if ((((e.which == 97 || e.which == 65) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || e.which == 19) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + var list_checkbox_all; + list_checkbox_all = document.querySelectorAll('table.list tr.list-header th.checkbox input[name=checkbox_all]'); + if (list_checkbox_all !== null && list_checkbox_all.length > 0) { + e.preventDefault(); + for (var x = 0, max = list_checkbox_all.length; x < max; x++) { + list_checkbox_all[x].click(); + } + } + var edit_checkbox_all; + edit_checkbox_all = document.querySelectorAll('td.edit_delete_checkbox_all > span > input[name=checkbox_all]'); + if (edit_checkbox_all !== null && edit_checkbox_all.length > 0) { + e.preventDefault(); + for (var x = 0, max = edit_checkbox_all.length; x < max; x++) { + edit_checkbox_all[x].click(); + } } - if (copy_button !== null) { copy_button.click(); } } - } - {/literal} + {/literal} + {/if} + + //key: [ctrl]+[s], edit: to save + {if $settings.theme.keyboard_shortcut_check_save_enabled} + {literal} + if (((e.which == 115 || e.which == 83) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || (e.which == 19)) { + e.preventDefault(); + var edit_save_button; + edit_save_button = document.getElementById('btn_save'); + if (edit_save_button === null || edit_save_button === 'undefined') { + edit_save_button = document.querySelector('button[name=btn_save]'); + } + if (edit_save_button !== null) { edit_save_button.click(); } + } + {/literal} + {/if} + + //key: [ctrl]+[c], list,edit: to copy + {if $settings.theme.keyboard_shortcut_check_copy_enabled} + {if $browser_name_short == 'Safari'} //emulate with detecting [c] only, as [command] and [control] keys are ignored when captured + {literal} + if ((e.which == 99 || e.which == 67) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + {/literal} + {else} + {literal} + if ((((e.which == 99 || e.which == 67) && (e.ctrlKey || e.metaKey) && !e.shiftKey) || (e.which == 19)) && !(e.target.tagName == 'INPUT' && e.target.type == 'text') && e.target.tagName != 'TEXTAREA') { + {/literal} + {/if} + {literal} + var current_selection, copy_button; + current_selection = window.getSelection(); + if (current_selection === null || current_selection == 'undefined' || current_selection.toString() == '') { + e.preventDefault(); + copy_button = document.getElementById('btn_copy'); + if (copy_button === null || copy_button === 'undefined') { + copy_button = document.querySelector('button[name=btn_copy]'); + } + if (copy_button !== null) { copy_button.click(); } + } + } + {/literal} + {/if} //keydown end {literal}