roundabout,
created on Monday, 27 May 2024, 17:53:42 (1716832422),
received on Tuesday, 28 May 2024, 09:14:38 (1716887678)
Author identity: vlad <vlad.muntoiu@gmail.com>
a1601b17d6173c3f60152f074fe3b5f3da4199d4
app.py
@@ -415,7 +415,7 @@ def login():
category="info") user_check = User.query.filter_by(username=username).first() if user_check or email2: # make the honeypot look like a normal errorif user_check or email2: # make the honeypot look like a normal errorflask.flash( Markup( _(
doc/enduser/Formatting messages.md
markdown.py
@@ -12,10 +12,14 @@ def only_chars(string, chars):
inline_regex = r""" (?P<imageFlag>!?) \[ (?P<urlText>[^\[\]]*) \] \((?P<urlDestination>[^\(\)]*)\) # hyperlink or media | <(?P<urlDestination2>[^<>]*)> # autolink |(?P<em>\*{1,7}) (?P<textEm>(?:\\\*|[^*])*) (?P=em) # emphasis with * not requiring space on either side | (?:^|\s)(?P<em2>_{1,7}) (?P<textEm2>(?:\\.|[^*])*) (?P=em2)(?=\s|$) # emphasis with _ requiring space on at least one side | [``] (?P<textCode>(?:\\[``]|[^``])*) [``] # inline code (2 backticks) |[`] (?P<textCode>(?:\\[`]|[^`])*) [`] # inline code | (?P<strike>~{2}) (?P<textStrike>(?:\\[~]|[^~])*) (~{2}) # strikethrough
@@ -287,6 +291,17 @@ def parse_line(source):
tokens.append(Image(i.group("urlText"), i.group("urlDestination"))) else: tokens.append(Link(i.group("urlText"), i.group("urlDestination"))) if i.group("urlDestination2"): if "://" not in i.group("urlDestination2"): url_text = i.group("urlDestination2").partition(":")[2] # remove tel, mailto, sms prefixes url_destination = i.group("urlDestination2") if url_destination.startswith("mailto:"): url_destination = url_destination.replace("@", "@") # prevent email harvesting url_text = url_text.replace("@", "@") # prevent protocol injection else: url_text = url_destination = i.group("urlDestination2") tokens.append(Link(url_text, url_destination))tokens.append(source[lookup:])
models.py
@@ -299,6 +299,7 @@ with (app.app_context()):
file = db.Column(db.String(256), nullable=True) line_number = db.Column(db.Integer, nullable=True) line_type = db.Column(db.SmallInteger, nullable=True, default=0, server_default="0") # 0 is deleted, 1 is modifiedstate = db.Column(db.SmallInteger, nullable=True, default=1) review = db.Column(db.SmallInteger, nullable=True, default=0)
@@ -323,8 +324,10 @@ with (app.app_context()):
self.message = message self.html = markdown.markdown2html(message).prettify() self.file = file self.line_number = line_numberself.pr_id = prself.line_number = int(line_number[1:]) self.line_type = int(line_number[0] == "+") if pr: self.pr = prrepo.last_comment_id += 1
requirements.txt
@@ -45,4 +45,5 @@ flask_sqlalchemy
flask_bcrypt flask_migrate flask_httpauth flask_babelflask_babel pygments
static/style.css
@@ -422,7 +422,7 @@ header {
overflow: auto; } .code-view :is(code, ins, del, x-codeline) {.code-view > :is(code, ins, del, x-codeline) {white-space: pre; font: inherit; color: inherit;
syntax_colouring.py
@@ -0,0 +1,76 @@
from pygments import highlight from pygments.style import Style from pygments import token from pygments.lexers import PythonLexer from pygments.formatters import HtmlFormatter from bs4 import BeautifulSoup class CustomStyle(Style): default_style = "" styles = { token.Text: "", token.Keyword: "bold #ff9800", token.Name: "", token.Operator: "", token.Name.Class: "#ffeb3b", token.Name.Function: "#be9ddb", token.Name.Builtin: "#ab47bc", token.Name.Attribute: "#4db6ac", token.Name.Constant: "italic #ef5350", token.Name.Decorator: "#bcaaa4", token.Name.Function.Magic: "#e040fb", token.Name.Label: "#ff4081", token.String: "#8bc34a", token.Number: "#42a5f5", token.Punctuation: "#ff9800", token.Comment: "italic #b0bec5", token.Generic: "", token.Escape: "#ff5722", token.String.Escape: "#ff5722", token.String.Regex: "#ffffff", token.Comment.Preproc: "#536dfe", token.Comment.Hashbang: "#536dfe", token.Error: "#f44336", token.Other: "", token.Whitespace: "", } code = """ ___all___ = ["hello_world"] def interesting_function(func: Callable) -> Callable: \"\"\"Print the function's result when called. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nullam nec nulla nec nulla laoreet fermentum. Integer id lacus ut odio interdum ultricies. \"\"\" def wrapper(*args, **kwargs): result = func(*args, **kwargs) # avoid double evaluation print(result) return result return wrapper @interesting_function def hello_world(): return "Hello, world!\\a" # a nice bell if __name__ == "__main__": hello_world() """ lexer = PythonLexer() formatter = HtmlFormatter(style="colorful") html_code = highlight(code, lexer, formatter) soup = BeautifulSoup(html_code, "html.parser") pre = soup.find("pre") lines = pre.decode_contents().splitlines() for line in lines: line_soup = BeautifulSoup(line, "html.parser") clean_line = line_soup.prettify() print(clean_line)
templates/repository/repo-commit.html
@@ -33,7 +33,7 @@
<article class="card"> <section class="card-main"> <h2>{{ file }}</h2> {% set vars = namespace(original_line=0, modified_line=0, hunk_started=false) %}{% set vars = namespace(original_line=0, modified_line=0, hunk_started=false, actual_line=0, line_type=0) %}{% for line in diff[file] %} {% if line.startswith("@@") %} {% if vars.hunk_started %}
@@ -47,28 +47,34 @@
<pre class="code-view"> {% elif vars.hunk_started %} {% if line.startswith("+") %} <button class="line-number" data-file="{{ file }}" data-line="{{ vars.modified_line }}">{{ vars.modified_line }} +</button><button class="line-number" data-file="{{ file }}" data-line="+{{ vars.modified_line }}">{{ vars.modified_line }} +</button><ins>{{ line[1:] }}</ins> {% set vars.actual_line = vars.modified_line %} {% set vars.line_type = 1 %}{% set vars.modified_line = vars.modified_line + 1 %} {% elif line.startswith("-") %} <button class="line-number" data-file="{{ file }}" data-line="{{ vars.original_line }}">{{ vars.original_line }} -</button><button class="line-number" data-file="{{ file }}" data-line="-{{ vars.original_line }}">{{ vars.original_line }} -</button><del>{{ line[1:] }}</del> {% set vars.actual_line = vars.original_line %} {% set vars.line_type = 0 %}{% set vars.original_line = vars.original_line + 1 %} {% elif not line.startswith("\\") %} {% if line %} <button class="line-number" data-file="{{ file }}" data-line="{{ vars.modified_line }}">{{ vars.modified_line }} </button><button class="line-number" data-file="{{ file }}" data-line="+{{ vars.modified_line }}">{{ vars.modified_line }} </button><x-codeline>{{ line[1:] }}</x-codeline> {% endif %} {% if not line.startswith("@@") %} {% set vars.actual_line = vars.modified_line %} {% set vars.line_type = 1 %}{% set vars.original_line = vars.original_line + 1 %} {% set vars.modified_line = vars.modified_line + 1 %} {% endif %} {% endif %} {% endif %} {% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.original_line, state=1).all() %}{% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=1).all() %}<div class="comment"> <article> {{ comment.text | safe }} {# this was generated by the markdown parser which escapes HML #}{{ comment.text | safe }} {# this was generated by the markdown parser which escapes HTML #}</article> <small> {% trans %}by{% endtrans %} <a href="/{{ comment.owner_name }}">{{ comment.owner.username }}</a>,
@@ -88,10 +94,10 @@
</x-buttonbox> </div> {% endfor %} {% if comment_query.filter_by(commit=data, file=file, line_number=vars.original_line, state=0).count() %}{% if comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).count() %}<details class="resolved-comments"> <summary>{% trans count=comment_query.filter_by(commit=data, file=file, line_number=vars.original_line, state=0).count() %}Resolved comments ({{ count }}){% endtrans %}</summary>{% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.original_line, state=0).all() %}<summary>{% trans count=comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).count() %}Resolved comments ({{ count }}){% endtrans %}</summary> {% for comment in comment_query.filter_by(commit=data, file=file, line_number=vars.actual_line, line_type=vars.line_type, state=0).all() %}<div class="comment"> {{ comment.text | safe }} {# this was generated by the markdown parser which escapes HML #} <x-buttonbox>
@@ -156,5 +162,6 @@
dialog.showModal(); }); }); document.querySelectorAll()</script> {% endblock %}