diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap
index 0c090081f..7ce2e6d75 100644
--- a/src/zabapgit_page_main.prog.abap
+++ b/src/zabapgit_page_main.prog.abap
@@ -19,8 +19,8 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
show TYPE string VALUE 'show' ##NO_TEXT,
END OF c_actions.
- DATA: mv_show TYPE lcl_persistence_db=>ty_value,
- mv_cur_dir TYPE string.
+ DATA: mv_show TYPE lcl_persistence_db=>ty_value,
+ mo_repo_content TYPE REF TO lcl_gui_view_repo_content.
METHODS:
styles
@@ -52,16 +52,27 @@ ENDCLASS.
CLASS lcl_gui_page_main IMPLEMENTATION.
METHOD constructor.
-
super->constructor( ).
- mv_cur_dir = '/'. " Root
-
ENDMETHOD. " constructor
METHOD lif_gui_page~on_event.
DATA: lv_key TYPE lcl_persistence_repo=>ty_repo-key,
- lv_path TYPE string.
+ lo_repo TYPE REF TO lcl_repo.
+
+ mo_repo_content->lif_gui_page~on_event(
+ EXPORTING
+ iv_action = iv_action
+ iv_prev_page = iv_prev_page
+ iv_getdata = iv_getdata
+ it_postdata = it_postdata
+ IMPORTING
+ ei_page = ei_page
+ ev_state = ev_state ).
+
+ IF ev_state <> gc_event_state-not_handled.
+ RETURN.
+ ENDIF.
lv_key = iv_getdata.
@@ -69,18 +80,13 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
WHEN c_actions-show. " Change displayed repo
lcl_app=>user( )->set_repo_show( lv_key ).
TRY.
- lcl_app=>repo_srv( )->get( lv_key )->refresh( ).
+ lo_repo = lcl_app=>repo_srv( )->get( lv_key ).
+ lo_repo->refresh( ).
CATCH lcx_exception.
ENDTRY.
- ev_state = gc_event_state-re_render.
- WHEN lcl_gui_view_repo_content=>c_actions-toggle_hide_files. " Toggle file diplay
- lcl_app=>user( )->toggle_hide_files( ).
- ev_state = gc_event_state-re_render.
- WHEN lcl_gui_view_repo_content=>c_actions-change_dir. " Toggle file diplay
- lv_path = lcl_html_action_utils=>dir_decode( iv_getdata ).
- mv_cur_dir = lcl_path=>change_dir( iv_cur_dir = mv_cur_dir iv_cd = lv_path ).
- ev_state = gc_event_state-re_render.
+ CREATE OBJECT mo_repo_content EXPORTING io_repo = lo_repo. " Reinit content state
+ ev_state = gc_event_state-re_render.
ENDCASE.
ENDMETHOD. "on_event
@@ -273,16 +279,15 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
METHOD render_repo.
- DATA: lo_repo_content TYPE REF TO lcl_gui_view_repo_content.
-
CREATE OBJECT ro_html.
+ IF mo_repo_content IS NOT BOUND.
+ CREATE OBJECT mo_repo_content EXPORTING io_repo = io_repo.
+ ENDIF.
+
ro_html->add( |
| ).
ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ).
-
- CREATE OBJECT lo_repo_content EXPORTING io_repo = io_repo.
- ro_html->add( lo_repo_content->render( iv_path = mv_cur_dir ) ).
-
+ ro_html->add( mo_repo_content->lif_gui_page~render( ) ).
ro_html->add( '
' ).
ENDMETHOD. "render_repo
@@ -336,6 +341,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
_add '.repo_tab td.files span { display: block; }'.
_add '.repo_tab td.cmd span { display: block; }'.
_add '.repo_tab td.cmd a { display: block; }'.
+ _add 'td.current_dir { color: #ccc; }'.
ENDMETHOD. "styles
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index 159618316..eb239132e 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -404,6 +404,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
RAISING lcx_exception.
METHODS toggle_hide_files
+ RETURNING VALUE(rv_hide) TYPE abap_bool
RAISING lcx_exception.
METHODS get_hide_files
@@ -648,6 +649,8 @@ CLASS lcl_persistence_user IMPLEMENTATION.
ls_user-hide_files = boolc( ls_user-hide_files = abap_false ).
update( ls_user ).
+ rv_hide = ls_user-hide_files.
+
ENDMETHOD. "toggle_hide_files
METHOD get_hide_files.
diff --git a/src/zabapgit_view_repo.prog.abap b/src/zabapgit_view_repo.prog.abap
index 27adb40e0..8f05057e0 100644
--- a/src/zabapgit_view_repo.prog.abap
+++ b/src/zabapgit_view_repo.prog.abap
@@ -30,11 +30,15 @@ CLASS lcl_repo_content_browser DEFINITION FINAL.
IMPORTING io_repo TYPE REF TO lcl_repo.
METHODS list
- IMPORTING iv_path TYPE string
- EXPORTING et_repo_items TYPE tt_repo_items
- eo_log TYPE REF TO lcl_log
+ IMPORTING iv_path TYPE string
+ iv_by_folders TYPE abap_bool
+ iv_changes_only TYPE abap_bool
+ RETURNING VALUE(rt_repo_items) TYPE tt_repo_items
RAISING lcx_exception.
+ METHODS get_log
+ RETURNING VALUE(ro_log) TYPE REF TO lcl_log.
+
PRIVATE SECTION.
DATA mo_repo TYPE REF TO lcl_repo.
DATA mo_log TYPE REF TO lcl_log.
@@ -52,6 +56,9 @@ CLASS lcl_repo_content_browser DEFINITION FINAL.
CHANGING ct_repo_items TYPE tt_repo_items
RAISING lcx_exception.
+ METHODS filter_changes
+ CHANGING ct_repo_items TYPE tt_repo_items.
+
ENDCLASS. "lcl_repo_content_browser
CLASS lcl_repo_content_browser IMPLEMENTATION.
@@ -60,23 +67,31 @@ CLASS lcl_repo_content_browser IMPLEMENTATION.
mo_repo = io_repo.
ENDMETHOD. "constructor
+ METHOD get_log.
+ ro_log = mo_log.
+ ENDMETHOD. "get_log
+
METHOD list.
- CLEAR et_repo_items.
+ CREATE OBJECT mo_log.
IF mo_repo->is_offline( ) = abap_true.
- et_repo_items = get_local( ).
+ rt_repo_items = get_local( ).
ELSE.
- CREATE OBJECT mo_log.
- et_repo_items = get_remote( ).
- eo_log = mo_log.
+ rt_repo_items = get_remote( ).
ENDIF.
- build_folders(
- EXPORTING iv_cur_dir = iv_path
- CHANGING ct_repo_items = et_repo_items ).
+ IF iv_by_folders = abap_true.
+ build_folders(
+ EXPORTING iv_cur_dir = iv_path
+ CHANGING ct_repo_items = rt_repo_items ).
+ ENDIF.
- SORT et_repo_items BY sortkey obj_type obj_name ASCENDING.
+ IF iv_changes_only = abap_true.
+ filter_changes( CHANGING ct_repo_items = rt_repo_items ).
+ ENDIF.
+
+ SORT rt_repo_items BY sortkey obj_type obj_name ASCENDING.
ENDMETHOD. "list
@@ -120,6 +135,17 @@ CLASS lcl_repo_content_browser IMPLEMENTATION.
ENDMETHOD. "build_folders
+ METHOD filter_changes.
+
+ FIELD-SYMBOLS - LIKE LINE OF ct_repo_items.
+
+ LOOP AT ct_repo_items ASSIGNING
- .
+ CHECK
- -changes = 0.
+ DELETE ct_repo_items INDEX sy-tabix.
+ ENDLOOP.
+
+ ENDMETHOD. "filter_changes
+
METHOD get_local.
DATA: lt_tadir TYPE ty_tadir_tt.
@@ -189,33 +215,38 @@ ENDCLASS. "lcl_repo_content_browser
**********************************************************************
**********************************************************************
-CLASS lcl_gui_view_repo_content DEFINITION FINAL.
+CLASS lcl_gui_view_repo_content DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PUBLIC SECTION.
CONSTANTS: BEGIN OF c_actions,
change_dir TYPE string VALUE 'change_dir' ##NO_TEXT,
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
+ toggle_folders TYPE string VALUE 'toggle_folders' ##NO_TEXT,
+ toggle_changes TYPE string VALUE 'toggle_changes' ##NO_TEXT,
END OF c_actions.
+ METHODS: lif_gui_page~render REDEFINITION,
+ lif_gui_page~on_event REDEFINITION.
+
METHODS constructor
IMPORTING io_repo TYPE REF TO lcl_repo
RAISING lcx_exception.
- METHODS render
- IMPORTING iv_path TYPE string
- RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
- RAISING lcx_exception.
-
PRIVATE SECTION.
- DATA: mo_repo TYPE REF TO lcl_repo,
- mv_cur_dir TYPE string,
- mv_hide_files TYPE abap_bool.
+ DATA: mo_repo TYPE REF TO lcl_repo,
+ mv_cur_dir TYPE string,
+ mv_hide_files TYPE abap_bool,
+ mv_show_folders TYPE abap_bool,
+ mv_changes_only TYPE abap_bool.
METHODS:
render_repo_menu
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RAISING lcx_exception,
+ render_tab_menu
+ RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
+ RAISING lcx_exception,
render_repo_item
IMPORTING is_item TYPE lcl_repo_content_browser=>ty_repo_item
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
@@ -229,14 +260,15 @@ CLASS lcl_gui_view_repo_content DEFINITION FINAL.
render_empty_package
RETURNING VALUE(rv_html) TYPE string,
render_parent_dir_line
- RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
+ RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
+ RAISING lcx_exception.
METHODS:
- render_obj_jump_link
+ build_obj_jump_link
IMPORTING iv_obj_type TYPE tadir-object
iv_obj_name TYPE tadir-obj_name
RETURNING VALUE(rv_html) TYPE string,
- render_dir_jump_link
+ build_dir_jump_link
IMPORTING iv_path TYPE string
RETURNING VALUE(rv_html) TYPE string.
@@ -246,33 +278,57 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
METHOD constructor.
- mo_repo ?= io_repo.
+ super->constructor( ).
+
+ mo_repo ?= io_repo.
+ mv_cur_dir = '/'. " Root
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
ENDMETHOD. "constructor
- METHOD render.
+ METHOD lif_gui_page~on_event.
+
+ DATA: lv_path TYPE string.
+
+ CASE iv_action.
+ WHEN c_actions-toggle_hide_files. " Toggle file diplay
+ mv_hide_files = lcl_app=>user( )->toggle_hide_files( ).
+ ev_state = gc_event_state-re_render.
+ WHEN c_actions-change_dir. " Change dir
+ lv_path = lcl_html_action_utils=>dir_decode( iv_getdata ).
+ mv_cur_dir = lcl_path=>change_dir( iv_cur_dir = mv_cur_dir iv_cd = lv_path ).
+ ev_state = gc_event_state-re_render.
+ WHEN c_actions-toggle_folders. " Toggle folder view
+ mv_show_folders = boolc( mv_show_folders <> abap_true ).
+ mv_cur_dir = '/'. " Root
+ ev_state = gc_event_state-re_render.
+ WHEN c_actions-toggle_changes. " Toggle changes only view
+ mv_changes_only = boolc( mv_changes_only <> abap_true ).
+ ev_state = gc_event_state-re_render.
+ ENDCASE.
+
+ ENDMETHOD. "lif_gui_page~on_event
+
+ METHOD lif_gui_page~render.
DATA: lt_repo_items TYPE lcl_repo_content_browser=>tt_repo_items,
- lo_tab_menu TYPE REF TO lcl_html_toolbar,
lo_browser TYPE REF TO lcl_repo_content_browser,
lx_error TYPE REF TO lcx_exception,
lo_log TYPE REF TO lcl_log.
FIELD-SYMBOLS LIKE LINE OF lt_repo_items.
- CREATE OBJECT lo_tab_menu.
CREATE OBJECT ro_html.
- mv_cur_dir = iv_path.
TRY.
ro_html->add( render_repo_menu( ) ).
- CREATE OBJECT lo_browser EXPORTING io_repo = mo_repo.
- lo_browser->list( EXPORTING iv_path = iv_path
- IMPORTING et_repo_items = lt_repo_items
- eo_log = lo_log ).
+ CREATE OBJECT lo_browser EXPORTING io_repo = mo_repo.
+ lt_repo_items = lo_browser->list( iv_path = mv_cur_dir
+ iv_by_folders = mv_show_folders
+ iv_changes_only = mv_changes_only ).
+ lo_log = lo_browser->get_log( ).
IF mo_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
ro_html->add( '
' ).
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
@@ -280,21 +336,12 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ENDIF.
ro_html->add( '
' ).
-
- " Table menu
- IF mo_repo->is_offline( ) = abap_false.
- IF mv_hide_files = abap_true.
- lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
- ELSE.
- lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
- ENDIF.
- ro_html->add( lo_tab_menu->render( iv_as_angle = abap_true ) ).
- ENDIF.
+ ro_html->add( render_tab_menu( ) ).
" Repo content table
ro_html->add( '
' ).
- IF lcl_path=>is_root( iv_path ) = abap_false.
+ IF lcl_path=>is_root( mv_cur_dir ) = abap_false.
ro_html->add( render_parent_dir_line( ) ).
ENDIF.
@@ -314,7 +361,42 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( lcl_gui_page_super=>render_error( lx_error ) ).
ENDTRY.
- ENDMETHOD. "render
+ ENDMETHOD. "lif_gui_page~render
+
+ METHOD render_tab_menu.
+
+ DATA lo_tab_menu TYPE REF TO lcl_html_toolbar.
+
+ CREATE OBJECT lo_tab_menu.
+
+ IF mo_repo->is_offline( ) = abap_false.
+
+ " Show/Hide files
+ IF mv_hide_files = abap_true.
+ lo_tab_menu->add( iv_txt = 'Show files' iv_act = c_actions-toggle_hide_files ).
+ ELSE.
+ lo_tab_menu->add( iv_txt = 'Hide files' iv_act = c_actions-toggle_hide_files ).
+ ENDIF.
+
+ " Show changes only
+ IF mv_changes_only = abap_true.
+ lo_tab_menu->add( iv_txt = 'All objects' iv_act = c_actions-toggle_changes ).
+ ELSE.
+ lo_tab_menu->add( iv_txt = 'Changed only' iv_act = c_actions-toggle_changes ).
+ ENDIF.
+
+ ENDIF.
+
+ " Show/Hide folders
+ IF mv_show_folders = abap_true.
+ lo_tab_menu->add( iv_txt = 'Plain list' iv_act = c_actions-toggle_folders ).
+ ELSE.
+ lo_tab_menu->add( iv_txt = 'With folders' iv_act = c_actions-toggle_folders ).
+ ENDIF.
+
+ ro_html = lo_tab_menu->render( iv_as_angle = abap_true ).
+
+ ENDMETHOD. "render_tab_menu
METHOD render_repo_menu.
@@ -411,10 +493,6 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
iv_act = |{ gc_action-repo_refresh }?{ lv_key }| ).
" Render ==========================================
-* ro_html->add( '' ).
-* ro_html->add( lo_toolbar->render( ) ).
-* ro_html->add( '
' ).
-
ro_html->add( '' ).
ro_html->add( '
' ).
ro_html->add( |{ mv_cur_dir } | | ).
@@ -431,16 +509,14 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
DATA lt_class TYPE TABLE OF string.
- IF is_item-obj_name IS INITIAL AND is_item-is_dir = abap_false.
- APPEND 'unsupported' TO lt_class.
- ENDIF.
+ "TODO REFACTOR !!! Depends on if folder woth changes should be highlited
IF is_item-is_dir = abap_true.
APPEND 'folder' TO lt_class.
- ENDIF.
-
- IF is_item-changes > 0.
+ ElSEIF is_item-changes > 0.
APPEND 'modified' TO lt_class.
+ ELSEIF is_item-obj_name IS INITIAL.
+ APPEND 'unsupported' TO lt_class.
ENDIF.
IF lines( lt_class ) > 0.
@@ -484,19 +560,20 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( ' | '
&& 'non-code and meta files | ' ).
ELSEIF is_item-is_dir = abap_true.
- lv_link = render_dir_jump_link( iv_path = is_item-path ).
+ lv_link = build_dir_jump_link( iv_path = is_item-path ).
ro_html->add( |{ get_item_icon( is_item ) } | | ).
ro_html->add( |{ lv_link } | | ).
ELSE.
- lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name
+ lv_link = build_obj_jump_link( iv_obj_name = is_item-obj_name
iv_obj_type = is_item-obj_type ).
ro_html->add( |{ get_item_icon( is_item ) } | | ).
ro_html->add( |{ is_item-obj_type } | | ).
ro_html->add( |{ lv_link } | | ).
ENDIF.
- IF mo_repo->is_offline( ) = abap_false. " Files for online repos only
+ IF mo_repo->is_offline( ) = abap_false.
+ " Files
ro_html->add( '' ).
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
LOOP AT is_item-files INTO ls_file.
@@ -505,8 +582,12 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ENDIF.
ro_html->add( ' | ' ).
+ " TODO Refactor
+ " Command
ro_html->add( '' ).
- IF lines( is_item-files ) = 0.
+ IF is_item-is_dir = abap_true.
+ ro_html->add( |{ is_item-changes } changes| ).
+ ELSEIF lines( is_item-files ) = 0.
ro_html->add( 'new @local' ).
ELSEIF is_item-changes > 0.
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
@@ -514,7 +595,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
iv_key = mo_repo->get_key( )
ig_object = is_item ).
ro_html->add_anchor(
- iv_txt = |diff ({ is_item-changes })|
+ iv_txt = |{ is_item-changes } diffs|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
ELSE.
LOOP AT is_item-files INTO ls_file.
@@ -534,6 +615,7 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ENDIF.
ENDLOOP.
ENDIF.
+
ENDIF.
ro_html->add( ' | ' ).
@@ -546,8 +628,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
METHOD render_empty_package.
rv_html = '
'
- && 'Empty package'
- && ' |
' ##NO_TEXT.
+ && ' Empty package'
+ && '' ##NO_TEXT.
ENDMETHOD. "render_empty_package
@@ -557,12 +639,15 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
ro_html->add( '' ).
ro_html->add( | | | ).
- ro_html->add( |{ render_dir_jump_link( '..' ) } | | ).
+ ro_html->add( |{ build_dir_jump_link( '..' ) } | | ).
+ IF mo_repo->is_offline( ) = abap_false.
+ ro_html->add( | | | ). " Dummy for online
+ ENDIF.
ro_html->add( '
' ).
ENDMETHOD. "render_parent_dir_line
- METHOD render_dir_jump_link.
+ METHOD build_dir_jump_link.
DATA: lv_path TYPE string,
lv_encode TYPE string,
@@ -576,9 +661,9 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
lo_html->add_anchor( iv_txt = lv_path iv_act = |{ c_actions-change_dir }?{ lv_encode }| ).
rv_html = lo_html->mv_html.
- ENDMETHOD. "render_dir_jump_link
+ ENDMETHOD. "build_dir_jump_link
- METHOD render_obj_jump_link.
+ METHOD build_obj_jump_link.
DATA: lv_encode TYPE string,
lo_html TYPE REF TO lcl_html_helper.
@@ -590,6 +675,6 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ).
rv_html = lo_html->mv_html.
- ENDMETHOD. "render_obj_jump_link
+ ENDMETHOD. "build_obj_jump_link
ENDCLASS. "lcl_gui_view_repo_content
\ No newline at end of file