Merged branch dp_ui_improve into master

This commit is contained in:
atsy 2016-09-10 10:03:41 +03:00
commit 9bc457ea0c
5 changed files with 149 additions and 61 deletions

View File

@ -113,6 +113,7 @@ CONSTANTS: BEGIN OF gc_event_state,
no_more_act VALUE 4, no_more_act VALUE 4,
new_page_w_bookmark VALUE 5, new_page_w_bookmark VALUE 5,
go_back_to_bookmark VALUE 6, go_back_to_bookmark VALUE 6,
new_page_replacing VALUE 7,
END OF gc_event_state. END OF gc_event_state.
CONSTANTS: BEGIN OF gc_html_opt, CONSTANTS: BEGIN OF gc_html_opt,

View File

@ -14,7 +14,7 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
METHODS back METHODS back
IMPORTING iv_to_bookmark TYPE abap_bool DEFAULT abap_false 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. RAISING lcx_exception.
METHODS on_event FOR EVENT sapevent OF cl_gui_html_viewer 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 METHODS cache_html
IMPORTING iv_html TYPE string IMPORTING iv_html TYPE string
RETURNING VALUE(rv_url) TYPE w3url. RETURNING value(rv_url) TYPE w3url.
METHODS render METHODS render
RAISING lcx_exception. RAISING lcx_exception.
METHODS get_current_page_name
RETURNING value(rv_page_name) TYPE string.
METHODS call_page METHODS call_page
IMPORTING ii_page TYPE REF TO lif_gui_page IMPORTING ii_page TYPE REF TO lif_gui_page
iv_with_bookmark TYPE abap_bool DEFAULT abap_false iv_with_bookmark TYPE abap_bool DEFAULT abap_false
iv_replacing TYPE abap_bool DEFAULT abap_false
RAISING lcx_exception. RAISING lcx_exception.
ENDCLASS. "lcl_gui DEFINITION ENDCLASS. "lcl_gui DEFINITION
@ -78,23 +82,25 @@ CLASS lcl_gui IMPLEMENTATION.
IF mi_cur_page IS BOUND. IF mi_cur_page IS BOUND.
mi_cur_page->on_event( mi_cur_page->on_event(
EXPORTING EXPORTING
iv_action = action iv_action = action
iv_getdata = getdata iv_prev_page = get_current_page_name( )
it_postdata = postdata iv_getdata = getdata
it_postdata = postdata
IMPORTING IMPORTING
ei_page = li_page ei_page = li_page
ev_state = lv_state ). ev_state = lv_state ).
ENDIF. ENDIF.
IF lv_state IS INITIAL. IF lv_state IS INITIAL.
mo_router->on_event( mo_router->on_event(
EXPORTING EXPORTING
iv_action = action iv_action = action
iv_getdata = getdata iv_prev_page = get_current_page_name( )
it_postdata = postdata iv_getdata = getdata
it_postdata = postdata
IMPORTING IMPORTING
ei_page = li_page ei_page = li_page
ev_state = lv_state ). ev_state = lv_state ).
ENDIF. ENDIF.
CASE lv_state. CASE lv_state.
@ -104,6 +110,8 @@ CLASS lcl_gui IMPLEMENTATION.
call_page( li_page ). call_page( li_page ).
WHEN gc_event_state-new_page_w_bookmark. WHEN gc_event_state-new_page_w_bookmark.
call_page( ii_page = li_page iv_with_bookmark = abap_true ). 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. WHEN gc_event_state-go_back.
back( ). back( ).
WHEN gc_event_state-go_back_to_bookmark. WHEN gc_event_state-go_back_to_bookmark.
@ -158,7 +166,7 @@ CLASS lcl_gui IMPLEMENTATION.
ls_stack TYPE ty_page_stack. ls_stack TYPE ty_page_stack.
FIELD-SYMBOLS <ls_asset> LIKE LINE OF lt_assets. FIELD-SYMBOLS <ls_asset> 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-page = mi_cur_page.
ls_stack-bookmark = iv_with_bookmark. ls_stack-bookmark = iv_with_bookmark.
APPEND ls_stack TO mt_stack. APPEND ls_stack TO mt_stack.
@ -270,4 +278,14 @@ CLASS lcl_gui IMPLEMENTATION.
ENDMETHOD. "cache_image 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 ENDCLASS. "lcl_gui IMPLEMENTATION

