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( || ). @@ -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( '' && '' ). 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( || ). ro_html->add( || ). 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( || ). ro_html->add( || ). ro_html->add( || ). ENDIF. - IF mo_repo->is_offline( ) = abap_false. " Files for online repos only + IF mo_repo->is_offline( ) = abap_false. + " Files ro_html->add( '' ). + " TODO Refactor + " Command ro_html->add( '' ). @@ -546,8 +628,8 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION. METHOD render_empty_package. rv_html = '' ##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( || ). + ro_html->add( || ). + 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
{ mv_cur_dir }non-code and meta files{ get_item_icon( is_item ) }{ lv_link }{ get_item_icon( is_item ) }{ is_item-obj_type }{ lv_link }' ). 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( '' ). - 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( '
' - && '
Empty package
' - && '
{ render_dir_jump_link( '..' ) }{ build_dir_jump_link( '..' ) }