UI: Unify rendering of branch, package, transport, user names (#4097)

* UI: Unify rendering of branch, package, user names

Branch name was already rendered "boxed with a leading icon". The same is now done for package and user names.

See `zcl_abapgit_gui_chunk_lib->render_branch_name, render_package_name, render_user_name`.

Closes #4059

* Lint %26 transport

* Unknown user

* Transport css

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2020-10-30 05:13:09 -04:00 committed by GitHub
parent 5d480d8e8d
commit 666dfbda66
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
11 changed files with 269 additions and 90 deletions

View File

@ -183,7 +183,11 @@ div.repo {
padding: 4px 2px 3px 2px;
}
span.branch {
/* ABAPGIT OBJECTS */
span.branch,
span.user,
span.package,
span.transport {
padding: 2px 4px;
border: 1px solid;
border-radius: 4px;
@ -386,11 +390,6 @@ span.diff_name {
span.diff_changed_by {
float: right;
}
span.diff_changed_by span.user {
border-radius: 3px;
border: solid 1px;
padding: 1px 0.4em;
}
span.diff_banner {
border-style: solid;
border-width: 1px;

View File

@ -47,6 +47,20 @@ table.repo_tab {
background-color: var(--theme-background-color);
}
/* ABAPGIT OBJECTS */
span.user {
background-color: #4c6782;
border-color: #7491b2;
}
span.package {
background-color: #705a6d;
border-color: #987095;
}
span.transport {
background-color: #456d5d;
border-color: #60a087;
}
/* PANELS */
#debug-output { color: var(--theme-greyscale-dark); }

View File

@ -15,7 +15,7 @@
<RELID>MI</RELID>
<OBJID>ZABAPGIT_CSS_THEME_DARK</OBJID>
<NAME>filename</NAME>
<VALUE>~wwwtmp.css</VALUE>
<VALUE>dark_theme.css</VALUE>
</WWWPARAMS>
<WWWPARAMS>
<RELID>MI</RELID>

View File

@ -57,6 +57,20 @@ input:focus, textarea:focus { border-color: #8cadd9; }
background-color: #e6e6e6;
}
/* ABAPGIT OBJECTS */
span.user {
border-color: #c2d4ea;
background-color: #d9e4f2;
}
span.package {
border-color: #d3ccd2;
background-color: #ebe3ea;
}
span.transport {
border-color: #a7e3cf;
background-color: #dbf3eb;
}
/* PANELS */
/* TODO: add warning and error colors */
div.panel.success {

View File

@ -9,13 +9,13 @@
<RELID>MI</RELID>
<OBJID>ZABAPGIT_CSS_THEME_DEFAULT</OBJID>
<NAME>fileextension</NAME>
<VALUE>.CSS</VALUE>
<VALUE>.css</VALUE>
</WWWPARAMS>
<WWWPARAMS>
<RELID>MI</RELID>
<OBJID>ZABAPGIT_CSS_THEME_DEFAULT</OBJID>
<NAME>filename</NAME>
<VALUE>~wwwtmp.CSS</VALUE>
<VALUE>default_theme.css</VALUE>
</WWWPARAMS>
<WWWPARAMS>
<RELID>MI</RELID>

View File

@ -26,7 +26,6 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION
!iv_show_branch TYPE abap_bool DEFAULT abap_true
!iv_show_commit TYPE abap_bool DEFAULT abap_true
!iv_interactive_branch TYPE abap_bool DEFAULT abap_false
!iv_branch TYPE string OPTIONAL
!io_news TYPE REF TO zcl_abapgit_news OPTIONAL
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
@ -105,6 +104,40 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION
CLASS-METHODS help_submenu
RETURNING
VALUE(ro_menu) TYPE REF TO zcl_abapgit_html_toolbar .
CLASS-METHODS render_branch_name
IMPORTING
!iv_branch TYPE string OPTIONAL
!iv_repo_key TYPE zif_abapgit_persistence=>ty_value OPTIONAL
!io_repo TYPE REF TO zcl_abapgit_repo_online OPTIONAL
!iv_interactive TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
CLASS-METHODS render_package_name
IMPORTING
!iv_package TYPE devclass
!iv_interactive TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
CLASS-METHODS render_user_name
IMPORTING
!iv_username TYPE xubname
!iv_interactive TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
CLASS-METHODS render_transport
IMPORTING
!iv_transport TYPE trkorr
!iv_interactive TYPE abap_bool DEFAULT abap_true
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
PROTECTED SECTION.
CLASS-METHODS render_repo_top_commit_hash
@ -117,15 +150,6 @@ CLASS zcl_abapgit_gui_chunk_lib DEFINITION
CLASS-DATA gv_time_zone TYPE timezone .
CLASS-METHODS render_branch_span
IMPORTING
!iv_branch TYPE string
!io_repo TYPE REF TO zcl_abapgit_repo_online
!iv_interactive TYPE abap_bool
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
CLASS-METHODS get_t100_text
IMPORTING
!iv_msgid TYPE scx_t100key-msgid
@ -239,14 +263,33 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
ENDMETHOD.
METHOD render_branch_span.
METHOD render_branch_name.
DATA: lv_text TYPE string,
lv_class TYPE string.
DATA:
lv_key TYPE string,
lv_branch TYPE string,
lv_text TYPE string,
lv_class TYPE string.
lv_text = zcl_abapgit_git_branch_list=>get_display_name( iv_branch ).
IF iv_repo_key IS NOT INITIAL.
lv_key = iv_repo_key.
ELSEIF io_repo IS BOUND.
lv_key = io_repo->get_key( ).
ELSE.
zcx_abapgit_exception=>raise( 'Either iv_repo_key or io_repo must be supplied' ).
ENDIF.
IF zcl_abapgit_git_branch_list=>get_type( iv_branch ) = zif_abapgit_definitions=>c_git_branch_type-branch.
IF iv_branch IS NOT INITIAL.
lv_branch = iv_branch.
ELSEIF io_repo IS BOUND.
lv_branch = io_repo->get_selected_branch( ).
ELSE.
zcx_abapgit_exception=>raise( 'Either iv_branch or io_repo must be supplied' ).
ENDIF.
lv_text = zcl_abapgit_git_branch_list=>get_display_name( lv_branch ).
IF zcl_abapgit_git_branch_list=>get_type( lv_branch ) = zif_abapgit_definitions=>c_git_branch_type-branch.
lv_class = 'branch branch_branch'.
ELSE.
lv_class = 'branch'.
@ -257,7 +300,7 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
ri_html->add_icon( iv_name = 'code-branch/grey70'
iv_hint = 'Current branch' ).
IF iv_interactive = abap_true.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ io_repo->get_key( ) }|
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ lv_key }|
iv_txt = lv_text ).
ELSE.
ri_html->add( lv_text ).
@ -612,6 +655,42 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
ENDMETHOD.
METHOD render_package_name.
DATA:
lv_obj_name TYPE tadir-obj_name,
lv_jump TYPE string,
lv_title TYPE string.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
IF iv_package IS INITIAL.
RETURN.
ENDIF.
SELECT SINGLE ctext FROM tdevct INTO lv_title
WHERE devclass = iv_package AND spras = sy-langu ##SUBRC_OK.
lv_obj_name = iv_package.
lv_jump = zcl_abapgit_html_action_utils=>jump_encode(
iv_obj_type = 'DEVC'
iv_obj_name = lv_obj_name ).
ri_html->add( |<span class="package">| ).
ri_html->add_icon( iv_name = 'box/grey70'
iv_hint = 'SAP package' ).
IF iv_interactive = abap_true.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-jump }?{ lv_jump }|
iv_title = lv_title
iv_txt = to_lower( iv_package ) ).
ELSE.
ri_html->add( to_lower( iv_package ) ).
ENDIF.
ri_html->add( '</span>' ).
ENDMETHOD.
METHOD render_repo_palette.
DATA li_repo_srv TYPE REF TO zif_abapgit_repo_srv.
@ -745,31 +824,14 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
IF io_repo->is_offline( ) = abap_false.
lo_repo_online ?= io_repo.
IF iv_show_branch = abap_true.
IF iv_branch IS INITIAL.
ri_html->add( render_branch_span( iv_branch = lo_repo_online->get_selected_branch( )
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ELSE.
ri_html->add( render_branch_span( iv_branch = iv_branch
io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ENDIF.
ri_html->add( render_branch_name( io_repo = lo_repo_online
iv_interactive = iv_interactive_branch ) ).
ENDIF.
ENDIF.
" Package
IF iv_show_package = abap_true.
ri_html->add_icon( iv_name = 'box/grey70'
iv_hint = 'SAP package' ).
ri_html->add( '<span>' ).
lv_package_jump_data = zcl_abapgit_html_action_utils=>jump_encode(
iv_obj_type = 'DEVC'
iv_obj_name = io_repo->get_package( ) ).
ri_html->add_a( iv_txt = io_repo->get_package( )
iv_act = |{ zif_abapgit_definitions=>c_action-jump }?{ lv_package_jump_data }| ).
ri_html->add( '</span>' ).
ri_html->add( render_package_name( io_repo->get_package( ) ) ).
ENDIF.
ri_html->add( '</td>' ).
@ -805,6 +867,75 @@ CLASS zcl_abapgit_gui_chunk_lib IMPLEMENTATION.
ENDMETHOD.
METHOD render_transport.
DATA lv_title TYPE string.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
IF iv_transport IS INITIAL.
RETURN.
ENDIF.
SELECT SINGLE as4text FROM e07t INTO lv_title
WHERE trkorr = iv_transport AND langu = sy-langu ##SUBRC_OK.
ri_html->add( |<span class="transport">| ).
ri_html->add_icon( iv_name = 'briefcase/grey70'
iv_hint = 'Transport' ).
IF iv_interactive = abap_true.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-jump_transport }?transport={ iv_transport }|
iv_title = lv_title
iv_txt = to_lower( iv_transport ) ).
ELSE.
ri_html->add( to_lower( iv_transport ) ).
ENDIF.
ri_html->add( '</span>' ).
ENDMETHOD.
METHOD render_user_name.
DATA:
ls_user_address TYPE addr3_val,
lv_title TYPE string.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
IF iv_username IS INITIAL.
RETURN.
ENDIF.
IF iv_username <> zcl_abapgit_objects_super=>c_user_unknown.
CALL FUNCTION 'SUSR_USER_ADDRESS_READ'
EXPORTING
user_name = iv_username
IMPORTING
user_address = ls_user_address
EXCEPTIONS
user_address_not_found = 1
OTHERS = 2.
IF sy-subrc = 0.
lv_title = ls_user_address-name_text.
ENDIF.
ENDIF.
ri_html->add( |<span class="user">| ).
" todo, add icon ri_html->add_icon( iv_name = 'user/grey70'
" iv_hint = 'User name' )
IF iv_interactive = abap_true AND iv_username <> zcl_abapgit_objects_super=>c_user_unknown.
ri_html->add_a( iv_act = |{ zif_abapgit_definitions=>c_action-jump_user }?user={ iv_username }|
iv_title = lv_title
iv_txt = to_lower( iv_username ) ).
ELSE.
ri_html->add( to_lower( iv_username ) ).
ENDIF.
ri_html->add( '</span>' ).
ENDMETHOD.
METHOD render_warning_banner.
CREATE OBJECT ri_html TYPE zcl_abapgit_html.

View File

@ -82,7 +82,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_commit IMPLEMENTATION.
METHOD constructor.
@ -198,8 +198,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_COMMIT IMPLEMENTATION.
ri_html->add( '<div class="repo">' ).
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_repo_top(
io_repo = mo_repo
iv_show_package = abap_false
iv_branch = mo_repo->get_selected_branch( ) ) ).
iv_show_package = abap_false ) ).
ri_html->add( render_menu( ) ).
ri_html->add( render_form( ) ).

