selected cites in admin
authorRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Mon, 23 Jan 2012 13:25:37 +0000 (14:25 +0100)
committerRadek Czajka <radoslaw.czajka@nowoczesnapolska.org.pl>
Mon, 23 Jan 2012 13:26:58 +0000 (14:26 +0100)
17 files changed:
apps/catalogue/templatetags/catalogue_tags.py
apps/social/admin.py [new file with mode: 0755]
apps/social/migrations/0001_initial.py [new file with mode: 0644]
apps/social/models.py
apps/social/templates/social/cite_promo.html [new file with mode: 0755]
apps/social/templatetags/social_tags.py
apps/social/utils.py
wolnelektury/settings.py
wolnelektury/static/css/base.css
wolnelektury/static/css/book_box.css
wolnelektury/static/css/cite.css [new file with mode: 0755]
wolnelektury/static/css/main_page.css
wolnelektury/templates/catalogue/book_wide.html
wolnelektury/templates/catalogue/chosen_fragment.html [deleted file]
wolnelektury/templates/catalogue/fragment_promo.html [new file with mode: 0755]
wolnelektury/templates/catalogue/tagged_object_list.html
wolnelektury/templates/main_page.html

index f6347e9..ba8139a 100644 (file)
@@ -323,8 +323,8 @@ def work_list(context, object_list):
     return locals()
 
 
     return locals()
 
 
-@register.inclusion_tag('catalogue/chosen_fragment.html')
-def promo_fragment(arg=None):
+@register.inclusion_tag('catalogue/fragment_promo.html')
+def fragment_promo(arg=None):
     if arg is None:
         fragments = Fragment.objects.all().order_by('?')
         fragment = fragments[0] if fragments.exists() else None
     if arg is None:
         fragments = Fragment.objects.all().order_by('?')
         fragment = fragments[0] if fragments.exists() else None
diff --git a/apps/social/admin.py b/apps/social/admin.py
new file mode 100755 (executable)
index 0000000..298638a
--- /dev/null
@@ -0,0 +1,10 @@
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
+from django.contrib import admin
+
+from social.models import Cite
+
+
+admin.site.register(Cite)
diff --git a/apps/social/migrations/0001_initial.py b/apps/social/migrations/0001_initial.py
new file mode 100644 (file)
index 0000000..09ccc7f
--- /dev/null
@@ -0,0 +1,64 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+    def forwards(self, orm):
+        
+        # Adding model 'Cite'
+        db.create_table('social_cite', (
+            ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+            ('book', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['catalogue.Book'])),
+            ('text', self.gf('django.db.models.fields.TextField')()),
+            ('vip', self.gf('django.db.models.fields.CharField')(max_length=128, null=True, blank=True)),
+            ('link', self.gf('django.db.models.fields.URLField')(max_length=200)),
+        ))
+        db.send_create_signal('social', ['Cite'])
+
+
+    def backwards(self, orm):
+        
+        # Deleting model 'Cite'
+        db.delete_table('social_cite')
+
+
+    models = {
+        'catalogue.book': {
+            'Meta': {'ordering': "('sort_key',)", 'object_name': 'Book'},
+            '_related_info': ('jsonfield.fields.JSONField', [], {'null': 'True', 'blank': 'True'}),
+            'changed_at': ('django.db.models.fields.DateTimeField', [], {'auto_now': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'common_slug': ('django.db.models.fields.SlugField', [], {'max_length': '120', 'db_index': 'True'}),
+            'cover': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'null': 'True', 'blank': 'True'}),
+            'created_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'db_index': 'True', 'blank': 'True'}),
+            'description': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+            'epub_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'extra_info': ('catalogue.fields.JSONField', [], {'default': "'{}'"}),
+            'gazeta_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}),
+            'html_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'language': ('django.db.models.fields.CharField', [], {'default': "'pol'", 'max_length': '3', 'db_index': 'True'}),
+            'mobi_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'parent': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'children'", 'null': 'True', 'to': "orm['catalogue.Book']"}),
+            'parent_number': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+            'pdf_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '120', 'db_index': 'True'}),
+            'sort_key': ('django.db.models.fields.CharField', [], {'max_length': '120', 'db_index': 'True'}),
+            'title': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+            'txt_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'}),
+            'wiki_link': ('django.db.models.fields.CharField', [], {'max_length': '240', 'blank': 'True'}),
+            'xml_file': ('django.db.models.fields.files.FileField', [], {'max_length': '100', 'blank': 'True'})
+        },
+        'social.cite': {
+            'Meta': {'object_name': 'Cite'},
+            'book': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['catalogue.Book']"}),
+            'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+            'link': ('django.db.models.fields.URLField', [], {'max_length': '200'}),
+            'text': ('django.db.models.fields.TextField', [], {}),
+            'vip': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True', 'blank': 'True'})
+        }
+    }
+
+    complete_apps = ['social']
index 71a8362..225477e 100644 (file)
@@ -1,3 +1,18 @@
+# -*- coding: utf-8 -*-
+# This file is part of Wolnelektury, licensed under GNU Affero GPLv3 or later.
+# Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
+#
 from django.db import models
 from django.db import models
