]> git.lizzy.rs Git - cheatdb.git/commitdiff
Add descriptions to tags, and show in multiselect
authorrubenwardy <rw@rubenwardy.com>
Fri, 17 Jul 2020 21:08:34 +0000 (22:08 +0100)
committerrubenwardy <rw@rubenwardy.com>
Fri, 17 Jul 2020 21:08:34 +0000 (22:08 +0100)
app/blueprints/admin/tagseditor.py
app/blueprints/packages/packages.py
app/models.py
app/public/static/tagselector.js
app/templates/admin/tags/edit.html
app/templates/admin/tags/list.html
app/templates/macros/forms.html
migrations/versions/3a24fc02365e_.py [new file with mode: 0644]

index 39d69e89f895ee194bb4ea9f98169352ff63affe..3d351ee21fb5209d81d9e9f20e4b7270406344a2 100644 (file)
@@ -33,9 +33,10 @@ def tag_list():
        return render_template("admin/tags/list.html", tags=Tag.query.order_by(db.asc(Tag.title)).all())
 
 class TagForm(FlaskForm):
-       title    = StringField("Title", [InputRequired(), Length(3,100)])
-       name     = StringField("Name", [Optional(), Length(1, 20), Regexp("^[a-z0-9_]", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
-       submit   = SubmitField("Save")
+       title       = StringField("Title", [InputRequired(), Length(3,100)])
+       description = TextAreaField("Description", [InputRequired(), Length(0, 500)])
+       name        = StringField("Name", [Optional(), Length(1, 20), Regexp("^[a-z0-9_]", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
+       submit      = SubmitField("Save")
 
 @bp.route("/tags/new/", methods=["GET", "POST"])
 @bp.route("/tags/<name>/edit/", methods=["GET", "POST"])
@@ -54,6 +55,7 @@ def create_edit_tag(name=None):
        if request.method == "POST" and form.validate():
                if tag is None:
                        tag = Tag(form.title.data)
+                       tag.description = form.description.data
                        db.session.add(tag)
                else:
                        form.populate_obj(tag)
index 5a775b2c8aaed9d23b27c4a9849f83e0426b4f6d..3b9ca4af1f1114bf565667584067c7afff7861fc 100644 (file)
@@ -197,6 +197,12 @@ def download(package):
                return redirect(release.getDownloadURL(), code=302)
 
 
+def makeLabel(obj):
+       if obj.description:
+               return "{}: {}".format(obj.title, obj.description)
+       else:
+               return obj.title
+
 class PackageForm(FlaskForm):
        name             = StringField("Name (Technical)", [InputRequired(), Length(1, 100), Regexp("^[a-z0-9_]+$", 0, "Lower case letters (a-z), digits (0-9), and underscores (_) only")])
        title            = StringField("Title (Human-readable)", [InputRequired(), Length(3, 100)])
@@ -206,8 +212,8 @@ class PackageForm(FlaskForm):
        license          = QuerySelectField("License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
        media_license    = QuerySelectField("Media License", [DataRequired()], allow_blank=True, query_factory=lambda: License.query.order_by(db.asc(License.name)), get_pk=lambda a: a.id, get_label=lambda a: a.name)
        provides_str     = StringField("Provides (mods included in package)", [Optional()])
-       tags             = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
-       content_warnings = QuerySelectMultipleField('Content Warnings', query_factory=lambda: ContentWarning.query.order_by(db.asc(ContentWarning.name)), get_pk=lambda a: a.id, get_label=lambda a: a.title)
+       tags             = QuerySelectMultipleField('Tags', query_factory=lambda: Tag.query.order_by(db.asc(Tag.name)), get_pk=lambda a: a.id, get_label=makeLabel)
+       content_warnings = QuerySelectMultipleField('Content Warnings', query_factory=lambda: ContentWarning.query.order_by(db.asc(ContentWarning.name)), get_pk=lambda a: a.id, get_label=makeLabel)
        harddep_str      = StringField("Hard Dependencies", [Optional()])
        softdep_str      = StringField("Soft Dependencies", [Optional()])
        repo             = StringField("VCS Repository URL", [Optional(), URL()], filters = [lambda x: x or None])
index b2dbcc044f5e08ac0e66519d1bd009a74382ec73..6b7d067257fc52b0d5b609dbccf01a4a15f1211d 100644 (file)
@@ -840,11 +840,11 @@ class ContentWarning(db.Model):
                self.name = regex.sub("", self.title.lower().replace(" ", "_"))
 
 
-
 class Tag(db.Model):
        id              = db.Column(db.Integer, primary_key=True)
        name            = db.Column(db.String(100), unique=True, nullable=False)
        title           = db.Column(db.String(100), nullable=False)
+       description     = db.Column(db.String(500), nullable=True, default=None)
        backgroundColor = db.Column(db.String(6), nullable=False)
        textColor       = db.Column(db.String(6), nullable=False)
        views           = db.Column(db.Integer, nullable=False, default=0)
index f09941512713011d6f46cbe16f1d8b06159638a4..566f88a6cde424adb5351359d7411aa0ed69ed64 100644 (file)
                                });
 
                        function addTag(id, text) {
+                               const idx = text.indexOf(':');
+                               if (idx > 0) {
+                                       text = text.substr(0, idx);
+                               }
+
                                $('<span class="badge badge-pill badge-primary"/>')
                                        .text(text + ' ')
                                        .data("id", id)
index f25312e541e5642a1daaf1946b83ca81a73447d3..bb8d46254dc816ae3dfc2a85115acd3aaf1c0c74 100644 (file)
@@ -17,6 +17,7 @@
                {{ form.hidden_tag() }}
 
                {{ render_field(form.title) }}
+               {{ render_field(form.description) }}
                {% if tag %}
                        {{ render_field(form.name) }}
                {% endif %}
index 8db66ca8b8d49ddb5c7e59a3afd7c57610536024..14baf02ed58e7a7f38e71b5c615fb1b9a6ede760 100644 (file)
        </p>
 
        <div class="list-group">
-
                <div class="list-group-item">
                        <div class="row text-muted">
-                               <div class="col-sm">
+                               <div class="col-sm-2">
                                        {{ _("Name") }}
                                </div>
 
+                               <div class="col-sm">
+                                       {{ _("Description") }}
+                               </div>
+
                                <span class="col-sm-1 text-center">
                                        {{ _("Views") }}
                                </span>
                        <a class="list-group-item list-group-item-action"
                                        href="{{ url_for('admin.create_edit_tag', name=t.name) }}">
                                <div class="row">
-                                       <div class="col-sm">
+                                       <div class="col-sm-2">
                                                {{ t.title }}
                                        </div>
 
+                                       <div class="col-sm">
+                                               {{ t.description or "" }}
+                                       </div>
+
                                        <div class="col-sm-1 text-center">
                                                {{ t.views }}
                                        </div>
index 9c56a4842e6977b495d7cca4b9378c8cd0dff09c..02c366b2407e5164293dc6c48205700a06d0de30 100644 (file)
@@ -16,7 +16,7 @@
 {% macro form_scripts() -%}
        <link href="/static/jquery-ui.min.css" rel="stylesheet" type="text/css">
        <script src="/static/jquery-ui.min.js"></script>
-       <script src="/static/tagselector.js?v=2"></script>
+       <script src="/static/tagselector.js?v=3"></script>
 {% endmacro %}
 
 {% macro package_lists() -%}
diff --git a/migrations/versions/3a24fc02365e_.py b/migrations/versions/3a24fc02365e_.py
new file mode 100644 (file)
index 0000000..4e85f9b
--- /dev/null
@@ -0,0 +1,28 @@
+"""empty message
+
+Revision ID: 3a24fc02365e
+Revises: b370c3eb4227
+Create Date: 2020-07-17 20:58:31.130449
+
+"""
+from alembic import op
+import sqlalchemy as sa
+
+
+# revision identifiers, used by Alembic.
+revision = '3a24fc02365e'
+down_revision = 'b370c3eb4227'
+branch_labels = None
+depends_on = None
+
+
+def upgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.add_column('tag', sa.Column('description', sa.String(length=500), nullable=True, server_default=None))
+    # ### end Alembic commands ###
+
+
+def downgrade():
+    # ### commands auto generated by Alembic - please adjust! ###
+    op.drop_column('tag', 'description')
+    # ### end Alembic commands ###