View File

@ -128,7 +128,9 @@ CLASS zcl_abapgit_gui_page_diff DEFINITION
IMPORTING
!is_diff TYPE ty_file_diff
RETURNING
VALUE(ri_html) TYPE REF TO zif_abapgit_html .
VALUE(ri_html) TYPE REF TO zif_abapgit_html
RAISING
zcx_abapgit_exception .
METHODS render_table_head
IMPORTING
!is_diff TYPE ty_file_diff
@ -200,7 +202,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_diff IMPLEMENTATION.
METHOD add_filter_sub_menu.
@ -344,10 +346,10 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
" Changed by
IF <ls_local>-item-obj_type IS NOT INITIAL.
<ls_diff>-changed_by = to_lower( zcl_abapgit_objects=>changed_by( <ls_local>-item ) ).
<ls_diff>-changed_by = zcl_abapgit_objects=>changed_by( <ls_local>-item ).
ENDIF.
IF <ls_diff>-changed_by IS INITIAL.
<ls_diff>-changed_by = to_lower( zcl_abapgit_objects_super=>c_user_unknown ).
<ls_diff>-changed_by = zcl_abapgit_objects_super=>c_user_unknown.
ENDIF.
" Extension
@ -711,8 +713,9 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_DIFF IMPLEMENTATION.
ii_html = ri_html
is_diff = is_diff ).
ri_html->add( |<span class="diff_changed_by">Last Changed by: <span class="user">{
is_diff-changed_by }</span></span>| ).
ri_html->add( '<span class="diff_changed_by">Last Changed by: ' ).
ri_html->add( zcl_abapgit_gui_chunk_lib=>render_user_name( is_diff-changed_by ) ).
ri_html->add( '</span>' ).
ri_html->add( '</div>' ).

