diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index e959792ca..46f3a26c8 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -113,6 +113,7 @@ CONSTANTS: BEGIN OF gc_event_state, no_more_act VALUE 4, new_page_w_bookmark VALUE 5, go_back_to_bookmark VALUE 6, + new_page_replacing VALUE 7, END OF gc_event_state. CONSTANTS: BEGIN OF gc_html_opt, diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index 400aab6ae..6e2094ca4 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -14,7 +14,7 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. METHODS back IMPORTING iv_to_bookmark TYPE abap_bool DEFAULT abap_false - RETURNING VALUE(rv_exit) TYPE xfeld + RETURNING value(rv_exit) TYPE xfeld RAISING lcx_exception. METHODS on_event FOR EVENT sapevent OF cl_gui_html_viewer @@ -45,14 +45,18 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app. METHODS cache_html IMPORTING iv_html TYPE string - RETURNING VALUE(rv_url) TYPE w3url. + RETURNING value(rv_url) TYPE w3url. METHODS render RAISING lcx_exception. + METHODS get_current_page_name + RETURNING value(rv_page_name) TYPE string. + METHODS call_page IMPORTING ii_page TYPE REF TO lif_gui_page iv_with_bookmark TYPE abap_bool DEFAULT abap_false + iv_replacing TYPE abap_bool DEFAULT abap_false RAISING lcx_exception. ENDCLASS. "lcl_gui DEFINITION @@ -78,23 +82,25 @@ CLASS lcl_gui IMPLEMENTATION. IF mi_cur_page IS BOUND. mi_cur_page->on_event( EXPORTING - iv_action = action - iv_getdata = getdata - it_postdata = postdata + iv_action = action + iv_prev_page = get_current_page_name( ) + iv_getdata = getdata + it_postdata = postdata IMPORTING - ei_page = li_page - ev_state = lv_state ). + ei_page = li_page + ev_state = lv_state ). ENDIF. IF lv_state IS INITIAL. mo_router->on_event( EXPORTING - iv_action = action - iv_getdata = getdata - it_postdata = postdata + iv_action = action + iv_prev_page = get_current_page_name( ) + iv_getdata = getdata + it_postdata = postdata IMPORTING - ei_page = li_page - ev_state = lv_state ). + ei_page = li_page + ev_state = lv_state ). ENDIF. CASE lv_state. @@ -104,6 +110,8 @@ CLASS lcl_gui IMPLEMENTATION. call_page( li_page ). WHEN gc_event_state-new_page_w_bookmark. call_page( ii_page = li_page iv_with_bookmark = abap_true ). + WHEN gc_event_state-new_page_replacing. + call_page( ii_page = li_page iv_replacing = abap_true ). WHEN gc_event_state-go_back. back( ). WHEN gc_event_state-go_back_to_bookmark. @@ -158,7 +166,7 @@ CLASS lcl_gui IMPLEMENTATION. ls_stack TYPE ty_page_stack. FIELD-SYMBOLS LIKE LINE OF lt_assets. - IF NOT mi_cur_page IS INITIAL. + IF iv_replacing = abap_false AND NOT mi_cur_page IS INITIAL. ls_stack-page = mi_cur_page. ls_stack-bookmark = iv_with_bookmark. APPEND ls_stack TO mt_stack. @@ -270,4 +278,14 @@ CLASS lcl_gui IMPLEMENTATION. ENDMETHOD. "cache_image + METHOD get_current_page_name. + IF mi_cur_page IS BOUND. + rv_page_name = + cl_abap_classdescr=>describe_by_object_ref( mi_cur_page + )->get_relative_name( ). + SHIFT rv_page_name LEFT DELETING LEADING 'LCL_GUI_'. + ENDIF." ELSE - return is empty => initial page + + ENDMETHOD. "get_current_page_name + ENDCLASS. "lcl_gui IMPLEMENTATION \ No newline at end of file diff --git a/src/zabapgit_gui_router.prog.abap b/src/zabapgit_gui_router.prog.abap index 569f0b184..273e0f47c 100644 --- a/src/zabapgit_gui_router.prog.abap +++ b/src/zabapgit_gui_router.prog.abap @@ -9,11 +9,12 @@ CLASS lcl_gui_router DEFINITION FINAL. PUBLIC SECTION. METHODS on_event - IMPORTING iv_action TYPE clike - iv_getdata TYPE clike OPTIONAL - it_postdata TYPE cnht_post_data_tab OPTIONAL - EXPORTING ei_page TYPE REF TO lif_gui_page - ev_state TYPE i + IMPORTING iv_action TYPE clike + iv_prev_page TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. PRIVATE SECTION. @@ -126,7 +127,11 @@ CLASS lcl_gui_router IMPLEMENTATION. " DB actions WHEN 'db_display' OR 'db_edit'. ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). - ev_state = gc_event_state-new_page. + IF iv_prev_page = 'PAGE_DB_DISPLAY'. + ev_state = gc_event_state-new_page_replacing. + ELSE. + ev_state = gc_event_state-new_page. + ENDIF. WHEN 'db_delete'. db_delete( iv_getdata = iv_getdata ). ev_state = gc_event_state-re_render. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index f2b70a1a8..c90c08f83 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -8,11 +8,12 @@ INTERFACE lif_gui_page. METHODS on_event - IMPORTING iv_action TYPE clike - iv_getdata TYPE clike OPTIONAL - it_postdata TYPE cnht_post_data_tab OPTIONAL - EXPORTING ei_page TYPE REF TO lif_gui_page - ev_state TYPE i + IMPORTING iv_action TYPE clike + iv_prev_page TYPE clike + iv_getdata TYPE clike OPTIONAL + it_postdata TYPE cnht_post_data_tab OPTIONAL + EXPORTING ei_page TYPE REF TO lif_gui_page + ev_state TYPE i RAISING lcx_exception. METHODS render diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index 36b057a0a..d88eb7cb7 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -2,17 +2,6 @@ *& Include ZABAPGIT_PAGE_DB *&---------------------------------------------------------------------* -CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super. - - PUBLIC SECTION. - METHODS lif_gui_page~render REDEFINITION. - - PRIVATE SECTION. - METHODS styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. - -ENDCLASS. - CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page_super. PUBLIC SECTION. @@ -38,7 +27,9 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. METHOD lif_gui_page~render. - DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str. + DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str, + ls_action TYPE lcl_persistence_db=>ty_content, + lv_action TYPE string. TRY. lv_data = lcl_app=>db( )->read( @@ -47,20 +38,30 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. CATCH lcx_not_found ##NO_HANDLER. ENDTRY. - lv_data = lcl_xml_pretty=>print( lv_data ). + ls_action-type = ms_key-type. + ls_action-value = ms_key-value. + lv_action = lcl_html_action_utils=>dbkey_encode( ls_action ). - lv_data = escape( val = lv_data - format = cl_abap_format=>e_html_attr ). + lv_data = lcl_xml_pretty=>print( lv_data ). + lv_data = escape( val = lv_data + format = cl_abap_format=>e_html_attr ). CREATE OBJECT ro_html. ro_html->add( header( io_include_style = styles( ) ) ). ro_html->add( title( 'CONFIG DISPLAY' ) ). ro_html->add( '
' ). + ro_html->add( '
' ). + ro_html->add( || && |
Type:{ ms_key-type }
| ). - ro_html->add( || && + ro_html->add( |
Value:
| && |
Key:{ ms_key-value }
| ). + + ro_html->add( '
' ). + ro_html->add_anchor( iv_txt = 'Edit' iv_act = |db_edit?{ lv_action }| ). + ro_html->add( '
' ). + ro_html->add( |
{ lv_data }
| ). ro_html->add( '
' ). @@ -85,6 +86,11 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. _add ' white-space: pre-wrap;'. _add ' background-color: #eaeaea;'. _add ' padding: 0.5em;'. + _add ' margin: 0.5em 0em;'. + _add ' width: 50em;'. + _add '}'. + + _add 'div.db_entry table.toolbar {'. _add ' width: 50em;'. _add '}'. @@ -92,6 +98,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION. _add ' display: inline-block;'. _add ' border: 1px #b3c1cc solid;'. _add ' background-color: #eee;'. + _add ' border-radius: 3px;'. _add ' margin-right: 0.5em; '. _add '}'. _add 'table.tag td { padding: 0.2em 0.5em; }'. @@ -159,7 +166,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. " Banners ro_html->add( || && |
Type:{ ms_key-type }
| ). - ro_html->add( || && + ro_html->add( |
Value:
| && |
Key:{ ms_key-value }
| ). " Form @@ -200,6 +207,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. _add ' display: inline-block;'. _add ' border: 1px #b3c1cc solid;'. _add ' background-color: #eee;'. + _add ' border-radius: 3px;'. _add ' margin-right: 0.5em; '. _add '}'. _add 'table.tag td { padding: 0.2em 0.5em; }'. @@ -219,12 +227,26 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. ENDCLASS. +CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super. + + PUBLIC SECTION. + METHODS lif_gui_page~render REDEFINITION. + + PRIVATE SECTION. + METHODS styles + RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper. + METHODS explain_content + IMPORTING is_data TYPE lcl_persistence_db=>ty_content + RETURNING VALUE(rv_text) TYPE string. + + +ENDCLASS. + CLASS lcl_gui_page_db IMPLEMENTATION. METHOD lif_gui_page~render. DATA: lt_data TYPE lcl_persistence_db=>tt_content, - lv_escaped TYPE string, lv_action TYPE string, lv_trclass TYPE string, lo_toolbar TYPE REF TO lcl_html_toolbar. @@ -240,12 +262,12 @@ CLASS lcl_gui_page_db IMPLEMENTATION. ro_html->add( title( 'DATABASE PERSISTENCY' ) ). ro_html->add( '
' ). - ro_html->add( '' ). + ro_html->add( '
' ). " Header ro_html->add( '' ). ro_html->add( '' ). - ro_html->add( '' ). + ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). ro_html->add( '' ). @@ -257,15 +279,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION. lv_trclass = ' class="firstrow"' ##NO_TEXT. ENDIF. - IF strlen( -data_str ) >= 250. - lv_escaped = escape( val = -data_str(250) - format = cl_abap_format=>e_html_attr ). - ELSE. - lv_escaped = escape( val = -data_str - format = cl_abap_format=>e_html_attr ). - ENDIF. - - lv_action = lcl_html_action_utils=>dbkey_encode( ). + lv_action = lcl_html_action_utils=>dbkey_encode( ). CREATE OBJECT lo_toolbar. lo_toolbar->add( iv_txt = 'Display' iv_act = |db_display?{ lv_action }| ). @@ -275,9 +289,9 @@ CLASS lcl_gui_page_db IMPLEMENTATION. ro_html->add( || ). ro_html->add( || ). ro_html->add( || ). - ro_html->add( || ). + ro_html->add( || ). ro_html->add( '' ). ro_html->add( '' ). ENDLOOP. @@ -289,6 +303,52 @@ CLASS lcl_gui_page_db IMPLEMENTATION. ENDMETHOD. "lif_gui_page~render + METHOD explain_content. + DATA: lv_result TYPE match_result, + lv_match TYPE submatch_result, + lv_cnt TYPE i. + + CASE is_data-type. + WHEN 'REPO'. + FIND FIRST OCCURRENCE OF REGEX '(.*)' + IN is_data-data_str IGNORING CASE RESULTS lv_result. + READ TABLE lv_result-submatches INTO lv_match INDEX 1. + IF sy-subrc IS INITIAL. + rv_text = is_data-data_str+lv_match-offset(lv_match-length). + ENDIF. + + FIND FIRST OCCURRENCE OF REGEX '' + IN is_data-data_str IGNORING CASE MATCH COUNT lv_cnt. + IF lv_cnt > 0. + rv_text = |On-line, Name: { lcl_url=>name( rv_text ) }|. + ELSE. + rv_text = |Off-line, Name: { rv_text }|. + ENDIF. + + WHEN 'BACKGROUND'. + FIND FIRST OCCURRENCE OF REGEX '(.*)' + IN is_data-data_str IGNORING CASE RESULTS lv_result. + READ TABLE lv_result-submatches INTO lv_match INDEX 1. + IF sy-subrc IS NOT INITIAL. + RETURN. + ENDIF. + rv_text = |Method: { is_data-data_str+lv_match-offset(lv_match-length) }, | + && |Repository: { lcl_app=>repo_srv( )->get( is_data-value )->get_name( ) }|. + + WHEN 'USER'. + rv_text = '-'. " No additional explanation for user + WHEN OTHERS. + IF strlen( is_data-data_str ) >= 250. + rv_text = is_data-data_str(250). + ELSE. + rv_text = is_data-data_str. + ENDIF. + rv_text = escape( val = rv_text + format = cl_abap_format=>e_html_attr ). + rv_text = |
{ rv_text }
|. + ENDCASE. + ENDMETHOD. "explain_content + METHOD styles. CREATE OBJECT ro_html. @@ -299,26 +359,29 @@ CLASS lcl_gui_page_db IMPLEMENTATION. _add ' padding: 0.5em;'. _add '}'. _add 'table.db_tab pre {'. - _add ' display: block;'. + _add ' display: inline-block;'. _add ' overflow: hidden;'. _add ' word-wrap:break-word;'. _add ' white-space: pre-wrap;'. - _add ' background-color: #eaeaea;'. - _add ' padding: 3px;'. - _add ' width: 50em;'. + _add ' margin: 0px;'. + _add ' width: 30em;'. _add '}'. _add 'table.db_tab tr.firstrow td { padding-top: 0.5em; }'. _add 'table.db_tab th {'. _add ' text-align: left;'. _add ' color: #888;'. - _add ' padding: 0.2em;'. + _add ' padding: 0.5em;'. _add ' border-bottom: 1px #ddd solid;'. _add '}'. _add 'table.db_tab td {'. _add ' color: #333;'. - _add ' padding: 0.2em;'. + _add ' padding: 0.5em;'. _add ' vertical-align: top;'. _add '}'. + _add 'table.db_tab td.data {'. + _add ' color: #888;'. + _add ' font-style: italic;'. + _add '}'. ENDMETHOD. "styles
TypeValueKeyData
{ -type }{ -value }
{ lv_escaped }
{ explain_content( ) }' ). - ro_html->add( lo_toolbar->render( iv_vertical = abap_true ) ). + ro_html->add( lo_toolbar->render( iv_vertical = abap_false ) ). ro_html->add( '