+from django.utils.translation import ugettext_lazy as _
 
 
-# Create your models here.
+from catalogue.models import Book
+
+
+class Cite(models.Model):
+    book = models.ForeignKey(Book)
+    text = models.TextField(_('text'))
+    vip = models.CharField(_('VIP'), max_length=128, null=True, blank=True)
+    link = models.URLField(_('link'))
+
+    def get_absolute_url(self):
+        return self.link
diff --git a/apps/social/templates/social/cite_promo.html b/apps/social/templates/social/cite_promo.html
new file mode 100755 (executable)
index 0000000..5caaf1d
--- /dev/null
@@ -0,0 +1,18 @@
+{% load i18n %}
+
+{% if cite %}
+<a href="{{ cite.get_absolute_url }}" class="cite">
+    {% if cite.vip %}
+        <p class='vip'>{{ cite.vip }} {% trans "recommends" %}:</p>
+    {% endif %}
+    <blockquote class="cite-body">
+        {{ cite.text|linebreaks|safe }}
+    </blockquote>
+    <p class="source mono">{{ cite.book.pretty_title }}</p>
+</a>
+{% else %}
+    {% if fallback %}
+        {% load fragment_promo from catalogue_tags %}
+        {% fragment_promo ctx %}
+    {% endif %}
+{% endif %}
index 1b26d91..deac93d 100755 (executable)
@@ -3,8 +3,29 @@
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django import template
 # Copyright © Fundacja Nowoczesna Polska. See NOTICE for more information.
 #
 from django import template
-from social.utils import likes
+from catalogue.models import Book
+from social.models import Cite
+from social.utils import likes, cites_for_tags
 
 register = template.Library()
 
 register.filter('likes', likes)
 
 register = template.Library()
 
 register.filter('likes', likes)
+
+
+@register.inclusion_tag('social/cite_promo.html')
+def cite_promo(ctx=None, fallback=False):
+    """Choose"""
+    if ctx is None:
+        cites = Cite.objects.all()
+    elif isinstance(ctx, Book):
+        cites = ctx.cite_set.all()
+        if not cites.exists():
+            cites = cites_for_tags([ctx.book_tag()])
+    else:
+        cites = cites_for_tags(ctx)
+
+    return {
+        'cite': cites.order_by('?')[0] if cites.exists() else None,
+        'fallback': fallback,
+        'ctx': ctx,
+    }
\ No newline at end of file
index 96f0ca0..00cf43e 100755 (executable)
@@ -1,7 +1,8 @@
 from django.db.models import Q
 from django.db.models import Q
-from catalogue.models import Tag
+from catalogue.models import Book, Tag
 from catalogue import utils
 from catalogue.tasks import touch_tag
 from catalogue import utils
 from catalogue.tasks import touch_tag
+from social.models import Cite
 
 
 def likes(user, work):
 
 
 def likes(user, work):
@@ -33,3 +34,10 @@ def set_sets(user, work, sets):
 
     # delete empty tags
     Tag.objects.filter(category='set', user=user, book_count=0).delete()
 
     # delete empty tags
     Tag.objects.filter(category='set', user=user, book_count=0).delete()
