mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-03 05:18:59 +08:00
Merge pull request #351 from sbcgua/master
UI: Main page, hide file list, adjust diff #347
This commit is contained in:
commit
2387508b41
|
@ -53,7 +53,7 @@ TYPES: BEGIN OF ty_repo_file,
|
||||||
path TYPE string,
|
path TYPE string,
|
||||||
filename TYPE string,
|
filename TYPE string,
|
||||||
is_changed TYPE abap_bool,
|
is_changed TYPE abap_bool,
|
||||||
remote_only TYPE abap_bool,
|
new TYPE char1,
|
||||||
END OF ty_repo_file.
|
END OF ty_repo_file.
|
||||||
TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY.
|
TYPES tt_repo_files TYPE STANDARD TABLE OF ty_repo_file WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
@ -95,12 +95,17 @@ TYPES: BEGIN OF ty_result,
|
||||||
filename TYPE string,
|
filename TYPE string,
|
||||||
package TYPE devclass,
|
package TYPE devclass,
|
||||||
path TYPE string,
|
path TYPE string,
|
||||||
remote_only TYPE abap_bool,
|
new TYPE char1,
|
||||||
END OF ty_result.
|
END OF ty_result.
|
||||||
TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
|
TYPES: ty_results_tt TYPE STANDARD TABLE OF ty_result WITH DEFAULT KEY.
|
||||||
|
|
||||||
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
|
TYPES: ty_sval_tt TYPE STANDARD TABLE OF sval WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
CONSTANTS: BEGIN OF gc_new,
|
||||||
|
local TYPE char1 VALUE 'L',
|
||||||
|
remote TYPE char1 VALUE 'R',
|
||||||
|
END OF gc_new.
|
||||||
|
|
||||||
CONSTANTS: BEGIN OF gc_chmod,
|
CONSTANTS: BEGIN OF gc_chmod,
|
||||||
file TYPE ty_chmod VALUE '100644',
|
file TYPE ty_chmod VALUE '100644',
|
||||||
executable TYPE ty_chmod VALUE '100755',
|
executable TYPE ty_chmod VALUE '100755',
|
||||||
|
|
|
@ -105,7 +105,7 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
IF lt_files[] IS INITIAL.
|
IF lt_files[] IS INITIAL.
|
||||||
* item does not exist locally
|
* item does not exist locally
|
||||||
ls_result-filename = <ls_remote>-filename.
|
ls_result-filename = <ls_remote>-filename.
|
||||||
ls_result-remote_only = abap_true.
|
ls_result-new = gc_new-remote.
|
||||||
APPEND ls_result TO rt_results.
|
APPEND ls_result TO rt_results.
|
||||||
CONTINUE. " current loop
|
CONTINUE. " current loop
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -162,6 +162,7 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
ls_result-match = abap_true.
|
ls_result-match = abap_true.
|
||||||
ls_result-obj_type = <ls_tadir>-object.
|
ls_result-obj_type = <ls_tadir>-object.
|
||||||
ls_result-obj_name = <ls_tadir>-obj_name.
|
ls_result-obj_name = <ls_tadir>-obj_name.
|
||||||
|
ls_result-new = gc_new-local.
|
||||||
APPEND ls_result TO rt_results.
|
APPEND ls_result TO rt_results.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
@ -171,6 +172,7 @@ CLASS lcl_file_status IMPLEMENTATION.
|
||||||
AND path IS INITIAL.
|
AND path IS INITIAL.
|
||||||
* new file added locally to existing object
|
* new file added locally to existing object
|
||||||
<ls_result>-path = io_repo->get_dot_abapgit( )->get_starting_folder( ) && <ls_tadir>-path.
|
<ls_result>-path = io_repo->get_dot_abapgit( )->get_starting_folder( ) && <ls_tadir>-path.
|
||||||
|
<ls_result>-new = gc_new-local.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
|
|
|
@ -8,10 +8,10 @@ INCLUDE zabapgit_html_action_utils.
|
||||||
INCLUDE zabapgit_page.
|
INCLUDE zabapgit_page.
|
||||||
INCLUDE zabapgit_page_commit.
|
INCLUDE zabapgit_page_commit.
|
||||||
INCLUDE zabapgit_page_merge.
|
INCLUDE zabapgit_page_merge.
|
||||||
INCLUDE zabapgit_page_branch_overview.
|
|
||||||
INCLUDE zabapgit_page_stage.
|
|
||||||
INCLUDE zabapgit_page_db.
|
|
||||||
INCLUDE zabapgit_page_main.
|
|
||||||
INCLUDE zabapgit_page_background.
|
INCLUDE zabapgit_page_background.
|
||||||
|
INCLUDE zabapgit_page_branch_overview.
|
||||||
|
INCLUDE zabapgit_page_db.
|
||||||
INCLUDE zabapgit_page_diff.
|
INCLUDE zabapgit_page_diff.
|
||||||
INCLUDE zabapgit_page_explore.
|
INCLUDE zabapgit_page_explore.
|
||||||
|
INCLUDE zabapgit_page_main.
|
||||||
|
INCLUDE zabapgit_page_stage.
|
|
@ -238,42 +238,22 @@ CLASS lcl_gui_router IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD get_page_diff.
|
METHOD get_page_diff.
|
||||||
|
|
||||||
DATA: lt_remote TYPE ty_files_tt,
|
DATA: ls_file TYPE ty_file,
|
||||||
lt_local TYPE ty_files_item_tt,
|
ls_object TYPE ty_item,
|
||||||
lo_page TYPE REF TO lcl_gui_page_diff,
|
lo_page TYPE REF TO lcl_gui_page_diff,
|
||||||
lo_repo TYPE REF TO lcl_repo_online,
|
|
||||||
ls_file TYPE ty_repo_file,
|
|
||||||
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
lv_key TYPE lcl_persistence_repo=>ty_repo-key.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF lt_remote,
|
|
||||||
<ls_local> LIKE LINE OF lt_local.
|
|
||||||
|
|
||||||
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
|
lcl_html_action_utils=>file_obj_decode( EXPORTING iv_string = iv_getdata
|
||||||
IMPORTING ev_key = lv_key
|
IMPORTING ev_key = lv_key
|
||||||
eg_file = ls_file ).
|
eg_file = ls_file
|
||||||
|
eg_object = ls_object ).
|
||||||
lo_repo ?= lcl_app=>repo_srv( )->get( lv_key ).
|
|
||||||
lt_remote = lo_repo->get_files_remote( ).
|
|
||||||
lt_local = lo_repo->get_files_local( ).
|
|
||||||
|
|
||||||
READ TABLE lt_remote ASSIGNING <ls_remote>
|
|
||||||
WITH KEY filename = ls_file-filename
|
|
||||||
path = ls_file-path.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'file not found remotely' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_local ASSIGNING <ls_local>
|
|
||||||
WITH KEY file-filename = ls_file-filename
|
|
||||||
file-path = ls_file-path.
|
|
||||||
IF sy-subrc <> 0.
|
|
||||||
lcx_exception=>raise( 'file not found locally' ).
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
CREATE OBJECT lo_page
|
CREATE OBJECT lo_page
|
||||||
EXPORTING
|
EXPORTING
|
||||||
is_local = <ls_local>-file
|
iv_key = lv_key
|
||||||
is_remote = <ls_remote>.
|
is_file = ls_file
|
||||||
|
is_object = ls_object.
|
||||||
|
|
||||||
ri_page = lo_page.
|
ri_page = lo_page.
|
||||||
|
|
||||||
|
|
|
@ -194,6 +194,7 @@ CLASS lcl_html_toolbar DEFINITION FINAL.
|
||||||
iv_no_separator TYPE abap_bool OPTIONAL
|
iv_no_separator TYPE abap_bool OPTIONAL
|
||||||
iv_vertical TYPE abap_bool OPTIONAL
|
iv_vertical TYPE abap_bool OPTIONAL
|
||||||
iv_sort TYPE abap_bool OPTIONAL
|
iv_sort TYPE abap_bool OPTIONAL
|
||||||
|
iv_as_angle TYPE abap_bool OPTIONAL
|
||||||
RETURNING
|
RETURNING
|
||||||
VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
|
||||||
|
@ -238,31 +239,39 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
METHOD render.
|
METHOD render.
|
||||||
|
|
||||||
DATA: lv_class TYPE string,
|
DATA: lv_class TYPE string,
|
||||||
|
lv_is_drop TYPE abap_bool,
|
||||||
lv_last TYPE abap_bool.
|
lv_last TYPE abap_bool.
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
|
FIELD-SYMBOLS <ls_item> LIKE LINE OF mt_items.
|
||||||
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
lv_is_drop = boolc( iv_as_droplist_with_label IS NOT INITIAL OR iv_as_angle IS NOT INITIAL ).
|
||||||
|
|
||||||
IF iv_as_droplist_with_label IS INITIAL.
|
IF lv_is_drop = abap_false. " Normal menu
|
||||||
IF iv_vertical = abap_true.
|
IF iv_vertical = abap_true.
|
||||||
lv_class = 'menu_vertical' ##NO_TEXT.
|
lv_class = 'menu_vertical' ##NO_TEXT.
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_class = 'menu' ##NO_TEXT.
|
lv_class = 'menu' ##NO_TEXT.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
ELSEIF iv_as_angle IS NOT INITIAL.
|
||||||
|
lv_class = 'dropdown dropdown_angle' ##NO_TEXT.
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_class = 'dropdown' ##NO_TEXT.
|
lv_class = 'dropdown' ##NO_TEXT.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ro_html->add( |<div class="{ lv_class }">| ).
|
ro_html->add( |<div class="{ lv_class }">| ).
|
||||||
|
|
||||||
IF iv_as_droplist_with_label IS NOT INITIAL.
|
IF lv_is_drop = abap_true. " Dropdown
|
||||||
|
IF iv_as_angle = abap_true.
|
||||||
|
ro_html->add( '<div class="dropbtn_angle"></div>' ).
|
||||||
|
ELSE.
|
||||||
lv_class = 'dropbtn'.
|
lv_class = 'dropbtn'.
|
||||||
IF iv_no_separator = abap_true.
|
IF iv_no_separator = abap_true.
|
||||||
lv_class = lv_class && ' menu_end' ##NO_TEXT.
|
lv_class = lv_class && ' menu_end' ##NO_TEXT.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
|
ro_html->add( |<a class="{ lv_class }">{ iv_as_droplist_with_label }</a>| ).
|
||||||
|
ENDIF.
|
||||||
ro_html->add( '<div class="dropdown_content">' ).
|
ro_html->add( '<div class="dropdown_content">' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
@ -293,7 +302,7 @@ CLASS lcl_html_toolbar IMPLEMENTATION.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
IF iv_as_droplist_with_label IS NOT INITIAL.
|
IF lv_is_drop = abap_true. " Dropdown
|
||||||
ro_html->add( '</div>' ).
|
ro_html->add( '</div>' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
|
@ -8,13 +8,18 @@
|
||||||
CLASS lcl_html_action_utils DEFINITION FINAL.
|
CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_commit_fields, "TODO refactor ! Move to normal place
|
CLASS-METHODS field_keys_to_upper
|
||||||
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
|
CHANGING ct_fields TYPE tihttpnvp.
|
||||||
username TYPE string,
|
|
||||||
email TYPE string,
|
CLASS-METHODS add_field
|
||||||
comment TYPE string,
|
IMPORTING name TYPE string
|
||||||
body TYPE string,
|
iv TYPE any
|
||||||
END OF ty_commit_fields.
|
CHANGING ct TYPE tihttpnvp.
|
||||||
|
|
||||||
|
CLASS-METHODS get_field
|
||||||
|
IMPORTING name TYPE string
|
||||||
|
it TYPE tihttpnvp
|
||||||
|
CHANGING cv TYPE any.
|
||||||
|
|
||||||
CLASS-METHODS jump_encode
|
CLASS-METHODS jump_encode
|
||||||
IMPORTING iv_obj_type TYPE tadir-object
|
IMPORTING iv_obj_type TYPE tadir-object
|
||||||
|
@ -29,13 +34,19 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||||
|
|
||||||
CLASS-METHODS file_encode
|
CLASS-METHODS file_encode
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
ig_file TYPE any "ty_repo_file
|
ig_file TYPE any "assuming ty_file
|
||||||
RETURNING VALUE(rv_string) TYPE string.
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
CLASS-METHODS file_decode
|
CLASS-METHODS obj_encode
|
||||||
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
ig_object TYPE any "assuming ty_item
|
||||||
|
RETURNING VALUE(rv_string) TYPE string.
|
||||||
|
|
||||||
|
CLASS-METHODS file_obj_decode
|
||||||
IMPORTING iv_string TYPE clike
|
IMPORTING iv_string TYPE clike
|
||||||
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
|
EXPORTING ev_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
eg_file TYPE any "ty_repo_file
|
eg_file TYPE any "assuming ty_file
|
||||||
|
eg_object TYPE any "assuming ty_item
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
CLASS-METHODS dbkey_encode
|
CLASS-METHODS dbkey_encode
|
||||||
|
@ -52,7 +63,7 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||||
|
|
||||||
CLASS-METHODS parse_commit_request
|
CLASS-METHODS parse_commit_request
|
||||||
IMPORTING it_postdata TYPE cnht_post_data_tab
|
IMPORTING it_postdata TYPE cnht_post_data_tab
|
||||||
RETURNING VALUE(rs_fields) TYPE ty_commit_fields.
|
EXPORTING es_fields TYPE any.
|
||||||
|
|
||||||
CLASS-METHODS repo_key_encode
|
CLASS-METHODS repo_key_encode
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
|
@ -62,8 +73,6 @@ CLASS lcl_html_action_utils DEFINITION FINAL.
|
||||||
IMPORTING iv_getdata TYPE clike
|
IMPORTING iv_getdata TYPE clike
|
||||||
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background.
|
RETURNING VALUE(rs_fields) TYPE lcl_persistence_background=>ty_background.
|
||||||
|
|
||||||
CLASS-METHODS field_keys_to_upper
|
|
||||||
CHANGING ct_fields TYPE tihttpnvp.
|
|
||||||
|
|
||||||
ENDCLASS. "lcl_html_action_utils DEFINITION
|
ENDCLASS. "lcl_html_action_utils DEFINITION
|
||||||
|
|
||||||
|
@ -72,19 +81,70 @@ ENDCLASS. "lcl_html_action_utils DEFINITION
|
||||||
*----------------------------------------------------------------------*
|
*----------------------------------------------------------------------*
|
||||||
CLASS lcl_html_action_utils IMPLEMENTATION.
|
CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD field_keys_to_upper.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <field> LIKE LINE OF ct_fields.
|
||||||
|
|
||||||
|
LOOP AT ct_fields ASSIGNING <field>.
|
||||||
|
<field>-name = to_upper( <field>-name ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "field_keys_to_upper
|
||||||
|
|
||||||
|
METHOD add_field.
|
||||||
|
|
||||||
|
DATA ls_field LIKE LINE OF ct.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <src> TYPE any.
|
||||||
|
|
||||||
|
ls_field-name = name.
|
||||||
|
|
||||||
|
CASE cl_abap_typedescr=>describe_by_data( iv )->kind.
|
||||||
|
WHEN cl_abap_typedescr=>kind_elem.
|
||||||
|
ls_field-value = iv.
|
||||||
|
WHEN cl_abap_typedescr=>kind_struct.
|
||||||
|
ASSIGN COMPONENT name OF STRUCTURE iv TO <src>.
|
||||||
|
ASSERT <src> IS ASSIGNED.
|
||||||
|
ls_field-value = <src>.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 2 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
APPEND ls_field TO ct.
|
||||||
|
|
||||||
|
ENDMETHOD. "add_field
|
||||||
|
|
||||||
|
METHOD get_field.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <ls_field> LIKE LINE OF it.
|
||||||
|
FIELD-SYMBOLS <dest> TYPE any.
|
||||||
|
|
||||||
|
|
||||||
|
READ TABLE it ASSIGNING <ls_field> WITH KEY name = name.
|
||||||
|
IF sy-subrc IS NOT INITIAL.
|
||||||
|
RETURN.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CASE cl_abap_typedescr=>describe_by_data( cv )->kind.
|
||||||
|
WHEN cl_abap_typedescr=>kind_elem.
|
||||||
|
cv = <ls_field>-value.
|
||||||
|
WHEN cl_abap_typedescr=>kind_struct.
|
||||||
|
ASSIGN COMPONENT name OF STRUCTURE cv TO <dest>.
|
||||||
|
ASSERT <dest> IS ASSIGNED.
|
||||||
|
<dest> = <ls_field>-value.
|
||||||
|
WHEN OTHERS.
|
||||||
|
ASSERT 2 = 1.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
|
ENDMETHOD. "get_field
|
||||||
|
|
||||||
METHOD jump_encode.
|
METHOD jump_encode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
ls_field-name = 'TYPE'.
|
add_field( EXPORTING name = 'TYPE' iv = iv_obj_type CHANGING ct = lt_fields ).
|
||||||
ls_field-value = iv_obj_type.
|
add_field( EXPORTING name = 'NAME' iv = iv_obj_name CHANGING ct = lt_fields ).
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'NAME'.
|
|
||||||
ls_field-value = iv_obj_name.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
@ -92,103 +152,71 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD jump_decode.
|
METHOD jump_decode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
|
|
||||||
lv_string = iv_string. " type conversion
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = ev_obj_type ).
|
||||||
IF sy-subrc = 0.
|
get_field( EXPORTING name = 'NAME' it = lt_fields CHANGING cv = ev_obj_name ).
|
||||||
ev_obj_type = <ls_field>-value.
|
|
||||||
ELSE.
|
|
||||||
CLEAR ev_obj_type.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'NAME'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ev_obj_name = <ls_field>-value.
|
|
||||||
ELSE.
|
|
||||||
CLEAR ev_obj_name.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "jump_decode
|
ENDMETHOD. "jump_decode
|
||||||
|
|
||||||
METHOD file_encode.
|
METHOD file_encode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <lv_field> TYPE string.
|
|
||||||
|
|
||||||
ls_field-name = 'KEY'.
|
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
|
||||||
ls_field-value = iv_key.
|
add_field( EXPORTING name = 'PATH' iv = ig_file CHANGING ct = lt_fields ).
|
||||||
APPEND ls_field TO lt_fields.
|
add_field( EXPORTING name = 'FILENAME' iv = ig_file CHANGING ct = lt_fields ).
|
||||||
|
|
||||||
ls_field-name = 'PATH'.
|
|
||||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
ls_field-value = <lv_field>.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'FILENAME'.
|
|
||||||
ASSIGN COMPONENT ls_field-name OF STRUCTURE ig_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
ls_field-value = <lv_field>.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
ENDMETHOD. "file_encode
|
ENDMETHOD. "file_encode
|
||||||
|
|
||||||
METHOD file_decode.
|
METHOD obj_encode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields,
|
|
||||||
<lv_field> TYPE string.
|
|
||||||
|
|
||||||
CLEAR: ev_key, eg_file.
|
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
|
||||||
lv_string = iv_string. " type conversion
|
add_field( EXPORTING name = 'OBJ_TYPE' iv = ig_object CHANGING ct = lt_fields ).
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
add_field( EXPORTING name = 'OBJ_NAME' iv = ig_object CHANGING ct = lt_fields ).
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'KEY'.
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
IF sy-subrc = 0.
|
|
||||||
ev_key = <ls_field>-value.
|
ENDMETHOD. "obj_encode
|
||||||
|
|
||||||
|
METHOD file_obj_decode.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
|
|
||||||
|
ASSERT eg_file IS SUPPLIED OR eg_object IS SUPPLIED.
|
||||||
|
|
||||||
|
CLEAR: ev_key, eg_file, eg_object.
|
||||||
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||||
|
|
||||||
|
get_field( EXPORTING name = 'KEY' it = lt_fields CHANGING cv = ev_key ).
|
||||||
|
|
||||||
|
IF eg_file IS SUPPLIED.
|
||||||
|
get_field( EXPORTING name = 'PATH' it = lt_fields CHANGING cv = eg_file ).
|
||||||
|
get_field( EXPORTING name = 'FILENAME' it = lt_fields CHANGING cv = eg_file ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'PATH'.
|
IF eg_object IS SUPPLIED.
|
||||||
IF sy-subrc = 0.
|
get_field( EXPORTING name = 'OBJ_TYPE' it = lt_fields CHANGING cv = eg_object ).
|
||||||
ASSIGN COMPONENT 'PATH' OF STRUCTURE eg_file TO <lv_field>.
|
get_field( EXPORTING name = 'OBJ_NAME' it = lt_fields CHANGING cv = eg_object ).
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
<lv_field> = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'FILENAME'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
ASSIGN COMPONENT 'FILENAME' OF STRUCTURE eg_file TO <lv_field>.
|
|
||||||
ASSERT <lv_field> IS ASSIGNED.
|
|
||||||
<lv_field> = <ls_field>-value.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "file_decode
|
ENDMETHOD. "file_decode
|
||||||
|
|
||||||
METHOD dbkey_encode.
|
METHOD dbkey_encode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
ls_field LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'TYPE'.
|
add_field( EXPORTING name = 'TYPE' iv = is_key-type CHANGING ct = lt_fields ).
|
||||||
ls_field-value = is_key-type.
|
add_field( EXPORTING name = 'VALUE' iv = is_key-value CHANGING ct = lt_fields ).
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
ls_field-name = 'VALUE'.
|
|
||||||
ls_field-value = is_key-value.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
|
@ -196,24 +224,13 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD dbkey_decode.
|
METHOD dbkey_decode.
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
lv_string TYPE string.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_string }| ).
|
||||||
|
|
||||||
lv_string = iv_string. " type conversion
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
|
||||||
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'TYPE'.
|
get_field( EXPORTING name = 'TYPE' it = lt_fields CHANGING cv = rs_key-type ).
|
||||||
IF sy-subrc = 0.
|
get_field( EXPORTING name = 'VALUE' it = lt_fields CHANGING cv = rs_key-value ).
|
||||||
rs_key-type = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'VALUE'.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
rs_key-value = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. "dbkey_decode
|
ENDMETHOD. "dbkey_decode
|
||||||
|
|
||||||
|
@ -230,9 +247,11 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'XMLDATA' ##NO_TEXT.
|
get_field( EXPORTING name = 'XMLDATA' it = lt_fields CHANGING cv = rs_content-data_str ).
|
||||||
IF sy-subrc = 0 AND <ls_field>-value(1) <> '<'.
|
IF rs_content-data_str(1) <> '<' AND rs_content-data_str+1(1) = '<'. " Hmmm ???
|
||||||
rs_content-data_str = <ls_field>-value+1. " hmm
|
rs_content-data_str = rs_content-data_str+1.
|
||||||
|
ELSE.
|
||||||
|
CLEAR rs_content-data_str.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD. "dbcontent_decode
|
ENDMETHOD. "dbcontent_decode
|
||||||
|
@ -244,35 +263,26 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
DATA: lv_string TYPE string,
|
DATA: lv_string TYPE string,
|
||||||
lt_fields TYPE tihttpnvp.
|
lt_fields TYPE tihttpnvp.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
FIELD-SYMBOLS <body> TYPE string.
|
||||||
|
|
||||||
|
CLEAR es_fields.
|
||||||
|
|
||||||
CONCATENATE LINES OF it_postdata INTO lv_string.
|
CONCATENATE LINES OF it_postdata INTO lv_string.
|
||||||
|
|
||||||
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
|
REPLACE ALL OCCURRENCES OF gc_newline IN lv_string WITH lc_replace.
|
||||||
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( lv_string ).
|
||||||
|
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'key' ##NO_TEXT.
|
get_field( EXPORTING name = 'REPO_KEY' it = lt_fields CHANGING cv = es_fields ).
|
||||||
ASSERT sy-subrc = 0.
|
get_field( EXPORTING name = 'USERNAME' it = lt_fields CHANGING cv = es_fields ).
|
||||||
rs_fields-repo_key = <ls_field>-value.
|
get_field( EXPORTING name = 'EMAIL' it = lt_fields CHANGING cv = es_fields ).
|
||||||
|
get_field( EXPORTING name = 'COMMENT' it = lt_fields CHANGING cv = es_fields ).
|
||||||
|
get_field( EXPORTING name = 'BODY' it = lt_fields CHANGING cv = es_fields ).
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'username' ##NO_TEXT.
|
ASSIGN COMPONENT 'BODY' OF STRUCTURE es_fields TO <body>.
|
||||||
ASSERT sy-subrc = 0.
|
ASSERT <body> IS ASSIGNED.
|
||||||
rs_fields-username = <ls_field>-value.
|
REPLACE ALL OCCURRENCES OF lc_replace IN <body> WITH gc_newline.
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'email' ##NO_TEXT.
|
ASSERT es_fields IS NOT INITIAL.
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-email = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'comment' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-comment = <ls_field>-value.
|
|
||||||
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = 'body' ##NO_TEXT.
|
|
||||||
ASSERT sy-subrc = 0.
|
|
||||||
rs_fields-body = <ls_field>-value.
|
|
||||||
REPLACE ALL OCCURRENCES OF lc_replace IN rs_fields-body WITH gc_newline.
|
|
||||||
|
|
||||||
ENDMETHOD. "parse_commit_request
|
ENDMETHOD. "parse_commit_request
|
||||||
|
|
||||||
|
@ -281,46 +291,26 @@ CLASS lcl_html_action_utils IMPLEMENTATION.
|
||||||
DATA: lt_fields TYPE tihttpnvp,
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
ls_field LIKE LINE OF lt_fields.
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
ls_field-name = 'KEY'.
|
add_field( EXPORTING name = 'KEY' iv = iv_key CHANGING ct = lt_fields ).
|
||||||
ls_field-value = iv_key.
|
|
||||||
APPEND ls_field TO lt_fields.
|
|
||||||
|
|
||||||
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
rv_string = cl_http_utility=>if_http_utility~fields_to_string( lt_fields ).
|
||||||
|
|
||||||
ENDMETHOD. "repo_key_encode
|
ENDMETHOD. "repo_key_encode
|
||||||
|
|
||||||
METHOD field_keys_to_upper.
|
|
||||||
|
|
||||||
FIELD-SYMBOLS <field> LIKE LINE OF ct_fields.
|
|
||||||
|
|
||||||
LOOP AT ct_fields ASSIGNING <field>.
|
|
||||||
<field>-name = to_upper( <field>-name ).
|
|
||||||
ENDLOOP.
|
|
||||||
|
|
||||||
ENDMETHOD. "field_keys_to_upper
|
|
||||||
|
|
||||||
METHOD decode_bg_update.
|
METHOD decode_bg_update.
|
||||||
|
|
||||||
DEFINE _field. " TODO refactor and use globally in html actions
|
|
||||||
READ TABLE lt_fields ASSIGNING <ls_field> WITH KEY name = &1 ##NO_TEXT.
|
|
||||||
IF sy-subrc = 0.
|
|
||||||
rs_fields-&2 = <ls_field>-value.
|
|
||||||
ENDIF.
|
|
||||||
END-OF-DEFINITION.
|
|
||||||
|
|
||||||
DATA: lt_fields TYPE tihttpnvp.
|
DATA: lt_fields TYPE tihttpnvp.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
|
||||||
|
|
||||||
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_getdata }| ).
|
lt_fields = cl_http_utility=>if_http_utility~string_to_fields( |{ iv_getdata }| ).
|
||||||
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
field_keys_to_upper( CHANGING ct_fields = lt_fields ).
|
||||||
|
|
||||||
_field 'METHOD' method.
|
get_field( EXPORTING name = 'METHOD' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
_field 'USERNAME' username.
|
get_field( EXPORTING name = 'USERNAME' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
_field 'PASSWORD' password.
|
get_field( EXPORTING name = 'PASSWORD' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
_field 'AMETHOD' amethod.
|
get_field( EXPORTING name = 'AMETHOD' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
_field 'ANAME' aname.
|
get_field( EXPORTING name = 'ANAME' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
_field 'AMAIL' amail.
|
get_field( EXPORTING name = 'AMAIL' it = lt_fields CHANGING cv = rs_fields ).
|
||||||
|
|
||||||
ASSERT NOT rs_fields IS INITIAL.
|
ASSERT NOT rs_fields IS INITIAL.
|
||||||
|
|
||||||
|
|
|
@ -341,12 +341,25 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||||
_add ' position: relative;'.
|
_add ' position: relative;'.
|
||||||
_add ' display: inline;'.
|
_add ' display: inline;'.
|
||||||
_add '}'.
|
_add '}'.
|
||||||
|
_add '.dropdown_angle {'.
|
||||||
|
_add ' position: absolute !important;'.
|
||||||
|
_add ' right: -2px;'.
|
||||||
|
_add '}'.
|
||||||
|
_add '.dropbtn_angle {'.
|
||||||
|
_add ' width: 0;'.
|
||||||
|
_add ' height: 0;'.
|
||||||
|
_add ' border-left: 5px solid transparent;'.
|
||||||
|
_add ' border-right: 5px solid transparent;'.
|
||||||
|
_add ' border-bottom: 5px solid #4078c0;'.
|
||||||
|
_add ' transform: rotate(45deg);'.
|
||||||
|
_add ' -ms-transform: rotate(45deg);'.
|
||||||
|
_add '}'.
|
||||||
_add '.dropdown_content {'.
|
_add '.dropdown_content {'.
|
||||||
_add ' display: none;'.
|
_add ' display: none;'.
|
||||||
_add ' z-index: 1;'.
|
_add ' z-index: 1;'.
|
||||||
_add ' position: absolute;'.
|
_add ' position: absolute;'.
|
||||||
_add ' right: 0;'.
|
_add ' right: 0;'.
|
||||||
_add ' top: 1.1em; /*IE7 woraround*/'.
|
* _add ' top: 1.1em; /*IE7 woraround*/'.
|
||||||
_add ' background-color: #f9f9f9;'.
|
_add ' background-color: #f9f9f9;'.
|
||||||
_add ' white-space: nowrap;'.
|
_add ' white-space: nowrap;'.
|
||||||
* _add ' min-width: 10em;'.
|
* _add ' min-width: 10em;'.
|
||||||
|
|
|
@ -5,6 +5,15 @@
|
||||||
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
TYPES: BEGIN OF ty_commit_fields,
|
||||||
|
repo_key TYPE lcl_persistence_repo=>ty_repo-key,
|
||||||
|
username TYPE string,
|
||||||
|
email TYPE string,
|
||||||
|
comment TYPE string,
|
||||||
|
body TYPE string,
|
||||||
|
END OF ty_commit_fields.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
constructor
|
constructor
|
||||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||||
|
@ -104,7 +113,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
|
||||||
|
|
||||||
ro_html->add( '<div class="form_div">' ).
|
ro_html->add( '<div class="form_div">' ).
|
||||||
ro_html->add( '<form id="commit_form" method="post" action="sapevent:commit_post">' ).
|
ro_html->add( '<form id="commit_form" method="post" action="sapevent:commit_post">' ).
|
||||||
ro_html->add( |<input name="key" type="hidden" value="{ lv_key }">| ).
|
ro_html->add( |<input name="repo_key" type="hidden" value="{ lv_key }">| ).
|
||||||
ro_html->add( '<table>' ).
|
ro_html->add( '<table>' ).
|
||||||
|
|
||||||
ro_html->add( '<tr>' ).
|
ro_html->add( '<tr>' ).
|
||||||
|
@ -245,12 +254,13 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD commit_push.
|
METHOD commit_push.
|
||||||
|
|
||||||
DATA: ls_fields TYPE lcl_html_action_utils=>ty_commit_fields,
|
DATA: ls_fields TYPE ty_commit_fields,
|
||||||
ls_comment TYPE ty_comment,
|
ls_comment TYPE ty_comment,
|
||||||
lo_user TYPE REF TO lcl_persistence_user.
|
lo_user TYPE REF TO lcl_persistence_user.
|
||||||
|
|
||||||
|
|
||||||
ls_fields = lcl_html_action_utils=>parse_commit_request( it_postdata ).
|
lcl_html_action_utils=>parse_commit_request( EXPORTING it_postdata = it_postdata
|
||||||
|
IMPORTING es_fields = ls_fields ).
|
||||||
|
|
||||||
lo_user = lcl_app=>user( ).
|
lo_user = lcl_app=>user( ).
|
||||||
lo_user->set_repo_username( iv_url = mo_repo->get_url( ) iv_username = ls_fields-username ).
|
lo_user->set_repo_username( iv_url = mo_repo->get_url( ) iv_username = ls_fields-username ).
|
||||||
|
|
|
@ -5,38 +5,133 @@
|
||||||
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
|
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
TYPES: begin of ty_file_diff,
|
||||||
|
filename TYPE string,
|
||||||
|
o_diff TYPE REF TO lcl_diff,
|
||||||
|
end of ty_file_diff,
|
||||||
|
tt_file_diff TYPE STANDARD TABLE OF ty_file_diff.
|
||||||
|
|
||||||
METHODS: constructor
|
METHODS: constructor
|
||||||
IMPORTING
|
IMPORTING
|
||||||
is_local TYPE ty_file
|
iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
is_remote TYPE ty_file.
|
is_file TYPE ty_file OPTIONAL
|
||||||
|
is_object TYPE ty_item OPTIONAL
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
METHODS lif_gui_page~render REDEFINITION.
|
METHODS lif_gui_page~render REDEFINITION.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
DATA: mv_filename TYPE string,
|
DATA: mt_diff_files TYPE tt_file_diff.
|
||||||
mo_diff TYPE REF TO lcl_diff.
|
|
||||||
|
|
||||||
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
METHODS render_head RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
METHODS render_diff
|
||||||
METHODS render_diff RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
IMPORTING is_diff TYPE ty_file_diff
|
||||||
METHODS render_lines RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS render_head
|
||||||
|
IMPORTING is_diff TYPE ty_file_diff
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS render_lines
|
||||||
|
IMPORTING is_diff TYPE ty_file_diff
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||||
|
METHODS append_diff
|
||||||
|
IMPORTING it_remote TYPE ty_files_tt
|
||||||
|
it_local TYPE ty_files_item_tt
|
||||||
|
iv_path TYPE string
|
||||||
|
iv_filename TYPE string
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_page_diff
|
ENDCLASS. "lcl_gui_page_diff
|
||||||
|
|
||||||
CLASS lcl_gui_page_diff IMPLEMENTATION.
|
CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD constructor.
|
METHOD constructor.
|
||||||
|
|
||||||
|
DATA: lt_remote TYPE ty_files_tt,
|
||||||
|
lt_local TYPE ty_files_item_tt,
|
||||||
|
lt_results TYPE ty_results_tt,
|
||||||
|
lo_repo TYPE REF TO lcl_repo_online.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_result> LIKE LINE OF lt_results.
|
||||||
|
|
||||||
super->constructor( ).
|
super->constructor( ).
|
||||||
|
|
||||||
mv_filename = is_local-filename.
|
ASSERT is_file IS SUPPLIED OR is_object IS SUPPLIED.
|
||||||
|
ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed
|
||||||
|
|
||||||
CREATE OBJECT mo_diff
|
lo_repo ?= lcl_app=>repo_srv( )->get( iv_key ).
|
||||||
EXPORTING
|
lt_remote = lo_repo->get_files_remote( ).
|
||||||
iv_local = is_local-data
|
lt_local = lo_repo->get_files_local( ).
|
||||||
iv_remote = is_remote-data.
|
|
||||||
|
IF is_file IS NOT INITIAL.
|
||||||
|
|
||||||
|
append_diff( it_remote = lt_remote
|
||||||
|
it_local = lt_local
|
||||||
|
iv_path = is_file-path
|
||||||
|
iv_filename = is_file-filename ).
|
||||||
|
|
||||||
|
ELSE. " is_object is supplied
|
||||||
|
|
||||||
|
lt_results = lo_repo->status( ).
|
||||||
|
|
||||||
|
LOOP AT lt_results ASSIGNING <ls_result>
|
||||||
|
WHERE obj_type = is_object-obj_type
|
||||||
|
AND obj_name = is_object-obj_name
|
||||||
|
AND match IS INITIAL.
|
||||||
|
|
||||||
|
append_diff( it_remote = lt_remote
|
||||||
|
it_local = lt_local
|
||||||
|
iv_path = <ls_result>-path
|
||||||
|
iv_filename = <ls_result>-filename ).
|
||||||
|
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF lines( mt_diff_files ) = 0.
|
||||||
|
lcx_exception=>raise( 'PAGE_DIFF ERROR: No diff files found' ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD append_diff.
|
||||||
|
|
||||||
|
DATA:
|
||||||
|
ls_r_dummy LIKE LINE OF it_remote ##NEEDED,
|
||||||
|
ls_l_dummy LIKE LINE OF it_local ##NEEDED,
|
||||||
|
ls_diff_file LIKE LINE OF mt_diff_files.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS: <ls_remote> LIKE LINE OF it_remote,
|
||||||
|
<ls_local> LIKE LINE OF it_local.
|
||||||
|
|
||||||
|
READ TABLE it_remote ASSIGNING <ls_remote>
|
||||||
|
WITH KEY filename = iv_filename
|
||||||
|
path = iv_path.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
ASSIGN ls_r_dummy TO <ls_remote>.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
READ TABLE it_local ASSIGNING <ls_local>
|
||||||
|
WITH KEY file-filename = iv_filename
|
||||||
|
file-path = iv_path.
|
||||||
|
IF sy-subrc <> 0.
|
||||||
|
ASSIGN ls_l_dummy TO <ls_local>.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
IF <ls_local> IS INITIAL AND <ls_remote> IS INITIAL.
|
||||||
|
lcx_exception=>raise( |DIFF: file not found { iv_filename }| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
CREATE OBJECT ls_diff_file-o_diff
|
||||||
|
EXPORTING
|
||||||
|
iv_local = <ls_local>-file-data
|
||||||
|
iv_remote = <ls_remote>-data.
|
||||||
|
|
||||||
|
ls_diff_file-filename = iv_filename.
|
||||||
|
APPEND ls_diff_file TO mt_diff_files.
|
||||||
|
|
||||||
|
ENDMETHOD. "append_diff
|
||||||
|
|
||||||
METHOD styles.
|
METHOD styles.
|
||||||
DATA lo_html TYPE REF TO lcl_html_helper.
|
DATA lo_html TYPE REF TO lcl_html_helper.
|
||||||
CREATE OBJECT lo_html.
|
CREATE OBJECT lo_html.
|
||||||
|
@ -47,7 +142,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
lo_html->add( ' padding: 0.7em ' ). "#EC NOTEXT
|
lo_html->add( ' padding: 0.7em ' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'div.diff_head {' ). "#EC NOTEXT
|
lo_html->add( 'div.diff_head {' ). "#EC NOTEXT
|
||||||
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
|
|
||||||
lo_html->add( ' padding-bottom: 0.7em;' ). "#EC NOTEXT
|
lo_html->add( ' padding-bottom: 0.7em;' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'span.diff_name {' ). "#EC NOTEXT
|
lo_html->add( 'span.diff_name {' ). "#EC NOTEXT
|
||||||
|
@ -78,6 +172,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'div.diff_content {' ). "#EC NOTEXT
|
lo_html->add( 'div.diff_content {' ). "#EC NOTEXT
|
||||||
lo_html->add( ' background: #fff;' ). "#EC NOTEXT
|
lo_html->add( ' background: #fff;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-top: 1px solid #DDD;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' border-bottom: 1px solid #DDD;' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
|
|
||||||
" Table part
|
" Table part
|
||||||
|
@ -86,16 +182,18 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
lo_html->add( ' font-family: Consolas, Courier, monospace;' ). "#EC NOTEXT
|
lo_html->add( ' font-family: Consolas, Courier, monospace;' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'table.diff_tab th {' ). "#EC NOTEXT
|
lo_html->add( 'table.diff_tab th {' ). "#EC NOTEXT
|
||||||
lo_html->add( ' color: grey;' ). "#EC NOTEXT
|
lo_html->add( ' color: #EEE;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' background-color: #BBB;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' text-align: left;' ). "#EC NOTEXT
|
lo_html->add( ' text-align: left;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' font-weight: normal;' ). "#EC NOTEXT
|
lo_html->add( ' font-weight: bold;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' padding: 0.5em;' ). "#EC NOTEXT
|
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
||||||
|
lo_html->add( ' font-size: 9pt;' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'table.diff_tab td {' ). "#EC NOTEXT
|
lo_html->add( 'table.diff_tab td {' ). "#EC NOTEXT
|
||||||
lo_html->add( ' color: #444;' ). "#EC NOTEXT
|
lo_html->add( ' color: #444;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
lo_html->add( ' padding-left: 0.5em;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' padding-right: 0.5em;' ). "#EC NOTEXT
|
lo_html->add( ' padding-right: 0.5em;' ). "#EC NOTEXT
|
||||||
lo_html->add( ' font-size: 12pt;' ). "#EC NOTEXT
|
lo_html->add( ' font-size: 10pt;' ). "#EC NOTEXT
|
||||||
lo_html->add( '}' ). "#EC NOTEXT
|
lo_html->add( '}' ). "#EC NOTEXT
|
||||||
lo_html->add( 'table.diff_tab td.num, th.num {' ). "#EC NOTEXT
|
lo_html->add( 'table.diff_tab td.num, th.num {' ). "#EC NOTEXT
|
||||||
lo_html->add( ' text-align: right;' ). "#EC NOTEXT
|
lo_html->add( ' text-align: right;' ). "#EC NOTEXT
|
||||||
|
@ -127,14 +225,14 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
CREATE OBJECT lo_html.
|
CREATE OBJECT lo_html.
|
||||||
|
|
||||||
ls_stats = mo_diff->stats( ).
|
ls_stats = is_diff-o_diff->stats( ).
|
||||||
|
|
||||||
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
||||||
lo_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
|
lo_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
|
||||||
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
|
lo_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
|
||||||
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
|
lo_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
|
||||||
lo_html->add( '<span class="diff_name">' ). "#EC NOTEXT
|
lo_html->add( '<span class="diff_name">' ). "#EC NOTEXT
|
||||||
lo_html->add( |{ mv_filename }| ).
|
lo_html->add( |{ is_diff-filename }| ).
|
||||||
lo_html->add( '</span>' ). "#EC NOTEXT
|
lo_html->add( '</span>' ). "#EC NOTEXT
|
||||||
lo_html->add( '</div>' ). "#EC NOTEXT
|
lo_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
@ -146,18 +244,18 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
ro_html->add( '<div class="diff">' ). "#EC NOTEXT
|
ro_html->add( '<div class="diff">' ). "#EC NOTEXT
|
||||||
ro_html->add( render_head( ) ).
|
ro_html->add( render_head( is_diff ) ).
|
||||||
|
|
||||||
" Content
|
" Content
|
||||||
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
|
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
|
||||||
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
|
ro_html->add( '<table width="100%" class="diff_tab">' ). "#EC NOTEXT
|
||||||
ro_html->add( '<tr>' ). "#EC NOTEXT
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
ro_html->add( '<th>@LOCAL</th>' ). "#EC NOTEXT
|
ro_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
ro_html->add( '<th>@REMOTE</th>' ). "#EC NOTEXT
|
ro_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
|
||||||
ro_html->add( '</tr>' ). "#EC NOTEXT
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
ro_html->add( render_lines( ) ).
|
ro_html->add( render_lines( is_diff ) ).
|
||||||
ro_html->add( '</table>' ). "#EC NOTEXT
|
ro_html->add( '</table>' ). "#EC NOTEXT
|
||||||
ro_html->add( '</div>' ). "#EC NOTEXT
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
@ -179,7 +277,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
lt_diffs = mo_diff->get( ).
|
lt_diffs = is_diff-o_diff->get( ).
|
||||||
|
|
||||||
LOOP AT lt_diffs ASSIGNING <ls_diff>.
|
LOOP AT lt_diffs ASSIGNING <ls_diff>.
|
||||||
IF <ls_diff>-short = abap_false.
|
IF <ls_diff>-short = abap_false.
|
||||||
|
@ -189,7 +287,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
IF lv_insert_nav = abap_true. " Insert separator line with navigation
|
IF lv_insert_nav = abap_true. " Insert separator line with navigation
|
||||||
IF <ls_diff>-beacon > 0.
|
IF <ls_diff>-beacon > 0.
|
||||||
READ TABLE mo_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
|
READ TABLE is_diff-o_diff->mt_beacons INTO lv_beacon INDEX <ls_diff>-beacon.
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_beacon = '---'.
|
lv_beacon = '---'.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -228,11 +326,17 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
METHOD lif_gui_page~render.
|
METHOD lif_gui_page~render.
|
||||||
|
|
||||||
|
DATA ls_diff_file LIKE LINE OF mt_diff_files.
|
||||||
|
|
||||||
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( 'DIFF' ) ).
|
ro_html->add( title( 'DIFF' ) ).
|
||||||
ro_html->add( render_diff( ) ).
|
|
||||||
|
LOOP AT mt_diff_files INTO ls_diff_file.
|
||||||
|
ro_html->add( render_diff( ls_diff_file ) ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
ro_html->add( footer( ) ).
|
ro_html->add( footer( ) ).
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
|
@ -15,6 +15,7 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS: BEGIN OF c_actions,
|
CONSTANTS: BEGIN OF c_actions,
|
||||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||||
|
toggle_hide_files TYPE string VALUE 'toggle_hide_files' ##NO_TEXT,
|
||||||
END OF c_actions.
|
END OF c_actions.
|
||||||
|
|
||||||
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
CONSTANTS: c_default_sortkey TYPE i VALUE 9999.
|
||||||
|
@ -25,10 +26,12 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||||
is_first TYPE abap_bool,
|
is_first TYPE abap_bool,
|
||||||
files TYPE tt_repo_files,
|
files TYPE tt_repo_files,
|
||||||
sortkey TYPE i,
|
sortkey TYPE i,
|
||||||
|
changes TYPE i,
|
||||||
END OF ty_repo_item.
|
END OF ty_repo_item.
|
||||||
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
TYPES tt_repo_items TYPE STANDARD TABLE OF ty_repo_item WITH DEFAULT KEY.
|
||||||
|
|
||||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value.
|
DATA: mv_show TYPE lcl_persistence_db=>ty_value,
|
||||||
|
mv_hide_files TYPE abap_bool.
|
||||||
|
|
||||||
METHODS:
|
METHODS:
|
||||||
retrieve_active_repo
|
retrieve_active_repo
|
||||||
|
@ -157,6 +160,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
_add '/* REPOSITORY TABLE*/'.
|
_add '/* REPOSITORY TABLE*/'.
|
||||||
|
_add 'div.repo_container {'.
|
||||||
|
_add ' position: relative;'.
|
||||||
|
_add '}'.
|
||||||
_add '.repo_tab {'.
|
_add '.repo_tab {'.
|
||||||
_add ' border: 1px solid #DDD;'.
|
_add ' border: 1px solid #DDD;'.
|
||||||
_add ' border-radius: 3px;'.
|
_add ' border-radius: 3px;'.
|
||||||
|
@ -301,12 +307,13 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
METHOD render_repo.
|
METHOD render_repo.
|
||||||
|
|
||||||
DATA: lt_repo_items TYPE tt_repo_items,
|
DATA: lt_repo_items TYPE tt_repo_items,
|
||||||
|
lo_tab_menu TYPE REF TO lcl_html_toolbar,
|
||||||
lx_error TYPE REF TO lcx_exception,
|
lx_error TYPE REF TO lcx_exception,
|
||||||
lo_log TYPE REF TO lcl_log.
|
lo_log TYPE REF TO lcl_log.
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
FIELD-SYMBOLS <ls_item> LIKE LINE OF lt_repo_items.
|
||||||
|
|
||||||
|
CREATE OBJECT lo_tab_menu.
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
ro_html->add( |<div class="repo" id="repo{ io_repo->get_key( ) }">| ).
|
||||||
|
@ -317,17 +324,26 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
IMPORTING et_repo_items = lt_repo_items
|
IMPORTING et_repo_items = lt_repo_items
|
||||||
eo_log = lo_log ).
|
eo_log = lo_log ).
|
||||||
|
|
||||||
* extract_repo_content must be called before rendering the menu
|
" extract_repo_content must be called before rendering the menu
|
||||||
* so that lo_log is filled with errors from the serialization
|
" so that lo_log is filled with errors from the serialization
|
||||||
ro_html->add( render_repo_menu( io_repo ) ).
|
ro_html->add( render_repo_menu( io_repo ) ).
|
||||||
|
|
||||||
IF io_repo->is_offline( ) = abap_false.
|
IF io_repo->is_offline( ) = abap_false and lo_log->count( ) > 0.
|
||||||
ro_html->add( '<div class="log">' ).
|
ro_html->add( '<div class="log">' ).
|
||||||
* shows eg. list of unsupported objects
|
ro_html->add( lo_log->to_html( ) ). " shows eg. list of unsupported objects
|
||||||
ro_html->add( lo_log->to_html( ) ).
|
|
||||||
ro_html->add( '</div>' ).
|
ro_html->add( '</div>' ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="repo_container">' ).
|
||||||
|
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( '<table width="100%" class="repo_tab">' ).
|
ro_html->add( '<table width="100%" class="repo_tab">' ).
|
||||||
IF lines( lt_repo_items ) = 0.
|
IF lines( lt_repo_items ) = 0.
|
||||||
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
ro_html->add( '<tr class="unsupported firstrow"><td class="paddings">'
|
||||||
|
@ -339,6 +355,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ro_html->add( '</table>' ).
|
ro_html->add( '</table>' ).
|
||||||
|
ro_html->add( '</div>' ).
|
||||||
|
|
||||||
CATCH lcx_exception INTO lx_error.
|
CATCH lcx_exception INTO lx_error.
|
||||||
ro_html->add( render_repo_menu( io_repo ) ).
|
ro_html->add( render_repo_menu( io_repo ) ).
|
||||||
|
@ -384,17 +401,19 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
<ls_repo_item>-obj_type = <ls_result>-obj_type.
|
||||||
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
<ls_repo_item>-obj_name = <ls_result>-obj_name.
|
||||||
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
<ls_repo_item>-sortkey = c_default_sortkey. " Default sort key
|
||||||
|
<ls_repo_item>-changes = 0.
|
||||||
ENDAT.
|
ENDAT.
|
||||||
|
|
||||||
IF <ls_result>-filename IS NOT INITIAL.
|
IF <ls_result>-filename IS NOT INITIAL.
|
||||||
ls_file-path = <ls_result>-path.
|
ls_file-path = <ls_result>-path.
|
||||||
ls_file-filename = <ls_result>-filename.
|
ls_file-filename = <ls_result>-filename.
|
||||||
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
ls_file-is_changed = boolc( NOT <ls_result>-match = abap_true ).
|
||||||
ls_file-remote_only = <ls_result>-remote_only.
|
ls_file-new = <ls_result>-new.
|
||||||
APPEND ls_file TO <ls_repo_item>-files.
|
APPEND ls_file TO <ls_repo_item>-files.
|
||||||
|
|
||||||
IF ls_file-is_changed = abap_true.
|
IF ls_file-is_changed = abap_true OR ls_file-new IS NOT INITIAL.
|
||||||
<ls_repo_item>-sortkey = 2. " Changed files
|
<ls_repo_item>-sortkey = 2. " Changed files
|
||||||
|
<ls_repo_item>-changes = <ls_repo_item>-changes + 1.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
@ -444,7 +463,8 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
ro_html->add( |<tr{ lv_trclass }>| ).
|
ro_html->add( |<tr{ lv_trclass }>| ).
|
||||||
|
|
||||||
IF is_item-obj_name IS INITIAL.
|
IF is_item-obj_name IS INITIAL.
|
||||||
ro_html->add( '<td colspan="3"></td>' ).
|
ro_html->add( '<td colspan="2"></td>'
|
||||||
|
&& '<td class="object"><i class="grey">non-code and meta files</i></td>' ).
|
||||||
ELSE.
|
ELSE.
|
||||||
CASE is_item-obj_type. "TODO ??
|
CASE is_item-obj_type. "TODO ??
|
||||||
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
WHEN 'PROG' OR 'CLAS' OR 'FUGR'.
|
||||||
|
@ -467,18 +487,30 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
IF io_repo->is_offline( ) = abap_false. " Files for online repos only
|
||||||
|
|
||||||
ro_html->add( '<td class="files">' ).
|
ro_html->add( '<td class="files">' ).
|
||||||
|
IF mv_hide_files = abap_false OR is_item-obj_type IS INITIAL.
|
||||||
LOOP AT is_item-files INTO ls_file.
|
LOOP AT is_item-files INTO ls_file.
|
||||||
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
ro_html->add( |<span>{ ls_file-path && ls_file-filename }</span>| ).
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
ENDIF.
|
||||||
ro_html->add( '</td>' ).
|
ro_html->add( '</td>' ).
|
||||||
|
|
||||||
ro_html->add( '<td class="cmd">' ).
|
ro_html->add( '<td class="cmd">' ).
|
||||||
IF lines( is_item-files ) = 0.
|
IF lines( is_item-files ) = 0.
|
||||||
ro_html->add( '<span class="grey">Only Local</span>' ).
|
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||||
|
ELSEIF is_item-changes > 0.
|
||||||
|
IF mv_hide_files = abap_true AND is_item-obj_name IS NOT INITIAL.
|
||||||
|
lv_difflink = lcl_html_action_utils=>obj_encode(
|
||||||
|
iv_key = io_repo->get_key( )
|
||||||
|
ig_object = is_item ).
|
||||||
|
ro_html->add_anchor(
|
||||||
|
iv_txt = |diff ({ is_item-changes })|
|
||||||
|
iv_act = |{ gc_action-go_diff }?{ lv_difflink }| ).
|
||||||
ELSE.
|
ELSE.
|
||||||
LOOP AT is_item-files INTO ls_file.
|
LOOP AT is_item-files INTO ls_file.
|
||||||
IF ls_file-remote_only = abap_true.
|
IF ls_file-new = gc_new-remote.
|
||||||
ro_html->add( '<span class="grey">Only Remote</span>' ).
|
ro_html->add( '<span class="grey">new @remote</span>' ).
|
||||||
|
ELSEIF ls_file-new = gc_new-local.
|
||||||
|
ro_html->add( '<span class="grey">new @local</span>' ).
|
||||||
ELSEIF ls_file-is_changed = abap_true.
|
ELSEIF ls_file-is_changed = abap_true.
|
||||||
lv_difflink = lcl_html_action_utils=>file_encode(
|
lv_difflink = lcl_html_action_utils=>file_encode(
|
||||||
iv_key = io_repo->get_key( )
|
iv_key = io_repo->get_key( )
|
||||||
|
@ -491,6 +523,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
ENDIF.
|
||||||
ro_html->add( '</td>' ).
|
ro_html->add( '</td>' ).
|
||||||
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
@ -632,6 +665,9 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
WHEN c_actions-show. " Change displayed repo
|
WHEN c_actions-show. " Change displayed repo
|
||||||
lcl_app=>user( )->set_repo_show( lv_key ).
|
lcl_app=>user( )->set_repo_show( lv_key ).
|
||||||
ev_state = gc_event_state-re_render.
|
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.
|
ENDCASE.
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
@ -643,6 +679,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
||||||
lo_repo LIKE LINE OF lt_repos.
|
lo_repo LIKE LINE OF lt_repos.
|
||||||
|
|
||||||
retrieve_active_repo( ). " Get and validate key of user default repo
|
retrieve_active_repo( ). " Get and validate key of user default repo
|
||||||
|
mv_hide_files = lcl_app=>user( )->get_hide_files( ).
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
|
|
@ -56,7 +56,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
IF iv_action <> 'stage_all'.
|
IF iv_action <> 'stage_all'.
|
||||||
lcl_html_action_utils=>file_decode( EXPORTING iv_string = iv_getdata
|
lcl_html_action_utils=>file_obj_decode( EXPORTING iv_string = iv_getdata
|
||||||
IMPORTING eg_file = ls_file ).
|
IMPORTING eg_file = ls_file ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
|
@ -377,6 +377,13 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
RETURNING VALUE(rv_email) TYPE string
|
RETURNING VALUE(rv_email) TYPE string
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS toggle_hide_files
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_hide_files
|
||||||
|
RETURNING VALUE(rv_hide) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'.
|
CONSTANTS c_type_user TYPE lcl_persistence_db=>ty_type VALUE 'USER'.
|
||||||
|
|
||||||
|
@ -399,6 +406,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
email TYPE string,
|
email TYPE string,
|
||||||
repo_show TYPE lcl_persistence_repo=>ty_repo-key,
|
repo_show TYPE lcl_persistence_repo=>ty_repo-key,
|
||||||
repo_config TYPE ty_repo_config_tt,
|
repo_config TYPE ty_repo_config_tt,
|
||||||
|
hide_files TYPE abap_bool,
|
||||||
END OF ty_user.
|
END OF ty_user.
|
||||||
|
|
||||||
METHODS constructor
|
METHODS constructor
|
||||||
|
@ -606,6 +614,22 @@ CLASS lcl_persistence_user IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "get_repo_email
|
ENDMETHOD. "get_repo_email
|
||||||
|
|
||||||
|
METHOD toggle_hide_files.
|
||||||
|
|
||||||
|
DATA ls_user TYPE ty_user.
|
||||||
|
|
||||||
|
ls_user = read( ).
|
||||||
|
ls_user-hide_files = boolc( ls_user-hide_files = abap_false ).
|
||||||
|
update( ls_user ).
|
||||||
|
|
||||||
|
ENDMETHOD. "toggle_hide_files
|
||||||
|
|
||||||
|
METHOD get_hide_files.
|
||||||
|
|
||||||
|
rv_hide = read( )-hide_files.
|
||||||
|
|
||||||
|
ENDMETHOD. "get_hide_files
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
CLASS lcl_persistence_db IMPLEMENTATION.
|
CLASS lcl_persistence_db IMPLEMENTATION.
|
||||||
|
|
|
@ -1559,3 +1559,62 @@ CLASS ltcl_login_manager IMPLEMENTATION.
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
ENDCLASS.
|
ENDCLASS.
|
||||||
|
|
||||||
|
CLASS ltcl_html_action_utils DEFINITION
|
||||||
|
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
|
||||||
|
INHERITING FROM CL_AUNIT_ASSERT.
|
||||||
|
|
||||||
|
PUBLIC SECTION.
|
||||||
|
|
||||||
|
METHODS add_field FOR TESTING.
|
||||||
|
METHODS get_field FOR TESTING.
|
||||||
|
|
||||||
|
ENDCLASS. "ltcl_html_action_utils
|
||||||
|
|
||||||
|
CLASS ltcl_html_action_utils IMPLEMENTATION.
|
||||||
|
|
||||||
|
METHOD add_field.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
lt_answer TYPE tihttpnvp,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
ls_field-name = 'NAME'.
|
||||||
|
ls_field-value = 'TEST'.
|
||||||
|
APPEND ls_field TO lt_answer.
|
||||||
|
|
||||||
|
ls_field-name = 'VALUE'.
|
||||||
|
ls_field-value = 'TEST'.
|
||||||
|
APPEND ls_field TO lt_answer.
|
||||||
|
|
||||||
|
lcl_html_action_utils=>add_field( EXPORTING name = 'NAME' iv = 'TEST'
|
||||||
|
CHANGING ct = lt_fields ).
|
||||||
|
lcl_html_action_utils=>add_field( EXPORTING name = 'VALUE' iv = ls_field
|
||||||
|
CHANGING ct = lt_fields ).
|
||||||
|
|
||||||
|
assert_equals( act = lt_fields exp = lt_answer ).
|
||||||
|
|
||||||
|
ENDMETHOD. "add_field
|
||||||
|
|
||||||
|
METHOD get_field.
|
||||||
|
|
||||||
|
DATA: lt_fields TYPE tihttpnvp,
|
||||||
|
ls_answer LIKE LINE OF lt_fields,
|
||||||
|
ls_field LIKE LINE OF lt_fields.
|
||||||
|
|
||||||
|
ls_answer-name = 'NAME'.
|
||||||
|
ls_answer-value = 'TEST'.
|
||||||
|
APPEND ls_answer TO lt_fields.
|
||||||
|
|
||||||
|
lcl_html_action_utils=>get_field( EXPORTING name = 'NAME' it = lt_fields
|
||||||
|
CHANGING cv = ls_field-value ).
|
||||||
|
lcl_html_action_utils=>get_field( EXPORTING name = 'NAME' it = lt_fields
|
||||||
|
CHANGING cv = ls_field ).
|
||||||
|
|
||||||
|
ls_answer-name = 'TEST'.
|
||||||
|
ls_answer-value = 'TEST'.
|
||||||
|
assert_equals( act = ls_field exp = ls_answer ). " Both field are filled!
|
||||||
|
|
||||||
|
ENDMETHOD. "get_field
|
||||||
|
|
||||||
|
ENDCLASS. "ltcl_html_action_utils
|
|
@ -537,7 +537,7 @@ CLASS lcl_diff IMPLEMENTATION.
|
||||||
|
|
||||||
FIELD-SYMBOLS: <ls_diff> LIKE LINE OF mt_diff.
|
FIELD-SYMBOLS: <ls_diff> LIKE LINE OF mt_diff.
|
||||||
|
|
||||||
IF lines( mt_diff ) < 200.
|
IF lines( mt_diff ) < 100.
|
||||||
LOOP AT mt_diff ASSIGNING <ls_diff>.
|
LOOP AT mt_diff ASSIGNING <ls_diff>.
|
||||||
<ls_diff>-short = abap_true.
|
<ls_diff>-short = abap_true.
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
@ -546,7 +546,7 @@ CLASS lcl_diff IMPLEMENTATION.
|
||||||
WHERE NOT result IS INITIAL AND short = abap_false.
|
WHERE NOT result IS INITIAL AND short = abap_false.
|
||||||
lv_index = sy-tabix.
|
lv_index = sy-tabix.
|
||||||
|
|
||||||
DO 20 TIMES. " Backward
|
DO 10 TIMES. " Backward
|
||||||
READ TABLE mt_diff INDEX ( lv_index - sy-index ) ASSIGNING <ls_diff>.
|
READ TABLE mt_diff INDEX ( lv_index - sy-index ) ASSIGNING <ls_diff>.
|
||||||
IF sy-subrc <> 0 OR <ls_diff>-short = abap_true. " tab bound or prev marker
|
IF sy-subrc <> 0 OR <ls_diff>-short = abap_true. " tab bound or prev marker
|
||||||
EXIT.
|
EXIT.
|
||||||
|
@ -554,7 +554,7 @@ CLASS lcl_diff IMPLEMENTATION.
|
||||||
<ls_diff>-short = abap_true.
|
<ls_diff>-short = abap_true.
|
||||||
ENDDO.
|
ENDDO.
|
||||||
|
|
||||||
DO 20 TIMES. " Forward
|
DO 10 TIMES. " Forward
|
||||||
READ TABLE mt_diff INDEX ( lv_index + sy-index - 1 ) ASSIGNING <ls_diff>.
|
READ TABLE mt_diff INDEX ( lv_index + sy-index - 1 ) ASSIGNING <ls_diff>.
|
||||||
IF sy-subrc <> 0. " tab bound reached
|
IF sy-subrc <> 0. " tab bound reached
|
||||||
EXIT.
|
EXIT.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user