mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 20:32:26 +08:00

* Add main menu, toggle favorites * Make abapgit logo go to overview * Remove favorite repo links * Fix remember filter * Separator between filters * Remove unused code * Repo overview to main page * Fix errors * Fix naming * Downport js * Add separator * remove unrelated changes * Fix spacing * Add package link * Fix orderby dumping * Only show tutorial with no favorites Still have to do something about empty table * Move abapgit installation info to debug info * Improve tutorial, resolves #3497 * Add branch switch link * Reduce line length * Revert temporary hack * Working version of removing logo * No longer show tutorial in repositories * Code cleanup * More cleanup, rename tutorial to page * Fix * Force order by favorite * Add checkmark icons * View repo to page, rework menu * Fix build * Return logo * Fix hotkeys on repo page, rename to page * Fix show last repo, cleanup * Abaplint * Rollback js reformat * Fix tutorial title, hotkeys * Try resolve strange situation with PR Co-authored-by: Lars Hvam <larshp@hotmail.com>
387 lines
11 KiB
ABAP
387 lines
11 KiB
ABAP
CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT
|
|
INHERITING FROM zcl_abapgit_gui_component
|
|
CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES:
|
|
zif_abapgit_gui_renderable,
|
|
zif_abapgit_gui_event_handler,
|
|
zif_abapgit_gui_error_handler.
|
|
|
|
METHODS:
|
|
constructor RAISING zcx_abapgit_exception.
|
|
|
|
PROTECTED SECTION.
|
|
|
|
TYPES:
|
|
BEGIN OF ty_control,
|
|
page_title TYPE string,
|
|
page_menu TYPE REF TO zcl_abapgit_html_toolbar,
|
|
END OF ty_control .
|
|
|
|
DATA ms_control TYPE ty_control .
|
|
|
|
METHODS render_content
|
|
ABSTRACT
|
|
RETURNING
|
|
VALUE(ri_html) TYPE REF TO zif_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception .
|
|
PRIVATE SECTION.
|
|
DATA:
|
|
mo_settings TYPE REF TO zcl_abapgit_settings,
|
|
mx_error TYPE REF TO zcx_abapgit_exception,
|
|
mo_exception_viewer TYPE REF TO zcl_abapgit_exception_viewer.
|
|
|
|
METHODS render_deferred_parts
|
|
IMPORTING
|
|
ii_html TYPE REF TO zif_abapgit_html
|
|
iv_part_category TYPE string
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS html_head
|
|
RETURNING VALUE(ri_html) TYPE REF TO zif_abapgit_html.
|
|
|
|
METHODS title
|
|
RETURNING VALUE(ri_html) TYPE REF TO zif_abapgit_html.
|
|
|
|
METHODS footer
|
|
RETURNING VALUE(ri_html) TYPE REF TO zif_abapgit_html.
|
|
|
|
METHODS render_link_hints
|
|
IMPORTING
|
|
ii_html TYPE REF TO zif_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS render_command_palettes
|
|
IMPORTING
|
|
ii_html TYPE REF TO zif_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS render_hotkey_overview
|
|
RETURNING
|
|
VALUE(ro_html) TYPE REF TO zif_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS call_browser
|
|
IMPORTING
|
|
iv_url TYPE csequence
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS render_error_message_box
|
|
RETURNING
|
|
VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
METHODS scripts
|
|
RETURNING
|
|
VALUE(ro_html) TYPE REF TO zcl_abapgit_html
|
|
RAISING
|
|
zcx_abapgit_exception.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_gui_page IMPLEMENTATION.
|
|
|
|
|
|
METHOD call_browser.
|
|
|
|
cl_gui_frontend_services=>execute(
|
|
EXPORTING
|
|
document = |{ iv_url }|
|
|
EXCEPTIONS
|
|
cntl_error = 1
|
|
error_no_gui = 2
|
|
bad_parameter = 3
|
|
file_not_found = 4
|
|
path_not_found = 5
|
|
file_extension_unknown = 6
|
|
error_execute_failed = 7
|
|
synchronous_failed = 8
|
|
not_supported_by_gui = 9
|
|
OTHERS = 10 ).
|
|
|
|
IF sy-subrc <> 0.
|
|
zcx_abapgit_exception=>raise_t100( ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD constructor.
|
|
|
|
super->constructor( ).
|
|
mo_settings = zcl_abapgit_persist_settings=>get_instance( )->read( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD footer.
|
|
|
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
|
|
|
ri_html->add( '<div id="footer">' ). "#EC NOTEXT
|
|
|
|
ri_html->add( zcl_abapgit_html=>a( iv_txt = '<img src="img/logo" alt="logo">'
|
|
iv_id = 'abapGitLogo'
|
|
iv_act = zif_abapgit_definitions=>c_action-abapgit_home ) ).
|
|
ri_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
|
|
|
|
ri_html->add( '<td class="w40"></td>' ). "#EC NOTEXT
|
|
ri_html->add( |<td><span class="version">{ zif_abapgit_version=>gc_abap_version }</span></td>| ). "#EC NOTEXT
|
|
ri_html->add( '<td id="debug-output" class="w40"></td>' ). "#EC NOTEXT
|
|
|
|
ri_html->add( '</tr></table>' ). "#EC NOTEXT
|
|
ri_html->add( '</div>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD html_head.
|
|
|
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
|
|
|
ri_html->add( '<head>' ). "#EC NOTEXT
|
|
|
|
ri_html->add( '<meta http-equiv="content-type" content="text/html; charset=utf-8">' ). "#EC NOTEXT
|
|
ri_html->add( '<meta http-equiv="X-UA-Compatible" content="IE=11,10,9,8" />' ). "#EC NOTEXT
|
|
|
|
ri_html->add( '<title>abapGit</title>' ). "#EC NOTEXT
|
|
ri_html->add( '<link rel="stylesheet" type="text/css" href="css/common.css">' ).
|
|
ri_html->add( '<link rel="stylesheet" type="text/css" href="css/ag-icons.css">' ).
|
|
|
|
" Themes
|
|
ri_html->add( '<link rel="stylesheet" type="text/css" href="css/theme-default.css">' ). " Theme basis
|
|
CASE mo_settings->get_ui_theme( ).
|
|
WHEN zcl_abapgit_settings=>c_ui_theme-dark.
|
|
ri_html->add( '<link rel="stylesheet" type="text/css" href="css/theme-dark.css">' ).
|
|
WHEN zcl_abapgit_settings=>c_ui_theme-belize.
|
|
ri_html->add( '<link rel="stylesheet" type="text/css" href="css/theme-belize-blue.css">' ).
|
|
ENDCASE.
|
|
|
|
ri_html->add( '<script type="text/javascript" src="js/common.js"></script>' ). "#EC NOTEXT
|
|
|
|
CASE mo_settings->get_icon_scaling( ). " Enforce icon scaling
|
|
WHEN mo_settings->c_icon_scaling-large.
|
|
ri_html->add( '<style>.icon { font-size: 200% }</style>' ).
|
|
WHEN mo_settings->c_icon_scaling-small.
|
|
ri_html->add( '<style>.icon.large { font-size: inherit }</style>' ).
|
|
ENDCASE.
|
|
|
|
ri_html->add( '</head>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_command_palettes.
|
|
|
|
ii_html->add( 'var gGoRepoPalette = new CommandPalette(enumerateTocAllRepos, {' ).
|
|
ii_html->add( ' toggleKey: "F2",' ).
|
|
ii_html->add( ' hotkeyDescription: "Go to repo ..."' ).
|
|
ii_html->add( '});' ).
|
|
|
|
ii_html->add( 'var gCommandPalette = new CommandPalette(enumerateToolbarActions, {' ).
|
|
ii_html->add( ' toggleKey: "F1",' ).
|
|
ii_html->add( ' hotkeyDescription: "Command ..."' ).
|
|
ii_html->add( '});' ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_deferred_parts.
|
|
|
|
DATA lt_parts TYPE zif_abapgit_html=>tty_table_of.
|
|
DATA li_part LIKE LINE OF lt_parts.
|
|
|
|
lt_parts = gui_services( )->get_html_parts( )->get_parts( iv_part_category ).
|
|
LOOP AT lt_parts INTO li_part.
|
|
ii_html->add( li_part ).
|
|
ENDLOOP.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_error_message_box.
|
|
|
|
" You should remember that the we have to instantiate ro_html even
|
|
" it's overwritten further down. Because ADD checks whether it's
|
|
" bound.
|
|
CREATE OBJECT ro_html.
|
|
|
|
" You should remember that we render the message panel only
|
|
" if we have an error.
|
|
IF mx_error IS NOT BOUND.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
ro_html = zcl_abapgit_gui_chunk_lib=>render_error_message_box( mx_error ).
|
|
|
|
" You should remember that the exception viewer dispatches the events of
|
|
" error message panel
|
|
CREATE OBJECT mo_exception_viewer
|
|
EXPORTING
|
|
ix_error = mx_error.
|
|
|
|
" You should remember that we render the message panel just once
|
|
" for each exception/error text.
|
|
CLEAR:
|
|
mx_error.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_hotkey_overview.
|
|
|
|
DATA lo_hotkeys_component TYPE REF TO zif_abapgit_gui_renderable.
|
|
|
|
lo_hotkeys_component ?= gui_services( )->get_hotkeys_ctl( ). " Mmmm ...
|
|
ro_html = lo_hotkeys_component->render( ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD render_link_hints.
|
|
|
|
DATA: lv_link_hint_key TYPE char01.
|
|
|
|
lv_link_hint_key = mo_settings->get_link_hint_key( ).
|
|
|
|
IF mo_settings->get_link_hints_enabled( ) = abap_true AND lv_link_hint_key IS NOT INITIAL.
|
|
|
|
ii_html->add( |activateLinkHints("{ lv_link_hint_key }");| ).
|
|
ii_html->add( |setInitialFocusWithQuerySelector('a span', true);| ).
|
|
ii_html->add( |enableArrowListNavigation();| ).
|
|
|
|
ENDIF.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD scripts.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
render_deferred_parts(
|
|
ii_html = ro_html
|
|
iv_part_category = c_html_parts-scripts ).
|
|
|
|
render_link_hints( ro_html ).
|
|
render_command_palettes( ro_html ).
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD title.
|
|
|
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
|
|
|
ri_html->add( '<div id="header">' ). "#EC NOTEXT
|
|
ri_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
|
|
|
|
ri_html->add( |<td class="logo"><img src="img/logo" alt="logo"></td>| ). "#EC NOTEXT
|
|
|
|
ri_html->add( |<td><span class="page_title"> ► { ms_control-page_title }</span></td>| ). "#EC NOTEXT
|
|
|
|
IF ms_control-page_menu IS BOUND.
|
|
ri_html->add( '<td class="right">' ). "#EC NOTEXT
|
|
ri_html->add( ms_control-page_menu->render( iv_right = abap_true ) ).
|
|
ri_html->add( '</td>' ). "#EC NOTEXT
|
|
ENDIF.
|
|
|
|
ri_html->add( '</tr></table>' ). "#EC NOTEXT
|
|
ri_html->add( '</div>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_error_handler~handle_error.
|
|
|
|
mx_error = ix_error.
|
|
rv_handled = abap_true.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_event_handler~on_event.
|
|
|
|
CASE iv_action.
|
|
WHEN zif_abapgit_definitions=>c_action-url.
|
|
|
|
call_browser( iv_getdata ).
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
WHEN zif_abapgit_definitions=>c_action-goto_source.
|
|
|
|
IF mo_exception_viewer IS BOUND.
|
|
mo_exception_viewer->goto_source( ).
|
|
ENDIF.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
WHEN zif_abapgit_definitions=>c_action-show_callstack.
|
|
|
|
IF mo_exception_viewer IS BOUND.
|
|
mo_exception_viewer->show_callstack( ).
|
|
ENDIF.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
WHEN zif_abapgit_definitions=>c_action-goto_message.
|
|
|
|
IF mo_exception_viewer IS BOUND.
|
|
mo_exception_viewer->goto_message( ).
|
|
ENDIF.
|
|
ev_state = zcl_abapgit_gui=>c_event_state-no_more_act.
|
|
|
|
ENDCASE.
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD zif_abapgit_gui_renderable~render.
|
|
|
|
DATA: li_script TYPE REF TO zif_abapgit_html.
|
|
|
|
gui_services( )->register_event_handler( me ).
|
|
|
|
" Real page
|
|
CREATE OBJECT ri_html TYPE zcl_abapgit_html.
|
|
|
|
ri_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
|
|
ri_html->add( '<html>' ). "#EC NOTEXT
|
|
ri_html->add( html_head( ) ).
|
|
ri_html->add( '<body>' ). "#EC NOTEXT
|
|
ri_html->add( title( ) ).
|
|
|
|
ri_html->add( render_content( ) ). " TODO -> render child
|
|
|
|
ri_html->add( render_hotkey_overview( ) ).
|
|
ri_html->add( render_error_message_box( ) ).
|
|
|
|
render_deferred_parts(
|
|
ii_html = ri_html
|
|
iv_part_category = c_html_parts-hidden_forms ).
|
|
|
|
ri_html->add( footer( ) ).
|
|
ri_html->add( '</body>' ). "#EC NOTEXT
|
|
|
|
li_script = scripts( ).
|
|
|
|
IF li_script IS BOUND AND li_script->is_empty( ) = abap_false.
|
|
ri_html->add( '<script type="text/javascript">' ).
|
|
ri_html->add( li_script ).
|
|
ri_html->add( 'confirmInitialized();' ).
|
|
ri_html->add( '</script>' ).
|
|
ENDIF.
|
|
|
|
ri_html->add( '</html>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|