View File

@ -9,11 +9,12 @@ CLASS lcl_gui_router DEFINITION FINAL.
PUBLIC SECTION. PUBLIC SECTION.
METHODS on_event METHODS on_event
IMPORTING iv_action TYPE clike IMPORTING iv_action TYPE clike
iv_getdata TYPE clike OPTIONAL iv_prev_page TYPE clike
it_postdata TYPE cnht_post_data_tab OPTIONAL iv_getdata TYPE clike OPTIONAL
EXPORTING ei_page TYPE REF TO lif_gui_page it_postdata TYPE cnht_post_data_tab OPTIONAL
ev_state TYPE i EXPORTING ei_page TYPE REF TO lif_gui_page
ev_state TYPE i
RAISING lcx_exception. RAISING lcx_exception.
PRIVATE SECTION. PRIVATE SECTION.
@ -126,7 +127,11 @@ CLASS lcl_gui_router IMPLEMENTATION.
" DB actions " DB actions
WHEN 'db_display' OR 'db_edit'. WHEN 'db_display' OR 'db_edit'.
ei_page = get_page_db_by_name( iv_name = iv_action iv_getdata = iv_getdata ). 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'. WHEN 'db_delete'.
db_delete( iv_getdata = iv_getdata ). db_delete( iv_getdata = iv_getdata ).
ev_state = gc_event_state-re_render. ev_state = gc_event_state-re_render.

View File

@ -8,11 +8,12 @@
INTERFACE lif_gui_page. INTERFACE lif_gui_page.
METHODS on_event METHODS on_event
IMPORTING iv_action TYPE clike IMPORTING iv_action TYPE clike
iv_getdata TYPE clike OPTIONAL iv_prev_page TYPE clike
it_postdata TYPE cnht_post_data_tab OPTIONAL iv_getdata TYPE clike OPTIONAL
EXPORTING ei_page TYPE REF TO lif_gui_page it_postdata TYPE cnht_post_data_tab OPTIONAL
ev_state TYPE i EXPORTING ei_page TYPE REF TO lif_gui_page
ev_state TYPE i
RAISING lcx_exception. RAISING lcx_exception.
METHODS render METHODS render

View File

