anchor.diff:        '<h3>' && io_repo->get_url( ) && '</h3>&nbsp;&nbsp;' &&
         '<h3>' && io_repo->get_branch_name( ) && '</h3>&nbsp;&nbsp;' &&
         '<h3>' && io_repo->get_package( ) && '</h3>&nbsp;&nbsp;' &&
  -      '<br>' &&
  -      '<a href="sapevent:remove?' &&
  -      io_repo->get_key( ) &&
  -      '" class="grey">' &&
  -      'remove' &&
  -      '</a>&nbsp;' && gc_newline &&
  -      '<a href="sapevent:uninstall?' &&
  -      io_repo->get_key( ) &&
  -      '" class="grey">' &&
  -      'uninstall' &&
  -      '</a>&nbsp;' && gc_newline &&
  -      '<a href="sapevent:refresh_single?' &&
  -      io_repo->get_key( ) &&
  -      '" class="grey">' &&
  -      'refresh' &&
  -      '</a>&nbsp;' &&
  -      '<br>' &&
  -      '<br>' ##NO_TEXT.
  -
  -    TRY.
  -        lt_results = io_repo->status( ).
  -        IF io_repo->get_sha1_remote( ) <> io_repo->get_sha1_local( ).
  -          lv_status = 'pull'.                               "#EC NOTEXT
  -        ELSE.
  -          READ TABLE lt_results WITH KEY match = abap_false TRANSPORTING NO FIELDS.
  -          IF sy-subrc = 0.
  -            lv_status = 'commit'.                           "#EC NOTEXT
  +      render_repo_menu( io_repo ).
  +
  +
  +    IF go_user->is_hidden( io_repo->get_key( ) ) = abap_false.
  +      TRY.
  +          lt_results = io_repo->status( ).
  +          IF io_repo->get_sha1_remote( ) <> io_repo->get_sha1_local( ).
  +            lv_status = 'pull'.                             "#EC NOTEXT
             ELSE.
  -            lv_status = 'match'.                            "#EC NOTEXT
  +            READ TABLE lt_results WITH KEY match = abap_false TRANSPORTING NO FIELDS.
  +            IF sy-subrc = 0.
  +              lv_status = 'commit'.                         "#EC NOTEXT
  +            ELSE.
  +              lv_status = 'match'.                          "#EC NOTEXT
  +            ENDIF.
             ENDIF.
  -        ENDIF.
  -
  -        rv_html = rv_html && '<table border="1">' && gc_newline &&
  -          '<tr>'                                  && gc_newline &&
  -          '<th><u>Local object</u></th>'          && gc_newline &&
  -          '<th><u>Package</u></th>'               && gc_newline &&
  -          '<th><u>Path</u></th>'                  && gc_newline &&
  -          '<th><u>Remote file</u></th>'           && gc_newline &&
  -          '<th></th>'                             && gc_newline &&
  -          '</tr>'                                 && gc_newline.
  -
  -        LOOP AT lt_results ASSIGNING <ls_result>.
  -          lv_index = sy-tabix.
  -          lv_file_encode = file_encode( iv_key  = io_repo->get_key( )
  -                                        is_file = <ls_result> ).
  -
  -          CLEAR lv_link.
  -          IF lv_status = 'match' AND <ls_result>-filename IS INITIAL.
  -            MOVE-CORRESPONDING <ls_result> TO ls_item.
  -            lv_supported = lcl_objects=>is_supported( ls_item ).
  -            IF lv_supported = abap_true.
  -              lv_link = '<a href="sapevent:add?' && lv_file_encode && '">add</a>'.
  +
  +          rv_html = rv_html &&
  +            '<table border="1">'           && gc_newline &&
  +            '<tr>'                         && gc_newline &&
  +            '<th><u>Local object</u></th>' && gc_newline &&
  +            '<th><u>Package</u></th>'      && gc_newline &&
  +            '<th><u>Path</u></th>'         && gc_newline &&
  +            '<th><u>Remote file</u></th>'  && gc_newline &&
  +            '<th></th>'                    && gc_newline &&
  +            '</tr>'                        && gc_newline.
  +
  +          LOOP AT lt_results ASSIGNING <ls_result>.
  +            lv_index = sy-tabix.
  +            lv_file_encode = file_encode( iv_key  = io_repo->get_key( )
  +                                          is_file = <ls_result> ).
  +
  +            CLEAR lv_link.
  +            IF lv_status = 'match' AND <ls_result>-filename IS INITIAL.
  +              MOVE-CORRESPONDING <ls_result> TO ls_item.
  +              lv_supported = lcl_objects=>is_supported( ls_item ).
  +              IF lv_supported = abap_true.
  +                lv_link = '<a href="sapevent:add?' && lv_file_encode && '">add</a>'.
  +              ELSE.
  +                lv_link = |Object type <b>{ ls_item-obj_type }</b> not supported|.
  +              ENDIF.
  +            ELSEIF <ls_result>-match = abap_false.
  +              lv_link = '<a href="sapevent:diff?' && lv_file_encode && '">diff</a>'.
  +            ENDIF.
  +
  +            IF lv_span = 0.
  +              READ TABLE lt_results INTO ls_next INDEX lv_index.
  +              ASSERT sy-subrc = 0.
  +              WHILE ls_next-obj_type = <ls_result>-obj_type
  +                  AND ls_next-obj_name = <ls_result>-obj_name.
  +                lv_span  = lv_span + 1.
  +                lv_index = lv_index + 1.
  +                READ TABLE lt_results INTO ls_next INDEX lv_index.
  +                IF sy-subrc <> 0.
  +                  EXIT. " current loop.
  +                ENDIF.
  +              ENDWHILE.
  +
  +              IF <ls_result>-obj_type IS INITIAL.
  +                lv_object = '<td rowspan="' && lv_span && '" valign="top">&nbsp;</td>'.
  +
  +                lv_package = lv_object.
  +              ELSE.
  +                lv_object = '<td rowspan="' &&
  +                  lv_span &&
  +                  '" valign="top"><a href="sapevent:jump?' &&
  +                  lv_file_encode &&
  +                  '" class="plain">' &&
  +                  <ls_result>-obj_type &&
  +                  '&nbsp;' &&
  +                  <ls_result>-obj_name  &&
  +                  '</a></td>'.
  +
  +                lv_package = '<td rowspan="' &&
  +                  lv_span &&
  +                  '" valign="top">' &&
  +                  <ls_result>-package &&
  +                  '</td>'.
  +              ENDIF.
               ELSE.
  -              lv_link = |Object type <b>{ ls_item-obj_type }</b> not supported|.
  +              CLEAR lv_object.
  +              CLEAR lv_package.
               ENDIF.
  -          ELSEIF <ls_result>-match = abap_false.
  -            lv_link = '<a href="sapevent:diff?' && lv_file_encode && '">diff</a>'.
  -          ENDIF.
  -
  -          IF lv_span = 0.
  -            READ TABLE lt_results INTO ls_next INDEX lv_index.
  -            ASSERT sy-subrc = 0.
  -            WHILE ls_next-obj_type = <ls_result>-obj_type
  -                AND ls_next-obj_name = <ls_result>-obj_name.
  -              lv_span  = lv_span + 1.
  -              lv_index = lv_index + 1.
  -              READ TABLE lt_results INTO ls_next INDEX lv_index.
  -              IF sy-subrc <> 0.
  -                EXIT. " current loop.
  -              ENDIF.
  -            ENDWHILE.
  -
  -            IF <ls_result>-obj_type IS INITIAL.
  -              lv_object = '<td rowspan="' && lv_span && '" valign="top">&nbsp;</td>'.
  -
  -              lv_package = lv_object.
  -            ELSE.
  -              lv_object = '<td rowspan="' &&
  -                lv_span &&
  -                '" valign="top"><a href="sapevent:jump?' &&
  -                lv_file_encode &&
  -                '" class="plain">' &&
  -                <ls_result>-obj_type &&
  -                '&nbsp;' &&
  -                <ls_result>-obj_name  &&
  -                '</a></td>'.
  -
  -              lv_package = '<td rowspan="' &&
  -                lv_span &&
  -                '" valign="top">' &&
  -                <ls_result>-package &&
  -                '</td>'.
  -            ENDIF.
  -          ELSE.
  -            CLEAR lv_object.
  -            CLEAR lv_package.
  -          ENDIF.
  +
  +            rv_html = rv_html &&
  +              '<tr>'                                    && gc_newline &&
  +              lv_object                                 && gc_newline &&
  +              lv_package                                && gc_newline &&
  +              '<td>' && <ls_result>-path && '</td>'     && gc_newline &&
  +              '<td>' && <ls_result>-filename && '</td>' && gc_newline &&
  +              '<td>' && lv_link && '</td>'              && gc_newline &&
  +              '</tr>'                                   && gc_newline.
  +
  +            lv_span = lv_span - 1.
  +          ENDLOOP.
   
             rv_html = rv_html &&
  -            '<tr>'                                    && gc_newline &&
  -            lv_object                                 && gc_newline &&
  -            lv_package                                && gc_newline &&
  -            '<td>' && <ls_result>-path && '</td>'     && gc_newline &&
  -            '<td>' && <ls_result>-filename && '</td>' && gc_newline &&
  -            '<td>' && lv_link && '</td>'              && gc_newline &&
  -            '</tr>'                                   && gc_newline.
  -
  -          lv_span = lv_span - 1.
  -        ENDLOOP.
  -
  -        rv_html = rv_html &&
  -          '</table>' &&
  -          gc_newline.
  -
  -        CASE lv_status.
  -          WHEN 'commit'.
  -            rv_html = rv_html && '<a href="sapevent:commit?'
  -                      && io_repo->get_key( ) && '">commit</a>'.
  -          WHEN 'pull'.
  -            rv_html = rv_html && '<a href="sapevent:pull?'
  -                      && io_repo->get_key( ) && '">pull</a>'.
  -        ENDCASE.
  -
  -        lv_status = lcl_sap_package=>check( it_results = lt_results
  -                                            iv_top     = io_repo->get_package( ) ).
  -        rv_html = rv_html &&
  -          lv_status.
  -
  -      CATCH lcx_exception INTO lx_error.
  -        rv_html = rv_html && render_error( lx_error ).
  -    ENDTRY.
  +            '</table>' &&
  +            gc_newline.
  +
  +          CASE lv_status.
  +            WHEN 'commit'.
  +              rv_html = rv_html &&
  +                '<a href="sapevent:commit?' &&
  +                io_repo->get_key( ) &&
  +                '">commit</a>'.
  +            WHEN 'pull'.
  +              rv_html = rv_html &&
  +                '<a href="sapevent:pull?' &&
  +                io_repo->get_key( ) &&
  +                '">pull</a>'.
  +          ENDCASE.
  +
  +          lv_status = lcl_sap_package=>check(
  +            it_results = lt_results
  +            iv_top     = io_repo->get_package( ) ).
  +
  +          rv_html = rv_html &&
  +            lv_status.
  +
  +        CATCH lcx_exception INTO lx_error.
  +          rv_html = rv_html && render_error( lx_error ).
  +      ENDTRY.
  +    ENDIF.
   
       rv_html = rv_html &&
         '</div>' && gc_newline.
  
positive.code: 
  ENDCLASS.                    "lcl_gui IMPLEMENTATION
  
  CLASS lcl_gui_page_main DEFINITION FINAL.
  
    PUBLIC SECTION.
      INTERFACES lif_gui_page.
  
    PRIVATE SECTION.
      CLASS-METHODS render_repo_online
        IMPORTING io_repo        TYPE REF TO lcl_repo_online
        RETURNING VALUE(rv_html) TYPE string
  
negative.code: 
  ENDCLASS.
  
  CLASS lcl_gui_page_db DEFINITION FINAL.
  
    PUBLIC SECTION.
  