##// END OF EJS Templates
meta: update copyrights
Mads Kiilerich -
r8761:55715fe0 stable
parent child Browse files
Show More
@@ -1,193 +1,194 b''
1 List of contributors to Kallithea project:
1 List of contributors to Kallithea project:
2
2
3 Mads Kiilerich <mads@kiilerich.com> 2016-2022
3 Mads Kiilerich <mads@kiilerich.com> 2016-2023
4 Manuel Jacob <me@manueljacob.de> 2019-2020 2022-2023
5 Mathias De Mare <mathias.de_mare@nokia.com> 2023
4 Asterios Dimitriou <steve@pci.gr> 2016-2017 2020 2022
6 Asterios Dimitriou <steve@pci.gr> 2016-2017 2020 2022
5 Manuel Jacob <me@manueljacob.de> 2019-2020 2022
6 Jaime MarquΓ­nez FerrΓ‘ndiz <weblate@jregistros.fastmail.net> 2022
7 Jaime MarquΓ­nez FerrΓ‘ndiz <weblate@jregistros.fastmail.net> 2022
7 Louis Bertrand <louis.bertrand@durhamcollege.ca> 2022
8 Louis Bertrand <louis.bertrand@durhamcollege.ca> 2022
8 toras9000 <toras9000@gmail.com> 2022
9 toras9000 <toras9000@gmail.com> 2022
9 yzqzss <yzqzss@othing.xyz> 2022
10 yzqzss <yzqzss@othing.xyz> 2022
10 МАН69К <weblate@mah69k.net> 2022
11 МАН69К <weblate@mah69k.net> 2022
11 Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> 2014-2021
12 Thomas De Schampheleire <thomas.de_schampheleire@nokia.com> 2014-2021
12 ssantos <ssantos@web.de> 2018-2021
13 ssantos <ssantos@web.de> 2018-2021
13 Private <adamantine.sword@gmail.com> 2019-2021
14 Private <adamantine.sword@gmail.com> 2019-2021
14 Γ‰tienne Gilli <etienne@gilli.io> 2020-2021
15 Γ‰tienne Gilli <etienne@gilli.io> 2020-2021
15 fresh <fresh190@protonmail.com> 2020-2021
16 fresh <fresh190@protonmail.com> 2020-2021
16 robertus <robertuss12@gmail.com> 2020-2021
17 robertus <robertuss12@gmail.com> 2020-2021
17 Eugenia Russell <eugenia.russell2019@gmail.com> 2021
18 Eugenia Russell <eugenia.russell2019@gmail.com> 2021
18 Michalis <michalisntovas@yahoo.gr> 2021
19 Michalis <michalisntovas@yahoo.gr> 2021
19 vs <vsuhachev@yandex.ru> 2021
20 vs <vsuhachev@yandex.ru> 2021
20 АлСксандр <akonn7@mail.ru> 2021
21 АлСксандр <akonn7@mail.ru> 2021
21 Allan NordhΓΈy <epost@anotheragency.no> 2017-2020
22 Allan NordhΓΈy <epost@anotheragency.no> 2017-2020
22 Anton Schur <tonich.sh@gmail.com> 2017 2020
23 Anton Schur <tonich.sh@gmail.com> 2017 2020
23 Artem <kovalevartem.ru@gmail.com> 2020
24 Artem <kovalevartem.ru@gmail.com> 2020
24 David Ignjić <ignjic@gmail.com> 2020
25 David Ignjić <ignjic@gmail.com> 2020
25 Dennis Fink <dennis.fink@c3l.lu> 2020
26 Dennis Fink <dennis.fink@c3l.lu> 2020
26 J. Lavoie <j.lavoie@net-c.ca> 2020
27 J. Lavoie <j.lavoie@net-c.ca> 2020
27 Ross Thomas <ross@lns-nevasoft.com> 2020
28 Ross Thomas <ross@lns-nevasoft.com> 2020
28 Tim Ooms <tatankat@users.noreply.github.com> 2020
29 Tim Ooms <tatankat@users.noreply.github.com> 2020
29 Andrej Shadura <andrew@shadura.me> 2012 2014-2017 2019
30 Andrej Shadura <andrew@shadura.me> 2012 2014-2017 2019
30 Γ‰tienne Gilli <etienne.gilli@gmail.com> 2015-2017 2019
31 Γ‰tienne Gilli <etienne.gilli@gmail.com> 2015-2017 2019
31 Adi Kriegisch <adi@cg.tuwien.ac.at> 2019
32 Adi Kriegisch <adi@cg.tuwien.ac.at> 2019
32 Danni Randeris <danniranderis@gmail.com> 2019
33 Danni Randeris <danniranderis@gmail.com> 2019
33 Edmund Wong <ewong@crazy-cat.org> 2019
34 Edmund Wong <ewong@crazy-cat.org> 2019
34 Elizabeth Sherrock <lizzyd710@gmail.com> 2019
35 Elizabeth Sherrock <lizzyd710@gmail.com> 2019
35 Hüseyin Tunç <huseyin.tunc@bulutfon.com> 2019
36 Hüseyin Tunç <huseyin.tunc@bulutfon.com> 2019
36 leela <53352@protonmail.com> 2019
37 leela <53352@protonmail.com> 2019
37 Mateusz Mendel <mendelm9@gmail.com> 2019
38 Mateusz Mendel <mendelm9@gmail.com> 2019
38 Nathan <bonnemainsnathan@gmail.com> 2019
39 Nathan <bonnemainsnathan@gmail.com> 2019
39 Oleksandr Shtalinberg <o.shtalinberg@gmail.com> 2019
40 Oleksandr Shtalinberg <o.shtalinberg@gmail.com> 2019
40 THANOS SIOURDAKIS <siourdakisthanos@gmail.com> 2019
41 THANOS SIOURDAKIS <siourdakisthanos@gmail.com> 2019
41 Wolfgang Scherer <wolfgang.scherer@gmx.de> 2019
42 Wolfgang Scherer <wolfgang.scherer@gmx.de> 2019
42 Π₯ристо Π‘Ρ‚Π°Π½Π΅Π² <hstanev@gmail.com> 2019
43 Π₯ристо Π‘Ρ‚Π°Π½Π΅Π² <hstanev@gmail.com> 2019
43 Dominik Ruf <dominikruf@gmail.com> 2012 2014-2018
44 Dominik Ruf <dominikruf@gmail.com> 2012 2014-2018
44 Michal ČihaΕ™ <michal@cihar.com> 2014-2015 2018
45 Michal ČihaΕ™ <michal@cihar.com> 2014-2015 2018
45 Branko Majic <branko@majic.rs> 2015 2018
46 Branko Majic <branko@majic.rs> 2015 2018
46 Chris Rule <crule@aegistg.com> 2018
47 Chris Rule <crule@aegistg.com> 2018
47 JesΓΊs SΓ‘nchez <jsanchezfdz95@gmail.com> 2018
48 JesΓΊs SΓ‘nchez <jsanchezfdz95@gmail.com> 2018
48 Patrick Vane <patrick_vane@lowentry.com> 2018
49 Patrick Vane <patrick_vane@lowentry.com> 2018
49 Pheng Heong Tan <phtan90@gmail.com> 2018
50 Pheng Heong Tan <phtan90@gmail.com> 2018
50 Максим Π―ΠΊΠΈΠΌΡ‡ΡƒΠΊ <xpinovo@gmail.com> 2018
51 Максим Π―ΠΊΠΈΠΌΡ‡ΡƒΠΊ <xpinovo@gmail.com> 2018
51 ΠœΠ°Ρ€Ρ Π―ΠΌΠ±Π°Ρ€ <mjambarmeta@gmail.com> 2018
52 ΠœΠ°Ρ€Ρ Π―ΠΌΠ±Π°Ρ€ <mjambarmeta@gmail.com> 2018
52 Mads Kiilerich <madski@unity3d.com> 2012-2017
53 Mads Kiilerich <madski@unity3d.com> 2012-2017
53 Unity Technologies 2012-2017
54 Unity Technologies 2012-2017
54 SΓΈren LΓΈvborg <sorenl@unity3d.com> 2015-2017
55 SΓΈren LΓΈvborg <sorenl@unity3d.com> 2015-2017
55 Sam Jaques <sam.jaques@me.com> 2015 2017
56 Sam Jaques <sam.jaques@me.com> 2015 2017
56 Alessandro Molina <alessandro.molina@axant.it> 2017
57 Alessandro Molina <alessandro.molina@axant.it> 2017
57 Ching-Chen Mao <mao@lins.fju.edu.tw> 2017
58 Ching-Chen Mao <mao@lins.fju.edu.tw> 2017
58 Eivind Tagseth <eivindt@gmail.com> 2017
59 Eivind Tagseth <eivindt@gmail.com> 2017
59 FUJIWARA Katsunori <foozy@lares.dti.ne.jp> 2017
60 FUJIWARA Katsunori <foozy@lares.dti.ne.jp> 2017
60 Holger Schramm <info@schramm.by> 2017
61 Holger Schramm <info@schramm.by> 2017
61 Karl Goetz <karl@kgoetz.id.au> 2017
62 Karl Goetz <karl@kgoetz.id.au> 2017
62 Lars Kruse <devel@sumpfralle.de> 2017
63 Lars Kruse <devel@sumpfralle.de> 2017
63 Marko Semet <markosemet@googlemail.com> 2017
64 Marko Semet <markosemet@googlemail.com> 2017
64 Viktar Vauchkevich <victorenator@gmail.com> 2017
65 Viktar Vauchkevich <victorenator@gmail.com> 2017
65 Takumi IINO <trot.thunder@gmail.com> 2012-2016
66 Takumi IINO <trot.thunder@gmail.com> 2012-2016
66 Jan Heylen <heyleke@gmail.com> 2015-2016
67 Jan Heylen <heyleke@gmail.com> 2015-2016
67 Robert Martinez <ntttq@inboxen.org> 2015-2016
68 Robert Martinez <ntttq@inboxen.org> 2015-2016
68 Robert Rauch <mail@robertrauch.de> 2015-2016
69 Robert Rauch <mail@robertrauch.de> 2015-2016
69 Angel Ezquerra <angel.ezquerra@gmail.com> 2016
70 Angel Ezquerra <angel.ezquerra@gmail.com> 2016
70 Anton Shestakov <av6@dwimlabs.net> 2016
71 Anton Shestakov <av6@dwimlabs.net> 2016
71 Brandon Jones <bjones14@gmail.com> 2016
72 Brandon Jones <bjones14@gmail.com> 2016
72 Kateryna Musina <kateryna@unity3d.com> 2016
73 Kateryna Musina <kateryna@unity3d.com> 2016
73 Konstantin Veretennicov <kveretennicov@gmail.com> 2016
74 Konstantin Veretennicov <kveretennicov@gmail.com> 2016
74 Oscar Curero <oscar@naiandei.net> 2016
75 Oscar Curero <oscar@naiandei.net> 2016
75 Robert James Dennington <tinytimrob@googlemail.com> 2016
76 Robert James Dennington <tinytimrob@googlemail.com> 2016
76 timeless@gmail.com 2016
77 timeless@gmail.com 2016
77 YFdyh000 <yfdyh000@gmail.com> 2016
78 YFdyh000 <yfdyh000@gmail.com> 2016
78 Aras Pranckevičius <aras@unity3d.com> 2012-2013 2015
79 Aras Pranckevičius <aras@unity3d.com> 2012-2013 2015
79 Sean Farley <sean.michael.farley@gmail.com> 2013-2015
80 Sean Farley <sean.michael.farley@gmail.com> 2013-2015
80 Bradley M. Kuhn <bkuhn@sfconservancy.org> 2014-2015
81 Bradley M. Kuhn <bkuhn@sfconservancy.org> 2014-2015
81 Christian Oyarzun <oyarzun@gmail.com> 2014-2015
82 Christian Oyarzun <oyarzun@gmail.com> 2014-2015
82 Joseph Rivera <rivera.d.joseph@gmail.com> 2014-2015
83 Joseph Rivera <rivera.d.joseph@gmail.com> 2014-2015
83 Anatoly Bubenkov <bubenkoff@gmail.com> 2015
84 Anatoly Bubenkov <bubenkoff@gmail.com> 2015
84 Andrew Bartlett <abartlet@catalyst.net.nz> 2015
85 Andrew Bartlett <abartlet@catalyst.net.nz> 2015
85 BalÑzs Úr <urbalazs@gmail.com> 2015
86 BalÑzs Úr <urbalazs@gmail.com> 2015
86 Ben Finney <ben@benfinney.id.au> 2015
87 Ben Finney <ben@benfinney.id.au> 2015
87 Daniel Hobley <danielh@unity3d.com> 2015
88 Daniel Hobley <danielh@unity3d.com> 2015
88 David Avigni <david.avigni@ankapi.com> 2015
89 David Avigni <david.avigni@ankapi.com> 2015
89 Denis Blanchette <dblanchette@coveo.com> 2015
90 Denis Blanchette <dblanchette@coveo.com> 2015
90 duanhongyi <duanhongyi@doopai.com> 2015
91 duanhongyi <duanhongyi@doopai.com> 2015
91 EriCSN Chang <ericsning@gmail.com> 2015
92 EriCSN Chang <ericsning@gmail.com> 2015
92 Grzegorz Krason <grzegorz.krason@gmail.com> 2015
93 Grzegorz Krason <grzegorz.krason@gmail.com> 2015
93 JiΕ™Γ­ Suchan <yed@vanyli.net> 2015
94 JiΕ™Γ­ Suchan <yed@vanyli.net> 2015
94 Kazunari Kobayashi <kobanari@nifty.com> 2015
95 Kazunari Kobayashi <kobanari@nifty.com> 2015
95 Kevin Bullock <kbullock@ringworld.org> 2015
96 Kevin Bullock <kbullock@ringworld.org> 2015
96 kobanari <kobanari@nifty.com> 2015
97 kobanari <kobanari@nifty.com> 2015
97 Marc Abramowitz <marc@marc-abramowitz.com> 2015
98 Marc Abramowitz <marc@marc-abramowitz.com> 2015
98 Marc Villetard <marc.villetard@gmail.com> 2015
99 Marc Villetard <marc.villetard@gmail.com> 2015
99 Matthias Zilk <matthias.zilk@gmail.com> 2015
100 Matthias Zilk <matthias.zilk@gmail.com> 2015
100 Michael Pohl <michael@mipapo.de> 2015
101 Michael Pohl <michael@mipapo.de> 2015
101 Michael V. DePalatis <mike@depalatis.net> 2015
102 Michael V. DePalatis <mike@depalatis.net> 2015
102 Morten Skaaning <mortens@unity3d.com> 2015
103 Morten Skaaning <mortens@unity3d.com> 2015
103 Nick High <nick@silverchip.org> 2015
104 Nick High <nick@silverchip.org> 2015
104 Niemand Jedermann <predatorix@web.de> 2015
105 Niemand Jedermann <predatorix@web.de> 2015
105 Peter Vitt <petervitt@web.de> 2015
106 Peter Vitt <petervitt@web.de> 2015
106 Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> 2015
107 Ronny Pfannschmidt <opensource@ronnypfannschmidt.de> 2015
107 Tuux <tuxa@galaxie.eu.org> 2015
108 Tuux <tuxa@galaxie.eu.org> 2015
108 Viktar Palstsiuk <vipals@gmail.com> 2015
109 Viktar Palstsiuk <vipals@gmail.com> 2015
109 Ante Ilic <ante@unity3d.com> 2014
110 Ante Ilic <ante@unity3d.com> 2014
110 Calinou <calinou@opmbx.org> 2014
111 Calinou <calinou@opmbx.org> 2014
111 Daniel Anderson <daniel@dattrix.com> 2014
112 Daniel Anderson <daniel@dattrix.com> 2014
112 Henrik Stuart <hg@hstuart.dk> 2014
113 Henrik Stuart <hg@hstuart.dk> 2014
113 Ingo von Borstel <kallithea@planetmaker.de> 2014
114 Ingo von Borstel <kallithea@planetmaker.de> 2014
114 invision70 <invision70@gmail.com> 2014
115 invision70 <invision70@gmail.com> 2014
115 Jelmer VernooΔ³ <jelmer@samba.org> 2014
116 Jelmer VernooΔ³ <jelmer@samba.org> 2014
116 Jim Hague <jim.hague@acm.org> 2014
117 Jim Hague <jim.hague@acm.org> 2014
117 Matt Fellows <kallithea@matt-fellows.me.uk> 2014
118 Matt Fellows <kallithea@matt-fellows.me.uk> 2014
118 Max Roman <max@choloclos.se> 2014
119 Max Roman <max@choloclos.se> 2014
119 Na'Tosha Bard <natosha@unity3d.com> 2014
120 Na'Tosha Bard <natosha@unity3d.com> 2014
120 Rasmus Selsmark <rasmuss@unity3d.com> 2014
121 Rasmus Selsmark <rasmuss@unity3d.com> 2014
121 SkryabinD <skryabind@gmail.com> 2014
122 SkryabinD <skryabind@gmail.com> 2014
122 Tim Freund <tim@freunds.net> 2014
123 Tim Freund <tim@freunds.net> 2014
123 Travis Burtrum <android@moparisthebest.com> 2014
124 Travis Burtrum <android@moparisthebest.com> 2014
124 whosaysni <whosaysni@gmail.com> 2014
125 whosaysni <whosaysni@gmail.com> 2014
125 Zoltan Gyarmati <mr.zoltan.gyarmati@gmail.com> 2014
126 Zoltan Gyarmati <mr.zoltan.gyarmati@gmail.com> 2014
126 Marcin KuΕΊmiΕ„ski <marcin@python-works.com> 2010-2013
127 Marcin KuΕΊmiΕ„ski <marcin@python-works.com> 2010-2013
127 Nemcio <areczek01@gmail.com> 2012-2013
128 Nemcio <areczek01@gmail.com> 2012-2013
128 xpol <xpolife@gmail.com> 2012-2013
129 xpol <xpolife@gmail.com> 2012-2013
129 Andrey Mivrenik <myvrenik@gmail.com> 2013
130 Andrey Mivrenik <myvrenik@gmail.com> 2013
130 Aparkar <aparkar@icloud.com> 2013
131 Aparkar <aparkar@icloud.com> 2013
131 ArcheR <aleclitvinov1980@gmail.com> 2013
132 ArcheR <aleclitvinov1980@gmail.com> 2013
132 Dennis Brakhane <brakhane@googlemail.com> 2013
133 Dennis Brakhane <brakhane@googlemail.com> 2013
133 gnustavo <gustavo@gnustavo.com> 2013
134 gnustavo <gustavo@gnustavo.com> 2013
134 Grzegorz RoΕΌniecki <xaerxess@gmail.com> 2013
135 Grzegorz RoΕΌniecki <xaerxess@gmail.com> 2013
135 Ilya Beda <ir4y.ix@gmail.com> 2013
136 Ilya Beda <ir4y.ix@gmail.com> 2013
136 ivlevdenis <ivlevdenis.ru@gmail.com> 2013
137 ivlevdenis <ivlevdenis.ru@gmail.com> 2013
137 Jonathan Sternberg <jonathansternberg@gmail.com> 2013
138 Jonathan Sternberg <jonathansternberg@gmail.com> 2013
138 Leonardo Carneiro <leonardo@unity3d.com> 2013
139 Leonardo Carneiro <leonardo@unity3d.com> 2013
139 Magnus Ericmats <magnus.ericmats@gmail.com> 2013
140 Magnus Ericmats <magnus.ericmats@gmail.com> 2013
140 Martin Vium <martinv@unity3d.com> 2013
141 Martin Vium <martinv@unity3d.com> 2013
141 Mikhail Zholobov <legal90@gmail.com> 2013
142 Mikhail Zholobov <legal90@gmail.com> 2013
142 mokeev1995 <mokeev_andre@mail.ru> 2013
143 mokeev1995 <mokeev_andre@mail.ru> 2013
143 Ruslan Bekenev <furyinbox@gmail.com> 2013
144 Ruslan Bekenev <furyinbox@gmail.com> 2013
144 shirou - しろう 2013
145 shirou - しろう 2013
145 Simon Lopez <simon.lopez@slopez.org> 2013
146 Simon Lopez <simon.lopez@slopez.org> 2013
146 softforwinxp <softforwinxp@gmail.com> 2013
147 softforwinxp <softforwinxp@gmail.com> 2013
147 stephanj <info@stephan-jauernick.de> 2013
148 stephanj <info@stephan-jauernick.de> 2013
148 Ton Plomp <tcplomp@gmail.com> 2013
149 Ton Plomp <tcplomp@gmail.com> 2013
149 zhmylove <zhmylove@narod.ru> 2013
150 zhmylove <zhmylove@narod.ru> 2013
150 こいんとす <tkondou@gmail.com> 2013
151 こいんとす <tkondou@gmail.com> 2013
151 Augusto Herrmann <augusto.herrmann@planejamento.gov.br> 2011-2012
152 Augusto Herrmann <augusto.herrmann@planejamento.gov.br> 2011-2012
152 Augusto Herrmann <augusto.herrmann@gmail.com> 2012
153 Augusto Herrmann <augusto.herrmann@gmail.com> 2012
153 Dan Sheridan <djs@adelard.com> 2012
154 Dan Sheridan <djs@adelard.com> 2012
154 Dies Koper <diesk@fast.au.fujitsu.com> 2012
155 Dies Koper <diesk@fast.au.fujitsu.com> 2012
155 Erwin Kroon <e.kroon@smartmetersolutions.nl> 2012
156 Erwin Kroon <e.kroon@smartmetersolutions.nl> 2012
156 H Waldo G <gwaldo@gmail.com> 2012
157 H Waldo G <gwaldo@gmail.com> 2012
157 hppj <hppj@postmage.biz> 2012
158 hppj <hppj@postmage.biz> 2012
158 Indra Talip <indra.talip@gmail.com> 2012
159 Indra Talip <indra.talip@gmail.com> 2012
159 mikespook <mikespook@gmail.com> 2012
160 mikespook <mikespook@gmail.com> 2012
160 nansenat16 <nansenat16@null.tw> 2012
161 nansenat16 <nansenat16@null.tw> 2012
161 Nemcio <bogdan114@g.pl> 2012
162 Nemcio <bogdan114@g.pl> 2012
162 Philip Jameson <philip.j@hostdime.com> 2012
163 Philip Jameson <philip.j@hostdime.com> 2012
163 Raoul Thill <raoul.thill@gmail.com> 2012
164 Raoul Thill <raoul.thill@gmail.com> 2012
164 Stefan Engel <mail@engel-stefan.de> 2012
165 Stefan Engel <mail@engel-stefan.de> 2012
165 Tony Bussieres <t.bussieres@gmail.com> 2012
166 Tony Bussieres <t.bussieres@gmail.com> 2012
166 Vincent Caron <vcaron@bearstech.com> 2012
167 Vincent Caron <vcaron@bearstech.com> 2012
167 Vincent Duvert <vincent@duvert.net> 2012
168 Vincent Duvert <vincent@duvert.net> 2012
168 Vladislav Poluhin <nuklea@gmail.com> 2012
169 Vladislav Poluhin <nuklea@gmail.com> 2012
169 Zachary Auclair <zach101@gmail.com> 2012
170 Zachary Auclair <zach101@gmail.com> 2012
170 Ankit Solanki <ankit.solanki@gmail.com> 2011
171 Ankit Solanki <ankit.solanki@gmail.com> 2011
171 Dmitri Kuznetsov 2011
172 Dmitri Kuznetsov 2011
172 Jared Bunting <jared.bunting@peachjean.com> 2011
173 Jared Bunting <jared.bunting@peachjean.com> 2011
173 Jason Harris <jason@jasonfharris.com> 2011
174 Jason Harris <jason@jasonfharris.com> 2011
174 Les Peabody <lpeabody@gmail.com> 2011
175 Les Peabody <lpeabody@gmail.com> 2011
175 Liad Shani <liadff@gmail.com> 2011
176 Liad Shani <liadff@gmail.com> 2011
176 Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it> 2011
177 Lorenzo M. Catucci <lorenzo@sancho.ccd.uniroma2.it> 2011
177 Matt Zuba <matt.zuba@goodwillaz.org> 2011
178 Matt Zuba <matt.zuba@goodwillaz.org> 2011
178 Nicolas VINOT <aeris@imirhil.fr> 2011
179 Nicolas VINOT <aeris@imirhil.fr> 2011
179 Shawn K. O'Shea <shawn@eth0.net> 2011
180 Shawn K. O'Shea <shawn@eth0.net> 2011
180 Thayne Harbaugh <thayne@fusionio.com> 2011
181 Thayne Harbaugh <thayne@fusionio.com> 2011
181 Łukasz Balcerzak <lukaszbalcerzak@gmail.com> 2010
182 Łukasz Balcerzak <lukaszbalcerzak@gmail.com> 2010
182 Andrew Kesterson <andrew@aklabs.net>
183 Andrew Kesterson <andrew@aklabs.net>
183 cejones
184 cejones
184 David A. SjΓΈen <david.sjoen@westcon.no>
185 David A. SjΓΈen <david.sjoen@westcon.no>
185 James Rhodes <jrhodes@redpointsoftware.com.au>
186 James Rhodes <jrhodes@redpointsoftware.com.au>
186 Jonas Oberschweiber <jonas.oberschweiber@d-velop.de>
187 Jonas Oberschweiber <jonas.oberschweiber@d-velop.de>
187 larikale
188 larikale
188 RhodeCode GmbH
189 RhodeCode GmbH
189 Sebastian Kreutzberger <sebastian@rhodecode.com>
190 Sebastian Kreutzberger <sebastian@rhodecode.com>
190 Steve Romanow <slestak989@gmail.com>
191 Steve Romanow <slestak989@gmail.com>
191 SteveCohen
192 SteveCohen
192 Thomas <thomas@rhodecode.com>
193 Thomas <thomas@rhodecode.com>
193 Thomas Waldmann <tw-public@gmx.de>
194 Thomas Waldmann <tw-public@gmx.de>
@@ -1,229 +1,229 b''
1 # -*- coding: utf-8 -*-
1 # -*- coding: utf-8 -*-
2 #
2 #
3 # Kallithea documentation build configuration file, created by
3 # Kallithea documentation build configuration file, created by
4 # sphinx-quickstart on Sun Oct 10 16:46:37 2010.
4 # sphinx-quickstart on Sun Oct 10 16:46:37 2010.
5 #
5 #
6 # This file is execfile()d with the current directory set to its containing dir.
6 # This file is execfile()d with the current directory set to its containing dir.
7 #
7 #
8 # Note that not all possible configuration values are present in this
8 # Note that not all possible configuration values are present in this
9 # autogenerated file.
9 # autogenerated file.
10 #
10 #
11 # All configuration values have a default; values that are commented out
11 # All configuration values have a default; values that are commented out
12 # serve to show the default.
12 # serve to show the default.
13
13
14 import os
14 import os
15 import sys
15 import sys
16
16
17 import kallithea
17 import kallithea
18
18
19
19
20 # If extensions (or modules to document with autodoc) are in another directory,
20 # If extensions (or modules to document with autodoc) are in another directory,
21 # add these directories to sys.path here. If the directory is relative to the
21 # add these directories to sys.path here. If the directory is relative to the
22 # documentation root, use os.path.abspath to make it absolute, like shown here.
22 # documentation root, use os.path.abspath to make it absolute, like shown here.
23 sys.path.insert(0, os.path.abspath('..'))
23 sys.path.insert(0, os.path.abspath('..'))
24
24
25 # -- General configuration -----------------------------------------------------
25 # -- General configuration -----------------------------------------------------
26
26
27 # If your documentation needs a minimal Sphinx version, state it here.
27 # If your documentation needs a minimal Sphinx version, state it here.
28 #needs_sphinx = '1.0'
28 #needs_sphinx = '1.0'
29
29
30 # Add any Sphinx extension module names here, as strings. They can be extensions
30 # Add any Sphinx extension module names here, as strings. They can be extensions
31 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
31 # coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
32 extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',
32 extensions = ['sphinx.ext.autodoc', 'sphinx.ext.doctest',
33 'sphinx.ext.intersphinx', 'sphinx.ext.todo',
33 'sphinx.ext.intersphinx', 'sphinx.ext.todo',
34 'sphinx.ext.viewcode']
34 'sphinx.ext.viewcode']
35
35
36 # Add any paths that contain templates here, relative to this directory.
36 # Add any paths that contain templates here, relative to this directory.
37 templates_path = ['_templates']
37 templates_path = ['_templates']
38
38
39 # The suffix of source filenames.
39 # The suffix of source filenames.
40 source_suffix = '.rst'
40 source_suffix = '.rst'
41
41
42 # The encoding of source files.
42 # The encoding of source files.
43 #source_encoding = 'utf-8-sig'
43 #source_encoding = 'utf-8-sig'
44
44
45 # The master toctree document.
45 # The master toctree document.
46 master_doc = 'index'
46 master_doc = 'index'
47
47
48 # General information about the project.
48 # General information about the project.
49 project = 'Kallithea'
49 project = 'Kallithea'
50 copyright = '2010-2022 by various authors, licensed as GPLv3.'
50 copyright = '2010-2023 by various authors, licensed as GPLv3.'
51
51
52 # The version info for the project you're documenting, acts as replacement for
52 # The version info for the project you're documenting, acts as replacement for
53 # |version| and |release|, also used in various other places throughout the
53 # |version| and |release|, also used in various other places throughout the
54 # built documents.
54 # built documents.
55 #
55 #
56 # The short X.Y version.
56 # The short X.Y version.
57 root = os.path.dirname(os.path.dirname(__file__))
57 root = os.path.dirname(os.path.dirname(__file__))
58 sys.path.append(root)
58 sys.path.append(root)
59 version = kallithea.__version__
59 version = kallithea.__version__
60 # The full version, including alpha/beta/rc tags.
60 # The full version, including alpha/beta/rc tags.
61 release = kallithea.__version__
61 release = kallithea.__version__
62
62
63 # The language for content autogenerated by Sphinx. Refer to documentation
63 # The language for content autogenerated by Sphinx. Refer to documentation
64 # for a list of supported languages.
64 # for a list of supported languages.
65 #language = None
65 #language = None
66
66
67 # There are two options for replacing |today|: either, you set today to some
67 # There are two options for replacing |today|: either, you set today to some
68 # non-false value, then it is used:
68 # non-false value, then it is used:
69 #today = ''
69 #today = ''
70 # Else, today_fmt is used as the format for a strftime call.
70 # Else, today_fmt is used as the format for a strftime call.
71 #today_fmt = '%B %d, %Y'
71 #today_fmt = '%B %d, %Y'
72
72
73 # List of patterns, relative to source directory, that match files and
73 # List of patterns, relative to source directory, that match files and
74 # directories to ignore when looking for source files.
74 # directories to ignore when looking for source files.
75 exclude_patterns = ['_build']
75 exclude_patterns = ['_build']
76
76
77 # The reST default role (used for this markup: `text`) to use for all documents.
77 # The reST default role (used for this markup: `text`) to use for all documents.
78 #default_role = None
78 #default_role = None
79
79
80 # If true, '()' will be appended to :func: etc. cross-reference text.
80 # If true, '()' will be appended to :func: etc. cross-reference text.
81 #add_function_parentheses = True
81 #add_function_parentheses = True
82
82
83 # If true, the current module name will be prepended to all description
83 # If true, the current module name will be prepended to all description
84 # unit titles (such as .. function::).
84 # unit titles (such as .. function::).
85 #add_module_names = True
85 #add_module_names = True
86
86
87 # If true, sectionauthor and moduleauthor directives will be shown in the
87 # If true, sectionauthor and moduleauthor directives will be shown in the
88 # output. They are ignored by default.
88 # output. They are ignored by default.
89 #show_authors = False
89 #show_authors = False
90
90
91 # The name of the Pygments (syntax highlighting) style to use.
91 # The name of the Pygments (syntax highlighting) style to use.
92 pygments_style = 'sphinx'
92 pygments_style = 'sphinx'
93 highlight_language = 'none'
93 highlight_language = 'none'
94
94
95 # A list of ignored prefixes for module index sorting.
95 # A list of ignored prefixes for module index sorting.
96 #modindex_common_prefix = []
96 #modindex_common_prefix = []
97
97
98
98
99 # -- Options for HTML output ---------------------------------------------------
99 # -- Options for HTML output ---------------------------------------------------
100
100
101 # The theme to use for HTML and HTML Help pages. See the documentation for
101 # The theme to use for HTML and HTML Help pages. See the documentation for
102 # a list of builtin themes.
102 # a list of builtin themes.
103 html_theme = 'nature'
103 html_theme = 'nature'
104
104
105 # Theme options are theme-specific and customize the look and feel of a theme
105 # Theme options are theme-specific and customize the look and feel of a theme
106 # further. For a list of options available for each theme, see the
106 # further. For a list of options available for each theme, see the
107 # documentation.
107 # documentation.
108 #html_theme_options = {}
108 #html_theme_options = {}
109
109
110 # Add any paths that contain custom themes here, relative to this directory.
110 # Add any paths that contain custom themes here, relative to this directory.
111 html_theme_path = ['theme']
111 html_theme_path = ['theme']
112
112
113 # The name for this set of Sphinx documents. If None, it defaults to
113 # The name for this set of Sphinx documents. If None, it defaults to
114 # "<project> v<release> documentation".
114 # "<project> v<release> documentation".
115 #html_title = None
115 #html_title = None
116
116
117 # A shorter title for the navigation bar. Default is the same as html_title.
117 # A shorter title for the navigation bar. Default is the same as html_title.
118 #html_short_title = None
118 #html_short_title = None
119
119
120 # The name of an image file (relative to this directory) to place at the top
120 # The name of an image file (relative to this directory) to place at the top
121 # of the sidebar.
121 # of the sidebar.
122 #html_logo = None
122 #html_logo = None
123
123
124 # The name of an image file (within the static path) to use as favicon of the
124 # The name of an image file (within the static path) to use as favicon of the
125 # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
125 # docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
126 # pixels large.
126 # pixels large.
127 #html_favicon = None
127 #html_favicon = None
128
128
129 # Add any paths that contain custom static files (such as style sheets) here,
129 # Add any paths that contain custom static files (such as style sheets) here,
130 # relative to this directory. They are copied after the builtin static files,
130 # relative to this directory. They are copied after the builtin static files,
131 # so a file named "default.css" will overwrite the builtin "default.css".
131 # so a file named "default.css" will overwrite the builtin "default.css".
132 #html_static_path = ['_static']
132 #html_static_path = ['_static']
133
133
134 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
134 # If not '', a 'Last updated on:' timestamp is inserted at every page bottom,
135 # using the given strftime format.
135 # using the given strftime format.
136 #html_last_updated_fmt = '%b %d, %Y'
136 #html_last_updated_fmt = '%b %d, %Y'
137
137
138 # If true, SmartyPants will be used to convert quotes and dashes to
138 # If true, SmartyPants will be used to convert quotes and dashes to
139 # typographically correct entities.
139 # typographically correct entities.
140 #html_use_smartypants = True
140 #html_use_smartypants = True
141
141
142 # Custom sidebar templates, maps document names to template names.
142 # Custom sidebar templates, maps document names to template names.
143 #html_sidebars = {}
143 #html_sidebars = {}
144
144
145 # Additional templates that should be rendered to pages, maps page names to
145 # Additional templates that should be rendered to pages, maps page names to
146 # template names.
146 # template names.
147 #html_additional_pages = {}
147 #html_additional_pages = {}
148
148
149 # If false, no module index is generated.
149 # If false, no module index is generated.
150 #html_domain_indices = True
150 #html_domain_indices = True
151
151
152 # If false, no index is generated.
152 # If false, no index is generated.
153 #html_use_index = True
153 #html_use_index = True
154
154
155 # If true, the index is split into individual pages for each letter.
155 # If true, the index is split into individual pages for each letter.
156 #html_split_index = False
156 #html_split_index = False
157
157
158 # If true, links to the reST sources are added to the pages.
158 # If true, links to the reST sources are added to the pages.
159 #html_show_sourcelink = True
159 #html_show_sourcelink = True
160
160
161 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
161 # If true, "Created using Sphinx" is shown in the HTML footer. Default is True.
162 #html_show_sphinx = True
162 #html_show_sphinx = True
163
163
164 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
164 # If true, "(C) Copyright ..." is shown in the HTML footer. Default is True.
165 #html_show_copyright = True
165 #html_show_copyright = True
166
166
167 # If true, an OpenSearch description file will be output, and all pages will
167 # If true, an OpenSearch description file will be output, and all pages will
168 # contain a <link> tag referring to it. The value of this option must be the
168 # contain a <link> tag referring to it. The value of this option must be the
169 # base URL from which the finished HTML is served.
169 # base URL from which the finished HTML is served.
170 #html_use_opensearch = ''
170 #html_use_opensearch = ''
171
171
172 # This is the file name suffix for HTML files (e.g. ".xhtml").
172 # This is the file name suffix for HTML files (e.g. ".xhtml").
173 #html_file_suffix = None
173 #html_file_suffix = None
174
174
175 # Output file base name for HTML help builder.
175 # Output file base name for HTML help builder.
176 htmlhelp_basename = 'Kallithea-docs'
176 htmlhelp_basename = 'Kallithea-docs'
177
177
178
178
179 # -- Options for LaTeX output --------------------------------------------------
179 # -- Options for LaTeX output --------------------------------------------------
180
180
181 # The paper size ('letter' or 'a4').
181 # The paper size ('letter' or 'a4').
182 #latex_paper_size = 'letter'
182 #latex_paper_size = 'letter'
183
183
184 # The font size ('10pt', '11pt' or '12pt').
184 # The font size ('10pt', '11pt' or '12pt').
185 #latex_font_size = '10pt'
185 #latex_font_size = '10pt'
186
186
187 # Grouping the document tree into LaTeX files. List of tuples
187 # Grouping the document tree into LaTeX files. List of tuples
188 # (source start file, target name, title, author, documentclass [howto/manual]).
188 # (source start file, target name, title, author, documentclass [howto/manual]).
189 latex_documents = [
189 latex_documents = [
190 ('index', 'Kallithea.tex', 'Kallithea Documentation',
190 ('index', 'Kallithea.tex', 'Kallithea Documentation',
191 'Kallithea Developers', 'manual'),
191 'Kallithea Developers', 'manual'),
192 ]
192 ]
193
193
194 # The name of an image file (relative to this directory) to place at the top of
194 # The name of an image file (relative to this directory) to place at the top of
195 # the title page.
195 # the title page.
196 #latex_logo = None
196 #latex_logo = None
197
197
198 # For "manual" documents, if this is true, then toplevel headings are parts,
198 # For "manual" documents, if this is true, then toplevel headings are parts,
199 # not chapters.
199 # not chapters.
200 #latex_use_parts = False
200 #latex_use_parts = False
201
201
202 # If true, show page references after internal links.
202 # If true, show page references after internal links.
203 #latex_show_pagerefs = False
203 #latex_show_pagerefs = False
204
204
205 # If true, show URL addresses after external links.
205 # If true, show URL addresses after external links.
206 #latex_show_urls = False
206 #latex_show_urls = False
207
207
208 # Additional stuff for the LaTeX preamble.
208 # Additional stuff for the LaTeX preamble.
209 #latex_preamble = ''
209 #latex_preamble = ''
210
210
211 # Documents to append as an appendix to all manuals.
211 # Documents to append as an appendix to all manuals.
212 #latex_appendices = []
212 #latex_appendices = []
213
213
214 # If false, no module index is generated.
214 # If false, no module index is generated.
215 #latex_domain_indices = True
215 #latex_domain_indices = True
216
216
217
217
218 # -- Options for manual page output --------------------------------------------
218 # -- Options for manual page output --------------------------------------------
219
219
220 # One entry per manual page. List of tuples
220 # One entry per manual page. List of tuples
221 # (source start file, name, description, authors, manual section).
221 # (source start file, name, description, authors, manual section).
222 man_pages = [
222 man_pages = [
223 ('index', 'kallithea', 'Kallithea Documentation',
223 ('index', 'kallithea', 'Kallithea Documentation',
224 ['Kallithea Developers'], 1)
224 ['Kallithea Developers'], 1)
225 ]
225 ]
226
226
227
227
228 # Example configuration for intersphinx: refer to the Python standard library.
228 # Example configuration for intersphinx: refer to the Python standard library.
229 intersphinx_mapping = {'http://docs.python.org/': None}
229 intersphinx_mapping = {'http://docs.python.org/': None}
@@ -1,229 +1,230 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 <%block name="header_menu">
6 <%block name="header_menu">
7 ${self.menu('about')}
7 ${self.menu('about')}
8 </%block>
8 </%block>
9 <%def name="main()">
9 <%def name="main()">
10
10
11 <div class="panel panel-primary">
11 <div class="panel panel-primary">
12 <div class="panel-heading">
12 <div class="panel-heading">
13 <h5 class="panel-title">${_('About')} Kallithea</h5>
13 <h5 class="panel-title">${_('About')} Kallithea</h5>
14 </div>
14 </div>
15
15
16 <div class="panel-body panel-about">
16 <div class="panel-body panel-about">
17 <p><a href="https://kallithea-scm.org/">Kallithea</a> is a project of the
17 <p><a href="https://kallithea-scm.org/">Kallithea</a> is a project of the
18 <a href="http://sfconservancy.org/">Software Freedom Conservancy, Inc.</a>
18 <a href="http://sfconservancy.org/">Software Freedom Conservancy, Inc.</a>
19 and is released under the terms of the
19 and is released under the terms of the
20 <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License,
20 <a href="http://www.gnu.org/copyleft/gpl.html">GNU General Public License,
21 v 3.0 (GPLv3)</a>.</p>
21 v 3.0 (GPLv3)</a>.</p>
22
22
23 <p>Kallithea is copyrighted by various authors, including but not
23 <p>Kallithea is copyrighted by various authors, including but not
24 necessarily limited to the following:</p>
24 necessarily limited to the following:</p>
25 <ul>
25 <ul>
26
26
27 <li>Copyright &copy; 2012&ndash;2022, Mads Kiilerich</li>
27 <li>Copyright &copy; 2012&ndash;2023, Mads Kiilerich</li>
28 <li>Copyright &copy; 2019&ndash;2020, 2022&ndash;2023, Manuel Jacob</li>
29 <li>Copyright &copy; 2023, Mathias De Mare</li>
28 <li>Copyright &copy; 2016&ndash;2017, 2020, 2022, Asterios Dimitriou</li>
30 <li>Copyright &copy; 2016&ndash;2017, 2020, 2022, Asterios Dimitriou</li>
29 <li>Copyright &copy; 2019&ndash;2020, 2022, Manuel Jacob</li>
30 <li>Copyright &copy; 2022, Jaime MarquΓ­nez FerrΓ‘ndiz</li>
31 <li>Copyright &copy; 2022, Jaime MarquΓ­nez FerrΓ‘ndiz</li>
31 <li>Copyright &copy; 2022, Louis Bertrand</li>
32 <li>Copyright &copy; 2022, Louis Bertrand</li>
32 <li>Copyright &copy; 2022, toras9000</li>
33 <li>Copyright &copy; 2022, toras9000</li>
33 <li>Copyright &copy; 2022, yzqzss</li>
34 <li>Copyright &copy; 2022, yzqzss</li>
34 <li>Copyright &copy; 2022, МАН69К</li>
35 <li>Copyright &copy; 2022, МАН69К</li>
35 <li>Copyright &copy; 2014&ndash;2021, Thomas De Schampheleire</li>
36 <li>Copyright &copy; 2014&ndash;2021, Thomas De Schampheleire</li>
36 <li>Copyright &copy; 2015&ndash;2017, 2019&ndash;2021, Γ‰tienne Gilli</li>
37 <li>Copyright &copy; 2015&ndash;2017, 2019&ndash;2021, Γ‰tienne Gilli</li>
37 <li>Copyright &copy; 2018&ndash;2021, ssantos</li>
38 <li>Copyright &copy; 2018&ndash;2021, ssantos</li>
38 <li>Copyright &copy; 2019&ndash;2021, Private</li>
39 <li>Copyright &copy; 2019&ndash;2021, Private</li>
39 <li>Copyright &copy; 2020&ndash;2021, fresh</li>
40 <li>Copyright &copy; 2020&ndash;2021, fresh</li>
40 <li>Copyright &copy; 2020&ndash;2021, robertus</li>
41 <li>Copyright &copy; 2020&ndash;2021, robertus</li>
41 <li>Copyright &copy; 2021, Eugenia Russell</li>
42 <li>Copyright &copy; 2021, Eugenia Russell</li>
42 <li>Copyright &copy; 2021, Michalis</li>
43 <li>Copyright &copy; 2021, Michalis</li>
43 <li>Copyright &copy; 2021, vs</li>
44 <li>Copyright &copy; 2021, vs</li>
44 <li>Copyright &copy; 2021, АлСксандр</li>
45 <li>Copyright &copy; 2021, АлСксандр</li>
45 <li>Copyright &copy; 2017&ndash;2020, Allan NordhΓΈy</li>
46 <li>Copyright &copy; 2017&ndash;2020, Allan NordhΓΈy</li>
46 <li>Copyright &copy; 2017, 2020, Anton Schur</li>
47 <li>Copyright &copy; 2017, 2020, Anton Schur</li>
47 <li>Copyright &copy; 2020, Artem</li>
48 <li>Copyright &copy; 2020, Artem</li>
48 <li>Copyright &copy; 2020, David Ignjić</li>
49 <li>Copyright &copy; 2020, David Ignjić</li>
49 <li>Copyright &copy; 2020, Dennis Fink</li>
50 <li>Copyright &copy; 2020, Dennis Fink</li>
50 <li>Copyright &copy; 2020, J. Lavoie</li>
51 <li>Copyright &copy; 2020, J. Lavoie</li>
51 <li>Copyright &copy; 2020, Ross Thomas</li>
52 <li>Copyright &copy; 2020, Ross Thomas</li>
52 <li>Copyright &copy; 2020, Tim Ooms</li>
53 <li>Copyright &copy; 2020, Tim Ooms</li>
53 <li>Copyright &copy; 2012, 2014&ndash;2017, 2019, Andrej Shadura</li>
54 <li>Copyright &copy; 2012, 2014&ndash;2017, 2019, Andrej Shadura</li>
54 <li>Copyright &copy; 2019, Adi Kriegisch</li>
55 <li>Copyright &copy; 2019, Adi Kriegisch</li>
55 <li>Copyright &copy; 2019, Danni Randeris</li>
56 <li>Copyright &copy; 2019, Danni Randeris</li>
56 <li>Copyright &copy; 2019, Edmund Wong</li>
57 <li>Copyright &copy; 2019, Edmund Wong</li>
57 <li>Copyright &copy; 2019, Elizabeth Sherrock</li>
58 <li>Copyright &copy; 2019, Elizabeth Sherrock</li>
58 <li>Copyright &copy; 2019, Hüseyin Tunç</li>
59 <li>Copyright &copy; 2019, Hüseyin Tunç</li>
59 <li>Copyright &copy; 2019, leela</li>
60 <li>Copyright &copy; 2019, leela</li>
60 <li>Copyright &copy; 2019, Mateusz Mendel</li>
61 <li>Copyright &copy; 2019, Mateusz Mendel</li>
61 <li>Copyright &copy; 2019, Nathan</li>
62 <li>Copyright &copy; 2019, Nathan</li>
62 <li>Copyright &copy; 2019, Oleksandr Shtalinberg</li>
63 <li>Copyright &copy; 2019, Oleksandr Shtalinberg</li>
63 <li>Copyright &copy; 2019, THANOS SIOURDAKIS</li>
64 <li>Copyright &copy; 2019, THANOS SIOURDAKIS</li>
64 <li>Copyright &copy; 2019, Wolfgang Scherer</li>
65 <li>Copyright &copy; 2019, Wolfgang Scherer</li>
65 <li>Copyright &copy; 2019, Π₯ристо Π‘Ρ‚Π°Π½Π΅Π²</li>
66 <li>Copyright &copy; 2019, Π₯ристо Π‘Ρ‚Π°Π½Π΅Π²</li>
66 <li>Copyright &copy; 2012, 2014&ndash;2018, Dominik Ruf</li>
67 <li>Copyright &copy; 2012, 2014&ndash;2018, Dominik Ruf</li>
67 <li>Copyright &copy; 2014&ndash;2015, 2018, Michal ČihaΕ™</li>
68 <li>Copyright &copy; 2014&ndash;2015, 2018, Michal ČihaΕ™</li>
68 <li>Copyright &copy; 2015, 2018, Branko Majic</li>
69 <li>Copyright &copy; 2015, 2018, Branko Majic</li>
69 <li>Copyright &copy; 2018, Chris Rule</li>
70 <li>Copyright &copy; 2018, Chris Rule</li>
70 <li>Copyright &copy; 2018, JesΓΊs SΓ‘nchez</li>
71 <li>Copyright &copy; 2018, JesΓΊs SΓ‘nchez</li>
71 <li>Copyright &copy; 2018, Patrick Vane</li>
72 <li>Copyright &copy; 2018, Patrick Vane</li>
72 <li>Copyright &copy; 2018, Pheng Heong Tan</li>
73 <li>Copyright &copy; 2018, Pheng Heong Tan</li>
73 <li>Copyright &copy; 2018, Максим Π―ΠΊΠΈΠΌΡ‡ΡƒΠΊ</li>
74 <li>Copyright &copy; 2018, Максим Π―ΠΊΠΈΠΌΡ‡ΡƒΠΊ</li>
74 <li>Copyright &copy; 2018, ΠœΠ°Ρ€Ρ Π―ΠΌΠ±Π°Ρ€</li>
75 <li>Copyright &copy; 2018, ΠœΠ°Ρ€Ρ Π―ΠΌΠ±Π°Ρ€</li>
75 <li>Copyright &copy; 2012&ndash;2017, Unity Technologies</li>
76 <li>Copyright &copy; 2012&ndash;2017, Unity Technologies</li>
76 <li>Copyright &copy; 2015&ndash;2017, SΓΈren LΓΈvborg</li>
77 <li>Copyright &copy; 2015&ndash;2017, SΓΈren LΓΈvborg</li>
77 <li>Copyright &copy; 2015, 2017, Sam Jaques</li>
78 <li>Copyright &copy; 2015, 2017, Sam Jaques</li>
78 <li>Copyright &copy; 2017, Alessandro Molina</li>
79 <li>Copyright &copy; 2017, Alessandro Molina</li>
79 <li>Copyright &copy; 2017, Ching-Chen Mao</li>
80 <li>Copyright &copy; 2017, Ching-Chen Mao</li>
80 <li>Copyright &copy; 2017, Eivind Tagseth</li>
81 <li>Copyright &copy; 2017, Eivind Tagseth</li>
81 <li>Copyright &copy; 2017, FUJIWARA Katsunori</li>
82 <li>Copyright &copy; 2017, FUJIWARA Katsunori</li>
82 <li>Copyright &copy; 2017, Holger Schramm</li>
83 <li>Copyright &copy; 2017, Holger Schramm</li>
83 <li>Copyright &copy; 2017, Karl Goetz</li>
84 <li>Copyright &copy; 2017, Karl Goetz</li>
84 <li>Copyright &copy; 2017, Lars Kruse</li>
85 <li>Copyright &copy; 2017, Lars Kruse</li>
85 <li>Copyright &copy; 2017, Marko Semet</li>
86 <li>Copyright &copy; 2017, Marko Semet</li>
86 <li>Copyright &copy; 2017, Viktar Vauchkevich</li>
87 <li>Copyright &copy; 2017, Viktar Vauchkevich</li>
87 <li>Copyright &copy; 2012&ndash;2016, Takumi IINO</li>
88 <li>Copyright &copy; 2012&ndash;2016, Takumi IINO</li>
88 <li>Copyright &copy; 2015&ndash;2016, Jan Heylen</li>
89 <li>Copyright &copy; 2015&ndash;2016, Jan Heylen</li>
89 <li>Copyright &copy; 2015&ndash;2016, Robert Martinez</li>
90 <li>Copyright &copy; 2015&ndash;2016, Robert Martinez</li>
90 <li>Copyright &copy; 2015&ndash;2016, Robert Rauch</li>
91 <li>Copyright &copy; 2015&ndash;2016, Robert Rauch</li>
91 <li>Copyright &copy; 2016, Angel Ezquerra</li>
92 <li>Copyright &copy; 2016, Angel Ezquerra</li>
92 <li>Copyright &copy; 2016, Anton Shestakov</li>
93 <li>Copyright &copy; 2016, Anton Shestakov</li>
93 <li>Copyright &copy; 2016, Brandon Jones</li>
94 <li>Copyright &copy; 2016, Brandon Jones</li>
94 <li>Copyright &copy; 2016, Kateryna Musina</li>
95 <li>Copyright &copy; 2016, Kateryna Musina</li>
95 <li>Copyright &copy; 2016, Konstantin Veretennicov</li>
96 <li>Copyright &copy; 2016, Konstantin Veretennicov</li>
96 <li>Copyright &copy; 2016, Oscar Curero</li>
97 <li>Copyright &copy; 2016, Oscar Curero</li>
97 <li>Copyright &copy; 2016, Robert James Dennington</li>
98 <li>Copyright &copy; 2016, Robert James Dennington</li>
98 <li>Copyright &copy; 2016, timeless@gmail.com</li>
99 <li>Copyright &copy; 2016, timeless@gmail.com</li>
99 <li>Copyright &copy; 2016, YFdyh000</li>
100 <li>Copyright &copy; 2016, YFdyh000</li>
100 <li>Copyright &copy; 2012&ndash;2013, 2015, Aras Pranckevičius</li>
101 <li>Copyright &copy; 2012&ndash;2013, 2015, Aras Pranckevičius</li>
101 <li>Copyright &copy; 2014&ndash;2015, Bradley M. Kuhn</li>
102 <li>Copyright &copy; 2014&ndash;2015, Bradley M. Kuhn</li>
102 <li>Copyright &copy; 2014&ndash;2015, Christian Oyarzun</li>
103 <li>Copyright &copy; 2014&ndash;2015, Christian Oyarzun</li>
103 <li>Copyright &copy; 2014&ndash;2015, Joseph Rivera</li>
104 <li>Copyright &copy; 2014&ndash;2015, Joseph Rivera</li>
104 <li>Copyright &copy; 2014&ndash;2015, Sean Farley</li>
105 <li>Copyright &copy; 2014&ndash;2015, Sean Farley</li>
105 <li>Copyright &copy; 2015, Anatoly Bubenkov</li>
106 <li>Copyright &copy; 2015, Anatoly Bubenkov</li>
106 <li>Copyright &copy; 2015, Andrew Bartlett</li>
107 <li>Copyright &copy; 2015, Andrew Bartlett</li>
107 <li>Copyright &copy; 2015, BalÑzs Úr</li>
108 <li>Copyright &copy; 2015, BalÑzs Úr</li>
108 <li>Copyright &copy; 2015, Ben Finney</li>
109 <li>Copyright &copy; 2015, Ben Finney</li>
109 <li>Copyright &copy; 2015, Daniel Hobley</li>
110 <li>Copyright &copy; 2015, Daniel Hobley</li>
110 <li>Copyright &copy; 2015, David Avigni</li>
111 <li>Copyright &copy; 2015, David Avigni</li>
111 <li>Copyright &copy; 2015, Denis Blanchette</li>
112 <li>Copyright &copy; 2015, Denis Blanchette</li>
112 <li>Copyright &copy; 2015, duanhongyi</li>
113 <li>Copyright &copy; 2015, duanhongyi</li>
113 <li>Copyright &copy; 2015, EriCSN Chang</li>
114 <li>Copyright &copy; 2015, EriCSN Chang</li>
114 <li>Copyright &copy; 2015, Grzegorz Krason</li>
115 <li>Copyright &copy; 2015, Grzegorz Krason</li>
115 <li>Copyright &copy; 2015, JiΕ™Γ­ Suchan</li>
116 <li>Copyright &copy; 2015, JiΕ™Γ­ Suchan</li>
116 <li>Copyright &copy; 2015, Kazunari Kobayashi</li>
117 <li>Copyright &copy; 2015, Kazunari Kobayashi</li>
117 <li>Copyright &copy; 2015, Kevin Bullock</li>
118 <li>Copyright &copy; 2015, Kevin Bullock</li>
118 <li>Copyright &copy; 2015, kobanari</li>
119 <li>Copyright &copy; 2015, kobanari</li>
119 <li>Copyright &copy; 2015, Marc Abramowitz</li>
120 <li>Copyright &copy; 2015, Marc Abramowitz</li>
120 <li>Copyright &copy; 2015, Marc Villetard</li>
121 <li>Copyright &copy; 2015, Marc Villetard</li>
121 <li>Copyright &copy; 2015, Matthias Zilk</li>
122 <li>Copyright &copy; 2015, Matthias Zilk</li>
122 <li>Copyright &copy; 2015, Michael Pohl</li>
123 <li>Copyright &copy; 2015, Michael Pohl</li>
123 <li>Copyright &copy; 2015, Michael V. DePalatis</li>
124 <li>Copyright &copy; 2015, Michael V. DePalatis</li>
124 <li>Copyright &copy; 2015, Morten Skaaning</li>
125 <li>Copyright &copy; 2015, Morten Skaaning</li>
125 <li>Copyright &copy; 2015, Nick High</li>
126 <li>Copyright &copy; 2015, Nick High</li>
126 <li>Copyright &copy; 2015, Niemand Jedermann</li>
127 <li>Copyright &copy; 2015, Niemand Jedermann</li>
127 <li>Copyright &copy; 2015, Peter Vitt</li>
128 <li>Copyright &copy; 2015, Peter Vitt</li>
128 <li>Copyright &copy; 2015, Ronny Pfannschmidt</li>
129 <li>Copyright &copy; 2015, Ronny Pfannschmidt</li>
129 <li>Copyright &copy; 2015, Tuux</li>
130 <li>Copyright &copy; 2015, Tuux</li>
130 <li>Copyright &copy; 2015, Viktar Palstsiuk</li>
131 <li>Copyright &copy; 2015, Viktar Palstsiuk</li>
131 <li>Copyright &copy; 2014, Ante Ilic</li>
132 <li>Copyright &copy; 2014, Ante Ilic</li>
132 <li>Copyright &copy; 2014, Calinou</li>
133 <li>Copyright &copy; 2014, Calinou</li>
133 <li>Copyright &copy; 2014, Daniel Anderson</li>
134 <li>Copyright &copy; 2014, Daniel Anderson</li>
134 <li>Copyright &copy; 2014, Henrik Stuart</li>
135 <li>Copyright &copy; 2014, Henrik Stuart</li>
135 <li>Copyright &copy; 2014, Ingo von Borstel</li>
136 <li>Copyright &copy; 2014, Ingo von Borstel</li>
136 <li>Copyright &copy; 2014, invision70</li>
137 <li>Copyright &copy; 2014, invision70</li>
137 <li>Copyright &copy; 2014, Jelmer VernooΔ³</li>
138 <li>Copyright &copy; 2014, Jelmer VernooΔ³</li>
138 <li>Copyright &copy; 2014, Jim Hague</li>
139 <li>Copyright &copy; 2014, Jim Hague</li>
139 <li>Copyright &copy; 2014, Matt Fellows</li>
140 <li>Copyright &copy; 2014, Matt Fellows</li>
140 <li>Copyright &copy; 2014, Max Roman</li>
141 <li>Copyright &copy; 2014, Max Roman</li>
141 <li>Copyright &copy; 2014, Na'Tosha Bard</li>
142 <li>Copyright &copy; 2014, Na'Tosha Bard</li>
142 <li>Copyright &copy; 2014, Rasmus Selsmark</li>
143 <li>Copyright &copy; 2014, Rasmus Selsmark</li>
143 <li>Copyright &copy; 2014, SkryabinD</li>
144 <li>Copyright &copy; 2014, SkryabinD</li>
144 <li>Copyright &copy; 2014, Tim Freund</li>
145 <li>Copyright &copy; 2014, Tim Freund</li>
145 <li>Copyright &copy; 2014, Travis Burtrum</li>
146 <li>Copyright &copy; 2014, Travis Burtrum</li>
146 <li>Copyright &copy; 2014, whosaysni</li>
147 <li>Copyright &copy; 2014, whosaysni</li>
147 <li>Copyright &copy; 2014, Zoltan Gyarmati</li>
148 <li>Copyright &copy; 2014, Zoltan Gyarmati</li>
148 <li>Copyright &copy; 2010&ndash;2013, Marcin KuΕΊmiΕ„ski</li>
149 <li>Copyright &copy; 2010&ndash;2013, Marcin KuΕΊmiΕ„ski</li>
149 <li>Copyright &copy; 2010&ndash;2013, RhodeCode GmbH</li>
150 <li>Copyright &copy; 2010&ndash;2013, RhodeCode GmbH</li>
150 <li>Copyright &copy; 2011, 2013, Aparkar</li>
151 <li>Copyright &copy; 2011, 2013, Aparkar</li>
151 <li>Copyright &copy; 2012&ndash;2013, Nemcio</li>
152 <li>Copyright &copy; 2012&ndash;2013, Nemcio</li>
152 <li>Copyright &copy; 2012&ndash;2013, xpol</li>
153 <li>Copyright &copy; 2012&ndash;2013, xpol</li>
153 <li>Copyright &copy; 2013, Andrey Mivrenik</li>
154 <li>Copyright &copy; 2013, Andrey Mivrenik</li>
154 <li>Copyright &copy; 2013, ArcheR</li>
155 <li>Copyright &copy; 2013, ArcheR</li>
155 <li>Copyright &copy; 2013, Dennis Brakhane</li>
156 <li>Copyright &copy; 2013, Dennis Brakhane</li>
156 <li>Copyright &copy; 2013, gnustavo</li>
157 <li>Copyright &copy; 2013, gnustavo</li>
157 <li>Copyright &copy; 2013, Grzegorz RoΕΌniecki</li>
158 <li>Copyright &copy; 2013, Grzegorz RoΕΌniecki</li>
158 <li>Copyright &copy; 2013, Ilya Beda</li>
159 <li>Copyright &copy; 2013, Ilya Beda</li>
159 <li>Copyright &copy; 2013, ivlevdenis</li>
160 <li>Copyright &copy; 2013, ivlevdenis</li>
160 <li>Copyright &copy; 2013, Jonathan Sternberg</li>
161 <li>Copyright &copy; 2013, Jonathan Sternberg</li>
161 <li>Copyright &copy; 2013, Leonardo Carneiro</li>
162 <li>Copyright &copy; 2013, Leonardo Carneiro</li>
162 <li>Copyright &copy; 2013, Magnus Ericmats</li>
163 <li>Copyright &copy; 2013, Magnus Ericmats</li>
163 <li>Copyright &copy; 2013, Martin Vium</li>
164 <li>Copyright &copy; 2013, Martin Vium</li>
164 <li>Copyright &copy; 2013, Mikhail Zholobov</li>
165 <li>Copyright &copy; 2013, Mikhail Zholobov</li>
165 <li>Copyright &copy; 2013, mokeev1995</li>
166 <li>Copyright &copy; 2013, mokeev1995</li>
166 <li>Copyright &copy; 2013, Ruslan Bekenev</li>
167 <li>Copyright &copy; 2013, Ruslan Bekenev</li>
167 <li>Copyright &copy; 2013, shirou - しろう</li>
168 <li>Copyright &copy; 2013, shirou - しろう</li>
168 <li>Copyright &copy; 2013, Simon Lopez</li>
169 <li>Copyright &copy; 2013, Simon Lopez</li>
169 <li>Copyright &copy; 2013, softforwinxp</li>
170 <li>Copyright &copy; 2013, softforwinxp</li>
170 <li>Copyright &copy; 2013, stephanj</li>
171 <li>Copyright &copy; 2013, stephanj</li>
171 <li>Copyright &copy; 2013, zhmylove</li>
172 <li>Copyright &copy; 2013, zhmylove</li>
172 <li>Copyright &copy; 2013, こいんとす</li>
173 <li>Copyright &copy; 2013, こいんとす</li>
173 <li>Copyright &copy; 2011&ndash;2012, Augusto Herrmann</li>
174 <li>Copyright &copy; 2011&ndash;2012, Augusto Herrmann</li>
174 <li>Copyright &copy; 2012, Dan Sheridan</li>
175 <li>Copyright &copy; 2012, Dan Sheridan</li>
175 <li>Copyright &copy; 2012, H Waldo G</li>
176 <li>Copyright &copy; 2012, H Waldo G</li>
176 <li>Copyright &copy; 2012, hppj</li>
177 <li>Copyright &copy; 2012, hppj</li>
177 <li>Copyright &copy; 2012, Indra Talip</li>
178 <li>Copyright &copy; 2012, Indra Talip</li>
178 <li>Copyright &copy; 2012, mikespook</li>
179 <li>Copyright &copy; 2012, mikespook</li>
179 <li>Copyright &copy; 2012, nansenat16</li>
180 <li>Copyright &copy; 2012, nansenat16</li>
180 <li>Copyright &copy; 2012, Philip Jameson</li>
181 <li>Copyright &copy; 2012, Philip Jameson</li>
181 <li>Copyright &copy; 2012, Raoul Thill</li>
182 <li>Copyright &copy; 2012, Raoul Thill</li>
182 <li>Copyright &copy; 2012, Tony Bussieres</li>
183 <li>Copyright &copy; 2012, Tony Bussieres</li>
183 <li>Copyright &copy; 2012, Vincent Duvert</li>
184 <li>Copyright &copy; 2012, Vincent Duvert</li>
184 <li>Copyright &copy; 2012, Vladislav Poluhin</li>
185 <li>Copyright &copy; 2012, Vladislav Poluhin</li>
185 <li>Copyright &copy; 2012, Zachary Auclair</li>
186 <li>Copyright &copy; 2012, Zachary Auclair</li>
186 <li>Copyright &copy; 2011, Ankit Solanki</li>
187 <li>Copyright &copy; 2011, Ankit Solanki</li>
187 <li>Copyright &copy; 2011, Dmitri Kuznetsov</li>
188 <li>Copyright &copy; 2011, Dmitri Kuznetsov</li>
188 <li>Copyright &copy; 2011, Jared Bunting</li>
189 <li>Copyright &copy; 2011, Jared Bunting</li>
189 <li>Copyright &copy; 2011, Jason Harris</li>
190 <li>Copyright &copy; 2011, Jason Harris</li>
190 <li>Copyright &copy; 2011, Les Peabody</li>
191 <li>Copyright &copy; 2011, Les Peabody</li>
191 <li>Copyright &copy; 2011, Liad Shani</li>
192 <li>Copyright &copy; 2011, Liad Shani</li>
192 <li>Copyright &copy; 2011, Lorenzo M. Catucci</li>
193 <li>Copyright &copy; 2011, Lorenzo M. Catucci</li>
193 <li>Copyright &copy; 2011, Matt Zuba</li>
194 <li>Copyright &copy; 2011, Matt Zuba</li>
194 <li>Copyright &copy; 2011, Nicolas VINOT</li>
195 <li>Copyright &copy; 2011, Nicolas VINOT</li>
195 <li>Copyright &copy; 2011, Shawn K. O'Shea</li>
196 <li>Copyright &copy; 2011, Shawn K. O'Shea</li>
196 <li>Copyright &copy; 2010, Łukasz Balcerzak</li>
197 <li>Copyright &copy; 2010, Łukasz Balcerzak</li>
197
198
198 ## We did not list the following copyright holders, given that they appeared
199 ## We did not list the following copyright holders, given that they appeared
199 ## to use for-profit company affiliations in their contribution in the
200 ## to use for-profit company affiliations in their contribution in the
200 ## Mercurial log and therefore I didn't know if copyright was theirs or
201 ## Mercurial log and therefore I didn't know if copyright was theirs or
201 ## their company's.
202 ## their company's.
202 ## Copyright &copy; 2011 Thayne Harbaugh <thayne@fusionio.com>
203 ## Copyright &copy; 2011 Thayne Harbaugh <thayne@fusionio.com>
203 ## Copyright &copy; 2012 Dies Koper <diesk@fast.au.fujitsu.com>
204 ## Copyright &copy; 2012 Dies Koper <diesk@fast.au.fujitsu.com>
204 ## Copyright &copy; 2012 Erwin Kroon <e.kroon@smartmetersolutions.nl>
205 ## Copyright &copy; 2012 Erwin Kroon <e.kroon@smartmetersolutions.nl>
205 ## Copyright &copy; 2012 Vincent Caron <vcaron@bearstech.com>
206 ## Copyright &copy; 2012 Vincent Caron <vcaron@bearstech.com>
206 ##
207 ##
207 ## These contributors' contributions may not be copyrightable:
208 ## These contributors' contributions may not be copyrightable:
208 ## philip.j@hostdime.com in 2012
209 ## philip.j@hostdime.com in 2012
209 ## Stefan Engel <mail@engel-stefan.de> in 2012
210 ## Stefan Engel <mail@engel-stefan.de> in 2012
210 ## Ton Plomp <tcplomp@gmail.com> in 2013
211 ## Ton Plomp <tcplomp@gmail.com> in 2013
211 ##
212 ##
212 </ul>
213 </ul>
213
214
214 <p>The above are the copyright holders who have submitted direct
215 <p>The above are the copyright holders who have submitted direct
215 contributions to the Kallithea repository.</p>
216 contributions to the Kallithea repository.</p>
216
217
217 <p>In the <a href="https://kallithea-scm.org/repos/kallithea">Kallithea
218 <p>In the <a href="https://kallithea-scm.org/repos/kallithea">Kallithea
218 source code</a>, there is a
219 source code</a>, there is a
219 <a href="https://kallithea-scm.org/repos/kallithea/files/tip/LICENSE.md">list
220 <a href="https://kallithea-scm.org/repos/kallithea/files/tip/LICENSE.md">list
220 of third-party libraries and code that Kallithea incorporates</a>.</p>
221 of third-party libraries and code that Kallithea incorporates</a>.</p>
221
222
222 <p>The front-end contains a <a href="${h.url('/LICENSES.txt')}">list of
223 <p>The front-end contains a <a href="${h.url('/LICENSES.txt')}">list of
223 software that is used to build the front-end</a> but isn't distributed as a
224 software that is used to build the front-end</a> but isn't distributed as a
224 part of Kallithea.</p>
225 part of Kallithea.</p>
225
226
226 </div>
227 </div>
227 </div>
228 </div>
228
229
229 </%def>
230 </%def>
@@ -1,538 +1,538 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" class="container-fluid">
5 <div id="content" class="container-fluid">
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 class="footer navbar navbar-inverse">
14 <div class="footer navbar navbar-inverse">
15 <span class="navbar-text pull-left">
15 <span class="navbar-text pull-left">
16 ${_('Server instance: %s') % c.instance_id if c.instance_id else ''}
16 ${_('Server instance: %s') % c.instance_id if c.instance_id else ''}
17 </span>
17 </span>
18 <span class="navbar-text pull-right">
18 <span class="navbar-text pull-right">
19 This site is powered by
19 This site is powered by
20 %if c.visual.show_version:
20 %if c.visual.show_version:
21 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a> ${c.kallithea_version},
21 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a> ${c.kallithea_version},
22 %else:
22 %else:
23 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a>,
23 <a class="navbar-link" href="${h.url('kallithea_project_url')}" target="_blank">Kallithea</a>,
24 %endif
24 %endif
25 which is
25 which is
26 <a class="navbar-link" href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2022 by various authors &amp; licensed under GPLv3</a>.
26 <a class="navbar-link" href="${h.canonical_url('about')}#copyright">&copy; 2010&ndash;2023 by various authors &amp; licensed under GPLv3</a>.
27 %if c.issues_url:
27 %if c.issues_url:
28 &ndash; <a class="navbar-link" href="${c.issues_url}" target="_blank">${_('Support')}</a>
28 &ndash; <a class="navbar-link" href="${c.issues_url}" target="_blank">${_('Support')}</a>
29 %endif
29 %endif
30 </span>
30 </span>
31 </div>
31 </div>
32
32
33 <!-- END FOOTER -->
33 <!-- END FOOTER -->
34
34
35 ### MAKO DEFS ###
35 ### MAKO DEFS ###
36
36
37 <%block name="branding_title">
37 <%block name="branding_title">
38 %if c.site_name:
38 %if c.site_name:
39 &middot; ${c.site_name}
39 &middot; ${c.site_name}
40 %endif
40 %endif
41 </%block>
41 </%block>
42
42
43 <%def name="flash_msg()">
43 <%def name="flash_msg()">
44 <%include file="/base/flash_msg.html"/>
44 <%include file="/base/flash_msg.html"/>
45 </%def>
45 </%def>
46
46
47 <%def name="breadcrumbs()">
47 <%def name="breadcrumbs()">
48 <div class="panel-title">
48 <div class="panel-title">
49 ${self.breadcrumbs_links()}
49 ${self.breadcrumbs_links()}
50 </div>
50 </div>
51 </%def>
51 </%def>
52
52
53 <%def name="admin_menu()">
53 <%def name="admin_menu()">
54 <ul class="dropdown-menu" role="menu">
54 <ul class="dropdown-menu" role="menu">
55 <li><a href="${h.url('admin_home')}"><i class="icon-book"></i>${_('Admin Journal')}</a></li>
55 <li><a href="${h.url('admin_home')}"><i class="icon-book"></i>${_('Admin Journal')}</a></li>
56 <li><a href="${h.url('repos')}"><i class="icon-database"></i>${_('Repositories')}</a></li>
56 <li><a href="${h.url('repos')}"><i class="icon-database"></i>${_('Repositories')}</a></li>
57 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i>${_('Repository Groups')}</a></li>
57 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i>${_('Repository Groups')}</a></li>
58 <li><a href="${h.url('users')}"><i class="icon-user"></i>${_('Users')}</a></li>
58 <li><a href="${h.url('users')}"><i class="icon-user"></i>${_('Users')}</a></li>
59 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i>${_('User Groups')}</a></li>
59 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i>${_('User Groups')}</a></li>
60 <li><a href="${h.url('admin_permissions')}"><i class="icon-block"></i>${_('Default Permissions')}</a></li>
60 <li><a href="${h.url('admin_permissions')}"><i class="icon-block"></i>${_('Default Permissions')}</a></li>
61 <li><a href="${h.url('auth_home')}"><i class="icon-key"></i>${_('Authentication')}</a></li>
61 <li><a href="${h.url('auth_home')}"><i class="icon-key"></i>${_('Authentication')}</a></li>
62 <li><a href="${h.url('defaults')}"><i class="icon-wrench"></i>${_('Repository Defaults')}</a></li>
62 <li><a href="${h.url('defaults')}"><i class="icon-wrench"></i>${_('Repository Defaults')}</a></li>
63 <li class="last"><a href="${h.url('admin_settings')}"><i class="icon-gear"></i>${_('Settings')}</a></li>
63 <li class="last"><a href="${h.url('admin_settings')}"><i class="icon-gear"></i>${_('Settings')}</a></li>
64 </ul>
64 </ul>
65
65
66 </%def>
66 </%def>
67
67
68
68
69 ## admin menu used for people that have some admin resources
69 ## admin menu used for people that have some admin resources
70 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
70 <%def name="admin_menu_simple(repositories=None, repository_groups=None, user_groups=None)">
71 <ul class="dropdown-menu" role="menu">
71 <ul class="dropdown-menu" role="menu">
72 %if repositories:
72 %if repositories:
73 <li><a href="${h.url('repos')}"><i class="icon-database"></i>${_('Repositories')}</a></li>
73 <li><a href="${h.url('repos')}"><i class="icon-database"></i>${_('Repositories')}</a></li>
74 %endif
74 %endif
75 %if repository_groups:
75 %if repository_groups:
76 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i>${_('Repository Groups')}</a></li>
76 <li><a href="${h.url('repos_groups')}"><i class="icon-folder"></i>${_('Repository Groups')}</a></li>
77 %endif
77 %endif
78 %if user_groups:
78 %if user_groups:
79 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i>${_('User Groups')}</a></li>
79 <li><a href="${h.url('users_groups')}"><i class="icon-users"></i>${_('User Groups')}</a></li>
80 %endif
80 %endif
81 </ul>
81 </ul>
82 </%def>
82 </%def>
83
83
84 <%def name="repolabel(repo_type)">
84 <%def name="repolabel(repo_type)">
85 %if repo_type == 'hg':
85 %if repo_type == 'hg':
86 <span class="label label-repo" title="${_('Mercurial repository')}">hg</span>
86 <span class="label label-repo" title="${_('Mercurial repository')}">hg</span>
87 %endif
87 %endif
88 %if repo_type == 'git':
88 %if repo_type == 'git':
89 <span class="label label-repo" title="${_('Git repository')}">git</span>
89 <span class="label label-repo" title="${_('Git repository')}">git</span>
90 %endif
90 %endif
91 </%def>
91 </%def>
92
92
93 <%def name="repo_context_bar(current=None, rev=None)">
93 <%def name="repo_context_bar(current=None, rev=None)">
94 <% rev = None if rev == 'tip' else rev %>
94 <% rev = None if rev == 'tip' else rev %>
95 <!--- CONTEXT BAR -->
95 <!--- CONTEXT BAR -->
96 <nav id="context-bar" class="navbar navbar-inverse">
96 <nav id="context-bar" class="navbar navbar-inverse">
97 <div class="container-fluid">
97 <div class="container-fluid">
98 <div class="navbar-header">
98 <div class="navbar-header">
99 <div class="navbar-brand">
99 <div class="navbar-brand">
100 ${repolabel(c.db_repo.repo_type)}
100 ${repolabel(c.db_repo.repo_type)}
101
101
102 ## public/private
102 ## public/private
103 %if c.db_repo.private:
103 %if c.db_repo.private:
104 <i class="icon-lock"></i>
104 <i class="icon-lock"></i>
105 %else:
105 %else:
106 <i class="icon-globe"></i>
106 <i class="icon-globe"></i>
107 %endif
107 %endif
108 %for group in c.db_repo.groups_with_parents:
108 %for group in c.db_repo.groups_with_parents:
109 ${h.link_to(group.name, url('repos_group_home', group_name=group.group_name), class_='navbar-link')}
109 ${h.link_to(group.name, url('repos_group_home', group_name=group.group_name), class_='navbar-link')}
110 &raquo;
110 &raquo;
111 %endfor
111 %endfor
112 ${h.link_to(c.db_repo.just_name, url('summary_home', repo_name=c.db_repo.repo_name), class_='navbar-link')}
112 ${h.link_to(c.db_repo.just_name, url('summary_home', repo_name=c.db_repo.repo_name), class_='navbar-link')}
113
113
114 %if current == 'createfork':
114 %if current == 'createfork':
115 - ${_('Create Fork')}
115 - ${_('Create Fork')}
116 %endif
116 %endif
117 </div>
117 </div>
118 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#context-pages" aria-expanded="false">
118 <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#context-pages" aria-expanded="false">
119 <span class="sr-only">Toggle navigation</span>
119 <span class="sr-only">Toggle navigation</span>
120 <span class="icon-bar"></span>
120 <span class="icon-bar"></span>
121 <span class="icon-bar"></span>
121 <span class="icon-bar"></span>
122 <span class="icon-bar"></span>
122 <span class="icon-bar"></span>
123 </button>
123 </button>
124 </div>
124 </div>
125 <div id="context-pages" class="navbar-collapse collapse">
125 <div id="context-pages" class="navbar-collapse collapse">
126 <ul class="nav navbar-nav navbar-right">
126 <ul class="nav navbar-nav navbar-right">
127 <li class="${'active' if current == 'summary' else ''}" data-context="summary"><a href="${h.url('summary_home', repo_name=c.repo_name)}"><i class="icon-doc-text"></i>${_('Summary')}</a></li>
127 <li class="${'active' if current == 'summary' else ''}" data-context="summary"><a href="${h.url('summary_home', repo_name=c.repo_name)}"><i class="icon-doc-text"></i>${_('Summary')}</a></li>
128 %if rev:
128 %if rev:
129 <li class="${'active' if current == 'changelog' else ''}" data-context="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>
129 <li class="${'active' if current == 'changelog' else ''}" data-context="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>
130 %else:
130 %else:
131 <li class="${'active' if current == 'changelog' else ''}" data-context="changelog"><a href="${h.url('changelog_home', repo_name=c.repo_name)}"><i class="icon-clock"></i>${_('Changelog')}</a></li>
131 <li class="${'active' if current == 'changelog' else ''}" data-context="changelog"><a href="${h.url('changelog_home', repo_name=c.repo_name)}"><i class="icon-clock"></i>${_('Changelog')}</a></li>
132 %endif
132 %endif
133 <li class="${'active' if current == 'files' else ''}" data-context="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>
133 <li class="${'active' if current == 'files' else ''}" data-context="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>
134 <li class="${'active' if current == 'showpullrequest' else ''}" data-context="showpullrequest">
134 <li class="${'active' if current == 'showpullrequest' else ''}" data-context="showpullrequest">
135 <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')}
135 <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')}
136 %if c.repository_pull_requests:
136 %if c.repository_pull_requests:
137 <span class="badge">${c.repository_pull_requests}</span>
137 <span class="badge">${c.repository_pull_requests}</span>
138 %endif
138 %endif
139 </a>
139 </a>
140 </li>
140 </li>
141 <li class="${'active' if current == 'switch-to' else ''}" data-context="switch-to">
141 <li class="${'active' if current == 'switch-to' else ''}" data-context="switch-to">
142 <input id="branch_switcher" name="branch_switcher" type="hidden">
142 <input id="branch_switcher" name="branch_switcher" type="hidden">
143 </li>
143 </li>
144 <li class="${'active' if current == 'options' else ''} dropdown" data-context="options">
144 <li class="${'active' if current == 'options' else ''} dropdown" data-context="options">
145 %if h.HasRepoPermissionLevel('admin')(c.repo_name):
145 %if h.HasRepoPermissionLevel('admin')(c.repo_name):
146 <a href="${h.url('edit_repo',repo_name=c.repo_name)}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true"><i class="icon-wrench"></i>${_('Options')} <i class="caret"></i></a>
146 <a href="${h.url('edit_repo',repo_name=c.repo_name)}" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true"><i class="icon-wrench"></i>${_('Options')} <i class="caret"></i></a>
147 %else:
147 %else:
148 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true"><i class="icon-wrench"></i>${_('Options')} <i class="caret"></i></a>
148 <a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false" aria-haspopup="true"><i class="icon-wrench"></i>${_('Options')} <i class="caret"></i></a>
149 %endif
149 %endif
150 <ul class="dropdown-menu" role="menu" aria-hidden="true">
150 <ul class="dropdown-menu" role="menu" aria-hidden="true">
151 %if h.HasRepoPermissionLevel('admin')(c.repo_name):
151 %if h.HasRepoPermissionLevel('admin')(c.repo_name):
152 <li><a href="${h.url('edit_repo',repo_name=c.repo_name)}"><i class="icon-gear"></i>${_('Settings')}</a></li>
152 <li><a href="${h.url('edit_repo',repo_name=c.repo_name)}"><i class="icon-gear"></i>${_('Settings')}</a></li>
153 %endif
153 %endif
154 %if c.db_repo.fork:
154 %if c.db_repo.fork:
155 <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 <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)}">
156 <i class="icon-git-compare"></i>${_('Compare Fork')}</a></li>
156 <i class="icon-git-compare"></i>${_('Compare Fork')}</a></li>
157 %endif
157 %endif
158 <li><a href="${h.url('compare_home',repo_name=c.repo_name)}"><i class="icon-git-compare"></i>${_('Compare')}</a></li>
158 <li><a href="${h.url('compare_home',repo_name=c.repo_name)}"><i class="icon-git-compare"></i>${_('Compare')}</a></li>
159
159
160 <li><a href="${h.url('search_repo',repo_name=c.repo_name)}"><i class="icon-search"></i>${_('Search')}</a></li>
160 <li><a href="${h.url('search_repo',repo_name=c.repo_name)}"><i class="icon-search"></i>${_('Search')}</a></li>
161
161
162 ## TODO: this check feels wrong, it would be better to have a check for permissions
162 ## TODO: this check feels wrong, it would be better to have a check for permissions
163 ## also it feels like a job for the controller
163 ## also it feels like a job for the controller
164 %if request.authuser.username != 'default':
164 %if request.authuser.username != 'default':
165 <li>
165 <li>
166 <a href="#" class="${'following' if c.repository_following else 'follow'}" onclick="return toggleFollowingRepo(this, ${c.db_repo.repo_id});">
166 <a href="#" class="${'following' if c.repository_following else 'follow'}" onclick="return toggleFollowingRepo(this, ${c.db_repo.repo_id});">
167 <span class="show-follow"><i class="icon-heart-empty"></i>${_('Follow')}</span>
167 <span class="show-follow"><i class="icon-heart-empty"></i>${_('Follow')}</span>
168 <span class="show-following"><i class="icon-heart"></i>${_('Unfollow')}</span>
168 <span class="show-following"><i class="icon-heart"></i>${_('Unfollow')}</span>
169 </a>
169 </a>
170 </li>
170 </li>
171 <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}"><i class="icon-fork"></i>${_('Fork')}</a></li>
171 <li><a href="${h.url('repo_fork_home',repo_name=c.repo_name)}"><i class="icon-fork"></i>${_('Fork')}</a></li>
172 <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}"><i class="icon-git-pull-request"></i>${_('Create Pull Request')}</a></li>
172 <li><a href="${h.url('pullrequest_home',repo_name=c.repo_name)}"><i class="icon-git-pull-request"></i>${_('Create Pull Request')}</a></li>
173 %endif
173 %endif
174 </ul>
174 </ul>
175 </li>
175 </li>
176 </ul>
176 </ul>
177 </div>
177 </div>
178 </div>
178 </div>
179 </nav>
179 </nav>
180 <script>
180 <script>
181 'use strict';
181 'use strict';
182 $(document).ready(function() {
182 $(document).ready(function() {
183 var bcache = {};
183 var bcache = {};
184
184
185 var branch_switcher_placeholder = '<i class="icon-exchange"></i>' + ${h.jshtml(_('Switch To'))} + ' <span class="caret"></span>';
185 var branch_switcher_placeholder = '<i class="icon-exchange"></i>' + ${h.jshtml(_('Switch To'))} + ' <span class="caret"></span>';
186 $("#branch_switcher").select2({
186 $("#branch_switcher").select2({
187 placeholder: branch_switcher_placeholder,
187 placeholder: branch_switcher_placeholder,
188 dropdownAutoWidth: true,
188 dropdownAutoWidth: true,
189 sortResults: prefixFirstSort,
189 sortResults: prefixFirstSort,
190 formatResult: function(obj) {
190 formatResult: function(obj) {
191 return obj.text.html_escape();
191 return obj.text.html_escape();
192 },
192 },
193 formatSelection: function(obj) {
193 formatSelection: function(obj) {
194 return obj.text.html_escape();
194 return obj.text.html_escape();
195 },
195 },
196 formatNoMatches: function() {
196 formatNoMatches: function() {
197 return ${h.jshtml(_('No matches found'))};
197 return ${h.jshtml(_('No matches found'))};
198 },
198 },
199 escapeMarkup: function(m) {
199 escapeMarkup: function(m) {
200 if (m == branch_switcher_placeholder)
200 if (m == branch_switcher_placeholder)
201 return branch_switcher_placeholder;
201 return branch_switcher_placeholder;
202 return Select2.util.escapeMarkup(m);
202 return Select2.util.escapeMarkup(m);
203 },
203 },
204 containerCssClass: "branch-switcher",
204 containerCssClass: "branch-switcher",
205 dropdownCssClass: "repo-switcher-dropdown",
205 dropdownCssClass: "repo-switcher-dropdown",
206 query: function(query) {
206 query: function(query) {
207 var key = 'cache';
207 var key = 'cache';
208 var cached = bcache[key];
208 var cached = bcache[key];
209 if (cached) {
209 if (cached) {
210 var data = {
210 var data = {
211 results: []
211 results: []
212 };
212 };
213 // filter results
213 // filter results
214 $.each(cached.results, function() {
214 $.each(cached.results, function() {
215 var section = this.text;
215 var section = this.text;
216 var children = [];
216 var children = [];
217 $.each(this.children, function() {
217 $.each(this.children, function() {
218 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
218 if (query.term.length === 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0) {
219 children.push({
219 children.push({
220 'id': this.id,
220 'id': this.id,
221 'text': this.text,
221 'text': this.text,
222 'type': this.type,
222 'type': this.type,
223 'obj': this.obj
223 'obj': this.obj
224 });
224 });
225 }
225 }
226 });
226 });
227 if (children.length !== 0) {
227 if (children.length !== 0) {
228 data.results.push({
228 data.results.push({
229 'text': section,
229 'text': section,
230 'children': children
230 'children': children
231 });
231 });
232 }
232 }
233
233
234 });
234 });
235 query.callback(data);
235 query.callback(data);
236 } else {
236 } else {
237 $.ajax({
237 $.ajax({
238 url: pyroutes.url('repo_refs_data', {
238 url: pyroutes.url('repo_refs_data', {
239 'repo_name': ${h.js(c.repo_name)}
239 'repo_name': ${h.js(c.repo_name)}
240 }),
240 }),
241 data: {},
241 data: {},
242 dataType: 'json',
242 dataType: 'json',
243 type: 'GET',
243 type: 'GET',
244 success: function(data) {
244 success: function(data) {
245 bcache[key] = data;
245 bcache[key] = data;
246 query.callback(data);
246 query.callback(data);
247 }
247 }
248 });
248 });
249 }
249 }
250 }
250 }
251 });
251 });
252
252
253 $("#branch_switcher").on('select2-selecting', function(e) {
253 $("#branch_switcher").on('select2-selecting', function(e) {
254 e.preventDefault();
254 e.preventDefault();
255 var context = $('#context-bar .active').data('context');
255 var context = $('#context-bar .active').data('context');
256 if (context == 'files') {
256 if (context == 'files') {
257 window.location = pyroutes.url('files_home', {
257 window.location = pyroutes.url('files_home', {
258 'repo_name': REPO_NAME,
258 'repo_name': REPO_NAME,
259 'revision': e.choice.id,
259 'revision': e.choice.id,
260 'f_path': '',
260 'f_path': '',
261 'at': e.choice.text
261 'at': e.choice.text
262 });
262 });
263 } else if (context == 'changelog') {
263 } else if (context == 'changelog') {
264 if (e.choice.type == 'tag' || e.choice.type == 'book') {
264 if (e.choice.type == 'tag' || e.choice.type == 'book') {
265 $("#branch_filter").append($('<'+'option/>').val(e.choice.text));
265 $("#branch_filter").append($('<'+'option/>').val(e.choice.text));
266 }
266 }
267 $("#branch_filter").val(e.choice.text).change();
267 $("#branch_filter").val(e.choice.text).change();
268 } else {
268 } else {
269 window.location = pyroutes.url('changelog_home', {
269 window.location = pyroutes.url('changelog_home', {
270 'repo_name': ${h.js(c.repo_name)},
270 'repo_name': ${h.js(c.repo_name)},
271 'branch': e.choice.text
271 'branch': e.choice.text
272 });
272 });
273 }
273 }
274 });
274 });
275 });
275 });
276 </script>
276 </script>
277 <!--- END CONTEXT BAR -->
277 <!--- END CONTEXT BAR -->
278 </%def>
278 </%def>
279
279
280 <%def name="menu(current=None)">
280 <%def name="menu(current=None)">
281 <ul id="quick" class="nav navbar-nav navbar-right">
281 <ul id="quick" class="nav navbar-nav navbar-right">
282 <!-- repo switcher -->
282 <!-- repo switcher -->
283 <li class="${'active' if current == 'repositories' else ''}">
283 <li class="${'active' if current == 'repositories' else ''}">
284 <input id="repo_switcher" name="repo_switcher" type="hidden">
284 <input id="repo_switcher" name="repo_switcher" type="hidden">
285 </li>
285 </li>
286
286
287 ##ROOT MENU
287 ##ROOT MENU
288 %if request.authuser.username != 'default':
288 %if request.authuser.username != 'default':
289 <li class="${'active' if current == 'journal' else ''}">
289 <li class="${'active' if current == 'journal' else ''}">
290 <a class="menu_link" title="${_('Show recent activity')}" href="${h.url('journal')}">
290 <a class="menu_link" title="${_('Show recent activity')}" href="${h.url('journal')}">
291 <i class="icon-book"></i>${_('Journal')}
291 <i class="icon-book"></i>${_('Journal')}
292 </a>
292 </a>
293 </li>
293 </li>
294 %else:
294 %else:
295 <li class="${'active' if current == 'journal' else ''}">
295 <li class="${'active' if current == 'journal' else ''}">
296 <a class="menu_link" title="${_('Public journal')}" href="${h.url('public_journal')}">
296 <a class="menu_link" title="${_('Public journal')}" href="${h.url('public_journal')}">
297 <i class="icon-book"></i>${_('Public journal')}
297 <i class="icon-book"></i>${_('Public journal')}
298 </a>
298 </a>
299 </li>
299 </li>
300 %endif
300 %endif
301 <li class="${'active' if current == 'gists' else ''} dropdown">
301 <li class="${'active' if current == 'gists' else ''} dropdown">
302 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Show public gists')}" href="${h.url('gists')}">
302 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Show public gists')}" href="${h.url('gists')}">
303 <i class="icon-clippy"></i>${_('Gists')} <span class="caret"></span>
303 <i class="icon-clippy"></i>${_('Gists')} <span class="caret"></span>
304 </a>
304 </a>
305 <ul class="dropdown-menu" role="menu">
305 <ul class="dropdown-menu" role="menu">
306 <li><a href="${h.url('new_gist', public=1)}"><i class="icon-paste"></i>${_('Create New Gist')}</a></li>
306 <li><a href="${h.url('new_gist', public=1)}"><i class="icon-paste"></i>${_('Create New Gist')}</a></li>
307 <li><a href="${h.url('gists')}"><i class="icon-globe"></i>${_('All Public Gists')}</a></li>
307 <li><a href="${h.url('gists')}"><i class="icon-globe"></i>${_('All Public Gists')}</a></li>
308 %if request.authuser.username != 'default':
308 %if request.authuser.username != 'default':
309 <li><a href="${h.url('gists', public=1)}"><i class="icon-user"></i>${_('My Public Gists')}</a></li>
309 <li><a href="${h.url('gists', public=1)}"><i class="icon-user"></i>${_('My Public Gists')}</a></li>
310 <li><a href="${h.url('gists', private=1)}"><i class="icon-lock"></i>${_('My Private Gists')}</a></li>
310 <li><a href="${h.url('gists', private=1)}"><i class="icon-lock"></i>${_('My Private Gists')}</a></li>
311 %endif
311 %endif
312 </ul>
312 </ul>
313 </li>
313 </li>
314 <li class="${'active' if current == 'search' else ''}">
314 <li class="${'active' if current == 'search' else ''}">
315 <a class="menu_link" title="${_('Search in repositories')}" href="${h.url('search')}">
315 <a class="menu_link" title="${_('Search in repositories')}" href="${h.url('search')}">
316 <i class="icon-search"></i>${_('Search')}
316 <i class="icon-search"></i>${_('Search')}
317 </a>
317 </a>
318 </li>
318 </li>
319 % if h.HasPermissionAny('hg.admin')('access admin main page'):
319 % if h.HasPermissionAny('hg.admin')('access admin main page'):
320 <li class="${'active' if current == 'admin' else ''} dropdown">
320 <li class="${'active' if current == 'admin' else ''} dropdown">
321 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Admin')}" href="${h.url('admin_home')}">
321 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Admin')}" href="${h.url('admin_home')}">
322 <i class="icon-gear"></i>${_('Admin')} <span class="caret"></span>
322 <i class="icon-gear"></i>${_('Admin')} <span class="caret"></span>
323 </a>
323 </a>
324 ${admin_menu()}
324 ${admin_menu()}
325 </li>
325 </li>
326 % elif request.authuser.repositories_admin or request.authuser.repository_groups_admin or request.authuser.user_groups_admin:
326 % elif request.authuser.repositories_admin or request.authuser.repository_groups_admin or request.authuser.user_groups_admin:
327 <li class="${'active' if current == 'admin' else ''} dropdown">
327 <li class="${'active' if current == 'admin' else ''} dropdown">
328 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Admin')}" href="">
328 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" title="${_('Admin')}" href="">
329 <i class="icon-gear"></i>${_('Admin')}
329 <i class="icon-gear"></i>${_('Admin')}
330 </a>
330 </a>
331 ${admin_menu_simple(request.authuser.repositories_admin,
331 ${admin_menu_simple(request.authuser.repositories_admin,
332 request.authuser.repository_groups_admin,
332 request.authuser.repository_groups_admin,
333 request.authuser.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
333 request.authuser.user_groups_admin or h.HasPermissionAny('hg.usergroup.create.true')())}
334 </li>
334 </li>
335 % endif
335 % endif
336
336
337 <li class="${'active' if current == 'my_pullrequests' else ''}">
337 <li class="${'active' if current == 'my_pullrequests' else ''}">
338 <a class="menu_link" title="${_('My Pull Requests')}" href="${h.url('my_pullrequests')}">
338 <a class="menu_link" title="${_('My Pull Requests')}" href="${h.url('my_pullrequests')}">
339 <i class="icon-git-pull-request"></i>${_('My Pull Requests')}
339 <i class="icon-git-pull-request"></i>${_('My Pull Requests')}
340 %if c.my_pr_count != 0:
340 %if c.my_pr_count != 0:
341 <span class="badge">${c.my_pr_count}</span>
341 <span class="badge">${c.my_pr_count}</span>
342 %endif
342 %endif
343 </a>
343 </a>
344 </li>
344 </li>
345
345
346 ## USER MENU
346 ## USER MENU
347 <li class="dropdown">
347 <li class="dropdown">
348 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" id="quick_login_link"
348 <a class="menu_link dropdown-toggle" data-toggle="dropdown" role="button" id="quick_login_link"
349 aria-expanded="false" aria-controls="quick_login" href="#">
349 aria-expanded="false" aria-controls="quick_login" href="#">
350 ${h.gravatar_div(request.authuser.email, size=20, div_class="icon")}
350 ${h.gravatar_div(request.authuser.email, size=20, div_class="icon")}
351 %if request.authuser.username != 'default':
351 %if request.authuser.username != 'default':
352 <span class="menu_link_user">${request.authuser.username}</span>
352 <span class="menu_link_user">${request.authuser.username}</span>
353 %else:
353 %else:
354 <span>${_('Not Logged In')}</span>
354 <span>${_('Not Logged In')}</span>
355 %endif
355 %endif
356 <i class="caret"></i>
356 <i class="caret"></i>
357 </a>
357 </a>
358
358
359 <div class="dropdown-menu user-menu" role="menu">
359 <div class="dropdown-menu user-menu" role="menu">
360 <div id="quick_login" role="form" aria-describedby="quick_login_h" aria-hidden="true" class="container-fluid">
360 <div id="quick_login" role="form" aria-describedby="quick_login_h" aria-hidden="true" class="container-fluid">
361 %if request.authuser.username == 'default' or request.authuser.user_id is None:
361 %if request.authuser.username == 'default' or request.authuser.user_id is None:
362 ${h.form(h.url('login_home', came_from=request.path_qs), class_='form clearfix')}
362 ${h.form(h.url('login_home', came_from=request.path_qs), class_='form clearfix')}
363 <h4 id="quick_login_h">${_('Login to Your Account')}</h4>
363 <h4 id="quick_login_h">${_('Login to Your Account')}</h4>
364 <label>
364 <label>
365 ${_('Username')}:
365 ${_('Username')}:
366 ${h.text('username',class_='form-control')}
366 ${h.text('username',class_='form-control')}
367 </label>
367 </label>
368 <label>
368 <label>
369 ${_('Password')}:
369 ${_('Password')}:
370 ${h.password('password',class_='form-control')}
370 ${h.password('password',class_='form-control')}
371 </label>
371 </label>
372 <div class="password_forgotten">
372 <div class="password_forgotten">
373 ${h.link_to(_('Forgot password?'),h.url('reset_password'))}
373 ${h.link_to(_('Forgot password?'),h.url('reset_password'))}
374 </div>
374 </div>
375 <div class="register">
375 <div class="register">
376 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
376 %if h.HasPermissionAny('hg.admin', 'hg.register.auto_activate', 'hg.register.manual_activate')():
377 ${h.link_to(_("Don't have an account?"),h.url('register'))}
377 ${h.link_to(_("Don't have an account?"),h.url('register'))}
378 %endif
378 %endif
379 </div>
379 </div>
380 <div class="submit">
380 <div class="submit">
381 ${h.submit('sign_in',_('Log In'),class_="btn btn-default btn-xs")}
381 ${h.submit('sign_in',_('Log In'),class_="btn btn-default btn-xs")}
382 </div>
382 </div>
383 ${h.end_form()}
383 ${h.end_form()}
384 %else:
384 %else:
385 <div class="pull-left">
385 <div class="pull-left">
386 ${h.gravatar_div(request.authuser.email, size=48, div_class="big_gravatar")}
386 ${h.gravatar_div(request.authuser.email, size=48, div_class="big_gravatar")}
387 <b class="full_name">${request.authuser.full_name_or_username}</b>
387 <b class="full_name">${request.authuser.full_name_or_username}</b>
388 <div class="email">${request.authuser.email}</div>
388 <div class="email">${request.authuser.email}</div>
389 </div>
389 </div>
390 <div id="quick_login_h" class="pull-right list-group text-right">
390 <div id="quick_login_h" class="pull-right list-group text-right">
391 ${h.link_to(_('My Account'),h.url('my_account'),class_='list-group-item')}
391 ${h.link_to(_('My Account'),h.url('my_account'),class_='list-group-item')}
392 %if not request.authuser.is_external_auth:
392 %if not request.authuser.is_external_auth:
393 ## Cannot log out if using external (container) authentication.
393 ## Cannot log out if using external (container) authentication.
394 ${h.link_to(_('Log Out'), h.url('logout_home'),class_='list-group-item')}
394 ${h.link_to(_('Log Out'), h.url('logout_home'),class_='list-group-item')}
395 %endif
395 %endif
396 </div>
396 </div>
397 %endif
397 %endif
398 </div>
398 </div>
399 </div>
399 </div>
400 </li>
400 </li>
401 </ul>
401 </ul>
402
402
403 <script>
403 <script>
404 'use strict';
404 'use strict';
405 $(document).ready(function(){
405 $(document).ready(function(){
406 var visual_show_public_icon = ${h.js(c.visual.show_public_icon)};
406 var visual_show_public_icon = ${h.js(c.visual.show_public_icon)};
407 var cache = {}
407 var cache = {}
408 /*format the look of items in the list*/
408 /*format the look of items in the list*/
409 function format(state){
409 function format(state){
410 if (!state.id){
410 if (!state.id){
411 return state.text.html_escape(); // optgroup
411 return state.text.html_escape(); // optgroup
412 }
412 }
413 var obj_dict = state.obj;
413 var obj_dict = state.obj;
414 var tmpl = '';
414 var tmpl = '';
415
415
416 if(obj_dict && state.type == 'repo'){
416 if(obj_dict && state.type == 'repo'){
417 tmpl += '<span class="repo-icons">';
417 tmpl += '<span class="repo-icons">';
418 if(obj_dict['repo_type'] === 'hg'){
418 if(obj_dict['repo_type'] === 'hg'){
419 tmpl += '<span class="label label-repo" title="${_('Mercurial repository')}">hg</span> ';
419 tmpl += '<span class="label label-repo" title="${_('Mercurial repository')}">hg</span> ';
420 }
420 }
421 else if(obj_dict['repo_type'] === 'git'){
421 else if(obj_dict['repo_type'] === 'git'){
422 tmpl += '<span class="label label-repo" title="${_('Git repository')}">git</span> ';
422 tmpl += '<span class="label label-repo" title="${_('Git repository')}">git</span> ';
423 }
423 }
424 if(obj_dict['private']){
424 if(obj_dict['private']){
425 tmpl += '<i class="icon-lock"></i>';
425 tmpl += '<i class="icon-lock"></i>';
426 }
426 }
427 else if(visual_show_public_icon){
427 else if(visual_show_public_icon){
428 tmpl += '<i class="icon-globe"></i>';
428 tmpl += '<i class="icon-globe"></i>';
429 }
429 }
430 tmpl += '</span>';
430 tmpl += '</span>';
431 }
431 }
432 if(obj_dict && state.type == 'group'){
432 if(obj_dict && state.type == 'group'){
433 tmpl += '<i class="icon-folder"></i>';
433 tmpl += '<i class="icon-folder"></i>';
434 }
434 }
435 tmpl += state.text.html_escape();
435 tmpl += state.text.html_escape();
436 return tmpl;
436 return tmpl;
437 }
437 }
438
438
439 var repo_switcher_placeholder = '<i class="icon-database"></i>' + ${h.jshtml(_('Repositories'))} + ' <span class="caret"></span>';
439 var repo_switcher_placeholder = '<i class="icon-database"></i>' + ${h.jshtml(_('Repositories'))} + ' <span class="caret"></span>';
440 $("#repo_switcher").select2({
440 $("#repo_switcher").select2({
441 placeholder: repo_switcher_placeholder,
441 placeholder: repo_switcher_placeholder,
442 dropdownAutoWidth: true,
442 dropdownAutoWidth: true,
443 sortResults: prefixFirstSort,
443 sortResults: prefixFirstSort,
444 formatResult: format,
444 formatResult: format,
445 formatSelection: format,
445 formatSelection: format,
446 formatNoMatches: function(){
446 formatNoMatches: function(){
447 return ${h.jshtml(_('No matches found'))};
447 return ${h.jshtml(_('No matches found'))};
448 },
448 },
449 containerCssClass: "repo-switcher",
449 containerCssClass: "repo-switcher",
450 dropdownCssClass: "repo-switcher-dropdown",
450 dropdownCssClass: "repo-switcher-dropdown",
451 escapeMarkup: function(m){
451 escapeMarkup: function(m){
452 if (m == repo_switcher_placeholder)
452 if (m == repo_switcher_placeholder)
453 return repo_switcher_placeholder;
453 return repo_switcher_placeholder;
454 return Select2.util.escapeMarkup(m);
454 return Select2.util.escapeMarkup(m);
455 },
455 },
456 query: function(query){
456 query: function(query){
457 var key = 'cache';
457 var key = 'cache';
458 var cached = cache[key] ;
458 var cached = cache[key] ;
459 if(cached) {
459 if(cached) {
460 var data = {results: []};
460 var data = {results: []};
461 //filter results
461 //filter results
462 $.each(cached.results, function(){
462 $.each(cached.results, function(){
463 var section = this.text;
463 var section = this.text;
464 var children = [];
464 var children = [];
465 $.each(this.children, function(){
465 $.each(this.children, function(){
466 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
466 if(query.term.length == 0 || this.text.toUpperCase().indexOf(query.term.toUpperCase()) >= 0 ){
467 children.push({'id': this.id, 'text': this.text, 'type': this.type, 'obj': this.obj});
467 children.push({'id': this.id, 'text': this.text, 'type': this.type, 'obj': this.obj});
468 }
468 }
469 });
469 });
470 if(children.length !== 0){
470 if(children.length !== 0){
471 data.results.push({'text': section, 'children': children});
471 data.results.push({'text': section, 'children': children});
472 }
472 }
473
473
474 });
474 });
475 query.callback(data);
475 query.callback(data);
476 }else{
476 }else{
477 $.ajax({
477 $.ajax({
478 url: ${h.js(h.url('repo_switcher_data'))},
478 url: ${h.js(h.url('repo_switcher_data'))},
479 data: {},
479 data: {},
480 dataType: 'json',
480 dataType: 'json',
481 type: 'GET',
481 type: 'GET',
482 success: function(data) {
482 success: function(data) {
483 cache[key] = data;
483 cache[key] = data;
484 query.callback({results: data.results});
484 query.callback({results: data.results});
485 }
485 }
486 });
486 });
487 }
487 }
488 }
488 }
489 });
489 });
490
490
491 $("#repo_switcher").on('select2-selecting', function(e){
491 $("#repo_switcher").on('select2-selecting', function(e){
492 e.preventDefault();
492 e.preventDefault();
493 window.location = pyroutes.url('summary_home', {'repo_name': e.val});
493 window.location = pyroutes.url('summary_home', {'repo_name': e.val});
494 });
494 });
495
495
496 $(document).on('shown.bs.dropdown', function(event) {
496 $(document).on('shown.bs.dropdown', function(event) {
497 var dropdown = $(event.target);
497 var dropdown = $(event.target);
498
498
499 dropdown.attr('aria-expanded', true);
499 dropdown.attr('aria-expanded', true);
500 dropdown.find('.dropdown-menu').attr('aria-hidden', false);
500 dropdown.find('.dropdown-menu').attr('aria-hidden', false);
501 });
501 });
502
502
503 $(document).on('hidden.bs.dropdown', function(event) {
503 $(document).on('hidden.bs.dropdown', function(event) {
504 var dropdown = $(event.target);
504 var dropdown = $(event.target);
505
505
506 dropdown.attr('aria-expanded', false);
506 dropdown.attr('aria-expanded', false);
507 dropdown.find('.dropdown-menu').attr('aria-hidden', true);
507 dropdown.find('.dropdown-menu').attr('aria-hidden', true);
508 });
508 });
509 });
509 });
510 </script>
510 </script>
511 </%def>
511 </%def>
512
512
513 <%def name="parent_child_navigation()">
513 <%def name="parent_child_navigation()">
514 <div class="pull-left">
514 <div class="pull-left">
515 <div class="parent-child-link"
515 <div class="parent-child-link"
516 data-ajax-url="${h.url('changeset_parents',repo_name=c.repo_name, revision=c.changeset.raw_id)}"
516 data-ajax-url="${h.url('changeset_parents',repo_name=c.repo_name, revision=c.changeset.raw_id)}"
517 data-linktype="parent"
517 data-linktype="parent"
518 data-reponame="${c.repo_name}">
518 data-reponame="${c.repo_name}">
519 <i class="icon-left-open"></i><a href="#">${_('Parent rev.')}</a>
519 <i class="icon-left-open"></i><a href="#">${_('Parent rev.')}</a>
520 </div>
520 </div>
521 </div>
521 </div>
522
522
523 <div class="pull-right">
523 <div class="pull-right">
524 <div class="parent-child-link"
524 <div class="parent-child-link"
525 data-ajax-url="${h.url('changeset_children',repo_name=c.repo_name, revision=c.changeset.raw_id)}"
525 data-ajax-url="${h.url('changeset_children',repo_name=c.repo_name, revision=c.changeset.raw_id)}"
526 data-linktype="child"
526 data-linktype="child"
527 data-reponame="${c.repo_name}">
527 data-reponame="${c.repo_name}">
528 <a href="#">${_('Child rev.')}</a><i class="icon-right-open"></i>
528 <a href="#">${_('Child rev.')}</a><i class="icon-right-open"></i>
529 </div>
529 </div>
530 </div>
530 </div>
531
531
532 <script>
532 <script>
533 'use strict';
533 'use strict';
534 $(document).ready(function(){
534 $(document).ready(function(){
535 activate_parent_child_links();
535 activate_parent_child_links();
536 });
536 });
537 </script>
537 </script>
538 </%def>
538 </%def>
General Comments 0
You need to be logged in to leave comments. Login now