diff --git a/app/forms/account.py b/app/forms/account.py index 70d4c82..e72e0d0 100644 --- a/app/forms/account.py +++ b/app/forms/account.py @@ -107,8 +107,9 @@ class UpdateAccountForm(UpdateAccountBaseForm): theme = RadioField( 'Thème du site', choices=[ - ('default_theme', 'Thème par défaut (clair)'), - ('FK_dark_theme', 'Thème sombre de FlamingKite'), + ('default_theme', 'Planète Casio v5'), + ('FK_dark_theme', 'Thème sombre (FlamingKite)'), + ('Tituya_v43_theme', 'Thème Planète Casio v4 (Tituya)'), ]) diff --git a/app/static/css/pygments-friendly.css b/app/static/css/pygments-friendly.css new file mode 100644 index 0000000..4642fc0 --- /dev/null +++ b/app/static/css/pygments-friendly.css @@ -0,0 +1,74 @@ +pre { line-height: 125%; } +td.linenos .normal { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; } +span.linenos { color: #666666; background-color: transparent; padding-left: 5px; padding-right: 5px; } +td.linenos .special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +span.linenos.special { color: #000000; background-color: #ffffc0; padding-left: 5px; padding-right: 5px; } +.codehilite .hll { background-color: #ffffcc } +.codehilite { background: #f0f0f0; } +.codehilite .c { color: #60a0b0; font-style: italic } /* Comment */ +.codehilite .err { border: 1px solid #FF0000 } /* Error */ +.codehilite .k { color: #007020; font-weight: bold } /* Keyword */ +.codehilite .o { color: #666666 } /* Operator */ +.codehilite .ch { color: #60a0b0; font-style: italic } /* Comment.Hashbang */ +.codehilite .cm { color: #60a0b0; font-style: italic } /* Comment.Multiline */ +.codehilite .cp { color: #007020 } /* Comment.Preproc */ +.codehilite .cpf { color: #60a0b0; font-style: italic } /* Comment.PreprocFile */ +.codehilite .c1 { color: #60a0b0; font-style: italic } /* Comment.Single */ +.codehilite .cs { color: #60a0b0; background-color: #fff0f0 } /* Comment.Special */ +.codehilite .gd { color: #A00000 } /* Generic.Deleted */ +.codehilite .ge { font-style: italic } /* Generic.Emph */ +.codehilite .gr { color: #FF0000 } /* Generic.Error */ +.codehilite .gh { color: #000080; font-weight: bold } /* Generic.Heading */ +.codehilite .gi { color: #00A000 } /* Generic.Inserted */ +.codehilite .go { color: #888888 } /* Generic.Output */ +.codehilite .gp { color: #c65d09; font-weight: bold } /* Generic.Prompt */ +.codehilite .gs { font-weight: bold } /* Generic.Strong */ +.codehilite .gu { color: #800080; font-weight: bold } /* Generic.Subheading */ +.codehilite .gt { color: #0044DD } /* Generic.Traceback */ +.codehilite .kc { color: #007020; font-weight: bold } /* Keyword.Constant */ +.codehilite .kd { color: #007020; font-weight: bold } /* Keyword.Declaration */ +.codehilite .kn { color: #007020; font-weight: bold } /* Keyword.Namespace */ +.codehilite .kp { color: #007020 } /* Keyword.Pseudo */ +.codehilite .kr { color: #007020; font-weight: bold } /* Keyword.Reserved */ +.codehilite .kt { color: #902000 } /* Keyword.Type */ +.codehilite .m { color: #40a070 } /* Literal.Number */ +.codehilite .s { color: #4070a0 } /* Literal.String */ +.codehilite .na { color: #4070a0 } /* Name.Attribute */ +.codehilite .nb { color: #007020 } /* Name.Builtin */ +.codehilite .nc { color: #0e84b5; font-weight: bold } /* Name.Class */ +.codehilite .no { color: #60add5 } /* Name.Constant */ +.codehilite .nd { color: #555555; font-weight: bold } /* Name.Decorator */ +.codehilite .ni { color: #d55537; font-weight: bold } /* Name.Entity */ +.codehilite .ne { color: #007020 } /* Name.Exception */ +.codehilite .nf { color: #06287e } /* Name.Function */ +.codehilite .nl { color: #002070; font-weight: bold } /* Name.Label */ +.codehilite .nn { color: #0e84b5; font-weight: bold } /* Name.Namespace */ +.codehilite .nt { color: #062873; font-weight: bold } /* Name.Tag */ +.codehilite .nv { color: #bb60d5 } /* Name.Variable */ +.codehilite .ow { color: #007020; font-weight: bold } /* Operator.Word */ +.codehilite .w { color: #bbbbbb } /* Text.Whitespace */ +.codehilite .mb { color: #40a070 } /* Literal.Number.Bin */ +.codehilite .mf { color: #40a070 } /* Literal.Number.Float */ +.codehilite .mh { color: #40a070 } /* Literal.Number.Hex */ +.codehilite .mi { color: #40a070 } /* Literal.Number.Integer */ +.codehilite .mo { color: #40a070 } /* Literal.Number.Oct */ +.codehilite .sa { color: #4070a0 } /* Literal.String.Affix */ +.codehilite .sb { color: #4070a0 } /* Literal.String.Backtick */ +.codehilite .sc { color: #4070a0 } /* Literal.String.Char */ +.codehilite .dl { color: #4070a0 } /* Literal.String.Delimiter */ +.codehilite .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */ +.codehilite .s2 { color: #4070a0 } /* Literal.String.Double */ +.codehilite .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */ +.codehilite .sh { color: #4070a0 } /* Literal.String.Heredoc */ +.codehilite .si { color: #70a0d0; font-style: italic } /* Literal.String.Interpol */ +.codehilite .sx { color: #c65d09 } /* Literal.String.Other */ +.codehilite .sr { color: #235388 } /* Literal.String.Regex */ +.codehilite .s1 { color: #4070a0 } /* Literal.String.Single */ +.codehilite .ss { color: #517918 } /* Literal.String.Symbol */ +.codehilite .bp { color: #007020 } /* Name.Builtin.Pseudo */ +.codehilite .fm { color: #06287e } /* Name.Function.Magic */ +.codehilite .vc { color: #bb60d5 } /* Name.Variable.Class */ +.codehilite .vg { color: #bb60d5 } /* Name.Variable.Global */ +.codehilite .vi { color: #bb60d5 } /* Name.Variable.Instance */ +.codehilite .vm { color: #bb60d5 } /* Name.Variable.Magic */ +.codehilite .il { color: #40a070 } /* Literal.Number.Integer.Long */ diff --git a/app/static/css/themes/Tituya_v43_theme.css b/app/static/css/themes/Tituya_v43_theme.css new file mode 100644 index 0000000..1d6fcb3 --- /dev/null +++ b/app/static/css/themes/Tituya_v43_theme.css @@ -0,0 +1,132 @@ +/* Theme metadata +@NAME: Tituya's V43 theme +@AUTHOR: Tituya +*/ + +:root { + --background: #fff; + --text: #030303; + --text-light: #b62727; + + --links: #c02020; + + --ok: #b62727; + --ok-text: #ffffff; + --ok-active: #950c0c; + + --warn: #ffa01a; + --warn-text: #000; + --warn-active: #ff9600; + + --error: #d23a2f; + --error-text: #ffffff; + --error-active: #b32a20; + + --info: #2e7aec; + --info-text: #ffffff; + --info-active: #215ab0; + + --hr-border: 1px solid #aaa2a2; +} + +.form { + --background: #fff; + --text: #000; + --border: 1px solid #aaa2a2; + --border-focused: #577799; + --shadow-focused: rgba(87, 143, 228, 0.5); +} + +.editor button { + --background: #ffffff; + --text: #000000; + --border: 1px solid rgba(0, 0, 0, 0); + --border-focused: 1px solid rgba(0, 0, 0, .5); +} + +#light-menu { + --background: linear-gradient(90deg, rgba(192,26,26,1) 0%, rgb(119, 16, 16) 150%); + --text: #ffffff; + --icons: #ffffff; + --shadow: 0 0 10px #a49594; + + --logo-bg: transparent; + --logo-shadow: 0 0 2px rgba(0, 0, 0, .7); + --logo-active: linear-gradient(90deg, rgb(165, 22, 22) 0%, rgb(117, 13, 13) 95%); +} + +#menu { + --background: #fff; + --text: #030303; + --shadow: 0 0 8px rgb(0, 0, 0); + + --input-bg: #fff; + --input-text: #000; + --input-border: 1px solid #aaa2a2; +} + +#menu.opened svg > path { + fill: #be1818; +} + +header { + --background: #fff; + --border: 1px solid #be1818; +} + +footer { + --background: #fff; + --text: #a0a0a0; +} + +.flash { + --background: #ffffff; + --text: #000; + --shadow: 0 1px 12px rgba(0, 0, 0, 0.3); + + /* Uncomment to inherit :root values + --ok: #149641; + --warn: #f59f25; + --error: #d23a2f; + --info: #2e7aec; */ + + --btn-bg: rgba(0, 0, 0, 0); + --btn-text: #000000; + --btn-bg-active: rgba(0, 0, 0, .15); +} + +.profile-xp { + --background: #fff; + --border: 1px solid #be1818; + --background-xp: #be1818; + --border-xp: 1px solid #be1818; +} + +div.pagination { + font-size: 14px; + margin: 13px; +} + +table { + --border: #000; +} +table tr:nth-child(even) { + --background: #fff; +} + +table tr:nth-child(odd) { + --background: #ecb0b0; +} + +table.codehilitetable tr { + --background: #f0f0f0; +} + +div.editor-toolbar { + --border: #aaa2a2; + --background-light: #c0c0c0; + --background-preview: #fff; + --separator: #aaa2a2; + --text-disabled: #c0c0c0; + --text: #515151; +} \ No newline at end of file diff --git a/app/utils/render.py b/app/utils/render.py index a8d0994..659a7ac 100644 --- a/app/utils/render.py +++ b/app/utils/render.py @@ -37,6 +37,7 @@ def render(*args, styles=[], scripts=[], **kwargs): code = { 'default_theme': 'default', 'FK_dark_theme': 'material', + 'Tituya_v43_theme': 'friendly', } code = code.get(theme, 'default') styles_.append(f'css/pygments-{code}.css')