Files @ 0ed42ca7ff9e
Branch filter:

Location: kallithea/rhodecode/templates/base/root.html

Marcin Kuzminski
Fixed issue with inproper handling of diff parsing that could lead to infinit loops.
This was an edge case when diff contained diff data inside. Regresion test was
added
## -*- coding: utf-8 -*-
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>${self.title()}</title>
        <meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
        <meta name="robots" content="index, nofollow"/>
        <link rel="icon" href="${h.url('/images/icons/database_gear.png')}" type="image/png" />

        ## CSS ###
        <%def name="css()">
            <link rel="stylesheet" type="text/css" href="${h.url('/css/style.css', ver=c.rhodecode_version)}" media="screen"/>
            <link rel="stylesheet" type="text/css" href="${h.url('/css/pygments.css', ver=c.rhodecode_version)}"/>
            ## EXTRA FOR CSS
            ${self.css_extra()}
        </%def>
        <%def name="css_extra()">
        </%def>

        ${self.css()}

        %if c.ga_code:
        <!-- Analytics -->
	     <script type="text/javascript">
	      var _gaq = _gaq || [];
	      _gaq.push(['_setAccount', '${c.ga_code}']);
	      _gaq.push(['_trackPageview']);

	      (function() {
	        var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
	        ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
	        var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
	      })();
	     </script>
	    %endif

        ## JAVASCRIPT ##
        <%def name="js()">
            <script type="text/javascript">
            //JS translations map
            var TRANSLATION_MAP = {
                'add another comment':'${_("add another comment")}',
                'Stop following this repository':"${_('Stop following this repository')}",
                'Start following this repository':"${_('Start following this repository')}",
                'Group':"${_('Group')}",
                'members':"${_('members')}",
                'loading...':"${_('loading...')}",
                'search truncated': "${_('search truncated')}",
                'no matching files': "${_('no matching files')}",
                'Open new pull request': "${_('Open new pull request')}",
                'Open new pull request for selected changesets':  "${_('Open new pull request for selected changesets')}",
                'Show selected changes __S -> __E': "${_('Show selected changes __S -> __E')}",
                'Selection link': "${_('Selection link')}",
            };
            var _TM = TRANSLATION_MAP;
            </script>
            <script type="text/javascript" src="${h.url('/js/yui.2.9.js', ver=c.rhodecode_version)}"></script>
            <!--[if lt IE 9]>
               <script language="javascript" type="text/javascript" src="${h.url('/js/excanvas.min.js')}"></script>
            <![endif]-->
            <script type="text/javascript" src="${h.url('/js/yui.flot.js', ver=c.rhodecode_version)}"></script>
            <script type="text/javascript" src="${h.url('/js/native.history.js', ver=c.rhodecode_version)}"></script>
            <script type="text/javascript" src="${h.url('/js/rhodecode.js', ver=c.rhodecode_version)}"></script>
           ## EXTRA FOR JS
           ${self.js_extra()}

            <script type="text/javascript">
            (function(window,undefined){

                // Prepare
                var History = window.History; // Note: We are using a capital H instead of a lower h
                if ( !History.enabled ) {
                     // History.js is disabled for this browser.
                     // This is because we can optionally choose to support HTML4 browsers or not.
                    return false;
                }
            })(window);
            var follow_base_url  = "${h.url('toggle_following')}";

            var onSuccessFollow = function(target){
                var f = YUD.get(target.id);
                var f_cnt = YUD.get('current_followers_count');

                if(f.getAttribute('class')=='follow'){
                    f.setAttribute('class','following');
                    f.setAttribute('title',_TM['Stop following this repository']);

                    if(f_cnt){
                        var cnt = Number(f_cnt.innerHTML)+1;
                        f_cnt.innerHTML = cnt;
                    }
                }
                else{
                    f.setAttribute('class','follow');
                    f.setAttribute('title',_TM['Start following this repository']);
                    if(f_cnt){
                        var cnt = Number(f_cnt.innerHTML)-1;
                        f_cnt.innerHTML = cnt;
                    }
                }
            }

            var toggleFollowingUser = function(target,fallows_user_id,token,user_id){
                args = 'follows_user_id='+fallows_user_id;
                args+= '&amp;auth_token='+token;
                if(user_id != undefined){
                    args+="&amp;user_id="+user_id;
                }
                YUC.asyncRequest('POST',follow_base_url,{
                    success:function(o){
                    	onSuccessFollow(target);
                    }
                },args);
                return false;
            }

            var toggleFollowingRepo = function(target,fallows_repo_id,token,user_id){

                args = 'follows_repo_id='+fallows_repo_id;
                args+= '&amp;auth_token='+token;
                if(user_id != undefined){
                    args+="&amp;user_id="+user_id;
                }
                YUC.asyncRequest('POST',follow_base_url,{
                    success:function(o){
                    	onSuccessFollow(target);
                    }
                },args);
                return false;
            }
           YUE.onDOMReady(function(){
             tooltip_activate();
             show_more_event();
             show_changeset_tooltip();

             YUE.on('quick_login_link','click',function(e){
                 // make sure we don't redirect
                 YUE.preventDefault(e);

                 if(YUD.hasClass('quick_login_link','enabled')){
                     YUD.setStyle('quick_login','display','none');
                     YUD.removeClass('quick_login_link','enabled');
                 }
                 else{
                     YUD.setStyle('quick_login','display','');
                     YUD.addClass('quick_login_link','enabled');
                     var usr = YUD.get('username');
                     if(usr){
                    	 usr.focus();
                     }
                 }
             });
           })
            </script>
        </%def>
        <%def name="js_extra()"></%def>
        ${self.js()}
        <%def name="head_extra()"></%def>
        ${self.head_extra()}
    </head>
    <body id="body">
     ## IE hacks
      <!--[if IE 7]>
      <script>YUD.addClass(document.body,'ie7')</script>
      <![endif]-->
      <!--[if IE 8]>
      <script>YUD.addClass(document.body,'ie8')</script>
      <![endif]-->
      <!--[if IE 9]>
      <script>YUD.addClass(document.body,'ie9')</script>
      <![endif]-->

      ${next.body()}
    </body>
</html>