Browse Source

Added bbcode as markup language

sh4nks 11 years ago
parent
commit
3bec32768b

+ 3 - 3
README.md

@@ -8,10 +8,10 @@ using the micro framework Flask.
 
 * A Bulletin Board like FluxBB, DjangoBB in Flask
 * Private Messages
-* **TODO:** Markdown and/or BBCode support
-* **TODO:** Group based permissions
+* Admin Interface
+* Group based permissions
+* BBCode support
 * **TODO:** Themes
-* **TODO:** Admin Interface
 
 
 ## DEPENDENCIES

+ 2 - 1
flaskbb/app.py

@@ -33,7 +33,7 @@ from flaskbb.extensions import db, login_manager, mail, cache
 
 from flaskbb.template_filters import (format_date, time_since, is_online,
                                       edit_post, delete_post, delete_topic,
-                                      post_reply, crop_title)
+                                      post_reply, crop_title, render_markup)
 
 DEFAULT_BLUEPRINTS = (
     (forum, ""),
@@ -133,6 +133,7 @@ def configure_template_filters(app):
     """
     Configures the template filters
     """
+    app.jinja_env.filters['markup'] = render_markup
     app.jinja_env.filters['format_date'] = format_date
     app.jinja_env.filters['time_since'] = time_since
     app.jinja_env.filters['is_online'] = is_online

+ 1 - 2
flaskbb/forum/models.py

@@ -218,8 +218,7 @@ class Forum(db.Model):
     def remove_moderator(self, user_id):
         self.moderators.remove(user_id)
 
-    def save(self, category):
-        self.category_id = category.id
+    def save(self):
         db.session.add(self)
         db.session.commit()
         return self

+ 59 - 0
flaskbb/static/css/code.css

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

+ 6 - 0
flaskbb/template_filters.py

@@ -1,4 +1,6 @@
 from flask import current_app
+from postmarkup import render_bbcode
+
 from flaskbb.helpers import time_diff, time_delta_format, check_perm
 
 
@@ -9,6 +11,10 @@ def format_date(value, format='%Y-%m-%d'):
     return value.strftime(format)
 
 
+def render_markup(text):
+    return render_bbcode(text)
+
+
 def time_since(value):
     return time_delta_format(value)
 

+ 4 - 1
flaskbb/templates/forum/category_layout.html

@@ -24,7 +24,10 @@
                 <strong><a href="{{ url_for('forum.view_forum', forum_id=forum.id) }}">{{ forum.title }}</a></strong>
 
                 <div class="forum-description">
-                    {{ forum.description }}<br />
+                    {% autoescape false %}
+                    {{ forum.description|markup }}
+                    {% endautoescape %}
+                    <br />
                     <!--
                     <strong>Sub Forums:</strong> <a href="#" title="">Subforum 1</a>, <a href="#" title="">Subforum 2</a>
                      -->

+ 4 - 2
flaskbb/templates/forum/topic.html

@@ -83,13 +83,15 @@
         <tr>
             <td>
                 <div class="post_body" id="pid{{ post.id }}">
-                    {{ post.content }}
+                {% autoescape false %}
+                    {{ post.content|markup }}
                     <!-- Signaure Begin -->
                     {% if post.user.signature %}
                     <hr>
-                    {{ post.user.signature }}
+                    {{ post.user.signature|markup }}
                     {% endif %}
                     <!-- Signaure End -->
+                {% endautoescape %}
                 </div>
             </td>
         </tr>

+ 1 - 0
flaskbb/templates/layout.html

@@ -11,6 +11,7 @@
 
         {% block css %}
         <link rel="stylesheet" href="{{ url_for('static', filename='css/bootstrap.min.css') }}">
+        <link rel="stylesheet" href="{{ url_for('static', filename='css/code.css') }}">
         <link rel="stylesheet" href="{{ url_for('static', filename='css/flaskbb.css') }}">
         {% endblock %}
     </head>

+ 7 - 1
flaskbb/templates/pms/view_message.html

@@ -35,7 +35,13 @@
         <tr>
             <td>
                 <div class="message_body" id="mid{{ message.id }}">
-                    {% if message.message %}{{ message.message }}{% else %}(No Message){% endif %}
+                    {% if message.message %}
+                        {% autoescape false %}
+                        {{ message.message|markup }}
+                        {% endautoescape %}
+                    {% else %}
+                        (No Message)
+                    {% endif %}
                 </div>
             </td>
         </tr>

+ 2 - 2
flaskbb/templates/user/change_user_details.html

@@ -10,8 +10,8 @@
     {{ horizontal_field(form.location)}}
     {{ horizontal_field(form.website)}}
     {{ horizontal_field(form.avatar)}}
-    {{ horizontal_field(form.signature)}}
-    {{ horizontal_field(form.notes)}}
+    {{ horizontal_field(form.signature, rows=5, div_class="col-lg-9")}}
+    {{ horizontal_field(form.notes, rows=12, div_class="col-lg-9")}}
 
     <div class="form-group">
         <div class="col-lg-offset-3 col-lg-9">

+ 2 - 0
flaskbb/templates/user/profile.html

@@ -30,7 +30,9 @@
 
           <td>
             {% if user.notes %}
+                {% autoescape false %}
                 {{ user.notes }}
+                {% endautoescape %}
             {% else %}
                 User has not added any notes about him.
             {% endif %}

+ 1 - 1
manage.py

@@ -173,7 +173,7 @@ def createall():
         username = "test%s" % u
         email = "test%s@example.org" % u
         user = User(username=username, password="test", email=email)
-        user.groups.append(groups[u-1])
+        user.secondary_groups.append(groups[u-1])
         user.primary_group_id = u
         db.session.add(user)
 

+ 2 - 0
requirements.txt

@@ -8,10 +8,12 @@ Flask-Script==0.6.2
 Flask-Themes2==0.1.2
 Flask-WTF==0.9.3
 Jinja2==2.7.1
+Pygments==1.6
 MarkupSafe==0.18
 SQLAlchemy==0.8.2
 WTForms==1.0.5
 Werkzeug==0.9.4
 blinker==1.3
 itsdangerous==0.23
+postmarkup==1.2.0
 wsgiref==0.1.2