Source

RhodeCode / rhodecode / templates / files / files.html

Full commit
<%inherit file="/base/base.html"/>

<%def name="title()">
    ${_('%s files') % c.repo_name} - ${c.rhodecode_name}
</%def>

<%def name="breadcrumbs_links()">
    ${h.link_to(_(u'Home'),h.url('/'))}
    &raquo;
    ${h.link_to(c.repo_name,h.url('files_home',repo_name=c.repo_name))}
    &raquo;
    ${_('files')}
    %if c.file:
        @ r${c.changeset.revision}:${h.short_id(c.changeset.raw_id)}
    %endif
</%def>

<%def name="page_nav()">
    ${self.menu('files')}
</%def>

<%def name="main()">
<div class="box">
    <!-- box / title -->
    <div class="title">
        ${self.breadcrumbs()}
	    <ul class="links">
		    <li>
		      <span style="text-transform: uppercase;"><a href="#">${_('branch')}: ${c.changeset.branch}</a></span>
	        </li>
	    </ul>
    </div>
    <div class="table">
		<div id="files_data">
			<%include file='files_ypjax.html'/>
		</div>
    </div>
</div>

<script type="text/javascript">
var CACHE = {};
var CACHE_EXPIRE = 5*60*1000; //cache for 5*60s
//used to construct links from the search list
var url_base = '${h.url("files_home",repo_name=c.repo_name,revision='__REV__',f_path='__FPATH__')}';
//send the nodelist request to this url
var node_list_url = '${h.url("files_nodelist_home",repo_name=c.repo_name,revision='__REV__',f_path='__FPATH__')}';
// send the node history requst to this url
var node_history_url = '${h.url("files_history_home",repo_name=c.repo_name,revision='__REV__',f_path='__FPATH__')}';

var ypjax_links = function(){
    YUE.on(YUQ('.ypjax-link'), 'click',function(e){

    	//don't do ypjax on middle click
    	if(e.which == 2 || !History.enabled){
    		return true;
    	}

        var el = e.currentTarget;
        var url = el.href;

        var _base_url = '${h.url("files_home",repo_name=c.repo_name,revision='',f_path='')}';
        _base_url = _base_url.replace('//','/')

        //extract rev and the f_path from url.
        parts = url.split(_base_url)
        if(parts.length != 2){
        	return false;
        }

        var parts2 = parts[1].split('/');
      	var rev = parts2.shift(); // pop the first element which is the revision
      	var f_path = parts2.join('/');

        var title = "${_('%s files') % c.repo_name}" + " - " + f_path;

        var _node_list_url = node_list_url.replace('__REV__',rev).replace('__FPATH__', f_path);
        var _url_base = url_base.replace('__REV__',rev);

        // Change our States and save some data for handling events
        var data = {url:url,title:title, url_base:_url_base,
                    node_list_url:_node_list_url, rev:rev, f_path:f_path};
        History.pushState(data, title, url);

        //now we're sure that we can do ypjax things
        YUE.preventDefault(e);
        return false;
    });
}

var callbacks = function(State){
    ypjax_links();
    tooltip_activate();
    fileBrowserListeners(State.url, State.data.node_list_url, State.data.url_base);

    if(YUD.get('hlcode')){
    	YUE.on('hlcode', 'mouseup', getSelectionLink);
    }
    //console.log(State);
    if(YUD.get('load_node_history')){
      //remove all listeners due to problems of history state
      YUE.removeListener('load_node_history', 'click');
      YUE.on('load_node_history', 'click', function(e){
          var _url = node_history_url.replace('__REV__',State.data.rev).replace('__FPATH__', State.data.f_path);
          ypjax(_url, 'node_history', function(o){
        	  tooltip_activate();
          })
      });
    }
    // Inform Google Analytics of the change
    if ( typeof window.pageTracker !== 'undefined' ) {
        window.pageTracker._trackPageview(State.url);
    }
}

YUE.onDOMReady(function(){
    ypjax_links();
    var container = 'files_data';
    //Bind to StateChange Event
    History.Adapter.bind(window,'statechange',function(){
        var State = History.getState();
        cache_key = State.url;
        //check if we have this request in cache maybe ?
        var _cache_obj = CACHE[cache_key];
        var _cur_time = new Date().getTime();
        // get from cache if it's there and not yet expired !
        if(_cache_obj !== undefined && _cache_obj[0] > _cur_time){
            YUD.get(container).innerHTML=_cache_obj[1];
            YUD.setStyle(container,'opacity','1.0');

            //callbacks after ypjax call
            callbacks(State);
        }
        else{
          ypjax(State.url,container,function(o){
          	//callbacks after ypjax call
          	callbacks(State);
          	if (o !== undefined){
          	  //store our request in cache
          	  var _expire_on = new Date().getTime()+CACHE_EXPIRE;
              CACHE[cache_key] = [_expire_on, o.responseText];
            }
          });
        }
    });

    // init the search filter
    var _State = {
       url: "${h.url.current()}",
       data: {
         node_list_url: node_list_url.replace('__REV__',"${c.changeset.raw_id}").replace('__FPATH__', "${h.safe_unicode(c.file.path)}"),
         url_base: url_base.replace('__REV__',"${c.changeset.raw_id}"),
         rev:"${c.changeset.raw_id}",
         f_path: "${h.safe_unicode(c.file.path)}"
       }
    }
    fileBrowserListeners(_State.url, _State.data.node_list_url, _State.data.url_base);
});

</script>

</%def>