From 969d00b4824b6cb4afbaa50103f659b890fb0531 Mon Sep 17 00:00:00 2001 From: Alexander Tsybulsky Date: Mon, 14 Nov 2022 17:13:47 +0200 Subject: [PATCH] Repo overview page, Polishing (#5859) Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com> --- src/ui/zabapgit_css_theme_dark.w3mi.data.css | 3 +++ .../zabapgit_css_theme_default.w3mi.data.css | 5 ++-- src/ui/zabapgit_js_common.w3mi.data.js | 26 +++++++++++++++++-- .../zcl_abapgit_gui_page_repo_over.clas.abap | 16 ++++++++---- src/ui/zcl_abapgit_gui_page_stage.clas.abap | 9 ++++++- src/utils/zcl_abapgit_repo_labels.clas.abap | 12 ++++++--- ..._abapgit_repo_labels.clas.testclasses.abap | 18 +++++++++---- src/zcl_abapgit_settings.clas.abap | 3 ++- 8 files changed, 73 insertions(+), 19 deletions(-) diff --git a/src/ui/zabapgit_css_theme_dark.w3mi.data.css b/src/ui/zabapgit_css_theme_dark.w3mi.data.css index f1fabc1ac..c5a3a8733 100644 --- a/src/ui/zabapgit_css_theme_dark.w3mi.data.css +++ b/src/ui/zabapgit_css_theme_dark.w3mi.data.css @@ -20,6 +20,9 @@ --theme-greyscale-light: #CCCCCC; --theme-greyscale-lighter: #E5E5E5; --theme-list-hover-background-color: black; + + --theme-table-background-color: #333333; + --theme-table-head-background-color: #202020; } /* GLOBALS */ diff --git a/src/ui/zabapgit_css_theme_default.w3mi.data.css b/src/ui/zabapgit_css_theme_default.w3mi.data.css index 85b1e13b8..1d0a1424e 100644 --- a/src/ui/zabapgit_css_theme_default.w3mi.data.css +++ b/src/ui/zabapgit_css_theme_default.w3mi.data.css @@ -7,6 +7,7 @@ --theme-container-background-color: #f2f2f2; --theme-container-border-color: lightgrey; --theme-table-background-color: white; + --theme-table-head-background-color: #edf2f9; --theme-table-border-color: #ddd; --theme-table-cell-border-color: #eee; @@ -366,7 +367,7 @@ div.debug_container { /* Repo overview */ .repo-overview { background-color: var(--theme-container-background-color); } -.repo-overview table { +.repo-overview table { background-color: var(--theme-table-background-color); border-color: var(--theme-table-border-color); } @@ -374,7 +375,7 @@ div.debug_container { color: var(--theme-link-color); } .repo-overview thead tr { - background-color: #edf2f9; + background-color: var(--theme-table-head-background-color); } .repo-overview thead tr, .repo-overview tfoot tr { diff --git a/src/ui/zabapgit_js_common.w3mi.data.js b/src/ui/zabapgit_js_common.w3mi.data.js index f8e7c907f..e9751ed05 100644 --- a/src/ui/zabapgit_js_common.w3mi.data.js +++ b/src/ui/zabapgit_js_common.w3mi.data.js @@ -245,7 +245,10 @@ function getIndocStyleSheet() { return style.sheet; } -function RepoOverViewHelper() { +function RepoOverViewHelper(opts) { + if (opts && opts.focusFilterKey) { + this.focusFilterKey = opts.focusFilterKey; + } this.setHooks(); this.pageId = "RepoOverViewHelperState"; // constant is OK for this case this.isDetailsDisplayed = false; @@ -281,6 +284,13 @@ RepoOverViewHelper.prototype.registerKeyboardShortcuts = function() { if (document.activeElement.id === "filter") { return; } + if (self.focusFilterKey && event.key === self.focusFilterKey) { + var filterInput = document.getElementById("filter"); + if (filterInput) filterInput.focus(); + event.preventDefault(); + return; + } + var keycode = event.keyCode; var rows = Array.prototype.slice.call(self.getVisibleRows()); var selected = document.querySelector(".repo-overview tr.selected"); @@ -457,9 +467,11 @@ function StageHelper(params) { this.formAction = params.formAction; this.patchAction = params.patchAction; this.user = params.user; + this.ids = params.ids; this.selectedCount = 0; this.filteredCount = 0; this.lastFilterValue = ""; + this.focusFilterKey = params.focusFilterKey; // DOM nodes this.dom = { @@ -497,7 +509,6 @@ function StageHelper(params) { this.setHooks(); if (this.user) this.injectFilterMe(); Hotkeys.addHotkeyToHelpSheet("^Enter", "Commit"); - this.dom.objectSearch.focus(); } StageHelper.prototype.findCounters = function() { @@ -536,6 +547,17 @@ StageHelper.prototype.setHooks = function() { this.dom.objectSearch.onkeypress = this.onFilter.bind(this); window.onbeforeunload = this.onPageUnload.bind(this); window.onload = this.onPageLoad.bind(this); + + var self = this; + document.addEventListener("keypress", function(event) { + if (document.activeElement.id !== self.ids.objectSearch + && self.focusFilterKey && event.key === self.focusFilterKey) { + + self.dom.objectSearch.focus(); + event.preventDefault(); + } + }); + }; // Detect column index diff --git a/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap b/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap index a4b2cfccf..a402aa7c6 100644 --- a/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_repo_over.clas.abap @@ -503,8 +503,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. ri_html->add( zcl_abapgit_gui_chunk_lib=>render_text_input( iv_name = |filter| iv_label = |Filter:| - iv_value = mv_filter - iv_autofocus = abap_true ) ). + iv_value = mv_filter ) ). ri_html->add( || ). ri_html->add( || ). @@ -555,6 +554,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. ENDMETHOD. + METHOD render_repo_list. ii_html->add( || ). @@ -575,8 +575,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. CREATE OBJECT ri_html TYPE zcl_abapgit_html. ri_html->set_title( cl_abap_typedescr=>describe_by_object_ref( me )->get_relative_name( ) ). - ri_html->add( 'setInitialFocus("filter");' ). - ri_html->add( 'var gHelper = new RepoOverViewHelper();' ). + ri_html->add( 'var gHelper = new RepoOverViewHelper({ focusFilterKey: "f" });' ). ENDMETHOD. @@ -778,6 +777,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. METHOD set_order_by. + IF mv_order_by <> iv_order_by. + set_order_direction( abap_false ). " Reset ordering + ENDIF. mv_order_by = iv_order_by. ENDMETHOD. @@ -811,7 +813,6 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. WHEN zif_abapgit_definitions=>c_action-change_order_by. set_order_by( ii_event->query( )->get( 'ORDERBY' ) ). - set_order_direction( abap_false ). rs_handled-state = zcl_abapgit_gui=>c_event_state-re_render. WHEN zif_abapgit_definitions=>c_action-toggle_favorites. @@ -901,6 +902,11 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION. ls_hotkey_action-hotkey = |Enter|. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + ls_hotkey_action-description = |Focus filter|. + ls_hotkey_action-action = `####`. + ls_hotkey_action-hotkey = |f|. + INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + ENDMETHOD. diff --git a/src/ui/zcl_abapgit_gui_page_stage.clas.abap b/src/ui/zcl_abapgit_gui_page_stage.clas.abap index 3ba107e9a..511f6208f 100644 --- a/src/ui/zcl_abapgit_gui_page_stage.clas.abap +++ b/src/ui/zcl_abapgit_gui_page_stage.clas.abap @@ -124,7 +124,7 @@ ENDCLASS. -CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. +CLASS ZCL_ABAPGIT_GUI_PAGE_STAGE IMPLEMENTATION. METHOD build_menu. @@ -659,6 +659,7 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. ri_html->add( | user: "{ to_lower( sy-uname ) }",| ). ri_html->add( ' formAction: "stage_commit",' ). ri_html->add( | patchAction: "{ zif_abapgit_definitions=>c_action-go_patch }",| ). + ri_html->add( ' focusFilterKey: "f",' ). ri_html->add( ' ids: {' ). ri_html->add( ' stageTab: "stageTab",' ). @@ -865,5 +866,11 @@ CLASS zcl_abapgit_gui_page_stage IMPLEMENTATION. ls_hotkey_action-hotkey = |r|. INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + " registered/handled in js + ls_hotkey_action-description = |Focus filter|. + ls_hotkey_action-action = `#`. + ls_hotkey_action-hotkey = |f|. + INSERT ls_hotkey_action INTO TABLE rt_hotkey_actions. + ENDMETHOD. ENDCLASS. diff --git a/src/utils/zcl_abapgit_repo_labels.clas.abap b/src/utils/zcl_abapgit_repo_labels.clas.abap index a74bfb31e..0189cf741 100644 --- a/src/utils/zcl_abapgit_repo_labels.clas.abap +++ b/src/utils/zcl_abapgit_repo_labels.clas.abap @@ -116,7 +116,7 @@ CLASS ZCL_ABAPGIT_REPO_LABELS IMPLEMENTATION. rv_labels = concat_lines_of( table = lt_normalized - sep = `,` ). + sep = `, ` ). ENDMETHOD. @@ -149,7 +149,7 @@ CLASS ZCL_ABAPGIT_REPO_LABELS IMPLEMENTATION. rv_config = concat_lines_of( table = lt_pairs - sep = `,` ). + sep = `, ` ). ENDMETHOD. @@ -188,10 +188,16 @@ CLASS ZCL_ABAPGIT_REPO_LABELS IMPLEMENTATION. METHOD split_colors. DATA lt_pairs TYPE string_table. + DATA lv_clean_config LIKE iv_config. DATA ls_c LIKE LINE OF rt_label_colors. FIELD-SYMBOLS LIKE LINE OF lt_pairs. - SPLIT iv_config AT ',' INTO TABLE lt_pairs. + lv_clean_config = replace( + val = iv_config + sub = cl_abap_char_utilities=>newline + with = ` ` ). " text area ends with LF + + SPLIT lv_clean_config AT ',' INTO TABLE lt_pairs. LOOP AT lt_pairs ASSIGNING . CONDENSE . IF IS NOT INITIAL. diff --git a/src/utils/zcl_abapgit_repo_labels.clas.testclasses.abap b/src/utils/zcl_abapgit_repo_labels.clas.testclasses.abap index 0491fd7a4..681b4daa9 100644 --- a/src/utils/zcl_abapgit_repo_labels.clas.testclasses.abap +++ b/src/utils/zcl_abapgit_repo_labels.clas.testclasses.abap @@ -52,11 +52,11 @@ CLASS ltcl_tags IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( act = zcl_abapgit_repo_labels=>normalize( `a,ab, a_b ,,a-b,a.b,Ab, a b ` ) - exp = 'Ab,a,a b,a-b,a.b,a_b,ab' ). + exp = 'Ab, a, a b, a-b, a.b, a_b, ab' ). cl_abap_unit_assert=>assert_equals( act = zcl_abapgit_repo_labels=>normalize( 'a,ab#,a_b' ) - exp = 'a,a_b' ). + exp = 'a, a_b' ). cl_abap_unit_assert=>assert_equals( act = zcl_abapgit_repo_labels=>normalize( '' ) @@ -68,7 +68,7 @@ CLASS ltcl_tags IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( " duplicates and sorting act = zcl_abapgit_repo_labels=>normalize( 'ba,ab,ab' ) - exp = 'ab,ba' ). + exp = 'ab, ba' ). ENDMETHOD. @@ -133,6 +133,14 @@ CLASS ltcl_tags IMPLEMENTATION. act = zcl_abapgit_repo_labels=>split_colors( 'a:red, b : #123456 ,,' ) exp = lt_exp ). + CLEAR lt_exp. " Case for textarea - it adds LF at the end + APPEND INITIAL LINE TO lt_exp ASSIGNING . + -label = 'a'. + -color = 'red'. + cl_abap_unit_assert=>assert_equals( + act = zcl_abapgit_repo_labels=>split_colors( `a:red ` && cl_abap_char_utilities=>newline ) + exp = lt_exp ). + ENDMETHOD. METHOD split_colors_into_map. @@ -157,7 +165,7 @@ CLASS ltcl_tags IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( act = zcl_abapgit_repo_labels=>normalize_colors( 'a:red , b : #123456' ) - exp = 'a:red,b:#123456' ). + exp = 'a:red, b:#123456' ). cl_abap_unit_assert=>assert_equals( act = zcl_abapgit_repo_labels=>normalize_colors( 'a:red,b:,:blue' ) @@ -173,7 +181,7 @@ CLASS ltcl_tags IMPLEMENTATION. cl_abap_unit_assert=>assert_equals( " duplicates and sorting act = zcl_abapgit_repo_labels=>normalize_colors( 'b:blue,a:red,a:red,a:blue' ) - exp = 'a:red,b:blue' ). + exp = 'a:red, b:blue' ). ENDMETHOD. diff --git a/src/zcl_abapgit_settings.clas.abap b/src/zcl_abapgit_settings.clas.abap index 86a8c4ffa..c81b5207d 100644 --- a/src/zcl_abapgit_settings.clas.abap +++ b/src/zcl_abapgit_settings.clas.abap @@ -379,7 +379,8 @@ CLASS zcl_abapgit_settings IMPLEMENTATION. METHOD set_default_link_hint_key. - set_link_hint_key( |f| ). + " Since #5859 'f' is used for "focus filter", we use 't' as the new default + set_link_hint_key( |t| ). ENDMETHOD.