Files @ fe012b7df29d
Branch filter:

Location: kallithea/rhodecode/templates/files/files.html - annotation

Marcin Kuzminski
missing files or bad files revisions should return 404s not redirects - ref #808
1e757ac98988
1e757ac98988
1f334a68d057
1f334a68d057
1f334a68d057
1f334a68d057
1f334a68d057
1f334a68d057
1e757ac98988
1e757ac98988
1e757ac98988
9e677f6d34cb
61eda8bf70d0
1f334a68d057
f91d3f9b7230
1e757ac98988
1e757ac98988
1e757ac98988
eacd33e0c5b3
1e757ac98988
1e757ac98988
1e757ac98988
7967d00e4692
1e757ac98988
1e757ac98988
1e757ac98988
c8bd0e6cc3da
b4f401524060
b4f401524060
b4f401524060
b4f401524060
b4f401524060
1e757ac98988
1e757ac98988
b4f401524060
b4f401524060
b4f401524060
1e757ac98988
f91d3f9b7230
269c6e0b54cc
623b228cf325
269c6e0b54cc
37c7abd34d44
4d7dfda32d10
9812e617c564
4d7dfda32d10
9812e617c564
37c7abd34d44
37c7abd34d44
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
acc05c33cc0c
b4f401524060
b4f401524060
b4f401524060
b4f401524060
acc05c33cc0c
269c6e0b54cc
269c6e0b54cc
e70be4cf96e8
269c6e0b54cc
269c6e0b54cc
acc05c33cc0c
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
b4f401524060
269c6e0b54cc
acc05c33cc0c
269c6e0b54cc
1f334a68d057
1f334a68d057
acc05c33cc0c
1f334a68d057
1f334a68d057
acc05c33cc0c
9812e617c564
9812e617c564
e70be4cf96e8
269c6e0b54cc
4d7dfda32d10
37c7abd34d44
acc05c33cc0c
acc05c33cc0c
269c6e0b54cc
cff9d4e1d821
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
685ebc84c2e9
37c7abd34d44
b4f401524060
37c7abd34d44
37c7abd34d44
37c7abd34d44
37c7abd34d44
37c7abd34d44
37c7abd34d44
37c7abd34d44
adf8ee7b8f2a
b4f401524060
adf8ee7b8f2a
37c7abd34d44
37c7abd34d44
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
acc05c33cc0c
269c6e0b54cc
269c6e0b54cc
acc05c33cc0c
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
b4f401524060
b4f401524060
b4f401524060
b4f401524060
b4f401524060
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
269c6e0b54cc
acc05c33cc0c
acc05c33cc0c
4d7dfda32d10
4d7dfda32d10
4d7dfda32d10
4d7dfda32d10
9812e617c564
37c7abd34d44
37c7abd34d44
37c7abd34d44
4d7dfda32d10
4d7dfda32d10
4d7dfda32d10
269c6e0b54cc
269c6e0b54cc
623b228cf325
269c6e0b54cc
f91d3f9b7230
<%inherit file="/base/base.html"/>

<%def name="title(*args)">
    ${_('%s Files') % c.repo_name}
    %if hasattr(c,'file'):
        &middot; ${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.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>