Mercurial > kallithea
view rhodecode/templates/index_base.html @ 3574:000653f7cdf9 beta
avoid displaying repr of internal classes in user facing messages
The context of the message will tell where the problem was and there is no reason to show
... does not exist for this repository <MercurialRepository at /home/marcink/repos/rhodecode>
author | Mads Kiilerich <madski@unity3d.com> |
---|---|
date | Thu, 21 Mar 2013 11:17:01 +0100 |
parents | 53eafc983b5c |
children | 260a7a01b054 |
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': <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 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">${_('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 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: '>', previousPageLinkLabel: '<', firstPageLinkLabel: '<<', lastPageLinkLabel: '>>', 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: '>', previousPageLinkLabel: '<', firstPageLinkLabel: '<<', lastPageLinkLabel: '>>', 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