summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYuval Adam <yuv.adm@gmail.com>2014-03-09 14:05:05 +0200
committerYuval Adam <yuv.adm@gmail.com>2014-03-09 14:05:05 +0200
commit98ed8bcf5bcc120be004dfbe2cc8fc9b6b42a00f (patch)
tree4dd6f2ef076c8a2098233d341e6764030c4dad45
parent1844d0d2b4bb4ef6e3d42beae5fbc6d1c28ef048 (diff)
Add article starring and some article page adjustments
-rw-r--r--newsdiff/core/migrations/0009_auto__add_field_haaretzarticle_starred.py100
-rw-r--r--newsdiff/core/models.py1
-rw-r--r--newsdiff/core/views.py16
-rw-r--r--newsdiff/templates/article.html5
4 files changed, 118 insertions, 4 deletions
diff --git a/newsdiff/core/migrations/0009_auto__add_field_haaretzarticle_starred.py b/newsdiff/core/migrations/0009_auto__add_field_haaretzarticle_starred.py
new file mode 100644
index 0000000..d8b41f8
--- /dev/null
+++ b/newsdiff/core/migrations/0009_auto__add_field_haaretzarticle_starred.py
@@ -0,0 +1,100 @@
+# -*- coding: utf-8 -*-
+from south.utils import datetime_utils as datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ # Adding field 'HaaretzArticle.starred'
+ db.add_column(u'core_haaretzarticle', 'starred',
+ self.gf('django.db.models.fields.BooleanField')(default=False),
+ keep_default=False)
+
+
+ def backwards(self, orm):
+ # Deleting field 'HaaretzArticle.starred'
+ db.delete_column(u'core_haaretzarticle', 'starred')
+
+
+ models = {
+ u'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': u"orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ u'auth.permission': {
+ 'Meta': {'ordering': "(u'content_type__app_label', u'content_type__model', u'codename')", 'unique_together': "((u'content_type', u'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': u"orm['contenttypes.ContentType']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ u'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ },
+ u'core.haaretzarticle': {
+ 'Meta': {'object_name': 'HaaretzArticle'},
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '120'}),
+ 'date': ('django.db.models.fields.DateTimeField', [], {}),
+ 'haaretz_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '12', 'db_index': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'starred': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'subtitle': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'url': ('django.db.models.fields.CharField', [], {'max_length': '250'})
+ },
+ u'core.haaretzimage': {
+ 'Meta': {'object_name': 'HaaretzImage'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': u"orm['core.HaaretzArticle']"}),
+ 'caption': ('django.db.models.fields.CharField', [], {'max_length': '140', 'null': 'True', 'blank': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'origin_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'})
+ },
+ u'core.newsdiffuser': {
+ 'Meta': {'object_name': 'NewsDiffUser'},
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Group']"}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'symmetrical': 'False', 'related_name': "u'user_set'", 'blank': 'True', 'to': u"orm['auth.Permission']"}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
+ },
+ u'core.ynetarticle': {
+ 'Meta': {'object_name': 'YnetArticle'},
+ 'author': ('django.db.models.fields.CharField', [], {'max_length': '60'}),
+ 'date': ('django.db.models.fields.DateTimeField', [], {}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'subtitle': ('django.db.models.fields.CharField', [], {'max_length': '1000', 'null': 'True', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '200'}),
+ 'url': ('django.db.models.fields.CharField', [], {'max_length': '250'}),
+ 'ynet_id': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '9', 'db_index': 'True'})
+ },
+ u'core.ynetimage': {
+ 'Meta': {'object_name': 'YnetImage'},
+ 'article': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'images'", 'to': u"orm['core.YnetArticle']"}),
+ 'caption': ('django.db.models.fields.CharField', [], {'max_length': '140', 'null': 'True', 'blank': 'True'}),
+ u'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'image': ('django.db.models.fields.files.ImageField', [], {'max_length': '100'}),
+ 'origin_url': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '250'})
+ }
+ }
+
+ complete_apps = ['core'] \ No newline at end of file
diff --git a/newsdiff/core/models.py b/newsdiff/core/models.py
index 0323cb1..af898f8 100644
--- a/newsdiff/core/models.py
+++ b/newsdiff/core/models.py
@@ -17,6 +17,7 @@ class HaaretzArticle(models.Model):
author = models.CharField(max_length=120)
text = models.TextField()
date = models.DateTimeField()
+ starred = models.BooleanField(default=False)
def __unicode__(self):
return self.url
diff --git a/newsdiff/core/views.py b/newsdiff/core/views.py
index ad8f0cf..6c1d816 100644
--- a/newsdiff/core/views.py
+++ b/newsdiff/core/views.py
@@ -1,7 +1,7 @@
import reversion
from django.contrib.contenttypes.models import ContentType
-from django.http import Http404
+from django.http import Http404, HttpResponse
from django.views.generic import DetailView, ListView
from reversion.helpers import generate_patch_html
from reversion.models import Version
@@ -18,7 +18,9 @@ class ArticleView(DetailView):
versions = reversion.get_for_object(self.object)
version_diffs = [(v1, v2) for v1, v2 in zip(versions, versions[1:])]
return [{
- 'diff': generate_patch_html(v2, v1, 'text', cleanup='semantic'),
+ 'title_diff': generate_patch_html(v2, v1, 'title', cleanup='semantic'),
+ 'subtitle_diff': generate_patch_html(v2, v1, 'subtitle', cleanup='semantic'),
+ 'text_diff': generate_patch_html(v2, v1, 'text', cleanup='semantic'),
'date': v1.revision.date_created
} for (v1, v2) in version_diffs]
@@ -43,6 +45,14 @@ class HaaretzArticleView(ArticleView):
process_haaretz_article.delay('http://www.haaretz.co.il/{}'.format(id))
raise Http404('Attempting to fetch haaretz article')
+ def post(self, request, *args, **kwargs):
+ if self.request.user.is_authenticated() and request.POST.get('star'):
+ article = self.get_object()
+ article.starred = True
+ article.save()
+ return HttpResponse('starred')
+ return HttpResponse('ok')
+
class YnetArticleView(ArticleView):
model = YnetArticle
@@ -52,7 +62,7 @@ class YnetArticleView(ArticleView):
class ArticleListView(ListView):
context_object_name = 'articles'
template_name = 'articles.html'
- paginate_by = 50
+ paginate_by = 100
def _get_latest_revisions(self):
model_content_type = ContentType.objects.get_for_model(self.model)
diff --git a/newsdiff/templates/article.html b/newsdiff/templates/article.html
index 2fee9e5..2c2c7f0 100644
--- a/newsdiff/templates/article.html
+++ b/newsdiff/templates/article.html
@@ -8,6 +8,9 @@
<body dir="rtl">
<h1>{{ article.title }}</h1>
<h2>{{ article.subtitle }}</h2>
+ <h3>{{ article.author }}</h3>
+ <a href="{{ article.url }}">{{ article.url }}</a>
+ <form action="" method="POST">{% csrf_token %}<input type="hidden" name="star" value="star"></input><button type="submit">&#9733;</button></form>
{% for image in article.images.all %}
{% thumbnail image.image '150x120' as tim %}
<a href="{{ image.image.url }}"><img src="{{ tim.url }}"></a>
@@ -18,7 +21,7 @@
<h3>גרסאות קודמות</h3>
{% for diff in diffs %}
<hr>
- <pre style="white-space: pre-wrap;">{{ diff.date|date:'d/m/Y' }}<br/>{{ diff.date|date:'H:i' }}<br/><br/>{{ diff.diff|safe }}
+ <pre style="white-space: pre-wrap;">{{ diff.date|date:'d/m/Y' }}<br/>{{ diff.date|date:'H:i' }}<br/><br/>{{ diff.title_diff|safe }}<br/><br/>{{ diff.subtitle_diff|safe }}<br/><br/><br/>{{ diff.text_diff|safe }}
</pre>
{% endfor %}
</body>