From f5041d6a290ec7ef657e9e24333ca1c80c08d72e Mon Sep 17 00:00:00 2001 From: Gerfried Fuchs Date: Sun, 31 Oct 2010 14:23:32 +0100 Subject: [PATCH] Initial import of Kalle's Theme --- README | 9 + debwiki/config.html_head | 1 + debwiki/css/Pics/gradient.png | Bin 0 -> 247 bytes debwiki/css/Pics/greydot.png | Bin 0 -> 197 bytes debwiki/css/Pics/openlogo-50.png | Bin 0 -> 1784 bytes debwiki/css/Pics/reddot.png | Bin 0 -> 146 bytes debwiki/css/common.css | 2 + debwiki/css/debian.css | 753 ++++++++++++ debwiki/css/debian.css.old | 774 ++++++++++++ debwiki/css/debwiki.css | 527 +++++++++ debwiki/css/modernized-common.css | 545 +++++++++ debwiki/css/msie.css | 37 + debwiki/css/print.css | 52 + debwiki/css/projection.css | 33 + debwiki/css/screen.css | 135 +++ debwiki/img/PythonPowered.png | Bin 0 -> 1992 bytes debwiki/img/admon-caution.png | Bin 0 -> 1447 bytes debwiki/img/admon-important.png | Bin 0 -> 1607 bytes debwiki/img/admon-note.png | Bin 0 -> 1255 bytes debwiki/img/admon-tip.png | Bin 0 -> 1910 bytes debwiki/img/admon-warning.png | Bin 0 -> 1971 bytes debwiki/img/alert.png | Bin 0 -> 576 bytes debwiki/img/angry.png | Bin 0 -> 919 bytes debwiki/img/attach.png | Bin 0 -> 1793 bytes debwiki/img/attention.png | Bin 0 -> 730 bytes debwiki/img/biggrin.png | Bin 0 -> 902 bytes debwiki/img/checkmark.png | Bin 0 -> 589 bytes debwiki/img/debian-61.png | Bin 0 -> 3840 bytes debwiki/img/devil.png | Bin 0 -> 932 bytes debwiki/img/draft.png | Bin 0 -> 9717 bytes debwiki/img/frown.png | Bin 0 -> 945 bytes debwiki/img/gradient.png | Bin 0 -> 257 bytes debwiki/img/greydot.png | Bin 0 -> 197 bytes debwiki/img/icon-device-32x32.png | Bin 0 -> 2097 bytes debwiki/img/icon-error.png | Bin 0 -> 820 bytes debwiki/img/icon-info.png | Bin 0 -> 876 bytes debwiki/img/idea.png | Bin 0 -> 556 bytes debwiki/img/moin-attach.png | Bin 0 -> 659 bytes debwiki/img/moin-bottom.png | Bin 0 -> 641 bytes debwiki/img/moin-conflict.png | Bin 0 -> 719 bytes debwiki/img/moin-deleted.png | Bin 0 -> 796 bytes debwiki/img/moin-diff.png | Bin 0 -> 526 bytes debwiki/img/moin-download.png | Bin 0 -> 1370 bytes debwiki/img/moin-edit.png | Bin 0 -> 751 bytes debwiki/img/moin-email.png | Bin 0 -> 563 bytes debwiki/img/moin-ftp.png | Bin 0 -> 652 bytes debwiki/img/moin-help.png | Bin 0 -> 996 bytes debwiki/img/moin-home.png | Bin 0 -> 619 bytes debwiki/img/moin-icon.png | Bin 0 -> 427 bytes debwiki/img/moin-info.png | Bin 0 -> 788 bytes debwiki/img/moin-inter.png | Bin 0 -> 682 bytes debwiki/img/moin-jabber.png | Bin 0 -> 422 bytes debwiki/img/moin-new.png | Bin 0 -> 632 bytes debwiki/img/moin-news.png | Bin 0 -> 474 bytes debwiki/img/moin-parent.png | Bin 0 -> 599 bytes debwiki/img/moin-print.png | Bin 0 -> 515 bytes debwiki/img/moin-raw.png | Bin 0 -> 740 bytes debwiki/img/moin-readonly.png | Bin 0 -> 430 bytes debwiki/img/moin-renamed.png | Bin 0 -> 786 bytes debwiki/img/moin-rss.png | Bin 0 -> 757 bytes debwiki/img/moin-search.png | Bin 0 -> 935 bytes debwiki/img/moin-show.png | Bin 0 -> 923 bytes debwiki/img/moin-subscribe.png | Bin 0 -> 791 bytes debwiki/img/moin-telnet.png | Bin 0 -> 681 bytes debwiki/img/moin-top.png | Bin 0 -> 627 bytes debwiki/img/moin-unsubscribe.png | Bin 0 -> 583 bytes debwiki/img/moin-up.png | Bin 0 -> 539 bytes debwiki/img/moin-updated.png | Bin 0 -> 605 bytes debwiki/img/moin-www.png | Bin 0 -> 928 bytes debwiki/img/officiallogo.png | Bin 0 -> 1657 bytes debwiki/img/ohwell.png | Bin 0 -> 921 bytes debwiki/img/openlogo-50.png | Bin 0 -> 1784 bytes debwiki/img/prio1.png | Bin 0 -> 266 bytes debwiki/img/prio2.png | Bin 0 -> 278 bytes debwiki/img/prio3.png | Bin 0 -> 276 bytes debwiki/img/redface.png | Bin 0 -> 876 bytes debwiki/img/sad.png | Bin 0 -> 880 bytes debwiki/img/smile.png | Bin 0 -> 873 bytes debwiki/img/smile2.png | Bin 0 -> 860 bytes debwiki/img/smile3.png | Bin 0 -> 902 bytes debwiki/img/smile4.png | Bin 0 -> 876 bytes debwiki/img/star_off.png | Bin 0 -> 738 bytes debwiki/img/star_on.png | Bin 0 -> 758 bytes debwiki/img/thumbs-up.png | Bin 0 -> 410 bytes debwiki/img/tired.png | Bin 0 -> 896 bytes debwiki/img/tongue.png | Bin 0 -> 920 bytes theme/__init__.py | 1816 +++++++++++++++++++++++++++++ theme/debwiki.py | 324 +++++ wikiconfig.py.debwiki | 48 + 89 files changed, 5056 insertions(+) create mode 100644 README create mode 100644 debwiki/config.html_head create mode 100644 debwiki/css/Pics/gradient.png create mode 100644 debwiki/css/Pics/greydot.png create mode 100644 debwiki/css/Pics/openlogo-50.png create mode 100644 debwiki/css/Pics/reddot.png create mode 100644 debwiki/css/common.css create mode 100644 debwiki/css/debian.css create mode 100644 debwiki/css/debian.css.old create mode 100644 debwiki/css/debwiki.css create mode 100644 debwiki/css/modernized-common.css create mode 100644 debwiki/css/msie.css create mode 100644 debwiki/css/print.css create mode 100644 debwiki/css/projection.css create mode 100644 debwiki/css/screen.css create mode 100644 debwiki/img/PythonPowered.png create mode 100644 debwiki/img/admon-caution.png create mode 100644 debwiki/img/admon-important.png create mode 100644 debwiki/img/admon-note.png create mode 100644 debwiki/img/admon-tip.png create mode 100644 debwiki/img/admon-warning.png create mode 100644 debwiki/img/alert.png create mode 100644 debwiki/img/angry.png create mode 100644 debwiki/img/attach.png create mode 100644 debwiki/img/attention.png create mode 100644 debwiki/img/biggrin.png create mode 100644 debwiki/img/checkmark.png create mode 100644 debwiki/img/debian-61.png create mode 100644 debwiki/img/devil.png create mode 100644 debwiki/img/draft.png create mode 100644 debwiki/img/frown.png create mode 100644 debwiki/img/gradient.png create mode 100644 debwiki/img/greydot.png create mode 100644 debwiki/img/icon-device-32x32.png create mode 100644 debwiki/img/icon-error.png create mode 100644 debwiki/img/icon-info.png create mode 100644 debwiki/img/idea.png create mode 100644 debwiki/img/moin-attach.png create mode 100644 debwiki/img/moin-bottom.png create mode 100644 debwiki/img/moin-conflict.png create mode 100644 debwiki/img/moin-deleted.png create mode 100644 debwiki/img/moin-diff.png create mode 100644 debwiki/img/moin-download.png create mode 100644 debwiki/img/moin-edit.png create mode 100644 debwiki/img/moin-email.png create mode 100644 debwiki/img/moin-ftp.png create mode 100644 debwiki/img/moin-help.png create mode 100644 debwiki/img/moin-home.png create mode 100644 debwiki/img/moin-icon.png create mode 100644 debwiki/img/moin-info.png create mode 100644 debwiki/img/moin-inter.png create mode 100644 debwiki/img/moin-jabber.png create mode 100644 debwiki/img/moin-new.png create mode 100644 debwiki/img/moin-news.png create mode 100644 debwiki/img/moin-parent.png create mode 100644 debwiki/img/moin-print.png create mode 100644 debwiki/img/moin-raw.png create mode 100644 debwiki/img/moin-readonly.png create mode 100644 debwiki/img/moin-renamed.png create mode 100644 debwiki/img/moin-rss.png create mode 100644 debwiki/img/moin-search.png create mode 100644 debwiki/img/moin-show.png create mode 100644 debwiki/img/moin-subscribe.png create mode 100644 debwiki/img/moin-telnet.png create mode 100644 debwiki/img/moin-top.png create mode 100644 debwiki/img/moin-unsubscribe.png create mode 100644 debwiki/img/moin-up.png create mode 100644 debwiki/img/moin-updated.png create mode 100644 debwiki/img/moin-www.png create mode 100644 debwiki/img/officiallogo.png create mode 100644 debwiki/img/ohwell.png create mode 100644 debwiki/img/openlogo-50.png create mode 100644 debwiki/img/prio1.png create mode 100644 debwiki/img/prio2.png create mode 100644 debwiki/img/prio3.png create mode 100644 debwiki/img/redface.png create mode 100644 debwiki/img/sad.png create mode 100644 debwiki/img/smile.png create mode 100644 debwiki/img/smile2.png create mode 100644 debwiki/img/smile3.png create mode 100644 debwiki/img/smile4.png create mode 100644 debwiki/img/star_off.png create mode 100644 debwiki/img/star_on.png create mode 100644 debwiki/img/thumbs-up.png create mode 100644 debwiki/img/tired.png create mode 100644 debwiki/img/tongue.png create mode 100644 theme/__init__.py create mode 100644 theme/debwiki.py create mode 100644 wikiconfig.py.debwiki diff --git a/README b/README new file mode 100644 index 0000000..2d3a2d2 --- /dev/null +++ b/README @@ -0,0 +1,9 @@ +This is about Kalle's themeing for moinmoin, which is used on wiki.debian.org. + +URL: http://www.kalleswork.net/projects/debian/wiki/ +Testsite: http://wiki.debian.org/ (follow instructions from above) + +Expected configuration: + debwiki/ goes to /usr/share/moin/htdocs/debwiki + wikiconfig.py.debwiki is a configuration template for /etc/moin/ + theme/ contains the files for the theme directory of your data diff --git a/debwiki/config.html_head b/debwiki/config.html_head new file mode 100644 index 0000000..d0119df --- /dev/null +++ b/debwiki/config.html_head @@ -0,0 +1 @@ +

hello!