+
+
+def cites_for_tags(tags):
+    """Returns a QuerySet with all Cites for books with given tags."""
+    books = Book.tagged.with_all(tags).order_by().values_list('id', flat=True)
+    books = list(books)
+    return Cite.objects.filter(book__id__in=books)
index 01f5737..be5f32c 100644 (file)
@@ -190,6 +190,7 @@ COMPRESS_CSS = {
             'css/jquery.countdown.css', 
 
             'css/base.css',
             'css/jquery.countdown.css', 
 
             'css/base.css',
+            'css/cite.css',
             'css/header.css',
             'css/main_page.css',
             'css/dialogs.css',
             'css/header.css',
             'css/main_page.css',
             'css/dialogs.css',
index 556d926..a188285 100755 (executable)
@@ -136,22 +136,6 @@ h2 {
 }
 
 
 }
 
 
-a.cite {
-    display: block;
-    color: black;
-    background: white;
-    padding: 3em 2em .1em 8em;
-}
-.cite-body {
-    font-size: 1.8em;
-    line-height: 1.3em;
-}
-.cite p {
-    color: #444;
-    font-size: 1.1em;
-    margin-top: 1.6em;
-}
-
 .see-also {
     margin-left: 8em;
     float: left;
 .see-also {
     margin-left: 8em;
     float: left;
index aefb455..2df2fa4 100755 (executable)
@@ -314,35 +314,3 @@ ul.inline-items li {
 .snippets .anchor {
     display: none;
 }
 .snippets .anchor {
     display: none;
 }
-
-
-.cite blockquote p {
-    margin: 0;
-}
-
-.cite blockquote {
-    padding: 0;
-    margin: 0;
-}
-
-.book-wide-box .cite {
-    /* @ 18pt */
-    width: 100%; /*23.055em;*/
-    height: 7.222em;
-    background-color: #f7f7f7;
-    margin: 0;
-    position: relative;
-    top: -0.444em;
-    right: -0.555em;
-    vertical-align: center;
-}
-
-.abook-wide-box blockquote div.cite-text {
-    padding: 0.888em;
-}
-
-.abook-wide-box blockquote p.cite-more {
-    display: inline;
-    font-size: 0.611em;
-    float: right;
-}
diff --git a/wolnelektury/static/css/cite.css b/wolnelektury/static/css/cite.css
new file mode 100755 (executable)
index 0000000..5463297
--- /dev/null
@@ -0,0 +1,78 @@
+a.cite {
+    display: block;
+    color: black;
+    background: white;
+    padding: 3em 2em .1em 8em;
+}
+.cite-body {
+    font-size: 1.8em;
+    line-height: 1.3em;
+}
+.cite p {
+    color: #444;
+    font-size: 1.1em;
+    margin-top: 1.6em;
+}
+
+.cite .vip {
+    margin-top: 0;
+}
+
+
+
+
+#big-cite {
+    background-color: white;
+    /*padding: 10.75em 10em 8.5em 18.2em;*/
+    padding: 0;
+    margin: 0;
+}
+
+#big-cite .cite {
+    padding: 10.75em 10em 8.5em 18.2em;
+}
+
+#big-cite h2 {
+    margin: 0;
+    font-size: 1.1em;
+    color: #575c63;
+}
+
+
+#big-cite .cite-body {
+    margin: .05em;
+    font-size: 2.8em;
+    line-height: 1.2em;
+    color: #191919;
+}
+
+
+#big-cite .source {
+    color: #00a1ac;
+    margin: 0;
+    font-size: 1.1em;
+    margin: 1.1em 0.2em;
+}
+
+
+
+
+.cite blockquote p {
+    margin: 0;
+}
+
+.cite blockquote {
+    padding: 0;
+    margin: 0;
+}
+
+.book-wide-box .cite {
+    position: relative;
+    top: -0.8em;
+    right: -1em;
+    background-color: #f7f7f7;
+    vertical-align: center;
+    width: 39.5em;
+    margin: 0;
+    padding: 1em;
+}
index 545e8d6..b32655b 100755 (executable)
@@ -1,36 +1,3 @@
-#big-cite {
-    background-color: white;
-    padding: 10.75em 10em 8.5em 18.2em;
-    margin: 0;
-}
-
-#big-cite a {
-    color: black;
-    display: block;
-}
-
-#big-cite h2 {
-    margin: 0;
-    font-size: 1.1em;
-    color: #575c63;
-}
-
-
-#big-cite-text {
-    margin: .05em;
-    font-size: 2.8em;
-    line-height: 1.2em;
-    color: #191919;
-}
-
-
-#big-cite-source {
-    color: #00a1ac;
-    margin: 0;
-    font-size: 1.1em;
-    margin: 1.1em 0.2em;
-}
-
 
 #promo-box {
     float: right;
 
 #promo-box {
     float: right;
