From 81e7168eab9592a1a4e7a77953b8409cc92322c5 Mon Sep 17 00:00:00 2001 From: atsy Date: Sat, 28 May 2016 18:04:45 +0300 Subject: [PATCH] #226, images for repos, refactor repo rendering (heavily) --- zabapgit.prog.abap | 381 ++++++++++++++++++++++++--------------------- 1 file changed, 204 insertions(+), 177 deletions(-) diff --git a/zabapgit.prog.abap b/zabapgit.prog.abap index 094a60dc2..53f5fe63a 100644 --- a/zabapgit.prog.abap +++ b/zabapgit.prog.abap @@ -18044,8 +18044,9 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add('}'). ro_html->add('a:hover, a:active { text-decoration: underline; }'). ro_html->add('img { border: 0px; }'). + ro_html->add('table { border-collapse: collapse; }'). ro_html->add('.error { color: red; }'). - ro_html->add('table { border-collapse: collapse; }'). + ro_html->add('.grey { color: lightgrey !important; }'). " Structure div styles: header, footer, toc ro_html->add('/* STRUCTURE DIVS */'). @@ -18188,6 +18189,17 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. METHODS lif_gui_page~render REDEFINITION. PRIVATE SECTION. + + TYPES: BEGIN OF ty_repo_item, + obj_type TYPE tadir-object, + obj_name TYPE tadir-obj_name, + is_changed TYPE abap_bool, + files TYPE ty_string_tt, + is_first TYPE abap_bool, + result TYPE lcl_file_status=>ty_result, "TODO, remove, clutch + END OF ty_repo_item. + TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY. + CLASS-DATA: go_user TYPE REF TO lcl_persistence_user. METHODS styles @@ -18202,7 +18214,7 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. - METHODS build_menu + METHODS build_main_menu RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar. METHODS render_repo_top @@ -18215,25 +18227,32 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. - METHODS render_repo_online - IMPORTING io_repo TYPE REF TO lcl_repo_online + METHODS render_repo + IMPORTING io_repo TYPE REF TO lcl_repo RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. - METHODS render_repo_offline - IMPORTING io_repo TYPE REF TO lcl_repo_offline + METHODS extract_repo_content + IMPORTING io_repo TYPE REF TO lcl_repo + EXPORTING et_repo_items TYPE tt_repo_items + eo_log TYPE REF TO lcl_log + RAISING lcx_exception. + + METHODS render_repo_item + IMPORTING io_repo TYPE REF TO lcl_repo + is_item TYPE ty_repo_item RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. + METHODS render_obj_jump_link + IMPORTING iv_obj_type TYPE tadir-object + iv_obj_name TYPE tadir-obj_name + RETURNING VALUE(rv_html) TYPE string. + CLASS-METHODS render_explore RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper RAISING lcx_exception. - CLASS-METHODS jump_link - IMPORTING iv_obj_type TYPE tadir-object - iv_obj_name TYPE tadir-obj_name - RETURNING VALUE(rv_html) TYPE string. - CLASS-METHODS jump_encode IMPORTING iv_obj_type TYPE tadir-object iv_obj_name TYPE tadir-obj_name @@ -19343,22 +19362,14 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. "encode_struct - METHOD jump_link. + METHOD render_obj_jump_link. DATA: lv_encode TYPE string. + lv_encode = jump_encode( iv_obj_type = iv_obj_type + iv_obj_name = iv_obj_name ). - lv_encode = jump_encode( - iv_obj_type = iv_obj_type - iv_obj_name = iv_obj_name ). - - rv_html = iv_obj_type && - ' ' && - '' && - iv_obj_name && - ''. + rv_html = |{ iv_obj_name }|. ENDMETHOD. @@ -19616,7 +19627,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. "install - METHOD build_menu. + METHOD build_main_menu. DATA lo_toolbar TYPE REF TO lcl_html_toolbar. DATA lo_betasub TYPE REF TO lcl_html_toolbar. @@ -19636,7 +19647,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_menu = lo_toolbar. - ENDMETHOD. "build menu + ENDMETHOD. "build main_menu METHOD styles. CREATE OBJECT ro_html. @@ -19709,8 +19720,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ENDMETHOD. METHOD render_repo_menu. - DATA lo_toolbar TYPE REF TO lcl_html_toolbar. - DATA lv_key TYPE lcl_persistence_db=>ty_value. + DATA lo_toolbar TYPE REF TO lcl_html_toolbar. + DATA lv_key TYPE lcl_persistence_db=>ty_value. + DATA lo_repo_online TYPE REF TO lcl_repo_online. CREATE OBJECT ro_html. CREATE OBJECT lo_toolbar. @@ -19721,10 +19733,16 @@ CLASS lcl_gui_page_main IMPLEMENTATION. lo_toolbar->add( iv_txt = 'Show' iv_cmd = |sapevent:unhide?{ lv_key }| ). ELSE. IF io_repo->is_offline( ) = abap_true. - lo_toolbar->add( iv_txt = 'Import ZIP' iv_cmd = |sapevent:zipimport?{ lv_key }| iv_emph = abap_true ). - lo_toolbar->add( iv_txt = 'Export ZIP' iv_cmd = |sapevent:zipexport?{ lv_key }| iv_emph = abap_true ). - lo_toolbar->add( iv_txt = 'Export&Commit' iv_cmd = |sapevent:files_commit?{ lv_key }| iv_emph = abap_true ). + lo_toolbar->add( iv_txt = 'Import ZIP' iv_cmd = |sapevent:zipimport?{ lv_key }| iv_emph = abap_true ). + lo_toolbar->add( iv_txt = 'Export ZIP' iv_cmd = |sapevent:zipexport?{ lv_key }| iv_emph = abap_true ). + lo_toolbar->add( iv_txt = 'Export&Commit' iv_cmd = |sapevent:files_commit?{ lv_key }| iv_emph = abap_true ). ELSE. + lo_repo_online ?= io_repo. + IF lo_repo_online->get_sha1_remote( ) <> lo_repo_online->get_sha1_local( ). + lo_toolbar->add( iv_txt = 'Pull' iv_cmd = |sapevent:pull?{ lv_key }| iv_emph = abap_true ). + ELSEIF lcl_stage_logic=>count( lo_repo_online ) > 0. + lo_toolbar->add( iv_txt = 'Stage' iv_cmd = |sapevent:stage?{ lv_key }| iv_emph = abap_true ). + ENDIF. ENDIF. lo_toolbar->add( iv_txt = 'Remove' iv_cmd = |sapevent:remove?{ lv_key }| ). lo_toolbar->add( iv_txt = 'Uninstall' iv_cmd = |sapevent:uninstall?{ lv_key }| ). @@ -19740,24 +19758,28 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD render_repo_top. DATA lo_repo_online TYPE REF TO lcl_repo_online. + DATA lv_icon TYPE string. CREATE OBJECT ro_html. + IF io_repo->is_offline( ) = abap_true. + lv_icon = 'img/repo_offline'. + ELSE. + lv_icon = 'img/repo_online'. + ENDIF. + ro_html->add( || ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). + ro_html->add( '' ). ro_html->add( '
' ). - IF io_repo->is_offline( ) = abap_false. - ro_html->add( '' ). - ELSE. - ro_html->add( '' ). - ENDIF. + ro_html->add( || ). ro_html->add( |{ io_repo->get_name( ) }| ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( |{ io_repo->get_package( ) }| ). + IF io_repo->is_offline( ) = abap_false. lo_repo_online ?= io_repo. ro_html->add( '' ). @@ -19765,71 +19787,18 @@ CLASS lcl_gui_page_main IMPLEMENTATION. ro_html->add( '' ). ro_html->add( || ). ENDIF. - ro_html->add( '
' ). ENDMETHOD. - METHOD render_repo_offline. - - DATA: lt_tadir TYPE lcl_tadir=>ty_tadir_tt. - - FIELD-SYMBOLS: LIKE LINE OF lt_tadir. - - CREATE OBJECT ro_html. - - ro_html->add( '
' ). - ro_html->add( render_repo_top( io_repo ) ). - ro_html->add( render_repo_menu( io_repo ) ). - - IF go_user->is_hidden( io_repo->get_key( ) ) = abap_false. - - lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ). - IF lines( lt_tadir ) = 0. - ro_html->add( '
' - && '
Empty package
' - && '
' ) ##NO_TEXT. - ELSE. - ro_html->add( '' ). - LOOP AT lt_tadir ASSIGNING . - IF sy-tabix = 1. - ro_html->add( '' ). - ELSE. - ro_html->add( '' ). - ENDIF. - ro_html->add( '' ). - ro_html->add( '' ). - ENDLOOP. - ro_html->add( '
' ). - ro_html->add( jump_link( iv_obj_type = -object - iv_obj_name = -obj_name ) ). - ro_html->add( '
' ). - ENDIF. - - ENDIF. - - ro_html->add( '
' ). - - ENDMETHOD. "render_repo_offline - - METHOD render_repo_online. - - DATA: lv_link TYPE string, - lv_object TYPE string, - lv_index LIKE sy-tabix, - lv_file_encode TYPE string, - lx_error TYPE REF TO lcx_exception, - lv_span TYPE i, - lv_trclass TYPE string, - lo_log TYPE REF TO lcl_log, - lt_results TYPE lcl_file_status=>ty_results_tt, - ls_next LIKE LINE OF lt_results, - ls_item TYPE ty_item, - lv_supported TYPE abap_bool. - - FIELD-SYMBOLS: LIKE LINE OF lt_results. + METHOD render_repo. + DATA: lt_repo_items TYPE tt_repo_items, + lx_error TYPE REF TO lcx_exception, + lo_log TYPE REF TO lcl_log. + FIELD-SYMBOLS TYPE ty_repo_item. CREATE OBJECT ro_html. @@ -19839,90 +19808,157 @@ CLASS lcl_gui_page_main IMPLEMENTATION. IF go_user->is_hidden( io_repo->get_key( ) ) = abap_false. TRY. - CREATE OBJECT lo_log. - lt_results = io_repo->status( lo_log ). + extract_repo_content( EXPORTING io_repo = io_repo + IMPORTING et_repo_items = lt_repo_items + eo_log = lo_log ). ro_html->add( '' ). - ro_html->add( '' ). - LOOP AT lt_results ASSIGNING . - lv_index = sy-tabix. - lv_file_encode = file_encode( iv_key = io_repo->get_key( ) - is_file = ). - - CLEAR lv_link. - IF -filename IS INITIAL. - lv_link = 'new'. - ELSEIF -match = abap_false. - lv_link = 'diff'. - ENDIF. - - IF lv_span = 0. - READ TABLE lt_results INTO ls_next INDEX lv_index. - ASSERT sy-subrc = 0. - WHILE ls_next-obj_type = -obj_type - AND ls_next-obj_name = -obj_name. - lv_span = lv_span + 1. - lv_index = lv_index + 1. - READ TABLE lt_results INTO ls_next INDEX lv_index. - IF sy-subrc <> 0. - EXIT. " current loop. - ENDIF. - ENDWHILE. - - IF -obj_type IS INITIAL. - lv_object = '' && - ''. - lv_trclass = ' class="unsupported"' ##NO_TEXT. - ELSE. - CLEAR lv_trclass. - lv_object = '' && - ''. - ENDIF. - ELSE. - CLEAR lv_object. - ENDIF. - - - ro_html->add( '' ). - ro_html->add( lv_object ). - ro_html->add( '' ). - ro_html->add( '' ). - ro_html->add( '' ). - - lv_span = lv_span - 1. - ENDLOOP. - - ro_html->add( '' ). - ro_html->add( '
 ' && - jump_link( iv_obj_type = -obj_type - iv_obj_name = -obj_name ) && - '' && - -package && - '' ). - ro_html->add( -path && -filename ). - ro_html->add( '' && lv_link && '