@ -2,17 +2,6 @@
*& Include ZABAPGIT_PAGE_DB *& 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. CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PUBLIC SECTION. PUBLIC SECTION.
@ -38,7 +27,9 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
METHOD lif_gui_page~render. 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. TRY.
lv_data = lcl_app=>db( )->read( lv_data = lcl_app=>db( )->read(
@ -47,20 +38,30 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
CATCH lcx_not_found ##NO_HANDLER. CATCH lcx_not_found ##NO_HANDLER.
ENDTRY. 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 lv_data = lcl_xml_pretty=>print( lv_data ).
format = cl_abap_format=>e_html_attr ). lv_data = escape( val = lv_data
format = cl_abap_format=>e_html_attr ).
CREATE OBJECT ro_html. CREATE OBJECT ro_html.
ro_html->add( header( io_include_style = styles( ) ) ). ro_html->add( header( io_include_style = styles( ) ) ).
ro_html->add( title( 'CONFIG DISPLAY' ) ). ro_html->add( title( 'CONFIG DISPLAY' ) ).
ro_html->add( '<div class="db_entry">' ). ro_html->add( '<div class="db_entry">' ).
ro_html->add( '<table class="toolbar"><tr><td>' ).
ro_html->add( |<table class="tag"><tr><td class="label">Type:</td>| && ro_html->add( |<table class="tag"><tr><td class="label">Type:</td>| &&
| <td>{ ms_key-type }</td></tr></table>| ). | <td>{ ms_key-type }</td></tr></table>| ).
ro_html->add( |<table class="tag"><tr><td class="label">Value:</td>| && ro_html->add( |<table class="tag"><tr><td class="label">Key:</td>| &&
| <td>{ ms_key-value }</td></tr></table>| ). | <td>{ ms_key-value }</td></tr></table>| ).
ro_html->add( '</td><td class="right">' ).
ro_html->add_anchor( iv_txt = 'Edit' iv_act = |db_edit?{ lv_action }| ).
ro_html->add( '</td></tr></table>' ).
ro_html->add( |<pre>{ lv_data }</pre>| ). ro_html->add( |<pre>{ lv_data }</pre>| ).
ro_html->add( '</div>' ). ro_html->add( '</div>' ).
@ -85,6 +86,11 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
_add ' white-space: pre-wrap;'. _add ' white-space: pre-wrap;'.
_add ' background-color: #eaeaea;'. _add ' background-color: #eaeaea;'.
_add ' padding: 0.5em;'. _add ' padding: 0.5em;'.
_add ' margin: 0.5em 0em;'.
_add ' width: 50em;'.
_add '}'.
_add 'div.db_entry table.toolbar {'.
_add ' width: 50em;'. _add ' width: 50em;'.
_add '}'. _add '}'.
@ -92,6 +98,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
_add ' display: inline-block;'. _add ' display: inline-block;'.
_add ' border: 1px #b3c1cc solid;'. _add ' border: 1px #b3c1cc solid;'.
_add ' background-color: #eee;'. _add ' background-color: #eee;'.
_add ' border-radius: 3px;'.
_add ' margin-right: 0.5em; '. _add ' margin-right: 0.5em; '.
_add '}'. _add '}'.
_add 'table.tag td { padding: 0.2em 0.5em; }'. _add 'table.tag td { padding: 0.2em 0.5em; }'.
@ -159,7 +166,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
" Banners " Banners
ro_html->add( |<table class="tag"><tr><td class="label">Type:</td>| && ro_html->add( |<table class="tag"><tr><td class="label">Type:</td>| &&
| <td>{ ms_key-type }</td></tr></table>| ). | <td>{ ms_key-type }</td></tr></table>| ).
ro_html->add( |<table class="tag"><tr><td class="label">Value:</td>| && ro_html->add( |<table class="tag"><tr><td class="label">Key:</td>| &&
| <td>{ ms_key-value }</td></tr></table>| ). | <td>{ ms_key-value }</td></tr></table>| ).
" Form " Form
@ -200,6 +207,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
_add ' display: inline-block;'. _add ' display: inline-block;'.
_add ' border: 1px #b3c1cc solid;'. _add ' border: 1px #b3c1cc solid;'.
_add ' background-color: #eee;'. _add ' background-color: #eee;'.
_add ' border-radius: 3px;'.
_add ' margin-right: 0.5em; '. _add ' margin-right: 0.5em; '.
_add '}'. _add '}'.
_add 'table.tag td { padding: 0.2em 0.5em; }'. _add 'table.tag td { padding: 0.2em 0.5em; }'.
@ -219,12 +227,26 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
ENDCLASS. 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. CLASS lcl_gui_page_db IMPLEMENTATION.
METHOD lif_gui_page~render. METHOD lif_gui_page~render.
DATA: lt_data TYPE lcl_persistence_db=>tt_content, DATA: lt_data TYPE lcl_persistence_db=>tt_content,
lv_escaped TYPE string,
lv_action TYPE string, lv_action TYPE string,
lv_trclass TYPE string, lv_trclass TYPE string,
lo_toolbar TYPE REF TO lcl_html_toolbar. 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( title( 'DATABASE PERSISTENCY' ) ).
ro_html->add( '<div class="db_list">' ). ro_html->add( '<div class="db_list">' ).
ro_html->add( '<table width="100%" class="db_tab">' ). ro_html->add( '<table class="db_tab">' ).
" Header " Header
ro_html->add( '<tr>' ). ro_html->add( '<tr>' ).
ro_html->add( '<th>Type</th>' ). ro_html->add( '<th>Type</th>' ).
ro_html->add( '<th>Value</th>' ). ro_html->add( '<th>Key</th>' ).
ro_html->add( '<th>Data</th>' ). ro_html->add( '<th>Data</th>' ).
ro_html->add( '<th></th>' ). ro_html->add( '<th></th>' ).
ro_html->add( '</tr>' ). ro_html->add( '</tr>' ).
@ -257,15 +279,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
lv_trclass = ' class="firstrow"' ##NO_TEXT. lv_trclass = ' class="firstrow"' ##NO_TEXT.
ENDIF. ENDIF.
IF strlen( <ls_data>-data_str ) >= 250. lv_action = lcl_html_action_utils=>dbkey_encode( <ls_data> ).
lv_escaped = escape( val = <ls_data>-data_str(250)
format = cl_abap_format=>e_html_attr ).
ELSE.
lv_escaped = escape( val = <ls_data>-data_str
format = cl_abap_format=>e_html_attr ).
ENDIF.
lv_action = lcl_html_action_utils=>dbkey_encode( <ls_data> ).
CREATE OBJECT lo_toolbar. CREATE OBJECT lo_toolbar.
lo_toolbar->add( iv_txt = 'Display' iv_act = |db_display?{ lv_action }| ). 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( |<tr{ lv_trclass }>| ). ro_html->add( |<tr{ lv_trclass }>| ).
ro_html->add( |<td>{ <ls_data>-type }</td>| ). ro_html->add( |<td>{ <ls_data>-type }</td>| ).
ro_html->add( |<td>{ <ls_data>-value }</td>| ). ro_html->add( |<td>{ <ls_data>-value }</td>| ).
ro_html->add( |<td><pre>{ lv_escaped }</pre></td>| ). ro_html->add( |<td class="data">{ explain_content( <ls_data> ) }</td>| ).
ro_html->add( '<td>' ). ro_html->add( '<td>' ).
ro_html->add( lo_toolbar->render( iv_vertical = abap_true ) ). ro_html->add( lo_toolbar->render( iv_vertical = abap_false ) ).
ro_html->add( '</td>' ). ro_html->add( '</td>' ).
ro_html->add( '</tr>' ). ro_html->add( '</tr>' ).
ENDLOOP. ENDLOOP.
@ -289,6 +303,52 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
ENDMETHOD. "lif_gui_page~render 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 '<url>(.*)</url>'
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 '<OFFLINE/>'
IN is_data-data_str IGNORING CASE MATCH COUNT lv_cnt.
IF lv_cnt > 0.
rv_text = |<b>On-line</b>, Name: <b>{ lcl_url=>name( rv_text ) }</b>|.
ELSE.
rv_text = |Off-line, Name: <b>{ rv_text }</b>|.
ENDIF.
WHEN 'BACKGROUND'.
FIND FIRST OCCURRENCE OF REGEX '<method>(.*)</method>'
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 = |<pre>{ rv_text }</pre>|.
ENDCASE.
ENDMETHOD. "explain_content
METHOD styles. METHOD styles.
CREATE OBJECT ro_html. CREATE OBJECT ro_html.
@ -299,26 +359,29 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
_add ' padding: 0.5em;'. _add ' padding: 0.5em;'.
_add '}'. _add '}'.
_add 'table.db_tab pre {'. _add 'table.db_tab pre {'.
_add ' display: block;'. _add ' display: inline-block;'.
_add ' overflow: hidden;'. _add ' overflow: hidden;'.
_add ' word-wrap:break-word;'. _add ' word-wrap:break-word;'.
_add ' white-space: pre-wrap;'. _add ' white-space: pre-wrap;'.
_add ' background-color: #eaeaea;'. _add ' margin: 0px;'.
_add ' padding: 3px;'. _add ' width: 30em;'.
_add ' width: 50em;'.
_add '}'. _add '}'.
_add 'table.db_tab tr.firstrow td { padding-top: 0.5em; }'. _add 'table.db_tab tr.firstrow td { padding-top: 0.5em; }'.
_add 'table.db_tab th {'. _add 'table.db_tab th {'.
_add ' text-align: left;'. _add ' text-align: left;'.
_add ' color: #888;'. _add ' color: #888;'.
_add ' padding: 0.2em;'. _add ' padding: 0.5em;'.
_add ' border-bottom: 1px #ddd solid;'. _add ' border-bottom: 1px #ddd solid;'.
_add '}'. _add '}'.
_add 'table.db_tab td {'. _add 'table.db_tab td {'.
_add ' color: #333;'. _add ' color: #333;'.
_add ' padding: 0.2em;'. _add ' padding: 0.5em;'.
_add ' vertical-align: top;'. _add ' vertical-align: top;'.
_add '}'. _add '}'.
_add 'table.db_tab td.data {'.
_add ' color: #888;'.
_add ' font-style: italic;'.
_add '}'.
ENDMETHOD. "styles ENDMETHOD. "styles