Merge branch 'master' into pledge_pretty_stick
Conflicts: frontend/templates/pledge.html static/css/pledge.css static/less/pledge.lesspull/1/head
commit
2bea7e89f4
|
@ -99,7 +99,15 @@
|
||||||
"model": "core.badge",
|
"model": "core.badge",
|
||||||
"fields": {
|
"fields": {
|
||||||
"name": "pledger",
|
"name": "pledger",
|
||||||
"description": "has made a pledge in at least one ungluing campaign"
|
"description": "a pledger"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pk": 2,
|
||||||
|
"model": "core.badge",
|
||||||
|
"fields": {
|
||||||
|
"name": "pledger2",
|
||||||
|
"description": "a repeat pledger"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
@ -5,6 +5,6 @@ from django.contrib.auth.models import User
|
||||||
|
|
||||||
class OwnerLookup(ModelLookup):
|
class OwnerLookup(ModelLookup):
|
||||||
model = User
|
model = User
|
||||||
search_field = 'username__icontains'
|
search_fields = ('username__icontains',)
|
||||||
|
|
||||||
registry.register(OwnerLookup)
|
registry.register(OwnerLookup)
|
|
@ -0,0 +1,34 @@
|
||||||
|
"""
|
||||||
|
set the 'pledged' badge for people who've pledged
|
||||||
|
"""
|
||||||
|
|
||||||
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.contrib.auth.models import User
|
||||||
|
from regluit.core.models import Badge
|
||||||
|
from regluit.payment.models import Transaction
|
||||||
|
|
||||||
|
class Command(BaseCommand):
|
||||||
|
help = "for people who've pledged, give them a badge!"
|
||||||
|
|
||||||
|
|
||||||
|
def handle(self, **options):
|
||||||
|
pledger= Badge.objects.get(name='pledger')
|
||||||
|
pledger2= Badge.objects.get(name='pledger2')
|
||||||
|
print 'start'
|
||||||
|
print 'pledger badges: %s' % pledger.holders.all().count()
|
||||||
|
print 'pledger2 badges: %s' % pledger2.holders.all().count()
|
||||||
|
pledges=Transaction.objects.exclude(status='NONE').exclude(status='Canceled',reason=None).exclude(anonymous=True)
|
||||||
|
for pledge in pledges:
|
||||||
|
if pledge.user.profile.badges.all().count():
|
||||||
|
if pledge.user.profile.badges.all()[0].id == pledger.id:
|
||||||
|
pledge.user.profile.badges.remove(pledger)
|
||||||
|
pledge.user.profile.badges.add(pledger2)
|
||||||
|
else:
|
||||||
|
pledge.user.profile.badges.add(pledger)
|
||||||
|
print 'end'
|
||||||
|
print 'pledger badges: %s' % pledger.holders.all().count()
|
||||||
|
print 'pledger2 badges: %s' % pledger2.holders.all().count()
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -957,6 +957,25 @@ class Wishes(models.Model):
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'core_wishlist_works'
|
db_table = 'core_wishlist_works'
|
||||||
|
|
||||||
|
class Badge(models.Model):
|
||||||
|
name = models.CharField(max_length=72, blank=True)
|
||||||
|
description = models.TextField(default='', null=True)
|
||||||
|
|
||||||
|
@property
|
||||||
|
def path(self):
|
||||||
|
return '/static/images/%s.png' % self.name
|
||||||
|
|
||||||
|
def pledger():
|
||||||
|
if not pledger.instance:
|
||||||
|
pledger.instance = Badge.objects.get(name='pledger')
|
||||||
|
return pledger.instance
|
||||||
|
pledger.instance=None
|
||||||
|
def pledger2():
|
||||||
|
if not pledger2.instance:
|
||||||
|
pledger2.instance = Badge.objects.get(name='pledger2')
|
||||||
|
return pledger2.instance
|
||||||
|
pledger2.instance=None
|
||||||
|
|
||||||
class UserProfile(models.Model):
|
class UserProfile(models.Model):
|
||||||
created = models.DateTimeField(auto_now_add=True)
|
created = models.DateTimeField(auto_now_add=True)
|
||||||
user = models.OneToOneField(User, related_name='profile')
|
user = models.OneToOneField(User, related_name='profile')
|
||||||
|
@ -972,12 +991,23 @@ class UserProfile(models.Model):
|
||||||
goodreads_user_name = models.CharField(max_length=200, null=True, blank=True)
|
goodreads_user_name = models.CharField(max_length=200, null=True, blank=True)
|
||||||
goodreads_auth_token = models.TextField(null=True, blank=True)
|
goodreads_auth_token = models.TextField(null=True, blank=True)
|
||||||
goodreads_auth_secret = models.TextField(null=True, blank=True)
|
goodreads_auth_secret = models.TextField(null=True, blank=True)
|
||||||
goodreads_user_link = models.CharField(max_length=200, null=True, blank=True)
|
goodreads_user_link = models.CharField(max_length=200, null=True, blank=True)
|
||||||
|
|
||||||
class Badge(models.Model):
|
|
||||||
name = models.CharField(max_length=72, blank=True)
|
|
||||||
description = models.TextField(default='', null=True)
|
|
||||||
|
|
||||||
|
def reset_pledge_badge(self):
|
||||||
|
#count user pledges
|
||||||
|
n_pledges = self.pledge_count
|
||||||
|
if self.badges.exists():
|
||||||
|
self.badges.remove(pledger())
|
||||||
|
self.badges.remove(pledger2())
|
||||||
|
if n_pledges == 1:
|
||||||
|
self.badges.add(pledger())
|
||||||
|
elif n_pledges > 1:
|
||||||
|
self.badges.add(pledger2())
|
||||||
|
|
||||||
|
@property
|
||||||
|
def pledge_count(self):
|
||||||
|
return self.user.transaction_set.exclude(status='NONE').exclude(status='Canceled',reason=None).exclude(anonymous=True).count()
|
||||||
|
|
||||||
#class CampaignSurveyResponse(models.Model):
|
#class CampaignSurveyResponse(models.Model):
|
||||||
# # generic
|
# # generic
|
||||||
# campaign = models.ForeignKey("Campaign", related_name="surveyresponse", null=False)
|
# campaign = models.ForeignKey("Campaign", related_name="surveyresponse", null=False)
|
||||||
|
|
|
@ -177,6 +177,8 @@ def handle_pledge_modified(sender, transaction=None, up_or_down=None, **kwargs):
|
||||||
# up_or_down is 'increased', 'decreased', or 'canceled'
|
# up_or_down is 'increased', 'decreased', or 'canceled'
|
||||||
if transaction==None or up_or_down==None:
|
if transaction==None or up_or_down==None:
|
||||||
return
|
return
|
||||||
|
if up_or_down == 'canceled':
|
||||||
|
transaction.user.profile.reset_pledge_badge()
|
||||||
notification.queue([transaction.user], "pledge_status_change", {
|
notification.queue([transaction.user], "pledge_status_change", {
|
||||||
'site':Site.objects.get_current(),
|
'site':Site.objects.get_current(),
|
||||||
'transaction': transaction,
|
'transaction': transaction,
|
||||||
|
@ -190,6 +192,11 @@ pledge_modified.connect(handle_pledge_modified)
|
||||||
def handle_you_have_pledged(sender, transaction=None, **kwargs):
|
def handle_you_have_pledged(sender, transaction=None, **kwargs):
|
||||||
if transaction==None:
|
if transaction==None:
|
||||||
return
|
return
|
||||||
|
|
||||||
|
#give user a badge
|
||||||
|
if not transaction.anonymous:
|
||||||
|
transaction.user.profile.reset_pledge_badge()
|
||||||
|
|
||||||
notification.queue([transaction.user], "pledge_you_have_pledged", {
|
notification.queue([transaction.user], "pledge_you_have_pledged", {
|
||||||
'site':Site.objects.get_current(),
|
'site':Site.objects.get_current(),
|
||||||
'transaction': transaction
|
'transaction': transaction
|
||||||
|
|
|
@ -307,7 +307,7 @@ class CampaignPledgeForm(forms.Form):
|
||||||
decimal_places=2,
|
decimal_places=2,
|
||||||
label="Pledge Amount",
|
label="Pledge Amount",
|
||||||
)
|
)
|
||||||
anonymous = forms.BooleanField(required=False, label=_("Don't display my name in the acknowledgements"))
|
anonymous = forms.BooleanField(required=False, label=_("Make this pledge anonymous, please"))
|
||||||
ack_name = forms.CharField(required=False, max_length=64, label=_("What name should we display?"))
|
ack_name = forms.CharField(required=False, max_length=64, label=_("What name should we display?"))
|
||||||
ack_dedication = forms.CharField(required=False, max_length=140, label=_("Your dedication:"))
|
ack_dedication = forms.CharField(required=False, max_length=140, label=_("Your dedication:"))
|
||||||
|
|
||||||
|
|
|
@ -214,13 +214,14 @@ Please fix the following before launching your campaign:
|
||||||
|
|
||||||
<p>{{ form.paypal_receiver.errors }}{{ form.paypal_receiver }}</p>
|
<p>{{ form.paypal_receiver.errors }}{{ form.paypal_receiver }}</p>
|
||||||
|
|
||||||
{% if not is_preview or request.user.is_staff %}
|
{% ifequal campaign_status 'ACTIVE' %}
|
||||||
{% ifequal campaign_status 'ACTIVE' %}
|
|
||||||
<div class="yikes">When you click this button, your changes will be visible to supporters immediately. Make sure to proofread!</div><br />
|
<div class="yikes">When you click this button, your changes will be visible to supporters immediately. Make sure to proofread!</div><br />
|
||||||
<input type="submit" name="save" value="Modify Campaign" />
|
<input type="submit" name="save" value="Modify Campaign" />
|
||||||
{% else %}
|
{% else %}
|
||||||
<br /><br /><input type="submit" name="save" value="Save Campaign" />
|
<br /><br /><input type="submit" name="save" value="Save Campaign" />
|
||||||
{% endifequal %}
|
{% endifequal %}
|
||||||
|
|
||||||
|
{% if not is_preview or request.user.is_staff %}
|
||||||
{% if campaign_status == 'INITIALIZED' %}
|
{% if campaign_status == 'INITIALIZED' %}
|
||||||
<input id="campaign_launcher" type="submit" name="launch" value="Launch Campaign" />
|
<input id="campaign_launcher" type="submit" name="launch" value="Launch Campaign" />
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
@ -240,7 +241,6 @@ Please fix the following before launching your campaign:
|
||||||
<span class="menu-item-price">${{ premium.amount|intcomma }}</span>
|
<span class="menu-item-price">${{ premium.amount|intcomma }}</span>
|
||||||
<span class="menu-item-desc">{{ premium.description }}</span>
|
<span class="menu-item-desc">{{ premium.description }}</span>
|
||||||
</i>
|
</i>
|
||||||
{% if premium.type %}<span class="custom-premium"> <br />Type: {{ premium.get_type_display }}</span>{% endif %}
|
|
||||||
{% ifnotequal premium.limit 0 %}<br />Limit: {{ premium.limit }}{% endifnotequal %}
|
{% ifnotequal premium.limit 0 %}<br />Limit: {{ premium.limit }}{% endifnotequal %}
|
||||||
{% ifequal premium.type 'CU' %}<br />Deactivate? <input type="checkbox" name="premium_id" value="{{ premium.id }}" />{% endifequal %}
|
{% ifequal premium.type 'CU' %}<br />Deactivate? <input type="checkbox" name="premium_id" value="{{ premium.id }}" />{% endifequal %}
|
||||||
</li>
|
</li>
|
||||||
|
@ -251,9 +251,7 @@ Please fix the following before launching your campaign:
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</form>
|
</form>
|
||||||
</div>
|
</div>
|
||||||
<h4>Editing premiums</h4>
|
<h4>Add a premium for this campaign</h4>
|
||||||
<p>At this time, you can't edit a premium you've created. But you can deactivate a premium and add a new one to replace it. So be sure to double-check your spelling before adding it.</p>
|
|
||||||
<h4>Add a custom premium for this campaign</h4>
|
|
||||||
<form action="#" method="POST">
|
<form action="#" method="POST">
|
||||||
{% csrf_token %}
|
{% csrf_token %}
|
||||||
Pledge Amount: {{ premium_form.amount.errors }}${{ premium_form.amount }}<br />
|
Pledge Amount: {{ premium_form.amount.errors }}${{ premium_form.amount }}<br />
|
||||||
|
@ -264,6 +262,8 @@ Please fix the following before launching your campaign:
|
||||||
<br />
|
<br />
|
||||||
<input type="submit" name="add_premium" value="Add Premium" />
|
<input type="submit" name="add_premium" value="Add Premium" />
|
||||||
</form>
|
</form>
|
||||||
|
<h4>Editing premiums</h4>
|
||||||
|
<p>At this time, you can't edit a premium you've created. But you can deactivate a premium and add a new one to replace it. So be sure to double-check your spelling before adding it.</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
{% ifequal campaign_status 'INITIALIZED' %}
|
{% ifequal campaign_status 'INITIALIZED' %}
|
||||||
|
|
|
@ -109,11 +109,12 @@
|
||||||
<div class="pledge_amount clearfix" id="mandatory_premiums">
|
<div class="pledge_amount clearfix" id="mandatory_premiums">
|
||||||
<div>Depending on your pledge amount, you'll also get these acknowledgements.</div>
|
<div>Depending on your pledge amount, you'll also get these acknowledgements.</div>
|
||||||
<div class="ack_active"><div class="ack_level">Any amount</div><div class="ack_header">The unglued ebook will be delivered to your inbox.</div></div>
|
<div class="ack_active"><div class="ack_level">Any amount</div><div class="ack_header">The unglued ebook will be delivered to your inbox.</div></div>
|
||||||
<div id="ack_name" class="ack_inactive"><div class="ack_level">$25+</div><div class="ack_header">You'll be listed on the acknowledgements page of the unglued ebook<span id="ack_section"></span>. {{ form.ack_name.label_tag }} {{ form.ack_name.errors }}{{ form.ack_name }}<div id="anonbox"><I>{{ form.anonymous.label_tag }}</I> {{ form.anonymous.errors }}{{ form.anonymous }}</div></div></div>
|
<div id="ack_name" class="ack_inactive"><div class="ack_level">$25+</div><div class="ack_header">You'll be listed on the acknowledgements page of the unglued ebook<span id="ack_section"></span>. {{ form.ack_name.label_tag }} {{ form.ack_name.errors }}{{ form.ack_name }}</div></div>
|
||||||
<div id="ack_link" class="ack_inactive"><div class="ack_level">$50+</div><div class="ack_header">Your acknowledgement will link to your Unglue.it supporter page.{{ form.ack_link }}</div></div>
|
<div id="ack_link" class="ack_inactive"><div class="ack_level">$50+</div><div class="ack_header">Your acknowledgement will link to your Unglue.it supporter page.{{ form.ack_link }}</div></div>
|
||||||
<div id="ack_dedication" class="ack_inactive"><div class="ack_level">$100+</div><div class="ack_header">Your acknowledgement can include a dedication (140 characters max). {{ form.ack_dedication.label_tag }} {{ form.ack_dedication.errors }}{{ form.ack_dedication }}</div></div>
|
<div id="ack_dedication" class="ack_inactive"><div class="ack_level">$100+</div><div class="ack_header">Your acknowledgement can include a dedication (140 characters max). {{ form.ack_dedication.label_tag }} {{ form.ack_dedication.errors }}{{ form.ack_dedication }}</div></div>
|
||||||
</div>
|
</div>
|
||||||
<input name="pledge" type="submit" {% if faqmenu == 'modify' %}value="Modify Support"{% else %}value="Unglue it!"{% endif %} id="pledgesubmit" />
|
<div id="anonbox"><I>{{ form.anonymous.label_tag }}</I> {{ form.anonymous.errors }}{{ form.anonymous }}</div>
|
||||||
|
<input name="pledge" type="submit" {% if faqmenu == 'modify' %}value="Modify Pledge"{% else %}value="Pledge Now"{% endif %} id="pledgesubmit" />
|
||||||
<input name="decoy" type="submit" id="fakepledgesubmit" disabled="disabled" />
|
<input name="decoy" type="submit" id="fakepledgesubmit" disabled="disabled" />
|
||||||
{% comment %}
|
{% comment %}
|
||||||
When the pledge amount and premium are in an inconsistent state, the real button is disabled and (via css) hidden; instead we display this fake button with a helpful message. It's a button so we can reuse all the existing CSS for buttons, so that it looks like the real button has just changed in appearance. It's hidden and the other one un-disabled and un-hidden when the pledge & premium return to a correct state. People without javascript enabled will miss out on the front-end corrections but form validation will catch it.
|
When the pledge amount and premium are in an inconsistent state, the real button is disabled and (via css) hidden; instead we display this fake button with a helpful message. It's a button so we can reuse all the existing CSS for buttons, so that it looks like the real button has just changed in appearance. It's hidden and the other one un-disabled and un-hidden when the pledge & premium return to a correct state. People without javascript enabled will miss out on the front-end corrections but form validation will catch it.
|
||||||
|
|
|
@ -2,10 +2,10 @@
|
||||||
{% block title %}Tools for Rightsholders {% endblock %}
|
{% block title %}Tools for Rightsholders {% endblock %}
|
||||||
{% block extra_extra_head %}
|
{% block extra_extra_head %}
|
||||||
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/ui-lightness/jquery-ui.css" type="text/css" media="screen">
|
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.13/themes/ui-lightness/jquery-ui.css" type="text/css" media="screen">
|
||||||
<link href="/static/css/dj.selectable.css" type="text/css" media="all" rel="stylesheet" />
|
<link href="/static/selectable/css/dj.selectable.css" type="text/css" media="all" rel="stylesheet" />
|
||||||
<script type="text/javascript" src="{{ jquery_home }}"></script>
|
<script type="text/javascript" src="{{ jquery_home }}"></script>
|
||||||
<script type="text/javascript" src="{{ jquery_ui_home }}"></script>
|
<script type="text/javascript" src="{{ jquery_ui_home }}"></script>
|
||||||
<script type="text/javascript" src="/static/js/jquery.dj.selectable.js"></script>
|
<script type="text/javascript" src="/static/selectable/js/jquery.dj.selectable.js"></script>
|
||||||
|
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,7 @@
|
||||||
var $j = jQuery.noConflict();
|
var $j = jQuery.noConflict();
|
||||||
$j(document).ready(function(){
|
$j(document).ready(function(){
|
||||||
$j('#user-block-hide').hide();
|
$j('#user-block-hide').hide();
|
||||||
$j('#user-block1 span').click(function() {
|
$j('#edit_profile').click(function() {
|
||||||
$j(this).toggleClass("active");
|
|
||||||
$j("#user-block-hide").slideToggle(300);
|
$j("#user-block-hide").slideToggle(300);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -66,8 +65,6 @@ function highlightTarget(targetdiv) {
|
||||||
{% comment %}
|
{% comment %}
|
||||||
To do:
|
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
|
|
||||||
decide if we're even including date joined in profile
|
|
||||||
Goodreads
|
Goodreads
|
||||||
be sure words display correctlydja
|
be sure words display correctlydja
|
||||||
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?
|
||||||
|
@ -91,46 +88,51 @@ there's no tab for seeing ALL my books, only the filters! huh.
|
||||||
<div class="js-topnews2">
|
<div class="js-topnews2">
|
||||||
<div class="js-topnews3">
|
<div class="js-topnews3">
|
||||||
<div class="user-block">
|
<div class="user-block">
|
||||||
{% ifequal supporter request.user %}
|
|
||||||
<div id="user-block1">
|
<div id="user-block1">
|
||||||
<div class="block-inner">
|
<div class="block-inner">
|
||||||
<span class="my-setting">My Profile</span>
|
{% if supporter.profile.pic_url %}
|
||||||
</div>
|
<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>
|
||||||
|
</div>
|
||||||
|
<span class="user-badges">
|
||||||
|
{% if supporter.profile.badges.all %}
|
||||||
|
{% for badge in supporter.profile.badges.all %}
|
||||||
|
<img src="{{ badge.path }}" alt="{{ badge.description }}" title="{{ badge.description }}" width="26px" height="26px" class="{{ badge.name }}" />
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
</span>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="user-block2">
|
<div class="user-block2">
|
||||||
{% if supporter.profile.pic_url %}
|
<span class="user-short-info">
|
||||||
<img class="user-avatar" src="{{ supporter.profile.pic_url }}" height="50" width="50" alt="Picture of {{ supporter }}" title="{{ supporter }}" />
|
{% with supporter.profile.tagline as tagline %}{% if tagline %}{{ tagline }}{% else %} {% endif %}{% endwith %}
|
||||||
{% else %}
|
</span>
|
||||||
<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|truncatechars:20 }}</a></span>
|
|
||||||
<span class="user-date">{{ date }}</span>
|
|
||||||
<span class="user-short-info">{{ supporter.profile.tagline }}</span>
|
|
||||||
</div>
|
</div>
|
||||||
{% else %}
|
|
||||||
<div id="user-block1">
|
|
||||||
<div class="block-inner">
|
|
||||||
{% 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-date">{{ date }}</span>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
<div class="user-block2">
|
|
||||||
<span class="user-short-info">{% with supporter.profile.tagline as tagline %}{% if tagline %}{{ tagline }}{% else %} {% endif %}{% endwith %}</span>
|
|
||||||
</div>
|
|
||||||
{% endifequal %}
|
|
||||||
<div class="user-block3">
|
<div class="user-block3">
|
||||||
<div class="badges">
|
<div class="badges">
|
||||||
<span class="rounded"><span class="blue tabs1" {% ifequal request.user supporter %}title="I've unglued {{ backed }} {% if backed == 1 %}book{% else %}books{% endif %}."{% else %}title="{{ supporter }} has unglued {{ backed }} {% if backed == 1 %}book{% else %}books{% endif %}."{% endifequal %}><span class="hovertext">I've unglued </span>{{ backed }}</span></span>
|
{% ifequal request.user supporter %}
|
||||||
<span class="rounded"><span class="orange tabs2" {% ifequal request.user supporter %}title="I'm supporting {{ backing }} {% if backing == 1 %}book{% else %}books{% endif %}."{% else %}title="{{ supporter }} is supporting {{ backing }} {% if backing == 1 %}book{% else %}books{% endif %}."{% endifequal %}><span class="hovertext">I'm ungluing </span>{{ backing }}</span></span>
|
<span class="rounded"><span class="blue tabs1" title="I've unglued {{ backed }} {% if backed == 1 %}book{% else %}books{% endif %}."><span class="hovertext">I've unglued </span>{{ backed }}</span></span>
|
||||||
<span class="rounded"><span class="grey tabs3" {% ifequal request.user supporter %}title="I'm wishing for {{ wished }} {% if wished == 1 %}book{% else %}books{% endif %}."{% else %}title="{{ supporter }} is wishing for {{ wished }} {% if wished == 1 %}book{% else %}books{% endif %}."{% endifequal %}><span class="hovertext">I'm wishing for </span>{{ wished }}</span></span>
|
<span class="rounded"><span class="orange tabs2" title="I'm supporting {{ backing }} {% if backing == 1 %}book{% else %}books{% endif %}."><span class="hovertext">I'm ungluing </span>{{ backing }}</span></span>
|
||||||
|
<span class="rounded"><span class="grey tabs3" title="I'm wishing for {{ wished }} {% if wished == 1 %}book{% else %}books{% endif %}."><span class="hovertext">I'm wishing for </span>{{ wished }}</span></span>
|
||||||
|
{% else %}
|
||||||
|
<span class="rounded"><span class="blue tabs1" title="{{ supporter }} has unglued {{ backed }} {% if backed == 1 %}book{% else %}books{% endif %}."><span class="hovertext">has unglued </span>{{ backed }}</span></span>
|
||||||
|
<span class="rounded"><span class="orange tabs2" title="{{ supporter }} is supporting {{ backing }} {% if backing == 1 %}book{% else %}books{% endif %}."><span class="hovertext">is ungluing </span>{{ backing }}</span></span>
|
||||||
|
<span class="rounded"><span class="grey tabs3" title="{{ supporter }} is wishing for {{ wished }} {% if wished == 1 %}book{% else %}books{% endif %}."><span class="hovertext">is wishing for </span>{{ wished }}</span></span>
|
||||||
|
{% endifequal %}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
<div class="user-block4">
|
<div class="user-block4">
|
||||||
|
{% ifequal request.user supporter %}
|
||||||
|
<div id="edit_profile">
|
||||||
|
<img src="/static/images/header/icon-edit.png" alt="Edit Your Profile" title="Edit Your Profile" />
|
||||||
|
</div>
|
||||||
|
{% endifequal %}
|
||||||
<div class="social">
|
<div class="social">
|
||||||
{% if supporter.profile.home_url %}
|
{% if supporter.profile.home_url %}
|
||||||
<a href="{{ supporter.profile.home_url }}" class="nounderline">
|
<a href="{{ supporter.profile.home_url }}" class="nounderline">
|
||||||
|
|
|
@ -422,7 +422,7 @@ def manage_campaign(request, id):
|
||||||
'form':form,
|
'form':form,
|
||||||
'problems': campaign.problems,
|
'problems': campaign.problems,
|
||||||
'alerts': alerts,
|
'alerts': alerts,
|
||||||
'premiums' : campaign.effective_premiums(),
|
'premiums' : campaign.custom_premiums(),
|
||||||
'premium_form' : new_premium_form,
|
'premium_form' : new_premium_form,
|
||||||
'work': work,
|
'work': work,
|
||||||
'activetab': activetab,
|
'activetab': activetab,
|
||||||
|
@ -1350,8 +1350,6 @@ def supporter(request, supporter_username, template_name):
|
||||||
else:
|
else:
|
||||||
activetab = "#3"
|
activetab = "#3"
|
||||||
|
|
||||||
date = supporter.date_joined.strftime("%B %d, %Y")
|
|
||||||
|
|
||||||
# following block to support profile admin form in supporter page
|
# following block to support profile admin form in supporter page
|
||||||
if request.user.is_authenticated() and request.user.username == supporter_username:
|
if request.user.is_authenticated() and request.user.username == supporter_username:
|
||||||
|
|
||||||
|
@ -1407,7 +1405,6 @@ def supporter(request, supporter_username, template_name):
|
||||||
"backed": backed,
|
"backed": backed,
|
||||||
"backing": backing,
|
"backing": backing,
|
||||||
"wished": wished,
|
"wished": wished,
|
||||||
"date": date,
|
|
||||||
"profile_form": profile_form,
|
"profile_form": profile_form,
|
||||||
"ungluers": userlists.other_users(supporter, 5 ),
|
"ungluers": userlists.other_users(supporter, 5 ),
|
||||||
"goodreads_auth_url": reverse('goodreads_auth'),
|
"goodreads_auth_url": reverse('goodreads_auth'),
|
||||||
|
|
|
@ -351,6 +351,10 @@ class TransactionTest(TestCase):
|
||||||
t.user = user
|
t.user = user
|
||||||
t.save()
|
t.save()
|
||||||
|
|
||||||
|
#test pledge adders
|
||||||
|
user.profile.reset_pledge_badge()
|
||||||
|
self.assertEqual(user.profile.badges.all()[0].name,'pledger')
|
||||||
|
|
||||||
p = PaymentManager()
|
p = PaymentManager()
|
||||||
results = p.query_campaign(c,campaign_total=True, summary=False)
|
results = p.query_campaign(c,campaign_total=True, summary=False)
|
||||||
self.assertEqual(results[0].amount, D('12.34'))
|
self.assertEqual(results[0].amount, D('12.34'))
|
||||||
|
|
|
@ -33,6 +33,12 @@ CKEDITOR_RESTRICT_BY_USER = True
|
||||||
CKEDITOR_CONFIGS = {
|
CKEDITOR_CONFIGS = {
|
||||||
'default': {
|
'default': {
|
||||||
'width': 700,
|
'width': 700,
|
||||||
|
'toolbar': [
|
||||||
|
['Cut','Copy','Paste', 'PasteFromWord', '-', 'Undo', 'Redo', '-', 'Source'],
|
||||||
|
['Bold', 'Italic', '-', 'NumberedList','BulletedList', '-','Blockquote'],
|
||||||
|
['Find','Replace','-', 'Scayt'],
|
||||||
|
['Link', 'Unlink', '-', 'Image', 'HorizontalRule']
|
||||||
|
],
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -286,4 +292,4 @@ MAINTENANCE_IGNORE_URLS = {}
|
||||||
class NONPROFIT:
|
class NONPROFIT:
|
||||||
is_on = True
|
is_on = True
|
||||||
name = 'Library Renewal'
|
name = 'Library Renewal'
|
||||||
link = 'http://127.0.0.1:8000/donate_to_campaign/'
|
link = 'http://127.0.0.1:8000/donate_to_campaign/'
|
||||||
|
|
|
@ -213,6 +213,7 @@ span.menu-item-price {
|
||||||
border: none;
|
border: none;
|
||||||
cursor: default;
|
cursor: default;
|
||||||
}
|
}
|
||||||
|
<<<<<<< HEAD
|
||||||
.fund_options a.fakeinput {
|
.fund_options a.fakeinput {
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
margin: 10px auto;
|
margin: 10px auto;
|
||||||
|
@ -288,4 +289,12 @@ span.level2.menu.answer {
|
||||||
}
|
}
|
||||||
span.level2.menu.answer a {
|
span.level2.menu.answer a {
|
||||||
font-size: 15px;
|
font-size: 15px;
|
||||||
|
=======
|
||||||
|
#anonbox {
|
||||||
|
margin-top: 10px;
|
||||||
|
background: #edf3f4;
|
||||||
|
float: left;
|
||||||
|
width: 48%;
|
||||||
|
padding: 1%;
|
||||||
|
>>>>>>> master
|
||||||
}
|
}
|
||||||
|
|
|
@ -154,6 +154,7 @@
|
||||||
#user-block1 {
|
#user-block1 {
|
||||||
float: left;
|
float: left;
|
||||||
width: 25%;
|
width: 25%;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
.user-block2 {
|
.user-block2 {
|
||||||
color: #6994a3;
|
color: #6994a3;
|
||||||
|
@ -195,9 +196,34 @@ img.user-avatar {
|
||||||
-webkit-border-radius: 7px;
|
-webkit-border-radius: 7px;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
}
|
}
|
||||||
|
.user-badges {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 60px;
|
||||||
|
}
|
||||||
|
.user-badges img {
|
||||||
|
vertical-align: text-bottom;
|
||||||
|
border: 1px solid #D4D4D4;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
.social {
|
.social {
|
||||||
width: 100%;
|
width: 100%;
|
||||||
}
|
}
|
||||||
|
#edit_profile {
|
||||||
|
float: right;
|
||||||
|
margin-top: -12px;
|
||||||
|
margin-right: -5px;
|
||||||
|
border: 2px solid white;
|
||||||
|
padding: 3px 2px 2px 3px;
|
||||||
|
}
|
||||||
|
#edit_profile:hover {
|
||||||
|
border: 2px solid #8dc63f;
|
||||||
|
-moz-border-radius: 5px;
|
||||||
|
-webkit-border-radius: 5px;
|
||||||
|
border-radius: 5px;
|
||||||
|
}
|
||||||
span.special-user-name {
|
span.special-user-name {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
|
@ -207,7 +233,6 @@ span.special-user-name {
|
||||||
height: 50px;
|
height: 50px;
|
||||||
}
|
}
|
||||||
span.user-name,
|
span.user-name,
|
||||||
span.user-date,
|
|
||||||
span.user-short-info {
|
span.user-short-info {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@ -313,10 +338,10 @@ span.my-setting {
|
||||||
-moz-border-radius: 7px;
|
-moz-border-radius: 7px;
|
||||||
-webkit-border-radius: 7px;
|
-webkit-border-radius: 7px;
|
||||||
border-radius: 7px;
|
border-radius: 7px;
|
||||||
height: 50px;
|
height: 40px;
|
||||||
line-height: 50px;
|
line-height: 40px;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 0 0 0 10px;
|
padding: 0 0 10px 10px;
|
||||||
font-size: 19px;
|
font-size: 19px;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
cursor: pointer;
|
cursor: pointer;
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 1.4 KiB |
Binary file not shown.
After Width: | Height: | Size: 1.3 KiB |
|
@ -235,4 +235,11 @@ span.level2.menu.answer {
|
||||||
a {
|
a {
|
||||||
font-size: @font-size-larger;
|
font-size: @font-size-larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#anonbox {
|
||||||
|
margin-top: 10px;
|
||||||
|
background: @pale-blue;
|
||||||
|
float: left;
|
||||||
|
width: 48%;
|
||||||
|
padding: 1%;
|
||||||
}
|
}
|
|
@ -77,6 +77,7 @@
|
||||||
#user-block1 {
|
#user-block1 {
|
||||||
float:left;
|
float:left;
|
||||||
width:25%;
|
width:25%;
|
||||||
|
position: relative;
|
||||||
}
|
}
|
||||||
|
|
||||||
.user-block2 {
|
.user-block2 {
|
||||||
|
@ -121,10 +122,35 @@ img.user-avatar {
|
||||||
.one-border-radius(7px);
|
.one-border-radius(7px);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.user-badges {
|
||||||
|
position: absolute;
|
||||||
|
bottom: 0;
|
||||||
|
left: 60px;
|
||||||
|
|
||||||
|
img {
|
||||||
|
vertical-align:text-bottom;
|
||||||
|
border:1px solid #d4d4d4;
|
||||||
|
.one-border-radius(5px);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
.social {
|
.social {
|
||||||
width:100%;
|
width:100%;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#edit_profile {
|
||||||
|
float: right;
|
||||||
|
margin-top: -12px;
|
||||||
|
margin-right: -5px;
|
||||||
|
border: 2px solid white;
|
||||||
|
padding: 3px 2px 2px 3px;
|
||||||
|
|
||||||
|
&:hover {
|
||||||
|
border: 2px solid @call-to-action;
|
||||||
|
.one-border-radius(5px);
|
||||||
|
}
|
||||||
|
}
|
||||||
span.special-user-name {
|
span.special-user-name {
|
||||||
display: block;
|
display: block;
|
||||||
font-size: @font-size-header;
|
font-size: @font-size-header;
|
||||||
|
@ -135,7 +161,6 @@ span.special-user-name {
|
||||||
}
|
}
|
||||||
|
|
||||||
span.user-name,
|
span.user-name,
|
||||||
span.user-date,
|
|
||||||
span.user-short-info {
|
span.user-short-info {
|
||||||
display: block;
|
display: block;
|
||||||
}
|
}
|
||||||
|
@ -234,9 +259,9 @@ input.profile-save {
|
||||||
span.my-setting {
|
span.my-setting {
|
||||||
background:@blue-grey url("@{image-base}header/explane.png") 90% center no-repeat;
|
background:@blue-grey url("@{image-base}header/explane.png") 90% center no-repeat;
|
||||||
.one-border-radius(7px);
|
.one-border-radius(7px);
|
||||||
.height(50px);
|
.height(40px);
|
||||||
display:block;
|
display:block;
|
||||||
padding:0 0 0 10px;
|
padding:0 0 10px 10px;
|
||||||
font-size: @font-size-header;
|
font-size: @font-size-header;
|
||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
cursor:pointer;
|
cursor:pointer;
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
@bright-blue: #8ac3d7;
|
@bright-blue: #8ac3d7;
|
||||||
@alert: #e35351;
|
@alert: #e35351;
|
||||||
@orange: #e18551;
|
@orange: #e18551;
|
||||||
|
@yellow: #efd45e;
|
||||||
@image-base: "/static/images/";
|
@image-base: "/static/images/";
|
||||||
@background-header: "@{image-base}bg.png";
|
@background-header: "@{image-base}bg.png";
|
||||||
@background-body: "@{image-base}bg-body.png";
|
@background-body: "@{image-base}bg-body.png";
|
||||||
|
|
Loading…
Reference in New Issue