' ). - - IF io_repo->get_sha1_remote( ) <> io_repo->get_sha1_local( ). - ro_html->add( 'pull' ). - ELSEIF lcl_stage_logic=>count( io_repo ) > 0. - ro_html->add( 'stage' ). + IF lines( lt_repo_items ) = 0. + ro_html->add( '' + && '
Empty package
' + && '' ) ##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( lo_log->to_html( ) ). + ro_html->add( '' ). + + IF io_repo->is_offline( ) = abap_false. + ro_html->add( '
' ). "TODO ?????? + ro_html->add( lo_log->to_html( ) ). + ro_html->add( '
' ). + ENDIF. CATCH lcx_exception INTO lx_error. ro_html->add( render_error( lx_error ) ). ENDTRY. - ENDIF. + ENDIF. " Hidden ro_html->add( '' ). - ENDMETHOD. "render_repo + ENDMETHOD. + + METHOD extract_repo_content. + + DATA: lo_repo_online TYPE REF TO lcl_repo_online, + lt_tadir TYPE lcl_tadir=>ty_tadir_tt, + ls_repo_item TYPE ty_repo_item, + lv_file TYPE string, + lt_results TYPE lcl_file_status=>ty_results_tt. + + FIELD-SYMBOLS: LIKE LINE OF lt_results, + LIKE LINE OF lt_tadir. + + IF io_repo->is_offline( ) = abap_true. + lt_tadir = lcl_tadir=>read( io_repo->get_package( ) ). + LOOP AT lt_tadir ASSIGNING . + CLEAR ls_repo_item. + IF sy-tabix = 1. + ls_repo_item-is_first = abap_true. + ENDIF. + ls_repo_item-obj_type = -object. + ls_repo_item-obj_name = -obj_name. + APPEND ls_repo_item TO et_repo_items. + ENDLOOP. + ELSE. + CREATE OBJECT eo_log. + lo_repo_online ?= io_repo. + lt_results = lo_repo_online->status( eo_log ). + LOOP AT lt_results ASSIGNING . + AT NEW obj_name. "obj_type + obj_name + CLEAR ls_repo_item. + IF sy-tabix = 1. + ls_repo_item-is_first = abap_true. + ENDIF. + ls_repo_item-obj_type = -obj_type. + ls_repo_item-obj_name = -obj_name. + ENDAT. + + IF -filename IS NOT INITIAL. + lv_file = -path && -filename. + APPEND lv_file TO ls_repo_item-files. + ENDIF. + IF -match = abap_false. + ls_repo_item-is_changed = abap_true. + ls_repo_item-result = . "TODO remove, clutch + ENDIF. + + AT END OF obj_name. "obj_type + obj_name + APPEND ls_repo_item TO et_repo_items. + ENDAT. + ENDLOOP. + ENDIF. + + ENDMETHOD. + + METHOD render_repo_item. + DATA: + lv_link TYPE string, + lv_icon TYPE string, + lv_file TYPE string, + lv_cmd TYPE string, + lv_trclass TYPE string. + + CREATE OBJECT ro_html. + + IF is_item-is_first = abap_true. " TR class + lv_trclass = 'firstrow'. + ENDIF. + IF is_item-obj_name IS INITIAL. + lv_trclass = lv_trclass && ' unsupported'. + ENDIF. + IF lv_trclass IS NOT INITIAL. + SHIFT lv_trclass LEFT DELETING LEADING space. + lv_trclass = | class="{ lv_trclass }"|. + ENDIF. + + ro_html->add( || ). + + IF is_item-obj_name IS INITIAL. + ro_html->add( '' ). + ELSE. + CASE is_item-obj_type. "TODO ?? + WHEN 'PROG' OR 'CLAS' OR 'FUGR'. + lv_icon = ||. + WHEN 'W3MI' OR 'W3HT'. + lv_icon = ||. + WHEN ''. + " no icon + WHEN OTHERS. + lv_icon = ||. + ENDCASE. + + lv_link = render_obj_jump_link( iv_obj_name = is_item-obj_name + iv_obj_type = is_item-obj_type ). + ro_html->add( |{ lv_icon }| ). + ro_html->add( |{ is_item-obj_type }| ). + ro_html->add( |{ lv_link }| ). + ENDIF. + + IF io_repo->is_offline( ) = abap_false. " Files for online repos only + ro_html->add( '' ). + LOOP AT is_item-files INTO lv_file. + ro_html->add( |{ lv_file }| ). + ENDLOOP. + ro_html->add( '' ). + + IF lines( is_item-files ) = 0. + lv_cmd = 'new'. + ELSEIF is_item-is_changed = abap_true. + lv_cmd = 'get_key( ) + is_file = is_item-result ) + && '">diff'. + ENDIF. + ENDIF. + + ro_html->add( |{ lv_cmd }| ). + ro_html->add( '' ). + + ENDMETHOD. METHOD abapgit_installation. @@ -20170,8 +20206,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION. METHOD lif_gui_page~render. DATA: lt_repos TYPE lcl_repo_srv=>ty_repo_tt, - lo_repo_online TYPE REF TO lcl_repo_online, - lo_repo_offline TYPE REF TO lcl_repo_offline, lx_error TYPE REF TO lcx_exception, lo_repo LIKE LINE OF lt_repos. @@ -20180,7 +20214,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. CREATE OBJECT go_user. ro_html->add( header( io_include_style = styles( ) ) ). - ro_html->add( title( iv_page_title = 'MAIN' io_menu = build_menu( ) ) ). + ro_html->add( title( iv_page_title = 'MAIN' io_menu = build_main_menu( ) ) ). TRY. lt_repos = lcl_repo_srv=>list( ). @@ -20198,14 +20232,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION. iv_current = sy-tabix iv_total = lines( lt_repos ) iv_text = lo_repo->get_name( ) ) ##NO_TEXT. - - IF lo_repo->is_offline( ) = abap_true. - lo_repo_offline ?= lo_repo. - ro_html->add( render_repo_offline( lo_repo_offline ) ). - ELSE. - lo_repo_online ?= lo_repo. - ro_html->add( render_repo_online( lo_repo_online ) ). - ENDIF. + ro_html->add( render_repo( lo_repo ) ). ENDLOOP. ENDIF.