mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 20:03:20 +08:00

* Vimium like link hint navigation After this commit is applied, the link hint navigation can be used. The feature can be activated and configured in the user settings. Role model is the link hint navigation in the Google Chrome plugin Vimium. * refactoring: introduce KeyNavigation prototype * refactoring: introduce LinkHints prototype
191 lines
6.1 KiB
ABAP
191 lines
6.1 KiB
ABAP
CLASS zcl_abapgit_gui_page DEFINITION PUBLIC ABSTRACT CREATE PUBLIC.
|
|
|
|
PUBLIC SECTION.
|
|
INTERFACES zif_abapgit_gui_page.
|
|
|
|
PROTECTED SECTION.
|
|
|
|
TYPES: BEGIN OF ty_control,
|
|
redirect_url TYPE string,
|
|
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(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.
|
|
|
|
PRIVATE SECTION.
|
|
|
|
METHODS html_head
|
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html.
|
|
|
|
METHODS title
|
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html.
|
|
|
|
METHODS footer
|
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html.
|
|
|
|
METHODS redirect
|
|
RETURNING VALUE(ro_html) TYPE REF TO zcl_abapgit_html.
|
|
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS ZCL_ABAPGIT_GUI_PAGE IMPLEMENTATION.
|
|
|
|
|
|
METHOD footer.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
ro_html->add( '<div id="footer">' ). "#EC NOTEXT
|
|
|
|
ro_html->add( '<img src="img/logo" alt="logo">' ). "#EC NOTEXT
|
|
ro_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
|
|
|
|
ro_html->add( '<td class="w40"></td>' ). "#EC NOTEXT
|
|
ro_html->add( |<td><span class="version">{ zif_abapgit_version=>gc_abap_version }</span></td>| ). "#EC NOTEXT
|
|
ro_html->add( '<td id="debug-output" class="w40"></td>' ). "#EC NOTEXT
|
|
|
|
ro_html->add( '</tr></table>' ). "#EC NOTEXT
|
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD. "footer
|
|
|
|
|
|
METHOD html_head.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
ro_html->add( '<head>' ). "#EC NOTEXT
|
|
|
|
ro_html->add( '<meta http-equiv="content-type" content="text/html; charset=utf-8">' ). "#EC NOTEXT
|
|
ro_html->add( '<meta http-equiv="X-UA-Compatible" content="IE=11,10,9,8" />' ). "#EC NOTEXT
|
|
|
|
ro_html->add( '<title>abapGit</title>' ). "#EC NOTEXT
|
|
ro_html->add( '<link rel="stylesheet" type="text/css" href="css/common.css">' ).
|
|
ro_html->add( '<script type="text/javascript" src="js/common.js"></script>' ). "#EC NOTEXT
|
|
|
|
ro_html->add( zcl_abapgit_gui_asset_manager=>get_webfont_link( ) ). " Web fonts
|
|
|
|
ro_html->add( '</head>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD. "html_head
|
|
|
|
|
|
METHOD redirect.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
|
|
ro_html->add( '<html>' ). "#EC NOTEXT
|
|
ro_html->add( '<head>' ). "#EC NOTEXT
|
|
ro_html->add( |<meta http-equiv="refresh" content="0; url={
|
|
ms_control-redirect_url }">| ). "#EC NOTEXT
|
|
ro_html->add( '</head>' ). "#EC NOTEXT
|
|
ro_html->add( '</html>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD.
|
|
|
|
|
|
METHOD scripts.
|
|
|
|
DATA: lo_settings TYPE REF TO zcl_abapgit_settings,
|
|
lv_link_hint_key TYPE char01,
|
|
lv_background_color TYPE string.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
lo_settings = zcl_abapgit_persist_settings=>get_instance( )->read( ).
|
|
|
|
lv_link_hint_key = lo_settings->get_link_hint_key( ).
|
|
lv_background_color = lo_settings->get_link_hint_background_color( ).
|
|
|
|
IF lo_settings->get_link_hints( ) = abap_true
|
|
AND lv_link_hint_key IS NOT INITIAL.
|
|
ro_html->add( |setLinkHints("{ lv_link_hint_key }","{ lv_background_color }");| ).
|
|
ro_html->add( |setInitialFocusWithQuerySelector('a span', true);| ).
|
|
ro_html->add( |enableArrowListNavigation();| ).
|
|
ENDIF.
|
|
|
|
ENDMETHOD. "scripts
|
|
|
|
|
|
METHOD title.
|
|
|
|
CREATE OBJECT ro_html.
|
|
|
|
ro_html->add( '<div id="header">' ). "#EC NOTEXT
|
|
ro_html->add( '<table class="w100"><tr>' ). "#EC NOTEXT
|
|
|
|
ro_html->add( |<td class="logo">{
|
|
zcl_abapgit_html=>a( iv_txt = '<img src="img/logo" alt="logo">'
|
|
iv_id = 'abapGitLogo'
|
|
iv_act = zif_abapgit_definitions=>gc_action-abapgit_home )
|
|
}</td>| ). "#EC NOTEXT
|
|
|
|
ro_html->add( |<td><span class="page_title"> ► {
|
|
ms_control-page_title
|
|
}</span></td>| ). "#EC NOTEXT
|
|
|
|
IF ms_control-page_menu IS BOUND.
|
|
ro_html->add( '<td class="right">' ). "#EC NOTEXT
|
|
ro_html->add( ms_control-page_menu->render( iv_right = abap_true ) ).
|
|
ro_html->add( '</td>' ). "#EC NOTEXT
|
|
ENDIF.
|
|
|
|
ro_html->add( '</tr></table>' ). "#EC NOTEXT
|
|
ro_html->add( '</div>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD. "render page title
|
|
|
|
|
|
METHOD zif_abapgit_gui_page~on_event.
|
|
ev_state = zif_abapgit_definitions=>gc_event_state-not_handled.
|
|
ENDMETHOD. "lif_gui_page~on_event
|
|
|
|
|
|
METHOD zif_abapgit_gui_page~render.
|
|
|
|
DATA lo_script TYPE REF TO zcl_abapgit_html.
|
|
|
|
" Redirect
|
|
IF ms_control-redirect_url IS NOT INITIAL.
|
|
ro_html = redirect( ).
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" Real page
|
|
CREATE OBJECT ro_html.
|
|
|
|
ro_html->add( '<!DOCTYPE html>' ). "#EC NOTEXT
|
|
ro_html->add( '<html>' ). "#EC NOTEXT
|
|
ro_html->add( html_head( ) ).
|
|
ro_html->add( '<body>' ). "#EC NOTEXT
|
|
ro_html->add( title( ) ).
|
|
ro_html->add( render_content( ) ).
|
|
ro_html->add( footer( ) ).
|
|
ro_html->add( '</body>' ). "#EC NOTEXT
|
|
|
|
lo_script = scripts( ).
|
|
|
|
IF lo_script IS BOUND AND lo_script->is_empty( ) = abap_false.
|
|
ro_html->add( '<script type="text/javascript">' ).
|
|
ro_html->add( lo_script ).
|
|
ro_html->add( 'confirmInitialized();' ).
|
|
ro_html->add( '</script>' ).
|
|
ENDIF.
|
|
|
|
ro_html->add( '</html>' ). "#EC NOTEXT
|
|
|
|
ENDMETHOD. " lif_gui_page~render.
|
|
ENDCLASS.
|