Merge in master
commit
52957407ad
|
@ -0,0 +1,9 @@
|
|||
https://www.ubiquitypress.com/sitemap.xml
|
||||
https://www.kriterium.se/sitemap.xml
|
||||
https://oa.finlit.fi/sitemap.xml
|
||||
https://www.humanities-map.net/sitemap.xml
|
||||
https://oa.psupress.org/sitemap.xml
|
||||
https://www.larcommons.net/sitemap.xml
|
||||
https://www.uwestminsterpress.co.uk/sitemap.xml
|
||||
https://www.stockholmuniversitypress.se/sitemap.xml
|
||||
https://www.luminosoa.org/sitemap.xml
|
|
@ -18,7 +18,7 @@ class UbiquityScraper(BaseScraper):
|
|||
for desc in descs:
|
||||
if desc.find(string=HAS_EDS):
|
||||
return 'editor'
|
||||
return super(self, UbiquityScraper).get_role()
|
||||
return super(UbiquityScraper, self).get_role()
|
||||
|
||||
def get_language(self):
|
||||
langlabel = self.doc.find(string='Language')
|
||||
|
@ -28,4 +28,4 @@ class UbiquityScraper(BaseScraper):
|
|||
if lang:
|
||||
self.set('language', lang)
|
||||
else:
|
||||
super(self, UbiquityScraper).get_language()
|
||||
super(UbiquityScraper, self).get_language()
|
||||
|
|
|
@ -1,9 +1,10 @@
|
|||
import os
|
||||
from django.core.management.base import BaseCommand
|
||||
|
||||
from regluit.core.loaders import add_by_sitemap
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "load books based on a website sitemap"
|
||||
help = "load books based on a website sitemap; use url=all to load from sitemap list"
|
||||
|
||||
def add_arguments(self, parser):
|
||||
# Positional arguments
|
||||
|
@ -20,5 +21,20 @@ class Command(BaseCommand):
|
|||
)
|
||||
|
||||
def handle(self, url, max=None, **options):
|
||||
books = add_by_sitemap(url, maxnum=max)
|
||||
if url == 'all':
|
||||
file_name = "../../../bookdata/sitemaps.txt"
|
||||
command_dir = os.path.dirname(os.path.realpath(__file__))
|
||||
file_path = os.path.join(command_dir, file_name)
|
||||
with open(file_path) as f:
|
||||
content = f.readlines()
|
||||
books = []
|
||||
for sitemap in content:
|
||||
added = add_by_sitemap(sitemap.strip(), maxnum=max)
|
||||
max = max - len(added)
|
||||
books = books + added
|
||||
if max < 0:
|
||||
break
|
||||
else:
|
||||
books = add_by_sitemap(url, maxnum=max)
|
||||
|
||||
print "loaded {} books".format(len(books))
|
||||
|
|
|
@ -85,7 +85,7 @@ def create_notice_types( **kwargs):
|
|||
notification.create_notice_type("rights_holder_accepted", _("Agreement Accepted"), _("You have become a verified Unglue.it rights holder."))
|
||||
notification.create_notice_type("rights_holder_claim", _("Claim Entered"), _("A claim has been entered."))
|
||||
notification.create_notice_type("wishlist_unsuccessful_amazon", _("Campaign shut down"), _("An ungluing campaign that you supported had to be shut down due to an Amazon Payments policy change."))
|
||||
notification.create_notice_type("pledge_gift_credit", _("Gift Credit Balance"), _("You have a gift credit balance"))
|
||||
notification.create_notice_type("pledge_gift_credit", _("Credit Balance"), _("You have a credit balance"))
|
||||
notification.create_notice_type("new_wisher", _("New wisher"), _("Someone new has faved a book that you're the rightsholder for"))
|
||||
notification.create_notice_type("account_expiring", _("Credit Card Expiring Soon"), _("Your credit card is about to expire."))
|
||||
notification.create_notice_type("account_expired", _("Credit Card Has Expired"), _("Your credit card has expired."))
|
||||
|
|
|
@ -384,7 +384,7 @@ class CampaignPledgeForm(forms.Form):
|
|||
preapproval_amount = forms.DecimalField(
|
||||
required = False,
|
||||
min_value=D('1.00'),
|
||||
max_value=D('2000.00'),
|
||||
max_value=D('5000.00'),
|
||||
decimal_places=2,
|
||||
label="Support Amount",
|
||||
)
|
||||
|
|
|
@ -13,24 +13,24 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block doccontent %}
|
||||
<h2>gift Credits</h2>
|
||||
<h2>Unglue.it Credits</h2>
|
||||
<p>
|
||||
You have a balance of {{ user.credit.balance }} gift credits. <br />
|
||||
You have pledged {{ user.credit.pledged }} gift credits to ungluing campaigns.<br />
|
||||
You have {{ user.credit.available }} gift credits available to pledge or transfer.<br />
|
||||
You have a balance of {{ user.credit.balance }} Unglue.it credits. <br />
|
||||
You have pledged {{ user.credit.pledged }} Unglue.it credits to ungluing campaigns.<br />
|
||||
You have {{ user.credit.available }} Unglue.it credits available to pledge or transfer.<br />
|
||||
</p>
|
||||
<div class="clearfix">
|
||||
<h2>Gift Credit Transfers</h2>
|
||||
<h2>Unglue.it Credit Transfers</h2>
|
||||
{% if transfer_message %}
|
||||
<p>{{ transfer_message }}
|
||||
{% if transfer_amount %}
|
||||
<br /> Recipient: <a href="{% url 'supporter' recipient %}">{{ recipient }}</a>
|
||||
<br /> Amount: {{ transfer_amount }} gift credits
|
||||
<br /> Amount: {{ transfer_amount }} Unglue.it credits
|
||||
{% endif %}
|
||||
</p>
|
||||
{% endif %}
|
||||
<p>
|
||||
You may transfer up to {{ user.credit.available }} gift credits to another Unglue.it user.<br />
|
||||
You may transfer up to {{ user.credit.available }} Unglue.it credits to another Unglue.it user.<br />
|
||||
</p>
|
||||
<form action="#" method="POST">
|
||||
{% csrf_token %}
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
|
||||
{% load humanize %}
|
||||
|
||||
{% block title %}You Have Gift Credits{% endblock %}
|
||||
{% block title %}You Have Unglue.it Credits{% endblock %}
|
||||
|
||||
{% block doccontent %}
|
||||
<div style="height:15px"></div>
|
||||
|
@ -13,9 +13,9 @@
|
|||
<div>
|
||||
<h2> Gift Credited </h2>
|
||||
<p>{% if error %}
|
||||
Your gift credit of ${{ envelope.amount }}.{{ envelope.cents }} has already been registered! {% if work %} If you want to contribute more to <a href="{% url 'work' work.id %}">{{ work.title }}</a>, you can! {% endif %}
|
||||
Your Unglue.it credit of ${{ envelope.amount }}.{{ envelope.cents }} has already been registered! {% if work %} If you want to contribute more to <a href="{% url 'work' work.id %}">{{ work.title }}</a>, you can! {% endif %}
|
||||
{% else %}
|
||||
Congratulations, your gift credit of ${{ envelope.amount }}.{{ envelope.cents }} has been registered! {% if transaction.campaign %} ${{transaction.amount}} of that had been pledged to {{ transaction.campaign.name }}. If you want to contribute more to <a href="{% url 'work' work.id %}">{{ work.title }}</a>, you can! {% endif %}
|
||||
Congratulations, your Unglue.it credit of ${{ envelope.amount }}.{{ envelope.cents }} has been registered! {% if transaction.campaign %} ${{transaction.amount}} of that had been pledged to {{ transaction.campaign.name }}. If you want to contribute more to <a href="{% url 'work' work.id %}">{{ work.title }}</a>, you can! {% endif %}
|
||||
{% endif %}
|
||||
</p>
|
||||
<!-- sent log: {{ envelope.sent }} -->
|
||||
|
@ -24,9 +24,9 @@
|
|||
<div>
|
||||
<h2> Your gift credits </h2>
|
||||
<p>
|
||||
You have a balance of {{ request.user.credit.balance }} gift credits. <br />
|
||||
You have pledged {{ request.user.credit.pledged }} gift credits to ungluing campaigns.<br />
|
||||
You have {{ request.user.credit.available }} gift credits available to pledge or <a href="{% url 'gift' %}">transfer</a>.<br />
|
||||
You have a balance of {{ request.user.credit.balance }} Unglue.it credits. <br />
|
||||
You have pledged {{ request.user.credit.pledged }} Unglue.it credits to ungluing campaigns.<br />
|
||||
You have {{ request.user.credit.available }} Unglue.it credits available to pledge or <a href="{% url 'gift' %}">transfer</a>.<br />
|
||||
</p>
|
||||
|
||||
|
||||
|
|
|
@ -10,9 +10,9 @@
|
|||
<div class="jsmodule rounded clearfix">
|
||||
<div class="jsmod-content">
|
||||
|
||||
<div><h2>Wrong user for gift credit</h2>
|
||||
<div><h2>Wrong user for Unglue.it credit</h2>
|
||||
<div>
|
||||
<p>Unglue.it would like to process your gift credit, but you are currently logged in as <code>{{request.user.username}}</code>. Your gift credit for ${{ envelope.amount }}.{{ envelope.cents }} is designated for <code>{{ envelope.username }}</code>. To record your credit, you need to <a href='{% url 'auth_logout' %}?next={{ request.get_full_path|urlencode }}'>log out</a>, and then <a href='{% url 'superlogin' %}?next={{ request.get_full_path|urlencode }}'>log in</a> as <code>{{ envelope.username }}</code>. If you have any problem, don't hesitate to <a href="{% url 'feedback' %}?page={{request.build_absolute_uri|urlencode:""}}">contact us</a>.
|
||||
<p>Unglue.it would like to process your Unglue.it credit, but you are currently logged in as <code>{{request.user.username}}</code>. Your Unglue.it credit for ${{ envelope.amount }}.{{ envelope.cents }} is designated for <code>{{ envelope.username }}</code>. To record your credit, you need to <a href='{% url 'auth_logout' %}?next={{ request.get_full_path|urlencode }}'>log out</a>, and then <a href='{% url 'superlogin' %}?next={{ request.get_full_path|urlencode }}'>log in</a> as <code>{{ envelope.username }}</code>. If you have any problem, don't hesitate to <a href="{% url 'feedback' %}?page={{request.build_absolute_uri|urlencode:""}}">contact us</a>.
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
|
|
@ -1,12 +1,12 @@
|
|||
{% extends 'notification/base.html' %}
|
||||
|
||||
{% load sass_tags %}
|
||||
|
||||
{% load i18n %}
|
||||
|
||||
{% block title %}{% trans "Notices" %}{% endblock %}
|
||||
|
||||
{% block extra_css %}
|
||||
<link type="text/css" rel="stylesheet" href="/static/css/notices.css" />
|
||||
<link type="text/css" rel="stylesheet" href="{% sass_src 'scss/notices.scss' %}" />
|
||||
{% endblock %}
|
||||
|
||||
{% block doccontent %}
|
||||
|
@ -23,24 +23,28 @@
|
|||
<div class="notices_menu">
|
||||
<a href="{% url 'notification_mark_all_seen' %}">{% trans "Mark all notices seen" %}</a>
|
||||
</div>
|
||||
{% elif notice.unseen or request.GET.mode != 'seen' %}
|
||||
<div class="notices_menu">
|
||||
<a href="{% url 'notification_notices' %}?mode=seen">{% trans "Show seen notices" %}</a>
|
||||
</div>
|
||||
{% else %}
|
||||
<div class="notices_menu">
|
||||
<a href="{% url 'notification_notices' %}">{% trans "Show only unseen notices" %}</a>
|
||||
</div>
|
||||
{% endif %}
|
||||
<div class="comments"></div>
|
||||
<br />
|
||||
|
||||
{% if unseen_count > 0 %}
|
||||
{% if unseen_count > 0 or request.GET.mode == 'seen' %}
|
||||
{% for notice in notices %}
|
||||
{% if notice.unseen %}
|
||||
{% comment %}
|
||||
Note: do not call is_unseen because it will mark the notification as seen,
|
||||
and we're leaving that up to the user.
|
||||
{% endcomment %}
|
||||
{% if notice.unseen or request.GET.mode == 'seen' %}
|
||||
<div class="notice">
|
||||
{{ notice.message|safe }}
|
||||
</div>
|
||||
{% endif %}
|
||||
{% endfor %}
|
||||
{% else %}
|
||||
<p>{% trans "You have no unseen notices." %}</p>
|
||||
<p>You have no {% if unseen_count == 0 %}unseen {% endif %} notices.</p>
|
||||
{% endif %}
|
||||
|
||||
{% endblock %}
|
|
@ -1,4 +1,4 @@
|
|||
{% load humanize %}{% if transaction.donation %}{% ifequal transaction.host 'credit' %}Your Unglue.it transaction has completed and ${{transaction.max_amount|default:"0"}} has been deducted from your Unglue.it credit balance. You have ${{transaction.user.credit.available|default:"0"}} of credit left. {% else %}{% if transaction.max_amount > transaction.amount %}Your transaction for ${{transaction.max_amount|default:"0"}} has completed. Your credit card has been charged ${{transaction.amount}} and the rest has been deducted from your unglue.it credit balance. You have ${{transaction.user.credit.available|default:"0"}} of credit left. {% else %}Your Unglue.it credit card transaction has completed and your credit card has been charged ${{ transaction.amount|default:"0" }}. {% endif %}{% endifequal %}
|
||||
{% load humanize %}{% if transaction.donation %}{% if transaction.host == 'credit' %}Your Unglue.it transaction has completed and ${{transaction.max_amount|default:"0"}} has been deducted from your Unglue.it credit balance. You have ${{transaction.user.credit.available|default:"0"}} of credit left. {% elif transaction.max_amount > transaction.amount %}Your transaction for ${{transaction.max_amount|default:"0"}} has completed. Your credit card has been charged ${{transaction.amount}} and the rest has been deducted from your unglue.it credit balance. You have ${{transaction.user.credit.available|default:"0"}} of credit left. {% else %}Your Unglue.it credit card transaction has completed and your credit card has been charged ${{ transaction.amount|default:"0" }}. {% endif %}
|
||||
|
||||
Your donation of ${{transaction.max_amount|default:"0"}} to the Free Ebook Foundation will support our effort to release {{ transaction.campaign.work.title }} to the world in an unglued ebook edition. We'll email you if the campaign succeeds, and when the ebook is available for download. If you'd like to visit the campaign page, click here:
|
||||
https://{{ current_site.domain }}{% url 'work' transaction.campaign.work_id %}
|
||||
|
@ -15,7 +15,7 @@ Thank you again for your generous support.
|
|||
|
||||
{% else %}An Ungluing!
|
||||
|
||||
Thanks to you and other ungluers, {{ transaction.campaign.work.title }} will be released to the world in an unglued ebook edition. Your credit card has been charged ${{ transaction.amount|floatformat:2|intcomma }}.
|
||||
Thanks to you and other ungluers, {{ transaction.campaign.work.title }} will be released to the world in an unglued ebook edition. Your {% if transaction.host == 'credit' %}Unglue.it credit account{% else %}credit card{% endif %} has been charged ${{ transaction.amount|floatformat:2|intcomma }}.
|
||||
|
||||
Pledge summary
|
||||
{% include "notification/pledge_summary.txt" %}
|
||||
|
|
|
@ -40,7 +40,7 @@
|
|||
{% else %}
|
||||
<p>Congratulations!</p>
|
||||
|
||||
<p>Thanks to you and other ungluers, {{ transaction.campaign.work.title }} will be released to the world in an unglued ebook edition. {{ transaction.host|capfirst }} has been charged to your credit card.</p>
|
||||
<p>Thanks to you and other ungluers, {{ transaction.campaign.work.title }} will be released to the world in an unglued ebook edition. Your {% if transaction.host == 'credit' %}Unglue.it credit account{% else %}credit card{% endif %} has been charged ${{ transaction.amount|floatformat:2|intcomma }}.</p>
|
||||
|
||||
<p><b>Pledge Summary</b><br />
|
||||
Amount pledged: {{ transaction.amount|floatformat:2|intcomma }}<br />
|
||||
|
|
|
@ -1,19 +1,19 @@
|
|||
{% if amount > 0 %}
|
||||
{% if amount == 1 %}
|
||||
{{ user.username }}, 1 gift credit has been added to your unglue.it gift credit account.
|
||||
{{ user.username }}, 1 Unglue.it credit has been added to your unglue.it gift credit account.
|
||||
{% else %}
|
||||
{{ user.username }}, {{ amount }} gift credits have been added to your unglue.it gift credit account.
|
||||
{{ user.username }}, {{ amount }} Unglue.it credits have been added to your unglue.it gift credit account.
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if amount == 1 %}
|
||||
{{ user.username }}, 1 gift credit has been deducted from your unglue.it gift credit account.
|
||||
{{ user.username }}, 1 Unglue.it credit has been deducted from your unglue.it gift credit account.
|
||||
{% else %}
|
||||
{{ user.username }}, {{ minus_amount }} gift credits have been deducted from your unglue.it gift credit account.
|
||||
{{ user.username }}, {{ minus_amount }} Unglue.it credits have been deducted from your unglue.it gift credit account.
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
You have a balance of {{ user.credit.balance }} gift credits.
|
||||
You have pledged {{ user.credit.pledged }} gift credits to ungluing campaigns.
|
||||
You have {{ user.credit.available }} gift credits available to pledge or transfer.
|
||||
You can manage your gift credit account at https://unglue.it/gift/
|
||||
You have a balance of {{ user.credit.balance }} Unglue.it credits.
|
||||
You have pledged {{ user.credit.pledged }} Unglue.it credits to ungluing campaigns.
|
||||
You have {{ user.credit.available }} Unglue.it credits available to pledge or transfer.
|
||||
You can manage your Unglue.it credit account at https://unglue.it/gift/
|
||||
|
||||
Gift credits can be used in support of any type of ungluing campaign.
|
||||
Unglue.it credits can be used in support of any type of ungluing campaign.
|
|
@ -2,26 +2,26 @@
|
|||
|
||||
{% block comments_graphical %}
|
||||
{% if amount > 0 %}
|
||||
{{ user.username }}, {{ amount }} gift credits have been added to your unglue.it gift credit account.
|
||||
{{ user.username }}, {{ amount }} Unglue.it credits have been added to your unglue.it Unglue.it credit account.
|
||||
{% else %}
|
||||
{{ user.username }}, {{ minus_amount }} gift credits have been deducted from your unglue.it gift credit account.
|
||||
{{ user.username }}, {{ minus_amount }} Unglue.it credits have been deducted from your unglue.it Unglue.it credit account.
|
||||
{% endif %}
|
||||
{% endblock %}
|
||||
{% block comments_textual %}
|
||||
<p>
|
||||
You have a balance of {{ user.credit.balance }} gift credits.
|
||||
You have a balance of {{ user.credit.balance }} Unglue.it credits.
|
||||
</p>
|
||||
<p>
|
||||
You have pledged {{ user.credit.pledged }} gift credits to ungluing campaigns.
|
||||
You have pledged {{ user.credit.pledged }} Unglue.it credits to ungluing campaigns.
|
||||
</p>
|
||||
<p>
|
||||
You have {{ user.credit.available }} gift credits available to pledge or transfer.
|
||||
You have {{ user.credit.available }} Unglue.it credits available to pledge or transfer.
|
||||
</p>
|
||||
<p>
|
||||
You can manage your gift credit account <a href="https://unglue.it/gift/">here</a>
|
||||
You can manage your Unglue.it credit account <a href="https://unglue.it/gift/">here</a>
|
||||
</p>
|
||||
<p>
|
||||
|
||||
Gift credits can be used in support of ungluing campaigns.
|
||||
Unglue.it credits can be used in support of ungluing campaigns.
|
||||
</p>
|
||||
{% endblock %}
|
|
@ -1 +1 @@
|
|||
{% if amount > 0 %}{{ amount }} gift credits have been added to your unglue.it gift credit account.{% else %}{{ minus_amount }} gift credits have been deducted from your unglue.it gift credit account.{% endif %}
|
||||
{% if amount > 0 %}{{ amount }} Unglue.it credits have been added to your unglue.it credit account.{% else %}{{ minus_amount }} Unglue.it credits have been deducted from your unglue.it credit account.{% endif %}
|
|
@ -1,20 +1,13 @@
|
|||
{% if work.last_campaign_status == 'SUCCESSFUL' %}
|
||||
{{ work.title }}, which is on your ungluing list, is now available for download as an Unglued Ebook.
|
||||
New ebook files for "{{ work.title }}", which is on your ungluing list, are available for download.
|
||||
|
||||
{% else %}
|
||||
{{ work.title }}, which is on your ungluing list, is available for download as a {{ work.ebooks.0.get_rights_display }} ebook.
|
||||
|
||||
{% if work.ebooks.0.user %}
|
||||
We'd like to thank Ungluer {{work.ebooks.0.user}} for adding the link(s).
|
||||
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
Here are the files available for download:
|
||||
Here are the files now available:
|
||||
{% for ebook in work.ebooks %}
|
||||
File type: {{ ebook.get_format_display }}
|
||||
License: {{ ebook.get_rights_display }}
|
||||
{% if ebook.version_label %}Version: {{ ebook.version_label }}
|
||||
{% endif %}License: {{ ebook.get_rights_display }}
|
||||
Host Site: {{ ebook.provider }}
|
||||
URL: {{ ebook.download_url }}
|
||||
Date Added: {{ ebook.created|date:"M d, Y" }}
|
||||
|
||||
{% endfor %}
|
||||
{% if work.ebooks.0.rights == 'PD-US' %}
|
||||
|
|
|
@ -11,35 +11,26 @@
|
|||
{% endblock %}
|
||||
|
||||
{% block comments_textual %}
|
||||
{% if work.last_campaign_status == 'SUCCESSFUL' %}
|
||||
<p>
|
||||
Great News! <a href="{% url 'work' work.id %}">{{ work.title }}</a> which is on your ungluing list is now available for download as an Unglued Ebook.
|
||||
New ebook files for <a href="{% url 'work' work.id %}">{{ work.title }}</a>, are available for download.
|
||||
</p>
|
||||
{% else %}
|
||||
<p>
|
||||
Good News! <a href="{% url 'work' work.id %}">{{ work.title }}</a> which is on your ungluing list is available for download as a {{ work.ebooks.0.get_rights_display }} ebook.
|
||||
</p>
|
||||
{% if work.ebooks.0.user %}
|
||||
<p>
|
||||
We'd like to thank Ungluer {{work.ebooks.0.user}} for adding the link(s).
|
||||
</p>
|
||||
{% endif %}
|
||||
{% endif %}
|
||||
|
||||
<p>Here are the files available for download:</p>
|
||||
<p>Here are the files now available for download:</p>
|
||||
<table>
|
||||
<tr>
|
||||
<th>File type</th>
|
||||
<th>Version</th>
|
||||
<th>License</th>
|
||||
<th>Host Site</th>
|
||||
<th>URL</th>
|
||||
<th>Date Added</th>
|
||||
</tr>
|
||||
{% for ebook in work.ebooks %}
|
||||
<tr>
|
||||
<td>{{ ebook.get_format_display }}</td>
|
||||
<td>{{ ebook.version_label }}</td>
|
||||
<td>{{ ebook.get_rights_display }}</td>
|
||||
<td>{{ ebook.provider }}</td>
|
||||
<td><a href="{{ ebook.download_url }}">{{ ebook.download_url|truncatechars:30 }}</a></td>
|
||||
<td>{{ ebook.created|date:"M d, Y" }}</td>
|
||||
</tr>
|
||||
{% endfor %}
|
||||
|
||||
|
|
|
@ -1 +1 @@
|
|||
{{ work.title }} is available for download!
|
||||
New ebook files for {{ work.title }} are available for download!
|
|
@ -177,7 +177,7 @@
|
|||
<input name="pledge" type="submit" value="Buy Now" id="pledgesubmit" class="loader-gif" />
|
||||
<input name="decoy" type="submit" id="fakepledgesubmit" disabled="disabled" />
|
||||
{% if request.user.credit.available > 0 %}
|
||||
<div class="bigger" style="height:45px;clear:both"> You have an available gift credit of ${{ request.user.credit.available|intcomma }} which will be applied to your purchase.</div>
|
||||
<div class="bigger" style="height:45px;clear:both"> You have an available Unglue.it credit of ${{ request.user.credit.available|intcomma }} which will be applied to your purchase.</div>
|
||||
{% endif %}
|
||||
</form>
|
||||
|
||||
|
|
|
@ -1063,7 +1063,7 @@ class PledgeView(FormView):
|
|||
host = PAYMENT_HOST_NONE,
|
||||
campaign=self.campaign,
|
||||
user=self.request.user,
|
||||
paymentReason="Unglue.it Pledge for {0}".format(self.campaign.name),
|
||||
paymentReason=u"Unglue.it Pledge for {0}".format(self.campaign.name),
|
||||
pledge_extra=form.trans_extra,
|
||||
donation = donation
|
||||
)
|
||||
|
|
|
@ -1,27 +1,31 @@
|
|||
from datetime import timedelta
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from datetime import datetime
|
||||
|
||||
from regluit.payment import baseprocessor
|
||||
from regluit.payment.baseprocessor import BasePaymentRequest
|
||||
from regluit.payment.parameters import *
|
||||
from regluit.payment.parameters import (
|
||||
PAYMENT_HOST_CREDIT,
|
||||
PAYMENT_TYPE_AUTHORIZATION,
|
||||
PAYMENT_TYPE_INSTANT,
|
||||
TRANSACTION_STATUS_COMPLETE,
|
||||
TRANSACTION_STATUS_CANCELED,
|
||||
)
|
||||
from regluit.payment.signals import transaction_charged
|
||||
|
||||
def pledge_transaction(t,user,amount):
|
||||
def pledge_transaction(t, user, amount):
|
||||
"""commit <amount> from a <user>'s credit to a specified transaction <t>"""
|
||||
|
||||
|
||||
if t.amount and t.host == PAYMENT_HOST_CREDIT:
|
||||
#changing the pledge_transaction
|
||||
success = user.credit.add_to_pledged(amount-t.amount)
|
||||
else:
|
||||
else:
|
||||
success = user.credit.add_to_pledged(amount)
|
||||
if success:
|
||||
t.type = PAYMENT_TYPE_AUTHORIZATION
|
||||
t.max_amount=amount
|
||||
t.max_amount = amount
|
||||
t.set_credit_approved(amount)
|
||||
return success
|
||||
|
||||
def credit_transaction(t,user,amount):
|
||||
def credit_transaction(t, user, amount):
|
||||
'''user has new credit, use it to fund the transaction'''
|
||||
# first, credit the user's account
|
||||
success = user.credit.add_to_balance(amount)
|
||||
|
@ -35,7 +39,7 @@ def credit_transaction(t,user,amount):
|
|||
|
||||
def pay_transaction(t, user, to_user, amount):
|
||||
'''user has credit, transfer it to rh account'''
|
||||
success = user.credit.transfer_to(to_user , amount)
|
||||
success = user.credit.transfer_to(to_user, amount)
|
||||
if success:
|
||||
t.type = PAYMENT_TYPE_INSTANT
|
||||
t.set_executed()
|
||||
|
@ -44,19 +48,19 @@ def pay_transaction(t, user, to_user, amount):
|
|||
class Processor(baseprocessor.Processor):
|
||||
class CancelPreapproval(BasePaymentRequest):
|
||||
'''
|
||||
Cancels an exisiting token.
|
||||
Cancels an exisiting token.
|
||||
'''
|
||||
|
||||
|
||||
def __init__(self, transaction):
|
||||
self.transaction = transaction
|
||||
if transaction.user.credit.add_to_pledged(-transaction.amount):
|
||||
#success
|
||||
transaction.status=TRANSACTION_STATUS_CANCELED
|
||||
transaction.status = TRANSACTION_STATUS_CANCELED
|
||||
transaction.save()
|
||||
else:
|
||||
self.errorMessage="couldn't cancel the transaction"
|
||||
self.errorMessage = "couldn't cancel the transaction"
|
||||
self.status = 'Credit Cancel Failure'
|
||||
|
||||
|
||||
class PreapprovalDetails(BasePaymentRequest):
|
||||
status = None
|
||||
approved = None
|
||||
|
@ -67,3 +71,25 @@ class Processor(baseprocessor.Processor):
|
|||
self.approved = transaction.approved
|
||||
self.currency = transaction.currency
|
||||
self.amount = transaction.amount
|
||||
|
||||
class Execute(BasePaymentRequest):
|
||||
'''
|
||||
This Execute function debits the user credits and pledge and credits the recipient.
|
||||
'''
|
||||
def __init__(self, transaction=None):
|
||||
self.transaction = transaction
|
||||
amount = transaction.amount
|
||||
# make sure transaction hasn't already been executed
|
||||
if transaction.status == TRANSACTION_STATUS_COMPLETE:
|
||||
return
|
||||
|
||||
used = transaction.user.credit.use_pledge(amount)
|
||||
if used:
|
||||
user_to_pay = transaction.campaign.user_to_pay
|
||||
credited = user_to_pay.credit.add_to_balance(amount, notify=False)
|
||||
transaction.status = TRANSACTION_STATUS_COMPLETE
|
||||
transaction.date_payment = datetime.now()
|
||||
transaction.save()
|
||||
|
||||
# fire signal for sucessful transaction
|
||||
transaction_charged.send(sender=self, transaction=transaction)
|
||||
|
|
|
@ -1,16 +1,24 @@
|
|||
from django.core.management.base import BaseCommand
|
||||
from django.contrib.auth.models import User
|
||||
from django.contrib.auth.models import User
|
||||
|
||||
class Command(BaseCommand):
|
||||
help = "grant credit to a user"
|
||||
help = "grant (or debit or redeem) credit to a user. \
|
||||
Usage: grant_user_credit <username> <amount> <action>\
|
||||
amount is dollars or 'all' "
|
||||
args = "<username> <amount> <action>"
|
||||
|
||||
def handle(self, username, amount, action="credit", *args, **kwargs):
|
||||
if action=="debit":
|
||||
amount=-int(amount)
|
||||
else:
|
||||
amount= int(amount)
|
||||
if action not in ("debit", "redeem", "credit"):
|
||||
print 'action should be in ("debit", "redeem", "credit")'
|
||||
return
|
||||
user = User.objects.get(username=username)
|
||||
user.credit.add_to_balance(amount)
|
||||
print "%s now has a balance of %s gift credits" % (username, user.credit.balance)
|
||||
|
||||
if amount == 'all':
|
||||
amount = user.credit.available
|
||||
if action in ("debit", "redeem" ):
|
||||
amount = -int(amount)
|
||||
elif action == "credit":
|
||||
amount = int(amount)
|
||||
notify = action != "redeem"
|
||||
user.credit.add_to_balance(amount, notify=notify)
|
||||
print "{}ed ${} from {}".format(action, amount, username)
|
||||
print "{} now has a balance of {} credits".format(username, user.credit.balance)
|
||||
|
|
|
@ -323,7 +323,7 @@ class PaymentManager( object ):
|
|||
|
||||
# only allow active transactions to go through again, if there is an error, intervention is needed
|
||||
transactions = Transaction.objects.filter(campaign=campaign, status=TRANSACTION_STATUS_ACTIVE)
|
||||
|
||||
|
||||
results = []
|
||||
|
||||
for t in transactions:
|
||||
|
@ -461,8 +461,6 @@ class PaymentManager( object ):
|
|||
# Mark as payment attempted so we will poll this periodically for status changes
|
||||
transaction.set_payment()
|
||||
|
||||
# here's where we need to add handling for credit transactions in pledge campaigns
|
||||
|
||||
p = transaction.get_payment_class().Execute(transaction)
|
||||
|
||||
# Create a response for this
|
||||
|
|
|
@ -1,112 +1,125 @@
|
|||
"""
|
||||
external library imports
|
||||
"""
|
||||
import datetime
|
||||
import datetime
|
||||
import uuid
|
||||
|
||||
from django.utils.http import urlquote
|
||||
import logging
|
||||
|
||||
from decimal import Decimal
|
||||
|
||||
from jsonfield import JSONField
|
||||
|
||||
"""
|
||||
django imports
|
||||
"""
|
||||
## django imports
|
||||
|
||||
from django.conf import settings
|
||||
from django.contrib.auth.models import User
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
from django.contrib.sites.models import Site
|
||||
from django.db.models.signals import post_save, post_delete, pre_save
|
||||
from django.db.models.signals import post_save, post_delete
|
||||
from django.utils.http import urlquote
|
||||
|
||||
## django module imports
|
||||
|
||||
"""
|
||||
django module imports
|
||||
"""
|
||||
from notification import models as notification
|
||||
|
||||
|
||||
"""
|
||||
regluit imports
|
||||
"""
|
||||
from regluit.payment.parameters import *
|
||||
## regluit imports
|
||||
|
||||
from regluit.payment.parameters import (
|
||||
PAYMENT_TYPE_NONE,
|
||||
PAYMENT_TYPE_AUTHORIZATION,
|
||||
|
||||
PAYMENT_HOST_NONE,
|
||||
|
||||
PAYMENT_HOST_CREDIT,
|
||||
|
||||
EXECUTE_TYPE_NONE,
|
||||
TRANSACTION_STATUS_NONE,
|
||||
TRANSACTION_STATUS_ACTIVE,
|
||||
TRANSACTION_STATUS_ERROR,
|
||||
TRANSACTION_STATUS_FAILED,
|
||||
)
|
||||
|
||||
from regluit.payment.signals import credit_balance_added, pledge_created
|
||||
from regluit.utils.localdatetime import now, date_today
|
||||
|
||||
logger = logging.getLogger(__name__)
|
||||
|
||||
# in fitting stripe -- here are possible fields to fit in with Transaction
|
||||
# c.id, c.amount, c.amount_refunded, c.currency, c.description, datetime.fromtimestamp(c.created, tz=utc), c.paid,
|
||||
# c.id, c.amount, c.amount_refunded, c.currency, c.description,
|
||||
# datetime.fromtimestamp(c.created, tz=utc), c.paid,
|
||||
# c.fee, c.disputed, c.amount_refunded, c.failure_message,
|
||||
# c.card.fingerprint, c.card.type, c.card.last4, c.card.exp_month, c.card.exp_year
|
||||
|
||||
# promising fields
|
||||
|
||||
class Transaction(models.Model):
|
||||
|
||||
|
||||
# type e.g., PAYMENT_TYPE_INSTANT or PAYMENT_TYPE_AUTHORIZATION -- defined in parameters.py
|
||||
type = models.IntegerField(default=PAYMENT_TYPE_NONE, null=False)
|
||||
|
||||
# host: the payment processor. Named after the payment module that hosts the payment processing functions
|
||||
|
||||
# host: the payment processor.
|
||||
#Named after the payment module that hosts the payment processing functions
|
||||
host = models.CharField(default=PAYMENT_HOST_NONE, max_length=32, null=False)
|
||||
|
||||
|
||||
#execution: e.g. EXECUTE_TYPE_CHAINED_INSTANT, EXECUTE_TYPE_CHAINED_DELAYED, EXECUTE_TYPE_PARALLEL
|
||||
execution = models.IntegerField(default=EXECUTE_TYPE_NONE, null=False)
|
||||
|
||||
|
||||
# status: general status constants defined in parameters.py
|
||||
status = models.CharField(max_length=32, default=TRANSACTION_STATUS_NONE, null=False)
|
||||
|
||||
|
||||
# local_status: status code specific to the payment processor
|
||||
local_status = models.CharField(max_length=32, default='NONE', null=True)
|
||||
|
||||
|
||||
# amount & currency -- amount of money and its currency involved for transaction
|
||||
amount = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
max_amount = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
currency = models.CharField(max_length=10, default='USD', null=True)
|
||||
|
||||
|
||||
# a unique ID that can be passed to PayPal to track a transaction
|
||||
secret = models.CharField(max_length=64, null=True)
|
||||
|
||||
|
||||
# a paykey that PayPal generates to identify this transaction
|
||||
pay_key = models.CharField(max_length=128, null=True)
|
||||
|
||||
|
||||
# a preapproval key that Paypal generates to identify this transaction
|
||||
preapproval_key = models.CharField(max_length=128, null=True)
|
||||
|
||||
# (RY is not sure what receipt is for; t4u has hijacked this to be an email address for user.is_anonymous to send a receipt to)
|
||||
|
||||
# (RY is not sure what receipt is for; t4u has hijacked this to be an email address for
|
||||
# user.is_anonymous to send a receipt to)
|
||||
receipt = models.CharField(max_length=256, null=True)
|
||||
|
||||
|
||||
# whether a Preapproval has been approved or not
|
||||
approved = models.NullBooleanField(null=True)
|
||||
|
||||
|
||||
# error message from a transaction
|
||||
error = models.CharField(max_length=256, null=True)
|
||||
|
||||
|
||||
# IPN.reason_code
|
||||
reason = models.CharField(max_length=64, null=True)
|
||||
|
||||
|
||||
# creation and last modified timestamps
|
||||
date_created = models.DateTimeField(auto_now_add=True, db_index=True,)
|
||||
date_modified = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
# date_payment: when an attempt is made to make the primary payment
|
||||
date_payment = models.DateTimeField(null=True)
|
||||
|
||||
|
||||
# date_executed: when an attempt is made to send money to non-primary chained receivers
|
||||
date_executed = models.DateTimeField(null=True)
|
||||
|
||||
|
||||
# datetime for creation of preapproval and for its expiration
|
||||
date_authorized = models.DateTimeField(null=True)
|
||||
date_expired = models.DateTimeField(null=True)
|
||||
|
||||
|
||||
# associated User, Campaign, and Premium for this Transaction
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
|
||||
campaign = models.ForeignKey('core.Campaign', null=True)
|
||||
premium = models.ForeignKey('core.Premium', null=True)
|
||||
offer = models.ForeignKey('core.Offer', null=True)
|
||||
extra = JSONField(null=True, default={})
|
||||
|
||||
|
||||
# whether the user wants to be not listed publicly
|
||||
anonymous = models.BooleanField(default=False)
|
||||
|
||||
|
@ -121,143 +134,150 @@ class Transaction(models.Model):
|
|||
return 1
|
||||
if self.amount < 100:
|
||||
return 2
|
||||
else:
|
||||
return 3
|
||||
return 3
|
||||
|
||||
@property
|
||||
def deadline_or_now(self):
|
||||
if self.campaign and self.campaign.deadline:
|
||||
return self.campaign.deadline
|
||||
else:
|
||||
return now()
|
||||
|
||||
return now()
|
||||
|
||||
@property
|
||||
def needed_amount(self):
|
||||
if self.user == None or self.user.is_anonymous():
|
||||
if self.user is None or self.user.is_anonymous():
|
||||
return self.max_amount
|
||||
if self.user.credit.available >= self.max_amount:
|
||||
return 0
|
||||
else:
|
||||
return self.max_amount - self.user.credit.available
|
||||
return self.max_amount - self.user.credit.available
|
||||
|
||||
@property
|
||||
def credit_amount(self):
|
||||
if self.user == None or self.user.is_anonymous():
|
||||
if self.user is None or self.user.is_anonymous():
|
||||
return 0
|
||||
if self.user.credit.available >= self.max_amount:
|
||||
return self.max_amount
|
||||
return self.user.credit.available
|
||||
|
||||
|
||||
@property
|
||||
def ack_link(self):
|
||||
return 'https://unglue.it/supporter/%s' % urlquote(self.user.username) if not self.anonymous else ''
|
||||
|
||||
|
||||
def save(self, *args, **kwargs):
|
||||
if not self.secret:
|
||||
self.secret = str(uuid.uuid1())
|
||||
super(Transaction, self).save(*args, **kwargs) # Call the "real" save() method.
|
||||
|
||||
|
||||
def __unicode__(self):
|
||||
return u"-- Transaction:\n \tstatus: %s\n \t amount: %s\n \terror: %s\n" % (self.status, str(self.amount), self.error)
|
||||
|
||||
return u"-- Transaction:\n \tstatus: %s\n \t amount: %s\n \terror: %s\n" % (self.status, str(self.amount), self.error)
|
||||
|
||||
def create_receivers(self, receiver_list):
|
||||
|
||||
|
||||
primary = True
|
||||
for r in receiver_list:
|
||||
receiver = Receiver.objects.create(email=r['email'], amount=r['amount'], currency=self.currency, status="None", primary=primary, transaction=self)
|
||||
receiver = Receiver.objects.create(
|
||||
email=r['email'],
|
||||
amount=r['amount'],
|
||||
currency=self.currency,
|
||||
status="None",
|
||||
primary=primary,
|
||||
transaction=self
|
||||
)
|
||||
primary = False
|
||||
|
||||
|
||||
def get_payment_class(self):
|
||||
'''
|
||||
Returns the specific payment processor that implements this transaction
|
||||
'''
|
||||
if self.host == PAYMENT_HOST_NONE:
|
||||
return None
|
||||
else:
|
||||
mod = __import__("regluit.payment." + self.host, fromlist=[str(self.host)])
|
||||
return mod.Processor()
|
||||
|
||||
mod = __import__("regluit.payment." + self.host, fromlist=[str(self.host)])
|
||||
return mod.Processor()
|
||||
|
||||
def set_executed(self):
|
||||
self.date_executed = now()
|
||||
self.save()
|
||||
|
||||
def set_payment(self):
|
||||
def set_payment(self):
|
||||
self.date_payment = now()
|
||||
self.save()
|
||||
|
||||
self.save()
|
||||
|
||||
def set_credit_approved(self, amount):
|
||||
self.amount=amount
|
||||
self.amount = amount
|
||||
self.host = PAYMENT_HOST_CREDIT
|
||||
self.type = PAYMENT_TYPE_AUTHORIZATION
|
||||
self.status=TRANSACTION_STATUS_ACTIVE
|
||||
self.approved=True
|
||||
self.status = TRANSACTION_STATUS_ACTIVE
|
||||
self.approved = True
|
||||
now_val = now()
|
||||
self.date_authorized = now_val
|
||||
self.date_expired = now_val + datetime.timedelta( days=settings.PREAPPROVAL_PERIOD )
|
||||
self.date_expired = now_val + datetime.timedelta(days=settings.PREAPPROVAL_PERIOD)
|
||||
self.save()
|
||||
pledge_created.send(sender=self, transaction=self)
|
||||
|
||||
|
||||
def set_pledge_extra(self, pledge_extra):
|
||||
if pledge_extra:
|
||||
self.anonymous = pledge_extra.anonymous
|
||||
self.premium = pledge_extra.premium
|
||||
self.offer = pledge_extra.offer
|
||||
self.extra.update( pledge_extra.extra)
|
||||
self.extra.update(pledge_extra.extra)
|
||||
|
||||
def get_pledge_extra(self):
|
||||
class pe:
|
||||
anonymous=self.anonymous
|
||||
premium=self.premium
|
||||
offer=self.offer
|
||||
extra=self.extra
|
||||
anonymous = self.anonymous
|
||||
premium = self.premium
|
||||
offer = self.offer
|
||||
extra = self.extra
|
||||
return pe
|
||||
|
||||
@classmethod
|
||||
def create(cls, amount=0.00, host=PAYMENT_HOST_NONE, max_amount=0.00, currency='USD',
|
||||
status=TRANSACTION_STATUS_NONE, campaign=None, user=None, pledge_extra=None,
|
||||
donation=False):
|
||||
status=TRANSACTION_STATUS_NONE, campaign=None, user=None, pledge_extra=None,
|
||||
donation=False):
|
||||
if user and user.is_anonymous():
|
||||
user = None
|
||||
t = cls.objects.create(
|
||||
amount=amount,
|
||||
host=host,
|
||||
max_amount=max_amount,
|
||||
currency=currency,
|
||||
status=status,
|
||||
campaign=campaign,
|
||||
user=user,
|
||||
donation=donation,
|
||||
amount=amount,
|
||||
host=host,
|
||||
max_amount=max_amount,
|
||||
currency=currency,
|
||||
status=status,
|
||||
campaign=campaign,
|
||||
user=user,
|
||||
donation=donation,
|
||||
)
|
||||
if pledge_extra:
|
||||
t.set_pledge_extra(pledge_extra)
|
||||
return t
|
||||
|
||||
|
||||
class PaymentResponse(models.Model):
|
||||
# The API used
|
||||
api = models.CharField(max_length=64, null=False)
|
||||
|
||||
|
||||
# The correlation ID
|
||||
correlation_id = models.CharField(max_length=512, null=True)
|
||||
|
||||
|
||||
# the paypal timestamp
|
||||
timestamp = models.CharField(max_length=128, null=True)
|
||||
|
||||
|
||||
# extra info we want to store if an error occurs such as the response message
|
||||
info = models.CharField(max_length=1024, null=True)
|
||||
|
||||
|
||||
# local status specific to the api call
|
||||
status = models.CharField(max_length=32, null=True)
|
||||
|
||||
|
||||
transaction = models.ForeignKey(Transaction, null=False)
|
||||
|
||||
def __unicode__(self):
|
||||
return u"PaymentResponse -- api: {0} correlation_id: {1} transaction: {2}".format(self.api, self.correlation_id, unicode(self.transaction))
|
||||
|
||||
|
||||
return u"PaymentResponse -- api: {0} correlation_id: {1} transaction: {2}".format(
|
||||
self.api,
|
||||
self.correlation_id,
|
||||
unicode(self.transaction)
|
||||
)
|
||||
|
||||
|
||||
class Receiver(models.Model):
|
||||
|
||||
|
||||
email = models.CharField(max_length=64)
|
||||
|
||||
|
||||
amount = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
currency = models.CharField(max_length=10)
|
||||
|
||||
|
@ -267,224 +287,232 @@ class Receiver(models.Model):
|
|||
primary = models.BooleanField(default=True)
|
||||
txn_id = models.CharField(max_length=64)
|
||||
transaction = models.ForeignKey(Transaction)
|
||||
|
||||
|
||||
def __unicode__(self):
|
||||
return u"Receiver -- email: {0} status: {1} transaction: {2}".format(self.email, self.status, unicode(self.transaction))
|
||||
return u"Receiver -- email: {0} status: {1} transaction: {2}".format(
|
||||
self.email,
|
||||
self.status,
|
||||
unicode(self.transaction)
|
||||
)
|
||||
|
||||
class CreditLog(models.Model):
|
||||
# a write only record of Gift Credit Transactions
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
|
||||
# a write only record of Unglue.it Credit Transactions
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
|
||||
amount = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
timestamp = models.DateTimeField(auto_now=True)
|
||||
action = models.CharField(max_length=16)
|
||||
# used to record the sent id when action = 'deposit'
|
||||
sent=models.IntegerField(null=True)
|
||||
|
||||
sent = models.IntegerField(null=True)
|
||||
|
||||
class Credit(models.Model):
|
||||
user = models.OneToOneField(settings.AUTH_USER_MODEL, related_name='credit')
|
||||
balance = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
pledged = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
last_activity = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
@property
|
||||
def available(self):
|
||||
return self.balance - self.pledged
|
||||
|
||||
def add_to_balance(self, num_credits):
|
||||
if self.pledged - self.balance > num_credits : # negative to withdraw
|
||||
|
||||
def add_to_balance(self, num_credits, notify=True):
|
||||
if self.pledged - self.balance > num_credits: # negative to withdraw
|
||||
return False
|
||||
else:
|
||||
self.balance = self.balance + num_credits
|
||||
self.save()
|
||||
try: # bad things can happen here if you don't return True
|
||||
CreditLog(user = self.user, amount = num_credits, action="add_to_balance").save()
|
||||
CreditLog(user=self.user, amount=num_credits, action="add_to_balance").save()
|
||||
except:
|
||||
logger.exception("failed to log add_to_balance of %s", num_credits)
|
||||
try:
|
||||
credit_balance_added.send(sender=self, amount=num_credits)
|
||||
except:
|
||||
logger.exception("credit_balance_added failed of %s", num_credits)
|
||||
if notify:
|
||||
try:
|
||||
credit_balance_added.send(sender=self, amount=num_credits)
|
||||
except:
|
||||
logger.exception("credit_balance_added notification failed of %s", num_credits)
|
||||
return True
|
||||
|
||||
|
||||
def add_to_pledged(self, num_credits):
|
||||
num_credits=Decimal(num_credits)
|
||||
num_credits = Decimal(num_credits)
|
||||
if num_credits is Decimal('NaN'):
|
||||
return False
|
||||
if self.balance - self.pledged < num_credits :
|
||||
if self.balance - self.pledged < num_credits:
|
||||
return False
|
||||
else:
|
||||
self.pledged=self.pledged + num_credits
|
||||
self.save()
|
||||
try: # bad things can happen here if you don't return True
|
||||
CreditLog(user = self.user, amount = num_credits, action="add_to_pledged").save()
|
||||
except:
|
||||
logger.exception("failed to log add_to_pledged of %s", num_credits)
|
||||
return True
|
||||
|
||||
self.pledged = self.pledged + num_credits
|
||||
self.save()
|
||||
try: # bad things can happen here if you don't return True
|
||||
CreditLog(user=self.user, amount=num_credits, action="add_to_pledged").save()
|
||||
except:
|
||||
logger.exception("failed to log add_to_pledged of %s", num_credits)
|
||||
return True
|
||||
|
||||
def use_pledge(self, num_credits):
|
||||
num_credits=Decimal(num_credits)
|
||||
num_credits = Decimal(num_credits)
|
||||
if num_credits is Decimal('NaN'):
|
||||
return False
|
||||
if self.pledged < num_credits :
|
||||
if self.pledged < num_credits:
|
||||
return False
|
||||
else:
|
||||
self.pledged=self.pledged - num_credits
|
||||
self.balance = self.balance - num_credits
|
||||
self.save()
|
||||
try:
|
||||
CreditLog(user = self.user, amount = - num_credits, action="use_pledge").save()
|
||||
except:
|
||||
logger.exception("failed to log use_pledge of %s", num_credits)
|
||||
return True
|
||||
|
||||
def transfer_to(self, receiver, num_credits):
|
||||
num_credits=Decimal(num_credits)
|
||||
if num_credits is Decimal('NaN') or not isinstance( receiver, User):
|
||||
logger.info('fail: %s, %s' % (num_credits,receiver))
|
||||
self.pledged = self.pledged - num_credits
|
||||
self.balance = self.balance - num_credits
|
||||
self.save()
|
||||
try:
|
||||
CreditLog(user=self.user, amount=-num_credits, action="use_pledge").save()
|
||||
except:
|
||||
logger.exception("failed to log use_pledge of %s", num_credits)
|
||||
return True
|
||||
|
||||
def transfer_to(self, receiver, num_credits, notify=True):
|
||||
num_credits = Decimal(num_credits)
|
||||
if num_credits is Decimal('NaN') or not isinstance(receiver, User):
|
||||
logger.info('fail: %s, %s' % (num_credits, receiver))
|
||||
return False
|
||||
if self.add_to_balance(-num_credits):
|
||||
if receiver.credit.add_to_balance(num_credits):
|
||||
if receiver.credit.add_to_balance(num_credits, notify):
|
||||
return True
|
||||
else:
|
||||
# unwind transfer
|
||||
self.add_to_balance(num_credits)
|
||||
return False
|
||||
else:
|
||||
# unwind transfer
|
||||
self.add_to_balance(num_credits, notify)
|
||||
return False
|
||||
return False
|
||||
|
||||
class Sent(models.Model):
|
||||
'''used by gift view to record gifts it has sent'''
|
||||
user = models.CharField(max_length=32, null=True)
|
||||
amount = models.DecimalField(default=Decimal('0.00'), max_digits=14, decimal_places=2) # max 999,999,999,999.99
|
||||
timestamp = models.DateTimeField(auto_now=True)
|
||||
|
||||
|
||||
class Account(models.Model):
|
||||
"""holds references to accounts at third party payment gateways, especially for representing credit cards"""
|
||||
|
||||
# the following fields from stripe Customer might be relevant to Account -- we need to pick good selection
|
||||
# c.id, c.description, c.email, datetime.fromtimestamp(c.created, tz=utc), c.account_balance, c.delinquent,
|
||||
# c.active_card.fingerprint, c.active_card.type, c.active_card.last4, c.active_card.exp_month, c.active_card.exp_year,
|
||||
|
||||
# the following fields from stripe Customer might be relevant to Account
|
||||
# -- we need to pick good selection
|
||||
# c.id, c.description, c.email, datetime.fromtimestamp(c.created, tz=utc),
|
||||
# c.account_balance, c.delinquent,
|
||||
# c.active_card.fingerprint, c.active_card.type, c.active_card.last4,
|
||||
# c.active_card.exp_month, c.active_card.exp_year,
|
||||
# c.active_card.country
|
||||
|
||||
|
||||
# ACTIVE, DEACTIVATED, EXPIRED, EXPIRING, or ERROR
|
||||
STATUS_CHOICES = (
|
||||
('ACTIVE','ACTIVE'),
|
||||
('DEACTIVATED','DEACTIVATED'),
|
||||
('EXPIRED','EXPIRED'),
|
||||
('EXPIRING','EXPIRING'),
|
||||
( 'ERROR','ERROR')
|
||||
)
|
||||
|
||||
# host: the payment processor. Named after the payment module that hosts the payment processing functions
|
||||
STATUS_CHOICES = (
|
||||
('ACTIVE', 'ACTIVE'),
|
||||
('DEACTIVATED', 'DEACTIVATED'),
|
||||
('EXPIRED', 'EXPIRED'),
|
||||
('EXPIRING', 'EXPIRING'),
|
||||
('ERROR', 'ERROR')
|
||||
)
|
||||
|
||||
# host: the payment processor. Named after the payment module that
|
||||
# hosts the payment processing functions
|
||||
host = models.CharField(default=PAYMENT_HOST_NONE, max_length=32, null=False)
|
||||
account_id = models.CharField(max_length=128, null=True)
|
||||
|
||||
|
||||
# card related info
|
||||
card_last4 = models.CharField(max_length=4, null=True)
|
||||
|
||||
|
||||
# Visa, American Express, MasterCard, Discover, JCB, Diners Club, or Unknown
|
||||
card_type = models.CharField(max_length=32, null=True)
|
||||
card_exp_month = models.IntegerField(null=True)
|
||||
card_exp_year = models.IntegerField(null=True)
|
||||
card_fingerprint = models.CharField(max_length=32, null=True)
|
||||
card_country = models.CharField(max_length=2, null=True)
|
||||
|
||||
|
||||
# creation and last modified timestamps
|
||||
date_created = models.DateTimeField(auto_now_add=True)
|
||||
date_modified = models.DateTimeField(auto_now=True)
|
||||
date_deactivated = models.DateTimeField(null=True)
|
||||
|
||||
|
||||
# associated User if any
|
||||
user = models.ForeignKey(settings.AUTH_USER_MODEL, null=True)
|
||||
|
||||
|
||||
# status variable
|
||||
status = models.CharField(max_length=11, choices=STATUS_CHOICES, null=False, default='ACTIVE')
|
||||
|
||||
|
||||
def deactivate(self):
|
||||
"""Don't allow more than one active Account of given host to be associated with a given user"""
|
||||
"""Don't allow more than one active Account of given host to
|
||||
be associated with a given user"""
|
||||
self.date_deactivated = now()
|
||||
self.status = 'DEACTIVATED'
|
||||
self.save()
|
||||
|
||||
|
||||
def calculated_status(self):
|
||||
"""returns ACTIVE, DEACTIVATED, EXPIRED, EXPIRING, or ERROR"""
|
||||
|
||||
|
||||
# is it deactivated?
|
||||
|
||||
|
||||
today = date_today()
|
||||
|
||||
|
||||
if self.date_deactivated is not None:
|
||||
return 'DEACTIVATED'
|
||||
|
||||
|
||||
# is it expired?
|
||||
|
||||
elif self.card_exp_year < today.year or (self.card_exp_year == today.year and self.card_exp_month < today.month):
|
||||
|
||||
elif self.card_exp_year < today.year or (
|
||||
self.card_exp_year == today.year and self.card_exp_month < today.month
|
||||
):
|
||||
return 'EXPIRED'
|
||||
|
||||
|
||||
# about to expire? do I want to distinguish from 'ACTIVE'?
|
||||
|
||||
elif (self.card_exp_year == today.year and self.card_exp_month == today.month):
|
||||
return 'EXPIRING'
|
||||
|
||||
|
||||
elif self.card_exp_year == today.year and self.card_exp_month == today.month:
|
||||
return 'EXPIRING'
|
||||
|
||||
# any transactions w/ errors after the account date?
|
||||
# Transaction.objects.filter(host='stripelib', status='Error', approved=True).count()
|
||||
|
||||
elif Transaction.objects.filter(host='stripelib',
|
||||
status='Error', approved=True, user=self.user).filter(date_payment__gt=self.date_created):
|
||||
|
||||
elif Transaction.objects.filter(host='stripelib',
|
||||
status='Error', approved=True, user=self.user
|
||||
).filter(date_payment__gt=self.date_created):
|
||||
return 'ERROR'
|
||||
else:
|
||||
return 'ACTIVE'
|
||||
|
||||
|
||||
def update_status( self, value=None, send_notice_on_change_only=True):
|
||||
"""set Account.status = value unless value is None, in which case,
|
||||
return 'ACTIVE'
|
||||
|
||||
|
||||
def update_status(self, value=None, send_notice_on_change_only=True):
|
||||
"""set Account.status = value unless value is None, in which case,
|
||||
we set Account.status=self.calculated_status()
|
||||
fire off associated notifications
|
||||
|
||||
By default, send notices only if the status is *changing*.
|
||||
|
||||
By default, send notices only if the status is *changing*.
|
||||
Set send_notice_on_change_only = False to
|
||||
send notice based on new_status regardless of old status.
|
||||
send notice based on new_status regardless of old status.
|
||||
(Useful for initialization)
|
||||
"""
|
||||
old_status = self.status
|
||||
|
||||
|
||||
if value is None:
|
||||
new_status = self.calculated_status()
|
||||
else:
|
||||
new_status = value
|
||||
|
||||
|
||||
if new_status == 'EXPIRED':
|
||||
self.deactivate()
|
||||
elif old_status != new_status:
|
||||
self.status = new_status
|
||||
self.save()
|
||||
|
||||
|
||||
# don't notify null users (non-users can buy-to-unglue or thank-for-ungluing)
|
||||
if self.user and (not send_notice_on_change_only or (old_status != new_status)):
|
||||
|
||||
logger.info( "Account status change: %d %s %s", self.pk, old_status, new_status)
|
||||
|
||||
logger.info("Account status change: %d %s %s", self.pk, old_status, new_status)
|
||||
|
||||
if new_status == 'EXPIRING':
|
||||
|
||||
logger.info( "EXPIRING. send to instance.user: %s site: %s", self.user,
|
||||
|
||||
logger.info("EXPIRING. send to instance.user: %s site: %s", self.user,
|
||||
Site.objects.get_current())
|
||||
|
||||
|
||||
# fire off an account_expiring notice -- might not want to do this immediately
|
||||
|
||||
|
||||
notification.queue([self.user], "account_expiring", {
|
||||
'user': self.user,
|
||||
'site':Site.objects.get_current()
|
||||
}, True)
|
||||
|
||||
elif new_status == 'EXPIRED':
|
||||
logger.info( "EXPIRING. send to instance.user: %s site: %s", self.user,
|
||||
logger.info("EXPIRING. send to instance.user: %s site: %s", self.user,
|
||||
Site.objects.get_current())
|
||||
|
||||
|
||||
notification.queue([self.user], "account_expired", {
|
||||
'user': self.user,
|
||||
'site':Site.objects.get_current()
|
||||
}, True)
|
||||
|
||||
|
||||
elif new_status == 'ERROR':
|
||||
# TO DO: what to do?
|
||||
pass
|
||||
|
@ -494,10 +522,13 @@ class Account(models.Model):
|
|||
pass
|
||||
|
||||
def recharge_failed_transactions(self):
|
||||
"""When a new Account is saved, check whether this is the new active account for a user. If so, recharge any
|
||||
outstanding failed transactions
|
||||
"""When a new Account is saved, check whether this is the new active account for a user.
|
||||
If so, recharge any outstanding failed transactions
|
||||
"""
|
||||
transactions_to_recharge = self.user.transaction_set.filter((Q(status=TRANSACTION_STATUS_FAILED) | Q(status=TRANSACTION_STATUS_ERROR)) & Q(campaign__status='SUCCESSFUL')).all()
|
||||
transactions_to_recharge = self.user.transaction_set.filter(
|
||||
(Q(status=TRANSACTION_STATUS_FAILED) | Q(status=TRANSACTION_STATUS_ERROR)) &
|
||||
Q(campaign__status='SUCCESSFUL')
|
||||
).all()
|
||||
|
||||
if transactions_to_recharge:
|
||||
from regluit.payment.manager import PaymentManager
|
||||
|
@ -505,10 +536,13 @@ class Account(models.Model):
|
|||
for transaction in transactions_to_recharge:
|
||||
# check whether we are still within the window to recharge
|
||||
if (now() - transaction.deadline_or_now) < datetime.timedelta(settings.RECHARGE_WINDOW):
|
||||
logger.info("Recharging transaction {0} w/ status {1}".format(transaction.id, transaction.status))
|
||||
logger.info("Recharging transaction {0} w/ status {1}".format(
|
||||
transaction.id,
|
||||
transaction.status
|
||||
))
|
||||
pm.execute_transaction(transaction, [])
|
||||
|
||||
|
||||
|
||||
# handle any save, updates to a payment.Transaction
|
||||
|
||||
def handle_transaction_change(sender, instance, created, **kwargs):
|
||||
|
@ -525,9 +559,7 @@ def handle_transaction_delete(sender, instance, **kwargs):
|
|||
campaign.update_left()
|
||||
return True
|
||||
|
||||
post_save.connect(handle_transaction_change,sender=Transaction)
|
||||
post_delete.connect(handle_transaction_delete,sender=Transaction)
|
||||
post_save.connect(handle_transaction_change, sender=Transaction)
|
||||
post_delete.connect(handle_transaction_delete, sender=Transaction)
|
||||
|
||||
# handle recharging failed transactions
|
||||
|
||||
|
||||
|
|
|
@ -72,6 +72,10 @@
|
|||
}
|
||||
}
|
||||
|
||||
.btn_wishlist span {
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
.find-book label {
|
||||
float:left;
|
||||
line-height:31px;
|
||||
|
@ -125,8 +129,9 @@
|
|||
background: -o-linear-gradient(left, $greener-than-alert, $call-to-action);
|
||||
background: linear-gradient(left, $greener-than-alert, $call-to-action);
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='@alert', endColorstr='$call-to-action'); /* IE6 & IE7 */
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='@alert', endColorstr='$call-to-action')"; /* IE8+ */
|
||||
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='$alert', endColorstr='$call-to-action'); /* IE6 & IE7 */
|
||||
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr='$alert', endColorstr='$call-to-action')"; /* IE8+ */
|
||||
|
||||
&.successful {
|
||||
border-color: $bright-blue;
|
||||
|
|
|
@ -20,13 +20,13 @@
|
|||
|
||||
.row2 .book-list.listview {
|
||||
background: #fff;
|
||||
|
||||
|
||||
.book-name:hover {
|
||||
background: #fff;
|
||||
background: #fff;
|
||||
}
|
||||
}
|
||||
|
||||
div.book-list.listview{
|
||||
div.book-list.listview{
|
||||
clear:both;
|
||||
display:block;
|
||||
vertical-align: middle;
|
||||
|
@ -50,37 +50,37 @@ div.book-list.listview{
|
|||
margin-right:10px;
|
||||
background:url("#{$image-base}booklist/booklist-vline.png") right center no-repeat;
|
||||
float: left;
|
||||
|
||||
.title {
|
||||
|
||||
.title {
|
||||
display:block;
|
||||
line-height:normal;
|
||||
overflow: hidden;
|
||||
@include height(19px);
|
||||
margin-bottom: 5px;
|
||||
font-weight:bold;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
|
||||
.listview.author {
|
||||
overflow: hidden;
|
||||
display:block;
|
||||
line-height:normal;
|
||||
@include height(19px);
|
||||
}
|
||||
|
||||
|
||||
&.listview:hover {
|
||||
// allow titles and authors to expand onhover
|
||||
overflow: visible;
|
||||
|
||||
width: auto;
|
||||
min-width: 219px;
|
||||
|
||||
|
||||
margin-top: -1px;
|
||||
padding-right: 15px;
|
||||
border: 1px solid $blue-grey;
|
||||
@include border-radius(0, 10px, 10px, 0);
|
||||
border-left: none;
|
||||
}
|
||||
|
||||
|
||||
&.listview {
|
||||
z-index:100;
|
||||
// z-index only works on positioned elements, so if you
|
||||
|
@ -99,38 +99,38 @@ div.book-list.listview{
|
|||
//position: absolute;
|
||||
margin-left:255px;
|
||||
float:left;
|
||||
|
||||
|
||||
span {
|
||||
font-weight:normal;
|
||||
color:$text-blue;
|
||||
text-transform: none;
|
||||
padding-left:20px;
|
||||
}
|
||||
|
||||
|
||||
span.booklist_pledge {
|
||||
padding-left: 18px;
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
&.pledge span.booklist_pledge {
|
||||
padding-left: 0;
|
||||
}
|
||||
|
||||
|
||||
&.add-wishlist span, &.create-account span {
|
||||
background:url("#{$image-base}booklist/add-wishlist.png") left center no-repeat;
|
||||
}
|
||||
|
||||
|
||||
&.add-wishlist span.booklist_pledge {
|
||||
background: none;
|
||||
}
|
||||
|
||||
|
||||
&.remove-wishlist span {
|
||||
background:url("#{$image-base}booklist/remove-wishlist-blue.png") left center no-repeat;
|
||||
}
|
||||
|
||||
|
||||
&.on-wishlist > span, > span.on-wishlist {
|
||||
background:url("#{$image-base}checkmark_small.png") left center no-repeat;
|
||||
background:url("#{$image-base}checkmark_small.png") left center no-repeat;
|
||||
}
|
||||
|
||||
&.booklist-status {
|
||||
|
@ -157,7 +157,7 @@ div.add-wishlist, div.remove-wishlist {
|
|||
max-width: 180px;
|
||||
overflow: hidden;
|
||||
}
|
||||
|
||||
|
||||
.read_itbutton {
|
||||
margin-top: 4px;
|
||||
}
|
||||
|
@ -170,7 +170,7 @@ div.unglue-this {
|
|||
font-size:11px;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
|
||||
&.complete {
|
||||
.unglue-this-inner1 {
|
||||
background:url($background-booklist) 0 -84px no-repeat;
|
||||
|
@ -190,10 +190,10 @@ div.unglue-this {
|
|||
|
||||
&.processing {
|
||||
.unglue-this-inner1 {
|
||||
background:url($background-booklist) 0 0 no-repeat;
|
||||
background:url($background-booklist) 0 0 no-repeat;
|
||||
height:42px;
|
||||
}
|
||||
|
||||
|
||||
.unglue-this-inner2 {
|
||||
background:url($background-booklist) 100% -42px no-repeat;
|
||||
margin-left:25px;
|
||||
|
@ -208,7 +208,7 @@ ul.book-list-view {
|
|||
margin:15px;
|
||||
float:right;
|
||||
list-style:none;
|
||||
|
||||
|
||||
li {
|
||||
float:left;
|
||||
margin-right:10px;
|
||||
|
@ -245,24 +245,24 @@ ul.navigation {
|
|||
padding:0;
|
||||
margin:0;
|
||||
list-style:none;
|
||||
|
||||
|
||||
li {
|
||||
float: left;
|
||||
line-height:normal;
|
||||
margin-right:5px;
|
||||
|
||||
|
||||
a {
|
||||
color:$dark-blue;
|
||||
font-weight:normal;
|
||||
font-weight:normal;
|
||||
}
|
||||
|
||||
|
||||
&.arrow-l a {
|
||||
@include navigation-arrows(0, -168px);
|
||||
}
|
||||
|
||||
|
||||
&.arrow-r a {
|
||||
@include navigation-arrows(-1px, -185px);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -283,16 +283,16 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
|||
overflow:hidden;
|
||||
position:relative;
|
||||
z-index:1;
|
||||
|
||||
|
||||
&:hover {
|
||||
overflow:visible;
|
||||
z-index:1000;
|
||||
border:none;
|
||||
border:none;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
position:absolute;
|
||||
/* the excerpt you get looks cooler if you select from the middle, but
|
||||
/* the excerpt you get looks cooler if you select from the middle, but
|
||||
the popup version doesn't extend past the containing div's boundaries,
|
||||
so the positioned part is cut off.
|
||||
top:-20px;
|
||||
|
@ -304,7 +304,7 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
|||
.listview.icons {
|
||||
position: absolute;
|
||||
right: 31px;
|
||||
|
||||
|
||||
.booklist-status-img {
|
||||
@include one-border-radius(4px);
|
||||
background-color: #fff;
|
||||
|
@ -318,7 +318,7 @@ ul.navigation li a:hover, ul.navigation li.active a {
|
|||
.booklist-status-label, {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.boolist-ebook img {
|
||||
margin-top: 6px;
|
||||
}
|
||||
|
@ -337,13 +337,13 @@ div#content-block-content {
|
|||
font-weight: normal;
|
||||
}
|
||||
|
||||
div#libtools {
|
||||
div#libtools {
|
||||
margin-left: 15px;
|
||||
margin-bottom: 1em;
|
||||
border:1px solid $blue-grey;
|
||||
border-radius: 10px;
|
||||
padding: 10px;
|
||||
|
||||
|
||||
p {
|
||||
margin-top: 0px;
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ div#libtools {
|
|||
padding: 0 10px 0 10px;
|
||||
font-size: smaller;
|
||||
}
|
||||
|
||||
|
||||
p:first-child {
|
||||
font-size: larger;
|
||||
margin-top: 5px;
|
||||
|
|
|
@ -43,7 +43,7 @@
|
|||
background:#FFF;
|
||||
margin:0px;
|
||||
@include one-border-radius(4px);
|
||||
border: 1px solid #81bb38;
|
||||
border: 1px solid #81bb38;
|
||||
}
|
||||
|
||||
.buyit {
|
||||
|
@ -56,7 +56,7 @@
|
|||
@include greenpanelactionitems(10px, $lineheight);
|
||||
padding:0px 0px 0px $padding;
|
||||
color:$dark-green;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration:none;
|
||||
}
|
||||
|
@ -69,12 +69,12 @@
|
|||
padding:0px;
|
||||
margin:0 0 0 0;
|
||||
@include greenpanelactionborders;
|
||||
|
||||
|
||||
a, span {
|
||||
@include greenpanelactionitems(left, 30px);
|
||||
padding:0 $right 0 21px;
|
||||
color:#FFF;
|
||||
|
||||
|
||||
&:hover { @include panelhoverlink;}
|
||||
}
|
||||
}
|
||||
|
@ -112,7 +112,7 @@ $charset: "utf-8";
|
|||
color: $text-blue;
|
||||
border: 5px solid $pale-blue;
|
||||
position: relative;
|
||||
|
||||
|
||||
&:hover {
|
||||
color: $text-blue;
|
||||
}
|
||||
|
@ -121,7 +121,7 @@ $charset: "utf-8";
|
|||
padding:5px 0px;
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
|
||||
.pledge.side1 {
|
||||
display: none;
|
||||
}
|
||||
|
@ -138,8 +138,8 @@ $charset: "utf-8";
|
|||
line-height:16px;
|
||||
max-height:32px;
|
||||
color: $text-blue;
|
||||
overflow: hidden;
|
||||
|
||||
overflow: hidden;
|
||||
|
||||
a {
|
||||
color: $medium-blue;
|
||||
}
|
||||
|
@ -153,11 +153,11 @@ $charset: "utf-8";
|
|||
position: absolute;
|
||||
bottom: -3px;
|
||||
width: 140px;
|
||||
|
||||
|
||||
.booklist-status-img {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
.booklist-status-label {
|
||||
position: absolute;
|
||||
color: $green;
|
||||
|
@ -167,11 +167,11 @@ $charset: "utf-8";
|
|||
font-size: 17px;
|
||||
margin-bottom: 3px;
|
||||
}
|
||||
|
||||
|
||||
.panelnope {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
.rounded {
|
||||
margin-bottom: 7px;
|
||||
}
|
||||
|
@ -181,7 +181,7 @@ span.rounded {
|
|||
@include roundedspan;
|
||||
}
|
||||
|
||||
span.grey {
|
||||
span.grey {
|
||||
@include supporter-color-span(#bacfd6, "grey");
|
||||
}
|
||||
|
||||
|
@ -220,17 +220,17 @@ div.panelview.side2 {
|
|||
height: 135px;
|
||||
}
|
||||
.greenpanel2 .button_text {
|
||||
height: 30px;
|
||||
height: 30px;
|
||||
line-height: 30px
|
||||
}
|
||||
.greenpanel2 .bottom_button {
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
position: absolute;
|
||||
bottom: 0px;
|
||||
height: 26px;
|
||||
}
|
||||
.greenpanel2 .add_button {
|
||||
position: absolute;
|
||||
bottom: 60px;
|
||||
position: absolute;
|
||||
bottom: 60px;
|
||||
height: 26px;
|
||||
}
|
||||
|
||||
|
@ -240,7 +240,7 @@ div.panelview.side2 {
|
|||
margin: 0px auto 10px auto;
|
||||
padding: 5px 0 10px 0;
|
||||
height:58px;
|
||||
|
||||
|
||||
p{
|
||||
margin:0;
|
||||
}
|
||||
|
@ -256,24 +256,24 @@ div.panelview.side2 {
|
|||
|
||||
&:hover { @include panelhoverlink; }
|
||||
}
|
||||
|
||||
|
||||
&.pledge {
|
||||
span {
|
||||
@include readit_inner(25px, 35px);
|
||||
background: none;
|
||||
|
||||
|
||||
&:hover { @include panelhoverlink; }
|
||||
}
|
||||
|
||||
|
||||
background-image: url("#{$image-base}icons/pledgearrow-green.png");
|
||||
background-repeat: no-repeat;
|
||||
background-position: 90% center;
|
||||
}
|
||||
background-position: 90% center;
|
||||
}
|
||||
}
|
||||
|
||||
.read_itbutton_fail {
|
||||
@include readit;
|
||||
|
||||
|
||||
span {
|
||||
@include readit_inner(15px, 35px);
|
||||
background: none;
|
||||
|
@ -287,7 +287,7 @@ div.panelview.side2 {
|
|||
|
||||
.Unglue_itbutton{
|
||||
@include readit;
|
||||
|
||||
|
||||
a {
|
||||
background-image: url("#{$image-base}book-panel/unglue_icon.png");
|
||||
@include readit_inner(25px, 40px);
|
||||
|
@ -320,10 +320,10 @@ div.panelview.side2 {
|
|||
a {
|
||||
color:#FFF;
|
||||
text-decoration:none;
|
||||
|
||||
|
||||
&:hover { @include panelhoverlink;}
|
||||
}
|
||||
|
||||
|
||||
p {
|
||||
/* necessary to ensure title/author don't overflow onto icons */
|
||||
line-height:16px;
|
||||
|
@ -337,7 +337,7 @@ div.panelview.side2 {
|
|||
@include banners(0);
|
||||
background: url("#{$image-base}book-panel/more_icon.png") no-repeat left center;
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
> div {
|
||||
@include height(30px);
|
||||
padding-bottom:8px;
|
||||
|
@ -390,7 +390,7 @@ div.panelview.side2 {
|
|||
padding:0px;
|
||||
margin:0px;
|
||||
float:left;
|
||||
|
||||
|
||||
}
|
||||
.right_add{
|
||||
padding:10px;
|
||||
|
@ -403,11 +403,11 @@ div.panelview.side2 {
|
|||
margin:0px;
|
||||
padding:0px;
|
||||
left:0px;
|
||||
|
||||
img {
|
||||
|
||||
img {
|
||||
z-index: 100;
|
||||
width: 120px;
|
||||
height: 182px;
|
||||
height: 182px;
|
||||
}
|
||||
|
||||
span {
|
||||
|
@ -418,5 +418,5 @@ div.panelview.side2 {
|
|||
z-index: 1000;
|
||||
height:auto;
|
||||
}
|
||||
|
||||
|
||||
}
|
|
@ -1,6 +1,6 @@
|
|||
/* Campaign and manage_campaign use same tab styling, so it's factored out here */
|
||||
|
||||
#tabs{
|
||||
#tabs{
|
||||
border-bottom: 4px solid $medium-blue;
|
||||
clear: both;
|
||||
float: left;
|
||||
|
@ -30,7 +30,7 @@ ul.tabs {
|
|||
margin:0;
|
||||
list-style:none;
|
||||
width: 100%;
|
||||
|
||||
|
||||
li {
|
||||
float: left;
|
||||
height: 46px;
|
||||
|
@ -40,12 +40,12 @@ ul.tabs {
|
|||
background: none;
|
||||
margin: 0;
|
||||
padding: 0 2px 0 0;
|
||||
|
||||
|
||||
&.tabs4 {
|
||||
padding-right:0px;
|
||||
}
|
||||
|
||||
a {
|
||||
|
||||
a {
|
||||
height: 41px;
|
||||
line-height: 18px;
|
||||
display:block;
|
||||
|
@ -56,16 +56,16 @@ ul.tabs {
|
|||
background:$blue-grey;
|
||||
color:$text-blue;
|
||||
padding-top: 5px;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
padding-top: 8px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
a:hover, &.active a {
|
||||
background:$medium-blue;
|
||||
color:#fff;
|
||||
|
|
|
@ -6,27 +6,27 @@
|
|||
margin: 0 5px 8px 0;
|
||||
//min-height: 105px;
|
||||
width: 95%;
|
||||
|
||||
|
||||
&.row1 {
|
||||
background: #f6f9f9;
|
||||
}
|
||||
|
||||
|
||||
&.row2 {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
float: left;
|
||||
|
||||
|
||||
img {
|
||||
margin: 0 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.image img {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
|
||||
// so div will stretch to height of content
|
||||
&:after {
|
||||
content: ".";
|
||||
|
@ -35,13 +35,13 @@
|
|||
clear: both;
|
||||
visibility: hidden;
|
||||
}
|
||||
|
||||
|
||||
.nonavatar {
|
||||
width: 620px;
|
||||
|
||||
|
||||
span {
|
||||
padding-right: 5px;
|
||||
|
||||
|
||||
&.text:before {
|
||||
content: "\201C";
|
||||
font-size: $font-size-larger;
|
||||
|
@ -55,7 +55,7 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.avatar {
|
||||
float: right;
|
||||
margin: 0 auto;
|
||||
|
|
|
@ -20,11 +20,11 @@ body {
|
|||
background:$pale-blue;
|
||||
border:1px solid $blue-grey;
|
||||
@include one-border-radius(12px);
|
||||
|
||||
|
||||
.jsmodule {
|
||||
border-bottom:1px solid #3c4e52;
|
||||
width:235px;
|
||||
|
||||
|
||||
&.last {
|
||||
border-bottom:none;
|
||||
padding-bottom:10px;
|
||||
|
@ -59,23 +59,23 @@ body {
|
|||
background: none;
|
||||
margin-bottom: 0;
|
||||
}
|
||||
|
||||
|
||||
li {
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
||||
|
||||
&.terms {
|
||||
list-style: inherit;
|
||||
list-style-position: inside;
|
||||
padding-left: 1em;
|
||||
text-indent: -1em;
|
||||
|
||||
|
||||
li {
|
||||
@include one-border-radius(auto);
|
||||
background: inherit;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.bullets {
|
||||
list-style-type: disc;
|
||||
margin-left: 9px;
|
||||
|
@ -101,7 +101,7 @@ dt {
|
|||
dd {
|
||||
margin: 0 0 0 7px;
|
||||
padding-bottom: 7px;
|
||||
|
||||
|
||||
&.margin {
|
||||
margin-left: 7px;
|
||||
}
|
||||
|
@ -124,7 +124,7 @@ dd {
|
|||
|
||||
.faq {
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -141,7 +141,7 @@ dd {
|
|||
float: left;
|
||||
padding-right: 15px;
|
||||
margin-bottom: 7px;
|
||||
|
||||
|
||||
&.pressemail {
|
||||
border: solid 2px $text-blue;
|
||||
padding: 5px;
|
||||
|
@ -166,7 +166,7 @@ dd {
|
|||
border-bottom: solid 1px $text-blue;
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
iframe, div.mediaborder {
|
||||
@include mediaborder-base;
|
||||
}
|
||||
|
@ -175,7 +175,7 @@ dd {
|
|||
.pressimages {
|
||||
.outer {
|
||||
clear: both;
|
||||
|
||||
|
||||
div {
|
||||
float: left;
|
||||
width: 25%;
|
||||
|
@ -184,8 +184,8 @@ dd {
|
|||
&.text {
|
||||
width: 75%;
|
||||
}
|
||||
|
||||
p {
|
||||
|
||||
p {
|
||||
margin: 0 auto;
|
||||
padding-left: 10px;
|
||||
padding-right: 10px;
|
||||
|
@ -193,7 +193,7 @@ dd {
|
|||
}
|
||||
}
|
||||
clear: both;
|
||||
|
||||
|
||||
.screenshot {
|
||||
width: 150px;
|
||||
@include mediaborder-base;
|
||||
|
@ -209,7 +209,7 @@ a.manage {
|
|||
cursor: pointer;
|
||||
@include one-border-radius(5px);
|
||||
border: 1px solid $blue-grey;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
@ -218,7 +218,7 @@ a.manage {
|
|||
.rh_help {
|
||||
cursor: pointer;
|
||||
color: $bright-blue;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -239,7 +239,7 @@ a.manage {
|
|||
|
||||
div {
|
||||
float: left;
|
||||
|
||||
|
||||
&.campaign_info {
|
||||
width: 60%;
|
||||
margin: 5px;
|
||||
|
@ -256,7 +256,7 @@ h2.thank-you {
|
|||
.pledge_complete, .pledge_complete a {
|
||||
font-size: $font-size-larger;
|
||||
line-height: 18px;
|
||||
margin-bottom: 15px;
|
||||
margin-bottom: 15px;
|
||||
}
|
||||
|
||||
#js-slide .jsmodule.pledge {
|
||||
|
@ -268,7 +268,7 @@ ul.social.pledge {
|
|||
float: left;
|
||||
padding-right: 30px !important;
|
||||
}
|
||||
|
||||
|
||||
margin-bottom: 100px;
|
||||
}
|
||||
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
margin: auto 5px auto 0;
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
@ -40,7 +40,7 @@
|
|||
width: 50px;
|
||||
margin-right: 5px;
|
||||
}
|
||||
|
||||
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
|
||||
|
@ -51,14 +51,14 @@
|
|||
padding-bottom: 15px;
|
||||
margin-bottom: 5px;
|
||||
width: 74%;
|
||||
|
||||
|
||||
h3 {
|
||||
margin-top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
#lightbox_content .one_click {
|
||||
border: solid 2px $call-to-action;
|
||||
border: solid 2px $call-to-action;
|
||||
}
|
||||
|
||||
#lightbox_content .ebook_download_container {
|
||||
|
@ -75,8 +75,8 @@
|
|||
}
|
||||
|
||||
#lightbox_content ul {
|
||||
padding-left: 50px;
|
||||
|
||||
padding-left: 50px;
|
||||
|
||||
li {
|
||||
margin-bottom: 4px;
|
||||
}
|
||||
|
@ -95,15 +95,15 @@
|
|||
padding: 0.5% !important;
|
||||
width: 23% !important;
|
||||
min-width: 105px;
|
||||
|
||||
|
||||
ul {
|
||||
padding: 0.5% !important;
|
||||
}
|
||||
|
||||
|
||||
.jsmod-title {
|
||||
@include one-border-radius(10px);
|
||||
height: auto;
|
||||
|
||||
|
||||
span {
|
||||
padding: 5% !important;
|
||||
color: white !important;
|
||||
|
@ -117,7 +117,7 @@
|
|||
border:1px solid $blue-grey;
|
||||
@include one-border-radius(10px);
|
||||
padding:10px;
|
||||
|
||||
|
||||
textarea {
|
||||
max-width: 90%;
|
||||
}
|
||||
|
@ -125,7 +125,7 @@
|
|||
|
||||
.btn_support.kindle{
|
||||
height: 40px;
|
||||
|
||||
|
||||
a {
|
||||
width: auto;
|
||||
font-size: $font-size-larger;
|
||||
|
|
|
@ -9,62 +9,62 @@
|
|||
width:968px;
|
||||
background:#fff url("#{$image-base}landingpage/container-top.png") top center no-repeat;
|
||||
}
|
||||
#js-maincol-fl {
|
||||
#js-maincol-fl {
|
||||
padding:30px 30px 0 30px;
|
||||
overflow:hidden;
|
||||
|
||||
#content-block {
|
||||
background:none;
|
||||
background:none;
|
||||
padding:0;
|
||||
}
|
||||
|
||||
#js-main-container {
|
||||
float: left;
|
||||
|
||||
#js-main-container {
|
||||
float: left;
|
||||
width:672px;
|
||||
}
|
||||
|
||||
.js-main-container-inner {
|
||||
|
||||
.js-main-container-inner {
|
||||
padding-right:40px;
|
||||
}
|
||||
|
||||
h2.page-heading {
|
||||
margin:0 0 20px 0;
|
||||
color:$text-blue;
|
||||
font-size: $font-size-header;
|
||||
|
||||
h2.page-heading {
|
||||
margin:0 0 20px 0;
|
||||
color:$text-blue;
|
||||
font-size: $font-size-header;
|
||||
font-weight: bold;
|
||||
}
|
||||
}
|
||||
|
||||
#user-block1, .user-block2 {
|
||||
#user-block1, .user-block2 {
|
||||
float:left;
|
||||
}
|
||||
|
||||
#user-block1 {
|
||||
#block-intro-text {
|
||||
float:left;
|
||||
width:702px;
|
||||
#user-block1 {
|
||||
#block-intro-text {
|
||||
float:left;
|
||||
width:702px;
|
||||
font-size: $font-size-header;
|
||||
}
|
||||
|
||||
a#readon {
|
||||
|
||||
a#readon {
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
}
|
||||
|
||||
#js-rightcol, #js-rightcol2 {
|
||||
#js-rightcol, #js-rightcol2 {
|
||||
float:right;
|
||||
width:230px;
|
||||
|
||||
.jsmodule {
|
||||
|
||||
.jsmodule {
|
||||
float: left;
|
||||
width: 208px;
|
||||
background:$pale-blue;
|
||||
border:1px solid $blue-grey;
|
||||
@include one-border-radius(12px);
|
||||
margin-bottom:10px;
|
||||
background:$pale-blue;
|
||||
border:1px solid $blue-grey;
|
||||
@include one-border-radius(12px);
|
||||
margin-bottom:10px;
|
||||
padding: 0 10px 10px 10px;
|
||||
|
||||
|
||||
|
||||
|
||||
input {
|
||||
border: none;
|
||||
@include height(36px);
|
||||
|
@ -73,45 +73,45 @@
|
|||
padding-left: 16px;
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
|
||||
input.signup {
|
||||
|
||||
input.signup {
|
||||
border: medium none;
|
||||
|
||||
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
|
||||
|
||||
overflow: hidden;
|
||||
padding: 0 31px 0 11px;
|
||||
width: 111px;
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
input.donate {
|
||||
input.donate {
|
||||
cursor: pointer;
|
||||
display: inline-block;
|
||||
overflow: hidden;
|
||||
padding: 0 31px 0 11px;
|
||||
width: 50%;
|
||||
|
||||
|
||||
}
|
||||
.donate_amount {
|
||||
text-align: center;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
padding:0px;
|
||||
margin:0px;
|
||||
}
|
||||
}
|
||||
|
||||
div.button {
|
||||
padding-top:10px;
|
||||
text-align: center;
|
||||
|
||||
div.button {
|
||||
padding-top:10px;
|
||||
text-align: center;
|
||||
color: #FFF;
|
||||
}
|
||||
#donatesubmit {
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
label {
|
||||
label {
|
||||
width:100%;
|
||||
display:block;
|
||||
clear:both;
|
||||
|
@ -120,41 +120,41 @@
|
|||
}
|
||||
|
||||
|
||||
.js-rightcol-padd {
|
||||
.js-rightcol-padd {
|
||||
margin:0px;
|
||||
}
|
||||
|
||||
h3.heading {
|
||||
color:$text-blue;
|
||||
color:$text-blue;
|
||||
font-weight:bold;
|
||||
}
|
||||
|
||||
ul.ungluingwhat {
|
||||
list-style: none;
|
||||
padding:0;
|
||||
ul.ungluingwhat {
|
||||
list-style: none;
|
||||
padding:0;
|
||||
margin:0 -10px;
|
||||
|
||||
li {
|
||||
margin-bottom:3px;
|
||||
background:#fff;
|
||||
padding: 10px;
|
||||
display:block;
|
||||
|
||||
li {
|
||||
margin-bottom:3px;
|
||||
background:#fff;
|
||||
padding: 10px;
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
|
||||
> span {
|
||||
|
||||
> span {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
|
||||
.user-avatar {
|
||||
|
||||
.user-avatar {
|
||||
width:43px;
|
||||
|
||||
|
||||
img {
|
||||
@include one-border-radius(5px);
|
||||
}
|
||||
}
|
||||
|
||||
.user-book-info {
|
||||
|
||||
.user-book-info {
|
||||
margin-left: 5px;
|
||||
width: 160px;
|
||||
word-wrap: break-word;
|
||||
|
@ -166,17 +166,17 @@ ul.ungluingwhat {
|
|||
}
|
||||
}
|
||||
|
||||
div.typo2 {
|
||||
background:$pale-blue;
|
||||
@include one-border-radius(12px);
|
||||
padding:10px;
|
||||
div.typo2 {
|
||||
background:$pale-blue;
|
||||
@include one-border-radius(12px);
|
||||
padding:10px;
|
||||
font-style:italic;
|
||||
}
|
||||
|
||||
div.signup_btn {
|
||||
div.signup_btn {
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
|
||||
|
||||
a {
|
||||
background: url("#{$image-base}bg.png") no-repeat scroll right top transparent;
|
||||
color: #fff;
|
||||
|
@ -188,7 +188,7 @@ div.signup_btn {
|
|||
text-decoration: none;
|
||||
text-transform: capitalize;
|
||||
float:left;
|
||||
|
||||
|
||||
span {
|
||||
background: url("#{$image-base}bg.png") no-repeat scroll -770px -36px transparent;
|
||||
display: block;
|
||||
|
@ -199,64 +199,64 @@ div.signup_btn {
|
|||
}
|
||||
|
||||
.have-content-right-module {
|
||||
.item-content {
|
||||
float:left;
|
||||
width:364px;
|
||||
.item-content {
|
||||
float:left;
|
||||
width:364px;
|
||||
font-size: $font-size-larger;
|
||||
height: 132px;
|
||||
border-bottom:7px solid $bright-blue;
|
||||
|
||||
p {
|
||||
margin-bottom:20px;
|
||||
border-bottom:7px solid $bright-blue;
|
||||
|
||||
p {
|
||||
margin-bottom:20px;
|
||||
line-height:135%;
|
||||
}
|
||||
|
||||
h2.page-heading {
|
||||
|
||||
h2.page-heading {
|
||||
padding-right:97px;
|
||||
line-height:43px;
|
||||
padding-bottom:4px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.content-right-module {
|
||||
width:268px;
|
||||
float:right;
|
||||
|
||||
|
||||
h3 {
|
||||
color:$bright-blue;
|
||||
text-transform:uppercase;
|
||||
font-size:24px;
|
||||
font-weight:normal;
|
||||
padding:0;
|
||||
text-transform:uppercase;
|
||||
font-size:24px;
|
||||
font-weight:normal;
|
||||
padding:0;
|
||||
margin:0 0 16px 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
h2.page-heading {
|
||||
h2.page-heading {
|
||||
color:#3c4e52;
|
||||
font-size:28px !important;
|
||||
font-style:italic;
|
||||
font-weight:normal !important;
|
||||
}
|
||||
|
||||
#js-maincontainer-faq {
|
||||
clear: both;
|
||||
overflow:hidden;
|
||||
margin:15px 0;
|
||||
#js-maincontainer-faq {
|
||||
clear: both;
|
||||
overflow:hidden;
|
||||
margin:15px 0;
|
||||
width:100%;
|
||||
}
|
||||
|
||||
.js-maincontainer-faq-inner {
|
||||
float:right;
|
||||
color:$text-blue;
|
||||
font-size: $font-size-larger;
|
||||
.js-maincontainer-faq-inner {
|
||||
float:right;
|
||||
color:$text-blue;
|
||||
font-size: $font-size-larger;
|
||||
padding-right:60px;
|
||||
|
||||
a {
|
||||
|
||||
a {
|
||||
font-weight:normal;
|
||||
color:$text-blue;
|
||||
color:$text-blue;
|
||||
text-decoration:underline;
|
||||
}
|
||||
}
|
||||
|
@ -290,7 +290,7 @@ a.more_featured_books {
|
|||
margin: 5px 0;
|
||||
border: 5px solid white;
|
||||
line-height: 305px;
|
||||
text-align: center;
|
||||
text-align: center;
|
||||
&:hover {
|
||||
cursor: pointer;
|
||||
border-color: $pale-blue;
|
||||
|
@ -318,11 +318,11 @@ ul#as_seen_on {
|
|||
list-style-type: none;
|
||||
padding: 10px;
|
||||
line-height: 80px;
|
||||
|
||||
|
||||
&:hover {
|
||||
background: $bright-blue;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
max-width: 131px;
|
||||
|
@ -351,11 +351,11 @@ ul#as_seen_on {
|
|||
border-style: solid;
|
||||
border-color: $medium-blue transparent;
|
||||
/* reduce the damage in FF3.0 */
|
||||
display:block;
|
||||
display:block;
|
||||
width:0;
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
&:after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
|
@ -367,10 +367,10 @@ ul#as_seen_on {
|
|||
border-style: solid;
|
||||
border-color: #fff transparent;
|
||||
/* reduce the damage in FF3.0 */
|
||||
display:block;
|
||||
display:block;
|
||||
width:0;
|
||||
}
|
||||
|
||||
|
||||
span {
|
||||
padding-left: 1em;
|
||||
&:before {
|
||||
|
@ -380,7 +380,7 @@ ul#as_seen_on {
|
|||
font-size: $font-size-header*2;
|
||||
content:"\201C";
|
||||
}
|
||||
|
||||
|
||||
&:after {
|
||||
position: absolute;
|
||||
top: .75em;
|
||||
|
|
|
@ -1,13 +1,13 @@
|
|||
@import "variables.scss";
|
||||
|
||||
.user-block {
|
||||
width:100%;
|
||||
width:100%;
|
||||
clear:both;
|
||||
}
|
||||
|
||||
#user-block1 {
|
||||
width:100%;
|
||||
|
||||
|
||||
a#readon {
|
||||
float: left;
|
||||
}
|
||||
|
@ -17,13 +17,13 @@
|
|||
background: none;
|
||||
}
|
||||
|
||||
.learnmore_block {
|
||||
.learnmore_block {
|
||||
float: left;
|
||||
width:100%;
|
||||
width:100%;
|
||||
clear:both;
|
||||
border-top: solid 1px $bright-blue;
|
||||
margin-top: 20px;
|
||||
|
||||
|
||||
.learnmore_row{
|
||||
border-bottom: dashed 2px $bright-blue;
|
||||
clear: left;
|
||||
|
@ -31,7 +31,7 @@
|
|||
}
|
||||
.arrow {
|
||||
font-size: 24pt;
|
||||
color: $bright-blue;
|
||||
color: $bright-blue;
|
||||
line-height: 48pt;
|
||||
float: left;
|
||||
padding-right: 8px;
|
||||
|
@ -61,7 +61,7 @@
|
|||
font-size: 48pt;
|
||||
line-height: 48pt;
|
||||
font-style: normal;
|
||||
|
||||
|
||||
.makeaskgive{
|
||||
position: relative;
|
||||
z-index: 1;
|
||||
|
@ -97,7 +97,7 @@
|
|||
display: inherit;
|
||||
font-size: 10pt;
|
||||
padding: .7em 1em;
|
||||
top: -15px;
|
||||
top: -15px;
|
||||
}
|
||||
}
|
||||
&.last {
|
||||
|
@ -109,7 +109,7 @@
|
|||
color: $call-to-action;
|
||||
font-weight: bold;
|
||||
margin-top: 10px;
|
||||
|
||||
|
||||
img {
|
||||
margin-left: 5px;
|
||||
vertical-align: middle;
|
||||
|
@ -117,11 +117,11 @@
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.right {
|
||||
float: right;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
input[type="submit"].qtbutton{
|
||||
|
@ -133,7 +133,7 @@ input[type="submit"].qtbutton{
|
|||
display: none;
|
||||
line-height: 25px;
|
||||
padding-bottom: 10px;
|
||||
|
||||
|
||||
&#active {
|
||||
display: inherit;
|
||||
}
|
||||
|
|
|
@ -6,27 +6,27 @@
|
|||
margin: 0 5px 8px 0;
|
||||
//min-height: 105px;
|
||||
width: 95%;
|
||||
|
||||
|
||||
&.row1 {
|
||||
background: #f6f9f9;
|
||||
}
|
||||
|
||||
|
||||
&.row2 {
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
float: left;
|
||||
|
||||
|
||||
img {
|
||||
margin: 0 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.image img {
|
||||
height: 100px;
|
||||
}
|
||||
|
||||
|
||||
// so div will stretch to height of content
|
||||
&:after {
|
||||
content: ".";
|
||||
|
@ -52,7 +52,7 @@
|
|||
display: block;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.avatar {
|
||||
float: left;
|
||||
margin: 0 auto;
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
}
|
||||
|
||||
input[name="launch"] {
|
||||
display: none;
|
||||
display: none;
|
||||
}
|
||||
|
||||
#launchme {
|
||||
|
@ -19,7 +19,7 @@ input[name="launch"] {
|
|||
span, input[type="text"], textarea {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
input[type="submit"] {
|
||||
float: right;
|
||||
}
|
||||
|
@ -27,16 +27,16 @@ input[name="launch"] {
|
|||
input[type="text"] {
|
||||
width: 33%;
|
||||
}
|
||||
|
||||
|
||||
textarea {
|
||||
width: 60%;
|
||||
}
|
||||
|
||||
|
||||
.premium_add_label {
|
||||
width: 30%;
|
||||
margin-right: 2%;
|
||||
}
|
||||
|
||||
|
||||
.premium_field_label {
|
||||
width: 1%;
|
||||
margin-left: -1%;
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
background: $pale-blue;
|
||||
padding: 10px 20px;
|
||||
margin: -15px auto 7px 7px;
|
||||
|
||||
|
||||
a {
|
||||
font-size: $font-size-default;
|
||||
font-weight: bold;
|
||||
|
@ -25,7 +25,7 @@ th {
|
|||
|
||||
tr {
|
||||
line-height:24px;
|
||||
|
||||
|
||||
&.row1{
|
||||
background: $pale-blue;
|
||||
}
|
||||
|
@ -34,7 +34,7 @@ tr {
|
|||
td {
|
||||
padding-left: 7px;
|
||||
padding-right: 7px;
|
||||
|
||||
|
||||
&#last {
|
||||
padding: 0;
|
||||
}
|
||||
|
@ -50,7 +50,7 @@ table input[type="submit"] {
|
|||
.comments {
|
||||
border: solid 3px $blue-grey;
|
||||
margin: 3px auto;
|
||||
|
||||
|
||||
hr {
|
||||
margin: 10px auto 5px;
|
||||
color: $blue-grey;
|
||||
|
@ -58,40 +58,40 @@ table input[type="submit"] {
|
|||
height:2px;
|
||||
border: 0;
|
||||
}
|
||||
|
||||
|
||||
.comments_book {
|
||||
@include mediaborder-base;
|
||||
margin-right: 10px;
|
||||
margin-bottom: 10px;
|
||||
max-width: 80px;
|
||||
|
||||
|
||||
img {
|
||||
max-width: 80px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.comments_textual {
|
||||
padding: 10px 5px 5px;
|
||||
|
||||
|
||||
div {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
.comments_info {
|
||||
.comments_info {
|
||||
border-bottom: solid 1px $blue-grey;
|
||||
padding: 5px;
|
||||
|
||||
div {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
.comments_graphical {
|
||||
padding: 5px auto;
|
||||
}
|
||||
|
||||
span {
|
||||
text-indent: 0;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -16,7 +16,7 @@ input[type="submit"], a.fakeinput {
|
|||
padding: 10px;
|
||||
font-size: $font-size-header;
|
||||
background: $pale-blue;
|
||||
|
||||
|
||||
&.premium_level {
|
||||
margin-top: 3px;
|
||||
}
|
||||
|
@ -24,7 +24,7 @@ input[type="submit"], a.fakeinput {
|
|||
|
||||
form.pledgeform {
|
||||
width: 470px;
|
||||
|
||||
|
||||
.pledgeform_label {
|
||||
font-size: 80%
|
||||
}
|
||||
|
@ -46,7 +46,7 @@ p {
|
|||
|
||||
.jsmodule.pledge {
|
||||
margin: auto;
|
||||
|
||||
|
||||
.jsmod-content {
|
||||
float: right !important;
|
||||
}
|
||||
|
@ -58,7 +58,7 @@ p {
|
|||
border: solid 2px $blue-grey;
|
||||
@include one-border-radius(5px);
|
||||
padding: 7px;
|
||||
|
||||
|
||||
h4 {
|
||||
margin: 0 0 5px 0;
|
||||
}
|
||||
|
@ -83,7 +83,7 @@ span.menu-item-price {
|
|||
}
|
||||
|
||||
ul#offers_list li {
|
||||
|
||||
|
||||
div.on {
|
||||
display: block;
|
||||
background: $pale-blue;
|
||||
|
@ -109,10 +109,10 @@ ul#offers_list li {
|
|||
}
|
||||
|
||||
.premiums_inactive#select_premiums {
|
||||
background: $blue-grey;
|
||||
|
||||
background: $blue-grey;
|
||||
|
||||
div, div.pledge_amount, ul li, ul li:hover {
|
||||
background: $blue-grey;
|
||||
background: $blue-grey;
|
||||
color: $text-blue
|
||||
}
|
||||
}
|
||||
|
@ -127,24 +127,24 @@ ul#offers_list li {
|
|||
|
||||
div {
|
||||
float: left;
|
||||
|
||||
|
||||
&.ack_level {
|
||||
width: 16%;
|
||||
margin-right: 3%;
|
||||
height: 100%;
|
||||
padding: 1%;
|
||||
}
|
||||
|
||||
|
||||
&.ack_header {
|
||||
width: 73%;
|
||||
padding: 1%;
|
||||
}
|
||||
|
||||
|
||||
&.ack_active, &.ack_inactive {
|
||||
width: 100%;
|
||||
font-size: $font-size-default;
|
||||
}
|
||||
|
||||
|
||||
&.ack_active {
|
||||
.ack_header, .ack_level {
|
||||
border: solid $text-blue;
|
||||
|
@ -152,12 +152,12 @@ ul#offers_list li {
|
|||
background: white;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.ack_inactive {
|
||||
.ack_header, .ack_level {
|
||||
border: solid $blue-grey;
|
||||
border-width: 1%;
|
||||
background: $blue-grey;
|
||||
background: $blue-grey;
|
||||
}
|
||||
|
||||
input, textarea {
|
||||
|
@ -166,11 +166,11 @@ ul#offers_list li {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
> div {
|
||||
margin: 7px 0;
|
||||
}
|
||||
|
||||
|
||||
input[type=text], textarea {
|
||||
width: 95%;
|
||||
font-size: $font-size-larger;
|
||||
|
@ -195,39 +195,39 @@ ul#offers_list li {
|
|||
float: left;
|
||||
line-height: normal;
|
||||
}
|
||||
|
||||
|
||||
input[type="submit"] {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
width: 50%;
|
||||
float: left;
|
||||
|
||||
|
||||
ul {
|
||||
background: $pale-blue;
|
||||
}
|
||||
|
||||
|
||||
&.highlight {
|
||||
ul {
|
||||
border-color: $medium-blue-grey;
|
||||
background: white;
|
||||
}
|
||||
|
||||
|
||||
color: $dark-green;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
ul {
|
||||
padding: 5px 10px 5px 15px;
|
||||
border: solid 1px $blue-grey;
|
||||
margin-right: 15px;
|
||||
list-style-type: none;
|
||||
|
||||
|
||||
li {
|
||||
margin: 5px 0;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
color: $medium-blue;
|
||||
}
|
||||
|
@ -238,12 +238,12 @@ ul#offers_list li {
|
|||
&.off {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
border: 3px solid $blue-grey;
|
||||
@include one-border-radius(5px);
|
||||
margin-top: 10px;
|
||||
padding: 10px;
|
||||
|
||||
|
||||
div.innards {
|
||||
input[type="text"],input[type="password"] {
|
||||
font-size: $font-size-larger;
|
||||
|
@ -252,16 +252,16 @@ ul#offers_list li {
|
|||
padding: 1% 1%;
|
||||
margin: 1% 0;
|
||||
color: $text-blue;
|
||||
|
||||
|
||||
&:disabled {
|
||||
border-color: white;
|
||||
}
|
||||
|
||||
|
||||
&.address, &#card_Number, &#id_email {
|
||||
width: 61%;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
label {
|
||||
width: 31%;
|
||||
float: left;
|
||||
|
@ -272,8 +272,8 @@ ul#offers_list li {
|
|||
padding: 1% 2% 1% 0;
|
||||
margin: 1% 0;
|
||||
text-align: right;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
.form-row span {
|
||||
float: left;
|
||||
line-height: $font-size-larger*1.5;
|
||||
|
@ -282,12 +282,12 @@ ul#offers_list li {
|
|||
padding: 1% 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.cvc {
|
||||
position: relative;
|
||||
z-index: 0;
|
||||
}
|
||||
|
||||
|
||||
#cvc_help {
|
||||
font-style: italic;
|
||||
float: none;
|
||||
|
@ -295,7 +295,7 @@ ul#offers_list li {
|
|||
color: $link-color;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
#cvc_answer {
|
||||
display: none;
|
||||
z-index: 100;
|
||||
|
@ -309,7 +309,7 @@ ul#offers_list li {
|
|||
right: 0;
|
||||
opacity: 1;
|
||||
background-color: white;
|
||||
|
||||
|
||||
img {
|
||||
float: right;
|
||||
margin-left: 5px;
|
||||
|
|
|
@ -12,7 +12,7 @@
|
|||
padding: 10px 0;
|
||||
font-size: $font-size-default;
|
||||
line-height: $font-size-default*1.5;
|
||||
|
||||
|
||||
.helptext {
|
||||
font-style: italic;
|
||||
|
||||
|
@ -28,12 +28,12 @@
|
|||
@include one-border-radius(5px);
|
||||
margin: 10px auto;
|
||||
padding: 9px;
|
||||
width: 45%;
|
||||
|
||||
width: 45%;
|
||||
|
||||
.google_signup {
|
||||
padding: 21px;
|
||||
}
|
||||
|
||||
|
||||
input[type="text"], input[type="password"] {
|
||||
width: 90%;
|
||||
}
|
||||
|
@ -45,9 +45,9 @@
|
|||
margin: 10px auto;
|
||||
float: none;
|
||||
padding: 10px;
|
||||
width: 50%;
|
||||
|
||||
|
||||
width: 50%;
|
||||
|
||||
|
||||
input[type="text"], input[type="password"] {
|
||||
width: 90%;
|
||||
}
|
||||
|
@ -69,43 +69,43 @@
|
|||
p {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
form {
|
||||
margin: 0 auto;
|
||||
width:210px;
|
||||
background:url("#{$image-base}landingpage/search-box-two.png") 0 0 no-repeat;
|
||||
height:36px;
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
|
||||
form {
|
||||
margin: 0 auto;
|
||||
width:210px;
|
||||
background:url("#{$image-base}landingpage/search-box-two.png") 0 0 no-repeat;
|
||||
height:36px;
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
}
|
||||
|
||||
|
||||
input {
|
||||
&.inputbox {
|
||||
border:none;
|
||||
color:#66942e;
|
||||
@include height(26px);
|
||||
font-size: $font-size-default;
|
||||
float:left;
|
||||
padding:0;
|
||||
margin:5px 0 5px 20px;
|
||||
&.inputbox {
|
||||
border:none;
|
||||
color:#66942e;
|
||||
@include height(26px);
|
||||
font-size: $font-size-default;
|
||||
float:left;
|
||||
padding:0;
|
||||
margin:5px 0 5px 20px;
|
||||
width: 149px;
|
||||
outline: none;
|
||||
|
||||
|
||||
&:focus {
|
||||
border: none;
|
||||
}
|
||||
}
|
||||
|
||||
&.greenbutton[type="submit"] {
|
||||
|
||||
&.greenbutton[type="submit"] {
|
||||
background:url("#{$image-base}landingpage/search-button-two.png") 0 0 no-repeat;
|
||||
width:40px;
|
||||
height:40px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border:none;
|
||||
display:block;
|
||||
float: right;
|
||||
text-indent:-10000px;
|
||||
width:40px;
|
||||
height:40px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border:none;
|
||||
display:block;
|
||||
float: right;
|
||||
text-indent:-10000px;
|
||||
font-size:0;
|
||||
@include one-border-radius(0);
|
||||
}
|
||||
|
|
|
@ -4,7 +4,7 @@ span.rounded {
|
|||
@include roundedspan;
|
||||
}
|
||||
|
||||
span.grey {
|
||||
span.grey {
|
||||
@include supporter-color-span(#bacfd6, grey);
|
||||
}
|
||||
|
||||
|
|
|
@ -1,44 +1,44 @@
|
|||
@import "variables.scss";
|
||||
|
||||
#js-maincontainer-bot-block {
|
||||
clear:both;
|
||||
#js-maincontainer-bot-block {
|
||||
clear:both;
|
||||
overflow:visible;
|
||||
margin-top:55px;
|
||||
|
||||
#js-search {
|
||||
|
||||
#js-search {
|
||||
@include one-border-radius(64px);
|
||||
background-color: $call-to-action;
|
||||
width:652px;
|
||||
height:80px;
|
||||
overflow:hidden;
|
||||
clear:both;
|
||||
color:#fff;
|
||||
|
||||
width:652px;
|
||||
height:80px;
|
||||
overflow:hidden;
|
||||
clear:both;
|
||||
color:#fff;
|
||||
|
||||
label {
|
||||
line-height:80px;
|
||||
font-size: $font-size-header;
|
||||
float:left;
|
||||
padding:0;
|
||||
width:auto;
|
||||
line-height:80px;
|
||||
font-size: $font-size-header;
|
||||
float:left;
|
||||
padding:0;
|
||||
width:auto;
|
||||
padding:0 15px 0 30px;
|
||||
}
|
||||
|
||||
form {
|
||||
float:left;
|
||||
width:210px;
|
||||
background:url("#{$image-base}landingpage/search-box-two.png") 0 0 no-repeat;
|
||||
height:36px;
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
|
||||
form {
|
||||
float:left;
|
||||
width:210px;
|
||||
background:url("#{$image-base}landingpage/search-box-two.png") 0 0 no-repeat;
|
||||
height:36px;
|
||||
display:block;
|
||||
overflow:hidden;
|
||||
margin-top:22px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#js-slideshow {
|
||||
padding:0 30px;
|
||||
#js-slideshow {
|
||||
padding:0 30px;
|
||||
position:relative;
|
||||
|
||||
|
||||
a.prev {
|
||||
@include clickyarrows();
|
||||
background:url("#{$image-base}landingpage/arrow-left.png") 0 0 no-repeat;
|
||||
|
@ -48,8 +48,8 @@
|
|||
a.next {
|
||||
@include clickyarrows();
|
||||
background:url("#{$image-base}landingpage/arrow-right.png") 0 0 no-repeat;
|
||||
right: 0;
|
||||
}
|
||||
right: 0;
|
||||
}
|
||||
}
|
||||
|
||||
.spacer {
|
||||
|
@ -59,45 +59,45 @@
|
|||
|
||||
|
||||
#js-search input {
|
||||
&.inputbox {
|
||||
border:none;
|
||||
color:#66942e;
|
||||
@include height(26px);
|
||||
font-size: $font-size-default;
|
||||
float:left;
|
||||
padding:0;
|
||||
margin:5px 0 5px 20px;
|
||||
&.inputbox {
|
||||
border:none;
|
||||
color:#66942e;
|
||||
@include height(26px);
|
||||
font-size: $font-size-default;
|
||||
float:left;
|
||||
padding:0;
|
||||
margin:5px 0 5px 20px;
|
||||
width: 149px;
|
||||
outline: none;
|
||||
}
|
||||
|
||||
&.greenbutton {
|
||||
|
||||
&.greenbutton {
|
||||
background:url("#{$image-base}landingpage/search-button-two.png") 0 0 no-repeat;
|
||||
width:40px;
|
||||
height:40px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border:none;
|
||||
display:block;
|
||||
float: right;
|
||||
text-indent:-10000px;
|
||||
width:40px;
|
||||
height:40px;
|
||||
padding:0;
|
||||
margin:0;
|
||||
border:none;
|
||||
display:block;
|
||||
float: right;
|
||||
text-indent:-10000px;
|
||||
font-size:0;
|
||||
}
|
||||
}
|
||||
|
||||
#js-slide .jsmodule > h3 {
|
||||
background:url("#{$image-base}landingpage/bg-slide.png") bottom center no-repeat;
|
||||
padding-bottom:7px;
|
||||
#js-slide .jsmodule > h3 {
|
||||
background:url("#{$image-base}landingpage/bg-slide.png") bottom center no-repeat;
|
||||
padding-bottom:7px;
|
||||
padding-left:35px;
|
||||
|
||||
span {
|
||||
background:$bright-blue;
|
||||
color:#fff;
|
||||
padding:10px 20px;
|
||||
@include border-radius(10px, 10px, 0, 0);
|
||||
font-size: $font-size-header;
|
||||
overflow:hidden;
|
||||
display:inline-block;
|
||||
|
||||
span {
|
||||
background:$bright-blue;
|
||||
color:#fff;
|
||||
padding:10px 20px;
|
||||
@include border-radius(10px, 10px, 0, 0);
|
||||
font-size: $font-size-header;
|
||||
overflow:hidden;
|
||||
display:inline-block;
|
||||
font-weight:normal;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -27,7 +27,7 @@
|
|||
margin:10px auto 0 auto;
|
||||
font-size: $font-size-larger;
|
||||
line-height: $font-size-larger*1.5;
|
||||
|
||||
|
||||
&.pale {
|
||||
border-color: $blue-grey;
|
||||
font-size: $font-size-default;
|
||||
|
@ -51,7 +51,7 @@
|
|||
text-transform:uppercase;
|
||||
color:$text-blue;
|
||||
font-size: $font-size-larger;
|
||||
display:block;
|
||||
display:block;
|
||||
}
|
||||
|
||||
@mixin utilitylinks($topbottom, $leftright, $fontsize)
|
||||
|
@ -86,7 +86,7 @@ body{
|
|||
bottom: 10%;
|
||||
right: 0;
|
||||
z-index:500;
|
||||
|
||||
|
||||
p {
|
||||
/* see http://scottgale.com/blog/css-vertical-text/2010/03/01/ */
|
||||
a {
|
||||
|
@ -120,11 +120,11 @@ body{
|
|||
a {
|
||||
font-weight:bold;
|
||||
font-size: inherit;
|
||||
|
||||
|
||||
text-decoration:none;
|
||||
cursor:pointer;
|
||||
color: $medium-blue;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
@ -150,8 +150,8 @@ img {
|
|||
border:none;
|
||||
}
|
||||
|
||||
img.user-avatar {
|
||||
float:left;
|
||||
img.user-avatar {
|
||||
float:left;
|
||||
margin-right:10px;
|
||||
@include one-border-radius(7px);
|
||||
}
|
||||
|
@ -159,7 +159,7 @@ img.user-avatar {
|
|||
input, textarea, a.fakeinput {
|
||||
border: 2px solid $blue-grey;
|
||||
@include one-border-radius(5px);
|
||||
|
||||
|
||||
&:focus {
|
||||
border: 2px solid $call-to-action;
|
||||
outline: none;
|
||||
|
@ -183,7 +183,7 @@ h2 {
|
|||
color:$text-blue;
|
||||
float:left;
|
||||
width:50%;
|
||||
|
||||
|
||||
span {
|
||||
font-style:italic;
|
||||
}
|
||||
|
@ -197,7 +197,7 @@ h3 {
|
|||
padding:0;
|
||||
margin:0;
|
||||
height:2.3em;
|
||||
|
||||
|
||||
span {
|
||||
font-size: $font-size-header;
|
||||
font-style: italic;
|
||||
|
@ -213,7 +213,7 @@ input[type="submit"], a.fakeinput {
|
|||
color: white;
|
||||
font-weight: bold;
|
||||
padding: 0.5em 1em;
|
||||
cursor: pointer;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
|
@ -249,7 +249,7 @@ ul.menu{
|
|||
|
||||
.errorlist + input {
|
||||
border: 2px solid $alert !important;
|
||||
|
||||
|
||||
&:focus {
|
||||
border: 1px solid $call-to-action !important;
|
||||
}
|
||||
|
@ -257,7 +257,7 @@ ul.menu{
|
|||
|
||||
.errorlist + textarea {
|
||||
border: 2px solid $alert !important;
|
||||
|
||||
|
||||
&:focus {
|
||||
border: 2px solid $call-to-action !important;
|
||||
}
|
||||
|
@ -274,7 +274,7 @@ ul.menu{
|
|||
line-height: 16px;
|
||||
padding: 0;
|
||||
font-weight: normal;
|
||||
text-align: left;
|
||||
text-align: left;
|
||||
display: inline;
|
||||
li {
|
||||
display: inline;
|
||||
|
@ -298,7 +298,7 @@ ul.menu{
|
|||
.js-logo {
|
||||
float:left;
|
||||
padding-top:10px;
|
||||
|
||||
|
||||
a {
|
||||
img { border: none;}
|
||||
}
|
||||
|
@ -313,13 +313,13 @@ ul.menu{
|
|||
@include one-border-radius(5px);
|
||||
height: 36px;
|
||||
}
|
||||
|
||||
|
||||
&#authenticated:hover, &#authenticated.highlight {
|
||||
background: $blue-grey;
|
||||
cursor: pointer;
|
||||
position: relative;
|
||||
}
|
||||
|
||||
|
||||
ul {
|
||||
&#user_menu {
|
||||
white-space:nowrap;
|
||||
|
@ -331,14 +331,14 @@ ul.menu{
|
|||
padding: 0;
|
||||
overflow: visible;
|
||||
margin: 0;
|
||||
|
||||
|
||||
li {
|
||||
border-top: 1px solid white;
|
||||
list-style-type: none;
|
||||
float: none;
|
||||
background: $blue-grey;
|
||||
padding: 7px 10px;
|
||||
|
||||
|
||||
&:hover {
|
||||
background: $call-to-action;
|
||||
a {
|
||||
|
@ -351,12 +351,12 @@ ul.menu{
|
|||
color: $text-blue;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
height: auto;
|
||||
line-height: $font-size-larger*1.75;
|
||||
}
|
||||
|
||||
|
||||
span {
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
@ -367,31 +367,31 @@ ul.menu{
|
|||
float:left;
|
||||
position: relative;
|
||||
z-index: 50;
|
||||
|
||||
|
||||
.notbutton{
|
||||
color:$text-blue;
|
||||
color:$text-blue;
|
||||
line-height: 36px;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
@include header-text;
|
||||
}
|
||||
|
||||
|
||||
span#welcome {
|
||||
@include header-text;
|
||||
padding: 0 10px;
|
||||
}
|
||||
|
||||
|
||||
img {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
}
|
||||
|
||||
|
||||
&.last {
|
||||
padding-left: 20px;
|
||||
|
||||
|
||||
a {
|
||||
|
||||
|
||||
span {
|
||||
@include border-radius(32px, 0, 0, 32px);
|
||||
background-color: $call-to-action;
|
||||
|
@ -403,8 +403,8 @@ ul.menu{
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
.unseen_count {
|
||||
|
||||
.unseen_count {
|
||||
border: solid 2px;
|
||||
@include one-border-radius(700px);
|
||||
padding: 3px;
|
||||
|
@ -412,13 +412,13 @@ ul.menu{
|
|||
width: 16px;
|
||||
cursor: pointer;
|
||||
text-align: center;
|
||||
|
||||
|
||||
&#i_haz_notifications {
|
||||
background-color: $call-to-action;
|
||||
color: white;
|
||||
border-color: white;
|
||||
}
|
||||
|
||||
|
||||
&#no_notifications_for_you {
|
||||
border-color: $pale-blue;
|
||||
background-color: $pale-blue;
|
||||
|
@ -453,19 +453,19 @@ form.login, #login form {
|
|||
line-height: 20px;
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
|
||||
|
||||
input {
|
||||
width: 90%;
|
||||
@include one-border-radius(5px);
|
||||
border: 1px solid $blue-grey;
|
||||
@include height(18px);
|
||||
margin-bottom: 6px;
|
||||
|
||||
|
||||
&[type=submit] {
|
||||
text-decoration: capitalize;
|
||||
@include actionbuttons;
|
||||
}
|
||||
|
||||
|
||||
&:focus {
|
||||
border: solid 1px $call-to-action;
|
||||
}
|
||||
|
@ -476,12 +476,12 @@ form.login, #login form {
|
|||
margin-bottom: $font-size-default;
|
||||
border-width: 2px;
|
||||
}
|
||||
|
||||
|
||||
input[type="submit"] {
|
||||
font-size: $font-size-larger;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
span.helptext {
|
||||
display: block;
|
||||
margin-top: -11px;
|
||||
|
@ -498,12 +498,12 @@ form.login, #login form {
|
|||
float:left;
|
||||
padding-top:25px;
|
||||
margin-left: 81px;
|
||||
|
||||
|
||||
input {
|
||||
float: left;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
.inputbox {
|
||||
padding:0 0 0 15px;
|
||||
margin:0;
|
||||
|
@ -519,7 +519,7 @@ form.login, #login form {
|
|||
float: left;
|
||||
color:$medium-blue;
|
||||
}
|
||||
|
||||
|
||||
.button {
|
||||
background:url("#{$image-base}blue-search-button.png") no-repeat;
|
||||
padding:0;
|
||||
|
@ -533,7 +533,7 @@ form.login, #login form {
|
|||
}
|
||||
}
|
||||
|
||||
.js-search-inner {
|
||||
.js-search-inner {
|
||||
float:right;
|
||||
}
|
||||
|
||||
|
@ -559,7 +559,7 @@ a#readon {
|
|||
font-size: $font-size-default;
|
||||
|
||||
font-weight:bold;
|
||||
|
||||
|
||||
}
|
||||
|
||||
.spread_the_word {
|
||||
|
@ -574,15 +574,15 @@ a#readon {
|
|||
float:left;
|
||||
width:235px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
|
||||
a {
|
||||
font-weight:normal;
|
||||
|
||||
|
||||
&:hover{
|
||||
text-decoration:underline;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.jsmod-content {
|
||||
border: solid 1px $pale-blue;
|
||||
@include border-radius(0, 0, 10px, 10px);
|
||||
|
@ -591,19 +591,19 @@ a#readon {
|
|||
ul {
|
||||
&.level1 > li > a, &.level1 > li > span {
|
||||
border-bottom:1px solid $pale-blue;
|
||||
border-top:1px solid $pale-blue;
|
||||
border-top:1px solid $pale-blue;
|
||||
@include utilityheaders;
|
||||
padding:10px;
|
||||
}
|
||||
|
||||
&.level2 li {
|
||||
@include utilitylinks(5px, 20px, $font-size-larger);
|
||||
|
||||
|
||||
img {
|
||||
vertical-align: middle;
|
||||
@include one-border-radius(5px);
|
||||
}
|
||||
|
||||
|
||||
.ungluer-name {
|
||||
@include height(30px);
|
||||
}
|
||||
|
@ -621,7 +621,7 @@ a#readon {
|
|||
width: 32px;
|
||||
}
|
||||
a span.thumbnail-caption {
|
||||
font-size: $font-size-small;
|
||||
font-size: $font-size-small;
|
||||
display: inline-block;
|
||||
width: 154px;
|
||||
overflow-y: scroll;
|
||||
|
@ -670,7 +670,7 @@ div#content-block {
|
|||
background:url($background-header) 100% -223px no-repeat;
|
||||
padding:0 0 0 7px;
|
||||
margin-bottom: 20px;
|
||||
|
||||
|
||||
&.jsmodule {
|
||||
background: none;
|
||||
}
|
||||
|
@ -689,7 +689,7 @@ div#content-block-content, div#content-block-content-1 {
|
|||
width:100%;
|
||||
overflow:hidden;
|
||||
padding-left: 10px;
|
||||
|
||||
|
||||
.cols3 .column {
|
||||
width:33.33%;
|
||||
float:left;
|
||||
|
@ -704,18 +704,18 @@ div#content-block-content, div#content-block-content-1 {
|
|||
padding: 15px 0px 45px 0px;
|
||||
margin-top: 15px;
|
||||
overflow: hidden;
|
||||
|
||||
|
||||
.column {
|
||||
float:left;
|
||||
width: 25%;
|
||||
padding-top:5px;
|
||||
|
||||
|
||||
ul {
|
||||
padding-top:5px;
|
||||
margin-left:0;
|
||||
padding-left:0;
|
||||
}
|
||||
|
||||
|
||||
li {
|
||||
@include utilitylinks(5px, 0, $font-size-larger);
|
||||
text-transform: none;
|
||||
|
@ -768,7 +768,7 @@ a.nounderline {
|
|||
top: 25%;
|
||||
padding: 9px;
|
||||
max-width: 90%;
|
||||
|
||||
|
||||
.collapser_x {
|
||||
margin-top: -27px;
|
||||
margin-right: -27px;
|
||||
|
@ -780,38 +780,38 @@ a.nounderline {
|
|||
padding: 9px 0;
|
||||
font-size: $font-size-larger;
|
||||
line-height: 20px;
|
||||
|
||||
|
||||
a {
|
||||
font-size: $font-size-larger;
|
||||
line-height: 20px;
|
||||
}
|
||||
|
||||
|
||||
b {
|
||||
color: $call-to-action;
|
||||
}
|
||||
|
||||
|
||||
&.last {
|
||||
border-bottom: solid 2px $blue-grey;
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
.right_border {
|
||||
border-right: solid 1px $blue-grey;
|
||||
float: left;
|
||||
padding: 9px;
|
||||
}
|
||||
|
||||
|
||||
.signuptoday {
|
||||
float: right;
|
||||
margin-top: 0;
|
||||
clear: none;
|
||||
}
|
||||
|
||||
|
||||
h2 + form, h3 + form, h4 + form {
|
||||
margin-top: 15px;
|
||||
}
|
||||
|
||||
|
||||
h2, h3, h4 {
|
||||
margin-bottom: 10px;
|
||||
}
|
||||
|
@ -830,7 +830,7 @@ a.nounderline {
|
|||
float: right;
|
||||
@include height(24px);
|
||||
width: 24px;
|
||||
@include one-border-radius(24px);
|
||||
@include one-border-radius(24px);
|
||||
-moz-box-shadow: -1px 1px $text-blue;
|
||||
-webkit-box-shadow: -1px 1px $text-blue;
|
||||
box-shadow: -1px 1px $text-blue;
|
||||
|
@ -848,12 +848,12 @@ a.nounderline {
|
|||
a {
|
||||
padding-right: 17px;
|
||||
color: white;
|
||||
|
||||
|
||||
&:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
padding:0 15px;
|
||||
@include height(36px);
|
||||
float: left;
|
||||
|
@ -878,7 +878,7 @@ li.checked {
|
|||
.btn_support {
|
||||
margin: 10px;
|
||||
width: 215px;
|
||||
|
||||
|
||||
a, form input, > span {
|
||||
font-size: $font-size-shout;
|
||||
border: 4px solid $blue-grey;
|
||||
|
@ -898,33 +898,33 @@ li.checked {
|
|||
background: none;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
&.create-account span {
|
||||
padding: 0;
|
||||
margin: 0;
|
||||
background: none;
|
||||
}
|
||||
|
||||
|
||||
a:hover, form input:hover {
|
||||
background-color: darken($call-to-action, 7%);
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
|
||||
a {
|
||||
width: 207px;
|
||||
}
|
||||
|
||||
|
||||
form input {
|
||||
width: 215px;
|
||||
}
|
||||
|
||||
|
||||
&.modify a, &.modify form input {
|
||||
background-color: $medium-blue-grey;
|
||||
|
||||
|
||||
&:hover {
|
||||
background-color: darken($medium-blue-grey, 7%);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* download page */
|
||||
|
@ -934,30 +934,30 @@ li.checked {
|
|||
border-bottom: solid $blue-grey 1px;
|
||||
padding: 0.5em 0;
|
||||
}
|
||||
|
||||
|
||||
> div {
|
||||
padding-left: 1%;
|
||||
padding-right: 1%;
|
||||
font-size: $font-size-larger;
|
||||
line-height: $font-size-larger*1.5;
|
||||
width: 98%;
|
||||
|
||||
|
||||
&.active {
|
||||
float: left;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.one_click {
|
||||
float: left;
|
||||
& > div {
|
||||
float: left;
|
||||
|
||||
|
||||
#kindle a, .kindle a , #marvin a, .marvin a, #mac_ibooks a, .mac_ibooks a{
|
||||
font-size: $font-size-larger;
|
||||
padding: 9px 0;
|
||||
}
|
||||
|
||||
|
||||
div {
|
||||
margin: 0 10px 0 0;
|
||||
}
|
||||
|
@ -993,7 +993,7 @@ li.checked {
|
|||
padding: 10px;
|
||||
font-size: $font-size-header;
|
||||
text-align: center;
|
||||
|
||||
|
||||
}
|
||||
#id_preapproval_amount {
|
||||
width: 50%;
|
||||
|
@ -1001,8 +1001,8 @@ li.checked {
|
|||
font-size: $font-size-larger;
|
||||
}
|
||||
#askblock {
|
||||
float:right;
|
||||
min-width:260px;
|
||||
float:right;
|
||||
min-width:260px;
|
||||
background: $pale-blue;
|
||||
padding: 10px;
|
||||
width:30%
|
||||
|
|
|
@ -3,14 +3,14 @@
|
|||
{
|
||||
background:url("#{$image-base}icons/#{$sharewhere}.png") 10px center no-repeat;
|
||||
cursor: pointer;
|
||||
|
||||
|
||||
span {
|
||||
padding-left:10px;
|
||||
}
|
||||
|
||||
|
||||
&:hover {
|
||||
background:$call-to-action url("#{$image-base}icons/#{$sharewhere}-hover.png") 10px center no-repeat;
|
||||
|
||||
|
||||
span {
|
||||
color: #fff;
|
||||
}
|
||||
|
@ -28,19 +28,19 @@ ul.social {
|
|||
line-height: 28px !important;
|
||||
margin: 0 !important;
|
||||
@include one-border-radius(0px);
|
||||
|
||||
|
||||
&.facebook {
|
||||
@include shareclass("facebook");
|
||||
}
|
||||
|
||||
|
||||
&.twitter {
|
||||
@include shareclass("twitter");
|
||||
}
|
||||
|
||||
|
||||
&.email {
|
||||
@include shareclass("email");
|
||||
}
|
||||
|
||||
|
||||
&.embed {
|
||||
@include shareclass("embed");
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
@import "variables.scss";
|
||||
|
||||
.block-inner {
|
||||
.block-inner {
|
||||
padding-right:10px;
|
||||
}
|
||||
|
||||
|
@ -14,38 +14,38 @@
|
|||
width:100%;
|
||||
clear:both;
|
||||
padding-top: 10px;
|
||||
|
||||
.block {
|
||||
float:left;
|
||||
|
||||
.block {
|
||||
float:left;
|
||||
}
|
||||
|
||||
|
||||
.block1, .block3 {
|
||||
width:25%;
|
||||
}
|
||||
|
||||
|
||||
.block2 {
|
||||
width:50%;
|
||||
|
||||
|
||||
div {
|
||||
float: left;
|
||||
max-width: 340px;
|
||||
}
|
||||
|
||||
|
||||
input {
|
||||
margin-left: 5px;
|
||||
}
|
||||
}
|
||||
|
||||
input {
|
||||
float:left;
|
||||
input {
|
||||
float:left;
|
||||
margin:3px 10px 0 0;
|
||||
width: 45%;
|
||||
|
||||
|
||||
&[type=checkbox] {
|
||||
float: none;
|
||||
width: auto;
|
||||
}
|
||||
|
||||
|
||||
&#librarything_input, &#goodreads_input {
|
||||
width: auto;
|
||||
cursor: pointer;
|
||||
|
@ -53,25 +53,25 @@
|
|||
color: $text-blue;
|
||||
cursor: pointer;
|
||||
}
|
||||
|
||||
|
||||
&.profile-save {
|
||||
width: 116px;
|
||||
cursor: pointer;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
label {
|
||||
float:left;
|
||||
float:left;
|
||||
width:90%;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
textarea {
|
||||
width:95%;
|
||||
}
|
||||
|
||||
|
||||
select {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#user-block1 {
|
||||
|
@ -102,14 +102,14 @@
|
|||
width:75%;
|
||||
}
|
||||
|
||||
.user-block3,
|
||||
.user-block3,
|
||||
.user-block4 {
|
||||
float:left;
|
||||
width:25%;
|
||||
|
||||
|
||||
&.recommended {
|
||||
margin-top: auto;
|
||||
|
||||
|
||||
img {
|
||||
margin-right: 7px;
|
||||
}
|
||||
|
@ -134,7 +134,7 @@
|
|||
position: absolute;
|
||||
bottom: 0;
|
||||
left: 60px;
|
||||
|
||||
|
||||
img {
|
||||
vertical-align:text-bottom;
|
||||
border:1px solid #d4d4d4;
|
||||
|
@ -142,7 +142,7 @@
|
|||
}
|
||||
}
|
||||
|
||||
.social {
|
||||
.social {
|
||||
width:100%;
|
||||
}
|
||||
|
||||
|
@ -152,7 +152,7 @@
|
|||
margin-right: -5px;
|
||||
border: 2px solid white;
|
||||
padding: 3px 2px 2px 3px;
|
||||
|
||||
|
||||
&:hover {
|
||||
border: 2px solid $call-to-action;
|
||||
@include one-border-radius(5px);
|
||||
|
@ -169,7 +169,7 @@ span.special-user-name {
|
|||
}
|
||||
|
||||
span.user-name,
|
||||
span.user-short-info {
|
||||
span.user-short-info {
|
||||
display: block;
|
||||
}
|
||||
|
||||
|
@ -178,14 +178,14 @@ span.user-short-info {
|
|||
}
|
||||
|
||||
span.user-name,
|
||||
span.user-name a {
|
||||
span.user-name a {
|
||||
font-size: $font-size-default;
|
||||
color:$text-blue;
|
||||
}
|
||||
|
||||
span.user-status-title {
|
||||
float:left;
|
||||
margin-right: 8px;
|
||||
span.user-status-title {
|
||||
float:left;
|
||||
margin-right: 8px;
|
||||
padding-top: 5px;
|
||||
}
|
||||
|
||||
|
@ -197,26 +197,26 @@ span.blue {
|
|||
@include supporter-color-span(#a7d26a, "blue");
|
||||
}
|
||||
|
||||
span.orange {
|
||||
span.orange {
|
||||
@include supporter-color-span(#eabc7c, "orange");
|
||||
}
|
||||
|
||||
span.grey {
|
||||
span.grey {
|
||||
@include supporter-color-span(#bacfd6, "grey");
|
||||
}
|
||||
|
||||
div.check-list {
|
||||
float: left;
|
||||
div.check-list {
|
||||
float: left;
|
||||
padding-bottom:7px;
|
||||
clear: both;
|
||||
}
|
||||
|
||||
a.profile-edit {
|
||||
display:block;
|
||||
a.profile-edit {
|
||||
display:block;
|
||||
// background:url("#{$image-base}header/icon-edit.png") right top no-repeat;
|
||||
}
|
||||
|
||||
div.profile-save {
|
||||
div.profile-save {
|
||||
padding-top:15px;
|
||||
border: none;
|
||||
}
|
||||
|
@ -235,16 +235,16 @@ input.profile-save {
|
|||
background: url("#{$image-base}supporter_icons/goodreads_square.png") left center no-repeat;
|
||||
min-height: 33px;
|
||||
margin: 12px auto;
|
||||
|
||||
|
||||
span {
|
||||
display: inline-block;
|
||||
vertical-align: middle;
|
||||
}
|
||||
|
||||
|
||||
div, input {
|
||||
margin: auto 10px auto 36px;
|
||||
}
|
||||
|
||||
|
||||
#goodreads_shelves {
|
||||
margin: auto 10px auto 36px;
|
||||
display: block;
|
||||
|
@ -264,16 +264,16 @@ input.profile-save {
|
|||
.weareonthat {
|
||||
background: url("#{$image-base}checkmark_small.png") left center no-repeat;
|
||||
}
|
||||
span.my-setting {
|
||||
span.my-setting {
|
||||
@include height(40px);
|
||||
display:block;
|
||||
padding:0 0 10px 10px;
|
||||
display:block;
|
||||
padding:0 0 10px 10px;
|
||||
font-size: $font-size-header;
|
||||
font-weight: bold;
|
||||
cursor:pointer;
|
||||
}
|
||||
|
||||
span.my-setting.active {
|
||||
span.my-setting.active {
|
||||
background:$blue-grey url("#{$image-base}header/collspane.png") 90% center no-repeat;
|
||||
}
|
||||
|
||||
|
@ -284,7 +284,7 @@ span.my-setting.active {
|
|||
margin-top: 10px;
|
||||
width: 100%;
|
||||
border-bottom: 4px solid $blue-grey;
|
||||
|
||||
|
||||
ul.tabs li a:hover {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
@ -311,32 +311,32 @@ span.my-setting.active {
|
|||
}
|
||||
}
|
||||
|
||||
#tabs ul.book-list-view {
|
||||
#tabs ul.book-list-view {
|
||||
margin-bottom:0 !important;
|
||||
}
|
||||
|
||||
#tabs-1,
|
||||
#tabs-2,
|
||||
#tabs-3 {
|
||||
#tabs-3 {
|
||||
margin-left:10px;
|
||||
}
|
||||
|
||||
ul.tabs {
|
||||
float:left;
|
||||
padding:0;
|
||||
margin:0;
|
||||
padding:0;
|
||||
margin:0;
|
||||
list-style:none;
|
||||
|
||||
li {
|
||||
float: left;
|
||||
@include height(46px);
|
||||
float: left;
|
||||
@include height(46px);
|
||||
margin-right:2px;
|
||||
|
||||
|
||||
&.tabs1, &.tabs2, &.tabs3 {
|
||||
width:112px;
|
||||
}
|
||||
|
||||
a {
|
||||
a {
|
||||
@include height(46px);
|
||||
display:block;
|
||||
text-align:center;
|
||||
|
@ -346,31 +346,31 @@ ul.tabs {
|
|||
background:$medium-blue;
|
||||
color:#fff;
|
||||
}
|
||||
|
||||
|
||||
&.tabs1 a:hover, &.tabs1.active a {
|
||||
background:$green;
|
||||
color:#fff
|
||||
}
|
||||
}
|
||||
|
||||
&.tabs2 a:hover, &.tabs2.active a {
|
||||
background:#eabc7c;
|
||||
color:#fff;
|
||||
}
|
||||
}
|
||||
|
||||
&.tabs3 a:hover, &.tabs3.active a {
|
||||
background:$blue-grey;
|
||||
color:$text-blue;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#rss {
|
||||
height: 46px;
|
||||
|
||||
|
||||
img {
|
||||
padding: 16px 0 0 14px;
|
||||
}
|
||||
|
||||
|
||||
span {
|
||||
margin-left: 3px;
|
||||
font-size: $font-size-default;
|
||||
|
@ -421,7 +421,7 @@ div#content-block-content {
|
|||
padding:10px;
|
||||
}
|
||||
|
||||
.book-image {
|
||||
.book-image {
|
||||
padding:0 0 10px 0;
|
||||
}
|
||||
|
||||
|
@ -471,7 +471,7 @@ div#content-block-content {
|
|||
}
|
||||
|
||||
#js-slide .jsmodule {
|
||||
width: 660px !important;
|
||||
width: 660px !important;
|
||||
}
|
||||
|
||||
#js-maincontainer-bot-block {
|
||||
|
@ -486,7 +486,7 @@ div#content-block-content {
|
|||
@include one-border-radius(5px);
|
||||
width: 665px;
|
||||
margin: 7px 0;
|
||||
|
||||
|
||||
a {
|
||||
font-size: $font-size-larger;
|
||||
color: $call-to-action;
|
||||
|
|
|
@ -151,29 +151,29 @@ $cursor-disabled: not-allowed;
|
|||
@mixin supporter-color-span($hex, $color)
|
||||
{
|
||||
$url: "#{$image-base}header-button-#{$color}.png";
|
||||
background:$hex url($url) left bottom repeat-x;
|
||||
background:$hex url($url) left bottom repeat-x;
|
||||
}
|
||||
|
||||
@mixin roundedspan
|
||||
{
|
||||
border:1px solid #d4d4d4;
|
||||
@include one-border-radius(7px);
|
||||
padding:1px;
|
||||
color:#fff;
|
||||
padding:1px;
|
||||
color:#fff;
|
||||
margin:0 8px 0 0;
|
||||
display:inline-block;
|
||||
|
||||
> span {
|
||||
padding:7px 7px;
|
||||
min-width:15px;
|
||||
|
||||
> span {
|
||||
padding:7px 7px;
|
||||
min-width:15px;
|
||||
@include one-border-radius(5px);
|
||||
text-align:center;
|
||||
text-align:center;
|
||||
display:inline-block;
|
||||
|
||||
|
||||
.hovertext {
|
||||
display: none;
|
||||
}
|
||||
|
||||
|
||||
&:hover .hovertext {
|
||||
display: inline;
|
||||
}
|
||||
|
@ -182,8 +182,8 @@ $cursor-disabled: not-allowed;
|
|||
|
||||
@mixin height($x)
|
||||
{
|
||||
height:$x;
|
||||
line-height:$x;
|
||||
height:$x;
|
||||
line-height:$x;
|
||||
}
|
||||
|
||||
@mixin mediaborder-base()
|
||||
|
@ -217,8 +217,8 @@ $cursor-disabled: not-allowed;
|
|||
padding: 7px 0;
|
||||
font-weight: bold;
|
||||
font-size: 13px;
|
||||
text-align: center;
|
||||
|
||||
text-align: center;
|
||||
|
||||
li {
|
||||
list-style: none;
|
||||
border: none;
|
||||
|
@ -227,11 +227,11 @@ $cursor-disabled: not-allowed;
|
|||
|
||||
@mixin clickyarrows()
|
||||
{
|
||||
text-indent:-10000px;
|
||||
text-indent:-10000px;
|
||||
font-size:0;
|
||||
width:15px;
|
||||
height:22px;
|
||||
display:block;
|
||||
position:absolute;
|
||||
width:15px;
|
||||
height:22px;
|
||||
display:block;
|
||||
position:absolute;
|
||||
top:45%;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue