mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 13:03:01 +08:00
Merge remote-tracking branch 'refs/remotes/larshp/master' into serialize-intf
This commit is contained in:
commit
283be673a0
|
@ -3,7 +3,7 @@ REPORT zabapgit LINE-SIZE 100.
|
|||
* See http://www.abapgit.org
|
||||
|
||||
CONSTANTS: gc_xml_version TYPE string VALUE 'v1.0.0', "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.26.0'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.26.3'. "#EC NOTEXT
|
||||
|
||||
********************************************************************************
|
||||
* The MIT License (MIT)
|
||||
|
|
|
@ -537,16 +537,17 @@ table.diff_tab td.code {
|
|||
overflow: visible;
|
||||
}
|
||||
|
||||
table.diff_tab .code span.keyword { color: #0a69ce; }
|
||||
table.diff_tab .code span.text { color: #48ce4f; }
|
||||
table.diff_tab .code span.comment { color: #808080; font-style: italic; }
|
||||
table.diff_tab .code span.xml_tag { color: #457ce3; }
|
||||
table.diff_tab .code span.attr { color: #b777fb; }
|
||||
table.diff_tab .code span.attr_val { color: #7a02f9; }
|
||||
|
||||
table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }
|
||||
table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }
|
||||
|
||||
/* STYLES for Syntax Highlighting */
|
||||
.syntax-hl span.keyword { color: #0a69ce; }
|
||||
.syntax-hl span.text { color: #48ce4f; }
|
||||
.syntax-hl span.comment { color: #808080; font-style: italic; }
|
||||
.syntax-hl span.xml_tag { color: #457ce3; }
|
||||
.syntax-hl span.attr { color: #b777fb; }
|
||||
.syntax-hl span.attr_val { color: #7a02f9; }
|
||||
|
||||
/* DEBUG INFO STYLES */
|
||||
div.debug_container {
|
||||
padding: 0.5em;
|
||||
|
@ -554,15 +555,17 @@ div.debug_container {
|
|||
color: #444;
|
||||
font-family: Consolas, Courier, monospace;
|
||||
}
|
||||
|
||||
div.debug_container p {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* DB ENTRIES */
|
||||
div.db_list {
|
||||
background-color: #f2f2f2;
|
||||
background-color: #fff;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
table.db_tab pre {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
|
@ -571,10 +574,11 @@ table.db_tab pre {
|
|||
margin: 0px;
|
||||
width: 30em;
|
||||
}
|
||||
|
||||
table.db_tab tr.firstrow td { padding-top: 0.5em; }
|
||||
table.db_tab th {
|
||||
color: #888888;
|
||||
text-align: left;
|
||||
color: #888;
|
||||
padding: 0.5em;
|
||||
border-bottom: 1px #ddd solid;
|
||||
}
|
||||
|
@ -588,24 +592,34 @@ table.db_tab td.data {
|
|||
font-style: italic;
|
||||
}
|
||||
|
||||
table.db_tab tbody tr:hover, tr:active {
|
||||
background-color: #f4f4f4;
|
||||
}
|
||||
|
||||
/* DB ENTRY DISPLAY */
|
||||
div.db_entry {
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.5em;
|
||||
}
|
||||
|
||||
div.db_entry pre {
|
||||
display: block;
|
||||
font-size: 10pt;
|
||||
overflow: hidden;
|
||||
word-wrap:break-word;
|
||||
white-space: pre-wrap;
|
||||
background-color: #eaeaea;
|
||||
background-color: #fcfcfc;
|
||||
border: 1px #eaeaea solid;
|
||||
border-radius: 3px;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0em;
|
||||
width: 50em;
|
||||
width: 60em;
|
||||
}
|
||||
|
||||
div.db_entry table.toolbar {
|
||||
width: 50em;
|
||||
}
|
||||
|
||||
table.tag {
|
||||
display: inline-block;
|
||||
border: 1px #b3c1cc solid;
|
||||
|
|
|
@ -53,7 +53,8 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
|||
DATA: lv_url TYPE string,
|
||||
lx_error TYPE REF TO lcx_exception,
|
||||
ls_package_data TYPE scompkdtln,
|
||||
ls_branch TYPE lcl_git_branch_list=>ty_git_branch.
|
||||
ls_branch TYPE lcl_git_branch_list=>ty_git_branch,
|
||||
lv_create TYPE boolean.
|
||||
|
||||
FIELD-SYMBOLS: <ls_furl> LIKE LINE OF tt_fields,
|
||||
<ls_fbranch> LIKE LINE OF tt_fields.
|
||||
|
@ -88,24 +89,9 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
|||
ELSEIF pv_code = 'COD2'.
|
||||
cv_show_popup = abap_true.
|
||||
|
||||
CALL FUNCTION 'FUNCTION_EXISTS'
|
||||
EXPORTING
|
||||
funcname = 'PB_POPUP_PACKAGE_CREATE'
|
||||
EXCEPTIONS
|
||||
function_not_exist = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
* looks like the function module used does not exist on all
|
||||
* versions since 702, so show an error
|
||||
lcx_exception=>raise( 'Function module PB_POPUP_PACKAGE_CREATE does not exist' ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'PB_POPUP_PACKAGE_CREATE'
|
||||
CHANGING
|
||||
p_object_data = ls_package_data
|
||||
EXCEPTIONS
|
||||
action_cancelled = 1.
|
||||
IF sy-subrc = 1.
|
||||
lcl_popups=>popup_to_create_package( IMPORTING es_package_data = ls_package_data
|
||||
ev_create = lv_create ).
|
||||
IF lv_create = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
|
@ -119,6 +105,38 @@ FORM branch_popup TABLES tt_fields TYPE ty_sval_tt
|
|||
|
||||
ENDFORM. "branch_popup
|
||||
|
||||
FORM package_popup TABLES tt_fields TYPE ty_sval_tt
|
||||
USING pv_code TYPE clike
|
||||
CHANGING cs_error TYPE svale
|
||||
cv_show_popup TYPE c
|
||||
RAISING lcx_exception ##called ##needed.
|
||||
* called dynamically from function module POPUP_GET_VALUES_USER_BUTTONS
|
||||
|
||||
DATA: ls_package_data TYPE scompkdtln,
|
||||
lv_create TYPE boolean.
|
||||
|
||||
FIELD-SYMBOLS: <ls_fbranch> LIKE LINE OF tt_fields.
|
||||
|
||||
CLEAR cs_error.
|
||||
|
||||
IF pv_code = 'COD1'.
|
||||
cv_show_popup = abap_true.
|
||||
|
||||
lcl_popups=>popup_to_create_package( IMPORTING es_package_data = ls_package_data
|
||||
ev_create = lv_create ).
|
||||
IF lv_create = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lcl_sap_package=>create( ls_package_data ).
|
||||
COMMIT WORK.
|
||||
|
||||
READ TABLE tt_fields ASSIGNING <ls_fbranch> WITH KEY tabname = 'TDEVC'.
|
||||
ASSERT sy-subrc = 0.
|
||||
<ls_fbranch>-value = ls_package_data-devclass.
|
||||
ENDIF.
|
||||
ENDFORM. "package_popup
|
||||
|
||||
FORM output.
|
||||
DATA: lt_ucomm TYPE TABLE OF sy-ucomm.
|
||||
PERFORM set_pf_status IN PROGRAM rsdbrunt IF FOUND.
|
||||
|
|
|
@ -251,9 +251,11 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
|
||||
METHOD render.
|
||||
|
||||
DATA lv_url TYPE w3url.
|
||||
DATA: lv_url TYPE w3url,
|
||||
lo_html TYPE REF TO lcl_html.
|
||||
|
||||
lv_url = cache_html( mi_cur_page->render( )->mv_html ).
|
||||
lo_html = mi_cur_page->render( ).
|
||||
lv_url = cache_html( lo_html->render( iv_no_indent_jscss = abap_true ) ).
|
||||
|
||||
mo_html_viewer->show_url( lv_url ).
|
||||
|
||||
|
|
|
@ -9,49 +9,92 @@ END-OF-DEFINITION.
|
|||
*----------------------------------------------------------------------*
|
||||
* CLASS lcl_html DEFINITION
|
||||
*----------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_html DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
CONSTANTS: c_indent_size TYPE i VALUE 2.
|
||||
|
||||
DATA mv_html TYPE string READ-ONLY.
|
||||
DATA mv_indent TYPE i READ-ONLY.
|
||||
DATA mv_within_style TYPE i READ-ONLY.
|
||||
DATA mv_within_js TYPE i READ-ONLY.
|
||||
|
||||
METHODS add IMPORTING iv_chunk TYPE any.
|
||||
CLASS-METHODS class_constructor.
|
||||
METHODS reset.
|
||||
METHODS add
|
||||
IMPORTING iv_chunk TYPE any.
|
||||
METHODS render
|
||||
IMPORTING iv_no_indent_jscss TYPE abap_bool OPTIONAL
|
||||
RETURNING VALUE(rv_html) TYPE string.
|
||||
METHODS is_empty
|
||||
RETURNING VALUE(rv_yes) TYPE abap_bool.
|
||||
|
||||
METHODS add_a IMPORTING iv_txt TYPE string
|
||||
iv_act TYPE string
|
||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||
iv_opt TYPE clike OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
iv_id TYPE string OPTIONAL
|
||||
iv_style TYPE string OPTIONAL.
|
||||
METHODS add_a
|
||||
IMPORTING
|
||||
iv_txt TYPE string
|
||||
iv_act TYPE string
|
||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||
iv_opt TYPE clike OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
iv_id TYPE string OPTIONAL
|
||||
iv_style TYPE string OPTIONAL.
|
||||
|
||||
METHODS add_icon IMPORTING iv_name TYPE string
|
||||
iv_hint TYPE string OPTIONAL
|
||||
iv_alt TYPE string OPTIONAL
|
||||
iv_class TYPE string OPTIONAL.
|
||||
METHODS add_icon
|
||||
IMPORTING
|
||||
iv_name TYPE string
|
||||
iv_hint TYPE string OPTIONAL
|
||||
iv_alt TYPE string OPTIONAL
|
||||
iv_class TYPE string OPTIONAL.
|
||||
|
||||
CLASS-METHODS a IMPORTING iv_txt TYPE string
|
||||
iv_act TYPE string
|
||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||
iv_opt TYPE clike OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
iv_id TYPE string OPTIONAL
|
||||
iv_style TYPE string OPTIONAL
|
||||
RETURNING VALUE(rv_str) TYPE string.
|
||||
CLASS-METHODS a
|
||||
IMPORTING
|
||||
iv_txt TYPE string
|
||||
iv_act TYPE string
|
||||
iv_typ TYPE char1 DEFAULT gc_action_type-sapevent
|
||||
iv_opt TYPE clike OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
iv_id TYPE string OPTIONAL
|
||||
iv_style TYPE string OPTIONAL
|
||||
RETURNING VALUE(rv_str) TYPE string.
|
||||
|
||||
CLASS-METHODS icon IMPORTING iv_name TYPE string
|
||||
iv_hint TYPE string OPTIONAL
|
||||
iv_alt TYPE string OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
RETURNING VALUE(rv_str) TYPE string.
|
||||
CLASS-METHODS icon
|
||||
IMPORTING
|
||||
iv_name TYPE string
|
||||
iv_hint TYPE string OPTIONAL
|
||||
iv_alt TYPE string OPTIONAL
|
||||
iv_class TYPE string OPTIONAL
|
||||
RETURNING VALUE(rv_str) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS _add_str IMPORTING iv_str TYPE csequence.
|
||||
METHODS _add_htm IMPORTING io_html TYPE REF TO lcl_html.
|
||||
CLASS-DATA go_single_tags_re TYPE REF TO cl_abap_regex.
|
||||
DATA mt_buffer TYPE string_table.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_indent_context,
|
||||
no_indent_jscss TYPE abap_bool,
|
||||
within_style TYPE abap_bool,
|
||||
within_js TYPE abap_bool,
|
||||
indent TYPE i,
|
||||
indent_str TYPE string,
|
||||
END OF ty_indent_context,
|
||||
|
||||
BEGIN OF ty_study_result,
|
||||
style_open TYPE abap_bool,
|
||||
style_close TYPE abap_bool,
|
||||
script_open TYPE abap_bool,
|
||||
script_close TYPE abap_bool,
|
||||
tag_close TYPE abap_bool,
|
||||
curly_close TYPE abap_bool,
|
||||
openings TYPE i,
|
||||
closings TYPE i,
|
||||
singles TYPE i,
|
||||
END OF ty_study_result.
|
||||
|
||||
METHODS indent_line
|
||||
CHANGING
|
||||
cs_context TYPE ty_indent_context
|
||||
cv_line TYPE string.
|
||||
|
||||
METHODS study_line
|
||||
IMPORTING
|
||||
iv_line TYPE string
|
||||
is_context TYPE ty_indent_context
|
||||
RETURNING VALUE(rs_result) TYPE ty_study_result.
|
||||
|
||||
ENDCLASS. "lcl_html DEFINITION
|
||||
|
||||
|
@ -62,26 +105,28 @@ CLASS lcl_html IMPLEMENTATION.
|
|||
|
||||
METHOD add.
|
||||
|
||||
DATA lo_type TYPE REF TO cl_abap_typedescr.
|
||||
DATA lo_html TYPE REF TO lcl_html.
|
||||
DATA: lv_type TYPE c,
|
||||
lo_html TYPE REF TO lcl_html.
|
||||
|
||||
lo_type = cl_abap_typedescr=>describe_by_data( iv_chunk ).
|
||||
FIELD-SYMBOLS: <tab> TYPE string_table,
|
||||
<str> LIKE LINE OF <tab>.
|
||||
|
||||
CASE lo_type->type_kind.
|
||||
WHEN cl_abap_typedescr=>typekind_char
|
||||
OR cl_abap_typedescr=>typekind_string.
|
||||
IF strlen( iv_chunk ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
_add_str( iv_chunk ).
|
||||
WHEN cl_abap_typedescr=>typekind_oref.
|
||||
DESCRIBE FIELD iv_chunk TYPE lv_type. " Describe is faster than RTTI classes
|
||||
|
||||
CASE lv_type.
|
||||
WHEN 'C' OR 'g'. " Char or string
|
||||
APPEND iv_chunk TO mt_buffer.
|
||||
WHEN 'h'. " Table
|
||||
ASSIGN iv_chunk TO <tab>. " Assuming table of strings ! Will dump otherwise
|
||||
APPEND LINES OF <tab> TO mt_buffer.
|
||||
WHEN 'r'. " Object ref
|
||||
ASSERT iv_chunk IS BOUND. " Dev mistake
|
||||
TRY.
|
||||
lo_html ?= iv_chunk.
|
||||
CATCH cx_sy_move_cast_error.
|
||||
ASSERT 1 = 0. " Dev mistake
|
||||
ENDTRY.
|
||||
_add_htm( lo_html ).
|
||||
APPEND LINES OF lo_html->mt_buffer TO mt_buffer.
|
||||
WHEN OTHERS.
|
||||
ASSERT 1 = 0. " Dev mistake
|
||||
ENDCASE.
|
||||
|
@ -89,94 +134,153 @@ CLASS lcl_html IMPLEMENTATION.
|
|||
ENDMETHOD. " add
|
||||
|
||||
METHOD reset.
|
||||
CLEAR: me->mv_html, me->mv_indent.
|
||||
CLEAR me->mt_buffer.
|
||||
ENDMETHOD. "reset
|
||||
|
||||
METHOD _add_str.
|
||||
METHOD is_empty.
|
||||
rv_yes = boolc( lines( mt_buffer ) = 0 ).
|
||||
ENDMETHOD. "is_empty
|
||||
|
||||
CONSTANTS lc_single_tags_re TYPE string " HTML5 singleton tags
|
||||
VALUE '<(area|base|br|col|command|embed|hr|img|input|link|meta|param|source|!)'.
|
||||
METHOD class_constructor.
|
||||
CREATE OBJECT go_single_tags_re
|
||||
EXPORTING
|
||||
pattern = '<(AREA|BASE|BR|COL|COMMAND|EMBED|HR|IMG|INPUT|LINK|META|PARAM|SOURCE|!)'
|
||||
ignore_case = abap_false.
|
||||
ENDMETHOD. "class_constructor
|
||||
|
||||
DATA lv_tags TYPE i.
|
||||
DATA lv_tags_open TYPE i.
|
||||
DATA lv_tags_close TYPE i.
|
||||
DATA lv_tags_single TYPE i.
|
||||
DATA lv_close_offs TYPE i.
|
||||
DATA lv_shift_back TYPE i.
|
||||
DATA lv_style_tag_open TYPE i.
|
||||
DATA lv_style_tag_close TYPE i.
|
||||
DATA lv_js_tag_open TYPE i.
|
||||
DATA lv_js_tag_close TYPE i.
|
||||
DATA lv_curly TYPE i.
|
||||
METHOD study_line.
|
||||
|
||||
DATA: lv_line TYPE string,
|
||||
lv_len TYPE i.
|
||||
|
||||
lv_line = to_upper( shift_left( val = iv_line sub = ` ` ) ).
|
||||
lv_len = strlen( lv_line ).
|
||||
|
||||
" Some assumptions for simplification and speed
|
||||
" - style & scripts tag should be opened/closed in a separate line
|
||||
" - style & scripts opening and closing in one line is possible but only once
|
||||
|
||||
" TODO & Issues
|
||||
" - What if the string IS a well formed html already not just single line ?
|
||||
|
||||
IF is_context-within_js = abap_true OR is_context-within_style = abap_true.
|
||||
|
||||
IF is_context-within_js = abap_true AND lv_len >= 8 AND lv_line(8) = '</SCRIPT'.
|
||||
rs_result-script_close = abap_true.
|
||||
ELSEIF is_context-within_style = abap_true AND lv_len >= 7 AND lv_line(7) = '</STYLE'.
|
||||
rs_result-style_close = abap_true.
|
||||
ENDIF.
|
||||
|
||||
IF is_context-no_indent_jscss = abap_false.
|
||||
IF lv_len >= 1 AND lv_line(1) = '}'.
|
||||
rs_result-curly_close = abap_true.
|
||||
ENDIF.
|
||||
|
||||
FIND ALL OCCURRENCES OF '{' IN lv_line MATCH COUNT rs_result-openings.
|
||||
FIND ALL OCCURRENCES OF '}' IN lv_line MATCH COUNT rs_result-closings.
|
||||
ENDIF.
|
||||
|
||||
ELSE.
|
||||
IF lv_len >= 7 AND lv_line(7) = '<SCRIPT'.
|
||||
FIND FIRST OCCURRENCE OF '</SCRIPT' IN lv_line.
|
||||
IF sy-subrc > 0. " Not found
|
||||
rs_result-script_open = abap_true.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
IF lv_len >= 6 AND lv_line(6) = '<STYLE'.
|
||||
FIND FIRST OCCURRENCE OF '</STYLE' IN lv_line.
|
||||
IF sy-subrc > 0. " Not found
|
||||
rs_result-style_open = abap_true.
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
IF lv_len >= 2 AND lv_line(2) = '</'.
|
||||
rs_result-tag_close = abap_true.
|
||||
ENDIF.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<' IN lv_line MATCH COUNT rs_result-openings.
|
||||
FIND ALL OCCURRENCES OF '</' IN lv_line MATCH COUNT rs_result-closings.
|
||||
FIND ALL OCCURRENCES OF REGEX go_single_tags_re IN lv_line MATCH COUNT rs_result-singles.
|
||||
rs_result-openings = rs_result-openings - rs_result-closings - rs_result-singles.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '</' IN iv_str MATCH OFFSET lv_close_offs.
|
||||
IF sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0. " Found close tag @beginning
|
||||
lv_shift_back = 1.
|
||||
ENDIF.
|
||||
|
||||
FIND FIRST OCCURRENCE OF '}' IN iv_str MATCH OFFSET lv_close_offs. " Find close } @beginning
|
||||
IF ( mv_within_style > 0 OR mv_within_js > 0 )
|
||||
AND sy-subrc = 0 AND lv_close_offs = 0 AND mv_indent > 0.
|
||||
lv_shift_back = 1.
|
||||
ENDMETHOD. "study_line
|
||||
|
||||
METHOD indent_line.
|
||||
|
||||
DATA: ls_study TYPE ty_study_result,
|
||||
lv_x_str TYPE string.
|
||||
|
||||
ls_study = study_line(
|
||||
is_context = cs_context
|
||||
iv_line = cv_line ).
|
||||
|
||||
" First closing tag - shift back exceptionally
|
||||
IF ( ls_study-script_close = abap_true
|
||||
OR ls_study-style_close = abap_true
|
||||
OR ls_study-curly_close = abap_true
|
||||
OR ls_study-tag_close = abap_true )
|
||||
AND cs_context-indent > 0.
|
||||
lv_x_str = repeat( val = ` ` occ = ( cs_context-indent - 1 ) * c_indent_size ).
|
||||
cv_line = lv_x_str && cv_line.
|
||||
ELSE.
|
||||
cv_line = cs_context-indent_str && cv_line.
|
||||
ENDIF.
|
||||
|
||||
mv_html = mv_html
|
||||
&& repeat( val = ` ` occ = ( mv_indent - lv_shift_back ) * c_indent_size )
|
||||
&& iv_str
|
||||
&& gc_newline.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<' IN iv_str MATCH COUNT lv_tags.
|
||||
FIND ALL OCCURRENCES OF '</' IN iv_str MATCH COUNT lv_tags_close.
|
||||
FIND ALL OCCURRENCES OF REGEX lc_single_tags_re IN iv_str MATCH COUNT lv_tags_single.
|
||||
|
||||
lv_tags_open = lv_tags - lv_tags_close - lv_tags_single.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<style' IN iv_str MATCH COUNT lv_style_tag_open IGNORING CASE.
|
||||
FIND ALL OCCURRENCES OF '</style>' IN iv_str MATCH COUNT lv_style_tag_close IGNORING CASE.
|
||||
mv_within_style = mv_within_style + lv_style_tag_open - lv_style_tag_close.
|
||||
|
||||
FIND ALL OCCURRENCES OF '<script' IN iv_str MATCH COUNT lv_js_tag_open IGNORING CASE.
|
||||
FIND ALL OCCURRENCES OF '</script>' IN iv_str MATCH COUNT lv_js_tag_close IGNORING CASE.
|
||||
mv_within_js = mv_within_js + lv_js_tag_open - lv_js_tag_close.
|
||||
|
||||
IF mv_within_style > 0 OR mv_within_js > 0.
|
||||
FIND ALL OCCURRENCES OF '{' IN iv_str MATCH COUNT lv_curly.
|
||||
lv_tags_open = lv_tags_open + lv_curly.
|
||||
FIND ALL OCCURRENCES OF '}' IN iv_str MATCH COUNT lv_curly.
|
||||
lv_tags_close = lv_tags_close + lv_curly.
|
||||
ENDIF.
|
||||
" Context status update
|
||||
CASE abap_true.
|
||||
WHEN ls_study-script_open.
|
||||
cs_context-within_js = abap_true.
|
||||
cs_context-within_style = abap_false.
|
||||
WHEN ls_study-style_open.
|
||||
cs_context-within_js = abap_false.
|
||||
cs_context-within_style = abap_true.
|
||||
WHEN ls_study-script_close OR ls_study-style_close.
|
||||
cs_context-within_js = abap_false.
|
||||
cs_context-within_style = abap_false.
|
||||
ls_study-closings = ls_study-closings + 1.
|
||||
ENDCASE.
|
||||
|
||||
" More-less logic chosen due to possible double tags in a line '<a><b>'
|
||||
IF lv_tags_open > lv_tags_close.
|
||||
mv_indent = mv_indent + 1.
|
||||
ELSEIF lv_tags_open < lv_tags_close AND mv_indent > 0.
|
||||
mv_indent = mv_indent - 1.
|
||||
IF ls_study-openings <> ls_study-closings.
|
||||
IF ls_study-openings > ls_study-closings.
|
||||
cs_context-indent = cs_context-indent + 1.
|
||||
ELSEIF cs_context-indent > 0. " AND ls_study-openings < ls_study-closings
|
||||
cs_context-indent = cs_context-indent - 1.
|
||||
ENDIF.
|
||||
cs_context-indent_str = repeat( val = ` ` occ = cs_context-indent * c_indent_size ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. "_add_str
|
||||
ENDMETHOD. "indent_line
|
||||
|
||||
METHOD _add_htm.
|
||||
METHOD render.
|
||||
|
||||
DATA lt_strtab TYPE TABLE OF string.
|
||||
DATA lv_str TYPE string.
|
||||
DATA: ls_context TYPE ty_indent_context,
|
||||
lt_temp TYPE string_table.
|
||||
|
||||
SPLIT io_html->mv_html AT gc_newline INTO TABLE lt_strtab.
|
||||
LOOP AT lt_strtab INTO lv_str.
|
||||
SHIFT lv_str LEFT DELETING LEADING space.
|
||||
_add_str( lv_str ).
|
||||
FIELD-SYMBOLS: <line> LIKE LINE OF lt_temp,
|
||||
<line_c> LIKE LINE OF lt_temp.
|
||||
|
||||
ls_context-no_indent_jscss = iv_no_indent_jscss.
|
||||
|
||||
LOOP AT mt_buffer ASSIGNING <line>.
|
||||
APPEND <line> TO lt_temp ASSIGNING <line_c>.
|
||||
indent_line( CHANGING cs_context = ls_context cv_line = <line_c> ).
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. "_add_htm
|
||||
CONCATENATE LINES OF lt_temp INTO rv_html SEPARATED BY gc_newline.
|
||||
|
||||
ENDMETHOD. "render
|
||||
|
||||
METHOD add_a.
|
||||
|
||||
_add_str( a( iv_txt = iv_txt
|
||||
iv_act = iv_act
|
||||
iv_typ = iv_typ
|
||||
iv_opt = iv_opt
|
||||
iv_class = iv_class
|
||||
iv_id = iv_id
|
||||
iv_style = iv_style ) ).
|
||||
add( a( iv_txt = iv_txt
|
||||
iv_act = iv_act
|
||||
iv_typ = iv_typ
|
||||
iv_opt = iv_opt
|
||||
iv_class = iv_class
|
||||
iv_id = iv_id
|
||||
iv_style = iv_style ) ).
|
||||
|
||||
ENDMETHOD. "add_a
|
||||
|
||||
|
@ -228,10 +332,10 @@ CLASS lcl_html IMPLEMENTATION.
|
|||
|
||||
METHOD add_icon.
|
||||
|
||||
_add_str( icon( iv_name = iv_name
|
||||
iv_class = iv_class
|
||||
iv_alt = iv_alt
|
||||
iv_hint = iv_hint ) ).
|
||||
add( icon( iv_name = iv_name
|
||||
iv_class = iv_class
|
||||
iv_alt = iv_alt
|
||||
iv_hint = iv_hint ) ).
|
||||
|
||||
ENDMETHOD. "add_icon
|
||||
|
||||
|
|
|
@ -173,7 +173,7 @@ CLASS lcl_gui_page IMPLEMENTATION.
|
|||
|
||||
lo_script = scripts( ).
|
||||
|
||||
IF lo_script IS BOUND AND lo_script->mv_html IS NOT INITIAL.
|
||||
IF lo_script IS BOUND AND lo_script->is_empty( ) = abap_false.
|
||||
ro_html->add( '<script type="text/javascript">' ).
|
||||
ro_html->add( lo_script ).
|
||||
ro_html->add( 'debugOutput("js: OK");' ).
|
||||
|
|
|
@ -363,7 +363,6 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
|
|||
METHOD constructor.
|
||||
super->constructor( ).
|
||||
ms_control-page_title = 'BRANCH_OVERVIEW'.
|
||||
ms_control-page_menu = build_menu( ).
|
||||
mo_repo = io_repo.
|
||||
refresh( ).
|
||||
ENDMETHOD.
|
||||
|
@ -429,6 +428,9 @@ CLASS lcl_gui_page_branch_overview IMPLEMENTATION.
|
|||
|
||||
ro_html->add( render_merge( ) ).
|
||||
|
||||
ro_html->add( '<br>' ).
|
||||
ro_html->add( build_menu( )->render( ) ).
|
||||
|
||||
* see http://stackoverflow.com/questions/6081483/maximum-size-of-a-canvas-element
|
||||
_add '<canvas id="gitGraph"></canvas>'.
|
||||
|
||||
|
|
|
@ -26,9 +26,11 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
|||
|
||||
METHOD render_content.
|
||||
|
||||
DATA: lv_data TYPE lcl_persistence_db=>ty_content-data_str,
|
||||
ls_action TYPE lcl_persistence_db=>ty_content,
|
||||
lv_action TYPE string.
|
||||
DATA:
|
||||
lo_highlighter TYPE REF TO lcl_syntax_highlighter,
|
||||
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(
|
||||
|
@ -37,13 +39,14 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
|||
CATCH lcx_not_found ##NO_HANDLER.
|
||||
ENDTRY.
|
||||
|
||||
" Create syntax highlighter
|
||||
lo_highlighter = lcl_syntax_highlighter=>create( '*.xml' ).
|
||||
|
||||
ls_action-type = ms_key-type.
|
||||
ls_action-value = ms_key-value.
|
||||
lv_action = lcl_html_action_utils=>dbkey_encode( ls_action ).
|
||||
|
||||
lv_data = lcl_xml_pretty=>print( lv_data ).
|
||||
lv_data = escape( val = lv_data
|
||||
format = cl_abap_format=>e_html_attr ).
|
||||
lv_data = lo_highlighter->process_line( lv_data ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
|
@ -59,7 +62,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
|||
ro_html->add_a( iv_txt = 'Edit' iv_act = |{ gc_action-db_edit }?{ lv_action }| ).
|
||||
ro_html->add( '</td></tr></table>' ).
|
||||
|
||||
ro_html->add( |<pre>{ lv_data }</pre>| ).
|
||||
ro_html->add( |<pre class="syntax-hl">{ lv_data }</pre>| ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_content
|
||||
|
@ -185,12 +188,15 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
|
|||
ro_html->add( '<table class="db_tab">' ).
|
||||
|
||||
" Header
|
||||
ro_html->add( '<thead>' ).
|
||||
ro_html->add( '<tr>' ).
|
||||
ro_html->add( '<th>Type</th>' ).
|
||||
ro_html->add( '<th>Key</th>' ).
|
||||
ro_html->add( '<th>Data</th>' ).
|
||||
ro_html->add( '<th></th>' ).
|
||||
ro_html->add( '</tr>' ).
|
||||
ro_html->add( '</thead>' ).
|
||||
ro_html->add( '<tbody>' ).
|
||||
|
||||
" Lines
|
||||
LOOP AT lt_data ASSIGNING <ls_data>.
|
||||
|
@ -216,6 +222,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
|
|||
ro_html->add( '</tr>' ).
|
||||
ENDLOOP.
|
||||
|
||||
ro_html->add( '</tbody>' ).
|
||||
ro_html->add( '</table>' ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
|
|
|
@ -85,7 +85,7 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
|
|||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
rv_html = |</p>Supported objects: { lv_list }</p>|.
|
||||
rv_html = |<p>Supported objects: { lv_list }</p>|.
|
||||
|
||||
ENDMETHOD. " render_supported_object_types
|
||||
|
||||
|
|
|
@ -239,7 +239,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
" Content
|
||||
ro_html->add( '<div class="diff_content">' ). "#EC NOTEXT
|
||||
ro_html->add( '<table class="diff_tab">' ). "#EC NOTEXT
|
||||
ro_html->add( '<table class="diff_tab syntax-hl">' ). "#EC NOTEXT
|
||||
ro_html->add( render_table_head( ) ).
|
||||
ro_html->add( render_lines( is_diff ) ).
|
||||
ro_html->add( '</table>' ). "#EC NOTEXT
|
||||
|
|
|
@ -33,9 +33,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page.
|
|||
RAISING lcx_exception,
|
||||
build_main_menu
|
||||
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar,
|
||||
render_explore
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
|
||||
RAISING lcx_exception,
|
||||
render_repo
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html
|
||||
|
@ -136,9 +133,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ro_html->add( render_toc( lt_repos ) ).
|
||||
|
||||
IF lines( lt_repos ) = 0 AND lx_error IS INITIAL.
|
||||
ro_html->add( render_explore( ) ).
|
||||
ELSEIF mv_show IS INITIAL.
|
||||
IF mv_show IS INITIAL OR lines( lt_repos ) = 0.
|
||||
CREATE OBJECT lo_tutorial.
|
||||
ro_html->add( lo_tutorial->render( ) ).
|
||||
ELSE.
|
||||
|
@ -310,22 +305,6 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_toc
|
||||
|
||||
METHOD render_explore.
|
||||
|
||||
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lo_toolbar->add( iv_txt = 'Explore new projects'
|
||||
iv_act = gc_action-go_explore ) ##NO_TEXT.
|
||||
|
||||
ro_html->add( '<div class="dummydiv">' ).
|
||||
ro_html->add( lo_toolbar->render( ) ).
|
||||
ro_html->add( '</div>' ).
|
||||
|
||||
ENDMETHOD. "render_explore
|
||||
|
||||
METHOD render_repo.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
|
|
@ -151,12 +151,14 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
LOOP AT ms_files-local ASSIGNING <ls_local>.
|
||||
AT FIRST.
|
||||
ro_html->add('<thead><tr>').
|
||||
ro_html->add('<th></th><th colspan="2">LOCAL</th><th>' ).
|
||||
ro_html->add('<th></th><th colspan="2">LOCAL</th>' ).
|
||||
ro_html->add('<th>' ).
|
||||
IF lines( ms_files-local ) > 1.
|
||||
ro_html->add_a( iv_txt = |{ lines( ms_files-local ) } diffs|
|
||||
iv_act = |{ gc_action-go_diff }?key={ mo_repo->get_key( ) }| ).
|
||||
ENDIF.
|
||||
ro_html->add('</th></tr></thead>').
|
||||
ro_html->add('</th>').
|
||||
ro_html->add('</tr></thead>').
|
||||
ro_html->add('<tbody class="local">').
|
||||
ENDAT.
|
||||
|
||||
|
|
|
@ -98,20 +98,21 @@ CLASS lcl_persistence_repo DEFINITION FINAL.
|
|||
TYPES: ty_local_checksum_tt TYPE STANDARD TABLE OF ty_local_checksum WITH DEFAULT KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_repo_xml,
|
||||
url TYPE string,
|
||||
branch_name TYPE string,
|
||||
sha1 TYPE ty_sha1,
|
||||
package TYPE devclass,
|
||||
offline TYPE sap_bool,
|
||||
local_checksums TYPE ty_local_checksum_tt,
|
||||
master_language TYPE spras,
|
||||
head_branch TYPE string, " HEAD symref of the repo, master branch
|
||||
write_protect TYPE sap_bool, " Deny destructive ops: pull, switch branch ...
|
||||
url TYPE string,
|
||||
branch_name TYPE string,
|
||||
sha1 TYPE ty_sha1,
|
||||
package TYPE devclass,
|
||||
offline TYPE sap_bool,
|
||||
local_checksums TYPE ty_local_checksum_tt,
|
||||
master_language TYPE spras,
|
||||
head_branch TYPE string, " HEAD symref of the repo, master branch
|
||||
write_protect TYPE sap_bool, " Deny destructive ops: pull, switch branch ...
|
||||
ignore_subpackages TYPE sap_bool,
|
||||
END OF ty_repo_xml.
|
||||
|
||||
TYPES: BEGIN OF ty_repo,
|
||||
key TYPE lcl_persistence_db=>ty_value.
|
||||
INCLUDE TYPE ty_repo_xml.
|
||||
INCLUDE TYPE ty_repo_xml.
|
||||
TYPES: END OF ty_repo.
|
||||
TYPES: tt_repo TYPE STANDARD TABLE OF ty_repo WITH DEFAULT KEY.
|
||||
TYPES: tt_repo_keys TYPE STANDARD TABLE OF ty_repo-key WITH DEFAULT KEY.
|
||||
|
@ -222,7 +223,7 @@ CLASS lcl_persistence_background DEFINITION FINAL.
|
|||
|
||||
TYPES: BEGIN OF ty_background,
|
||||
key TYPE lcl_persistence_db=>ty_value.
|
||||
INCLUDE TYPE ty_xml.
|
||||
INCLUDE TYPE ty_xml.
|
||||
TYPES: END OF ty_background.
|
||||
TYPES: tt_background TYPE STANDARD TABLE OF ty_background WITH DEFAULT KEY.
|
||||
|
||||
|
|
|
@ -61,12 +61,14 @@ CLASS lcl_popups DEFINITION FINAL.
|
|||
RETURNING VALUE(rv_answer) TYPE char1
|
||||
RAISING lcx_exception,
|
||||
popup_to_inform
|
||||
IMPORTING
|
||||
titlebar TYPE clike
|
||||
text_message TYPE clike
|
||||
RAISING lcx_exception.
|
||||
|
||||
|
||||
IMPORTING
|
||||
titlebar TYPE clike
|
||||
text_message TYPE clike
|
||||
RAISING lcx_exception,
|
||||
popup_to_create_package
|
||||
EXPORTING es_package_data TYPE scompkdtln
|
||||
ev_create TYPE boolean
|
||||
RAISING lcx_exception.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_popups IMPLEMENTATION.
|
||||
|
@ -241,7 +243,10 @@ CLASS lcl_popups IMPLEMENTATION.
|
|||
METHOD repo_new_offline.
|
||||
|
||||
DATA: lv_returncode TYPE c,
|
||||
lt_fields TYPE TABLE OF sval.
|
||||
lt_fields TYPE TABLE OF sval,
|
||||
lv_icon_ok TYPE icon-name,
|
||||
lv_button1 TYPE svalbutton-buttontext,
|
||||
lv_icon1 TYPE icon-name.
|
||||
|
||||
FIELD-SYMBOLS: <ls_field> LIKE LINE OF lt_fields.
|
||||
|
||||
|
@ -250,17 +255,28 @@ CLASS lcl_popups IMPLEMENTATION.
|
|||
_add_dialog_fld 'ABAPTXT255' 'LINE' 'Name' '' ''.
|
||||
_add_dialog_fld 'TDEVC' 'DEVCLASS' 'Package' '' ''.
|
||||
|
||||
CALL FUNCTION 'POPUP_GET_VALUES'
|
||||
lv_icon_ok = icon_okay.
|
||||
lv_button1 = 'Create package' ##NO_TEXT.
|
||||
lv_icon1 = icon_folder.
|
||||
|
||||
CALL FUNCTION 'POPUP_GET_VALUES_USER_BUTTONS'
|
||||
EXPORTING
|
||||
no_value_check = abap_true
|
||||
popup_title = 'New Offline Project' "#EC NOTEXT
|
||||
popup_title = 'New Offline Project'
|
||||
programname = sy-repid
|
||||
formname = 'PACKAGE_POPUP'
|
||||
ok_pushbuttontext = ''
|
||||
icon_ok_push = lv_icon_ok
|
||||
first_pushbutton = lv_button1
|
||||
icon_button_1 = lv_icon1
|
||||
second_pushbutton = ''
|
||||
icon_button_2 = ''
|
||||
IMPORTING
|
||||
returncode = lv_returncode
|
||||
returncode = lv_returncode
|
||||
TABLES
|
||||
fields = lt_fields
|
||||
fields = lt_fields
|
||||
EXCEPTIONS
|
||||
error_in_fields = 1
|
||||
OTHERS = 2.
|
||||
error_in_fields = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'Error from POPUP_GET_VALUES' ).
|
||||
ENDIF.
|
||||
|
@ -482,4 +498,29 @@ CLASS lcl_popups IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. " popup_to_inform.
|
||||
|
||||
METHOD popup_to_create_package.
|
||||
CALL FUNCTION 'FUNCTION_EXISTS'
|
||||
EXPORTING
|
||||
funcname = 'PB_POPUP_PACKAGE_CREATE'
|
||||
EXCEPTIONS
|
||||
function_not_exist = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc = 1.
|
||||
* looks like the function module used does not exist on all
|
||||
* versions since 702, so show an error
|
||||
lcx_exception=>raise( 'Function module PB_POPUP_PACKAGE_CREATE does not exist' ).
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'PB_POPUP_PACKAGE_CREATE'
|
||||
CHANGING
|
||||
p_object_data = es_package_data
|
||||
EXCEPTIONS
|
||||
action_cancelled = 1.
|
||||
IF sy-subrc = 0.
|
||||
ev_create = abap_true.
|
||||
ELSE.
|
||||
ev_create = abap_false.
|
||||
ENDIF.
|
||||
ENDMETHOD. " popup_to_create_package
|
||||
|
||||
ENDCLASS.
|
||||
|
|
|
@ -34,6 +34,8 @@ CLASS lcl_repo DEFINITION ABSTRACT FRIENDS lcl_repo_srv.
|
|||
RETURNING VALUE(rv_language) TYPE spras,
|
||||
is_write_protected
|
||||
RETURNING VALUE(rv_yes) TYPE sap_bool,
|
||||
ignore_subpackages
|
||||
RETURNING VALUE(rv_yes) TYPE sap_bool,
|
||||
delete
|
||||
RAISING lcx_exception,
|
||||
get_dot_abapgit
|
||||
|
|
|
@ -508,8 +508,8 @@ CLASS lcl_repo IMPLEMENTATION.
|
|||
lt_cache TYPE SORTED TABLE OF ty_file_item
|
||||
WITH NON-UNIQUE KEY item.
|
||||
|
||||
DATA: lt_filter TYPE SORTED TABLE OF tadir
|
||||
WITH NON-UNIQUE KEY object obj_name,
|
||||
DATA: lt_filter TYPE SORTED TABLE OF tadir
|
||||
WITH NON-UNIQUE KEY object obj_name,
|
||||
lv_filter_exist TYPE abap_bool.
|
||||
|
||||
FIELD-SYMBOLS: <ls_file> LIKE LINE OF lt_files,
|
||||
|
@ -535,7 +535,9 @@ CLASS lcl_repo IMPLEMENTATION.
|
|||
iv_data = <ls_return>-file-data ).
|
||||
|
||||
lt_cache = mt_local.
|
||||
lt_tadir = lcl_tadir=>read( get_package( ) ).
|
||||
lt_tadir = lcl_tadir=>read(
|
||||
iv_package = get_package( )
|
||||
iv_ignore_subpackages = ignore_subpackages( ) ).
|
||||
|
||||
lt_filter = it_filter.
|
||||
lv_filter_exist = boolc( lines( lt_filter ) > 0 ) .
|
||||
|
@ -655,17 +657,22 @@ CLASS lcl_repo IMPLEMENTATION.
|
|||
rv_yes = ms_data-write_protect.
|
||||
ENDMETHOD. "is_write_protected
|
||||
|
||||
METHOD ignore_subpackages.
|
||||
rv_yes = ms_data-ignore_subpackages.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD rebuild_local_checksums. "LOCAL (BASE)
|
||||
|
||||
DATA: lt_local TYPE ty_files_item_tt,
|
||||
ls_last_item TYPE ty_item,
|
||||
lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt.
|
||||
DATA: lt_local TYPE ty_files_item_tt,
|
||||
ls_last_item TYPE ty_item,
|
||||
lt_checksums TYPE lcl_persistence_repo=>ty_local_checksum_tt.
|
||||
|
||||
FIELD-SYMBOLS: <ls_checksum> LIKE LINE OF lt_checksums,
|
||||
<ls_file_sig> LIKE LINE OF <ls_checksum>-files,
|
||||
<ls_local> LIKE LINE OF lt_local.
|
||||
|
||||
lt_local = get_files_local( ).
|
||||
|
||||
lt_local = get_files_local( ).
|
||||
|
||||
DELETE lt_local " Remove non-code related files except .abapgit
|
||||
WHERE item IS INITIAL
|
||||
|
|
|
@ -201,7 +201,7 @@ CLASS lcl_services_git IMPLEMENTATION.
|
|||
ls_comment-comment = is_commit-comment.
|
||||
|
||||
IF NOT is_commit-body IS INITIAL.
|
||||
CONCATENATE ls_comment-comment is_commit-body
|
||||
CONCATENATE ls_comment-comment '' is_commit-body
|
||||
INTO ls_comment-comment SEPARATED BY gc_newline.
|
||||
ENDIF.
|
||||
|
||||
|
|
|
@ -12,8 +12,9 @@ CLASS lcl_tadir DEFINITION FINAL.
|
|||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
read
|
||||
IMPORTING iv_package TYPE tadir-devclass
|
||||
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
|
||||
IMPORTING iv_package TYPE tadir-devclass
|
||||
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
|
||||
RAISING lcx_exception,
|
||||
read_single
|
||||
IMPORTING iv_pgmid TYPE tadir-pgmid DEFAULT 'R3TR'
|
||||
|
@ -33,9 +34,10 @@ CLASS lcl_tadir DEFINITION FINAL.
|
|||
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
|
||||
RAISING lcx_exception,
|
||||
build
|
||||
IMPORTING iv_package TYPE tadir-devclass
|
||||
iv_path TYPE string
|
||||
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
|
||||
IMPORTING iv_package TYPE tadir-devclass
|
||||
iv_path TYPE string
|
||||
iv_ignore_subpackages TYPE abap_bool DEFAULT abap_false
|
||||
RETURNING VALUE(rt_tadir) TYPE ty_tadir_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_tadir DEFINITION
|
||||
|
@ -110,8 +112,9 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
METHOD read.
|
||||
|
||||
* start recursion
|
||||
rt_tadir = build( iv_package = iv_package
|
||||
iv_path = '' ).
|
||||
rt_tadir = build( iv_package = iv_package
|
||||
iv_path = ''
|
||||
iv_ignore_subpackages = iv_ignore_subpackages ).
|
||||
|
||||
rt_tadir = check_exists( rt_tadir ).
|
||||
|
||||
|
@ -161,9 +164,12 @@ CLASS lcl_tadir IMPLEMENTATION.
|
|||
ENDLOOP.
|
||||
|
||||
* look for subpackages
|
||||
SELECT * FROM tdevc INTO TABLE lt_tdevc
|
||||
WHERE parentcl = iv_package
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
IF iv_ignore_subpackages = abap_false.
|
||||
SELECT * FROM tdevc INTO TABLE lt_tdevc
|
||||
WHERE parentcl = iv_package
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_tdevc ASSIGNING <ls_tdevc>.
|
||||
lv_len = strlen( iv_package ).
|
||||
IF <ls_tdevc>-devclass(lv_len) <> iv_package.
|
||||
|
|
|
@ -11,9 +11,9 @@ CLASS lcl_transport DEFINITION FINAL.
|
|||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
popup
|
||||
RETURNING VALUE(rv_trkorr) TYPE e070-trkorr,
|
||||
RETURNING VALUE(rt_trkorr) TYPE trwbo_request_headers,
|
||||
read_requests
|
||||
IMPORTING iv_trkorr TYPE e070-trkorr
|
||||
IMPORTING it_trkorr TYPE trwbo_request_headers
|
||||
RETURNING VALUE(rt_requests) TYPE trwbo_requests
|
||||
RAISING lcx_exception,
|
||||
find_top_package
|
||||
|
@ -30,20 +30,19 @@ CLASS lcl_transport IMPLEMENTATION.
|
|||
|
||||
METHOD zip.
|
||||
|
||||
DATA: lt_requests TYPE trwbo_requests,
|
||||
lt_tadir TYPE scts_tadir,
|
||||
lv_package TYPE devclass,
|
||||
ls_data TYPE lcl_persistence_repo=>ty_repo,
|
||||
lo_repo TYPE REF TO lcl_repo_offline,
|
||||
lv_trkorr TYPE e070-trkorr.
|
||||
DATA: lt_requests TYPE trwbo_requests,
|
||||
lt_tadir TYPE scts_tadir,
|
||||
lv_package TYPE devclass,
|
||||
ls_data TYPE lcl_persistence_repo=>ty_repo,
|
||||
lo_repo TYPE REF TO lcl_repo_offline,
|
||||
lt_trkorr TYPE trwbo_request_headers.
|
||||
|
||||
|
||||
lv_trkorr = popup( ).
|
||||
IF lv_trkorr IS INITIAL.
|
||||
lt_trkorr = popup( ).
|
||||
IF lines( lt_trkorr ) = 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lt_requests = read_requests( lv_trkorr ).
|
||||
lt_requests = read_requests( lt_trkorr ).
|
||||
lt_tadir = resolve( lt_requests ).
|
||||
IF lines( lt_tadir ) = 0.
|
||||
lcx_exception=>raise( 'empty transport' ).
|
||||
|
@ -101,31 +100,60 @@ CLASS lcl_transport IMPLEMENTATION.
|
|||
ENDMETHOD.
|
||||
|
||||
METHOD popup.
|
||||
DATA: lrs_trfunction TYPE trsel_trs_function,
|
||||
lv_types TYPE string,
|
||||
ls_ranges TYPE trsel_ts_ranges.
|
||||
|
||||
CALL FUNCTION 'TR_F4_REQUESTS'
|
||||
" Fill all request types
|
||||
lv_types = 'KWTCOEMPDRSXQFG'.
|
||||
lrs_trfunction-sign = 'I'.
|
||||
lrs_trfunction-option = 'EQ'.
|
||||
WHILE lv_types NE space.
|
||||
lrs_trfunction-low = lv_types(1).
|
||||
APPEND lrs_trfunction TO ls_ranges-request_funcs.
|
||||
SHIFT lv_types.
|
||||
ENDWHILE.
|
||||
|
||||
CALL FUNCTION 'TRINT_SELECT_REQUESTS'
|
||||
EXPORTING
|
||||
iv_username = sy-uname
|
||||
iv_trkorr_pattern = rv_trkorr
|
||||
iv_trfunctions = sctsc_types_all
|
||||
iv_trstatus = sctsc_states_changeable
|
||||
iv_username_pattern = sy-uname
|
||||
iv_via_selscreen = 'X'
|
||||
iv_complete_projects = ''
|
||||
* is_popup =
|
||||
iv_title = 'abapGit: Transport Request Selection'
|
||||
IMPORTING
|
||||
ev_selected_request = rv_trkorr.
|
||||
et_requests = rt_trkorr
|
||||
CHANGING
|
||||
cs_ranges = ls_ranges
|
||||
EXCEPTIONS
|
||||
action_aborted_by_user = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD read_requests.
|
||||
|
||||
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
|
||||
EXPORTING
|
||||
iv_trkorr = iv_trkorr
|
||||
IMPORTING
|
||||
et_requests = rt_requests
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from TR_READ_REQUEST_WITH_TASKS' ).
|
||||
ENDIF.
|
||||
DATA lt_requests LIKE rt_requests.
|
||||
FIELD-SYMBOLS <fs_trkorr> LIKE LINE OF it_trkorr.
|
||||
|
||||
LOOP AT it_trkorr ASSIGNING <fs_trkorr>.
|
||||
CALL FUNCTION 'TR_READ_REQUEST_WITH_TASKS'
|
||||
EXPORTING
|
||||
iv_trkorr = <fs_trkorr>-trkorr
|
||||
IMPORTING
|
||||
et_requests = lt_requests
|
||||
EXCEPTIONS
|
||||
invalid_input = 1
|
||||
OTHERS = 2.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'error from TR_READ_REQUEST_WITH_TASKS' ).
|
||||
ENDIF.
|
||||
|
||||
APPEND LINES OF lt_requests TO rt_requests.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
|
|
@ -1234,7 +1234,7 @@ CLASS ltcl_git_pack IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "lcl_abap_unit IMPLEMENTATION
|
||||
|
||||
CLASS ltcl_html_helper DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||
CLASS ltcl_html DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA: mo_html TYPE REF TO lcl_html.
|
||||
|
@ -1251,9 +1251,9 @@ CLASS ltcl_html_helper DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT
|
|||
last_line
|
||||
RETURNING VALUE(rv_line) TYPE string.
|
||||
|
||||
ENDCLASS.
|
||||
ENDCLASS. "ltcl_html
|
||||
|
||||
CLASS ltcl_html_helper IMPLEMENTATION.
|
||||
CLASS ltcl_html IMPLEMENTATION.
|
||||
|
||||
METHOD setup.
|
||||
CREATE OBJECT mo_html.
|
||||
|
@ -1261,49 +1261,73 @@ CLASS ltcl_html_helper IMPLEMENTATION.
|
|||
|
||||
METHOD indent1.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( 'hello world' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && gc_newline &&
|
||||
' hello world' && gc_newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = last_line( )
|
||||
exp = '</td>' ).
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD indent2.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( '<input name="comment" type="text">' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && gc_newline &&
|
||||
' <input name="comment" type="text">' && gc_newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = last_line( )
|
||||
exp = '</td>' ).
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD indent3.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( '<textarea name="body" rows="10" cols="72"></textarea>' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && gc_newline &&
|
||||
' <textarea name="body" rows="10" cols="72"></textarea>' && gc_newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = last_line( )
|
||||
exp = '</td>' ).
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD indent4.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<td>' ).
|
||||
mo_html->add( 'foo<br>bar' ).
|
||||
mo_html->add( '</td>' ).
|
||||
|
||||
lv_exp = '<td>' && gc_newline &&
|
||||
' foo<br>bar' && gc_newline &&
|
||||
'</td>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = last_line( )
|
||||
exp = '</td>' ).
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -1311,33 +1335,37 @@ CLASS ltcl_html_helper IMPLEMENTATION.
|
|||
|
||||
DATA: lt_strings TYPE STANDARD TABLE OF string WITH DEFAULT KEY.
|
||||
|
||||
SPLIT mo_html->mv_html AT gc_newline INTO TABLE lt_strings.
|
||||
|
||||
SPLIT mo_html->render( ) AT gc_newline INTO TABLE lt_strings.
|
||||
READ TABLE lt_strings INDEX lines( lt_strings ) INTO rv_line.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD style1.
|
||||
|
||||
DATA lv_exp TYPE string.
|
||||
|
||||
mo_html->add( '<style type="text/css">' ).
|
||||
mo_html->add( '.class1 { color: red }' ).
|
||||
mo_html->add( '.class2 {' ).
|
||||
mo_html->add( 'color: red' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = ' color: red' ).
|
||||
|
||||
mo_html->add( '}' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = ' }' ).
|
||||
|
||||
mo_html->add( '</style>' ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = last_line( ) exp = '</style>' ).
|
||||
lv_exp = '<style type="text/css">' && gc_newline &&
|
||||
' .class1 { color: red }' && gc_newline &&
|
||||
' .class2 {' && gc_newline &&
|
||||
' color: red' && gc_newline &&
|
||||
' }' && gc_newline &&
|
||||
'</style>'.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = mo_html->render( )
|
||||
exp = lv_exp ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
ENDCLASS.
|
||||
ENDCLASS. "ltcl_html
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
* CLASS ltcl_serialize DEFINITION
|
||||
|
|
|
@ -522,31 +522,26 @@ CLASS lcl_gui_view_repo_content IMPLEMENTATION.
|
|||
METHOD build_dir_jump_link.
|
||||
|
||||
DATA: lv_path TYPE string,
|
||||
lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html.
|
||||
lv_encode TYPE string.
|
||||
|
||||
lv_path = iv_path.
|
||||
REPLACE FIRST OCCURRENCE OF mv_cur_dir IN lv_path WITH ''.
|
||||
lv_encode = lcl_html_action_utils=>dir_encode( lv_path ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_a( iv_txt = lv_path iv_act = |{ c_actions-change_dir }?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
rv_html = lcl_html=>a( iv_txt = lv_path
|
||||
iv_act = |{ c_actions-change_dir }?{ lv_encode }| ).
|
||||
|
||||
ENDMETHOD. "build_dir_jump_link
|
||||
|
||||
METHOD build_obj_jump_link.
|
||||
|
||||
DATA: lv_encode TYPE string,
|
||||
lo_html TYPE REF TO lcl_html.
|
||||
DATA: lv_encode TYPE string.
|
||||
|
||||
lv_encode = lcl_html_action_utils=>jump_encode( iv_obj_type = is_item-obj_type
|
||||
iv_obj_name = is_item-obj_name ).
|
||||
|
||||
CREATE OBJECT lo_html.
|
||||
lo_html->add_a( iv_txt = |{ is_item-obj_name }|
|
||||
iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
||||
rv_html = lo_html->mv_html.
|
||||
rv_html = lcl_html=>a( iv_txt = |{ is_item-obj_name }|
|
||||
iv_act = |{ gc_action-jump }?{ lv_encode }| ).
|
||||
|
||||
ENDMETHOD. "build_obj_jump_link
|
||||
|
||||
|
|
|
@ -38,14 +38,21 @@ CLASS lcl_gui_view_tutorial IMPLEMENTATION.
|
|||
|
||||
_add '<h2>Adding and cloning repos</h2>'.
|
||||
_add '<p><ul>'.
|
||||
|
||||
_add `<li>To clone a remote repo (e.g. from github) click `.
|
||||
ro_html->add_a( iv_txt = '+ Clone' iv_act = gc_action-repo_clone ).
|
||||
_add ' from the top menu. This will copy a remote repo to your system.</li>'.
|
||||
|
||||
_add `<li>To add a local package as a repo click `.
|
||||
ro_html->add_a( iv_txt = '+ Offline' iv_act = gc_action-repo_newoffline ).
|
||||
_add ' from the top menu. This will track a repo which already exist in'.
|
||||
_add ' the system with abapGit. You''ll be able to attach it to remote origin'.
|
||||
_add ' or just serialize as a zip file</li>'.
|
||||
|
||||
_add `<li>Go `.
|
||||
ro_html->add_a( iv_txt = 'Explore' iv_act = gc_action-go_explore ).
|
||||
_add ' to find projects using abapGit</li>'.
|
||||
|
||||
_add '</ul></p>'.
|
||||
|
||||
_add '<h2>Repository list and favorites</h2>'.
|
||||
|
|
Loading…
Reference in New Issue
Block a user