changeset 657:c1a94e1beb9d

admin: Show a more classic blog post listing in FoodTruck.
author Ludovic Chabant <ludovic@chabant.com>
date Thu, 25 Feb 2016 22:30:16 -0800
parents dba53f0f7671
children a920b2ab1f31
files bower.json foodtruck/assets/js/foodtruck.js foodtruck/assets/sass/foodtruck/_base.scss foodtruck/templates/list_source.html foodtruck/views/sources.py foodtruck/web.py gulpfile.js
diffstat 7 files changed, 50 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/bower.json	Mon Feb 22 22:44:39 2016 -0800
+++ b/bower.json	Thu Feb 25 22:30:16 2016 -0800
@@ -15,7 +15,7 @@
     "bootstrap": "~3.3.5",
     "bootstrap-sass": "~3.3.5",
     "font-awesome": "fontawesome#~4.5.0",
-    "Ionicons": "ionicons#~2.0.1"
+    "Ionicons": "ionicons#~2.0.1",
+    "jquery-timeago": "^1.5.2"
   }
 }
-
--- a/foodtruck/assets/js/foodtruck.js	Mon Feb 22 22:44:39 2016 -0800
+++ b/foodtruck/assets/js/foodtruck.js	Thu Feb 25 22:30:16 2016 -0800
@@ -1,5 +1,7 @@
 
 $(document).ready(function() {
+    $("time.timeago").timeago();
+
     $('.ft-nav-toggle').click(function() {
         $('.ft-nav-container').toggleClass('ft-nav-enabled');
         $('.ft-nav').toggleClass('ft-nav-enabled');
--- a/foodtruck/assets/sass/foodtruck/_base.scss	Mon Feb 22 22:44:39 2016 -0800
+++ b/foodtruck/assets/sass/foodtruck/_base.scss	Thu Feb 25 22:30:16 2016 -0800
@@ -28,6 +28,10 @@
     margin-bottom: 1em;
 }
 
+time {
+    border-bottom: 1px dotted $ft-color-gray-darker;
+}
+
 .ft-login {
     padding: 1em;
     margin: 2em 0;
--- a/foodtruck/templates/list_source.html	Mon Feb 22 22:44:39 2016 -0800
+++ b/foodtruck/templates/list_source.html	Thu Feb 25 22:30:16 2016 -0800
@@ -1,16 +1,30 @@
 {% extends 'layouts/default.html' %}
 
 {% block content %}
-<div class="row">
-    <div class="col-md-12">
+<table class="table">
+    <thead>
+        <tr>
+            <th>When</th>
+            <th>Title</th>
+            <th>Who</th>
+            <th>Category</th>
+            <th>Tags</th>
+        </tr>
+    </thead>
+    <tbody>
         {% for p in pages %}
-        <div>
-            <h3><a href="{{p.url}}">{{p.title}}</a></h3>
-            <p>{{p.text}}</p>
-        </div>
+        <tr>
+            <td><time class="timeago" datetime="{{p.timestamp|iso8601}}">{{p.timestamp|datetime}}</time></td>
+            <td><a href="{{p.url}}">{{p.title}}</a></td>
+            <td>{{p.author}}</td>
+            <td>{{p.category}}</td>
+            <td>{{p.tags|join(', ')}}</td>
+        </tr>
         {% endfor %}
-    </div>
+    </tbody>
+</table>
 
+<div class="row">
     {% if pagination.prev_page or pagination.next_page %}
     <div class="col-sm-6 col-sm-offset-3">
         <div class="ft-pagination">
--- a/foodtruck/views/sources.py	Mon Feb 22 22:44:39 2016 -0800
+++ b/foodtruck/views/sources.py	Thu Feb 25 22:30:16 2016 -0800
@@ -16,16 +16,21 @@
         abort(400)
 
     i = 0
+    default_author = site.config.get('site/author')
     data = {'title': "List %s" % source_name}
     data['pages'] = []
     pgn = Paginator(None, source, page_num=page_num, items_per_page=20)
     for p in pgn.items:
         page_data = {
                 'title': p['title'],
+                'author': p.get('author', default_author),
                 'slug': p['slug'],
+                'timestamp': p['timestamp'],
+                'tags': p.get('tags', []),
+                'category': p.get('category'),
                 'source': source_name,
-                'url': url_for('edit_page', slug=p['slug']),
-                'text': text_preview(html_to_text(p['content']), length=300)}
+                'url': url_for('edit_page', slug=p['slug'])
+                }
         data['pages'].append(page_data)
 
     prev_page_url = None
--- a/foodtruck/web.py	Mon Feb 22 22:44:39 2016 -0800
+++ b/foodtruck/web.py	Thu Feb 25 22:30:16 2016 -0800
@@ -1,5 +1,6 @@
 import os
 import os.path
+import time
 import logging
 from flask import Flask, g, request, render_template
 from .configuration import (
@@ -162,6 +163,18 @@
 app.bcrypt = Bcrypt(app)
 
 
+@app.template_filter('iso8601')
+def timestamp_to_iso8601(t):
+    t = time.localtime(t)
+    return time.strftime('%Y-%m-%dT%H:%M:%SZ', t)
+
+@app.template_filter('datetime')
+def timestamp_to_datetime(t, fmt=None):
+    fmt = fmt or '%x'
+    t = time.localtime(t)
+    return time.strftime(fmt, t)
+
+
 import foodtruck.views.create  # NOQA
 import foodtruck.views.dashboard  # NOQA
 import foodtruck.views.edit  # NOQA
--- a/gulpfile.js	Mon Feb 22 22:44:39 2016 -0800
+++ b/gulpfile.js	Thu Feb 25 22:30:16 2016 -0800
@@ -39,6 +39,7 @@
             'bower_components/bootstrap-sass/assets/javascripts/bootstrap/modal.js',
             'bower_components/bootstrap-sass/assets/javascripts/bootstrap/tooltip.js',
             'bower_components/bootstrap-sass/assets/javascripts/bootstrap/transition.js',
+            'bower_components/jquery-timeago/jquery.timeago.js',
             'foodtruck/assets/js/**/*.js'
             ])
         .pipe(sourcemaps.init())