mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-02 04:36:49 +08:00
UI diff page unified mode #442
CSS finetune page_diff refactor render_line split+unified plus-minus markers subsequent updated line output user param diff_unified
This commit is contained in:
parent
4f0f617a3e
commit
c8c7ce8471
|
@ -37,7 +37,7 @@ form input:focus, textarea:focus {
|
||||||
.grey { color: lightgrey !important; }
|
.grey { color: lightgrey !important; }
|
||||||
.darkgrey { color: #808080 !important; }
|
.darkgrey { color: #808080 !important; }
|
||||||
.attention { color: red !important; }
|
.attention { color: red !important; }
|
||||||
.blue { color: #5e8dc9; !important; }
|
.blue { color: #5e8dc9 !important; }
|
||||||
.red { color: red !important; }
|
.red { color: red !important; }
|
||||||
|
|
||||||
/* MODIFIERS */
|
/* MODIFIERS */
|
||||||
|
@ -415,8 +415,8 @@ span.diff_banner {
|
||||||
padding-right: 0.3em;
|
padding-right: 0.3em;
|
||||||
}
|
}
|
||||||
.diff_ins {
|
.diff_ins {
|
||||||
border-color: #7bea7b;
|
border-color: #abf2ab;
|
||||||
background-color: #d3f8d3;
|
background-color: #e0ffe0;
|
||||||
}
|
}
|
||||||
.diff_del {
|
.diff_del {
|
||||||
border-color: #ff667d;
|
border-color: #ff667d;
|
||||||
|
@ -500,21 +500,37 @@ table.diff_tab thead.nav_line th {
|
||||||
color: #bbb;
|
color: #bbb;
|
||||||
}
|
}
|
||||||
table.diff_tab td.num, th.num {
|
table.diff_tab td.num, th.num {
|
||||||
text-align: right;
|
width: 1%;
|
||||||
|
min-width: 2em;
|
||||||
|
padding-right: 8px;
|
||||||
|
padding-left: 8px;
|
||||||
|
text-align: right !important;
|
||||||
color: #ccc;
|
color: #ccc;
|
||||||
border-left: 1px solid #eee;
|
border-left: 1px solid #eee;
|
||||||
border-right: 1px solid #eee;
|
border-right: 1px solid #eee;
|
||||||
|
-ms-user-select: none;
|
||||||
|
user-select: none;
|
||||||
|
}
|
||||||
|
table.diff_tab td.num::before {
|
||||||
|
content: attr(line-num);
|
||||||
}
|
}
|
||||||
table.diff_tab code {
|
table.diff_tab code {
|
||||||
font-family: inherit;
|
font-family: inherit;
|
||||||
white-space: pre;
|
white-space: pre;
|
||||||
}
|
}
|
||||||
|
table.diff_tab td.code {
|
||||||
|
/* font-family: inherit; */
|
||||||
|
/* white-space: pre; */
|
||||||
|
word-wrap: break-word;
|
||||||
|
white-space: pre-wrap;
|
||||||
|
overflow: visible;
|
||||||
|
}
|
||||||
|
|
||||||
table.diff_tab code span.keyword { color: #0a69ce; }
|
table.diff_tab code span.keyword { color: #0a69ce; }
|
||||||
table.diff_tab code span.text { color: #48ce4f; }
|
table.diff_tab code span.text { color: #48ce4f; }
|
||||||
table.diff_tab code span.comment { color: #808080; font-style: italic; }
|
table.diff_tab code span.comment { color: #808080; font-style: italic; }
|
||||||
table.diff_tab code span.xml_tag { color: #3370e0; }
|
table.diff_tab code span.xml_tag { color: #457ce3; }
|
||||||
table.diff_tab code span.attr { color: #f20707; }
|
table.diff_tab code span.attr { color: #b777fb; }
|
||||||
table.diff_tab code span.attr_val { color: #7a02f9; }
|
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:first-child td { padding-top: 0.5em; }
|
||||||
|
|
|
@ -7,32 +7,40 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page.
|
||||||
PUBLIC SECTION.
|
PUBLIC SECTION.
|
||||||
|
|
||||||
CONSTANTS:
|
CONSTANTS:
|
||||||
BEGIN OF c_mod,
|
BEGIN OF c_fstate,
|
||||||
local TYPE char1 VALUE 'L',
|
local TYPE char1 VALUE 'L',
|
||||||
remote TYPE char1 VALUE 'R',
|
remote TYPE char1 VALUE 'R',
|
||||||
both TYPE char1 VALUE 'B',
|
both TYPE char1 VALUE 'B',
|
||||||
END OF c_mod.
|
END OF c_fstate.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_file_diff,
|
TYPES: BEGIN OF ty_file_diff,
|
||||||
filename TYPE string,
|
filename TYPE string,
|
||||||
lstate TYPE char1,
|
lstate TYPE char1,
|
||||||
rstate TYPE char1,
|
rstate TYPE char1,
|
||||||
mod TYPE char1, " Abstraction for shorter ifs
|
fstate TYPE char1, " FILE state - Abstraction for shorter ifs
|
||||||
o_diff TYPE REF TO lcl_diff,
|
o_diff TYPE REF TO lcl_diff,
|
||||||
END OF ty_file_diff,
|
END OF ty_file_diff,
|
||||||
tt_file_diff TYPE STANDARD TABLE OF ty_file_diff.
|
tt_file_diff TYPE STANDARD TABLE OF ty_file_diff.
|
||||||
|
|
||||||
METHODS: constructor
|
METHODS:
|
||||||
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
constructor
|
||||||
is_file TYPE ty_file OPTIONAL
|
IMPORTING iv_key TYPE lcl_persistence_repo=>ty_repo-key
|
||||||
is_object TYPE ty_item OPTIONAL
|
is_file TYPE ty_file OPTIONAL
|
||||||
RAISING lcx_exception.
|
is_object TYPE ty_item OPTIONAL
|
||||||
|
RAISING lcx_exception,
|
||||||
|
lif_gui_page~on_event REDEFINITION.
|
||||||
|
|
||||||
PROTECTED SECTION.
|
PROTECTED SECTION.
|
||||||
METHODS render_content REDEFINITION.
|
METHODS render_content REDEFINITION.
|
||||||
|
|
||||||
PRIVATE SECTION.
|
PRIVATE SECTION.
|
||||||
DATA: mt_diff_files TYPE tt_file_diff.
|
CONSTANTS: BEGIN OF c_actions,
|
||||||
|
toggle_unified TYPE string VALUE 'toggle_unified',
|
||||||
|
END OF c_actions.
|
||||||
|
|
||||||
|
DATA: mt_diff_files TYPE tt_file_diff,
|
||||||
|
mt_delayed_lines TYPE lcl_diff=>ty_diffs_tt,
|
||||||
|
mv_unified TYPE abap_bool VALUE abap_true.
|
||||||
|
|
||||||
METHODS render_diff
|
METHODS render_diff
|
||||||
IMPORTING is_diff TYPE ty_file_diff
|
IMPORTING is_diff TYPE ty_file_diff
|
||||||
|
@ -49,16 +57,20 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page.
|
||||||
IMPORTING is_diff_line TYPE lcl_diff=>ty_diff
|
IMPORTING is_diff_line TYPE lcl_diff=>ty_diff
|
||||||
is_diff TYPE ty_file_diff
|
is_diff TYPE ty_file_diff
|
||||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
|
||||||
METHODS get_line_hl
|
METHODS render_line_split
|
||||||
IMPORTING iv_mod TYPE char1
|
IMPORTING is_diff_line TYPE lcl_diff=>ty_diff
|
||||||
iv_result TYPE lcl_diff=>ty_diff-result
|
iv_fstate TYPE char1
|
||||||
EXPORTING ev_lattr TYPE string
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
|
||||||
ev_rattr TYPE string.
|
METHODS render_line_unified
|
||||||
|
IMPORTING is_diff_line TYPE lcl_diff=>ty_diff OPTIONAL
|
||||||
|
RETURNING VALUE(ro_html) TYPE REF TO lcl_html.
|
||||||
METHODS append_diff
|
METHODS append_diff
|
||||||
IMPORTING it_remote TYPE ty_files_tt
|
IMPORTING it_remote TYPE ty_files_tt
|
||||||
it_local TYPE ty_files_item_tt
|
it_local TYPE ty_files_item_tt
|
||||||
is_status TYPE ty_result
|
is_status TYPE ty_result
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
METHODS build_menu
|
||||||
|
RETURNING VALUE(ro_menu) TYPE REF TO lcl_html_toolbar.
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_page_diff
|
ENDCLASS. "lcl_gui_page_diff
|
||||||
|
|
||||||
|
@ -75,6 +87,8 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
super->constructor( ).
|
super->constructor( ).
|
||||||
ms_control-page_title = 'DIFF'.
|
ms_control-page_title = 'DIFF'.
|
||||||
|
ms_control-page_menu = build_menu( ).
|
||||||
|
mv_unified = lcl_app=>user( )->get_diff_unified( ).
|
||||||
|
|
||||||
ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed
|
ASSERT is_file IS INITIAL OR is_object IS INITIAL. " just one passed
|
||||||
|
|
||||||
|
@ -154,14 +168,14 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
<ls_diff>-rstate = is_status-rstate.
|
<ls_diff>-rstate = is_status-rstate.
|
||||||
|
|
||||||
IF <ls_diff>-lstate IS NOT INITIAL AND <ls_diff>-rstate IS NOT INITIAL.
|
IF <ls_diff>-lstate IS NOT INITIAL AND <ls_diff>-rstate IS NOT INITIAL.
|
||||||
<ls_diff>-mod = c_mod-both.
|
<ls_diff>-fstate = c_fstate-both.
|
||||||
ELSEIF <ls_diff>-lstate IS NOT INITIAL.
|
ELSEIF <ls_diff>-lstate IS NOT INITIAL.
|
||||||
<ls_diff>-mod = c_mod-local.
|
<ls_diff>-fstate = c_fstate-local.
|
||||||
ELSE. "rstate IS NOT INITIAL, lstate = empty.
|
ELSE. "rstate IS NOT INITIAL, lstate = empty.
|
||||||
<ls_diff>-mod = c_mod-remote.
|
<ls_diff>-fstate = c_fstate-remote.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF <ls_diff>-mod = c_mod-remote. " Remote file leading changes
|
IF <ls_diff>-fstate = c_fstate-remote. " Remote file leading changes
|
||||||
CREATE OBJECT <ls_diff>-o_diff
|
CREATE OBJECT <ls_diff>-o_diff
|
||||||
EXPORTING
|
EXPORTING
|
||||||
iv_new = <ls_remote>-data
|
iv_new = <ls_remote>-data
|
||||||
|
@ -175,45 +189,46 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "append_diff
|
ENDMETHOD. "append_diff
|
||||||
|
|
||||||
METHOD render_diff_head.
|
METHOD build_menu.
|
||||||
DATA: lo_html TYPE REF TO lcl_html,
|
CREATE OBJECT ro_menu.
|
||||||
ls_stats TYPE lcl_diff=>ty_count.
|
ro_menu->add( iv_txt = 'Split/Unified view'
|
||||||
|
iv_act = c_actions-toggle_unified ) ##NO_TEXT.
|
||||||
|
ENDMETHOD. " build_menu.
|
||||||
|
|
||||||
CREATE OBJECT lo_html.
|
**********************************************************************
|
||||||
|
* EVENT HANDLING
|
||||||
|
**********************************************************************
|
||||||
|
|
||||||
ls_stats = is_diff-o_diff->stats( ).
|
METHOD lif_gui_page~on_event.
|
||||||
|
|
||||||
IF is_diff-mod = c_mod-both. " Merge stats into 'update' if both were changed
|
CASE iv_action.
|
||||||
ls_stats-update = ls_stats-update + ls_stats-insert + ls_stats-delete.
|
WHEN c_actions-toggle_unified. " Toggle file diplay
|
||||||
CLEAR: ls_stats-insert, ls_stats-delete.
|
mv_unified = lcl_app=>user( )->toggle_diff_unified( ).
|
||||||
ENDIF.
|
ev_state = gc_event_state-re_render.
|
||||||
|
ENDCASE.
|
||||||
|
|
||||||
lo_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
ENDMETHOD. "lif_gui_page~on_event
|
||||||
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_upd">~ { ls_stats-update }</span>| ).
|
|
||||||
lo_html->add( |<span class="diff_name">{ is_diff-filename }</span>| ). "#EC NOTEXT
|
|
||||||
lo_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_diff-lstate
|
|
||||||
iv2 = is_diff-rstate ) ).
|
|
||||||
lo_html->add( '</div>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ro_html = lo_html.
|
**********************************************************************
|
||||||
ENDMETHOD.
|
* RENDER LOGIC
|
||||||
|
**********************************************************************
|
||||||
|
|
||||||
METHOD render_table_head.
|
METHOD render_content.
|
||||||
|
|
||||||
|
DATA ls_diff_file LIKE LINE OF mt_diff_files.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
ro_html->add( '<thead class="header">' ). "#EC NOTEXT
|
LOOP AT mt_diff_files INTO ls_diff_file.
|
||||||
ro_html->add( '<tr>' ). "#EC NOTEXT
|
lcl_progress=>show( iv_key = 'Diff'
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
iv_current = sy-tabix
|
||||||
ro_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
|
iv_total = lines( mt_diff_files )
|
||||||
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
iv_text = |Render Diff - { ls_diff_file-filename }| ).
|
||||||
ro_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '</tr>' ). "#EC NOTEXT
|
|
||||||
ro_html->add( '</thead>' ). "#EC NOTEXT
|
|
||||||
|
|
||||||
ENDMETHOD. " render_table_head.
|
ro_html->add( render_diff( ls_diff_file ) ).
|
||||||
|
ENDLOOP.
|
||||||
|
|
||||||
|
ENDMETHOD. "render_content
|
||||||
|
|
||||||
METHOD render_diff.
|
METHOD render_diff.
|
||||||
|
|
||||||
|
@ -232,11 +247,70 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
ro_html->add( '</div>' ). "#EC NOTEXT
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. " render_diff
|
||||||
|
|
||||||
|
**********************************************************************
|
||||||
|
* CHUNKS
|
||||||
|
**********************************************************************
|
||||||
|
|
||||||
|
METHOD render_diff_head.
|
||||||
|
|
||||||
|
DATA: ls_stats TYPE lcl_diff=>ty_count.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
ls_stats = is_diff-o_diff->stats( ).
|
||||||
|
|
||||||
|
IF is_diff-fstate = c_fstate-both. " Merge stats into 'update' if both were changed
|
||||||
|
ls_stats-update = ls_stats-update + ls_stats-insert + ls_stats-delete.
|
||||||
|
CLEAR: ls_stats-insert, ls_stats-delete.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<div class="diff_head">' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ro_html->add( |<span class="diff_banner diff_ins">+ { ls_stats-insert }</span>| ).
|
||||||
|
ro_html->add( |<span class="diff_banner diff_del">- { ls_stats-delete }</span>| ).
|
||||||
|
ro_html->add( |<span class="diff_banner diff_upd">~ { ls_stats-update }</span>| ).
|
||||||
|
ro_html->add( |<span class="diff_name">{ is_diff-filename }</span>| ). "#EC NOTEXT
|
||||||
|
ro_html->add( lcl_gui_chunk_lib=>render_item_state( iv1 = is_diff-lstate
|
||||||
|
iv2 = is_diff-rstate ) ).
|
||||||
|
|
||||||
|
IF is_diff-fstate = c_fstate-both AND mv_unified = abap_true.
|
||||||
|
ro_html->add( '<span class="attention pad-sides">Attention: Unified mode'
|
||||||
|
&& ' highlighting for MM assumes local file is newer ! </span>' ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||||
|
|
||||||
ENDMETHOD.
|
ENDMETHOD.
|
||||||
|
|
||||||
|
METHOD render_table_head.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
IF mv_unified = abap_true.
|
||||||
|
ro_html->add( '<thead class="header">' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num">old</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num">new</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th>code</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</thead>' ). "#EC NOTEXT
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( '<thead class="header">' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th>LOCAL</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th class="num"></th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '<th>REMOTE</th>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( '</thead>' ). "#EC NOTEXT
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ENDMETHOD. " render_table_head.
|
||||||
|
|
||||||
METHOD render_beacon.
|
METHOD render_beacon.
|
||||||
|
|
||||||
DATA: lv_beacon TYPE string.
|
DATA: lv_beacon TYPE string.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
@ -246,10 +320,19 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
lv_beacon = '---'.
|
lv_beacon = '---'.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
|
|
||||||
ro_html->add( '<thead class="nav_line">' ).
|
ro_html->add( '<thead class="nav_line">' ).
|
||||||
ro_html->add( '<tr>' ).
|
ro_html->add( '<tr>' ).
|
||||||
ro_html->add( '<th class="num"></th>' ).
|
|
||||||
ro_html->add( |<th colspan="3">@@ { is_diff_line-new_line } @@ { lv_beacon }</th>| ).
|
IF mv_unified = abap_true.
|
||||||
|
ro_html->add( '<th class="num"></th>' ).
|
||||||
|
ro_html->add( '<th class="num"></th>' ).
|
||||||
|
ro_html->add( |<th>@@ { is_diff_line-new_num } @@ { lv_beacon }</th>| ).
|
||||||
|
ELSE.
|
||||||
|
ro_html->add( '<th class="num"></th>' ).
|
||||||
|
ro_html->add( |<th colspan="3">@@ { is_diff_line-new_num } @@ { lv_beacon }</th>| ).
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
ro_html->add( '</tr>' ).
|
ro_html->add( '</tr>' ).
|
||||||
ro_html->add( '</thead>' ).
|
ro_html->add( '</thead>' ).
|
||||||
|
|
||||||
|
@ -259,10 +342,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
|
|
||||||
DATA: lo_highlighter TYPE REF TO lcl_syntax_highlighter,
|
DATA: lo_highlighter TYPE REF TO lcl_syntax_highlighter,
|
||||||
lt_diffs TYPE lcl_diff=>ty_diffs_tt,
|
lt_diffs TYPE lcl_diff=>ty_diffs_tt,
|
||||||
lv_local TYPE string,
|
|
||||||
lv_remote TYPE string,
|
|
||||||
lv_lattr TYPE string,
|
|
||||||
lv_rattr TYPE string,
|
|
||||||
lv_insert_nav TYPE abap_bool.
|
lv_insert_nav TYPE abap_bool.
|
||||||
|
|
||||||
FIELD-SYMBOLS <ls_diff> LIKE LINE OF lt_diffs.
|
FIELD-SYMBOLS <ls_diff> LIKE LINE OF lt_diffs.
|
||||||
|
@ -283,83 +362,125 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
||||||
lv_insert_nav = abap_false.
|
lv_insert_nav = abap_false.
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
IF is_diff-mod = c_mod-remote. " Remote file leading changes
|
|
||||||
lv_local = <ls_diff>-old.
|
|
||||||
lv_remote = <ls_diff>-new.
|
|
||||||
ELSE. " Local leading changes or both were modified
|
|
||||||
lv_local = <ls_diff>-new.
|
|
||||||
lv_remote = <ls_diff>-old.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
IF lo_highlighter IS BOUND.
|
IF lo_highlighter IS BOUND.
|
||||||
lv_local = lo_highlighter->process_line( lv_local ).
|
<ls_diff>-new = lo_highlighter->process_line( <ls_diff>-new ).
|
||||||
lv_remote = lo_highlighter->process_line( lv_remote ).
|
<ls_diff>-old = lo_highlighter->process_line( <ls_diff>-old ).
|
||||||
ELSE.
|
ELSE.
|
||||||
lv_local = escape( val = lv_local format = cl_abap_format=>e_html_attr ).
|
<ls_diff>-new = escape( val = <ls_diff>-new format = cl_abap_format=>e_html_attr ).
|
||||||
lv_remote = escape( val = lv_remote format = cl_abap_format=>e_html_attr ).
|
<ls_diff>-old = escape( val = <ls_diff>-old format = cl_abap_format=>e_html_attr ).
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
get_line_hl( EXPORTING iv_mod = is_diff-mod
|
CONDENSE <ls_diff>-new_num. "get rid of leading spaces
|
||||||
iv_result = <ls_diff>-result
|
CONDENSE <ls_diff>-old_num.
|
||||||
IMPORTING ev_lattr = lv_lattr
|
|
||||||
ev_rattr = lv_rattr ).
|
|
||||||
|
|
||||||
ro_html->add( '<tr>' ). "#EC NOTEXT
|
IF mv_unified = abap_true.
|
||||||
ro_html->add( |<td class="num">{ <ls_diff>-new_line }</td>| ). "#EC NOTEXT
|
ro_html->add( render_line_unified( is_diff_line = <ls_diff> ) ).
|
||||||
ro_html->add( |<td{ lv_lattr }><code>{ lv_local }</code></td>| ). "#EC NOTEXT
|
ELSE.
|
||||||
ro_html->add( |<td class="num">{ <ls_diff>-old_line }</td>| ). "#EC NOTEXT
|
ro_html->add( render_line_split( is_diff_line = <ls_diff>
|
||||||
ro_html->add( |<td{ lv_rattr }><code>{ lv_remote }</code></td>| ). "#EC NOTEXT
|
iv_fstate = is_diff-fstate ) ).
|
||||||
ro_html->add( '</tr>' ). "#EC NOTEXT
|
ENDIF.
|
||||||
|
|
||||||
ENDLOOP.
|
ENDLOOP.
|
||||||
|
|
||||||
ENDMETHOD.
|
IF mv_unified = abap_true.
|
||||||
|
ro_html->add( render_line_unified( ) ). " Release delayed lines
|
||||||
METHOD get_line_hl.
|
|
||||||
|
|
||||||
CLEAR: ev_lattr, ev_rattr. " Class for changed lines
|
|
||||||
|
|
||||||
IF iv_result IS INITIAL.
|
|
||||||
RETURN.
|
|
||||||
ENDIF.
|
ENDIF.
|
||||||
|
|
||||||
" Both file changed ? Or line updated ? - All yellow
|
ENDMETHOD. "render_lines
|
||||||
IF iv_mod = c_mod-both OR iv_result = lcl_diff=>c_diff-update.
|
|
||||||
ev_lattr = ' class="diff_upd"'. "#EC NOTEXT
|
|
||||||
ev_rattr = ' class="diff_upd"'. "#EC NOTEXT
|
|
||||||
ELSEIF iv_mod = c_mod-local. " Changed locally
|
|
||||||
CASE iv_result.
|
|
||||||
WHEN lcl_diff=>c_diff-insert.
|
|
||||||
ev_lattr = ' class="diff_ins"'. "#EC NOTEXT
|
|
||||||
WHEN lcl_diff=>c_diff-delete.
|
|
||||||
ev_rattr = ' class="diff_del"'. "#EC NOTEXT
|
|
||||||
ENDCASE.
|
|
||||||
ELSEIF iv_mod = c_mod-remote. " Changed remotely - invert sides
|
|
||||||
CASE iv_result.
|
|
||||||
WHEN lcl_diff=>c_diff-insert.
|
|
||||||
ev_rattr = ' class="diff_ins"'. "#EC NOTEXT
|
|
||||||
WHEN lcl_diff=>c_diff-delete.
|
|
||||||
ev_lattr = ' class="diff_del"'. "#EC NOTEXT
|
|
||||||
ENDCASE.
|
|
||||||
ENDIF.
|
|
||||||
|
|
||||||
ENDMETHOD. " get_line_hl.
|
METHOD render_line_split.
|
||||||
|
|
||||||
METHOD render_content.
|
DATA: lv_new TYPE string,
|
||||||
|
lv_old TYPE string,
|
||||||
DATA ls_diff_file LIKE LINE OF mt_diff_files.
|
lv_mark TYPE string,
|
||||||
|
lv_bg TYPE string.
|
||||||
|
|
||||||
CREATE OBJECT ro_html.
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
LOOP AT mt_diff_files INTO ls_diff_file.
|
" New line
|
||||||
lcl_progress=>show( iv_key = 'Diff'
|
lv_mark = ` `.
|
||||||
iv_current = sy-tabix
|
IF iv_fstate = c_fstate-both OR is_diff_line-result = lcl_diff=>c_diff-update.
|
||||||
iv_total = lines( mt_diff_files )
|
lv_bg = ' diff_upd'.
|
||||||
iv_text = |Render Diff - { ls_diff_file-filename }| ).
|
lv_mark = `~`.
|
||||||
|
ELSEIF is_diff_line-result = lcl_diff=>c_diff-insert.
|
||||||
|
lv_bg = ' diff_ins'.
|
||||||
|
lv_mark = `+`.
|
||||||
|
ENDIF.
|
||||||
|
lv_new = |<td class="num" line-num="{ is_diff_line-new_num }"></td>|
|
||||||
|
&& |<td class="code{ lv_bg }">{ lv_mark }{ is_diff_line-new }</td>|.
|
||||||
|
|
||||||
ro_html->add( render_diff( ls_diff_file ) ).
|
" Old line
|
||||||
ENDLOOP.
|
CLEAR lv_bg.
|
||||||
|
lv_mark = ` `.
|
||||||
|
IF iv_fstate = c_fstate-both OR is_diff_line-result = lcl_diff=>c_diff-update.
|
||||||
|
lv_bg = ' diff_upd'.
|
||||||
|
lv_mark = `~`.
|
||||||
|
ELSEIF is_diff_line-result = lcl_diff=>c_diff-delete.
|
||||||
|
lv_bg = ' diff_del'.
|
||||||
|
lv_mark = `-`.
|
||||||
|
ENDIF.
|
||||||
|
lv_old = |<td class="num" line-num="{ is_diff_line-old_num }"></td>|
|
||||||
|
&& |<td class="code{ lv_bg }">{ lv_mark }{ is_diff_line-old }</td>|.
|
||||||
|
|
||||||
ENDMETHOD. "render_content
|
" render line, inverse sides if remote is newer
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
IF iv_fstate = c_fstate-remote. " Remote file leading changes
|
||||||
|
ro_html->add( lv_old ). " local
|
||||||
|
ro_html->add( lv_new ). " remote
|
||||||
|
ELSE. " Local leading changes or both were modified
|
||||||
|
ro_html->add( lv_new ). " local
|
||||||
|
ro_html->add( lv_old ). " remote
|
||||||
|
ENDIF.
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. "render_line_split
|
||||||
|
|
||||||
|
METHOD render_line_unified.
|
||||||
|
|
||||||
|
DATA lv_line TYPE string.
|
||||||
|
|
||||||
|
FIELD-SYMBOLS <diff_line> LIKE LINE OF mt_delayed_lines.
|
||||||
|
|
||||||
|
CREATE OBJECT ro_html.
|
||||||
|
|
||||||
|
" Release delayed subsequent update lines
|
||||||
|
IF is_diff_line-result <> lcl_diff=>c_diff-update.
|
||||||
|
LOOP AT mt_delayed_lines ASSIGNING <diff_line>.
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td class="num" line-num="{ <diff_line>-old_num }"></td>|
|
||||||
|
&& |<td class="num" line-num=""></td>|
|
||||||
|
&& |<td class="code diff_del">-{ <diff_line>-old }</td>| ).
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
ENDLOOP.
|
||||||
|
LOOP AT mt_delayed_lines ASSIGNING <diff_line>.
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
ro_html->add( |<td class="num" line-num=""></td>|
|
||||||
|
&& |<td class="num" line-num="{ <diff_line>-new_num }"></td>|
|
||||||
|
&& |<td class="code diff_ins">+{ <diff_line>-new }</td>| ).
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
ENDLOOP.
|
||||||
|
CLEAR mt_delayed_lines.
|
||||||
|
ENDIF.
|
||||||
|
|
||||||
|
ro_html->add( '<tr>' ). "#EC NOTEXT
|
||||||
|
CASE is_diff_line-result.
|
||||||
|
WHEN lcl_diff=>c_diff-update.
|
||||||
|
APPEND is_diff_line TO mt_delayed_lines. " Delay output of subsequent updates
|
||||||
|
WHEN lcl_diff=>c_diff-insert.
|
||||||
|
ro_html->add( |<td class="num" line-num=""></td>|
|
||||||
|
&& |<td class="num" line-num="{ is_diff_line-new_num }"></td>|
|
||||||
|
&& |<td class="code diff_ins">+{ is_diff_line-new }</td>| ).
|
||||||
|
WHEN lcl_diff=>c_diff-delete.
|
||||||
|
ro_html->add( |<td class="num" line-num="{ is_diff_line-old_num }"></td>|
|
||||||
|
&& |<td class="num" line-num=""></td>|
|
||||||
|
&& |<td class="code diff_del">-{ is_diff_line-old }</td>| ).
|
||||||
|
WHEN OTHERS. "none
|
||||||
|
ro_html->add( |<td class="num" line-num="{ is_diff_line-old_num }"></td>|
|
||||||
|
&& |<td class="num" line-num="{ is_diff_line-new_num }"></td>|
|
||||||
|
&& |<td class="code"> { is_diff_line-old }</td>| ).
|
||||||
|
ENDCASE.
|
||||||
|
ro_html->add( '</tr>' ). "#EC NOTEXT
|
||||||
|
|
||||||
|
ENDMETHOD. "render_line_unified
|
||||||
|
|
||||||
ENDCLASS. "lcl_gui_page_diff
|
ENDCLASS. "lcl_gui_page_diff
|
|
@ -422,6 +422,14 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
RETURNING VALUE(rv_changes_only) TYPE abap_bool
|
RETURNING VALUE(rv_changes_only) TYPE abap_bool
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS toggle_diff_unified
|
||||||
|
RETURNING VALUE(rv_diff_unified) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
|
METHODS get_diff_unified
|
||||||
|
RETURNING VALUE(rv_diff_unified) TYPE abap_bool
|
||||||
|
RAISING lcx_exception.
|
||||||
|
|
||||||
METHODS get_favorites
|
METHODS get_favorites
|
||||||
RETURNING VALUE(rt_favorites) TYPE tt_favorites
|
RETURNING VALUE(rt_favorites) TYPE tt_favorites
|
||||||
RAISING lcx_exception.
|
RAISING lcx_exception.
|
||||||
|
@ -454,6 +462,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
||||||
repo_config TYPE ty_repo_config_tt,
|
repo_config TYPE ty_repo_config_tt,
|
||||||
hide_files TYPE abap_bool,
|
hide_files TYPE abap_bool,
|
||||||
changes_only TYPE abap_bool,
|
changes_only TYPE abap_bool,
|
||||||
|
diff_unified TYPE abap_bool,
|
||||||
favorites TYPE tt_favorites,
|
favorites TYPE tt_favorites,
|
||||||
END OF ty_user.
|
END OF ty_user.
|
||||||
|
|
||||||
|
@ -698,6 +707,24 @@ CLASS lcl_persistence_user IMPLEMENTATION.
|
||||||
|
|
||||||
ENDMETHOD. "get_changes_only
|
ENDMETHOD. "get_changes_only
|
||||||
|
|
||||||
|
METHOD toggle_diff_unified.
|
||||||
|
|
||||||
|
DATA ls_user TYPE ty_user.
|
||||||
|
|
||||||
|
ls_user = read( ).
|
||||||
|
ls_user-diff_unified = boolc( ls_user-diff_unified = abap_false ).
|
||||||
|
update( ls_user ).
|
||||||
|
|
||||||
|
rv_diff_unified = ls_user-diff_unified.
|
||||||
|
|
||||||
|
ENDMETHOD. "toggle_diff_unified
|
||||||
|
|
||||||
|
METHOD get_diff_unified.
|
||||||
|
|
||||||
|
rv_diff_unified = read( )-diff_unified.
|
||||||
|
|
||||||
|
ENDMETHOD. "get_diff_unified
|
||||||
|
|
||||||
METHOD get_favorites.
|
METHOD get_favorites.
|
||||||
|
|
||||||
rt_favorites = read( )-favorites.
|
rt_favorites = read( )-favorites.
|
||||||
|
|
|
@ -242,11 +242,11 @@ CLASS ltcl_diff IMPLEMENTATION.
|
||||||
|
|
||||||
DEFINE _expected.
|
DEFINE _expected.
|
||||||
CLEAR ms_expected.
|
CLEAR ms_expected.
|
||||||
ms_expected-new_line = &1.
|
ms_expected-new_num = &1.
|
||||||
ms_expected-new = &2.
|
ms_expected-new = &2.
|
||||||
ms_expected-result = &3.
|
ms_expected-result = &3.
|
||||||
ms_expected-old_line = &4.
|
ms_expected-old_num = &4.
|
||||||
ms_expected-old = &5.
|
ms_expected-old = &5.
|
||||||
APPEND ms_expected TO mt_expected.
|
APPEND ms_expected TO mt_expected.
|
||||||
END-OF-DEFINITION.
|
END-OF-DEFINITION.
|
||||||
|
|
||||||
|
|
|
@ -547,13 +547,13 @@ CLASS lcl_diff DEFINITION FINAL.
|
||||||
END OF c_diff.
|
END OF c_diff.
|
||||||
|
|
||||||
TYPES: BEGIN OF ty_diff,
|
TYPES: BEGIN OF ty_diff,
|
||||||
new_line TYPE c LENGTH 6,
|
new_num TYPE c LENGTH 6,
|
||||||
new TYPE string,
|
new TYPE string,
|
||||||
result TYPE c LENGTH 1,
|
result TYPE c LENGTH 1,
|
||||||
old_line TYPE c LENGTH 6,
|
old_num TYPE c LENGTH 6,
|
||||||
old TYPE string,
|
old TYPE string,
|
||||||
short TYPE abap_bool,
|
short TYPE abap_bool,
|
||||||
beacon TYPE i,
|
beacon TYPE i,
|
||||||
END OF ty_diff.
|
END OF ty_diff.
|
||||||
TYPES: ty_diffs_tt TYPE STANDARD TABLE OF ty_diff WITH DEFAULT KEY.
|
TYPES: ty_diffs_tt TYPE STANDARD TABLE OF ty_diff WITH DEFAULT KEY.
|
||||||
|
|
||||||
|
@ -697,16 +697,16 @@ CLASS lcl_diff IMPLEMENTATION.
|
||||||
|
|
||||||
|
|
||||||
LOOP AT mt_diff ASSIGNING <ls_diff>.
|
LOOP AT mt_diff ASSIGNING <ls_diff>.
|
||||||
<ls_diff>-new_line = lv_new.
|
<ls_diff>-new_num = lv_new.
|
||||||
<ls_diff>-old_line = lv_old.
|
<ls_diff>-old_num = lv_old.
|
||||||
|
|
||||||
CASE <ls_diff>-result. " Line nums
|
CASE <ls_diff>-result. " Line nums
|
||||||
WHEN c_diff-delete.
|
WHEN c_diff-delete.
|
||||||
lv_old = lv_old + 1.
|
lv_old = lv_old + 1.
|
||||||
CLEAR <ls_diff>-new_line.
|
CLEAR <ls_diff>-new_num.
|
||||||
WHEN c_diff-insert.
|
WHEN c_diff-insert.
|
||||||
lv_new = lv_new + 1.
|
lv_new = lv_new + 1.
|
||||||
CLEAR <ls_diff>-old_line.
|
CLEAR <ls_diff>-old_num.
|
||||||
WHEN OTHERS.
|
WHEN OTHERS.
|
||||||
lv_new = lv_new + 1.
|
lv_new = lv_new + 1.
|
||||||
lv_old = lv_old + 1.
|
lv_old = lv_old + 1.
|
||||||
|
|
Loading…
Reference in New Issue
Block a user