View File

@ -34,14 +34,14 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION
favorite TYPE string,
"! True for offline, false for online repo
type TYPE string,
key TYPE string,
key TYPE zif_abapgit_persistence=>ty_value,
name TYPE string,
url TYPE string,
package TYPE string,
package TYPE devclass,
branch TYPE string,
created_by TYPE string,
created_by TYPE xubname,
created_at TYPE string,
deserialized_by TYPE string,
deserialized_by TYPE xubname,
deserialized_at TYPE string,
END OF ty_overview,
ty_overviews TYPE STANDARD TABLE OF ty_overview
@ -84,12 +84,16 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION
render_table
IMPORTING
ii_html TYPE REF TO zif_abapgit_html
it_overview TYPE ty_overviews,
it_overview TYPE ty_overviews
RAISING
zcx_abapgit_exception,
render_table_body
IMPORTING
ii_html TYPE REF TO zif_abapgit_html
it_overview TYPE ty_overviews,
it_overview TYPE ty_overviews
RAISING
zcx_abapgit_exception,
render_header_bar
IMPORTING
@ -100,11 +104,11 @@ CLASS zcl_abapgit_gui_page_repo_over DEFINITION
_add_column
IMPORTING
iv_tech_name TYPE string OPTIONAL
iv_display_name TYPE string OPTIONAL
iv_css_class TYPE string OPTIONAL
iv_add_tz TYPE abap_bool OPTIONAL
iv_title TYPE string OPTIONAL
iv_tech_name TYPE string OPTIONAL
iv_display_name TYPE string OPTIONAL
iv_css_class TYPE string OPTIONAL
iv_add_tz TYPE abap_bool OPTIONAL
iv_title TYPE string OPTIONAL
iv_allow_order_by TYPE any OPTIONAL.
METHODS render_scripts
@ -116,7 +120,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
METHOD apply_filter.
@ -209,7 +213,7 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
ls_overview-name = lo_repo_srv->get_name( ).
ls_overview-url = <ls_repo>-url.
ls_overview-package = <ls_repo>-package.
ls_overview-branch = zcl_abapgit_git_branch_list=>get_display_name( <ls_repo>-branch_name ).
ls_overview-branch = <ls_repo>-branch_name.
ls_overview-created_by = <ls_repo>-created_by.
IF <ls_repo>-created_at IS NOT INITIAL.
@ -353,31 +357,27 @@ CLASS ZCL_ABAPGIT_GUI_PAGE_REPO_OVER IMPLEMENTATION.
ii_html->add( |<td></td>| ).
ENDIF.
lv_package_obj_name = <ls_overview>-package.
lv_package_jump_data = zcl_abapgit_html_action_utils=>jump_encode(
iv_obj_type = 'DEVC'
iv_obj_name = lv_package_obj_name ).
ii_html->add( |<td>{ ii_html->a(
iv_txt = <ls_overview>-package
iv_act = |{ zif_abapgit_definitions=>c_action-jump }?{ lv_package_jump_data }| ) }</td>| ).
ii_html->add( |<td>| ).
ii_html->add( zcl_abapgit_gui_chunk_lib=>render_package_name( <ls_overview>-package ) ).
ii_html->add( |</td>| ).
IF <ls_overview>-branch IS INITIAL.
ii_html->add( |<td>&nbsp;</td>| ).
ELSE.
lv_branch_html = `<span class="branch branch_branch">`
&& `<i title="Current branch" class="icon icon-code-branch grey70"></i>`
&& <ls_overview>-branch
&& `</span>`.
ii_html->add( |<td>{ ii_html->a(
iv_txt = lv_branch_html
iv_act = |{ zif_abapgit_definitions=>c_action-git_branch_switch }?key={ <ls_overview>-key }| ) }</td>| ).
ii_html->add( |<td>| ).
ii_html->add( zcl_abapgit_gui_chunk_lib=>render_branch_name(
iv_branch = <ls_overview>-branch
iv_repo_key = <ls_overview>-key ) ).
ii_html->add( |</td>| ).
ENDIF.
ii_html->add( |<td class="ro-detail">{ <ls_overview>-deserialized_by }</td>| ).
ii_html->add( |<td class="ro-detail">| ).
ii_html->add( zcl_abapgit_gui_chunk_lib=>render_user_name( <ls_overview>-deserialized_by ) ).
ii_html->add( |</td>| ).
ii_html->add( |<td class="ro-detail">{ <ls_overview>-deserialized_at }</td>| ).
ii_html->add( |<td class="ro-detail">{ <ls_overview>-created_by }</td>| ).
ii_html->add( |<td class="ro-detail">| ).
ii_html->add( zcl_abapgit_gui_chunk_lib=>render_user_name( <ls_overview>-created_by ) ).
ii_html->add( |</td>| ).
ii_html->add( |<td class="ro-detail">{ <ls_overview>-created_at }</td>| ).
ii_html->add( |<td class="ro-detail">{ <ls_overview>-key }</td>| ).

