Files @ dd0ee9119aa9
Branch filter:

Location: kallithea/rhodecode/templates/index_base.html - annotation

Marcin Kuzminski
recursive mode of setting permission should skip private repositories, they should remain private, it's proper thing to do !
f91d3f9b7230
fc286aed92fe
fc286aed92fe
fc286aed92fe
aa805ee6ee09
f91d3f9b7230
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
5242b1619603
663f4f26776a
5242b1619603
663f4f26776a
a8c9c0094ddf
f91d3f9b7230
f91d3f9b7230
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
f91d3f9b7230
defcf245f3e9
defcf245f3e9
fc286aed92fe
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
a221706dab50
f1f01e951008
a221706dab50
a221706dab50
a221706dab50
87f0800abc7b
87f0800abc7b
87f0800abc7b
fc286aed92fe
defcf245f3e9
defcf245f3e9
defcf245f3e9
0cb48c083c6b
fc286aed92fe
fc286aed92fe
7a46d67c263c
7a46d67c263c
7a46d67c263c
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
defcf245f3e9
7a46d67c263c
fc286aed92fe
fc286aed92fe
241a5167c4e0
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
f664d3b57fa4
f664d3b57fa4
9edd6ac132f0
ac0c4e600426
9edd6ac132f0
241a5167c4e0
9edd6ac132f0
9edd6ac132f0
62e493c7f436
fc286aed92fe
fc286aed92fe
fc286aed92fe
a221706dab50
a221706dab50
a221706dab50
fc286aed92fe
a221706dab50
fc286aed92fe
9edd6ac132f0
fc286aed92fe
d439d408b415
fc286aed92fe
9edd6ac132f0
9edd6ac132f0
f91d3f9b7230
9edd6ac132f0
9edd6ac132f0
fc286aed92fe
fc286aed92fe
62e493c7f436
f91d3f9b7230
fc286aed92fe
62e493c7f436
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
defcf245f3e9
fc286aed92fe
62e493c7f436
b1e1dffd595c
3bb99e3e0e44
9edd6ac132f0
defcf245f3e9
defcf245f3e9
62e493c7f436
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
f91d3f9b7230
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
62e493c7f436
62e493c7f436
62e493c7f436
0cb48c083c6b
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
0cb48c083c6b
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
f91d3f9b7230
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
b4f401524060
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
f91d3f9b7230
defcf245f3e9
f91d3f9b7230
defcf245f3e9
defcf245f3e9
defcf245f3e9
62e493c7f436
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
b4f401524060
defcf245f3e9
b9539c4df92f
b9539c4df92f
b9539c4df92f
f91d3f9b7230
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
9edd6ac132f0
0226b6d6b2b5
0226b6d6b2b5
2fb94c52e20e
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
f91d3f9b7230
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
d439d408b415
0226b6d6b2b5
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
d439d408b415
d439d408b415
0226b6d6b2b5
68f9c216377d
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
a797ada9d2ad
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
0226b6d6b2b5
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
0226b6d6b2b5
0226b6d6b2b5
0226b6d6b2b5
0226b6d6b2b5
0226b6d6b2b5
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
<%page args="parent" />
    <div class="box">
        <!-- box / title -->
        <div class="title">
            <h5>
            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/> ${parent.breadcrumbs()} <span id="repo_count">0</span> ${_('repositories')}
            </h5>
            %if c.rhodecode_user.username != 'default':
                %if h.HasPermissionAny('hg.admin','hg.create.repository')():
                <ul class="links">
                  <li>
                  %if c.group:
                    <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository',parent_group=c.group.group_id))}</span>
                  %else:
                    <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository'))}</span>
                  %endif
                  </li>
                </ul>
                %endif
            %endif
        </div>
        <!-- end box / title -->
        <div class="table">
           % if c.groups:
            <div id='groups_list_wrap' class="yui-skin-sam">
              <table id="groups_list">
                  <thead>
                      <tr>
                          <th class="left"><a href="#">${_('Group name')}</a></th>
                          <th class="left"><a href="#">${_('Description')}</a></th>
                          ##<th class="left"><a href="#">${_('Number of repositories')}</a></th>
                      </tr>
                  </thead>

                  ## REPO GROUPS
                  % for gr in c.groups:
                    <tr>
                        <td>
                            <div style="white-space: nowrap">
                            <img class="icon" alt="${_('Repositories group')}" src="${h.url('/images/icons/database_link.png')}"/>
                            ${h.link_to(gr.name,url('repos_group_home',group_name=gr.group_name))}
                            </div>
                        </td>
                        %if c.visual.stylify_metatags:
                            <td>${h.urlify_text(h.desc_stylize(gr.group_description))}</td>
                        %else:
                            <td>${gr.group_description}</td>
                        %endif
                        ## this is commented out since for multi nested repos can be HEAVY!
                        ## in number of executed queries during traversing uncomment at will
                        ##<td><b>${gr.repositories_recursive_count}</b></td>
                    </tr>
                  % endfor
              </table>
            </div>
            <div id="group-user-paginator" style="padding: 0px 0px 0px 0px"></div>
            <div style="height: 20px"></div>
            % endif
            <div id="welcome" style="display:none;text-align:center">
                <h1><a href="${h.url('home')}">${c.rhodecode_name} ${c.rhodecode_version}</a></h1>
            </div>
             <%cnt=0%>
             <%namespace name="dt" file="/data_table/_dt_elements.html"/>
            % if c.visual.lightweight_dashboard is False:
              ## old full detailed version
            <div id='repos_list_wrap' class="yui-skin-sam">
            <table id="repos_list">
            <thead>
                <tr>
                    <th class="left"></th>
                    <th class="left">${_('Name')}</th>
                    <th class="left">${_('Description')}</th>
                    <th class="left">${_('Last change')}</th>
                    <th class="left">${_('Tip')}</th>
                    <th class="left">${_('Owner')}</th>
                    <th class="left">${_('RSS')}</th>
                    <th class="left">${_('Atom')}</th>
                </tr>
            </thead>
            <tbody>
            %for cnt,repo in enumerate(c.repos_list):
                <tr class="parity${(cnt+1)%2}">
                    ##QUICK MENU
                    <td class="quick_repo_menu">
                      ${dt.quick_menu(repo['name'])}
                    </td>
                    ##REPO NAME AND ICONS
                    <td class="reponame">
                      ${dt.repo_name(repo['name'],repo['dbrepo']['repo_type'],repo['dbrepo']['private'],h.AttributeDict(repo['dbrepo_fork']),pageargs.get('short_repo_names'))}
                    </td>
                    ##DESCRIPTION
                    <td><span class="tooltip" title="${h.tooltip(repo['description'])}">
                       %if c.visual.stylify_metatags:
                       ${h.urlify_text(h.desc_stylize(h.truncate(repo['description'],60)))}</span>
                       %else:
                       ${h.truncate(repo['description'],60)}</span>
                       %endif
                    </td>
                    ##LAST CHANGE DATE
                    <td>
                      ${dt.last_change(repo['last_change'])}
                    </td>
                    ##LAST REVISION
                    <td>
                        ${dt.revision(repo['name'],repo['rev'],repo['tip'],repo['author'],repo['last_msg'])}
                    </td>
                    ##
                    <td title="${repo['contact']}">${h.person(repo['contact'])}</td>
                    <td>
                      ${dt.rss(repo['name'])}
                    </td>
                    <td>
                      ${dt.atom(repo['name'])}
                    </td>
                </tr>
            %endfor
            </tbody>
            </table>
            </div>
            % else:
              ## lightweight version
                <div class="yui-skin-sam" id="repos_list_wrap"></div>
                <div id="user-paginator" style="padding: 0px 0px 0px 0px"></div>
            % endif
        </div>
    </div>
    % if c.visual.lightweight_dashboard is False:
    <script>
      YUD.get('repo_count').innerHTML = ${cnt+1 if cnt else 0};

      // groups table sorting
      var myColumnDefs = [
          {key:"name",label:"${_('Group name')}",sortable:true,
              sortOptions: { sortFunction: groupNameSort }},
          {key:"desc",label:"${_('Description')}",sortable:true},
      ];

      var myDataSource = new YAHOO.util.DataSource(YUD.get("groups_list"));

      myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;
      myDataSource.responseSchema = {
          fields: [
              {key:"name"},
              {key:"desc"},
          ]
      };

      var myDataTable = new YAHOO.widget.DataTable("groups_list_wrap", myColumnDefs, myDataSource,{
          sortedBy:{key:"name",dir:"asc"},
          paginator: new YAHOO.widget.Paginator({
              rowsPerPage: 50,
              alwaysVisible: false,
              template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
              pageLinks: 5,
              containerClass: 'pagination-wh',
              currentPageClass: 'pager_curpage',
              pageLinkClass: 'pager_link',
              nextPageLinkLabel: '&gt;',
              previousPageLinkLabel: '&lt;',
              firstPageLinkLabel: '&lt;&lt;',
              lastPageLinkLabel: '&gt;&gt;',
              containers:['group-user-paginator']
          }),
          MSG_SORTASC:"${_('Click to sort ascending')}",
          MSG_SORTDESC:"${_('Click to sort descending')}"
      });

      // main table sorting
      var myColumnDefs = [
          {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
          {key:"name",label:"${_('Name')}",sortable:true,
              sortOptions: { sortFunction: nameSort }},
          {key:"desc",label:"${_('Description')}",sortable:true},
          {key:"last_change",label:"${_('Last Change')}",sortable:true,
              sortOptions: { sortFunction: ageSort }},
          {key:"tip",label:"${_('Tip')}",sortable:true,
              sortOptions: { sortFunction: revisionSort }},
          {key:"owner",label:"${_('Owner')}",sortable:true},
          {key:"rss",label:"",sortable:false},
          {key:"atom",label:"",sortable:false},
      ];

      var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list"));

      myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;

      myDataSource.responseSchema = {
          fields: [
              {key:"menu"},
              //{key:"raw_name"},
              {key:"name"},
              {key:"desc"},
              {key:"last_change"},
              {key:"tip"},
              {key:"owner"},
              {key:"rss"},
              {key:"atom"},
          ]
      };

      var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,
              {
               sortedBy:{key:"name",dir:"asc"},
               MSG_SORTASC:"${_('Click to sort ascending')}",
               MSG_SORTDESC:"${_('Click to sort descending')}",
               MSG_EMPTY:"${_('No records found.')}",
               MSG_ERROR:"${_('Data error.')}",
               MSG_LOADING:"${_('Loading...')}",
              }
      );
      myDataTable.subscribe('postRenderEvent',function(oArgs) {
          tooltip_activate();
          quick_repo_menu();
          var func = function(node){
              return node.parentNode.parentNode.parentNode.parentNode;
          }
          q_filter('q_filter',YUQ('div.table tr td a.repo_name'),func);
      });

    </script>
    % else:
      <script>
        var data = ${c.data|n};
        var myDataSource = new YAHOO.util.DataSource(data);
        myDataSource.responseType = YAHOO.util.DataSource.TYPE_JSON;

        myDataSource.responseSchema = {
            resultsList: "records",
            fields: [
               {key:"menu"},
               {key:"raw_name"},
               {key:"name"},
               {key:"desc"},
               {key:"last_change"},
               {key:"last_changeset"},
               {key:"owner"},
               {key:"rss"},
               {key:"atom"},
            ]
         };
        myDataSource.doBeforeCallback = function(req,raw,res,cb) {
            // This is the filter function
            var data     = res.results || [],
                filtered = [],
                i,l;

            if (req) {
                req = req.toLowerCase();
                for (i = 0; i<data.length; i++) {
                    var pos = data[i].raw_name.toLowerCase().indexOf(req)
                    if (pos != -1) {
                        filtered.push(data[i]);
                    }
                }
                res.results = filtered;
            }
            YUD.get('repo_count').innerHTML = res.results.length;
            return res;
        }

        // main table sorting
        var myColumnDefs = [
            {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
            {key:"name",label:"${_('Name')}",sortable:true,
                sortOptions: { sortFunction: nameSort }},
            {key:"desc",label:"${_('Description')}",sortable:true},
            {key:"last_change",label:"${_('Last Change')}",sortable:true,
                sortOptions: { sortFunction: ageSort }},
            {key:"last_changeset",label:"${_('Tip')}",sortable:true,
                sortOptions: { sortFunction: revisionSort }},
            {key:"owner",label:"${_('Owner')}",sortable:true},
            {key:"rss",label:"",sortable:false},
            {key:"atom",label:"",sortable:false},
        ];

        var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,{
          sortedBy:{key:"name",dir:"asc"},
          paginator: new YAHOO.widget.Paginator({
              rowsPerPage: ${c.visual.lightweight_dashboard_items},
              alwaysVisible: false,
              template : "{PreviousPageLink} {FirstPageLink} {PageLinks} {LastPageLink} {NextPageLink}",
              pageLinks: 5,
              containerClass: 'pagination-wh',
              currentPageClass: 'pager_curpage',
              pageLinkClass: 'pager_link',
              nextPageLinkLabel: '&gt;',
              previousPageLinkLabel: '&lt;',
              firstPageLinkLabel: '&lt;&lt;',
              lastPageLinkLabel: '&gt;&gt;',
              containers:['user-paginator']
          }),

          MSG_SORTASC:"${_('Click to sort ascending')}",
          MSG_SORTDESC:"${_('Click to sort descending')}",
          MSG_EMPTY:"${_('No records found.')}",
          MSG_ERROR:"${_('Data error.')}",
          MSG_LOADING:"${_('Loading...')}",
        }
        );
        myDataTable.subscribe('postRenderEvent',function(oArgs) {
            tooltip_activate();
            quick_repo_menu();
        });

        var filterTimeout = null;

        updateFilter  = function () {
            // Reset timeout
            filterTimeout = null;

            // Reset sort
            var state = myDataTable.getState();
            state.sortedBy = {key:'name', dir:YAHOO.widget.DataTable.CLASS_ASC};

            // Get filtered data
            myDataSource.sendRequest(YUD.get('q_filter').value,{
                success : myDataTable.onDataReturnInitializeTable,
                failure : myDataTable.onDataReturnInitializeTable,
                scope   : myDataTable,
                argument: state
            });

        };
        YUE.on('q_filter','click',function(){
            if(!YUD.hasClass('q_filter', 'loaded')){
                YUD.get('q_filter').value = '';
                //TODO: load here full list later to do search within groups
                YUD.addClass('q_filter', 'loaded');
            }
         });

        YUE.on('q_filter','keyup',function (e) {
            clearTimeout(filterTimeout);
            filterTimeout = setTimeout(updateFilter,600);
        });
      </script>
    % endif