diff --git a/src/zabapgit.prog.abap b/src/zabapgit.prog.abap index 9c7ff8684..32538a1c0 100644 --- a/src/zabapgit.prog.abap +++ b/src/zabapgit.prog.abap @@ -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. diff --git a/src/zabapgit_css_common.w3mi.data.css b/src/zabapgit_css_common.w3mi.data.css new file mode 100644 index 000000000..7fdaf42f7 --- /dev/null +++ b/src/zabapgit_css_common.w3mi.data.css @@ -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; } diff --git a/src/zabapgit_css_common.w3mi.xml b/src/zabapgit_css_common.w3mi.xml new file mode 100644 index 000000000..b5ce02b7f --- /dev/null +++ b/src/zabapgit_css_common.w3mi.xml @@ -0,0 +1,41 @@ + + + + + ZABAPGIT_CSS_COMMON + AbapGit common styles + + + MI + ZABAPGIT_CSS_COMMON + fileextension + .css + + + MI + ZABAPGIT_CSS_COMMON + filename + common.css + + + MI + ZABAPGIT_CSS_COMMON + filesize + 12136 + + + MI + ZABAPGIT_CSS_COMMON + mimetype + text/css + + + MI + ZABAPGIT_CSS_COMMON + version + + + + + + diff --git a/src/zabapgit_definitions.prog.abap b/src/zabapgit_definitions.prog.abap index 67719c40a..4ecc74b25 100644 --- a/src/zabapgit_definitions.prog.abap +++ b/src/zabapgit_definitions.prog.abap @@ -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. diff --git a/src/zabapgit_gui.prog.abap b/src/zabapgit_gui.prog.abap index dc15db32e..b5397ea7d 100644 --- a/src/zabapgit_gui.prog.abap +++ b/src/zabapgit_gui.prog.abap @@ -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 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 . - READ TABLE mt_assets TRANSPORTING NO FIELDS WITH KEY table_line = -url. - CHECK sy-subrc IS NOT INITIAL. - APPEND -url TO mt_assets. - cache_image( iv_url = -url iv_base64 = -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 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 . + cache_asset( iv_xdata = -content + iv_url = -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. diff --git a/src/zabapgit_gui_asset_manager.prog.abap b/src/zabapgit_gui_asset_manager.prog.abap new file mode 100644 index 000000000..2ff246994 --- /dev/null +++ b/src/zabapgit_gui_asset_manager.prog.abap @@ -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 LIKE LINE OF rt_images. + + rt_images = get_inline_images( ). + + " Convert to xstring + LOOP AT rt_images ASSIGNING . + CALL FUNCTION 'SSFC_BASE64_DECODE' + EXPORTING + b64data = -base64 + IMPORTING + bindata = -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 \ No newline at end of file diff --git a/src/zabapgit_gui_asset_manager.prog.xml b/src/zabapgit_gui_asset_manager.prog.xml new file mode 100644 index 000000000..bcab6cac1 --- /dev/null +++ b/src/zabapgit_gui_asset_manager.prog.xml @@ -0,0 +1,48 @@ + + + + + + ZABAPGIT_GUI_ASSET_MANAGER + A + + + X + + + + + + I + + + + 0000-00-00 + + 0000-00-00 + + + + + E + + + 0000-00-00 + + 0000-00-00 + + + X + + + + R + + Include ZABAPGIT_GUI_ASSET_MANAGER + 34 + + + + + + diff --git a/src/zabapgit_js_common.w3mi.data.js b/src/zabapgit_js_common.w3mi.data.js new file mode 100644 index 000000000..b8556c7e7 --- /dev/null +++ b/src/zabapgit_js_common.w3mi.data.js @@ -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 = "

" + text + "

"; + 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 = "reset"; + var cmdLocal = "add"; + var cmdRemote = "ignoreremove"; + + 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; +} diff --git a/src/zabapgit_js_common.w3mi.xml b/src/zabapgit_js_common.w3mi.xml new file mode 100644 index 000000000..7860ae90e --- /dev/null +++ b/src/zabapgit_js_common.w3mi.xml @@ -0,0 +1,41 @@ + + + + + ZABAPGIT_JS_COMMON + Abapgit common JS library + + + MI + ZABAPGIT_JS_COMMON + fileextension + .js + + + MI + ZABAPGIT_JS_COMMON + filename + common.js + + + MI + ZABAPGIT_JS_COMMON + filesize + 6500 + + + MI + ZABAPGIT_JS_COMMON + mimetype + text/javascript + + + MI + ZABAPGIT_JS_COMMON + version + + + + + + diff --git a/src/zabapgit_object_w3xx.prog.abap b/src/zabapgit_object_w3xx.prog.abap index 220515c02..f1c17f50d 100644 --- a/src/zabapgit_object_w3xx.prog.abap +++ b/src/zabapgit_object_w3xx.prog.abap @@ -34,7 +34,16 @@ CLASS lcl_object_w3super DEFINITION INHERITING FROM lcl_objects_super ABSTRACT. RAISING lcx_exception. METHODS patch_size - IMPORTING iv_size TYPE i + 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. @@ -97,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 @@ -137,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'. @@ -214,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' @@ -382,11 +391,45 @@ CLASS lcl_object_w3super IMPLEMENTATION. lcx_exception=>raise( |W3xx: Cannot find file size for { ms_key-objid }| ). ENDIF. - -value = iv_size. - SHIFT -value LEFT DELETING LEADING space. + IF iv_size IS NOT INITIAL. + -value = iv_size. + ENDIF. + CONDENSE -value. + + ev_size = -value. ENDMETHOD. " patch_size. + METHOD patch_filename. + + FIELD-SYMBOLS LIKE LINE OF ct_params. + + READ TABLE ct_params ASSIGNING WITH KEY name = 'filename'. + + IF sy-subrc > 0. + lcx_exception=>raise( |W3xx: Cannot find file name for { ms_key-objid }| ). + ENDIF. + + " Remove path + -value = lcl_path=>get_filename_from_syspath( |{ -value }| ). + + ENDMETHOD. " patch_filename. + + METHOD clear_version. + + FIELD-SYMBOLS LIKE LINE OF ct_params. + + READ TABLE ct_params ASSIGNING WITH KEY name = 'version'. + + IF sy-subrc > 0. + lcx_exception=>raise( |W3xx: Cannot find version for { ms_key-objid }| ). + ENDIF. + + " Clear version + CLEAR -value. + + ENDMETHOD. " clear_version. + METHOD lif_object~compare_to_remote_version. CREATE OBJECT ro_comparison_result TYPE lcl_null_comparison_result. ENDMETHOD. diff --git a/src/zabapgit_page.prog.abap b/src/zabapgit_page.prog.abap index 0eaaff4db..8d99436c1 100644 --- a/src/zabapgit_page.prog.abap +++ b/src/zabapgit_page.prog.abap @@ -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( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( 'abapGit' ). "#EC NOTEXT - ro_html->add( styles( ) ). - - IF io_include_style IS BOUND. - ro_html->add( '' ). "#EC NOTEXT - ENDIF. - + ro_html->add( '' ). ro_html->add( '' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT @@ -277,39 +265,14 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ro_html->add( '' ). "#EC NOTEXT ro_html->add( '
' ). "#EC NOTEXT ro_html->add( |{ gc_abap_version }| ). "#EC NOTEXT - ro_html->add( '
' ). "#EC NOTEXT + ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT ro_html->add( '' ). "#EC NOTEXT - " Common JS routines - _add ''. "#EC NOTEXT - IF io_include_script IS BOUND. ro_html->add( '' ). ENDIF. @@ -338,348 +301,6 @@ CLASS lcl_gui_page_super IMPLEMENTATION. ENDMETHOD. - METHOD styles. - - CREATE OBJECT ro_html. - - _add ''. - - 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 diff --git a/src/zabapgit_page_commit.prog.abap b/src/zabapgit_page_commit.prog.abap index 0e4152674..434b154c1 100644 --- a/src/zabapgit_page_commit.prog.abap +++ b/src/zabapgit_page_commit.prog.abap @@ -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( '
' ). @@ -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 diff --git a/src/zabapgit_page_db.prog.abap b/src/zabapgit_page_db.prog.abap index 8aff9e1be..6f8ccf02c 100644 --- a/src/zabapgit_page_db.prog.abap +++ b/src/zabapgit_page_db.prog.abap @@ -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( '
' ). @@ -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( '
' ). @@ -178,7 +132,7 @@ CLASS lcl_gui_page_db_edit IMPLEMENTATION. ro_html->add( '' ). " 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( '
' ). "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( '
' ). @@ -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. \ No newline at end of file diff --git a/src/zabapgit_page_debug.prog.abap b/src/zabapgit_page_debug.prog.abap index db2641f77..151ca4017 100644 --- a/src/zabapgit_page_debug.prog.abap +++ b/src/zabapgit_page_debug.prog.abap @@ -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( '
' ). @@ -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. diff --git a/src/zabapgit_page_diff.prog.abap b/src/zabapgit_page_diff.prog.abap index 9c0a97d04..e026a1d8e 100644 --- a/src/zabapgit_page_diff.prog.abap +++ b/src/zabapgit_page_diff.prog.abap @@ -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. diff --git a/src/zabapgit_page_main.prog.abap b/src/zabapgit_page_main.prog.abap index ecbda3159..a294c53a8 100644 --- a/src/zabapgit_page_main.prog.abap +++ b/src/zabapgit_page_main.prog.abap @@ -9,8 +9,7 @@ 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, @@ -24,8 +23,6 @@ CLASS lcl_gui_page_main DEFINITION FINAL INHERITING FROM lcl_gui_page_super. METHODS: test_changed_by RAISING lcx_exception, - styles - RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper, retrieve_active_repo RAISING lcx_exception, render_toc @@ -125,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( ) ) ). @@ -338,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. \ No newline at end of file diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap index 797f4fa56..a81637801 100644 --- a/src/zabapgit_page_settings.prog.abap +++ b/src/zabapgit_page_settings.prog.abap @@ -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( |

Proxy

| ). diff --git a/src/zabapgit_page_stage.prog.abap b/src/zabapgit_page_stage.prog.abap index eeb1debe2..bd254fdaa 100644 --- a/src/zabapgit_page_stage.prog.abap +++ b/src/zabapgit_page_stage.prog.abap @@ -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( '
' ). @@ -235,7 +233,7 @@ CLASS lcl_gui_page_stage IMPLEMENTATION. CREATE OBJECT ro_html. ro_html->add( '
' ). - 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);'. " = 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) {'. " 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 = "reset"; '. - _add ' var cmdLocal = "add"; '. - _add ' var cmdRemote = "ignoreremove";'. - _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 diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap index 2dabe4cd0..9ff966597 100644 --- a/src/zabapgit_unit_test.prog.abap +++ b/src/zabapgit_unit_test.prog.abap @@ -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 diff --git a/src/zabapgit_util.prog.abap b/src/zabapgit_util.prog.abap index 98700dbbe..282848d42 100644 --- a/src/zabapgit_util.prog.abap +++ b/src/zabapgit_util.prog.abap @@ -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 *----------------------------------------------------------------------*