view rhodecode/templates/index_base.html @ 3181:efe23d6c178c rhodecode-0.0.1.5.2

merged with beta
author Marcin Kuzminski <marcin@python-works.com>
date Mon, 21 Jan 2013 00:49:59 +0100
parents 2fb94c52e20e
children b4f401524060
line wrap: on
line source

<%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