*&---------------------------------------------------------------------*
*& Include ZABAPGIT_PAGE_COMMIT
*&---------------------------------------------------------------------*
CLASS lcl_gui_page_commit DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
PUBLIC SECTION.
CONSTANTS: BEGIN OF c_action,
commit_post TYPE string VALUE 'commit_post',
commit_cancel TYPE string VALUE 'commit_cancel',
END OF c_action.
METHODS:
constructor
IMPORTING io_repo TYPE REF TO lcl_repo_online
io_stage TYPE REF TO lcl_stage
RAISING lcx_exception,
lif_gui_page~render REDEFINITION,
lif_gui_page~on_event REDEFINITION.
PRIVATE SECTION.
DATA: mo_repo TYPE REF TO lcl_repo_online,
mo_stage TYPE REF TO lcl_stage.
METHODS:
render_menu
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper,
render_stage
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RAISING lcx_exception,
render_form
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper
RAISING lcx_exception,
scripts
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
ENDCLASS.
CLASS lcl_gui_page_commit IMPLEMENTATION.
METHOD constructor.
super->constructor( ).
mo_repo = io_repo.
mo_stage = io_stage.
ENDMETHOD.
METHOD lif_gui_page~on_event.
DATA: ls_commit TYPE lcl_services_git=>ty_commit_fields.
CASE iv_action.
WHEN c_action-commit_post.
lcl_html_action_utils=>parse_commit_request( EXPORTING it_postdata = it_postdata
IMPORTING es_fields = ls_commit ).
lcl_services_git=>commit( is_commit = ls_commit
io_repo = mo_repo
io_stage = mo_stage ).
ev_state = gc_event_state-go_back_to_bookmark.
WHEN c_action-commit_cancel.
ev_state = gc_event_state-go_back.
ENDCASE.
ENDMETHOD.
METHOD lif_gui_page~render.
CREATE OBJECT ro_html.
ro_html->add( header( ) ).
ro_html->add( title( 'COMMIT' ) ).
ro_html->add( '
' ).
ro_html->add( render_repo_top(
io_repo = mo_repo
iv_show_package = abap_false
iv_branch = mo_stage->get_branch_name( ) ) ).
ro_html->add( render_menu( ) ).
ro_html->add( render_form( ) ).
ro_html->add( render_stage( ) ).
ro_html->add( '
' ).
ro_html->add( footer( io_include_script = scripts( ) ) ).
ENDMETHOD. "lif_gui_page~render
METHOD render_stage.
DATA: lt_stage TYPE lcl_stage=>ty_stage_tt.
FIELD-SYMBOLS: LIKE LINE OF lt_stage.
CREATE OBJECT ro_html.
lt_stage = mo_stage->get_all( ).
ro_html->add( '' ).
ro_html->add( '').
ro_html->add( 'Staged files | ').
ro_html->add( '
' ).
LOOP AT lt_stage ASSIGNING .
ro_html->add( '' ).
ro_html->add( '' ).
ro_html->add( lcl_stage=>method_description( -method ) ).
ro_html->add( ' | ' ).
ro_html->add( '' ).
ro_html->add( -file-path && -file-filename ).
ro_html->add( ' | ' ).
ro_html->add( '
' ).
ENDLOOP.
ro_html->add( '
' ).
ENDMETHOD. "render_stage
METHOD render_form.
DATA: lo_user TYPE REF TO lcl_persistence_user,
lv_user TYPE string,
lv_key TYPE lcl_persistence_db=>ty_value,
lv_email TYPE string.
* see https://git-scm.com/book/ch5-2.html
* commit messages should be max 50 characters
* body should wrap at 72 characters
lo_user = lcl_app=>user( ).
lv_key = mo_repo->get_key( ).
lv_user = lo_user->get_repo_username( mo_repo->get_url( ) ).
IF lv_user IS INITIAL.
lv_user = lo_user->get_username( ).
ENDIF.
lv_email = lo_user->get_repo_email( mo_repo->get_url( ) ).
IF lv_email IS INITIAL.
lv_email = lo_user->get_email( ).
ENDIF.
CREATE OBJECT ro_html.
ro_html->add( '' ).
ENDMETHOD. "render_form
METHOD render_menu.
DATA lo_toolbar TYPE REF TO lcl_html_toolbar.
CREATE OBJECT ro_html.
CREATE OBJECT lo_toolbar.
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.
lo_toolbar->add( iv_act = 'commit_cancel'
iv_txt = 'Cancel'
iv_opt = gc_html_opt-cancel ) ##NO_TEXT.
ro_html->add( '' ).
ro_html->add( lo_toolbar->render( ) ).
ro_html->add( '
' ).
ENDMETHOD. "render_menu
METHOD scripts.
CREATE OBJECT ro_html.
_add 'setInitialFocus("commit_msg");'.
ENDMETHOD. "scripts
ENDCLASS. "lcl_gui_page_commit