##// END OF EJS Templates
Added tag v1.2.1 for changeset 0b8fba8ab90b
Added tag v1.2.1 for changeset 0b8fba8ab90b

File last commit:

r1512:bf263968 merge default
r1536:a05d16fc default
Show More
files_browser.html
222 lines | 9.1 KiB | text/html | HtmlLexer
<%def name="file_class(node)">
%if node.is_file():
<%return "browser-file" %>
%else:
<%return "browser-dir"%>
%endif
</%def>
<div id="body" class="browserblock">
<div class="browser-header">
<div class="browser-nav">
${h.form(h.url.current())}
<div class="info_box">
<span class="rev">${_('view')}@rev</span>
<a class="rev" href="${c.url_prev}" title="${_('previous revision')}">&laquo;</a>
${h.text('at_rev',value=c.changeset.revision,size=5)}
<a class="rev" href="${c.url_next}" title="${_('next revision')}">&raquo;</a>
## ${h.submit('view',_('view'),class_="ui-button-small")}
</div>
${h.end_form()}
</div>
<div class="browser-branch">
${h.checkbox('stay_at_branch',c.changeset.branch,c.changeset.branch==c.branch)}
<label>${_('follow current branch')}</label>
</div>
<div class="browser-search">
<div id="search_activate_id" class="search_activate">
<a id="filter_activate" href="#">${_('search file list')}</a>
</div>
% if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name):
<div id="add_node_id" class="add_node">
<a href="${h.url('files_add_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.f_path)}">${_('add new file')}</a>
</div>
% endif
<div>
<div id="node_filter_box_loading" style="display:none">${_('Loading file list...')}</div>
<div id="node_filter_box" style="display:none">
${h.files_breadcrumbs(c.repo_name,c.changeset.raw_id,c.files_list.path)}/<input type="text" value="type to search..." name="filter" size="25" id="node_filter" autocomplete="off">
<script type="text/javascript">
YUE.on('stay_at_branch','click',function(e){
if(e.target.checked){
var uri = "${h.url.current(branch='__BRANCH__')}"
uri = uri.replace('__BRANCH__',e.target.value);
window.location = uri;
}
else{
window.location = "${h.url.current()}";
}
})
var n_filter = YUD.get('node_filter');
var F = YAHOO.namespace('node_filter');
var url = '${h.url("files_nodelist_home",repo_name="__REPO__",revision="__REVISION__",f_path="__FPATH__")}';
var node_url = '${h.url("files_home",repo_name="__REPO__",revision="__REVISION__",f_path="__FPATH__")}';
url = url.replace('__REPO__','${c.repo_name}');
url = url.replace('__REVISION__','${c.changeset.raw_id}');
url = url.replace('__FPATH__','${c.files_list.path}');
node_url = node_url.replace('__REPO__','${c.repo_name}');
node_url = node_url.replace('__REVISION__','${c.changeset.raw_id}');
F.filterTimeout = null;
var nodes = null;
F.initFilter = function(){
YUD.setStyle('node_filter_box_loading','display','');
YUD.setStyle('search_activate_id','display','none');
YUD.setStyle('add_node_id','display','none');
YUC.initHeader('X-PARTIAL-XHR',true);
YUC.asyncRequest('GET',url,{
success:function(o){
nodes = JSON.parse(o.responseText);
YUD.setStyle('node_filter_box_loading','display','none');
YUD.setStyle('node_filter_box','display','');
},
failure:function(o){
console.log('failed to load');
}
},null);
}
F.updateFilter = function(e) {
return function(){
// Reset timeout
F.filterTimeout = null;
var query = e.target.value;
var match = [];
var matches = 0;
var matches_max = 20;
if (query != ""){
for(var i=0;i<nodes.length;i++){
var pos = nodes[i].toLowerCase().indexOf(query)
if(query && pos != -1){
matches++
//show only certain amount to not kill browser
if (matches > matches_max){
break;
}
var n = nodes[i];
var n_hl = n.substring(0,pos)
+"<b>{0}</b>".format(n.substring(pos,pos+query.length))
+n.substring(pos+query.length)
match.push('<tr><td><a class="browser-file" href="{0}">{1}</a></td><td colspan="5"></td></tr>'.format(node_url.replace('__FPATH__',n),n_hl));
}
if(match.length >= matches_max){
match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format("${_('search truncated')}"));
}
}
}
if(query != ""){
YUD.setStyle('tbody','display','none');
YUD.setStyle('tbody_filtered','display','');
if (match.length==0){
match.push('<tr><td>{0}</td><td colspan="5"></td></tr>'.format("${_('no matching files')}"));
}
YUD.get('tbody_filtered').innerHTML = match.join("");
}
else{
YUD.setStyle('tbody','display','');
YUD.setStyle('tbody_filtered','display','none');
}
}
}
YUE.on(YUD.get('filter_activate'),'click',function(){
F.initFilter();
})
YUE.on(n_filter,'click',function(){
n_filter.value = '';
});
YUE.on(n_filter,'keyup',function(e){
clearTimeout(F.filterTimeout);
F.filterTimeout = setTimeout(F.updateFilter(e),600);
});
</script>
</div>
</div>
</div>
</div>
<div class="browser-body">
<table class="code-browser">
<thead>
<tr>
<th>${_('Name')}</th>
<th>${_('Size')}</th>
<th>${_('Mimetype')}</th>
<th>${_('Revision')}</th>
<th>${_('Last modified')}</th>
<th>${_('Last commiter')}</th>
</tr>
</thead>
<tbody id="tbody">
%if c.files_list.parent:
<tr class="parity0">
<td>
${h.link_to('..',h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=c.files_list.parent.path),class_="browser-dir")}
</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
%endif
%for cnt,node in enumerate(c.files_list):
<tr class="parity${cnt%2}">
<td>
${h.link_to(node.name,h.url('files_home',repo_name=c.repo_name,revision=c.changeset.raw_id,f_path=h.safe_unicode(node.path)),class_=file_class(node))}
</td>
<td>
%if node.is_file():
${h.format_byte_size(node.size,binary=True)}
%endif
</td>
<td>
%if node.is_file():
${node.mimetype}
%endif
</td>
<td>
%if node.is_file():
<span class="tooltip" title="${node.last_changeset.raw_id}">
${'r%s:%s' % (node.last_changeset.revision,node.last_changeset.short_id)}</span>
%endif
</td>
<td>
%if node.is_file():
<span class="tooltip" title="${node.last_changeset.date}">
${h.age(node.last_changeset.date)}</span>
%endif
</td>
<td>
%if node.is_file():
${node.last_changeset.author}
%endif
</td>
</tr>
%endfor
</tbody>
<tbody id="tbody_filtered" style="display:none">
</tbody>
</table>
</div>
</div>