diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index 153267e3e..933db4a96 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -86,7 +86,72 @@ CLASS lcl_gui_page_main IMPLEMENTATION. super->constructor( ). - ENDMETHOD. + ENDMETHOD. " constructor + + METHOD lif_gui_page~on_event. + + DATA: lv_key TYPE lcl_persistence_repo=>ty_repo-key, + lv_url TYPE string. + + lv_key = iv_getdata. + + CASE iv_action. + WHEN gc_action-repo_newoffline. " New offline repo + lcl_services_repo=>new_offline( ). + ev_state = gc_event_state-re_render. + WHEN gc_action-git_branch_delete. " Delete remote branch + lcl_services_git=>delete_branch( lv_key ). + ev_state = gc_event_state-re_render. + WHEN gc_action-git_branch_switch. " Switch branch + lcl_services_git=>switch_branch( lv_key ). + ev_state = gc_event_state-re_render. + WHEN c_actions-show. " Change displayed repo + lcl_app=>user( )->set_repo_show( lv_key ). + ev_state = gc_event_state-re_render. + WHEN c_actions-toggle_hide_files. " Toggle file diplay + lcl_app=>user( )->toggle_hide_files( ). + ev_state = gc_event_state-re_render. + ENDCASE. + + ENDMETHOD. "on_event + +********************************************************************** +* RENDERING +********************************************************************** + + METHOD lif_gui_page~render. + + DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, + lx_error TYPE REF TO lcx_exception, + lo_repo LIKE LINE OF lt_repos. + + retrieve_active_repo( ). " Get and validate key of user default repo + mv_hide_files = lcl_app=>user( )->get_hide_files( ). + + CREATE OBJECT ro_html. + + ro_html->add( header( io_include_style = styles( ) ) ). + ro_html->add( title( iv_title = 'HOME' + io_menu = build_main_menu( ) ) ). + + TRY. + lt_repos = lcl_app=>repo_srv( )->list( ). + CATCH lcx_exception INTO lx_error. + ro_html->add( render_error( lx_error ) ). + ENDTRY. + + ro_html->add( render_toc( lt_repos ) ). + + IF lines( lt_repos ) = 0 AND lx_error IS INITIAL. + ro_html->add( render_explore( ) ). + ELSE. + lo_repo = lcl_app=>repo_srv( )->get( mv_show ). + ro_html->add( render_repo( lo_repo ) ). + ENDIF. + + ro_html->add( footer( ) ). + + ENDMETHOD. "render METHOD retrieve_active_repo. @@ -131,7 +196,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lo_html->add_anchor( iv_txt = |{ iv_obj_name }| iv_act = |{ gc_action-jump }?{ lv_encode }| ). rv_html = lo_html->mv_html. - ENDMETHOD. + ENDMETHOD. "render_obj_jump_link METHOD build_main_menu. @@ -157,53 +222,184 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. "build main_menu - METHOD styles. + METHOD render_toc. + + DATA: lo_pback TYPE REF TO lcl_persistence_background, + lt_repo_bkg TYPE lcl_persistence_background=>tt_background, + lo_repo LIKE LINE OF it_list, + lv_opt TYPE c LENGTH 1, + lo_online TYPE REF TO lcl_html_toolbar, + lo_background TYPE REF TO lcl_html_toolbar, + lo_offline TYPE REF TO lcl_html_toolbar. + + + CREATE OBJECT ro_html. + CREATE OBJECT lo_online. + CREATE OBJECT lo_offline. + CREATE OBJECT lo_background. + CREATE OBJECT lo_pback. + lt_repo_bkg = lo_pback->list( ). + + IF lines( it_list ) = 0. + RETURN. + ENDIF. + + LOOP AT it_list INTO lo_repo. + IF mv_show = lo_repo->get_key( ). + lv_opt = gc_html_opt-emphas. + ELSE. + CLEAR lv_opt. + ENDIF. + + IF lo_repo->is_offline( ) = abap_true. + lo_offline->add( iv_txt = lo_repo->get_name( ) + iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| + iv_opt = lv_opt ). + ELSE. + READ TABLE lt_repo_bkg WITH KEY key = lo_repo->get_key( ) + TRANSPORTING NO FIELDS. + IF sy-subrc = 0. + lo_background->add( iv_txt = lo_repo->get_name( ) + iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| + iv_opt = lv_opt ). + ELSE. + lo_online->add( iv_txt = lo_repo->get_name( ) + iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| + iv_opt = lv_opt ). + ENDIF. + ENDIF. + + ENDLOOP. + + ro_html->add( '
' ) ##NO_TEXT. + + IF lo_online->count( ) > 0. + ro_html->add( render_toc_line( io_toolbar = lo_online + iv_image_url = 'img/repo_online' ) ). + ENDIF. + + IF lo_offline->count( ) > 0. + ro_html->add( render_toc_line( io_toolbar = lo_offline + iv_image_url = 'img/repo_offline' ) ). + ENDIF. + + IF lo_background->count( ) > 0. + ro_html->add( render_toc_line( io_toolbar = lo_background + iv_image_url = 'img/sync' ) ). + ENDIF. + + ro_html->add( '
' ). + + ENDMETHOD. "render_toc + + METHOD render_toc_line. + CREATE OBJECT ro_html. + + ro_html->add( '
' ). + + ro_html->add( '' ). + + ro_html->add( '' ). + + ro_html->add( '
' ). + ro_html->add( || ). + ro_html->add( '' ). + ro_html->add( io_toolbar->render( iv_sort = abap_true ) ). + ro_html->add( '
' ). + + ENDMETHOD. "render_toc_line + + METHOD render_error. CREATE OBJECT ro_html. - _add '/* REPOSITORY TABLE*/'. - _add 'div.repo_container {'. - _add ' position: relative;'. - _add '}'. - _add '.repo_tab {'. - _add ' border: 1px solid #DDD;'. - _add ' border-radius: 3px;'. - _add ' background: #fff;'. - _add ' margin-top: 0.5em;'. - _add '}'. - _add '.repo_tab td {'. - _add ' border-top: 1px solid #eee;'. - _add ' vertical-align: middle;'. - _add ' color: #333;'. - _add ' padding-top: 2px;'. - _add ' padding-bottom: 2px;'. - _add '}'. - _add '.repo_tab td.icon {'. - _add ' width: 32px;'. - _add ' text-align: center;'. - _add '}'. - _add '.repo_tab td.type {'. - _add ' width: 3em;'. - _add '}'. - _add '.repo_tab td.object {'. - _add ' padding-left: 0.5em;'. - _add '}'. - _add '.repo_tab td.files {'. - _add ' padding-left: 0.5em;'. - _add '}'. - _add '.repo_tab td.cmd {'. - _add ' text-align: right;'. - _add ' padding-left: 0.5em;'. - _add ' padding-right: 1em;'. - _add '}'. - _add '.repo_tab tr.unsupported { color: lightgrey; }'. - _add '.repo_tab tr.modified { background: #fbf7e9; }'. - _add '.repo_tab tr.firstrow td { border-top: 0px; }'. - _add '.repo_tab td.files span { display: block; }'. - _add '.repo_tab td.cmd span { display: block; }'. - _add '.repo_tab td.cmd a { display: block; }'. + ro_html->add( '
' ). + ro_html->add( |Error: { ix_error->mv_text }| ). + ro_html->add( '
' ). - ENDMETHOD. + ENDMETHOD. "render_error + + METHOD render_explore. + + DATA lo_toolbar TYPE REF TO lcl_html_toolbar. + + CREATE OBJECT ro_html. + CREATE OBJECT lo_toolbar. + + lo_toolbar->add( iv_txt = 'Explore new projects' + iv_act = gc_action-go_explore ) ##NO_TEXT. + + ro_html->add( '
' ). + ro_html->add( lo_toolbar->render( ) ). + ro_html->add( '
' ). + + ENDMETHOD. "render_explore + +********************************************************************** +* SELECTED REPO RENDERING +********************************************************************** + + METHOD render_repo. + + DATA: lt_repo_items TYPE tt_repo_items, + lo_tab_menu TYPE REF TO lcl_html_toolbar, + 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. + + ro_html->add( |
| ). + ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ). + + TRY. + extract_repo_content( EXPORTING io_repo = io_repo + IMPORTING et_repo_items = lt_repo_items + eo_log = lo_log ). + + " extract_repo_content must be called before rendering the menu + " so that lo_log is filled with errors from the serialization + ro_html->add( render_repo_menu( io_repo ) ). + + IF io_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 + ro_html->add( '
' ). + ENDIF. + + ro_html->add( '
' ). + IF io_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( '' ). + IF lines( lt_repo_items ) = 0. + ro_html->add( '' ) ##NO_TEXT. + ELSE. + LOOP AT lt_repo_items ASSIGNING . + ro_html->add( render_repo_item( io_repo = io_repo is_item = ) ). + ENDLOOP. + ENDIF. + ro_html->add( '
' + && '
Empty package
' + && '
' ). + ro_html->add( '
' ). + + CATCH lcx_exception INTO lx_error. + ro_html->add( render_repo_menu( io_repo ) ). + ro_html->add( render_error( lx_error ) ). + ENDTRY. + + ro_html->add( '
' ). + + ENDMETHOD. "render_repo METHOD render_repo_menu. @@ -304,69 +500,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( lo_toolbar->render( ) ). ro_html->add( '' ). - ENDMETHOD. - - METHOD render_repo. - - DATA: lt_repo_items TYPE tt_repo_items, - lo_tab_menu TYPE REF TO lcl_html_toolbar, - 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. - - ro_html->add( |
| ). - ro_html->add( render_repo_top( io_repo = io_repo iv_interactive_branch = abap_true ) ). - - TRY. - extract_repo_content( EXPORTING io_repo = io_repo - IMPORTING et_repo_items = lt_repo_items - eo_log = lo_log ). - - " extract_repo_content must be called before rendering the menu - " so that lo_log is filled with errors from the serialization - ro_html->add( render_repo_menu( io_repo ) ). - - IF io_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 - ro_html->add( '
' ). - ENDIF. - - ro_html->add( '
' ). - IF io_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( '' ). - IF lines( lt_repo_items ) = 0. - ro_html->add( '' ) ##NO_TEXT. - ELSE. - LOOP AT lt_repo_items ASSIGNING . - ro_html->add( render_repo_item( io_repo = io_repo is_item = ) ). - ENDLOOP. - ENDIF. - ro_html->add( '
' - && '
Empty package
' - && '
' ). - ro_html->add( '
' ). - - CATCH lcx_exception INTO lx_error. - ro_html->add( render_repo_menu( io_repo ) ). - ro_html->add( render_error( lx_error ) ). - ENDTRY. - - ro_html->add( '
' ). - - ENDMETHOD. + ENDMETHOD. "render_repo_menu METHOD extract_repo_content. @@ -436,7 +570,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDIF. - ENDMETHOD. + ENDMETHOD. "extract_repo_content METHOD render_repo_item. DATA: @@ -532,181 +666,59 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '' ). - ENDMETHOD. + ENDMETHOD. "render_repo_item - METHOD render_toc. +********************************************************************** +* ASSETS, STYLES, SCRIPTS +********************************************************************** - DATA: lo_pback TYPE REF TO lcl_persistence_background, - lt_repo_bkg TYPE lcl_persistence_background=>tt_background, - lo_repo LIKE LINE OF it_list, - lv_opt TYPE c LENGTH 1, - lo_online TYPE REF TO lcl_html_toolbar, - lo_background TYPE REF TO lcl_html_toolbar, - lo_offline TYPE REF TO lcl_html_toolbar. - - - CREATE OBJECT ro_html. - CREATE OBJECT lo_online. - CREATE OBJECT lo_offline. - CREATE OBJECT lo_background. - CREATE OBJECT lo_pback. - lt_repo_bkg = lo_pback->list( ). - - IF lines( it_list ) = 0. - RETURN. - ENDIF. - - LOOP AT it_list INTO lo_repo. - IF mv_show = lo_repo->get_key( ). - lv_opt = gc_html_opt-emphas. - ELSE. - CLEAR lv_opt. - ENDIF. - - IF lo_repo->is_offline( ) = abap_true. - lo_offline->add( iv_txt = lo_repo->get_name( ) - iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| - iv_opt = lv_opt ). - ELSE. - READ TABLE lt_repo_bkg WITH KEY key = lo_repo->get_key( ) - TRANSPORTING NO FIELDS. - IF sy-subrc = 0. - lo_background->add( iv_txt = lo_repo->get_name( ) - iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| - iv_opt = lv_opt ). - ELSE. - lo_online->add( iv_txt = lo_repo->get_name( ) - iv_act = |{ c_actions-show }?{ lo_repo->get_key( ) }| - iv_opt = lv_opt ). - ENDIF. - ENDIF. - - ENDLOOP. - - ro_html->add( '
' ) ##NO_TEXT. - - IF lo_online->count( ) > 0. - ro_html->add( render_toc_line( io_toolbar = lo_online - iv_image_url = 'img/repo_online' ) ). - ENDIF. - - IF lo_offline->count( ) > 0. - ro_html->add( render_toc_line( io_toolbar = lo_offline - iv_image_url = 'img/repo_offline' ) ). - ENDIF. - - IF lo_background->count( ) > 0. - ro_html->add( render_toc_line( io_toolbar = lo_background - iv_image_url = 'img/sync' ) ). - ENDIF. - - ro_html->add( '
' ). - - ENDMETHOD. "render_toc - - METHOD render_toc_line. - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - - ro_html->add( '' ). - - ro_html->add( '' ). - - ro_html->add( '
' ). - ro_html->add( || ). - ro_html->add( '' ). - ro_html->add( io_toolbar->render( iv_sort = abap_true ) ). - ro_html->add( '
' ). - - ENDMETHOD. "render_toc_line - - METHOD render_error. + METHOD styles. CREATE OBJECT ro_html. - ro_html->add( '
' ). - ro_html->add( |Error: { ix_error->mv_text }| ). - ro_html->add( '
' ). + _add '/* REPOSITORY TABLE*/'. + _add 'div.repo_container {'. + _add ' position: relative;'. + _add '}'. + _add '.repo_tab {'. + _add ' border: 1px solid #DDD;'. + _add ' border-radius: 3px;'. + _add ' background: #fff;'. + _add ' margin-top: 0.5em;'. + _add '}'. + _add '.repo_tab td {'. + _add ' border-top: 1px solid #eee;'. + _add ' vertical-align: middle;'. + _add ' color: #333;'. + _add ' padding-top: 2px;'. + _add ' padding-bottom: 2px;'. + _add '}'. + _add '.repo_tab td.icon {'. + _add ' width: 32px;'. + _add ' text-align: center;'. + _add '}'. + _add '.repo_tab td.type {'. + _add ' width: 3em;'. + _add '}'. + _add '.repo_tab td.object {'. + _add ' padding-left: 0.5em;'. + _add '}'. + _add '.repo_tab td.files {'. + _add ' padding-left: 0.5em;'. + _add '}'. + _add '.repo_tab td.cmd {'. + _add ' text-align: right;'. + _add ' padding-left: 0.5em;'. + _add ' padding-right: 1em;'. + _add '}'. + _add '.repo_tab tr.unsupported { color: lightgrey; }'. + _add '.repo_tab tr.modified { background: #fbf7e9; }'. + _add '.repo_tab tr.firstrow td { border-top: 0px; }'. + _add '.repo_tab td.files span { display: block; }'. + _add '.repo_tab td.cmd span { display: block; }'. + _add '.repo_tab td.cmd a { display: block; }'. - ENDMETHOD. - - METHOD render_explore. - - DATA lo_toolbar TYPE REF TO lcl_html_toolbar. - - CREATE OBJECT ro_html. - CREATE OBJECT lo_toolbar. - - lo_toolbar->add( iv_txt = 'Explore new projects' - iv_act = gc_action-go_explore ) ##NO_TEXT. - - ro_html->add( '
' ). - ro_html->add( lo_toolbar->render( ) ). - ro_html->add( '
' ). - - ENDMETHOD. - - METHOD lif_gui_page~on_event. - - DATA: lv_key TYPE lcl_persistence_repo=>ty_repo-key, - lv_url TYPE string. - - lv_key = iv_getdata. - - CASE iv_action. - WHEN gc_action-repo_newoffline. " New offline repo - lcl_services_repo=>new_offline( ). - ev_state = gc_event_state-re_render. - WHEN gc_action-git_branch_delete. " Delete remote branch - lcl_services_git=>delete_branch( lv_key ). - ev_state = gc_event_state-re_render. - WHEN gc_action-git_branch_switch. " Switch branch - lcl_services_git=>switch_branch( lv_key ). - ev_state = gc_event_state-re_render. - WHEN c_actions-show. " Change displayed repo - lcl_app=>user( )->set_repo_show( lv_key ). - ev_state = gc_event_state-re_render. - WHEN c_actions-toggle_hide_files. " Toggle file diplay - lcl_app=>user( )->toggle_hide_files( ). - ev_state = gc_event_state-re_render. - ENDCASE. - - ENDMETHOD. - - METHOD lif_gui_page~render. - - DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, - lx_error TYPE REF TO lcx_exception, - lo_repo LIKE LINE OF lt_repos. - - retrieve_active_repo( ). " Get and validate key of user default repo - mv_hide_files = lcl_app=>user( )->get_hide_files( ). - - CREATE OBJECT ro_html. - - ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_title = 'HOME' - io_menu = build_main_menu( ) ) ). - - TRY. - lt_repos = lcl_app=>repo_srv( )->list( ). - CATCH lcx_exception INTO lx_error. - ro_html->add( render_error( lx_error ) ). - ENDTRY. - - ro_html->add( render_toc( lt_repos ) ). - - IF lines( lt_repos ) = 0 AND lx_error IS INITIAL. - ro_html->add( render_explore( ) ). - ELSE. - lo_repo = lcl_app=>repo_srv( )->get( mv_show ). - ro_html->add( render_repo( lo_repo ) ). - ENDIF. - - ro_html->add( footer( ) ). - - ENDMETHOD. + ENDMETHOD. "styles METHOD lif_gui_page~get_assets. * http://fa2png.io/r/octicons/ @@ -838,6 +850,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. && '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='. APPEND ls_image TO rt_assets. - ENDMETHOD. + ENDMETHOD. "get_assets ENDCLASS. \ No newline at end of file