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

<%def name="title(*args)">
    ${_('%s Files') % c.repo_name}
    %if hasattr(c,'file'):
        &middot; ${h.safe_unicode(c.file.path) or '\\'}
    %endif
    &middot; ${c.rhodecode_name}
</%def>

<%def name="breadcrumbs_links()">
    ${_('Files')}
    %if c.file:
        @ ${h.show_id(c.changeset)}
    %endif
</%def>

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

<%def name="main()">
${self.repo_context_bar('files')}
<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('/');

        //page title make this consistent with title() mako function on top
        var title = "${_('%s Files') % c.repo_name}" + " &middot; " + (f_path || '\\') + " &middot; " + "${c.rhodecode_name}";

        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>
