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