diff --git a/debwiki/css/Pics/gradient.png b/debwiki/css/Pics/gradient.png new file mode 100644 index 0000000000000000000000000000000000000000..dc4a8b84ac4c29b5a753620c71551073dee35d30 GIT binary patch literal 247 zcmeAS@N?(olHy`uVBq!ia0vp^j6m$n!2~2PJ^!&2Bv2gW?!>U}oXkrghqJ&VvKXlN zKL|5^>Dtr@6l5>)^mS#w&LJlvr?39(NdZtuti&~<#5q4VH#M(>!8QL70(Y)*K0-AbW|YuPgfv4mnXK$$$I5gaL)rOI#yLobz*Y zQ}ap~9E*}OGD}jEOG=AU6@pTWQxky#3ZZ$KB??9c2If2LuF3+n2zk0VhHzX@o?%^o g^Z)7V?~EB3B)76=?a_Ji6)4N#>FVdQ&MBb@0QH|Z?EnA( literal 0 HcmV?d00001 diff --git a/debwiki/css/Pics/openlogo-50.png b/debwiki/css/Pics/openlogo-50.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e75fc55cff18190e9e0dbf1efd3d5cd7e052d5 GIT binary patch literal 1784 zcmVPx#24YJ`L;wH)0002_L%V+f000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iXA* z4;u~mfl1x~00wwTL_t(&-tC%eh!tfR$A5G7=B}%*=4NX5ti04#upT%pvh_hDLf5Rs zA}B=jLy44&7$kK2AhH%AbRp1;q9AJBq{uGRB6{Mal4P};vM5Dn>uvLrd!0U<|K#H| zdv?xo&bpB=9Nu}~dFGw>|J>(!k3$|>lK6699?%X{nm!3^O^|Ae`khY10M-N70<{B> zHUmY#8h|K(IS~P90IEX(=&v;a8xy1&FBp&{@t=Un5eapBf>h0*0!b3D1D@zd3eCWd zAbZerlYkjOT~uJ4h(YWCt_Bu`(fcIvdw^vD>tqckS0I}LxOq51sxm_LT$>2wjb!@B7t3-Uyb7=5O#@dNemj23# z%XT(vuGp6?)SQn|W|N{6slPd7THXjWN*X7XLv2%>XgA(%>!6l{j2?S!UN+?$Q?zRx zAeGO5ImoCNKvRO$T!u)?*8R4b>l%ho%L<5$+)D<>hW%C;iW2clWyOCMh@|2rkKIE> zD!JxbULC3ySUnWL1|78s)4+RxFuWGz6wj4gsYU70iVp0*W5ZwZ-%*TmT-hr5p zq}5Wh7U1KkBln;H@l{W}ldDKes)Gu|XFD_WA=X764?*(^B*2EUDJ5NO7u&^lvHcI4 z6XJfM`fk7-AOS5<-xWmLL``8OT^qYNv#6EgGfUX%4o3Ft09OJ_NS{!Z4Y1C1;Bnw{ zpu|t`36o-#bUo|fJXlQW{wiXlo{2Dy4V1?B0PBD|#qCU>tAH1QTY_lI8Bqw%G7(=2 zteMLFdH)`9^y|x@hK`wYIeT!~6L6n0V%;&E@h+Tlao=?*d~81NyZx+}$qWMN3Il+Z z02M&F0qP2rXEPq<-<3psYk(Oqb zHgq4bS924TRDSBCb%6~)sh)WcI8FMzWR;KZjv&#EBwgBcwfHRQyelAMfH@j}Nm|d> znXw1tprq3V91|m4adec~M1|IHf$xClfLHY{4}1wQ-!N<+@Vq4B0^bAyS*n}6^}-@~ zEf2^zamEF%m$)l{4$WO>Hu;*?s5DZYsX5OzmrD!AN)1b-HVwMJ9vBAPYSx`7N!_LK z{vczYq5dPIdp!X$1#!GoV7-F0Jp_6RI02jj_UPH!+PHNfePTobFj|cH!`KE|1KDAR z`d^GW{L9!Us6Sv{<^%w7C0c(gH81WqwzVC&Nz!plpmZdKhk!RSc&pRuj~mH!W%61v zGv{P*xk&82zIBdxMLRR^O1c=mcFZ#m0I$ogs`Ts};H`koc4dkq7D$KssTurvp8&5i z8~55ZX7jFLjyM0Az*~krqU%NCcnlctTemFRfasM$YbElSZxL7eiQIIr#+?Cqm>0B) zfV(xfD8~!W?n2OA&gP4Bk~Ndek_IEvkbp6@y+8L!UJ1POqLBYgG88>}!;_ a`M&|1JR_^MMOKOc0000ol, ul>ul, li>ol, li>ul { + margin: 0; +} + +ol { + list-style-type: decimal; +} +ul { + list-style-type: disc; +} +th { + font-weight: bold; + margin: 1.5em 0 1.5em 0; +} +hr { + border: none; + background-color: #bbb; + height: 1px; + margin: 1.4375em 0 1.5em 0; +} +pre { + margin: 1.5em 0 1.5em 0; + overflow: auto; + font-family: monospace; + white-space: pre; + color: black; +} +tt, code { + font-family: monospace; + white-space: pre; + color: black; +} +dd { + margin: 0 0 0 1.5em; +} +blockquote { + font-size: 0.75em; + margin: 2em; + line-height: 2; +} +cite { + font-style: italic; + color: #444; +} +acronym, abbr { + text-transform: uppercase; + font-size: 0.9em; +} +.toc { + font-size: 0.75em; + list-style:none; + background-image: url('Pics/greydot.png'); + background-position: bottom left; + background-repeat: repeat-x; + line-height:1.833; + padding: 0; + max-width: 62%; + margin: 2em 0 2em 0; +} +.toc li { + background-image: url('Pics/greydot.png'); + background-position: top left; + background-repeat: repeat-x; + padding: 0.0833em 0 0.0833em 0; + } +.toc a { + display:block; + text-decoration: none; +} +.toc a:hover { + display:block; + background-color: #f0f0f4; + text-decoration: underline; +} + +/* Sitemap */ + +.card { + clear:both; + margin:1.5em 0 1.5em 0; + background-position: 0 -50px; + background-repeat: repeat-x; + padding:0; +} +.card ul { +} +.card ul li { + list-style:none; +} +.card h2 { +} +.lefthalf { + float:left; +} +.righthalf { + margin-left:50%; +} +.lefthalf ul { + margin-top:0; +} + +/* Footer */ + +#footer { + font-size: 0.75em; + border: 1px solid #dfdfe0; + padding:1em; + background-color: #f5f6f7; + margin: 0 0 0 0; + line-height: 1.5em; + border-left: 0; + border-right: 0; +} +#footer p { + margin: 1em 0 1em 0; +} +#footer hr { + border-top: 1px solid #d2d3d7; + border-bottom: 1px solid white; + height: 0; +} +#footer .editbar li { + display: inline; + margin-right: 2em; +} +#footer .info { +} +#fineprint { + margin-bottom: 1em; +} +#footermap { + list-style:none; + margin: 0 0 0 0; + padding: 0; + width:100%; + overflow: hidden; + border: 0; +} +ul#footermap-cola a +, ul#footermap-colb a +, ul#footermap-colc a +, ul#footermap-cold a +, ul#footermap-cole a { + padding-left: 0; +} +ul#footermap-cola +, ul#footermap-colb +, ul#footermap-colc +, ul#footermap-cold +, ul#footermap-cole { + float:left; + width: 19%; + min-width: 11em; + height: 12em; /* Update when adding items */ + margin:0 1% 0 0; + padding: 2em 0 0 0; + list-style: none; +} +ul#footermap-cole { + width: 18.9%; + margin-right:0; +} +#footermap-wrap { + padding:2em; + border-top: 1px solid white; +} +#footermap a { + margin: 0; +} +#footermap ul{ + list-style: none; + padding:0; +} +#footermap li { + text-indent:0; + background-color: transparent; + font-weight:bold; +} +#footermap li ul { + margin: 0; + padding: 0: +} +#footermap li li { + margin:0; + text-indent:0; + padding:0; + font-weight:normal; + border:0; + background-image:none; + background-color:transparent; +} +#serverselect { +} +#serverselect input +, #serverselect option +, #serverselect select { +} +#serverselect ul { + display: inline; + margin-left: 2em; +} +#serverselect li { + list-style: none; + display: inline; + padding:0 1em 0 1em; + margin:0; +} +#serverselect form p { + margin:0; + padding:0; + line-height: 1; +} +.lcol50 { + float: left; + width: 49%; + font-size:0.75em; + margin:0 0 0 0; + padding:0 0.5em 0 0; +} +.lcol50 h2 { + margin-top:0; +} +.rcol50 { + margin:0 0 0 51%; + padding:0; + font-size:0.75em; +} +form#pageLang { + display: inline; +} + +/* Extras */ + +input:focus { + background-color:#FFFFCB; + +} +.hidecss { + display: none; +} +.clear { + clear:both +} +#clear { + clear:both; + border:0; + height:1px; + display:block; +} +.quicklist:before { + content: "Quick Links: "; + font-weight: bold; +} +.quicklist { + list-style: none; + font-size: 0.75em; + margin: 2em 0 2em 0; + padding:0; + text-indent:0; + line-height: 2em; +} +.quicklist li { + display:inline; +} +.item p{ + margin: 0; +} +.item h2 +, .item p +, .item ul{ + margin-right: 10px +} +.item h2 +, .item h3 +, .item h4 +, .item h5 { + margin-top: 0; +} +.line { + padding: 0; + width: auto; + overflow: hidden; + } +div.downloads { + border-top: 0.17em solid #339900; + margin: 1.33em 0 0 0; +} +.downloads ul.downlist { + margin:0; +} +div.downloads .col50 { + border-top: 0.15em solid #339900; +} +ul.downlist { + padding-left: 30px; + text-indent:0; + background: url('Pics/emblem-downloads.png') no-repeat 0 0.15em; + /* + * border-top: 0.17em solid #339900; + */ +} +ul.quicklist.downlist { + border-top: 0.15em solid #339900; + padding-top: 0.25em; + margin-top: 1.6em; +} +ul.downlist li { + display: inline; +} +ul.downlist li:after { + content: ', '; +} +ul.downlist li:last-child:after { + content: ''; +} +div.tip +, div.important +, div.warning +, div.note { + padding:0 2em 0 4em; + margin: 1.85em 0 1.85em 0; + background-repeat: no-repeat; + background-position: 0.5em 1em; + font-size: 0.75em; + line-height: 2em; + background-color:#FFFFCB; + border:0.15em solid #CCCCA3; +} +div.tip p +, div.important p +, div.warning p +, div.note p { + margin: 1em 0 1em 0; +} +div.tip { + background-image: url('Pics/admon-tip.png'); +} +div.important{ + background-image: url('Pics/admon-important.png'); +} +div.warning { + background-image: url('Pics/admon-warning.png'); +} +div.note { + background-image: url('Pics/admon-note.png'); +} + +/* Layout Elements */ + +.col50 +, .cardleft +, .cardright { + width:47.5%; + float: left; + padding-bottom: 1.5em; +} +.lastcol +, .cardright { + margin: auto; + width: 47.5%; + float:left; + padding-right: 0; + margin-left: 5%; +} +.lastcol h2 +, .lastcol p +, .lastcol ul { + margin-right:0; +} +.cardleft h2 { + margin-right: 1em; +} +.cardright div { + margin-left: 1.5em; +} +.cardright h2 { + margin-left: 1em; +} +.votemenu a { + display:block; +} +table.vote td, table.vote th { + padding-right: 1.5em; +} +#maincol.with-toolbox { + margin-right: 14em; +} +table.vendors { +/* border-bottom: 1px solid #a9abb3; + border-top: 1px solid #a9abb3; */ + border-bottom: 0.15em solid #666; + border-top: 0.15em solid #666; + display: block; + width: auto; + font-size: 0.75em; + line-height: 2em; + margin-bottom: 4em; + margin-top: -0.169em; +} +table td { + padding-right: 1.5em; +} +table.vendors tr { + width: 100%; +} +table th { + padding-right: 1.5em; +} +table.vendors td { + background-image: url(Pics/greydot.png); + background-position: top left; + background-repeat: repeat-x; +} +#pageLang p, #pageLang form { + display: inline; +} +.inline a { + float: left; + margin-right: 1em; +} diff --git a/debwiki/css/debian.css.old b/debwiki/css/debian.css.old new file mode 100644 index 0000000..f372aaa --- /dev/null +++ b/debwiki/css/debian.css.old @@ -0,0 +1,774 @@ +/* + * www.debian.org stylesheet proposal + * + * Kalle Soderman, 2008 debian.css + * + * Copyleft : This work is free, you can copy, spread, and modify it under + * the terms of the Free Art License http://artlibre.org/licence/lal/en/ + * + * + * Font size table + * --------------- + * Browser default 16px + * pixels relative + * 36px 2.25em + * 31px 0.5161em + * 24px 1.5em + * 21px 1.3125em + * 18px 1.125em + * 16px 1em + * 14px 0.875em + * 12px 0.75em + * 11px 0.6875em + * 10px 0.625em + * 9px 0.5625em + */ +@media screen { +/* + * reset + */ + +html, body, div, span, applet, object, iframe, h1, h2, h3, h4, h5, h6, p, +blockquote, pre, a, abbr, acronym, address, big, cite, code, del, dfn, em, +font, img, ins, kbd, q, s, samp, small, strike, strong, sub, sup, tt, var, dl, +dt, dd, ol, ul, li, fieldset, form, label, legend, table, caption, tbody, +tfoot, thead, tr, th, td { + margin: 0; + padding: 0; + border: 0; + outline: 0; + font-weight: inherit; + font-style: inherit; + font-size: 100%; + font-family: inherit; + vertical-align: baseline; +} + +:focus { + outline: 0; +} + +body { + line-height: 1; + color: black; + background: white; +} + +ol, ul { + list-style: none; +} + +table { + border-collapse: separate; + border-spacing: 0; +} + +caption, th, td { + text-align: left; + font-weight: normal; +} + +blockquote:before, blockquote:after, +q:before, q:after { + content: ""; +} + +blockquote, q { + quotes: "" ""; +} + +html { + background-color: transparent; +} + + +/* + * start + */ + +body { + margin: 0; + font: normal 100% sans-serif; + line-height: 1.5; + color: #222; + background-color: white; +} + +#outer { + margin: 0 10px 0 62px; +} + +#maincol { + margin: 0 0 1.5em 0; + } + +/* + * Header + */ + +#header { + margin:0; + padding:0 10px 0 62px; + background-image:url('Pics/gradient.png'); + background-position: 0 0; + background-repeat: repeat-x; +} + +#header a:link +, #second-nav a:link { + text-decoration: none; +} + +#header a:hover +, #second-nav a:hover { + text-decoration: underline; +} + +#breadcrumbs { + font-size: 0.75em; + background-color: transparent; + background-color: #f5f6f7; + margin:0; + border-bottom: 1px solid #d2d3d7 ; + text-transform:lowercase; + line-height: 2; +} + +p.section { + font-family:monospace; + position:absolute; + top: 0px; + left:62px; + text-transform: uppercase; + letter-spacing: 0.08em; + background-color: #c70036; + line-height: 16px; + color:white; + padding: 0 5px 0 5px; + margin:0; +} + +#navbar { + background-color: transparent; + list-style:none; + display:block; + border-bottom:1px solid #c70036; + text-indent:0; + padding: 0; + margin-top:0; + margin-bottom:0; +} + +#navbar ul { + margin:0 ; + padding:0 ; + clear: both; + overflow: hidden; +} + +#navbar li { + list-style: none; + float: left; + padding: 0; + margin: 0; +} + +#navbar a:link +, #navbar a:visited { + padding: 1.75em 1em 0.25em 1em; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + display: block; + text-decoration: none; +} + +#navbar a:visited { + color: #54638c; +} + +#navbar a:hover +, #navbar a:visited:hover { + background-color: #efefef; + border-left: 1px solid #d2d3d7; + border-right: 1px solid #d2d3d7; +} + +#sitetools { + text-align:left; + margin: 0 10px 0 0; + padding: 0px 0 1px 0; + position: absolute; + top:0; + right:0; + border-right: 1px solid white; + border-left: 1px solid #d2d3d7; + line-height: 1; +} + +#upperheader { + margin:0; + padding:0; +} + +#logo { + position:absolute; + top:0; + left:0; + padding: 0; + background-color: transparent; + border: 1px solid transparent; + border-top: 0; + width: 61px; + height: 5.05em; +} + +#logo a { + display: block; + position: relative; + padding: 0 5px 0 5px; + height: 100%; +} + +#logo img { + margin-top: 5px; + position: absolute; + bottom: 0.3em; + overflow: auto; +} + +#logo:hover { + border: 1px solid #d2d3d7 ; + border-top: 0; + background-color: #eee; +} + +/* + * Links + */ + +a:link { + color: #0035c7; + text-decoration: underline; +} + +a:visited { + color: #54638c; +} + +a:hover { + text-decoration: none; + color: #00207a; +} + +a:active { + color:#c2c3c7; +} + +a img { + border:0; +} + +/* + * Secondnav + */ + +#second-nav { + width: 16em; + float:right; + padding:0 0 0 1.5em; + margin: 2.41em 0 0 1.5em; + border-left:1px solid #d3d6df; + font-size: 0.75em; + line-height: 1.5; +} + +#second-nav ul { + padding:0; + margin:0; + list-style:none; +} + +#second-nav ul ul { + margin-left: 1em; +} + +#second-nav li { + font-weight: normal; + margin:0; + padding:0; +} + +#second-nav p { + line-height: 2; + font-weight: bold; + margin: 0; +} + +#second-nav h2 { + margin:0; +} + + +/* + * Typography + */ + +p { + margin: 1.5em 0 1.5em 0; +} + +strong { + font-weight: bold; +} + +em { + font-style: italic; +} + +h1 +, h2 +, h3 +, h4 +, h5 +, h6 { + font-weight: 600; + color: black; +} +small { + font-size: 0.75em; +} +sup { + font-size: 0.75em; + vertical-align:top; +} +h1 { + line-height: 0.8; + font-weight: normal; + font-size: 1.875em; + margin: 0.8em 0 0.8em 0; +} + +h2 { + font-size: 1.5em; + font-weight: normal; + line-height: 1; + margin: 1em 0 1em 0; +} + +h3 { + font-size: 1.125em; + line-height: 1.333em; + margin: 1.333em 0 0 0; +} + + +h4 { + font-weight: normal; + font-style: italic; + margin: 1.5em 0 1.5em 0; +} + +h5 { + font-style: italic; + font-size: 0.75em; + margin: 2em 0 2em 0; +} + +ol,ul { + padding-left: 1.5em; + margin-left:0; + margin: 1.5em 0 1.5em 0; +} + +ol { + list-style-type: decimal; +} + +ul { + list-style-type: disc; + } + +th { + font-weight: bold; + margin: 1.5em 0 1.5em 0; + } + +hr { + border: none; + background-color: #bbb; + height: 1px; + margin: 1.4375em 0 1.5em 0; +} + +.hidecss { + display: none; +} + +pre { + overflow: auto; +} + +dd { + margin: 0 0 0 1.5em; +} + +.toc { + font-size: 0.75em; + list-style:none; + background-image: url('Pics/greydot.png'); + background-position: bottom left; + background-repeat: repeat-x; + line-height:1.833; + padding: 0; + max-width: 67%; +} + +.toc li { + background-image: url('Pics/greydot.png'); + background-position: top left; + background-repeat: repeat-x; + padding: 0.0833em 0 0.0833em 0; + } + +.toc a { + display:block; + text-decoration: none; +} + +.toc a:hover { + display:block; + background-color: #f0f0f4; + text-decoration: underline; +} + +input:focus { + background-color:#FFFFCB; + +} +/* + * Sitemap + */ + +.card { + clear:both; + margin:1.5em 0 1.5em 0; + background-position: 0 -50px; + background-repeat: repeat-x; + padding:0; +} + +.card ul { + margin:0.5em 0 1em 0; +} + +.card ul li { + list-style:none; +} + +.card h2 { +} + +.lefthalf { + float:left; +} + +.righthalf { + margin-left:50%; +} + +.lefthalf ul { + margin-top:0; +} + +/* + * Footer + */ + +#footer { + font-size: 0.75em; + border: 1px solid #dfdfe0; + border-bottom: 0; + padding:1em; + background-color: #f2f3f6; + margin: 0 0 0 0; + line-height: 1.5em; +} +#footer p { + margin: 1em 0 1em 0; + } + + + +#footer hr { + border-top: 1px solid #d2d3d7; + border-bottom: 1px solid white; + height: 0; +} + +#footer .editbar li { + display: inline; + margin-right: 2em; +} + +#footer .info { +} + +#fineprint { + margin-bottom: 1em; +} + +#footermap { + list-style:none; + margin: 0 0 0 0; + padding: 0; + width:100%; + overflow: hidden; + border: 0; +} + +ul#footermap-cola a +, ul#footermap-colb a +, ul#footermap-colc a +, ul#footermap-cold a +, ul#footermap-cole a { + padding-left: 0; +} + +ul#footermap-cola +, ul#footermap-colb +, ul#footermap-colc +, ul#footermap-cold +, ul#footermap-cole { + float:left; + width: 19%; + min-width: 11em; + height: 12em; /* Update when adding items */ + margin:0 1% 0 0; + padding: 2em 0 0 0; + list-style: none; +} + +ul#footermap-cole { + width: 18.9%; + margin-right:0; +} + +#footermap-wrap { + padding:2em; + border-top: 1px solid white; +} + +#footermap a { + margin: 0; +} + +#footermap ul{ + list-style: none; + padding:0; +} + +#footermap li { + text-indent:0; + background-color: transparent; + font-weight:bold; +} + +#footermap li ul { + margin: 0; + padding: 0: +} + +#footermap li li { + margin:0; + text-indent:0; + padding:0; + font-weight:normal; + border:0; + background-image:none; + background-color:transparent; +} + +#sitetools form { + margin:0; + padding:0; +} + +#sitetools input { + margin: 0 0 0 0.25em; + padding-left: 4px; + padding-right: 4px; +} + +#sitetools select { + margin-left: 0.5em; +} + +#sitetools form p { + display: inline; + line-height: 1; + margin:0; + padding:0; +} + +.sitetool a { + margin: 0.5em 0 0.5em 1em; + padding: 0 0 0 0; + float: left; +} + +.sitetool { + margin:0; + padding: 2px 5px 2px 5px; + border-left: 1px solid white; + border-right: 1px solid #d2d3d7; + display:block; + float:left; +} + +#serverselect input +, #serverselect option +, #serverselect select { +} + +#serverselect ul { + display: inline; + margin-left: 2em; +} + +#serverselect li { + list-style: none; + display: inline; + padding:0 1em 0 1em; + margin:0; +} + +#serverselect form p { + margin:0; + padding:0; + line-height: 1; +} + +.lcol50 { + float: left; + width: 49%; + font-size:0.75em; + margin:0 0 0 0; + padding:0 0.5em 0 0; +} + +.lcol50 h2 { + margin-top:0; +} + +.rcol50 { + margin:0 0 0 51%; + padding:0; + font-size:0.75em; +} + +/* + * Extras + */ + +.clear { + clear:both +} + +#clear { + clear:both; + border:0; + height:1px; + display:block; + } + +.quicklist:before { + content: "Quick Links: "; + font-weight: bold; +} + +.quicklist { + list-style: none; + font-size: 0.75em; + margin:0; + padding:0; + text-indent:0; + line-height: 2em; +} + +.quicklist li { + display:inline; +} + +.item p{ + margin: 0; +} + +.item h2 +, .item p +, .item ul{ + margin-right: 10px +} + +.item h2 { + margin-top: 0; + } + +.col50 { + width:50%; + float: left; +} + +.lastcol { + margin: auto; + width: 50%; + float:left; +} + +.lastcol h2 +, .lastcol p +, .lastcol ul { + margin-left: 10px; + margin-right:0; +} + +.line { +/* clear: both; + display: block; + margin: 0 0 2em 0; + */ + padding: 0; + width: auto; + overflow: hidden; +} + +.cardleft { + width:49%; + float: left; +} + +.cardright { + margin: auto; + width: 50%; + float:left; +} + +.cardleft div { + margin-right: 1.5em; +} +.cardleft h2 { + margin-right: 1em; +} +.cardright div { + margin-left: 1.5em; +} +.cardright h2 { + margin-left: 1em; +} +.votemenu a { + display:block; +} + +table.vote td, table.vote th { + padding-right: 1.5em; + } +} diff --git a/debwiki/css/debwiki.css b/debwiki/css/debwiki.css new file mode 100644 index 0000000..f59c78e --- /dev/null +++ b/debwiki/css/debwiki.css @@ -0,0 +1,527 @@ +/* + * wiki.debian.org stylesheet proposal + * + * Kalle Söderman, 2008 debwiki.css + * + * Copyleft : This work is free, you can copy, spread, and modify it under + * the terms of the Free Art License http://artlibre.org/licence/lal/en/ + * + * + * Font size table + * --------------- + * Browser default 16px + * + * 14px 87.5% body + * 24px 1.714em + * 18px 1.286em + * 16px 1.143em + * 12px 0.857em + * 11px 0.75em + * 8px 0.57em + */ + +@import url("debian.css"); + +/* + * Header + */ +body { + font-size: 100%; +} + +#breadcrumbs { + text-transform: none; +} +#wikisection p.section{ + left: 0; +} +#wikisection { + position: absolute; + top: 0; +} +div#username { + font-size: 0.75em; + margin-left: 5em; + color: #d2d3d7; +} +.sitetools { + text-align:left; + margin: 0 10px 0 0; + padding: 2px 10px 2px 5px; + position: absolute; + top:0; + right:0; + border-right: 1px solid white; + border-left: 1px solid #d2d3d7; + line-height: 1em; +} + +#searchform { + float: left; + font-size: 0.75em; + line-height: 2; +} + +#pagelocation { +} + + +#sitetools form { + margin:0; + padding:0; +} + +#sitetools input { + margin: 0 0 0 0.25em; + padding-left: 4px; + padding-right: 4px; +} + +#sitetools select { + margin-left: 0.5em; +} + +#sitetools form p { + display: inline; + line-height: 1em; + margin:0; + padding:0; +} + +.sitetools a { + margin: 5px 0.5em 2px 0; + padding: 0 0 0 0; +} + +.sitetools { + margin:0; + padding: 2px 10px 2px 5px; + border-left: 1px solid white; + border-right: 1px solid #d2d3d7; + display:block; + float:left; +} + +/* + * Leftcol (Should be renamed secondnav) + */ + +#leftcol { + float: right; + margin: 2em 0 0 1em ; + width: 16em; + clear: both; +} + +#leftcol a { + display: block; +} + +#leftcol #username { + margin: 0 0 1em 0; + display:block; +} + +#userhome { + font-weight: bold; + margin-bottom: 1em; +} + +#navibar +, .editbar { + list-style: none; + margin: 0; + padding:0; +} + +#leftcol ul.editbar { + margin-top: 1em; +} + +form select { +} + +#leftcol .editbar form select { + width: 100%; +} + +.editbar { + background: url('Pics/reddot.png') bottom left repeat-x; + width: 100%; + padding: 0 0 0.5em 0; + font-size: 0.75em; + line-height: 2; +} + +#leftcol li { + display:block; + margin:0; + padding:0; + list-style: none; +} + +#content { + margin-top: 1.5em; +} + +.info { + position: relative; + margin:0 0 0.5em 0; + float: none; +} +#leftcol .info a { + display: inline; +} + +#leftcol .info strong { + margin: 0; + padding: 0; +} + +/* + * Typography + */ + +hr { + background-color: #d2d3d7; + height: 1px; +} + +pre, div.codearea { + padding: 1em; + margin: 2em 1.5em 2em 1.5em; + line-height: 1.5em; + background-color: #f5f6f7; + border: 1px solid #d2d3d7 ; + font-family: monospace; + font-size: 100%; + line-height: 2em; +} +div.codearea pre { + border: none; + padding: 0; + margin: 0; +} +div.table-of-contents { + font-size: 0.75em; + line-height: 2em; + list-style:none; + background-image: url('../img/greydot.png'); + background-position: bottom left; + background-repeat: repeat-x; + background-color: transparent; + padding: 0; + margin:0; + border:0; + max-width: 50em; + display:block; +} + +p.table-of-contents-heading { + font-weight:bold; + padding:0; + margin:1.5em 0 0 0; + font-size: 125%; + letter-spacing: normal; +} + +div.table-of-contents ol { + list-style-position: inside; + padding:0; + margin: 0; +} + +div.table-of-contents ol ol { + list-style-position: inside; + padding-left: 2em; + margin: 0; +} + + +div.table-of-contents li { + background-image: url('../img/greydot.png'); + background-position: top left; + background-repeat: repeat-x; + padding: 0; + margin:0; + } + +div.table-of-contents a:hover { + background-color: #f0f0f4; +} + +div.table-of-contents a { + text-decoration: none; +} + +.portal h1 { + margin-top: 0; + line-height: 1em; +} + +.portal h1:after { + content: "Portal"; + font-family:monospace; + font-weight: normal; + font-size: 0.62em; + text-transform: uppercase; + letter-spacing: 0.08em; + background-color: #c70036; + line-height: 16px; + color:white; + padding: 0 5px 0 5px; + margin:1em 0 3em 0; + display: block; +} +h1#locationline { + margin-bottom: 0.5em; +} +h1#locationline a { + color: black; +} +span.u { + font-style: normal; + font-weight: normal; + text-decoration: underline; +} +p.searchhint { + padding:1em; + border: 1px solid #cccca3; + margin:1em 0 1em 0; + background-color:#ffffcb; + font-size: 0.75em; + line-height: 2; +} +p.searchstats { + font-size: 0.75em; + background-color: transparent; + background-color: #f5f6f7; + margin:0; + border-top: 1px solid #d2d3d7 ; + text-transform:lowercase; + line-height: 2; + padding: 0; +} +div.codearea { + margin: 2em 1.5em 2em 1.5em; + font-family: monospace; +} +a.codenumbers { + font-size: 100%; +} + + +/* + * Footer + */ + +p#pageinfo { + color: gray; + font-size: 0.75em; + margin: 1em 0 0 62px; +} + +#footer { + margin-top: 2em; + margin-left: 61px; + margin-right: 10px; + clear: both; +} +#footer ul.editbar { + font-size: 1em; + border-bottom: 1px solid #d2d3d7; + background-image: none; + margin: 0 0 1.5em 0; +} + +ul#credits { + margin: 1em 0 0 0; + padding:0; + font-size: 1em; + line-height: 2; +} + +ul#credits li { + list-style: none; + display: inline; + margin: 0 1em 0 0; +} + +#content div.caution +, #content div.important +, #content div.note +, #content div.tip +, #content div.warning { + margin: 1em 0 1em 0; +} + +#message { + background-color: #f5f6f7; + padding: 1em; + margin: 1em 0 1em 0; + border: 1px solid #d2d3d7 ; + font-size: 0.75em; + line-height: 2; +} + +#message p { + margin:0; + padding:0; +} + +table { + margin: 0.75em 0 0.75em 0; +} +td { + padding: 0 1em 0 0.5em; +} + +#content div.debian { + border:1px solid #c70036; + border-top: 1px solid #c70036; + background-repeat: no-repeat; + background-position: 10px 5px; + margin: 2em 1.5em 2em 1.5em; + padding: 0 1.5em 0 50px; + font-size: 0.75em; +} +#content div.debian p { + margin: 1.5em 0 1.5em 0; +} + +/* + * Editor + */ + +#editor #editor-textarea { + display: block; + margin: 1em 0 1em 0; +} +p img.attachment { + float: left; + padding-right: 1.5em; +} +table p img.attachment { + display: inline; + float: none; + padding: 0; +} +p img { + display: inline; +} +table.diff { + font-family: monospace; + font-size: 1em; +} +div#header ul li { + display: inline; + margin-right: 1em; +} +ul#navibar li.wikilink { + margin: 0; +} +ul#navibar li.current { + display: none; +} +li.wikilink { + margin:0; + padding:0; +} +ul#navibar li.userlink { + margin:0; + padding:0; +} +#pagetrail { + margin:0; + font-size: 0.75em; + text-transform: lowercase; + line-height: 2; + background-color: transparent; + background-color: #f5f6f7; + border-bottom: 1px solid #d2d3d7 ; + min-height: 20px; +} +#pagetrail:before { + content: "/"; + margin-left: 0.5em; + margin-right: 0.5em; +} +#searchform { + position: absolute; + right: 10px; + top: 0; +} +div#content { + margin: 0 10px 0 61px; +} +div#header { + margin:0; +} +#navbar { + background-color: transparent; + list-style:none; + display:block; + border-bottom:1px solid #c70036; + text-indent:0; + padding: 0; + margin-top:0; + margin-bottom:0; +} +#navbar ul { + margin: 0; + padding: 0; + clear: both; + overflow: hidden; + min-height: 45px; +} +#navbar li { + list-style: none; + float: left; + padding: 0; + margin: 0; +} +#navbar a:link +, #navbar a:visited { + padding: 1.75em 1em 0.25em 1em; + border-left: 1px solid transparent; + border-right: 1px solid transparent; + display: block; + text-decoration: none; +} +#navbar a:visited { + color: #54638c; +} +#navbar a:hover +, #navbar a:visited:hover { + background-color: #efefef; + border-left: 1px solid #d2d3d7; + border-right: 1px solid #d2d3d7; + text-decoration: underline; +} +form.actionsmenu { + float: right; + vertical-align: text-top; +} +span.sep { + margin-right: 0.5em; + margin-left: 0.5em; +} +td.diff-added { + color: #31a300; +} +td.diff-removed { + color: #c70036; +} +div#domaintools { + position: absolute; + top: 0; + left: 0; +} +div#domaintools p.section { + margin: 0; +} +div#domaintools div#username { + line-height: 1.5em; + margin-left: 10em; + top:0; +} diff --git a/debwiki/css/modernized-common.css b/debwiki/css/modernized-common.css new file mode 100644 index 0000000..e3cdb42 --- /dev/null +++ b/debwiki/css/modernized-common.css @@ -0,0 +1,545 @@ +/* common.css - MoinMoin Default Styles + +Copyright (c) 2001, 2002, 2003 by Juergen Hermann +*/ + +/* content styles */ + +html { + background-color: white; + color: black; + font-family: sans-serif; + font-size: 1em; +} + +body { + margin: 0; +} + +/* Links */ + +a {color: #0044B3;} +/* a:visited {color: #597BB3;} */ +a:visited {color: #FF7BB3;} + +a.nonexistent:visited, a.nonexistent, +a.badinterwiki:visited, a.badinterwiki {color: gray;} + +a.www:before {content: url(../img/moin-www.png); margin: 0 0.2em;} +a.http:before {content: url(../img/moin-www.png); margin: 0 0.2em;} +a.https:before {content: url(../img/moin-www.png); margin: 0 0.2em;} +a.file:before {content: url(../img/moin-ftp.png); margin: 0 0.2em;} +a.ftp:before {content: url(../img/moin-ftp.png); margin: 0 0.2em;} +a.nntp:before {content: url(../img/moin-news.png); margin: 0 0.2em;} +a.news:before {content: url(../img/moin-news.png); margin: 0 0.2em;} +a.telnet:before, a.ssh:before {content: url(../img/moin-telnet.png); margin: 0 0.2em;} +a.irc:before, a.ircs:before {content: url(../img/moin-telnet.png); margin: 0 0.2em;} +a.mailto:before {content: url(../img/moin-email.png); margin: 0 0.2em;} +a.attachment:before {content: url(../img/moin-attach.png); margin: 0 0.2em;} +a.badinterwiki:before {content: url(../img/moin-inter.png); margin: 0 0.2em;} +a.interwiki:before {content: url(../img/moin-inter.png); margin: 0 0.2em;} + +li p { + margin: .25em 0; +} + +li.gap { + margin-top: 0.5em; +} + +dt { + margin-top: 0.5em; + font-weight: bold; +} + +dd { + margin-top: 0; + margin-bottom: 0; +} + +dd p { + margin: 0.25em 0; +} + +a, img, img.drawing { + border: 0; +} + +pre { + border: 1pt solid #AEBDCC; + background-color: #F3F5F7; + padding: 5pt; + font-family: courier, monospace; + white-space: pre; + /* begin css 3 or browser specific rules - do not remove! + see: http://forums.techguy.org/archive/index.php/t-249849.html */ + white-space: pre-wrap; + word-wrap: break-word; + white-space: -moz-pre-wrap; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + /* end css 3 or browser specific rules */ +} + +pre.comment { + background-color: #CCCCCC; + color: red; + padding: 0; + margin: 0; + border: 0; +} + +pre.comment:before { + content: url(../img/attention.png); +} + + +/* .comment css definition must be top of .red/.green/.blue or it won't work */ +.comment { color: #555555; background-color: #DDDDFF; } + +.red { background-color: #FFCCCC; } +.green { background-color: #CCFFCC; } +.blue { background-color: #CCCCFF; } +.yellow { background-color: #FFF29F; } +.orange { background-color: #FFD59B; } + +.solid { border: 2px solid #000000; padding: 2px; } +.dashed { border: 2px dashed #000000; padding: 2px; } +.dotted { border: 2px dotted #000000; padding: 2px; } + +.left { text-align: left; } +.center { text-align: center; } +.right { text-align: right; } +.justify { text-align: justify; } + +table +{ + margin: 0.5em 0 0 0.5em; + border-collapse: collapse; +} + +th, td +{ + padding: 0.25em 0.5em 0.25em 0.5em; + border: 1pt solid #ADB9CC; +} + +td p { + margin: 0; + padding: 0; +} +/* TableOfContents macro */ +div.table-of-contents { + border: 1px solid #bbbbbb; + color: black; + background-color: #eeeeee; + font-size: 80%; + text-align: left; + margin: 0.5em 0 0.5em 1em; + padding: 0.5em 0.75em 0.5em 0.5em; + max-width: 50%; + display: inline-table; +} +div.table-of-contents ol { + margin: 0; + padding: 0 0 0 2em; +} +div.table-of-contents ul { + margin: 0; + list-style:none; +} +div.table-of-contents li { + margin:0; + padding: 0; +} +p.table-of-contents-heading { + font-weight:bold; + padding:0; + margin: 0 0 0.5em 0; + letter-spacing: 0.075em; +} + +/* Navigation macro */ +table.navigation { + background: #fff; + margin: 0; +} + +.footnotes div { + width: 5em; + border-top: 1pt solid gray; +} + +.footnotes ol { + padding: 0 2em; + margin: 0 0 1em; +} + +.footnotes li { +} + +.info { + float: right; + font-size: 0.7em; + color: gray; +} + +#pageinfo { + margin-top: 2em; +} + +.seperator { + color: gray; +} + +#pagebottom {clear: both;} + +/* standard rule ---- */ +hr { + height: 1pt; + background-color: #9C9C9C; + border: 0; +} + +/* custom rules ----- to ---------- */ +.hr1 {height: 2pt;} +.hr2 {height: 3pt;} +.hr3 {height: 4pt;} +.hr4 {height: 5pt;} +.hr5 {height: 6pt;} +.hr6 {height: 7pt;} + +/* Replacement for deprecated html 3 element and html 4 */ +.u {text-decoration: underline;} +.strike {text-decoration: line-through;} + +/* eye catchers */ +.warning +{ + color: red; +} + +.error +{ + color: red; +} + +strong.highlight +{ + background-color: #CCE0FF; + padding: 1pt; +} + + +/* Recent changes */ + +.rcrss { + float: right; + margin: 0 7px 0 14px; + height: 0; + position: relative; + top: 9px; +} +*[div="rtl"] .rcrss { + float: left; +} +.recentchanges[dir="rtl"] .rcrss { + float: left; +} + +.recentchanges table { + clear: both; + border-collapse: collapse; + + border: 1px solid #4d7da9; +} + +.recentchanges td { + vertical-align: top; + border: none; + background: #e6eaf0; +} + + +.recentchanges .rcdaybreak td { + background: #81BBF2; + border: none; + border: 1px solid #4d7da9; +} + +.rcdaybreak td a { + font-size: 0.88em; +} + +.rcicon1, .rcicon2 { + text-align: center; +} + +.rcpagelink { + width: 33%; +} + +.rctime { + font-size: 0.88em; + white-space: nowrap; +} + +.rceditor { + white-space: nowrap; + font-size: 0.88em; +} + +.rccomment { + width: 50%; + color: gray; + font-size: 0.88em; +} + + +/* User Preferences */ + +.userpref table, .userpref td { + border: none; +} + +/* CSS for new code_area markup used by Colorizer and ParserBase */ + +div.codearea { /* the div makes the border */ + margin: 0.5em 0; + padding: 0; + border: 1pt solid #AEBDCC; + background-color: #F3F5F7; + color: black; +} + +div.codearea pre { /* the pre has no border and is inside the div */ + margin: 0; + padding: 10pt; + border: none; +} + +a.codenumbers { /* format of the line numbering link */ + margin: 0 10pt; + font-size: 0.85em; + color: gray; +} + +/* format of certain syntax spans */ +div.codearea pre span.LineNumber {color: gray;} +div.codearea pre span.ID {color: #000000;} +div.codearea pre span.Operator {color: #0000C0;} +div.codearea pre span.Char {color: #004080;} +div.codearea pre span.Comment {color: #008000;} +div.codearea pre span.Number {color: #0080C0;} +div.codearea pre span.String {color: #004080;} +div.codearea pre span.SPChar {color: #0000C0;} +div.codearea pre span.ResWord {color: #A00000;} +div.codearea pre span.ConsWord {color: #008080; font-weight: bold;} +div.codearea pre span.Error {color: #FF8080; border: solid 1.5pt #FF0000;} +div.codearea pre span.ResWord2 {color: #0080ff; font-weight: bold;} +div.codearea pre span.Special {color: #0000ff;} +div.codearea pre span.Preprc {color: #803999;} + +/* for diff parser */ +div.codearea pre span.DiffAdded {color: #4876FF;} +div.codearea pre span.DiffRemoved {color: #FF0000;} +div.codearea pre span.DiffChanged {color: #FF7F50;} +div.codearea pre span.DiffSeparator {color: #228B22; font-weight: bold} + +/* Search results */ +.advancedsearch { + border: 1pt solid #ADB9CC; +} + +.advancedsearch td { + vertical-align: top; + background-color: #E7E7E7; + border: 0px; +} + +.advancedsearch td.searchfor { + font-weight: bold; +} + +.advancedsearch input { + border: 1px solid #ADB9CC; + background-color: #fff; +} + +.advancedsearch input[disabled] { + background-color: #eee; +} + +.advancedsearch td.submit { + border-top: 1px solid #ADB9CC; + background-color: #fff; + text-align: right; +} + +.advancedsearch optioni, +.advancedsearch select { + border: 1px solid #ADB9CC; + background-color: #fff; +} + + +.searchresults dt { + margin-top: 1em; + font-weight: normal; +} + +.searchresults dd, .searchresults p { + font-size: 0.85em; +} + +.searchresults .searchhitinfobar { + color: #008000; + margin-left: 15px; + margin-top: 0; +} + +p.searchstats { + font-size: 0.8em; + text-align: right; + width: 100%; + background-color: #E6EAF0; + border-top: 1px solid #9088DC; + padding: 2px; +} + +p.searchhint { + background-color: #E6EAF0; + border: 1px solid #9088DC; + padding: 2px; +} + +.searchpages { + margin-left: auto; + margin-right: auto; +} + +.searchpages tr, .searchpages td { + border: 0; + padding: 5px; + margin: 0; + text-align: center; + vertical-align: middle; + color: #b93a58; + font-weight: bold; + font-size: 1.05em; +} + +.searchpages td a, .searchpages td a:link { + text-decoration: underline; +} + +/* MonthCalendar css */ + +/* days without and with pages linked to them */ +a.cal-emptyday { + color: #777777; + text-align: center; +} +a.cal-usedday { + color: #000000; + font-weight: bold; + text-align: center; +} +/* general stuff: workdays, weekend, today */ +td.cal-workday { + background-color: #DDDDFF; + text-align: center; +} +td.cal-weekend { + background-color: #FFDDDD; + text-align: center; +} +td.cal-today { + background-color: #CCFFCC; + border-style: solid; + border-width: 2pt; + text-align: center; +} +/* invalid places on the monthly calendar sheet */ +td.cal-invalidday { + background-color: #CCCCCC; +} +/* links to prev/next month/year */ +a.cal-link { + color: #000000; + text-decoration: none; +} +th.cal-header { + background-color: #DDBBFF; + text-align: center; +} + +/* for MonthCalendar mouseover info boxes */ +TABLE.tip { + color: black; + background-color: #FF8888; + font-size: small; + font-weight: normal; + border-style: solid; + border-width: 1px; +} + +TH.tip { + background-color: #FF4444; + font-weight: bold; + text-align: center; +} + +TD.tip { + text-align: left; +} +*[dir="rtl"] TD.tip { + text-align: right; +} + +/* end MonthCalendar stuff */ + +#message .hint {font-style: italic;} +#message .info { + float: none; + font-size: 1em; + color: black; +} +#message .info:before {content: url('../img/icon-info.png'); margin: 0 0.2em;} +#message .warning:before {content: url('../img/alert.png'); margin: 0 0.2em;} +#message .error:before {content: url('../img/icon-error.png'); margin: 0 0.2em;} + + +/* admonition start */ +#content div.caution, +#content div.important, +#content div.note, +#content div.tip, +#content div.warning { + border: 1pt solid #E5E5E5; + background-color: #F9F9FF; + color: black; + + margin: 10pt 30pt 10pt 30pt; + background-repeat: no-repeat; + background-position: 8px 8px; + min-height: 64px; /*64=48+8+8 but doesn't work with IE*/ + padding-left: 64px; +} + +#content div.caution p, +#content div.important p, +#content div.note p, +#content div.tip p, +#content div.warning p { + margin-top: 8px; /*to align text with bg graphic*/ +} + +#content div.tip { background-image: url("../img/admon-tip.png"); } +#content div.note { background-image: url("../img/admon-note.png"); } +#content div.important { background-image: url("../img/admon-important.png"); } +#content div.caution { background-image: url("../img/admon-caution.png"); } +#content div.warning { background-image: url("../img/admon-warning.png"); } + +/* admonition end */ + diff --git a/debwiki/css/msie.css b/debwiki/css/msie.css new file mode 100644 index 0000000..6aea986 --- /dev/null +++ b/debwiki/css/msie.css @@ -0,0 +1,37 @@ +/* msie.css - MoinMoin MS Internet explorer bug workarounds */ + +/* IE6 and IE7 both suck with :before */ +a.www { padding-left: 19px; background: url(../img/moin-www.png) left center no-repeat; } +a.http { padding-left: 19px; background: url(../img/moin-www.png) left center no-repeat; } +a.https { padding-left: 19px; background: url(../img/moin-www.png) left center no-repeat; } +a.file { padding-left: 19px; background: url(../img/moin-ftp.png) left center no-repeat; } +a.ftp { padding-left: 19px; background: url(../img/moin-ftp.png) left center no-repeat; } +a.nntp { padding-left: 19px; background: url(../img/moin-news.png) left center no-repeat; } +a.news { padding-left: 19px; background: url(../img/moin-news.png) left center no-repeat; } +a.telnet, a.ssh { padding-left: 19px; background: url(../img/moin-telnet.png) left center no-repeat; } +a.irc, a.ircs { padding-left: 19px; background: url(../img/moin-telnet.png) left center no-repeat; } +a.mailto { padding-left: 19px; background: url(../img/moin-email.png) left center no-repeat; } +a.attachment { padding-left: 19px; background: url(../img/moin-attach.png) left center no-repeat; } +a.badinterwiki { padding-left: 19px; background: url(../img/moin-inter.png) left center no-repeat; } +a.interwiki { padding-left: 19px; background: url(../img/moin-inter.png) left center no-repeat; } +#message .warning { padding-left: 21px; background: url(../img/alert.png) left center no-repeat; } +#message .error { padding-left: 21px; background: url(../img/icon-error.png) left center no-repeat; } + +#pagetrail li, #pagelocation li { + border-left: 1px solid #AAA; + padding: 0 0.3em; +} + +/* Spans for line-anchors - needed for IE6 and IE7 where omitting the "display: none" triggers rendering bugs. */ +span.anchor { display: none; } + +/* Some * html hacks for IE6 and below only (IE7 ignores * html) */ + +/* IE6 has a bug with rendering of float elements. We workaround this bug by + * assigning those elements a height attribute because we currently don't know + * a better solution. This results in IE calculating the correct height of the + * characters and displaying them correctly. We don't know any negative side + * effects of this workaround: + */ +* html div#page, * html div#header { height: 0.001%; } + diff --git a/debwiki/css/print.css b/debwiki/css/print.css new file mode 100644 index 0000000..bab9a12 --- /dev/null +++ b/debwiki/css/print.css @@ -0,0 +1,52 @@ +/* print.css - MoinMoin Default Styles + +Copyright (c) 2001, 2002, 2003 by Juergen Hermann +*/ + +/* content styles */ + +html { + font-family: Times, serif; + font-size: 12pt; +} + +body { + /* Give about 3.4cm in Mozilla/Firefox and about 2.2cm in Safari */ + margin: 1.5cm; +} + +a, a:visited, a.nonexistent, a.badinterwiki { + color: black; + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +.info a { + color: gray; +} + +pre { + font-size: 10pt; +} + +a.interwiki:before, a.badinterwiki:before { + content: attr(title) ":"; +} + +a.interwiki img, a.badinterwiki img { + display: none; +} + +.footnotes div { + border-top: 1pt solid gray; +} + +/* user interface styles */ + +#header, #sidebar, #footer, #timings, #credits, #interwiki, #pagelocation { + display: none; +} + diff --git a/debwiki/css/projection.css b/debwiki/css/projection.css new file mode 100644 index 0000000..627093e --- /dev/null +++ b/debwiki/css/projection.css @@ -0,0 +1,33 @@ +/* projection.css - MoinMoin Slide Styles + +Copyright (c) 2003 by Juergen Hermann +*/ + +@import url(screen.css); + +html { line-height: 1.8em; } + +body, b, em, a, span, div, p, td { font-size: 18pt; } + +h1 { font-size: 26pt; } +h2 { font-size: 22pt; } +h3 { font-size: 20pt; } +h4 { font-size: 18pt; } +h5 { font-size: 16pt; } +h6 { font-size: 14pt; } + +tt, pre { font-size: 16pt; } +sup, sub { font-size: 12pt; } + +table.navigation { + float: right; + margin: 2px; +} + +.navigation td, .navigation a { + font-size: 10pt; + padding: 2px; +} + +#interwiki, #pagelocation, #pageinfo { display: none; } + diff --git a/debwiki/css/screen.css b/debwiki/css/screen.css new file mode 100644 index 0000000..4c12486 --- /dev/null +++ b/debwiki/css/screen.css @@ -0,0 +1,135 @@ +/* + * www.debian.org redesign + * + * Kalle Soderman, 2008 debhome.css + * + * Copyleft : This work is free, you can copy, spread, and modify it under + * the terms of the Free Art License http://artlibre.org/licence/lal/en/ + */ +/* + @import url("debheld.css") handheld; +@import url("debian.css") screen; +@import url("debscreen.css) screen; +*/ + +#splash { + margin-top:0px; + margin-bottom: 1em; + text-align:center; + overflow:hidden; + height: 150px; +} +#splash h1 { + background-image: url('Pics/debian-61_glossy-large.png'); + background-position:top center; + padding-top:190px; + overflow:hidden; + text-align:center; + background-repeat:no-repeat; + display:block; + margin:0; + height:0; +} +#maincol { + background-image: url('Pics/cropped-swirls.png'); + background-position:top center; + background-repeat: repeat-x; +} +#announce { + text-align: center; + float: left; + width: 41%; + min-width: 260px; + margin-bottom: 1.5em; +} +#intro { + padding-top: 0; +} +#intro p { + margin-top: 0em; + padding:0; +} +#hometoc { + list-style:none; + margin: 0 0 2em 0; + padding: 0; + width:100%; + font-size: 0.75em; + overflow: hidden; + line-height: 1.5em; + border: 0; +} +#hometoc a { + text-decoration: none; +} +#hometoc a:hover { + text-decoration: underline; +} +ul#hometoc-cola a, ul#hometoc-colb a, ul#hometoc-colc a, ul#hometoc-cold a, ul#hometoc-cole a { + padding-left: 5px; +} +ul#hometoc-cola, ul#hometoc-colb,ul#hometoc-colc, ul#hometoc-cold, ul#hometoc-cole { + float:left; + width: 19.2%; + min-width: 11em; + height: 14em; /* Update when adding items */ + margin:0 1% 0 0; + padding: 0; + background-image:url('Pics/gradient.png'); + background-position: 0 -40px; + background-repeat: repeat-x; +/* border-top: 2px solid #c6c8e0; + border-bottom: 1px solid #c6c8e0; +*/ + border-top: 1px solid #c6c8e0; + list-style: none; +} +ul#hometoc-cole { + width: 18.9%; + margin-right:0; +} +#hometoc-wrap { + padding:1em 1em 1em 1em; + border-top: 1px solid white; +} +#hometoc a { + margin: 0; +} +#hometoc ul{ + list-style: none; + padding: 1em 0 0 0; +} +#hometoc ul ul { + padding: 0; +} +#hometoc li { + text-indent:0; + background-color: transparent; + font-weight:bold; +} +#hometoc li ul { + margin: 0; + padding: 0: + +} +#hometoc li li { + margin:0; + text-indent:0; + padding:0; + font-weight:normal; + border:0; + background-image:none; + background-color:transparent; +} +.infobar { + margin: 0 0 2em 0; + padding: 1em 5px 1em 5px; + line-height: 1em; + font-size: 0.75em; + border: 1px solid #d2d3d7; + border-bottom: 1px solid #d2d3d7; + background-image:url('Pics/gradient.png'); + background-position: 0 -35px; + background-repeat: repeat-x; + clear: both; +} diff --git a/debwiki/img/PythonPowered.png b/debwiki/img/PythonPowered.png new file mode 100644 index 0000000000000000000000000000000000000000..d9d9e6f90a900e6d7596a04ce834c7570ba87ed2 GIT binary patch literal 1992 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 Bj!*yq literal 0 HcmV?d00001 diff --git a/debwiki/img/admon-important.png b/debwiki/img/admon-important.png new file mode 100644 index 0000000000000000000000000000000000000000..c5726d5a0cede9e8c81a0bf84870ed5bd5048c0f GIT binary patch literal 1607 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 Rr40Z8002ovPDHLkV1i}VPqP33 literal 0 HcmV?d00001 diff --git a/debwiki/img/admon-tip.png b/debwiki/img/admon-tip.png new file mode 100644 index 0000000000000000000000000000000000000000..2ac57475c3b36e46ff4c4ea0506892e2fe884fd7 GIT binary patch literal 1910 zcmV-+2Z{KJP)W~QdMmlr4dytt0lBR3q?&; zsf}7ieW{ceqQ0~w%0ngR(l(+>6RT|+k)U#E5K0IT8=Mf^q}b(RJRV=>K69@7oZW{E z6%PeG5mk@0w56kc*8i=4U(N#l&kxlzdElw1LXir#G9KKfp!(p+CIA4}as(RoJ?ph< z1O7I&f4_Oh0lvTIXM4f;uUc2F*Hc}+k+#-Wgu^;CM({lsi;Ii6bn(1#X=2n?p8Ult zFa3J(jsOe{JflYw)=*=zShA`mbU-k=^sX0S3bG^fyY9h&Y0*p?-h1EjYvd&-0xsN}5e{ec8zp`u9n(Vo=?+@1vuxr;( zdmq{sySgZ`X-yEFtvWOgk1=u?K@veSA{RswfCnfq-Vjh%=E~LCoS`1w+!r}> z`egsc4Sj>7qo=I@ro(Oqz;w2~xpQOK_66FLgqDN`0whSeMC33|HYc(f!R7=@<79G1 zR#?~UctgM_n@*u@OS`XsbC~ID`%QIj>OTwYZ0%eZ%2h0^Y}4Vx_lPN%Kn_7UM6fv{ zi!o+0P8Ja?jWdIDG6RBDf;y{S&XkIM_uZ#~={xJ+gud6+5RKznriy?F03ZoPF5|En zk;92O#FS(p7l7|GQp#7bUC(1g#h|W*3RRm{G^d)Oyw!CBDCI>pp}|u&OviJALUW1W z5XfPSY{p=J20;=aPXl~c`BbR53&8+ajL0`#54zx_d_P(@05PouWhWVvm|mz_@rdpL z%pro!h%5%OI3t@Fa~VM@U-?0l0G~0c*1ZRa_*l7=MN?FF77CV; zEm~y&Hi2x;$YdNQ=VWLM6-Ror^Ck1VCFRVT6^W*xu2q7Jnai8PTCP~O7}F-}2Jk%d zx7RL?mRB}6dR!yt@?tf=@vcNFq!Z7Tt#q;MPAyjKiMhNvTru2n!C5w9&wr&dH~DBl zXojvc;|pzxI6l^@7iZ|Y^bJcm^55Je(FYX)}8FA}7hJYg1-a35r zueOloU{^~#GCY|bHykfJezouxm?|xcg}XZ2k`E^1(H;)UgKOs^&36r^nqq64qWZ=c zo_~(p(%U&WIB0zCpV5vzKj{tWp?`dH$8JN3$mEKqfFjN_hUtt&LRvl?;3b_4Ly)_H zc+f9d648MEqka3H6{TYF$yZ+d&7W_TpWP1N)t8?C*mbS%o_zO+NH&HNnVfaiHVO$w zN(#;#oeP7QYhS!Lk#s%h(}sZPo){lDi-q#w?ZlS^0089E>ACc^SXl6oRGyWdnJs7M z(n(@WGF`dv9Xr~do}Hc4HBsTj+OAxgCIxwRDY=&f@bb(1b5i;r&s>|KWevgAhEs`s z^x?6uUHa#H+b(``bm!Rk$tPB?jOqkRaAG~DPJIy589rD_Zf&U@k?op$|ML2Q6W`mj zV^yjpsV__mICk-FrhqlwD-exEzvwzub@1)O*BsXwdU5c%**o47Zr}0v!C0c_v4^*8 zK~K+GG)5!fTmvH@n_Iv;Zy(0^_{8P;jK1#Bp%?5s>Hq+=Hs>GOve|~O7~Xi}PslEm z;7Sh-4FL$vK|VL-<*a9NcX#vCnx=$dOrcyhK}f5*DU#?W3N0#5)c%sGQnK9pimif5HF z4xc%b`Q`k4vHV$+3KxK^jqc}hKnD=0MR0n$WKK?IhdVoaWpi_P-|pQ%*EVf>1k=-H zJDsi^IC5m<)oRriweP65#MgsrP)i1&8>;`03jjjtbb7j@qvM{jv9Z?C(NRC2&yO8H ze*BM~=Xn79n$UFzRPCK#bEB>$pqi*&8$}I72M}m)Z*TT}pJy_eVoksWVAn#{!U162 wYzgYQ39nnK)ttN0UffXS^-8b1am$VPZ%s-(_>=>Px# literal 0 HcmV?d00001 diff --git a/debwiki/img/admon-warning.png b/debwiki/img/admon-warning.png new file mode 100644 index 0000000000000000000000000000000000000000..f5c7a6f9b7fe32d95540589c8d9b969e28e7068c GIT binary patch literal 1971 zcmV;k2Tb^hP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z76%H-Iu7{&00%QkL_t(o!=0CFY*XhM$A9PM%#K4Kcc6&2B!M83kSxT-Lqg3o^+Tss zFfq1CYpFVIn#6SoiiW0%O`D)%rL==pYCjOQRZG8AlPXmkDOy*J4H}p>wG4&C_>#oA zDKYl3kB`r7AM9i21_^tmN9W?l@Be@P&*gnzfn|)}!jA=bi$@p|{NZIdu#}&$l*23V zlggT!*M4~Hm{<1s7CJZ%*fuy0j%9&u<5(7ddh<Y0=FNP3>5>*39zJ&hPCi7b#m5=gUtL#scJHA>-b^e; za%czyp=40J&i@KiRWUV^X42mkNbQhr@YLQOw(H z`4>x|0&wZk!BAB!!=ODFRAQmfj&Ec#=__!30f94ctbX%)S0XWsz$%Z2^5$lY?rv5@qa+J{4xkrE zZ0YJ!qM=aFQ@TEW6>doYJ@ENUr%ow}FTc!#yAl_`tLy5RK6w&j!v?6Uqw4l;R9(-P zUtv_0mEmt{B60jUxz<)>%VK3T%6(lg`eaoV9EZ;B+m)L)Z+_=fI3*UrWEnLQne#=C z<4_M|o_!X_=R*(#^ljV7zW5?*D=H8RbzkN6Qr^-+^27;5j|Wi{(VlsR3ZP7qumQU; zZ*qJbQBjH*@}f;(7KyN7@Yv_iX*j6eWEmRZ}|OFEOGyrl*8@Zo%=I1XYa zL*?1CgmXDEvvR?4o0e@qfIz`Te zfG8pYLOM;wxpRz0A|y3!4semkq6FMlTKEHwQ*1i6Wf6C*I)|MyH)rHyB zMKO-)H07_q&gjq($yBNY`X~zEIK_IOO~iH_V&O24UA~Mc2pH|{rLG8|Y4|Q)WaQ2r zl8M9|aN97jO%vMIHm$W2aS zCX-m{G^VEE*mg+)z^tu(a0rSy;40xJq##hWem(x~ZnDomk0^@8QU$OZ8_}M7jwhl~ z{?p%&VHk5jU9(|M2#Voz3TryHoo8H7#C>1&@XD9DO}+0v5FmDX0oef#M2`}yL+1uR{kLtxPm*p@~4nl%gL_dotP*826}?gcar z@!~~>KKOv?!9fgN=ihI?jrrk+NCN};rCJcMSFgs`(15aH#T;-!6z7CM0{9kGPlUtm zTY7qAE0e)UCW{F<0Q%sQz|2hD#K=hdmOwx@r>4+`hcTw6&|@(s zKl_Z8m6cQu4>NG-64PIOwII7q(`4+%4c4q%hc^9A-9K zA|%UfXl^E+N?Cu8#YTa^FChBBJz*dGC78{w9FE63IsyU3%4EnUlS=|GX0oEtxN#%V zM8f>%$jChro;nWkC3nSF;L5gawkke0wsmV)mttyKk;HPr6_1C;O`8~;nlitL$M4>R zZ@va&%RLvAUxoh7y1r_1Y-~$MXQymrvuLT*^1#c=Xxy}k|4vMp*T=^P-hv-pgG`~z z=axDd2|$HwN8#m-e*X`4?c7-=xUJc?vE9x&%iMR4ZF4gmHf~H#-u@#To`NYL1tful zo7WFJnn}P4zz_I;4o7R?rAIlOX5jjHIF^DLAWi<7bl0Qh9!@3TYc7$(y{BMGp_96E z*nnA(IG5)@3Q&RUeBfoDju-J43&dP-VP1h)vvPIG@jpW=3GZ^aG&=wQ002ovPDHLk FV1j^%vycD) literal 0 HcmV?d00001 diff --git a/debwiki/img/alert.png b/debwiki/img/alert.png new file mode 100644 index 0000000000000000000000000000000000000000..06148e8a951b2e9c9240f63c0d2986d6f81e2265 GIT binary patch literal 576 zcmV-G0>Axqf{R{#J3;z>k7R5*>5&A)3CaTv$(_xIOb?sAvh z(d(sYel--OXo{dv5Ja3@bkIRmw9%=Xi`ucEAc!tHWDqA^T>T3~a8rV92Zt8HAB#i? zb`ZrRk*7e^CAn{@FIau(&NP8XM7sflj8tmcp7EMM?NL3c|5K+ z64Eo7Rxq=Dk%^GRjlGz;Mh1pk84A~>pD|Huo?xpG8-Z@0RRV!4z-f=rx;El zybQU3v=FQ{&ygJfR>E!HMOpv8|IL}DET@lT2D2$uu?+YwTBle85N|F}GKQ`BJdTND z%>2UOK%adDK=1kS!LGagj!wJHhcEo-ciE?Hi+foQtrX~)S(09FQ2zR431DcaW(w$? zHi3u!_MN+8qs~qxCTkfc%C9bbZqd?xc=WNw^(0{;LO@4I9!~alM1BLBQeilutRUq8 O0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z6*mSRjLLWb00S3EL_t(I%Wae0Ynx>N#edK9ym^x*O`4|Fly+?cwR7rf%oIcz?K)5= z>b8qfbfVI$iVVSBda*yDyHEyRc%e9vO=QTt5H`@lHer6nE;OZ!%uLZK7oU_lyd@(yT%LvSdiDoeAR&u-+(*+%!|LwC9t)U7p(5k z>4}$*`5!p&u=Gcwn1(}reS>^9tCw%yYBJikP|v6T$Qi(is|J@#@uPetG$43npj4QvjzdIiEQE^h>FCX1l!GUt&sGglr;w zAkdgb6SKC7yS7ezYRXqHmHO)Ca^Dy5jl2k>zF=@RIrmzZ_x)vrwZr*Z3>mkOeF_m( zh_K+CPa*gAXkEX~{^{wUwC&l8Fe;^#XAhouKFmfIyb?01_&U48lb;q55s3&2j%`|8 zt29tbLA8pP%P~AL5teXPO2NtgiASZrw*pFl1*2Ah1K|on0aCE9w88%B&L67_fs@M- z8yl0rNz2nF?vF&#izQ@CW9pKRPmN$agQ;j}8$L=7;1xW)?G8q3yxm;_(I^Ju7Jz9u zY~3lcy}C_gu!rbFenP`xEM=i<8mHvY*r-uyy3}e_x@?=kpZ8l*h(c>UKhnrIxN+`1 zj*g8}|89Y;g$3+l0gRy)ixGVB1m3gLe4EMe!u`FKw>6eMu_ z2Yd@Rh-Wgi>J1Erkw6#bu}2U`r-^lk2t~rI|B|k0m=^$_!}+IDPn?NbJ_{kx#Ufg3 zJkP^*U0l}%tqBYbVcRz4j^qB6{`G@b;9UhU1J~~5^Uu}8;r`f>BR*FtTGcA;S`Ei> zaDze2_&6e&WGS0%t}HG6sNmJhVEzS@2NzTza5|An`Flr4rQO?$)|z&?Ol56N-%Y36 ty4CtGO!wpLgE`>1h5-NxdEkF>{vD1*Te~m2I^X~R002ovPDHLkV1g&bt(^b> literal 0 HcmV?d00001 diff --git a/debwiki/img/attach.png b/debwiki/img/attach.png new file mode 100644 index 0000000000000000000000000000000000000000..9a34c9a2de853df3c076f14bfa165de6eed99014 GIT binary patch literal 1793 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 M07*qoM6N<$g2+-+NdN!< literal 0 HcmV?d00001 diff --git a/debwiki/img/biggrin.png b/debwiki/img/biggrin.png new file mode 100644 index 0000000000000000000000000000000000000000..8519e02b65cee6a3bb6bb8226a9272305bcb78c4 GIT binary patch literal 902 zcmV;119|+3P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z6*nhR<=Q3y00Ra|L_t(I%axGJYg}a>(6ok^)MR6k% zwX|jS-#O>| zxl%;j_^jT=!@GDC|Kjo)1|83N0nv|1niK())@6_{($s!5@+_r)`s%Myn#A9Zybs)9 z*HZ(BU-NT!Kcux^1c^zaCGJ!%*=twcH>uhDGz@rYa18VJ!Q>>)UgQ0+XYkaa-r+X` z;zcC>9f$xIYzxtOlsCl6-07&ibpGeHfTLq$qyWsG^Cnj3o^MIIC28}#ShFZ%BM}>m zq<2J;irDr~Vm41p()>}DrjNB|&oTj^raz|N4-3B>I$r7$Ge;{K6+;lSX29)08} zVjFz*^|vgPmU;2HUcBT>-0&6VFPz+t>y2UO)R_Cm{YTy!2{IX_oFdH0F=-8;!_p9CxjfvdDi(&U!g(Yc$h!o38306L^l+yg*j zvlMy?L?)uqb_l~R;%FzgWk_u-= cp5`*ZpNs@}r-*m9qW}N^07*qoM6N<$f;|qTQ~&?~ literal 0 HcmV?d00001 diff --git a/debwiki/img/checkmark.png b/debwiki/img/checkmark.png new file mode 100644 index 0000000000000000000000000000000000000000..2fd38192c018d8f42fec582de514c24f11feb628 GIT binary patch literal 589 zcmV-T0Llgn!pQ543%J2RPPnrTYR z8zoH)3cBc~2)Yrs;vy{~U5I-@L|oXFgiFOm3*t&~<6od)NabwhUTt}Ma<@f*>gBN zk@QqWT?Bxk0GDnaF^Hnvo18jkI^SIERQFg54xIw&x|8=d{keE~~%K0M?H^40!k>%fc! zh#AulNr7kaoDmXCqQ31j!R3v9YyP}}3U;}%%N)<{Af5{b<41!s6b)d1%lD-uk4x0D z1_GYY%2y6ttgU$-=fHSsgfNf8*<+0Py!fX>tG&)@*{pPt)fEoaA5TL7Q41fth2hax41mFPR b{Sm=9T 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 literal 0 HcmV?d00001 diff --git a/debwiki/img/devil.png b/debwiki/img/devil.png new file mode 100644 index 0000000000000000000000000000000000000000..1fa14faa1d9000d6684a5a68fcf2e3d506205040 GIT binary patch literal 932 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 kH~3%J!SnyQ

