Files @ 260a7a01b054
Branch filter:

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

Mads Kiilerich
follow Python conventions for boolean values

True and False might be singletons and the "default" values for "boolean"
expressions, but "all" values in Python has a boolean value and should be
evaluated as such. Checking with 'is True' and 'is False' is thus confusing,
error prone and unnessarily complex.

If we anywhere rely and nullable boolean fields from the database layer and
don't want the null value to be treated as False then we should check
explicitly for null with 'is None'.
f91d3f9b7230
fc286aed92fe
fc286aed92fe
fc286aed92fe
aa805ee6ee09
f91d3f9b7230
fc286aed92fe
fc286aed92fe
b4daef4cc26d
069884383cc7
fc286aed92fe
5242b1619603
12f2547cf267
667630c98eaa
667630c98eaa
fe2bb88bf7ac
5242b1619603
8b8edfc25856
667630c98eaa
667630c98eaa
667630c98eaa
a8c9c0094ddf
f91d3f9b7230
fc286aed92fe
b4daef4cc26d
b4daef4cc26d
b4daef4cc26d
b4daef4cc26d
b4daef4cc26d
b4daef4cc26d
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
defcf245f3e9
f91d3f9b7230
defcf245f3e9
defcf245f3e9
fc286aed92fe
defcf245f3e9
defcf245f3e9
5706f6ab60cf
defcf245f3e9
defcf245f3e9
defcf245f3e9
a221706dab50
f1f01e951008
a221706dab50
a221706dab50
a221706dab50
87f0800abc7b
87f0800abc7b
87f0800abc7b
fc286aed92fe
defcf245f3e9
defcf245f3e9
defcf245f3e9
0cb48c083c6b
fc286aed92fe
fc286aed92fe
7a46d67c263c
7a46d67c263c
7a46d67c263c
62e493c7f436
62e493c7f436
260a7a01b054
62e493c7f436
defcf245f3e9
7a46d67c263c
fc286aed92fe
fc286aed92fe
241a5167c4e0
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
a39c0e5fca89
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
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
fc286aed92fe
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
defcf245f3e9
fc286aed92fe
260a7a01b054
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
f91d3f9b7230
defcf245f3e9
f91d3f9b7230
defcf245f3e9
defcf245f3e9
defcf245f3e9
62e493c7f436
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
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
9937afa7f093
62e493c7f436
62e493c7f436
62e493c7f436
a797ada9d2ad
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
62e493c7f436
9937afa7f093
62e493c7f436
62e493c7f436
79c980b628e3
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':
              <ul class="links">
                %if h.HasPermissionAny('hg.admin','hg.create.repository')() or h.HasReposGroupPermissionAny('group.write', 'group.admin')(c.group.group_name if c.group else None):
                  <li>
                  %if c.group:
                        <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository',parent_group=c.group.group_id))}</span>
                        %if h.HasPermissionAny('hg.admin')() or h.HasReposGroupPermissionAny('group.admin')(c.group.group_name):
                         <span>${h.link_to(_(u'Add group'),h.url('new_repos_group', parent_group=c.group.group_id))}</span>
                        %endif
                  %else:
                    <span>${h.link_to(_('Add repository'),h.url('admin_settings_create_repository'))}</span>
                    %if h.HasPermissionAny('hg.admin')():
                     <span>${h.link_to(_(u'Add group'),h.url('new_repos_group'))}</span>
                    %endif
                  %endif
                  </li>
                %endif
                %if c.group and h.HasReposGroupPermissionAny('group.admin')(c.group.group_name):
                <li>
                    <span>${h.link_to(_('Edit group'),h.url('edit_repos_group',group_name=c.group.group_name), title=_('You have admin right to this group, and can edit it'))}</span>
                </li>
                %endif
              </ul>
            %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="${_('Repository 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 not c.visual.lightweight_dashboard:
              ## 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">${_('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.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 not c.visual.lightweight_dashboard:
    <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:"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:"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:"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:"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 repositories 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