index da2754e..ebbea8c 100644 (file)
@@ -1,13 +1,13 @@
 {% extends "catalogue/book_short.html" %}
 {% load i18n %}
 {% extends "catalogue/book_short.html" %}
 {% load i18n %}
-{% load promo_fragment from catalogue_tags %}
+{% load cite_promo from social_tags %}
 
 {% block box-class %}book-wide-box{% endblock %}
 
 {% block right-column %}
 <div class="right-column">
     <div class="quote">
 
 {% block box-class %}book-wide-box{% endblock %}
 
 {% block right-column %}
 <div class="right-column">
     <div class="quote">
-  {% promo_fragment book %}
+  {% cite_promo book 1 %}
   </div>
 
   <div class="other-tools">
   </div>
 
   <div class="other-tools">
diff --git a/wolnelektury/templates/catalogue/chosen_fragment.html b/wolnelektury/templates/catalogue/chosen_fragment.html
deleted file mode 100755 (executable)
index a23638e..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-{% load i18n %}
-{% load removewholetags from catalogue_tags %}
-
-{% if fragment %}
-<a href="{{ fragment.get_absolute_url }}" class="cite">
-    <blockquote class="cite-body">
-        {{ fragment.text|removewholetags:"a"|truncatewords_html:15|safe }}
-    </blockquote>
-    <p class="mono">Adam Mickiewicz, Dziady część III</p>
-</a>
-{% endif %}
diff --git a/wolnelektury/templates/catalogue/fragment_promo.html b/wolnelektury/templates/catalogue/fragment_promo.html
new file mode 100755 (executable)
index 0000000..a3b01be
--- /dev/null
@@ -0,0 +1,10 @@
+{% load removewholetags from catalogue_tags %}
+
+{% if fragment %}
+<a href="{{ fragment.get_absolute_url }}" class="cite">
+    <blockquote class="cite-body">
+        {{ fragment.text|removewholetags:"a"|truncatewords_html:15|safe }}
+    </blockquote>
+    <p class="mono">{{ fragment.book.pretty_title }}</p>
+</a>
+{% endif %}
index 443276d..0777d84 100644 (file)
@@ -1,6 +1,6 @@
 {% extends "base.html" %}
 {% load i18n %}
 {% extends "base.html" %}
 {% load i18n %}
-{% load catalogue_tags switch_tag %}
+{% load catalogue_tags switch_tag social_tags %}
 
 {% block titleextra %}{% title_from_tags tags %}{% endblock %}
 
 
 {% block titleextra %}{% title_from_tags tags %}{% endblock %}
 
@@ -59,7 +59,7 @@
 
 
     <div class="right-column">
 
 
     <div class="right-column">
-        {% promo_fragment tags %}
+        {% cite_promo tags 1 %}
 
         <div class="see-also">
             <h2 class='mono'>{% trans "See also" %}:</h2>
 
         <div class="see-also">
             <h2 class='mono'>{% trans "See also" %}:</h2>
index 988bbb3..b490712 100755 (executable)
@@ -1,21 +1,14 @@
 {% extends "base.html" %}
 {% extends "base.html" %}
-{% load cache i18n catalogue_tags infopages_tags %}
+{% load cache i18n catalogue_tags infopages_tags social_tags %}
 
 
 {% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %}
 
 {% block body %}
 
 
 
 {% block title %}{% trans "Wolne Lektury internet library" %}{% endblock %}
 
 {% block body %}
 
-    <blockquote id="big-cite">
-        <a href='http://google.com'>
-        <h2 class="mono">Jarosław Lipszyc poleca:</h2>
-        <p id="big-cite-text">Dobranoc, obróć jeszcze raz na mnie oczęta,<br/>
-        (…) Daj mi pierś ucałować<br/>
-        Dobranoc, zapięta.</p>
-        <p class="mono" id="big-cite-source">Adam Mickiewicz, Dziady część III</p>
-        </a>
-    </blockquote>
-
+    <div id="big-cite">
+        {% cite_promo %}
+    </div>
 
     {% spaceless %}
 
 
     {% spaceless %}