anchor.diff:          lv_favorite_icon = 'star/grey'.
         ENDIF.
   
  -      ro_html->add( |<tr{ lv_trclass }>| ).
  -      ro_html->add( |<td>| ).
  -      ro_html->add_a( iv_act = |{ zif_abapgit_definitions=>gc_action-repo_toggle_fav }?{ <ls_overview>-key }|
  +      io_html->add( |<tr{ lv_trclass }>| ).
  +      io_html->add( |<td>| ).
  +      io_html->add_a( iv_act = |{ zif_abapgit_definitions=>gc_action-repo_toggle_fav }?{ <ls_overview>-key }|
                         iv_txt = zcl_abapgit_html=>icon( iv_name  = lv_favorite_icon
                                                          iv_class = 'pad-sides'
                                                          iv_hint  = 'Click to toggle favorite' ) ).
  -      ro_html->add( |</td>| ).
  -      ro_html->add( |<td>{ zcl_abapgit_html=>icon( lv_type_icon )  }</td>| ).
  -
  -      ro_html->add( |<td>{ <ls_overview>-key }</td>| ).
  -      ro_html->add( |<td>{ zcl_abapgit_html=>a( iv_txt = <ls_overview>-name
  +      io_html->add( |</td>| ).
  +      io_html->add( |<td>{ zcl_abapgit_html=>icon( lv_type_icon )  }</td>| ).
  +
  +      io_html->add( |<td>{ <ls_overview>-key }</td>| ).
  +      io_html->add( |<td>{ zcl_abapgit_html=>a( iv_txt = <ls_overview>-name
                                                   iv_act = |{ gc_action-select }?{ <ls_overview>-key }| ) }</td>| ).
  -      ro_html->add( |<td>{ <ls_overview>-url }</td>| ).
  -      ro_html->add( |<td>{ <ls_overview>-package }</td>| ).
  -      ro_html->add( |<td>{ <ls_overview>-branch }</td>| ).
  -      ro_html->add( |<td>| ).
  -      ro_html->add( |</td>| ).
  -      ro_html->add( |</tr>| ).
  +      io_html->add( |<td>{ <ls_overview>-url }</td>| ).
  +      io_html->add( |<td>{ <ls_overview>-package }</td>| ).
  +      io_html->add( |<td>{ <ls_overview>-branch }</td>| ).
  +      io_html->add( |<td>{ <ls_overview>-created_by }</td>| ).
  +      io_html->add( |<td>{ <ls_overview>-created_at }</td>| ).
  +      io_html->add( |<td>| ).
  +      io_html->add( |</td>| ).
  +      io_html->add( |</tr>| ).
  +
       ENDLOOP.
   
  -    ro_html->add( |</tbody>| ).
  -    ro_html->add( |</table>| ).
  -    ro_html->add( |</div>| ).
  -
  -  ENDMETHOD.            "render_content
  -
  -
  -  METHOD render_text_input.
  -
  -    DATA lv_attrs TYPE string.
  -
  -    CREATE OBJECT ro_html.
  -
  -    IF iv_value IS NOT INITIAL.
  -      lv_attrs = | value="{ iv_value }"|.
  -    ENDIF.
  -
  -    IF iv_max_length IS NOT INITIAL.
  -      lv_attrs = | maxlength="{ iv_max_length }"|.
  -    ENDIF.
  -
  -    ro_html->add( |<label for="{ iv_name }">{ iv_label }</label>| ).
  -    ro_html->add( |<input id="{ iv_name }" name="{ iv_name }" type="text"{ lv_attrs }>| ).
  -
  -  ENDMETHOD.  " render_text_input
  -
  -
  -  METHOD zif_abapgit_gui_page~on_event.
  -
  -    DATA: lv_key  TYPE zif_abapgit_persistence=>ty_value.
  -
  -    CASE iv_action.
  -      WHEN gc_action-select.
  -
  -        lv_key = iv_getdata.
  -
  -        zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_key ).
  -
  -        TRY.
  -            zcl_abapgit_repo_srv=>get_instance( )->get( lv_key )->refresh( ).
  -          CATCH zcx_abapgit_exception ##NO_HANDLER.
  -        ENDTRY.
  -
  -        ev_state = zif_abapgit_definitions=>gc_event_state-go_back.
  -
  -      WHEN gc_action-change_order_by.
  -
  -        parse_change_order_by( it_postdata ).
  -        ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  -
  -      WHEN gc_action-direction.
  -
  -        parse_direction( it_postdata ).
  -        ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  -
  -      WHEN gc_action-apply_filter.
  -
  -        parse_filter( it_postdata ).
  -        ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  -
  -    ENDCASE.
  -
  -  ENDMETHOD.
  +  ENDMETHOD.
  +
  +
  +  METHOD render_order_by.
  +
  +    io_html->add( |Order by: <select name="order_by" onchange="onOrderByChange(this)">| ).
  +
  +    add_order_by_option( iv_option = |TYPE|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |KEY|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |NAME|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |URL|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |PACKAGE|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |BRANCH|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |CREATED_BY|
  +                         io_html   = io_html ).
  +
  +    add_order_by_option( iv_option = |CREATED_AT|
  +                         io_html   = io_html ).
  +
  +    io_html->add( |</select>| ).
  +
  +  ENDMETHOD.
  +
  +
  +  METHOD render_order_by_direction.
  +
  +    io_html->add( |<select name="direction" onchange="onDirectionChange(this)">| ).
  +
  +    add_direction_option( iv_option   = |ASCENDING|
  +                          iv_selected = mv_order_descending
  +                          io_html     = io_html ).
  +
  +    add_direction_option( iv_option   = |DESCENDING|
  +                          iv_selected = mv_order_descending
  +                          io_html     = io_html ).
  +
  +    io_html->add( |</select>| ).
  +
  +  ENDMETHOD.
  +
  +
  +  METHOD render_header_bar.
  +
  +    io_html->add( |<div class="row">| ).
  +
  +    render_order_by( io_html ).
  +    render_order_by_direction( io_html ).
  +
  +    io_html->add( render_text_input( iv_name  = |filter|
  +                                     iv_label = |Filter: |
  +                                     iv_value = mv_filter ) ).
  +
  +    io_html->add( |<input type="submit" class="hidden-submit">| ).
  +
  +    io_html->add( |</div>| ).
  +
  +    io_html->add( |</form>| ).
  +    io_html->add( |</div>| ).
  +
  +  ENDMETHOD.
  +
   ENDCLASS.
  
positive.code: 
    METHOD render_content.
  
      DATA: lv_trclass          TYPE string,
            lo_persistence_repo TYPE REF TO zcl_abapgit_persistence_repo,
            lt_overview         TYPE tty_overview,
            lv_type_icon        TYPE string,
            lv_favorite_icon    TYPE string.
  
      FIELD-SYMBOLS: <ls_overview> LIKE LINE OF lt_overview.
  
      CREATE OBJECT lo_persistence_repo.
  
  
negative.code:     ro_html->add( |<form id="commit_form" class="grey70"|
                 && | method="post" action="sapevent:{ gc_action-apply_filter }">| ).
  
      render_header_bar( ro_html ).
  
      render_table( io_html     = ro_html
                    it_overview = lt_overview ).
  
      ro_html->add( |</div>| ).
  
    ENDMETHOD.            "render_content
  
  
    METHOD render_text_input.
  
      DATA lv_attrs TYPE string.
  
      CREATE OBJECT ro_html.
  
      IF iv_value IS NOT INITIAL.
        lv_attrs = | value="{ iv_value }"|.
      ENDIF.
  
      IF iv_max_length IS NOT INITIAL.
        lv_attrs = | maxlength="{ iv_max_length }"|.
      ENDIF.
  
      ro_html->add( |<label for="{ iv_name }">{ iv_label }</label>| ).
      ro_html->add( |<input id="{ iv_name }" name="{ iv_name }" type="text"{ lv_attrs }>| ).
  
    ENDMETHOD.  " render_text_input
  
  
    METHOD zif_abapgit_gui_page~on_event.
  
      DATA: lv_key  TYPE zif_abapgit_persistence=>ty_value.
  
      CASE iv_action.
        WHEN gc_action-select.
  
          lv_key = iv_getdata.
  
          zcl_abapgit_persistence_user=>get_instance( )->set_repo_show( lv_key ).
  
          TRY.
              zcl_abapgit_repo_srv=>get_instance( )->get( lv_key )->refresh( ).
            CATCH zcx_abapgit_exception ##NO_HANDLER.
          ENDTRY.
  
          ev_state = zif_abapgit_definitions=>gc_event_state-go_back.
  
        WHEN gc_action-change_order_by.
  
          parse_change_order_by( it_postdata ).
          ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  
        WHEN gc_action-direction.
  
          parse_direction( it_postdata ).
          ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  
        WHEN gc_action-apply_filter.
  
          parse_filter( it_postdata ).
          ev_state = zif_abapgit_definitions=>gc_event_state-re_render.
  
      ENDCASE.
  
    ENDMETHOD.
  
    METHOD render_table_header.
  
      io_html->add( |<thead>| ).
      io_html->add( |<tr>| ).
      io_html->add( |<th>Favorite</th>| ).
      io_html->add( |<th>Type</th>| ).
      io_html->add( |<th>Key</th>| ).
      io_html->add( |<th>Name</th>| ).
      io_html->add( |<th>Url</th>| ).
      io_html->add( |<th>Package</th>| ).
      io_html->add( |<th>Branch name</th>| ).
      io_html->add( |<th>Creator</th>| ).
      io_html->add( |<th>Created at</th>| ).
      io_html->add( |<th></th>| ).
      io_html->add( '</tr>' ).
      io_html->add( '</thead>' ).
      io_html->add( '<tbody>' ).
  
    ENDMETHOD.
  
  
    METHOD render_table.
  
      io_html->add( |<div class="db_list">| ).
      io_html->add( |<table class="db_tab">| ).
  
      render_table_header( io_html ).
      render_table_body( io_html     = io_html
                         it_overview = it_overview  ).
  
      io_html->add( |</tbody>| ).
      io_html->add( |</table>| ).
  
    ENDMETHOD.
  
  
    METHOD render_table_body.
  
      DATA: lv_trclass       TYPE string,
            lv_type_icon     TYPE string,
            lv_favorite_icon TYPE string.
  
      FIELD-SYMBOLS: <ls_overview> LIKE LINE OF it_overview.
  
      LOOP AT it_overview ASSIGNING <ls_overview>.
  
        CLEAR lv_trclass.
        IF sy-tabix = 1.
          lv_trclass = ' class="firstrow"' ##NO_TEXT.
  