Merge branch 'master' of github.com:Gluejar/regluit into goodreads
Conflicts: frontend/urls.pypull/1/head
|
@ -0,0 +1,174 @@
|
||||||
|
# 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 field 'UserProfile.facebook_id'
|
||||||
|
db.add_column('core_userprofile', 'facebook_id', self.gf('django.db.models.fields.PositiveIntegerField')(null=True), keep_default=False)
|
||||||
|
|
||||||
|
# Adding field 'UserProfile.librarything_id'
|
||||||
|
db.add_column('core_userprofile', 'librarything_id', self.gf('django.db.models.fields.CharField')(default='', max_length=15, blank=True), keep_default=False)
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
|
||||||
|
# Deleting field 'UserProfile.facebook_id'
|
||||||
|
db.delete_column('core_userprofile', 'facebook_id')
|
||||||
|
|
||||||
|
# Deleting field 'UserProfile.librarything_id'
|
||||||
|
db.delete_column('core_userprofile', 'librarything_id')
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
'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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'auth.permission': {
|
||||||
|
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
'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'}),
|
||||||
|
'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'})
|
||||||
|
},
|
||||||
|
'core.author': {
|
||||||
|
'Meta': {'object_name': 'Author'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authors'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.campaign': {
|
||||||
|
'Meta': {'object_name': 'Campaign'},
|
||||||
|
'activated': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'amazon_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'deadline': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True'}),
|
||||||
|
'paypal_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'suspended': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'suspended_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '14', 'decimal_places': '2'}),
|
||||||
|
'withdrawn': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'withdrawn_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'campaigns'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.claim': {
|
||||||
|
'Meta': {'object_name': 'Claim'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'rights_holder': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.RightsHolder']"}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'to': "orm['auth.User']"}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.ebook': {
|
||||||
|
'Meta': {'object_name': 'Ebook'},
|
||||||
|
'edition': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ebooks'", 'to': "orm['core.Edition']"}),
|
||||||
|
'format': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'rights': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
|
||||||
|
'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
|
||||||
|
},
|
||||||
|
'core.edition': {
|
||||||
|
'Meta': {'object_name': 'Edition'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True'}),
|
||||||
|
'googlebooks_id': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'isbn_10': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True'}),
|
||||||
|
'isbn_13': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True'}),
|
||||||
|
'language': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}),
|
||||||
|
'oclc': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True'}),
|
||||||
|
'public_domain': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'publication_date': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'publisher': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'editions'", 'null': 'True', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.premium': {
|
||||||
|
'Meta': {'object_name': 'Premium'},
|
||||||
|
'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '10', 'decimal_places': '0'}),
|
||||||
|
'campaign': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'premiums'", 'null': 'True', 'to': "orm['core.Campaign']"}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'type': ('django.db.models.fields.CharField', [], {'max_length': '2'})
|
||||||
|
},
|
||||||
|
'core.rightsholder': {
|
||||||
|
'Meta': {'object_name': 'RightsHolder'},
|
||||||
|
'email': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rights_holder'", 'to': "orm['auth.User']"}),
|
||||||
|
'rights_holder_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'core.subject': {
|
||||||
|
'Meta': {'object_name': 'Subject'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subjects'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'facebook_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
|
||||||
|
'goodreads_auth_secret': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_auth_token': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_link': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'home_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'librarything_id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}),
|
||||||
|
'tagline': ('django.db.models.fields.CharField', [], {'max_length': '140', 'blank': 'True'}),
|
||||||
|
'twitter_id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'core.wishlist': {
|
||||||
|
'Meta': {'object_name': 'Wishlist'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'wishlist'", 'unique': 'True', 'to': "orm['auth.User']"}),
|
||||||
|
'works': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'wishlists'", 'symmetrical': 'False', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.work': {
|
||||||
|
'Meta': {'object_name': 'Work'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'openlibrary_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['core']
|
|
@ -0,0 +1,169 @@
|
||||||
|
# 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 field 'UserProfile.pic_url'
|
||||||
|
db.add_column('core_userprofile', 'pic_url', self.gf('django.db.models.fields.URLField')(default='', max_length=200, blank=True), keep_default=False)
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
|
||||||
|
# Deleting field 'UserProfile.pic_url'
|
||||||
|
db.delete_column('core_userprofile', 'pic_url')
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
'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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'auth.permission': {
|
||||||
|
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
'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'}),
|
||||||
|
'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'})
|
||||||
|
},
|
||||||
|
'core.author': {
|
||||||
|
'Meta': {'object_name': 'Author'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authors'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.campaign': {
|
||||||
|
'Meta': {'object_name': 'Campaign'},
|
||||||
|
'activated': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'amazon_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'deadline': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True'}),
|
||||||
|
'paypal_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'suspended': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'suspended_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '14', 'decimal_places': '2'}),
|
||||||
|
'withdrawn': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'withdrawn_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'campaigns'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.claim': {
|
||||||
|
'Meta': {'object_name': 'Claim'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'rights_holder': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.RightsHolder']"}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'to': "orm['auth.User']"}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.ebook': {
|
||||||
|
'Meta': {'object_name': 'Ebook'},
|
||||||
|
'edition': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ebooks'", 'to': "orm['core.Edition']"}),
|
||||||
|
'format': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'rights': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
|
||||||
|
'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
|
||||||
|
},
|
||||||
|
'core.edition': {
|
||||||
|
'Meta': {'object_name': 'Edition'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True'}),
|
||||||
|
'googlebooks_id': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'isbn_10': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True'}),
|
||||||
|
'isbn_13': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True'}),
|
||||||
|
'language': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}),
|
||||||
|
'oclc': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True'}),
|
||||||
|
'public_domain': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'publication_date': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'publisher': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'editions'", 'null': 'True', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.premium': {
|
||||||
|
'Meta': {'object_name': 'Premium'},
|
||||||
|
'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '10', 'decimal_places': '0'}),
|
||||||
|
'campaign': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'premiums'", 'null': 'True', 'to': "orm['core.Campaign']"}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'type': ('django.db.models.fields.CharField', [], {'max_length': '2'})
|
||||||
|
},
|
||||||
|
'core.rightsholder': {
|
||||||
|
'Meta': {'object_name': 'RightsHolder'},
|
||||||
|
'email': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rights_holder'", 'to': "orm['auth.User']"}),
|
||||||
|
'rights_holder_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'core.subject': {
|
||||||
|
'Meta': {'object_name': 'Subject'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subjects'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'facebook_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
|
||||||
|
'goodreads_auth_secret': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_auth_token': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_link': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'home_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'librarything_id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}),
|
||||||
|
'pic_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||||
|
'tagline': ('django.db.models.fields.CharField', [], {'max_length': '140', 'blank': 'True'}),
|
||||||
|
'twitter_id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'core.wishlist': {
|
||||||
|
'Meta': {'object_name': 'Wishlist'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'wishlist'", 'unique': 'True', 'to': "orm['auth.User']"}),
|
||||||
|
'works': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'wishlists'", 'symmetrical': 'False', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.work': {
|
||||||
|
'Meta': {'object_name': 'Work'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'openlibrary_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['core']
|
|
@ -0,0 +1,169 @@
|
||||||
|
# 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):
|
||||||
|
|
||||||
|
# Changing field 'UserProfile.librarything_id'
|
||||||
|
db.alter_column('core_userprofile', 'librarything_id', self.gf('django.db.models.fields.CharField')(max_length=31))
|
||||||
|
|
||||||
|
|
||||||
|
def backwards(self, orm):
|
||||||
|
|
||||||
|
# Changing field 'UserProfile.librarything_id'
|
||||||
|
db.alter_column('core_userprofile', 'librarything_id', self.gf('django.db.models.fields.CharField')(max_length=15))
|
||||||
|
|
||||||
|
|
||||||
|
models = {
|
||||||
|
'auth.group': {
|
||||||
|
'Meta': {'object_name': 'Group'},
|
||||||
|
'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': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'auth.permission': {
|
||||||
|
'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
|
||||||
|
'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
|
||||||
|
'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
|
||||||
|
},
|
||||||
|
'auth.user': {
|
||||||
|
'Meta': {'object_name': 'User'},
|
||||||
|
'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', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'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', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
|
||||||
|
'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'})
|
||||||
|
},
|
||||||
|
'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'}),
|
||||||
|
'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'})
|
||||||
|
},
|
||||||
|
'core.author': {
|
||||||
|
'Meta': {'object_name': 'Author'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'authors'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.campaign': {
|
||||||
|
'Meta': {'object_name': 'Campaign'},
|
||||||
|
'activated': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'amazon_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'deadline': ('django.db.models.fields.DateTimeField', [], {}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500', 'null': 'True'}),
|
||||||
|
'paypal_receiver': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'suspended': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'suspended_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'target': ('django.db.models.fields.DecimalField', [], {'null': 'True', 'max_digits': '14', 'decimal_places': '2'}),
|
||||||
|
'withdrawn': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
|
||||||
|
'withdrawn_reason': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'campaigns'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.claim': {
|
||||||
|
'Meta': {'object_name': 'Claim'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'rights_holder': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.RightsHolder']"}),
|
||||||
|
'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user'", 'to': "orm['auth.User']"}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'claim'", 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.ebook': {
|
||||||
|
'Meta': {'object_name': 'Ebook'},
|
||||||
|
'edition': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'ebooks'", 'to': "orm['core.Edition']"}),
|
||||||
|
'format': ('django.db.models.fields.CharField', [], {'max_length': '25'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'provider': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'rights': ('django.db.models.fields.CharField', [], {'max_length': '255', 'null': 'True'}),
|
||||||
|
'url': ('django.db.models.fields.CharField', [], {'max_length': '1024'})
|
||||||
|
},
|
||||||
|
'core.edition': {
|
||||||
|
'Meta': {'object_name': 'Edition'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'default': "''", 'null': 'True'}),
|
||||||
|
'googlebooks_id': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'isbn_10': ('django.db.models.fields.CharField', [], {'max_length': '10', 'null': 'True'}),
|
||||||
|
'isbn_13': ('django.db.models.fields.CharField', [], {'max_length': '13', 'null': 'True'}),
|
||||||
|
'language': ('django.db.models.fields.CharField', [], {'max_length': '2', 'null': 'True'}),
|
||||||
|
'oclc': ('django.db.models.fields.CharField', [], {'max_length': '25', 'null': 'True'}),
|
||||||
|
'public_domain': ('django.db.models.fields.NullBooleanField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'publication_date': ('django.db.models.fields.CharField', [], {'max_length': '50'}),
|
||||||
|
'publisher': ('django.db.models.fields.CharField', [], {'max_length': '255'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'}),
|
||||||
|
'work': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'editions'", 'null': 'True', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.premium': {
|
||||||
|
'Meta': {'object_name': 'Premium'},
|
||||||
|
'amount': ('django.db.models.fields.DecimalField', [], {'max_digits': '10', 'decimal_places': '0'}),
|
||||||
|
'campaign': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'premiums'", 'null': 'True', 'to': "orm['core.Campaign']"}),
|
||||||
|
'description': ('django.db.models.fields.TextField', [], {'null': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'type': ('django.db.models.fields.CharField', [], {'max_length': '2'})
|
||||||
|
},
|
||||||
|
'core.rightsholder': {
|
||||||
|
'Meta': {'object_name': 'RightsHolder'},
|
||||||
|
'email': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'owner': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'rights_holder'", 'to': "orm['auth.User']"}),
|
||||||
|
'rights_holder_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'})
|
||||||
|
},
|
||||||
|
'core.subject': {
|
||||||
|
'Meta': {'object_name': 'Subject'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'editions': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'subjects'", 'symmetrical': 'False', 'to': "orm['core.Edition']"}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'name': ('django.db.models.fields.CharField', [], {'max_length': '500'})
|
||||||
|
},
|
||||||
|
'core.userprofile': {
|
||||||
|
'Meta': {'object_name': 'UserProfile'},
|
||||||
|
'facebook_id': ('django.db.models.fields.PositiveIntegerField', [], {'null': 'True'}),
|
||||||
|
'goodreads_auth_secret': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_auth_token': ('django.db.models.fields.TextField', [], {'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_id': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_link': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'goodreads_user_name': ('django.db.models.fields.CharField', [], {'max_length': '200', 'null': 'True', 'blank': 'True'}),
|
||||||
|
'home_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'librarything_id': ('django.db.models.fields.CharField', [], {'max_length': '31', 'blank': 'True'}),
|
||||||
|
'pic_url': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'}),
|
||||||
|
'tagline': ('django.db.models.fields.CharField', [], {'max_length': '140', 'blank': 'True'}),
|
||||||
|
'twitter_id': ('django.db.models.fields.CharField', [], {'max_length': '15', 'blank': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'profile'", 'unique': 'True', 'to': "orm['auth.User']"})
|
||||||
|
},
|
||||||
|
'core.wishlist': {
|
||||||
|
'Meta': {'object_name': 'Wishlist'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'user': ('django.db.models.fields.related.OneToOneField', [], {'related_name': "'wishlist'", 'unique': 'True', 'to': "orm['auth.User']"}),
|
||||||
|
'works': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'wishlists'", 'symmetrical': 'False', 'to': "orm['core.Work']"})
|
||||||
|
},
|
||||||
|
'core.work': {
|
||||||
|
'Meta': {'object_name': 'Work'},
|
||||||
|
'created': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
|
||||||
|
'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
|
||||||
|
'openlibrary_id': ('django.db.models.fields.CharField', [], {'max_length': '50', 'null': 'True'}),
|
||||||
|
'title': ('django.db.models.fields.CharField', [], {'max_length': '1000'})
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
complete_apps = ['core']
|
|
@ -233,6 +233,9 @@ class Work(models.Model):
|
||||||
return ebook
|
return ebook
|
||||||
return None
|
return None
|
||||||
|
|
||||||
|
def wished_by(self):
|
||||||
|
return User.objects.filter(wishlist__works__in=[self])
|
||||||
|
|
||||||
def __unicode__(self):
|
def __unicode__(self):
|
||||||
return self.title
|
return self.title
|
||||||
|
|
||||||
|
@ -301,8 +304,11 @@ class Wishlist(models.Model):
|
||||||
class UserProfile(models.Model):
|
class UserProfile(models.Model):
|
||||||
user = models.OneToOneField(User, related_name='profile')
|
user = models.OneToOneField(User, related_name='profile')
|
||||||
tagline = models.CharField(max_length=140, blank=True)
|
tagline = models.CharField(max_length=140, blank=True)
|
||||||
|
pic_url = models.URLField(blank=True)
|
||||||
home_url = models.URLField(blank=True)
|
home_url = models.URLField(blank=True)
|
||||||
twitter_id = models.CharField(max_length=15, blank=True)
|
twitter_id = models.CharField(max_length=15, blank=True)
|
||||||
|
facebook_id = models.PositiveIntegerField(null=True)
|
||||||
|
librarything_id = models.CharField(max_length=31, blank=True)
|
||||||
|
|
||||||
goodreads_user_id = models.CharField(max_length=32, null=True, blank=True)
|
goodreads_user_id = models.CharField(max_length=32, null=True, blank=True)
|
||||||
goodreads_user_name = models.CharField(max_length=200, null=True, blank=True)
|
goodreads_user_name = models.CharField(max_length=200, null=True, blank=True)
|
||||||
|
@ -312,3 +318,24 @@ class UserProfile(models.Model):
|
||||||
|
|
||||||
from regluit.core import signals
|
from regluit.core import signals
|
||||||
from regluit.payment.manager import PaymentManager
|
from regluit.payment.manager import PaymentManager
|
||||||
|
|
||||||
|
from social_auth.signals import pre_update
|
||||||
|
from social_auth.backends.facebook import FacebookBackend
|
||||||
|
from social_auth.backends.twitter import TwitterBackend
|
||||||
|
|
||||||
|
def facebook_extra_values(sender, user, response, details, **kwargs):
|
||||||
|
facebook_id = response.get('id')
|
||||||
|
user.profile.facebook_id = facebook_id
|
||||||
|
user.profile.pic_url = 'http://graph.facebook.com/' + facebook_id + '/picture'
|
||||||
|
user.profile.save()
|
||||||
|
return True
|
||||||
|
|
||||||
|
def twitter_extra_values(sender, user, response, details, **kwargs):
|
||||||
|
twitter_id = response.get('screen_name')
|
||||||
|
user.profile.twitter_id = twitter_id
|
||||||
|
user.profile.pic_url = user.social_auth.get(provider='twitter').extra_data['profile_image_url']
|
||||||
|
user.profile.save()
|
||||||
|
return True
|
||||||
|
|
||||||
|
pre_update.connect(facebook_extra_values, sender=FacebookBackend)
|
||||||
|
pre_update.connect(twitter_extra_values, sender=TwitterBackend)
|
||||||
|
|
|
@ -0,0 +1,25 @@
|
||||||
|
#put logic for retrieving userlists here
|
||||||
|
|
||||||
|
import random
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from regluit.core.models import Work
|
||||||
|
|
||||||
|
def other_users(user, how_many):
|
||||||
|
# do something more sophisitcated sometime later
|
||||||
|
count = User.objects.all().count()
|
||||||
|
if count <= how_many :
|
||||||
|
user_list = User.objects.all()[0: count]
|
||||||
|
else :
|
||||||
|
slice = random.random() * (count - how_many)
|
||||||
|
user_list = User.objects.all()[slice: slice+how_many]
|
||||||
|
return user_list
|
||||||
|
|
||||||
|
def supporting_users(work, how_many):
|
||||||
|
# do something more sophisitcated sometime later
|
||||||
|
count = work.wished_by().count()
|
||||||
|
if count <= how_many :
|
||||||
|
user_list = work.wished_by()[0: count]
|
||||||
|
else :
|
||||||
|
slice = random.random() * (count - how_many)
|
||||||
|
user_list = work.wished_by()[slice: slice+how_many]
|
||||||
|
return user_list
|
|
@ -1,10 +1,15 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
# put this in one of root's crontabs and it'll refresh and restart regluit
|
# this script is used by jenkins to remotely update a regluit instance
|
||||||
|
# for it to work the jenkins user's public ssh key needs to be in the
|
||||||
|
# authorized key for the machine running the regluit instance
|
||||||
|
# you can then put something like this in a post build configuration
|
||||||
|
# ssh ubuntu@please.unglueit.com "/opt/regluit/deploy/update-regluit"
|
||||||
|
|
||||||
cd /opt/regluit
|
cd /opt/regluit
|
||||||
sudo -u ubuntu -c "git pull"
|
sudo -u ubuntu /usr/bin/git pull
|
||||||
source ENV/bin/activate
|
source ENV/bin/activate
|
||||||
django-admin.py syncdb --migrate --settings regluit.settings.prod
|
django-admin.py syncdb --migrate --settings regluit.settings.prod
|
||||||
sudo /etc/init.d/apache2 restart
|
sudo /etc/init.d/apache2 restart
|
||||||
sudo /etc/init.d/celeryd restart
|
sudo /etc/init.d/celeryd restart
|
||||||
|
touch /opt/regluit/deploy/last-update
|
||||||
|
|
|
@ -1,23 +1,24 @@
|
||||||
from django import forms
|
from django import forms
|
||||||
from django.db import models
|
from django.db import models
|
||||||
from regluit.core.models import UserProfile
|
from regluit.core.models import UserProfile, RightsHolder
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.utils.translation import ugettext_lazy as _
|
from django.utils.translation import ugettext_lazy as _
|
||||||
from decimal import Decimal as D
|
from decimal import Decimal as D
|
||||||
|
|
||||||
|
class RightsHolderForm(forms.ModelForm):
|
||||||
|
class Meta:
|
||||||
|
model = RightsHolder
|
||||||
|
|
||||||
class ProfileForm(forms.ModelForm):
|
class ProfileForm(forms.ModelForm):
|
||||||
|
clear_facebook=forms.BooleanField(required=False)
|
||||||
|
clear_twitter=forms.BooleanField(required=False)
|
||||||
class Meta:
|
class Meta:
|
||||||
model = UserProfile
|
model = UserProfile
|
||||||
exclude = 'user'
|
fields = 'tagline', 'librarything_id', 'home_url', 'clear_facebook', 'clear_twitter'
|
||||||
widgets = {
|
widgets = {
|
||||||
'tagline': forms.Textarea(attrs={'cols': 35, 'rows': 4}),
|
'tagline': forms.Textarea(attrs={'cols': 35, 'rows': 4}),
|
||||||
'twitter_id': forms.TextInput(attrs={'label': 'Twitter Handle', 'maxlength': 16}),
|
|
||||||
}
|
}
|
||||||
|
|
||||||
def clean_twitter_id(self):
|
|
||||||
twitter_id=self.cleaned_data['twitter_id']
|
|
||||||
return twitter_id.lstrip('@')
|
|
||||||
|
|
||||||
class UserData(forms.Form):
|
class UserData(forms.Form):
|
||||||
username = forms.RegexField(
|
username = forms.RegexField(
|
||||||
label=_("New Username"),
|
label=_("New Username"),
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
{% extends "basedocumentation.html" %}
|
||||||
|
|
||||||
|
{% block doccontent %}
|
||||||
|
|
||||||
|
<h1>Admin Users Only</h1>
|
||||||
|
|
||||||
|
<p>This function is only available to Unglue.it administration.</p>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -3,6 +3,7 @@
|
||||||
{% url privacy as privacyurl %}
|
{% url privacy as privacyurl %}
|
||||||
{% url regluit.frontend.views.edit_user as editurl %}
|
{% url regluit.frontend.views.edit_user as editurl %}
|
||||||
{% url rightsholders as rhtoolsurl %}
|
{% url rightsholders as rhtoolsurl %}
|
||||||
|
{% url faq as faqurl %}
|
||||||
|
|
||||||
<html>
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
@ -41,7 +42,7 @@
|
||||||
<li class="first"><a href="{% url auth_login %}?next={% firstof request.path '/' %}"><span>Sign In</span></a></li>
|
<li class="first"><a href="{% url auth_login %}?next={% firstof request.path '/' %}"><span>Sign In</span></a></li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<li><a href="/stub/tour"><span>Tour</span></a></li>
|
<li><a href="/stub/tour"><span>Tour</span></a></li>
|
||||||
<li><a href="/stub/FAQ"><span>FAQs</span></a></li>
|
<li><a href="{{faqurl}}"><span>FAQs</span></a></li>
|
||||||
<li><a href="/stub/Help"><span>Help</span></a></li>
|
<li><a href="/stub/Help"><span>Help</span></a></li>
|
||||||
{% if not user.is_authenticated %}
|
{% if not user.is_authenticated %}
|
||||||
<li class="last"><a href="{% url registration_register %}"><span>sign up</span></a></li>
|
<li class="last"><a href="{% url registration_register %}"><span>sign up</span></a></li>
|
||||||
|
|
|
@ -17,7 +17,17 @@
|
||||||
<li class="parent">
|
<li class="parent">
|
||||||
<a href="#"><span>Ungluers</span></a>
|
<a href="#"><span>Ungluers</span></a>
|
||||||
<ul class="menu level2">
|
<ul class="menu level2">
|
||||||
<li class="first"><a href="/stub/list_of_ungluers"><span>List of ungluers</span></a></li>
|
{% for ungluer in ungluers %}
|
||||||
|
<li class="first"><a href="{% url supporter supporter_username=ungluer %}">
|
||||||
|
<span class="ungluer-pic">
|
||||||
|
{% if ungluer.profile.pic_url %}
|
||||||
|
<img src="{{ungluer.profile.pic_url}}" height="30" width="30" alt="{{ungluer}}" title="{{ungluer}}"/>
|
||||||
|
{% else %}
|
||||||
|
<img src="/static/images/header/avatar.png" height="30" width="30" alt="Generic Ungluer Avatar" />
|
||||||
|
{% endif %}
|
||||||
|
</span><span class="ungluer-name">{{ungluer}}</span>
|
||||||
|
</a></li>
|
||||||
|
{% endfor %}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -0,0 +1,18 @@
|
||||||
|
{% extends "basedocumentation.html" %}
|
||||||
|
{% block title %} FAQ {% endblock %}
|
||||||
|
{% block doccontent %}
|
||||||
|
|
||||||
|
<h1>FAQ</h1>
|
||||||
|
|
||||||
|
<h2>Ungluer FAQ- Stub</h2>
|
||||||
|
|
||||||
|
<dl>
|
||||||
|
<dt>How much does a book cost?</dt>
|
||||||
|
|
||||||
|
<dd>The author or publisher set a price for giveing the book to the world. Once you and your fellow ungluers raise enough money to meet that price, the Unglued ebook is available at no charge, for everyone, everywhere!</dd>
|
||||||
|
|
||||||
|
<dt>Are the unglued ebooks compatible with my reader?</dt>
|
||||||
|
|
||||||
|
<dd>Unglued ebooks are distributed with NO DRM, so they'll work on Kindle, iPad, Kobo, Mac, Windows, Linux... you get the idea.</dd>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -1,8 +1,17 @@
|
||||||
{% extends "basedocumentation.html" %}
|
{% extends "basedocumentation.html" %}
|
||||||
|
{% block title %}Tools for Rightsholders {% endblock %}
|
||||||
{% block doccontent %}
|
{% block doccontent %}
|
||||||
|
|
||||||
<h1>unglue.it tools for rightsholders</h1>
|
<h1>unglue.it Tools for Rightsholders</h1>
|
||||||
|
{% if request.user.rights_holder %}
|
||||||
|
<h2>Rights Holders That You Administer</h2>
|
||||||
|
{% for rights_holder in request.user.rights_holder.all %}
|
||||||
|
<h3>Name: {{ rights_holder.rights_holder_name }}</h3>
|
||||||
|
<p>PSA #: {{ rights_holder.id }}<br/>
|
||||||
|
contact email: {{ rights_holder.email }}<br/>
|
||||||
|
</p>
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
<h2>Rightsholder FAQ/How to launch a campaign</h2>
|
<h2>Rightsholder FAQ/How to launch a campaign</h2>
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
{% extends "basedocumentation.html" %}
|
||||||
|
|
||||||
|
{% block doccontent %}
|
||||||
|
|
||||||
|
<h1>Rights Holder Admin</h1>
|
||||||
|
|
||||||
|
<h2> Create New Rights Holder </h2>
|
||||||
|
<form method="POST" action="#">
|
||||||
|
{% csrf_token %}
|
||||||
|
{{ form.as_p }}
|
||||||
|
<input type="submit" name="submit" value="Create" id="submit">
|
||||||
|
</form>
|
||||||
|
</form>
|
||||||
|
<h2> Accepted Rights Holders </h2>
|
||||||
|
{% for rights_holder in rights_holders %}
|
||||||
|
<h3>{{ rights_holder.rights_holder_name }}</h3>
|
||||||
|
PSA #: {{ rights_holder.id }}<br/>
|
||||||
|
email: {{ rights_holder.email }}<br/>
|
||||||
|
owner: <a href="{% url supporter supporter_username=rights_holder.owner %}">{{ rights_holder.owner }}</a><br/>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -45,12 +45,10 @@
|
||||||
<a href="#"><img src="{{ result.image }}" alt="{{ result.title }}" title="{{ result.title }}" /></a>
|
<a href="#"><img src="{{ result.image }}" alt="{{ result.title }}" title="{{ result.title }}" /></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="listview book-name">
|
<div class="listview book-name">
|
||||||
<span>
|
<div class="title">
|
||||||
{{ result.title }}
|
<a href="/workstub/{{ result.urltitle }}/{{ result.urlimage }}/{{ result.urlauthor }}/{{ result.googlebooks_id }}">{{ result.title }}</a>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="listview author">
|
<div class="listview author {{ result.author }}">{{ result.author }}</div>
|
||||||
<span id="{{ result.author }}">{{ result.author }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
{% if request.user.is_anonymous %}
|
{% if request.user.is_anonymous %}
|
||||||
<div class="listview create-account">
|
<div class="listview create-account">
|
||||||
|
@ -66,7 +64,7 @@
|
||||||
</div>
|
</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<div class="listview booklist-status">
|
<div class="listview booklist-status">
|
||||||
<span class="booklist-status-text">Status: In Progress</span>
|
<span class="booklist-status-label">Status: </span><span class="booklist-status-text">{{ result.last_campaign_status }}</span>
|
||||||
</div>
|
</div>
|
||||||
<div class="listview icons">
|
<div class="listview icons">
|
||||||
<span class="booklist-status-img">
|
<span class="booklist-status-img">
|
||||||
|
@ -75,12 +73,12 @@
|
||||||
</div>
|
</div>
|
||||||
<div class="listview ebooks">
|
<div class="listview ebooks">
|
||||||
{% if result.epub %}
|
{% if result.epub %}
|
||||||
<span class="boolist-ebook">
|
<span class="listview boolist-ebook">
|
||||||
<a href="{{ result.epub }}">epub</a>
|
<a href="{{ result.epub }}">epub</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if result.pdf %}
|
{% if result.pdf %}
|
||||||
<span class="boolist-ebook">
|
<span class="listview boolist-ebook">
|
||||||
<a href="{{ result.pdf }}">pdf</a>
|
<a href="{{ result.pdf }}">pdf</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -0,0 +1,29 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="js-topsection">
|
||||||
|
<div class="js-main">
|
||||||
|
<h1>Subjects</h1>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
Below is a list of subjects for books that users have added to
|
||||||
|
wishlists. It is here primarily to show what subjects are present
|
||||||
|
in the database to guide further development. You can order by the
|
||||||
|
<a href="{% url subjects %}">subject name</a> or by the
|
||||||
|
<a href="{% url subjects %}?order=count">number</a> of editions
|
||||||
|
with that subject.
|
||||||
|
</p>
|
||||||
|
|
||||||
|
<p>
|
||||||
|
<ul>
|
||||||
|
{% for subject in subjects %}
|
||||||
|
<li>{{ subject.name }} ({{ subject.editions__count }})</li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</p>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
||||||
|
|
|
@ -22,17 +22,7 @@ To do:
|
||||||
create topsection file for inclusion in multiple contexts, if needed
|
create topsection file for inclusion in multiple contexts, if needed
|
||||||
figure out how to configure date display
|
figure out how to configure date display
|
||||||
decide if we're even including date joined in profile
|
decide if we're even including date joined in profile
|
||||||
add support for userpics
|
Goodreads
|
||||||
crop/resize? other infrastructure we need? can we pull from twitter/fb?
|
|
||||||
add support for twitter/fb/other links?
|
|
||||||
part of user profile? can I just add to db model?
|
|
||||||
loosely coupled vs actually integrated with signin
|
|
||||||
canonicalize -- user enters cut/paste link vs username
|
|
||||||
Goodreads & Librarything support
|
|
||||||
If people lack homepage, etc., do we have greyed-out icons or no icons?
|
|
||||||
if greyed-out, can they add in place by clicking on them?
|
|
||||||
make sure we have the profile settings we need
|
|
||||||
resurrect add/remove functionality
|
|
||||||
be sure words display correctly
|
be sure words display correctly
|
||||||
do I need both add-wishlist and remove-wishlist classes? do they differ?
|
do I need both add-wishlist and remove-wishlist classes? do they differ?
|
||||||
better alignment on I am ungluing & badges
|
better alignment on I am ungluing & badges
|
||||||
|
@ -66,7 +56,11 @@ how do I integrate the your wishlist thing with the tabs thing?
|
||||||
</div>
|
</div>
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
<div class="user-block2">
|
<div class="user-block2">
|
||||||
<img class="user-avatar" src="/static/images/header/avatar.png" height="50" width="50" alt="User avatar" title="User avatar" />
|
{% if supporter.profile.pic_url %}
|
||||||
|
<img class="user-avatar" src="{{ supporter.profile.pic_url }}" height="50" width="50" alt="Picture of {{ supporter }}" title="{{ supporter }}" />
|
||||||
|
{% else %}
|
||||||
|
<img class="user-avatar" src="/static/images/header/avatar.png" height="50" width="50" alt="Generic Ungluer Avatar" title="Ungluer" />
|
||||||
|
{% endif %}
|
||||||
<span class="user-name"><a href="#">{{ supporter.username }}</a></span>
|
<span class="user-name"><a href="#">{{ supporter.username }}</a></span>
|
||||||
<span class="user-date">{{ date }}</span>
|
<span class="user-date">{{ date }}</span>
|
||||||
<span class="user-short-info">{{ supporter.profile.tagline }}</span>
|
<span class="user-short-info">{{ supporter.profile.tagline }}</span>
|
||||||
|
@ -78,20 +72,33 @@ how do I integrate the your wishlist thing with the tabs thing?
|
||||||
<img src="/static/images/header/icon-home.png" alt="{{ supporter }}'s Homepage" title="{{ supporter }}'s Homepage" />
|
<img src="/static/images/header/icon-home.png" alt="{{ supporter }}'s Homepage" title="{{ supporter }}'s Homepage" />
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="#"><img src="/static/images/header/icon-facebook.png" alt="{{ supporter }}'s Facebook" title="{{ supporter }}'s Facebook" /></a>
|
{% if supporter.profile.facebook_id %}
|
||||||
|
<a href="http://www.facebook.com/profile.php?id={{supporter.profile.facebook_id}}">
|
||||||
|
<img src="/static/images/header/icon-facebook.png" alt="{{ supporter }}'s Facebook" title="{{ supporter }}'s Facebook" />
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
{% if supporter.profile.twitter_id %}
|
{% if supporter.profile.twitter_id %}
|
||||||
<a href="https://twitter.com/#!/{{ supporter.profile.twitter_id }}">
|
<a href="https://twitter.com/#!/{{ supporter.profile.twitter_id }}">
|
||||||
<img src="/static/images/header/icon-twitter.png" alt="{{ supporter }}'s Twitter" title="{{ supporter }}'s Twitter" />
|
<img src="/static/images/header/icon-twitter.png" alt="{{ supporter }}'s Twitter" title="{{ supporter }}'s Twitter" />
|
||||||
</a>
|
</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<a href="#"><img src="/static/images/header/icon-google.png" alt="google" title="google" /></a>
|
{% if supporter.profile.goodreads_user_link %}
|
||||||
<a href="#"><img src="/static/images/header/icon-group.png" alt="group" title="group" /></a></div>
|
<a href="{{supporter.profile.goodreads_user_link}}">
|
||||||
|
<img src="/static/images/header/icon-goodreads.png" alt="{{ supporter }}'s page on GoodReads" title="{{ supporter }}'s page on GoodReads" />
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
{% if supporter.profile.librarything_id %}
|
||||||
|
<a href="http://www.librarything.com/profile/{{ supporter.profile.librarything_id }}">
|
||||||
|
<img src="/static/images/header/icon-librarything.png" alt="{{ supporter }}'s page on LibraryThing" title="{{ supporter }}'s page on LibraryThing" />
|
||||||
|
</a>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="user-block3">
|
<div class="user-block3">
|
||||||
<div class="user-block">
|
<div class="user-block">
|
||||||
<span class="rounded"><span class="blue">{{ backed }}</span></span>
|
<span class="rounded"><span class="blue" {% ifequal request.user supporter %}title="I've unglued {{ backed }} books."{% else %}title="{{ supporter }} has unglued {{ backed }} books."{% endifequal %}>{{ backed }}</span></span>
|
||||||
<span class="rounded"><span class="orange">{{ backing }}</span></span>
|
<span class="rounded"><span class="orange" {% ifequal request.user supporter %}title="I'm supporting {{ backing }} books."{% else %}title="{{ supporter }} is supporting {{ backing }} books."{% endifequal %}>{{ backing }}</span></span>
|
||||||
<span class="rounded"><span class="grey">{{ wished }}</span></span>
|
<span class="rounded"><span class="grey" {% ifequal request.user supporter %}title="I'm wishing for {{ wished }} books."{% else %}title="{{ supporter }} is wishing for {{ wished }} books."{% endifequal %}>{{ wished }}</span></span>
|
||||||
</div>
|
</div>
|
||||||
<span class="user-status-title">I am ungluing</span>
|
<span class="user-status-title">I am ungluing</span>
|
||||||
</div>
|
</div>
|
||||||
|
@ -113,12 +120,33 @@ how do I integrate the your wishlist thing with the tabs thing?
|
||||||
<div class="block block2">
|
<div class="block block2">
|
||||||
<h3 class="title">Links</h3>
|
<h3 class="title">Links</h3>
|
||||||
<div class="check-list">
|
<div class="check-list">
|
||||||
<label>Your homepage URL:</label>
|
<label>Add your homepage URL:</label>
|
||||||
{{ profile_form.home_url }}{{ profile_form.home_url.errors }}
|
{{ profile_form.home_url }}{{ profile_form.home_url.errors }}
|
||||||
</div>
|
</div>
|
||||||
<div class="check-list">
|
<div class="check-list">
|
||||||
<label>Your Twitter handle:</label>
|
{% if supporter.profile.twitter_id %}
|
||||||
{{ profile_form.twitter_id }}{{ profile_form.twitter_id.errors }}
|
<a href="{% url socialauth_associate_begin backend='twitter' %}">Update your Twitter connection</a> <br/> or disconnect Twitter: {{ profile_form.clear_twitter }}
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url socialauth_associate_begin backend='twitter' %}">Connect your Twitter account</a> to Unglue.it
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="check-list">
|
||||||
|
{% if supporter.profile.facebook_id %}
|
||||||
|
<a href="{% url socialauth_associate_begin backend='facebook' %}">Update your Facebook connection</a> <br/> or disconnect Facebook: {{ profile_form.clear_facebook }}
|
||||||
|
{% else %}
|
||||||
|
<a href="{% url socialauth_associate_begin backend='facebook' %}">Connect your Facebook account</a> to Unglue.it
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="check-list">
|
||||||
|
{% if user.profile.goodreads_user_id %}
|
||||||
|
<a href="{{goodreads_auth_url}}">Update your GoodReads connection</a>
|
||||||
|
{% else %}
|
||||||
|
<a href="{{goodreads_auth_url}}">Connect your GoodReads account</a> to Unglue.it
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
<div class="check-list">
|
||||||
|
<label>Add Your LibraryThing User ID:</label>
|
||||||
|
{{ profile_form.librarything_id }}{{ profile_form.librarything_id.errors }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="block block3">
|
<div class="block block3">
|
||||||
|
@ -259,12 +287,10 @@ how do I integrate the your wishlist thing with the tabs thing?
|
||||||
<a href="#"><img src="{{ work.cover_image_thumbnail }}" alt="Book name" title="book name" /></a>
|
<a href="#"><img src="{{ work.cover_image_thumbnail }}" alt="Book name" title="book name" /></a>
|
||||||
</div>
|
</div>
|
||||||
<div class="listview book-name">
|
<div class="listview book-name">
|
||||||
<span>
|
<div class="title">
|
||||||
<a href="{% url work work.id %}">{{ work.title }}</a>
|
<a href="{% url work work.id %}">{{ work.title }}</a>
|
||||||
</span>
|
|
||||||
</div>
|
</div>
|
||||||
<div class="listview author">
|
<div class="listview author {{ work.author }}">{{ work.author }}</div>
|
||||||
<span class="{{ work.author }}">{{ work.author }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
{% ifequal supporter request.user %}
|
{% ifequal supporter request.user %}
|
||||||
<div class="listview remove-wishlist">
|
<div class="listview remove-wishlist">
|
||||||
|
@ -295,12 +321,12 @@ how do I integrate the your wishlist thing with the tabs thing?
|
||||||
</div>
|
</div>
|
||||||
<div class="listview ebooks">
|
<div class="listview ebooks">
|
||||||
{% if work.first_epub %}
|
{% if work.first_epub %}
|
||||||
<span class="boolist-ebook">
|
<span class="listview boolist-ebook">
|
||||||
<a href="{{ work.first_epub.url }}">epub</a>
|
<a href="{{ work.first_epub.url }}">epub</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if work.first_pdf %}
|
{% if work.first_pdf %}
|
||||||
<span class="boolist-ebook">
|
<span class="listview boolist-ebook">
|
||||||
<a href="{{ work.first_pdf.url }}">pdf</a>
|
<a href="{{ work.first_pdf.url }}">pdf</a>
|
||||||
</span>
|
</span>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
|
@ -1,8 +1,6 @@
|
||||||
{% extends "base.html" %}
|
{% extends "base.html" %}
|
||||||
{% block title %}
|
{% block title %}
|
||||||
Campaign for WORK TITLE GOES HERE
|
— Campaign for {{ work.title }}
|
||||||
{% endblock %}
|
|
||||||
|
|
||||||
{% block extra_head %}
|
{% block extra_head %}
|
||||||
<link type="text/css" rel="stylesheet" href="/static/css/campaign.css" />
|
<link type="text/css" rel="stylesheet" href="/static/css/campaign.css" />
|
||||||
|
|
||||||
|
@ -61,10 +59,26 @@ Campaign for WORK TITLE GOES HERE
|
||||||
<div class="jsmodule rounded">
|
<div class="jsmodule rounded">
|
||||||
<div class="jsmod-content">
|
<div class="jsmod-content">
|
||||||
{% if work.last_campaign %}
|
{% if work.last_campaign %}
|
||||||
|
{% if work.last_campaign_status == 'ACTIVE' %}
|
||||||
Campaign in Progress: <br />${{ work.last_campaign.current_total }}/${{ work.last_campaign.target }}
|
Campaign in Progress: <br />${{ work.last_campaign.current_total }}/${{ work.last_campaign.target }}
|
||||||
|
{% else %}{% if work.last_campaign_status == 'SUCCESSFUL' %}
|
||||||
|
Unglued on {{ work.last_campaign.deadline|date:"M j, Y"}}! <br />${{ work.last_campaign.current_total }} raised of ${{ work.last_campaign.target }} goal
|
||||||
|
{% else %}{% if work.last_campaign_status == 'INITIALIZED' %}
|
||||||
|
Campaign starting soon<br />
|
||||||
|
{% else %}{% if work.last_campaign_status == 'SUSPENDED' %}
|
||||||
|
Campaign suspended. <br />See <a href="/faq">FAQ</a>.
|
||||||
|
{% else %}{% if work.last_campaign_status == 'WITHDRAWN' %}
|
||||||
|
Campaign withdrawn. <br />See <a href="/faq">FAQ</a>.
|
||||||
|
{% else %}{% if work.wished_by.count == 1 %}
|
||||||
|
{{ work.wished_by.count }} Ungluer is WISHING<br />
|
||||||
{% else %}
|
{% else %}
|
||||||
XX Ungluers <br /> are WISHING
|
{{ work.wished_by.count }} Ungluers are WISHING<br />
|
||||||
{% endif %}
|
{% endif %}{% endif %}{% endif %}{% endif %}{% endif %}{% endif %}
|
||||||
|
{% else %}{% if work.wished_by.count == 1 %}
|
||||||
|
{{ work.wished_by.count }} Ungluer is WISHING<br />
|
||||||
|
{% else %}
|
||||||
|
{{ work.wished_by.count }} Ungluers are WISHING<br />
|
||||||
|
{% endif %}{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% include "explore.html" %}
|
{% include "explore.html" %}
|
||||||
|
@ -89,10 +103,15 @@ Campaign for WORK TITLE GOES HERE
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
{% if work.last_campaign %}
|
{% if work.last_campaign %}
|
||||||
<div class="pledged-info"><div class="pledged-group">{{ work.last_campaign.supporters.count }} Ungluers have pledged ${{ work.last_campaign.current_total }}</div><div class="status"><img src="/static/images/images/icon-book-37by25-{{ work.percent_unglued }}.png" /></div></div>
|
<div class="pledged-info"><div class="pledged-group">{% if work.last_campaign.supporters.count == 1 %}{{ work.last_campaign.supporters.count }} 1 Ungluer has{% else %} {{ work.last_campaign.supporters.count }} Ungluers have {% endif %}pledged ${{ work.last_campaign.current_total }}</div><div class="status"><img src="/static/images/images/icon-book-37by25-{{ work.percent_unglued }}.png" /></div></div>
|
||||||
<div class="btn_support"><form action="{% url pledge work_id=work.id %}" method="get"><input type="submit" value="Support"/></form></div>
|
<div class="btn_support"><form action="{% url pledge work_id=work.id %}" method="get"><input type="submit" value="Support"/></form></div>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="pledged-info"><div class="pledged-group">XX Ungluers have wished for this Work</div><div class="status"><img src="/static/images/images/icon-book-37by25-{{ work.percent_unglued }}.png" /></div></div>
|
<div class="pledged-info"><div class="pledged-group">
|
||||||
|
{% if work.wished_by.count == 1 %}
|
||||||
|
{{ work.wished_by.count }} Ungluer has
|
||||||
|
{% else %}
|
||||||
|
{{ work.wished_by.count }} Ungluers have
|
||||||
|
{% endif %}wished for this Work</div><div class="status"><img src="/static/images/images/icon-book-37by25-{{ work.percent_unglued }}.png" /></div></div>
|
||||||
<div class="btn_support">Add/drop from wishlist</div>
|
<div class="btn_support">Add/drop from wishlist</div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -147,7 +166,8 @@ Campaign for WORK TITLE GOES HERE
|
||||||
<h3 class="jsmod-title"><span>Share</span></h3>
|
<h3 class="jsmod-title"><span>Share</span></h3>
|
||||||
<div class="jsmod-content">
|
<div class="jsmod-content">
|
||||||
<ul class="social menu">
|
<ul class="social menu">
|
||||||
<li class="facebook first"><a href="#"><span>Facebook</span></a></li>
|
<li class="facebook first"><a
|
||||||
|
href="https://www.facebook.com/sharer/sharer.php?src=bm&u=http://{{ request.META.HTTP_HOST }}{{ request.path }}"><span>Facebook</span></a></li>
|
||||||
<li class="twitter"><a href="#"><span>Twitter</span></a></li>
|
<li class="twitter"><a href="#"><span>Twitter</span></a></li>
|
||||||
<li class="lasts email"><a href="#"><span>Email</span></a></li>
|
<li class="lasts email"><a href="#"><span>Email</span></a></li>
|
||||||
</ul>
|
</ul>
|
||||||
|
|
|
@ -0,0 +1,97 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
{% block title %}
|
||||||
|
— {{ title }}
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block extra_head %}
|
||||||
|
<link type="text/css" rel="stylesheet" href="/static/css/campaign.css" />
|
||||||
|
|
||||||
|
<script type="text/javascript" src="/static/js/wishlist.js"></script>
|
||||||
|
{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<div id="main-container">
|
||||||
|
<div class="js-main">
|
||||||
|
<div id="js-leftcol">
|
||||||
|
<div class="jsmodule rounded">
|
||||||
|
<div class="jsmod-content">
|
||||||
|
0 Ungluers are WISHING<br />
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% include "explore.html" %}
|
||||||
|
</div>
|
||||||
|
<div id="js-maincol">
|
||||||
|
<div class="js-maincol-inner">
|
||||||
|
<div class="content-block">
|
||||||
|
<div class="book-detail">
|
||||||
|
<div class="book-detail-img">
|
||||||
|
<a href="#"><img src="http://{{ imagebase }}/{{ image }}" alt="{{ title }}" title="{{ title }}" width="131" height="192" /></a>
|
||||||
|
</div>
|
||||||
|
<div class="book-detail-info">
|
||||||
|
<h2 class="book-name">{{ title }}</h2>
|
||||||
|
<h3 class="book-author">{{ author }}</h3>
|
||||||
|
<div class="find-book">
|
||||||
|
<label>Find it here</label>
|
||||||
|
<!-- todo: these should be a real thing -->
|
||||||
|
<div class="find-link">
|
||||||
|
<a class="find-google" href="#"><img src="/static/images/icons/google.png" align="" title="" /></a>
|
||||||
|
<a class="find-group" href="#"><img src="/static/images/icons/group.png" align="" title="" /></a>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="pledged-info"><div class="pledged-group">0 Ungluers have pledged $0</div><div class="status"><img src="/static/images/images/icon-book-37by25-0.png" /></div></div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="tabs" class="content-block-heading">
|
||||||
|
</div>
|
||||||
|
<div class="content-block-content">
|
||||||
|
<div id="tabs-1" class="tabs">
|
||||||
|
<div class="tabs-content">
|
||||||
|
{% if request.user.is_anonymous %}
|
||||||
|
<div class="create-account"><p>No one has wishlisted this yet. <b><span>Be the first.</span></b></p>
|
||||||
|
</div>
|
||||||
|
{% else %}
|
||||||
|
<div class="add-wishlist"><p>No one has wishlisted this yet. <b><span id="{{ googlebooks_id }}">Be the first.</span></b></p>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div id="js-rightcol">
|
||||||
|
<div class="js-rightcol-pad rounded">
|
||||||
|
|
||||||
|
<div class="jsmodule">
|
||||||
|
<h3 class="jsmod-title"><span>Share</span></h3>
|
||||||
|
<div class="jsmod-content">
|
||||||
|
<ul class="social menu">
|
||||||
|
<li class="facebook first"><a href="#"><span>Facebook</span></a></li>
|
||||||
|
<li class="twitter"><a href="#"><span>Twitter</span></a></li>
|
||||||
|
<li class="lasts email"><a href="#"><span>Email</span></a></li>
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% if work.last_campaign %}
|
||||||
|
<div class="jsmodule">
|
||||||
|
<h3 class="jsmod-title"><span>Support</span></h3>
|
||||||
|
<div class="jsmod-content">
|
||||||
|
<ul class="support menu">
|
||||||
|
{% for premium in premiums %}
|
||||||
|
<li class="{% if forloop.first %}first{% else %}{% if forloop.last %}last{% endif %}{% endif %}">
|
||||||
|
<a href="{% url pledge work_id=work.id %}?premium_id={{premium.id}}">
|
||||||
|
<span class="menu-item-price">${{ premium.amount }}</span>
|
||||||
|
<span class="menu-item-desc">{{ premium.description }}</span>
|
||||||
|
{% ifequal premium.type 'CU' %}<span class="custom-premium">exclusive!</span>{% endifequal %}
|
||||||
|
</a></li>
|
||||||
|
{% endfor %}
|
||||||
|
</ul>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
{% endif %}
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -17,6 +17,9 @@ urlpatterns = patterns(
|
||||||
name="privacy"),
|
name="privacy"),
|
||||||
url(r"^rightsholders/$", TemplateView.as_view(template_name="rhtools.html"),
|
url(r"^rightsholders/$", TemplateView.as_view(template_name="rhtools.html"),
|
||||||
name="rightsholders"),
|
name="rightsholders"),
|
||||||
|
url(r"^rh_admin/$", "rh_admin", name="rh_admin"),
|
||||||
|
url(r"^faq/$", TemplateView.as_view(template_name="faq.html"),
|
||||||
|
name="faq"),
|
||||||
url(r"^wishlist/$", "wishlist", name="wishlist"),
|
url(r"^wishlist/$", "wishlist", name="wishlist"),
|
||||||
url(r"^campaigns/$", ListView.as_view(
|
url(r"^campaigns/$", ListView.as_view(
|
||||||
model=Campaign,template_name="campaign_list.html", context_object_name="campaign_list")),
|
model=Campaign,template_name="campaign_list.html", context_object_name="campaign_list")),
|
||||||
|
@ -28,9 +31,10 @@ urlpatterns = patterns(
|
||||||
url(r"^goodreads/clear_wishlist/$","clear_wishlist", name="clear_wishlist"),
|
url(r"^goodreads/clear_wishlist/$","clear_wishlist", name="clear_wishlist"),
|
||||||
url(r"^stub/", "stub", name="stub"),
|
url(r"^stub/", "stub", name="stub"),
|
||||||
url(r"^work/(?P<work_id>\d+)/$", "work", name="work"),
|
url(r"^work/(?P<work_id>\d+)/$", "work", name="work"),
|
||||||
|
url(r"^workstub/(?P<title>.+)/(?P<imagebase>.+)/(?P<image>.+)/(?P<author>.+)/(?P<googlebooks_id>.+)/$", "workstub", name="workstub"),
|
||||||
url(r"^setup/work/(?P<work_id>\d+)/$", "work", {'action':'setup_campaign'}, name="setup_campaign"),
|
url(r"^setup/work/(?P<work_id>\d+)/$", "work", {'action':'setup_campaign'}, name="setup_campaign"),
|
||||||
url(r"^pledge/(?P<work_id>\d+)/$", "pledge", name="pledge"),
|
url(r"^pledge/(?P<work_id>\d+)/$", "pledge", name="pledge"),
|
||||||
url(r"^celery/clear/$","clear_celery_tasks", name="clear_celery_tasks")
|
url(r"^celery/clear/$","clear_celery_tasks", name="clear_celery_tasks"),
|
||||||
|
url(r"^subjects/$", "subjects", name="subjects")
|
||||||
|
|
||||||
)
|
)
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
import logging
|
import logging
|
||||||
from decimal import Decimal as D
|
from decimal import Decimal as D
|
||||||
|
|
||||||
from django.db.models import Q
|
from django.db.models import Q, Count
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.contrib.auth.models import User
|
from django.contrib.auth.models import User
|
||||||
from django.core.urlresolvers import reverse
|
from django.core.urlresolvers import reverse
|
||||||
|
@ -23,9 +23,10 @@ import re
|
||||||
|
|
||||||
from regluit.core import tasks
|
from regluit.core import tasks
|
||||||
from regluit.core import models, bookloader
|
from regluit.core import models, bookloader
|
||||||
|
from regluit.core import userlists
|
||||||
from regluit.core.search import gluejar_search
|
from regluit.core.search import gluejar_search
|
||||||
from regluit.core.goodreads import GoodreadsClient
|
from regluit.core.goodreads import GoodreadsClient
|
||||||
from regluit.frontend.forms import UserData, ProfileForm, CampaignPledgeForm, GoodreadsShelfLoadingForm
|
from regluit.frontend.forms import UserData, ProfileForm, CampaignPledgeForm, GoodreadsShelfLoadingForm, RightsHolderForm
|
||||||
from regluit.payment.manager import PaymentManager
|
from regluit.payment.manager import PaymentManager
|
||||||
from regluit.payment.parameters import TARGET_TYPE_CAMPAIGN
|
from regluit.payment.parameters import TARGET_TYPE_CAMPAIGN
|
||||||
|
|
||||||
|
@ -36,6 +37,9 @@ logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
from regluit.payment.models import Transaction
|
from regluit.payment.models import Transaction
|
||||||
|
|
||||||
|
import urllib
|
||||||
|
from re import sub
|
||||||
|
|
||||||
def home(request):
|
def home(request):
|
||||||
if request.user.is_authenticated():
|
if request.user.is_authenticated():
|
||||||
return HttpResponseRedirect(reverse('supporter',
|
return HttpResponseRedirect(reverse('supporter',
|
||||||
|
@ -57,8 +61,27 @@ def work(request, work_id, action='display'):
|
||||||
if action == 'setup_campaign':
|
if action == 'setup_campaign':
|
||||||
return render(request, 'setup_campaign.html', {'work': work})
|
return render(request, 'setup_campaign.html', {'work': work})
|
||||||
else:
|
else:
|
||||||
return render(request, 'work.html', {'work': work, 'premiums': premiums})
|
return render(request, 'work.html', {'work': work, 'premiums': premiums, 'ungluers': userlists.supporting_users(work, 5)})
|
||||||
|
|
||||||
|
def workstub(request, title, imagebase, image, author, googlebooks_id, action='display'):
|
||||||
|
premiums = None
|
||||||
|
title = urllib.unquote_plus(title)
|
||||||
|
imagebase = urllib.unquote_plus(imagebase)
|
||||||
|
image = urllib.unquote_plus(image)
|
||||||
|
author = urllib.unquote_plus(author)
|
||||||
|
return render(request, 'workstub.html', {'title': title, 'image': image, 'imagebase': imagebase, 'author': author, 'googlebooks_id': googlebooks_id, 'premiums': premiums, 'ungluers': userlists.other_users(supporter, 5)})
|
||||||
|
|
||||||
|
def subjects(request):
|
||||||
|
order = request.GET.get('order')
|
||||||
|
subjects = models.Subject.objects.all()
|
||||||
|
subjects = subjects.annotate(Count('editions'))
|
||||||
|
|
||||||
|
if request.GET.get('order') == 'count':
|
||||||
|
subjects = subjects.order_by('-editions__count')
|
||||||
|
else:
|
||||||
|
subjects = subjects.order_by('name')
|
||||||
|
|
||||||
|
return render(request, 'subjects.html', {'subjects': subjects})
|
||||||
|
|
||||||
def pledge(request,work_id):
|
def pledge(request,work_id):
|
||||||
work = get_object_or_404(models.Work, id=work_id)
|
work = get_object_or_404(models.Work, id=work_id)
|
||||||
|
@ -77,6 +100,25 @@ def pledge(request,work_id):
|
||||||
|
|
||||||
return render(request,'pledge.html',{'work':work,'campaign':campaign, 'premiums':premiums, 'form':form})
|
return render(request,'pledge.html',{'work':work,'campaign':campaign, 'premiums':premiums, 'form':form})
|
||||||
|
|
||||||
|
def rh_admin(request):
|
||||||
|
if not is_admin(request.user):
|
||||||
|
return render(request, "admins_only.html")
|
||||||
|
if request.method == 'POST':
|
||||||
|
form = RightsHolderForm(data=request.POST)
|
||||||
|
if form.is_valid():
|
||||||
|
form.save()
|
||||||
|
else:
|
||||||
|
form = RightsHolderForm()
|
||||||
|
rights_holders = models.RightsHolder.objects.all()
|
||||||
|
context = { 'request': request, 'rights_holders': rights_holders, 'form': form }
|
||||||
|
return render(request, "rights_holders.html", context)
|
||||||
|
|
||||||
|
def is_admin(user):
|
||||||
|
for name,email in settings.ADMINS :
|
||||||
|
if email == user.email :
|
||||||
|
return True
|
||||||
|
return False
|
||||||
|
|
||||||
def supporter(request, supporter_username, template_name):
|
def supporter(request, supporter_username, template_name):
|
||||||
supporter = get_object_or_404(User, username=supporter_username)
|
supporter = get_object_or_404(User, username=supporter_username)
|
||||||
wishlist = supporter.wishlist
|
wishlist = supporter.wishlist
|
||||||
|
@ -117,6 +159,12 @@ def supporter(request, supporter_username, template_name):
|
||||||
if request.method == 'POST':
|
if request.method == 'POST':
|
||||||
profile_form = ProfileForm(data=request.POST,instance=profile_obj)
|
profile_form = ProfileForm(data=request.POST,instance=profile_obj)
|
||||||
if profile_form.is_valid():
|
if profile_form.is_valid():
|
||||||
|
if profile_form.cleaned_data['clear_facebook'] or profile_form.cleaned_data['clear_twitter'] :
|
||||||
|
if profile_form.cleaned_data['clear_facebook']:
|
||||||
|
profile_obj.facebook_id=0
|
||||||
|
if profile_form.cleaned_data['clear_twitter']:
|
||||||
|
profile_obj.twitter_id=""
|
||||||
|
profile_obj.save()
|
||||||
profile_form.save()
|
profile_form.save()
|
||||||
else:
|
else:
|
||||||
profile_form= ProfileForm(instance=profile_obj)
|
profile_form= ProfileForm(instance=profile_obj)
|
||||||
|
@ -132,6 +180,7 @@ def supporter(request, supporter_username, template_name):
|
||||||
"date": date,
|
"date": date,
|
||||||
"shared_works": shared_works,
|
"shared_works": shared_works,
|
||||||
"profile_form": profile_form,
|
"profile_form": profile_form,
|
||||||
|
"ungluers": userlists.other_users(supporter, 5 )
|
||||||
}
|
}
|
||||||
|
|
||||||
return render(request, template_name, context)
|
return render(request, template_name, context)
|
||||||
|
@ -163,17 +212,27 @@ def search(request):
|
||||||
wishlist = request.user.wishlist
|
wishlist = request.user.wishlist
|
||||||
editions = models.Edition.objects.filter(work__wishlists__in=[wishlist])
|
editions = models.Edition.objects.filter(work__wishlists__in=[wishlist])
|
||||||
googlebooks_ids = [e['googlebooks_id'] for e in editions.values('googlebooks_id')]
|
googlebooks_ids = [e['googlebooks_id'] for e in editions.values('googlebooks_id')]
|
||||||
|
ungluers = userlists.other_users(request.user, 5)
|
||||||
# if the results is on their wishlist flag it
|
# if the results is on their wishlist flag it
|
||||||
for result in results:
|
for result in results:
|
||||||
if result['googlebooks_id'] in googlebooks_ids:
|
if result['googlebooks_id'] in googlebooks_ids:
|
||||||
result['on_wishlist'] = True
|
result['on_wishlist'] = True
|
||||||
else:
|
else:
|
||||||
result['on_wishlist'] = False
|
result['on_wishlist'] = False
|
||||||
|
else:
|
||||||
|
ungluers = userlists.other_users(None, 5)
|
||||||
|
|
||||||
|
# also urlencode some parameters we'll need to pass to workstub in the title links
|
||||||
|
# needs to be done outside the if condition
|
||||||
|
for result in results:
|
||||||
|
result['urlimage'] = urllib.quote_plus(sub('^https?:\/\/','', result['image']).encode("utf-8"), safe='')
|
||||||
|
result['urlauthor'] = urllib.quote_plus(result['author'].encode("utf-8"), safe='')
|
||||||
|
result['urltitle'] = urllib.quote_plus(result['title'].encode("utf-8"), safe='')
|
||||||
|
|
||||||
context = {
|
context = {
|
||||||
"q": q,
|
"q": q,
|
||||||
"results": results,
|
"results": results,
|
||||||
|
"ungluers": ungluers
|
||||||
}
|
}
|
||||||
return render(request, 'search.html', context)
|
return render(request, 'search.html', context)
|
||||||
|
|
||||||
|
|
|
@ -172,7 +172,7 @@ SOCIAL_AUTH_ENABLED_BACKENDS = ['google', 'facebook', 'twitter']
|
||||||
SOCIAL_AUTH_ASSOCIATE_BY_MAIL = True
|
SOCIAL_AUTH_ASSOCIATE_BY_MAIL = True
|
||||||
SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/accounts/edit/'
|
SOCIAL_AUTH_NEW_USER_REDIRECT_URL = '/accounts/edit/'
|
||||||
|
|
||||||
FACEBOOK_EXTENDED_PERMISSIONS = ['email']
|
TWITTER_EXTRA_DATA = [('profile_image_url', 'profile_image_url')]
|
||||||
|
|
||||||
LOGIN_URL = "/accounts/login/"
|
LOGIN_URL = "/accounts/login/"
|
||||||
LOGIN_REDIRECT_URL = "/"
|
LOGIN_REDIRECT_URL = "/"
|
||||||
|
|
|
@ -6,6 +6,9 @@ TEMPLATE_DEBUG = DEBUG
|
||||||
ADMINS = (
|
ADMINS = (
|
||||||
('Ed Summers', 'ehs@pobox.com'),
|
('Ed Summers', 'ehs@pobox.com'),
|
||||||
('Raymond Yee', 'rdhyee+ungluebugs@gluejar.com'),
|
('Raymond Yee', 'rdhyee+ungluebugs@gluejar.com'),
|
||||||
|
('Eric Hellman', 'eric@gluejar.com'),
|
||||||
|
('Andromeda Yelton', 'andromeda@gluejar.com'),
|
||||||
|
('Rights Admin', 'rights@gluejar.com'),
|
||||||
)
|
)
|
||||||
|
|
||||||
MANAGERS = ADMINS
|
MANAGERS = ADMINS
|
||||||
|
@ -68,6 +71,16 @@ PAYPAL_GLUEJAR_EMAIL = ""
|
||||||
PAYPAL_TEST_RH_EMAIL = "rh1_1317336251_biz@gluejar.com"
|
PAYPAL_TEST_RH_EMAIL = "rh1_1317336251_biz@gluejar.com"
|
||||||
PAYPAL_TEST_NONPROFIT_PARTNER_EMAIL = ""
|
PAYPAL_TEST_NONPROFIT_PARTNER_EMAIL = ""
|
||||||
|
|
||||||
|
# Goodreads API
|
||||||
|
GOODREADS_API_KEY = "vfqIO6QAhBVvlxt6hAzZJg"
|
||||||
|
GOODREADS_API_SECRET = "57tq4MpyJ15Hgm2ToZQQFWJ7vraZzOAqHLckWRXQ"
|
||||||
|
|
||||||
|
# Freebase credentials
|
||||||
|
FREEBASE_USERNAME = ''
|
||||||
|
FREEBASE_PASSWORD = ''
|
||||||
|
|
||||||
|
# send celery log to Python logging
|
||||||
|
CELERYD_HIJACK_ROOT_LOGGER = False
|
||||||
BASE_URL = 'http://0.0.0.0/'
|
BASE_URL = 'http://0.0.0.0/'
|
||||||
|
|
||||||
# use redis for production queue
|
# use redis for production queue
|
||||||
|
@ -75,3 +88,5 @@ BROKER_TRANSPORT = "redis"
|
||||||
BROKER_HOST = "localhost"
|
BROKER_HOST = "localhost"
|
||||||
BROKER_PORT = 6379
|
BROKER_PORT = 6379
|
||||||
BROKER_VHOST = "0"
|
BROKER_VHOST = "0"
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -36,32 +36,43 @@ div.book-list.listview div.book-thumb {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.book-name {
|
div.book-list.listview div.book-name {
|
||||||
width: 260px;
|
width: 235px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
background: url("../images/booklist/booklist-vline.png") right center no-repeat;
|
background: url("/static/images/booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
div.book-list.listview div.book-name span {
|
div.book-list.listview div.book-name .title {
|
||||||
display: block;
|
display: block;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
height: 43px;
|
overflow: hidden;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
div.book-list.listview div.book-name .listview.author {
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
line-height: normal;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.add-wishlist, div.book-list.listview div.remove-wishlist {
|
div.book-list.listview div.add-wishlist, div.book-list.listview div.remove-wishlist {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
background: url("../images/booklist/booklist-vline.png") right center no-repeat;
|
width: 136px;
|
||||||
|
background: url("/static/images/booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.add-wishlist a, div.book-list.listview div.remove-wishlist a {
|
div.book-list.listview div.add-wishlist a, div.book-list.listview div.remove-wishlist a {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
background: url("../images/booklist/add-wishlist.png") left center no-repeat;
|
background: url("/static/images/booklist/add-wishlist.png") left center no-repeat;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.booklist-status {
|
div.book-list.listview div.booklist-status {
|
||||||
|
width: 110px;
|
||||||
margin-right: 7px;
|
margin-right: 7px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
@ -183,9 +194,6 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
.listview.author {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.listview.icons {
|
.listview.icons {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 31px;
|
right: 31px;
|
||||||
|
@ -210,3 +218,6 @@ div.content-block-content {
|
||||||
.listview.panelback, .listview.panelback div {
|
.listview.panelback, .listview.panelback div {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.listview.boolist-ebook a {
|
||||||
|
color: #3d4e53;
|
||||||
|
}
|
||||||
|
|
|
@ -92,7 +92,7 @@
|
||||||
.panelview.add-wishlist {
|
.panelview.add-wishlist {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.panelview.book-name, .panelview.author {
|
.panelview.book-name div {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
|
@ -128,6 +128,9 @@
|
||||||
padding: 10px 10px 0 0;
|
padding: 10px 10px 0 0;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
}
|
}
|
||||||
|
.panelview.boolist-ebook a {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
/* switch to/from hover state when jquery swaps class names */
|
/* switch to/from hover state when jquery swaps class names */
|
||||||
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
||||||
display: visible;
|
display: visible;
|
||||||
|
@ -185,9 +188,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: "/static/images/book-panel/book_icon.png) no-repeat 10% center";
|
|
||||||
padding: 0px 0px 0px 30px;
|
padding: 0px 0px 0px 30px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: url("/static/images/book-panel/book_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.read_itbutton a:hover {
|
.read_itbutton a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -211,9 +214,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: none;
|
|
||||||
padding: 0px 0px 0px 15px;
|
padding: 0px 0px 0px 15px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: none;
|
||||||
}
|
}
|
||||||
.read_itbutton_fail span:hover {
|
.read_itbutton_fail span:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -224,6 +227,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 15px 0;
|
margin: 15px 0 15px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
||||||
}
|
}
|
||||||
.add_towish a {
|
.add_towish a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -233,7 +237,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
|
||||||
padding: 8px 5px 8px 21px;
|
padding: 8px 5px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -272,6 +275,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 0px 0;
|
margin: 15px 0 0px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/more_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.moreinfo a {
|
.moreinfo a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -281,7 +285,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/more_icon.png");
|
|
||||||
padding: 8px 42px 8px 21px;
|
padding: 8px 42px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -315,7 +318,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/unglue_icon.png);
|
background-image: url("/static/images/book-panel/unglue_icon.png");
|
||||||
padding: 5px 0px 0px 20px;
|
padding: 5px 0px 0px 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -338,7 +341,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/add_gray.png);
|
background-image: url("/static/images/book-panel/add_gray.png");
|
||||||
padding: 8px 0px;
|
padding: 8px 0px;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
|
@ -373,7 +376,7 @@ div.panelview.side2 > div {
|
||||||
.moreinfo2 a {
|
.moreinfo2 a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background-image: url(/static/images/book-panel/gray_more_info.png);
|
background-image: url("/static/images/book-panel/gray_more_info.png");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
padding: 8px 35px;
|
padding: 8px 35px;
|
||||||
|
|
|
@ -226,7 +226,6 @@ div.content-block-content {
|
||||||
}
|
}
|
||||||
.book-name {
|
.book-name {
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
font-weight: bold;
|
|
||||||
}
|
}
|
||||||
.book-author {
|
.book-author {
|
||||||
color: #6994a3;
|
color: #6994a3;
|
||||||
|
@ -248,11 +247,15 @@ div.content-block-content {
|
||||||
height: 25px;
|
height: 25px;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
/* Do I even still need this?
|
#toggle-list {
|
||||||
.book-status span.percent99{ background:url(../images/images/icon-book1.png) 0 0 no-repeat;}
|
filter: alpha(opacity=100);
|
||||||
.book-status span.percent60{ background:url(../images/images/icon-book2.png) 0 0 no-repeat;}
|
-moz-opacity: 1;
|
||||||
.book-status span.percent22{ background:url(../images/images/icon-book3.png) 0 0 no-repeat;}
|
-khtml-opacity: 1;
|
||||||
.book-status span.percent7{ background:url(../images/images/icon-book4.png) 0 0 no-repeat;}
|
opacity: 1;
|
||||||
.book-status span.percent62{ background:url(../images/images/icon-book5.png) 0 0 no-repeat;}
|
}
|
||||||
.book-status span.percent21{ background:url(../images/images/icon-book6.png) 0 0 no-repeat;}
|
#toggle-panel {
|
||||||
*/
|
filter: alpha(opacity=100);
|
||||||
|
-moz-opacity: 0.2;
|
||||||
|
-khtml-opacity: 0.2;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
|
After Width: | Height: | Size: 2.0 KiB |
After Width: | Height: | Size: 1.8 KiB |
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 462 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 490 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 490 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 481 B After Width: | Height: | Size: 3.0 KiB |
Before Width: | Height: | Size: 461 B After Width: | Height: | Size: 3.0 KiB |
|
@ -3,8 +3,12 @@ which overrides display: none in the stylesheet. Sneaky! */
|
||||||
$(document).ready(function(){
|
$(document).ready(function(){
|
||||||
$('#toggle-list').click(function(){
|
$('#toggle-list').click(function(){
|
||||||
$('.panelview').addClass("listview").removeClass("panelview");
|
$('.panelview').addClass("listview").removeClass("panelview");
|
||||||
|
$j(this).css({opacity: 1});
|
||||||
|
$('#toggle-panel').css({opacity: .2});
|
||||||
});
|
});
|
||||||
$('#toggle-panel').click(function(){
|
$('#toggle-panel').click(function(){
|
||||||
$('.listview').addClass("panelview").removeClass("listview");
|
$('.listview').addClass("panelview").removeClass("listview");
|
||||||
|
$j(this).css({opacity: 1});
|
||||||
|
$('#toggle-list').css({opacity: .2});
|
||||||
});
|
});
|
||||||
});
|
});
|
|
@ -27,34 +27,45 @@ div.book-list.listview{
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
&.book-name {
|
&.book-name {
|
||||||
width:260px;
|
width:235px;
|
||||||
margin-right:10px;
|
margin-right:10px;
|
||||||
background:url("../images/booklist/booklist-vline.png") right center no-repeat;
|
background:url("@{image-base}booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
overflow: hidden;
|
|
||||||
|
|
||||||
span {
|
.title {
|
||||||
display:block;
|
display:block;
|
||||||
line-height:normal;
|
line-height:normal;
|
||||||
.height(43px);
|
overflow: hidden;
|
||||||
|
.height(19px);
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight:bold;
|
||||||
|
}
|
||||||
|
|
||||||
|
.listview.author {
|
||||||
|
overflow: hidden;
|
||||||
|
display:block;
|
||||||
|
line-height:normal;
|
||||||
|
.height(19px);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
&.add-wishlist, &.remove-wishlist {
|
&.add-wishlist, &.remove-wishlist {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
background:url("../images/booklist/booklist-vline.png") right center no-repeat;
|
width: 136px;
|
||||||
|
background:url("@{image-base}booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
|
|
||||||
a {
|
a {
|
||||||
font-weight:normal;
|
font-weight:normal;
|
||||||
color:@text-blue;
|
color:@text-blue;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
background:url("../images/booklist/add-wishlist.png") left center no-repeat;
|
background:url("@{image-base}booklist/add-wishlist.png") left center no-repeat;
|
||||||
padding-left:20px;
|
padding-left:20px;
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
&.booklist-status {
|
&.booklist-status {
|
||||||
|
width: 110px;
|
||||||
margin-right:7px;
|
margin-right:7px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
@ -197,10 +208,6 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.listview.author {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
|
|
||||||
.listview.icons {
|
.listview.icons {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 31px;
|
right: 31px;
|
||||||
|
@ -227,3 +234,7 @@ div.content-block-content {
|
||||||
.listview.panelback, .listview.panelback div {
|
.listview.panelback, .listview.panelback div {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.listview.boolist-ebook a {
|
||||||
|
color: @text-blue;
|
||||||
|
}
|
|
@ -42,9 +42,8 @@
|
||||||
border: 1px solid #81bb38;
|
border: 1px solid #81bb38;
|
||||||
}
|
}
|
||||||
|
|
||||||
.readit_inner (@image, @padding) {
|
.readit_inner (@padding) {
|
||||||
.greenpanelactionitems(10px);
|
.greenpanelactionitems(10px);
|
||||||
background: @image;
|
|
||||||
padding:0px 0px 0px @padding;
|
padding:0px 0px 0px @padding;
|
||||||
color:@dark-green;
|
color:@dark-green;
|
||||||
|
|
||||||
|
@ -53,7 +52,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.banners (@image, @right, @bottom) {
|
.banners (@right, @bottom) {
|
||||||
width:130px;
|
width:130px;
|
||||||
height:30px;
|
height:30px;
|
||||||
padding:0px;
|
padding:0px;
|
||||||
|
@ -62,7 +61,6 @@
|
||||||
|
|
||||||
a {
|
a {
|
||||||
.greenpanelactionitems(left);
|
.greenpanelactionitems(left);
|
||||||
background-image: url(@image);
|
|
||||||
padding:8px @right 8px 21px;
|
padding:8px @right 8px 21px;
|
||||||
color:#FFFFFF;
|
color:#FFFFFF;
|
||||||
.greenpanelactionborders;
|
.greenpanelactionborders;
|
||||||
|
@ -125,7 +123,7 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
.panelview.book-name, .panelview.author {
|
.panelview.book-name div {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height:16px;
|
line-height:16px;
|
||||||
|
@ -169,6 +167,10 @@
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.panelview.boolist-ebook a {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
|
|
||||||
/* switch to/from hover state when jquery swaps class names */
|
/* switch to/from hover state when jquery swaps class names */
|
||||||
|
|
||||||
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
||||||
|
@ -214,7 +216,8 @@ div.panelview.side2 > div {
|
||||||
.read_itbutton {
|
.read_itbutton {
|
||||||
.readit;
|
.readit;
|
||||||
a {
|
a {
|
||||||
.readit_inner("/static/images/book-panel/book_icon.png) no-repeat 10% center", 30px);
|
.readit_inner(30px);
|
||||||
|
background: url("@{image-base}book-panel/book_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -222,13 +225,16 @@ div.panelview.side2 > div {
|
||||||
.readit;
|
.readit;
|
||||||
|
|
||||||
span {
|
span {
|
||||||
.readit_inner(none, 15px);
|
.readit_inner(15px);
|
||||||
|
background: none;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
.add_towish {
|
.add_towish {
|
||||||
.banners("/static/images/book-panel/add_wish_icon.png", 5px, 15px);
|
.banners(5px, 15px);
|
||||||
|
background-image: url("@{image-base}book-panel/add_wish_icon.png");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.white_text {
|
.white_text {
|
||||||
|
@ -252,7 +258,8 @@ div.panelview.side2 > div {
|
||||||
}
|
}
|
||||||
|
|
||||||
.moreinfo {
|
.moreinfo {
|
||||||
.banners("/static/images/book-panel/more_icon.png", 42px, 0px);
|
.banners(42px, 0px);
|
||||||
|
background-image: url("@{image-base}book-panel/more_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -269,7 +276,7 @@ div.panelview.side2 > div {
|
||||||
}
|
}
|
||||||
.Unglue_itbutton a{
|
.Unglue_itbutton a{
|
||||||
.greenpanelactionitems(2px);
|
.greenpanelactionitems(2px);
|
||||||
background-image: url(/static/images/book-panel/unglue_icon.png);
|
background-image: url("@{image-base}book-panel/unglue_icon.png");
|
||||||
padding:5px 0px 0px 20px;
|
padding:5px 0px 0px 20px;
|
||||||
color:@text-blue;
|
color:@text-blue;
|
||||||
text-align:right;
|
text-align:right;
|
||||||
|
@ -287,7 +294,7 @@ text-decoration:none;
|
||||||
}
|
}
|
||||||
.add_towish2 a{
|
.add_towish2 a{
|
||||||
.greenpanelactionitems(left);
|
.greenpanelactionitems(left);
|
||||||
background-image: url(/static/images/book-panel/add_gray.png);
|
background-image: url("@{image-base}book-panel/add_gray.png");
|
||||||
padding:8px 0px;
|
padding:8px 0px;
|
||||||
padding-left:20px;
|
padding-left:20px;
|
||||||
color:@text-blue;
|
color:@text-blue;
|
||||||
|
@ -318,7 +325,7 @@ text-decoration:none;
|
||||||
.moreinfo2 a{
|
.moreinfo2 a{
|
||||||
line-height:40px;
|
line-height:40px;
|
||||||
font-size:12px;
|
font-size:12px;
|
||||||
background-image: url(/static/images/book-panel/gray_more_info.png);
|
background-image: url("@{image-base}book-panel/gray_more_info.png");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
padding:8px 35px;
|
padding:8px 35px;
|
||||||
|
|
|
@ -66,42 +66,63 @@ div.book-list.listview div.book-thumb {
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.book-name {
|
div.book-list.listview div.book-name {
|
||||||
width: 260px;
|
width: 235px;
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
background: url("../images/booklist/booklist-vline.png") right center no-repeat;
|
background: url("/static/images/booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
overflow: hidden;
|
|
||||||
}
|
}
|
||||||
div.book-list.listview div.book-name span {
|
div.book-list.listview div.book-name .title {
|
||||||
display: block;
|
display: block;
|
||||||
line-height: normal;
|
line-height: normal;
|
||||||
height: 43px;
|
overflow: hidden;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
height: 43px;
|
line-height: 19px;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
height: 43px;
|
line-height: 19px;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
height: 43px;
|
line-height: 19px;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
height: 43px;
|
line-height: 19px;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
height: 43px;
|
line-height: 19px;
|
||||||
line-height: 43px;
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
padding-bottom: 5px;
|
||||||
|
font-weight: bold;
|
||||||
|
}
|
||||||
|
div.book-list.listview div.book-name .listview.author {
|
||||||
|
overflow: hidden;
|
||||||
|
display: block;
|
||||||
|
line-height: normal;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
|
height: 19px;
|
||||||
|
line-height: 19px;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.add-wishlist, div.book-list.listview div.remove-wishlist {
|
div.book-list.listview div.add-wishlist, div.book-list.listview div.remove-wishlist {
|
||||||
margin-right: 10px;
|
margin-right: 10px;
|
||||||
padding-right: 10px;
|
padding-right: 10px;
|
||||||
background: url("../images/booklist/booklist-vline.png") right center no-repeat;
|
width: 136px;
|
||||||
|
background: url("/static/images/booklist/booklist-vline.png") right center no-repeat;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.add-wishlist a, div.book-list.listview div.remove-wishlist a {
|
div.book-list.listview div.add-wishlist a, div.book-list.listview div.remove-wishlist a {
|
||||||
font-weight: normal;
|
font-weight: normal;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
text-transform: none;
|
text-transform: none;
|
||||||
background: url("../images/booklist/add-wishlist.png") left center no-repeat;
|
background: url("/static/images/booklist/add-wishlist.png") left center no-repeat;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
}
|
}
|
||||||
div.book-list.listview div.booklist-status {
|
div.book-list.listview div.booklist-status {
|
||||||
|
width: 110px;
|
||||||
margin-right: 7px;
|
margin-right: 7px;
|
||||||
float: left;
|
float: left;
|
||||||
}
|
}
|
||||||
|
@ -273,9 +294,6 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
||||||
*/
|
*/
|
||||||
|
|
||||||
}
|
}
|
||||||
.listview.author {
|
|
||||||
display: none;
|
|
||||||
}
|
|
||||||
.listview.icons {
|
.listview.icons {
|
||||||
position: absolute;
|
position: absolute;
|
||||||
right: 31px;
|
right: 31px;
|
||||||
|
@ -315,6 +333,9 @@ div.content-block-content {
|
||||||
.listview.panelback, .listview.panelback div {
|
.listview.panelback, .listview.panelback div {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
|
.listview.boolist-ebook a {
|
||||||
|
color: #3d4e53;
|
||||||
|
}
|
||||||
.header-text {
|
.header-text {
|
||||||
height: 36px;
|
height: 36px;
|
||||||
line-height: 36px;
|
line-height: 36px;
|
||||||
|
@ -428,7 +449,7 @@ div.content-block-content {
|
||||||
.panelview.add-wishlist {
|
.panelview.add-wishlist {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.panelview.book-name, .panelview.author {
|
.panelview.book-name div {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
|
@ -464,6 +485,9 @@ div.content-block-content {
|
||||||
padding: 10px 10px 0 0;
|
padding: 10px 10px 0 0;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
}
|
}
|
||||||
|
.panelview.boolist-ebook a {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
/* switch to/from hover state when jquery swaps class names */
|
/* switch to/from hover state when jquery swaps class names */
|
||||||
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
||||||
display: visible;
|
display: visible;
|
||||||
|
@ -571,7 +595,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: "/static/images/book-panel/book_icon.png) no-repeat 10% center";
|
|
||||||
padding: 0px 0px 0px 30px;
|
padding: 0px 0px 0px 30px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -588,9 +611,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: "/static/images/book-panel/book_icon.png) no-repeat 10% center";
|
|
||||||
padding: 0px 0px 0px 30px;
|
padding: 0px 0px 0px 30px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: url("/static/images/book-panel/book_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.read_itbutton a:hover {
|
.read_itbutton a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -663,7 +686,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: none;
|
|
||||||
padding: 0px 0px 0px 15px;
|
padding: 0px 0px 0px 15px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -680,9 +702,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: none;
|
|
||||||
padding: 0px 0px 0px 15px;
|
padding: 0px 0px 0px 15px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: none;
|
||||||
}
|
}
|
||||||
.read_itbutton_fail span:hover {
|
.read_itbutton_fail span:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -701,6 +723,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 15px 0;
|
margin: 15px 0 15px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
||||||
}
|
}
|
||||||
.add_towish a {
|
.add_towish a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -717,7 +740,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
|
||||||
padding: 8px 5px 8px 21px;
|
padding: 8px 5px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -754,7 +776,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
|
||||||
padding: 8px 5px 8px 21px;
|
padding: 8px 5px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -808,6 +829,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 0px 0;
|
margin: 15px 0 0px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/more_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.moreinfo a {
|
.moreinfo a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -824,7 +846,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/more_icon.png");
|
|
||||||
padding: 8px 42px 8px 21px;
|
padding: 8px 42px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -861,7 +882,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/more_icon.png");
|
|
||||||
padding: 8px 42px 8px 21px;
|
padding: 8px 42px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -925,7 +945,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/unglue_icon.png);
|
background-image: url("/static/images/book-panel/unglue_icon.png");
|
||||||
padding: 5px 0px 0px 20px;
|
padding: 5px 0px 0px 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -955,7 +975,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/add_gray.png);
|
background-image: url("/static/images/book-panel/add_gray.png");
|
||||||
padding: 8px 0px;
|
padding: 8px 0px;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
|
@ -998,7 +1018,7 @@ div.panelview.side2 > div {
|
||||||
.moreinfo2 a {
|
.moreinfo2 a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background-image: url(/static/images/book-panel/gray_more_info.png);
|
background-image: url("/static/images/book-panel/gray_more_info.png");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
padding: 8px 35px;
|
padding: 8px 35px;
|
||||||
|
@ -1782,7 +1802,6 @@ div.content-block-content {
|
||||||
}
|
}
|
||||||
.book-name {
|
.book-name {
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
font-weight: bold;
|
|
||||||
}
|
}
|
||||||
.book-author {
|
.book-author {
|
||||||
color: #6994a3;
|
color: #6994a3;
|
||||||
|
@ -1804,14 +1823,19 @@ div.content-block-content {
|
||||||
height: 25px;
|
height: 25px;
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
/* Do I even still need this?
|
#toggle-list {
|
||||||
.book-status span.percent99{ background:url(../images/images/icon-book1.png) 0 0 no-repeat;}
|
filter: alpha(opacity=100);
|
||||||
.book-status span.percent60{ background:url(../images/images/icon-book2.png) 0 0 no-repeat;}
|
-moz-opacity: 1;
|
||||||
.book-status span.percent22{ background:url(../images/images/icon-book3.png) 0 0 no-repeat;}
|
-khtml-opacity: 1;
|
||||||
.book-status span.percent7{ background:url(../images/images/icon-book4.png) 0 0 no-repeat;}
|
opacity: 1;
|
||||||
.book-status span.percent62{ background:url(../images/images/icon-book5.png) 0 0 no-repeat;}
|
}
|
||||||
.book-status span.percent21{ background:url(../images/images/icon-book6.png) 0 0 no-repeat;}
|
#toggle-panel {
|
||||||
*/.header-text {
|
filter: alpha(opacity=100);
|
||||||
|
-moz-opacity: 0.2;
|
||||||
|
-khtml-opacity: 0.2;
|
||||||
|
opacity: 0.2;
|
||||||
|
}
|
||||||
|
.header-text {
|
||||||
height: 36px;
|
height: 36px;
|
||||||
line-height: 36px;
|
line-height: 36px;
|
||||||
display: block;
|
display: block;
|
||||||
|
@ -1924,7 +1948,7 @@ div.content-block-content {
|
||||||
.panelview.add-wishlist {
|
.panelview.add-wishlist {
|
||||||
display: none;
|
display: none;
|
||||||
}
|
}
|
||||||
.panelview.book-name, .panelview.author {
|
.panelview.book-name div {
|
||||||
font-family: Arial, Helvetica, sans-serif;
|
font-family: Arial, Helvetica, sans-serif;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
line-height: 16px;
|
line-height: 16px;
|
||||||
|
@ -1960,6 +1984,9 @@ div.content-block-content {
|
||||||
padding: 10px 10px 0 0;
|
padding: 10px 10px 0 0;
|
||||||
width: 24px;
|
width: 24px;
|
||||||
}
|
}
|
||||||
|
.panelview.boolist-ebook a {
|
||||||
|
display: none;
|
||||||
|
}
|
||||||
/* switch to/from hover state when jquery swaps class names */
|
/* switch to/from hover state when jquery swaps class names */
|
||||||
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
span.panelview.panelback.side1, span.panelview.panelback.side1 div {
|
||||||
display: visible;
|
display: visible;
|
||||||
|
@ -2067,7 +2094,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: "/static/images/book-panel/book_icon.png) no-repeat 10% center";
|
|
||||||
padding: 0px 0px 0px 30px;
|
padding: 0px 0px 0px 30px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -2084,9 +2110,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: "/static/images/book-panel/book_icon.png) no-repeat 10% center";
|
|
||||||
padding: 0px 0px 0px 30px;
|
padding: 0px 0px 0px 30px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: url("/static/images/book-panel/book_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.read_itbutton a:hover {
|
.read_itbutton a:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -2159,7 +2185,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: none;
|
|
||||||
padding: 0px 0px 0px 15px;
|
padding: 0px 0px 0px 15px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -2176,9 +2201,9 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background: none;
|
|
||||||
padding: 0px 0px 0px 15px;
|
padding: 0px 0px 0px 15px;
|
||||||
color: #73a334;
|
color: #73a334;
|
||||||
|
background: none;
|
||||||
}
|
}
|
||||||
.read_itbutton_fail span:hover {
|
.read_itbutton_fail span:hover {
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
|
@ -2197,6 +2222,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 15px 0;
|
margin: 15px 0 15px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
||||||
}
|
}
|
||||||
.add_towish a {
|
.add_towish a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -2213,7 +2239,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
|
||||||
padding: 8px 5px 8px 21px;
|
padding: 8px 5px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -2250,7 +2275,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/add_wish_icon.png");
|
|
||||||
padding: 8px 5px 8px 21px;
|
padding: 8px 5px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -2304,6 +2328,7 @@ div.panelview.side2 > div {
|
||||||
padding: 0px;
|
padding: 0px;
|
||||||
margin: 15px 0 0px 0;
|
margin: 15px 0 0px 0;
|
||||||
vertical-align: baseline;
|
vertical-align: baseline;
|
||||||
|
background-image: url("/static/images/book-panel/more_icon.png") no-repeat 10% center;
|
||||||
}
|
}
|
||||||
.moreinfo a {
|
.moreinfo a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
|
@ -2320,7 +2345,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/more_icon.png");
|
|
||||||
padding: 8px 42px 8px 21px;
|
padding: 8px 42px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -2357,7 +2381,6 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url("/static/images/book-panel/more_icon.png");
|
|
||||||
padding: 8px 42px 8px 21px;
|
padding: 8px 42px 8px 21px;
|
||||||
color: #FFFFFF;
|
color: #FFFFFF;
|
||||||
border-top-width: 1px;
|
border-top-width: 1px;
|
||||||
|
@ -2421,7 +2444,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/unglue_icon.png);
|
background-image: url("/static/images/book-panel/unglue_icon.png");
|
||||||
padding: 5px 0px 0px 20px;
|
padding: 5px 0px 0px 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
text-align: right;
|
text-align: right;
|
||||||
|
@ -2451,7 +2474,7 @@ div.panelview.side2 > div {
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
text-decoration: none;
|
text-decoration: none;
|
||||||
text-transform: uppercase;
|
text-transform: uppercase;
|
||||||
background-image: url(/static/images/book-panel/add_gray.png);
|
background-image: url("/static/images/book-panel/add_gray.png");
|
||||||
padding: 8px 0px;
|
padding: 8px 0px;
|
||||||
padding-left: 20px;
|
padding-left: 20px;
|
||||||
color: #3d4e53;
|
color: #3d4e53;
|
||||||
|
@ -2494,7 +2517,7 @@ div.panelview.side2 > div {
|
||||||
.moreinfo2 a {
|
.moreinfo2 a {
|
||||||
line-height: 40px;
|
line-height: 40px;
|
||||||
font-size: 12px;
|
font-size: 12px;
|
||||||
background-image: url(/static/images/book-panel/gray_more_info.png);
|
background-image: url("/static/images/book-panel/gray_more_info.png");
|
||||||
background-repeat: no-repeat;
|
background-repeat: no-repeat;
|
||||||
background-position: left center;
|
background-position: left center;
|
||||||
padding: 8px 35px;
|
padding: 8px 35px;
|
||||||
|
|
|
@ -1,5 +1,12 @@
|
||||||
@import "variables.less";
|
@import "variables.less";
|
||||||
|
|
||||||
|
.opacity (@op) {
|
||||||
|
filter:alpha(opacity=@op);
|
||||||
|
-moz-opacity:@op/100;
|
||||||
|
-khtml-opacity:@op/100;
|
||||||
|
opacity:@op/100;
|
||||||
|
}
|
||||||
|
|
||||||
.block-inner {
|
.block-inner {
|
||||||
padding-right:10px;
|
padding-right:10px;
|
||||||
}
|
}
|
||||||
|
@ -264,7 +271,6 @@ div.content-block-content {
|
||||||
|
|
||||||
.book-name {
|
.book-name {
|
||||||
color:@text-blue;
|
color:@text-blue;
|
||||||
font-weight:bold;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.book-author {
|
.book-author {
|
||||||
|
@ -292,11 +298,10 @@ div.content-block-content {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Do I even still need this?
|
#toggle-list {
|
||||||
.book-status span.percent99{ background:url(../images/images/icon-book1.png) 0 0 no-repeat;}
|
.opacity(100);
|
||||||
.book-status span.percent60{ background:url(../images/images/icon-book2.png) 0 0 no-repeat;}
|
}
|
||||||
.book-status span.percent22{ background:url(../images/images/icon-book3.png) 0 0 no-repeat;}
|
|
||||||
.book-status span.percent7{ background:url(../images/images/icon-book4.png) 0 0 no-repeat;}
|
#toggle-panel {
|
||||||
.book-status span.percent62{ background:url(../images/images/icon-book5.png) 0 0 no-repeat;}
|
.opacity(20);
|
||||||
.book-status span.percent21{ background:url(../images/images/icon-book6.png) 0 0 no-repeat;}
|
}
|
||||||
*/
|
|