From 1b6eb6523c7f776ef1c5c84dcb43b87215b4a5ef Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Mon, 9 Apr 2018 22:12:46 +0100 Subject: [Wiki] Blurple sidebar --- templates/wiki/base.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/wiki/base.html b/templates/wiki/base.html index 4dce58d6..baee4086 100644 --- a/templates/wiki/base.html +++ b/templates/wiki/base.html @@ -24,7 +24,7 @@
{% include "main/navigation.html" %}
-
+
    {% if (can_edit or debug) and current_page == "page" %}
  • -- cgit v1.2.3 From 47887fbb33c306093647975cfa72010485333757 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 10 Apr 2018 09:53:54 +0100 Subject: [Wiki] Add code highlighting --- pysite/rst/__init__.py | 2 +- requirements.txt | 1 + static/css/pygments-monokai.css | 70 +++++++++++++++++++++++++++++++++++++++++ templates/main/base.html | 1 + templates/wiki/base.html | 1 + 5 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 static/css/pygments-monokai.css diff --git a/pysite/rst/__init__.py b/pysite/rst/__init__.py index 0e5f6ffe..9b2ef23c 100644 --- a/pysite/rst/__init__.py +++ b/pysite/rst/__init__.py @@ -7,7 +7,7 @@ from pysite.rst.roles import icon_role def render(rst: str): return publish_parts( - source=rst, writer_name="html5", settings_overrides={"halt_level": 2} + source=rst, writer_name="html5", settings_overrides={"halt_level": 2, "syntax_highlight": "short"} )["html_body"] diff --git a/requirements.txt b/requirements.txt index f7afea00..bb66b59d 100644 --- a/requirements.txt +++ b/requirements.txt @@ -11,3 +11,4 @@ Flask-Dance logmatic-python flask-wtf docutils +pygments diff --git a/static/css/pygments-monokai.css b/static/css/pygments-monokai.css new file mode 100644 index 00000000..250c8d44 --- /dev/null +++ b/static/css/pygments-monokai.css @@ -0,0 +1,70 @@ +.code .hll { background-color: #49483e } +.code { background: #272822; color: #f8f8f2 } +.code .c { color: #75715e } /* Comment */ +.code .err { color: #960050; background-color: #1e0010 } /* Error */ +.code .k { color: #66d9ef } /* Keyword */ +.code .l { color: #ae81ff } /* Literal */ +.code .n { color: #f8f8f2 } /* Name */ +.code .o { color: #f92672 } /* Operator */ +.code .p { color: #f8f8f2 } /* Punctuation */ +.code .ch { color: #75715e } /* Comment.Hashbang */ +.code .cm { color: #75715e } /* Comment.Multiline */ +.code .cp { color: #75715e } /* Comment.Preproc */ +.code .cpf { color: #75715e } /* Comment.PreprocFile */ +.code .c1 { color: #75715e } /* Comment.Single */ +.code .cs { color: #75715e } /* Comment.Special */ +.code .gd { color: #f92672 } /* Generic.Deleted */ +.code .ge { font-style: italic } /* Generic.Emph */ +.code .gi { color: #a6e22e } /* Generic.Inserted */ +.code .gs { font-weight: bold } /* Generic.Strong */ +.code .gu { color: #75715e } /* Generic.Subheading */ +.code .kc { color: #66d9ef } /* Keyword.Constant */ +.code .kd { color: #66d9ef } /* Keyword.Declaration */ +.code .kn { color: #f92672 } /* Keyword.Namespace */ +.code .kp { color: #66d9ef } /* Keyword.Pseudo */ +.code .kr { color: #66d9ef } /* Keyword.Reserved */ +.code .kt { color: #66d9ef } /* Keyword.Type */ +.code .ld { color: #e6db74 } /* Literal.Date */ +.code .m { color: #ae81ff } /* Literal.Number */ +.code .s { color: #e6db74 } /* Literal.String */ +.code .na { color: #a6e22e } /* Name.Attribute */ +.code .nb { color: #f8f8f2 } /* Name.Builtin */ +.code .nc { color: #a6e22e } /* Name.Class */ +.code .no { color: #66d9ef } /* Name.Constant */ +.code .nd { color: #a6e22e } /* Name.Decorator */ +.code .ni { color: #f8f8f2 } /* Name.Entity */ +.code .ne { color: #a6e22e } /* Name.Exception */ +.code .nf { color: #a6e22e } /* Name.Function */ +.code .nl { color: #f8f8f2 } /* Name.Label */ +.code .nn { color: #f8f8f2 } /* Name.Namespace */ +.code .nx { color: #a6e22e } /* Name.Other */ +.code .py { color: #f8f8f2 } /* Name.Property */ +.code .nt { color: #f92672 } /* Name.Tag */ +.code .nv { color: #f8f8f2 } /* Name.Variable */ +.code .ow { color: #f92672 } /* Operator.Word */ +.code .w { color: #f8f8f2 } /* Text.Whitespace */ +.code .mb { color: #ae81ff } /* Literal.Number.Bin */ +.code .mf { color: #ae81ff } /* Literal.Number.Float */ +.code .mh { color: #ae81ff } /* Literal.Number.Hex */ +.code .mi { color: #ae81ff } /* Literal.Number.Integer */ +.code .mo { color: #ae81ff } /* Literal.Number.Oct */ +.code .sa { color: #e6db74 } /* Literal.String.Affix */ +.code .sb { color: #e6db74 } /* Literal.String.Backtick */ +.code .sc { color: #e6db74 } /* Literal.String.Char */ +.code .dl { color: #e6db74 } /* Literal.String.Delimiter */ +.code .sd { color: #e6db74 } /* Literal.String.Doc */ +.code .s2 { color: #e6db74 } /* Literal.String.Double */ +.code .se { color: #ae81ff } /* Literal.String.Escape */ +.code .sh { color: #e6db74 } /* Literal.String.Heredoc */ +.code .si { color: #e6db74 } /* Literal.String.Interpol */ +.code .sx { color: #e6db74 } /* Literal.String.Other */ +.code .sr { color: #e6db74 } /* Literal.String.Regex */ +.code .s1 { color: #e6db74 } /* Literal.String.Single */ +.code .ss { color: #e6db74 } /* Literal.String.Symbol */ +.code .bp { color: #f8f8f2 } /* Name.Builtin.Pseudo */ +.code .fm { color: #a6e22e } /* Name.Function.Magic */ +.code .vc { color: #f8f8f2 } /* Name.Variable.Class */ +.code .vg { color: #f8f8f2 } /* Name.Variable.Global */ +.code .vi { color: #f8f8f2 } /* Name.Variable.Instance */ +.code .vm { color: #f8f8f2 } /* Name.Variable.Magic */ +.code .il { color: #ae81ff } /* Literal.Number.Integer.Long */ diff --git a/templates/main/base.html b/templates/main/base.html index edd79fb5..c554d360 100644 --- a/templates/main/base.html +++ b/templates/main/base.html @@ -10,6 +10,7 @@ + diff --git a/templates/wiki/base.html b/templates/wiki/base.html index baee4086..7d8d7d67 100644 --- a/templates/wiki/base.html +++ b/templates/wiki/base.html @@ -10,6 +10,7 @@ + -- cgit v1.2.3 From 119efb80e421faa29b0ffa3a3e7f32e6a284c889 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 10 Apr 2018 13:26:46 +0100 Subject: [Wiki] Add url_for text role --- pysite/rst/__init__.py | 3 ++- pysite/rst/roles.py | 37 +++++++++++++++++++++++++++++++++++++ 2 files changed, 39 insertions(+), 1 deletion(-) diff --git a/pysite/rst/__init__.py b/pysite/rst/__init__.py index 9b2ef23c..815ad058 100644 --- a/pysite/rst/__init__.py +++ b/pysite/rst/__init__.py @@ -2,7 +2,7 @@ from docutils.core import publish_parts from docutils.parsers.rst.roles import register_canonical_role -from pysite.rst.roles import icon_role +from pysite.rst.roles import icon_role, url_for_role def render(rst: str): @@ -12,3 +12,4 @@ def render(rst: str): register_canonical_role("icon", icon_role) +register_canonical_role("url_for", url_for_role) diff --git a/pysite/rst/roles.py b/pysite/rst/roles.py index bff00533..09c4d373 100644 --- a/pysite/rst/roles.py +++ b/pysite/rst/roles.py @@ -2,6 +2,7 @@ from docutils import nodes from docutils.parsers.rst.roles import set_classes from docutils.parsers.rst.states import Inliner +from flask import url_for from jinja2 import escape @@ -44,3 +45,39 @@ def icon_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner node = nodes.raw(html, html, format="html", **options) return [node], [] + + +def url_for_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, + options: dict = None, _content: dict = None): + if options is None: + options = {} + + set_classes(options) + + if "/" in text: + parts = [escape(x) for x in text.split("/")] + else: + msg = inliner.reporter.error("URL specification must be in the form /", line=lineno) + prb = inliner.problematic(text, rawtext, msg) + + return [prb], [msg] + + if len(parts) != 2: + msg = inliner.reporter.error("URL specification must be in the form /", line=lineno) + prb = inliner.problematic(text, rawtext, msg) + + return [prb], [msg] + else: + try: + url = url_for(parts[0]) + name = parts[1] + + html = f"""{name}""" + + node = nodes.raw(html, html, format="html", **options) + return [node], [] + except Exception as e: + msg = inliner.reporter.error(str(e), line=lineno) + prb = inliner.problematic(text, rawtext, msg) + + return [prb], [msg] -- cgit v1.2.3 From af7353b896352a00ddaf49fd9cce847190b8f23f Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 10 Apr 2018 13:28:40 +0100 Subject: [Wiki] Prevent page saving if there's an error --- templates/wiki/page_edit.html | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/templates/wiki/page_edit.html b/templates/wiki/page_edit.html index 7664511e..661e6b36 100644 --- a/templates/wiki/page_edit.html +++ b/templates/wiki/page_edit.html @@ -14,7 +14,7 @@
- +
{{ rst }}
@@ -42,6 +42,8 @@ let response = JSON.parse(this.responseText); if (response.error !== undefined) { + document.getElementById("submit").disabled = true; + if (response.error_lines !== undefined) { editor.session.setAnnotations(response.error_lines); document.getElementById("preview-div").innerHTML ="

Error - see editor margin

"; @@ -50,7 +52,9 @@ document.getElementById("preview-div").innerHTML ="

Error

" + response.error + "

"; } } else { + document.getElementById("submit").disabled = false; document.getElementById("preview-div").innerHTML = response.data; + editor.session.setAnnotations([]); } }); -- cgit v1.2.3 From 36f6d3a53906ba233aedc35a11a6891f00a02547 Mon Sep 17 00:00:00 2001 From: Gareth Coles Date: Tue, 10 Apr 2018 13:33:26 +0100 Subject: [Wiki] Improve editor preview Also, Flake8. --- pysite/rst/roles.py | 2 +- templates/wiki/page_edit.html | 14 ++++++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/pysite/rst/roles.py b/pysite/rst/roles.py index 09c4d373..414832df 100644 --- a/pysite/rst/roles.py +++ b/pysite/rst/roles.py @@ -48,7 +48,7 @@ def icon_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner def url_for_role(_role: str, rawtext: str, text: str, lineno: int, inliner: Inliner, - options: dict = None, _content: dict = None): + options: dict = None, _content: dict = None): if options is None: options = {} diff --git a/templates/wiki/page_edit.html b/templates/wiki/page_edit.html index 661e6b36..b797577d 100644 --- a/templates/wiki/page_edit.html +++ b/templates/wiki/page_edit.html @@ -24,10 +24,12 @@ -

Preview

+
+

{{ title }}

-
- {{ preview | safe }} +
+ {{ preview | safe }} +
{% endblock %} \ No newline at end of file -- cgit v1.2.3