Files @ 0ed42ca7ff9e
Branch filter:

Location: kallithea/rhodecode/templates/journal/journal.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 -*-
<%inherit file="/base/base.html"/>
<%def name="title()">
    ${_('Journal')} - ${c.rhodecode_name}
</%def>
<%def name="breadcrumbs()">
	${c.rhodecode_name}
</%def>
<%def name="page_nav()">
	${self.menu('home')}
</%def>
<%def name="head_extra()">
<link href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('ATOM journal feed')}" type="application/atom+xml" />
<link href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}" rel="alternate" title="${_('RSS journal feed')}" type="application/rss+xml" />
</%def>
<%def name="main()">

    <div class="box box-left">
	    <!-- box / title -->
	    <div class="title">
	        <h5>${_('Journal')}</h5>
             <ul class="links">
               <li>
                 <span><a id="refresh" href="${h.url('journal')}"><img class="icon" title="${_('Refresh')}" alt="${_('Refresh')}" src="${h.url('/images/icons/arrow_refresh.png')}"/></a></span>
               </li>
               <li>
                 <span><a href="${h.url('journal_rss', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('RSS feed')}" alt="${_('RSS feed')}" src="${h.url('/images/icons/rss_16.png')}"/></a></span>
               </li>
               <li>
                 <span><a href="${h.url('journal_atom', api_key=c.rhodecode_user.api_key)}"><img class="icon" title="${_('ATOM feed')}" alt="${_('ATOM feed')}" src="${h.url('/images/icons/atom.png')}"/></a></span>
               </li>
             </ul>
	    </div>
	    <div id="journal">${c.journal_data}</div>
    </div>
    <div class="box box-right">
        <!-- box / title -->
        <div class="title">
            <h5>
            <input class="q_filter_box" id="q_filter" size="15" type="text" name="filter" value="${_('quick filter...')}"/>
            <a id="show_watched" class="link-white" href="#watched">${_('Watched')}</a> / <a id="show_my" class="link-white" href="#my">${_('My repos')}</a>
            </h5>
             %if h.HasPermissionAny('hg.admin','hg.create.repository')():
             <ul class="links">
               <li>
                 <span>${h.link_to(_('ADD'),h.url('admin_settings_create_repository'))}</span>
               </li>
             </ul>
             %endif
        </div>
        <!-- end box / title -->
        <div id="my" class="table" style="display:none">
        ## loaded via AJAX
        ${_('Loading...')}
        </div>

        <div id="watched" class="table">
          %if c.following:
            <table>
            <thead>
                <tr>
                <th class="left">${_('Name')}</th>
            </thead>
             <tbody>
                %for entry in c.following:
                  <tr>
                    <td>
                      %if entry.follows_user_id:
                        <img title="${_('following user')}" alt="${_('user')}" src="${h.url('/images/icons/user.png')}"/>
                        ${entry.follows_user.full_contact}
                      %endif

                      %if entry.follows_repo_id:
                        <div style="float:right;padding-right:5px">
                        <span id="follow_toggle_${entry.follows_repository.repo_id}" class="following" title="${_('Stop following this repository')}"
                              onclick="javascript:toggleFollowingRepo(this,${entry.follows_repository.repo_id},'${str(h.get_token())}')">
                        </span>
                        </div>

                         %if h.is_hg(entry.follows_repository):
                           <img class="icon" title="${_('Mercurial repository')}" alt="${_('Mercurial repository')}" src="${h.url('/images/icons/hgicon.png')}"/>
                         %elif h.is_git(entry.follows_repository):
                           <img class="icon" title="${_('Git repository')}" alt="${_('Git repository')}" src="${h.url('/images/icons/giticon.png')}"/>
                         %endif

                        %if entry.follows_repository.private and c.visual.show_private_icon:
                          <img class="icon" title="${_('private repository')}" alt="${_('private repository')}" src="${h.url('/images/icons/lock.png')}"/>
                        %elif not entry.follows_repository.private and c.visual.show_public_icon:
                          <img class="icon" title="${_('public repository')}" alt="${_('public repository')}" src="${h.url('/images/icons/lock_open.png')}"/>
                        %endif
                        <span class="watched_repo">
                            ${h.link_to(entry.follows_repository.repo_name,h.url('summary_home',repo_name=entry.follows_repository.repo_name))}
                        </span>
                      %endif
                    </td>
                  </tr>
                %endfor
            </tbody>
            </table>
          %else:
              <div style="padding:5px 0px 10px 0px;">
              ${_('You are not following any users or repositories')}
              </div>
          %endif
        </div>
    </div>

    <script type="text/javascript">
    var show_my = function(e){
        YUD.setStyle('watched','display','none');
        YUD.setStyle('my','display','');

        var url = "${h.url('admin_settings_my_repos')}";
        ypjax(url, 'my', function(){
            tooltip_activate();
            quick_repo_menu();
            var nodes = YUQ('#my tr td a.repo_name');
            var func = function(node){
                return node.parentNode.parentNode.parentNode;
            }
            q_filter('q_filter',nodes,func);
        });

    }
    YUE.on('show_my','click',function(e){
        show_my(e);
    })
    var show_watched = function(e){
    	YUD.setStyle('my','display','none');
        YUD.setStyle('watched','display','');
        var nodes = YUQ('#watched .watched_repo a');
        var target = 'q_filter';
        var func = function(node){
            return node.parentNode.parentNode;
        }
        q_filter(target,nodes,func);
    }
    YUE.on('show_watched','click',function(e){
        show_watched(e);
    })
    //init watched
    show_watched();

    var tabs = {
        'watched': show_watched,
        'my': show_my,
    }
    var url = location.href.split('#');
    if (url[1]) {
        //We have a hash
        var tabHash = url[1];
        tabs[tabHash]();
    }

    YUE.on('refresh','click',function(e){
        ypjax(e.currentTarget.href,"journal",function(){
        	show_more_event();
        	tooltip_activate();
        	show_changeset_tooltip();
        	});
        YUE.preventDefault(e);
    });


    // main table sorting
    var myColumnDefs = [
        {key:"menu",label:"",sortable:false,className:"quick_repo_menu hidden"},
        {key:"name",label:"${_('Name')}",sortable:true,
            sortOptions: { sortFunction: nameSort }},
        {key:"tip",label:"${_('Tip')}",sortable:true,
            sortOptions: { sortFunction: revisionSort }},
        {key:"action1",label:"",sortable:false},
        {key:"action2",label:"",sortable:false},
    ];

    var myDataSource = new YAHOO.util.DataSource(YUD.get("repos_list"));

    myDataSource.responseType = YAHOO.util.DataSource.TYPE_HTMLTABLE;

    myDataSource.responseSchema = {
        fields: [
            {key:"menu"},
            {key:"name"},
            {key:"tip"},
            {key:"action1"},
            {key:"action2"}
        ]
    };

    var myDataTable = new YAHOO.widget.DataTable("repos_list_wrap", myColumnDefs, myDataSource,
            {
              sortedBy:{key:"name",dir:"asc"},
              MSG_SORTASC:"${_('Click to sort ascending')}",
              MSG_SORTDESC:"${_('Click to sort descending')}",
              MSG_EMPTY:"${_('No records found.')}",
              MSG_ERROR:"${_('Data error.')}",
              MSG_LOADING:"${_('Loading...')}",
            }
    );
    myDataTable.subscribe('postRenderEvent',function(oArgs) {
        tooltip_activate();
        quick_repo_menu();
        var func = function(node){
            return node.parentNode.parentNode.parentNode.parentNode;
        }
        q_filter('q_filter',YUQ('#my tr td a.repo_name'),func);
    });

    </script>
</%def>