View File

@ -107,16 +107,19 @@ CLASS zcl_abapgit_gui_router DEFINITION
VALUE(ri_page) TYPE REF TO zif_abapgit_gui_renderable
RAISING
zcx_abapgit_exception .
CLASS-METHODS jump_display_transport
IMPORTING
!iv_transport TYPE trkorr
RAISING
zcx_abapgit_exception.
zcx_abapgit_exception .
CLASS-METHODS jump_display_user
IMPORTING
!iv_username TYPE xubname
RAISING
zcx_abapgit_exception .
METHODS call_browser
IMPORTING
iv_url TYPE csequence
!iv_url TYPE csequence
RAISING
zcx_abapgit_exception.
@ -124,7 +127,7 @@ ENDCLASS.
CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
CLASS zcl_abapgit_gui_router IMPLEMENTATION.
METHOD abapgit_services_actions.
@ -459,6 +462,17 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
ENDMETHOD.
METHOD jump_display_user.
" todo, user display in ADT
CALL FUNCTION 'BAPI_USER_DISPLAY'
EXPORTING
username = iv_username.
ENDMETHOD.
METHOD other_utilities.
CASE ii_event->mv_action.
@ -576,6 +590,10 @@ CLASS ZCL_ABAPGIT_GUI_ROUTER IMPLEMENTATION.
jump_display_transport( |{ ii_event->query( )->get( 'TRANSPORT' ) }| ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-jump_user.
jump_display_user( |{ ii_event->query( )->get( 'USER' ) }| ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.
WHEN zif_abapgit_definitions=>c_action-url.
call_browser( ii_event->query( )->get( 'URL' ) ).
rs_handled-state = zcl_abapgit_gui=>c_event_state-no_more_act.

View File

@ -526,6 +526,7 @@ INTERFACE zif_abapgit_definitions
go_patch TYPE string VALUE 'go_patch',
jump TYPE string VALUE 'jump',
jump_transport TYPE string VALUE 'jump_transport',
jump_user TYPE string VALUE 'jump_user',
url TYPE string VALUE 'url',
goto_source TYPE string VALUE 'goto_source',
show_callstack TYPE string VALUE 'show_callstack',