anchor.diff:      lo_user = lcl_app=>user( ).
       lo_user->set_username( is_fields-username ).
       lo_user->set_email( is_fields-email ).
  +
  +  ENDMETHOD.
  +
  +  METHOD lif_gui_page~on_event.
  +
  +    CASE iv_action.
  +      WHEN 'commit_post'.
  +        push( it_postdata ).
  +        "lcl_app=>repo_srv( )->free_stage( ??? ).
  +*        MESSAGE 'POST PUSHED' TYPE 'S' DISPLAY LIKE 'S'.
  +        rv_state = gc_event_state-go_back_to_bookmark.
  +      WHEN 'commit_cancel'.
  +        rv_state = gc_event_state-go_back.
  +    ENDCASE.
   
     ENDMETHOD.
   
  
positive.code:         ro_html->add_anchor( iv_txt      = <ls_item>-txt
                               iv_act      = <ls_item>-act
                               iv_opt      = <ls_item>-opt
                               iv_sapevent = <ls_item>-is_sapevent
                               iv_class    = lv_class ).
        ELSE.
          ro_html->add( <ls_item>-sub->render( iv_as_droplist_with_label = <ls_item>-txt
  
negative.code: 
    ENDMETHOD.
  
    METHOD render_stage.
  
      DATA: lt_stage TYPE lcl_stage=>ty_stage_tt.
  
      FIELD-SYMBOLS: <ls_stage> LIKE LINE OF lt_stage.
  
      CREATE OBJECT ro_html.
  
      lt_stage = mo_stage->get_all( ).
  
      ro_html->add( '<table class="stage_tab">' ).
      ro_html->add( '<tr class="title firstrow">').
      ro_html->add( '<td colspan="2">Staged files</td>').
      ro_html->add( '</tr>' ).
  
      LOOP AT lt_stage ASSIGNING <ls_stage>.
        ro_html->add( '<tr>' ).
        ro_html->add( '<td class="method">' ).
        ro_html->add( lcl_stage=>method_description( <ls_stage>-method ) ).
        ro_html->add( '</td>' ).
        ro_html->add( '<td>' ).
        ro_html->add( <ls_stage>-file-path && <ls_stage>-file-filename ).
        ro_html->add( '</td>' ).
        ro_html->add( '</tr>' ).
      ENDLOOP.
  
      ro_html->add( '</table>' ).
  
    ENDMETHOD.    "render_stage
  
    METHOD render_form.
      DATA: lo_user  TYPE REF TO lcl_persistence_user,
            lv_user  TYPE string,
            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_user  = lo_user->get_username( ).
      lv_email = lo_user->get_email( ).
  
      CREATE OBJECT ro_html.
  
      ro_html->add( '<div class="form_div">' ).
  
      ro_html->add( '<form id="commit_form" method="post" action="sapevent:commit_post">' ).
      ro_html->add( '<table>' ).
  
      ro_html->add( '<tr>' ).
      ro_html->add( '<td class="field_name">username</td>' ).
      ro_html->add( '<td>' ).
      ro_html->add( |<input name="username" type="text" size="50" value="{ lv_user }">| ).
      ro_html->add( '</td>' ).
      ro_html->add( '</tr>' ).
  
      ro_html->add( '<tr>' ).
      ro_html->add( '<td class="field_name">email</td>' ).
      ro_html->add( '<td>' ).
      ro_html->add( |<input name="email" type="text" size="50" value="{ lv_email }">| ).
      ro_html->add( '</td>' ).
      ro_html->add( '</tr>' ).
  
      ro_html->add( '<tr>' ).
      ro_html->add( '<td class="field_name">comment</td>' ).
      ro_html->add( '<td>' ).
      ro_html->add( '<input name="comment" type="text"' &&
                    ' id="commit_msg" maxlength="50" size="50">' ).
      ro_html->add( '</td>' ).
      ro_html->add( '</tr>' ).
  
      ro_html->add( '<tr>' ).
      ro_html->add( '<td class="field_name">body</td>' ).
      ro_html->add( '<td>' ).
      ro_html->add( '<textarea name="body" rows="10" cols="50"></textarea>' ).
      ro_html->add( '</td>' ).
      ro_html->add( '</tr>' ).
  
      ro_html->add( '</table>' ).
      ro_html->add( '</form>' ).
  
      ro_html->add( '</div>' ).
  
    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 = 'submitCommit();'
                       iv_txt = 'Commit'
                       iv_typ = action_type-onclick
                       iv_opt = html_opt-emphas ).
  
      lo_toolbar->add( iv_act = 'commit_cancel'
                       iv_txt = 'Cancel'
                       iv_opt = html_opt-cancel ).
  
      ro_html->add( '<div class="paddings">' ).
      ro_html->add( lo_toolbar->render( ) ).
      ro_html->add( '</div>' ).
  
    ENDMETHOD.      "render_menu
  
    METHOD lif_gui_page~render.
  
      CREATE OBJECT ro_html.
  
      ro_html->add( header( io_include_style = styles( ) ) ).
      ro_html->add( title( iv_page_title = 'COMMIT' ) ).
  
      ro_html->add( '<div class="repo">' ).
      ro_html->add( lcl_gui_page_main=>render_repo_top( mo_repo ) ).
      ro_html->add( render_menu( ) ).
      ro_html->add( render_form( ) ).
      ro_html->add( render_stage( ) ).
      ro_html->add( '</div>' ).
  
      ro_html->add( footer( io_include_script = scripts( ) ) ).
  
    ENDMETHOD.  "lif_gui_page~render
  
    METHOD styles.
      CREATE OBJECT ro_html.
  