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'
This commit is contained in:
commit
6df97c1be3
|
@ -8,7 +8,7 @@
|
|||
"url": "git+https://github.com/larshp/abapGit.git"
|
||||
},
|
||||
"devDependencies": {
|
||||
"abapmerge": "^0.5.4",
|
||||
"abapmerge": "^0.6.2",
|
||||
"abaplint": ">=0.26.7"
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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.23.0'. "#EC NOTEXT
|
||||
gc_abap_version TYPE string VALUE 'v1.23.6'. "#EC NOTEXT
|
||||
|
||||
********************************************************************************
|
||||
* The MIT License (MIT)
|
||||
|
@ -69,6 +69,7 @@ INCLUDE zabapgit_background.
|
|||
INCLUDE zabapgit_transport.
|
||||
|
||||
INCLUDE zabapgit_services. " All services here
|
||||
INCLUDE zabapgit_gui_asset_manager.
|
||||
INCLUDE zabapgit_gui_pages. " All GUI pages here
|
||||
INCLUDE zabapgit_gui_pages_userexit IF FOUND.
|
||||
INCLUDE zabapgit_gui_router.
|
||||
|
|
|
@ -35,27 +35,6 @@
|
|||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<DYNPROS/>
|
||||
<CUA>
|
||||
<ADM>
|
||||
<ACTCODE/>
|
||||
<MENCODE/>
|
||||
<PFKCODE/>
|
||||
<DEFAULTACT/>
|
||||
<DEFAULTPFK/>
|
||||
<MOD_LANGU/>
|
||||
</ADM>
|
||||
<STA/>
|
||||
<FUN/>
|
||||
<MEN/>
|
||||
<MTX/>
|
||||
<ACT/>
|
||||
<BUT/>
|
||||
<PFK/>
|
||||
<SET/>
|
||||
<DOC/>
|
||||
<TIT/>
|
||||
<BIV/>
|
||||
</CUA>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
|
|
|
@ -5,11 +5,15 @@
|
|||
CLASS lcl_background DEFINITION FINAL.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS: run
|
||||
RAISING lcx_exception.
|
||||
CLASS-METHODS:
|
||||
run
|
||||
RAISING lcx_exception.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CLASS-METHODS:
|
||||
build_comment
|
||||
IMPORTING is_files TYPE ty_stage_files
|
||||
RETURNING VALUE(rv_comment) TYPE string,
|
||||
push
|
||||
IMPORTING io_repo TYPE REF TO lcl_repo_online
|
||||
is_settings TYPE lcl_persistence_background=>ty_background
|
||||
|
@ -54,14 +58,9 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
FIELD-SYMBOLS: <ls_local> LIKE LINE OF ls_files-local.
|
||||
|
||||
|
||||
|
||||
ls_files = lcl_stage_logic=>get( io_repo ).
|
||||
ASSERT lines( ls_files-local ) > 0.
|
||||
|
||||
ls_comment-username = is_settings-aname.
|
||||
ls_comment-email = is_settings-amail.
|
||||
ls_comment-comment = 'abapGit background mode' ##NO_TEXT.
|
||||
|
||||
CREATE OBJECT lo_stage
|
||||
EXPORTING
|
||||
iv_branch_name = io_repo->get_branch_name( )
|
||||
|
@ -76,16 +75,45 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
iv_data = <ls_local>-file-data ).
|
||||
ENDLOOP.
|
||||
|
||||
ls_comment-username = is_settings-aname.
|
||||
ls_comment-email = is_settings-amail.
|
||||
ls_comment-comment = build_comment( ls_files ).
|
||||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD build_comment.
|
||||
|
||||
DATA: lt_objects TYPE STANDARD TABLE OF string WITH DEFAULT KEY,
|
||||
lv_str TYPE string.
|
||||
|
||||
FIELD-SYMBOLS: <ls_local> LIKE LINE OF is_files-local.
|
||||
|
||||
|
||||
LOOP AT is_files-local ASSIGNING <ls_local>.
|
||||
lv_str = |{ <ls_local>-item-obj_type } { <ls_local>-item-obj_name }|.
|
||||
APPEND lv_str TO lt_objects.
|
||||
ENDLOOP.
|
||||
|
||||
IF lines( lt_objects ) = 1.
|
||||
rv_comment = |BG: { lv_str }|.
|
||||
ELSE.
|
||||
rv_comment = 'BG: Multiple objects'.
|
||||
LOOP AT lt_objects INTO lv_str.
|
||||
CONCATENATE rv_comment gc_newline lv_str INTO rv_comment.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD push_auto.
|
||||
|
||||
DATA: ls_comment TYPE ty_comment,
|
||||
ls_files TYPE ty_stage_files,
|
||||
lo_stage TYPE REF TO lcl_stage.
|
||||
DATA: ls_comment TYPE ty_comment,
|
||||
ls_files TYPE ty_stage_files,
|
||||
ls_user_files LIKE ls_files,
|
||||
lo_stage TYPE REF TO lcl_stage.
|
||||
|
||||
FIELD-SYMBOLS: <ls_local> LIKE LINE OF ls_files-local.
|
||||
|
||||
|
@ -94,7 +122,6 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
ls_files = lcl_stage_logic=>get( io_repo ).
|
||||
|
||||
DO.
|
||||
|
||||
READ TABLE ls_files-local INDEX 1 ASSIGNING <ls_local>.
|
||||
IF sy-subrc <> 0.
|
||||
EXIT.
|
||||
|
@ -103,13 +130,14 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
CLEAR ls_comment.
|
||||
ls_comment-username = lcl_objects=>changed_by( <ls_local>-item ).
|
||||
ls_comment-email = |{ ls_comment-username }@localhost|.
|
||||
ls_comment-comment = 'abapGit background mode' ##NO_TEXT.
|
||||
|
||||
CREATE OBJECT lo_stage
|
||||
EXPORTING
|
||||
iv_branch_name = io_repo->get_branch_name( )
|
||||
iv_branch_sha1 = io_repo->get_sha1_remote( ).
|
||||
|
||||
CLEAR ls_user_files.
|
||||
|
||||
LOOP AT ls_files-local ASSIGNING <ls_local>.
|
||||
IF lcl_objects=>changed_by( <ls_local>-item ) = ls_comment-username.
|
||||
WRITE: / 'stage' ##NO_TEXT,
|
||||
|
@ -120,9 +148,13 @@ CLASS lcl_background IMPLEMENTATION.
|
|||
lo_stage->add( iv_path = <ls_local>-file-path
|
||||
iv_filename = <ls_local>-file-filename
|
||||
iv_data = <ls_local>-file-data ).
|
||||
|
||||
APPEND <ls_local> TO ls_user_files-local.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ls_comment-comment = build_comment( ls_user_files ).
|
||||
|
||||
io_repo->push( is_comment = ls_comment
|
||||
io_stage = lo_stage ).
|
||||
|
||||
|
|
584
src/zabapgit_css_common.w3mi.data.css
Normal file
584
src/zabapgit_css_common.w3mi.data.css
Normal file
|
@ -0,0 +1,584 @@
|
|||
/*
|
||||
* ABAPGIT COMMON CSS
|
||||
*/
|
||||
|
||||
/* GLOBALS */
|
||||
|
||||
body {
|
||||
font-family: Arial,Helvetica,sans-serif;
|
||||
font-size: 12pt;
|
||||
background: #E8E8E8;
|
||||
}
|
||||
|
||||
a, a:visited {
|
||||
color: #4078c0;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover, a:active {
|
||||
cursor: pointer;
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
img { border: 0px; vertical-align: middle; }
|
||||
table { border-collapse: collapse; }
|
||||
pre { display: inline; }
|
||||
|
||||
form input, textarea, select {
|
||||
border: 1px solid #DDD;
|
||||
padding: 3px 6px;
|
||||
}
|
||||
|
||||
form input:focus, textarea:focus {
|
||||
border: 1px solid #8cadd9;
|
||||
}
|
||||
|
||||
/* MODIFIERS */
|
||||
.grey { color: lightgrey !important; }
|
||||
.emphasis { font-weight: bold !important; }
|
||||
.attention { color: red !important; }
|
||||
.crossout { text-decoration: line-through !important; }
|
||||
.right { text-align:right; }
|
||||
.paddings { padding: 0.5em 0.5em; }
|
||||
.pad-sides { padding: 0 0.3em; }
|
||||
.pad4px { padding: 4px; }
|
||||
|
||||
/* STRUCTURE DIVS, HEADER & FOOTER */
|
||||
td.headpad { padding-top: 11px; }
|
||||
td.logo { width: 164px; }
|
||||
|
||||
div#header {
|
||||
padding: 0.5em 0.5em;
|
||||
border-bottom: 3px double lightgrey;
|
||||
}
|
||||
|
||||
div#toc {
|
||||
padding: 0.5em 1em;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
div#toc div.toc_grid {
|
||||
margin: -0.3em 0em;
|
||||
}
|
||||
|
||||
div#toc div.toc_grid a {
|
||||
color: #ccc;
|
||||
}
|
||||
|
||||
div#toc:hover div.toc_grid a {
|
||||
color: #4078c0;
|
||||
}
|
||||
|
||||
div#toc div.toc_row {
|
||||
margin: 0.3em 0em;
|
||||
}
|
||||
|
||||
div#footer {
|
||||
padding: 0.5em 1em;
|
||||
border-top: 3px double lightgrey;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
div.dummydiv {
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.5em 1em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
span.version {
|
||||
display: block;
|
||||
color: grey;
|
||||
margin-top: 0.3em;
|
||||
}
|
||||
|
||||
span.page_title {
|
||||
font-weight: normal;
|
||||
font-size: 18pt;
|
||||
color: #bbb;
|
||||
padding-left: 0.4em;
|
||||
}
|
||||
|
||||
/* MENU */
|
||||
div.menu { display: inline; }
|
||||
div.menu .menu_end { border-right: 0px !important; }
|
||||
div.menu a {
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
border-right: 1px solid lightgrey;
|
||||
font-size: 12pt;
|
||||
}
|
||||
div.menu_vertical { display: inline; }
|
||||
div.menu_vertical a {
|
||||
display: block;
|
||||
font-size: 12pt;
|
||||
}
|
||||
|
||||
/*DROP DOWN*/
|
||||
.dropdown {
|
||||
position: relative;
|
||||
display: inline;
|
||||
}
|
||||
.dropdown_angle {
|
||||
position: absolute !important;
|
||||
right: -4px;
|
||||
top: -1px;
|
||||
}
|
||||
.dropbtn_angle {
|
||||
width: 0;
|
||||
height: 0;
|
||||
border-left: 7px solid transparent;
|
||||
border-right: 7px solid transparent;
|
||||
border-bottom: 7px solid #4078c0;
|
||||
transform: rotate(45deg);
|
||||
-ms-transform: rotate(45deg);
|
||||
}
|
||||
.dropdown_content {
|
||||
display: none;
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
right: -12px;
|
||||
top: 1em;
|
||||
padding: 6px 10px 10px 10px;
|
||||
white-space: nowrap;
|
||||
}
|
||||
.dropdown div.minizone {
|
||||
display: none;
|
||||
z-index: 1;
|
||||
position: absolute;
|
||||
padding: 0px;
|
||||
width: 16px;
|
||||
height: 16px;
|
||||
bottom: 0px;
|
||||
left: -16px;
|
||||
}
|
||||
.dropdown_angle .dropdown_content {
|
||||
top: -1px;
|
||||
}
|
||||
.dropdown:hover .dropdown_content { display: block; }
|
||||
.dropdown:hover .minizone { display: block; }
|
||||
.dropdown_content a {
|
||||
padding: 0.2em;
|
||||
background-color: #f9f9f9;
|
||||
text-decoration: none;
|
||||
display: block;
|
||||
border: none !important;
|
||||
}
|
||||
.dropdown_content div.box {
|
||||
border-bottom: 1px solid #C0C0C0;
|
||||
border-right: 1px solid #C0C0C0;
|
||||
background-color: #f9f9f9;
|
||||
padding: 2px;
|
||||
}
|
||||
.dropdown_content td { text-align: left; padding: 2px; }
|
||||
.dropdown_content td a { padding: 0em 0.2em; }
|
||||
.dropdown_content td.icon { padding: 0 3px 0 6px; }
|
||||
.dropdown_content a:hover { background-color: #f1f1f1 }
|
||||
.dropdown:hover .dropbtn { color: #79a0d2; }
|
||||
|
||||
/* REPOSITORY */
|
||||
div.repo {
|
||||
margin-top: 3px;
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.5em 1em 0.5em 1em;
|
||||
}
|
||||
.repo_name span.name {
|
||||
font-weight: bold;
|
||||
color: #333;
|
||||
font-size: 14pt;
|
||||
}
|
||||
.repo_name span.url {
|
||||
color: #ccc;
|
||||
font-size: 12pt;
|
||||
margin-left: 0.5em;
|
||||
}
|
||||
.repo_name img {
|
||||
vertical-align: baseline;
|
||||
margin: 0 5px 0 5px;
|
||||
}
|
||||
.repo_attr {
|
||||
color: grey;
|
||||
font-size: 12pt;
|
||||
}
|
||||
.repo_attr span {
|
||||
margin-left: 0.2em;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
.repo_attr span.bg_marker {
|
||||
border: 1px solid #d2d2d2;
|
||||
border-radius: 3px;
|
||||
background: #d8d8d8;
|
||||
color: #fff;
|
||||
font-size: 8pt;
|
||||
padding: 4px 2px 3px 2px;
|
||||
}
|
||||
.repo_attr span.branch {
|
||||
padding: 2px 4px;
|
||||
border: 1px solid #d9d9d9;
|
||||
border-radius: 4px;
|
||||
background-color: #e2e2e2;
|
||||
}
|
||||
.repo_attr span.branch_head {
|
||||
border-color: #d8dff3;
|
||||
background-color: #eceff9;
|
||||
}
|
||||
.repo_attr span.branch_branch {
|
||||
border-color: #e7d9b1;
|
||||
background-color: #f8f0d8;
|
||||
}
|
||||
|
||||
/* MISC AND REFACTOR */
|
||||
.hidden-submit {
|
||||
border: 0 none;
|
||||
height: 0;
|
||||
width: 0;
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
#debug-output {
|
||||
text-align: right;
|
||||
padding-right: 0.5em;
|
||||
color: #ccc;
|
||||
font-style: italic;
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
/* REPOSITORY TABLE*/
|
||||
div.repo_container {
|
||||
position: relative;
|
||||
}
|
||||
.repo_tab {
|
||||
border: 1px solid #DDD;
|
||||
border-radius: 3px;
|
||||
background: #fff;
|
||||
margin-top: 0.5em;
|
||||
}
|
||||
.repo_tab td {
|
||||
border-top: 1px solid #eee;
|
||||
vertical-align: middle;
|
||||
color: #333;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
}
|
||||
.repo_tab td.icon {
|
||||
width: 32px;
|
||||
text-align: center;
|
||||
}
|
||||
.repo_tab td.type {
|
||||
width: 3em;
|
||||
}
|
||||
.repo_tab td.object {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
.repo_tab td.files {
|
||||
padding-left: 0.5em;
|
||||
}
|
||||
.repo_tab td.cmd {
|
||||
text-align: right;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.7em;
|
||||
}
|
||||
.repo_tab tr.unsupported { color: lightgrey; }
|
||||
.repo_tab tr.modified { background: #fbf7e9; }
|
||||
.repo_tab tr:first-child td { border-top: 0px; }
|
||||
.repo_tab td.current_dir { color: #ccc; }
|
||||
.repo_tab td.cmd span.state-block {
|
||||
margin-left: 1em;
|
||||
font-family: Consolas, Lucida Console, Courier, monospace;
|
||||
font-size: x-small;
|
||||
vertical-align: 13%;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span {
|
||||
display: inline-block;
|
||||
padding: 0px 2px;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span.added {
|
||||
background-color: #69ad74;
|
||||
border-color: #579e64;
|
||||
color: white;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span.changed {
|
||||
background-color: #e0c150;
|
||||
border-color: #d4af25;
|
||||
color: white;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span.mixed {
|
||||
background-color: #e0c150;
|
||||
border-color: #579e64;
|
||||
color: #69ad74;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span.deleted {
|
||||
background-color: #c76861;
|
||||
border-color: #b8605a;
|
||||
color: white;
|
||||
}
|
||||
.repo_tab td.cmd span.state-block span.none {
|
||||
background-color: #e8e8e8;
|
||||
border-color: #dbdbdb;
|
||||
color: #c8c8c8;
|
||||
}
|
||||
|
||||
/* STAGE */
|
||||
.stage_tab {
|
||||
border: 1px solid #DDD;
|
||||
background: #fff;
|
||||
margin-top: 0.2em;
|
||||
}
|
||||
.stage_tab td {
|
||||
border-top: 1px solid #eee;
|
||||
color: #333;
|
||||
vertical-align: middle;
|
||||
padding: 2px 0.5em;
|
||||
}
|
||||
.stage_tab th {
|
||||
color: #BBB;
|
||||
font-size: 10pt;
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
background-color: #edf2f9;
|
||||
padding: 4px 0.5em;
|
||||
}
|
||||
.stage_tab td.status {
|
||||
width: 2em;
|
||||
text-align: center;
|
||||
}
|
||||
.stage_tab tbody tr:first-child td { padding-top: 0.5em; }
|
||||
.stage_tab tbody tr:last-child td { padding-bottom: 0.5em; }
|
||||
.stage_tab td.cmd a { padding: 0px 4px; }
|
||||
|
||||
/* STAGE */
|
||||
.stage_tab td.method {
|
||||
color: #ccc;
|
||||
}
|
||||
.stage_tab tr.firstrow td { border-top: 0px; }
|
||||
.stage_tab tr.title td {
|
||||
color: #BBB;
|
||||
font-size: 10pt;
|
||||
background-color: #edf2f9;
|
||||
padding: 4px 0.5em;
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
/* COMMIT */
|
||||
div.form_div {
|
||||
margin: 0.5em 0em;
|
||||
background-color: #F8F8F8;
|
||||
padding: 1em 1em;
|
||||
}
|
||||
|
||||
div.form_div td.field_name {
|
||||
color: #BBB;
|
||||
padding-right: 1em;
|
||||
}
|
||||
|
||||
/* SETTINGS STYLES */
|
||||
div.settings_container {
|
||||
padding: 0.5em;
|
||||
font-size: 10pt;
|
||||
color: #444;
|
||||
background-color: #f2f2f2;
|
||||
}
|
||||
|
||||
/* DIFF */
|
||||
div.diff {
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.7em
|
||||
}
|
||||
div.diff_head {
|
||||
padding-bottom: 0.7em;
|
||||
}
|
||||
span.diff_name {
|
||||
padding-left: 0.5em;
|
||||
color: grey;
|
||||
}
|
||||
span.diff_name strong {
|
||||
color: #333;
|
||||
}
|
||||
span.diff_banner {
|
||||
border-style: solid;
|
||||
border-width: 1px;
|
||||
border-radius: 3px;
|
||||
padding-left: 0.3em;
|
||||
padding-right: 0.3em;
|
||||
}
|
||||
.diff_ins {
|
||||
border-color: #7bea7b;
|
||||
background-color: #d3f8d3;
|
||||
}
|
||||
.diff_del {
|
||||
border-color: #ff667d;
|
||||
background-color: #ffccd4;
|
||||
}
|
||||
.diff_upd {
|
||||
border-color: #dada00;
|
||||
background-color: #ffffcc;
|
||||
}
|
||||
div.diff_content {
|
||||
background: #fff;
|
||||
border-top: 1px solid #DDD;
|
||||
border-bottom: 1px solid #DDD;
|
||||
}
|
||||
div.diff_head span.state-block {
|
||||
margin-left: 0.5em;
|
||||
font-family: Consolas, Lucida Console, Courier, monospace;
|
||||
display: inline-block;
|
||||
text-align: center;
|
||||
}
|
||||
div.diff_head span.state-block span {
|
||||
display: inline-block;
|
||||
padding: 0px 4px;
|
||||
border: 1px solid #000;
|
||||
}
|
||||
div.diff_head span.state-block span.added {
|
||||
background-color: #69ad74;
|
||||
border-color: #579e64;
|
||||
color: white;
|
||||
}
|
||||
div.diff_head span.state-block span.changed {
|
||||
background-color: #e0c150;
|
||||
border-color: #d4af25;
|
||||
color: white;
|
||||
}
|
||||
div.diff_head span.state-block span.mixed {
|
||||
background-color: #e0c150;
|
||||
border-color: #579e64;
|
||||
color: #69ad74;
|
||||
}
|
||||
div.diff_head span.state-block span.deleted {
|
||||
background-color: #c76861;
|
||||
border-color: #b8605a;
|
||||
color: white;
|
||||
}
|
||||
div.diff_head span.state-block span.none {
|
||||
background-color: #e8e8e8;
|
||||
border-color: #dbdbdb;
|
||||
color: #c8c8c8;
|
||||
}
|
||||
|
||||
/* DIFF TABLE */
|
||||
table.diff_tab {
|
||||
font-family: Consolas, Courier, monospace;
|
||||
font-size: 10pt;
|
||||
}
|
||||
table.diff_tab td,th {
|
||||
color: #444;
|
||||
padding-left: 0.5em;
|
||||
padding-right: 0.5em;
|
||||
}
|
||||
table.diff_tab th {
|
||||
text-align: left;
|
||||
font-weight: normal;
|
||||
padding-top: 3px;
|
||||
padding-bottom: 3px;
|
||||
}
|
||||
table.diff_tab thead.header th {
|
||||
color: #EEE;
|
||||
background-color: #BBB;
|
||||
text-align: left;
|
||||
font-weight: bold;
|
||||
padding-left: 0.5em;
|
||||
font-size: 9pt;
|
||||
}
|
||||
table.diff_tab thead.nav_line {
|
||||
background-color: #edf2f9;
|
||||
}
|
||||
table.diff_tab thead.nav_line th {
|
||||
color: #bbb;
|
||||
}
|
||||
table.diff_tab td.num, th.num {
|
||||
text-align: right;
|
||||
color: #ccc;
|
||||
border-left: 1px solid #eee;
|
||||
border-right: 1px solid #eee;
|
||||
}
|
||||
table.diff_tab code {
|
||||
font-family: inherit;
|
||||
white-space: pre;
|
||||
}
|
||||
table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }
|
||||
table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }
|
||||
|
||||
/* DEBUG INFO STYLES */
|
||||
div.debug_container {
|
||||
padding: 0.5em;
|
||||
font-size: 10pt;
|
||||
color: #444;
|
||||
font-family: Consolas, Courier, monospace;
|
||||
}
|
||||
div.debug_container p {
|
||||
margin: 0px;
|
||||
}
|
||||
|
||||
/* DB ENTRIES */
|
||||
div.db_list {
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.5em;
|
||||
}
|
||||
table.db_tab pre {
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
word-wrap:break-word;
|
||||
white-space: pre-wrap;
|
||||
margin: 0px;
|
||||
width: 30em;
|
||||
}
|
||||
table.db_tab tr.firstrow td { padding-top: 0.5em; }
|
||||
table.db_tab th {
|
||||
text-align: left;
|
||||
color: #888;
|
||||
padding: 0.5em;
|
||||
border-bottom: 1px #ddd solid;
|
||||
}
|
||||
table.db_tab td {
|
||||
color: #333;
|
||||
padding: 0.5em;
|
||||
vertical-align: top;
|
||||
}
|
||||
table.db_tab td.data {
|
||||
color: #888;
|
||||
font-style: italic;
|
||||
}
|
||||
|
||||
/* DB ENTRY DISPLAY */
|
||||
div.db_entry {
|
||||
background-color: #f2f2f2;
|
||||
padding: 0.5em;
|
||||
}
|
||||
div.db_entry pre {
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
word-wrap:break-word;
|
||||
white-space: pre-wrap;
|
||||
background-color: #eaeaea;
|
||||
padding: 0.5em;
|
||||
margin: 0.5em 0em;
|
||||
width: 50em;
|
||||
}
|
||||
div.db_entry table.toolbar {
|
||||
width: 50em;
|
||||
}
|
||||
table.tag {
|
||||
display: inline-block;
|
||||
border: 1px #b3c1cc solid;
|
||||
background-color: #eee;
|
||||
border-radius: 3px;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
table.tag td { padding: 0.2em 0.5em; }
|
||||
table.tag td.label { background-color: #b3c1cc; }
|
||||
|
||||
/* DB ENTRY DISPLAY */
|
||||
div.db_entry textarea { margin: 0.5em 0em; }
|
||||
table.tag {
|
||||
display: inline-block;
|
||||
border: 1px #b3c1cc solid;
|
||||
background-color: #eee;
|
||||
border-radius: 3px;
|
||||
margin-right: 0.5em;
|
||||
}
|
||||
table.tag td { padding: 0.2em 0.5em; }
|
||||
table.tag td.label { background-color: #b3c1cc; }
|
41
src/zabapgit_css_common.w3mi.xml
Normal file
41
src/zabapgit_css_common.w3mi.xml
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_W3MI" serializer_version="v2.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<NAME>ZABAPGIT_CSS_COMMON</NAME>
|
||||
<TEXT>AbapGit common styles</TEXT>
|
||||
<PARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||
<NAME>fileextension</NAME>
|
||||
<VALUE>.css</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||
<NAME>filename</NAME>
|
||||
<VALUE>common.css</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||
<NAME>filesize</NAME>
|
||||
<VALUE>12136</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||
<NAME>mimetype</NAME>
|
||||
<VALUE>text/css</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_CSS_COMMON</OBJID>
|
||||
<NAME>version</NAME>
|
||||
<VALUE/>
|
||||
</WWWPARAMS>
|
||||
</PARAMS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -55,7 +55,8 @@ TYPES: BEGIN OF ty_metadata,
|
|||
|
||||
TYPES: BEGIN OF ty_web_asset,
|
||||
url TYPE w3url,
|
||||
content TYPE string,
|
||||
base64 TYPE string,
|
||||
content TYPE xstring,
|
||||
END OF ty_web_asset.
|
||||
TYPES tt_web_assets TYPE STANDARD TABLE OF ty_web_asset WITH DEFAULT KEY.
|
||||
|
||||
|
|
|
@ -29,8 +29,8 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
|
||||
DATA: mi_cur_page TYPE REF TO lif_gui_page,
|
||||
mt_stack TYPE STANDARD TABLE OF ty_page_stack,
|
||||
mt_assets TYPE tt_w3urls,
|
||||
mo_router TYPE REF TO lcl_gui_router,
|
||||
mo_asset_man TYPE REF TO lcl_gui_asset_manager,
|
||||
mo_html_viewer TYPE REF TO cl_gui_html_viewer.
|
||||
|
||||
METHODS constructor
|
||||
|
@ -39,12 +39,16 @@ CLASS lcl_gui DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
|
|||
METHODS startup
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS cache_image
|
||||
IMPORTING iv_url TYPE w3url
|
||||
iv_base64 TYPE string.
|
||||
|
||||
METHODS cache_html
|
||||
IMPORTING iv_html TYPE string
|
||||
IMPORTING iv_text TYPE string
|
||||
RETURNING VALUE(rv_url) TYPE w3url.
|
||||
|
||||
METHODS cache_asset
|
||||
IMPORTING iv_text TYPE string OPTIONAL
|
||||
iv_xdata TYPE xstring OPTIONAL
|
||||
iv_url TYPE w3url OPTIONAL
|
||||
iv_type TYPE c
|
||||
iv_subtype TYPE c
|
||||
RETURNING VALUE(rv_url) TYPE w3url.
|
||||
|
||||
METHODS render
|
||||
|
@ -182,9 +186,7 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
|
||||
METHOD call_page.
|
||||
|
||||
DATA: lt_assets TYPE tt_web_assets,
|
||||
ls_stack TYPE ty_page_stack.
|
||||
FIELD-SYMBOLS <ls_asset> LIKE LINE OF lt_assets.
|
||||
DATA: ls_stack TYPE ty_page_stack.
|
||||
|
||||
IF iv_replacing = abap_false AND NOT mi_cur_page IS INITIAL.
|
||||
ls_stack-page = mi_cur_page.
|
||||
|
@ -192,16 +194,6 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
APPEND ls_stack TO mt_stack.
|
||||
ENDIF.
|
||||
|
||||
lt_assets = ii_page->get_assets( ).
|
||||
IF lines( lt_assets ) > 0.
|
||||
LOOP AT lt_assets ASSIGNING <ls_asset>.
|
||||
READ TABLE mt_assets TRANSPORTING NO FIELDS WITH KEY table_line = <ls_asset>-url.
|
||||
CHECK sy-subrc IS NOT INITIAL.
|
||||
APPEND <ls_asset>-url TO mt_assets.
|
||||
cache_image( iv_url = <ls_asset>-url iv_base64 = <ls_asset>-content ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
mi_cur_page = ii_page.
|
||||
render( ).
|
||||
|
||||
|
@ -216,20 +208,43 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
METHOD startup.
|
||||
|
||||
DATA: lt_events TYPE cntl_simple_events,
|
||||
ls_event LIKE LINE OF lt_events.
|
||||
ls_event LIKE LINE OF lt_events,
|
||||
lt_assets TYPE tt_web_assets.
|
||||
|
||||
FIELD-SYMBOLS <ls_asset> LIKE LINE OF lt_assets.
|
||||
|
||||
CREATE OBJECT mo_router.
|
||||
CREATE OBJECT mo_asset_man.
|
||||
CREATE OBJECT mo_html_viewer
|
||||
EXPORTING
|
||||
query_table_disabled = abap_true
|
||||
parent = cl_gui_container=>screen0.
|
||||
|
||||
CLEAR ls_event.
|
||||
ls_event-eventid = mo_html_viewer->m_id_sapevent.
|
||||
cache_asset( iv_xdata = mo_asset_man->get_asset( 'css_common' )
|
||||
iv_url = 'css/common.css'
|
||||
iv_type = 'text'
|
||||
iv_subtype = 'css' ).
|
||||
|
||||
cache_asset( iv_xdata = mo_asset_man->get_asset( 'js_common' )
|
||||
iv_url = 'js/common.js'
|
||||
iv_type = 'text'
|
||||
iv_subtype = 'javascript' ).
|
||||
|
||||
lt_assets = mo_asset_man->get_images( ).
|
||||
IF lines( lt_assets ) > 0.
|
||||
LOOP AT lt_assets ASSIGNING <ls_asset>.
|
||||
cache_asset( iv_xdata = <ls_asset>-content
|
||||
iv_url = <ls_asset>-url
|
||||
iv_type = 'image'
|
||||
iv_subtype = 'png' ).
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
ls_event-eventid = mo_html_viewer->m_id_sapevent.
|
||||
ls_event-appl_event = abap_true.
|
||||
APPEND ls_event TO lt_events.
|
||||
mo_html_viewer->set_registered_events( lt_events ).
|
||||
|
||||
mo_html_viewer->set_registered_events( lt_events ).
|
||||
SET HANDLER me->on_event FOR mo_html_viewer.
|
||||
|
||||
ENDMETHOD. "startup
|
||||
|
@ -246,57 +261,59 @@ CLASS lcl_gui IMPLEMENTATION.
|
|||
|
||||
METHOD cache_html.
|
||||
|
||||
DATA: lt_data TYPE TABLE OF text200.
|
||||
|
||||
CALL FUNCTION 'SCMS_STRING_TO_FTEXT'
|
||||
EXPORTING
|
||||
text = iv_html
|
||||
TABLES
|
||||
ftext_tab = lt_data.
|
||||
|
||||
mo_html_viewer->load_data(
|
||||
IMPORTING
|
||||
assigned_url = rv_url
|
||||
CHANGING
|
||||
data_table = lt_data ).
|
||||
rv_url = cache_asset( iv_text = iv_text
|
||||
iv_type = 'text'
|
||||
iv_subtype = 'html' ).
|
||||
|
||||
ENDMETHOD. "cache_html
|
||||
|
||||
METHOD cache_image.
|
||||
METHOD cache_asset.
|
||||
|
||||
DATA lv_xtmp TYPE xstring.
|
||||
DATA lv_size TYPE int4.
|
||||
DATA lt_xdata TYPE TABLE OF w3_mime. " RAW255
|
||||
DATA: lv_xstr TYPE xstring,
|
||||
lt_xdata TYPE TABLE OF w3_mime, " RAW255
|
||||
lv_size TYPE int4.
|
||||
|
||||
CALL FUNCTION 'SSFC_BASE64_DECODE'
|
||||
EXPORTING
|
||||
b64data = iv_base64
|
||||
IMPORTING
|
||||
bindata = lv_xtmp
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
ASSERT iv_text IS SUPPLIED OR iv_xdata IS SUPPLIED.
|
||||
|
||||
ASSERT sy-subrc = 0. " Image data error
|
||||
IF iv_text IS SUPPLIED. " String input
|
||||
|
||||
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
|
||||
EXPORTING
|
||||
text = iv_text
|
||||
IMPORTING
|
||||
buffer = lv_xstr
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ELSE. " Raw input
|
||||
lv_xstr = iv_xdata.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
||||
EXPORTING
|
||||
buffer = lv_xtmp
|
||||
buffer = lv_xstr
|
||||
IMPORTING
|
||||
output_length = lv_size
|
||||
TABLES
|
||||
binary_tab = lt_xdata.
|
||||
|
||||
mo_html_viewer->load_data(
|
||||
EXPORTING type = 'image'
|
||||
subtype = 'png'
|
||||
size = lv_size
|
||||
url = iv_url
|
||||
CHANGING data_table = lt_xdata
|
||||
EXCEPTIONS OTHERS = 1 ) ##NO_TEXT.
|
||||
EXPORTING
|
||||
type = iv_type
|
||||
subtype = iv_subtype
|
||||
size = lv_size
|
||||
url = iv_url
|
||||
IMPORTING
|
||||
assigned_url = rv_url
|
||||
CHANGING
|
||||
data_table = lt_xdata
|
||||
EXCEPTIONS
|
||||
OTHERS = 1 ) ##NO_TEXT.
|
||||
|
||||
ASSERT sy-subrc = 0. " Image data error
|
||||
|
||||
ENDMETHOD. "cache_image
|
||||
ENDMETHOD. " cache_asset.
|
||||
|
||||
METHOD get_current_page_name.
|
||||
IF mi_cur_page IS BOUND.
|
||||
|
|
414
src/zabapgit_gui_asset_manager.prog.abap
Normal file
414
src/zabapgit_gui_asset_manager.prog.abap
Normal file
|
@ -0,0 +1,414 @@
|
|||
*&---------------------------------------------------------------------*
|
||||
*& Include ZABAPGIT_GUI_ASSET_MANAGER
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_gui_asset_manager DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_gui.
|
||||
PUBLIC SECTION.
|
||||
|
||||
METHODS get_asset
|
||||
IMPORTING iv_asset_name TYPE string
|
||||
RETURNING VALUE(rv_data) TYPE xstring
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get_images
|
||||
RETURNING VALUE(rt_images) TYPE tt_web_assets.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
METHODS get_inline_asset
|
||||
IMPORTING iv_asset_name TYPE string
|
||||
RETURNING VALUE(rv_data) TYPE xstring
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get_mime_asset
|
||||
IMPORTING iv_asset_name TYPE c
|
||||
RETURNING VALUE(rv_data) TYPE xstring
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get_inline_images
|
||||
RETURNING VALUE(rt_images) TYPE tt_web_assets.
|
||||
|
||||
ENDCLASS. "lcl_gui_asset_manager
|
||||
|
||||
CLASS lcl_gui_asset_manager IMPLEMENTATION.
|
||||
|
||||
METHOD get_asset.
|
||||
|
||||
DATA: lv_asset_name TYPE string,
|
||||
lv_mime_name TYPE wwwdatatab-objid.
|
||||
|
||||
lv_asset_name = to_upper( iv_asset_name ).
|
||||
|
||||
CASE lv_asset_name.
|
||||
WHEN 'CSS_COMMON'.
|
||||
lv_mime_name = 'ZABAPGIT_CSS_COMMON'.
|
||||
WHEN 'JS_COMMON'.
|
||||
lv_mime_name = 'ZABAPGIT_JS_COMMON'.
|
||||
WHEN OTHERS.
|
||||
lcx_exception=>raise( |Improper resource name: { iv_asset_name }| ).
|
||||
ENDCASE.
|
||||
|
||||
rv_data = get_mime_asset( lv_mime_name ).
|
||||
IF rv_data IS INITIAL. " Fallback to inline asset
|
||||
rv_data = get_inline_asset( lv_asset_name ).
|
||||
ENDIF.
|
||||
|
||||
IF rv_data IS INITIAL.
|
||||
lcx_exception=>raise( |Failed to get GUI resource: { iv_asset_name }| ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. " get_asset.
|
||||
|
||||
METHOD get_mime_asset.
|
||||
|
||||
DATA: ls_key TYPE wwwdatatab,
|
||||
lv_size_c TYPE wwwparams-value,
|
||||
lv_size TYPE i,
|
||||
lt_w3mime TYPE STANDARD TABLE OF w3mime.
|
||||
|
||||
ls_key-relid = 'MI'.
|
||||
ls_key-objid = iv_asset_name.
|
||||
|
||||
" Get exact file size
|
||||
CALL FUNCTION 'WWWPARAMS_READ'
|
||||
EXPORTING
|
||||
relid = ls_key-relid
|
||||
objid = ls_key-objid
|
||||
name = 'filesize'
|
||||
IMPORTING
|
||||
value = lv_size_c
|
||||
EXCEPTIONS
|
||||
entry_not_exists = 1.
|
||||
|
||||
IF sy-subrc IS NOT INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
lv_size = lv_size_c.
|
||||
|
||||
" Get binary data
|
||||
CALL FUNCTION 'WWWDATA_IMPORT'
|
||||
EXPORTING
|
||||
key = ls_key
|
||||
TABLES
|
||||
mime = lt_w3mime
|
||||
EXCEPTIONS
|
||||
wrong_object_type = 1
|
||||
import_error = 2.
|
||||
|
||||
IF sy-subrc IS NOT INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
CALL FUNCTION 'SCMS_BINARY_TO_XSTRING'
|
||||
EXPORTING
|
||||
input_length = lv_size
|
||||
IMPORTING
|
||||
buffer = rv_data
|
||||
TABLES
|
||||
binary_tab = lt_w3mime
|
||||
EXCEPTIONS
|
||||
failed = 1.
|
||||
|
||||
IF sy-subrc IS NOT INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD. " get_mime_asset.
|
||||
|
||||
METHOD get_images.
|
||||
|
||||
FIELD-SYMBOLS <image> LIKE LINE OF rt_images.
|
||||
|
||||
rt_images = get_inline_images( ).
|
||||
|
||||
" Convert to xstring
|
||||
LOOP AT rt_images ASSIGNING <image>.
|
||||
CALL FUNCTION 'SSFC_BASE64_DECODE'
|
||||
EXPORTING
|
||||
b64data = <image>-base64
|
||||
IMPORTING
|
||||
bindata = <image>-content
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
ASSERT sy-subrc = 0. " Image data error
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD. " get_images.
|
||||
|
||||
DEFINE _inline.
|
||||
APPEND &1 TO lt_data.
|
||||
END-OF-DEFINITION.
|
||||
|
||||
METHOD get_inline_asset.
|
||||
|
||||
DATA: lt_data TYPE ty_string_tt,
|
||||
lv_str TYPE string.
|
||||
|
||||
CASE iv_asset_name.
|
||||
WHEN 'CSS_COMMON'.
|
||||
" @@abapmerge include zabapgit_css_common.w3mi.data.css > _inline '$$'.
|
||||
WHEN 'JS_COMMON'.
|
||||
" @@abapmerge include zabapgit_js_common.w3mi.data.js > _inline '$$'.
|
||||
WHEN OTHERS.
|
||||
lcx_exception=>raise( |No inline resource: { iv_asset_name }| ).
|
||||
ENDCASE.
|
||||
|
||||
CONCATENATE LINES OF lt_data INTO lv_str SEPARATED BY gc_newline.
|
||||
|
||||
CALL FUNCTION 'SCMS_STRING_TO_XSTRING'
|
||||
EXPORTING
|
||||
text = lv_str
|
||||
IMPORTING
|
||||
buffer = rv_data
|
||||
EXCEPTIONS
|
||||
OTHERS = 1.
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
ENDMETHOD. " get_inline_asset.
|
||||
|
||||
METHOD get_inline_images.
|
||||
|
||||
DATA ls_image TYPE ty_web_asset.
|
||||
|
||||
* see https://github.com/larshp/abapGit/issues/201 for source SVG
|
||||
ls_image-url = 'img/logo' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAKMAAAAoCAYAAACSG0qbAAAABHNCSVQICAgIfAhkiAAA'
|
||||
&& 'AAlwSFlzAAAEJQAABCUBprHeCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9y'
|
||||
&& 'Z5vuPBoAAA8VSURBVHic7Zx7cJzVeYef31nJAtvYko1JjM3FYHlXimwZkLWyLEMcwIGQ'
|
||||
&& 'cEkDJWmTltLStGkoDCkzwBAuCemUlksDNCkhJTTTljJpZhIuBQxxAWPvyuYiW7UkG8Il'
|
||||
&& 'UByIsS1sLEu75+0fu5JXu9/etAJz0TOzM/rOec85765+37m+3yczY8w0NU3qrwv9npfa'
|
||||
&& 'Hfx02pPPd469sgk+7misYnyjpWXy5IOG7kd8ZjjNjEtr13TdOm7eTfCxwo2lUJAQASRu'
|
||||
&& '2dnRfMn4uDbBx42yxZhPiMNMCHKCsVK2GGuqqqoQUwrZTAhygrFQshjfaGmZ/M7yxQtm'
|
||||
&& 'xGL9/qDqzwLxQvYTgpygXEoS4/DQ7LE1O05atLBu1YZdE4KcYLwpupoOmCO+5Z2dXPfE'
|
||||
&& 'xk07Tm2ZroGhBwX1wAygKqiOiVX2Rw9Jam/gyH0wuGGzvTEudRYSY4HFyogghxN2n7Sw'
|
||||
&& 'IendvcCioLoOtCCXNeqohOf0oDwPq9f3Wt/77dOHlWhYzUj/BRybTnrGEnZO5wv2m0rq'
|
||||
&& 'DezJoOiqeZbzegzpk6TVPPWJTT39y5svMogF1ZcesjlQgkwYp4F+EJQXwv4E+MiLUZJa'
|
||||
&& 'F7AIcRq4hWZ2mMRhQD/oZcErXv7FScaja3rt/wpU9E/sFyLACQq57wB/XIl/gWIstn2T'
|
||||
&& 'xpHVre7ZW71p8sFDeQscSEHKu3pTBadNH2Lq61VT57iwNazLgaNSqYaUaWXLDZCJIbBo'
|
||||
&& 'g3tK2A2xHns0oMrm3CRrqdTPnAVMiUIEmLlz2XGLMxNmH7YrifFcoUIHalHj8f8p6UfA'
|
||||
&& 'O+932weStno1zghps6Q7GBFiUYRxopkeaZ2vIwLyfxtQ4vV8lbWHNScacf+T/vwqn90o'
|
||||
&& 'MZYhRADJ+bv725vmj6Q8tHWffPKUD6IgO/tsfawneRHYd97Pdg8kSyJaZiGtBY4pYPYO'
|
||||
&& 'kH84C0Cyv8tKSiK7OZ99EpYAJ2V8AhkRY5lCHGaxhaq+BLCzY/EXd5y0aOG0td1vf1AF'
|
||||
&& 'CWCw7/1u80DQEtahQvcB03MyjQfM7Hwnmxfv9dPivX5SssqOwuzPSqk71mN3ymw5ZtdK'
|
||||
&& 'dmVIdly8xx7JZ29yy0qptwrGLMRRCA6T1w93nLTo5Lq13Zv625tOMRd6DLF4v0lWmQO8'
|
||||
&& 'qPko45y7TWaHZyUnwa6M99mN2fYbuu1V4K5oxF1B4Z4UgFifrQHWFLNbvkh1QheV5DNN'
|
||||
&& 'TZMqFWIGs5zX48M95PTqGa3TZ4erzbvj8/WUErf0L2++uNyGJLn2Js1oDeuYlkbNbmlR'
|
||||
&& 'deXup2hq0qS2es2VlHMDFaOlRdXL5uuwlnodG23QTEljCkbJV3d7WHOK+dXWqHqZnZeb'
|
||||
&& 'Y1fGe3OFOArRU5GTGbSHNWdwUL8Epo1qIQ9V/bXu3HES4jCznNfjb7e1zZ8Ri/UD1MLz'
|
||||
&& 'u05s/huMx4IKGNy4+8Tj/2Pqk8++Vaji86TQqxEuNNM5rWGtSCaokSDkgd0QjbidoPvN'
|
||||
&& '+5s7t9jz5TgdbdBMvLsG2cop6FgLUdUaZk804jYKuyrWa6vzlT2+XrOqQnxd6KwQOj5R'
|
||||
&& 'hULpL9Yaxkcj7g3QT6zK397ZbdtGtbtAZ+B0U3adkt0c67E7OyI6fFDuSpktC6HGpJjU'
|
||||
&& 'GmZ3NOI2mdnVnX32eHZZ7903hGXfBG8mp3J7sd/B0DPCTgUmBf9O7lmMybk56or3Jn8f'
|
||||
&& 'oLVB7Q5dZ9Iy4OBsw2jYbUUk96fwQrzHf955iBZzsDA+aL9k1owZ20fNzaY/tfFXwK48'
|
||||
&& 'ldQkSZ5YqJXmZk15JaJfmOmfgdOAmgCzWrCvyum5aIO+Uor3AIbOx7QV2TeBMPu3vKYA'
|
||||
&& 'Sw091hbWt4PKRhu0oDqkmND1wAnk3vkOmAN2lRLa2hrWMVm5Tek2R3286YzWiK4eQltk'
|
||||
&& '9g1gMfsFMhVYKunR1obQddk+SXZqwLe8acMGe7fYb9HZk7wm3utrBmpsqiXsyClHMHK6'
|
||||
&& '0hLWoRjHBfmLbP9K3bPYjFPIFWLaQeZnlZ8H4JyFflrMwcK4wG63v3/ycZnXOzqalxE0'
|
||||
&& 'mU7x9rvvVv93oVZqBtzNGGeU7Jbp9pZGzS7ReiVQVyDfmXRda4PaA9p5mBLmWGmmSron'
|
||||
&& 'M0FytUGGgjPTAi8UIeVk9u1og5YOJ0QbNBOjIac+Y22JPgLQ1WV7Ol+w36xebYnhtGpj'
|
||||
&& 'FjBYTj3l4KY9/dx6My4d74pN/Ki/Y9HpSG5HR/Nyh/1DHtO9OM6dvWFDwbtWslOykt6U'
|
||||
&& 's5VWZbOFnQtsyMqvc56Ty3T7NeBhLGAfDZDpe5nX6V5uXpbZ43K2NGQ2V9glwLas/I62'
|
||||
&& 'hfrE8EWsJ3mFsGYs+OQqze+A1cBLgbmma4f/9AmOJGBe5vKVLYN1W6wnOWSHmdkVhexM'
|
||||
&& 'PG6yC0x2AbmjoQ3njdh4uwrSw1Htmq5bd3Y0I3FLpQ5n0GTSQ7s6Fva70RPYTPbi+Pz0'
|
||||
&& 'J7ryboRC+m5PnRfsJjVEAfp5bLNflTb52dKIBj36RWY5ZyX2WCLukvbX67ZYHFLHZtGw'
|
||||
&& '+1fD/jDL8qQljWpav9m6Uw3wKYzXgUNJTxsk+0Fssw0L6x+j4dCx6eF/BEtwDBkbx7Fe'
|
||||
&& '29gWCa0yrC2rvXXO26WZfrWG3V2kji8zWbm0QUev67GX5ZgZ8A0H121hXIIZNrxou9oW'
|
||||
&& '6m4b4m/z2aTP+fsAohF3PaNHROvssZ8ElRs5DnyPBAkovxDFF4oJESDeY9tJD4Ur5umg'
|
||||
&& 'PSFm1Uy23Zk2SaM7e43p5Y4uxUMzu2f4H56+tuZmff2gfTqHrGEy5DkW6Abo7LH7gfsB'
|
||||
&& '2uo1LQGzBmoYFSwg57vNcjqqo4F1JXh2S7Zfx83TZZNqdD6MXkQkU369jONgcmfxe83M'
|
||||
&& 'B7XQEdEhg1B0HzDk2ZHpy3vBqLPpMQhyi/f2AIA3WyPZG6KkeVpKiE925awEi7H6JRsA'
|
||||
&& 'cqJDfIi9oayfW8ZB5dY/TFeX7YlGQg+RmgJkcnSQfWyr9QP92enmGcgeNCvx67mXbGdb'
|
||||
&& 'xD1hjI5AklJ+ydgTUGz6iiZNXd09+gYGGIRlQgXn6wDesZYSRFsJOYES5QjSw7fqnu7q'
|
||||
&& 'Bqh7uqu7f3nzdw3uKFJszEIcpqVRs12SRuAYiTrJ1YXMzSGgS6iQnHmWyQWe70pySz/F'
|
||||
&& 'MZagMWnMlaiTuTqTTih7s7IIHm1T1ncVI37l3BAAA4McAYF7iAvG17uxExi1U6Igd9XN'
|
||||
&& 'Dj+UmZA8qPrf3MDQbeSPIN8Ldub0JzeWLcT2I3Swn8JFhr4VQnMze5uKnv0ugOHfUXa3'
|
||||
&& 'ZhySedkR0eGDuMtbw/rTZCI1pA9PF0yWf4e3MnJ7YKXm0pOr6H03QRIIZeYnUj1njhid'
|
||||
&& '8aaRscKX/VGWSRLsCjnK2rcdC3njGUsQ5PSdv92yqJaMk5WBoRMpJsSnNgZufBdCkmsN'
|
||||
&& '60FgRbllK8PNzOlttT/qpz2sOUnpeWGHvq9ewcyc28/7XQCru213NOL+l6wgZ0kXAjnD'
|
||||
&& 'cazP7gXuTdu41rCyxbgr3mt/P16+F6LgUVXtmq5bC237yNsNu5YtPBZgx4kLFznZ1XlM'
|
||||
&& 'BzB/1liECBAN801yhfiq0HflbKXz1ojZ4qCylSBsbm6q/93wX0n0Q1Ir6UzWYXaZyZaF'
|
||||
&& 'qqxeZn813n4ZlhPWJWXMo00P5OTDF5c0qmm8fRlPip6bFhHk6Ti3ddfy5i3OXBemJQE2'
|
||||
&& 'A5g/c/qaTasC8krC0KdzE+3qWG/y6thmW7Vui/UkQ7w51vqDaGnRZFInPdlshNQ2C8oJ'
|
||||
&& 'h0oqaefF++zmzh5bu7bbXrBxjp88bp5qgZzNdyfWD/9t+B+TO4GW8/p+R0SHcGBxLWEF'
|
||||
&& 'jiQlHeIXEaRIPZAVRMVCTDcQCUh8LfOyaqjgCcr+YpY7NRFa2VY/egsqtNtdw8ie5gjJ'
|
||||
&& 'oUTqicjofOYA2f/YgcR03s5MMBF4wlIa7rMr5mnUyru6xl0LZAeFvDG3l83DF5199muk'
|
||||
&& 'oJO1FUMoviSi8Nh9Kg+Ru7qvUvCqPO+cMZsxbPsM4HXW9KcrEyKApTa7s9BVSyLaF3Ik'
|
||||
&& 'SbLSQros18RyInkkV2u5q+6zLaS+aCT0oJl/QVI78IWcsvDos1vtLYCE551QKNuCKW63'
|
||||
&& '+157g36cMOYI9yWhC3K+j4KDEHKxC9+t0altDaFHwL/kvVZIBJw761/uM5/MTJlU7S/Z'
|
||||
&& 'N6hTBNlhZA0OPReNuGdM6nL4jR4G5ZnRusAtKmVHwg1Slcxe11nODZJKh1fJ6kwM3dQa'
|
||||
&& 'VgOw3omjkGuL9/o/L/vFTzs7mi8pQZBpIT4f9PxE2bRFQncY9pdjKDoExDH7ebzPbgFo'
|
||||
&& 'bQjdng48KBfvzZau77ORN61FI66PsW2N7ARiZnZTZ589BtAWCV1v5J1zF+JNVdui2CbL'
|
||||
&& 'OcJsq1ejD2lVgCDL4e14r58J0N6k+cmEu0HYIssdrbxgnaGeeG9yJEg32hC6GbOix81y'
|
||||
&& 'trTsWLtiixpgQNLZ4yVEgCT++xSP0H7C0N1ZadVAh6SR3kRm2WfJO0H/XqTuQcn+IlOI'
|
||||
&& 'AFjRVaZhus3g2az0WuA0wcIi5QP3DDNIIPtakBABYltts7AO4OEi9eTFYGCksSRzwM4L'
|
||||
&& 'ECKAM1gG9tVR5UP+RkqZN5s7a0yBnwUEOSDp7GlPPp83BH0srO+1PmQrDIIen9wOdnln'
|
||||
&& 'n31G5n9ZtDLL6ck2x3uTf6DUee8rASX6vNnyWI/dmZ0R77O7LNXLBkWy9CE7Pd6XvNih'
|
||||
&& 'QkEQeZHZl9PBFtsDstebtyWFwv0B4r32UrzXn+6xDtBdwIslNL0N+JnMvravxiraFO/s'
|
||||
&& 'tm0y+xzQlcfkddCNCe/vGfP7GQH6lzdfbHAjqSCBHZK+PN5CzESSlixgnhMLzXAeXp+3'
|
||||
&& 'hWfuM0sWL10abQv1CdtHixzvmtiYPhcvSFOTJk1NEPEQkWdPUry4oc96y2o3YJiWs5Wx'
|
||||
&& 'zbYq83THHHu9Y1N2kG45tDRqdsgzxxuznKPOGbsTsN2M7d6zfXhePJ5Ici1h6mUcAcw0'
|
||||
&& '8Zo5fp35NoqKxAjwTrRhZmLSpPY9ySmPzV27dm+lTn9cKSTGA+XT+03Jq+l8HBLv2Q7c'
|
||||
&& 'X9K+ygQTFGDcHhaaoGJyouDNV7JH+eGj4mF6gspoC+tzJt1ObsT4MDsF2zxs886+Ml5v'
|
||||
&& '/PogUvEwPUGFiE+SX4gAtQa1gkhV7onQR4oJMR5oxC6stDeghd7Dh6E+CPw/HL4vVO2f'
|
||||
&& 'cpUAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
* http://fa2png.io/r/octicons/
|
||||
* colour: #808080
|
||||
* size: 16
|
||||
* https://www.base64-image.de/ can be used to convert images to base64
|
||||
|
||||
ls_image-url = 'img/sync' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQYGY3BIWuUAQAG'
|
||||
&& '4Pc7N72xsbGBYNE8tYpVZKDZX2CcYLEZ9yQxOQSz3D/YmkUsVovRQ2SYNJnlkFfH7VZu'
|
||||
&& 'wefJgrGHXnjrpQeu5B93smCwr6qqqp54433mDI5Ucds1u577o+p35hyoqe2cMThWVatJ'
|
||||
&& '7KiZrZxz18SJqqtJPFXPssRgw0oSH9WNXMCQU76qzSxx2cxxTlk3yhKb6mcSQy7kvjpM'
|
||||
&& 'Ylt98tpjN3POyFTdSuKSqppayxkjE/Uhc36p+m7PhhXr7vmmfhhnzpHPJqqqquqdcRY8'
|
||||
&& 'spq47sAXMyde2c3/+wvX7Y18BexhBwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/toc' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
|
||||
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
|
||||
&& 'AABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/repo_online' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
|
||||
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
|
||||
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
|
||||
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
|
||||
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/repo_offline' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICuaWnmAAAAG3RSTlMAAgQFBgsQFxweIiMtN3yI'
|
||||
&& 'nqOvt9Hp6/Hz9fktMNR/AAAAXElEQVQYV5WO2xJAMAxES1q3ugfF/v9/0qLyyL4k58xk'
|
||||
&& 'J0p9D7N5oeqZgSwy7fDZnHNdEE1gWK116tksl7hPimGFFPWYl7MU0zksRCl8TStKg1AJ'
|
||||
&& '0XNC8Zm4/c0BUVQHi0llOUYAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/pkg' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
|
||||
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
|
||||
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
|
||||
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
|
||||
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
|
||||
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/branch' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
|
||||
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
|
||||
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
|
||||
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
|
||||
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/link' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
|
||||
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
|
||||
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
|
||||
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/code' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
|
||||
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
|
||||
&& 'rkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/bin' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
|
||||
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
|
||||
&& 'RotPsQAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/obj' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
|
||||
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
|
||||
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/lock' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACIiIiIiIiI'
|
||||
&& 'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjNaTNB'
|
||||
&& 'AAAAEnRSTlMABgdBVXt8iYuRsNXZ3uDi6Pmu6tfUAAAASUlEQVQYV63KSxJAQBAE0TQ0'
|
||||
&& 'Znym1f0PayE0QdjJ5asCgGTu1hClqjppvaRXB60swBeA2QNUAIq+ICvKx367nqAn/P8Y'
|
||||
&& 't2jg3Q5rgASaF3KNRwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/dir' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAABmksxmksxm'
|
||||
&& 'ksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxm'
|
||||
&& 'ksxmksxmksxmksxMwQo8AAAAF3RSTlMABhIYIy1fZmhpe3+IiYuMkZvD7e/x93sipD4A'
|
||||
&& 'AAA+SURBVBhXY2BABzwiokAgzAYXEGdiBAIWIYQAPzcQCApzgwEXM4M4KuBDFxAYKAEx'
|
||||
&& 'VAFeBlYOTiTAzoThewD5hBAcnWM4gwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/burger' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEUAAABtktltktlt'
|
||||
&& 'ktltktltktltktltktltktltktk7ccVDAAAACXRSTlMAFDBLY2SFoPGv/DFMAAAAJ0lE'
|
||||
&& 'QVQIW2NggIHKmWAwmaETwpjGoBoKBo4MmIAkxXApuGK4dgwAAJa5IzLs+gRBAAAAAElF'
|
||||
&& 'TkSuQmCC'.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/star' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAABejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejcn2yvsVAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
ls_image-url = 'img/star-grey' ##NO_TEXT.
|
||||
ls_image-base64 =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAADQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NC2QdifAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_images.
|
||||
|
||||
|
||||
ENDMETHOD. " get_inline_images.
|
||||
|
||||
ENDCLASS. "lcl_gui_asset_manager
|
48
src/zabapgit_gui_asset_manager.prog.xml
Normal file
48
src/zabapgit_gui_asset_manager.prog.xml
Normal file
|
@ -0,0 +1,48 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_PROG" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<PROGDIR>
|
||||
<NAME>ZABAPGIT_GUI_ASSET_MANAGER</NAME>
|
||||
<STATE>A</STATE>
|
||||
<SQLX/>
|
||||
<EDTX/>
|
||||
<VARCL>X</VARCL>
|
||||
<DBAPL/>
|
||||
<DBNA/>
|
||||
<CLAS/>
|
||||
<TYPE/>
|
||||
<OCCURS/>
|
||||
<SUBC>I</SUBC>
|
||||
<APPL/>
|
||||
<SECU/>
|
||||
<CNAM/>
|
||||
<CDAT>0000-00-00</CDAT>
|
||||
<UNAM/>
|
||||
<UDAT>0000-00-00</UDAT>
|
||||
<VERN/>
|
||||
<LEVL/>
|
||||
<RSTAT/>
|
||||
<RMAND/>
|
||||
<RLOAD>E</RLOAD>
|
||||
<FIXPT/>
|
||||
<SSET/>
|
||||
<SDATE>0000-00-00</SDATE>
|
||||
<STIME/>
|
||||
<IDATE>0000-00-00</IDATE>
|
||||
<ITIME/>
|
||||
<LDBNAME/>
|
||||
<UCCHECK>X</UCCHECK>
|
||||
</PROGDIR>
|
||||
<TPOOL>
|
||||
<item>
|
||||
<ID>R</ID>
|
||||
<KEY/>
|
||||
<ENTRY>Include ZABAPGIT_GUI_ASSET_MANAGER</ENTRY>
|
||||
<LENGTH>34</LENGTH>
|
||||
<SPLIT/>
|
||||
</item>
|
||||
</TPOOL>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -78,7 +78,7 @@ CLASS lcl_http_client DEFINITION FINAL.
|
|||
iv_service TYPE string
|
||||
RAISING lcx_exception.
|
||||
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
DATA: mi_client TYPE REF TO if_http_client,
|
||||
mo_digest TYPE REF TO lcl_http_digest.
|
||||
|
||||
|
|
208
src/zabapgit_js_common.w3mi.data.js
Normal file
208
src/zabapgit_js_common.w3mi.data.js
Normal file
|
@ -0,0 +1,208 @@
|
|||
/**********************************************************
|
||||
* ABAPGIT JS function library
|
||||
**********************************************************/
|
||||
|
||||
/**********************************************************
|
||||
* Polyfills
|
||||
**********************************************************/
|
||||
|
||||
// Bind polyfill (for IE7), taken from https://developer.mozilla.org/
|
||||
if (!Function.prototype.bind) {
|
||||
Function.prototype.bind = function(oThis) {
|
||||
if (typeof this !== "function") {
|
||||
throw new TypeError("Function.prototype.bind - subject is not callable");
|
||||
}
|
||||
|
||||
var aArgs = Array.prototype.slice.call(arguments, 1),
|
||||
fToBind = this,
|
||||
fNOP = function() {},
|
||||
fBound = function() {
|
||||
return fToBind.apply(this instanceof fNOP
|
||||
? this
|
||||
: oThis,
|
||||
aArgs.concat(Array.prototype.slice.call(arguments)));
|
||||
};
|
||||
|
||||
if (this.prototype) {
|
||||
fNOP.prototype = this.prototype;
|
||||
}
|
||||
fBound.prototype = new fNOP();
|
||||
|
||||
return fBound;
|
||||
};
|
||||
}
|
||||
|
||||
/**********************************************************
|
||||
* Common functions
|
||||
**********************************************************/
|
||||
|
||||
// Output text to the debug div
|
||||
function debugOutput(text, dstID) {
|
||||
var stdout = document.getElementById(dstID || "debug-output");
|
||||
var wrapped = "<p>" + text + "</p>";
|
||||
stdout.innerHTML = stdout.innerHTML + wrapped;
|
||||
}
|
||||
|
||||
// Create hidden form and submit with sapevent
|
||||
function submitSapeventForm(params, action) {
|
||||
var form = document.createElement("form");
|
||||
form.setAttribute("method", "post");
|
||||
form.setAttribute("action", "sapevent:" + action);
|
||||
|
||||
for(var key in params) {
|
||||
var hiddenField = document.createElement("input");
|
||||
hiddenField.setAttribute("type", "hidden");
|
||||
hiddenField.setAttribute("name", key);
|
||||
hiddenField.setAttribute("value", params[key]);
|
||||
form.appendChild(hiddenField);
|
||||
}
|
||||
|
||||
document.body.appendChild(form);
|
||||
form.submit();
|
||||
}
|
||||
|
||||
// Set focus to a control
|
||||
function setInitialFocus(id) {
|
||||
document.getElementById(id).focus();
|
||||
}
|
||||
|
||||
// Submit an existing form
|
||||
function submitFormById(id) {
|
||||
document.getElementById(id).submit();
|
||||
}
|
||||
|
||||
/**********************************************************
|
||||
* STAGE PAGE Logic
|
||||
**********************************************************/
|
||||
|
||||
// Stage helper constructor
|
||||
function StageHelper(params) {
|
||||
this.pageSeed = params.seed;
|
||||
this.tabId = params.stageTabId;
|
||||
this.formAction = params.formAction;
|
||||
this.commitNodeId = params.commitNodeId;
|
||||
this.commitAllNodeId = params.commitAllNodeId;
|
||||
this.choiseCount = 0;
|
||||
this.setHook();
|
||||
}
|
||||
|
||||
// Hook global click listener on table, load/unload actions
|
||||
StageHelper.prototype.setHook = function() {
|
||||
var stageTab = document.getElementById(this.tabId);
|
||||
|
||||
if (stageTab.addEventListener) {
|
||||
stageTab.addEventListener("click", this.onEvent.bind(this));
|
||||
} else {
|
||||
stageTab.attachEvent("onclick", this.onEvent.bind(this));
|
||||
}
|
||||
|
||||
window.onbeforeunload = this.onPageUnload.bind(this);
|
||||
window.onload = this.onPageLoad.bind(this);
|
||||
}
|
||||
|
||||
// Store table state on leaving the page
|
||||
StageHelper.prototype.onPageUnload = function() {
|
||||
var data = this.collectData();
|
||||
window.sessionStorage.setItem(this.pageSeed, JSON.stringify(data));
|
||||
}
|
||||
|
||||
// Re-store table state on entering the page
|
||||
StageHelper.prototype.onPageLoad = function() {
|
||||
var data = JSON.parse(window.sessionStorage.getItem(this.pageSeed));
|
||||
var stage = document.getElementById(this.tabId);
|
||||
|
||||
for (var i = stage.rows.length - 1; i >= 0; i--) {
|
||||
var tr = stage.rows[i];
|
||||
if (tr.parentNode.tagName == "THEAD") continue;
|
||||
var context = tr.parentNode.className;
|
||||
var cmd = data[tr.cells[1].innerText];
|
||||
if (!cmd) continue;
|
||||
|
||||
this.formatTR(tr, cmd, context);
|
||||
this.choiseCount += (this.countChoiceImpact(cmd) > 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
this.updateMenu();
|
||||
}
|
||||
|
||||
// Event handler, change status
|
||||
StageHelper.prototype.onEvent = function (event) {
|
||||
if (!event.target) {
|
||||
if (event.srcElement) { event.target = event.srcElement; }
|
||||
else { return; }
|
||||
}
|
||||
|
||||
if (event.target.tagName != "A") return;
|
||||
|
||||
var td = event.target.parentNode;
|
||||
if (!td || td.tagName != "TD" || td.className != "cmd") return;
|
||||
|
||||
var cmd = event.target.innerText;
|
||||
var tr = td.parentNode;
|
||||
var context = tr.parentNode.className;
|
||||
|
||||
switch (cmd) {
|
||||
case "add": cmd = "A"; break;
|
||||
case "remove": cmd = "R"; break;
|
||||
case "ignore": cmd = "I"; break;
|
||||
case "reset": cmd = "?"; break;
|
||||
}
|
||||
|
||||
this.formatTR(tr, cmd, context);
|
||||
this.choiseCount += this.countChoiceImpact(cmd);
|
||||
this.updateMenu();
|
||||
}
|
||||
|
||||
// Update action counter -> affects menu update after
|
||||
StageHelper.prototype.countChoiceImpact = function (cmd) {
|
||||
if ("ARI".indexOf(cmd) > -1) { return 1; }
|
||||
else if ("?".indexOf(cmd) > -1) { return -1; }
|
||||
else { alert("Unknown command"); }
|
||||
}
|
||||
|
||||
// Re-format table line
|
||||
StageHelper.prototype.formatTR = function (tr, cmd, context) {
|
||||
var cmdReset = "<a>reset</a>";
|
||||
var cmdLocal = "<a>add</a>";
|
||||
var cmdRemote = "<a>ignore</a><a>remove</a>";
|
||||
|
||||
tr.cells[0].innerText = cmd;
|
||||
if (cmd == "?") {
|
||||
tr.cells[0].style.color = "#CCC"; //grey
|
||||
tr.cells[2].innerHTML = (context == "local") ? cmdLocal : cmdRemote;
|
||||
} else {
|
||||
tr.cells[0].style.color = "";
|
||||
tr.cells[2].innerHTML = cmdReset;
|
||||
}
|
||||
}
|
||||
|
||||
// Update menu items visibility
|
||||
StageHelper.prototype.updateMenu = function () {
|
||||
if (this.choiseCount > 0) {
|
||||
document.getElementById(this.commitNodeId).style.display = "inline";
|
||||
document.getElementById(this.commitAllNodeId).style.display = "none";
|
||||
} else {
|
||||
document.getElementById(this.commitNodeId).style.display = "none";
|
||||
document.getElementById(this.commitAllNodeId).style.display = "inline";
|
||||
}
|
||||
}
|
||||
|
||||
// Submin stage state to the server
|
||||
StageHelper.prototype.submit = function () {
|
||||
var data = this.collectData();
|
||||
submitSapeventForm(data, this.formAction);
|
||||
}
|
||||
|
||||
// Extract data from the table
|
||||
StageHelper.prototype.collectData = function () {
|
||||
var stage = document.getElementById(this.tabId);
|
||||
var data = {};
|
||||
|
||||
for (var i = 0; i < stage.rows.length; i++) {
|
||||
var row = stage.rows[i];
|
||||
if (row.parentNode.tagName == "THEAD") continue;
|
||||
data[row.cells[1].innerText] = row.cells[0].innerText;
|
||||
}
|
||||
|
||||
return data;
|
||||
}
|
41
src/zabapgit_js_common.w3mi.xml
Normal file
41
src/zabapgit_js_common.w3mi.xml
Normal file
|
@ -0,0 +1,41 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_W3MI" serializer_version="v2.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<NAME>ZABAPGIT_JS_COMMON</NAME>
|
||||
<TEXT>Abapgit common JS library</TEXT>
|
||||
<PARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_JS_COMMON</OBJID>
|
||||
<NAME>fileextension</NAME>
|
||||
<VALUE>.js</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_JS_COMMON</OBJID>
|
||||
<NAME>filename</NAME>
|
||||
<VALUE>common.js</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_JS_COMMON</OBJID>
|
||||
<NAME>filesize</NAME>
|
||||
<VALUE>6500</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_JS_COMMON</OBJID>
|
||||
<NAME>mimetype</NAME>
|
||||
<VALUE>text/javascript</VALUE>
|
||||
</WWWPARAMS>
|
||||
<WWWPARAMS>
|
||||
<RELID>MI</RELID>
|
||||
<OBJID>ZABAPGIT_JS_COMMON</OBJID>
|
||||
<NAME>version</NAME>
|
||||
<VALUE/>
|
||||
</WWWPARAMS>
|
||||
</PARAMS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
|
@ -102,6 +102,9 @@ CLASS lcl_object_clas DEFINITION INHERITING FROM lcl_objects_program.
|
|||
METHODS reduce
|
||||
CHANGING ct_source TYPE ty_string_tt.
|
||||
|
||||
METHODS get_all_class_includes
|
||||
RETURNING VALUE(rt_includes) TYPE seoincl_t.
|
||||
|
||||
ENDCLASS. "lcl_object_dtel DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -121,6 +124,37 @@ ENDCLASS. "lcl_object_intf DEFINITION
|
|||
*----------------------------------------------------------------------*
|
||||
CLASS lcl_object_clas IMPLEMENTATION.
|
||||
|
||||
METHOD get_all_class_includes.
|
||||
* note: includes returned might not exist
|
||||
* method cl_oo_classname_service=>GET_ALL_CLASS_INCLUDES does not exist in 702
|
||||
|
||||
DATA: lv_clsname TYPE seoclsname,
|
||||
lt_methods TYPE seop_methods_w_include.
|
||||
|
||||
FIELD-SYMBOLS: <ls_method> LIKE LINE OF lt_methods.
|
||||
|
||||
|
||||
lv_clsname = ms_item-obj_name.
|
||||
|
||||
APPEND cl_oo_classname_service=>get_ccdef_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_ccmac_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_ccimp_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_cl_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_ccau_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_pubsec_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_prosec_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_prisec_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_classpool_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_ct_name( lv_clsname ) TO rt_includes.
|
||||
APPEND cl_oo_classname_service=>get_cs_name( lv_clsname ) TO rt_includes.
|
||||
|
||||
lt_methods = cl_oo_classname_service=>get_all_method_includes( lv_clsname ).
|
||||
LOOP AT lt_methods ASSIGNING <ls_method>.
|
||||
APPEND <ls_method>-incname TO rt_includes.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
DATA: lv_clsname TYPE seoclsname,
|
||||
|
@ -169,18 +203,39 @@ CLASS lcl_object_clas IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~get_metadata
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
* todo, not sure this is correct, to be tested
|
||||
SELECT SINGLE changedby FROM seoclassdf INTO rv_user
|
||||
WHERE clsname = ms_item-obj_name
|
||||
AND version = '1'. "#EC CI_GENBUFF
|
||||
IF sy-subrc = 0 AND rv_user IS INITIAL.
|
||||
SELECT SINGLE author FROM seoclassdf INTO rv_user
|
||||
WHERE clsname = ms_item-obj_name
|
||||
AND version = '1'. "#EC CI_GENBUFF
|
||||
ENDIF.
|
||||
|
||||
TYPES: BEGIN OF ty_includes,
|
||||
programm TYPE programm,
|
||||
END OF ty_includes.
|
||||
|
||||
TYPES: BEGIN OF ty_reposrc,
|
||||
unam TYPE reposrc-unam,
|
||||
udat TYPE reposrc-udat,
|
||||
utime TYPE reposrc-utime,
|
||||
END OF ty_reposrc.
|
||||
|
||||
DATA: lt_reposrc TYPE STANDARD TABLE OF ty_reposrc,
|
||||
ls_reposrc LIKE LINE OF lt_reposrc,
|
||||
lt_includes TYPE STANDARD TABLE OF ty_includes.
|
||||
|
||||
|
||||
lt_includes = get_all_class_includes( ).
|
||||
ASSERT lines( lt_includes ) > 0.
|
||||
|
||||
SELECT unam udat utime FROM reposrc
|
||||
INTO TABLE lt_reposrc
|
||||
FOR ALL ENTRIES IN lt_includes
|
||||
WHERE progname = lt_includes-programm
|
||||
AND r3state = 'A'.
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
ELSE.
|
||||
SORT lt_reposrc BY udat DESCENDING utime DESCENDING.
|
||||
READ TABLE lt_reposrc INDEX 1 INTO ls_reposrc.
|
||||
ASSERT sy-subrc = 0.
|
||||
rv_user = ls_reposrc-unam.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~exists.
|
||||
|
|
|
@ -210,9 +210,9 @@ CLASS lcl_object_dtel IMPLEMENTATION.
|
|||
DATA: lv_name TYPE ddobjname,
|
||||
lv_index TYPE i,
|
||||
ls_dd04v TYPE dd04v,
|
||||
ls_tpara TYPE tpara,
|
||||
lt_dd04_texts TYPE tt_dd04_texts,
|
||||
lt_i18n_langs TYPE TABLE OF langu.
|
||||
|
||||
FIELD-SYMBOLS: <lang> LIKE LINE OF lt_i18n_langs,
|
||||
<dd04_text> TYPE ty_dd04_texts.
|
||||
|
||||
|
@ -232,7 +232,7 @@ CLASS lcl_object_dtel IMPLEMENTATION.
|
|||
langu = <lang>
|
||||
IMPORTING
|
||||
dd04v_wa = ls_dd04v
|
||||
tpara_wa = ls_tpara
|
||||
* tpara_wa = ls_tpara
|
||||
EXCEPTIONS
|
||||
illegal_input = 1
|
||||
OTHERS = 2.
|
||||
|
|
|
@ -24,9 +24,9 @@ CLASS lcl_object_enqu IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
DATA: lv_date TYPE dats,
|
||||
lv_time TYPE tims,
|
||||
lv_ts TYPE timestamp.
|
||||
DATA: lv_date TYPE dats,
|
||||
lv_time TYPE tims,
|
||||
lv_ts TYPE timestamp.
|
||||
|
||||
SELECT SINGLE as4date as4time FROM dd25l
|
||||
INTO (lv_date, lv_time)
|
||||
|
@ -39,7 +39,16 @@ CLASS lcl_object_enqu IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~has_changed_since
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
rv_user = c_user_unknown. " todo
|
||||
|
||||
SELECT SINGLE AS4USER FROM dd25l
|
||||
INTO rv_user
|
||||
WHERE viewname = ms_item-obj_name
|
||||
AND as4local = 'A'
|
||||
AND as4vers = '0000'.
|
||||
IF sy-subrc <> 0.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
|
|
@ -90,7 +90,6 @@ CLASS lcl_object_ensc IMPLEMENTATION.
|
|||
DATA: lv_spot_name TYPE enhspotcompositename,
|
||||
lv_message TYPE string,
|
||||
lv_enh_shtext TYPE string,
|
||||
lv_parent TYPE enhspotcompositename,
|
||||
lt_enh_spots TYPE enhspotname_it,
|
||||
lt_comp_spots TYPE enhspotname_it,
|
||||
lx_root TYPE REF TO cx_root,
|
||||
|
@ -109,7 +108,7 @@ CLASS lcl_object_ensc IMPLEMENTATION.
|
|||
|
||||
lv_enh_shtext = li_spot_ref->if_enh_object_docu~get_shorttext( ).
|
||||
"find parent = composite enhancement (ENSC)
|
||||
lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ).
|
||||
* lv_parent = cl_r3standard_persistence=>enh_find_parent_composite( lv_spot_name ).
|
||||
"find subsequent enhancement spots
|
||||
lt_enh_spots = lo_spot_ref->if_enh_spot_composite~get_enh_spot_childs( ).
|
||||
"find subsequent composite enhancement spots
|
||||
|
|
|
@ -86,8 +86,8 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
|
||||
METHOD lif_object~has_changed_since.
|
||||
|
||||
DATA: lt_functab TYPE ty_rs38l_incl_tt,
|
||||
lt_includes TYPE rso_t_objnm.
|
||||
DATA: lt_functab TYPE ty_rs38l_incl_tt,
|
||||
lt_includes TYPE rso_t_objnm.
|
||||
|
||||
FIELD-SYMBOLS: <ls_func> LIKE LINE OF lt_functab,
|
||||
<include_name> LIKE LINE OF lt_includes.
|
||||
|
@ -117,7 +117,70 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
ENDMETHOD. "lif_object~has_changed_since
|
||||
|
||||
METHOD lif_object~changed_by.
|
||||
rv_user = c_user_unknown. " todo
|
||||
|
||||
TYPES: BEGIN OF ty_stamps,
|
||||
user TYPE xubname,
|
||||
date TYPE d,
|
||||
time TYPE t,
|
||||
END OF ty_stamps.
|
||||
|
||||
DATA: lt_stamps TYPE STANDARD TABLE OF ty_stamps WITH DEFAULT KEY,
|
||||
lv_program TYPE program,
|
||||
lt_includes TYPE rso_t_objnm.
|
||||
|
||||
FIELD-SYMBOLS: <ls_stamp> LIKE LINE OF lt_stamps,
|
||||
<lv_include> LIKE LINE OF lt_includes.
|
||||
|
||||
|
||||
lv_program = main_name( ).
|
||||
|
||||
CALL FUNCTION 'RS_GET_ALL_INCLUDES'
|
||||
EXPORTING
|
||||
program = lv_program
|
||||
TABLES
|
||||
includetab = lt_includes
|
||||
EXCEPTIONS
|
||||
not_existent = 1
|
||||
no_program = 2
|
||||
OTHERS = 3.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'Error from RS_GET_ALL_INCLUDES' ).
|
||||
ENDIF.
|
||||
|
||||
SELECT unam AS user udat AS date utime AS time FROM reposrc
|
||||
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
|
||||
WHERE progname = lv_program
|
||||
AND r3state = 'A'.
|
||||
|
||||
LOOP AT lt_includes ASSIGNING <lv_include>.
|
||||
SELECT unam AS user udat AS date utime AS time FROM reposrc
|
||||
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
|
||||
WHERE progname = <lv_include>
|
||||
AND r3state = 'A'.
|
||||
ENDLOOP.
|
||||
|
||||
SELECT unam AS user udat AS date utime AS time FROM repotext " Program text pool
|
||||
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
|
||||
WHERE progname = lv_program
|
||||
AND r3state = 'A'.
|
||||
|
||||
SELECT vautor AS user vdatum AS date vzeit AS time FROM eudb " GUI
|
||||
APPENDING CORRESPONDING FIELDS OF TABLE lt_stamps
|
||||
WHERE relid = 'CU'
|
||||
AND name = lv_program
|
||||
AND srtf2 = 0 ##TOO_MANY_ITAB_FIELDS.
|
||||
|
||||
* Screens: username not stored in D020S database table
|
||||
|
||||
SORT lt_stamps BY date DESCENDING time DESCENDING.
|
||||
|
||||
READ TABLE lt_stamps INDEX 1 ASSIGNING <ls_stamp>.
|
||||
IF sy-subrc = 0.
|
||||
rv_user = <ls_stamp>-user.
|
||||
ELSE.
|
||||
rv_user = c_user_unknown.
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~get_metadata.
|
||||
|
@ -143,7 +206,6 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
|
||||
DATA: lv_include TYPE rs38l-include,
|
||||
lv_area TYPE rs38l-area,
|
||||
lv_message TYPE string,
|
||||
lt_source TYPE TABLE OF abaptxt255.
|
||||
|
||||
FIELD-SYMBOLS: <ls_func> LIKE LINE OF it_functions.
|
||||
|
@ -485,6 +547,9 @@ CLASS lcl_object_fugr IMPLEMENTATION.
|
|||
APPEND INITIAL LINE TO rt_functions ASSIGNING <ls_ret>.
|
||||
MOVE-CORRESPONDING <ls_func> TO <ls_ret>.
|
||||
|
||||
CLEAR lt_new_source.
|
||||
CLEAR lt_source.
|
||||
|
||||
CALL FUNCTION 'RPY_FUNCTIONMODULE_READ_NEW'
|
||||
EXPORTING
|
||||
functionname = <ls_func>-funcname
|
||||
|
|
|
@ -13,6 +13,23 @@ CLASS lcl_object_msag DEFINITION INHERITING FROM lcl_objects_super FINAL.
|
|||
INTERFACES lif_object.
|
||||
ALIASES mo_files FOR lif_object~mo_files.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES: BEGIN OF ty_t100_texts,
|
||||
sprsl TYPE t100-sprsl,
|
||||
msgnr TYPE t100-msgnr,
|
||||
text TYPE t100-text,
|
||||
END OF ty_t100_texts,
|
||||
tt_t100_texts TYPE STANDARD TABLE OF ty_t100_texts.
|
||||
|
||||
METHODS:
|
||||
serialize_texts
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_output
|
||||
RAISING lcx_exception,
|
||||
deserialize_texts
|
||||
IMPORTING io_xml TYPE REF TO lcl_xml_input
|
||||
RAISING lcx_exception.
|
||||
|
||||
|
||||
ENDCLASS. "lcl_object_msag DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -111,21 +128,24 @@ CLASS lcl_object_msag IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'Error from RS_CORR_INSERT' ).
|
||||
ENDIF.
|
||||
|
||||
SELECT * FROM t100u INTO TABLE lt_before WHERE arbgb = ls_t100a-arbgb.
|
||||
SELECT * FROM t100u INTO TABLE lt_before
|
||||
WHERE arbgb = ls_t100a-arbgb ORDER BY msgnr. "#EC CI_GENBUFF "#EC CI_BYPASS
|
||||
|
||||
LOOP AT lt_t100 ASSIGNING <ls_t100>.
|
||||
DELETE lt_before WHERE msgnr = <ls_t100>-msgnr.
|
||||
|
||||
MODIFY t100 FROM <ls_t100>. "#EC CI_SUBRC
|
||||
ASSERT sy-subrc = 0.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'MSAG: Table T100 modify failed' ).
|
||||
ENDIF.
|
||||
CLEAR ls_t100u.
|
||||
MOVE-CORRESPONDING <ls_t100> TO ls_t100u ##enh_ok.
|
||||
ls_t100u-name = sy-uname.
|
||||
ls_t100u-datum = sy-datum.
|
||||
ls_t100u-selfdef = '3'.
|
||||
MODIFY t100u FROM ls_t100u. "#EC CI_SUBRC
|
||||
ASSERT sy-subrc = 0.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'MSAG: Table T100U modify failed' ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ls_t100a-masterlang = mv_language.
|
||||
|
@ -134,19 +154,26 @@ CLASS lcl_object_msag IMPLEMENTATION.
|
|||
ls_t100a-ldate = sy-datum.
|
||||
ls_t100a-ltime = sy-uzeit.
|
||||
MODIFY t100a FROM ls_t100a. "#EC CI_SUBRC
|
||||
ASSERT sy-subrc = 0.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'MSAG: Table T100A modify failed' ).
|
||||
ENDIF.
|
||||
|
||||
ls_t100t-sprsl = mv_language.
|
||||
ls_t100t-arbgb = ls_t100a-arbgb.
|
||||
ls_t100t-stext = ls_t100a-stext.
|
||||
MODIFY t100t FROM ls_t100t. "#EC CI_SUBRC
|
||||
ASSERT sy-subrc = 0.
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'MSAG: Table T100T modify failed' ).
|
||||
ENDIF.
|
||||
|
||||
LOOP AT lt_before INTO ls_t100u.
|
||||
DELETE FROM t100 WHERE arbgb = ls_t100u-arbgb AND msgnr = ls_t100u-msgnr.
|
||||
DELETE FROM t100u WHERE arbgb = ls_t100u-arbgb AND msgnr = ls_t100u-msgnr.
|
||||
ENDLOOP.
|
||||
|
||||
deserialize_texts( io_xml = io_xml ).
|
||||
|
||||
|
||||
ENDMETHOD. "deserialize
|
||||
|
||||
METHOD lif_object~serialize.
|
||||
|
@ -168,7 +195,7 @@ CLASS lcl_object_msag IMPLEMENTATION.
|
|||
SELECT * FROM t100 INTO TABLE lt_source
|
||||
WHERE sprsl = mv_language
|
||||
AND arbgb = lv_msg_id
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
|
||||
CLEAR: ls_inf-lastuser,
|
||||
ls_inf-ldate,
|
||||
|
@ -179,9 +206,96 @@ CLASS lcl_object_msag IMPLEMENTATION.
|
|||
io_xml->add( ig_data = lt_source
|
||||
iv_name = 'T100' ).
|
||||
|
||||
serialize_texts( io_xml ).
|
||||
|
||||
ENDMETHOD. "serialize
|
||||
|
||||
METHOD serialize_texts.
|
||||
|
||||
DATA: lv_msg_id TYPE rglif-message_id,
|
||||
lt_t100_texts TYPE tt_t100_texts,
|
||||
lt_t100t TYPE table of t100t,
|
||||
lt_i18n_langs TYPE TABLE OF langu.
|
||||
|
||||
lv_msg_id = ms_item-obj_name.
|
||||
|
||||
" Collect additional languages
|
||||
" Skip master lang - it has been already serialized
|
||||
SELECT DISTINCT sprsl AS langu INTO TABLE lt_i18n_langs
|
||||
FROM t100t
|
||||
WHERE arbgb = lv_msg_id
|
||||
AND sprsl <> mv_language. "#EC CI_BYPASS "#EC CI_GENBUFF.
|
||||
|
||||
SORT lt_i18n_langs ASCENDING.
|
||||
|
||||
IF LINES( lt_i18n_langs ) > 0.
|
||||
|
||||
SELECT * FROM t100t INTO CORRESPONDING FIELDS OF TABLE lt_t100t
|
||||
WHERE sprsl <> mv_language
|
||||
AND arbgb = lv_msg_id. "#EC CI_GENBUFF
|
||||
|
||||
SELECT * FROM t100 INTO CORRESPONDING FIELDS OF TABLE lt_t100_texts
|
||||
FOR ALL ENTRIES IN lt_i18n_langs
|
||||
WHERE sprsl = lt_i18n_langs-table_line
|
||||
AND arbgb = lv_msg_id
|
||||
ORDER BY PRIMARY KEY. "#EC CI_SUBRC "#EC CI_GENBUFF
|
||||
|
||||
SORT lt_t100t BY sprsl ASCENDING.
|
||||
SORT lt_t100_texts BY sprsl msgnr ASCENDING.
|
||||
|
||||
io_xml->add( iv_name = 'I18N_LANGS'
|
||||
ig_data = lt_i18n_langs ).
|
||||
|
||||
io_xml->add( iv_name = 'T100T'
|
||||
ig_data = lt_t100t ).
|
||||
|
||||
io_xml->add( iv_name = 'T100_TEXTS'
|
||||
ig_data = lt_t100_texts ).
|
||||
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD deserialize_texts.
|
||||
|
||||
DATA: lv_msg_id TYPE rglif-message_id,
|
||||
ls_t100 TYPE t100,
|
||||
lt_t100t TYPE table of t100t,
|
||||
lt_t100_texts TYPE tt_t100_texts,
|
||||
lt_t100u TYPE TABLE OF t100u.
|
||||
|
||||
FIELD-SYMBOLS: <ls_t100_text> TYPE ty_t100_texts.
|
||||
|
||||
|
||||
lv_msg_id = ms_item-obj_name.
|
||||
|
||||
SELECT * FROM t100u INTO TABLE lt_t100u
|
||||
WHERE arbgb = lv_msg_id ORDER BY PRIMARY KEY. "#EC CI_GENBUFF
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'T100_TEXTS'
|
||||
CHANGING cg_data = lt_t100_texts ).
|
||||
|
||||
io_xml->read( EXPORTING iv_name = 'T100T'
|
||||
CHANGING cg_data = lt_t100t ).
|
||||
|
||||
MODIFY t100t FROM TABLE lt_t100t. "#EC CI_SUBRC
|
||||
|
||||
LOOP AT lt_t100_texts ASSIGNING <ls_t100_text>.
|
||||
"check if message exists
|
||||
READ TABLE lt_t100u TRANSPORTING NO FIELDS
|
||||
WITH KEY arbgb = lv_msg_id msgnr = <ls_t100_text>-msgnr BINARY SEARCH.
|
||||
CHECK sy-subrc = 0. "if original message doesn't exist no translations added
|
||||
|
||||
MOVE-CORRESPONDING <ls_t100_text> TO ls_t100.
|
||||
ls_t100-arbgb = lv_msg_id.
|
||||
MODIFY t100 FROM ls_t100. "#EC CI_SUBRC
|
||||
IF sy-subrc <> 0.
|
||||
lcx_exception=>raise( 'MSAG: Table T100 modify failed' ).
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -193,18 +193,18 @@ CLASS lcl_object_pinf IMPLEMENTATION.
|
|||
lt_add TYPE scomeldata,
|
||||
lv_index TYPE i,
|
||||
lv_found TYPE abap_bool,
|
||||
ls_sign TYPE scomelsign,
|
||||
* ls_sign TYPE scomelsign,
|
||||
ls_attr TYPE scomeldtln.
|
||||
|
||||
FIELD-SYMBOLS: <li_element> LIKE LINE OF lt_existing,
|
||||
<ls_element> LIKE LINE OF is_pinf-elements.
|
||||
|
||||
|
||||
ls_sign-usag_restr = abap_true.
|
||||
ls_sign-stability = abap_true.
|
||||
ls_sign-no_check = abap_true.
|
||||
ls_sign-useastype = abap_true.
|
||||
ls_sign-asforgnkey = abap_true.
|
||||
* ls_sign-usag_restr = abap_true.
|
||||
* ls_sign-stability = abap_true.
|
||||
* ls_sign-no_check = abap_true.
|
||||
* ls_sign-useastype = abap_true.
|
||||
* ls_sign-asforgnkey = abap_true.
|
||||
* ls_sign-deprecation_type = abap_true. backport
|
||||
* ls_sign-replacement_object_type = abap_true. backport
|
||||
* ls_sign-replacement_object_name = abap_true. backport
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
*& Include zabapgit_object_tabl_valid
|
||||
*&---------------------------------------------------------------------*
|
||||
|
||||
CLASS lcl_object_tabl_validation DEFINITION.
|
||||
CLASS lcl_object_tabl_validation DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS validate
|
||||
IMPORTING
|
||||
|
@ -14,7 +14,7 @@ CLASS lcl_object_tabl_validation DEFINITION.
|
|||
lcx_exception.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_tabl_validation_dialog DEFINITION.
|
||||
CLASS lcl_tabl_validation_dialog DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
METHODS:
|
||||
constructor
|
||||
|
@ -91,7 +91,7 @@ CLASS lcl_tabl_validation_dialog IMPLEMENTATION.
|
|||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
|
||||
CLASS lct_table_validation DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
|
||||
PRIVATE SECTION.
|
||||
METHODS:
|
||||
setup,
|
||||
|
@ -143,8 +143,7 @@ CLASS lct_table_validation IMPLEMENTATION.
|
|||
|
||||
METHOD no_type_changes.
|
||||
DATA:
|
||||
ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
|
||||
ls_current_table_field LIKE LINE OF mt_current_table_fields.
|
||||
ls_previous_table_field LIKE LINE OF mt_previous_table_fields.
|
||||
|
||||
ls_previous_table_field-fieldname = 'FIELD1'.
|
||||
ls_previous_table_field-rollname = 'INT4'.
|
||||
|
@ -189,7 +188,6 @@ CLASS lct_table_validation IMPLEMENTATION.
|
|||
|
||||
METHOD no_fields_no_message.
|
||||
DATA:
|
||||
ls_previous_table_field LIKE LINE OF mt_previous_table_fields,
|
||||
ls_current_table_field LIKE LINE OF mt_current_table_fields.
|
||||
|
||||
create_xmls( ).
|
||||
|
|
|
@ -33,6 +33,20 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT.
|
|||
RETURNING VALUE(rv_ext) TYPE string
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS patch_size
|
||||
IMPORTING iv_size TYPE i OPTIONAL " Overwrite if given
|
||||
EXPORTING ev_size TYPE i " Return size as integer
|
||||
CHANGING ct_params TYPE ty_wwwparams_tt " Param table to patch
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS patch_filename
|
||||
CHANGING ct_params TYPE ty_wwwparams_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS clear_version
|
||||
CHANGING ct_params TYPE ty_wwwparams_tt
|
||||
RAISING lcx_exception.
|
||||
|
||||
ENDCLASS. "lcl_object_W3SUPER DEFINITION
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
@ -92,7 +106,6 @@ CLASS lcl_object_w3super IMPLEMENTATION.
|
|||
DATA lt_w3html TYPE STANDARD TABLE OF w3html.
|
||||
DATA lt_w3params TYPE STANDARD TABLE OF wwwparams.
|
||||
DATA lv_xstring TYPE xstring.
|
||||
DATA ls_wwwparam LIKE LINE OF lt_w3params.
|
||||
DATA lv_size TYPE int4.
|
||||
|
||||
SELECT SINGLE * INTO CORRESPONDING FIELDS OF ms_key
|
||||
|
@ -132,12 +145,15 @@ CLASS lcl_object_w3super IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'Cannot read W3xx data' ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_w3params INTO ls_wwwparam WITH KEY name = 'filesize' ##NO_TEXT.
|
||||
IF sy-subrc IS NOT INITIAL.
|
||||
lcx_exception=>raise( 'Cannot read W3xx filesize' ).
|
||||
ENDIF.
|
||||
" Condense size string + get size to local integer
|
||||
patch_size( IMPORTING ev_size = lv_size
|
||||
CHANGING ct_params = lt_w3params ).
|
||||
|
||||
lv_size = ls_wwwparam-value.
|
||||
" Remove file path (for security concerns)
|
||||
patch_filename( CHANGING ct_params = lt_w3params ).
|
||||
|
||||
" Clear version
|
||||
clear_version( CHANGING ct_params = lt_w3params ).
|
||||
|
||||
CASE ms_key-relid.
|
||||
WHEN 'MI'.
|
||||
|
@ -209,10 +225,8 @@ CLASS lcl_object_w3super IMPLEMENTATION.
|
|||
iv_ext = get_ext( lt_w3params ) ).
|
||||
WHEN OTHERS.
|
||||
lcx_exception=>raise( 'W3xx: Unknown serializer version' ).
|
||||
|
||||
ENDCASE.
|
||||
|
||||
|
||||
CASE ms_key-relid.
|
||||
WHEN 'MI'.
|
||||
CALL FUNCTION 'SCMS_XSTRING_TO_BINARY'
|
||||
|
@ -250,6 +264,12 @@ CLASS lcl_object_w3super IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'Wrong W3xx type' ).
|
||||
ENDCASE.
|
||||
|
||||
" Update size of file (for the case file was actually changed remotely)
|
||||
" Will also trigger "stage" at next sync if remote XML
|
||||
" was not updated with the new file size
|
||||
patch_size( EXPORTING iv_size = lv_size
|
||||
CHANGING ct_params = lt_w3params ).
|
||||
|
||||
CALL FUNCTION 'WWWPARAMS_UPDATE'
|
||||
TABLES
|
||||
params = lt_w3params
|
||||
|
@ -361,6 +381,55 @@ CLASS lcl_object_w3super IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. " get_ext.
|
||||
|
||||
METHOD patch_size.
|
||||
|
||||
FIELD-SYMBOLS <param> LIKE LINE OF ct_params.
|
||||
|
||||
READ TABLE ct_params ASSIGNING <param> WITH KEY name = 'filesize'.
|
||||
|
||||
IF sy-subrc > 0.
|
||||
lcx_exception=>raise( |W3xx: Cannot find file size for { ms_key-objid }| ).
|
||||
ENDIF.
|
||||
|
||||
IF iv_size IS NOT INITIAL.
|
||||
<param>-value = iv_size.
|
||||
ENDIF.
|
||||
CONDENSE <param>-value.
|
||||
|
||||
ev_size = <param>-value.
|
||||
|
||||
ENDMETHOD. " patch_size.
|
||||
|
||||
METHOD patch_filename.
|
||||
|
||||
FIELD-SYMBOLS <param> LIKE LINE OF ct_params.
|
||||
|
||||
READ TABLE ct_params ASSIGNING <param> WITH KEY name = 'filename'.
|
||||
|
||||
IF sy-subrc > 0.
|
||||
lcx_exception=>raise( |W3xx: Cannot find file name for { ms_key-objid }| ).
|
||||
ENDIF.
|
||||
|
||||
" Remove path
|
||||
<param>-value = lcl_path=>get_filename_from_syspath( |{ <param>-value }| ).
|
||||
|
||||
ENDMETHOD. " patch_filename.
|
||||
|
||||
METHOD clear_version.
|
||||
|
||||
FIELD-SYMBOLS <param> LIKE LINE OF ct_params.
|
||||
|
||||
READ TABLE ct_params ASSIGNING <param> WITH KEY name = 'version'.
|
||||
|
||||
IF sy-subrc > 0.
|
||||
lcx_exception=>raise( |W3xx: Cannot find version for { ms_key-objid }| ).
|
||||
ENDIF.
|
||||
|
||||
" Clear version
|
||||
CLEAR <param>-value.
|
||||
|
||||
ENDMETHOD. " clear_version.
|
||||
|
||||
METHOD lif_object~compare_to_remote_version.
|
||||
CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result.
|
||||
ENDMETHOD.
|
||||
|
|
|
@ -556,8 +556,7 @@ CLASS lcl_objects_files IMPLEMENTATION.
|
|||
|
||||
METHOD read_raw.
|
||||
|
||||
DATA: lv_filename TYPE string,
|
||||
lv_data TYPE xstring.
|
||||
DATA: lv_filename TYPE string.
|
||||
|
||||
lv_filename = filename( iv_extra = iv_extra
|
||||
iv_ext = iv_ext ).
|
||||
|
@ -861,7 +860,7 @@ CLASS lcl_objects_program DEFINITION INHERITING FROM lcl_objects_super.
|
|||
TYPES: ty_spaces_tt TYPE STANDARD TABLE OF i WITH DEFAULT KEY.
|
||||
|
||||
TYPES: BEGIN OF ty_tpool.
|
||||
INCLUDE TYPE textpool.
|
||||
INCLUDE TYPE textpool.
|
||||
TYPES: split TYPE c LENGTH 8.
|
||||
TYPES: END OF ty_tpool.
|
||||
|
||||
|
@ -1038,8 +1037,10 @@ CLASS lcl_objects_program IMPLEMENTATION.
|
|||
ig_data = lt_dynpros ).
|
||||
|
||||
ls_cua = serialize_cua( lv_program_name ).
|
||||
lo_xml->add( iv_name = 'CUA'
|
||||
ig_data = ls_cua ).
|
||||
IF NOT ls_cua IS INITIAL.
|
||||
lo_xml->add( iv_name = 'CUA'
|
||||
ig_data = ls_cua ).
|
||||
ENDIF.
|
||||
ENDIF.
|
||||
|
||||
IF lines( lt_tpool ) = 1.
|
||||
|
@ -1192,7 +1193,10 @@ CLASS lcl_objects_program IMPLEMENTATION.
|
|||
lcx_exception=>raise( 'PROG, error inserting' ).
|
||||
ENDIF.
|
||||
|
||||
IF is_progdir-varcl = space AND ls_progdir_new = abap_true.
|
||||
SELECT SINGLE * FROM progdir INTO ls_progdir_new
|
||||
WHERE name = ls_progdir_new-name
|
||||
AND state = ls_progdir_new-state.
|
||||
IF sy-subrc = 0 AND is_progdir-varcl = space AND ls_progdir_new-varcl = abap_true.
|
||||
* function module UPDATE_PROGDIR does not update VARCL
|
||||
UPDATE progdir SET varcl = is_progdir-varcl
|
||||
WHERE name = ls_progdir_new-name
|
||||
|
|
|
@ -593,7 +593,6 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
lv_cancel TYPE abap_bool,
|
||||
li_obj TYPE REF TO lif_object,
|
||||
lt_remote TYPE ty_files_tt,
|
||||
ls_remote_file TYPE ty_file,
|
||||
lv_package TYPE devclass,
|
||||
lo_files TYPE REF TO lcl_objects_files,
|
||||
lo_xml TYPE REF TO lcl_xml_input,
|
||||
|
@ -696,13 +695,16 @@ CLASS lcl_objects IMPLEMENTATION.
|
|||
|
||||
METHOD compare_remote_to_local.
|
||||
|
||||
DATA ls_remote_file TYPE ty_file.
|
||||
DATA: ls_remote_file TYPE ty_file,
|
||||
lo_remote_version TYPE REF TO lcl_xml_input,
|
||||
lo_comparison_result TYPE REF TO lif_object_comparison_result.
|
||||
|
||||
DATA:
|
||||
lo_remote_version TYPE REF TO lcl_xml_input,
|
||||
lo_comparison_result TYPE REF TO lif_object_comparison_result.
|
||||
|
||||
IF is_result-filename CS '.XML'.
|
||||
IF io_object->exists( ) = abap_false.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
READ TABLE it_remote WITH KEY filename = is_result-filename INTO ls_remote_file.
|
||||
|
||||
"if file does not exist in remote, we don't need to validate
|
||||
|
|
|
@ -20,9 +20,6 @@ INTERFACE lif_gui_page.
|
|||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception.
|
||||
|
||||
METHODS get_assets
|
||||
RETURNING VALUE(rt_assets) TYPE tt_web_assets.
|
||||
|
||||
ENDINTERFACE.
|
||||
|
||||
CLASS lcl_gui_page_super DEFINITION ABSTRACT.
|
||||
|
@ -72,9 +69,6 @@ CLASS lcl_gui_page_super DEFINITION ABSTRACT.
|
|||
IMPORTING iv_url TYPE string
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_super IMPLEMENTATION.
|
||||
|
@ -227,15 +221,9 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
|||
ro_html->add( '<html>' ). "#EC NOTEXT
|
||||
ro_html->add( '<head>' ). "#EC NOTEXT
|
||||
ro_html->add( '<title>abapGit</title>' ). "#EC NOTEXT
|
||||
ro_html->add( styles( ) ).
|
||||
|
||||
IF io_include_style IS BOUND.
|
||||
ro_html->add( '<style type="text/css">' ). "#EC NOTEXT
|
||||
ro_html->add( io_include_style ).
|
||||
ro_html->add( '</style>' ). "#EC NOTEXT
|
||||
ENDIF.
|
||||
|
||||
ro_html->add( '<link rel="stylesheet" type="text/css" href="css/common.css">' ).
|
||||
ro_html->add( '<meta http-equiv="content-type" content="text/html; charset=utf-8">' ). "#EC NOTEXT
|
||||
ro_html->add( '<script type="text/javascript" src="js/common.js"></script>' ). "#EC NOTEXT
|
||||
ro_html->add( '</head>' ). "#EC NOTEXT
|
||||
ro_html->add( '<body>' ). "#EC NOTEXT
|
||||
|
||||
|
@ -277,39 +265,14 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
|||
ro_html->add( '<img src="img/logo" >' ). "#EC NOTEXT
|
||||
ro_html->add( '<table width="100%"><tr><td width="40%"></td><td>' ). "#EC NOTEXT
|
||||
ro_html->add( |<span class="version">{ gc_abap_version }</span>| ). "#EC NOTEXT
|
||||
ro_html->add( '</td><td id="stdout" width="40%"></td></tr></table>' ). "#EC NOTEXT
|
||||
ro_html->add( '</td><td id="debug-output" width="40%"></td></tr></table>' ). "#EC NOTEXT
|
||||
ro_html->add( '</div>' ). "#EC NOTEXT
|
||||
ro_html->add( '</body>' ). "#EC NOTEXT
|
||||
|
||||
" Common JS routines
|
||||
_add '<script type="text/javascript">' . "#EC NOTEXT
|
||||
|
||||
_add 'function debugOutput(text, dstID) {'. "#EC NOTEXT
|
||||
_add ' var stdout = document.getElementById(dstID || "stdout");'. "#EC NOTEXT
|
||||
_add ' var wrapped = "<p>" + text + "</p>";'. "#EC NOTEXT
|
||||
_add ' stdout.innerHTML = stdout.innerHTML + wrapped;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
|
||||
_add 'function submitForm(params, action) {'. "#EC NOTEXT
|
||||
_add ' var form = document.createElement("form"); '. "#EC NOTEXT
|
||||
_add ' form.setAttribute("method", "post"); '. "#EC NOTEXT
|
||||
_add ' form.setAttribute("action", "sapevent:" + action); '. "#EC NOTEXT
|
||||
_add ' for(var key in params) {'. "#EC NOTEXT
|
||||
_add ' var hiddenField = document.createElement("input"); '. "#EC NOTEXT
|
||||
_add ' hiddenField.setAttribute("type", "hidden"); '. "#EC NOTEXT
|
||||
_add ' hiddenField.setAttribute("name", key); '. "#EC NOTEXT
|
||||
_add ' hiddenField.setAttribute("value", params[key]); '. "#EC NOTEXT
|
||||
_add ' form.appendChild(hiddenField); '. "#EC NOTEXT
|
||||
_add ' }'. "#EC NOTEXT
|
||||
_add ' document.body.appendChild(form); '. "#EC NOTEXT
|
||||
_add ' form.submit(); '. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
|
||||
_add '</script>'. "#EC NOTEXT
|
||||
|
||||
IF io_include_script IS BOUND.
|
||||
ro_html->add( '<script type="text/javascript">' ).
|
||||
ro_html->add( io_include_script ).
|
||||
ro_html->add( 'debugOutput("js: OK");' ).
|
||||
ro_html->add( '</script>' ).
|
||||
ENDIF.
|
||||
|
||||
|
@ -338,344 +301,6 @@ CLASS lcl_gui_page_super IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '<style type="text/css">'.
|
||||
|
||||
" Global styles
|
||||
_add '/* GLOBALS */'.
|
||||
_add 'body {'.
|
||||
_add ' font-family: Arial,Helvetica,sans-serif;'.
|
||||
_add ' font-size: 12pt;'.
|
||||
_add ' background: #E8E8E8;'.
|
||||
_add '}'.
|
||||
_add 'a, a:visited {'.
|
||||
_add ' color: #4078c0;'.
|
||||
_add ' text-decoration: none;'.
|
||||
_add '}'.
|
||||
_add 'a:hover, a:active {'.
|
||||
_add ' cursor: pointer;'.
|
||||
_add ' text-decoration: underline;'.
|
||||
_add '}'.
|
||||
_add 'img { border: 0px; vertical-align: middle; }'.
|
||||
_add 'table { border-collapse: collapse; }'.
|
||||
_add 'pre { display: inline; }'.
|
||||
|
||||
_add 'form input, textarea, select {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' padding: 3px 6px;'.
|
||||
_add '}'.
|
||||
_add 'form input:focus, textarea:focus {'.
|
||||
_add ' border: 1px solid #8cadd9;'.
|
||||
_add '}'.
|
||||
|
||||
" Modifiers
|
||||
_add '/* MODIFIERS */'.
|
||||
_add '.grey { color: lightgrey !important; }'.
|
||||
_add '.emphasis { font-weight: bold !important; }'.
|
||||
_add '.attention { color: red !important; }'.
|
||||
_add '.crossout { text-decoration: line-through !important; }'.
|
||||
_add '.right { text-align:right; }'.
|
||||
_add '.paddings { padding: 0.5em 0.5em; }'.
|
||||
_add '.pad-sides { padding: 0 0.3em; }'.
|
||||
_add '.pad4px { padding: 4px; }'.
|
||||
|
||||
" Structure div styles: header, footer, toc
|
||||
_add '/* STRUCTURE DIVS, HEADER & FOOTER */'.
|
||||
_add 'td.headpad { padding-top: 11px; }'.
|
||||
_add 'td.logo { width: 164px; }'.
|
||||
_add 'div#header {'.
|
||||
_add ' padding: 0.5em 0.5em;'.
|
||||
_add ' border-bottom: 3px double lightgrey;'.
|
||||
_add '}'.
|
||||
_add 'div#toc {'.
|
||||
_add ' padding: 0.5em 1em;'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add '}'.
|
||||
_add 'div#toc div.toc_grid {'.
|
||||
_add ' margin: -0.3em 0em;'.
|
||||
_add '}'.
|
||||
_add 'div#toc div.toc_grid a {'.
|
||||
_add ' color: #ccc;'.
|
||||
_add '}'.
|
||||
_add 'div#toc:hover div.toc_grid a {'.
|
||||
_add ' color: #4078c0;'.
|
||||
_add '}'.
|
||||
_add 'div#toc div.toc_row {'.
|
||||
_add ' margin: 0.3em 0em;'.
|
||||
_add '}'.
|
||||
_add 'div#footer {'.
|
||||
_add ' padding: 0.5em 1em;'.
|
||||
_add ' border-top: 3px double lightgrey;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add 'div.dummydiv {'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add ' padding: 0.5em 1em;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add 'span.version {'.
|
||||
_add ' display: block;'.
|
||||
_add ' color: grey;'.
|
||||
_add ' margin-top: 0.3em;'.
|
||||
_add '}'.
|
||||
_add 'span.page_title {'.
|
||||
_add ' font-weight: normal;'.
|
||||
_add ' font-size: 18pt;'.
|
||||
_add ' color: #bbb;'.
|
||||
_add ' padding-left: 0.4em;'.
|
||||
_add '}'.
|
||||
|
||||
" Menu styles
|
||||
_add '/* MENU */'.
|
||||
_add 'div.menu { display: inline; }'.
|
||||
_add 'div.menu .menu_end { border-right: 0px !important; }'.
|
||||
_add 'div.menu a {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add ' padding-right: 0.5em;'.
|
||||
_add ' border-right: 1px solid lightgrey;'.
|
||||
_add ' font-size: 12pt;'.
|
||||
_add '}'.
|
||||
_add 'div.menu_vertical { display: inline; }'.
|
||||
_add 'div.menu_vertical a {'.
|
||||
_add ' display: block; '.
|
||||
_add ' font-size: 12pt;'.
|
||||
_add '}'.
|
||||
|
||||
" Dropdown styles :mechanics
|
||||
_add '/*DROP DOWN*/'.
|
||||
_add '.dropdown {'.
|
||||
_add ' position: relative;'.
|
||||
_add ' display: inline;'.
|
||||
_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 ' display: none;'.
|
||||
_add ' z-index: 1;'.
|
||||
_add ' position: absolute;'.
|
||||
_add ' right: -12px;'.
|
||||
_add ' top: 1em;'.
|
||||
_add ' padding: 6px 10px 10px 10px;'.
|
||||
_add ' white-space: nowrap;'.
|
||||
_add '}'.
|
||||
_add '.dropdown div.minizone {'.
|
||||
_add ' display: none;'.
|
||||
_add ' z-index: 1;'.
|
||||
_add ' position: absolute;'.
|
||||
_add ' padding: 0px;'.
|
||||
_add ' width: 16px;'.
|
||||
_add ' height: 16px;'.
|
||||
_add ' bottom: 0px;'.
|
||||
_add ' left: -16px;'.
|
||||
_add '}'.
|
||||
|
||||
_add '.dropdown:hover .dropdown_content { display: block; }'.
|
||||
_add '.dropdown:hover .minizone { display: block; }'.
|
||||
|
||||
" Dropdown styles :styling
|
||||
_add '.dropdown_content a {'.
|
||||
_add ' padding: 0.2em;'.
|
||||
_add ' background-color: #f9f9f9;'.
|
||||
_add ' text-decoration: none;'.
|
||||
_add ' display: block;'.
|
||||
_add ' border: none !important;'.
|
||||
_add '}'.
|
||||
|
||||
|
||||
_add '.dropdown_content div.box {'.
|
||||
_add ' border-bottom: 1px solid #C0C0C0;'.
|
||||
_add ' border-right: 1px solid #C0C0C0;'.
|
||||
_add ' background-color: #f9f9f9;'.
|
||||
_add ' padding: 2px;'.
|
||||
_add '}'.
|
||||
|
||||
_add '.dropdown_content td { text-align: left; padding: 2px; }'. " TODO refactor
|
||||
_add '.dropdown_content td a { padding: 0em 0.2em; }'. " TODO refactor
|
||||
_add '.dropdown_content td.icon { padding: 0 3px 0 6px; }'. " TODO refactor
|
||||
|
||||
_add '.dropdown_content a:hover { background-color: #f1f1f1 }'.
|
||||
_add '.dropdown:hover .dropbtn { color: #79a0d2; }'.
|
||||
|
||||
" REPOSITORY
|
||||
_add '/* REPOSITORY */'.
|
||||
_add 'div.repo {'.
|
||||
_add ' margin-top: 3px;'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add ' padding: 0.5em 1em 0.5em 1em;'.
|
||||
_add '}'.
|
||||
_add '.repo_name span.name {'.
|
||||
_add ' font-weight: bold;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' font-size: 14pt;'.
|
||||
_add '}'.
|
||||
_add '.repo_name span.url {'.
|
||||
_add ' color: #ccc;'.
|
||||
_add ' font-size: 12pt;'.
|
||||
_add ' margin-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_name img {'.
|
||||
_add ' vertical-align: baseline;'.
|
||||
_add ' margin: 0 5px 0 5px;'.
|
||||
_add '}'.
|
||||
_add '.repo_attr {'.
|
||||
_add ' color: grey;'.
|
||||
_add ' font-size: 12pt;'.
|
||||
_add '}'.
|
||||
_add '.repo_attr span {'.
|
||||
_add ' margin-left: 0.2em;'.
|
||||
_add ' margin-right: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_attr span.bg_marker {'.
|
||||
_add ' border: 1px solid #d2d2d2;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' background: #d8d8d8;'.
|
||||
_add ' color: #fff;'.
|
||||
_add ' font-size: 8pt;'.
|
||||
_add ' padding: 4px 2px 3px 2px;'.
|
||||
_add '}'.
|
||||
|
||||
" Branch tag design
|
||||
_add '.repo_attr span.branch {'.
|
||||
_add ' padding: 2px 4px;'.
|
||||
_add ' border: 1px solid #d9d9d9;'.
|
||||
_add ' border-radius: 4px;'.
|
||||
_add ' background-color: #e2e2e2;'.
|
||||
_add '}'.
|
||||
_add '.repo_attr span.branch_head {'.
|
||||
_add ' border-color: #d8dff3;'.
|
||||
_add ' background-color: #eceff9;'.
|
||||
_add '}'.
|
||||
_add '.repo_attr span.branch_branch {'.
|
||||
_add ' border-color: #e7d9b1;'.
|
||||
_add ' background-color: #f8f0d8;'.
|
||||
_add '}'.
|
||||
|
||||
" Other and outdated (?) styles
|
||||
_add '/* MISC AND REFACTOR */'.
|
||||
_add '.hidden-submit {'.
|
||||
_add ' border: 0 none;'.
|
||||
_add ' height: 0;'.
|
||||
_add ' width: 0;'.
|
||||
_add ' padding: 0;'.
|
||||
_add ' margin: 0;'.
|
||||
_add ' overflow: hidden;'.
|
||||
_add '}'.
|
||||
_add '#stdout {'.
|
||||
_add ' text-align: right;'.
|
||||
_add ' padding-right: 0.5em;'.
|
||||
_add ' color: #ccc;'.
|
||||
_add ' font-style: italic;'.
|
||||
_add ' font-size: small;'.
|
||||
_add '}'.
|
||||
|
||||
_add '</style>'.
|
||||
|
||||
ENDMETHOD. "common styles
|
||||
|
||||
METHOD lif_gui_page~get_assets. " Common images here
|
||||
|
||||
DATA ls_image TYPE ty_web_asset.
|
||||
|
||||
* see https://github.com/larshp/abapGit/issues/201 for source SVG
|
||||
ls_image-url = 'img/logo' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAKMAAAAoCAYAAACSG0qbAAAABHNCSVQICAgIfAhkiAAA'
|
||||
&& 'AAlwSFlzAAAEJQAABCUBprHeCQAAABl0RVh0U29mdHdhcmUAd3d3Lmlua3NjYXBlLm9y'
|
||||
&& 'Z5vuPBoAAA8VSURBVHic7Zx7cJzVeYef31nJAtvYko1JjM3FYHlXimwZkLWyLEMcwIGQ'
|
||||
&& 'cEkDJWmTltLStGkoDCkzwBAuCemUlksDNCkhJTTTljJpZhIuBQxxAWPvyuYiW7UkG8Il'
|
||||
&& 'UByIsS1sLEu75+0fu5JXu9/etAJz0TOzM/rOec85765+37m+3yczY8w0NU3qrwv9npfa'
|
||||
&& 'Hfx02pPPd469sgk+7misYnyjpWXy5IOG7kd8ZjjNjEtr13TdOm7eTfCxwo2lUJAQASRu'
|
||||
&& '2dnRfMn4uDbBx42yxZhPiMNMCHKCsVK2GGuqqqoQUwrZTAhygrFQshjfaGmZ/M7yxQtm'
|
||||
&& 'xGL9/qDqzwLxQvYTgpygXEoS4/DQ7LE1O05atLBu1YZdE4KcYLwpupoOmCO+5Z2dXPfE'
|
||||
&& 'xk07Tm2ZroGhBwX1wAygKqiOiVX2Rw9Jam/gyH0wuGGzvTEudRYSY4HFyogghxN2n7Sw'
|
||||
&& 'IendvcCioLoOtCCXNeqohOf0oDwPq9f3Wt/77dOHlWhYzUj/BRybTnrGEnZO5wv2m0rq'
|
||||
&& 'DezJoOiqeZbzegzpk6TVPPWJTT39y5svMogF1ZcesjlQgkwYp4F+EJQXwv4E+MiLUZJa'
|
||||
&& 'F7AIcRq4hWZ2mMRhQD/oZcErXv7FScaja3rt/wpU9E/sFyLACQq57wB/XIl/gWIstn2T'
|
||||
&& 'xpHVre7ZW71p8sFDeQscSEHKu3pTBadNH2Lq61VT57iwNazLgaNSqYaUaWXLDZCJIbBo'
|
||||
&& 'g3tK2A2xHns0oMrm3CRrqdTPnAVMiUIEmLlz2XGLMxNmH7YrifFcoUIHalHj8f8p6UfA'
|
||||
&& 'O+932weStno1zghps6Q7GBFiUYRxopkeaZ2vIwLyfxtQ4vV8lbWHNScacf+T/vwqn90o'
|
||||
&& 'MZYhRADJ+bv725vmj6Q8tHWffPKUD6IgO/tsfawneRHYd97Pdg8kSyJaZiGtBY4pYPYO'
|
||||
&& 'kH84C0Cyv8tKSiK7OZ99EpYAJ2V8AhkRY5lCHGaxhaq+BLCzY/EXd5y0aOG0td1vf1AF'
|
||||
&& 'CWCw7/1u80DQEtahQvcB03MyjQfM7Hwnmxfv9dPivX5SssqOwuzPSqk71mN3ymw5ZtdK'
|
||||
&& 'dmVIdly8xx7JZ29yy0qptwrGLMRRCA6T1w93nLTo5Lq13Zv625tOMRd6DLF4v0lWmQO8'
|
||||
&& 'qPko45y7TWaHZyUnwa6M99mN2fYbuu1V4K5oxF1B4Z4UgFifrQHWFLNbvkh1QheV5DNN'
|
||||
&& 'TZMqFWIGs5zX48M95PTqGa3TZ4erzbvj8/WUErf0L2++uNyGJLn2Js1oDeuYlkbNbmlR'
|
||||
&& 'deXup2hq0qS2es2VlHMDFaOlRdXL5uuwlnodG23QTEljCkbJV3d7WHOK+dXWqHqZnZeb'
|
||||
&& 'Y1fGe3OFOArRU5GTGbSHNWdwUL8Epo1qIQ9V/bXu3HES4jCznNfjb7e1zZ8Ri/UD1MLz'
|
||||
&& 'u05s/huMx4IKGNy4+8Tj/2Pqk8++Vaji86TQqxEuNNM5rWGtSCaokSDkgd0QjbidoPvN'
|
||||
&& '+5s7t9jz5TgdbdBMvLsG2cop6FgLUdUaZk804jYKuyrWa6vzlT2+XrOqQnxd6KwQOj5R'
|
||||
&& 'hULpL9Yaxkcj7g3QT6zK397ZbdtGtbtAZ+B0U3adkt0c67E7OyI6fFDuSpktC6HGpJjU'
|
||||
&& 'GmZ3NOI2mdnVnX32eHZZ7903hGXfBG8mp3J7sd/B0DPCTgUmBf9O7lmMybk56or3Jn8f'
|
||||
&& 'oLVB7Q5dZ9Iy4OBsw2jYbUUk96fwQrzHf955iBZzsDA+aL9k1owZ20fNzaY/tfFXwK48'
|
||||
&& 'ldQkSZ5YqJXmZk15JaJfmOmfgdOAmgCzWrCvyum5aIO+Uor3AIbOx7QV2TeBMPu3vKYA'
|
||||
&& 'Sw091hbWt4PKRhu0oDqkmND1wAnk3vkOmAN2lRLa2hrWMVm5Tek2R3286YzWiK4eQltk'
|
||||
&& '9g1gMfsFMhVYKunR1obQddk+SXZqwLe8acMGe7fYb9HZk7wm3utrBmpsqiXsyClHMHK6'
|
||||
&& '0hLWoRjHBfmLbP9K3bPYjFPIFWLaQeZnlZ8H4JyFflrMwcK4wG63v3/ycZnXOzqalxE0'
|
||||
&& 'mU7x9rvvVv93oVZqBtzNGGeU7Jbp9pZGzS7ReiVQVyDfmXRda4PaA9p5mBLmWGmmSron'
|
||||
&& 'M0FytUGGgjPTAi8UIeVk9u1og5YOJ0QbNBOjIac+Y22JPgLQ1WV7Ol+w36xebYnhtGpj'
|
||||
&& 'FjBYTj3l4KY9/dx6My4d74pN/Ki/Y9HpSG5HR/Nyh/1DHtO9OM6dvWFDwbtWslOykt6U'
|
||||
&& 's5VWZbOFnQtsyMqvc56Ty3T7NeBhLGAfDZDpe5nX6V5uXpbZ43K2NGQ2V9glwLas/I62'
|
||||
&& 'hfrE8EWsJ3mFsGYs+OQqze+A1cBLgbmma4f/9AmOJGBe5vKVLYN1W6wnOWSHmdkVhexM'
|
||||
&& 'PG6yC0x2AbmjoQ3njdh4uwrSw1Htmq5bd3Y0I3FLpQ5n0GTSQ7s6Fva70RPYTPbi+Pz0'
|
||||
&& 'J7ryboRC+m5PnRfsJjVEAfp5bLNflTb52dKIBj36RWY5ZyX2WCLukvbX67ZYHFLHZtGw'
|
||||
&& '+1fD/jDL8qQljWpav9m6Uw3wKYzXgUNJTxsk+0Fssw0L6x+j4dCx6eF/BEtwDBkbx7Fe'
|
||||
&& '29gWCa0yrC2rvXXO26WZfrWG3V2kji8zWbm0QUev67GX5ZgZ8A0H121hXIIZNrxou9oW'
|
||||
&& '6m4b4m/z2aTP+fsAohF3PaNHROvssZ8ElRs5DnyPBAkovxDFF4oJESDeY9tJD4Ur5umg'
|
||||
&& 'PSFm1Uy23Zk2SaM7e43p5Y4uxUMzu2f4H56+tuZmff2gfTqHrGEy5DkW6Abo7LH7gfsB'
|
||||
&& '2uo1LQGzBmoYFSwg57vNcjqqo4F1JXh2S7Zfx83TZZNqdD6MXkQkU369jONgcmfxe83M'
|
||||
&& 'B7XQEdEhg1B0HzDk2ZHpy3vBqLPpMQhyi/f2AIA3WyPZG6KkeVpKiE925awEi7H6JRsA'
|
||||
&& 'cqJDfIi9oayfW8ZB5dY/TFeX7YlGQg+RmgJkcnSQfWyr9QP92enmGcgeNCvx67mXbGdb'
|
||||
&& 'xD1hjI5AklJ+ydgTUGz6iiZNXd09+gYGGIRlQgXn6wDesZYSRFsJOYES5QjSw7fqnu7q'
|
||||
&& 'Bqh7uqu7f3nzdw3uKFJszEIcpqVRs12SRuAYiTrJ1YXMzSGgS6iQnHmWyQWe70pySz/F'
|
||||
&& 'MZagMWnMlaiTuTqTTih7s7IIHm1T1ncVI37l3BAAA4McAYF7iAvG17uxExi1U6Igd9XN'
|
||||
&& 'Dj+UmZA8qPrf3MDQbeSPIN8Ldub0JzeWLcT2I3Swn8JFhr4VQnMze5uKnv0ugOHfUXa3'
|
||||
&& 'ZhySedkR0eGDuMtbw/rTZCI1pA9PF0yWf4e3MnJ7YKXm0pOr6H03QRIIZeYnUj1njhid'
|
||||
&& '8aaRscKX/VGWSRLsCjnK2rcdC3njGUsQ5PSdv92yqJaMk5WBoRMpJsSnNgZufBdCkmsN'
|
||||
&& '60FgRbllK8PNzOlttT/qpz2sOUnpeWGHvq9ewcyc28/7XQCru213NOL+l6wgZ0kXAjnD'
|
||||
&& 'cazP7gXuTdu41rCyxbgr3mt/P16+F6LgUVXtmq5bC237yNsNu5YtPBZgx4kLFznZ1XlM'
|
||||
&& 'BzB/1liECBAN801yhfiq0HflbKXz1ojZ4qCylSBsbm6q/93wX0n0Q1Ir6UzWYXaZyZaF'
|
||||
&& 'qqxeZn813n4ZlhPWJWXMo00P5OTDF5c0qmm8fRlPip6bFhHk6Ti3ddfy5i3OXBemJQE2'
|
||||
&& 'A5g/c/qaTasC8krC0KdzE+3qWG/y6thmW7Vui/UkQ7w51vqDaGnRZFInPdlshNQ2C8oJ'
|
||||
&& 'h0oqaefF++zmzh5bu7bbXrBxjp88bp5qgZzNdyfWD/9t+B+TO4GW8/p+R0SHcGBxLWEF'
|
||||
&& 'jiQlHeIXEaRIPZAVRMVCTDcQCUh8LfOyaqjgCcr+YpY7NRFa2VY/egsqtNtdw8ie5gjJ'
|
||||
&& 'oUTqicjofOYA2f/YgcR03s5MMBF4wlIa7rMr5mnUyru6xl0LZAeFvDG3l83DF5199muk'
|
||||
&& 'oJO1FUMoviSi8Nh9Kg+Ru7qvUvCqPO+cMZsxbPsM4HXW9KcrEyKApTa7s9BVSyLaF3Ik'
|
||||
&& 'SbLSQros18RyInkkV2u5q+6zLaS+aCT0oJl/QVI78IWcsvDos1vtLYCE551QKNuCKW63'
|
||||
&& '+157g36cMOYI9yWhC3K+j4KDEHKxC9+t0altDaFHwL/kvVZIBJw761/uM5/MTJlU7S/Z'
|
||||
&& 'N6hTBNlhZA0OPReNuGdM6nL4jR4G5ZnRusAtKmVHwg1Slcxe11nODZJKh1fJ6kwM3dQa'
|
||||
&& 'VgOw3omjkGuL9/o/L/vFTzs7mi8pQZBpIT4f9PxE2bRFQncY9pdjKDoExDH7ebzPbgFo'
|
||||
&& 'bQjdng48KBfvzZau77ORN61FI66PsW2N7ARiZnZTZ589BtAWCV1v5J1zF+JNVdui2CbL'
|
||||
&& 'OcJsq1ejD2lVgCDL4e14r58J0N6k+cmEu0HYIssdrbxgnaGeeG9yJEg32hC6GbOix81y'
|
||||
&& 'trTsWLtiixpgQNLZ4yVEgCT++xSP0H7C0N1ZadVAh6SR3kRm2WfJO0H/XqTuQcn+IlOI'
|
||||
&& 'AFjRVaZhus3g2az0WuA0wcIi5QP3DDNIIPtakBABYltts7AO4OEi9eTFYGCksSRzwM4L'
|
||||
&& 'ECKAM1gG9tVR5UP+RkqZN5s7a0yBnwUEOSDp7GlPPp83BH0srO+1PmQrDIIen9wOdnln'
|
||||
&& 'n31G5n9ZtDLL6ck2x3uTf6DUee8rASX6vNnyWI/dmZ0R77O7LNXLBkWy9CE7Pd6XvNih'
|
||||
&& 'QkEQeZHZl9PBFtsDstebtyWFwv0B4r32UrzXn+6xDtBdwIslNL0N+JnMvravxiraFO/s'
|
||||
&& 'tm0y+xzQlcfkddCNCe/vGfP7GQH6lzdfbHAjqSCBHZK+PN5CzESSlixgnhMLzXAeXp+3'
|
||||
&& 'hWfuM0sWL10abQv1CdtHixzvmtiYPhcvSFOTJk1NEPEQkWdPUry4oc96y2o3YJiWs5Wx'
|
||||
&& 'zbYq83THHHu9Y1N2kG45tDRqdsgzxxuznKPOGbsTsN2M7d6zfXhePJ5Ici1h6mUcAcw0'
|
||||
&& '8Zo5fp35NoqKxAjwTrRhZmLSpPY9ySmPzV27dm+lTn9cKSTGA+XT+03Jq+l8HBLv2Q7c'
|
||||
&& 'X9K+ygQTFGDcHhaaoGJyouDNV7JH+eGj4mF6gspoC+tzJt1ObsT4MDsF2zxs886+Ml5v'
|
||||
&& '/PogUvEwPUGFiE+SX4gAtQa1gkhV7onQR4oJMR5oxC6stDeghd7Dh6E+CPw/HL4vVO2f'
|
||||
&& 'cpUAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ENDMETHOD. "lif_gui_page~get_assets
|
||||
|
||||
METHOD lif_gui_page~on_event.
|
||||
ev_state = gc_event_state-not_handled.
|
||||
ENDMETHOD. "lif_gui_page~on_event
|
||||
|
|
|
@ -32,8 +32,6 @@ CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
render_form
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
|
||||
RAISING lcx_exception,
|
||||
styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
scripts
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
|
@ -74,7 +72,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'COMMIT' ) ).
|
||||
|
||||
ro_html->add( '<div class="repo">' ).
|
||||
|
@ -200,7 +198,7 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
|
|||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
lo_toolbar->add( iv_act = 'submitCommit();'
|
||||
lo_toolbar->add( iv_act = 'submitFormById(''commit_form'');'
|
||||
iv_txt = 'Commit'
|
||||
iv_typ = gc_action_type-onclick
|
||||
iv_opt = gc_html_opt-emphas ) ##NO_TEXT.
|
||||
|
@ -215,58 +213,10 @@ CLASS lcl_gui_page_commit IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_menu
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* STAGE */'.
|
||||
_add '.stage_tab {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' background: #fff;'.
|
||||
_add ' margin-top: 0.2em;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab td {'.
|
||||
_add ' border-top: 1px solid #eee;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' vertical-align: middle;'.
|
||||
_add ' padding: 2px 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab td.method {'.
|
||||
_add ' color: #ccc;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab tr.firstrow td { border-top: 0px; } '.
|
||||
_add '.stage_tab tr.title td {'.
|
||||
_add ' color: #BBB;'.
|
||||
_add ' font-size: 10pt;'.
|
||||
_add ' background-color: #edf2f9;'.
|
||||
_add ' padding: 4px 0.5em;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
|
||||
_add '/* COMMIT */'.
|
||||
_add 'div.form_div {'.
|
||||
_add ' margin: 0.5em 0em;'.
|
||||
_add ' background-color: #F8F8F8;'.
|
||||
_add ' padding: 1em 1em;'.
|
||||
_add '}'.
|
||||
_add 'div.form_div td.field_name {'.
|
||||
_add ' color: #BBB;'.
|
||||
_add ' padding-right: 1em;'.
|
||||
_add '}'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
METHOD scripts.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add 'function setInitialFocus() {'.
|
||||
_add ' document.getElementById("commit_msg").focus();'.
|
||||
_add '}'.
|
||||
_add 'function submitCommit() {'.
|
||||
_add ' document.getElementById("commit_form").submit();'.
|
||||
_add '}'.
|
||||
_add 'setInitialFocus();'.
|
||||
_add 'setInitialFocus("commit_msg");'.
|
||||
|
||||
ENDMETHOD. "scripts
|
||||
|
||||
|
|
|
@ -13,9 +13,6 @@ CLASS lcl_gui_page_db_display DEFINITION FINAL INHERITING FROM lcl_gui_page_supe
|
|||
PRIVATE SECTION.
|
||||
DATA: ms_key TYPE lcl_persistence_db=>ty_content.
|
||||
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
||||
|
@ -47,7 +44,7 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
|||
format = cl_abap_format=>e_html_attr ).
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'CONFIG DISPLAY' ) ).
|
||||
|
||||
ro_html->add( '<div class="db_entry">' ).
|
||||
|
@ -69,43 +66,6 @@ CLASS lcl_gui_page_db_display IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* DB ENTRY DISPLAY */'.
|
||||
_add 'div.db_entry {'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add '}'.
|
||||
|
||||
_add 'div.db_entry pre {'.
|
||||
_add ' display: block;'.
|
||||
_add ' overflow: hidden;'.
|
||||
_add ' word-wrap:break-word;'.
|
||||
_add ' white-space: pre-wrap;'.
|
||||
_add ' background-color: #eaeaea;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add ' margin: 0.5em 0em;'.
|
||||
_add ' width: 50em;'.
|
||||
_add '}'.
|
||||
|
||||
_add 'div.db_entry table.toolbar {'.
|
||||
_add ' width: 50em;'.
|
||||
_add '}'.
|
||||
|
||||
_add 'table.tag {'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' border: 1px #b3c1cc solid;'.
|
||||
_add ' background-color: #eee;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' margin-right: 0.5em; '.
|
||||
_add '}'.
|
||||
_add 'table.tag td { padding: 0.2em 0.5em; }'.
|
||||
_add 'table.tag td.label { background-color: #b3c1cc; }'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_db_edit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
@ -119,12 +79,6 @@ CLASS lcl_gui_page_db_edit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
PRIVATE SECTION.
|
||||
DATA: ms_key TYPE lcl_persistence_db=>ty_content.
|
||||
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
METHODS scripts
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_db_edit IMPLEMENTATION.
|
||||
|
@ -158,7 +112,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
|
|||
CREATE OBJECT ro_html.
|
||||
CREATE OBJECT lo_toolbar.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'CONFIG EDIT' ) ).
|
||||
|
||||
ro_html->add( '<div class="db_entry">' ).
|
||||
|
@ -178,7 +132,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
|
|||
ro_html->add( '</form>' ).
|
||||
|
||||
" Menu
|
||||
lo_toolbar->add( iv_act = 'submitDBForm();'
|
||||
lo_toolbar->add( iv_act = 'submitFormById(''db_form'');'
|
||||
iv_txt = 'Save'
|
||||
iv_typ = gc_action_type-onclick
|
||||
iv_opt = gc_html_opt-emphas ) ##NO_TEXT.
|
||||
|
@ -189,42 +143,10 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION.
|
|||
|
||||
ro_html->add( '</div>' ). "db_entry
|
||||
|
||||
ro_html->add( footer( io_include_script = scripts( ) ) ).
|
||||
ro_html->add( footer( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* DB ENTRY DISPLAY */'.
|
||||
_add 'div.db_entry {'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add '}'.
|
||||
_add 'div.db_entry textarea { margin: 0.5em 0em; }'.
|
||||
_add 'table.tag {'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' border: 1px #b3c1cc solid;'.
|
||||
_add ' background-color: #eee;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' margin-right: 0.5em; '.
|
||||
_add '}'.
|
||||
_add 'table.tag td { padding: 0.2em 0.5em; }'.
|
||||
_add 'table.tag td.label { background-color: #b3c1cc; }'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
METHOD scripts.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add 'function submitDBForm() {'.
|
||||
_add ' document.getElementById("db_form").submit();'.
|
||||
_add '}'.
|
||||
|
||||
ENDMETHOD. "scripts
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
||||
|
@ -233,8 +155,6 @@ CLASS lcl_gui_page_db DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
METHODS lif_gui_page~render REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
METHODS explain_content
|
||||
IMPORTING is_data TYPE lcl_persistence_db=>ty_content
|
||||
RETURNING VALUE(rv_text) TYPE string
|
||||
|
@ -259,7 +179,7 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'DATABASE PERSISTENCY' ) ).
|
||||
|
||||
ro_html->add( '<div class="db_list">' ).
|
||||
|
@ -350,40 +270,4 @@ CLASS lcl_gui_page_db IMPLEMENTATION.
|
|||
ENDCASE.
|
||||
ENDMETHOD. "explain_content
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* DB ENTRIES */'.
|
||||
_add 'div.db_list {'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add '}'.
|
||||
_add 'table.db_tab pre {'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' overflow: hidden;'.
|
||||
_add ' word-wrap:break-word;'.
|
||||
_add ' white-space: pre-wrap;'.
|
||||
_add ' margin: 0px;'.
|
||||
_add ' width: 30em;'.
|
||||
_add '}'.
|
||||
_add 'table.db_tab tr.firstrow td { padding-top: 0.5em; }'.
|
||||
_add 'table.db_tab th {'.
|
||||
_add ' text-align: left;'.
|
||||
_add ' color: #888;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add ' border-bottom: 1px #ddd solid;'.
|
||||
_add '}'.
|
||||
_add 'table.db_tab td {'.
|
||||
_add ' color: #333;'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add ' vertical-align: top;'.
|
||||
_add '}'.
|
||||
_add 'table.db_tab td.data {'.
|
||||
_add ' color: #888;'.
|
||||
_add ' font-style: italic;'.
|
||||
_add '}'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
ENDCLASS.
|
|
@ -6,8 +6,6 @@ CLASS lcl_gui_page_debuginfo DEFINITION FINAL INHERITING FROM lcl_gui_page_super
|
|||
PUBLIC SECTION.
|
||||
METHODS lif_gui_page~render REDEFINITION.
|
||||
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
METHODS scripts
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
|
@ -25,7 +23,7 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'DEBUG INFO' ) ).
|
||||
|
||||
ro_html->add( '<div id="debug_info" class="debug_container">' ).
|
||||
|
@ -89,23 +87,6 @@ CLASS lcl_gui_page_debuginfo IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. " render_supported_object_types
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* DEBUG INFO STYLES */'.
|
||||
_add 'div.debug_container {'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add ' font-size: 10pt;'.
|
||||
_add ' color: #444;'.
|
||||
_add ' font-family: Consolas, Courier, monospace;'.
|
||||
_add '}'.
|
||||
_add 'div.debug_container p {'.
|
||||
_add ' margin: 0px;'.
|
||||
_add '}'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD scripts.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
|
|
@ -33,7 +33,6 @@ CLASS lcl_gui_page_diff DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
PRIVATE SECTION.
|
||||
DATA: mt_diff_files TYPE tt_file_diff.
|
||||
|
||||
METHODS styles RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
METHODS render_diff
|
||||
IMPORTING is_diff TYPE ty_file_diff
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
@ -175,133 +174,6 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "append_diff
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* DIFF */'. "#EC NOTEXT
|
||||
_add 'div.diff {'. "#EC NOTEXT
|
||||
_add ' background-color: #f2f2f2;'. "#EC NOTEXT
|
||||
_add ' padding: 0.7em '. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'div.diff_head {'. "#EC NOTEXT
|
||||
_add ' padding-bottom: 0.7em;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'span.diff_name {'. "#EC NOTEXT
|
||||
_add ' padding-left: 0.5em;'. "#EC NOTEXT
|
||||
_add ' color: grey;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'span.diff_name strong {'. "#EC NOTEXT
|
||||
_add ' color: #333;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'span.diff_banner {'. "#EC NOTEXT
|
||||
_add ' border-style: solid;'. "#EC NOTEXT
|
||||
_add ' border-width: 1px;'. "#EC NOTEXT
|
||||
_add ' border-radius: 3px;'. "#EC NOTEXT
|
||||
_add ' padding-left: 0.3em;'. "#EC NOTEXT
|
||||
_add ' padding-right: 0.3em;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add '.diff_ins {'. "#EC NOTEXT
|
||||
_add ' border-color: #7bea7b;'. "#EC NOTEXT
|
||||
_add ' background-color: #d3f8d3;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add '.diff_del {'. "#EC NOTEXT
|
||||
_add ' border-color: #ff667d;'. "#EC NOTEXT
|
||||
_add ' background-color: #ffccd4;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add '.diff_upd {'. "#EC NOTEXT
|
||||
_add ' border-color: #dada00;'. "#EC NOTEXT
|
||||
_add ' background-color: #ffffcc;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'div.diff_content {'. "#EC NOTEXT
|
||||
_add ' background: #fff;'. "#EC NOTEXT
|
||||
_add ' border-top: 1px solid #DDD;'. "#EC NOTEXT
|
||||
_add ' border-bottom: 1px solid #DDD;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
|
||||
_add 'div.diff_head span.state-block {'.
|
||||
_add ' margin-left: 0.5em;'.
|
||||
_add ' font-family: Consolas, Lucida Console, Courier, monospace;'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span {'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' padding: 0px 4px;'.
|
||||
_add ' border: 1px solid #000;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span.added {'.
|
||||
_add ' background-color: #69ad74; '.
|
||||
_add ' border-color: #579e64;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span.changed {'.
|
||||
_add ' background-color: #e0c150;'.
|
||||
_add ' border-color: #d4af25;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span.mixed {'.
|
||||
_add ' background-color: #e0c150;'.
|
||||
_add ' border-color: #579e64;'.
|
||||
_add ' color: #69ad74;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span.deleted {'.
|
||||
_add ' background-color: #c76861;'.
|
||||
_add ' border-color: #b8605a;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add 'div.diff_head span.state-block span.none {'.
|
||||
_add ' background-color: #e8e8e8;'.
|
||||
_add ' border-color: #dbdbdb;'.
|
||||
_add ' color: #c8c8c8;'.
|
||||
_add '}'.
|
||||
|
||||
" Table part
|
||||
_add '/* DIFF TABLE */'. "#EC NOTEXT
|
||||
_add 'table.diff_tab {'. "#EC NOTEXT
|
||||
_add ' font-family: Consolas, Courier, monospace;'. "#EC NOTEXT
|
||||
_add ' font-size: 10pt;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab td,th {'. "#EC NOTEXT
|
||||
_add ' color: #444;'. "#EC NOTEXT
|
||||
_add ' padding-left: 0.5em;'. "#EC NOTEXT
|
||||
_add ' padding-right: 0.5em;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab th {'. "#EC NOTEXT
|
||||
_add ' text-align: left;'. "#EC NOTEXT
|
||||
_add ' font-weight: normal;'. "#EC NOTEXT
|
||||
_add ' padding-top: 3px;'. "#EC NOTEXT
|
||||
_add ' padding-bottom: 3px;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab thead.header th {'. "#EC NOTEXT
|
||||
_add ' color: #EEE;'. "#EC NOTEXT
|
||||
_add ' background-color: #BBB;'. "#EC NOTEXT
|
||||
_add ' text-align: left;'. "#EC NOTEXT
|
||||
_add ' font-weight: bold;'. "#EC NOTEXT
|
||||
_add ' padding-left: 0.5em;'. "#EC NOTEXT
|
||||
_add ' font-size: 9pt;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab thead.nav_line {'. "#EC NOTEXT
|
||||
_add ' background-color: #edf2f9;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab thead.nav_line th {'. "#EC NOTEXT
|
||||
_add ' color: #bbb;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab td.num, th.num {'. "#EC NOTEXT
|
||||
_add ' text-align: right;'. "#EC NOTEXT
|
||||
_add ' color: #ccc;'. "#EC NOTEXT
|
||||
_add ' border-left: 1px solid #eee;'. "#EC NOTEXT
|
||||
_add ' border-right: 1px solid #eee;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab code {'. "#EC NOTEXT
|
||||
_add ' font-family: inherit;'. "#EC NOTEXT
|
||||
_add ' white-space: pre;'. "#EC NOTEXT
|
||||
_add '}'. "#EC NOTEXT
|
||||
_add 'table.diff_tab tbody tr:first-child td { padding-top: 0.5em; }'.
|
||||
_add 'table.diff_tab tbody tr:last-child td { padding-bottom: 0.5em; }'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_diff_head.
|
||||
DATA: lo_html TYPE REF TO lcl_html_helper,
|
||||
ls_stats TYPE lcl_diff=>ty_count.
|
||||
|
@ -467,7 +339,7 @@ CLASS lcl_gui_page_diff IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'DIFF' ) ).
|
||||
|
||||
LOOP AT mt_diff_files INTO ls_diff_file.
|
||||
|
|
|
@ -9,20 +9,20 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
constructor
|
||||
RAISING lcx_exception,
|
||||
lif_gui_page~render REDEFINITION,
|
||||
lif_gui_page~on_event REDEFINITION,
|
||||
lif_gui_page~get_assets REDEFINITION.
|
||||
lif_gui_page~on_event REDEFINITION.
|
||||
|
||||
PRIVATE SECTION.
|
||||
CONSTANTS: BEGIN OF c_actions,
|
||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||
show TYPE string VALUE 'show' ##NO_TEXT,
|
||||
changed_by TYPE string VALUE 'changed_by',
|
||||
END OF c_actions.
|
||||
|
||||
DATA: mv_show TYPE lcl_persistence_db=>ty_value,
|
||||
mo_repo_content TYPE REF TO lcl_gui_view_repo_content.
|
||||
|
||||
METHODS:
|
||||
styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
test_changed_by
|
||||
RAISING lcx_exception,
|
||||
retrieve_active_repo
|
||||
RAISING lcx_exception,
|
||||
render_toc
|
||||
|
@ -80,10 +80,34 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
ENDTRY.
|
||||
|
||||
ev_state = gc_event_state-re_render.
|
||||
WHEN c_actions-changed_by.
|
||||
test_changed_by( ).
|
||||
ev_state = gc_event_state-no_more_act.
|
||||
ENDCASE.
|
||||
|
||||
ENDMETHOD. "on_event
|
||||
|
||||
METHOD test_changed_by.
|
||||
|
||||
DATA: ls_tadir TYPE tadir,
|
||||
lv_user TYPE xubname,
|
||||
ls_item TYPE ty_item.
|
||||
|
||||
|
||||
ls_tadir = lcl_popups=>popup_object( ).
|
||||
IF ls_tadir IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
ls_item-obj_type = ls_tadir-object.
|
||||
ls_item-obj_name = ls_tadir-obj_name.
|
||||
|
||||
lv_user = lcl_objects=>changed_by( ls_item ).
|
||||
|
||||
MESSAGE lv_user TYPE 'S'.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
**********************************************************************
|
||||
* RENDERING
|
||||
**********************************************************************
|
||||
|
@ -98,7 +122,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( iv_title = 'HOME'
|
||||
io_menu = build_main_menu( ) ) ).
|
||||
|
||||
|
@ -172,6 +196,7 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
lo_betasub->add( iv_txt = 'Package to zip' iv_act = gc_action-zip_package ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Transport to zip' iv_act = gc_action-zip_transport ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Object to files' iv_act = gc_action-zip_object ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Test changed by' iv_act = c_actions-changed_by ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Page playground' iv_act = gc_action-go_playground ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Debug info' iv_act = gc_action-go_debuginfo ) ##NO_TEXT.
|
||||
lo_betasub->add( iv_txt = 'Settings' iv_act = gc_action-go_settings ) ##NO_TEXT.
|
||||
|
@ -310,255 +335,4 @@ CLASS lcl_gui_page_main IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_repo
|
||||
|
||||
**********************************************************************
|
||||
* ASSETS, STYLES, SCRIPTS
|
||||
**********************************************************************
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* REPOSITORY TABLE*/'.
|
||||
_add 'div.repo_container {'.
|
||||
_add ' position: relative;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' border-radius: 3px;'.
|
||||
_add ' background: #fff;'.
|
||||
_add ' margin-top: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td {'.
|
||||
_add ' border-top: 1px solid #eee;'.
|
||||
_add ' vertical-align: middle;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' padding-top: 2px;'.
|
||||
_add ' padding-bottom: 2px;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.icon {'.
|
||||
_add ' width: 32px;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.type {'.
|
||||
_add ' width: 3em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.object {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.files {'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd {'.
|
||||
_add ' text-align: right;'.
|
||||
_add ' padding-left: 0.5em;'.
|
||||
_add ' padding-right: 0.7em;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab tr.unsupported { color: lightgrey; }'.
|
||||
_add '.repo_tab tr.modified { background: #fbf7e9; }'.
|
||||
_add '.repo_tab tr:first-child td { border-top: 0px; }'.
|
||||
_add '.repo_tab td.current_dir { color: #ccc; }'.
|
||||
|
||||
" States
|
||||
_add '.repo_tab td.cmd span.state-block {'.
|
||||
_add ' margin-left: 1em;'.
|
||||
_add ' font-family: Consolas, Lucida Console, Courier, monospace;'.
|
||||
_add ' font-size: x-small;'.
|
||||
_add ' vertical-align: 13%;'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd span.state-block span {'.
|
||||
_add ' display: inline-block;'.
|
||||
_add ' padding: 0px 2px;'.
|
||||
_add ' border: 1px solid #000;'.
|
||||
_add '}'.
|
||||
|
||||
_add '.repo_tab td.cmd span.state-block span.added {'.
|
||||
_add ' background-color: #69ad74; '.
|
||||
_add ' border-color: #579e64;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd span.state-block span.changed {'.
|
||||
_add ' background-color: #e0c150;'.
|
||||
_add ' border-color: #d4af25;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd span.state-block span.mixed {'.
|
||||
_add ' background-color: #e0c150;'.
|
||||
_add ' border-color: #579e64;'.
|
||||
_add ' color: #69ad74;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd span.state-block span.deleted {'.
|
||||
_add ' background-color: #c76861;'.
|
||||
_add ' border-color: #b8605a;'.
|
||||
_add ' color: white;'.
|
||||
_add '}'.
|
||||
_add '.repo_tab td.cmd span.state-block span.none {'.
|
||||
_add ' background-color: #e8e8e8;'.
|
||||
_add ' border-color: #dbdbdb;'.
|
||||
_add ' color: #c8c8c8;'.
|
||||
_add '}'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
METHOD lif_gui_page~get_assets.
|
||||
* http://fa2png.io/r/octicons/
|
||||
* colour: #808080
|
||||
* size: 16
|
||||
* https://www.base64-image.de/ can be used to convert images to base64
|
||||
|
||||
DATA ls_image TYPE ty_web_asset.
|
||||
|
||||
rt_assets = super->lif_gui_page~get_assets( ).
|
||||
|
||||
ls_image-url = 'img/sync' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA6ElEQVQYGY3BIWuUAQAG'
|
||||
&& '4Pc7N72xsbGBYNE8tYpVZKDZX2CcYLEZ9yQxOQSz3D/YmkUsVovRQ2SYNJnlkFfH7VZu'
|
||||
&& 'wefJgrGHXnjrpQeu5B93smCwr6qqqp54433mDI5Ucds1u577o+p35hyoqe2cMThWVatJ'
|
||||
&& '7KiZrZxz18SJqqtJPFXPssRgw0oSH9WNXMCQU76qzSxx2cxxTlk3yhKb6mcSQy7kvjpM'
|
||||
&& 'Ylt98tpjN3POyFTdSuKSqppayxkjE/Uhc36p+m7PhhXr7vmmfhhnzpHPJqqqquqdcRY8'
|
||||
&& 'spq47sAXMyde2c3/+wvX7Y18BexhBwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/toc' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAFVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgIAO39T0AAAABnRSTlMABBCRlMXJzV0oAAAAN0lEQVQIW2NgwABuaWlB'
|
||||
&& 'YWlpDgwJDAxiAgxACshgYwAz0tLY2NISSBWBMYAmg4ADyBZhARCJAQBBchGypGCbQgAA'
|
||||
&& 'AABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_online' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAApVBMVEUAAABQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQbJxQ'
|
||||
&& 'bJz+TJ01AAAANnRSTlMAAQIDBAcJCgwSFBocHygqMTM1NkRHSU1QUWFiZGlweHuDiImL'
|
||||
&& 'lZiio6a5vsfT3uTo6e3x9fsxY2JuAAAAgUlEQVQYGXXB6RaBUBSA0e+IEuIiMs9zhlDn'
|
||||
&& '/R/NZWmt/LA3f1RcoaB50SydCbn20wjedkPu3sKSpMGH21PhLdZ0BATZ+cCXtxtDHGLV'
|
||||
&& 'pgFW9QqJj2U0wvJvMF+5jiNGI3HK9dMQSouH6sRoFGoWd8l1dEDRWlWPQsFS98KPvvDH'
|
||||
&& 'C3HLClrWc70ZAAAAAElFTkSuQmCC'.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/repo_offline' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAVFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICuaWnmAAAAG3RSTlMAAgQFBgsQFxweIiMtN3yI'
|
||||
&& 'nqOvt9Hp6/Hz9fktMNR/AAAAXElEQVQYV5WO2xJAMAxES1q3ugfF/v9/0qLyyL4k58xk'
|
||||
&& 'J0p9D7N5oeqZgSwy7fDZnHNdEE1gWK116tksl7hPimGFFPWYl7MU0zksRCl8TStKg1AJ'
|
||||
&& '0XNC8Zm4/c0BUVQHi0llOUYAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/pkg' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAQAAAC1+jfqAAAA30lEQVQoU43OIUuDcRSF'
|
||||
&& '8fvqhuB0mFwaKLbVBVdkX0GTFss+wYL2H4rJIIgyQQSzZcUPoGHZ9CKCmAwTMS8Y/ga3'
|
||||
&& 'BWVjT7hwOQ+HEzEbMhU7jrTd69q2KhtFRU2nrvS927dm3pyqPXcuNRVD7sxiRIQlDSc+'
|
||||
&& 'PGjZUFDWkYekLfdoV2XYua4rSZ61pZBkEUq2XPty41XuXJIiZGNhPDVZiFCYIMSor+Db'
|
||||
&& '7RQhYnQnCsNvNmGgPFFYMQh1PU9aqrLxyGUNx/p66r9mUc2hFx3JhU9vDtQU4y9KGjaV'
|
||||
&& '/gXT+AGZVIinhU2EAwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/branch' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAqFBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgID/OyosAAAAN3RSTlMAAQIDBAYICQ8TFRweJScoKSo3Oj1FRk1dYWJjZmhzdIaJ'
|
||||
&& 'j5GVm6CwsrS5vsHDyszV19ne7/X583teZAAAAIFJREFUGFdVytkagVAYheFvFzJlnqc0'
|
||||
&& 'EEoR+u//zhxI7dbZ9z4LMJ1op9DmjpntdXiBigHbLiAYqukBVr63+YGRSazgCY/iEooP'
|
||||
&& 'xKZxr0EnSbo14B1Rg4msKzj150fJrQpERPLBv7mIfNxlq+zRbZsu0JYpGlcdwjY9Twfr'
|
||||
&& 'nAbNsr6IKQxJI/U5CgAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/link' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAXVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICVwFMKAAAAHnRSTlMAAwQFBgcK'
|
||||
&& 'FR4gIiMmP0JHSm+RmKDByM/R09rg+/0jN/q+AAAAX0lEQVQYV43Nxw6AIBAE0FGw916Z'
|
||||
&& '//9MRQ0S4sG5bPZlCxqSCyBGXgFUJKUA4A8PUOKONzuQOxOZIjcLkrMvxGQg3skSCFYL'
|
||||
&& 'Kl1Ds5LWz+33yyf4rQOSf6CjnV6rHeAA87gJtKzI8ocAAAAASUVORK5CYII='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/code' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAAA1SURBVAhbY2AODQ0NEWBgYGVg'
|
||||
&& 'YGByhNAMKgIMrKyhAQxMDhA+QwCCZgVqIIUP1Q+yJzTUAAAfUAq+Os55uAAAAABJRU5E'
|
||||
&& 'rkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/bin' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAElBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgIC07w1vAAAABXRSTlMABECUxcOwZQcAAABBSURBVAhbXcqxDYAwAMRAK8h9'
|
||||
&& 'hmAARoANvuD3X4UCiojqZMlsbe8JAuN6ZZ9ozThRCVmsJe9H0HwdXf19W9v2eAA6Fws2'
|
||||
&& 'RotPsQAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/obj' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOBAMAAADtZjDiAAAAIVBMVEUAAACAgICAgICA'
|
||||
&& 'gICAgICAgICAgICAgICAgICAgICAgIDcWqnoAAAACnRSTlMABD1AZI+RlcPFIaFe1gAA'
|
||||
&& 'AEVJREFUCFtjYF+1atVKAQYGLgYGBuaJEJrBUgBCM0+A0AwLgLQIgyOIZmwCSgNptgAG'
|
||||
&& '1gQQfzKDhgCSPFw9Kg2yZ9WqAgBWJBENLk6V3AAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/lock' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAOVBMVEUAAACIiIiIiIiI'
|
||||
&& 'iIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIiIjNaTNB'
|
||||
&& 'AAAAEnRSTlMABgdBVXt8iYuRsNXZ3uDi6Pmu6tfUAAAASUlEQVQYV63KSxJAQBAE0TQ0'
|
||||
&& 'Znym1f0PayE0QdjJ5asCgGTu1hClqjppvaRXB60swBeA2QNUAIq+ICvKx367nqAn/P8Y'
|
||||
&& 't2jg3Q5rgASaF3KNRwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/dir' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAASFBMVEUAAABmksxmksxm'
|
||||
&& 'ksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxmksxm'
|
||||
&& 'ksxmksxmksxmksxMwQo8AAAAF3RSTlMABhIYIy1fZmhpe3+IiYuMkZvD7e/x93sipD4A'
|
||||
&& 'AAA+SURBVBhXY2BABzwiokAgzAYXEGdiBAIWIYQAPzcQCApzgwEXM4M4KuBDFxAYKAEx'
|
||||
&& 'VAFeBlYOTiTAzoThewD5hBAcnWM4gwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/burger' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQBAMAAADt3eJSAAAAHlBMVEUAAABtktltktlt'
|
||||
&& 'ktltktltktltktltktltktltktk7ccVDAAAACXRSTlMAFDBLY2SFoPGv/DFMAAAAJ0lE'
|
||||
&& 'QVQIW2NggIHKmWAwmaETwpjGoBoKBo4MmIAkxXApuGK4dgwAAJa5IzLs+gRBAAAAAElF'
|
||||
&& 'TkSuQmCC'.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/star' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAABejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejclejcle'
|
||||
&& 'jclejclejclejclejclejclejclejclejcn2yvsVAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ls_image-url = 'img/star-grey' ##NO_TEXT.
|
||||
ls_image-content =
|
||||
'iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAilBMVEUAAADQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ'
|
||||
&& '0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NDQ0NC2QdifAAAALXRSTlMAAQIFBwkKCw0QERUY'
|
||||
&& 'HB4jLzEzNjg7PVdYYmRvd3mDm52eub7R0+Tr8fX3+/16wo8zAAAAcElEQVQYGW3BBxKC'
|
||||
&& 'MABFwYcQETv2hg1UVP79ryeTZBxw3MWL+JGltBgVtGRSSoORVOAE8Xi5zVU7rWfDCOaV'
|
||||
&& 'Gu59mLz0dTPUBg95eYjVK2VdOzjBW9YZL5FT4i2k5+YoKcY5VPsQkoumOLsu1mjFHx8o'
|
||||
&& 'ahA3YV7OfwAAAABJRU5ErkJggg=='.
|
||||
APPEND ls_image TO rt_assets.
|
||||
|
||||
ENDMETHOD. "get_assets
|
||||
|
||||
ENDCLASS.
|
|
@ -11,8 +11,6 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
save_settings TYPE string VALUE 'save_settings',
|
||||
END OF c_action.
|
||||
PRIVATE SECTION.
|
||||
METHODS styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
METHODS render_proxy
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
METHODS render_development_internals
|
||||
|
@ -46,7 +44,7 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
|
|||
|
||||
read_settings( ).
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'Settings' ) ).
|
||||
|
||||
ro_html->add( render_form_begin( ) ).
|
||||
|
@ -56,18 +54,6 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
|
|||
ro_html->add( render_form_end( ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD styles.
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* settings STYLES */'.
|
||||
_add 'div.settings_container {'.
|
||||
_add ' padding: 0.5em;'.
|
||||
_add ' font-size: 10pt;'.
|
||||
_add ' color: #444;'.
|
||||
_add ' background-color: #f2f2f2;'.
|
||||
_add '}'.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD render_proxy.
|
||||
CREATE OBJECT ro_html.
|
||||
ro_html->add( |<h2>Proxy</h2>| ).
|
||||
|
|
|
@ -32,8 +32,6 @@ CLASS lcl_gui_page_stage DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
|
|||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
render_menu
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
styles
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
|
||||
scripts
|
||||
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
|
||||
|
||||
|
@ -217,7 +215,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( header( io_include_style = styles( ) ) ).
|
||||
ro_html->add( header( ) ).
|
||||
ro_html->add( title( 'STAGE' ) ).
|
||||
|
||||
ro_html->add( '<div class="repo">' ).
|
||||
|
@ -235,7 +233,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
CREATE OBJECT ro_html.
|
||||
|
||||
ro_html->add( '<div class="paddings">' ).
|
||||
ro_html->add_anchor( iv_act = |commit('{ c_action-stage_commit }');|
|
||||
ro_html->add_anchor( iv_act = 'gHelper.submit();'
|
||||
iv_typ = gc_action_type-onclick
|
||||
iv_id = 'act_commit'
|
||||
iv_style = 'display: none'
|
||||
|
@ -248,152 +246,18 @@ CLASS lcl_gui_page_stage IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "render_menu
|
||||
|
||||
METHOD styles.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
_add '/* STAGE */'.
|
||||
_add '.stage_tab {'.
|
||||
_add ' border: 1px solid #DDD;'.
|
||||
_add ' background: #fff;'.
|
||||
_add ' margin-top: 0.2em;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab td {'.
|
||||
_add ' border-top: 1px solid #eee;'.
|
||||
_add ' color: #333;'.
|
||||
_add ' vertical-align: middle;'.
|
||||
_add ' padding: 2px 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab th {'.
|
||||
_add ' color: #BBB;'.
|
||||
_add ' font-size: 10pt;'.
|
||||
_add ' text-align: left;'.
|
||||
_add ' font-weight: normal;'.
|
||||
_add ' background-color: #edf2f9;'.
|
||||
_add ' padding: 4px 0.5em;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab td.status {'.
|
||||
_add ' width: 2em;'.
|
||||
_add ' text-align: center;'.
|
||||
_add '}'.
|
||||
_add '.stage_tab tbody tr:first-child td { padding-top: 0.5em; }'.
|
||||
_add '.stage_tab tbody tr:last-child td { padding-bottom: 0.5em; }'.
|
||||
_add '.stage_tab td.cmd a { padding: 0px 4px; }'.
|
||||
|
||||
ENDMETHOD. "styles
|
||||
|
||||
METHOD scripts.
|
||||
|
||||
CREATE OBJECT ro_html.
|
||||
|
||||
" Globals & initialization
|
||||
ro_html->add( |var gPageID = "stage{ mv_ts }";| ).
|
||||
_add 'var gChoiceCount = 0;'.
|
||||
_add 'setHook();'.
|
||||
|
||||
" Hook global click listener on table, global action counter
|
||||
_add 'function setHook() {'.
|
||||
_add ' var stageTab = document.getElementById("stage_tab");'.
|
||||
_add ' if (stageTab.addEventListener) {'.
|
||||
_add ' stageTab.addEventListener("click", onEvent);'.
|
||||
_add ' } else {'.
|
||||
_add ' stageTab.attachEvent("onclick", onEvent);'. " <IE9 crutch
|
||||
_add ' }'.
|
||||
_add ' window.onbeforeunload = onPageUnload;'.
|
||||
_add ' window.onload = onPageLoad;'.
|
||||
_add '}'.
|
||||
|
||||
" Store table state on leaving the page
|
||||
_add 'function onPageUnload() {'.
|
||||
_add ' var data = collectData();'.
|
||||
_add ' window.sessionStorage.setItem(gPageID, JSON.stringify(data));'.
|
||||
_add '}'.
|
||||
|
||||
" Re-store table state on entering the page
|
||||
_add 'function onPageLoad() {'.
|
||||
_add ' var data = JSON.parse(window.sessionStorage.getItem(gPageID));'.
|
||||
_add ' var stage = document.getElementById("stage_tab");'.
|
||||
_add ' for (var i = stage.rows.length - 1; i >= 0; i--) {'.
|
||||
_add ' var tr = stage.rows[i];'.
|
||||
_add ' if (tr.parentNode.tagName == "THEAD") continue;'.
|
||||
_add ' var context = tr.parentNode.className;'.
|
||||
_add ' var cmd = data[tr.cells[1].innerText];'.
|
||||
_add ' if (!cmd) continue;'.
|
||||
_add ' formatTR(tr, cmd, context);'.
|
||||
_add ' if (countChoiceImpact(cmd) > 0) gChoiceCount++;'.
|
||||
_add ' }'.
|
||||
_add ' updateMenu();'.
|
||||
_add '}'.
|
||||
|
||||
" Event handler, change status
|
||||
_add 'function onEvent(event) {'.
|
||||
_add ' if (!event.target) {'. " <IE9 crutch
|
||||
_add ' if (event.srcElement) event.target = event.srcElement;'.
|
||||
_add ' else return;'.
|
||||
_add ' }'.
|
||||
_add ' if (event.target.tagName != "A") return;'.
|
||||
_add ' var td = event.target.parentNode;'.
|
||||
_add ' if (!td || td.tagName != "TD" || td.className != "cmd") return;'.
|
||||
_add ' var cmd = event.target.innerText;'.
|
||||
_add ' var tr = td.parentNode;'.
|
||||
_add ' var context = tr.parentNode.className;'.
|
||||
_add ' switch (cmd) {'.
|
||||
_add ' case "add": cmd = "A"; break;'.
|
||||
_add ' case "remove": cmd = "R"; break;'.
|
||||
_add ' case "ignore": cmd = "I"; break;'.
|
||||
_add ' case "reset": cmd = "?"; break;'.
|
||||
_add ' }'.
|
||||
_add ' formatTR(tr, cmd, context);'.
|
||||
_add ' gChoiceCount += countChoiceImpact(cmd);'.
|
||||
_add ' updateMenu();'.
|
||||
_add '}'.
|
||||
|
||||
" Update action counter -> affects menu update after
|
||||
_add 'function countChoiceImpact(cmd) {'.
|
||||
_add ' if ("ARI".indexOf(cmd) > -1) return 1;'.
|
||||
_add ' else if ("?".indexOf(cmd) > -1) return -1;'.
|
||||
_add ' else alert("Unknown command");'.
|
||||
_add '}'.
|
||||
|
||||
" Re-format table line
|
||||
_add 'function formatTR(tr, cmd, context) {'.
|
||||
_add ' var cmdReset = "<a>reset</a>"; '.
|
||||
_add ' var cmdLocal = "<a>add</a>"; '.
|
||||
_add ' var cmdRemote = "<a>ignore</a><a>remove</a>";'.
|
||||
_add ' tr.cells[0].innerText = cmd;'.
|
||||
_add ' tr.cells[0].style.color = (cmd == "?")?"#CCC":"";'.
|
||||
_add ' tr.cells[2].innerHTML = (cmd != "?")?cmdReset'.
|
||||
_add ' :(context == "local")?cmdLocal:cmdRemote;'.
|
||||
_add '}'.
|
||||
|
||||
" Update menu items visibility
|
||||
_add 'function updateMenu() {'.
|
||||
_add ' if (gChoiceCount > 0) {'.
|
||||
_add ' document.getElementById("act_commit").style.display = "inline";'.
|
||||
_add ' document.getElementById("act_commit_all").style.display = "none";'.
|
||||
_add ' } else {'.
|
||||
_add ' document.getElementById("act_commit").style.display = "none";'.
|
||||
_add ' document.getElementById("act_commit_all").style.display = "inline";'.
|
||||
_add ' }'.
|
||||
_add '}'.
|
||||
|
||||
" Commit change to the server
|
||||
_add 'function commit(action) {'.
|
||||
_add ' var data = collectData();'.
|
||||
_add ' submitForm(data, action);'.
|
||||
_add '}'.
|
||||
|
||||
" Extract data from the table
|
||||
_add 'function collectData() {'.
|
||||
_add ' var stage = document.getElementById("stage_tab");'.
|
||||
_add ' var data = {};'.
|
||||
_add ' for (var i = stage.rows.length - 1; i >= 0; i--) {'.
|
||||
_add ' var row = stage.rows[i];'.
|
||||
_add ' if (row.parentNode.tagName == "THEAD") continue;'.
|
||||
_add ' data[row.cells[1].innerText] = row.cells[0].innerText;'.
|
||||
_add ' }'.
|
||||
_add ' return data; '.
|
||||
_add '}'.
|
||||
ro_html->add( 'var gStageParams = {' ).
|
||||
ro_html->add( | seed: "stage{ mv_ts }",| ).
|
||||
ro_html->add( ' stageTabId: "stage_tab",' ).
|
||||
ro_html->add( ' formAction: "stage_commit",' ).
|
||||
ro_html->add( ' commitNodeId: "act_commit",' ).
|
||||
ro_html->add( ' commitAllNodeId: "act_commit_all"' ).
|
||||
ro_html->add( '}' ).
|
||||
ro_html->add( 'var gHelper = new StageHelper(gStageParams);' ).
|
||||
|
||||
ENDMETHOD. "scripts
|
||||
|
||||
|
|
|
@ -362,7 +362,7 @@ CLASS lcl_popups IMPLEMENTATION.
|
|||
|
||||
IF iv_package IS INITIAL. " Empty package -> can be created
|
||||
lv_button2 = 'Create package' ##NO_TEXT.
|
||||
lv_icon2 = icon_msg.
|
||||
lv_icon2 = icon_folder.
|
||||
ENDIF.
|
||||
|
||||
* TAB FLD LABEL DEF ATTR
|
||||
|
|
|
@ -62,11 +62,13 @@ CLASS lcl_services_repo IMPLEMENTATION.
|
|||
iv_url = ls_popup-url
|
||||
iv_branch_name = ls_popup-branch_name
|
||||
iv_package = ls_popup-package ).
|
||||
|
||||
toggle_favorite( lo_repo->get_key( ) ).
|
||||
|
||||
lo_repo->status( ). " check for errors
|
||||
lo_repo->deserialize( ).
|
||||
|
||||
lcl_app=>user( )->set_repo_show( lo_repo->get_key( ) ). " Set default repo for user
|
||||
toggle_favorite( lo_repo->get_key( ) ).
|
||||
|
||||
COMMIT WORK.
|
||||
|
||||
|
|
|
@ -81,7 +81,7 @@ CLASS ltcl_convert IMPLEMENTATION.
|
|||
|
||||
ENDCLASS. "ltcl_convert IMPLEMENTATION
|
||||
|
||||
CLASS lth_critical_tests DEFINITION .
|
||||
CLASS lth_critical_tests DEFINITION FINAL.
|
||||
PUBLIC SECTION.
|
||||
CLASS-METHODS:
|
||||
check_run_permission.
|
||||
|
@ -1676,6 +1676,7 @@ CLASS ltcl_path DEFINITION
|
|||
METHODS split_file_location FOR TESTING.
|
||||
METHODS is_subdir FOR TESTING.
|
||||
METHODS change_dir FOR TESTING.
|
||||
METHODS get_filename_from_syspath FOR TESTING.
|
||||
|
||||
ENDCLASS. "ltcl_path
|
||||
|
||||
|
@ -1794,6 +1795,30 @@ CLASS ltcl_path IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_filename_from_syspath.
|
||||
|
||||
DATA lv_filename TYPE string.
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( 'file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( 'c:\dir\file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( 'c:\file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( '/dir/file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( '/file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
lv_filename = lcl_path=>get_filename_from_syspath( '\\server$\file.txt' ).
|
||||
assert_equals( act = lv_filename exp = 'file.txt' ).
|
||||
|
||||
ENDMETHOD. " get_filename_from_syspath.
|
||||
|
||||
ENDCLASS. "ltcl_path
|
||||
|
||||
CLASS ltcl_file_status DEFINITION
|
||||
|
@ -2178,4 +2203,4 @@ CLASS ltcl_persistence_settings IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
ENDCLASS.
|
|
@ -360,6 +360,10 @@ CLASS lcl_path DEFINITION FINAL.
|
|||
iv_cd TYPE string
|
||||
RETURNING VALUE(rv_path) TYPE string.
|
||||
|
||||
CLASS-METHODS get_filename_from_syspath
|
||||
IMPORTING iv_path TYPE string
|
||||
RETURNING VALUE(rv_filename) TYPE string.
|
||||
|
||||
ENDCLASS. "lcl_path
|
||||
|
||||
CLASS lcl_path IMPLEMENTATION.
|
||||
|
@ -434,6 +438,15 @@ CLASS lcl_path IMPLEMENTATION.
|
|||
|
||||
ENDMETHOD. "change_dir
|
||||
|
||||
METHOD get_filename_from_syspath.
|
||||
|
||||
" filename | c:\filename | /dir/filename | \\server\filename
|
||||
FIND FIRST OCCURRENCE OF REGEX '^(?:/(?:.+/)*|(?:\w:|\\)\\(?:.+\\)*)?([^\\/]+)$'
|
||||
IN iv_path
|
||||
SUBMATCHES rv_filename.
|
||||
|
||||
ENDMETHOD. " get_filename_from_syspath.
|
||||
|
||||
ENDCLASS. "lcl_path
|
||||
|
||||
*----------------------------------------------------------------------*
|
||||
|
|
Loading…
Reference in New Issue
Block a user