##// END OF EJS Templates
contributors: update
Mads Kiilerich -
r7135:3b36ca51 stable
parent child Browse files
Show More
@@ -1,119 +1,119 b''
1 1 List of contributors to Kallithea project:
2 2
3 Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> 2014-2018
4 Branko Majic <branko@majic.rs> 2015 2018
5 Mads Kiilerich <mads@kiilerich.com> 2016-2018
3 6 Mads Kiilerich <madski@unity3d.com> 2012-2017
4 7 Unity Technologies 2012-2017
5 8 Andrew Shadura <andrew@shadura.me> 2012 2014-2017
6 9 Dominik Ruf <dominikruf@gmail.com> 2012 2014 2016-2017
7 Thomas De Schampheleire <thomas.de.schampheleire@gmail.com> 2014-2017
8 10 Sam Jaques <sam.jaques@me.com> 2015 2017
9 Mads Kiilerich <mads@kiilerich.com> 2016-2017
10 11 Ching-Chen Mao <mao@lins.fju.edu.tw> 2017
11 12 FUJIWARA Katsunori <foozy@lares.dti.ne.jp> 2017
12 13 Viktar Vauchkevich <victorenator@gmail.com> 2017
13 14 Takumi IINO <trot.thunder@gmail.com> 2012-2016
14 15 SΓΈren LΓΈvborg <sorenl@unity3d.com> 2015-2016
15 16 Anton Shestakov <av6@dwimlabs.net> 2016
16 17 Brandon Jones <bjones14@gmail.com> 2016
17 18 Konstantin Veretennicov <kveretennicov@gmail.com> 2016
18 19 Robert James Dennington <tinytimrob@googlemail.com> 2016
19 20 Aras Pranckevičius <aras@unity3d.com> 2012-2013 2015
20 21 Sean Farley <sean.michael.farley@gmail.com> 2013-2015
21 22 Christian Oyarzun <oyarzun@gmail.com> 2014-2015
22 23 Joseph Rivera <rivera.d.joseph@gmail.com> 2014-2015
23 24 Michal ČihaΕ™ <michal@cihar.com> 2014-2015
24 25 Anatoly Bubenkov <bubenkoff@gmail.com> 2015
25 26 Andrew Bartlett <abartlet@catalyst.net.nz> 2015
26 27 BalÑzs Úr <urbalazs@gmail.com> 2015
27 28 Ben Finney <ben@benfinney.id.au> 2015
28 Branko Majic <branko@majic.rs> 2015
29 29 Daniel Hobley <danielh@unity3d.com> 2015
30 30 David Avigni <david.avigni@ankapi.com> 2015
31 31 Denis Blanchette <dblanchette@coveo.com> 2015
32 32 duanhongyi <duanhongyi@doopai.com> 2015
33 33 EriCSN Chang <ericsning@gmail.com> 2015
34 34 Γ‰tienne Gilli <etienne.gilli@gmail.com> 2015
35 35 Grzegorz Krason <grzegorz.krason@gmail.com> 2015
36 36 Jan Heylen <heyleke@gmail.com> 2015
37 37 Kazunari Kobayashi <kobanari@nifty.com> 2015
38 38 Kevin Bullock <kbullock@ringworld.org> 2015
39 39 kobanari <kobanari@nifty.com> 2015
40 40 Marc Abramowitz <marc@marc-abramowitz.com> 2015
41 41 Marc Villetard <marc.villetard@gmail.com> 2015
42 42 Matthias Zilk <matthias.zilk@gmail.com> 2015
43 43 Michael Pohl <michael@mipapo.de> 2015
44 44 Michael V. DePalatis <mike@depalatis.net> 2015
45 45 Morten Skaaning <mortens@unity3d.com> 2015
46 46 Nick High <nick@silverchip.org> 2015
47 47 Niemand Jedermann <predatorix@web.de> 2015
48 48 Peter Vitt <petervitt@web.de> 2015
49 49 Robert Martinez <ntttq@inboxen.org> 2015
50 50 Robert Rauch <mail@robertrauch.de> 2015
51 51 Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> 2015
52 52 Tuux <tuxa@galaxie.eu.org> 2015
53 53 Viktar Palstsiuk <vipals@gmail.com> 2015
54 54 Bradley M. Kuhn <bkuhn@sfconservancy.org> 2014
55 55 Calinou <calinou@opmbx.org> 2014
56 56 Daniel Anderson <daniel@dattrix.com> 2014
57 57 Henrik Stuart <hg@hstuart.dk> 2014
58 58 Ingo von Borstel <kallithea@planetmaker.de> 2014
59 59 Jelmer VernooΔ³ <jelmer@samba.org> 2014
60 60 Jim Hague <jim.hague@acm.org> 2014
61 61 Matt Fellows <kallithea@matt-fellows.me.uk> 2014
62 62 Max Roman <max@choloclos.se> 2014
63 63 Na'Tosha Bard <natosha@unity3d.com> 2014
64 64 Rasmus Selsmark <rasmuss@unity3d.com> 2014
65 65 Tim Freund <tim@freunds.net> 2014
66 66 Travis Burtrum <android@moparisthebest.com> 2014
67 67 Zoltan Gyarmati <mr.zoltan.gyarmati@gmail.com> 2014
68 68 Marcin KuΕΊmiΕ„ski <marcin@python-works.com> 2010-2013
69 69 xpol <xpolife@gmail.com> 2012-2013
70 70 Aparkar <aparkar@icloud.com> 2013
71 71 Dennis Brakhane <brakhane@googlemail.com> 2013
72 72 Grzegorz RoΕΌniecki <xaerxess@gmail.com> 2013
73 73 Jonathan Sternberg <jonathansternberg@gmail.com> 2013
74 74 Leonardo Carneiro <leonardo@unity3d.com> 2013
75 75 Magnus Ericmats <magnus.ericmats@gmail.com> 2013
76 76 Martin Vium <martinv@unity3d.com> 2013
77 77 Simon Lopez <simon.lopez@slopez.org> 2013
78 78 Ton Plomp <tcplomp@gmail.com> 2013
79 79 Augusto Herrmann <augusto.herrmann@planejamento.gov.br> 2011-2012
80 80 Dan Sheridan <djs@adelard.com> 2012
81 81 Dies Koper <diesk@fast.au.fujitsu.com> 2012
82 82 Erwin Kroon <e.kroon@smartmetersolutions.nl> 2012
83 83 H Waldo G <gwaldo@gmail.com> 2012
84 84 hppj <hppj@postmage.biz> 2012
85 85 Indra Talip <indra.talip@gmail.com> 2012
86 86 mikespook 2012
87 87 nansenat16 <nansenat16@null.tw> 2012
88 88 Philip Jameson <philip.j@hostdime.com> 2012
89 89 Raoul Thill <raoul.thill@gmail.com> 2012
90 90 Stefan Engel <mail@engel-stefan.de> 2012
91 91 Tony Bussieres <t.bussieres@gmail.com> 2012
92 92 Vincent Caron <vcaron@bearstech.com> 2012
93 93 Vincent Duvert <vincent@duvert.net> 2012
94 94 Vladislav Poluhin <nuklea@gmail.com> 2012
95 95 Zachary Auclair <zach101@gmail.com> 2012
96 96 Ankit Solanki <ankit.solanki@gmail.com> 2011
97 97 Dmitri Kuznetsov 2011
98 98 Jared Bunting <jared.bunting@peachjean.com> 2011
99 99 Jason Harris <jason@jasonfharris.com> 2011
100 100 Les Peabody <lpeabody@gmail.com> 2011
101 101 Liad Shani <liadff@gmail.com> 2011
102 102 Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it> 2011
103 103 Matt Zuba <matt.zuba@goodwillaz.org> 2011
104 104 Nicolas VINOT <aeris@imirhil.fr> 2011
105 105 Shawn K. O'Shea <shawn@eth0.net> 2011
106 106 Thayne Harbaugh <thayne@fusionio.com> 2011
107 107 Łukasz Balcerzak <lukaszbalcerzak@gmail.com> 2010
108 108 Andrew Kesterson <andrew@aklabs.net>
109 109 cejones
110 110 David A. SjΓΈen <david.sjoen@westcon.no>
111 111 James Rhodes <jrhodes@redpointsoftware.com.au>
112 112 Jonas Oberschweiber <jonas.oberschweiber@d-velop.de>
113 113 larikale
114 114 RhodeCode GmbH
115 115 Sebastian Kreutzberger <sebastian@rhodecode.com>
116 116 Steve Romanow <slestak989@gmail.com>
117 117 SteveCohen
118 118 Thomas <thomas@rhodecode.com>
119 119 Thomas Waldmann <tw-public@gmx.de>
@@ -1,155 +1,155 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="/base/base.html"/>
3 3 <%block name="title">
4 4 ${_('About')}
5 5 </%block>
6 6 <%def name="breadcrumbs()">
7 7 ${c.site_name}
8 8 </%def>
9 9 <%block name="header_menu">
10 10 ${self.menu('about')}
11 11 </%block>
12 12 <%def name="main()">
13 13
14 14 <div class="box">
15 15 <!-- box / title -->
16 16 <div class="title">
17 17 <h5>${_('About')} Kallithea</h5>
18 18 </div>
19 19
20 20 <p><a href="https://kallithea-scm.org/">Kallithea</a> is a project of the
21 21 <a href="http://sfconservancy.org/">Software Freedom Conservancy, Inc.</a>
22 22 and is released under the terms of the
23 23 <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License,
24 24 v 3.0 (GPLv3)</a>.</p>
25 25
26 26 <p>Kallithea is copyrighted by various authors, including but not
27 27 necessarily limited to the following:
28 28 <ul style="margin: 0 0 0 50px;">
29 29
30 <li>Copyright &copy; 2012&ndash;2017, Mads Kiilerich</li>
30 <li>Copyright &copy; 2012&ndash;2018, Mads Kiilerich</li>
31 <li>Copyright &copy; 2014&ndash;2018, Thomas De Schampheleire</li>
32 <li>Copyright &copy; 2015, 2018, Branko Majic</li>
31 33 <li>Copyright &copy; 2012&ndash;2017, Unity Technologies</li>
32 34 <li>Copyright &copy; 2012, 2014&ndash;2017, Andrew Shadura</li>
33 35 <li>Copyright &copy; 2012, 2014, 2016&ndash;2017, Dominik Ruf</li>
34 <li>Copyright &copy; 2014&ndash;2017, Thomas De Schampheleire</li>
35 36 <li>Copyright &copy; 2015, 2017, Sam Jaques</li>
36 37 <li>Copyright &copy; 2017, Ching-Chen Mao</li>
37 38 <li>Copyright &copy; 2017, FUJIWARA Katsunori</li>
38 39 <li>Copyright &copy; 2017, Viktar Vauchkevich</li>
39 40 <li>Copyright &copy; 2012&ndash;2016, Takumi IINO</li>
40 41 <li>Copyright &copy; 2015&ndash;2016, SΓΈren LΓΈvborg</li>
41 42 <li>Copyright &copy; 2016, Anton Shestakov</li>
42 43 <li>Copyright &copy; 2016, Brandon Jones</li>
43 44 <li>Copyright &copy; 2016, Konstantin Veretennicov</li>
44 45 <li>Copyright &copy; 2016, Robert James Dennington</li>
45 46 <li>Copyright &copy; 2012&ndash;2013, 2015, Aras Pranckevičius</li>
46 47 <li>Copyright &copy; 2014&ndash;2015, Christian Oyarzun</li>
47 48 <li>Copyright &copy; 2014&ndash;2015, Joseph Rivera</li>
48 49 <li>Copyright &copy; 2014&ndash;2015, Michal ČihaΕ™</li>
49 50 <li>Copyright &copy; 2014&ndash;2015, Sean Farley</li>
50 51 <li>Copyright &copy; 2015, Anatoly Bubenkov</li>
51 52 <li>Copyright &copy; 2015, Andrew Bartlett</li>
52 53 <li>Copyright &copy; 2015, BalÑzs Úr</li>
53 54 <li>Copyright &copy; 2015, Ben Finney</li>
54 <li>Copyright &copy; 2015, Branko Majic</li>
55 55 <li>Copyright &copy; 2015, Daniel Hobley</li>
56 56 <li>Copyright &copy; 2015, David Avigni</li>
57 57 <li>Copyright &copy; 2015, Denis Blanchette</li>
58 58 <li>Copyright &copy; 2015, duanhongyi</li>
59 59 <li>Copyright &copy; 2015, EriCSN Chang</li>
60 60 <li>Copyright &copy; 2015, Γ‰tienne Gilli</li>
61 61 <li>Copyright &copy; 2015, Grzegorz Krason</li>
62 62 <li>Copyright &copy; 2015, Jan Heylen</li>
63 63 <li>Copyright &copy; 2015, Kazunari Kobayashi</li>
64 64 <li>Copyright &copy; 2015, Kevin Bullock</li>
65 65 <li>Copyright &copy; 2015, kobanari</li>
66 66 <li>Copyright &copy; 2015, Marc Abramowitz</li>
67 67 <li>Copyright &copy; 2015, Marc Villetard</li>
68 68 <li>Copyright &copy; 2015, Matthias Zilk</li>
69 69 <li>Copyright &copy; 2015, Michael Pohl</li>
70 70 <li>Copyright &copy; 2015, Michael V. DePalatis</li>
71 71 <li>Copyright &copy; 2015, Morten Skaaning</li>
72 72 <li>Copyright &copy; 2015, Nick High</li>
73 73 <li>Copyright &copy; 2015, Niemand Jedermann</li>
74 74 <li>Copyright &copy; 2015, Peter Vitt</li>
75 75 <li>Copyright &copy; 2015, Robert Martinez</li>
76 76 <li>Copyright &copy; 2015, Robert Rauch</li>
77 77 <li>Copyright &copy; 2015, Ronny Pfannschmidt</li>
78 78 <li>Copyright &copy; 2015, Tuux</li>
79 79 <li>Copyright &copy; 2015, Viktar Palstsiuk</li>
80 80 <li>Copyright &copy; 2014, Bradley M. Kuhn</li>
81 81 <li>Copyright &copy; 2014, Calinou</li>
82 82 <li>Copyright &copy; 2014, Daniel Anderson</li>
83 83 <li>Copyright &copy; 2014, Henrik Stuart</li>
84 84 <li>Copyright &copy; 2014, Ingo von Borstel</li>
85 85 <li>Copyright &copy; 2014, Jelmer VernooΔ³</li>
86 86 <li>Copyright &copy; 2014, Jim Hague</li>
87 87 <li>Copyright &copy; 2014, Matt Fellows</li>
88 88 <li>Copyright &copy; 2014, Max Roman</li>
89 89 <li>Copyright &copy; 2014, Na'Tosha Bard</li>
90 90 <li>Copyright &copy; 2014, Rasmus Selsmark</li>
91 91 <li>Copyright &copy; 2014, Tim Freund</li>
92 92 <li>Copyright &copy; 2014, Travis Burtrum</li>
93 93 <li>Copyright &copy; 2014, Zoltan Gyarmati</li>
94 94 <li>Copyright &copy; 2010&ndash;2013, Marcin KuΕΊmiΕ„ski</li>
95 95 <li>Copyright &copy; 2010&ndash;2013, RhodeCode GmbH</li>
96 96 <li>Copyright &copy; 2011, 2013, Aparkar</li>
97 97 <li>Copyright &copy; 2012&ndash;2013, xpol</li>
98 98 <li>Copyright &copy; 2013, Dennis Brakhane</li>
99 99 <li>Copyright &copy; 2013, Grzegorz RoΕΌniecki</li>
100 100 <li>Copyright &copy; 2013, Jonathan Sternberg</li>
101 101 <li>Copyright &copy; 2013, Leonardo Carneiro</li>
102 102 <li>Copyright &copy; 2013, Magnus Ericmats</li>
103 103 <li>Copyright &copy; 2013, Martin Vium</li>
104 104 <li>Copyright &copy; 2013, Simon Lopez</li>
105 105 <li>Copyright &copy; 2011&ndash;2012, Augusto Herrmann</li>
106 106 <li>Copyright &copy; 2012, Dan Sheridan</li>
107 107 <li>Copyright &copy; 2012, H Waldo G</li>
108 108 <li>Copyright &copy; 2012, hppj</li>
109 109 <li>Copyright &copy; 2012, Indra Talip</li>
110 110 <li>Copyright &copy; 2012, mikespook</li>
111 111 <li>Copyright &copy; 2012, nansenat16</li>
112 112 <li>Copyright &copy; 2012, Philip Jameson</li>
113 113 <li>Copyright &copy; 2012, Raoul Thill</li>
114 114 <li>Copyright &copy; 2012, Tony Bussieres</li>
115 115 <li>Copyright &copy; 2012, Vincent Duvert</li>
116 116 <li>Copyright &copy; 2012, Vladislav Poluhin</li>
117 117 <li>Copyright &copy; 2012, Zachary Auclair</li>
118 118 <li>Copyright &copy; 2011, Ankit Solanki</li>
119 119 <li>Copyright &copy; 2011, Dmitri Kuznetsov</li>
120 120 <li>Copyright &copy; 2011, Jared Bunting</li>
121 121 <li>Copyright &copy; 2011, Jason Harris</li>
122 122 <li>Copyright &copy; 2011, Les Peabody</li>
123 123 <li>Copyright &copy; 2011, Liad Shani</li>
124 124 <li>Copyright &copy; 2011, Lorenzo M. Catucci</li>
125 125 <li>Copyright &copy; 2011, Matt Zuba</li>
126 126 <li>Copyright &copy; 2011, Nicolas VINOT</li>
127 127 <li>Copyright &copy; 2011, Shawn K. O'Shea</li>
128 128 <li>Copyright &copy; 2010, Łukasz Balcerzak</li>
129 129
130 130 ## We did not list the following copyright holders, given that they appeared
131 131 ## to use for-profit company affiliations in their contribution in the
132 132 ## Mercurial log and therefore I didn't know if copyright was theirs or
133 133 ## their company's.
134 134 ## Copyright &copy; 2011 Thayne Harbaugh <thayne@fusionio.com>
135 135 ## Copyright &copy; 2012 Dies Koper <diesk@fast.au.fujitsu.com>
136 136 ## Copyright &copy; 2012 Erwin Kroon <e.kroon@smartmetersolutions.nl>
137 137 ## Copyright &copy; 2012 Vincent Caron <vcaron@bearstech.com>
138 138 ##
139 139 ## These contributors' contributions may not be copyrightable:
140 140 ## philip.j@hostdime.com in 2012
141 141 ## Stefan Engel <mail@engel-stefan.de> in 2012
142 142 ## Ton Plomp <tcplomp@gmail.com> in 2013
143 143 ##
144 144 </ul></p>
145 145
146 146 <p>The above are the copyright holders who have submitted direct
147 147 contributions to the Kallithea repository. In
148 148 the <a href="https://kallithea-scm.org/repos/kallithea">Kallithea source
149 149 code</a>, there is
150 150 a <a href="https://kallithea-scm.org/repos/kallithea/files/tip/LICENSE.md">list
151 151 of third-party libraries and code that Kallithea incorporates</a>.</p>
152 152
153 153 </div>
154 154
155 155 </%def>
@@ -1,592 +1,592 b''
1 1 ## -*- coding: utf-8 -*-
2 2 <%inherit file="root.html"/>
3 3
4 4 <!-- CONTENT -->
5 5 <div id="content">
6 6 ${self.flash_msg()}
7 7 <div id="main">
8 8 ${next.main()}
9 9 </div>
10 10 </div>
11 11 <!-- END CONTENT -->
12 12
13 13 <!-- FOOTER -->
14 14 <div id="footer">
15 15 <div id="footer-inner" class="title">
16 16 <div>
17 17 <p class="footer-link">
18 18 ${_('Server instance: %s') % c.instance_id if c.instance_id else ''}
19 19 </p>
20 20 <p class="footer-link-right">
21 21 This site is powered by
22 22 %if c.visual.show_version:
23 23 <a href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a> ${c.kallithea_version},
24 24 %else:
25 25 <a href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a>,
26 26 %endif
27 27 which is
28 <a href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2017 by various authors &amp; licensed under GPLv3</a>.
28 <a href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2018 by various authors &amp; licensed under GPLv3</a>.
29 29 %if c.issues_url:
30 30 &ndash; <a href="${c.issues_url}" target="_blank">${_('Support')}</a>
31 31 %endif
32 32 </p>
33 33 </div>
34 34 </div>
35 35 </div>
36 36
37 37 <!-- END FOOTER -->
38 38
39 39 ### MAKO DEFS ###
40 40
41 41 <%block name="branding_title">
42 42 %if c.site_name:
43 43 &middot; ${c.site_name}
44 44 %endif
45 45 </%block>
46 46
47 47 <%def name="flash_msg()">
48 48 <%include file="/base/flash_msg.html"/>
49 49 </%def>
50 50
51 51 <%def name="breadcrumbs()">
52 52 <div class="breadcrumbs">
53 53 ${self.breadcrumbs_links()}
54 54 </div>
55 55 </%def>
56 56
57 57 <%def name="admin_menu()">
58 58 <ul class="admin_menu">
59 59 <li><a href="${h.url('admin_home')}"><i class="icon-book"></i> ${_('Admin Journal')}</a></li>
60 60 <li><a href="${h.url('repos')}"><i class="icon-database"></i> ${_('Repositories')}</a></li>
61 61 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i> ${_('Repository Groups')}</a></li>
62 62 <li><a href="${h.url('users')}"><i class="icon-user"></i> ${_('Users')}</a></li>
63 63 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i> ${_('User Groups')}</a></li>
64 64 <li><a href="${h.url('admin_permissions')}"><i class="icon-block"></i> ${_('Default Permissions')}</a></li>
65 65 <li><a href="${h.url('auth_home')}"><i class="icon-key"></i> ${_('Authentication')}</a></li>
66 66 <li><a href="${h.url('defaults')}"><i class="icon-wrench"></i> ${_('Repository Defaults')}</a></li>
67 67 <li class="last"><a href="${h.url('admin_settings')}"><i class="icon-gear"></i> ${_('Settings')}</a></li>
68 68 </ul>
69 69
70 70 </%def>
71 71
72 72
73 73 ## admin menu used for people that have some admin resources
74 74 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
75 75 <ul>
76 76 %if repositories:
77 77 <li><a href="${h.url('repos')}"><i class="icon-database"></i> ${_('Repositories')}</a></li>
78 78 %endif
79 79 %if repository_groups:
80 80 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i> ${_('Repository Groups')}</a></li>
81 81 %endif
82 82 %if user_groups:
83 83 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i> ${_('User Groups')}</a></li>
84 84 %endif
85 85 </ul>
86 86 </%def>
87 87
88 88 <%def name="repotag(repo)">
89 89 %if h.is_hg(repo):
90 90 <span class="repotag" title="${_('Mercurial repository')}">hg</span>
91 91 %endif
92 92 %if h.is_git(repo):
93 93 <span class="repotag" title="${_('Git repository')}">git</span>
94 94 %endif
95 95 </%def>
96 96
97 97 <%def name="repo_context_bar(current=None, rev=None)">
98 98 <% rev = None if rev == 'tip' else rev %>
99 99 <%
100 100 def is_current(selected):
101 101 if selected == current:
102 102 return h.literal('class="current"')
103 103 %>
104 104
105 105 <!--- CONTEXT BAR -->
106 106 <div id="context-bar" class="box">
107 107 <h2>
108 108 ${repotag(c.db_repo)}
109 109
110 110 ## public/private
111 111 %if c.db_repo.private:
112 112 <i class="icon-keyhole-circled"></i>
113 113 %else:
114 114 <i class="icon-globe"></i>
115 115 %endif
116 116 ${h.repo_link(c.db_repo.groups_and_repo)}
117 117
118 118 %if current == 'createfork':
119 119 - ${_('Create Fork')}
120 120 %endif
121 121 </h2>
122 122 <!--
123 123 <div id="breadcrumbs">
124 124 ${h.link_to(_('Repositories'),h.url('home'))}
125 125 &raquo;
126 126 ${h.repo_link(c.db_repo.groups_and_repo)}
127 127 </div>
128 128 -->
129 129 <ul id="context-pages" class="horizontal-list">
130 130 <li ${is_current('summary')}><a href="${h.url('summary_home', repo_name=c.repo_name)}"><i class="icon-doc-text"></i> ${_('Summary')}</a></li>
131 131 %if rev:
132 132 <li ${is_current('changelog')}><a href="${h.url('changelog_file_home', repo_name=c.repo_name, revision=rev, f_path='')}"><i class="icon-clock"></i> ${_('Changelog')}</a></li>
133 133 %else:
134 134 <li ${is_current('changelog')}><a href="${h.url('changelog_home', repo_name=c.repo_name)}"><i class="icon-clock"></i> ${_('Changelog')}</a></li>
135 135 %endif
136 136 <li ${is_current('files')}><a href="${h.url('files_home', repo_name=c.repo_name, revision=rev or 'tip')}"><i class="icon-doc-inv"></i> ${_('Files')}</a></li>
137 137 <li ${is_current('switch-to')}>
138 138 <a href="#" id="branch_tag_switcher_2" class="dropdown"><i class="icon-exchange"></i> ${_('Switch To')}</a>
139 139 <ul id="switch_to_list_2" class="switch_to submenu">
140 140 <li><a href="#">${_('Loading...')}</a></li>
141 141 </ul>
142 142 </li>
143 143 <li ${is_current('options')}>
144 144 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
145 145 <a href="${h.url('edit_repo',repo_name=c.repo_name)}" class="dropdown"><i class="icon-wrench"></i> ${_('Options')}</a>
146 146 %else:
147 147 <a href="#" class="dropdown"><i class="icon-wrench"></i> ${_('Options')}</a>
148 148 %endif
149 149 <ul>
150 150 %if h.HasRepoPermissionAll('repository.admin')(c.repo_name):
151 151 <li><a href="${h.url('edit_repo',repo_name=c.repo_name)}"><i class="icon-gear"></i> ${_('Settings')}</a></li>
152 152 %endif
153 153 %if c.db_repo.fork:
154 154 <li><a href="${h.url('compare_url',repo_name=c.db_repo.fork.repo_name,org_ref_type=c.db_repo.landing_rev[0],org_ref_name=c.db_repo.landing_rev[1], other_repo=c.repo_name,other_ref_type='branch' if request.GET.get('branch') else c.db_repo.landing_rev[0],other_ref_name=request.GET.get('branch') or c.db_repo.landing_rev[1], merge=1)}">
155 155 <i class="icon-git-compare"></i> ${_('Compare Fork')}</a></li>
156 156 %endif
157 157 <li><a href="${h.url('compare_home',repo_name=c.repo_name)}"><i class="icon-git-compare"></i> ${_('Compare')}</a></li>
158 158
159 159 <li><a href="${h.url('search_repo',repo_name=c.repo_name)}"><i class="icon-search"></i> ${_('Search')}</a></li>
160 160
161 161 %if h.HasRepoPermissionAny('repository.write','repository.admin')(c.repo_name) and c.db_repo.enable_locking:
162 162 %if c.db_repo.locked[0]:
163 163 <li><a href="${h.url('toggle_locking', repo_name=c.repo_name)}"><i class="icon-lock"></i> ${_('Unlock')}</a></li>
164 164 %else:
165 165 <li><a href="${h.url('toggle_locking', repo_name=c.repo_name)}"><i class="icon-lock-open-alt"></i> ${_('Lock')}</li>
166 166 %endif
167 167 %endif
168 168 ## TODO: this check feels wrong, it would be better to have a check for permissions
169 169 ## also it feels like a job for the controller
170 170 %if c.authuser.username != 'default':
171 171 <li>
172 172 <a class="${'following' if c.repository_following else 'follow'}" onclick="toggleFollowingRepo(this, ${c.db_repo.repo_id});">
173 173 <span class="show-follow"><i class="icon-heart-empty"></i> ${_('Follow')}</span>
174 174 <span class="show-following"><i class="icon-heart"></i> ${_('Unfollow')}</span>
175 175 </a>
176 176 </li>
177 177 <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}"><i class="icon-git-pull-request"></i> ${_('Fork')}</a></li>
178 178 <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}"><i class="icon-git-pull-request"></i> ${_('Create Pull Request')}</a></li>
179 179 %endif
180 180 </ul>
181 181 </li>
182 182 <li ${is_current('showpullrequest')}>
183 183 <a href="${h.url('pullrequest_show_all',repo_name=c.repo_name)}" title="${_('Show Pull Requests for %s') % c.repo_name}"> <i class="icon-git-pull-request"></i> ${_('Pull Requests')}
184 184 %if c.repository_pull_requests:
185 185 <span>${c.repository_pull_requests}</span>
186 186 %endif
187 187 </a>
188 188 </li>
189 189 </ul>
190 190 </div>
191 191 <script type="text/javascript">
192 192 YUE.on('branch_tag_switcher_2','mouseover',function(){
193 193 var $branch_tag_switcher_2 = $('#branch_tag_switcher_2');
194 194 var loaded = $branch_tag_switcher_2.hasClass('loaded');
195 195 if(!loaded){
196 196 $branch_tag_switcher_2.addClass('loaded');
197 197 asynchtml("${h.url('branch_tag_switcher',repo_name=c.repo_name)}", $('#switch_to_list_2'));
198 198 }
199 199 return false;
200 200 });
201 201 </script>
202 202 <!--- END CONTEXT BAR -->
203 203 </%def>
204 204
205 205 <%def name="menu(current=None)">
206 206 <%
207 207 def is_current(selected):
208 208 if selected == current:
209 209 return h.literal('class="current"')
210 210 %>
211 211
212 212 <ul id="quick" class="horizontal-list">
213 213 <!-- repo switcher -->
214 214 <li ${is_current('repositories')}>
215 215 <input id="repo_switcher" name="repo_switcher" type="hidden">
216 216 </li>
217 217
218 218 ##ROOT MENU
219 219 %if c.authuser.username != 'default':
220 220 <li ${is_current('journal')}>
221 221 <a class="menu_link" title="${_('Show recent activity')}" href="${h.url('journal')}">
222 222 <i class="icon-book"></i> ${_('Journal')}
223 223 </a>
224 224 </li>
225 225 %else:
226 226 <li ${is_current('journal')}>
227 227 <a class="menu_link" title="${_('Public journal')}" href="${h.url('public_journal')}">
228 228 <i class="icon-book"></i> ${_('Public journal')}
229 229 </a>
230 230 </li>
231 231 %endif
232 232 <li ${is_current('gists')}>
233 233 <a class="menu_link childs" title="${_('Show public gists')}" href="${h.url('gists')}">
234 234 <i class="icon-clippy"></i> ${_('Gists')}
235 235 </a>
236 236 <ul class="admin_menu">
237 237 <li><a href="${h.url('new_gist', public=1)}"><i class="icon-paste"></i> ${_('Create New Gist')}</a></li>
238 238 <li><a href="${h.url('gists')}"><i class="icon-globe"></i> ${_('All Public Gists')}</a></li>
239 239 %if c.authuser.username != 'default':
240 240 <li><a href="${h.url('gists', public=1)}"><i class="icon-user"></i> ${_('My Public Gists')}</a></li>
241 241 <li><a href="${h.url('gists', private=1)}"><i class="icon-keyhole-circled"></i> ${_('My Private Gists')}</a></li>
242 242 %endif
243 243 </ul>
244 244 </li>
245 245 <li ${is_current('search')}>
246 246 <a class="menu_link" title="${_('Search in repositories')}" href="${h.url('search')}">
247 247 <i class="icon-search"></i> ${_('Search')}
248 248 </a>
249 249 </li>
250 250 % if h.HasPermissionAll('hg.admin')('access admin main page'):
251 251 <li ${is_current('admin')}>
252 252 <a class="menu_link childs" title="${_('Admin')}" href="${h.url('admin_home')}">
253 253 <i class="icon-gear"></i> ${_('Admin')}
254 254 </a>
255 255 ${admin_menu()}
256 256 </li>
257 257 % elif c.authuser.repositories_admin or c.authuser.repository_groups_admin or c.authuser.user_groups_admin:
258 258 <li ${is_current('admin')}>
259 259 <a class="menu_link childs" title="${_('Admin')}">
260 260 <i class="icon-gear"></i> ${_('Admin')}
261 261 </a>
262 262 ${admin_menu_simple(c.authuser.repositories_admin,
263 263 c.authuser.repository_groups_admin,
264 264 c.authuser.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
265 265 </li>
266 266 % endif
267 267
268 268 <li ${is_current('my_pullrequests')}>
269 269 <a class="menu_link" title="${_('My Pull Requests')}" href="${h.url('my_pullrequests')}">
270 270 <i class="icon-git-pull-request"></i> ${_('My Pull Requests')}
271 271 %if c.my_pr_count != 0:
272 272 <span class="menu_link_notifications">${c.my_pr_count}</span>
273 273 %endif
274 274 </a>
275 275 </li>
276 276
277 277 ## USER MENU
278 278 <li>
279 279 <a class="menu_link childs" id="quick_login_link">
280 280 <span class="icon">
281 281 ${h.gravatar(c.authuser.email, size=20)}
282 282 </span>
283 283 %if c.authuser.username != 'default':
284 284 <span class="menu_link_user">${c.authuser.username}</span>
285 285 %if c.unread_notifications != 0:
286 286 <span class="menu_link_notifications">${c.unread_notifications}</span>
287 287 %endif
288 288 %else:
289 289 <span>${_('Not Logged In')}</span>
290 290 %endif
291 291 </a>
292 292
293 293 <div class="user-menu">
294 294 <div id="quick_login">
295 295 %if c.authuser.username == 'default' or c.authuser.user_id is None:
296 296 <h4>${_('Login to Your Account')}</h4>
297 297 ${h.form(h.url('login_home', came_from=request.path_qs))}
298 298 <div class="form">
299 299 <div class="fields">
300 300 <div class="field">
301 301 <div class="label">
302 302 <label for="username">${_('Username')}:</label>
303 303 </div>
304 304 <div class="input">
305 305 ${h.text('username',class_='focus')}
306 306 </div>
307 307
308 308 </div>
309 309 <div class="field">
310 310 <div class="label">
311 311 <label for="password">${_('Password')}:</label>
312 312 </div>
313 313 <div class="input">
314 314 ${h.password('password',class_='focus')}
315 315 </div>
316 316
317 317 </div>
318 318 <div class="buttons">
319 319 <div class="password_forgoten">${h.link_to(_('Forgot password ?'),h.url('reset_password'))}</div>
320 320 <div class="register">
321 321 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
322 322 ${h.link_to(_("Don't have an account ?"),h.url('register'))}
323 323 %endif
324 324 </div>
325 325 <div class="submit">
326 326 ${h.submit('sign_in',_('Log In'),class_="btn btn-mini")}
327 327 </div>
328 328 </div>
329 329 </div>
330 330 </div>
331 331 ${h.end_form()}
332 332 %else:
333 333 <div class="links_left">
334 334 <div class="big_gravatar">
335 335 ${h.gravatar(c.authuser.email, size=48)}
336 336 </div>
337 337 <div class="full_name">${c.authuser.full_name_or_username}</div>
338 338 <div class="email">${c.authuser.email}</div>
339 339 </div>
340 340 <div class="links_right">
341 341 <ol class="links">
342 342 <li><a href="${h.url('notifications')}">${_('Notifications')}: ${c.unread_notifications}</a></li>
343 343 <li>${h.link_to(_('My Account'),h.url('my_account'))}</li>
344 344 %if not c.authuser.is_external_auth:
345 345 ## Cannot log out if using external (container) authentication.
346 346 <li class="logout">${h.link_to(_('Log Out'), h.url('logout_home'))}</li>
347 347 %endif
348 348 </ol>
349 349 </div>
350 350 %endif
351 351 </div>
352 352 </div>
353 353 </li>
354 354
355 355 <script type="text/javascript">
356 356 var visual_show_public_icon = "${c.visual.show_public_icon}" == "True";
357 357 var cache = {}
358 358 /*format the look of items in the list*/
359 359 var format = function(state){
360 360 if (!state.id){
361 361 return state.text; // optgroup
362 362 }
363 363 var obj_dict = state.obj;
364 364 var tmpl = '';
365 365
366 366 if(obj_dict && state.type == 'repo'){
367 367 tmpl += '<span class="repo-icons">';
368 368 if(obj_dict['repo_type'] === 'hg'){
369 369 tmpl += '<span class="repotag">hg</span> ';
370 370 }
371 371 else if(obj_dict['repo_type'] === 'git'){
372 372 tmpl += '<span class="repotag">git</span> ';
373 373 }
374 374 if(obj_dict['private']){
375 375 tmpl += '<i class="icon-keyhole-circled"></i> ';
376 376 }
377 377 else if(visual_show_public_icon){
378 378 tmpl += '<i class="icon-globe"></i> ';
379 379 }
380 380 tmpl += '</span>';
381 381 }
382 382 if(obj_dict && state.type == 'group'){
383 383 tmpl += '<i class="icon-folder"></i> ';
384 384 }
385 385 tmpl += state.text;
386 386 return tmpl;
387 387 }
388 388
389 389 $("#repo_switcher").select2({
390 390 placeholder: '<i class="icon-database"></i> ${_('Repositories')}',
391 391 dropdownAutoWidth: true,
392 392 formatResult: format,
393 393 formatSelection: format,
394 394 formatNoMatches: function(term){
395 395 return "${_('No matches found')}";
396 396 },
397 397 containerCssClass: "repo-switcher",
398 398 dropdownCssClass: "repo-switcher-dropdown",
399 399 escapeMarkup: function(m){
400 400 // don't escape our custom placeholder
401 401 if(m.substr(0,29) == '<i class="icon-database"></i>'){
402 402 return m;
403 403 }
404 404
405 405 return Select2.util.escapeMarkup(m);
406 406 },
407 407 query: function(query){
408 408 var key = 'cache';
409 409 var cached = cache[key] ;
410 410 if(cached) {
411 411 var data = {results: []};
412 412 //filter results
413 413 $.each(cached.results, function(){
414 414 var section = this.text;
415 415 var children = [];
416 416 $.each(this.children, function(){
417 417 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
418 418 children.push({'id': this.id, 'text': this.text, 'type': this.type, 'obj': this.obj});
419 419 }
420 420 });
421 421 if(children.length !== 0){
422 422 data.results.push({'text': section, 'children': children});
423 423 }
424 424
425 425 });
426 426 query.callback(data);
427 427 }else{
428 428 $.ajax({
429 429 url: "${h.url('repo_switcher_data')}",
430 430 data: {},
431 431 dataType: 'json',
432 432 type: 'GET',
433 433 success: function(data) {
434 434 cache[key] = data;
435 435 query.callback({results: data.results});
436 436 }
437 437 });
438 438 }
439 439 }
440 440 });
441 441
442 442 $("#repo_switcher").on('select2-selecting', function(e){
443 443 e.preventDefault();
444 444 window.location = pyroutes.url('summary_home', {'repo_name': e.val});
445 445 });
446 446
447 447 ## Global mouse bindings ##
448 448
449 449 // general help "?"
450 450 Mousetrap.bind(['?'], function(e) {
451 451 $('#help_kb').modal({});
452 452 });
453 453
454 454 // / open the quick filter
455 455 Mousetrap.bind(['/'], function(e) {
456 456 $("#repo_switcher").select2("open");
457 457
458 458 // return false to prevent default browser behavior
459 459 // and stop event from bubbling
460 460 return false;
461 461 });
462 462
463 463 // ctrl/command+b, show the the main bar
464 464 Mousetrap.bind(['command+b', 'ctrl+b'], function(e) {
465 465 if($('#header-inner').hasClass('hover') && $('#content').hasClass('hover')){
466 466 $('#header-inner').removeClass('hover');
467 467 $('#content').removeClass('hover');
468 468 }
469 469 else{
470 470 $('#header-inner').addClass('hover');
471 471 $('#content').addClass('hover');
472 472 }
473 473 return false;
474 474 });
475 475
476 476 // general nav g + action
477 477 Mousetrap.bind(['g h'], function(e) {
478 478 window.location = pyroutes.url('home');
479 479 });
480 480 Mousetrap.bind(['g g'], function(e) {
481 481 window.location = pyroutes.url('gists', {'private':1});
482 482 });
483 483 Mousetrap.bind(['g G'], function(e) {
484 484 window.location = pyroutes.url('gists', {'public':1});
485 485 });
486 486 Mousetrap.bind(['n g'], function(e) {
487 487 window.location = pyroutes.url('new_gist');
488 488 });
489 489 Mousetrap.bind(['n r'], function(e) {
490 490 window.location = pyroutes.url('new_repo');
491 491 });
492 492
493 493 % if hasattr(c, 'repo_name') and hasattr(c, 'db_repo'):
494 494 // nav in repo context
495 495 Mousetrap.bind(['g s'], function(e) {
496 496 window.location = pyroutes.url('summary_home', {'repo_name': REPO_NAME});
497 497 });
498 498 Mousetrap.bind(['g c'], function(e) {
499 499 window.location = pyroutes.url('changelog_home', {'repo_name': REPO_NAME});
500 500 });
501 501 Mousetrap.bind(['g F'], function(e) {
502 502 window.location = pyroutes.url('files_home', {'repo_name': REPO_NAME, 'revision': '${c.db_repo.landing_rev[1]}', 'f_path': '', 'search': '1'});
503 503 });
504 504 Mousetrap.bind(['g f'], function(e) {
505 505 window.location = pyroutes.url('files_home', {'repo_name': REPO_NAME, 'revision': '${c.db_repo.landing_rev[1]}', 'f_path': ''});
506 506 });
507 507 Mousetrap.bind(['g o'], function(e) {
508 508 window.location = pyroutes.url('edit_repo', {'repo_name': REPO_NAME});
509 509 });
510 510 Mousetrap.bind(['g O'], function(e) {
511 511 window.location = pyroutes.url('edit_repo_perms', {'repo_name': REPO_NAME});
512 512 });
513 513 % endif
514 514
515 515 </script>
516 516 </%def>
517 517
518 518 %if 0:
519 519 <div class="modal" id="help_kb" tabindex="-1" role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
520 520 <div class="modal-dialog">
521 521 <div class="modal-content">
522 522 <div class="modal-header">
523 523 <button type="button" class="close" data-dismiss="modal" aria-hidden="true"><i class="icon-cancel-circled"></i></button>
524 524 <h4 class="modal-title">${_('Keyboard shortcuts')}</h4>
525 525 </div>
526 526 <div class="modal-body">
527 527 <div class="row">
528 528 <div class="col-md-5">
529 529 <table class="keyboard-mappings">
530 530 <tbody>
531 531 <tr>
532 532 <th></th>
533 533 <th>${_('Site-wide shortcuts')}</th>
534 534 </tr>
535 535 <%
536 536 elems = [
537 537 ('/', 'Open quick search box'),
538 538 ('ctrl/cmd+b', 'Show main settings bar'),
539 539 ('g h', 'Goto home page'),
540 540 ('g g', 'Goto my private gists page'),
541 541 ('g G', 'Goto my public gists page'),
542 542 ('n r', 'New repository page'),
543 543 ('n g', 'New gist page'),
544 544 ]
545 545 %>
546 546 %for key, desc in elems:
547 547 <tr>
548 548 <td class="keys">
549 549 <span class="key">${key}</span>
550 550 </td>
551 551 <td>${desc}</td>
552 552 </tr>
553 553 %endfor
554 554 </tbody>
555 555 </table>
556 556 </div>
557 557 <div class="col-md-offset-5">
558 558 <table class="keyboard-mappings">
559 559 <tbody>
560 560 <tr>
561 561 <th></th>
562 562 <th>${_('Repositories')}</th>
563 563 </tr>
564 564 <%
565 565 elems = [
566 566 ('g s', 'Goto summary page'),
567 567 ('g c', 'Goto changelog page'),
568 568 ('g f', 'Goto files page'),
569 569 ('g F', 'Goto files page with file search activated'),
570 570 ('g o', 'Goto repository settings'),
571 571 ('g O', 'Goto repository permissions settings'),
572 572 ]
573 573 %>
574 574 %for key, desc in elems:
575 575 <tr>
576 576 <td class="keys">
577 577 <span class="key">${key}</span>
578 578 </td>
579 579 <td>${desc}</td>
580 580 </tr>
581 581 %endfor
582 582 </tbody>
583 583 </table>
584 584 </div>
585 585 </div>
586 586 </div>
587 587 <div class="modal-footer">
588 588 </div>
589 589 </div><!-- /.modal-content -->
590 590 </div><!-- /.modal-dialog -->
591 591 </div><!-- /.modal -->
592 592 %endif
General Comments 0
You need to be logged in to leave comments. Login now