RYcHT}65%_(DTB*R2#mj@vG1-Fu19eRRN&o-= literal 0 HcmV?d00001 diff --git a/debwiki/img/frown.png b/debwiki/img/frown.png new file mode 100644 index 0000000000000000000000000000000000000000..0f05f250d07715fe66457462b5ba51007dfbe823 GIT binary patch literal 945 zcmV;i15W&jP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z6*(y@-rBDK00S{eL_t(I%Vm>IOk8Ccg`e-cx6CkeK^TO>KoG11iGkEYwFPaaZrs>3 zjWKMhG%+SFTr`L-+%$?NCM4LH7`sx?=*pUyE*hf-tfG{Zp=C(5Efgug9b|xk8RqBS z?{z^mjhyw#lari0NOS9`+b)f zoeZO$m(hWfjNYi^gY(zPB!A+uBYlOT>h?oQ(G8$}9iU;Kzw}1ii+>cV+*LmMe4frz zCs|rrq-uXDA~{y>CkcncT)g--uXoO%f~T3dbRwP4r4CxJo>Ff%9PNz+oKiKnUc#FF zIL|y$N_AB^#YF`aJ1*h!6prsUzEB}1e-p>=qad)~+E|WmYsM0zj65I+z*}FHIjolSylVkNU4u-y@F!(5$WC>am zvpv@v-dekQcbX z49t#yd^S`w6j0hh+<6x7j8XUG+Z2^Q2f$YRds2U2#&hSvu7`b1%ujuo6=47oVdM+d zb89G)_A=v=TYW=JZd%;+UdhK_k=#nB{_2}-+Nwi$?xRmk8SCZL3%_44IoDP z6AM2_r++)Uga0MG^bfeXd*ri=9O9Ojpb`m5&HMYq%_^O?Yvvt za@rpZwP>Hy2zX?YF}4$v-on&3SvQ|LC-Og;_Ugx`7I;J!1GWDLVa6|An>vAl>?NMQuIx8?goUk5YVUsmscZCfaSV~T9NOzB zcF2Llc`|>+|J#}Iu`exk^wO4H<$bT-xZwAk3xxG!c8yT{LU)kEMaZz|I-QR7zR&QKbLh*2~7ZgMq%Xu literal 0 HcmV?d00001 diff --git a/debwiki/img/greydot.png b/debwiki/img/greydot.png new file mode 100644 index 0000000000000000000000000000000000000000..ec23c015046863aa45474fcfd9f349438542924c GIT binary patch literal 197 zcmeAS@N?(olHy`uVBq!ia0vp^OhC-Y!3HG1DAjj?IK@HkP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfv4mnXK$$$I5gaL)rOI#yLobz*Y zQ}ap~9E*}OGD}jEOG=AU6@pTWQxky#3ZZ$KB??9c2If2LuF3+n2zk0VhHzX@o?%^o g^Z)7V?~EB3B)76=?a_Ji6)4N#>FVdQ&MBb@0QH|Z?EnA( literal 0 HcmV?d00001 diff --git a/debwiki/img/icon-device-32x32.png b/debwiki/img/icon-device-32x32.png new file mode 100644 index 0000000000000000000000000000000000000000..b3facf78647a7bf5dcc800e903961421f0105304 GIT binary patch literal 2097 zcmV-12+sG3P)#f9Kx&e#|>FbcS{cEfr8~u_;6vl8P~y7*r$#aiM~7>%tI?F&c>r z+_-XKq6-%+O}b(uLVyZXLtGRZs7S3cFr}SNJDr(#=KZ|y{WxEbi+k_%ohe`;EIrA| zz3+X`$L~Dn|2*e8@c;4&7Fjqhvha+25@V^41#tGbpd5sNcc47BzLVPCd!nkz*z=k| zKN3iH;h!?25>Ot{poV~hCLj9w?rTG$CfgG0#;AMp3lN{y9yvl3z!N*83;r4 z{8{wzKM}dh0L`KSwyeIa9}^^qq1%IO4FUxR?}la*YJdu1!s9N#jd|fYnEyBJHgu)| zm;^MCQ&``YBVGk_Eg*`>Ld^mhIKjXEXJl?4;h}@rGpDdGK8xO1LV#`#s~My@0M`L2 z5O75X!ux3Ee}O0C1P9@y! zBEEKuXg?${E%LB%S&JuYgiO@~f_}~*0ab@SpfkuKa62|ZDhNAP-S$bY$s#sSFwKxi zdt4)AWCd_!Dj+C#eE^IM^epHEvIbCS#8C(~r_hV0*s70i5mAm*6t*TflcS9%iUO3@ zI0ab%D@oCK#Xu-9N`b;_G>}n9J7lX~HcM~~7E!ST^n;MhYDU_iYnCjuq^?gpg{1^K zBUl-L_HaIJabe5X6`1|LGtL&t}#f9`%Be*Amf8)iT1#>4orum9qw$uP~l_k;I?VEYe%opU#+D2mkV z^>aI({NrEVot&K7iGXv0_uv7rLQV;VW~v}}HOQ{rdncZL@s0D7lhZqu3PSINY~=ACbn3}+ zFj|-${*K`6?^!wCWqtM*qPrjE(1S;4-FO{F93z+E#9_pd`5cF%v({OD;@iLZ*5z}n z3lzFBC5Ybw^2*yAgSn|j(>WDdOCT1U6>=-+p~o7q))!u(!SvhAtv$xR2Y*0g@2AKl z!QjcfMI>kFEk+F5TN2S&$%!Swd$B*c?eSd{Lbib0qLGD;Ovj1k=AAXduvmGX3C77L zgwYBGOw{36d&u{{dmopAi%jL79gW>+@5p?H7q0@w?*bZ3g%`-c_pL)H8 z6A-2FLBML~0-fbIiTf+W!+~^q+5ruGq0wH6gBlrapP@ap1aUR!F?wk=fT7^ap;2H4bNe1>-|tThCHHUVA_c<1e7 zbiy;(*b)M1*WrhdSntz;v!z8$rIRfd@uLB*9^rBWfHMxfCe8z5RVT5Qz(JVxkw~L_ zPSO`@p(WMD@u987=l}@=Bp1@Yph6+(D?%;GWa1NL4bUn*Cj!(KkTf?)W}p^;@mQS| zrgDYn0GK34bc$p{P?kK;i4p3d!g#P*alqydd|tqfMnaxA?9d6h^Q7WSu{J2Pnk`%7 zj38)S>aflu-k?;7Hi~5AvEq?*9fjcHEw@hQxLlM=rS99Z zv684jMT*FXGY;>S3LK{p*{ifajHhC03(=_S z0wbt=qqe^C&ghNBGpomdE^ryx06IW_J4lnlzh{7%iHYg`_df9RpG7mD|Mcm>Nblof zdit+_I2v~@oTKpn@%%FY!XQ+w8xLK7@X$AIdYHIZ8@1JF`9JYnOY_|m&iLxU>jP`R zdI_}!q&5aJ4eTiE)ULgEePQO7JMLIGarCJYVElSerG2X0>Ii5wC!@Jr@0$Jcxqoy| z<%w-`C0(pQI;BPWz+fCC0_x@VOqDRx6#iZ>+f)#mt1nFfR}!G8v~cyU@{S5*SXyEL z#6UdmHC4E+^2>0nb0uoCtybB11){1gDq(8nBC7sE5yWDyikh%Bq&_`N+1_RPR;b**u`eCLg!R_!tpaG*k73t=9=R b_TB#%Iu6GxaDQ;d00000NkvXXu0mjfO*8Ch literal 0 HcmV?d00001 diff --git a/debwiki/img/icon-error.png b/debwiki/img/icon-error.png new file mode 100644 index 0000000000000000000000000000000000000000..ab6808fba55428710250c72b2569ca5288cd6df2 GIT binary patch literal 820 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 literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-bottom.png b/debwiki/img/moin-bottom.png new file mode 100644 index 0000000000000000000000000000000000000000..f4014f3ccb79cd94e02868739c71e3481a457a18 GIT binary patch literal 641 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 literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-email.png b/debwiki/img/moin-email.png new file mode 100644 index 0000000000000000000000000000000000000000..9be90c67ae260430b92826d6b13735009d1fba05 GIT binary patch literal 563 zcmV-30?hr1P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iOS{ z777M-B0Qe}00FZ}L_t(I%f*vHNEBfhhM!qR_jhm?*RidGr|MW}7v1pGl7@zX20S{I%U41PY8n9ii?)0vbTROw90-GK)u*nRm)|1*{r^Zb^Q zV$tU3`Y-EMqRWURzgi5QBU^)gb*|~Ht=p{noG&c09clVQVOLMi(kLceysx`L@)s0L_AL7VuCl5lbk(s z8i4Y!&dSOUIf%dT5{9b(x!+<;Kk} zPjX6|Jbd(+kMr{=W%yIF$ZvprPTE9O}-WP8c2sI~bkx~W%hR4Q7`~KsOhL7YLw*dV8tYl8O*r)&i002ovPDHLkV1j99 B{>K0S literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-ftp.png b/debwiki/img/moin-ftp.png new file mode 100644 index 0000000000000000000000000000000000000000..18b7d241901c4f825a8655a13df72887cf130cef GIT binary patch literal 652 zcmV;70(1R|P)sGy?vvKuzZMtAStd8D|>?h4C728Ll6 z&iQ^b--u(Av#*p=<9C*Cv6pdsVg}o`pF2va3pcNibMgDao&!a`H}+&&$aow zva%;Zk7ol22f!G^8Do%2QZAReg8hB{q*7_#EENH80F>G}HK4WbD$vIKw#vN^8;^AGvzvG9x30F~;C| z9=`84XYoss2XhYzYe#8F)eWdTHA>n;VtwT8q9`H=0xFeC0@)UEEZY(^6jEtCAeBlXMC%Eo zD56v<5r$#2h$RG#Sho^v{j1~H3FP}exqJ?_x=3H&AeBmmAP5MPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77GI(Q~6N<00U%6L_t(I%WaciOj~svM?b%NZ+qL?N?S}*Dj*Bs08^?Gh2ol2&5Te4Ay(vd2A@`$HCaO(MBCtNN!b2uFU0f|JsEwUVWbn2V0SV1d4 zQzI5SWR%_jFv>#xQc{P~k!cwHqOYRT+qAPmQ33&gG5iN26sM-}!}sTkU+a9KxiI;n zjM90z%gfrbp1r&K>RS9>FojJ_04polY-vFz}UsVeBLF-V_$in`V|*__L{7j(7S zNzohZ&`?{Sr)A*e&;!j(difxP&xh62Uzp5h^m&_=h=?BA)}(QhNjBMRpv6V-@p0^* znI=d6=U&NNyZb4B`z|QE0$`n;SW6^u=Eka6vfDy;Tg~-lHcR8pa{JLQ*VY6w8R)?v zM9&`dJpByCq~=z|sH*;Q=RFLJA%FNVPIPyd7HfCBH+g#c(7y`2zOVn;?WXngh(o3b^6Y)5R2yT}PkCcS4a{k=yww-9;z;;pA zIY%y+MJyJB(P#`SnQZ35^7Y7rH8ndVHZp>d>id+rt5-hSx3?FY2IT|**$y_ipV&J- zCQ13%hOzw80VLOxqM&JWie=-{g_BbouLQSpFq}OLtHpvnKA&uh-V7b9aD51X1~d+z zBug|qgH5{~$*L;+^5+`6m%^7>s9*Z_y5yI8jCI{lR8|}5_;K*|cH};IA0?qf2mz3Q z_02JCU7SbQ@5f3$%a<&v@9OABUGDO-kIN`NI3qVbY|dugRWA(5rB@F^03Z?|BILL8 zSZ!>?ifTeM7Uh@hwx1gG*LrMPOaE>mc literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-home.png b/debwiki/img/moin-home.png new file mode 100644 index 0000000000000000000000000000000000000000..a0f8f21b6fb8410e688ab5f0a6354c3d6f6b38c8 GIT binary patch literal 619 zcmV-x0+juUP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77H5;KVb&|00HYsL_t(I%axPAYg17afWLeD-b>R!@+6>Dhh$NE6KGYe5nLRMLKCNl z)Ji9jqN5mGI<#)Vss0%1)Fq4c$6yoi5AZ(_d0Sk>THEkqQHddW*CF=Vmrx;Rx?Ilp z-E$7-!U5qaRjh!nfcBJn$S|=7drE0fsXa+?Xn3(WqsupM{8u9S;hO7i6qI89+*!6K zPI2V$I48U&Q)_F~T$h4U*ABUEbwIEmep8%b_xLfC$}$#>(rUFB+x$wlTpo~!ez$I(Xt&$!*6W-sl|mA+AAa|sM8`16yE8UWw-`MI@4a&9h= zhzjU}QoMgu#%ne?Kb<2Uk0XQ#34GrV&V~?-=JV8C7X!EhtWKRi!~N1dHmYv}@X5+E zRvte^ixG6Eg)m0Z-QO%PEz$0!%*uIqzA%{~5l;Z1)C8G~BAdHOP!?RCysN1bl_1UO_moYLvGvnni}~vvZgkX2KBWKPVVimBjALGcw0a?2ks237G|1Br@SL3W_>`WZXa8 z5gx?&>D=*{%-w^=%nbVJ4mQ>{e|Js7=&fM%R(vPu_xt~AWP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iOJ| z0va)rK!EE20013yMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HRA^-&M@dak?_?!z0007O zNklMgLAmo;AicO z#rvM}|2lB4_u|7pZe#I26_G!d>$>W?t`-UfbzN6u@ji{k`}WVynzIktY!=(Lu_tUM zCML)_S;i6x?%f|Hl}^!fwin>RY@`NIRa6y05mi)_Xmb?Daj+UJQt1@OySf1${L1)i z08tb{6_~*km}fOIJaUUdp+G*LuW7#q5SdXnWwJag)Ok)N8sCaBxy@)r-4CP7{5sy&4pRAMffM;_8{ipX}+YTmz74$PU z{*`OPFECWF>irn%kHUB(Zul~?7s S=?Y{30000T3Lnw literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-inter.png b/debwiki/img/moin-inter.png new file mode 100644 index 0000000000000000000000000000000000000000..010a249d14b37a401648be0791302ef37381dd51 GIT binary patch literal 682 zcmV;b0#*HqP)WFU8GbZ8({Xk{QrNlj4iWF>9@00It4L_t(I%dL`4NK`=p z$A7cy_;|iP-h&7;qO$hOgNxoGf@Ix8P%a{fALXTEcnTK7Lv#?_W!uhO#1tyJYziT? zs}R z{#*V6pnzK=@zG}o8gxb@6Men?!r6AHRw{Vw>X@5*bym}~b2~d+HwOoX@CW=DM;dtk;wkz3*HW#~w&P$PH_6Rs5kh=+11?*ph1cUH6l|fjHGE9h z^~PGG(@kfXnayAr2D+}_Nu?84+>eND+my>T%gf76Zli~flIRUOKA(@lfgyl6K;2Gv zbG^7`G@ri+K;~t}vP_FoX@gL(g;1~sP$>0#vt?QU*Y^NY%1=|%lb77T%(iWW0Hr{o zP)e~!IV`DkVtsXOMOCZS1IOyxib|yu>$O+d7b)etsp-jUhaDoNoaKMy7oGLjcp?-; QV*mgE07*qoM6N<$f;l)YY5)KL literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-jabber.png b/debwiki/img/moin-jabber.png new file mode 100644 index 0000000000000000000000000000000000000000..f6e83254b638a2b939e71f07b182dae793009080 GIT binary patch literal 422 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`Y)RhkE9PK^lLGYXua=0dqb|0 z(0Aed#4mEkrXFFQVIkRU)!iwO@P)-K`H`TB-dCnMEei~^#gkV`ducIu)E`>3<^AjG zztK&BfkHBj6^DMzTFe^of29Ve$ooUjD*2X*ObOZ>y?Y%u!-GJf7{-VfofVRNRrl^& zA4u7ByT`KOXwIvCK3V<4ybKHqr#Hn33O05;u<$d!$H2qsdoZIxGtYU;WIu=L8{Rt1 zcMa9-|9(@J`Qv$g`5*Dqb~CuG?wq}|YY~H>BZuJ)ub;a966xg(BCQv{ZcM%SH|N!2 z9dFH+1n23Q)!EOlecrSASW_MIFQcQU1?I~ieR%rw>)mljBv$9#p2l!3b58*Q7;IDui+ui&r$;~AC~$Nu>2&ag&oQPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iOS{ z76Ti^=Iajt0013yMObu0Z*6U5Zgc=ca%Ew3Wn>_CX>@2HRA^-&M@dak?_?!z0005c zNklQ7McUx?tsWw8Xo|DYRP zRyVqlN>NhfPrwp{kG!F}eZKRnT3)Q9k<(fbParZrJah8xB6)DpW3aG5}RY zodf!aZlOA+H1`of_drmd`-B4VX2XJBG#P+X6bCxMxE(ky( z|EYsCK`NgSAp>`Taq$s7U81K;lxCms>fI@T$G}^UU&<$uX%fnaHqsV?kWTar;EPvV zb-w`s7$89R=af874PI^40sH~rVD@wbIfDN$WfFv8_|Jf~=AGM@{=&DmfB69#2E~zh Sv3~W1s;*b z3=G^tAk28_ZrvZCAbW|YuPggiW^Qg~6A7WOaq$lGMz+)FO4`_Yn*X zjIy3Cjv*GOmrma6ci2Fr)!uoYVse?4dzY37;HcOU(q{XAXF$#5gbOns*B;*@cLiACah?`$rO zl8=|enc}X$K7ae-(T+tLeSbJ-U46y;z?b2S*yZvEpRSy@*jYcThS^`dQcLUYbTwd* OGkCiCxvXPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z77PT=cKS5{00GxYL_t(I%cYY&YgADXhMzh2!%Y+sWhEl{0d{s4`WI}qaY04Fg_Mz? zfkf7J@ta7}`X>ZCv9U@k3JS@_NQl`@?k0Ed$C?2w$tm_PIt|Ay6e_{F_%1ieEahM z2*T3)GbblcvA(g2*8+eG=PwaQ@q`muotwY&H?l|>N8xg7ab*S|1W;4F7N~jvdb=Ck zywM2E6f?t2F$^<9)xxE>&zrNejk$LF-F^sQ=GofX=F`W|WO*@;cP^|&dyB0HZz=-y zeEa%?#;qpx`qWtNtEy{1d(s>dC~2A!#}P^L8}I#LzkpySI0u4YfO7$HTmwgcM34?L zqUZz%={Bkg$Vfzx>T3>!D(@gCaI!r#(UWHdLEso<$x+9TP=FJ`5Q0G1?+*x&UsVgL zT)lP$)ttQO1A+)(Rpk-7I1r&`HIihP(zG)on4X@dC<&0H)4e97Dnwq`5a(592U;{c5Q-m?f%u>hvEPL002ovPDHLkV1iwY4ut>! literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-print.png b/debwiki/img/moin-print.png new file mode 100644 index 0000000000000000000000000000000000000000..93be1b102bcaaf5a674a941bb30c86a68c3d1fe3 GIT binary patch literal 515 zcmV+e0{s1nP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77Q7!aF*-<00DzZL_t(I%axM5N&`U@hW|Nd2cvldMTnY48w)`jEtG)i*L4*e@e&_E z5TYUoY9aUtilq@DU}GUz=vrD>hJ=(NrU~2VW_L0cnxJNl?gzubz<=SK5n5|B*xB9M z4}xG5ZIDtP?C$JsH6OIr&6C~U(64W=`ZxT**V*k2{Z(W9Oo(;F@ci-wW(KnXC0Kj!!cwVj5V0Lb%o0%WG;$0}0%c#{n5P!^|A#PBuRx!U|SCmr2 z=VupB!m`b{l=8te&15c@oE)D*DfOp#HM1PP z#--&&M8yCA6)5y21|kVn@X=JvFW83w)*+xHIcNv~NAD!a*AL^jOQiq+002ovPDHLk FV1kh4)}R0Y literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-raw.png b/debwiki/img/moin-raw.png new file mode 100644 index 0000000000000000000000000000000000000000..2cbcc71a592b76f8b94a3af77dc799e9a023d8cb GIT binary patch literal 740 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77Q<9$^&%(00Lx5L_t(I%YBp0OVm*mhM#kOzsb~up=O*GwMZLN6UmH>2(lphgmw|O zXpuy_un57Tq7gru5*LvP6*X9!plxOL@ec%JI7XV;qVglZH7%UEw?!F_X)j#Pg$vJp z&wI}mYb_0p;c{zjLp&bOUK~RmGAHthI!%*G&$78?eS0yOdg6TkWmp zrXTg;nlfuGb4vjdiNp%uDnHXR-KcKi)h z=3lxngW}>XbalNaJ;g&>iiX=1_6^EbZ-4s?Jx^8H=)i-vRDN?h&dEF*7}r1aKFd`>d=i zPL`j-p0F5eu*UH8*%NwuKT=&2q9#cw7&Gz-sF2!mL@lmW+%H9LJsd+k%Kx+`ilV-|sx9K&BtpbtgsS48SkZ W3HASfB_;C!0000z4jvs+H&M;MdVlo~3xi*=OJ?_woqWD+!X0r)Eth>zf6~#I~h_x=;wA-Dd z+**KQozrf0=yrP`uv~tU=PNp$9=PN9&m5``MT8K_&{aPpgh0?h*3ZgnLD8Uy3TAf5 zKt#}>1StVDDuN)wzMjU2m?2ivf~uktc>kCKFrUwkT3ak;+}}L_LQ1IyAm|C&2XH%X zK}ArJQpKIZ YZ=>v}zGvq^U;qFB07*qoM6N<$f<&0NlmGw# literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-renamed.png b/debwiki/img/moin-renamed.png new file mode 100644 index 0000000000000000000000000000000000000000..124d3759f6001bb2a540d2733601367c19f5b1ef GIT binary patch literal 786 zcmV+t1MU2YP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z76ch(sT|}000NRpL_t(I%Z-ywNR&|&hM)U6<2aINO5&KQ>1YmA>Y_9~F1%+ro3$d+=_ug~F!$*y;R8_qc{b!g2-w-iN;~1A`SPP3`COnx*bIQQ)s3TpD>YDrPhQ_9P zsg1pno(Bce*WV=r-Z7~y&&hyyOfI-O4F^E_r$GxKm!=5ItU}WyKX2@% z0x$?6bb-E)y?UJ0whaDhe`z z1*8T-K^TI+IN>T}^YbeR*5eY>&?IymZU1K7| zf}&}fvf04~%xQV7mNo}Pl1fl=>JW*=IPE4Zl|7W*YsG3!MNf{5jKXHK0caas#_5Z? z6U=dXvNyE%?!@WQI-+Hsaj^S8;)X2!FEqre7iCu?LY$u+-XmQPYXEXT^7>&k`ziE90mM9g@ QMF0Q*07*qoM6N<$f=_#2i~s-t literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-rss.png b/debwiki/img/moin-rss.png new file mode 100644 index 0000000000000000000000000000000000000000..32272beba716cb59c12b598a697f38a3cf85c2d7 GIT binary patch literal 757 zcmV*33b7Q5l0Tp>bSsF9 z?nSH=3`V3D2E>K9sOZMpA4vrlx(Q4vrF7%e$;@Qty?b1ICo}4z4<7e%;hlTVx%ZkR zHr}?y5aT(|xrP*Z_(`D@>Yn}l!kVty%@r2o#9 zYimPyey(@>+s)&)c_v=kf8yPfkIg=5+}(u!Hc|%9$cu>QK`x;XvC0el{h+1B4_{r5 zo^!2yuxkAIE%e*))+Ox09n`#yHE*LozC+ChXaJacsPPMr9$q$g)gn?1aSZxxBUu4-a9DP{x86;>*=$XNnh5;H$De5!qNwj`}pP>7RMdTZ;}$#UhedE*-S$B#x+Hyr0Q$_1nJRE5sH z`wB+gZmzI6HaT@=-%GDeOg=qlkdW_SxdXXf+|&ujZZ2vcpl1 zMZ@GK2apA{PG?ddXEM`!?RHyZ=kcza{{|ocz_G78)~3_xTfzOGVc*@!;z&{~D4M34 z#HCy|oAJK^O5@u;x%xm;z_nWd04$M+pY+%HrNI}599Zr)1O{&1Fr9gQ zRx^nN(=^?Ylb_Xc3crTMTm|}8W6tGCdm-gHU zoivEbfP*V-h@Y#f29hN4c>od3S|m}D80SwWrl%O%n5zs-y=aEVV!4n`6c;!WFs{rR zhNug$8$G1gD4`4AaS<H7=eg9>uBL$90I_nW$UopHtf^aCQMJwQhI406Q(#?y zO-@ZpM5e?TYiVd$*M}u5U8hd09vd6~!{hc8oX&FDU*~sLS6AD5dV3x{dHP7z^Tsz$ zm;I-vElqH5_&#iSZzKKk>qUmIhNJ7$iG2Xj914Xt0)Xc8`7QxKZ+qL(^TA-S6B++< zPs?7gTFc=3v)=)}CSYu?u#}a#&H(^gTU%RH&GN(C?nC&$dI>wJW|L@7q6Gi|002ov JPDHLkV1n1##MS@+ literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-show.png b/debwiki/img/moin-show.png new file mode 100644 index 0000000000000000000000000000000000000000..613f1360c3cf660dca54f772fc1274087279d0b4 GIT binary patch literal 923 zcmV;M17!S(P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77Y?3xqc-800SFIL_t(I%YBhuY|~{F#-H=P@0x!+Xs9>yc`XlQc)ICO}X0fnRL9yZ?yHbJU)9AQAh%1vBZ*qFJ*5BJ5 zc=ya0Of;T+%oy|jzP-Es7sfL(m%ZiA{&^FgWwm)zbNzvxTLN7VZZ-4yDt?~IBeuEC zbhK|XLB~J<7*gtG%j}%{;>R2yDPc|n_ys_ruv+e%`aSpBHuSr-2(7aG@kt9tBY5L248q4s1!jdg5|sHj0pcKBJbQI z+-T-mzvDac+@U7}0O67C5deT?h6q3+f@nNR0Pbb0wZ0(2`?XdK0kH^)2t+_i(M{TU zWMr{Pt4%~CM1WFC07$h~S0a?Q)*b+$0m#3dNhO4K^bO0$qsOpTXLy#O6=5-7!pYNP zm6BUMnn@+T`;XVQ5YgMFG5B&ki@L|?dGtPf_-WcLxz&;X3HwQ@j|kLi06+v_7BCCu zms}h<_;}##`AdoR{?VAV_6&gQ03raomC{d>(tUumipVK*m#AR>LoHZZUBl#D0j*&N z#|IDjuTIauGIJyQ{8E0^5Rt5pL?jdr2bI#8x;9;Awx1XP$mNSTdp_;%>fGvk;^CjIPm;9&pE;))Vmq}`d2wLe*VR0ADE)J?wk`P1z~lQ)8U&41`$Vd zeiwkj#v~vhx(Fv;dcyX8yt=tU)^z5VLd*IS2E-}e~~W0L)XAbf$S z_XNmMQk;XRcZyoLN)#VEqkP||Uau1bRREOsXdR!WIeCss&;b;pr^dU8fM~o*i_}z6 z#uxxzeEu>&Y4 z-a5xyC&4|2ay7i#heW+u>W^QgDDsE>^gF295Q!5+pq&aYfzYiGzPDJd<8JhUDG_S1cmWW@5) zd6HyAJc&D_CMWv VGnR*;o9X}n002ovPDHLkV1iU0Z!Q1; literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-telnet.png b/debwiki/img/moin-telnet.png new file mode 100644 index 0000000000000000000000000000000000000000..619db112aca032ca57717223861ad34fd8893c6c GIT binary patch literal 681 zcmV;a0#^NrP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z77a2O*Iw-a00JpVL_t(I%YBp2OH@%5$3J&`Gb&_3hS9>n5(-zYT(zi0%Qo$T(rS^q z2p2(Mt%5eS4oa{^VuJnwwJjwG!lE=#Bb~7rD;<4~neW|Sr^Op*MlBBvKTWfri6rFHZKvq%>CNO8vps=`)G3wX z%iJ8JFCXE>AtHEjc<&KO+<8I7;k~2tLO-dLLPQP)6?wwc$63JPy_7)7<86=^!FdaS zb;()<@H93xB*EU}v3T$BB|vPp2-lYhHwyqb=XL@_gsBfR^!485*~k-?3wZ>=IZGk@ zNfd1+fl4JG?g4nAz9GY_H!rx+)kk4%nZc2VtQCGijivrTZ3#drg|zpDm-^De28N&(PuwyjFKLZwpsC=e*FZvDRvtMcDb1ErJ( zsc$~s%)-J#xn1|O#v_M`;s~YG?*Pi6h#eCl~FdP4A~xKtu;oQ*jPIxBKQ6R*P?Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77h{!lr81}00Hw!L_t(I%bk)vYZOrwhM)OzcHPVnNKlJ_gUD=^rt!kNtUnv#B`rVOwz-?O7Q>y N002ovPDHLkV1gQU7!d#f literal 0 HcmV?d00001 diff --git a/debwiki/img/moin-unsubscribe.png b/debwiki/img/moin-unsubscribe.png new file mode 100644 index 0000000000000000000000000000000000000000..9e24ce27c9daafce1bda8b2e93d708966ff1de57 GIT binary patch literal 583 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QK$!8;-MT+OLG}_)Usv`UoWf#!sv9&rKsxP8Tq8=H^K)}k z^GX<;i&7IyQd1PlGfOfQLNZbn+&z5*xVSWuH5H5u42%`L60=K_6x6dab8{1u)fIwE zQZw^Xi`0$ZM*!VZ>*?YcVsZNFq_bYpfg-K@t1}PvS{O!5v$9lSuJ*p* z&rE(t(gnQQdB1;4n(wsKL%`>y@r-%<_xiK{+$dgnA+YdZq8?PlE{2#_tP*wED z)0EGJWuk+Cqw9p5+z;!-0$mQ3=o=-lb@Y3NCUYpZ2`nnsi^^Wy;gX$eV{6&>@{U*J z69$Xt8?Ghw9E|EN=6i2@uiA-Yg;wUQqPRL{1=bJuF2BwV6tnzVB^&A*`hSz|3N6n` z6H+BpCvN`yP4?bz%>xpLyT6v2?UJss*UvPO66M%zdD^J$@cKP(zDMS6H8}PmCr^68 z&dzNk9wyj{ns;e9mPxP*62J&&ewTS}m7*@85AV^TmSZivzcIZh!poL43B&%s+A;zIPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01ejw01ejxLMWSf00007bV*G`2iOS{ z77jN5MWU#M$s?U$ zy_JX{mNxcwTHTV;Ixa#aas#(0Yx|yj3(UeCili7sKL0$9sXdNdCWKSW`2kW zWij3I!a?sMfb3(Chmki zwZ_`|SK6=Vy2Va!CQI^#ffJZi#|{6$Vshzz*a$;bx8BfG8=OBr<$G>z&ZK&>6kt*v zH-oXoo0lKd8(~DJSfPSu^~XE9cAc~1SNv*4KQ*boun%BT9lLI|ef#R8`dH&AzSBgk z#lb_Ya5xyJQ9H=#V;6&JML#pCKKFYE(=9Iso&(XZ&eAs-&myM6Cbl!3*nj(AI z+S~X$FqtL!vYRFO642c96#)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z76~^D(Qjq|00G@eL_t(I%Z-yyNK`=_$3OGl%r3+}d<1LKVGn!iA}%Bb9Yj2JQ#_UH zLP>v23!#IqNURdA?LJ~n)D{st6m+Sx1c4D49fD-3OKsP6A?PAX_}EBr))n`_-vn^MYehKo~du(oP zxcj}AguA{ye%Bx1?Sc28pL`Q^beOcG7C^OH)iPGPEwfVUoePjs7BW^k=JOMq6bQ;6 rkEUne1BmCj?2v8Sv34qYjgC$Luhxed%PSMh53JODVWnpw>WFU8GbZ8({Xk{Qr zNlj3Y*^6%g00QhuL_t(I%dL}LXj^3*hoASH_nc#sG-;dWqm6CW(4s83b+X9Bt0|~3 z6mOI%-9=?M5O0K`ptn*G#rs`|6-PnD>5WW=H?uIcvzCo^E3WHYKeL=HA5C(SbCR6b z3)#f&*5~^FdoKR`eu4)${@&~<;4NLs{R%AQ`wgX7&~)wW+|1M$58jLW!S}zMGrL#P4P+<|J^kR=q!LjUR<=1mzj7BLp1miL0MTgZr{|x^iYGDyl!|!#OL6OV`f;PXlOge)!c#$#{SGXl@)s^XbSCXaYk@OhXc|B#CG* zL-81~z96~mqojuij=b@~*=YbR90{B}oE@c7E^@~W5Fg%$Qs65I} literal 0 HcmV?d00001 diff --git a/debwiki/img/officiallogo.png b/debwiki/img/officiallogo.png new file mode 100644 index 0000000000000000000000000000000000000000..4f1b49752cc66c920834ecaec443575e61d4f54e GIT binary patch literal 1657 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 literal 0 HcmV?d00001 diff --git a/debwiki/img/openlogo-50.png b/debwiki/img/openlogo-50.png new file mode 100644 index 0000000000000000000000000000000000000000..f4e75fc55cff18190e9e0dbf1efd3d5cd7e052d5 GIT binary patch literal 1784 zcmVPx#24YJ`L;wH)0002_L%V+f000SaNLh0L01FZT01FZU(%pXi00007bV*G`2iXA* z4;u~mfl1x~00wwTL_t(&-tC%eh!tfR$A5G7=B}%*=4NX5ti04#upT%pvh_hDLf5Rs zA}B=jLy44&7$kK2AhH%AbRp1;q9AJBq{uGRB6{Mal4P};vM5Dn>uvLrd!0U<|K#H| zdv?xo&bpB=9Nu}~dFGw>|J>(!k3$|>lK6699?%X{nm!3^O^|Ae`khY10M-N70<{B> zHUmY#8h|K(IS~P90IEX(=&v;a8xy1&FBp&{@t=Un5eapBf>h0*0!b3D1D@zd3eCWd zAbZerlYkjOT~uJ4h(YWCt_Bu`(fcIvdw^vD>tqckS0I}LxOq51sxm_LT$>2wjb!@B7t3-Uyb7=5O#@dNemj23# z%XT(vuGp6?)SQn|W|N{6slPd7THXjWN*X7XLv2%>XgA(%>!6l{j2?S!UN+?$Q?zRx zAeGO5ImoCNKvRO$T!u)?*8R4b>l%ho%L<5$+)D<>hW%C;iW2clWyOCMh@|2rkKIE> zD!JxbULC3ySUnWL1|78s)4+RxFuWGz6wj4gsYU70iVp0*W5ZwZ-%*TmT-hr5p zq}5Wh7U1KkBln;H@l{W}ldDKes)Gu|XFD_WA=X764?*(^B*2EUDJ5NO7u&^lvHcI4 z6XJfM`fk7-AOS5<-xWmLL``8OT^qYNv#6EgGfUX%4o3Ft09OJ_NS{!Z4Y1C1;Bnw{ zpu|t`36o-#bUo|fJXlQW{wiXlo{2Dy4V1?B0PBD|#qCU>tAH1QTY_lI8Bqw%G7(=2 zteMLFdH)`9^y|x@hK`wYIeT!~6L6n0V%;&E@h+Tlao=?*d~81NyZx+}$qWMN3Il+Z z02M&F0qP2rXEPq<-<3psYk(Oqb zHgq4bS924TRDSBCb%6~)sh)WcI8FMzWR;KZjv&#EBwgBcwfHRQyelAMfH@j}Nm|d> znXw1tprq3V91|m4adec~M1|IHf$xClfLHY{4}1wQ-!N<+@Vq4B0^bAyS*n}6^}-@~ zEf2^zamEF%m$)l{4$WO>Hu;*?s5DZYsX5OzmrD!AN)1b-HVwMJ9vBAPYSx`7N!_LK z{vczYq5dPIdp!X$1#!GoV7-F0Jp_6RI02jj_UPH!+PHNfePTobFj|cH!`KE|1KDAR z`d^GW{L9!Us6Sv{<^%w7C0c(gH81WqwzVC&Nz!plpmZdKhk!RSc&pRuj~mH!W%61v zGv{P*xk&82zIBdxMLRR^O1c=mcFZ#m0I$ogs`Ts};H`koc4dkq7D$KssTurvp8&5i z8~55ZX7jFLjyM0Az*~krqU%NCcnlctTemFRfasM$YbElSZxL7eiQIIr#+?Cqm>0B) zfV(xfD8~!W?n2OA&gP4Bk~Ndek_IEvkbp6@y+8L!UJ1POqLBYgG88>}!;_ a`M&|1JR_^MMOKOc0000QL70(Y)*K0-AbW|YuPgfvR$fkH@q(xw=0Kq?PZ!4!jq}NW z{?BiGSfg{eo=vFnVG^60n1s9bmA;JL>tXUq2_WDo_UHc-b;sTwqc;U+!gj4Pk?Il_ zoBSS3Nk8;7zGjw$gu=rkEob+)m>jxdocQ^Df2J6Z{j$h}s~v0lIHMgVh$L)Spl-Tq z29LP0fzbrU03lAZhST>A4m6#%Kf)kZQa^!-p=++@;f*_|T>`p_!PC{xWt~$(69C{r BSziDE literal 0 HcmV?d00001 diff --git a/debwiki/img/prio2.png b/debwiki/img/prio2.png new file mode 100644 index 0000000000000000000000000000000000000000..850965c14a3e6c1efcb7da4d43bb284b86b7bd6c GIT binary patch literal 278 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?58;~rMGjRk`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfvR$fjEt`94CRe?g&JY5_^G|ngg z`9HtW@#5~k_RO6R{$2BO6O&l3qCO*|*EaZ?kpU2FP~eW+^}lg}o2@IO#cbBuO*12x zY5e(;xqPG4k(RUjUtab*Y-n~^LPFu;5tmi<6R&Q5@JWAD?um2zO8zt7xvz7Ako89*DB%QQ~60IlV9bt0RcntOzQ>0J3A$T PE@bd@^>bP0l+XkK_+((h literal 0 HcmV?d00001 diff --git a/debwiki/img/prio3.png b/debwiki/img/prio3.png new file mode 100644 index 0000000000000000000000000000000000000000..0649d2a31b99e75950da6befa5b92747484166c5 GIT binary patch literal 276 zcmeAS@N?(olHy`uVBq!ia0vp^{2(?58;~rMGjRk`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfvR$fkXC8yS%0zjcDo-U3d8t0S$ z{GZ>bxFGJKJ#%M*^J8W=F$r~}v+WtZr_*y26F|UG%;s-}wPWwHP4f!OxXoB?#mWPI zsH%r-kUG+Gc0Z8uKw@?x56^^xB&DnSPrQmO_$hwVEG2z@-5%L@`D!_gjc-aynkQT} zRAje38Mt-fM@HqU1%kr2G&);mtZ-!4*&)Q>Im`2_IWrJ2oIYxKaQo(2_kr$X@O1Ta JS?83{1OS}$Td@ED literal 0 HcmV?d00001 diff --git a/debwiki/img/redface.png b/debwiki/img/redface.png new file mode 100644 index 0000000000000000000000000000000000000000..2ea4da9d3034e59eee715a3e9c890774b9bce900 GIT binary patch literal 876 zcmV-y1C#uTP)y#<~k3f@18dSV3L%BAXCR80;d-Maf=lZ4gvoEuAoC zqK*}tj*}t&Gh zR_uwVUt{k7|LS(QHbSx-B!=A7<^x?%9!YvFd$dlrgG9u^JeAx}_U4u2p$QA8no_*6 zqmS^vf{_uNjxh1-)*Y|++~56Cis(8L-2ei>1@RF)RI;1&)Vsm*{DrHT6uo_Y7yu@} zP7E$i_4{IqV%9E*4gV0afryPnOhqKlimhFdu<(w=YnNnx{5gMem_YzFev-~)Q`=0> z%X5tqPN7q~`FP+s`COKx1Meetl}`qS$mjm%(+{2@ET6+|dXwpkuau+eYPZ&P?xC*7 z-}8tUQ0_Ls;q;lajDB|!Bm`UL^tm4y{eA+>5}0L-e~HfSS3T-D~n1#w`sQpo4by3V#H}?`17~G zYej4UOqQ=syaa_g$S-lSQbWWbSX5#QaV?G3WVK*M%f$&R zUMDmNG$lS|mm_M{s7;TNo;_Qo#<6vfhV|gB%P;t`KOw==eyL@8rIy(v zQF&N`+}l!_-!7#;w@C5EBN7z9k@?@ATDuLB3-DLc9=11s*e#-ZIvzceGX5_Ze~d8y zAz}lR(~8^pB5wWjEY2RS@X z+Svv+XVmOMIatE_hf+ZoL5V@GKPcU&MqWx+W48#5ATPD8DDs>IKPWUi2o0833>{Lv+TQ+OF<; zZRUOnrcsG*KI=b1saW8P{*Mq-=WzcZrQ&Tq|M+==>S>&&gZy#s^=i0MPb-yl4s|{C zp-XfV%h?LpjGjEj*bnDG0x(rZPyfQ$kK>^4fX<`63v{OUyCgZJu+%;`^@5UU9;_Hh zgU7qJ@#M}lVmvSvwmstV#Ey+fa1F4~-Z*Y*kFtb)j)|f+6-yyO5u!!JZe{qJ!yqAI z%AgB;_w_3f%^}eOpfN#?M=1)9pvS6(pAI&+KBj0~ zq+Gbf?d%oml@dDgLBMt#?%TA1*3B-Pnj1LoOVmo|jaZD48KQIQ`{s)FCM7DqEx(`I zBIUWG64bMz!R&xUx#H3 zEkrsb^oxW+5n}}GHgu5V*34Ip!rb`fg*bidV5&42wBrvP*t+x0xZCoyiX}Th454?E zT6x0cuAU5ZP&w9=ya%RrI9v1z?8VT|+RnTMXN<58=YIj+g2?qf*xADX0000mpR7c~@s~I2?G-<8arFeLHm1au6Hv5{-vj4;+uD9(+crcr!>y6wFX5{%mhvJ*ACaIn$8f zjeXtd{{n`Fa9ecj@~(YHI(BA0N)S#X;a@-icpyGP3MZanVe;J|KXdU~F2TX>ZVUhu zU&Z=wP4@U=N@6xIiq(IL*g(XFBBmk|6~xxAie7m~qRmm68GGKJ7^EM-8T*Xg@rI^s z$IDaoq9;*_PEPcmV!2qLulIe#Ryo-_z;bbkk3V=8T|ST3@D_hudZiq0R5MB?y`!y9 zyq6-H#qst4E@#hu!|=D4Ks4AgXU~r?{M|U1f57B1{wTXMuck+F3b#p7)|5Pbu1F#b5H^g-nahddiaO)8c~bP=K);y%RS=O;lz z#IArT@a5^3Aeuv>MZjS70?7wju$Cqd0ErMOLpTk#1Ww&neJO)k2D=8fiZwOF28d`t z0Pq~wEtp{bVI>MNc^vV z$O&#Q{erGeWAp+x%n{ZWSRF*GWaTwluv`N$-^i}Ew~5ODb?Fbu{&=JuZd5Z{LmE{5b5~yUBY#}NwNJ#1&z!?WxT>L-GI?Wg7JUF=sCm& zIBpuZ?f~A77r1r3uU4EJ|2>!B*fyBfYYe#Y`w#Eg|5`lN_@s&@TR<$KKTBn0!Y*Xb zX`|QAG$ikWX&cTCJpx@=ngLMc9k^hHZ8-l6!S}e|msscr00000NkvXXu0mjfjiHju literal 0 HcmV?d00001 diff --git a/debwiki/img/smile2.png b/debwiki/img/smile2.png new file mode 100644 index 0000000000000000000000000000000000000000..cc4bea97439a8025139ac03c0c2602cf36709454 GIT binary patch literal 860 zcmV-i1Ec(jP)!~`{hN*mc+ zQd%{w+@1ZI)fs2o-I;H9zWILM_vt_iar1!(9=I$~v(doVPFo%5roA6UPA;{;cb;4i=fB4Av^N};0dOrGEEmBx<$T8#5- zR~H(9;V+{D)91Tg(F>yM$Hn+pMT{q60uk+qgk>>}5%FhtOISZ6WBKRY;X@4E>O4s6 z$k#1Z6IMjmPl@Px5z~-e@AgV6m6TK}DZAd;CdU0i!rGwJi!Y1soRD*0C9C;CS^?y4 zJ6E|Pf0y!i%>l7@?C9Ck*49QkohBZS6NVw4=b@BhZ+|a|n8REx$^SE8rPYzJSe#~j ze2hY&fa5r1vl;e(^gd!{5nX1(V~Z50uinN~X=z!_+piO<{O49<^Q$v)v-By-N`t)? zR06~Yse!H_`UZqE=wOD>zd;yONv!>hbKkt^S<1G{+M7U$h3FC&PWCWg{Fb2pJI0$t z`_~EF8RklV@>~8FjCR4w5V#Xq7UhVbkJid3dRDD@*rM?>4|crA)a3z|7N*c)0|e|y zlw|W7);-ye*8N0MFW^*88&Mop`9WG^_pBP-(D~g;aXvxC9!0I#g0geBssJKO82=Bv z`H%4z&ydJ`!04&%wP10nT>%UqvIbfndg;wvM_-d(*oWxrfFKeex`EbPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z6*?o}CSY;^00Ra|L_t(I%axN&Xk29!hM(`=xpOm3rfIdwM60m`L~DjriH+K77vjPq zt+q-KT12BEC|w9v5Q;?v(T#+HjYwRmBrXDOVr{z6irPs7t!XkO)MBP%(pWN+`AIUF zzx(qY7cn9Y2)=OOEZ%cA@B1ijQS2+ChH3U7#zFDDCIDp^3n0T<^k;itV(Q<1wZ2Rb z5nQQSeF1yhk$WF|H&}Q36NV9N0&(%G2@2`&^~|Nyj_+g!>uug>?Zo-#!O#%q-H!G1 zU9H{i+uJ_0ajzoo??4p@fG#6O9m;BBcKk$jA#vu{d7FKmo%jHZeQovL81E^Iza)O? zjA-XK5nUD0u83a{@lv8Im&D1O5U=!$Bw|mN#|G#HP_fUsCs-eew;!6?EY3J(ua!?e z{gP`}ghr=y5v~Qp#-N z{7=&ydhU6$*&Lf{42s1Z%PR&44m``~*d#j|V+aFXVGtMm4CoZ%-voCS?M&fSlW1yDwOve}>zWH_&xh<2|z%ZX3BTwo55maWRzSU zB8?H0v4wCrjNr4FEs{n!Af)?y5AiSK&4fAi#MHy?ko2O*4Q1rQN@-(S1b8pSGay?lY_!|yS5 z{^W|gT5MY@(ty#MytuzyOua4Xct|qIH>JG%qf|>XQY>7RTkv`xciw;6uH^eD{n-z?_%|^jY`X>fjt{tbZMc$7j$WC!Ilcj= z|Gp1+b-#EUrJXl|I3rrhuR`duQMAHO-!GeNe cEo{K~FKzydzTy@BdjJ3c07*qoM6N<$g6gZNfB*mh literal 0 HcmV?d00001 diff --git a/debwiki/img/smile4.png b/debwiki/img/smile4.png new file mode 100644 index 0000000000000000000000000000000000000000..96f3af6c7f0f724e473c3be735aa52d61e736305 GIT binary patch literal 876 zcmV-y1C#uTP)=`^|qGJ8C*4 zRYU6{ZX%-?j8;)p+z1*f+8`9V2$q28rq)%dh#RR|vNE6qT575#SQ~2nccD!aQ;M-p zTWo4FX_5)fBq`2s?%aF7?>jEWiZo|+7Kit6&ig(NH`T;Z?o*-A0HS)u=ym`{sRGC; zEB2$uc5~_f^UjUt@+i@Y7a0o2Ht*`(eju7`eO#$%J4k@`=BTdxXlKuV=o^3SSSrS= zU48if35<>s>hL3H?(W*teOKn)7{MP%@F(B_VX!Wuk~onJ3)B0(!rbX!^D&<2>%#yr z^=V{qX?nmFQxda&TC9IX#Cjq&5HVE|T@>3mFaFwo(d*+fH}SMPHNqf(GcnB8XsRvS z{lcY9;!mSuJ>VojG|)h7orCWWvAVL%d+$7nUpYxQ^%@txdZ`lB>KUct;k}&?zm-Ji zaKhUdKKvO6KRCqj;iDiv*b1MY{DHAAC&By$rhswB*_zpzB+lM2j@pq-Kcz%p#ECt` zEB*c8L_rLq7r~af_nsvFodM!s1{{n#Niw}#IdWu2*lOLTB5A~50i8$0|M!FdvDd*A z`Q+p0K+iV?F<5_r_#GWsOPc~fG}e?jH?|Y&&mh57B$xr61G5bFZ?JW&X&}~XEa3`70+dehxAD=HqM;w^m?jHiy<#LWv%#t7oh@j5Te%^|tJTz29$=+6bQWBD3e- zq`dY!iIx^bEP?M~t;3ei=V@)dKqCD%+3)sLf?7S(4AO`iod4xnSG$wq75hb3kBeWw zDy70tQZ9~*Tb>cUepc#*H^eI)m$|c#uHOh!7+^7K_u1KRdqkY>j{6V9wEHv0Jwiwq z5$h4uZ^0(E6K;8irHh9eEAx}TPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOG- z2^s=f!NWHI00Lr3L_t(I%Z*aON*hrWJ@37FLm5O@sY4<}YfurDE`-{J8(nAxrQN!9 z;U~l>SyTwdPY~N>3`I(do9uMuqFtI@glZ9WG650E1kJp;x2puD5xj8W!aMi8b2&%g znaXCfDQ5l+;64n)_uJdse>>sia|Fzsotc^GnVXw)wbq-@;W`qO%Vi;iSR5G{k%NPS zLI|-~E|}6B0{xV1redQw--VP zFf#zawrzxAh@G7sl1i!4(b3TZ01y#;--qw}s8*|O1s4|=xV*f?)zuZkFa$H>@bK_K zDOFMv6BFMXjYjO`|L=e63a^0EnXK zNdrKwRwE+Hx0e62Q7JV$G&E$_>vd?Y5s$}_NF<=O#@*c=hKGl3rPOT49Hi6f9%i0$ zT^9h**Vl(irD7_Tib*DukW#{RT`==hI-Txm?OE-?vgQW{212d1)!p5VgM)+n>+5SD z0M5?NUN0;xys~W@{r&yn`T6-gfNxI}F!N|vSC3QC+F(zez5?IgB_wY9Z3mSz27W=TXVTU%Q{AK#kEWIjqMzX~D981pWl&;J2{fAxql UmV+7zZ2$lO07*qoM6N<$f+~JNssI20 literal 0 HcmV?d00001 diff --git a/debwiki/img/star_on.png b/debwiki/img/star_on.png new file mode 100644 index 0000000000000000000000000000000000000000..6a64f936c64be00f17c054bc30b95fe53c004348 GIT binary patch literal 758 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z6*d)vDZ1wX00MSNL_t(I%axK#NR(j|hM({I|Cw<#FmW;)C?bu-R$ZXNE_MT5bfX{$ zLM*pYi#8E0x)9Z-T@ZG$3v?mMHrYamG_6c&QB(^XE2U^=%FJ?p|9`&kv?xVMq2A4T z;d{?H-^+Uxlc4I2Xx)WQatIbK4tO{O=YVHpa_#ICl6s*6SiZZ@YuT#)+ir$z^@m zh#U}+(AbAXn_CE}*N6ld=F{1@`tR+UBeXSOjGqz_5#xUp6MPbDhQwz3BuMWSKUpW% zPlySUV*EZa{)a!>l(aQqT;(`TJx^-am8`fMLDHD-SJ66(*fdBMWEelaAJh~8+^KuO zjgxr1b67bv>u>#LYx3Q_a~(Gdd~Yy;J9QsohY<7QceTSH0iX%Tj^Pa^=(t(nr+V(6 z`_|9a(P$oBq8iklxl0Z@vDw?)Z2wU}5D5_L5iUGVs^?a=``IZ2vSoPV z512k@Ls&a%?SyyGd6s-cmgdFQ0};a0PLoPp%O(@ovytg%K;@7Zt44&SooC4(>2pVj zmqS%-)~Z0eGhB(T;Z<{`H}Lso65va3b5U94?HnD76Pvj*NcTRh0&a}AAe86i6@;>x zZn_#5_yfro^$|}>Bc7BFBwyBdH7@jn%v(ay+z>+f=p~Mj)(gzhE>97(vFu)1OXFCt oEf?ABXwIXsHp`L~yGQ{10$3zHoxun*ng9R*07*qoM6N<$f>IMu7XSbN literal 0 HcmV?d00001 diff --git a/debwiki/img/thumbs-up.png b/debwiki/img/thumbs-up.png new file mode 100644 index 0000000000000000000000000000000000000000..ca277c678aefc2d62ec6478075d4f6a0320fb448 GIT binary patch literal 410 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`jKx9jP7LeL$-D$|*pj^6T^Rm@ z;DWu&Cj&(|3p^r=85p>QL70(Y)*K0-AbW|YuPgfvR$fkP#d6E#%YZ^!C9V-A&iT2y zsd*&~NtFsgi7ENHnMDffAsML(!5OKk1?mbe`30G&MLCJZ*_ooXrniB*o_M-AhFF|l z8hmo?5e1%FV=w8DNvowD^;ljU_EOzG^-;@7Y== zgKv}T7*8lM2{JbP;bvf1@crLZ*6DMDepRq-K0ha@sY9WKfgvDt&1TZg9z4FfDCd<6v`7+yn xZ}TWF?z!mbtr-@c*6>*C`D*^OvkV{DL!uU)I(&HRO`v}nJYD@<);T3K0RVuko5KJA literal 0 HcmV?d00001 diff --git a/debwiki/img/tired.png b/debwiki/img/tired.png new file mode 100644 index 0000000000000000000000000000000000000000..077c98df041a32d9d432c7041b644530b253687d GIT binary patch literal 896 zcmV-`1AqL9P)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z6*wqG!rOQN00RI?L_t(I%Vm>IXk1kohM#lpy)%zlDu`i zlco(d5A2R@XcYL9IJU>W$84G#1JH}07iiv=V{h9mk_AGwgni$BN{iEaF*kleQr2BF zmp?6Gw}8>0=0IgZWk6-o>Nd*1Lm1o@8<0HdlrmnG&&r_4s7+FJg?R(ss{LEcloax!jrsXo-R;1=gWBV(S_~yr@ z6KepY3EUZ0=0|mA{5wDNm%mEHc)j&7{yKwoa~7O7a1c#B0Fs=5L2dZr$)jBTFaKY5 W|87wk_KzO`0000Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iOS{ z77z_l-5<;V00S6FL_t(I%Vm>KOk7nI#(($Dn;9rmC<289v26@BvCUYE;=jN?2tEMXrnslQrY1jyfjV@H`f>evzMyoDr5p2>xEP+sCX#uHa00Z-2cr)+a zdyk6=#_Cy}#g{K%&iQ?c|IE;*?AEbZ2clcWnmPcb^*qSePTYsjyu$du^=f08=qKS9 z;=Nw7y1ntK&P1xJMe9TzNQ5a&vAXc1yLqiAwBgd(iX?CBY9su|pueA3Lm0nu|E{A= z_38JLM3YGLJ5T^TkN_ctN~DMqK`ygiCLUSs#?Cq346EeRKn;p^w;>sHh!ldTG2|!claxnfJSTSX{_( zy6auUy0QZ~@F565C4OCnrH7#4Ul%@Y$Ic!Q4j7EMRfr z3?=t9;2gCc0AdjFA({lY0;;qaUwp8O;FiJVa5j&)0wN(G0C*}E%hI;*6%Xe!ShI{Z zKGv=hD{W?V@ro10K=F;6w~Xy={k~jQ&wymPK6r^B>r?V-ky2e%ic$)Vqv}K@)kjV< zcIl`et>w~1kot7@?O$F9OfW2kyNAWDUlteMkn3l=WkhT7+uLRG;6eGbrA5Z-t7Yov zr`I4KA~3(KzypUkOoG84mNbCn$b zUzxIbdSi*o_U(HPCsNfunsC0ZlE1jo6MAjHOAGh}74gKFE2(WUHEgyye0000= (2, 5, 1) or '_xmlplus' in xml.__file__ + + +class ThemeBase: + """ Base class for themes + + This class supply all the standard template that sub classes can + use without rewriting the same code. If you want to change certain + elements, override them. + """ + + name = 'base' + + # fake _ function to get gettext recognize those texts: + _ = lambda x: x + + # TODO: remove icons that are not used any more. + icons = { + # key alt icon filename w h + # ------------------------------------------------------------------ + # navibar + 'help': ("%(page_help_contents)s", "moin-help.png", 12, 11), + 'find': ("%(page_find_page)s", "moin-search.png", 12, 12), + 'diff': (_("Diffs"), "moin-diff.png", 15, 11), + 'info': (_("Info"), "moin-info.png", 12, 11), + 'edit': (_("Edit"), "moin-edit.png", 12, 12), + 'unsubscribe': (_("Unsubscribe"), "moin-unsubscribe.png", 14, 10), + 'subscribe': (_("Subscribe"), "moin-subscribe.png", 14, 10), + 'raw': (_("Raw"), "moin-raw.png", 12, 13), + 'xml': (_("XML"), "moin-xml.png", 20, 13), + 'print': (_("Print"), "moin-print.png", 16, 14), + 'view': (_("View"), "moin-show.png", 12, 13), + 'home': (_("Home"), "moin-home.png", 13, 12), + 'up': (_("Up"), "moin-parent.png", 15, 13), + # FileAttach + 'attach': ("%(attach_count)s", "moin-attach.png", 7, 15), + 'attachimg': ("", "attach.png", 32, 32), + # RecentChanges + 'rss': (_("[RSS]"), "moin-rss.png", 24, 24), + 'deleted': (_("[DELETED]"), "moin-deleted.png", 60, 12), + 'updated': (_("[UPDATED]"), "moin-updated.png", 60, 12), + 'renamed': (_("[RENAMED]"), "moin-renamed.png", 60, 12), + 'conflict': (_("[CONFLICT]"), "moin-conflict.png", 60, 12), + 'new': (_("[NEW]"), "moin-new.png", 31, 12), + 'diffrc': (_("[DIFF]"), "moin-diff.png", 15, 11), + # General + 'bottom': (_("[BOTTOM]"), "moin-bottom.png", 14, 10), + 'top': (_("[TOP]"), "moin-top.png", 14, 10), + 'www': ("[WWW]", "moin-www.png", 11, 11), + 'mailto': ("[MAILTO]", "moin-email.png", 14, 10), + 'news': ("[NEWS]", "moin-news.png", 10, 11), + 'telnet': ("[TELNET]", "moin-telnet.png", 10, 11), + 'ftp': ("[FTP]", "moin-ftp.png", 11, 11), + 'file': ("[FILE]", "moin-ftp.png", 11, 11), + # search forms + 'searchbutton': ("[?]", "moin-search.png", 12, 12), + 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16), + + # smileys (this is CONTENT, but good looking smileys depend on looking + # adapted to the theme background color and theme style in general) + #vvv == vvv this must be the same for GUI editor converter + 'X-(': ("X-(", 'angry.png', 15, 15), + ':D': (":D", 'biggrin.png', 15, 15), + '<:(': ("<:(", 'frown.png', 15, 15), + ':o': (":o", 'redface.png', 15, 15), + ':(': (":(", 'sad.png', 15, 15), + ':)': (":)", 'smile.png', 15, 15), + 'B)': ("B)", 'smile2.png', 15, 15), + ':))': (":))", 'smile3.png', 15, 15), + ';)': (";)", 'smile4.png', 15, 15), + '/!\\': ("/!\\", 'alert.png', 15, 15), + '': ("", 'attention.png', 15, 15), + '(!)': ("(!)", 'idea.png', 15, 15), + + # copied 2001-11-16 from http://pikie.darktech.org/cgi/pikie.py?EmotIcon + ':-?': (":-?", 'tongue.png', 15, 15), + ':\\': (":\\", 'ohwell.png', 15, 15), + '>:>': (">:>", 'devil.png', 15, 15), + '|)': ("|)", 'tired.png', 15, 15), + + # some folks use noses in their emoticons + ':-(': (":-(", 'sad.png', 15, 15), + ':-)': (":-)", 'smile.png', 15, 15), + 'B-)': ("B-)", 'smile2.png', 15, 15), + ':-))': (":-))", 'smile3.png', 15, 15), + ';-)': (";-)", 'smile4.png', 15, 15), + '|-)': ("|-)", 'tired.png', 15, 15), + + # version 1.0 + '(./)': ("(./)", 'checkmark.png', 20, 15), + '{OK}': ("{OK}", 'thumbs-up.png', 14, 12), + '{X}': ("{X}", 'icon-error.png', 16, 16), + '{i}': ("{i}", 'icon-info.png', 16, 16), + '{1}': ("{1}", 'prio1.png', 15, 13), + '{2}': ("{2}", 'prio2.png', 15, 13), + '{3}': ("{3}", 'prio3.png', 15, 13), + + # version 1.3.4 (stars) + # try {*}{*}{o} + '{*}': ("{*}", 'star_on.png', 15, 15), + '{o}': ("{o}", 'star_off.png', 15, 15), + } + del _ + + # Style sheets - usually there is no need to override this in sub + # classes. Simply supply the css files in the css directory. + + # Standard set of style sheets + stylesheets = ( + # media basename + ('all', 'common'), + ('screen', 'screen'), + ('print', 'print'), + ('projection', 'projection'), + ) + + # Used in print mode + stylesheets_print = ( + # media basename + ('all', 'common'), + ('all', 'print'), + ) + + # Used in slide show mode + stylesheets_projection = ( + # media basename + ('all', 'common'), + ('all', 'projection'), + ) + + stylesheetsCharset = 'utf-8' + + def __init__(self, request): + """ + Initialize the theme object. + + @param request: the request object + """ + self.request = request + self.cfg = request.cfg + self._cache = {} # Used to cache elements that may be used several times + self._status = [] + self._send_title_called = False + + def img_url(self, img): + """ Generate an image href + + @param img: the image filename + @rtype: string + @return: the image href + """ + return "%s/%s/img/%s" % (self.cfg.url_prefix_static, self.name, img) + + def emit_custom_html(self, html): + """ + generate custom HTML code in `html` + + @param html: a string or a callable object, in which case + it is called and its return value is used + @rtype: string + @return: string with html + """ + if html: + if callable(html): + html = html(self.request) + return html + + def logo(self): + """ Assemble logo with link to front page + + The logo contain an image and or text or any html markup the + admin inserted in the config file. Everything it enclosed inside + a div with id="logo". + + @rtype: unicode + @return: logo html + """ + html = u'' + if self.cfg.logo_string: + page = wikiutil.getFrontPage(self.request) + logo = page.link_to_raw(self.request, self.cfg.logo_string) + html = u'''

''' % logo + return html + + def interwiki(self, d): + """ Assemble the interwiki name display, linking to page_front_page + + @param d: parameter dictionary + @rtype: string + @return: interwiki html + """ + if self.request.cfg.show_interwiki: + page = wikiutil.getFrontPage(self.request) + text = self.request.cfg.interwikiname or 'Self' + link = page.link_to(self.request, text=text, rel='nofollow') + html = u'
%s
' % link + else: + html = u'' + return html + + def title(self, d): + """ Assemble the title (now using breadcrumbs) + + @param d: parameter dictionary + @rtype: string + @return: title html + """ + _ = self.request.getText + content = [] + if d['title_text'] == d['page'].split_title(): # just showing a page, no action + curpage = '' + segments = d['page_name'].split('/') # was: title_text + for s in segments[:-1]: + curpage += s + content.append("
  • %s
  • " % Page(self.request, curpage).link_to(self.request, s)) + curpage += '/' + link_text = segments[-1] + link_title = _('Click to do a full-text search for this title') + link_query = { + 'action': 'fullsearch', + 'value': 'linkto:"%s"' % d['page_name'], + 'context': '180', + } + # we dont use d['title_link'] any more, but make it ourselves: + link = d['page'].link_to(self.request, link_text, querystr=link_query, title=link_title, css_class='backlink', rel='nofollow') + content.append(('
  • %s
  • ') % link) + else: + content.append('
  • %s
  • ' % wikiutil.escape(d['title_text'])) + + html = ''' +
      +%s +
    +''' % "".join(content) + return html + + def username(self, d): + """ Assemble the username / userprefs link + + @param d: parameter dictionary + @rtype: unicode + @return: username html + """ + request = self.request + _ = request.getText + + userlinks = [] + # Add username/homepage link for registered users. We don't care + # if it exists, the user can create it. + if request.user.valid and request.user.name: + interwiki = wikiutil.getInterwikiHomePage(request) + name = request.user.name + aliasname = request.user.aliasname + if not aliasname: + aliasname = name + title = "%s @ %s" % (aliasname, interwiki[0]) + # link to (interwiki) user homepage + homelink = (request.formatter.interwikilink(1, title=title, id="userhome", generated=True, *interwiki) + + request.formatter.text(name) + + request.formatter.interwikilink(0, title=title, id="userhome", *interwiki)) + userlinks.append(homelink) + # link to userprefs action + if 'userprefs' not in self.request.cfg.actions_excluded: + userlinks.append(d['page'].link_to(request, text=_('Settings'), + querystr={'action': 'userprefs'}, id='userprefs', rel='nofollow')) + + if request.user.valid: + if request.user.auth_method in request.cfg.auth_can_logout: + userlinks.append(d['page'].link_to(request, text=_('Logout'), + querystr={'action': 'logout', 'logout': 'logout'}, id='logout', rel='nofollow')) + else: + query = {'action': 'login'} + # special direct-login link if the auth methods want no input + if request.cfg.auth_login_inputs == ['special_no_input']: + query['login'] = '1' + if request.cfg.auth_have_login: + userlinks.append(d['page'].link_to(request, text=_("Login"), + querystr=query, id='login', rel='nofollow')) + + userlinks = [u'
  • %s
  • ' % link for link in userlinks] + html = u'
      %s
    ' % ''.join(userlinks) + return html + + def splitNavilink(self, text, localize=1): + """ Split navibar links into pagename, link to page + + Admin or user might want to use shorter navibar items by using + the [[page|title]] or [[url|title]] syntax. In this case, we don't + use localization, and the links goes to page or to the url, not + the localized version of page. + + Supported syntax: + * PageName + * WikiName:PageName + * wiki:WikiName:PageName + * url + * all targets as seen above with title: [[target|title]] + + @param text: the text used in config or user preferences + @rtype: tuple + @return: pagename or url, link to page or url + """ + request = self.request + fmt = request.formatter + title = None + + # Handle [[pagename|title]] or [[url|title]] formats + if text.startswith('[[') and text.endswith(']]'): + text = text[2:-2] + try: + pagename, title = text.split('|', 1) + pagename = pagename.strip() + title = title.strip() + localize = 0 + except (ValueError, TypeError): + # Just use the text as is. + pagename = text.strip() + else: + pagename = text + + if wikiutil.is_URL(pagename): + if not title: + title = pagename + link = fmt.url(1, pagename) + fmt.text(title) + fmt.url(0) + return pagename, link + + # remove wiki: url prefix + if pagename.startswith("wiki:"): + pagename = pagename[5:] + + # try handling interwiki links + try: + interwiki, page = wikiutil.split_interwiki(pagename) + thiswiki = request.cfg.interwikiname + if interwiki == thiswiki or interwiki == 'Self': + pagename = page + else: + if not title: + title = page + link = fmt.interwikilink(True, interwiki, page) + fmt.text(title) + fmt.interwikilink(False, interwiki, page) + return pagename, link + except ValueError: + pass + + # Handle regular pagename like "FrontPage" + pagename = request.normalizePagename(pagename) + + # Use localized pages for the current user + if localize: + page = wikiutil.getLocalizedPage(request, pagename) + else: + page = Page(request, pagename) + + pagename = page.page_name # can be different, due to i18n + + if not title: + title = page.split_title() + title = self.shortenPagename(title) + + link = page.link_to(request, title) + + return pagename, link + + def shortenPagename(self, name): + """ Shorten page names + + Shorten very long page names that tend to break the user + interface. The short name is usually fine, unless really stupid + long names are used (WYGIWYD). + + If you don't like to do this in your theme, or want to use + different algorithm, override this method. + + @param name: page name, unicode + @rtype: unicode + @return: shortened version. + """ + maxLength = self.maxPagenameLength() + # First use only the sub page name, that might be enough + if len(name) > maxLength: + name = name.split('/')[-1] + # If it's not enough, replace the middle with '...' + if len(name) > maxLength: + half, left = divmod(maxLength - 3, 2) + name = u'%s...%s' % (name[:half + left], name[-half:]) + return name + + def maxPagenameLength(self): + """ Return maximum length for shortened page names """ + return 25 + + def navibar(self, d): + """ Assemble the navibar + + @param d: parameter dictionary + @rtype: unicode + @return: navibar html + """ + request = self.request + found = {} # pages we found. prevent duplicates + items = [] # navibar items + item = u'
  • %s
  • ' + current = d['page_name'] + + # Process config navi_bar + if request.cfg.navi_bar: + for text in request.cfg.navi_bar: + pagename, link = self.splitNavilink(text) + if pagename == current: + cls = 'wikilink current' + else: + cls = 'wikilink' + items.append(item % (cls, link)) + found[pagename] = 1 + + # Add user links to wiki links, eliminating duplicates. + userlinks = request.user.getQuickLinks() + for text in userlinks: + # Split text without localization, user knows what he wants + pagename, link = self.splitNavilink(text, localize=0) + if not pagename in found: + if pagename == current: + cls = 'userlink current' + else: + cls = 'userlink' + items.append(item % (cls, link)) + found[pagename] = 1 + + # Add current page at end of local pages + if not current in found: + title = d['page'].split_title() + title = self.shortenPagename(title) + link = d['page'].link_to(request, title) + cls = 'current' + items.append(item % (cls, link)) + + # Add sister pages. + for sistername, sisterurl in request.cfg.sistersites: + if sistername == request.cfg.interwikiname: # it is THIS wiki + cls = 'sisterwiki current' + items.append(item % (cls, sistername)) + else: + # TODO optimize performance + cache = caching.CacheEntry(request, 'sisters', sistername, 'farm', use_pickle=True) + if cache.exists(): + data = cache.content() + sisterpages = data['sisterpages'] + if current in sisterpages: + cls = 'sisterwiki' + url = sisterpages[current] + link = request.formatter.url(1, url) + \ + request.formatter.text(sistername) +\ + request.formatter.url(0) + items.append(item % (cls, link)) + + # Assemble html + items = u''.join(items) + html = u''' + +''' % items + return html + + def get_icon(self, icon): + """ Return icon data from self.icons + + If called from <> we have a filename, not a + key. Using filenames is deprecated, but for now, we simulate old + behavior. + + @param icon: icon name or file name (string) + @rtype: tuple + @return: alt (unicode), href (string), width, height (int) + """ + if icon in self.icons: + alt, icon, w, h = self.icons[icon] + else: + # Create filenames to icon data mapping on first call, then + # cache in class for next calls. + if not getattr(self.__class__, 'iconsByFile', None): + d = {} + for data in self.icons.values(): + d[data[1]] = data + self.__class__.iconsByFile = d + + # Try to get icon data by file name + if icon in self.iconsByFile: + alt, icon, w, h = self.iconsByFile[icon] + else: + alt, icon, w, h = '', icon, '', '' + + return alt, self.img_url(icon), w, h + + def make_icon(self, icon, vars=None, **kw): + """ + This is the central routine for making tags for icons! + All icons stuff except the top left logo and search field icons are + handled here. + + @param icon: icon id (dict key) + @param vars: ... + @rtype: string + @return: icon html (img tag) + """ + if vars is None: + vars = {} + alt, img, w, h = self.get_icon(icon) + try: + alt = vars['icon-alt-text'] # if it is possible we take the alt-text from 'page_icons_table' + except KeyError, err: + try: + alt = alt % vars # if not we just leave the alt-text from 'icons' + except KeyError, err: + alt = 'KeyError: %s' % str(err) + alt = self.request.getText(alt) + tag = self.request.formatter.image(src=img, alt=alt, width=w, height=h, **kw) + return tag + + def make_iconlink(self, which, d): + """ + Make a link with an icon + + @param which: icon id (dictionary key) + @param d: parameter dictionary + @rtype: string + @return: html link tag + """ + qs = {} + pagekey, querystr, title, icon = self.cfg.page_icons_table[which] + qs.update(querystr) # do not modify the querystr dict in the cfg! + d['icon-alt-text'] = d['title'] = title % d + d['i18ntitle'] = self.request.getText(d['title']) + img_src = self.make_icon(icon, d) + rev = d['rev'] + if rev and which in ['raw', 'print', ]: + qs['rev'] = str(rev) + attrs = {'rel': 'nofollow', 'title': d['i18ntitle'], } + page = d[pagekey] + if isinstance(page, unicode): + # e.g. d['page_parent_page'] is just the unicode pagename + # while d['page'] will give a page object + page = Page(self.request, page) + return page.link_to_raw(self.request, text=img_src, querystr=qs, **attrs) + + def msg(self, d): + """ Assemble the msg display + + Display a message with a widget or simple strings with a clear message link. + + @param d: parameter dictionary + @rtype: unicode + @return: msg display html + """ + _ = self.request.getText + msgs = d['msg'] + + result = u"" + close = d['page'].link_to(self.request, text=_('Clear message'), css_class="clear-link") + for msg, msg_class in msgs: + try: + result += u'

    %s

    ' % msg.render() + close = '' + except AttributeError: + if msg and msg_class: + result += u'

    %s

    ' % (msg_class, msg) + elif msg: + result += u'

    %s

    \n' % msg + if result: + html = result + close + return u'
    \n%s\n
    \n' % html + else: + return u'' + + return u'
    \n%s\n
    \n' % html + + def trail(self, d): + """ Assemble page trail + + @param d: parameter dictionary + @rtype: unicode + @return: trail html + """ + request = self.request + user = request.user + html = '' + if not user.valid or user.show_page_trail: + trail = user.getTrail() + if trail: + items = [] + for pagename in trail: + try: + interwiki, page = wikiutil.split_interwiki(pagename) + if interwiki != request.cfg.interwikiname and interwiki != 'Self': + link = (self.request.formatter.interwikilink(True, interwiki, page) + + self.shortenPagename(page) + + self.request.formatter.interwikilink(False, interwiki, page)) + items.append('
  • %s
  • ' % link) + continue + else: + pagename = page + + except ValueError: + pass + page = Page(request, pagename) + title = page.split_title() + title = self.shortenPagename(title) + link = page.link_to(request, title) + items.append('
  • %s
  • ' % link) + html = ''' +
      +%s +
    ''' % ''.join(items) + return html + + def html_stylesheets(self, d): + """ Assemble html head stylesheet links + + @param d: parameter dictionary + @rtype: string + @return: stylesheets links + """ + link = '' + + # Check mode + if d.get('print_mode'): + media = d.get('media', 'print') + stylesheets = getattr(self, 'stylesheets_' + media) + else: + stylesheets = self.stylesheets + usercss = self.request.user.valid and self.request.user.css_url + + # Create stylesheets links + html = [] + prefix = self.cfg.url_prefix_static + csshref = '%s/%s/css' % (prefix, self.name) + for media, basename in stylesheets: + href = '%s/%s.css' % (csshref, basename) + html.append(link % (self.stylesheetsCharset, media, href)) + + # Don't add user css url if it matches one of ours + if usercss and usercss == href: + usercss = None + + # admin configurable additional css (farm or wiki level) + for media, csshref in self.request.cfg.stylesheets: + html.append(link % (self.stylesheetsCharset, media, csshref)) + + csshref = '%s/%s/css/msie.css' % (prefix, self.name) + html.append(""" + + +""" % link % (self.stylesheetsCharset, 'all', csshref)) + + # Add user css url (assuming that user css uses same charset) + if usercss and usercss.lower() != "none": + html.append(link % (self.stylesheetsCharset, 'all', usercss)) + + return '\n'.join(html) + + def shouldShowPageinfo(self, page): + """ Should we show page info? + + Should be implemented by actions. For now, we check here by action + name and page. + + @param page: current page + @rtype: bool + @return: true if should show page info + """ + if page.exists() and self.request.user.may.read(page.page_name): + # These actions show the page content. + # TODO: on new action, page info will not show. + # A better solution will be if the action itself answer the question: showPageInfo(). + contentActions = [u'', u'show', u'refresh', u'preview', u'diff', + u'subscribe', u'RenamePage', u'CopyPage', u'DeletePage', + u'SpellCheck', u'print'] + return self.request.action in contentActions + return False + + def pageinfo(self, page): + """ Return html fragment with page meta data + + Since page information uses translated text, it uses the ui + language and direction. It looks strange sometimes, but + translated text using page direction looks worse. + + @param page: current page + @rtype: unicode + @return: page last edit information + """ + _ = self.request.getText + html = '' + if self.shouldShowPageinfo(page): + info = page.lastEditInfo() + if info: + if info['editor']: + info = _("last edited %(time)s by %(editor)s") % info + else: + info = _("last modified %(time)s") % info + pagename = page.page_name + if self.request.cfg.show_interwiki: + pagename = "%s: %s" % (self.request.cfg.interwikiname, pagename) + info = "%s (%s)" % (wikiutil.escape(pagename), info) + html = '

    %(info)s

    \n' % { + 'lang': self.ui_lang_attr(), + 'info': info + } + return html + + def searchform(self, d): + """ + assemble HTML code for the search forms + + @param d: parameter dictionary + @rtype: unicode + @return: search form html + """ + _ = self.request.getText + form = self.request.form + updates = { + 'search_label': _('Search:'), + 'search_value': wikiutil.escape(form.get('value', [''])[0], 1), + 'search_full_label': _('Text'), + 'search_title_label': _('Titles'), + 'baseurl': self.request.getScriptname(), + 'pagename_quoted': wikiutil.quoteWikinameURL(d['page'].page_name), + } + d.update(updates) + + html = u''' +
    +
    + + + + + + +
    +
    + +''' % d + return html + + def showversion(self, d, **keywords): + """ + assemble HTML code for copyright and version display + + @param d: parameter dictionary + @rtype: string + @return: copyright and version display html + """ + html = '' + if self.cfg.show_version and not keywords.get('print_mode', 0): + html = (u'
    MoinMoin Release %s [Revision %s], ' + 'Copyright by Juergen Hermann et al.
    ') % (version.release, version.revision, ) + return html + + def headscript(self, d): + """ Return html head script with common functions + + @param d: parameter dictionary + @rtype: unicode + @return: script for html head + """ + # Don't add script for print view + if self.request.action == 'print': + return u'' + + _ = self.request.getText + script = u""" + +""" % { + 'search_hint': _('Search Wiki'), + } + return script + + def shouldUseRSS(self, page): + """ Return True if RSS feature is available and we are on the + RecentChanges page, or False. + + Currently rss is broken on plain Python, and works only when + installing PyXML. Return true if PyXML is installed. + """ + if not rss_supported: + return False + return page.page_name == u'RecentChanges' or \ + page.page_name == self.request.getText(u'RecentChanges') + + def rsshref(self, page): + """ Create rss href, used for rss button and head link + + @rtype: unicode + @return: rss href + """ + request = self.request + url = page.url(request, querystr={ + 'action': 'rss_rc', 'ddiffs': '1', 'unique': '1', }, escape=0) + return url + + def rsslink(self, d): + """ Create rss link in head, used by FireFox + + RSS link for FireFox. This shows an rss link in the bottom of + the page and let you subscribe to the wiki rss feed. + + @rtype: unicode + @return: html head + """ + link = u'' + page = d['page'] + if self.shouldUseRSS(page): + link = (u'') % ( + wikiutil.escape(self.cfg.sitename, True), + wikiutil.escape(self.rsshref(page), True) ) + return link + + def html_head(self, d): + """ Assemble html head + + @param d: parameter dictionary + @rtype: unicode + @return: html head + """ + html = [ + u'%(title)s - %(sitename)s' % { + 'title': wikiutil.escape(d['title']), + 'sitename': wikiutil.escape(d['sitename']), + }, + self.externalScript('common'), + self.headscript(d), # Should move to separate .js file + self.guiEditorScript(d), + self.html_stylesheets(d), + self.rsslink(d), + self.universal_edit_button(d), + ] + return '\n'.join(html) + + def externalScript(self, name): + """ Format external script html """ + src = '%s/common/js/%s.js' % (self.request.cfg.url_prefix_static, name) + return '' % src + + def universal_edit_button(self, d, **keywords): + """ Generate HTML for an edit link in the header.""" + page = d['page'] + if 'edit' in self.request.cfg.actions_excluded: + return "" + if not (page.isWritable() and + self.request.user.may.write(page.page_name)): + return "" + _ = self.request.getText + querystr = {'action': 'edit'} + text = _(u'Edit') + url = page.url(self.request, querystr=querystr, escape=0) + return (u'' % (text, url)) + + def credits(self, d, **keywords): + """ Create credits html from credits list """ + if isinstance(self.cfg.page_credits, (list, tuple)): + items = ['
  • %s
  • ' % i for i in self.cfg.page_credits] + html = '
      \n%s\n
    \n' % ''.join(items) + else: + # Old config using string, output as is + html = self.cfg.page_credits + return html + + def actionsMenu(self, page): + """ Create actions menu list and items data dict + + The menu will contain the same items always, but items that are + not available will be disabled (some broken browsers will let + you select disabled options though). + + The menu should give best user experience for javascript + enabled browsers, and acceptable behavior for those who prefer + not to use Javascript. + + TODO: Move actionsMenuInit() into body onload - requires that the theme will render body, + it is currently done in wikiutil/page. + + @param page: current page, Page object + @rtype: unicode + @return: actions menu html fragment + """ + request = self.request + _ = request.getText + rev = request.rev + + menu = [ + 'raw', + 'print', + 'RenderAsDocbook', + 'refresh', + '__separator__', + 'SpellCheck', + 'LikePages', + 'LocalSiteMap', + '__separator__', + 'RenamePage', + 'CopyPage', + 'DeletePage', + '__separator__', + 'MyPages', + 'SubscribeUser', + '__separator__', + 'Despam', + 'revert', + 'PackagePages', + 'SyncPages', + ] + + titles = { + # action: menu title + '__title__': _("More Actions:"), + # Translation may need longer or shorter separator + '__separator__': _('------------------------'), + 'raw': _('Raw Text'), + 'print': _('Print View'), + 'refresh': _('Delete Cache'), + 'SpellCheck': _('Check Spelling'), # rename action! + 'RenamePage': _('Rename Page'), + 'CopyPage': _('Copy Page'), + 'DeletePage': _('Delete Page'), + 'LikePages': _('Like Pages'), + 'LocalSiteMap': _('Local Site Map'), + 'MyPages': _('My Pages'), + 'SubscribeUser': _('Subscribe User'), + 'Despam': _('Remove Spam'), + 'revert': _('Revert to this revision'), + 'PackagePages': _('Package Pages'), + 'RenderAsDocbook': _('Render as Docbook'), + 'SyncPages': _('Sync Pages'), + } + + options = [] + option = '' + # class="disabled" is a workaround for browsers that ignore + # "disabled", e.g IE, Safari + # for XHTML: data['disabled'] = ' disabled="disabled"' + disabled = ' disabled class="disabled"' + + # Format standard actions + available = request.getAvailableActions(page) + for action in menu: + data = {'action': action, 'disabled': '', 'title': titles[action]} + # removes excluded actions from the more actions menu + if action in request.cfg.actions_excluded: + continue + + # Enable delete cache only if page can use caching + if action == 'refresh': + if not page.canUseCache(): + data['action'] = 'show' + data['disabled'] = disabled + + # revert action enabled only if user can revert + if action == 'revert' and not request.user.may.revert(page.page_name): + data['action'] = 'show' + data['disabled'] = disabled + + # SubscribeUser action enabled only if user has admin rights + if action == 'SubscribeUser' and not request.user.may.admin(page.page_name): + data['action'] = 'show' + data['disabled'] = disabled + + # PackagePages action only if user has write rights + if action == 'PackagePages' and not request.user.may.write(page.page_name): + data['action'] = 'show' + data['disabled'] = disabled + + # Despam action enabled only for superusers + if action == 'Despam' and not request.user.isSuperUser(): + data['action'] = 'show' + data['disabled'] = disabled + + # Special menu items. Without javascript, executing will + # just return to the page. + if action.startswith('__'): + data['action'] = 'show' + + # Actions which are not available for this wiki, user or page + if (action == '__separator__' or + (action[0].isupper() and not action in available)): + data['disabled'] = disabled + + options.append(option % data) + + # Add custom actions not in the standard menu, except for + # some actions like AttachFile (we have them on top level) + more = [item for item in available if not item in titles and not item in ('AttachFile', )] + more.sort() + if more: + # Add separator + separator = option % {'action': 'show', 'disabled': disabled, + 'title': titles['__separator__']} + options.append(separator) + # Add more actions (all enabled) + for action in more: + data = {'action': action, 'disabled': ''} + # Always add spaces: AttachFile -> Attach File + # XXX do not create page just for using split_title - + # creating pages for non-existent does 2 storage lookups + #title = Page(request, action).split_title(force=1) + title = action + # Use translated version if available + data['title'] = _(title) + options.append(option % data) + + data = { + 'label': titles['__title__'], + 'options': '\n'.join(options), + 'rev_field': rev and '' % rev or '', + 'do_button': _("Do"), + 'baseurl': self.request.getScriptname(), + 'pagename_quoted': wikiutil.quoteWikinameURL(page.page_name), + } + html = ''' +
    +
    + + + + %(rev_field)s +
    + +
    +''' % data + + return html + + def editbar(self, d): + """ Assemble the page edit bar. + + Create html on first call, then return cached html. + + @param d: parameter dictionary + @rtype: unicode + @return: iconbar html + """ + page = d['page'] + if not self.shouldShowEditbar(page): + return '' + + html = self._cache.get('editbar') + if html is None: + # Remove empty items and format as list + items = ''.join(['
  • %s
  • ' % item + for item in self.editbarItems(page) if item]) + html = u'
      %s
    \n' % items + self._cache['editbar'] = html + + return html + + def shouldShowEditbar(self, page): + """ Should we show the editbar? + + Actions should implement this, because only the action knows if + the edit bar makes sense. Until it goes into actions, we do the + checking here. + + @param page: current page + @rtype: bool + @return: true if editbar should show + """ + # Show editbar only for existing pages, including deleted pages, + # that the user may read. If you may not read, you can't edit, + # so you don't need editbar. + if (page.exists(includeDeleted=1) and + self.request.user.may.read(page.page_name)): + form = self.request.form + action = self.request.action + # Do not show editbar on edit but on save/cancel + return not (action == 'edit' and + not form.has_key('button_save') and + not form.has_key('button_cancel')) + return False + + def editbarItems(self, page): + """ Return list of items to show on the editbar + + This is separate method to make it easy to customize the + edtibar in sub classes. + """ + _ = self.request.getText + editbar_actions = [] + for editbar_item in self.request.cfg.edit_bar: + if editbar_item == 'Discussion': + if not self.request.cfg.supplementation_page and self.request.getPragma('supplementation-page', 1) in ('on', '1'): + editbar_actions.append(self.supplementation_page_nameLink(page)) + elif self.request.cfg.supplementation_page and not self.request.getPragma('supplementation-page', 1) in ('off', '0'): + editbar_actions.append(self.supplementation_page_nameLink(page)) + elif editbar_item == 'Comments': + # we just use
    to get same style as other links, but we add some dummy + # link target to get correct mouseover pointer appearance. return false + # keeps the browser away from jumping to the link target:: + editbar_actions.append('' % _('Comments')) + elif editbar_item == 'Edit': + editbar_actions.append(self.editorLink(page)) + elif editbar_item == 'Info': + editbar_actions.append(self.infoLink(page)) + elif editbar_item == 'Subscribe': + editbar_actions.append(self.subscribeLink(page)) + elif editbar_item == 'Quicklink': + editbar_actions.append(self.quicklinkLink(page)) + elif editbar_item == 'Attachments': + editbar_actions.append(self.attachmentsLink(page)) + elif editbar_item == 'ActionsMenu': + editbar_actions.append(self.actionsMenu(page)) + return editbar_actions + + def supplementation_page_nameLink(self, page): + """Return a link to the discussion page + + If the discussion page doesn't exist and the user + has no right to create it, show a disabled link. + """ + _ = self.request.getText + suppl_name = self.request.cfg.supplementation_page_name + suppl_name_full = "%s/%s" % (page.page_name, suppl_name) + + test = Page(self.request, suppl_name_full) + if not test.exists() and not self.request.user.may.write(suppl_name_full): + return ('%s' % _(suppl_name)) + else: + return page.link_to(self.request, text=_(suppl_name), + querystr={'action': 'supplementation'}, css_class='nbsupplementation', rel='nofollow') + + def guiworks(self, page): + """ Return whether the gui editor / converter can work for that page. + + The GUI editor currently only works for wiki format. + For simplicity, we also tell it does not work if the admin forces the text editor. + """ + is_wiki = page.pi['format'] == 'wiki' + gui_disallowed = self.cfg.editor_force and self.cfg.editor_default == 'text' + return is_wiki and not gui_disallowed + + + def editorLink(self, page): + """ Return a link to the editor + + If the user can't edit, return a disabled edit link. + + If the user want to show both editors, it will display "Edit + (Text)", otherwise as "Edit". + """ + if 'edit' in self.request.cfg.actions_excluded: + return "" + + if not (page.isWritable() and + self.request.user.may.write(page.page_name)): + return self.disabledEdit() + + _ = self.request.getText + querystr = {'action': 'edit'} + + guiworks = self.guiworks(page) + if self.showBothEditLinks() and guiworks: + text = _('Edit (Text)') + querystr['editor'] = 'text' + attrs = {'name': 'texteditlink', 'rel': 'nofollow', } + else: + text = _('Edit') + if guiworks: + # 'textonly' will be upgraded dynamically to 'guipossible' by JS + querystr['editor'] = 'textonly' + attrs = {'name': 'editlink', 'rel': 'nofollow', } + else: + querystr['editor'] = 'text' + attrs = {'name': 'texteditlink', 'rel': 'nofollow', } + + return page.link_to(self.request, text=text, querystr=querystr, **attrs) + + def showBothEditLinks(self): + """ Return True if both edit links should be displayed """ + editor = self.request.user.editor_ui + if editor == '': + editor = self.request.cfg.editor_ui + return editor == 'freechoice' + + def guiEditorScript(self, d): + """ Return a script that set the gui editor link variables + + The link will be created only when javascript is enabled and + the browser is compatible with the editor. + """ + page = d['page'] + if not (page.isWritable() and + self.request.user.may.write(page.page_name) and + self.showBothEditLinks() and + self.guiworks(page)): + return '' + + _ = self.request.getText + return """\ + +""" % {'url': page.url(self.request, querystr={'action': 'edit', 'editor': 'gui', }), + 'text': _('Edit (GUI)'), + } + + def disabledEdit(self): + """ Return a disabled edit link """ + _ = self.request.getText + return ('%s' + % _('Immutable Page')) + + def infoLink(self, page): + """ Return link to page information """ + if 'info' in self.request.cfg.actions_excluded: + return "" + + _ = self.request.getText + return page.link_to(self.request, + text=_('Info'), + querystr={'action': 'info'}, css_class='nbinfo', rel='nofollow') + + def subscribeLink(self, page): + """ Return subscribe/unsubscribe link to valid users + + @rtype: unicode + @return: subscribe or unsubscribe link + """ + if not ((self.cfg.mail_enabled or self.cfg.jabber_enabled) and self.request.user.valid): + return '' + + _ = self.request.getText + if self.request.user.isSubscribedTo([page.page_name]): + action, text = 'unsubscribe', _("Unsubscribe") + else: + action, text = 'subscribe', _("Subscribe") + if action in self.request.cfg.actions_excluded: + return "" + return page.link_to(self.request, text=text, querystr={'action': action}, css_class='nbsubscribe', rel='nofollow') + + def quicklinkLink(self, page): + """ Return add/remove quicklink link + + @rtype: unicode + @return: link to add or remove a quicklink + """ + if not self.request.user.valid: + return '' + + _ = self.request.getText + if self.request.user.isQuickLinkedTo([page.page_name]): + action, text = 'quickunlink', _("Remove Link") + else: + action, text = 'quicklink', _("Add Link") + if action in self.request.cfg.actions_excluded: + return "" + return page.link_to(self.request, text=text, querystr={'action': action}, css_class='nbquicklink', rel='nofollow') + + def attachmentsLink(self, page): + """ Return link to page attachments """ + if 'AttachFile' in self.request.cfg.actions_excluded: + return "" + + _ = self.request.getText + return page.link_to(self.request, + text=_('Attachments'), + querystr={'action': 'AttachFile'}, css_class='nbattachments', rel='nofollow') + + def startPage(self): + """ Start page div with page language and direction + + @rtype: unicode + @return: page div with language and direction attribtues + """ + return u'
    \n' % self.content_lang_attr() + + def endPage(self): + """ End page div + + Add an empty page bottom div to prevent floating elements to + float out of the page bottom over the footer. + """ + return '
    \n
    \n' + + # Public functions ##################################################### + + def header(self, d, **kw): + """ Assemble page header + + Default behavior is to start a page div. Sub class and add + footer items. + + @param d: parameter dictionary + @rtype: string + @return: page header html + """ + return self.startPage() + + editorheader = header + + def footer(self, d, **keywords): + """ Assemble page footer + + Default behavior is to end page div. Sub class and add + footer items. + + @param d: parameter dictionary + @keyword ...:... + @rtype: string + @return: page footer html + """ + return self.endPage() + + # RecentChanges ###################################################### + + def recentchanges_entry(self, d): + """ + Assemble a single recentchanges entry (table row) + + @param d: parameter dictionary + @rtype: string + @return: recentchanges entry html + """ + _ = self.request.getText + html = [] + html.append('\n') + + html.append('%(icon_html)s\n' % d) + + html.append('%(pagelink_html)s\n' % d) + + html.append('') + if d['time_html']: + html.append("%(time_html)s" % d) + html.append('\n') + + html.append('%(info_html)s\n' % d) + + html.append('') + if d['editors']: + html.append('
    '.join(d['editors'])) + html.append('\n') + + html.append('') + if d['comments']: + if d['changecount'] > 1: + notfirst = 0 + for comment in d['comments']: + html.append('%s#%02d %s' % ( + notfirst and '
    ' or '', comment[0], comment[1])) + notfirst = 1 + else: + comment = d['comments'][0] + html.append('%s' % comment[1]) + html.append('\n') + + html.append('\n') + + return ''.join(html) + + def recentchanges_daybreak(self, d): + """ + Assemble a rc daybreak indication (table row) + + @param d: parameter dictionary + @rtype: string + @return: recentchanges daybreak html + """ + if d['bookmark_link_html']: + set_bm = '  %(bookmark_link_html)s' % d + else: + set_bm = '' + return ('' + '%s' + '%s' + '\n') % (6, d['date'], set_bm) + + def recentchanges_header(self, d): + """ + Assemble the recentchanges header (intro + open table) + + @param d: parameter dictionary + @rtype: string + @return: recentchanges header html + """ + _ = self.request.getText + + # Should use user interface language and direction + html = '
    \n' % self.ui_lang_attr() + html += '
    \n' + page = d['page'] + if self.shouldUseRSS(page): + link = [ + u'
    ', + self.request.formatter.url(1, self.rsshref(page)), + self.request.formatter.rawHTML(self.make_icon("rss")), + self.request.formatter.url(0), + u'
    ', + ] + html += ''.join(link) + html += '

    ' + # Add day selector + if d['rc_days']: + days = [] + for day in d['rc_days']: + if day == d['rc_max_days']: + days.append('%d' % day) + else: + days.append( + wikiutil.link_tag(self.request, + '%s?max_days=%d' % (d['q_page_name'], day), + str(day), + self.request.formatter, rel='nofollow')) + days = ' | '.join(days) + html += (_("Show %s days.") % (days, )) + + if d['rc_update_bookmark']: + html += " %(rc_update_bookmark)s %(rc_curr_bookmark)s" % d + + html += '

    \n
    \n' + + html += '\n' + return html + + def recentchanges_footer(self, d): + """ + Assemble the recentchanges footer (close table) + + @param d: parameter dictionary + @rtype: string + @return: recentchanges footer html + """ + _ = self.request.getText + html = '' + html += '
    \n' + if d['rc_msg']: + html += "
    %(rc_msg)s\n" % d + html += '
    \n' + return html + + # Language stuff #################################################### + + def ui_lang_attr(self): + """Generate language attributes for user interface elements + + User interface elements use the user language (if any), kept in + request.lang. + + @rtype: string + @return: lang and dir html attributes + """ + lang = self.request.lang + return ' lang="%s" dir="%s"' % (lang, i18n.getDirection(lang)) + + def content_lang_attr(self): + """Generate language attributes for wiki page content + + Page content uses the page language or the wiki default language. + + @rtype: string + @return: lang and dir html attributes + """ + lang = self.request.content_lang + return ' lang="%s" dir="%s"' % (lang, i18n.getDirection(lang)) + + def add_msg(self, msg, msg_class=None): + """ Adds a message to a list which will be used to generate status + information. + + @param msg: additional message + @param msg_class: html class for the div of the additional message. + """ + if not msg_class: + msg_class = 'dialog' + if self._send_title_called: + raise Exception("You cannot call add_msg() after send_title()") + self._status.append((msg, msg_class)) + + # stuff from wikiutil.py + def send_title(self, text, **keywords): + """ + Output the page header (and title). + + @param text: the title text + @keyword page: the page instance that called us - using this is more efficient than using pagename.. + @keyword pagename: 'PageName' + @keyword print_mode: 1 (or 0) + @keyword editor_mode: 1 (or 0) + @keyword media: css media type, defaults to 'screen' + @keyword allow_doubleclick: 1 (or 0) + @keyword html_head: additional code + @keyword body_attr: additional attributes + @keyword body_onload: additional "onload" JavaScript code + """ + request = self.request + _ = request.getText + rev = request.rev + + if keywords.has_key('page'): + page = keywords['page'] + pagename = page.page_name + else: + pagename = keywords.get('pagename', '') + page = Page(request, pagename) + if keywords.get('msg', ''): + raise DeprecationWarning("Using send_page(msg=) is deprecated! Use theme.add_msg() instead!") + scriptname = request.getScriptname() + pagename_quoted = wikiutil.quoteWikinameURL(pagename) + + # get name of system pages + page_front_page = wikiutil.getFrontPage(request).page_name + page_help_contents = wikiutil.getLocalizedPage(request, 'HelpContents').page_name + page_title_index = wikiutil.getLocalizedPage(request, 'TitleIndex').page_name + page_site_navigation = wikiutil.getLocalizedPage(request, 'SiteNavigation').page_name + page_word_index = wikiutil.getLocalizedPage(request, 'WordIndex').page_name + page_help_formatting = wikiutil.getLocalizedPage(request, 'HelpOnFormatting').page_name + page_find_page = wikiutil.getLocalizedPage(request, 'FindPage').page_name + home_page = wikiutil.getInterwikiHomePage(request) # sorry theme API change!!! Either None or tuple (wikiname,pagename) now. + page_parent_page = getattr(page.getParentPage(), 'page_name', None) + + # Prepare the HTML element + user_head = [request.cfg.html_head] + + # include charset information - needed for moin_dump or any other case + # when reading the html without a web server + user_head.append('''\n''' % (page.output_mimetype, page.output_charset)) + + meta_keywords = request.getPragma('keywords') + meta_desc = request.getPragma('description') + if meta_keywords: + user_head.append('\n' % wikiutil.escape(meta_keywords, 1)) + if meta_desc: + user_head.append('\n' % wikiutil.escape(meta_desc, 1)) + + # search engine precautions / optimization: + # if it is an action or edit/search, send query headers (noindex,nofollow): + if request.query_string: + user_head.append(request.cfg.html_head_queries) + elif request.request_method == 'POST': + user_head.append(request.cfg.html_head_posts) + # we don't want to have BadContent stuff indexed: + elif pagename in ['BadContent', 'LocalBadContent', ]: + user_head.append(request.cfg.html_head_posts) + # if it is a special page, index it and follow the links - we do it + # for the original, English pages as well as for (the possibly + # modified) frontpage: + elif pagename in [page_front_page, request.cfg.page_front_page, + page_title_index, 'TitleIndex', + page_find_page, 'FindPage', + page_site_navigation, 'SiteNavigation', + 'RecentChanges', ]: + user_head.append(request.cfg.html_head_index) + # if it is a normal page, index it, but do not follow the links, because + # there are a lot of illegal links (like actions) or duplicates: + else: + user_head.append(request.cfg.html_head_normal) + + if 'pi_refresh' in keywords and keywords['pi_refresh']: + user_head.append('' % keywords['pi_refresh']) + + # output buffering increases latency but increases throughput as well + output = [] + # later: + output.append("""\ + + + +%s +%s +%s +""" % ( + ''.join(user_head), + self.html_head({ + 'page': page, + 'title': text, + 'sitename': request.cfg.html_pagetitle or request.cfg.sitename, + 'print_mode': keywords.get('print_mode', False), + 'media': keywords.get('media', 'screen'), + }), + keywords.get('html_head', ''), + )) + + # Links + output.append('\n' % (scriptname, wikiutil.quoteWikinameURL(page_front_page))) + if pagename: + output.append('\n' % ( + _('Wiki Markup'), scriptname, pagename_quoted, )) + output.append('\n' % ( + _('Print View'), scriptname, pagename_quoted, )) + + # !!! currently disabled due to Mozilla link prefetching, see + # http://www.mozilla.org/projects/netlib/Link_Prefetching_FAQ.html + #~ all_pages = request.getPageList() + #~ if all_pages: + #~ try: + #~ pos = all_pages.index(pagename) + #~ except ValueError: + #~ # this shopuld never happend in theory, but let's be sure + #~ pass + #~ else: + #~ request.write('\n' % (request.getScriptname(), quoteWikinameURL(all_pages[0])) + #~ if pos > 0: + #~ request.write('\n' % (request.getScriptname(), quoteWikinameURL(all_pages[pos-1]))) + #~ if pos+1 < len(all_pages): + #~ request.write('\n' % (request.getScriptname(), quoteWikinameURL(all_pages[pos+1]))) + #~ request.write('\n' % (request.getScriptname(), quoteWikinameURL(all_pages[-1]))) + + if page_parent_page: + output.append('\n' % (scriptname, wikiutil.quoteWikinameURL(page_parent_page))) + + # write buffer because we call AttachFile + request.write(''.join(output)) + output = [] + + # XXX maybe this should be removed completely. moin emits all attachments as + # and it is at least questionable if this fits into the original intent of rel="Appendix". + if pagename and request.user.may.read(pagename): + from MoinMoin.action import AttachFile + AttachFile.send_link_rel(request, pagename) + + output.extend([ + '\n' % (scriptname, wikiutil.quoteWikinameURL(page_find_page)), + '\n' % (scriptname, wikiutil.quoteWikinameURL(page_title_index)), + '\n' % (scriptname, wikiutil.quoteWikinameURL(page_word_index)), + '\n' % (scriptname, wikiutil.quoteWikinameURL(page_help_formatting)), + ]) + + output.append("\n") + request.write(''.join(output)) + output = [] + request.flush() + + # start the + bodyattr = [] + if keywords.has_key('body_attr'): + bodyattr.append(' ') + bodyattr.append(keywords['body_attr']) + + # Add doubleclick edit action + if (pagename and keywords.get('allow_doubleclick', 0) and + not keywords.get('print_mode', 0) and + request.user.edit_on_doubleclick): + if request.user.may.write(pagename): # separating this gains speed + url = page.url(request, {'action': 'edit'}) + bodyattr.append(''' ondblclick="location.href='%s'" ''' % wikiutil.escape(url, True)) + + # Set body to the user interface language and direction + bodyattr.append(' %s' % self.ui_lang_attr()) + + body_onload = keywords.get('body_onload', '') + if body_onload: + bodyattr.append(''' onload="%s"''' % body_onload) + output.append('\n\n' % ''.join(bodyattr)) + + # Output ----------------------------------------------------------- + + # If in print mode, start page div and emit the title + if keywords.get('print_mode', 0): + d = { + 'title_text': text, + 'page': page, + 'page_name': pagename or '', + 'rev': rev, + } + request.themedict = d + output.append(self.startPage()) + output.append(self.interwiki(d)) + output.append(self.title(d)) + + # In standard mode, emit theme.header + else: + exists = pagename and page.exists(includeDeleted=True) + # prepare dict for theme code: + d = { + 'theme': self.name, + 'script_name': scriptname, + 'title_text': text, + 'logo_string': request.cfg.logo_string, + 'site_name': request.cfg.sitename, + 'page': page, + 'rev': rev, + 'pagesize': pagename and page.size() or 0, + # exists checked to avoid creation of empty edit-log for non-existing pages + 'last_edit_info': exists and page.lastEditInfo() or '', + 'page_name': pagename or '', + 'page_find_page': page_find_page, + 'page_front_page': page_front_page, + 'home_page': home_page, + 'page_help_contents': page_help_contents, + 'page_help_formatting': page_help_formatting, + 'page_parent_page': page_parent_page, + 'page_title_index': page_title_index, + 'page_word_index': page_word_index, + 'user_name': request.user.name, + 'user_valid': request.user.valid, + 'msg': self._status, + 'trail': keywords.get('trail', None), + # Discontinued keys, keep for a while for 3rd party theme developers + 'titlesearch': 'use self.searchform(d)', + 'textsearch': 'use self.searchform(d)', + 'navibar': ['use self.navibar(d)'], + 'available_actions': ['use self.request.availableActions(page)'], + } + + # add quoted versions of pagenames + newdict = {} + for key in d: + if key.startswith('page_'): + if not d[key] is None: + newdict['q_'+key] = wikiutil.quoteWikinameURL(d[key]) + else: + newdict['q_'+key] = None + d.update(newdict) + request.themedict = d + + # now call the theming code to do the rendering + if keywords.get('editor_mode', 0): + output.append(self.editorheader(d)) + else: + output.append(self.header(d)) + + # emit it + request.write(''.join(output)) + output = [] + request.flush() + self._send_title_called = True + + def send_footer(self, pagename, **keywords): + """ + Output the page footer. + + @param pagename: WikiName of the page + @keyword print_mode: true, when page is displayed in Print mode + """ + request = self.request + d = request.themedict + + # Emit end of page in print mode, or complete footer in standard mode + if keywords.get('print_mode', 0): + request.write(self.pageinfo(d['page'])) + request.write(self.endPage()) + else: + request.write(self.footer(d, **keywords)) + + # stuff moved from request.py + def send_closing_html(self): + """ generate timing info html and closing html tag, + everyone calling send_title must call this at the end to close + the body and html tags. + """ + request = self.request + + # as this is the last chance to emit some html, we stop the clocks: + request.clock.stop('run') + request.clock.stop('total') + + # Close html code + if request.cfg.show_timings and request.action != 'print': + request.write('
      \n') + for t in request.clock.dump(): + request.write('
    • %s
    • \n' % t) + request.write('
    \n') + #request.write('' % repr(request.user.auth_method)) + request.write('\n\n\n') + + diff --git a/theme/debwiki.py b/theme/debwiki.py new file mode 100644 index 0000000..5529bb3 --- /dev/null +++ b/theme/debwiki.py @@ -0,0 +1,324 @@ +# -*- coding: iso-8859-1 -*- +""" + MoinMoin - Debian theme + + @copyright: 2003-2005 Nir Soffer, Thomas Waldmann + @license: GNU GPL, see COPYING for details. + theme modified by Kalle Soderman +""" + +from MoinMoin.theme import ThemeBase +from MoinMoin import wikiutil +from MoinMoin.Page import Page + +class Theme(ThemeBase): + + name = "debwiki" + + _ = lambda x: x # We don't have gettext at this moment, so we fake it + icons = { + # key alt icon filename w h + # FileAttach + 'attach': ("%(attach_count)s", "moin-attach.png", 16, 16), + 'info': ("[INFO]", "moin-info.png", 16, 16), + 'attachimg': (_("[ATTACH]"), "attach.png", 32, 32), + # RecentChanges + 'rss': (_("[RSS]"), "moin-rss.png", 16, 16), + 'deleted': (_("[DELETED]"), "moin-deleted.png", 16, 16), + 'updated': (_("[UPDATED]"), "moin-updated.png", 16, 16), + 'renamed': (_("[RENAMED]"), "moin-renamed.png", 16, 16), + 'conflict': (_("[CONFLICT]"), "moin-conflict.png", 16, 16), + 'new': (_("[NEW]"), "moin-new.png", 16, 16), + 'diffrc': (_("[DIFF]"), "moin-diff.png", 16, 16), + # General + 'bottom': (_("[BOTTOM]"), "moin-bottom.png", 16, 16), + 'top': (_("[TOP]"), "moin-top.png", 16, 16), + 'www': ("[WWW]", "moin-www.png", 16, 16), + 'mailto': ("[MAILTO]", "moin-email.png", 16, 16), + 'news': ("[NEWS]", "moin-news.png", 16, 16), + 'telnet': ("[TELNET]", "moin-telnet.png", 16, 16), + 'ftp': ("[FTP]", "moin-ftp.png", 16, 16), + 'file': ("[FILE]", "moin-ftp.png", 16, 16), + # search forms + 'searchbutton': ("[?]", "moin-search.png", 16, 16), + 'interwiki': ("[%(wikitag)s]", "moin-inter.png", 16, 16), + + # smileys (this is CONTENT, but good looking smileys depend on looking + # adapted to the theme background color and theme style in general) + #vvv == vvv this must be the same for GUI editor converter + 'X-(': ("X-(", 'angry.png', 16, 16), + ':D': (":D", 'biggrin.png', 16, 16), + '<:(': ("<:(", 'frown.png', 16, 16), + ':o': (":o", 'redface.png', 16, 16), + ':(': (":(", 'sad.png', 16, 16), + ':)': (":)", 'smile.png', 16, 16), + 'B)': ("B)", 'smile2.png', 16, 16), + ':))': (":))", 'smile3.png', 16, 16), + ';)': (";)", 'smile4.png', 16, 16), + '/!\\': ("/!\\", 'alert.png', 16, 16), + '': ("", 'attention.png', 16, 16), + '(!)': ("(!)", 'idea.png', 16, 16), + ':-?': (":-?", 'tongue.png', 16, 16), + ':\\': (":\\", 'ohwell.png', 16, 16), + '>:>': (">:>", 'devil.png', 16, 16), + '|)': ("|)", 'tired.png', 16, 16), + ':-(': (":-(", 'sad.png', 16, 16), + ':-)': (":-)", 'smile.png', 16, 16), + 'B-)': ("B-)", 'smile2.png', 16, 16), + ':-))': (":-))", 'smile3.png', 16, 16), + ';-)': (";-)", 'smile4.png', 16, 16), + '|-)': ("|-)", 'tired.png', 16, 16), + '(./)': ("(./)", 'checkmark.png', 16, 16), + '{OK}': ("{OK}", 'thumbs-up.png', 16, 16), + '{X}': ("{X}", 'icon-error.png', 16, 16), + '{i}': ("{i}", 'icon-info.png', 16, 16), + '{1}': ("{1}", 'prio1.png', 15, 13), + '{2}': ("{2}", 'prio2.png', 15, 13), + '{3}': ("{3}", 'prio3.png', 15, 13), + '{*}': ("{*}", 'star_on.png', 16, 16), + '{o}': ("{o}", 'star_off.png', 16, 16), + } + del _ + def header(self, d, **kw): + """ Assemble wiki header + + @param d: parameter dictionary + @rtype: unicode + @return: page header html + """ + html = [ + # Pre header custom html + self.emit_custom_html(self.cfg.page_header1), + + # Header + u'', + + # Post header custom html (not recommended) + self.emit_custom_html(self.cfg.page_header2), + + # Start of page + self.startPage(), + ] + return u'\n'.join(html) + + def editorheader(self, d, **kw): + """ Assemble wiki header for editor + + @param d: parameter dictionary + @rtype: unicode + @return: page header html + """ + html = [ + # Pre header custom html + self.emit_custom_html(self.cfg.page_header1), + + # Header + u'', + + # Post header custom html (not recommended) + self.emit_custom_html(self.cfg.page_header2), + + # Start of page + self.startPage(), + ] + return u'\n'.join(html) + + def footer(self, d, **keywords): + """ Assemble wiki footer + + @param d: parameter dictionary + @keyword ...:... + @rtype: unicode + @return: page footer html + """ + page = d['page'] + html = [ + # End of page + self.pageinfo(page), + self.endPage(), + + # Pre footer custom html (not recommended!) + self.emit_custom_html(self.cfg.page_footer1), + + # Footer + u'', + + # Post footer custom html + self.emit_custom_html(self.cfg.page_footer2), + ] + return u'\n'.join(html) + + def title(self, d): + """ Assemble the title (now using breadcrumbs) + + @param d: parameter dictionary + @rtype: string + @return: title html + """ + _ = self.request.getText + content = [] + if d['title_text'] == d['page'].split_title(): # just showing a page, no action + curpage = '' + segments = d['page_name'].split('/') # was: title_text + for s in segments[:-1]: + curpage += s + content.append(Page(self.request, curpage).link_to(self.request, s)) + curpage += '/' + link_text = segments[-1] + link_title = _('Click to do a full-text search for this title') + link_query = { + 'action': 'fullsearch', + 'value': 'linkto:"%s"' % d['page_name'], + 'context': '180', + } + # we dont use d['title_link'] any more, but make it ourselves: + link = d['page'].link_to(self.request, link_text, querystr=link_query, title=link_title, css_class='backlink', rel='nofollow') + content.append(link) + else: + content.append(wikiutil.escape(d['title_text'])) + + location_html = u'/'.join(content) + html = u'%s' % location_html + return html + + def username(self, d): + """ Assemble the username / userprefs link + + @param d: parameter dictionary + @rtype: unicode + @return: username html + """ + request = self.request + _ = request.getText + + userlinks = [] + # Add username/homepage link for registered users. We don't care + # if it exists, the user can create it. + if request.user.valid and request.user.name: + interwiki = wikiutil.getInterwikiHomePage(request) + name = request.user.name + aliasname = request.user.aliasname + if not aliasname: + aliasname = name + title = "%s @ %s" % (aliasname, interwiki[0]) + # link to (interwiki) user homepage + homelink = (request.formatter.interwikilink(1, title=title, id="userhome", generated=True, *interwiki) + + request.formatter.text(name) + + request.formatter.interwikilink(0, title=title, id="userhome", *interwiki)) + userlinks.append(homelink) + # link to userprefs action + if 'userprefs' not in self.request.cfg.actions_excluded: + userlinks.append(d['page'].link_to(request, text=_('Settings'), + querystr={'action': 'userprefs'}, id='userprefs', rel='nofollow')) + + if request.user.valid: + if request.user.auth_method in request.cfg.auth_can_logout: + userlinks.append(d['page'].link_to(request, text=_('Logout'), + querystr={'action': 'logout', 'logout': 'logout'}, id='logout', rel='nofollow')) + else: + query = {'action': 'login'} + # special direct-login link if the auth methods want no input + if request.cfg.auth_login_inputs == ['special_no_input']: + query['login'] = '1' + if request.cfg.auth_have_login: + userlinks.append(d['page'].link_to(request, text=_("Login"), + querystr=query, id='login', rel='nofollow')) + + userlinks_html = u' | '.join(userlinks) + html = u'
    %s
    ' % userlinks_html + return html + + def trail(self, d): + """ Assemble page trail + + @param d: parameter dictionary + @rtype: unicode + @return: trail html + """ + request = self.request + user = request.user + html = '' + if not user.valid or user.show_page_trail: + trail = user.getTrail() + if trail: + items = [] + for pagename in trail: + try: + interwiki, page = wikiutil.split_interwiki(pagename) + if interwiki != request.cfg.interwikiname and interwiki != 'Self': + link = (self.request.formatter.interwikilink(True, interwiki, page) + + self.shortenPagename(page) + + self.request.formatter.interwikilink(False, interwiki, page)) + items.append(link) + continue + else: + pagename = page + + except ValueError: + pass + page = Page(request, pagename) + title = page.split_title() + title = self.shortenPagename(title) + link = page.link_to(request, title) + items.append(link) + html = u'
    %s
    ' % u'/'.join(items) + return html + + def interwiki(self, d): + """ Assemble the interwiki name display, linking to page_front_page + + @param d: parameter dictionary + @rtype: string + @return: interwiki html + """ + if self.request.cfg.show_interwiki: + page = wikiutil.getFrontPage(self.request) + text = self.request.cfg.interwikiname or 'Self' + link = page.link_to(self.request, text=text, rel='nofollow') + html = u'%s: ' % link + else: + html = u'' + return html + +def execute(request): + """ + Generate and return a theme object + + @param request: the request object + @rtype: MoinTheme + @return: Theme object + """ + return Theme(request) + diff --git a/wikiconfig.py.debwiki b/wikiconfig.py.debwiki new file mode 100644 index 0000000..df5b982 --- /dev/null +++ b/wikiconfig.py.debwiki @@ -0,0 +1,48 @@ +# -*- coding: iso-8859-1 -*- +"""MoinMoin Desktop Edition (MMDE) - Configuration + +ONLY to be used for MMDE - if you run a personal wiki on your notebook or PC. + +This is NOT intended for internet or server or multiuser use due to relaxed security settings! +""" +import sys, os +from MoinMoin.config.multiconfig import DefaultConfig + + +class LocalConfig(DefaultConfig): + # vvv DON'T TOUCH THIS EXCEPT IF YOU KNOW WHAT YOU DO vvv + moinmoin_dir = os.path.abspath(os.path.normpath(os.path.dirname(sys.argv[0]))) + data_dir = os.path.join(moinmoin_dir, 'wiki', 'data') + data_underlay_dir = os.path.join(moinmoin_dir, 'wiki', 'underlay') + + # DesktopEdition = True # give all local users full powers + acl_rights_default = u"All:read,write,delete,revert,admin" + surge_action_limits = None # no surge protection + sitename = u'Debian Wiki' + #logo_string = u'Debian' + page_front_page = u'FrontPage' # change to some better value + # ^^^ DON'T TOUCH THIS EXCEPT IF YOU KNOW WHAT YOU DO ^^^ + + + # Add your configuration items here. + + interwikiname = u'DebianWiki' + theme_default = u'debwiki' + page_header1 = '' + +# DEVELOPERS! Do not add your configuration items there, +# you could accidentally commit them! Instead, create a +# wikiconfig_local.py file containing this: +# +# from wikiconfig import LocalConfig +# +# class Config(LocalConfig): +# configuration_item_1 = 'value1' +# + +try: + from wikiconfig_local import Config +except ImportError, err: + if not str(err).endswith('wikiconfig_local'): + raise + Config = LocalConfig -- 2.39.2