Commits

Thomas Waldmann committed 74b0ae7

added foobar theme - a simple 2 sidebars theme

TODO:
* think about a better name
* make it prettier
* fix broken stuff

If you take css from modernized, please be very selective - especially
do not add css when it is unclear whether it is used.

Comments (0)

Files changed (66)

MoinMoin/themes/foobar/info.json

+{
+    "identifier":   "foobar",
+    "application":  "MoinMoin",
+    "name":         "FooBar Theme",
+    "description":  "moin2's builtin sidebar theme",
+    "author":       "MoinMoin developers",
+    "website":      "http://moinmo.in/",
+    "license":      "see MoinMoin license",
+    "doctype":      "html5"
+}

MoinMoin/themes/foobar/static/css/common.css

+/* Important note: DO NOT EDIT THIS FILE!
+ *
+ * The CSS seen below is automatically generated using the "stylus" tool.
+ * To modify it, edit the files in the "stylus" directory and re-generate
+ * this file from them:
+ *
+ * stylus --include-css --compress < main.styl > ../common.css
+ */
+/*
+Copied from:  http://code.google.com/p/html5resetcss/
+
+html5doctor.com Reset Stylesheet
+v1.6.1
+Last Updated: 2010-09-17
+Author: Richard Clark - http: //richclarkdesign.com
+Twitter: @rich_clark
+*/
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p,
+blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins,
+kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, figcaption, figure, footer, header, hgroup,
+menu, nav, section, summary, time, mark, audio,
+video { margin: 0; padding: 0; border: 0; outline: 0;
+          font-size: 100%; vertical-align: baseline; background: transparent; }
+body { line-height: 1; }
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav,
+section { display: block; }
+nav ul { list-style: none; }
+blockquote, q { quotes: none; }
+blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; }
+a { margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent; }
+ins { background-color: #ff9; color: #000; text-decoration: none; }
+mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
+del { text-decoration: line-through; }
+abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
+table { border-collapse: collapse; border-spacing: 0; }
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #cccccc; margin: 1em 0; padding: 0; }
+input, select { vertical-align: middle; }
+/* end HTML5 reset */
+.hll { background-color: #ffffcc }
+.c { color: #408080; font-style: italic } /* Comment */
+.err { border: 1px solid #FF0000 } /* Error */
+.k { color: #008000; font-weight: bold } /* Keyword */
+.o { color: #666666 } /* Operator */
+.cm { color: #408080; font-style: italic } /* Comment.Multiline */
+.cp { color: #BC7A00 } /* Comment.Preproc */
+.c1 { color: #408080; font-style: italic } /* Comment.Single */
+.cs { color: #408080; font-style: italic } /* Comment.Special */
+.gd { color: #A00000 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gr { color: #FF0000 } /* Generic.Error */
+.gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.gi { color: #00A000 } /* Generic.Inserted */
+.go { color: #808080 } /* Generic.Output */
+.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.gt { color: #0040D0 } /* Generic.Traceback */
+.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.kp { color: #008000 } /* Keyword.Pseudo */
+.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.kt { color: #B00040 } /* Keyword.Type */
+.m { color: #666666 } /* Literal.Number */
+.s { color: #BA2121 } /* Literal.String */
+.na { color: #7D9029 } /* Name.Attribute */
+.nb { color: #008000 } /* Name.Builtin */
+.nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.no { color: #880000 } /* Name.Constant */
+.nd { color: #AA22FF } /* Name.Decorator */
+.ni { color: #999999; font-weight: bold } /* Name.Entity */
+.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.nf { color: #0000FF } /* Name.Function */
+.nl { color: #A0A000 } /* Name.Label */
+.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.nt { color: #008000; font-weight: bold } /* Name.Tag */
+.nv { color: #19177C } /* Name.Variable */
+.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.w { color: #bbbbbb } /* Text.Whitespace */
+.mf { color: #666666 } /* Literal.Number.Float */
+.mh { color: #666666 } /* Literal.Number.Hex */
+.mi { color: #666666 } /* Literal.Number.Integer */
+.mo { color: #666666 } /* Literal.Number.Oct */
+.sb { color: #BA2121 } /* Literal.String.Backtick */
+.sc { color: #BA2121 } /* Literal.String.Char */
+.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.s2 { color: #BA2121 } /* Literal.String.Double */
+.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.sh { color: #BA2121 } /* Literal.String.Heredoc */
+.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.sx { color: #008000 } /* Literal.String.Other */
+.sr { color: #BB6688 } /* Literal.String.Regex */
+.s1 { color: #BA2121 } /* Literal.String.Single */
+.ss { color: #19177C } /* Literal.String.Symbol */
+.bp { color: #008000 } /* Name.Builtin.Pseudo */
+.vc { color: #19177C } /* Name.Variable.Class */
+.vg { color: #19177C } /* Name.Variable.Global */
+.vi { color: #19177C } /* Name.Variable.Instance */
+.il { color: #666666 } /* Literal.Number.Integer.Long */
+/* smileys -- <span class="moin-text-icon moin-smile">:-)</span> */
+.moin-text-icon { font-size: 0; color: transparent; }
+.moin-alert:before { content: url('../img/smileys/alert.png'); }
+.moin-angry:before { content: url('../img/smileys/angry.png'); }
+.moin-attention:before { content: url('../img/smileys/attention.png'); }
+.moin-biggrin:before { content: url('../img/smileys/biggrin.png'); }
+.moin-checkmark:before { content: url('../img/smileys/checkmark.png'); }
+.moin-devil:before { content: url('../img/smileys/devil.png'); }
+.moin-frown:before { content: url('../img/smileys/frown.png'); }
+.moin-icon-error:before { content: url('../img/smileys/icon-error.png'); }
+.moin-icon-info:before { content: url('../img/smileys/icon-info.png'); }
+.moin-idea:before { content: url('../img/smileys/idea.png'); }
+.moin-ohwell:before { content: url('../img/smileys/ohwell.png'); }
+.moin-prio1:before { content: url('../img/smileys/prio1.png'); }
+.moin-prio2:before { content: url('../img/smileys/prio2.png'); }
+.moin-prio3:before { content: url('../img/smileys/prio3.png'); }
+.moin-redface:before { content: url('../img/smileys/redface.png'); }
+.moin-sad:before { content: url('../img/smileys/sad.png'); }
+.moin-smile:before { content: url('../img/smileys/smile.png'); }
+.moin-smile2:before { content: url('../img/smileys/smile2.png'); }
+.moin-smile3:before { content: url('../img/smileys/smile3.png'); }
+.moin-smile4:before { content: url('../img/smileys/smile4.png'); }
+.moin-star_off:before { content: url('../img/smileys/star_off.png'); }
+.moin-star_on:before { content: url('../img/smileys/star_on.png'); }
+.moin-thumbs-up:before { content: url('../img/smileys/thumbs-up.png'); }
+.moin-tired:before { content: url('../img/smileys/tired.png'); }
+.moin-tongue:before { content: url('../img/smileys/tongue.png'); }
+#moin-content div.caution{background-image:url("../img/admonitions/caution.png")}
+#moin-content div.important{background-image:url("../img/admonitions/important.png")}
+#moin-content div.note{background-image:url("../img/admonitions/note.png")}
+#moin-content div.tip{background-image:url("../img/admonitions/tip.png")}
+#moin-content div.warning{background-image:url("../img/admonitions/warning.png")}
+#moin-content div.caution,#moin-content div.important,#moin-content div.note,#moin-content div.tip,#moin-content div.warning{color:#000;background-color:#f9f9ff;background-repeat:no-repeat;background-position:8px 8px;border:1px solid #e5e5e5;margin:10px 30px 10px 30px;min-height:64px;padding-left:64px;clear:both;}
+#moin-content div.caution p,#moin-content div.important p,#moin-content div.note p,#moin-content div.tip p,#moin-content div.warning p{margin-top:8px}
+/* wiki parser  - no moin- prefix added here, these classes are used within pages: {{{#!wiki solid  */
+.comment { color: #555; background-color: #DDF; }
+.red { background-color: #FCC; }
+.green { background-color: #CFC; }
+.blue { background-color: #CCF; }
+.yellow { background-color: #FFF29F; }
+.orange { background-color: #FFD59B; }
+.solid { border: 2px solid #000; padding: 2px; clear: both; }
+.dashed { border: 2px dashed #AEBDCC; padding: 2px; clear: both; }
+.dotted { border: 2px dotted #AEBDCC; padding: 2px; clear: both; }
+.left { text-align: left; }
+.center { text-align: center; }
+.right { text-align: right; }
+.justify { text-align: justify; }
+body{color:#444;background-color:#eee;font-family:sans-serif}
+#moin-global-tray{float:left;width:16.666666666666668%;padding:.5%;overflow:hidden}
+#moin-main-container{float:left;width:81.13333333333333%;padding:.5%}
+#moin-main-box{background-color:#fff;border:1px solid #ccc;border-radius:6px;box-shadow:2px 2px 4px #444;overflow:hidden}
+#moin-header{background-color:#efe;border-bottom:1px solid #ccc;padding:.2% .5%;overflow:auto}
+#moin-content-no-panel{float:left;width:98.56746096959736%;padding:.6162695152013148%;border-right:1px solid #ccc}
+#moin-content-with-panel{float:left;width:76.79260476581759%;padding:.6162695152013148%;border-right:1px solid #ccc}
+#moin-local-panel{float:left;width:20.54231717337716%;padding:.6162695152013148%;margin-left:-1px;border-left:1px solid #ccc}
+#moin-footer{clear:both;font-size:.8em;color:#888;padding:.5% .5%;overflow:auto}
+#moin-breadcrumbs-location{float:left;padding:.3em .5em .2em .5em;font-weight:bold}
+#moin-search{float:right;padding:.3em .5em .2em .5em}
+#moin-logo{width:100%;padding:0 0 1em 0;}
+#moin-logo a{display:block;width:100%;height:70px;background-repeat:no-repeat;background-position:center center}
+#moin-global-panel ul,#moin-local-panel ul{list-style-type:none;margin:0;}
+#moin-global-panel ul li,#moin-local-panel ul li{font-size:1em;color:#008;font-weight:bold;padding:.5em;border:1px solid #ccc;border-radius:4px;box-shadow:1px 1px 2px #444;margin-left:.5em;margin-bottom:.5em;overflow:hidden;word-wrap:break-word;}
+#moin-global-panel ul li ul,#moin-local-panel ul li ul{padding:.2em .1em;}
+#moin-global-panel ul li ul li,#moin-local-panel ul li ul li{font-size:.8em;color:#000;font-weight:normal;padding:.1em .1em .1em .1em;border:none;box-shadow:none;margin:0}
+#moin-footer ul,#moin-credits{float:left;list-style-type:none;}
+#moin-footer ul li,#moin-credits li{padding:.1em}
+#moin-footer-logos{float:right;}
+#moin-footer-logos ul li{display:inline}
+a{text-decoration:none;}
+a:link{color:#47f}
+a:visited{color:#04a}
+a:hover{color:#f00;text-decoration:underline}
+a:active{color:#008000;text-decoration:underline}
+a.moin-nonexistent:link{color:#666}
+a.moin-nonexistent:visited{color:#808080}
+a.moin-nonexistent:hover{color:#000}
+a.moin-nonexistent:active{color:#000}
+ul,dl{margin-left:1.5em}
+ol{margin-left:3em;}
+ol ol{margin-left:1.5em}
+li,dt{padding:.1em}
+dt{font-weight:bold}
+dd{margin-left:1.5em}
+ul.moin-nobullet-list{list-style-type:none}
+ol.moin-upperalpha-list{list-style-type:upper-alpha}
+ol.moin-loweralpha-list{list-style-type:lower-alpha}
+ol.moin-upperroman-list{list-style-type:upper-roman}
+ol.moin-lowerroman-list{list-style-type:lower-roman}
+ul.moin-tags{list-style:none;}
+ul.moin-tags li{display:inline;}
+ul.moin-tags li.weight0{font-size:48.22530864197532%}
+ul.moin-tags li.weight1{font-size:57.870370370370374%}
+ul.moin-tags li.weight2{font-size:69.44444444444446%}
+ul.moin-tags li.weight3{font-size:83.33333333333334%}
+ul.moin-tags li.weight4{font-size:100%}
+ul.moin-tags li.weight5{font-size:120%}
+ul.moin-tags li.weight6{font-size:144%}
+ul.moin-tags li.weight7{font-size:172.79999999999998%}
+ul.moin-tags li.weight8{font-size:207.35999999999999%}
+ul.moin-tags li.weight9{font-size:248.83199999999994%}
+h1{font-size:1.7279999999999998em;margin:.5787037037037038em 0;border-bottom:3px solid #4d7da9;padding-bottom:3px}
+h2{font-size:1.44em;margin:.6944444444444444em 0;border-bottom:3px solid #4d7da9;padding-bottom:3px}
+h3{font-size:1.2em;margin:.8333333333333334em 0;border-bottom:2px solid #4d7da9;padding-bottom:2px}
+h4{font-size:1em;margin:1em 0;border-bottom:2px solid #4d7da9;padding-bottom:2px}
+h5{font-size:.8333333333333334em;margin:1.2em 0;border-bottom:1px solid #4d7da9;padding-bottom:1px}
+h6{font-size:.6944444444444445em;margin:1.4399999999999997em 0;border-bottom:1px solid #4d7da9;padding-bottom:1px}
+a.permalink{display:none;cursor:pointer;margin-left:.1em;color:#888;}
+a.permalink:hover{color:#444}
+h1:hover .permalink,h2:hover .permalink,h3:hover .permalink,h4:hover .permalink,h5:hover .permalink,h6:hover .permalink{display:inline;text-decoration:none}
+hr{background-color:#444;border:0;margin:.9em 0;height:1px;}
+hr.moin-hr1{height:2px}
+hr.moin-hr2{height:3px}
+hr.moin-hr3{height:5px}
+hr.moin-hr4{height:7px}
+hr.moin-hr5{height:9px}
+hr.moin-hr6{height:12px}
+table{margin:.5em;border-collapse:collapse;}
+table th,table td{padding:.3em .4em;vertical-align:middle;text-align:left}
+table th{border:1px solid #4d7da9;background-color:#81bbf2}
+table td{border:1px solid #adb9cc}
+table.zebra{border:none;border-collapse:separate;border-spacing:1px;}
+table.zebra thead{background-color:#81bbf2}
+table.zebra tfoot{background-color:#c4d9ff}
+table.zebra tbody tr,table.zebra > tr{background-color:#eef1f5}
+table.zebra tbody tr:nth-child(odd),table.zebra > tr:nth-child(odd){background-color:#d9dfe8}
+table.zebra th,table.zebra td{border:none}
+pre{font-family:monospace;white-space:pre-wrap;word-wrap:break-word;border:1px solid #aebdcc;background-color:#f3f5f7;margin:.33em 0;padding:5px;clear:both;}
+pre.comment{background-color:#ccc;color:#f00;margin:0;padding:0;border:0;}
+pre.comment:before{content:url("../img/attention.png")}
+textarea{font-family:monospace;width:100%;border:1px solid #ccc}
+input#f_comment{width:100%;border:1px solid #ccc;margin:.3em 0}
+sub{vertical-align:sub}
+sup{vertical-align:super}
+.moin-big{font-size:1.17em}
+.moin-small{font-size:.83em}
+@media print{#moin-global-tray,#moin-local-panel,#moin-footer,#moin-search{display:none}
+}

MoinMoin/themes/foobar/static/css/msie.css

+/* for now, don't add special workarounds for Internet Explorer */
+

MoinMoin/themes/foobar/static/css/stylus/admonitions.styl

+// admonitions  - no moin- prefix added  here, these classes are used within pages: {{{#!wiki caution
+
+#moin-content
+    div.caution
+        background-image url("../img/admonitions/caution.png")
+    div.important
+        background-image url("../img/admonitions/important.png")
+    div.note
+        background-image url("../img/admonitions/note.png")
+    div.tip
+        background-image url("../img/admonitions/tip.png")
+    div.warning
+        background-image url("../img/admonitions/warning.png")
+
+    div.caution, div.important, div.note, div.tip, div.warning
+        color black
+        background-color #F9F9FF
+        background-repeat no-repeat
+        background-position 8px 8px
+        border 1px solid #E5E5E5
+        margin 10px 30px 10px 30px
+        min-height 64px
+        padding-left 64px
+        clear both
+        p
+            margin-top 8px  // to align text with big graphic
+

MoinMoin/themes/foobar/static/css/stylus/main.styl

+// moin2 foobar theme css
+
+// include a comment with a notice that the css file is automatically generated:
+@import "stylus_notice.css"
+
+// reset all browser-specific default to have common defaults everywhere:
+@import "reset.css"
+
+// auto-generated by pygmentize -S default -f html >pygments_default.css
+@import "pygments_default.css"
+
+// smileys used by moin wiki parser (and maybe others)
+@import "smileys.css"
+
+// admonitions used by moin wiki parser (and maybe others)
+@import "admonitions"
+
+// user styles used by moin wiki parser (and maybe others) like red/green/solid/dashed/comment...
+@import "userstyles.css"
+
+body_color = #444444
+body_bg_color = #eeeeee
+main_bg_color = #ffffff
+border_style = 1px solid #cccccc
+header_bg_color = #eeffee
+footer_color = #888888
+panel_titles_color = #000088
+panel_items_color = #000000
+heading_underline_color = #4D7DA9
+shadow_color = #444444
+
+font_family = sans-serif
+main_font_size = 1em
+small_font_size = main_font_size * 0.8
+heading_scale = 1.2  // font size factor for h1 .. h6
+
+dir = left  // 'left' means left-to-right (ltr), 'right' means right-to-left (rtl)
+
+scale = 1  // we have the whole screen width as base
+global_tray_width = 100% / 6 * scale
+global_padding_width = 0.5% * scale
+main_container_width = 99.8% - global_tray_width - (4 * global_padding_width)
+
+scale = 100% / main_container_width  // we have the main container width as base
+local_panel_width = 100% / 6 * scale
+local_padding_width = 0.5% * scale
+content_width_with_panel = 99.8% - local_panel_width - (4 * local_padding_width)
+content_width_no_panel = 99.8% - (2 * local_padding_width)
+
+body
+    color body_color
+    background-color body_bg_color
+    font-family font_family
+
+// the main elements - just the big picture first: panels, header, content, footer
+
+#moin-global-tray
+    float dir
+    width global_tray_width
+    padding global_padding_width
+    overflow hidden
+
+#moin-main-container
+    float dir
+    width main_container_width
+    padding global_padding_width
+
+// contains header and content, but not footer
+#moin-main-box
+    background-color main_bg_color
+    border border_style
+    border-radius 6px
+    box-shadow 2px 2px 4px shadow_color
+    overflow hidden
+
+#moin-header
+    background-color header_bg_color
+    border-bottom border_style
+    padding 0.2% 0.5%
+    overflow auto
+
+#moin-content-no-panel
+    float dir
+    width content_width_no_panel
+    padding local_padding_width
+    {'border-' + opposite-position(dir)} border_style
+
+#moin-content-with-panel
+    float dir
+    width content_width_with_panel
+    padding local_padding_width
+    {'border-' + opposite-position(dir)} border_style
+
+#moin-local-panel
+    float dir
+    width local_panel_width
+    padding local_padding_width
+    {'margin-' + dir} -1px  // make it overlap with content border, see border_style
+    {'border-' + dir} border_style
+
+#moin-footer
+    clear both
+    font-size small_font_size
+    color footer_color
+    padding 0.5% 0.5%
+    overflow auto
+
+// now the stuff inside the main elements
+
+// header elements
+#moin-breadcrumbs-location
+    float dir
+    padding 0.3em 0.5em 0.2em 0.5em
+    font-weight bold
+
+#moin-search
+    float opposite-position(dir)
+    padding 0.3em 0.5em 0.2em 0.5em
+
+// panels, footer
+#moin-logo
+    width 100%
+    padding 0 0 1em 0
+    a
+        display block
+        width 100%
+        height 70px
+        background-repeat no-repeat
+        background-position center center
+
+#moin-global-panel ul,
+#moin-local-panel ul
+    list-style-type none 
+    margin 0
+    li
+        font-size main_font_size
+        color panel_titles_color
+        font-weight bold
+        padding 0.5em
+        border border_style
+        border-radius 4px
+        box-shadow 1px 1px 2px shadow_color
+        margin-left 0.5em
+        margin-bottom 0.5em
+        overflow hidden
+        word-wrap break-word
+        ul
+            padding 0.2em 0.1em
+            li
+                font-size small_font_size
+                color panel_items_color
+                font-weight normal
+                padding 0.1em 0.1em 0.1em 0.1em
+                border none
+                box-shadow none
+                margin 0
+
+#moin-footer ul,
+#moin-credits
+    float dir
+    list-style-type none 
+    li
+        padding 0.1em
+
+#moin-footer-logos
+    float opposite-position(dir)
+    ul li
+        display inline
+
+
+// links
+a
+    text-decoration none
+    // order must be: link, visited, hover, active
+    &:link
+        color #47F
+    &:visited
+        color #04A
+    &:hover
+        color red
+        text-decoration underline
+    &:active
+        color green
+        text-decoration underline
+    &.moin-nonexistent:link
+        color #666
+    &.moin-nonexistent:visited
+        color grey
+    &.moin-nonexistent:hover
+        color black
+    &.moin-nonexistent:active
+        color black
+
+
+// lists
+ul, dl
+    margin-left 1.5em
+ol
+    // ordered list, first level needs big margin that will contain the number
+    margin-left 3em
+    ol
+        // for >= second level we need less
+        margin-left 1.5em
+
+li, dt
+    padding 0.1em
+
+dt
+    font-weight bold
+dd
+    margin-left 1.5em
+
+ul
+    &.moin-nobullet-list
+        list-style-type none
+
+ol
+    &.moin-upperalpha-list
+        list-style-type upper-alpha
+    &.moin-loweralpha-list
+        list-style-type lower-alpha
+    &.moin-upperroman-list
+        list-style-type upper-roman
+    &.moin-lowerroman-list
+        list-style-type lower-roman
+
+// tags list / tag cloud
+tag_scale = 1.2
+tag_font_size = 100%
+
+ul.moin-tags
+    list-style none
+    li
+        display inline
+        for n in 0 1 2 3 4 5 6 7 8 9
+            { '&.weight' + n }
+                scale_tag = tag_scale ** (n - 4)
+                font-size tag_font_size * scale_tag
+
+// headings
+for n in 1 2 3 4 5 6
+    {'h' + n}
+        scale_font = heading_scale ** (4 - n)
+        font-size main_font_size * scale_font
+        margin (1em / scale_font) 0
+        heading_underline_thickness = floor(4px - n / 2)
+        border-bottom heading_underline_thickness solid heading_underline_color
+        padding-bottom heading_underline_thickness
+
+// special style for heading with mouseover permalinks
+a.permalink
+    display none
+    cursor pointer
+    margin-left 0.1em
+    color footer_color
+    &:hover
+        color body_color
+
+h1:hover .permalink,
+h2:hover .permalink,
+h3:hover .permalink,
+h4:hover .permalink,
+h5:hover .permalink,
+h6:hover .permalink
+    display inline
+    text-decoration none
+
+// horizontal rule ---- and custom rules ----- to ----------
+hr
+    background-color body_color
+    border 0
+    margin .9em 0
+    height 1px
+    &.moin-hr1
+        height 2px
+    &.moin-hr2
+        height 3px
+    &.moin-hr3
+        height 5px
+    &.moin-hr4
+        height 7px
+    &.moin-hr5
+         height 9px
+    &.moin-hr6
+        height 12px
+
+// tables
+table
+    margin 0.5em
+    border-collapse collapse
+    th, td
+        padding 0.3em 0.4em
+        vertical-align middle
+        text-align left
+    th
+        border 1px solid #4D7DA9
+        background-color #81BBF2
+    td
+        border 1px solid #ADB9CC
+
+table.zebra
+    border none
+    border-collapse separate
+    border-spacing 1px
+    thead
+        background-color #81BBF2
+    tfoot
+        background-color #C4D9FF
+    tbody tr,
+    > tr
+        background-color #EEF1F5
+    tbody tr:nth-child(odd),
+    > tr:nth-child(odd)
+        background-color #D9DFE8
+    th,
+    td
+        border none
+
+pre
+    font-family monospace
+    white-space pre-wrap
+    word-wrap break-word
+    border 1px solid #AEBDCC
+    background-color #F3F5F7
+    margin .33em 0
+    padding 5px
+    clear both
+    &.comment
+        background-color #CCC
+        color red
+        margin 0
+        padding 0
+        border 0
+        &:before
+            content url(../img/attention.png)
+
+textarea
+    font-family monospace
+    width 100%
+    border border_style
+
+input#f_comment
+    width 100%
+    border border_style
+    margin .3em 0
+
+// text styles
+sub
+    vertical-align sub
+sup
+    vertical-align super
+.moin-big
+    font-size 1.17em
+.moin-small
+    font-size .83em
+
+/* fix tests -- currently checking <big> and <small> */
+@media print
+    #moin-global-tray
+    #moin-local-panel
+    #moin-footer
+    #moin-search
+        display none
+

MoinMoin/themes/foobar/static/css/stylus/pygments_default.css

+.hll { background-color: #ffffcc }
+.c { color: #408080; font-style: italic } /* Comment */
+.err { border: 1px solid #FF0000 } /* Error */
+.k { color: #008000; font-weight: bold } /* Keyword */
+.o { color: #666666 } /* Operator */
+.cm { color: #408080; font-style: italic } /* Comment.Multiline */
+.cp { color: #BC7A00 } /* Comment.Preproc */
+.c1 { color: #408080; font-style: italic } /* Comment.Single */
+.cs { color: #408080; font-style: italic } /* Comment.Special */
+.gd { color: #A00000 } /* Generic.Deleted */
+.ge { font-style: italic } /* Generic.Emph */
+.gr { color: #FF0000 } /* Generic.Error */
+.gh { color: #000080; font-weight: bold } /* Generic.Heading */
+.gi { color: #00A000 } /* Generic.Inserted */
+.go { color: #808080 } /* Generic.Output */
+.gp { color: #000080; font-weight: bold } /* Generic.Prompt */
+.gs { font-weight: bold } /* Generic.Strong */
+.gu { color: #800080; font-weight: bold } /* Generic.Subheading */
+.gt { color: #0040D0 } /* Generic.Traceback */
+.kc { color: #008000; font-weight: bold } /* Keyword.Constant */
+.kd { color: #008000; font-weight: bold } /* Keyword.Declaration */
+.kn { color: #008000; font-weight: bold } /* Keyword.Namespace */
+.kp { color: #008000 } /* Keyword.Pseudo */
+.kr { color: #008000; font-weight: bold } /* Keyword.Reserved */
+.kt { color: #B00040 } /* Keyword.Type */
+.m { color: #666666 } /* Literal.Number */
+.s { color: #BA2121 } /* Literal.String */
+.na { color: #7D9029 } /* Name.Attribute */
+.nb { color: #008000 } /* Name.Builtin */
+.nc { color: #0000FF; font-weight: bold } /* Name.Class */
+.no { color: #880000 } /* Name.Constant */
+.nd { color: #AA22FF } /* Name.Decorator */
+.ni { color: #999999; font-weight: bold } /* Name.Entity */
+.ne { color: #D2413A; font-weight: bold } /* Name.Exception */
+.nf { color: #0000FF } /* Name.Function */
+.nl { color: #A0A000 } /* Name.Label */
+.nn { color: #0000FF; font-weight: bold } /* Name.Namespace */
+.nt { color: #008000; font-weight: bold } /* Name.Tag */
+.nv { color: #19177C } /* Name.Variable */
+.ow { color: #AA22FF; font-weight: bold } /* Operator.Word */
+.w { color: #bbbbbb } /* Text.Whitespace */
+.mf { color: #666666 } /* Literal.Number.Float */
+.mh { color: #666666 } /* Literal.Number.Hex */
+.mi { color: #666666 } /* Literal.Number.Integer */
+.mo { color: #666666 } /* Literal.Number.Oct */
+.sb { color: #BA2121 } /* Literal.String.Backtick */
+.sc { color: #BA2121 } /* Literal.String.Char */
+.sd { color: #BA2121; font-style: italic } /* Literal.String.Doc */
+.s2 { color: #BA2121 } /* Literal.String.Double */
+.se { color: #BB6622; font-weight: bold } /* Literal.String.Escape */
+.sh { color: #BA2121 } /* Literal.String.Heredoc */
+.si { color: #BB6688; font-weight: bold } /* Literal.String.Interpol */
+.sx { color: #008000 } /* Literal.String.Other */
+.sr { color: #BB6688 } /* Literal.String.Regex */
+.s1 { color: #BA2121 } /* Literal.String.Single */
+.ss { color: #19177C } /* Literal.String.Symbol */
+.bp { color: #008000 } /* Name.Builtin.Pseudo */
+.vc { color: #19177C } /* Name.Variable.Class */
+.vg { color: #19177C } /* Name.Variable.Global */
+.vi { color: #19177C } /* Name.Variable.Instance */
+.il { color: #666666 } /* Literal.Number.Integer.Long */

MoinMoin/themes/foobar/static/css/stylus/reset.css

+/*
+Copied from:  http://code.google.com/p/html5resetcss/
+
+html5doctor.com Reset Stylesheet
+v1.6.1
+Last Updated: 2010-09-17
+Author: Richard Clark - http: //richclarkdesign.com
+Twitter: @rich_clark
+*/
+html, body, div, span, object, iframe, h1, h2, h3, h4, h5, h6, p,
+blockquote, pre, abbr, address, cite, code, del, dfn, em, img, ins,
+kbd, q, samp, small, strong, sub, sup, var, b, i, dl, dt, dd, ol, ul, li,
+fieldset, form, label, legend, table, caption, tbody, tfoot, thead, tr, th, td,
+article, aside, canvas, details, figcaption, figure, footer, header, hgroup,
+menu, nav, section, summary, time, mark, audio,
+video { margin: 0; padding: 0; border: 0; outline: 0;
+            font-size: 100%; vertical-align: baseline; background: transparent; }
+body { line-height: 1; }
+article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav,
+section { display: block; }
+nav ul { list-style: none; }
+blockquote, q { quotes: none; }
+blockquote:before, blockquote:after, q:before, q:after { content: ''; content: none; }
+a { margin: 0; padding: 0; font-size: 100%; vertical-align: baseline; background: transparent; }
+ins { background-color: #ff9; color: #000; text-decoration: none; }
+mark { background-color: #ff9; color: #000; font-style: italic; font-weight: bold; }
+del { text-decoration: line-through; }
+abbr[title], dfn[title] { border-bottom: 1px dotted; cursor: help; }
+table { border-collapse: collapse; border-spacing: 0; }
+hr { display: block; height: 1px; border: 0; border-top: 1px solid #cccccc; margin: 1em 0; padding: 0; }
+input, select { vertical-align: middle; }
+/* end HTML5 reset */
+

MoinMoin/themes/foobar/static/css/stylus/smileys.css

+/* smileys -- <span class="moin-text-icon moin-smile">:-)</span> */
+.moin-text-icon { font-size: 0; color: transparent; }
+.moin-alert:before { content: url('../img/smileys/alert.png'); }
+.moin-angry:before { content: url('../img/smileys/angry.png'); }
+.moin-attention:before { content: url('../img/smileys/attention.png'); }
+.moin-biggrin:before { content: url('../img/smileys/biggrin.png'); }
+.moin-checkmark:before { content: url('../img/smileys/checkmark.png'); }
+.moin-devil:before { content: url('../img/smileys/devil.png'); }
+.moin-frown:before { content: url('../img/smileys/frown.png'); }
+.moin-icon-error:before { content: url('../img/smileys/icon-error.png'); }
+.moin-icon-info:before { content: url('../img/smileys/icon-info.png'); }
+.moin-idea:before { content: url('../img/smileys/idea.png'); }
+.moin-ohwell:before { content: url('../img/smileys/ohwell.png'); }
+.moin-prio1:before { content: url('../img/smileys/prio1.png'); }
+.moin-prio2:before { content: url('../img/smileys/prio2.png'); }
+.moin-prio3:before { content: url('../img/smileys/prio3.png'); }
+.moin-redface:before { content: url('../img/smileys/redface.png'); }
+.moin-sad:before { content: url('../img/smileys/sad.png'); }
+.moin-smile:before { content: url('../img/smileys/smile.png'); }
+.moin-smile2:before { content: url('../img/smileys/smile2.png'); }
+.moin-smile3:before { content: url('../img/smileys/smile3.png'); }
+.moin-smile4:before { content: url('../img/smileys/smile4.png'); }
+.moin-star_off:before { content: url('../img/smileys/star_off.png'); }
+.moin-star_on:before { content: url('../img/smileys/star_on.png'); }
+.moin-thumbs-up:before { content: url('../img/smileys/thumbs-up.png'); }
+.moin-tired:before { content: url('../img/smileys/tired.png'); }
+.moin-tongue:before { content: url('../img/smileys/tongue.png'); }
+

MoinMoin/themes/foobar/static/css/stylus/stylus_notice.css

+/* Important note: DO NOT EDIT THIS FILE!
+ *
+ * The CSS seen below is automatically generated using the "stylus" tool.
+ * To modify it, edit the files in the "stylus" directory and re-generate
+ * this file from them:
+ *
+ * stylus --include-css --compress < main.styl > ../common.css
+ */
+
+

MoinMoin/themes/foobar/static/css/stylus/userstyles.css

+/* wiki parser  - no moin- prefix added here, these classes are used within pages: {{{#!wiki solid  */
+.comment { color: #555; background-color: #DDF; }
+.red { background-color: #FCC; }
+.green { background-color: #CFC; }
+.blue { background-color: #CCF; }
+.yellow { background-color: #FFF29F; }
+.orange { background-color: #FFD59B; }
+.solid { border: 2px solid #000; padding: 2px; clear: both; }
+.dashed { border: 2px dashed #AEBDCC; padding: 2px; clear: both; }
+.dotted { border: 2px dotted #AEBDCC; padding: 2px; clear: both; }
+.left { text-align: left; }
+.center { text-align: center; }
+.right { text-align: right; }
+.justify { text-align: justify; }
+

MoinMoin/themes/foobar/static/img/admonitions/caution.png

Added
New image

MoinMoin/themes/foobar/static/img/admonitions/important.png

Added
New image

MoinMoin/themes/foobar/static/img/admonitions/note.png

Added
New image

MoinMoin/themes/foobar/static/img/admonitions/tip.png

Added
New image

MoinMoin/themes/foobar/static/img/admonitions/warning.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/alert.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/angry.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/attention.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/biggrin.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/checkmark.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/devil.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/frown.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/icon-error.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/icon-info.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/idea.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/ohwell.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/prio1.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/prio2.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/prio3.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/redface.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/sad.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/smile.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/smile2.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/smile3.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/smile4.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/star_off.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/star_on.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/thumbs-up.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/tired.png

Added
New image

MoinMoin/themes/foobar/static/img/smileys/tongue.png

Added
New image

MoinMoin/themes/foobar/templates/delete.html

+{% import "forms.html" as forms %}
+{% extends theme("local.html") %}
+{% block content %}
+<h1>{{ _("Delete '%(item_name)s'", item_name=item.name) }}</h1>
+<div class="moin-form">
+{{ gen.form.open(form, method="post", action=url_for('frontend.delete_item', item_name=item.name)) }}
+  {{ forms.render_errors(form) }}
+  <dl>
+    {{ forms.render_field(gen, form['comment'], 'text') }}
+    {{ forms.render_textcha(gen, form) }}
+  </dl>
+  {{ gen.input(form['submit'], type='submit') }}
+{{ gen.form.close() }}
+</div>
+{% endblock %}
+
+
+

MoinMoin/themes/foobar/templates/destroy.html

+{% import "forms.html" as forms %}
+{% extends theme("local.html") %}
+{% block content %}
+{% if rev_id == None %}
+    <h1>{{ _("DESTROY COMPLETE item '%(item_name)s'", item_name=item.name) }}</h1>
+    <div class="moin-form">
+    {{ gen.form.open(form, method="post", action=url_for('frontend.destroy_item', item_name=item.name)) }}
+      {{ forms.render_errors(form) }}
+      <dl>
+        {{ forms.render_field(gen, form['comment'], 'text') }}
+        {{ forms.render_textcha(gen, form) }}
+      </dl>
+      {{ gen.input(form['submit'], type='submit') }}
+    {{ gen.form.close() }}
+    </div>
+{% else %}
+    <h1>{{ _("DESTROY REVISION '%(item_name)s' (rev %(rev_id)s)", item_name=item.name, rev_id=rev_id) }}</h1>
+    <div class="moin-form">
+    {{ gen.form.open(form, method="post", action=url_for('frontend.destroy_item', item_name=item.name, rev=rev_id)) }}
+      {{ forms.render_errors(form) }}
+      <dl>
+        {{ forms.render_field(gen, form['comment'], 'text') }}
+        {{ forms.render_textcha(gen, form) }}
+      </dl>
+      {{ gen.input(form['submit'], type='submit') }}
+    {{ gen.form.close() }}
+    </div>
+{% endif %}
+{% endblock %}
+
+
+
+
+

MoinMoin/themes/foobar/templates/global.html

+{% extends theme("layout.html") %}
+{% import "utils.html" as utils %}
+
+{% block content_container %}
+<div id="moin-content-no-panel" lang="{{ theme_supp.content_lang }}" dir="{{ theme_supp.content_dir }}">
+    {% block content %}
+        {# All content templates should have implement this block. #}
+    {% endblock %}
+</div>
+{% endblock %}
+

MoinMoin/themes/foobar/templates/global_history.html

+{% extends theme("global.html") %}
+{% import "utils.html" as utils %}
+
+{% block head %}
+{{ super() }}
+<link rel="alternate" title="Global History" href="{{ url_for('feed.atom') }}" type="application/atom+xml" />
+{% endblock %}
+
+{% block content %}
+<h1>{{ _("Global History") }}</h1>
+<div class='moin-clr'></div>
+    <div id="moin-global-history">
+        {% for day, revs in history %}
+           {% set latest_timestamp = revs[0].meta['mtime'] %}
+            <div class="moin-history-container"> 
+                <div class="moin-history-container-header">
+                    <h2>{{ day }}</h2>
+                    {% if user.valid %}
+                    <a class="bookmark-link" href="{{ url_for('frontend.bookmark', time=latest_timestamp+1) }}">{{ _("Set bookmark") }}</a>
+                    {% endif %}
+                </div>
+                <div class="moin-history-container-body">
+                    <table class="zebra">
+                    {% for rev in revs %}
+                        {% set meta = rev.meta %}
+                        <tr>
+                            <td class="moin-action">
+                                <span class="moin-history-{{ meta.action|lower }}"></span>
+                            </td>
+                            <td class="moin-history-links">
+                                <a href="{{ url_for('frontend.history', item_name=meta.name, bookmark=bookmark_time) }}">HIST</a>
+                                {% if bookmark_time -%}
+                                    <a href="{{ url_for('frontend.diff', item_name=meta.name, bookmark=bookmark_time) }}">DIFF</a>
+                                {%- endif %}
+                            </td>
+                            <td class="moin-history-time">{{ meta.mtime|timeformat }}</td>
+                            <td class="moin-history-item"><a class="{{ meta.contenttype|contenttype_to_class }}" href="{{ url_for('frontend.show_item', item_name=meta.name) }}" title="{{ meta.contenttype }}">{{ meta.name }}</a></td>
+                        </tr>
+                    {% endfor %}
+                    </table>
+                </div>
+            </div>
+        {% endfor %}
+        {% if bookmark_time %}
+        <div class="moin-history-container"> 
+            <div class="moin-history-container-header">
+                <span>
+                    <h2>{{ bookmark_time|datetimeformat }}</h2>
+                    <a href="{{ url_for('frontend.bookmark', time='del') }}">{{ _("Delete bookmark") }}</a>
+               </span>
+            </div>
+        </div>
+        {% endif %}
+    </div>
+{% endblock %}

MoinMoin/themes/foobar/templates/global_tags.html

+{% extends theme("global.html") %}
+{% block content %}
+{% if headline %}
+<h1>{{ headline }}</h1>
+{% endif %}
+{% if tags %}
+<ul class="moin-tags">
+    {% for cls, tag in tags %}
+    <li class="{{ cls }}"><a href="{{ url_for('frontend.tagged_items', tag=tag) }}">{{ tag }}</a></li>
+    {% endfor %}
+</ul>
+{% endif %}
+{% endblock %}

MoinMoin/themes/foobar/templates/history.html

+{% extends theme("local.html") %}
+{% import "utils.html" as utils %}
+{% block content %}
+    {% set (history, next_offset, previous_offset) = history_page %}
+    {% if history %}
+    <div class='moin-offset-links'>
+        {% if previous_offset >= 0 %}
+            <a href="{{ url_for('frontend.history', item_name=item_name, offset=previous_offset) }}" title="{{ _("Previous") }}">&laquo;</a>
+        {% endif %}
+        {% if next_offset %}
+            <a href="{{ url_for('frontend.history', item_name=item_name, offset=next_offset) }}" title="{{ _("Next") }}">&raquo;</a>
+        {% endif %}
+    </div>
+    <h1>{{ _("History of '%(item_name)s'", item_name=item_name) }}</h1>
+    <div class="moin-clr"></div>
+    <form action="{{ url_for('frontend.diff', item_name=item_name) }}" method="GET">
+        <div id="moin-page-history">
+        <table class="zebra">
+            <thead>
+                <tr>
+                    <th>{{ _("Name") }}</th>
+                    <th>{{ _("Rev.") }}</th>
+                    <th>{{ _("Timestamp") }}</th>
+                    <th>{{ _("Size") }}</th>
+                    <th><input type="submit" value="Diff" /></th>
+                    <th>{{ _("Editor") }}</th>
+                    <th>{{ _("Content-Type") }}</th>
+                    <th>{{ _("Comment") }}</th>
+                    <th colspan="6">{{ _("Actions") }}</th>
+                </tr>
+            </thead>
+            <tbody>
+                {% for doc in history %}
+                <tr>
+                    <td class="moin-wordbreak">{{ doc.name }}</td>
+                    <td class="moin-integer monospaced">{{ doc.revid | shorten_id }}</td>
+                    <td>{{ doc.mtime|datetimeformat }}</td>
+                    <td class="moin-integer">{{ doc.size }}</td>
+                    <td>
+                        <div class="moin-hist-rev">
+                            <input type="radio" name="rev1" value="{{ doc.revid }}" />
+                            <input type="radio" name="rev2" value="{{ doc.revid }}" />
+                        </div>
+                    </td>
+                    <td class="moin-wordbreak">{{ utils.editor_info(doc) }}</td>
+                    <td class="moin-wordbreak">{{ doc.contenttype }}</td>
+                    <td class="moin-wordbreak">{{ doc.comment }}</td>
+                    <td><a href="{{ url_for('frontend.show_item', item_name=doc.name, rev=doc.revid) }}">{{ _('show') }}</a></td>
+                    <td><a href="{{ url_for('frontend.show_item_meta', item_name=doc.name, rev=doc.revid) }}">{{ _('meta') }}</a></td>
+                    <td><a href="{{ url_for('frontend.download_item', item_name=doc.name, rev=doc.revid) }}">{{ _('download') }}</a></td>
+                    <td><a href="{{ url_for('frontend.highlight_item', item_name=doc.name, rev=doc.revid) }}">{{ _('highlight') }}</a></td>
+                    {% if user.may.write(item_name) -%}
+                    <td><a href="{{ url_for('frontend.revert_item', item_name=doc.name, rev=doc.revid) }}">{{ _('revert') }}</a></td>
+                    {%- endif %}
+                    {% if user.may.destroy(item_name) -%}
+                    <td><a href="{{ url_for('frontend.destroy_item', item_name=doc.name, rev=doc.revid) }}">{{ _('destroy') }}</a></td>
+                    {%- endif %}
+                </tr>
+                {% endfor %}
+            </tbody>
+            {% if bookmark_time %}
+            <tfoot>
+                <tr>
+                    <td colspan="2">Bookmark is set to</td>
+                    <td>{{ bookmark_time|datetimeformat }}</td>
+                    <td colspan="11"></td>
+                </tr>
+            </tfoot>
+            {% endif %}
+        </table>
+        </div>
+        </form>
+    {% endif %}
+{% endblock %}

MoinMoin/themes/foobar/templates/index.html

+{% extends theme("global.html") %}
+{% import "forms.html" as forms %}
+{% block head_scripts %}
+{{ super() }}
+    <script src="{{ url_for('serve.files', name='jquery_multi_download', filename='jquery.multiDownload.js') }}"></script>
+    <script src="{{ url_for('static', filename='js/index_action.js') }}"></script>
+{% endblock %}
+
+{% block content %}
+    <div class="moin-index-message"><span></span></div>
+    <div class="moin-align-right">
+        <ul>
+            {% if index %}
+            <li class="action-bar"> 
+            <div class="moin-select-all">
+                <span class="moin-select-allitem allitem-toselect" title="{{ _("Select All") }}">{{ _("Select All") }}</span>
+            </div>
+            </li>
+            {% endif %}
+            <li class="action-bar">
+            <div class="moin-select-actions">
+                <div>
+                    <span class="show-action">Actions</span> 
+                </div>
+                <ul>
+                    <li id="moin-create-newitem">{{ _("New item") }}</li>
+                    <li id="moin-download-trigger">{{ _("Download") }}</li>
+                    <li class="moin-action-tab" 
+                        id="moin-delete-trigger" 
+                        actionurl="{{ url_for('frontend.ajaxdelete', item_name=item_name) }}">
+                        {{ _("Delete") }}
+                    </li>
+                    <li class="moin-action-tab" 
+                        id="moin-destroy-trigger" 
+                        actionurl="{{ url_for('frontend.ajaxdestroy', item_name=item_name) }}">
+                        {{ _("Destroy") }}
+                    </li>
+                </ul>
+            </div>
+            </li>
+            {% if index %}
+            <li class="action-bar">
+            <div class="moin-contenttypes-wrapper">
+                <div class="ct-hide">{{ _("Filter by content type") }}</div>
+                {% set unknown_items_label = _("items having unknown mime types") %}
+                {{ gen.form.open(form, method="post", action=url_for('frontend.index', item_name=item_name)) }}
+                <ul>
+                    <li>
+                        <a href="#" class="filter-toggle">&raquo; {{ _("Toggle") }}</a>
+                        <a href="#" class="filter-more">&raquo; {{ _("More") }}</a>
+                    </li>
+                    {{ forms.render_filter_field(gen, form['markup_text_items'], 'checkbox', contenttype_groups['markup text items']) }}
+                    {{ forms.render_filter_field(gen, form['other_text_items'], 'checkbox', contenttype_groups['other text items']) }}
+                    {{ forms.render_filter_field(gen, form['image_items'], 'checkbox', contenttype_groups['image items']) }}
+                    {{ forms.render_filter_field(gen, form['audio_items'], 'checkbox', contenttype_groups['audio items']) }}
+                    {{ forms.render_filter_field(gen, form['video_items'], 'checkbox', contenttype_groups['video items']) }}
+                    {{ forms.render_filter_field(gen, form['other_items'], 'checkbox', contenttype_groups['other items']) }}
+                    {{ forms.render_filter_field(gen, form['unknown_items'], 'checkbox', unknown_items_label) }}
+                    {{ gen.input(form['submit'], type='submit') }}
+                </ul>
+                {{ gen.form.close() }}
+            </div>
+            </li>
+            {% endif %}
+        </ul>
+    </div>
+    <div>
+    {% if item_name: %}
+        <h1>{{ _("Index of subitems of '%(item_name)s'", item_name=item_name) }}</h1>
+        <div class="moin-index-path">
+            <a href="{{ url_for('frontend.index') }}" title="{{ _("Global Index") }}">{{ ("..") }}</a>
+            <span class="moin-path-separator">{{ ("/") }}</span>
+            {% for i in range(0, item_names|count) %}
+                {% set fullname = item_names[:i+1]|join('/') %}
+                {% set relname = item_names[i] %}
+                <a href="{{ url_for('frontend.index', item_name=fullname) }}" title="{{ relname }}">{{ relname }}</a>
+                <span class="moin-path-separator">{{ ("/") }}</span>
+            {% endfor %}
+        </div>
+    {% else %}
+        <h1>{{ _("Global Index") }}</h1>
+    {% endif %}
+    </div>
+    <div class='moin-clr'></div>
+    <div id="moin-new-index" class="moin-item-index">
+        <h3 style="display: none;">{{ _("Recently uploaded items") }}</h3>
+        <div class="file_download_template" style="display: none;">
+            <a></a>
+        </div>
+    </div>
+    <div class="moin-index-separator"></div>
+    {% if index %}
+    <div id="moin-initials">
+        {% if not startswith %}
+            <a class="selected" href="{{ url_for('frontend.index', item_name=item_name) }}">{{ _("All") }}</a>
+        {% else %}
+            <a href="{{ url_for('frontend.index', item_name=item_name) }}">{{ _("All") }}</a>
+        {% endif %}
+        {% for initial in initials %}
+            {% if startswith == initial %}
+                <a class="selected" href="{{ url_for('frontend.index', item_name=item_name, startswith=initial) }}">{{ initial }}</a>
+            {% else %}
+                <a href="{{ url_for('frontend.index', item_name=item_name, startswith=initial) }}">{{ initial }}</a>
+            {% endif %}
+        {% endfor %}
+    </div>
+    <div class="moin-item-index">
+        {% set maxchars = 20 %}
+        {% for fullname, relname, contenttype, hassubitem in index %}
+            <div>
+                <span class="moin-select-item">&nbsp;</span>
+                {% set mimetype = "application/x.moin.download" %}
+                <a href="about:blank" title="{{ url_for('.download_item', item_name=fullname, mimetype=mimetype) }}"
+                   class="moin-download-link">
+                </a>
+                <a href="{{ url_for('.show_item', item_name=fullname) }}" 
+                   class="{{ contenttype|contenttype_to_class }} moin-item"
+                   title="{{ relname }}">
+                   {{ relname|truncate(maxchars, true, '..') }}
+                </a>
+                {% if hassubitem %}
+                    <a href="{{ url_for('frontend.index', item_name=fullname) }}" 
+                       title="{{ _("More") }}"
+                       class="moin-more-index">&nbsp;
+                </a>
+                {% endif %}
+            </div>
+        {% endfor %}
+    </div>
+    <div class="moin-clr"></div>
+    {% endif %}
+    <div id="popup">
+        <div id="popup-for-action" class="popup-container">
+            <div class="popup-header">
+                <div class="popup-closer popup-cancel" title="{{ _("Close") }}">x</div>
+                <span>{{ _("Please provide comment for this action") }}</span>
+            </div>
+            <div class="popup-body">
+                <input type="text" class="popup-comment" placeholder="{{ _("Enter your comment") }}"/>
+                <input type="hidden" class="popup-action" value=""/>
+                <br/>
+                <input type="button" class="popup-submit" value="{{ _("Submit") }}"/>
+                <input type="button" class="popup-cancel" value="{{ _("Cancel") }}"/>
+            </div>
+        </div>
+        <div id="popup-for-newitem" class="popup-container">
+            <div class="popup-header">
+                <div class="popup-closer popup-cancel" title="{{ _("Close") }}">x</div>
+                <span>{{ _("Create new item") }}</span>
+            </div>
+            <div class="popup-body">
+                <form action={{ url_for('.ajaxmodify') }} method="post">
+                    <label for="newitem">{{ _("Item name") }}</label>
+                    {% if item_name %}
+                        <input type="text" name="newitem" placeholder="{{ _("Enter item name here") }}" value="{{ item_name }}/" required="true"/>
+                    {% else %}
+                        <input type="text" name="newitem" placeholder="{{ _("Enter item name here") }}" required="true"/>
+                    {% endif %}
+                    <br/>
+                    <input type="submit" value="{{ _("Create") }}"/>
+                    <input type="button" class="popup-cancel" value="{{ _("Cancel") }}"/>
+                </form>
+            </div>
+        </div>
+    </div>
+
+    <div id="moin-upload-cont">
+    {% set submit_url = url_for('.jfu_server', item_name=item_name) %}
+    {{ forms.render_file_uploader(submit_url) }}
+    </div>
+    <span class="moin-drag">{{ _("(Drag and drop multiple files to this white area to upload them.)") }}</span>
+    <script src="{{ url_for('static', filename='js/jfu.js') }}"></script>
+    <div id="lightbox">&nbsp;</div>
+{% endblock %}

MoinMoin/themes/foobar/templates/itemviews.html

+{% set exists = storage.has_item(item_name) %}
+<ul class="moin-itemviews">
+    {%- for endpoint, label, title, check_exists in cfg.item_views if not endpoint in cfg.endpoints_excluded %}
+        {%- if not check_exists or check_exists and exists %}
+            {%- if endpoint in [
+                'frontend.show_item', 'frontend.index', 'frontend.highlight_item',
+                'frontend.show_item_meta', 'frontend.download_item',
+                'frontend.history', 'frontend.backrefs', 'frontend.sitemap',
+                'frontend.similar_names', 'frontend.copy_item',
+            ] %}
+                <li>
+                    <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint in [
+                'frontend.modify_item', 'frontend.rename_item', 'frontend.delete_item',
+            ] and user.may.write(item_name) %}
+                <li>
+                    <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint == 'frontend.destroy_item' and user.may.destroy(item_name) %}
+                <li>
+                    <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint in [
+                'frontend.global_history', 'frontend.global_index', 'frontend.global_tags',
+                'admin.index',
+            ] %}
+                <li>
+                    <a href="{{ url_for(endpoint) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint == 'frontend.quicklink_item' and user.valid %}
+                <li>
+                    <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">
+                        {%- if user.is_quicklinked_to([item_name]) %}
+                            {{ _('Remove Link') }}
+                        {%- else %}
+                            {{ _('Add Link') }}
+                        {%- endif %}
+                    </a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint == 'frontend.subscribe_item' and user.valid %}
+                <li>
+                    <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">
+                        {%- if user.is_subscribed_to([item_name]) %}
+                            {{ _('Unsubscribe') }}
+                        {%- else %}
+                            {{ _('Subscribe') }}
+                        {%- endif %}
+                    </a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint == 'special.comments' %}
+                <li class="toggleCommentsButton" style="display:none;">
+                    <a href="#" onClick="toggleComments();return false;" title="{{ title }}">{{ label }}</a>
+                </li>
+            {%- endif %}
+
+            {%- if endpoint == 'special.supplementation' %}
+                {%- for sub_item_name in cfg.supplementation_item_names %}
+                    {%- set current_sub = item_name.rsplit('/', 1)[-1] %}
+                    {%- if not current_sub in cfg.supplementation_item_names %}
+                        {%- set supp_name = '%s/%s' % (item_name, sub_item_name) %}
+                        {%- if storage.has_item(supp_name) or user.may.write(supp_name) %}
+                            <li>
+                                <a href="{{ url_for('frontend.show_item', item_name=supp_name) }}" rel="nofollow">{{ _(sub_item_name) }}</a>
+                            </li>
+                        {%- endif %}
+                    {%- endif %}
+                {%- endfor %}
+            {%- endif %}
+        {%- endif %}
+    {%- endfor %}
+</ul>

MoinMoin/themes/foobar/templates/layout.html

+{% import "forms.html" as forms %}
+{% extends theme("base.html") %}
+
+{% import theme("snippets.html") as snippets with context %}
+{% set logo = snippets.logo() %}
+{% set footer_logos = snippets.creditlogos() %}
+{% set footer_items = '' %}
+{% set credits = snippets.credits() %}
+
+
+{% block layout %}
+
+<div id="moin-global-tray">
+
+{% if logo %}
+<div id="moin-logo">
+    <a style="background-image: url({{ '/static/logos/moinmoin.png' }});" href="{{ url_for('frontend.show_item', item_name=cfg.item_root) }}"></a>
+</div>
+{% endif %}
+
+<div id="moin-global-panel">
+    <ul>
+        {% set navibar_items = theme_supp.navibar(item_name) %}
+        {% if navibar_items %}
+            <li>Links
+            <ul>
+            {% for cls, url, text, title in navibar_items %}
+                <li class="{{ cls }}">
+                    <a href="{{ url }}" {% if title %}title="{{ title }}"{% endif %}>{{ text }}</a>
+                </li>
+            {% endfor %}
+            </ul>
+            </li>
+        {% endif %}
+
+        {% set trail_items = theme_supp.path_breadcrumbs() %}
+        {% if trail_items %}
+        <li>Trail
+            <ul>
+            {% for wiki_name, item_name, item_href, exists, err in trail_items %}
+                <li>
+                {%- if wiki_name -%}
+                    <a href="{{ item_href }}"{{ " " }}
+                       title="{{ wiki_name }}"
+                       class="{% if err %}moin-badinterwiki{% else %}moin-interwiki{% endif %}">
+                       {{ item_name|shorten_item_name }}
+                    </a>
+                {%- else -%}
+                    <a href="{{ url_for('frontend.show_item', item_name=item_name) }}"{{ " " }}
+                       {% if not exists -%}class="moin-nonexistent"{%- endif -%}>
+                       {{ item_name|shorten_item_name }}
+                    </a>
+                {%- endif %}
+                </li>
+            {% endfor %}
+            </ul>
+        </li>
+        {% endif %}
+        <li>User
+        <ul>
+        {% if user.valid -%}
+	    {% set avatar = user.avatar(20) %}
+            {% if avatar %}
+                <li><img id="moin-avatar" rel="noreferrer" src="{{ avatar }}" /></li>
+            {%- endif %}
+            {% if user.name -%}
+                {% set wiki_href, aliasname, title, exists = theme_supp.userhome() %}
+                <li>
+                <a href="{{ wiki_href }}" {% if not exists %}class="moin-nonexistent"{% endif %} rel="nofollow" title="{{ title }}">
+                    {{ aliasname }}
+                </a>
+                </li>
+                {% if 'frontend.usersettings' not in cfg.endpoints_excluded -%}
+                    <li>
+                    <a href="{{ url_for('frontend.usersettings') }}" class="moin-usersettings" rel="nofollow">{{ _('Settings') }}</a>
+                    </li>
+                {%- endif %}
+            {%- endif %}
+            {% if user.auth_method in cfg.auth_can_logout %}
+                <li>
+                <a href="{{ url_for('frontend.logout', logout_submit=1) }}" class="moin-logout" rel="nofollow">
+                    {{ _('Logout') }}
+                </a>
+                </li>
+            {% endif %}
+        {% else %}
+            {% set login_url = theme_supp.login_url() %}
+            {% if login_url %}
+                <li>
+                <a href="{{ login_url }}" class="moin-login" rel="nofollow">{{ _('Login') }}</a>
+                </li>
+            {% endif %}
+        {%- endif %}
+        </ul>
+    </ul>
+</div>
+</div>
+
+<div id="moin-main-container">
+<div id="moin-main-box">
+<div id="moin-header">
+    {% if search_form %} 
+    <div id="moin-search">
+    {{ gen.form.open(search_form, id='moin-searchform', method='get', action=url_for('frontend.search')) }}
+        {{ gen.input(search_form['q'], type='search', id='moin-search-query', size='40') }}
+        {{ gen.button(search_form['submit'], type='submit', id='moin-search-submit') }}
+        {{ forms.render_errors(search_form) }}
+    {{ gen.form.close() }}
+    </div>
+    {% endif %} 
+    <div id="moin-breadcrumbs-location">
+        {% if cfg.show_interwiki -%}
+        <span id="moin-interwiki">
+            <a href="{{ url_for('frontend.show_item', item_name=cfg.item_root) }}" rel="nofollow">
+                {% if cfg.interwikiname %}{{ cfg.interwikiname }}{% else %}Self{% endif %}
+            </a>
+            <span class="sep">: </span>
+        </span>
+        {%- endif %}
+        <span id="moin-pagelocation">
+            <span class="moin-pagepath">
+                {% for segment_name, segment_path, exists in theme_supp.location_breadcrumbs(item_name) -%}
+                    {% if not loop.last -%}
+                        <a href="{{ url_for('frontend.show_item', item_name=segment_path) }}" {% if not exists %}class="moin-nonexistent"{% endif %}>
+                            {{ segment_name|shorten_item_name }}
+                        </a>
+			<span class="sep">/</span>
+                    {% else %}
+		        {% if title_name %}
+                            {{ title_name }}
+                        {% else %}
+                        <a href="{{ url_for('frontend.show_item', item_name=segment_path) }}" {% if not exists %}class="moin-nonexistent"{% endif %}>
+                            {{ segment_name|shorten_item_name }}
+                        </a>
+		        {%- endif %}
+                    {%- endif %}
+                {%- endfor %}
+            </span>
+        </span>
+    </div>
+</div>
+
+<div id="moin-flash">
+{% for category, msg in get_flashed_messages(with_categories=true) %}
+    <p class="moin-flash moin-flash-{{ category }}">{{ msg }}</p>
+{% endfor %}
+</div>
+
+{% block content_container %}
+{% endblock %}
+</div>
+
+
+<div id="moin-footer">
+    {% block footer %}
+    <div id="moin-footer-logos">
+        {{ footer_logos }}
+    </div>
+    <div id="moin-footer-items">
+        {{ footer_items }}
+    </div>
+    <div id="moin-credits">
+        {{ credits }}
+    </div>
+{% endblock %}
+</div>
+</div>
+
+{% endblock %}
+

MoinMoin/themes/foobar/templates/local.html

+{% extends theme("layout.html") %}
+{% import "utils.html" as utils %}
+
+{% block content_container %}
+<div id="moin-content-with-panel" lang="{{ theme_supp.content_lang }}" dir="{{ theme_supp.content_dir }}">
+    {% block item -%}
+        {# If you want itemviews in your template, extend from show.html, not from here. #}
+        {% block content %}
+            {# All content templates should have implement this block. #}
+        {% endblock %}
+    {%- endblock %}
+</div>
+
+<div id="moin-local-panel">
+<ul>
+    <li>Views
+        {% set exists = storage.has_item(item_name) %}
+        <ul class="moin-itemviews">
+            {%- for endpoint, label, title, check_exists in cfg.item_views if not endpoint in cfg.endpoints_excluded %}
+                {%- if not check_exists or check_exists and exists %}
+                    {%- if endpoint in [
+                        'frontend.show_item', 'frontend.index', 'frontend.highlight_item',
+                        'frontend.show_item_meta', 'frontend.download_item',
+                        'frontend.history', 'frontend.backrefs', 'frontend.sitemap',
+                        'frontend.similar_names', 'frontend.copy_item',
+                    ] %}
+                        <li>
+                            <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint in [
+                        'frontend.modify_item', 'frontend.rename_item', 'frontend.delete_item',
+                    ] and user.may.write(item_name) %}
+                        <li>
+                            <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint == 'frontend.destroy_item' and user.may.destroy(item_name) %}
+                        <li>
+                            <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint in [
+                        'frontend.global_history', 'frontend.global_index', 'frontend.global_tags',
+                        'admin.index',
+                    ] %}
+                        <li>
+                            <a href="{{ url_for(endpoint) }}" title="{{ title }}" rel="nofollow">{{ label }}</a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint == 'frontend.quicklink_item' and user.valid %}
+                        <li>
+                            <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">
+                                {%- if user.is_quicklinked_to([item_name]) %}
+                                    {{ _('Remove Link') }}
+                                {%- else %}
+                                    {{ _('Add Link') }}
+                                {%- endif %}
+                            </a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint == 'frontend.subscribe_item' and user.valid %}
+                        <li>
+                            <a href="{{ url_for(endpoint, item_name=item_name) }}" title="{{ title }}" rel="nofollow">
+                                {%- if user.is_subscribed_to([item_name]) %}
+                                    {{ _('Unsubscribe') }}
+                                {%- else %}
+                                    {{ _('Subscribe') }}
+                                {%- endif %}
+                            </a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint == 'special.comments' %}
+                        <li class="toggleCommentsButton" style="display:none;">
+                            <a href="#" onClick="toggleComments();return false;" title="{{ title }}">{{ label }}</a>
+                        </li>
+                    {%- endif %}
+
+                    {%- if endpoint == 'special.supplementation' %}
+                        {%- for sub_item_name in cfg.supplementation_item_names %}
+                            {%- set current_sub = item_name.rsplit('/', 1)[-1] %}
+                            {%- if not current_sub in cfg.supplementation_item_names %}
+                                {%- set supp_name = '%s/%s' % (item_name, sub_item_name) %}
+                                {%- if storage.has_item(supp_name) or user.may.write(supp_name) %}
+                                    <li>
+                                        <a href="{{ url_for('frontend.show_item', item_name=supp_name) }}" rel="nofollow">{{ _(sub_item_name) }}</a>
+                                    </li>
+                                {%- endif %}
+                            {%- endif %}
+                        {%- endfor %}
+                    {%- endif %}
+                {%- endif %}
+            {%- endfor %}
+        </ul>
+    </li>
+    {% if rev %}
+    <li>Metadata
+        <ul>
+            <li>{{ _("Revision:") }} {{rev.revid | shorten_id}}</li>
+            <li>({{ rev.meta['mtime']|datetimeformat }})</li>
+            <li>{{ _("By:") }} {{ utils.editor_info(rev.meta) }}</li>
+            <li>{{ _("Size:") }} {{ rev.meta['size'] }}</li>
+            <li>{{ _("Type:") }} {{ rev.meta['contenttype'] }}</li>
+            {% if rev.meta.tags %}
+            <li>
+            {{ _("Tags:") }}
+            {% for tag in rev.meta.tags -%}
+            <a href="{{ url_for('frontend.tagged_items', tag=tag) }}">{{ tag }}</a>{% if not loop.last %}, {% endif %}
+            {%- endfor -%}
+            </li>
+            {% endif %}
+        </ul>
+    </li>
+    {% endif %}
+    <li>
+        {{ utils.render_subitem_navigation(item_name, False) }}
+    </li>
+</ul>
+</div>
+{% endblock %}
+

MoinMoin/themes/foobar/templates/login.html

+{% extends theme("global.html") %}
+{% import "forms.html" as forms %}
+
+{% block content %}
+<div class="moin-form">
+{{ forms.render_errors(form) }}
+
+{% if 'username' in login_inputs or 'password' in login_inputs %}
+<h2>{{ _('Moin login') }}</h2>
+{{ gen.form.open(form, method="post", action=url_for('frontend.login')) }}
+<dl>
+  {{ gen.input(form['submit'], type='hidden') }}
+
+  {% if 'username' in login_inputs %}
+  {{ forms.render_field(gen, form['username'], 'text') }}
+  {% endif %}
+  {% if 'password' in login_inputs %}
+  {{ forms.render_field(gen, form['password'], 'password') }}
+  {% endif %}
+
+  <input type="submit" value="{{ _('Log in') }}" />
+</dl>
+{{ gen.form.close() }}
+{% endif %}
+
+{% if 'openid' in login_inputs %}
+<br>
+<h2>{{ _('OpenID login') }}</h2>
+
+{{ gen.form.open(form, method="post", action=url_for('frontend.login')) }}
+<dl>
+  {{ gen.input(form['submit'], type='hidden') }}
+
+  {{ forms.render_field(gen, form['openid'], 'text') }}
+  <input type="submit" value="{{ _('Log in') }}" />
+</dl>
+{{ gen.form.close() }}
+{% endif %}
+
+</div>
+{% endblock %}
+

MoinMoin/themes/foobar/templates/lostpass.html

+{% extends theme("global.html") %}
+{% import "forms.html" as forms %}
+
+{% block content %}
+<h1>{{ _("Lost Password") }}</h1>
+<div class="moin-form">
+{{ _("Please note that you only need to fill out one form field.") }}
+{{ gen.form.open(form, method="post", action=url_for('frontend.lostpass')) }}
+  {{ forms.render_errors(form) }}
+  <dl>
+    {{ forms.render_field(gen, form['username'], 'text') }}
+    {{ forms.render_field(gen, form['email'], 'text') }}
+  </dl>