summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rwxr-xr-x.gitignore7
-rw-r--r--askbot/__init__.py2
-rw-r--r--askbot/admin.py8
-rw-r--r--askbot/conf/__init__.py1
-rw-r--r--askbot/conf/access_control.py21
-rw-r--r--askbot/conf/email.py68
-rw-r--r--askbot/conf/login_providers.py10
-rw-r--r--askbot/const/__init__.py9
-rw-r--r--askbot/context.py3
-rw-r--r--askbot/deployment/__init__.py212
-rw-r--r--askbot/deployment/assertions.py3
-rw-r--r--askbot/deployment/messages.py14
-rw-r--r--askbot/deployment/path_utils.py138
-rw-r--r--askbot/deployment/template_loader.py13
-rw-r--r--askbot/deps/django_authopenid/views.py8
-rw-r--r--askbot/doc/source/changelog.rst15
-rw-r--r--askbot/doc/source/contributors.rst8
-rw-r--r--askbot/doc/source/initial-configuration.rst32
-rw-r--r--askbot/doc/source/management-commands.rst10
-rw-r--r--askbot/feed.py26
-rw-r--r--askbot/locale/ca/LC_MESSAGES/django.mobin0 -> 35829 bytes
-rw-r--r--askbot/locale/ca/LC_MESSAGES/django.po6526
-rw-r--r--askbot/locale/ca/LC_MESSAGES/djangojs.mobin0 -> 1181 bytes
-rw-r--r--askbot/locale/ca/LC_MESSAGES/djangojs.po65
-rw-r--r--askbot/locale/de/LC_MESSAGES/django.mobin50109 -> 17569 bytes
-rw-r--r--askbot/locale/de/LC_MESSAGES/django.po2
-rw-r--r--askbot/locale/en/LC_MESSAGES/django.mobin20706 -> 20624 bytes
-rw-r--r--askbot/locale/en/LC_MESSAGES/djangojs.mobin2061 -> 0 bytes
-rw-r--r--askbot/locale/en/LC_MESSAGES/djangojs.po2
-rw-r--r--askbot/locale/fi/LC_MESSAGES/django.mobin51493 -> 20906 bytes
-rw-r--r--askbot/locale/fr/LC_MESSAGES/django.mobin88376 -> 49048 bytes
-rw-r--r--askbot/locale/it/LC_MESSAGES/django.mobin82876 -> 72484 bytes
-rw-r--r--askbot/locale/it/LC_MESSAGES/django.po1835
-rw-r--r--askbot/locale/it/LC_MESSAGES/djangojs.mobin2917 -> 0 bytes
-rw-r--r--askbot/locale/it/LC_MESSAGES/djangojs.po28
-rw-r--r--askbot/locale/ja/LC_MESSAGES/django.mobin37520 -> 11979 bytes
-rw-r--r--askbot/locale/ko/LC_MESSAGES/django.mobin19986 -> 4238 bytes
-rw-r--r--askbot/locale/pt_BR/LC_MESSAGES/django.mobin8806 -> 8806 bytes
-rw-r--r--askbot/locale/ro/LC_MESSAGES/django.mobin83286 -> 47222 bytes
-rw-r--r--askbot/locale/ru/LC_MESSAGES/django.mobin129267 -> 77179 bytes
-rw-r--r--askbot/locale/sr/LC_MESSAGES/django.mobin37548 -> 14675 bytes
-rw-r--r--askbot/locale/tr/LC_MESSAGES/django.mobin54328 -> 30400 bytes
-rw-r--r--askbot/locale/vi/LC_MESSAGES/django.mobin17130 -> 1823 bytes
-rw-r--r--askbot/locale/zh-tw/LC_MESSAGES/django.mobin33183 -> 12403 bytes
-rw-r--r--askbot/locale/zh_CN/LC_MESSAGES/django.mobin85081 -> 48998 bytes
-rw-r--r--askbot/management/commands/merge_users.py60
-rw-r--r--askbot/management/commands/send_accept_answer_reminders.py84
-rw-r--r--askbot/management/commands/send_email.py24
-rw-r--r--askbot/management/commands/send_email_alerts.py8
-rw-r--r--askbot/management/commands/send_unanswered_question_reminders.py56
-rw-r--r--askbot/middleware/anon_user.py3
-rw-r--r--askbot/middleware/forum_mode.py35
-rw-r--r--askbot/migrations/0046_add_uniques_to_email_feed_settings.py306
-rw-r--r--askbot/migrations/0047_auto__add_field_answerrevision_revision_type__add_field_answerrevision.py352
-rw-r--r--askbot/migrations/0048_set_proper_revision_types.py313
-rw-r--r--askbot/migrations/0049_add_postrevision_model.py357
-rw-r--r--askbot/migrations/0050_move_qa_revisions_to_postrevision.py366
-rw-r--r--askbot/migrations/0051_proxify_qa_rev_models.py347
-rw-r--r--askbot/models/__init__.py9
-rw-r--r--askbot/models/answer.py30
-rw-r--r--askbot/models/base.py29
-rw-r--r--askbot/models/post.py130
-rw-r--r--askbot/models/question.py102
-rw-r--r--askbot/models/user.py4
-rw-r--r--askbot/search/sphinx/sphinx.conf10
-rw-r--r--askbot/setup_templates/settings.py13
-rw-r--r--askbot/setup_templates/settings.py.mustache222
-rw-r--r--askbot/skins/common/media/js/live_search.js7
-rw-r--r--askbot/skins/common/media/js/post.js34
-rw-r--r--askbot/skins/common/media/js/wmd/wmd.css2
-rw-r--r--askbot/skins/common/media/js/wmd/wmd.js2
-rw-r--r--askbot/skins/common/templates/question/answer_vote_buttons.html7
-rw-r--r--askbot/skins/common/templates/widgets/search_bar.html6
-rw-r--r--askbot/skins/default/media/images/logo.gifbin3792 -> 2249 bytes
-rw-r--r--askbot/skins/default/media/style/lib_style.less2
-rw-r--r--askbot/skins/default/media/style/style.css5057
-rw-r--r--askbot/skins/default/media/style/style.less3263
-rw-r--r--askbot/skins/default/templates/about.html2
-rw-r--r--askbot/skins/default/templates/answer_edit.html11
-rw-r--r--askbot/skins/default/templates/base.html2
-rw-r--r--askbot/skins/default/templates/faq.html1
-rw-r--r--askbot/skins/default/templates/feedback.html4
-rw-r--r--askbot/skins/default/templates/macros.html4
-rw-r--r--askbot/skins/default/templates/main_page/javascript.html5
-rw-r--r--askbot/skins/default/templates/main_page/nothing_found.html2
-rw-r--r--askbot/skins/default/templates/main_page/tab_bar.html4
-rw-r--r--askbot/skins/default/templates/meta/bottom_scripts.html4
-rw-r--r--askbot/skins/default/templates/meta/html_head_javascript.html1
-rw-r--r--askbot/skins/default/templates/meta/html_head_stylesheets.html12
-rw-r--r--askbot/skins/default/templates/privacy.html4
-rw-r--r--askbot/skins/default/templates/question/answer_tab_bar.html4
-rw-r--r--askbot/skins/default/templates/question/javascript.html7
-rw-r--r--askbot/skins/default/templates/revisions.html2
-rw-r--r--askbot/skins/default/templates/user_profile/user.html2
-rw-r--r--askbot/skins/default/templates/user_profile/user_reputation.html7
-rw-r--r--askbot/skins/default/templates/widgets/answer_edit_tips.html14
-rw-r--r--askbot/skins/default/templates/widgets/system_messages.html2
-rw-r--r--askbot/skins/loaders.py4
-rw-r--r--askbot/skins/old/media/js/post.js2
-rw-r--r--askbot/skins/old/templates/authopenid/email_validation.txt6
-rw-r--r--askbot/skins/old/templates/main_page/headline.html4
-rw-r--r--askbot/startup_procedures.py118
-rw-r--r--askbot/tests/__init__.py3
-rw-r--r--askbot/tests/cache_tests.py43
-rw-r--r--askbot/tests/db_api_tests.py32
-rw-r--r--askbot/tests/email_alert_tests.py75
-rw-r--r--askbot/tests/management_command_tests.py23
-rw-r--r--askbot/tests/misc_tests.py50
-rw-r--r--askbot/tests/page_load_tests.py210
-rw-r--r--askbot/tests/permission_assertion_tests.py45
-rw-r--r--askbot/tests/post_model_tests.py55
-rw-r--r--askbot/tests/utils.py44
-rw-r--r--askbot/urls.py6
-rw-r--r--askbot/utils/classes.py34
-rw-r--r--askbot/utils/forms.py20
-rw-r--r--askbot/views/readers.py41
-rw-r--r--askbot/views/users.py71
-rw-r--r--askbot/views/writers.py6
-rw-r--r--askbot_requirements.txt1
-rw-r--r--setup.py1
120 files changed, 17241 insertions, 4053 deletions
diff --git a/.gitignore b/.gitignore
index f4c8a613..5d0da446 100755
--- a/.gitignore
+++ b/.gitignore
@@ -26,16 +26,13 @@ tmp/*
load
askbot/skins/default/media/js/flot
askbot/skins/common/media/js/closure/google-closure
+askbot/skins/common/media/js/jquery.fancybox-1.3.4
askbot/fixtures
*.egg
dist
*.egg-info
build
-askbot/upfiles/*.jpg
-askbot/upfiles/*.jpeg
-askbot/upfiles/*.gif
-askbot/upfiles/*.png
-askbot/upfiles/*.ico
+askbot/upfiles/
askbot/upfiles/avatars/
askbot/skins/common/media/mathjax/
/jinja2
diff --git a/askbot/__init__.py b/askbot/__init__.py
index 12e4f7d7..1c822e05 100644
--- a/askbot/__init__.py
+++ b/askbot/__init__.py
@@ -9,7 +9,7 @@ import smtplib
import sys
import logging
-VERSION = (0, 7, 26)
+VERSION = (0, 7, 29)
#necessary for interoperability of django and coffin
try:
diff --git a/askbot/admin.py b/askbot/admin.py
index af62ed84..34722416 100644
--- a/askbot/admin.py
+++ b/askbot/admin.py
@@ -31,10 +31,7 @@ class VoteAdmin(admin.ModelAdmin):
class FavoriteQuestionAdmin(admin.ModelAdmin):
""" admin class"""
-class QuestionRevisionAdmin(admin.ModelAdmin):
- """ admin class"""
-
-class AnswerRevisionAdmin(admin.ModelAdmin):
+class PostRevisionAdmin(admin.ModelAdmin):
""" admin class"""
class AwardAdmin(admin.ModelAdmin):
@@ -52,8 +49,7 @@ admin.site.register(models.Answer, AnswerAdmin)
admin.site.register(models.Comment, CommentAdmin)
admin.site.register(models.Vote, VoteAdmin)
admin.site.register(models.FavoriteQuestion, FavoriteQuestionAdmin)
-admin.site.register(models.QuestionRevision, QuestionRevisionAdmin)
-admin.site.register(models.AnswerRevision, AnswerRevisionAdmin)
+admin.site.register(models.PostRevision, PostRevisionAdmin)
admin.site.register(models.Award, AwardAdmin)
admin.site.register(models.Repute, ReputeAdmin)
admin.site.register(models.Activity, ActivityAdmin)
diff --git a/askbot/conf/__init__.py b/askbot/conf/__init__.py
index 64fe41fb..4f228ea7 100644
--- a/askbot/conf/__init__.py
+++ b/askbot/conf/__init__.py
@@ -19,6 +19,7 @@ import askbot.conf.markup
import askbot.conf.social_sharing
import askbot.conf.badges
import askbot.conf.login_providers
+import askbot.conf.access_control
import askbot.conf.site_modes
#import main settings object
diff --git a/askbot/conf/access_control.py b/askbot/conf/access_control.py
new file mode 100644
index 00000000..cd2364b5
--- /dev/null
+++ b/askbot/conf/access_control.py
@@ -0,0 +1,21 @@
+from askbot.conf.settings_wrapper import settings
+from askbot.conf.super_groups import LOGIN_USERS_COMMUNICATION
+from askbot.deps import livesettings
+from django.utils.translation import ugettext as _
+
+ACCESS_CONTROL = livesettings.ConfigurationGroup(
+ 'ACCESS_CONTROL',
+ _('Access control settings'),
+ super_group = LOGIN_USERS_COMMUNICATION
+ )
+
+settings.register(
+ livesettings.BooleanValue(
+ ACCESS_CONTROL,
+ 'ASKBOT_CLOSED_FORUM_MODE',
+ default = False,
+ description=_('Allow only registered user to access the forum'),
+ )
+)
+
+
diff --git a/askbot/conf/email.py b/askbot/conf/email.py
index 195c14ee..3db80e7a 100644
--- a/askbot/conf/email.py
+++ b/askbot/conf/email.py
@@ -39,24 +39,6 @@ settings.register(
)
)
-#settings.register(
-# livesettings.StringValue(
-# EMAIL,
-# 'DEFAULT_NOTIFICATION_DELIVERY_SCHEDULE',
-# default='w',
-# choices=const.NOTIFICATION_DELIVERY_SCHEDULE_CHOICES,
-# description=_('Default news notification frequency'),
-# help_text=_(
-# 'This option currently defines default frequency '
-# 'of emailed updates in the following five categories: '
-# 'questions asked by user, answered by user, individually '
-# 'selected, entire forum (per person tag filter applies) '
-# 'and posts mentioning the user and comment responses'
-# )
-# )
-#)
-
-
settings.register(
livesettings.StringValue(
EMAIL,
@@ -139,7 +121,6 @@ settings.register(
'NOTE: in order to use this feature, it is necessary to '
'run the management command "send_unanswered_question_reminders" '
'(for example, via a cron job - with an appropriate frequency) '
- 'and an IMAP server with a dedicated inbox must be configured '
)
)
)
@@ -182,6 +163,55 @@ settings.register(
settings.register(
livesettings.BooleanValue(
EMAIL,
+ 'ENABLE_ACCEPT_ANSWER_REMINDERS',
+ default = False,
+ description = _('Send periodic reminders to accept the best answer'),
+ help_text = _(
+ 'NOTE: in order to use this feature, it is necessary to '
+ 'run the management command "send_accept_answer_reminders" '
+ '(for example, via a cron job - with an appropriate frequency) '
+ )
+ )
+)
+
+settings.register(
+ livesettings.IntegerValue(
+ EMAIL,
+ 'DAYS_BEFORE_SENDING_ACCEPT_ANSWER_REMINDER',
+ default = 3,
+ description = _(
+ 'Days before starting to send reminders to accept an answer'
+ ),
+ )
+)
+
+settings.register(
+ livesettings.IntegerValue(
+ EMAIL,
+ 'ACCEPT_ANSWER_REMINDER_FREQUENCY',
+ default = 3,
+ description = _(
+ 'How often to send accept answer reminders '
+ '(in days between the reminders sent).'
+ )
+ )
+)
+
+settings.register(
+ livesettings.IntegerValue(
+ EMAIL,
+ 'MAX_ACCEPT_ANSWER_REMINDERS',
+ default = 5,
+ description = _(
+ 'Max. number of reminders to send '
+ 'to accept the best answer'
+ )
+ )
+)
+
+settings.register(
+ livesettings.BooleanValue(
+ EMAIL,
'EMAIL_VALIDATION',
default=False,
hidden=True,
diff --git a/askbot/conf/login_providers.py b/askbot/conf/login_providers.py
index 0cc20a9a..b6073eea 100644
--- a/askbot/conf/login_providers.py
+++ b/askbot/conf/login_providers.py
@@ -56,11 +56,11 @@ settings.register(
livesettings.ImageValue(
LOGIN_PROVIDERS,
'WORDPRESS_SITE_ICON',
- upload_directory = django_settings.ASKBOT_FILE_UPLOAD_DIR,
- upload_url = '/' + django_settings.ASKBOT_UPLOADED_FILES_URL,
- default = '/images/logo.gif',
- description = _('Upload your icon'),
- url_resolver = skin_utils.get_media_url
+ upload_directory=django_settings.ASKBOT_FILE_UPLOAD_DIR,
+ upload_url='/' + django_settings.ASKBOT_UPLOADED_FILES_URL,
+ default='/images/logo.gif',
+ description=_('Upload your icon'),
+ url_resolver=skin_utils.get_media_url
)
)
diff --git a/askbot/const/__init__.py b/askbot/const/__init__.py
index 73c71800..764a3234 100644
--- a/askbot/const/__init__.py
+++ b/askbot/const/__init__.py
@@ -113,6 +113,7 @@ TYPE_ACTIVITY_USER_FULL_UPDATED = 17
TYPE_ACTIVITY_EMAIL_UPDATE_SENT = 18
TYPE_ACTIVITY_MENTION = 19
TYPE_ACTIVITY_UNANSWERED_REMINDER_SENT = 20
+TYPE_ACTIVITY_ACCEPT_ANSWER_REMINDER_SENT = 21
#TYPE_ACTIVITY_EDIT_QUESTION = 17
#TYPE_ACTIVITY_EDIT_ANSWER = 18
@@ -140,6 +141,10 @@ TYPE_ACTIVITY = (
TYPE_ACTIVITY_UNANSWERED_REMINDER_SENT,
_('reminder about unanswered questions sent'),
),
+ (
+ TYPE_ACTIVITY_ACCEPT_ANSWER_REMINDER_SENT,
+ _('reminder about accepting the best answer sent'),
+ ),
(TYPE_ACTIVITY_MENTION, _('mentioned in the post')),
)
@@ -291,8 +296,8 @@ MIN_REPUTATION = 1
AVATAR_STATUS_CHOICE = (
('n', _('None')),
- ('g', _('Gravatar')),
- ('a', _('Uploaded Avatar')),
+ ('g', _('Gravatar')),#only if user has real uploaded gravatar
+ ('a', _('Uploaded Avatar')),#avatar uploaded locally - with django-avatar app
)
#an exception import * because that file has only strings
diff --git a/askbot/context.py b/askbot/context.py
index 6dc38f79..f3665240 100644
--- a/askbot/context.py
+++ b/askbot/context.py
@@ -13,8 +13,9 @@ from askbot.utils import url_utils
def application_settings(request):
"""The context processor function"""
my_settings = askbot_settings.as_dict()
- my_settings['LANGUAGE_CODE'] = settings.LANGUAGE_CODE
+ my_settings['LANGUAGE_CODE'] = getattr(request, 'LANGUAGE_CODE', settings.LANGUAGE_CODE)
my_settings['ASKBOT_URL'] = settings.ASKBOT_URL
+ my_settings['ASKBOT_CSS_DEVEL'] = getattr(settings, 'ASKBOT_CSS_DEVEL', False)
my_settings['DEBUG'] = settings.DEBUG
my_settings['ASKBOT_VERSION'] = askbot.get_version()
my_settings['LOGIN_URL'] = url_utils.get_login_url()
diff --git a/askbot/deployment/__init__.py b/askbot/deployment/__init__.py
index 3f04e39d..6f7a86f6 100644
--- a/askbot/deployment/__init__.py
+++ b/askbot/deployment/__init__.py
@@ -2,8 +2,11 @@
module for deploying askbot
"""
import os.path
+import sys
+from optparse import OptionParser
from askbot.utils import console
from askbot.deployment import messages
+from askbot.deployment.messages import print_message
from askbot.deployment import path_utils
def askbot_setup():
@@ -13,91 +16,130 @@ def askbot_setup():
or gives hints on how to add askbot to an existing
Django project
"""
- #ask
- print messages.DEPLOY_PREAMBLE
-
- directory = None #directory where to put stuff
- create_new = False #create new django project or not
- where_to_deploy_msg = messages.WHERE_TO_DEPLOY
- while directory is None:
-
- directory = raw_input(where_to_deploy_msg + ' ')
-
- where_to_deploy_msg = messages.WHERE_TO_DEPLOY_QUIT
-
- directory = os.path.normpath(directory)
- directory = os.path.abspath(directory)
-
- if os.path.isfile(directory):
- print messages.CANT_INSTALL_INTO_FILE % {'path':directory}
- directory = None
- continue
-
- if path_utils.can_create_path(directory):
- if os.path.exists(directory):
- if path_utils.path_is_clean_for_django(directory):
- if path_utils.has_existing_django_project(directory):
- message = messages.SHOULD_ADD_APP_HERE % \
- {
- 'path': directory
- }
- should_add_app = console.choice_dialog(
- message,
- choices = ['yes','no'],
- invalid_phrase = messages.INVALID_INPUT
- )
- if should_add_app == 'yes':
- assert(create_new == False)
- if path_utils.dir_name_acceptable(directory):
- break
- else:
- print messages.format_msg_bad_dir_name(directory)
- directory = None
- continue
- else:
- directory = None
- continue
- else:
- assert(directory != None)
- if path_utils.dir_name_acceptable(directory):
- create_new = True
- break
- else:
- print messages.format_msg_bad_dir_name(directory)
- directory = None
- continue
- else:
- print messages.format_msg_dir_unclean_django(directory)
- directory = None
- continue
- else:
- message = messages.format_msg_create(directory)
- should_create_new = console.choice_dialog(
- message,
- choices = ['yes','no'],
- invalid_phrase = messages.INVALID_INPUT
- )
- if should_create_new == 'yes':
- if path_utils.dir_name_acceptable(directory):
- create_new = True
- break
- else:
- print messages.format_msg_bad_dir_name(directory)
- directory = None
- continue
- else:
- directory = None
- continue
- else:
- print messages.format_msg_dir_not_writable(directory)
- directory = None
- continue
+ parser = OptionParser(usage = "%prog [options]")
+
+ parser.add_option(
+ "-v", "--verbose",
+ dest = "verbosity",
+ type = "int",
+ default = 1,
+ help = "verbosity level available values 0, 1, 2."
+ )
+
+ parser.add_option(
+ "-n", "--dir-name",
+ dest = "dir_name",
+ default = None,
+ help = "Directory where you want to install."
+ )
+
+ parser.add_option(
+ "-d", "--db-name",
+ dest = "database_name",
+ default = None,
+ help = "The database name"
+ )
+
+ parser.add_option(
+ "-u", "--db-user",
+ dest = "database_user",
+ default = None,
+ help = "The database user"
+ )
+
+ parser.add_option(
+ "-p", "--db-password",
+ dest = "database_password",
+ default = None,
+ help = "the database password"
+ )
+
+ parser.add_option(
+ "--domain",
+ dest = "domain_name",
+ default = None,
+ help = "the domain name of the instance"
+ )
+
+ parser.add_option(
+ "--append-settings",
+ dest = "local_settings",
+ default = '',
+ help = "Extra settings file to append custom settings"
+ )
+
+ parser.add_option(
+ "--force",
+ dest = "force",
+ action = 'store_true',
+ help = "Force overwrite settings.py file"
+ )
+
+ try:
+ options = parser.parse_args()[0]
+ #ask
+ if options.verbosity >= 1:
+ print messages.DEPLOY_PREAMBLE
+
+ directory = path_utils.clean_directory(options.dir_name)
+ while directory is None:
+ directory = path_utils.get_install_directory(force = options.force)
+
+ deploy_askbot(directory, options)
+ except KeyboardInterrupt:
+ print "\n\nAborted."
+ sys.exit(1)
+
+
+#separated all the directory creation process to make it more useful
+
+def deploy_askbot(directory, options):
+ """function that creates django project files,
+ all the neccessary directories for askbot,
+ and the log file
+ """
help_file = path_utils.get_path_to_help_file()
- if create_new:
- path_utils.create_path(directory)
- path_utils.deploy_into(directory, new_project = True)
- print messages.HOW_TO_DEPLOY_NEW % {'help_file': help_file}
+ context = {
+ 'database_name': options.database_name,
+ 'database_password': options.database_password,
+ 'database_user': options.database_user,
+ 'domain_name': options.domain_name,
+ 'local_settings': options.local_settings,
+ }
+ if not options.force:
+ for key in context.keys():
+ if context[key] == None:
+ input_message = 'Please enter a value for %s:' \
+ % (key.replace('_', ' '))
+ new_value = raw_input(input_message)
+ context[key] = new_value
+
+ create_new_project = False
+ if os.path.exists(directory):
+ if path_utils.has_existing_django_project(directory):
+ create_new_project = bool(options.force)
+ else:
+ create_new_project = True
+ else:
+ create_new_project = True
+
+ path_utils.create_path(directory)
+
+ path_utils.deploy_into(
+ directory,
+ new_project = create_new_project,
+ verbosity = options.verbosity,
+ context = context
+ )
+
+ if create_new_project:
+ print_message(
+ messages.HOW_TO_DEPLOY_NEW % {'help_file': help_file},
+ options.verbosity
+ )
else:
- path_utils.deploy_into(directory, new_project = False)
- print messages.HOW_TO_ADD_ASKBOT_TO_DJANGO % {'help_file': help_file}
+ print_message(
+ messages.HOW_TO_ADD_ASKBOT_TO_DJANGO % {'help_file': help_file},
+ options.verbosity
+ )
diff --git a/askbot/deployment/assertions.py b/askbot/deployment/assertions.py
index 0db62b84..d8dee828 100644
--- a/askbot/deployment/assertions.py
+++ b/askbot/deployment/assertions.py
@@ -12,7 +12,8 @@ def assert_package_compatibility():
"""raises an exception if any known incompatibilities
are found
"""
- (django_major, django_minor, django_micro) = package_utils.get_django_version()
+ (django_major, django_minor, django_micro) = \
+ package_utils.get_django_version()
if django_major < 1:
raise DeploymentError('Django version < 1.0 is not supported by askbot')
diff --git a/askbot/deployment/messages.py b/askbot/deployment/messages.py
index 1569de6c..44dde979 100644
--- a/askbot/deployment/messages.py
+++ b/askbot/deployment/messages.py
@@ -9,9 +9,9 @@ Problems installing? -> please email admin@askbot.org
To CANCEL - hit Ctr-C at any time"""
-WHERE_TO_DEPLOY = 'Where to deploy (in which directory)?'
+WHERE_TO_DEPLOY = 'In which directory to deploy the forum?'
-WHERE_TO_DEPLOY_QUIT = 'Where deploy forum (directory)? (Ctrl-C to quit)'
+WHERE_TO_DEPLOY_QUIT = 'Where deploy the forum (directory)? Ctrl-C to quit.'
CANT_INSTALL_INTO_FILE = '%(path)s is a file\ncannot install there'
@@ -32,6 +32,10 @@ but %(existing_prefix)s is not writable"""
CONFIRM_DIR_CREATION = """Adding new directories:\n%(existing_prefix)s <-/%(non_existing_tail)s
Accept?"""
+CANNOT_OVERWRITE_DJANGO_PROJECT = """Directory %(directory)s
+already has a django project. If you want to overwrite
+settings.py and urls.py files, use parameter --force"""
+
INVALID_INPUT = 'Please type one of: %(opt_string)s ' \
+ '(or hit Ctrl-C to quit)'
@@ -78,7 +82,7 @@ def format_msg_dir_unclean_django(directory):
directories contains a django project
so that users don't create nested projects
"""
- parent_django_dir = path_utils.find_parent_dir_with_django(directory)
+ return path_utils.find_parent_dir_with_django(directory)
def format_msg_bad_dir_name(directory):
"""directory name must be bad - i.e. taken by other python module
@@ -89,3 +93,7 @@ def format_msg_bad_dir_name(directory):
return DIR_NAME_TAKEN_BY_ASKBOT
else:
return DIR_NAME_TAKEN_BY_PYTHON % {'dir': dir_name}
+
+def print_message(message, verbosity):
+ if verbosity >= 1:
+ print message
diff --git a/askbot/deployment/path_utils.py b/askbot/deployment/path_utils.py
index 6ad9fc99..e0704a96 100644
--- a/askbot/deployment/path_utils.py
+++ b/askbot/deployment/path_utils.py
@@ -1,5 +1,5 @@
"""utilities in addition to os.path
-that
+that
* help to test existing paths on usability for the installation
* create necessary directories
* install deployment files
@@ -11,6 +11,9 @@ import re
import glob
import shutil
import imp
+from askbot.utils import console
+from askbot.deployment.template_loader import SettingsTemplate
+
def split_at_break_point(directory):
"""splits directory path into two pieces
@@ -28,6 +31,25 @@ def split_at_break_point(directory):
tail_bits.insert(0, tail)
return head, os.path.join(*tail_bits)
+def clean_directory(directory):
+ """Returns normalized absolute path to the directory
+ regardless of whether it exists or not
+ or ``None`` - if the path is a file or if ``directory``
+ parameter is ``None``"""
+ if directory is None:
+ return None
+
+ directory = os.path.normpath(directory)
+ directory = os.path.abspath(directory)
+
+ if os.path.isfile(directory):
+ if options.verbosity >= 1 and os.path.isfile(directory):
+ print messages.CANT_INSTALL_INTO_FILE % {'path':directory}
+ sys.exit(1)
+
+ return None
+ return directory
+
def directory_is_writable(directory):
"""returns True if directory exists
@@ -47,7 +69,7 @@ def directory_is_writable(directory):
def can_create_path(directory):
- """returns True if user can write file into
+ """returns True if user can write file into
directory even if it does not exist yet
and False otherwise
"""
@@ -55,7 +77,7 @@ def can_create_path(directory):
if not os.path.isdir(directory):
return False
else:
- directory, junk = split_at_break_point(directory)
+ directory = split_at_break_point(directory)[0]
return directory_is_writable(directory)
@@ -65,8 +87,12 @@ def has_existing_django_project(directory):
"""returns True is any of the .py files
in a given directory imports anything from django
"""
- file_list = glob.glob(directory + '*.py')
+ directory = os.path.normpath(directory)
+ file_list = glob.glob(directory + os.path.sep + '*.py')
for file_name in file_list:
+ if file_name.endswith(os.path.sep + 'manage.py'):
+ #a hack allowing to install into the distro directory
+ continue
py_file = open(file_name)
for line in py_file:
if IMPORT_RE1.match(line) or IMPORT_RE2.match(line):
@@ -123,24 +149,31 @@ def get_path_to_help_file():
"""returns path to the main plain text help file"""
return os.path.join(SOURCE_DIR, 'doc', 'INSTALL')
-def deploy_into(directory, new_project = None):
+def deploy_into(directory, new_project = False, verbosity = 1, context = None):
"""will copy necessary files into the directory
"""
- assert(new_project is not None)
+ assert(isinstance(new_project, bool))
if new_project:
- copy_files = ('__init__.py', 'settings.py', 'manage.py', 'urls.py')
+ copy_files = ('__init__.py', 'manage.py', 'urls.py')
blank_files = ('__init__.py', 'manage.py')
- print 'Copying files: '
+ if verbosity >= 1:
+ print 'Copying files: '
for file_name in copy_files:
src = os.path.join(SOURCE_DIR, 'setup_templates', file_name)
if os.path.exists(os.path.join(directory, file_name)):
if file_name in blank_files:
continue
else:
- print '* %s' % file_name,
- print "- you already have one, please add contents of %s" % src
+ if file_name == 'urls.py' and new_project:
+ #overwrite urls.py
+ shutil.copy(src, directory)
+ else:
+ if verbosity >= 1:
+ print '* %s' % file_name,
+ print "- you already have one, please add contents of %s" % src
else:
- print '* %s ' % file_name
+ if verbosity >= 1:
+ print '* %s ' % file_name
shutil.copy(src, directory)
#copy log directory
src = os.path.join(SOURCE_DIR, 'setup_templates', 'log')
@@ -148,7 +181,29 @@ def deploy_into(directory, new_project = None):
create_path(log_dir)
touch(os.path.join(log_dir, 'askbot.log'))
- print ''
+ #creating settings file from template
+ if verbosity >= 1:
+ print "Creating settings file"
+ settings_contents = SettingsTemplate(context).render()
+ settings_path = os.path.join(directory, 'settings.py')
+ if os.path.exists(settings_path) and new_project == False:
+ if verbosity >= 1:
+ print "* you already have a settings file please merge the contents"
+ elif new_project == True:
+ settings_file = open(settings_path, 'w+')
+ settings_file.write(settings_contents)
+ #Grab the file!
+ if os.path.exists(context['local_settings']):
+ local_settings = open(context['local_settings'], 'r').read()
+ settings_file.write('\n')
+ settings_file.write(local_settings)
+
+ settings_file.close()
+ if verbosity >= 1:
+ print "settings file created"
+
+ if verbosity >= 1:
+ print ''
app_dir = os.path.join(directory, 'askbot')
copy_dirs = ('doc', 'cron', 'upfiles')
@@ -158,17 +213,22 @@ def deploy_into(directory, new_project = None):
dst = os.path.join(app_dir, dir_name)
if os.path.abspath(src) != os.path.abspath(dst):
if dirs_copied == 0:
- print 'copying directories: ',
- print '* ' + dir_name
+ if verbosity >= 1:
+ print 'copying directories: ',
+ if verbosity >= 1:
+ print '* ' + dir_name
if os.path.exists(dst):
if os.path.isdir(dst):
- print 'Directory %s not empty - skipped' % dst
+ if verbosity >= 1:
+ print 'Directory %s not empty - skipped' % dst
else:
- print 'File %s already exists - skipped' % dst
+ if verbosity >= 1:
+ print 'File %s already exists - skipped' % dst
continue
shutil.copytree(src, dst)
dirs_copied += 1
- print ''
+ if verbosity >= 1:
+ print ''
def dir_name_acceptable(directory):
"""True if directory is not taken by another python module"""
@@ -178,3 +238,47 @@ def dir_name_acceptable(directory):
return False
except ImportError:
return True
+
+def get_install_directory(force = False):
+ """returns a directory where a new django app/project
+ can be installed.
+ If ``force`` is ``True`` - will permit
+ using a directory with an existing django project.
+ """
+ from askbot.deployment import messages
+ where_to_deploy_msg = messages.WHERE_TO_DEPLOY_QUIT
+ directory = raw_input(where_to_deploy_msg + ' ')
+ directory = clean_directory(directory)
+
+ if directory is None:
+ return None
+
+ if can_create_path(directory) == False:
+ print messages.format_msg_dir_not_writable(directory)
+ return None
+
+ if os.path.exists(directory):
+ if path_is_clean_for_django(directory):
+ if has_existing_django_project(directory):
+ if not force:
+ print messages.CANNOT_OVERWRITE_DJANGO_PROJECT % \
+ {'directory': directory}
+ return None
+ else:
+ print messages.format_msg_dir_unclean_django(directory)
+ return None
+ elif force == False:
+ message = messages.format_msg_create(directory)
+ should_create_new = console.choice_dialog(
+ message,
+ choices = ['yes','no'],
+ invalid_phrase = messages.INVALID_INPUT
+ )
+ if should_create_new == 'no':
+ return None
+
+ if not dir_name_acceptable(directory):
+ print messages.format_msg_bad_dir_name(directory)
+ return None
+
+ return directory
diff --git a/askbot/deployment/template_loader.py b/askbot/deployment/template_loader.py
new file mode 100644
index 00000000..fe7c11e6
--- /dev/null
+++ b/askbot/deployment/template_loader.py
@@ -0,0 +1,13 @@
+import os
+import pystache
+
+SOURCE_DIR = os.path.dirname(os.path.dirname(__file__))
+
+class SettingsTemplate(pystache.View):
+ '''Class for settings'''
+
+ template_path = os.path.join(SOURCE_DIR, 'setup_templates')
+ template_name = "settings.py"
+
+ def __init__(self, context, **kwargs):
+ super(SettingsTemplate, self).__init__(context=context, **kwargs)
diff --git a/askbot/deps/django_authopenid/views.py b/askbot/deps/django_authopenid/views.py
index 5a81f702..ac406f1d 100644
--- a/askbot/deps/django_authopenid/views.py
+++ b/askbot/deps/django_authopenid/views.py
@@ -289,7 +289,13 @@ def signin(request):
on_failure = signin_failure
email_feeds_form = askbot_forms.SimpleEmailSubscribeForm()
- next_url = get_next_url(request)
+ #we need a special priority on where to redirect on successful login
+ #here:
+ #1) url parameter "next" - if explicitly set
+ #2) url from django setting LOGIN_REDIRECT_URL
+ #3) home page of the forum
+ login_redirect_url = getattr(settings, 'LOGIN_REDIRECT_URL', None)
+ next_url = get_next_url(request, default = login_redirect_url)
logging.debug('next url is %s' % next_url)
if askbot_settings.ALLOW_ADD_REMOVE_LOGIN_METHODS == False \
diff --git a/askbot/doc/source/changelog.rst b/askbot/doc/source/changelog.rst
index 0c05deb2..0ba88155 100644
--- a/askbot/doc/source/changelog.rst
+++ b/askbot/doc/source/changelog.rst
@@ -3,9 +3,24 @@ Changes in Askbot
Development version (not yet published)
---------------------------------------
+* Context-sensitive RSS url (`Dejan Noveski <http://www.atomidata.com/>`_)
+* Implemented new version of skin (Byron Corrales)
* Show unused vote count (Tomasz Zielinski)
* Categorized live settings (Evgeny)
+* Merge users management command (Daniel Mican)
+* Added management command ``send_accept_answer_reminders`` (Evgeny)
+* Improved the ``askbot-setup`` script (Adolfo, Evgeny)
+* Merge users management command (Daniel Mican)
* Anonymous caching of the question page (Vlad Bokov)
+* Fixed sharing button bug, css fixes for new template (Alexander Werner)
+* Added ASKBOT_TRANSLATE_URL setting for url localization(Alexander Werner)
+* Changed javascript translation model, moved from jqueryi18n to django (Rosandra Cuello Suñol)
+* Private forum mode (Vlad Bokov)
+* Improved text search query in Postgresql (Alexander Werner)
+* Take LANGUAGE_CODE from request (Alexander Werner)
+* Added support for LOGIN_REDIRECT_URL to the login app (hjwp, Evgeny)
+* Updated Italian localization (Luca Ferroni)
+* Added Catalan localization (Jordi Bofill)
0.7.26 (Current Version)
------------------------
diff --git a/askbot/doc/source/contributors.rst b/askbot/doc/source/contributors.rst
index 3e62af26..30656c60 100644
--- a/askbot/doc/source/contributors.rst
+++ b/askbot/doc/source/contributors.rst
@@ -18,6 +18,8 @@ Programming and documentation
* `Jishnu <http://thecodecracker.com/>`_
* `Hrishi <https://github.com/stultus>`_
* Andrei Mamoutkine
+* `Daniel Mican <http://www.crunchbase.com/person/daniel-mican>`_
+* `Dejan Noveski <http://www.atomidata.com/>`_
* `Ramiro Morales <http://rmorales.com.ar/>`_ (with Machinalis)
* Vladimir Bokov
* `NoahY <https://github.com/NoahY>`_
@@ -28,6 +30,9 @@ Programming and documentation
* `Tomasz Zielinski <http://pyconsultant.eu/>`_
* `Tomasz Szynalski <http://antimoon.com>`_
* `Raghu Udiyar <http://raags.tumblr.com/>`_
+* `Alexander Werner <https://twitter.com/#!/bundeswerner>`_
+* Rosandra Cuello Suñol
+* `hjwp <https://github.com/hjwp>`_
Translations
------------
@@ -40,5 +45,6 @@ Translations
* Pekka Gaiser - German
* Pekka Järvinen - Finnish
* Adi Robian - Romanian
-* Dario Ghilardi, Federico Poloni - Italian
+* Dario Ghilardi, Federico Poloni, `Luca Ferroni <http://www.linkedin.com/in/lucaferroni>`_ - Italian
+* `Jordi Bofill <https://github.com/jbofill>`_ - Catalan
diff --git a/askbot/doc/source/initial-configuration.rst b/askbot/doc/source/initial-configuration.rst
index 0cd2c033..340324a1 100644
--- a/askbot/doc/source/initial-configuration.rst
+++ b/askbot/doc/source/initial-configuration.rst
@@ -29,10 +29,38 @@ There may be an error message; ignore it.
`askbot-setup` adds those files to the directory you select (and some more things specific to Askbot).
+.. versionadded:: 0.7.24
+ `askbot-setup` also have command line arguments such as folder name(name), database name, database password and database user also added verbosity support.
+ You can also specify a local settings file to append it's contents to the deployment settings file.
+
+ +----------------------------------+------------------------------------------------------------+
+ | Parameter | Purpose |
+ +==================================+============================================================+
+ | -n <NAME> | Name of the instance, this is the name that the |
+ | | folder will use. |
+ +----------------------------------+------------------------------------------------------------+
+ | -d <DATABASE_NAME> | The database name that the instance will use. |
+ +----------------------------------+------------------------------------------------------------+
+ | -u <DATABASE_USER> | The database user that the instance will use. |
+ +----------------------------------+------------------------------------------------------------+
+ | -p <DATABASE_PASSWORD> | The database password for the user. |
+ +----------------------------------+------------------------------------------------------------+
+ | --domain=<DOMAIN_NAME> | Domain name for the application. |
+ +----------------------------------+------------------------------------------------------------+
+ | --append-settings=<SETTINGS_FILE>| Allows to append a setting file content to the |
+ | | settings file, the parameter is the file to use. |
+ +----------------------------------+------------------------------------------------------------+
+
+
+.. note::
+
+ `askbot-setup` command line arguments detail parameter is available when you type: askbot-setup --h.
Note that if you already have a Django site you will not want to use `askbot-setup`, because you don't want to just overwrite your existing settings.py. See below for instructions.
-Another thing you have to do if you are creating a brand new Django project is edit the file `settings.py`_. At the very minimum, you will need to provide the correct values to::
+Another thing you have to do if you are creating a brand new Django project is edit the file `settings.py`_. At the very minimum, you will need to provide the correct values to some settings.
+
+All values must be enclosed in single quotes, as shown below::
DATABASE_ENGINE = '' #e.g. 'mysql'
DATABASE_NAME = '' #name of the database you created, e.g. 'askbot'.
@@ -40,8 +68,6 @@ Another thing you have to do if you are creating a brand new Django project is e
DATABASE_PASSWORD = '' #password to the database
CSRF_COOKIE_DOMAIN = ''#e.g. 'example.com' or 'askbot.example.com' (localhost/IP address for tests)
-All values must be enclosed in single quotes, as shown above.
-
.. note::
The files settings.py_ and urls.py_ may also need to be touched up
diff --git a/askbot/doc/source/management-commands.rst b/askbot/doc/source/management-commands.rst
index 1da3fdee..d69c8673 100644
--- a/askbot/doc/source/management-commands.rst
+++ b/askbot/doc/source/management-commands.rst
@@ -29,10 +29,13 @@ The bulk of the management commands fall into this group and will probably be th
| | the `add_admin` command |
+---------------------------------+-------------------------------------------------------------+
| `add_askbot_user --user-name | Create a user account. If password is not given, an |
-| --email [--password] | unusable password will be set. |
+| --email [--password]` | unusable password will be set. |
| | The command does not create associations with |
| | any of the external login providers. |
+---------------------------------+-------------------------------------------------------------+
+| `merge_users <from_id> | Merges user accounts and all related data from one user |
+| <to_id>` | to another, the "from user" account is deleted. |
++---------------------------------+-------------------------------------------------------------+
| `dump_forum [--dump-name | Save forum contents into a file. `--dump-name` parameter is |
| some_name]` | optional |
+---------------------------------+-------------------------------------------------------------+
@@ -111,6 +114,11 @@ Any configurable options, related to these commands are accessible via "Email" s
| | of :ref:`live settings <live-settings>`, as well as |
| | an initial wait period and the recurrence delay may be set. |
+-------------------------------------+-------------------------------------------------------------+
+| `send_accept_answer_reminders` | Sends periodic reminders about accepting best answers. |
+| | This command may be disabled from the "email" section |
+| | of the live settings, as well as the appropriate delay |
+| | parameters may be set. |
++-------------------------------------+-------------------------------------------------------------+
Data repair commands
====================
diff --git a/askbot/feed.py b/askbot/feed.py
index e0c69454..7f41fd4f 100644
--- a/askbot/feed.py
+++ b/askbot/feed.py
@@ -137,11 +137,27 @@ class RssLastestQuestionsFeed(Feed):
def items(self, item):
"""get questions for the feed
"""
- return Question.objects.filter(
- deleted=False
- ).order_by(
- '-last_activity_at'
- )[:30]
+ #initial filtering
+ qs = Question.objects.filter(deleted=False)
+
+ #get search string and tags from GET
+ query = self.request.GET.get("q", None)
+ tags = self.request.GET.getlist("tags")
+
+ if query:
+ #if there's a search string, use the
+ #question search method
+ qs = qs.get_by_text_query(query)
+
+ if tags:
+ #if there are tags in GET, filter the
+ #questions additionally
+ for tag in tags:
+ qs = qs.filter(tags__name = tag)
+
+ return qs.order_by('-last_activity_at')[:30]
+
+
def main():
"""main function for use as a script
diff --git a/askbot/locale/ca/LC_MESSAGES/django.mo b/askbot/locale/ca/LC_MESSAGES/django.mo
new file mode 100644
index 00000000..187c04a8
--- /dev/null
+++ b/askbot/locale/ca/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/ca/LC_MESSAGES/django.po b/askbot/locale/ca/LC_MESSAGES/django.po
new file mode 100644
index 00000000..65de6ef9
--- /dev/null
+++ b/askbot/locale/ca/LC_MESSAGES/django.po
@@ -0,0 +1,6526 @@
+# English translation for CNPROG package.
+# Copyright (C) 2009 Gang Chen, 2010 Askbot
+# This file is distributed under the same license as the CNPROG package.
+# Evgeny Fadeev <evgeny.fadeev@gmail.com>, 2009.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-10-17 17:24-0500\n"
+"PO-Revision-Date: 2011-11-21:10:00-0100\n"
+"Last-Translator: Jordi Bofill <jordi.bofill@upc.edu>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Language: \n"
+"Plural-Forms: nplurals=2; plural=n!= 1;\n"
+
+#: exceptions.py:13
+msgid "Sorry, but anonymous visitors cannot access this function"
+msgstr "Els visitants anònims no tenen accés a aquesta funció"
+
+#: feed.py:26 feed.py:100
+msgid " - "
+msgstr ""
+
+#: feed.py:26
+msgid "Individual question feed"
+msgstr "Canal de pregunta individual"
+
+#: feed.py:100
+msgid "latest questions"
+msgstr "preguntes recents"
+
+#: forms.py:74
+msgid "select country"
+msgstr "escollir país"
+
+#: forms.py:83
+msgid "Country"
+msgstr "País"
+
+#: forms.py:91
+msgid "Country field is required"
+msgstr "Els país és necessari"
+
+#: forms.py:104 skins/default/templates/blocks/answer_edit_tips.html:43
+#: skins/default/templates/blocks/answer_edit_tips.html:47
+#: skins/default/templates/blocks/question_edit_tips.html:38
+#: skins/default/templates/blocks/question_edit_tips.html:43
+msgid "title"
+msgstr "títol"
+
+#: forms.py:105
+msgid "please enter a descriptive title for your question"
+msgstr "Introduir un títol descriptiu de la pregunta"
+
+#: forms.py:110
+msgid "title must be > 10 characters"
+msgstr "el títol ha de tenir més de 10 caràcters"
+
+#: forms.py:119
+msgid "content"
+msgstr "contingut"
+
+#: forms.py:125
+msgid "question content must be > 10 characters"
+msgstr "la pregunta ha de tenir més de 10 caràcters"
+
+#: forms.py:134 skins/default/templates/macros.html:660
+#: skins/default/templates/macros.html:672
+#: skins/default/templates/blocks/header.html:25
+msgid "tags"
+msgstr "etiquetes"
+
+#: forms.py:136
+msgid ""
+"Tags are short keywords, with no spaces within. Up to five tags can be used."
+msgstr "Les etiquetes són paraules clau curtes, sense espais. Es poden usar fins a 5 etiquetes."
+
+#: forms.py:164 skins/default/templates/question_retag.html:58
+msgid "tags are required"
+msgstr "es requereixen etiquetes"
+
+#: forms.py:173
+#, python-format
+msgid "please use %(tag_count)d tag or less"
+msgid_plural "please use %(tag_count)d tags or less"
+msgstr[0] "usar %(tag_count)d etiqueta o menys"
+msgstr[1] "usar %(tag_count)d etiquetes o menys"
+
+#: forms.py:181
+#, python-format
+msgid "At least one of the following tags is required : %(tags)s"
+msgstr "Es requereixen com a mínim una de les etiquetes següents: %(tags)s"
+
+#: forms.py:190
+#, python-format
+msgid "each tag must be shorter than %(max_chars)d character"
+msgid_plural "each tag must be shorter than %(max_chars)d characters"
+msgstr[0] "les etiquetes han de tenir menys de %(max_chars)d caràcter"
+msgstr[1] "les etiquetes han de tenir menys de %(max_chars)d caràcters"
+
+#: forms.py:198
+msgid "use-these-chars-in-tags"
+msgstr ""
+
+#: forms.py:233
+msgid "community wiki (karma is not awarded & many others can edit wiki post)"
+msgstr "wiki comunitari (no es concedeix karma; altres usuaris poden editar l'entrada)"
+
+#: forms.py:234
+msgid ""
+"if you choose community wiki option, the question and answer do not generate "
+"points and name of author will not be shown"
+msgstr "Amb l'opció de wiki comunitari la pregunta i la resposta no generen punts per l'autor i no es mostra el nom de l'autor."
+
+#: forms.py:250
+msgid "update summary:"
+msgstr "resum actualitzat:"
+
+#: forms.py:251
+msgid ""
+"enter a brief summary of your revision (e.g. fixed spelling, grammar, "
+"improved style, this field is optional)"
+msgstr "breu resum de la revisió (p.e. correcció ortogràfica, gramàtica, millora d'estil, aquest camp és opcional)"
+
+#: forms.py:327
+msgid "Enter number of points to add or subtract"
+msgstr "Introduir el nombre de punts a sumar o restar"
+
+#: forms.py:341 const/__init__.py:245
+msgid "approved"
+msgstr "aprovat"
+
+#: forms.py:342 const/__init__.py:246
+msgid "watched"
+msgstr "vist"
+
+#: forms.py:343 const/__init__.py:247
+msgid "suspended"
+msgstr "suspès"
+
+#: forms.py:344 const/__init__.py:248
+msgid "blocked"
+msgstr "bloquejat"
+
+#: forms.py:346
+msgid "administrator"
+msgstr "administrador"
+
+#: forms.py:347 const/__init__.py:244
+msgid "moderator"
+msgstr "moderador"
+
+#: forms.py:367
+msgid "Change status to"
+msgstr "Canviar estat a"
+
+#: forms.py:394
+msgid "which one?"
+msgstr "quin?"
+
+#: forms.py:415
+msgid "Cannot change own status"
+msgstr "No es pot canviar el pròpi estat"
+
+#: forms.py:421
+msgid "Cannot turn other user to moderator"
+msgstr "No es pot canviar l'altre usuari a moderador"
+
+#: forms.py:428
+msgid "Cannot change status of another moderator"
+msgstr "No es pot canviar l'estat d'un altre moderador"
+
+#: forms.py:434
+msgid "Cannot change status to admin"
+msgstr "No es pot canviar a l'estat d'administrador "
+
+#: forms.py:440
+#, python-format
+msgid ""
+"If you wish to change %(username)s's status, please make a meaningful "
+"selection."
+msgstr "Si es vol canviar l'estat de %(username)s, feu una selecció "
+"amb significat"
+
+#: forms.py:449
+msgid "Subject line"
+msgstr "Línia d'assumpte"
+
+#: forms.py:456
+msgid "Message text"
+msgstr "Text del missatge"
+
+#: forms.py:542
+msgid "Your name:"
+msgstr "El seu nom:"
+
+#: forms.py:543
+msgid "Email (not shared with anyone):"
+msgstr "Correu electrònic (no es comparteix amb ningú)"
+
+#: forms.py:544
+msgid "Your message:"
+msgstr "El vostre missatge:"
+
+#: forms.py:581
+msgid "ask anonymously"
+msgstr "preguntar anònimament"
+
+#: forms.py:583
+msgid "Check if you do not want to reveal your name when asking this question"
+msgstr "Marcar si no voleu mostrar el vostre nom al fer aquesta pregunta"
+
+#: forms.py:743
+msgid ""
+"You have asked this question anonymously, if you decide to reveal your "
+"identity, please check this box."
+msgstr "Heu fet aquesta pregunta anònimament, si voleu mostrar la vostra "
+"identitat marqueu aquesta opció."
+
+#: forms.py:747
+msgid "reveal identity"
+msgstr "mostrar identitat"
+
+#: forms.py:805
+msgid ""
+"Sorry, only owner of the anonymous question can reveal his or her identity, "
+"please uncheck the box"
+msgstr "Només l'autor de la pregunta anònima pot mostrar la seva identitat. Desmarqueu l'opció"
+
+#: forms.py:818
+msgid ""
+"Sorry, apparently rules have just changed - it is no longer possible to ask "
+"anonymously. Please either check the \"reveal identity\" box or reload this "
+"page and try editing the question again."
+msgstr ""
+"Sembla què les regles han canviat; ara no es poden fer preguntes anònimament."
+"Si us plau, marqueu «mostrar identitat» o tornareu a carregar aquesta pàgina i "
+"editeu de nou la pregunta"
+#: forms.py:856
+msgid "this email will be linked to gravatar"
+msgstr "aquest correu electrònic s'enllaçarà al Gravatar"
+
+#: forms.py:863
+msgid "Real name"
+msgstr "Nom real"
+
+#: forms.py:870
+msgid "Website"
+msgstr "Lloc web"
+
+#: forms.py:877
+msgid "City"
+msgstr "Ciutat"
+
+#: forms.py:886
+msgid "Show country"
+msgstr "Mostrar país"
+
+#: forms.py:891
+msgid "Date of birth"
+msgstr "Data de naixament"
+
+#: forms.py:892
+msgid "will not be shown, used to calculate age, format: YYYY-MM-DD"
+msgstr "no es mostrarà, s'usa per calcular l'edat, format: AAAA-MM-DD"
+
+#: forms.py:898
+msgid "Profile"
+msgstr "Perfil"
+
+#: forms.py:907
+msgid "Screen name"
+msgstr "Nom a mostrar"
+
+#: forms.py:938 forms.py:939
+msgid "this email has already been registered, please use another one"
+msgstr "aquesta adreça de correu ja està registrada, useu una altra"
+
+#: forms.py:946
+msgid "Choose email tag filter"
+msgstr "Escollir etiqueta filtre per el correu electrònic"
+
+#: forms.py:993
+msgid "Asked by me"
+msgstr "Preguntat per mi"
+
+#: forms.py:996
+msgid "Answered by me"
+msgstr "Respost per mi"
+
+#: forms.py:999
+msgid "Individually selected"
+msgstr "Seleccionat individualment"
+
+#: forms.py:1002
+msgid "Entire forum (tag filtered)"
+msgstr "Forum senser (filtrar per etiqueta)"
+
+#: forms.py:1006
+msgid "Comments and posts mentioning me"
+msgstr "Comentaris i entrades us mencionen"
+
+#: forms.py:1085
+msgid "okay, let's try!"
+msgstr "d'acord, provem-ho!"
+
+#: forms.py:1086
+msgid "no community email please, thanks"
+msgstr "no correus electrònics de la comunitat"
+
+#: forms.py:1090
+msgid "please choose one of the options above"
+msgstr "escollir una de les opcions anteriors"
+
+#: urls.py:53
+msgid "about/"
+msgstr "sobre/"
+
+#: urls.py:54
+msgid "faq/"
+msgstr ""
+
+#: urls.py:55
+msgid "privacy/"
+msgstr "privacitat"
+
+#: urls.py:57 urls.py:62
+msgid "answers/"
+msgstr "respostes"
+
+#: urls.py:57 urls.py:83 urls.py:203
+msgid "edit/"
+msgstr "editar"
+
+#: urls.py:62 urls.py:113
+msgid "revisions/"
+msgstr "revisions/"
+
+#: urls.py:68 urls.py:78 urls.py:83 urls.py:88 urls.py:93 urls.py:98
+#: urls.py:103 urls.py:108 urls.py:113 urls.py:290
+#: skins/default/templates/question.html:508
+msgid "questions/"
+msgstr "preguntes/"
+
+#: urls.py:78
+msgid "ask/"
+msgstr "preguntar/"
+
+#: urls.py:88
+msgid "retag/"
+msgstr "reetiquetar/"
+
+#: urls.py:93
+msgid "close/"
+msgstr "tancar/"
+
+#: urls.py:98
+msgid "reopen/"
+msgstr "reobrir/"
+
+#: urls.py:103
+msgid "answer/"
+msgstr "resposta/"
+
+#: urls.py:108 skins/default/templates/question.html:508
+msgid "vote/"
+msgstr "vot/"
+
+#: urls.py:149
+msgid "tags/"
+msgstr "etiquetes/"
+
+#: urls.py:192
+msgid "subscribe-for-tags/"
+msgstr "subscriure-per-etiquetes"
+
+#: urls.py:197 urls.py:203 urls.py:209 urls.py:217
+#: skins/default/templates/main_page/javascript.html:38
+msgid "users/"
+msgstr "usuaris/"
+
+#: urls.py:210
+msgid "subscriptions/"
+msgstr "subscripcions/"
+
+#: urls.py:222
+msgid "users/update_has_custom_avatar/"
+msgstr "usuaris/actualitzacio_te_avatar_personalitzat/"
+
+#: urls.py:227 urls.py:232
+msgid "badges/"
+msgstr "insignies/"
+
+#: urls.py:237
+msgid "messages/"
+msgstr "missatges/"
+
+#: urls.py:237
+msgid "markread/"
+msgstr "marcarllegit/"
+
+#: urls.py:253
+msgid "upload/"
+msgstr "penjar/"
+
+#: urls.py:254
+msgid "feedback/"
+msgstr "comentaris/"
+
+#: urls.py:296 skins/default/templates/question.html:506
+#: skins/default/templates/main_page/javascript.html:37
+msgid "question/"
+msgstr "pregunta/"
+
+#: urls.py:303 setup_templates/settings.py:203
+#: skins/default/templates/authopenid/providers_javascript.html:7
+msgid "account/"
+msgstr "compte/"
+
+#: conf/badges.py:12
+msgid "Badge settings"
+msgstr "Configuració de les insígnies"
+
+#: conf/badges.py:21
+msgid "Disciplined: minimum upvotes for deleted post"
+msgstr "Disciplinat: mínim vots positius per entrada esborrada"
+
+#: conf/badges.py:30
+msgid "Peer Pressure: minimum downvotes for deleted post"
+msgstr "Pressió Companys: mínim vots negatius per a l'entrada eliminada"
+
+#: conf/badges.py:39
+msgid "Teacher: minimum upvotes for the answer"
+msgstr "Mestre: mínim vots positius per la resposta"
+
+#: conf/badges.py:48
+msgid "Nice Answer: minimum upvotes for the answer"
+msgstr ""
+
+#: conf/badges.py:57
+msgid "Good Answer: minimum upvotes for the answer"
+msgstr ""
+
+#: conf/badges.py:66
+msgid "Great Answer: minimum upvotes for the answer"
+msgstr ""
+
+#: conf/badges.py:75
+msgid "Nice Question: minimum upvotes for the question"
+msgstr ""
+
+#: conf/badges.py:84
+msgid "Good Question: minimum upvotes for the question"
+msgstr ""
+
+#: conf/badges.py:93
+msgid "Great Question: minimum upvotes for the question"
+msgstr ""
+
+#: conf/badges.py:102
+msgid "Popular Question: minimum views"
+msgstr ""
+
+#: conf/badges.py:111
+msgid "Notable Question: minimum views"
+msgstr ""
+
+#: conf/badges.py:120
+msgid "Famous Question: minimum views"
+msgstr ""
+
+#: conf/badges.py:129
+msgid "Self-Learner: minimum answer upvotes"
+msgstr ""
+
+#: conf/badges.py:138
+msgid "Civic Duty: minimum votes"
+msgstr ""
+
+#: conf/badges.py:147
+msgid "Enlightened Duty: minimum upvotes"
+msgstr ""
+
+#: conf/badges.py:156
+msgid "Guru: minimum upvotes"
+msgstr ""
+
+#: conf/badges.py:165
+msgid "Necromancer: minimum upvotes"
+msgstr ""
+
+#: conf/badges.py:174
+msgid "Necromancer: minimum delay in days"
+msgstr ""
+
+#: conf/badges.py:183
+msgid "Associate Editor: minimum number of edits"
+msgstr ""
+
+#: conf/badges.py:192
+msgid "Favorite Question: minimum stars"
+msgstr ""
+
+#: conf/badges.py:201
+msgid "Stellar Question: minimum stars"
+msgstr ""
+
+#: conf/badges.py:210
+msgid "Commentator: minimum comments"
+msgstr ""
+
+#: conf/badges.py:219
+msgid "Taxonomist: minimum tag use count"
+msgstr ""
+
+#: conf/badges.py:228
+msgid "Enthusiast: minimum days"
+msgstr ""
+
+#: conf/email.py:14
+msgid "Email and email alert settings"
+msgstr "Configuració del correu electrònic i alertes per correu electrònic"
+
+#: conf/email.py:22
+msgid "Prefix for the email subject line"
+msgstr "Prefix de assumpte del correu electrònic "
+
+#: conf/email.py:24
+msgid ""
+"This setting takes default from the django settingEMAIL_SUBJECT_PREFIX. A "
+"value entered here will overridethe default."
+msgstr ""
+
+#: conf/email.py:36
+msgid "Maximum number of news entries in an email alert"
+msgstr "Màxim nombre de missatges en un avís per correu electrònic"
+
+#: conf/email.py:64
+msgid "Default notification frequency all questions"
+msgstr "Freqüència predeterminada de notificació per a totes les preguntes"
+
+#: conf/email.py:66
+msgid "Option to define frequency of emailed updates for: all questions."
+msgstr "Opció per definir la freqüència de les actualitzacions per correu de: totes les preguntes."
+
+#: conf/email.py:78
+msgid "Default notification frequency questions asked by the user"
+msgstr "Freqüència predeterminada de notificació de preguntes fets per l'usuari"
+
+#: conf/email.py:80
+msgid ""
+"Option to define frequency of emailed updates for: Question asked by the "
+"user."
+msgstr "Opció per definir la freqüència de les actualitzacions per correu de: Preguntes fetes per l'usuari"
+
+#: conf/email.py:92
+msgid "Default notification frequency questions answered by the user"
+msgstr "Freqüència predeterminada de notificació de respostes fetes per l'usuari"
+
+#: conf/email.py:94
+msgid ""
+"Option to define frequency of emailed updates for: Question answered by the "
+"user."
+msgstr "Opció per definir la freqüència de les actualitzacions per correu de: Respostes fetes per l'usuari"
+
+#: conf/email.py:106
+msgid ""
+"Default notification frequency questions individually "
+"selected by the user"
+msgstr ""
+
+#: conf/email.py:109
+msgid ""
+"Option to define frequency of emailed updates for: Question individually "
+"selected by the user."
+msgstr ""
+
+#: conf/email.py:121
+msgid ""
+"Default notification frequency for mentions and "
+"comments"
+msgstr ""
+
+#: conf/email.py:124
+msgid ""
+"Option to define frequency of emailed updates for: Mentions and comments."
+msgstr ""
+
+#: conf/email.py:135
+msgid "Send periodic reminders about unanswered questions"
+msgstr ""
+
+#: conf/email.py:137
+msgid ""
+"NOTE: in order to use this feature, it is necessary to run the management "
+"command \"send_unanswered_question_reminders\" (for example, via a cron job "
+"- with an appropriate frequency) and an IMAP server with a dedicated inbox "
+"must be configured "
+msgstr ""
+
+#: conf/email.py:151
+msgid "Days before starting to send reminders about unanswered questions"
+msgstr ""
+
+#: conf/email.py:162
+msgid ""
+"How often to send unanswered question reminders (in days between the "
+"reminders sent)."
+msgstr ""
+
+#: conf/email.py:174
+msgid "Max. number of reminders to send about unanswered questions"
+msgstr ""
+
+#: conf/email.py:186
+msgid "Require email verification before allowing to post"
+msgstr ""
+
+#: conf/email.py:187
+msgid ""
+"Active email verification is done by sending a verification key in email"
+msgstr ""
+
+#: conf/email.py:196
+msgid "Allow only one account per email address"
+msgstr ""
+
+#: conf/email.py:205
+msgid "Fake email for anonymous user"
+msgstr ""
+
+#: conf/email.py:206
+msgid "Use this setting to control gravatar for email-less user"
+msgstr ""
+
+#: conf/email.py:215
+#, fuzzy
+msgid "Allow posting questions by email"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: conf/email.py:217
+msgid ""
+"Before enabling this setting - please fill out IMAP settings in the settings."
+"py file"
+msgstr ""
+
+#: conf/email.py:228
+msgid "Replace space in emailed tags with dash"
+msgstr ""
+
+#: conf/email.py:230
+msgid ""
+"This setting applies to tags written in the subject line of questions asked "
+"by email"
+msgstr ""
+
+#: conf/external_keys.py:10
+msgid "Keys to connect the site with external services like Facebook, etc."
+msgstr ""
+
+#: conf/external_keys.py:18
+msgid "Google site verification key"
+msgstr ""
+
+#: conf/external_keys.py:20
+#, python-format
+msgid ""
+"This key helps google index your site please obtain is at <a href=\"%(url)s?"
+"hl=%(lang)s\">google webmasters tools site</a>"
+msgstr ""
+
+#: conf/external_keys.py:35
+msgid "Google Analytics key"
+msgstr ""
+
+#: conf/external_keys.py:37
+#, python-format
+msgid ""
+"Obtain is at <a href=\"%(url)s\">Google Analytics</a> site, if you wish to "
+"use Google Analytics to monitor your site"
+msgstr ""
+
+#: conf/external_keys.py:50
+msgid "Enable recaptcha (keys below are required)"
+msgstr ""
+
+#: conf/external_keys.py:59
+msgid "Recaptcha public key"
+msgstr ""
+
+#: conf/external_keys.py:67
+msgid "Recaptcha private key"
+msgstr ""
+
+#: conf/external_keys.py:69
+#, python-format
+msgid ""
+"Recaptcha is a tool that helps distinguish real people from annoying spam "
+"robots. Please get this and a public key at the <a href=\"%(url)s\">%(url)s</"
+"a>"
+msgstr ""
+
+#: conf/external_keys.py:81
+msgid "Facebook public API key"
+msgstr ""
+
+#: conf/external_keys.py:83
+#, python-format
+msgid ""
+"Facebook API key and Facebook secret allow to use Facebook Connect login "
+"method at your site. Please obtain these keys at <a href=\"%(url)s"
+"\">facebook create app</a> site"
+msgstr ""
+
+#: conf/external_keys.py:96
+msgid "Facebook secret key"
+msgstr ""
+
+#: conf/external_keys.py:104
+msgid "Twitter consumer key"
+msgstr ""
+
+#: conf/external_keys.py:106
+#, python-format
+msgid ""
+"Please register your forum at <a href=\"%(url)s\">twitter applications site</"
+"a>"
+msgstr ""
+
+#: conf/external_keys.py:117
+msgid "Twitter consumer secret"
+msgstr ""
+
+#: conf/external_keys.py:125
+msgid "LinkedIn consumer key"
+msgstr ""
+
+#: conf/external_keys.py:127
+#, python-format
+msgid ""
+"Please register your forum at <a href=\"%(url)s\">LinkedIn developer site</a>"
+msgstr ""
+
+#: conf/external_keys.py:138
+msgid "LinkedIn consumer secret"
+msgstr ""
+
+#: conf/external_keys.py:146
+msgid "ident.ca consumer key"
+msgstr ""
+
+#: conf/external_keys.py:148
+#, python-format
+msgid ""
+"Please register your forum at <a href=\"%(url)s\">Identi.ca applications "
+"site</a>"
+msgstr ""
+
+#: conf/external_keys.py:159
+msgid "ident.ca consumer secret"
+msgstr ""
+
+#: conf/external_keys.py:167
+msgid "Use LDAP authentication for the password login"
+msgstr ""
+
+#: conf/external_keys.py:176
+msgid "LDAP service provider name"
+msgstr ""
+
+#: conf/external_keys.py:184
+msgid "URL for the LDAP service"
+msgstr ""
+
+#: conf/external_keys.py:192
+msgid "Explain how to change LDAP password"
+msgstr ""
+
+#: conf/flatpages.py:10
+msgid "Flatpages - about, privacy policy, etc."
+msgstr ""
+
+#: conf/flatpages.py:17
+msgid "Text of the Q&A forum About page (html format)"
+msgstr ""
+
+#: conf/flatpages.py:20
+msgid ""
+"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
+"the \"about\" page to check your input."
+msgstr ""
+
+#: conf/flatpages.py:30
+msgid "Text of the Q&A forum FAQ page (html format)"
+msgstr ""
+
+#: conf/flatpages.py:33
+msgid ""
+"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
+"the \"faq\" page to check your input."
+msgstr ""
+
+#: conf/flatpages.py:44
+msgid "Text of the Q&A forum Privacy Policy (html format)"
+msgstr ""
+
+#: conf/flatpages.py:47
+msgid ""
+"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
+"the \"privacy\" page to check your input."
+msgstr ""
+
+#: conf/forum_data_rules.py:11
+msgid "Data entry and display"
+msgstr ""
+
+#: conf/forum_data_rules.py:20
+#, python-format
+msgid ""
+"Enable embedding videos. <em>Note: please read <a href=\"%(url)s>read this</"
+"a> first.</em>"
+msgstr ""
+
+#: conf/forum_data_rules.py:31
+msgid "Check to enable community wiki feature"
+msgstr ""
+
+#: conf/forum_data_rules.py:40
+msgid "Allow asking questions anonymously"
+msgstr ""
+
+#: conf/forum_data_rules.py:42
+msgid ""
+"Users do not accrue reputation for anonymous questions and their identity is "
+"not revealed until they change their mind"
+msgstr ""
+
+#: conf/forum_data_rules.py:54
+#, fuzzy
+msgid "Allow posting before logging in"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: conf/forum_data_rules.py:56
+msgid ""
+"Check if you want to allow users start posting questions or answers before "
+"logging in. Enabling this may require adjustments in the user login system "
+"to check for pending posts every time the user logs in. The builtin Askbot "
+"login system supports this feature."
+msgstr ""
+
+#: conf/forum_data_rules.py:71
+#, fuzzy
+msgid "Allow swapping answer with question"
+msgstr "Post Your Answer"
+
+#: conf/forum_data_rules.py:73
+msgid ""
+"This setting will help import data from other forums such as zendesk, when "
+"automatic data import fails to detect the original question correctly."
+msgstr ""
+
+#: conf/forum_data_rules.py:85
+msgid "Maximum length of tag (number of characters)"
+msgstr ""
+
+#: conf/forum_data_rules.py:93
+msgid "Mandatory tags"
+msgstr ""
+
+#: conf/forum_data_rules.py:96
+msgid ""
+"At least one of these tags will be required for any new or newly edited "
+"question. A mandatory tag may be wildcard, if the wildcard tags are active."
+msgstr ""
+
+#: conf/forum_data_rules.py:108
+msgid "Force lowercase the tags"
+msgstr ""
+
+#: conf/forum_data_rules.py:110
+msgid ""
+"Attention: after checking this, please back up the database, and run a "
+"management command: <code>python manage.py fix_question_tags</code> to "
+"globally rename the tags"
+msgstr ""
+
+#: conf/forum_data_rules.py:124
+msgid "Format of tag list"
+msgstr ""
+
+#: conf/forum_data_rules.py:126
+msgid ""
+"Select the format to show tags in, either as a simple list, or as a tag cloud"
+msgstr ""
+
+#: conf/forum_data_rules.py:138
+#, fuzzy
+msgid "Use wildcard tags"
+msgstr "Tags"
+
+#: conf/forum_data_rules.py:140
+msgid ""
+"Wildcard tags can be used to follow or ignore many tags at once, a valid "
+"wildcard tag has a single wildcard at the very end"
+msgstr ""
+
+#: conf/forum_data_rules.py:153
+msgid "Default max number of comments to display under posts"
+msgstr ""
+
+#: conf/forum_data_rules.py:164
+#, python-format
+msgid "Maximum comment length, must be < %(max_len)s"
+msgstr ""
+
+#: conf/forum_data_rules.py:174
+msgid "Limit time to edit comments"
+msgstr ""
+
+#: conf/forum_data_rules.py:176
+msgid "If unchecked, there will be no time limit to edit the comments"
+msgstr ""
+
+#: conf/forum_data_rules.py:187
+msgid "Minutes allowed to edit a comment"
+msgstr ""
+
+#: conf/forum_data_rules.py:188
+msgid "To enable this setting, check the previous one"
+msgstr ""
+
+#: conf/forum_data_rules.py:197
+msgid "Save comment by pressing <Enter> key"
+msgstr ""
+
+#: conf/forum_data_rules.py:206
+msgid "Minimum length of search term for Ajax search"
+msgstr ""
+
+#: conf/forum_data_rules.py:207
+msgid "Must match the corresponding database backend setting"
+msgstr ""
+
+#: conf/forum_data_rules.py:216
+msgid "Do not make text query sticky in search"
+msgstr ""
+
+#: conf/forum_data_rules.py:218
+msgid ""
+"Check to disable the \"sticky\" behavior of the search query. This may be "
+"useful if you want to move the search bar away from the default position or "
+"do not like the default sticky behavior of the text search query."
+msgstr ""
+
+#: conf/forum_data_rules.py:231
+msgid "Maximum number of tags per question"
+msgstr ""
+
+#: conf/forum_data_rules.py:243
+msgid "Number of questions to list by default"
+msgstr ""
+
+#: conf/forum_data_rules.py:253
+msgid "What should \"unanswered question\" mean?"
+msgstr ""
+
+#: conf/license.py:12
+msgid "License settings"
+msgstr ""
+
+#: conf/license.py:19
+msgid "Show license clause in the site footer"
+msgstr ""
+
+#: conf/license.py:28
+msgid "Short name for the license"
+msgstr ""
+
+#: conf/license.py:37
+msgid "Full name of the license"
+msgstr ""
+
+#: conf/license.py:38
+msgid "Creative Commons Attribution Share Alike 3.0"
+msgstr ""
+
+#: conf/license.py:46
+msgid "Add link to the license page"
+msgstr ""
+
+#: conf/license.py:55
+msgid "License homepage"
+msgstr ""
+
+#: conf/license.py:57
+msgid "URL of the official page with all the license legal clauses"
+msgstr ""
+
+#: conf/license.py:67
+msgid "Use license logo"
+msgstr ""
+
+#: conf/license.py:76
+msgid "License logo image"
+msgstr ""
+
+#: conf/login_providers.py:12
+msgid "Login provider setings"
+msgstr ""
+
+#: conf/login_providers.py:20
+msgid ""
+"Show alternative login provider buttons on the password \"Sign Up\" page"
+msgstr ""
+
+#: conf/login_providers.py:29
+msgid "Always display local login form and hide \"Askbot\" button."
+msgstr ""
+
+#: conf/login_providers.py:38
+msgid "Activate to allow login with self-hosted wordpress site"
+msgstr ""
+
+#: conf/login_providers.py:39
+msgid ""
+"to activate this feature you must fill out the wordpress xml-rpc setting "
+"bellow"
+msgstr ""
+
+#: conf/login_providers.py:48
+msgid ""
+"Fill it with the wordpress url to the xml-rpc, normally http://mysite.com/"
+"xmlrpc.php"
+msgstr ""
+
+#: conf/login_providers.py:49
+msgid ""
+"To enable, go to Settings->Writing->Remote Publishing and check the box for "
+"XML-RPC"
+msgstr ""
+
+#: conf/login_providers.py:60
+msgid "Upload your icon"
+msgstr ""
+
+#: conf/login_providers.py:90
+#, python-format
+msgid "Activate %(provider)s login"
+msgstr ""
+
+#: conf/login_providers.py:95
+#, python-format
+msgid ""
+"Note: to really enable %(provider)s login some additional parameters will "
+"need to be set in the \"External keys\" section"
+msgstr ""
+
+#: conf/markup.py:14
+msgid "Markup formatting"
+msgstr ""
+
+#: conf/markup.py:39
+msgid "Enable code-friendly Markdown"
+msgstr ""
+
+#: conf/markup.py:41
+msgid ""
+"If checked, underscore characters will not trigger italic or bold formatting "
+"- bold and italic text can still be marked up with asterisks. Note that "
+"\"MathJax support\" implicitly turns this feature on, because underscores "
+"are heavily used in LaTeX input."
+msgstr ""
+
+#: conf/markup.py:56
+msgid "Mathjax support (rendering of LaTeX)"
+msgstr ""
+
+#: conf/markup.py:58
+#, python-format
+msgid ""
+"If you enable this feature, <a href=\"%(url)s\">mathjax</a> must be "
+"installed on your server in its own directory."
+msgstr ""
+
+#: conf/markup.py:72
+msgid "Base url of MathJax deployment"
+msgstr ""
+
+#: conf/markup.py:74
+msgid ""
+"Note - <strong>MathJax is not included with askbot</strong> - you should "
+"deploy it yourself, preferably at a separate domain and enter url pointing "
+"to the \"mathjax\" directory (for example: http://mysite.com/mathjax)"
+msgstr ""
+
+#: conf/markup.py:89
+msgid "Enable autolinking with specific patterns"
+msgstr ""
+
+#: conf/markup.py:91
+msgid ""
+"If you enable this feature, the application will be able to detect patterns "
+"and auto link to URLs"
+msgstr ""
+
+#: conf/markup.py:104
+msgid "Regexes to detect the link patterns"
+msgstr ""
+
+#: conf/markup.py:106
+msgid ""
+"Enter valid regular expressions for the patters, one per line. For example "
+"to detect a bug pattern like #bug123, use the following regex: #bug(\\d+). "
+"The numbers captured by the pattern in the parentheses will be transferred "
+"to the link url template. Please look up more information about regular "
+"expressions elsewhere."
+msgstr ""
+
+#: conf/markup.py:125
+msgid "URLs for autolinking"
+msgstr ""
+
+#: conf/markup.py:127
+msgid ""
+"Here, please enter url templates for the patterns entered in the previous "
+"setting, also one entry per line. <strong>Make sure that number of lines in "
+"this setting and the previous one are the same</strong> For example template "
+"https://bugzilla.redhat.com/show_bug.cgi?id=\\1 together with the pattern "
+"shown above and the entry in the post #123 will produce link to the bug 123 "
+"in the redhat bug tracker."
+msgstr ""
+
+#: conf/minimum_reputation.py:11
+msgid "Minimum reputation required to perform actions"
+msgstr ""
+
+#: conf/minimum_reputation.py:20
+msgid "Upvote"
+msgstr ""
+
+#: conf/minimum_reputation.py:29
+msgid "Downvote"
+msgstr ""
+
+#: conf/minimum_reputation.py:38
+#, fuzzy
+msgid "Answer own question immediately"
+msgstr "Post Your Answer"
+
+#: conf/minimum_reputation.py:47
+msgid "Accept own answer"
+msgstr ""
+
+#: conf/minimum_reputation.py:56
+msgid "Flag offensive"
+msgstr ""
+
+#: conf/minimum_reputation.py:65
+msgid "Leave comments"
+msgstr ""
+
+#: conf/minimum_reputation.py:74
+msgid "Delete comments posted by others"
+msgstr ""
+
+#: conf/minimum_reputation.py:83
+msgid "Delete questions and answers posted by others"
+msgstr ""
+
+#: conf/minimum_reputation.py:92
+msgid "Upload files"
+msgstr ""
+
+#: conf/minimum_reputation.py:101
+msgid "Close own questions"
+msgstr ""
+
+#: conf/minimum_reputation.py:110
+msgid "Retag questions posted by other people"
+msgstr ""
+
+#: conf/minimum_reputation.py:119
+msgid "Reopen own questions"
+msgstr ""
+
+#: conf/minimum_reputation.py:128
+msgid "Edit community wiki posts"
+msgstr ""
+
+#: conf/minimum_reputation.py:137
+msgid "Edit posts authored by other people"
+msgstr ""
+
+#: conf/minimum_reputation.py:146
+msgid "View offensive flags"
+msgstr ""
+
+#: conf/minimum_reputation.py:155
+msgid "Close questions asked by others"
+msgstr ""
+
+#: conf/minimum_reputation.py:164
+msgid "Lock posts"
+msgstr ""
+
+#: conf/minimum_reputation.py:173
+msgid "Remove rel=nofollow from own homepage"
+msgstr ""
+
+#: conf/minimum_reputation.py:175
+msgid ""
+"When a search engine crawler will see a rel=nofollow attribute on a link - "
+"the link will not count towards the rank of the users personal site."
+msgstr ""
+
+#: conf/reputation_changes.py:12
+msgid "Reputation loss and gain rules"
+msgstr ""
+
+#: conf/reputation_changes.py:21
+msgid "Maximum daily reputation gain per user"
+msgstr ""
+
+#: conf/reputation_changes.py:30
+msgid "Gain for receiving an upvote"
+msgstr ""
+
+#: conf/reputation_changes.py:39
+msgid "Gain for the author of accepted answer"
+msgstr ""
+
+#: conf/reputation_changes.py:48
+msgid "Gain for accepting best answer"
+msgstr ""
+
+#: conf/reputation_changes.py:57
+msgid "Gain for post owner on canceled downvote"
+msgstr ""
+
+#: conf/reputation_changes.py:66
+msgid "Gain for voter on canceling downvote"
+msgstr ""
+
+#: conf/reputation_changes.py:76
+msgid "Loss for voter for canceling of answer acceptance"
+msgstr ""
+
+#: conf/reputation_changes.py:86
+msgid "Loss for author whose answer was \"un-accepted\""
+msgstr ""
+
+#: conf/reputation_changes.py:96
+msgid "Loss for giving a downvote"
+msgstr ""
+
+#: conf/reputation_changes.py:106
+msgid "Loss for owner of post that was flagged offensive"
+msgstr ""
+
+#: conf/reputation_changes.py:116
+msgid "Loss for owner of post that was downvoted"
+msgstr ""
+
+#: conf/reputation_changes.py:126
+msgid "Loss for owner of post that was flagged 3 times per same revision"
+msgstr ""
+
+#: conf/reputation_changes.py:136
+msgid "Loss for owner of post that was flagged 5 times per same revision"
+msgstr ""
+
+#: conf/reputation_changes.py:146
+msgid "Loss for post owner when upvote is canceled"
+msgstr ""
+
+#: conf/sidebar_main.py:11
+msgid "Sidebar widget settings - main page"
+msgstr ""
+
+#: conf/sidebar_main.py:18 conf/sidebar_profile.py:18
+#: conf/sidebar_question.py:18
+msgid "Custom sidebar header"
+msgstr ""
+
+#: conf/sidebar_main.py:21 conf/sidebar_profile.py:21
+#: conf/sidebar_question.py:21
+msgid ""
+"Use this area to enter content at the TOP of the sidebarin HTML format. "
+"When using this option (as well as the sidebar footer), please use the HTML "
+"validation service to make sure that your input is valid and works well in "
+"all browsers."
+msgstr ""
+
+#: conf/sidebar_main.py:34
+msgid "Show avatar block in sidebar"
+msgstr ""
+
+#: conf/sidebar_main.py:36
+msgid "Uncheck this if you want to hide the avatar block from the sidebar "
+msgstr ""
+
+#: conf/sidebar_main.py:47
+msgid "Limit how many avatars will be displayed on the sidebar"
+msgstr ""
+
+#: conf/sidebar_main.py:57
+msgid "Show tag selector in sidebar"
+msgstr ""
+
+#: conf/sidebar_main.py:59
+msgid ""
+"Uncheck this if you want to hide the options for choosing interesting and "
+"ignored tags "
+msgstr ""
+
+#: conf/sidebar_main.py:70
+msgid "Show tag list/cloud in sidebar"
+msgstr ""
+
+#: conf/sidebar_main.py:72
+msgid ""
+"Uncheck this if you want to hide the tag cloud or tag list from the sidebar "
+msgstr ""
+
+#: conf/sidebar_main.py:83 conf/sidebar_profile.py:34
+#: conf/sidebar_question.py:74
+msgid "Custom sidebar footer"
+msgstr ""
+
+#: conf/sidebar_main.py:86 conf/sidebar_profile.py:37
+#: conf/sidebar_question.py:77
+msgid ""
+"Use this area to enter content at the BOTTOM of the sidebarin HTML format. "
+"When using this option (as well as the sidebar header), please use the HTML "
+"validation service to make sure that your input is valid and works well in "
+"all browsers."
+msgstr ""
+
+#: conf/sidebar_profile.py:11
+msgid "Sidebar widget settings - profile page"
+msgstr ""
+
+#: conf/sidebar_question.py:11
+msgid "Sidebar widget settings - question page"
+msgstr ""
+
+#: conf/sidebar_question.py:34
+msgid "Show tag list in sidebar"
+msgstr ""
+
+#: conf/sidebar_question.py:36
+msgid "Uncheck this if you want to hide the tag list from the sidebar "
+msgstr ""
+
+#: conf/sidebar_question.py:47
+msgid "Show meta information in sidebar"
+msgstr ""
+
+#: conf/sidebar_question.py:49
+msgid ""
+"Uncheck this if you want to hide the meta information about the question "
+"(post date, views, last updated). "
+msgstr ""
+
+#: conf/sidebar_question.py:61
+msgid "Show related questions in sidebar"
+msgstr ""
+
+#: conf/sidebar_question.py:63
+msgid "Uncheck this if you want to hide the list of related questions. "
+msgstr ""
+
+#: conf/site_modes.py:63
+msgid "Site modes"
+msgstr ""
+
+#: conf/site_modes.py:72
+msgid "Activate a \"Bootstrap\" mode"
+msgstr ""
+
+#: conf/site_modes.py:74
+msgid ""
+"Bootstrap mode lowers reputation and certain badge thresholds, to values, "
+"more suitable for the smaller communities, <strong>WARNING:</strong> your "
+"current value for Minimum reputation, Bagde Settings and Vote Rules will be "
+"changed after you modify this setting."
+msgstr ""
+
+#: conf/site_settings.py:11
+msgid "Q&A forum website parameters and urls"
+msgstr ""
+
+#: conf/site_settings.py:19
+msgid "Site title for the Q&A forum"
+msgstr ""
+
+#: conf/site_settings.py:28
+msgid "Comma separated list of Q&A site keywords"
+msgstr ""
+
+#: conf/site_settings.py:37
+msgid "Copyright message to show in the footer"
+msgstr ""
+
+#: conf/site_settings.py:47
+msgid "Site description for the search engines"
+msgstr ""
+
+#: conf/site_settings.py:56
+msgid "Short name for your Q&A forum"
+msgstr ""
+
+#: conf/site_settings.py:66
+msgid "Base URL for your Q&A forum, must start with http or https"
+msgstr ""
+
+#: conf/site_settings.py:77
+msgid "Check to enable greeting for anonymous user"
+msgstr ""
+
+#: conf/site_settings.py:88
+msgid "Text shown in the greeting message shown to the anonymous user"
+msgstr ""
+
+#: conf/site_settings.py:92
+msgid "Use HTML to format the message "
+msgstr ""
+
+#: conf/site_settings.py:101
+msgid "Feedback site URL"
+msgstr ""
+
+#: conf/site_settings.py:103
+msgid "If left empty, a simple internal feedback form will be used instead"
+msgstr ""
+
+#: conf/skin_counter_settings.py:11
+msgid "Skin: view, vote and answer counters"
+msgstr ""
+
+#: conf/skin_counter_settings.py:19
+msgid "Vote counter value to give \"full color\""
+msgstr ""
+
+#: conf/skin_counter_settings.py:29
+msgid "Background color for votes = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:30 conf/skin_counter_settings.py:41
+#: conf/skin_counter_settings.py:52 conf/skin_counter_settings.py:62
+#: conf/skin_counter_settings.py:72 conf/skin_counter_settings.py:85
+#: conf/skin_counter_settings.py:106 conf/skin_counter_settings.py:117
+#: conf/skin_counter_settings.py:128 conf/skin_counter_settings.py:138
+#: conf/skin_counter_settings.py:148 conf/skin_counter_settings.py:163
+#: conf/skin_counter_settings.py:186 conf/skin_counter_settings.py:196
+#: conf/skin_counter_settings.py:206 conf/skin_counter_settings.py:216
+#: conf/skin_counter_settings.py:228 conf/skin_counter_settings.py:239
+#: conf/skin_counter_settings.py:252 conf/skin_counter_settings.py:262
+msgid "HTML color name or hex value"
+msgstr ""
+
+#: conf/skin_counter_settings.py:40
+msgid "Foreground color for votes = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:51
+msgid "Background color for votes"
+msgstr ""
+
+#: conf/skin_counter_settings.py:61
+msgid "Foreground color for votes"
+msgstr ""
+
+#: conf/skin_counter_settings.py:71
+msgid "Background color for votes = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:84
+msgid "Foreground color for votes = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:95
+msgid "View counter value to give \"full color\""
+msgstr ""
+
+#: conf/skin_counter_settings.py:105
+msgid "Background color for views = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:116
+msgid "Foreground color for views = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:127
+msgid "Background color for views"
+msgstr ""
+
+#: conf/skin_counter_settings.py:137
+msgid "Foreground color for views"
+msgstr ""
+
+#: conf/skin_counter_settings.py:147
+msgid "Background color for views = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:162
+msgid "Foreground color for views = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:173
+msgid "Answer counter value to give \"full color\""
+msgstr ""
+
+#: conf/skin_counter_settings.py:185
+msgid "Background color for answers = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:195
+msgid "Foreground color for answers = 0"
+msgstr ""
+
+#: conf/skin_counter_settings.py:205
+msgid "Background color for answers"
+msgstr ""
+
+#: conf/skin_counter_settings.py:215
+msgid "Foreground color for answers"
+msgstr ""
+
+#: conf/skin_counter_settings.py:227
+msgid "Background color for answers = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:238
+msgid "Foreground color for answers = MAX"
+msgstr ""
+
+#: conf/skin_counter_settings.py:251
+msgid "Background color for accepted"
+msgstr ""
+
+#: conf/skin_counter_settings.py:261
+msgid "Foreground color for accepted answer"
+msgstr ""
+
+#: conf/skin_general_settings.py:14
+msgid "Skin and User Interface settings"
+msgstr ""
+
+#: conf/skin_general_settings.py:21
+msgid "Q&A site logo"
+msgstr ""
+
+#: conf/skin_general_settings.py:23
+msgid "To change the logo, select new file, then submit this whole form."
+msgstr ""
+
+#: conf/skin_general_settings.py:37
+msgid "Show logo"
+msgstr ""
+
+#: conf/skin_general_settings.py:39
+msgid ""
+"Check if you want to show logo in the forum header or uncheck in the case "
+"you do not want the logo to appear in the default location"
+msgstr ""
+
+#: conf/skin_general_settings.py:51
+msgid "Site favicon"
+msgstr ""
+
+#: conf/skin_general_settings.py:53
+#, python-format
+msgid ""
+"A small 16x16 or 32x32 pixel icon image used to distinguish your site in the "
+"browser user interface. Please find more information about favicon at <a "
+"href=\"%(favicon_info_url)s\">this page</a>."
+msgstr ""
+
+#: conf/skin_general_settings.py:71
+msgid "Password login button"
+msgstr ""
+
+#: conf/skin_general_settings.py:73
+msgid ""
+"An 88x38 pixel image that is used on the login screen for the password login "
+"button."
+msgstr ""
+
+#: conf/skin_general_settings.py:88
+msgid "Show all UI functions to all users"
+msgstr ""
+
+#: conf/skin_general_settings.py:90
+msgid ""
+"If checked, all forum functions will be shown to users, regardless of their "
+"reputation. However to use those functions, moderation rules, reputation and "
+"other limits will still apply."
+msgstr ""
+
+#: conf/skin_general_settings.py:105
+msgid "Select skin"
+msgstr ""
+
+#: conf/skin_general_settings.py:116
+msgid "Customize HTML <HEAD>"
+msgstr ""
+
+#: conf/skin_general_settings.py:125
+msgid "Custom portion of the HTML <HEAD>"
+msgstr ""
+
+#: conf/skin_general_settings.py:127
+msgid ""
+"<strong>To use this option</strong>, check \"Customize HTML &lt;HEAD&gt;\" "
+"above. Contents of this box will be inserted into the &lt;HEAD&gt; portion "
+"of the HTML output, where elements such as &lt;script&gt;, &lt;link&gt;, &lt;"
+"meta&gt; may be added. Please, keep in mind that adding external javascript "
+"to the &lt;HEAD&gt; is not recommended because it slows loading of the "
+"pages. Instead, it will be more efficient to place links to the javascript "
+"files into the footer. <strong>Note:</strong> if you do use this setting, "
+"please test the site with the W3C HTML validator service."
+msgstr ""
+
+#: conf/skin_general_settings.py:149
+msgid "Custom header additions"
+msgstr ""
+
+#: conf/skin_general_settings.py:151
+msgid ""
+"Header is the bar at the top of the content that contains user info and site "
+"links, and is common to all pages. Use this area to enter contents of the "
+"headerin the HTML format. When customizing the site header (as well as "
+"footer and the HTML &lt;HEAD&gt;), use the HTML validation service to make "
+"sure that your input is valid and works well in all browsers."
+msgstr ""
+
+#: conf/skin_general_settings.py:166
+msgid "Site footer mode"
+msgstr ""
+
+#: conf/skin_general_settings.py:168
+msgid ""
+"Footer is the bottom portion of the content, which is common to all pages. "
+"You can disable, customize, or use the default footer."
+msgstr ""
+
+#: conf/skin_general_settings.py:185
+msgid "Custom footer (HTML format)"
+msgstr ""
+
+#: conf/skin_general_settings.py:187
+msgid ""
+"<strong>To enable this function</strong>, please select option 'customize' "
+"in the \"Site footer mode\" above. Use this area to enter contents of the "
+"footer in the HTML format. When customizing the site footer (as well as the "
+"header and HTML &lt;HEAD&gt;), use the HTML validation service to make sure "
+"that your input is valid and works well in all browsers."
+msgstr ""
+
+#: conf/skin_general_settings.py:202
+msgid "Apply custom style sheet (CSS)"
+msgstr ""
+
+#: conf/skin_general_settings.py:204
+msgid ""
+"Check if you want to change appearance of your form by adding custom style "
+"sheet rules (please see the next item)"
+msgstr ""
+
+#: conf/skin_general_settings.py:216
+msgid "Custom style sheet (CSS)"
+msgstr ""
+
+#: conf/skin_general_settings.py:218
+msgid ""
+"<strong>To use this function</strong>, check \"Apply custom style sheet\" "
+"option above. The CSS rules added in this window will be applied after the "
+"default style sheet rules. The custom style sheet will be served dynamically "
+"at url \"&lt;forum url&gt;/custom.css\", where the \"&lt;forum url&gt; part "
+"depends (default is empty string) on the url configuration in your urls.py."
+msgstr ""
+
+#: conf/skin_general_settings.py:234
+msgid "Add custom javascript"
+msgstr ""
+
+#: conf/skin_general_settings.py:237
+msgid "Check to enable javascript that you can enter in the next field"
+msgstr ""
+
+#: conf/skin_general_settings.py:247
+msgid "Custom javascript"
+msgstr ""
+
+#: conf/skin_general_settings.py:249
+msgid ""
+"Type or paste plain javascript that you would like to run on your site. Link "
+"to the script will be inserted at the bottom of the HTML output and will be "
+"served at the url \"&lt;forum url&gt;/custom.js\". Please, bear in mind that "
+"your javascript code may break other functionalities of the site and that "
+"the behavior may not be consistent across different browsers (<strong>to "
+"enable your custom code</strong>, check \"Add custom javascript\" option "
+"above)."
+msgstr ""
+
+#: conf/skin_general_settings.py:267
+msgid "Skin media revision number"
+msgstr ""
+
+#: conf/skin_general_settings.py:269
+msgid "Will be set automatically but you can modify it if necessary."
+msgstr ""
+
+#: conf/skin_general_settings.py:280
+msgid "Hash to update the media revision number automatically."
+msgstr ""
+
+#: conf/skin_general_settings.py:284
+msgid "Will be set automatically, it is not necesary to modify manually."
+msgstr ""
+
+#: conf/social_sharing.py:10
+msgid "Sharing content on social networks"
+msgstr ""
+
+#: conf/social_sharing.py:18
+msgid "Check to enable sharing of questions on Twitter"
+msgstr ""
+
+#: conf/social_sharing.py:27
+msgid "Check to enable sharing of questions on Facebook"
+msgstr ""
+
+#: conf/social_sharing.py:36
+msgid "Check to enable sharing of questions on LinkedIn"
+msgstr ""
+
+#: conf/social_sharing.py:45
+msgid "Check to enable sharing of questions on Identi.ca"
+msgstr ""
+
+#: conf/social_sharing.py:54
+msgid "Check to enable sharing of questions on Google+"
+msgstr ""
+
+#: conf/spam_and_moderation.py:9
+msgid "Spam control and content moderation"
+msgstr ""
+
+#: conf/spam_and_moderation.py:16
+msgid "Enable Akismet spam detection(keys below are required)"
+msgstr ""
+
+#: conf/spam_and_moderation.py:19
+#, python-format
+msgid "To get an Akismet key please visit <a href=\"%(url)s\">Akismet site</a>"
+msgstr ""
+
+#: conf/spam_and_moderation.py:29
+msgid "Akismet key for spam detection"
+msgstr ""
+
+#: conf/user_settings.py:11
+#, fuzzy
+msgid "User settings"
+msgstr "User login"
+
+#: conf/user_settings.py:19
+msgid "Allow editing user screen name"
+msgstr ""
+
+#: conf/user_settings.py:28
+#, fuzzy
+msgid "Allow account recovery by email"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: conf/user_settings.py:37
+msgid "Allow adding and removing login methods"
+msgstr ""
+
+#: conf/user_settings.py:47
+msgid "Minimum allowed length for screen name"
+msgstr ""
+
+#: conf/user_settings.py:57
+msgid "Default Gravatar icon type"
+msgstr ""
+
+#: conf/user_settings.py:59
+msgid ""
+"This option allows you to set the default avatar type for email addresses "
+"without associated gravatar images. For more information, please visit <a "
+"href=\"http://en.gravatar.com/site/implement/images/\">this page</a>."
+msgstr ""
+
+#: conf/user_settings.py:69
+msgid "Name for the Anonymous user"
+msgstr ""
+
+#: conf/vote_rules.py:13
+msgid "Limits applicable to votes and moderation flags"
+msgstr ""
+
+#: conf/vote_rules.py:22
+msgid "Number of votes a user can cast per day"
+msgstr ""
+
+#: conf/vote_rules.py:31
+msgid "Maximum number of flags per user per day"
+msgstr ""
+
+#: conf/vote_rules.py:40
+msgid "Threshold for warning about remaining daily votes"
+msgstr ""
+
+#: conf/vote_rules.py:49
+msgid "Number of days to allow canceling votes"
+msgstr ""
+
+#: conf/vote_rules.py:58
+msgid "Number of days required before answering own question"
+msgstr ""
+
+#: conf/vote_rules.py:67
+msgid "Number of flags required to automatically hide posts"
+msgstr ""
+
+#: conf/vote_rules.py:76
+msgid "Number of flags required to automatically delete posts"
+msgstr ""
+
+#: const/__init__.py:10
+msgid "duplicate question"
+msgstr "pregunta repetida"
+
+#: const/__init__.py:11
+msgid "question is off-topic or not relevant"
+msgstr "pregunta no pertinent o fora de tema"
+
+#: const/__init__.py:12
+msgid "too subjective and argumentative"
+msgstr "massa subjectiva o argumentativa"
+
+#: const/__init__.py:13
+msgid "not a real question"
+msgstr "no és una pregunta real"
+
+#: const/__init__.py:14
+msgid "the question is answered, right answer was accepted"
+msgstr "s'ha respost la pregunta, es va acceptar la resposta correcta"
+
+#: const/__init__.py:15
+msgid "question is not relevant or outdated"
+msgstr ""
+
+#: const/__init__.py:16
+msgid "question contains offensive or malicious remarks"
+msgstr ""
+
+#: const/__init__.py:17
+msgid "spam or advertising"
+msgstr ""
+
+#: const/__init__.py:18
+msgid "too localized"
+msgstr ""
+
+#: const/__init__.py:41
+msgid "newest"
+msgstr "més recent"
+
+#: const/__init__.py:42 skins/default/templates/users.html:26
+msgid "oldest"
+msgstr "més antic"
+
+#: const/__init__.py:43
+msgid "active"
+msgstr "actiu"
+
+#: const/__init__.py:44
+msgid "inactive"
+msgstr "inactiu"
+
+#: const/__init__.py:45
+msgid "hottest"
+msgstr "més populars"
+
+#: const/__init__.py:46
+msgid "coldest"
+msgstr ""
+
+#: const/__init__.py:47
+msgid "most voted"
+msgstr ""
+
+#: const/__init__.py:48
+msgid "least voted"
+msgstr "més votat"
+
+#: const/__init__.py:49
+msgid "relevance"
+msgstr ""
+
+#: const/__init__.py:57 skins/default/templates/main_page/tab_bar.html:10
+#: skins/default/templates/user_profile/user_inbox.html:50
+msgid "all"
+msgstr "tot"
+
+#: const/__init__.py:58 skins/default/templates/main_page/tab_bar.html:15
+msgid "unanswered"
+msgstr "sense resposta"
+
+#: const/__init__.py:59
+msgid "favorite"
+msgstr "favorit"
+
+#: const/__init__.py:64
+#, fuzzy
+msgid "list"
+msgstr "llista"
+
+#: const/__init__.py:65
+msgid "cloud"
+msgstr "núbol"
+
+#: const/__init__.py:78
+msgid "Question has no answers"
+msgstr "La pregunta no té respostes"
+
+#: const/__init__.py:79
+msgid "Question has no accepted answers"
+msgstr "La pregunta no té respostes acceptades"
+
+#: const/__init__.py:121
+msgid "asked a question"
+msgstr "ha fet una pregunta"
+
+#: const/__init__.py:122
+msgid "answered a question"
+msgstr "ha respost una pregunta"
+
+#: const/__init__.py:123
+msgid "commented question"
+msgstr "ha comentat una pregunta"
+
+#: const/__init__.py:124
+msgid "commented answer"
+msgstr "ha commentat una resposta"
+
+#: const/__init__.py:125
+msgid "edited question"
+msgstr "ha editat una pregunta"
+
+#: const/__init__.py:126
+msgid "edited answer"
+msgstr "ha editat una resposta"
+
+#: const/__init__.py:127
+msgid "received award"
+msgstr "ha rebut una insígnia"
+
+#: const/__init__.py:128
+msgid "marked best answer"
+msgstr "ha marcat la millor resposta"
+
+#: const/__init__.py:129
+msgid "upvoted"
+msgstr "votat positivament"
+
+#: const/__init__.py:130
+msgid "downvoted"
+msgstr "votat negativament"
+
+#: const/__init__.py:131
+msgid "canceled vote"
+msgstr "cancelat el vot"
+
+#: const/__init__.py:132
+msgid "deleted question"
+msgstr "pregunta esborrada"
+
+#: const/__init__.py:133
+msgid "deleted answer"
+msgstr "resposta esborrada"
+
+#: const/__init__.py:134
+msgid "marked offensive"
+msgstr "marcat com ofensiu"
+
+#: const/__init__.py:135
+msgid "updated tags"
+msgstr "etiquetes actualitzades"
+
+#: const/__init__.py:136
+msgid "selected favorite"
+msgstr "seleccionat com a favorit"
+
+#: const/__init__.py:137
+msgid "completed user profile"
+msgstr "completat perfil d'usuari"
+
+#: const/__init__.py:138
+msgid "email update sent to user"
+msgstr "enviat missatge d'actualitació a l'usuari"
+
+#: const/__init__.py:141
+msgid "reminder about unanswered questions sent"
+msgstr "enviat recordatori d'una pregunta sense resposta"
+
+#: const/__init__.py:143
+msgid "mentioned in the post"
+msgstr "citat en l'entrada"
+
+#: const/__init__.py:194
+msgid "question_answered"
+msgstr "pregunta resposta"
+
+#: const/__init__.py:195
+msgid "question_commented"
+msgstr "pregunta comentada"
+
+#: const/__init__.py:196
+msgid "answer_commented"
+msgstr "resposta comentada"
+
+#: const/__init__.py:197
+msgid "answer_accepted"
+msgstr "resposta acceptada"
+
+#: const/__init__.py:201
+msgid "[closed]"
+msgstr "[tancat]"
+
+#: const/__init__.py:202
+msgid "[deleted]"
+msgstr "[esborrat]"
+
+#: const/__init__.py:203 views/readers.py:613
+msgid "initial version"
+msgstr "versió inicial"
+
+#: const/__init__.py:204
+msgid "retagged"
+msgstr "reetiquetat"
+
+#: const/__init__.py:212
+msgid "off"
+msgstr "no"
+
+#: const/__init__.py:213
+msgid "exclude ignored"
+msgstr "excloure ignorades"
+
+#: const/__init__.py:214
+msgid "only selected"
+msgstr "només seleccionades"
+
+#: const/__init__.py:218
+msgid "instantly"
+msgstr "instantàniament"
+
+#: const/__init__.py:219
+msgid "daily"
+msgstr "diari"
+
+#: const/__init__.py:220
+msgid "weekly"
+msgstr "setmanal"
+
+#: const/__init__.py:221
+msgid "no email"
+msgstr "no correu electrònic"
+
+#: const/__init__.py:228
+msgid "identicon"
+msgstr ""
+
+#: const/__init__.py:229
+msgid "mystery-man"
+msgstr ""
+
+#: const/__init__.py:230
+msgid "monsterid"
+msgstr ""
+
+#: const/__init__.py:231
+#, fuzzy
+msgid "wavatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: const/__init__.py:232
+msgid "retro"
+msgstr ""
+
+#: const/__init__.py:279 skins/default/templates/badges.html:37
+msgid "gold"
+msgstr "or"
+
+#: const/__init__.py:280 skins/default/templates/badges.html:46
+msgid "silver"
+msgstr "plata"
+
+#: const/__init__.py:281 skins/default/templates/badges.html:53
+msgid "bronze"
+msgstr "bronze"
+
+#: const/__init__.py:293
+msgid "None"
+msgstr "Cap"
+
+#: const/__init__.py:294
+#, fuzzy
+msgid "Gravatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: const/__init__.py:295
+#, fuzzy
+msgid "Uploaded Avatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: const/message_keys.py:15
+msgid "most relevant questions"
+msgstr ""
+
+#: const/message_keys.py:16
+msgid "click to see most relevant questions"
+msgstr "clicar per mostra les preguntes més rellevants"
+
+#: const/message_keys.py:17
+msgid "by relevance"
+msgstr "rellevància"
+
+#: const/message_keys.py:18
+msgid "click to see the oldest questions"
+msgstr "clicar per mostrar les preguntes més antigues"
+
+#: const/message_keys.py:19
+msgid "by date"
+msgstr "data"
+
+#: const/message_keys.py:20
+msgid "click to see the newest questions"
+msgstr "clicar per mostrar les preguntes més recents"
+
+#: const/message_keys.py:21
+msgid "click to see the least recently updated questions"
+msgstr "clicar per mostar les preguntes que porten més temps sense actualitzar"
+
+#: const/message_keys.py:22
+msgid "by activity"
+msgstr "activitat"
+
+#: const/message_keys.py:23
+msgid "click to see the most recently updated questions"
+msgstr "clicar per mostar les preguntes actualitzades recentment"
+
+#: const/message_keys.py:24
+msgid "click to see the least answered questions"
+msgstr "clicar per mostrar les preguntes amb menys respostes"
+
+#: const/message_keys.py:25
+msgid "by answers"
+msgstr "respostes"
+
+#: const/message_keys.py:26
+msgid "click to see the most answered questions"
+msgstr "clicar per mostrar les preguntes amb més respostes"
+
+#: const/message_keys.py:27
+msgid "click to see least voted questions"
+msgstr "clicar per mostrar les preguntes amb menys votades"
+
+#: const/message_keys.py:28
+msgid "by votes"
+msgstr "vots"
+
+#: const/message_keys.py:29
+msgid "click to see most voted questions"
+msgstr "clicar per mostrar les preguntes amb més votades"
+
+#: deps/django_authopenid/backends.py:88
+msgid ""
+"Welcome! Please set email address (important!) in your profile and adjust "
+"screen name, if necessary."
+msgstr "Us donem la benvinguda. Indiqueu la vostra adreça de correu electrònic (important) i el nom a mostrar, si ho creieu necessari."
+
+#: deps/django_authopenid/forms.py:110 deps/django_authopenid/views.py:151
+msgid "i-names are not supported"
+msgstr ""
+
+#: deps/django_authopenid/forms.py:233
+#, python-format
+msgid "Please enter your %(username_token)s"
+msgstr "Introduïu el vostre %(username_token)s"
+
+#: deps/django_authopenid/forms.py:259
+msgid "Please, enter your user name"
+msgstr "Introduïu el vostre nom d'usuari"
+
+#: deps/django_authopenid/forms.py:263
+msgid "Please, enter your password"
+msgstr "Introduïu la vostra contrasenya"
+
+#: deps/django_authopenid/forms.py:270 deps/django_authopenid/forms.py:274
+msgid "Please, enter your new password"
+msgstr "Introduïu la vostra contrasenya nova"
+
+#: deps/django_authopenid/forms.py:285
+msgid "Passwords did not match"
+msgstr "Les contrasenyes no coincideixen"
+
+#: deps/django_authopenid/forms.py:297
+#, python-format
+msgid "Please choose password > %(len)s characters"
+msgstr "Escollir una contrasenya de més de %(len)s caràcters"
+
+#: deps/django_authopenid/forms.py:335
+msgid "Current password"
+msgstr "Contrasenya actual"
+
+#: deps/django_authopenid/forms.py:346
+msgid ""
+"Old password is incorrect. Please enter the correct "
+"password."
+msgstr "La contrasenya antiga és incorrecta. Introduïu la contrasenya correcta."
+
+#: deps/django_authopenid/forms.py:399
+msgid "Sorry, we don't have this email address in the database"
+msgstr "Adreça de correu electrònic inexistent a la base de dades"
+
+#: deps/django_authopenid/forms.py:435
+msgid "Your user name (<i>required</i>)"
+msgstr "El vostre nom d'usuari (<i>requerit</i>)"
+
+#: deps/django_authopenid/forms.py:450
+msgid "Incorrect username."
+msgstr "Nom d'usuari inexistent"
+
+#: deps/django_authopenid/urls.py:9 deps/django_authopenid/urls.py:12
+#: deps/django_authopenid/urls.py:15 setup_templates/settings.py:203
+msgid "signin/"
+msgstr "entrar/"
+
+#: deps/django_authopenid/urls.py:10
+msgid "signout/"
+msgstr "sortir/"
+
+#: deps/django_authopenid/urls.py:12
+msgid "complete/"
+msgstr ""
+
+#: deps/django_authopenid/urls.py:15
+msgid "complete-oauth/"
+msgstr ""
+
+#: deps/django_authopenid/urls.py:19
+msgid "register/"
+msgstr ""
+
+#: deps/django_authopenid/urls.py:21
+msgid "signup/"
+msgstr "registre/"
+
+#: deps/django_authopenid/urls.py:25
+msgid "logout/"
+msgstr "sortir/"
+
+#: deps/django_authopenid/urls.py:30
+msgid "recover/"
+msgstr "recuperar/"
+
+#: deps/django_authopenid/util.py:378
+#, python-format
+msgid "%(site)s user name and password"
+msgstr "nom d'usuari i contrasenya %(site)s"
+
+#: deps/django_authopenid/util.py:384
+#: skins/default/templates/authopenid/signin.html:108
+msgid "Create a password-protected account"
+msgstr "Crear un compte amb contrasenya"
+
+#: deps/django_authopenid/util.py:385
+msgid "Change your password"
+msgstr "Canviar la vostra contrasenya"
+
+#: deps/django_authopenid/util.py:473
+msgid "Sign in with Yahoo"
+msgstr "Registrar-se mitjançant Yahoo"
+
+#: deps/django_authopenid/util.py:480
+msgid "AOL screen name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:488
+msgid "OpenID url"
+msgstr ""
+
+#: deps/django_authopenid/util.py:517
+msgid "Flickr user name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:525
+msgid "Technorati user name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:533
+msgid "WordPress blog name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:541
+msgid "Blogger blog name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:549
+msgid "LiveJournal blog name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:557
+msgid "ClaimID user name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:565
+msgid "Vidoop user name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:573
+msgid "Verisign user name"
+msgstr ""
+
+#: deps/django_authopenid/util.py:608
+#, python-format
+msgid "Change your %(provider)s password"
+msgstr ""
+
+#: deps/django_authopenid/util.py:612
+#, python-format
+msgid "Click to see if your %(provider)s signin still works for %(site_name)s"
+msgstr ""
+
+#: deps/django_authopenid/util.py:621
+#, python-format
+msgid "Create password for %(provider)s"
+msgstr ""
+
+#: deps/django_authopenid/util.py:625
+#, python-format
+msgid "Connect your %(provider)s account to %(site_name)s"
+msgstr ""
+
+#: deps/django_authopenid/util.py:634
+#, python-format
+msgid "Signin with %(provider)s user name and password"
+msgstr ""
+
+#: deps/django_authopenid/util.py:641
+#, python-format
+msgid "Sign in with your %(provider)s account"
+msgstr ""
+
+#: deps/django_authopenid/views.py:158
+#, python-format
+msgid "OpenID %(openid_url)s is invalid"
+msgstr ""
+
+#: deps/django_authopenid/views.py:270 deps/django_authopenid/views.py:415
+#: deps/django_authopenid/views.py:443
+#, python-format
+msgid ""
+"Unfortunately, there was some problem when connecting to %(provider)s, "
+"please try again or use another provider"
+msgstr ""
+
+#: deps/django_authopenid/views.py:365
+msgid "Your new password saved"
+msgstr ""
+
+#: deps/django_authopenid/views.py:469
+msgid "The login password combination was not correct"
+msgstr ""
+
+#: deps/django_authopenid/views.py:573
+msgid "Please click any of the icons below to sign in"
+msgstr ""
+
+#: deps/django_authopenid/views.py:575
+msgid "Account recovery email sent"
+msgstr ""
+
+#: deps/django_authopenid/views.py:578
+msgid "Please add one or more login methods."
+msgstr ""
+
+#: deps/django_authopenid/views.py:580
+msgid "If you wish, please add, remove or re-validate your login methods"
+msgstr ""
+
+#: deps/django_authopenid/views.py:582
+msgid "Please wait a second! Your account is recovered, but ..."
+msgstr ""
+
+#: deps/django_authopenid/views.py:584
+msgid "Sorry, this account recovery key has expired or is invalid"
+msgstr ""
+
+#: deps/django_authopenid/views.py:657
+#, python-format
+msgid "Login method %(provider_name)s does not exist"
+msgstr ""
+
+#: deps/django_authopenid/views.py:663
+msgid "Oops, sorry - there was some error - please try again"
+msgstr ""
+
+#: deps/django_authopenid/views.py:754
+#, python-format
+msgid "Your %(provider)s login works fine"
+msgstr ""
+
+#: deps/django_authopenid/views.py:1065 deps/django_authopenid/views.py:1071
+#, python-format
+msgid "your email needs to be validated see %(details_url)s"
+msgstr ""
+"Your email needs to be validated. Please see details <a "
+"id='validate_email_alert' href='%(details_url)s'>here</a>."
+
+#: deps/django_authopenid/views.py:1092
+#, python-format
+msgid "Recover your %(site)s account"
+msgstr ""
+
+#: deps/django_authopenid/views.py:1162
+msgid "Please check your email and visit the enclosed link."
+msgstr ""
+
+#: deps/livesettings/models.py:101 deps/livesettings/models.py:140
+msgid "Site"
+msgstr ""
+
+#: deps/livesettings/values.py:106
+msgid "Base Settings"
+msgstr ""
+
+#: deps/livesettings/values.py:213
+msgid "Default value: \"\""
+msgstr ""
+
+#: deps/livesettings/values.py:220
+msgid "Default value: "
+msgstr ""
+
+#: deps/livesettings/values.py:223
+#, python-format
+msgid "Default value: %s"
+msgstr ""
+
+#: deps/livesettings/values.py:601
+#, python-format
+msgid "Allowed image file types are %(types)s"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/_admin_site_views.html:4
+msgid "Sites"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:11
+#: deps/livesettings/templates/livesettings/site_settings.html:23
+msgid "Documentation"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:11
+#: deps/livesettings/templates/livesettings/site_settings.html:23
+#: skins/default/templates/authopenid/signin.html:132
+msgid "Change password"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:11
+#: deps/livesettings/templates/livesettings/site_settings.html:23
+msgid "Log out"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:14
+#: deps/livesettings/templates/livesettings/site_settings.html:26
+msgid "Home"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:15
+msgid "Edit Group Settings"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:22
+#: deps/livesettings/templates/livesettings/site_settings.html:50
+msgid "Please correct the error below."
+msgid_plural "Please correct the errors below."
+msgstr[0] ""
+msgstr[1] ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:28
+#, python-format
+msgid "Settings included in %(name)s."
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:62
+#: deps/livesettings/templates/livesettings/site_settings.html:97
+msgid "You don't have permission to edit values."
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/group_settings.html:68
+msgid "Setting groups"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/site_settings.html:27
+msgid "Edit Site Settings"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/site_settings.html:43
+msgid "Livesettings are disabled for this site."
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/site_settings.html:44
+msgid "All configuration options must be edited in the site settings.py file"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/site_settings.html:66
+#, python-format
+msgid "Group settings: %(name)s"
+msgstr ""
+
+#: deps/livesettings/templates/livesettings/site_settings.html:93
+msgid "Uncollapse all"
+msgstr ""
+
+#: importers/stackexchange/management/commands/load_stackexchange.py:141
+msgid "Congratulations, you are now an Administrator"
+msgstr ""
+
+#: management/commands/initialize_ldap_logins.py:51
+msgid ""
+"This command may help you migrate to LDAP password authentication by "
+"creating a record for LDAP association with each user account. There is an "
+"assumption that ldap user id's are the same as user names registered at the "
+"site. Before running this command it is necessary to set up LDAP parameters "
+"in the \"External keys\" section of the site settings."
+msgstr ""
+
+#: management/commands/post_emailed_questions.py:35
+msgid ""
+"<p>To ask by email, please:</p>\n"
+"<ul>\n"
+" <li>Format the subject line as: [Tag1; Tag2] Question title</li>\n"
+" <li>Type details of your question into the email body</li>\n"
+"</ul>\n"
+"<p>Note that tags may consist of more than one word, and tags\n"
+"may be separated by a semicolon or a comma</p>\n"
+msgstr ""
+
+#: management/commands/post_emailed_questions.py:55
+#, python-format
+msgid ""
+"<p>Sorry, there was an error posting your question please contact the %(site)"
+"s administrator</p>"
+msgstr ""
+
+#: management/commands/post_emailed_questions.py:61
+#, python-format
+msgid ""
+"<p>Sorry, in order to post questions on %(site)s by email, please <a href=\"%"
+"(url)s\">register first</a></p>"
+msgstr ""
+
+#: management/commands/post_emailed_questions.py:69
+msgid ""
+"<p>Sorry, your question could not be posted due to insufficient privileges "
+"of your user account</p>"
+msgstr ""
+
+#: management/commands/send_email_alerts.py:411
+#, python-format
+msgid "%(question_count)d updated question about %(topics)s"
+msgid_plural "%(question_count)d updated questions about %(topics)s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: management/commands/send_email_alerts.py:421
+#, python-format
+msgid "%(name)s, this is an update message header for %(num)d question"
+msgid_plural "%(name)s, this is an update message header for %(num)d questions"
+msgstr[0] ""
+"<p>Dear %(name)s,</p></p>The following question has been updated on the Q&A "
+"forum:</p>"
+msgstr[1] ""
+"<p>Dear %(name)s,</p><p>The following %(num)d questions have been updated on "
+"the Q&A forum:</p>"
+
+#: management/commands/send_email_alerts.py:438
+msgid "new question"
+msgstr ""
+
+#: management/commands/send_email_alerts.py:455
+msgid ""
+"Please visit the askbot and see what's new! Could you spread the word about "
+"it - can somebody you know help answering those questions or benefit from "
+"posting one?"
+msgstr ""
+
+#: management/commands/send_email_alerts.py:465
+msgid ""
+"Your most frequent subscription setting is 'daily' on selected questions. If "
+"you are receiving more than one email per dayplease tell about this issue to "
+"the askbot administrator."
+msgstr ""
+
+#: management/commands/send_email_alerts.py:471
+msgid ""
+"Your most frequent subscription setting is 'weekly' if you are receiving "
+"this email more than once a week please report this issue to the askbot "
+"administrator."
+msgstr ""
+
+#: management/commands/send_email_alerts.py:477
+msgid ""
+"There is a chance that you may be receiving links seen before - due to a "
+"technicality that will eventually go away. "
+msgstr ""
+
+#: management/commands/send_email_alerts.py:490
+#, python-format
+msgid ""
+"go to %(email_settings_link)s to change frequency of email updates or %"
+"(admin_email)s administrator"
+msgstr ""
+"<p>Please remember that you can always <a href='%(email_settings_link)"
+"s'>adjust</a> frequency of the email updates or turn them off entirely.<br/"
+">If you believe that this message was sent in an error, please email about "
+"it the forum administrator at %(admin_email)s.</p><p>Sincerely,</p><p>Your "
+"friendly Q&A forum server.</p>"
+
+#: management/commands/send_unanswered_question_reminders.py:80
+#, python-format
+msgid "%(question_count)d unanswered question about %(topics)s"
+msgid_plural "%(question_count)d unanswered questions about %(topics)s"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:316
+msgid ""
+"Sorry, you cannot accept or unaccept best answers because your account is "
+"blocked"
+msgstr ""
+
+#: models/__init__.py:320
+msgid ""
+"Sorry, you cannot accept or unaccept best answers because your account is "
+"suspended"
+msgstr ""
+
+#: models/__init__.py:333
+#, python-format
+msgid ""
+">%(points)s points required to accept or unaccept your own answer to your "
+"own question"
+msgstr ""
+
+#: models/__init__.py:347
+#, python-format
+msgid ""
+"Sorry, only original author of the question - %(username)s - can accept or "
+"unaccept the best answer"
+msgstr ""
+
+#: models/__init__.py:375
+msgid "cannot vote for own posts"
+msgstr "Sorry, you cannot vote for your own posts"
+
+#: models/__init__.py:378
+msgid "Sorry your account appears to be blocked "
+msgstr ""
+
+#: models/__init__.py:383
+msgid "Sorry your account appears to be suspended "
+msgstr ""
+
+#: models/__init__.py:393
+#, python-format
+msgid ">%(points)s points required to upvote"
+msgstr ">%(points)s points required to upvote "
+
+#: models/__init__.py:399
+#, python-format
+msgid ">%(points)s points required to downvote"
+msgstr ">%(points)s points required to downvote "
+
+#: models/__init__.py:414
+msgid "Sorry, blocked users cannot upload files"
+msgstr ""
+
+#: models/__init__.py:415
+msgid "Sorry, suspended users cannot upload files"
+msgstr ""
+
+#: models/__init__.py:417
+#, python-format
+msgid ""
+"uploading images is limited to users with >%(min_rep)s reputation points"
+msgstr "sorry, file uploading requires karma >%(min_rep)s"
+
+#: models/__init__.py:436 models/__init__.py:503 models/__init__.py:918
+msgid "blocked users cannot post"
+msgstr ""
+"Sorry, your account appears to be blocked and you cannot make new posts "
+"until this issue is resolved. Please contact the forum administrator to "
+"reach a resolution."
+
+#: models/__init__.py:437 models/__init__.py:921
+msgid "suspended users cannot post"
+msgstr ""
+"Sorry, your account appears to be suspended and you cannot make new posts "
+"until this issue is resolved. You can, however edit your existing posts. "
+"Please contact the forum administrator to reach a resolution."
+
+#: models/__init__.py:464
+#, python-format
+msgid ""
+"Sorry, comments (except the last one) are editable only within %(minutes)s "
+"minute from posting"
+msgid_plural ""
+"Sorry, comments (except the last one) are editable only within %(minutes)s "
+"minutes from posting"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:476
+msgid "Sorry, but only post owners or moderators can edit comments"
+msgstr ""
+
+#: models/__init__.py:489
+msgid ""
+"Sorry, since your account is suspended you can comment only your own posts"
+msgstr ""
+
+#: models/__init__.py:493
+#, python-format
+msgid ""
+"Sorry, to comment any post a minimum reputation of %(min_rep)s points is "
+"required. You can still comment your own posts and answers to your questions"
+msgstr ""
+
+#: models/__init__.py:521
+msgid ""
+"This post has been deleted and can be seen only by post owners, site "
+"administrators and moderators"
+msgstr ""
+
+#: models/__init__.py:538
+msgid ""
+"Sorry, only moderators, site administrators and post owners can edit deleted "
+"posts"
+msgstr ""
+
+#: models/__init__.py:553
+msgid "Sorry, since your account is blocked you cannot edit posts"
+msgstr ""
+
+#: models/__init__.py:557
+msgid "Sorry, since your account is suspended you can edit only your own posts"
+msgstr ""
+
+#: models/__init__.py:562
+#, python-format
+msgid ""
+"Sorry, to edit wiki posts, a minimum reputation of %(min_rep)s is required"
+msgstr ""
+
+#: models/__init__.py:569
+#, python-format
+msgid ""
+"Sorry, to edit other people's posts, a minimum reputation of %(min_rep)s is "
+"required"
+msgstr ""
+
+#: models/__init__.py:632
+msgid ""
+"Sorry, cannot delete your question since it has an upvoted answer posted by "
+"someone else"
+msgid_plural ""
+"Sorry, cannot delete your question since it has some upvoted answers posted "
+"by other users"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:647
+msgid "Sorry, since your account is blocked you cannot delete posts"
+msgstr ""
+
+#: models/__init__.py:651
+msgid ""
+"Sorry, since your account is suspended you can delete only your own posts"
+msgstr ""
+
+#: models/__init__.py:655
+#, python-format
+msgid ""
+"Sorry, to deleted other people' posts, a minimum reputation of %(min_rep)s "
+"is required"
+msgstr ""
+
+#: models/__init__.py:675
+msgid "Sorry, since your account is blocked you cannot close questions"
+msgstr ""
+
+#: models/__init__.py:679
+msgid "Sorry, since your account is suspended you cannot close questions"
+msgstr ""
+
+#: models/__init__.py:683
+#, python-format
+msgid ""
+"Sorry, to close other people' posts, a minimum reputation of %(min_rep)s is "
+"required"
+msgstr ""
+
+#: models/__init__.py:692
+#, python-format
+msgid ""
+"Sorry, to close own question a minimum reputation of %(min_rep)s is required"
+msgstr ""
+
+#: models/__init__.py:716
+#, python-format
+msgid ""
+"Sorry, only administrators, moderators or post owners with reputation > %"
+"(min_rep)s can reopen questions."
+msgstr ""
+
+#: models/__init__.py:722
+#, python-format
+msgid ""
+"Sorry, to reopen own question a minimum reputation of %(min_rep)s is required"
+msgstr ""
+
+#: models/__init__.py:742
+msgid "cannot flag message as offensive twice"
+msgstr "You have flagged this question before and cannot do it more than once"
+
+#: models/__init__.py:747
+msgid "blocked users cannot flag posts"
+msgstr ""
+"Sorry, since your account is blocked you cannot flag posts as offensive"
+
+#: models/__init__.py:749
+msgid "suspended users cannot flag posts"
+msgstr ""
+"Sorry, your account appears to be suspended and you cannot make new posts "
+"until this issue is resolved. You can, however edit your existing posts. "
+"Please contact the forum administrator to reach a resolution."
+
+#: models/__init__.py:751
+#, python-format
+msgid "need > %(min_rep)s points to flag spam"
+msgstr ""
+"Sorry, to flag posts as offensive a minimum reputation of %(min_rep)s is "
+"required"
+
+#: models/__init__.py:770
+#, python-format
+msgid "%(max_flags_per_day)s exceeded"
+msgstr ""
+"Sorry, you have exhausted the maximum number of %(max_flags_per_day)s "
+"offensive flags per day."
+
+#: models/__init__.py:785
+msgid ""
+"Sorry, only question owners, site administrators and moderators can retag "
+"deleted questions"
+msgstr ""
+
+#: models/__init__.py:792
+msgid "Sorry, since your account is blocked you cannot retag questions"
+msgstr ""
+
+#: models/__init__.py:796
+msgid ""
+"Sorry, since your account is suspended you can retag only your own questions"
+msgstr ""
+
+#: models/__init__.py:800
+#, python-format
+msgid ""
+"Sorry, to retag questions a minimum reputation of %(min_rep)s is required"
+msgstr ""
+
+#: models/__init__.py:819
+msgid "Sorry, since your account is blocked you cannot delete comment"
+msgstr ""
+
+#: models/__init__.py:823
+msgid ""
+"Sorry, since your account is suspended you can delete only your own comments"
+msgstr ""
+
+#: models/__init__.py:827
+#, python-format
+msgid "Sorry, to delete comments reputation of %(min_rep)s is required"
+msgstr ""
+
+#: models/__init__.py:850
+msgid "cannot revoke old vote"
+msgstr "sorry, but older votes cannot be revoked"
+
+#: models/__init__.py:1325 utils/functions.py:70
+#, python-format
+msgid "on %(date)s"
+msgstr ""
+
+#: models/__init__.py:1327
+msgid "in two days"
+msgstr ""
+
+#: models/__init__.py:1329
+msgid "tomorrow"
+msgstr ""
+
+#: models/__init__.py:1331
+#, python-format
+msgid "in %(hr)d hour"
+msgid_plural "in %(hr)d hours"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1333
+#, python-format
+msgid "in %(min)d min"
+msgid_plural "in %(min)d mins"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1334
+#, python-format
+msgid "%(days)d day"
+msgid_plural "%(days)d days"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1336
+#, python-format
+msgid ""
+"New users must wait %(days)s before answering their own question. You can "
+"post an answer %(left)s"
+msgstr ""
+
+#: models/__init__.py:1502 skins/default/templates/feedback_email.txt:9
+msgid "Anonymous"
+msgstr ""
+
+#: models/__init__.py:1598 views/users.py:365
+msgid "Site Adminstrator"
+msgstr ""
+
+#: models/__init__.py:1600 views/users.py:367
+msgid "Forum Moderator"
+msgstr ""
+
+#: models/__init__.py:1602 views/users.py:369
+msgid "Suspended User"
+msgstr ""
+
+#: models/__init__.py:1604 views/users.py:371
+msgid "Blocked User"
+msgstr ""
+
+#: models/__init__.py:1606 views/users.py:373
+msgid "Registered User"
+msgstr ""
+
+#: models/__init__.py:1608
+msgid "Watched User"
+msgstr ""
+
+#: models/__init__.py:1610
+msgid "Approved User"
+msgstr ""
+
+#: models/__init__.py:1719
+#, python-format
+msgid "%(username)s karma is %(reputation)s"
+msgstr ""
+
+#: models/__init__.py:1729
+#, python-format
+msgid "one gold badge"
+msgid_plural "%(count)d gold badges"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1736
+#, python-format
+msgid "one silver badge"
+msgid_plural "%(count)d silver badges"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1743
+#, python-format
+msgid "one bronze badge"
+msgid_plural "%(count)d bronze badges"
+msgstr[0] ""
+msgstr[1] ""
+
+#: models/__init__.py:1754
+#, python-format
+msgid "%(item1)s and %(item2)s"
+msgstr ""
+
+#: models/__init__.py:1758
+#, python-format
+msgid "%(user)s has %(badges)s"
+msgstr ""
+
+#: models/__init__.py:2165 models/__init__.py:2171 models/__init__.py:2176
+#: models/__init__.py:2181
+#, python-format
+msgid "Re: \"%(title)s\""
+msgstr ""
+
+#: models/__init__.py:2186 models/__init__.py:2191
+#, python-format
+msgid "Question: \"%(title)s\""
+msgstr ""
+
+#: models/__init__.py:2372
+#, python-format
+msgid ""
+"Congratulations, you have received a badge '%(badge_name)s'. Check out <a "
+"href=\"%(user_profile)s\">your profile</a>."
+msgstr ""
+
+#: models/__init__.py:2551 views/commands.py:396
+msgid "Your tag subscription was saved, thanks!"
+msgstr ""
+
+#: models/answer.py:105
+msgid ""
+"Sorry, the answer you are looking for is no longer available, because the "
+"parent question has been removed"
+msgstr ""
+
+#: models/answer.py:112
+msgid "Sorry, this answer has been removed and is no longer accessible"
+msgstr ""
+
+#: models/badges.py:129
+#, python-format
+msgid "Deleted own post with %(votes)s or more upvotes"
+msgstr ""
+
+#: models/badges.py:133
+msgid "Disciplined"
+msgstr ""
+
+#: models/badges.py:151
+#, python-format
+msgid "Deleted own post with %(votes)s or more downvotes"
+msgstr ""
+
+#: models/badges.py:155
+msgid "Peer Pressure"
+msgstr ""
+
+#: models/badges.py:174
+#, python-format
+msgid "Received at least %(votes)s upvote for an answer for the first time"
+msgstr ""
+
+#: models/badges.py:178
+msgid "Teacher"
+msgstr ""
+
+#: models/badges.py:218
+msgid "Supporter"
+msgstr ""
+
+#: models/badges.py:219
+msgid "First upvote"
+msgstr ""
+
+#: models/badges.py:227
+msgid "Critic"
+msgstr ""
+
+#: models/badges.py:228
+msgid "First downvote"
+msgstr ""
+
+#: models/badges.py:237
+msgid "Civic Duty"
+msgstr ""
+
+#: models/badges.py:238
+#, python-format
+msgid "Voted %(num)s times"
+msgstr ""
+
+#: models/badges.py:252
+#, python-format
+msgid "Answered own question with at least %(num)s up votes"
+msgstr ""
+
+#: models/badges.py:256
+msgid "Self-Learner"
+msgstr ""
+
+#: models/badges.py:304
+msgid "Nice Answer"
+msgstr ""
+
+#: models/badges.py:309 models/badges.py:321 models/badges.py:333
+#, python-format
+msgid "Answer voted up %(num)s times"
+msgstr ""
+
+#: models/badges.py:316
+msgid "Good Answer"
+msgstr ""
+
+#: models/badges.py:328
+msgid "Great Answer"
+msgstr ""
+
+#: models/badges.py:340
+msgid "Nice Question"
+msgstr ""
+
+#: models/badges.py:345 models/badges.py:357 models/badges.py:369
+#, python-format
+msgid "Question voted up %(num)s times"
+msgstr ""
+
+#: models/badges.py:352
+msgid "Good Question"
+msgstr ""
+
+#: models/badges.py:364
+msgid "Great Question"
+msgstr ""
+
+#: models/badges.py:376
+msgid "Student"
+msgstr ""
+
+#: models/badges.py:381
+msgid "Asked first question with at least one up vote"
+msgstr ""
+
+#: models/badges.py:414
+msgid "Popular Question"
+msgstr ""
+
+#: models/badges.py:418 models/badges.py:429 models/badges.py:441
+#, python-format
+msgid "Asked a question with %(views)s views"
+msgstr ""
+
+#: models/badges.py:425
+msgid "Notable Question"
+msgstr ""
+
+#: models/badges.py:436
+msgid "Famous Question"
+msgstr ""
+
+#: models/badges.py:450
+msgid "Asked a question and accepted an answer"
+msgstr ""
+
+#: models/badges.py:453
+msgid "Scholar"
+msgstr ""
+
+#: models/badges.py:495
+msgid "Enlightened"
+msgstr ""
+
+#: models/badges.py:499
+#, python-format
+msgid "First answer was accepted with %(num)s or more votes"
+msgstr ""
+
+#: models/badges.py:507
+msgid "Guru"
+msgstr ""
+
+#: models/badges.py:510
+#, python-format
+msgid "Answer accepted with %(num)s or more votes"
+msgstr ""
+
+#: models/badges.py:518
+#, python-format
+msgid ""
+"Answered a question more than %(days)s days later with at least %(votes)s "
+"votes"
+msgstr ""
+
+#: models/badges.py:525
+msgid "Necromancer"
+msgstr ""
+
+#: models/badges.py:548
+msgid "Citizen Patrol"
+msgstr ""
+
+#: models/badges.py:551
+msgid "First flagged post"
+msgstr ""
+
+#: models/badges.py:563
+msgid "Cleanup"
+msgstr ""
+
+#: models/badges.py:566
+msgid "First rollback"
+msgstr ""
+
+#: models/badges.py:577
+msgid "Pundit"
+msgstr ""
+
+#: models/badges.py:580
+msgid "Left 10 comments with score of 10 or more"
+msgstr ""
+
+#: models/badges.py:612
+msgid "Editor"
+msgstr ""
+
+#: models/badges.py:615
+msgid "First edit"
+msgstr ""
+
+#: models/badges.py:623
+msgid "Associate Editor"
+msgstr ""
+
+#: models/badges.py:627
+#, python-format
+msgid "Edited %(num)s entries"
+msgstr ""
+
+#: models/badges.py:634
+msgid "Organizer"
+msgstr ""
+
+#: models/badges.py:637
+msgid "First retag"
+msgstr ""
+
+#: models/badges.py:644
+msgid "Autobiographer"
+msgstr ""
+
+#: models/badges.py:647
+msgid "Completed all user profile fields"
+msgstr ""
+
+#: models/badges.py:663
+#, python-format
+msgid "Question favorited by %(num)s users"
+msgstr ""
+
+#: models/badges.py:689
+msgid "Stellar Question"
+msgstr ""
+
+#: models/badges.py:698
+msgid "Favorite Question"
+msgstr ""
+
+#: models/badges.py:710
+msgid "Enthusiast"
+msgstr ""
+
+#: models/badges.py:714
+#, python-format
+msgid "Visited site every day for %(num)s days in a row"
+msgstr ""
+
+#: models/badges.py:732
+msgid "Commentator"
+msgstr ""
+
+#: models/badges.py:736
+#, python-format
+msgid "Posted %(num_comments)s comments"
+msgstr ""
+
+#: models/badges.py:752
+msgid "Taxonomist"
+msgstr ""
+
+#: models/badges.py:756
+#, python-format
+msgid "Created a tag used by %(num)s questions"
+msgstr ""
+
+#: models/badges.py:776
+msgid "Expert"
+msgstr ""
+
+#: models/badges.py:779
+msgid "Very active in one tag"
+msgstr ""
+
+#: models/meta.py:112
+msgid ""
+"Sorry, the comment you are looking for is no longer accessible, because the "
+"parent question has been removed"
+msgstr ""
+
+#: models/meta.py:119
+msgid ""
+"Sorry, the comment you are looking for is no longer accessible, because the "
+"parent answer has been removed"
+msgstr ""
+
+#: models/question.py:72
+#, python-format
+msgid "\" and \"%s\""
+msgstr ""
+
+#: models/question.py:75
+msgid "\" and more"
+msgstr ""
+
+#: models/question.py:452
+msgid "Sorry, this question has been deleted and is no longer accessible"
+msgstr ""
+
+#: models/question.py:908
+#, python-format
+msgid "%(author)s modified the question"
+msgstr ""
+
+#: models/question.py:912
+#, python-format
+msgid "%(people)s posted %(new_answer_count)s new answers"
+msgstr ""
+
+#: models/question.py:917
+#, python-format
+msgid "%(people)s commented the question"
+msgstr ""
+
+#: models/question.py:922
+#, python-format
+msgid "%(people)s commented answers"
+msgstr ""
+
+#: models/question.py:924
+#, python-format
+msgid "%(people)s commented an answer"
+msgstr ""
+
+#: models/repute.py:142
+#, python-format
+msgid "<em>Changed by moderator. Reason:</em> %(reason)s"
+msgstr ""
+
+#: models/repute.py:153
+#, python-format
+msgid ""
+"%(points)s points were added for %(username)s's contribution to question %"
+"(question_title)s"
+msgstr ""
+
+#: models/repute.py:158
+#, python-format
+msgid ""
+"%(points)s points were subtracted for %(username)s's contribution to "
+"question %(question_title)s"
+msgstr ""
+
+#: models/tag.py:151
+msgid "interesting"
+msgstr ""
+
+#: models/tag.py:151
+msgid "ignored"
+msgstr ""
+
+#: models/user.py:264
+msgid "Entire forum"
+msgstr ""
+
+#: models/user.py:265
+msgid "Questions that I asked"
+msgstr ""
+
+#: models/user.py:266
+msgid "Questions that I answered"
+msgstr ""
+
+#: models/user.py:267
+msgid "Individually selected questions"
+msgstr ""
+
+#: models/user.py:268
+msgid "Mentions and comment responses"
+msgstr ""
+
+#: models/user.py:271
+msgid "Instantly"
+msgstr ""
+
+#: models/user.py:272
+msgid "Daily"
+msgstr ""
+
+#: models/user.py:273
+msgid "Weekly"
+msgstr ""
+
+#: models/user.py:274
+msgid "No email"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:3
+#: skins/default/templates/404.jinja.html:10
+msgid "Page not found"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:13
+msgid "Sorry, could not find the page you requested."
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:15
+msgid "This might have happened for the following reasons:"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:17
+msgid "this question or answer has been deleted;"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:18
+msgid "url has error - please check it;"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:19
+msgid ""
+"the page you tried to visit is protected or you don't have sufficient "
+"points, see"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:19
+#: skins/default/templates/blocks/footer.html:5
+#: skins/default/templates/blocks/header_meta_links.html:13
+#: skins/default/templates/blocks/question_edit_tips.html:15
+msgid "faq"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:20
+msgid "if you believe this error 404 should not have occured, please"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:21
+msgid "report this problem"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:30
+#: skins/default/templates/500.jinja.html:11
+msgid "back to previous page"
+msgstr ""
+
+#: skins/default/templates/404.jinja.html:31
+#: skins/default/templates/main_page/tab_bar.html:9
+#, fuzzy
+msgid "see all questions"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/404.jinja.html:32
+#, fuzzy
+msgid "see all tags"
+msgstr "Tags"
+
+#: skins/default/templates/500.jinja.html:3
+#: skins/default/templates/500.jinja.html:5
+msgid "Internal server error"
+msgstr ""
+
+#: skins/default/templates/500.jinja.html:8
+msgid "system error log is recorded, error will be fixed as soon as possible"
+msgstr ""
+
+#: skins/default/templates/500.jinja.html:9
+msgid "please report the error to the site administrators if you wish"
+msgstr ""
+
+#: skins/default/templates/500.jinja.html:12
+#, fuzzy
+msgid "see latest questions"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/500.jinja.html:13
+#, fuzzy
+msgid "see tags"
+msgstr "Tags"
+
+#: skins/default/templates/about.html:3 skins/default/templates/about.html:5
+#, python-format
+msgid "About %(site_name)s"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:4
+#: skins/default/templates/answer_edit.html:10
+#, fuzzy
+msgid "Edit answer"
+msgstr "oldest"
+
+#: skins/default/templates/answer_edit.html:10
+#: skins/default/templates/question_edit.html:9
+#: skins/default/templates/question_retag.html:5
+#: skins/default/templates/revisions.html:7
+msgid "back"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:14
+msgid "revision"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:17
+#: skins/default/templates/question_edit.html:16
+msgid "select revision"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:21
+#: skins/default/templates/question_edit.html:27
+msgid "Save edit"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:22
+#: skins/default/templates/close.html:16
+#: skins/default/templates/feedback.html:42
+#: skins/default/templates/question_edit.html:28
+#: skins/default/templates/question_retag.html:22
+#: skins/default/templates/reopen.html:27
+#: skins/default/templates/subscribe_for_tags.html:16
+#: skins/default/templates/authopenid/changeemail.html:38
+#: skins/default/templates/user_profile/user_edit.html:84
+msgid "Cancel"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:60
+#: skins/default/templates/answer_edit.html:63
+#: skins/default/templates/ask.html:46 skins/default/templates/ask.html:49
+#: skins/default/templates/macros.html:698
+#: skins/default/templates/question.html:576
+#: skins/default/templates/question.html:579
+#: skins/default/templates/question_edit.html:72
+#: skins/default/templates/question_edit.html:75
+msgid "hide preview"
+msgstr ""
+
+#: skins/default/templates/answer_edit.html:63
+#: skins/default/templates/ask.html:49
+#: skins/default/templates/question.html:579
+#: skins/default/templates/question_edit.html:75
+msgid "show preview"
+msgstr ""
+
+#: skins/default/templates/ask.html:4
+#, fuzzy
+msgid "Ask a question"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/badge.html:4 skins/default/templates/badge.html:8
+#: skins/default/templates/user_profile/user_recent.html:16
+#: skins/default/templates/user_profile/user_stats.html:110
+#, python-format
+msgid "%(name)s"
+msgstr ""
+
+#: skins/default/templates/badge.html:4
+msgid "Badge"
+msgstr ""
+
+#: skins/default/templates/badge.html:6
+#, python-format
+msgid "Badge \"%(name)s\""
+msgstr ""
+
+#: skins/default/templates/badge.html:8
+#: skins/default/templates/user_profile/user_recent.html:16
+#: skins/default/templates/user_profile/user_stats.html:108
+#, python-format
+msgid "%(description)s"
+msgstr ""
+
+#: skins/default/templates/badge.html:13
+msgid "user received this badge:"
+msgid_plural "users received this badge:"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/badges.html:3
+msgid "Badges summary"
+msgstr "Badges"
+
+#: skins/default/templates/badges.html:5
+#, fuzzy
+msgid "Badges"
+msgstr "Badges"
+
+#: skins/default/templates/badges.html:7
+msgid "Community gives you awards for your questions, answers and votes."
+msgstr ""
+
+#: skins/default/templates/badges.html:8
+#, python-format
+msgid ""
+"Below is the list of available badges and number \n"
+"of times each type of badge has been awarded. Give us feedback at %"
+"(feedback_faq_url)s.\n"
+msgstr ""
+"Below is the list of available badges and number \n"
+" of times each type of badge has been awarded. Have ideas about fun "
+"badges? Please, give us your <a href='%(feedback_faq_url)s'>feedback</a>\n"
+
+#: skins/default/templates/badges.html:35
+msgid "Community badges"
+msgstr "Badge levels"
+
+#: skins/default/templates/badges.html:37
+msgid "gold badge: the highest honor and is very rare"
+msgstr ""
+
+#: skins/default/templates/badges.html:40
+msgid "gold badge description"
+msgstr ""
+"Gold badge is the highest award in this community. To obtain it have to show "
+"profound knowledge and ability in addition to your active participation."
+
+#: skins/default/templates/badges.html:45
+msgid ""
+"silver badge: occasionally awarded for the very high quality contributions"
+msgstr ""
+
+#: skins/default/templates/badges.html:49
+msgid "silver badge description"
+msgstr ""
+"silver badge: occasionally awarded for the very high quality contributions"
+
+#: skins/default/templates/badges.html:52
+msgid "bronze badge: often given as a special honor"
+msgstr ""
+
+#: skins/default/templates/badges.html:56
+msgid "bronze badge description"
+msgstr "bronze badge: often given as a special honor"
+
+#: skins/default/templates/close.html:3 skins/default/templates/close.html:5
+#, fuzzy
+msgid "Close question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/close.html:6
+#, fuzzy
+msgid "Close the question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/close.html:11
+msgid "Reasons"
+msgstr ""
+
+#: skins/default/templates/close.html:15
+msgid "OK to close"
+msgstr ""
+
+#: skins/default/templates/faq.html:3
+#: skins/default/templates/faq_static.html:3
+#: skins/default/templates/faq_static.html:5
+msgid "FAQ"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:5
+msgid "Frequently Asked Questions "
+msgstr ""
+
+#: skins/default/templates/faq_static.html:6
+msgid "What kinds of questions can I ask here?"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:7
+msgid ""
+"Most importanly - questions should be <strong>relevant</strong> to this "
+"community."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:8
+msgid ""
+"Before asking the question - please make sure to use search to see whether "
+"your question has alredy been answered."
+msgstr ""
+"Before you ask - please make sure to search for a similar question. You can "
+"search questions by their title or tags."
+
+#: skins/default/templates/faq_static.html:10
+msgid "What questions should I avoid asking?"
+msgstr "What kinds of questions should be avoided?"
+
+#: skins/default/templates/faq_static.html:11
+msgid ""
+"Please avoid asking questions that are not relevant to this community, too "
+"subjective and argumentative."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:13
+#, fuzzy
+msgid "What should I avoid in my answers?"
+msgstr "What kinds of questions should be avoided?"
+
+#: skins/default/templates/faq_static.html:14
+msgid ""
+"is a Q&A site, not a discussion group. Therefore - please avoid having "
+"discussions in your answers, comment facility allows some space for brief "
+"discussions."
+msgstr ""
+"is a <strong>question and answer</strong> site - <strong>it is not a "
+"discussion group</strong>. Please avoid holding debates in your answers as "
+"they tend to dilute the essense of questions and answers. For the brief "
+"discussions please use commenting facility."
+
+#: skins/default/templates/faq_static.html:15
+msgid "Who moderates this community?"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:16
+msgid "The short answer is: <strong>you</strong>."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:17
+msgid "This website is moderated by the users."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:18
+msgid ""
+"The reputation system allows users earn the authorization to perform a "
+"variety of moderation tasks."
+msgstr ""
+"Karma system allows users to earn rights to perform a variety of moderation "
+"tasks"
+
+#: skins/default/templates/faq_static.html:20
+msgid "How does reputation system work?"
+msgstr "How does karma system work?"
+
+#: skins/default/templates/faq_static.html:21
+msgid "Rep system summary"
+msgstr ""
+"When a question or answer is upvoted, the user who posted them will gain "
+"some points, which are called \"karma points\". These points serve as a "
+"rough measure of the community trust to him/her. Various moderation tasks "
+"are gradually assigned to the users based on those points."
+
+#: skins/default/templates/faq_static.html:22
+#, python-format
+msgid ""
+"For example, if you ask an interesting question or give a helpful answer, "
+"your input will be upvoted. On the other hand if the answer is misleading - "
+"it will be downvoted. Each vote in favor will generate <strong>%"
+"(REP_GAIN_FOR_RECEIVING_UPVOTE)s</strong> points, each vote against will "
+"subtract <strong>%(REP_LOSS_FOR_RECEIVING_DOWNVOTE)s</strong> points. There "
+"is a limit of <strong>%(MAX_REP_GAIN_PER_USER_PER_DAY)s</strong> points that "
+"can be accumulated for a question or answer per day. The table below "
+"explains reputation point requirements for each type of moderation task."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:32
+#: skins/default/templates/user_profile/user_votes.html:13
+msgid "upvote"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:37
+#, fuzzy
+msgid "use tags"
+msgstr "Tags"
+
+#: skins/default/templates/faq_static.html:42
+#, fuzzy
+msgid "add comments"
+msgstr "post a comment"
+
+#: skins/default/templates/faq_static.html:46
+#: skins/default/templates/user_profile/user_votes.html:15
+msgid "downvote"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:49
+#, fuzzy
+msgid " accept own answer to own questions"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: skins/default/templates/faq_static.html:53
+#, fuzzy
+msgid "open and close own questions"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/faq_static.html:57
+#, fuzzy
+msgid "retag other's questions"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/faq_static.html:62
+msgid "edit community wiki questions"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:67
+#, fuzzy
+msgid "\"edit any answer"
+msgstr "answers"
+
+#: skins/default/templates/faq_static.html:71
+#, fuzzy
+msgid "\"delete any comment"
+msgstr "post a comment"
+
+#: skins/default/templates/faq_static.html:74
+msgid "what is gravatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: skins/default/templates/faq_static.html:75
+msgid "gravatar faq info"
+msgstr ""
+"<p>The picture that appears on the users profiles is called "
+"<strong>gravatar</strong> (which means <strong>g</strong>lobally <strong>r</"
+"strong>ecognized <strong>avatar</strong>).</p><p>Here is how it works: a "
+"<strong>cryptographic key</strong> (unbreakable code) is calculated from "
+"your email address. You upload your picture (or your favorite alter ego "
+"image) the website <a href='http://gravatar.com'><strong>gravatar.com</"
+"strong></a> from where we later retreive your image using the key.</"
+"p><p>This way all the websites you trust can show your image next to your "
+"posts and your email address remains private.</p><p>Please "
+"<strong>personalize your account</strong> with an image - just register at "
+"<a href='http://gravatar.com'><strong>gravatar.com</strong></a> (just please "
+"be sure to use the same email address that you used to register with us). "
+"Default image that looks like a kitchen tile is generated automatically.</p>"
+
+#: skins/default/templates/faq_static.html:76
+msgid "To register, do I need to create new password?"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:77
+msgid ""
+"No, you don't have to. You can login through any service that supports "
+"OpenID, e.g. Google, Yahoo, AOL, etc.\""
+msgstr ""
+
+#: skins/default/templates/faq_static.html:78
+#, fuzzy
+msgid "\"Login now!\""
+msgstr "Logout Now"
+
+#: skins/default/templates/faq_static.html:80
+msgid "Why other people can edit my questions/answers?"
+msgstr ""
+
+#: skins/default/templates/faq_static.html:81
+msgid "Goal of this site is..."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:81
+msgid ""
+"So questions and answers can be edited like wiki pages by experienced users "
+"of this site and this improves the overall quality of the knowledge base "
+"content."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:82
+msgid "If this approach is not for you, we respect your choice."
+msgstr ""
+
+#: skins/default/templates/faq_static.html:84
+#, fuzzy
+msgid "Still have questions?"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/faq_static.html:85
+#, python-format
+msgid ""
+"Please ask your question at %(ask_question_url)s, help make our community "
+"better!"
+msgstr ""
+"Please <a href='%(ask_question_url)s'>ask</a> your question, help make our "
+"community better!"
+
+#: skins/default/templates/feedback.html:3
+msgid "Feedback"
+msgstr ""
+
+#: skins/default/templates/feedback.html:5
+msgid "Give us your feedback!"
+msgstr ""
+
+#: skins/default/templates/feedback.html:9
+#, python-format
+msgid ""
+"\n"
+" <span class='big strong'>Dear %(user_name)s</span>, we look forward "
+"to hearing your feedback. \n"
+" Please type and send us your message below.\n"
+" "
+msgstr ""
+
+#: skins/default/templates/feedback.html:16
+msgid ""
+"\n"
+" <span class='big strong'>Dear visitor</span>, we look forward to "
+"hearing your feedback.\n"
+" Please type and send us your message below.\n"
+" "
+msgstr ""
+
+#: skins/default/templates/feedback.html:25
+#, fuzzy
+msgid "(please enter a valid email)"
+msgstr "provide enough details"
+
+#: skins/default/templates/feedback.html:33
+msgid "(this field is required)"
+msgstr ""
+
+#: skins/default/templates/feedback.html:41
+msgid "Send Feedback"
+msgstr ""
+
+#: skins/default/templates/feedback_email.txt:2
+#, python-format
+msgid ""
+"\n"
+"Hello, this is a %(site_title)s forum feedback message.\n"
+msgstr ""
+
+#: skins/default/templates/import_data.html:2
+#: skins/default/templates/import_data.html:4
+msgid "Import StackExchange data"
+msgstr ""
+
+#: skins/default/templates/import_data.html:13
+msgid ""
+"<em>Warning:</em> if your database is not empty, please back it up\n"
+" before attempting this operation."
+msgstr ""
+
+#: skins/default/templates/import_data.html:16
+msgid ""
+"Upload your stackexchange dump .zip file, then wait until\n"
+" the data import completes. This process may take several minutes.\n"
+" Please note that feedback will be printed in plain text.\n"
+" "
+msgstr ""
+
+#: skins/default/templates/import_data.html:25
+msgid "Import data"
+msgstr ""
+
+#: skins/default/templates/import_data.html:27
+msgid ""
+"In the case you experience any difficulties in using this import tool,\n"
+" please try importing your data via command line: <code>python manage."
+"py load_stackexchange path/to/your-data.zip</code>"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:1
+#, python-format
+msgid "<p>Dear %(receiving_user_name)s,</p>"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:3
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s left a <a href=\"%(post_url)s\">new comment</a>:</"
+"p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:8
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s left a <a href=\"%(post_url)s\">new comment</a></"
+"p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:13
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s answered a question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:19
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s posted a new question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:25
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s updated an answer to the question\n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:31
+#, python-format
+msgid ""
+"\n"
+"<p>%(update_author_name)s updated a question \n"
+"<a href=\"%(post_url)s\">%(origin_post_title)s</a></p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:37
+#, python-format
+msgid ""
+"\n"
+"<div>%(content_preview)s</div>\n"
+"<p>Please note - you can easily <a href=\"%(user_subscriptions_url)s"
+"\">change</a>\n"
+"how often you receive these notifications or unsubscribe. Thank you for your "
+"interest in our forum!</p>\n"
+msgstr ""
+
+#: skins/default/templates/instant_notification.html:42
+#, fuzzy
+msgid "<p>Sincerely,<br/>Forum Administrator</p>"
+msgstr ""
+"Sincerely,\n"
+"Q&A Forum Administrator"
+
+#: skins/default/templates/macros.html:25
+#, python-format
+msgid "Share this question on %(site)s"
+msgstr ""
+
+#: skins/default/templates/macros.html:36
+#, python-format
+msgid "follow %(alias)s"
+msgstr ""
+
+#: skins/default/templates/macros.html:39
+#, python-format
+msgid "unfollow %(alias)s"
+msgstr ""
+
+#: skins/default/templates/macros.html:40
+#, python-format
+msgid "following %(alias)s"
+msgstr ""
+
+#: skins/default/templates/macros.html:63
+msgid "karma:"
+msgstr ""
+
+#: skins/default/templates/macros.html:67
+msgid "badges:"
+msgstr ""
+
+#: skins/default/templates/macros.html:143
+#: skins/default/templates/macros.html:144
+msgid "previous"
+msgstr ""
+
+#: skins/default/templates/macros.html:155
+msgid "current page"
+msgstr ""
+
+#: skins/default/templates/macros.html:157
+#: skins/default/templates/macros.html:164
+#, python-format
+msgid "page number %(num)s"
+msgstr "page %(num)s"
+
+#: skins/default/templates/macros.html:168
+msgid "next page"
+msgstr ""
+
+#: skins/default/templates/macros.html:179
+msgid "posts per page"
+msgstr ""
+
+#: skins/default/templates/macros.html:211 templatetags/extra_tags.py:43
+#, python-format
+msgid "%(username)s gravatar image"
+msgstr ""
+
+#: skins/default/templates/macros.html:220
+#, python-format
+msgid "%(username)s's website is %(url)s"
+msgstr ""
+
+#: skins/default/templates/macros.html:232
+#, fuzzy
+msgid "anonymous user"
+msgstr "Sorry, anonymous users cannot vote"
+
+#: skins/default/templates/macros.html:260
+msgid "this post is marked as community wiki"
+msgstr ""
+
+#: skins/default/templates/macros.html:263
+#, python-format
+msgid ""
+"This post is a wiki.\n"
+" Anyone with karma &gt;%(wiki_min_rep)s is welcome to improve it."
+msgstr ""
+
+#: skins/default/templates/macros.html:269
+msgid "asked"
+msgstr ""
+
+#: skins/default/templates/macros.html:271
+#, fuzzy
+msgid "answered"
+msgstr "answers"
+
+#: skins/default/templates/macros.html:273
+msgid "posted"
+msgstr ""
+
+#: skins/default/templates/macros.html:303
+#, fuzzy
+msgid "updated"
+msgstr "Last updated"
+
+#: skins/default/templates/macros.html:379
+#, fuzzy, python-format
+msgid "see questions tagged '%(tag)s'"
+msgstr "Asked"
+
+#: skins/default/templates/macros.html:424 views/readers.py:238
+msgid "view"
+msgid_plural "views"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:441 views/readers.py:235
+msgid "answer"
+msgid_plural "answers"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:452 views/readers.py:232
+msgid "vote"
+msgid_plural "votes"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:491
+#, fuzzy
+msgid "delete this comment"
+msgstr "post a comment"
+
+#: skins/default/templates/macros.html:502
+#: skins/default/templates/question.html:79
+#: skins/default/templates/question.html:235
+#: skins/default/templates/revisions.html:37
+msgid "edit"
+msgstr ""
+
+#: skins/default/templates/macros.html:520
+#: skins/default/templates/macros.html:528
+#: skins/default/templates/question.html:511
+msgid "add comment"
+msgstr "post a comment"
+
+#: skins/default/templates/macros.html:521
+#, python-format
+msgid "see <strong>%(counter)s</strong> more"
+msgid_plural "see <strong>%(counter)s</strong> more"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:523
+#, python-format
+msgid "see <strong>%(counter)s</strong> more comment"
+msgid_plural ""
+"see <strong>%(counter)s</strong> more comments\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:661
+msgid "one of these is required"
+msgstr ""
+
+#: skins/default/templates/macros.html:673
+msgid "(required)"
+msgstr ""
+
+#: skins/default/templates/macros.html:696
+msgid "Toggle the real time Markdown editor preview"
+msgstr ""
+
+#: skins/default/templates/macros.html:708
+#, fuzzy, python-format
+msgid "responses for %(username)s"
+msgstr "Choose screen name"
+
+#: skins/default/templates/macros.html:711
+#, python-format
+msgid "you have a new response"
+msgid_plural "you have %(response_count)s new responses"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/macros.html:714
+msgid "no new responses yet"
+msgstr ""
+
+#: skins/default/templates/macros.html:729
+#: skins/default/templates/macros.html:730
+#, python-format
+msgid "%(new)s new flagged posts and %(seen)s previous"
+msgstr ""
+
+#: skins/default/templates/macros.html:732
+#: skins/default/templates/macros.html:733
+#, python-format
+msgid "%(new)s new flagged posts"
+msgstr ""
+
+#: skins/default/templates/macros.html:738
+#: skins/default/templates/macros.html:739
+#, python-format
+msgid "%(seen)s flagged posts"
+msgstr ""
+
+#: skins/default/templates/main_page.html:11
+#, fuzzy
+msgid "Questions"
+msgstr "Tags"
+
+#: skins/default/templates/privacy.html:3
+#: skins/default/templates/privacy.html:5
+msgid "Privacy policy"
+msgstr ""
+
+#: skins/default/templates/question.html:26
+#: skins/default/templates/question.html:27
+#: skins/default/templates/question.html:42
+#: skins/default/templates/question.html:44
+msgid "i like this post (click again to cancel)"
+msgstr ""
+
+#: skins/default/templates/question.html:29
+#: skins/default/templates/question.html:46
+#: skins/default/templates/question.html:186
+msgid "current number of votes"
+msgstr ""
+
+#: skins/default/templates/question.html:38
+#: skins/default/templates/question.html:39
+#: skins/default/templates/question.html:51
+#: skins/default/templates/question.html:52
+msgid "i dont like this post (click again to cancel)"
+msgstr ""
+
+#: skins/default/templates/question.html:82
+msgid "retag"
+msgstr ""
+
+#: skins/default/templates/question.html:89
+#, fuzzy
+msgid "reopen"
+msgstr "You can safely re-use the same login for all OpenID-enabled websites."
+
+#: skins/default/templates/question.html:93
+msgid "close"
+msgstr ""
+
+#: skins/default/templates/question.html:98
+#: skins/default/templates/question.html:239
+msgid ""
+"report as offensive (i.e containing spam, advertising, malicious text, etc.)"
+msgstr ""
+
+#: skins/default/templates/question.html:99
+#: skins/default/templates/question.html:240
+msgid "flag offensive"
+msgstr ""
+
+#: skins/default/templates/question.html:106
+#: skins/default/templates/question.html:250
+msgid "undelete"
+msgstr ""
+
+#: skins/default/templates/question.html:106
+#: skins/default/templates/question.html:250
+#: skins/default/templates/authopenid/signin.html:166
+msgid "delete"
+msgstr ""
+
+#: skins/default/templates/question.html:143
+#, python-format
+msgid ""
+"The question has been closed for the following reason \"%(close_reason)s\" by"
+msgstr ""
+
+#: skins/default/templates/question.html:145
+#, python-format
+msgid "close date %(closed_at)s"
+msgstr ""
+
+#: skins/default/templates/question.html:151
+#, python-format
+msgid ""
+"\n"
+" %(counter)s Answer:\n"
+" "
+msgid_plural ""
+"\n"
+" %(counter)s Answers:\n"
+" "
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/question.html:159
+msgid "oldest answers will be shown first"
+msgstr ""
+
+#: skins/default/templates/question.html:160
+msgid "oldest answers"
+msgstr "oldest"
+
+#: skins/default/templates/question.html:162
+msgid "newest answers will be shown first"
+msgstr ""
+
+#: skins/default/templates/question.html:163
+msgid "newest answers"
+msgstr "newest"
+
+#: skins/default/templates/question.html:165
+msgid "most voted answers will be shown first"
+msgstr ""
+
+#: skins/default/templates/question.html:166
+msgid "popular answers"
+msgstr "most voted"
+
+#: skins/default/templates/question.html:184
+#: skins/default/templates/question.html:185
+msgid "i like this answer (click again to cancel)"
+msgstr ""
+
+#: skins/default/templates/question.html:195
+#: skins/default/templates/question.html:196
+msgid "i dont like this answer (click again to cancel)"
+msgstr ""
+
+#: skins/default/templates/question.html:204
+#: skins/default/templates/question.html:205
+msgid "mark this answer as favorite (click again to undo)"
+msgstr ""
+
+#: skins/default/templates/question.html:214
+#: skins/default/templates/question.html:215
+#, python-format
+msgid "%(question_author)s has selected this answer as correct"
+msgstr ""
+
+#: skins/default/templates/question.html:230
+msgid "answer permanent link"
+msgstr "permanent link"
+
+#: skins/default/templates/question.html:231
+msgid "permanent link"
+msgstr "link"
+
+#: skins/default/templates/question.html:256
+#, fuzzy
+msgid "swap with question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/question.html:297
+#, python-format
+msgid ""
+"Know someone who can answer? Share a <a href=\"%(question_url)s\">link</a> "
+"to this question via"
+msgstr ""
+
+#: skins/default/templates/question.html:303
+msgid " or"
+msgstr ""
+
+#: skins/default/templates/question.html:305
+msgid "email"
+msgstr ""
+
+#: skins/default/templates/question.html:320
+#: skins/default/templates/question.html:322
+msgid "Notify me once a day when there are any new answers"
+msgstr ""
+"<strong>Notify me</strong> once a day by email when there are any new "
+"answers or updates"
+
+#: skins/default/templates/question.html:324
+msgid "Notify me weekly when there are any new answers"
+msgstr ""
+"<strong>Notify me</strong> weekly when there are any new answers or updates"
+
+#: skins/default/templates/question.html:326
+msgid "Notify me immediately when there are any new answers"
+msgstr ""
+"<strong>Notify me</strong> immediately when there are any new answers or "
+"updates"
+
+#: skins/default/templates/question.html:329
+#, python-format
+msgid ""
+"You can always adjust frequency of email updates from your %(profile_url)s"
+msgstr ""
+"(note: you can always <strong><a href='%(profile_url)s?"
+"sort=email_subscriptions'>change</a></strong> how often you receive updates)"
+
+#: skins/default/templates/question.html:334
+msgid "once you sign in you will be able to subscribe for any updates here"
+msgstr ""
+"<span class='strong'>Here</span> (once you log in) you will be able to sign "
+"up for the periodic email updates about this question."
+
+#: skins/default/templates/question.html:344
+#, fuzzy
+msgid "Login/Signup to Answer"
+msgstr "Login/Signup to Post"
+
+#: skins/default/templates/question.html:352
+#, fuzzy
+msgid "Your answer"
+msgstr "oldest"
+
+#: skins/default/templates/question.html:354
+#, fuzzy
+msgid "Be the first one to answer this question!"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: skins/default/templates/question.html:360
+msgid "you can answer anonymously and then login"
+msgstr ""
+"<span class='strong big'>Please start posting your answer anonymously</span> "
+"- your answer will be saved within the current session and published after "
+"you log in or create a new account. Please try to give a <strong>substantial "
+"answer</strong>, for discussions, <strong>please use comments</strong> and "
+"<strong>please do remember to vote</strong> (after you log in)!"
+
+#: skins/default/templates/question.html:364
+msgid "answer your own question only to give an answer"
+msgstr ""
+"<span class='big strong'>You are welcome to answer your own question</span>, "
+"but please make sure to give an <strong>answer</strong>. Remember that you "
+"can always <strong>revise your original question</strong>. Please "
+"<strong>use comments for discussions</strong> and <strong>please don't "
+"forget to vote :)</strong> for the answers that you liked (or perhaps did "
+"not like)! "
+
+#: skins/default/templates/question.html:366
+msgid "please only give an answer, no discussions"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: skins/default/templates/question.html:373
+msgid "Login/Signup to Post Your Answer"
+msgstr "Login/Signup to Post"
+
+#: skins/default/templates/question.html:376
+#: skins/default/templates/question.html:389
+#, fuzzy
+msgid "Answer Your Own Question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/question.html:378
+msgid "Answer the question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/question.html:397
+#, fuzzy
+msgid "Question tools"
+msgstr "Tags"
+
+#: skins/default/templates/question.html:400
+#, fuzzy
+msgid "click to unfollow this question"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/question.html:401
+msgid "Following"
+msgstr ""
+
+#: skins/default/templates/question.html:402
+msgid "Unfollow"
+msgstr ""
+
+#: skins/default/templates/question.html:406
+#, fuzzy
+msgid "click to follow this question"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/question.html:407
+msgid "Follow"
+msgstr ""
+
+#: skins/default/templates/question.html:414
+#, python-format
+msgid "%(count)s follower"
+msgid_plural "%(count)s followers"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/question.html:420
+#, fuzzy
+msgid "email the updates"
+msgstr "Last updated"
+
+#: skins/default/templates/question.html:423
+msgid ""
+"<strong>Here</strong> (once you log in) you will be able to sign up for the "
+"periodic email updates about this question."
+msgstr ""
+
+#: skins/default/templates/question.html:428
+msgid "subscribe to this question rss feed"
+msgstr ""
+
+#: skins/default/templates/question.html:429
+msgid "subsribe to rss feed"
+msgstr ""
+
+#: skins/default/templates/question.html:438
+msgid "Question tags"
+msgstr "Tags"
+
+#: skins/default/templates/question.html:460
+msgid "Stats:"
+msgstr ""
+
+#: skins/default/templates/question.html:462
+msgid "question asked"
+msgstr "Asked"
+
+#: skins/default/templates/question.html:465
+msgid "question was seen"
+msgstr "Seen"
+
+#: skins/default/templates/question.html:465
+msgid "times"
+msgstr ""
+
+#: skins/default/templates/question.html:468
+msgid "last updated"
+msgstr "Last updated"
+
+#: skins/default/templates/question.html:477
+#, fuzzy
+msgid "Related questions"
+msgstr "Tags"
+
+#: skins/default/templates/question_edit.html:4
+#: skins/default/templates/question_edit.html:9
+#, fuzzy
+msgid "Edit question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/question_retag.html:3
+#: skins/default/templates/question_retag.html:5
+msgid "Change tags"
+msgstr "Retag question"
+
+#: skins/default/templates/question_retag.html:21
+msgid "Retag"
+msgstr ""
+
+#: skins/default/templates/question_retag.html:28
+msgid "Why use and modify tags?"
+msgstr ""
+
+#: skins/default/templates/question_retag.html:30
+msgid "Tags help to keep the content better organized and searchable"
+msgstr ""
+
+#: skins/default/templates/question_retag.html:32
+msgid "tag editors receive special awards from the community"
+msgstr ""
+
+#: skins/default/templates/question_retag.html:59
+msgid "up to 5 tags, less than 20 characters each"
+msgstr ""
+
+#: skins/default/templates/reopen.html:3 skins/default/templates/reopen.html:5
+#, fuzzy
+msgid "Reopen question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/reopen.html:6
+msgid "Title"
+msgstr ""
+
+#: skins/default/templates/reopen.html:11
+#, python-format
+msgid ""
+"This question has been closed by \n"
+" <a href=\"%(closed_by_profile_url)s\">%(closed_by_username)s</a>\n"
+msgstr ""
+
+#: skins/default/templates/reopen.html:16
+msgid "Close reason:"
+msgstr ""
+
+#: skins/default/templates/reopen.html:19
+msgid "When:"
+msgstr ""
+
+#: skins/default/templates/reopen.html:22
+#, fuzzy
+msgid "Reopen this question?"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/reopen.html:26
+#, fuzzy
+msgid "Reopen this question"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/revisions.html:4
+#: skins/default/templates/revisions.html:7
+#, fuzzy
+msgid "Revision history"
+msgstr "karma"
+
+#: skins/default/templates/revisions.html:23
+#, fuzzy
+msgid "click to hide/show revision"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/revisions.html:29
+#, python-format
+msgid "revision %(number)s"
+msgstr ""
+
+#: skins/default/templates/subscribe_for_tags.html:3
+#: skins/default/templates/subscribe_for_tags.html:5
+msgid "Subscribe for tags"
+msgstr ""
+
+#: skins/default/templates/subscribe_for_tags.html:6
+msgid "Please, subscribe for the following tags:"
+msgstr ""
+
+#: skins/default/templates/subscribe_for_tags.html:15
+msgid "Subscribe"
+msgstr ""
+
+#: skins/default/templates/tags.html:4 skins/default/templates/tags.html:11
+msgid "Tag list"
+msgstr "Tags"
+
+#: skins/default/templates/tags.html:9
+#, python-format
+msgid "Tags, matching \"%(stag)s\""
+msgstr ""
+
+#: skins/default/templates/tags.html:19
+msgid "sorted alphabetically"
+msgstr ""
+
+#: skins/default/templates/tags.html:20
+#, fuzzy
+msgid "by name"
+msgstr "date"
+
+#: skins/default/templates/tags.html:25
+msgid "sorted by frequency of tag use"
+msgstr ""
+
+#: skins/default/templates/tags.html:26
+#, fuzzy
+msgid "by popularity"
+msgstr "most voted"
+
+#: skins/default/templates/tags.html:31 skins/default/templates/tags.html:56
+msgid "Nothing found"
+msgstr ""
+
+#: skins/default/templates/users.html:4 skins/default/templates/users.html:7
+msgid "Users"
+msgstr "People"
+
+#: skins/default/templates/users.html:13
+msgid "see people with the highest reputation"
+msgstr ""
+
+#: skins/default/templates/users.html:14
+#: skins/default/templates/user_profile/user_info.html:25
+msgid "reputation"
+msgstr "karma"
+
+#: skins/default/templates/users.html:19
+msgid "see people who joined most recently"
+msgstr ""
+
+#: skins/default/templates/users.html:20
+msgid "recent"
+msgstr ""
+
+#: skins/default/templates/users.html:25
+msgid "see people who joined the site first"
+msgstr ""
+
+#: skins/default/templates/users.html:31
+msgid "see people sorted by name"
+msgstr ""
+
+#: skins/default/templates/users.html:32
+#, fuzzy
+msgid "by username"
+msgstr "Choose screen name"
+
+#: skins/default/templates/users.html:37
+#, python-format
+msgid "users matching query %(suser)s:"
+msgstr ""
+
+#: skins/default/templates/users.html:40
+msgid "Nothing found."
+msgstr ""
+
+#: skins/default/templates/authopenid/changeemail.html:2
+#: skins/default/templates/authopenid/changeemail.html:8
+#: skins/default/templates/authopenid/changeemail.html:36
+msgid "Change email"
+msgstr "Change Email"
+
+#: skins/default/templates/authopenid/changeemail.html:10
+#, fuzzy
+msgid "Save your email address"
+msgstr "Your email <i>(never shared)</i>"
+
+#: skins/default/templates/authopenid/changeemail.html:15
+#, python-format
+msgid "change %(email)s info"
+msgstr ""
+"<span class=\"strong big\">Enter your new email into the box below</span> if "
+"you'd like to use another email for <strong>update subscriptions</strong>."
+"<br>Currently you are using <strong>%(email)s</strong>"
+
+#: skins/default/templates/authopenid/changeemail.html:17
+#, python-format
+msgid "here is why email is required, see %(gravatar_faq_url)s"
+msgstr ""
+"<span class='strong big'>Please enter your email address in the box below.</"
+"span> Valid email address is required on this Q&amp;A forum. If you like, "
+"you can <strong>receive updates</strong> on interesting questions or entire "
+"forum via email. Also, your email is used to create a unique <a href='%"
+"(gravatar_faq_url)s'><strong>gravatar</strong></a> image for your account. "
+"Email addresses are never shown or otherwise shared with anybody else."
+
+#: skins/default/templates/authopenid/changeemail.html:29
+msgid "Your new Email"
+msgstr ""
+"<strong>Your new Email:</strong> (will <strong>not</strong> be shown to "
+"anyone, must be valid)"
+
+#: skins/default/templates/authopenid/changeemail.html:29
+msgid "Your Email"
+msgstr ""
+"<strong>Your Email</strong> (<i>must be valid, never shown to others</i>)"
+
+#: skins/default/templates/authopenid/changeemail.html:36
+#, fuzzy
+msgid "Save Email"
+msgstr "Change Email"
+
+#: skins/default/templates/authopenid/changeemail.html:45
+#, fuzzy
+msgid "Validate email"
+msgstr "How to validate email and why?"
+
+#: skins/default/templates/authopenid/changeemail.html:48
+#, python-format
+msgid "validate %(email)s info or go to %(change_email_url)s"
+msgstr ""
+"<span class=\"strong big\">An email with a validation link has been sent to %"
+"(email)s.</span> Please <strong>follow the emailed link</strong> with your "
+"web browser. Email validation is necessary to help insure the proper use of "
+"email on <span class=\"orange\">Q&amp;A</span>. If you would like to use "
+"<strong>another email</strong>, please <a href='%(change_email_url)"
+"s'><strong>change it again</strong></a>."
+
+#: skins/default/templates/authopenid/changeemail.html:52
+msgid "Email not changed"
+msgstr ""
+
+#: skins/default/templates/authopenid/changeemail.html:55
+#, python-format
+msgid "old %(email)s kept, if you like go to %(change_email_url)s"
+msgstr ""
+"<span class=\"strong big\">Your email address %(email)s has not been changed."
+"</span> If you decide to change it later - you can always do it by editing "
+"it in your user profile or by using the <a href='%(change_email_url)"
+"s'><strong>previous form</strong></a> again."
+
+#: skins/default/templates/authopenid/changeemail.html:59
+msgid "Email changed"
+msgstr ""
+
+#: skins/default/templates/authopenid/changeemail.html:62
+#, python-format
+msgid "your current %(email)s can be used for this"
+msgstr ""
+"<span class='big strong'>Your email address is now set to %(email)s.</span> "
+"Updates on the questions that you like most will be sent to this address. "
+"Email notifications are sent once a day or less frequently - only when there "
+"are any news."
+
+#: skins/default/templates/authopenid/changeemail.html:66
+msgid "Email verified"
+msgstr ""
+
+#: skins/default/templates/authopenid/changeemail.html:69
+msgid "thanks for verifying email"
+msgstr ""
+"<span class=\"big strong\">Thank you for verifying your email!</span> Now "
+"you can <strong>ask</strong> and <strong>answer</strong> questions. Also if "
+"you find a very interesting question you can <strong>subscribe for the "
+"updates</strong> - then will be notified about changes <strong>once a day</"
+"strong> or less frequently."
+
+#: skins/default/templates/authopenid/changeemail.html:73
+msgid "email key not sent"
+msgstr "Validation email not sent"
+
+#: skins/default/templates/authopenid/changeemail.html:76
+#, python-format
+msgid "email key not sent %(email)s change email here %(change_link)s"
+msgstr ""
+"<span class='big strong'>Your current email address %(email)s has been "
+"validated before</span> so the new key was not sent. You can <a href='%"
+"(change_link)s'>change</a> email used for update subscriptions if necessary."
+
+#: skins/default/templates/authopenid/complete.html:21
+#: skins/default/templates/authopenid/complete.html:23
+#, fuzzy
+msgid "Registration"
+msgstr "karma"
+
+#: skins/default/templates/authopenid/complete.html:27
+#, python-format
+msgid "register new %(provider)s account info, see %(gravatar_faq_url)s"
+msgstr ""
+"<p><span class=\"big strong\">You are here for the first time with your %"
+"(provider)s login.</span> Please create your <strong>screen name</strong> "
+"and save your <strong>email</strong> address. Saved email address will let "
+"you <strong>subscribe for the updates</strong> on the most interesting "
+"questions and will be used to create and retrieve your unique avatar image - "
+"<a href='%(gravatar_faq_url)s'><strong>gravatar</strong></a>.</p>"
+
+#: skins/default/templates/authopenid/complete.html:30
+#, python-format
+msgid ""
+"%(username)s already exists, choose another name for \n"
+" %(provider)s. Email is required too, see %"
+"(gravatar_faq_url)s\n"
+" "
+msgstr ""
+"<p><span class='strong big'>Oops... looks like screen name %(username)s is "
+"already used in another account.</span></p><p>Please choose another screen "
+"name to use with your %(provider)s login. Also, a valid email address is "
+"required on the <span class='orange'>Q&amp;A</span> forum. Your email is "
+"used to create a unique <a href='%(gravatar_faq_url)s'><strong>gravatar</"
+"strong></a> image for your account. If you like, you can <strong>receive "
+"updates</strong> on the interesting questions or entire forum by email. "
+"Email addresses are never shown or otherwise shared with anybody else.</p>"
+
+#: skins/default/templates/authopenid/complete.html:34
+#, python-format
+msgid ""
+"register new external %(provider)s account info, see %(gravatar_faq_url)s"
+msgstr ""
+"<p><span class=\"big strong\">You are here for the first time with your %"
+"(provider)s login.</span></p><p>You can either keep your <strong>screen "
+"name</strong> the same as your %(provider)s login name or choose some other "
+"nickname.</p><p>Also, please save a valid <strong>email</strong> address. "
+"With the email you can <strong>subscribe for the updates</strong> on the "
+"most interesting questions. Email address is also used to create and "
+"retrieve your unique avatar image - <a href='%(gravatar_faq_url)"
+"s'><strong>gravatar</strong></a>.</p>"
+
+#: skins/default/templates/authopenid/complete.html:37
+#, python-format
+msgid "register new Facebook connect account info, see %(gravatar_faq_url)s"
+msgstr ""
+"<p><span class=\"big strong\">You are here for the first time with your "
+"Facebook login.</span> Please create your <strong>screen name</strong> and "
+"save your <strong>email</strong> address. Saved email address will let you "
+"<strong>subscribe for the updates</strong> on the most interesting questions "
+"and will be used to create and retrieve your unique avatar image - <a href='%"
+"(gravatar_faq_url)s'><strong>gravatar</strong></a>.</p>"
+
+#: skins/default/templates/authopenid/complete.html:40
+msgid "This account already exists, please use another."
+msgstr ""
+
+#: skins/default/templates/authopenid/complete.html:59
+msgid "Screen name label"
+msgstr "<strong>Screen Name</strong> (<i>will be shown to others</i>)"
+
+#: skins/default/templates/authopenid/complete.html:66
+msgid "Email address label"
+msgstr ""
+"<strong>Email Address</strong> (<i>will <strong>not</strong> be shared with "
+"anyone, must be valid</i>)"
+
+#: skins/default/templates/authopenid/complete.html:72
+#: skins/default/templates/authopenid/signup_with_password.html:36
+msgid "receive updates motivational blurb"
+msgstr ""
+"<strong>Receive forum updates by email</strong> - this will help our "
+"community grow and become more useful.<br/>By default <span "
+"class='orange'>Q&amp;A</span> forum sends up to <strong>one email digest per "
+"week</strong> - only when there is anything new.<br/>If you like, please "
+"adjust this now or any time later from your user account."
+
+#: skins/default/templates/authopenid/complete.html:76
+#: skins/default/templates/authopenid/signup_with_password.html:40
+msgid "please select one of the options above"
+msgstr ""
+
+#: skins/default/templates/authopenid/complete.html:79
+msgid "Tag filter tool will be your right panel, once you log in."
+msgstr ""
+
+#: skins/default/templates/authopenid/complete.html:80
+msgid "create account"
+msgstr "Signup"
+
+#: skins/default/templates/authopenid/confirm_email.txt:1
+msgid "Thank you for registering at our Q&A forum!"
+msgstr ""
+
+#: skins/default/templates/authopenid/confirm_email.txt:3
+msgid "Your account details are:"
+msgstr ""
+
+#: skins/default/templates/authopenid/confirm_email.txt:5
+#, fuzzy
+msgid "Username:"
+msgstr "Choose screen name"
+
+#: skins/default/templates/authopenid/confirm_email.txt:6
+#, fuzzy
+msgid "Password:"
+msgstr "Password"
+
+#: skins/default/templates/authopenid/confirm_email.txt:8
+msgid "Please sign in here:"
+msgstr ""
+
+#: skins/default/templates/authopenid/confirm_email.txt:11
+#: skins/default/templates/authopenid/email_validation.txt:13
+#, fuzzy
+msgid ""
+"Sincerely,\n"
+"Forum Administrator"
+msgstr ""
+"Sincerely,\n"
+"Q&A Forum Administrator"
+
+#: skins/default/templates/authopenid/email_validation.txt:1
+msgid "Greetings from the Q&A forum"
+msgstr ""
+
+#: skins/default/templates/authopenid/email_validation.txt:3
+msgid "To make use of the Forum, please follow the link below:"
+msgstr ""
+
+#: skins/default/templates/authopenid/email_validation.txt:7
+msgid "Following the link above will help us verify your email address."
+msgstr ""
+
+#: skins/default/templates/authopenid/email_validation.txt:9
+msgid ""
+"If you beleive that this message was sent in mistake - \n"
+"no further action is needed. Just ingore this email, we apologize\n"
+"for any inconvenience"
+msgstr ""
+
+#: skins/default/templates/authopenid/logout.html:3
+msgid "Logout"
+msgstr "Sign out"
+
+#: skins/default/templates/authopenid/logout.html:5
+msgid "You have successfully logged out"
+msgstr ""
+
+#: skins/default/templates/authopenid/logout.html:7
+msgid ""
+"However, you still may be logged in to your OpenID provider. Please logout "
+"of your provider if you wish to do so."
+msgstr ""
+
+#: skins/default/templates/authopenid/macros.html:53
+msgid "Please enter your <span>user name</span>, then sign in"
+msgstr ""
+
+#: skins/default/templates/authopenid/macros.html:54
+#: skins/default/templates/authopenid/signin.html:90
+msgid "(or select another login method above)"
+msgstr ""
+
+#: skins/default/templates/authopenid/macros.html:56
+msgid "Sign in"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:4
+msgid "User login"
+msgstr "User login"
+
+#: skins/default/templates/authopenid/signin.html:14
+#, python-format
+msgid ""
+"\n"
+" Your answer to %(title)s %(summary)s will be posted once you log in\n"
+" "
+msgstr ""
+"\n"
+"<span class=\"strong big\">Your answer to </span> <i>\"<strong>%(title)s</"
+"strong> %(summary)s...\"</i> <span class=\"strong big\">is saved and will be "
+"posted once you log in.</span>"
+
+#: skins/default/templates/authopenid/signin.html:21
+#, python-format
+msgid ""
+"Your question \n"
+" %(title)s %(summary)s will be posted once you log in\n"
+" "
+msgstr ""
+"<span class=\"strong big\">Your question</span> <i>\"<strong>%(title)s</"
+"strong> %(summary)s...\"</i> <span class=\"strong big\">is saved and will be "
+"posted once you log in.</span>"
+
+#: skins/default/templates/authopenid/signin.html:28
+msgid ""
+"Take a pick of your favorite service below to sign in using secure OpenID or "
+"similar technology. Your external service password always stays confidential "
+"and you don't have to rememeber or create another one."
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:31
+msgid ""
+"It's a good idea to make sure that your existing login methods still work, "
+"or add a new one. Please click any of the icons below to check/change or add "
+"new login methods."
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:33
+msgid ""
+"Please add a more permanent login method by clicking one of the icons below, "
+"to avoid logging in via email each time."
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:37
+msgid ""
+"Click on one of the icons below to add a new login method or re-validate an "
+"existing one."
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:39
+msgid ""
+"You don't have a method to log in right now, please add one or more by "
+"clicking any of the icons below."
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:42
+msgid ""
+"Please check your email and visit the enclosed link to re-connect to your "
+"account"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:87
+msgid "Please enter your <span>user name and password</span>, then sign in"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:93
+msgid "Login failed, please try again"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:97
+msgid "Login or email"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:101
+#, fuzzy
+msgid "Password"
+msgstr "Password"
+
+#: skins/default/templates/authopenid/signin.html:106
+msgid "Login"
+msgstr "Sign in"
+
+#: skins/default/templates/authopenid/signin.html:113
+msgid "To change your password - please enter the new one twice, then submit"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:117
+#, fuzzy
+msgid "New password"
+msgstr "Password"
+
+#: skins/default/templates/authopenid/signin.html:124
+msgid "Please, retype"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:146
+msgid "Here are your current login methods"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:150
+msgid "provider"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:151
+#, fuzzy
+msgid "last used"
+msgstr "Last updated"
+
+#: skins/default/templates/authopenid/signin.html:152
+msgid "delete, if you like"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:168
+#, fuzzy
+msgid "cannot be deleted"
+msgstr "sorry, but older votes cannot be revoked"
+
+#: skins/default/templates/authopenid/signin.html:181
+msgid "Still have trouble signing in?"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:186
+msgid "Please, enter your email address below and obtain a new key"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:188
+msgid "Please, enter your email address below to recover your account"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:191
+msgid "recover your account via email"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:202
+msgid "Send a new recovery key"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:204
+msgid "Recover your account via email"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:216
+msgid "Why use OpenID?"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:219
+msgid "with openid it is easier"
+msgstr "With the OpenID you don't need to create new username and password."
+
+#: skins/default/templates/authopenid/signin.html:222
+msgid "reuse openid"
+msgstr "You can safely re-use the same login for all OpenID-enabled websites."
+
+#: skins/default/templates/authopenid/signin.html:225
+msgid "openid is widely adopted"
+msgstr ""
+"There are > 160,000,000 OpenID account in use. Over 10,000 sites are OpenID-"
+"enabled."
+
+#: skins/default/templates/authopenid/signin.html:228
+msgid "openid is supported open standard"
+msgstr "OpenID is based on an open standard, supported by many organizations."
+
+#: skins/default/templates/authopenid/signin.html:232
+msgid "Find out more"
+msgstr ""
+
+#: skins/default/templates/authopenid/signin.html:233
+msgid "Get OpenID"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:4
+msgid "Signup"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:10
+msgid "Please register by clicking on any of the icons below"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:23
+msgid "or create a new user name and password here"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:25
+msgid "Create login name and password"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:26
+msgid "Traditional signup info"
+msgstr ""
+"<span class='strong big'>If you prefer, create your forum login name and "
+"password here. However</span>, please keep in mind that we also support "
+"<strong>OpenID</strong> login method. With <strong>OpenID</strong> you can "
+"simply reuse your external login (e.g. Gmail or AOL) without ever sharing "
+"your login details with anyone and having to remember yet another password."
+
+#: skins/default/templates/authopenid/signup_with_password.html:44
+msgid ""
+"Please read and type in the two words below to help us prevent automated "
+"account creation."
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:47
+#, fuzzy
+msgid "Create Account"
+msgstr "Signup"
+
+#: skins/default/templates/authopenid/signup_with_password.html:49
+msgid "or"
+msgstr ""
+
+#: skins/default/templates/authopenid/signup_with_password.html:50
+msgid "return to OpenID login"
+msgstr ""
+
+#: skins/default/templates/avatar/add.html:3
+#, fuzzy
+msgid "add avatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: skins/default/templates/avatar/add.html:5
+#, fuzzy
+msgid "Change avatar"
+msgstr "Retag question"
+
+#: skins/default/templates/avatar/add.html:6
+#: skins/default/templates/avatar/change.html:7
+msgid "Your current avatar: "
+msgstr ""
+
+#: skins/default/templates/avatar/add.html:9
+#: skins/default/templates/avatar/change.html:11
+msgid "You haven't uploaded an avatar yet. Please upload one now."
+msgstr ""
+
+#: skins/default/templates/avatar/add.html:13
+msgid "Upload New Image"
+msgstr ""
+
+#: skins/default/templates/avatar/change.html:4
+#, fuzzy
+msgid "change avatar"
+msgstr "Retag question"
+
+#: skins/default/templates/avatar/change.html:17
+msgid "Choose new Default"
+msgstr ""
+
+#: skins/default/templates/avatar/change.html:22
+msgid "Upload"
+msgstr ""
+
+#: skins/default/templates/avatar/confirm_delete.html:3
+#, fuzzy
+msgid "delete avatar"
+msgstr "How to change my picture (gravatar) and what is gravatar?"
+
+#: skins/default/templates/avatar/confirm_delete.html:5
+msgid "Please select the avatars that you would like to delete."
+msgstr ""
+
+#: skins/default/templates/avatar/confirm_delete.html:7
+#, python-format
+msgid ""
+"You have no avatars to delete. Please <a href=\"%(avatar_change_url)s"
+"\">upload one</a> now."
+msgstr ""
+
+#: skins/default/templates/avatar/confirm_delete.html:13
+msgid "Delete These"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:3
+msgid "answer tips"
+msgstr "Tips"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:6
+msgid "please make your answer relevant to this community"
+msgstr "ask a question interesting to this community"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:9
+#, fuzzy
+msgid "try to give an answer, rather than engage into a discussion"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:12
+msgid "please try to provide details"
+msgstr "provide enough details"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:15
+#: skins/default/templates/blocks/question_edit_tips.html:11
+msgid "be clear and concise"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:19
+#: skins/default/templates/blocks/question_edit_tips.html:15
+#, fuzzy
+msgid "see frequently asked questions"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/blocks/answer_edit_tips.html:25
+#: skins/default/templates/blocks/question_edit_tips.html:20
+msgid "Markdown tips"
+msgstr "Markdown basics"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:29
+#: skins/default/templates/blocks/question_edit_tips.html:24
+msgid "*italic*"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:32
+#: skins/default/templates/blocks/question_edit_tips.html:27
+msgid "**bold**"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:36
+#: skins/default/templates/blocks/question_edit_tips.html:31
+msgid "*italic* or _italic_"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:39
+#: skins/default/templates/blocks/question_edit_tips.html:34
+msgid "**bold** or __bold__"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:43
+#: skins/default/templates/blocks/question_edit_tips.html:38
+#, fuzzy
+msgid "link"
+msgstr "Hi, there! Please sign in"
+
+#: skins/default/templates/blocks/answer_edit_tips.html:43
+#: skins/default/templates/blocks/answer_edit_tips.html:47
+#: skins/default/templates/blocks/question_edit_tips.html:38
+#: skins/default/templates/blocks/question_edit_tips.html:43
+msgid "text"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:47
+#: skins/default/templates/blocks/question_edit_tips.html:43
+msgid "image"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:51
+#: skins/default/templates/blocks/question_edit_tips.html:47
+msgid "numbered list:"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:56
+#: skins/default/templates/blocks/question_edit_tips.html:52
+msgid "basic HTML tags are also supported"
+msgstr ""
+
+#: skins/default/templates/blocks/answer_edit_tips.html:60
+#: skins/default/templates/blocks/question_edit_tips.html:56
+msgid "learn more about Markdown"
+msgstr ""
+
+#: skins/default/templates/blocks/ask_form.html:6
+msgid "login to post question info"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/blocks/ask_form.html:10
+#, fuzzy, python-format
+msgid ""
+"must have valid %(email)s to post, \n"
+" see %(email_validation_faq_url)s\n"
+" "
+msgstr ""
+"<span class='strong big'>Looks like your email address, %(email)s has not "
+"yet been validated.</span> To post messages you must verify your email, "
+"please see <a href='%(email_validation_faq_url)s'>more details here</a>."
+"<br>You can submit your question now and validate email after that. Your "
+"question will saved as pending meanwhile. "
+
+#: skins/default/templates/blocks/ask_form.html:34
+msgid "Login/signup to post your question"
+msgstr "Login/Signup to Post"
+
+#: skins/default/templates/blocks/ask_form.html:36
+msgid "Ask your question"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/blocks/bottom_scripts.html:7
+#, python-format
+msgid ""
+"Please note: %(app_name)s requires javascript to work properly, please "
+"enable javascript in your browser, <a href=\"%(noscript_url)s\">here is how</"
+"a>"
+msgstr ""
+
+#: skins/default/templates/blocks/editor_data.html:5
+#, python-format
+msgid "each tag must be shorter that %(max_chars)s character"
+msgid_plural "each tag must be shorter than %(max_chars)s characters"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/blocks/editor_data.html:7
+#, python-format
+msgid "please use %(tag_count)s tag"
+msgid_plural "please use %(tag_count)s tags or less"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/blocks/editor_data.html:8
+#, python-format
+msgid ""
+"please use up to %(tag_count)s tags, less than %(max_chars)s characters each"
+msgstr ""
+
+#: skins/default/templates/blocks/footer.html:4
+#: skins/default/templates/blocks/header_meta_links.html:12
+msgid "about"
+msgstr ""
+
+#: skins/default/templates/blocks/footer.html:6
+msgid "privacy policy"
+msgstr ""
+
+#: skins/default/templates/blocks/footer.html:15
+msgid "give feedback"
+msgstr ""
+
+#: skins/default/templates/blocks/footer.html:41
+#, python-format
+msgid "Content on this site is licensed under a %(license)s"
+msgstr ""
+
+#: skins/default/templates/blocks/header.html:8
+msgid "back to home page"
+msgstr ""
+
+#: skins/default/templates/blocks/header.html:9
+#, python-format
+msgid "%(site)s logo"
+msgstr ""
+
+#: skins/default/templates/blocks/header.html:20
+#, fuzzy
+msgid "questions"
+msgstr "Consells"
+
+#: skins/default/templates/blocks/header.html:30
+msgid "users"
+msgstr "gent"
+
+#: skins/default/templates/blocks/header.html:35
+msgid "badges"
+msgstr "insígnies"
+
+#: skins/default/templates/blocks/header.html:40
+#, fuzzy
+msgid "ask a question"
+msgstr "La Teva Pregunta"
+
+#: skins/default/templates/blocks/header_meta_links.html:8
+msgid "logout"
+msgstr "sortir"
+
+#: skins/default/templates/blocks/header_meta_links.html:10
+msgid "login"
+msgstr "Registrar-se"
+
+#: skins/default/templates/blocks/header_meta_links.html:15
+msgid "settings"
+msgstr "User login"
+
+#: skins/default/templates/blocks/input_bar.html:34
+msgid "search"
+msgstr "cerca"
+
+#: skins/default/templates/blocks/question_edit_tips.html:3
+msgid "question tips"
+msgstr "Consells"
+
+#: skins/default/templates/blocks/question_edit_tips.html:5
+msgid "please ask a relevant question"
+msgstr "fes una pregunta interessant per a la comunitat"
+
+#: skins/default/templates/blocks/question_edit_tips.html:8
+msgid "please try provide enough details"
+msgstr "dóna detalls suficients"
+
+#: skins/default/templates/blocks/tag_selector.html:4
+msgid "Interesting tags"
+msgstr "Etiquetes interessants"
+
+#: skins/default/templates/blocks/tag_selector.html:18
+#: skins/default/templates/blocks/tag_selector.html:34
+#: skins/default/templates/user_profile/user_moderate.html:40
+msgid "Add"
+msgstr "Afegir"
+
+#: skins/default/templates/blocks/tag_selector.html:20
+#, fuzzy
+msgid "Ignored tags"
+msgstr "Retag question"
+
+#: skins/default/templates/blocks/tag_selector.html:36
+msgid "Display tag filter"
+msgstr "Filtre per etiquetes"
+
+#: skins/default/templates/main_page/content.html:13
+msgid "Did not find what you were looking for?"
+msgstr ""
+
+#: skins/default/templates/main_page/content.html:14
+msgid "Please, post your question!"
+msgstr "Fes la teva pregunta"
+
+#: skins/default/templates/main_page/headline.html:7
+msgid "subscribe to the questions feed"
+msgstr "Post Your Answer"
+
+#: skins/default/templates/main_page/headline.html:8
+msgid "rss feed"
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:12 views/readers.py:131
+#, fuzzy, python-format
+msgid "%(q_num)s question, tagged"
+msgid_plural "%(q_num)s questions, tagged"
+msgstr[0] "Asked"
+msgstr[1] "Asked"
+
+#: skins/default/templates/main_page/headline.html:14 views/readers.py:139
+#, python-format
+msgid "%(q_num)s question"
+msgid_plural "%(q_num)s questions"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/main_page/headline.html:17
+#, python-format
+msgid "with %(author_name)s's contributions"
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:28
+#, fuzzy
+msgid "Search tips:"
+msgstr "Tips"
+
+#: skins/default/templates/main_page/headline.html:31
+msgid "reset author"
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:33
+#: skins/default/templates/main_page/headline.html:36
+#: skins/default/templates/main_page/nothing_found.html:18
+#: skins/default/templates/main_page/nothing_found.html:21
+msgid " or "
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:34
+#, fuzzy
+msgid "reset tags"
+msgstr "Tags"
+
+#: skins/default/templates/main_page/headline.html:37
+#: skins/default/templates/main_page/headline.html:40
+msgid "start over"
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:42
+msgid " - to expand, or dig in by adding more tags and revising the query."
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:45
+msgid "Search tip:"
+msgstr ""
+
+#: skins/default/templates/main_page/headline.html:45
+msgid "add tags and a query to focus your search"
+msgstr ""
+
+#: skins/default/templates/main_page/nothing_found.html:4
+#, fuzzy
+msgid "There are no unanswered questions here"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: skins/default/templates/main_page/nothing_found.html:7
+#, fuzzy
+msgid "No questions here. "
+msgstr "answered question"
+
+#: skins/default/templates/main_page/nothing_found.html:8
+msgid "Please star (bookmark) some questions or follow some users."
+msgstr ""
+
+#: skins/default/templates/main_page/nothing_found.html:13
+msgid "You can expand your search by "
+msgstr ""
+
+#: skins/default/templates/main_page/nothing_found.html:16
+msgid "resetting author"
+msgstr ""
+
+#: skins/default/templates/main_page/nothing_found.html:19
+#, fuzzy
+msgid "resetting tags"
+msgstr "Tags"
+
+#: skins/default/templates/main_page/nothing_found.html:22
+#: skins/default/templates/main_page/nothing_found.html:25
+msgid "starting over"
+msgstr ""
+
+#: skins/default/templates/main_page/nothing_found.html:30
+#, fuzzy
+msgid "Please always feel free to ask your question!"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: skins/default/templates/main_page/sidebar.html:8
+msgid "Contributors"
+msgstr ""
+
+#: skins/default/templates/main_page/sidebar.html:25
+msgid "Related tags"
+msgstr "Tags"
+
+#: skins/default/templates/main_page/tab_bar.html:5
+msgid "In:"
+msgstr ""
+
+#: skins/default/templates/main_page/tab_bar.html:14
+#, fuzzy
+msgid "see unanswered questions"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/main_page/tab_bar.html:20
+#, fuzzy
+msgid "see your followed questions"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/main_page/tab_bar.html:21
+msgid "followed"
+msgstr ""
+
+#: skins/default/templates/main_page/tab_bar.html:25
+msgid "Sort by:"
+msgstr ""
+
+#: skins/default/templates/user_profile/user.html:13
+#, python-format
+msgid "%(username)s's profile"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_edit.html:4
+msgid "Edit user profile"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_edit.html:7
+msgid "edit profile"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_edit.html:17
+#: skins/default/templates/user_profile/user_info.html:15
+#, fuzzy
+msgid "change picture"
+msgstr "Retag question"
+
+#: skins/default/templates/user_profile/user_edit.html:20
+msgid "Registered user"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_edit.html:27
+#, fuzzy
+msgid "Screen Name"
+msgstr "<strong>Screen Name</strong> (<i>will be shown to others</i>)"
+
+#: skins/default/templates/user_profile/user_edit.html:83
+#: skins/default/templates/user_profile/user_email_subscriptions.html:21
+#, fuzzy
+msgid "Update"
+msgstr "date"
+
+#: skins/default/templates/user_profile/user_email_subscriptions.html:4
+#: skins/default/templates/user_profile/user_tabs.html:42
+msgid "subscriptions"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_email_subscriptions.html:7
+#, fuzzy
+msgid "Email subscription settings"
+msgstr ""
+"<span class='big strong'>Adjust frequency of email updates.</span> Receive "
+"updates on interesting questions by email, <strong><br/>help the community</"
+"strong> by answering questions of your colleagues. If you do not wish to "
+"receive emails - select 'no email' on all items below.<br/>Updates are only "
+"sent when there is any new activity on selected items."
+
+#: skins/default/templates/user_profile/user_email_subscriptions.html:8
+msgid "email subscription settings info"
+msgstr ""
+"<span class='big strong'>Adjust frequency of email updates.</span> Receive "
+"updates on interesting questions by email, <strong><br/>help the community</"
+"strong> by answering questions of your colleagues. If you do not wish to "
+"receive emails - select 'no email' on all items below.<br/>Updates are only "
+"sent when there is any new activity on selected items."
+
+#: skins/default/templates/user_profile/user_email_subscriptions.html:22
+msgid "Stop sending email"
+msgstr "Stop Email"
+
+#: skins/default/templates/user_profile/user_favorites.html:4
+#: skins/default/templates/user_profile/user_tabs.html:27
+#, fuzzy
+msgid "followed questions"
+msgstr "Ask Your Question"
+
+#: skins/default/templates/user_profile/user_inbox.html:18
+#: skins/default/templates/user_profile/user_tabs.html:12
+msgid "inbox"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:34
+msgid "Sections:"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:38
+#, python-format
+msgid "forum responses (%(re_count)s)"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:43
+#, python-format
+msgid "flagged items (%(flag_count)s)"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:49
+msgid "select:"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:51
+msgid "seen"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:52
+msgid "new"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:53
+msgid "none"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:54
+msgid "mark as seen"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:55
+msgid "mark as new"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_inbox.html:56
+msgid "dismiss"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:19
+msgid "remove"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:36
+msgid "update profile"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:40
+msgid "manage login methods"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:53
+msgid "real name"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:58
+msgid "member for"
+msgstr "member since"
+
+#: skins/default/templates/user_profile/user_info.html:63
+msgid "last seen"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:69
+msgid "user website"
+msgstr "website"
+
+#: skins/default/templates/user_profile/user_info.html:75
+#, fuzzy
+msgid "location"
+msgstr "Hi, there! Please sign in"
+
+#: skins/default/templates/user_profile/user_info.html:82
+msgid "age"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_info.html:83
+msgid "age unit"
+msgstr "years old"
+
+#: skins/default/templates/user_profile/user_info.html:88
+#, fuzzy
+msgid "todays unused votes"
+msgstr "votes"
+
+#: skins/default/templates/user_profile/user_info.html:89
+msgid "votes left"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:4
+#: skins/default/templates/user_profile/user_tabs.html:48
+#, fuzzy
+msgid "moderation"
+msgstr "karma"
+
+#: skins/default/templates/user_profile/user_moderate.html:8
+#, python-format
+msgid "%(username)s's current status is \"%(status)s\""
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:11
+#, fuzzy
+msgid "User status changed"
+msgstr "User login"
+
+#: skins/default/templates/user_profile/user_moderate.html:20
+msgid "Save"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:26
+#, python-format
+msgid "Your current reputation is %(reputation)s points"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:28
+#, python-format
+msgid "User's current reputation is %(reputation)s points"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:32
+#, fuzzy
+msgid "User reputation changed"
+msgstr "user karma"
+
+#: skins/default/templates/user_profile/user_moderate.html:39
+msgid "Subtract"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:44
+#, python-format
+msgid "Send message to %(username)s"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:45
+msgid ""
+"An email will be sent to the user with 'reply-to' field set to your email "
+"address. Please make sure that your address is entered correctly."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:47
+#, fuzzy
+msgid "Message sent"
+msgstr "years old"
+
+#: skins/default/templates/user_profile/user_moderate.html:65
+msgid "Send message"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:75
+msgid ""
+"Administrators have privileges of normal users, but in addition they can "
+"assign/revoke any status to any user, and are exempt from the reputation "
+"limits."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:78
+msgid ""
+"Moderators have the same privileges as administrators, but cannot add or "
+"remove user status of 'moderator' or 'administrator'."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:81
+msgid "'Approved' status means the same as regular user."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_moderate.html:84
+#, fuzzy
+msgid "Suspended users can only edit or delete their own posts."
+msgstr ""
+"Sorry, your account appears to be suspended and you cannot make new posts "
+"until this issue is resolved. You can, however edit your existing posts. "
+"Please contact the forum administrator to reach a resolution."
+
+#: skins/default/templates/user_profile/user_moderate.html:87
+msgid ""
+"Blocked users can only login and send feedback to the site administrators."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_network.html:5
+#: skins/default/templates/user_profile/user_tabs.html:18
+msgid "network"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_network.html:10
+#, python-format
+msgid "Followed by %(count)s person"
+msgid_plural "Followed by %(count)s people"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_network.html:14
+#, python-format
+msgid "Following %(count)s person"
+msgid_plural "Following %(count)s people"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_network.html:19
+msgid ""
+"Your network is empty. Would you like to follow someone? - Just visit their "
+"profiles and click \"follow\""
+msgstr ""
+
+#: skins/default/templates/user_profile/user_network.html:21
+#, python-format
+msgid "%(username)s's network is empty"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_recent.html:4
+#: skins/default/templates/user_profile/user_tabs.html:31
+#, fuzzy
+msgid "activity"
+msgstr "activity"
+
+#: skins/default/templates/user_profile/user_recent.html:21
+#: skins/default/templates/user_profile/user_recent.html:28
+msgid "source"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_reputation.html:4
+msgid "karma"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_reputation.html:11
+msgid "Your karma change log."
+msgstr ""
+
+#: skins/default/templates/user_profile/user_reputation.html:13
+#, python-format
+msgid "%(user_name)s's karma change log"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:5
+#: skins/default/templates/user_profile/user_tabs.html:7
+msgid "overview"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:11
+#, python-format
+msgid "<span class=\"count\">%(counter)s</span> Question"
+msgid_plural "<span class=\"count\">%(counter)s</span> Questions"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:16
+#, python-format
+msgid "<span class=\"count\">%(counter)s</span> Answer"
+msgid_plural "<span class=\"count\">%(counter)s</span> Answers"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:24
+#, python-format
+msgid "the answer has been voted for %(answer_score)s times"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:24
+msgid "this answer has been selected as correct"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:34
+#, python-format
+msgid "(%(comment_count)s comment)"
+msgid_plural "the answer has been commented %(comment_count)s times"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:44
+#, python-format
+msgid "<span class=\"count\">%(cnt)s</span> Vote"
+msgid_plural "<span class=\"count\">%(cnt)s</span> Votes "
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:50
+msgid "thumb up"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:51
+msgid "user has voted up this many times"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:54
+msgid "thumb down"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:55
+msgid "user voted down this many times"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_stats.html:63
+#, python-format
+msgid "<span class=\"count\">%(counter)s</span> Tag"
+msgid_plural "<span class=\"count\">%(counter)s</span> Tags"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:99
+#, python-format
+msgid "<span class=\"count\">%(counter)s</span> Badge"
+msgid_plural "<span class=\"count\">%(counter)s</span> Badges"
+msgstr[0] ""
+msgstr[1] ""
+
+#: skins/default/templates/user_profile/user_stats.html:122
+#, fuzzy
+msgid "Answer to:"
+msgstr "Tips"
+
+#: skins/default/templates/user_profile/user_tabs.html:5
+#, fuzzy
+msgid "User profile"
+msgstr "User login"
+
+#: skins/default/templates/user_profile/user_tabs.html:10 views/users.py:772
+msgid "comments and answers to others questions"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_tabs.html:16
+msgid "followers and followed users"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_tabs.html:21
+msgid "graph of user reputation"
+msgstr "Graph of user karma"
+
+#: skins/default/templates/user_profile/user_tabs.html:23
+msgid "reputation history"
+msgstr "karma"
+
+#: skins/default/templates/user_profile/user_tabs.html:25
+msgid "questions that user is following"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_tabs.html:29
+#, fuzzy
+msgid "recent activity"
+msgstr "activity"
+
+#: skins/default/templates/user_profile/user_tabs.html:34 views/users.py:847
+msgid "user vote record"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_tabs.html:36
+msgid "casted votes"
+msgstr "votes"
+
+#: skins/default/templates/user_profile/user_tabs.html:40 views/users.py:960
+msgid "email subscription settings"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_tabs.html:46 views/users.py:224
+msgid "moderate this user"
+msgstr ""
+
+#: skins/default/templates/user_profile/user_votes.html:4
+#, fuzzy
+msgid "votes"
+msgstr "votes"
+
+#: templatetags/extra_filters.py:145 templatetags/extra_filters_jinja.py:240
+msgid "no items in counter"
+msgstr "no"
+
+#: utils/decorators.py:90 views/commands.py:112 views/commands.py:132
+msgid "Oops, apologies - there was some error"
+msgstr ""
+
+#: utils/decorators.py:109
+msgid "Please login to post"
+msgstr ""
+
+#: utils/decorators.py:205
+msgid "Spam was detected on your post, sorry for if this is a mistake"
+msgstr ""
+
+#: utils/forms.py:32
+msgid "this field is required"
+msgstr ""
+
+#: utils/forms.py:46
+msgid "choose a username"
+msgstr "Choose screen name"
+
+#: utils/forms.py:52
+msgid "user name is required"
+msgstr ""
+
+#: utils/forms.py:53
+msgid "sorry, this name is taken, please choose another"
+msgstr ""
+
+#: utils/forms.py:54
+msgid "sorry, this name is not allowed, please choose another"
+msgstr ""
+
+#: utils/forms.py:55
+msgid "sorry, there is no user with this name"
+msgstr ""
+
+#: utils/forms.py:56
+msgid "sorry, we have a serious error - user name is taken by several users"
+msgstr ""
+
+#: utils/forms.py:57
+msgid "user name can only consist of letters, empty space and underscore"
+msgstr ""
+
+#: utils/forms.py:118
+msgid "your email address"
+msgstr "Your email <i>(never shared)</i>"
+
+#: utils/forms.py:119
+msgid "email address is required"
+msgstr ""
+
+#: utils/forms.py:120
+msgid "please enter a valid email address"
+msgstr ""
+
+#: utils/forms.py:121
+msgid "this email is already used by someone else, please choose another"
+msgstr ""
+
+#: utils/forms.py:149
+msgid "choose password"
+msgstr "Password"
+
+#: utils/forms.py:150
+msgid "password is required"
+msgstr ""
+
+#: utils/forms.py:153
+msgid "retype password"
+msgstr "Password <i>(please retype)</i>"
+
+#: utils/forms.py:154
+msgid "please, retype your password"
+msgstr ""
+
+#: utils/forms.py:155
+msgid "sorry, entered passwords did not match, please try again"
+msgstr ""
+
+#: utils/functions.py:74
+msgid "2 days ago"
+msgstr ""
+
+#: utils/functions.py:76
+msgid "yesterday"
+msgstr ""
+
+#: utils/functions.py:79
+#, python-format
+msgid "%(hr)d hour ago"
+msgid_plural "%(hr)d hours ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: utils/functions.py:85
+#, python-format
+msgid "%(min)d min ago"
+msgid_plural "%(min)d mins ago"
+msgstr[0] ""
+msgstr[1] ""
+
+#: views/avatar_views.py:99
+msgid "Successfully uploaded a new avatar."
+msgstr ""
+
+#: views/avatar_views.py:140
+msgid "Successfully updated your avatar."
+msgstr ""
+
+#: views/avatar_views.py:180
+msgid "Successfully deleted the requested avatars."
+msgstr ""
+
+#: views/commands.py:39
+msgid "anonymous users cannot vote"
+msgstr "Sorry, anonymous users cannot vote"
+
+#: views/commands.py:59
+msgid "Sorry you ran out of votes for today"
+msgstr ""
+
+#: views/commands.py:65
+#, python-format
+msgid "You have %(votes_left)s votes left for today"
+msgstr ""
+
+#: views/commands.py:122
+msgid "Sorry, but anonymous users cannot access the inbox"
+msgstr ""
+
+#: views/commands.py:192
+msgid "Sorry, something is not right here..."
+msgstr ""
+
+#: views/commands.py:207
+msgid "Sorry, but anonymous users cannot accept answers"
+msgstr ""
+
+#: views/commands.py:288
+#, python-format
+msgid "subscription saved, %(email)s needs validation, see %(details_url)s"
+msgstr ""
+"Your subscription is saved, but email address %(email)s needs to be "
+"validated, please see <a href='%(details_url)s'>more details here</a>"
+
+#: views/commands.py:295
+msgid "email update frequency has been set to daily"
+msgstr ""
+
+#: views/commands.py:400
+#, python-format
+msgid "Tag subscription was canceled (<a href=\"%(url)s\">undo</a>)."
+msgstr ""
+
+#: views/commands.py:409
+#, python-format
+msgid "Please sign in to subscribe for: %(tags)s"
+msgstr ""
+
+#: views/commands.py:542
+msgid "Please sign in to vote"
+msgstr ""
+
+#: views/meta.py:83
+msgid "Q&A forum feedback"
+msgstr ""
+
+#: views/meta.py:84
+msgid "Thanks for the feedback!"
+msgstr ""
+
+#: views/meta.py:92
+msgid "We look forward to hearing your feedback! Please, give it next time :)"
+msgstr ""
+
+#: views/readers.py:177
+#, python-format
+msgid "%(badge_count)d %(badge_level)s badge"
+msgid_plural "%(badge_count)d %(badge_level)s badges"
+msgstr[0] ""
+msgstr[1] ""
+
+#: views/readers.py:440
+msgid ""
+"Sorry, the comment you are looking for has been deleted and is no longer "
+"accessible"
+msgstr ""
+
+#: views/users.py:225
+msgid "moderate user"
+msgstr ""
+
+#: views/users.py:380
+msgid "user profile"
+msgstr ""
+
+#: views/users.py:381
+msgid "user profile overview"
+msgstr ""
+
+#: views/users.py:685
+msgid "recent user activity"
+msgstr ""
+
+#: views/users.py:686
+msgid "profile - recent activity"
+msgstr ""
+
+#: views/users.py:773
+msgid "profile - responses"
+msgstr ""
+
+#: views/users.py:848
+msgid "profile - votes"
+msgstr ""
+
+#: views/users.py:883
+msgid "user reputation in the community"
+msgstr "user karma"
+
+#: views/users.py:884
+msgid "profile - user reputation"
+msgstr "Profile - User's Karma"
+
+#: views/users.py:911
+msgid "users favorite questions"
+msgstr ""
+
+#: views/users.py:912
+msgid "profile - favorite questions"
+msgstr ""
+
+#: views/users.py:932 views/users.py:936
+msgid "changes saved"
+msgstr ""
+
+#: views/users.py:942
+msgid "email updates canceled"
+msgstr ""
+
+#: views/users.py:961
+msgid "profile - email subscriptions"
+msgstr ""
+
+#: views/writers.py:58
+msgid "Sorry, anonymous users cannot upload files"
+msgstr ""
+
+#: views/writers.py:68
+#, python-format
+msgid "allowed file types are '%(file_types)s'"
+msgstr ""
+
+#: views/writers.py:91
+#, python-format
+msgid "maximum upload file size is %(file_size)sK"
+msgstr ""
+
+#: views/writers.py:99
+msgid "Error uploading file. Please contact the site administrator. Thank you."
+msgstr ""
+
+#: views/writers.py:191
+#, fuzzy
+msgid "Please log in to ask questions"
+msgstr ""
+"<span class=\"strong big\">You are welcome to start submitting your question "
+"anonymously</span>. When you submit the post, you will be redirected to the "
+"login/signup page. Your question will be saved in the current session and "
+"will be published after you log in. Login/signup process is very simple. "
+"Login takes about 30 seconds, initial signup takes a minute or less."
+
+#: views/writers.py:492
+#, fuzzy
+msgid "Please log in to answer questions"
+msgstr ""
+"<span class='big strong'>Please try to give a substantial answer</span>. If "
+"you wanted to comment on the question or answer, just <strong>use the "
+"commenting tool</strong>. Please remember that you can always <strong>revise "
+"your answers</strong> - no need to answer the same question twice. Also, "
+"please <strong>don't forget to vote</strong> - it really helps to select the "
+"best questions and answers!"
+
+#: views/writers.py:598
+#, python-format
+msgid ""
+"Sorry, you appear to be logged out and cannot post comments. Please <a href="
+"\"%(sign_in_url)s\">sign in</a>."
+msgstr ""
+
+#: views/writers.py:646
+msgid "Sorry, anonymous users cannot edit comments"
+msgstr ""
+
+#: views/writers.py:654
+#, python-format
+msgid ""
+"Sorry, you appear to be logged out and cannot delete comments. Please <a "
+"href=\"%(sign_in_url)s\">sign in</a>."
+msgstr ""
+
+#: views/writers.py:675
+msgid "sorry, we seem to have some technical difficulties"
+msgstr ""
+
+#~ msgid ""
+#~ "As a registered user you can login with your OpenID, log out of the site "
+#~ "or permanently remove your account."
+#~ msgstr ""
+#~ "Clicking <strong>Logout</strong> will log you out from the forum but will "
+#~ "not sign you off from your OpenID provider.</p><p>If you wish to sign off "
+#~ "completely - please make sure to log out from your OpenID provider as "
+#~ "well."
+
+#~ msgid "Email verification subject line"
+#~ msgstr "Verification Email from Q&A forum"
+
+#~ msgid ""
+#~ "how to validate email info with %(send_email_key_url)s %(gravatar_faq_url)"
+#~ "s"
+#~ msgstr ""
+#~ "<form style='margin:0;padding:0;' action='%(send_email_key_url)"
+#~ "s'><p><span class=\"bigger strong\">How?</span> If you have just set or "
+#~ "changed your email address - <strong>check your email and click the "
+#~ "included link</strong>.<br>The link contains a key generated specifically "
+#~ "for you. You can also <button style='display:inline' "
+#~ "type='submit'><strong>get a new key</strong></button> and check your "
+#~ "email again.</p></form><span class=\"bigger strong\">Why?</span> Email "
+#~ "validation is required to make sure that <strong>only you can post "
+#~ "messages</strong> on your behalf and to <strong>minimize spam</strong> "
+#~ "posts.<br>With email you can <strong>subscribe for updates</strong> on "
+#~ "the most interesting questions. Also, when you sign up for the first time "
+#~ "- create a unique <a href='%(gravatar_faq_url)s'><strong>gravatar</"
+#~ "strong></a> personal image.</p>"
+
+#~ msgid "reputation points"
+#~ msgstr "karma"
diff --git a/askbot/locale/ca/LC_MESSAGES/djangojs.mo b/askbot/locale/ca/LC_MESSAGES/djangojs.mo
new file mode 100644
index 00000000..8173f0d9
--- /dev/null
+++ b/askbot/locale/ca/LC_MESSAGES/djangojs.mo
Binary files differ
diff --git a/askbot/locale/ca/LC_MESSAGES/djangojs.po b/askbot/locale/ca/LC_MESSAGES/djangojs.po
new file mode 100644
index 00000000..ffda3b54
--- /dev/null
+++ b/askbot/locale/ca/LC_MESSAGES/djangojs.po
@@ -0,0 +1,65 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: 0.7\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2011-10-08 02:25-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
+
+#: skins/default/media/js/post.js:532
+msgid "Follow"
+msgstr ""
+
+#: skins/default/media/js/post.js:541 skins/default/media/js/post.js.py:550
+#, perl-format
+msgid "%s follower"
+msgid_plural "%s followers"
+msgstr[0] "%s seguidor"
+msgstr[1] "%s seguidors"
+
+#: skins/default/media/js/post.js:546
+msgid "<div>Following</div><div class=\"unfollow\">Unfollow</div>"
+msgstr "<div>Seguint</div><div class=\"unfollow\">Deixar de seguir</div>"
+
+#: skins/default/media/js/post.js:1613
+msgid "Please enter question title (>10 characters)"
+msgstr "Títol de la pregunta (més de 10 caràcters)"
+
+#: skins/default/media/js/tag_selector.js:15
+msgid "Tag \"<span></span>\" matches:"
+msgstr "Coincidències de la etiqueta:"
+
+#: skins/default/media/js/tag_selector.js:84
+#, perl-format
+msgid "and %s more, not shown..."
+msgstr "i %s més què no es mostren ..."
+
+#: skins/default/media/js/user.js:129
+msgid "Please <a href=\"%(signin_url)s\">signin</a> to follow %(username)s"
+msgstr "<a href=\"%(signin_url)s\">Entrar</a> per seguir a %(username)s"
+
+#: skins/default/media/js/user.js:161
+#, perl-format
+msgid "unfollow %s"
+msgstr "deixar de seguir a %s"
+
+#: skins/default/media/js/user.js:164
+#, perl-format
+msgid "following %s"
+msgstr "seguint a %s"
+
+#: skins/default/media/js/user.js:170
+#, perl-format
+msgid "follow %s"
+msgstr "seguir a %s"
diff --git a/askbot/locale/de/LC_MESSAGES/django.mo b/askbot/locale/de/LC_MESSAGES/django.mo
index 668a17c4..e54c459f 100644
--- a/askbot/locale/de/LC_MESSAGES/django.mo
+++ b/askbot/locale/de/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/de/LC_MESSAGES/django.po b/askbot/locale/de/LC_MESSAGES/django.po
index c072aa70..abeee17f 100644
--- a/askbot/locale/de/LC_MESSAGES/django.po
+++ b/askbot/locale/de/LC_MESSAGES/django.po
@@ -2344,7 +2344,7 @@ msgstr "registrieren/"
#: deps/django_authopenid/urls.py:21
msgid "signup/"
-msgstr "registrieren/"
+msgstr ""
#: deps/django_authopenid/urls.py:25
msgid "logout/"
diff --git a/askbot/locale/en/LC_MESSAGES/django.mo b/askbot/locale/en/LC_MESSAGES/django.mo
index 1f065123..e1f4a2e9 100644
--- a/askbot/locale/en/LC_MESSAGES/django.mo
+++ b/askbot/locale/en/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/en/LC_MESSAGES/djangojs.mo b/askbot/locale/en/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 9a8ed36a..00000000
--- a/askbot/locale/en/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/askbot/locale/en/LC_MESSAGES/djangojs.po b/askbot/locale/en/LC_MESSAGES/djangojs.po
index eeb7f787..c71a38da 100644
--- a/askbot/locale/en/LC_MESSAGES/djangojs.po
+++ b/askbot/locale/en/LC_MESSAGES/djangojs.po
@@ -161,7 +161,7 @@ msgstr[1] ""
#: skins/common/media/js/post.js:551 skins/old/media/js/post.js:549
msgid "<div>Following</div><div class=\"unfollow\">Unfollow</div>"
-msgstr "<b>Following</b><b class=\"unfollow\">Unfollow</b>"
+msgstr "<div>Following</div><div class=\"unfollow\">Unfollow</div>"
#: skins/common/media/js/post.js:613
msgid "undelete"
diff --git a/askbot/locale/fi/LC_MESSAGES/django.mo b/askbot/locale/fi/LC_MESSAGES/django.mo
index cbd57018..e4142187 100644
--- a/askbot/locale/fi/LC_MESSAGES/django.mo
+++ b/askbot/locale/fi/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/fr/LC_MESSAGES/django.mo b/askbot/locale/fr/LC_MESSAGES/django.mo
index 1fe00ef0..709cd9e9 100644
--- a/askbot/locale/fr/LC_MESSAGES/django.mo
+++ b/askbot/locale/fr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/it/LC_MESSAGES/django.mo b/askbot/locale/it/LC_MESSAGES/django.mo
index 6cbc8fac..41294308 100644
--- a/askbot/locale/it/LC_MESSAGES/django.mo
+++ b/askbot/locale/it/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/it/LC_MESSAGES/django.po b/askbot/locale/it/LC_MESSAGES/django.po
index 8b647103..29ae14a1 100644
--- a/askbot/locale/it/LC_MESSAGES/django.po
+++ b/askbot/locale/it/LC_MESSAGES/django.po
@@ -7,48 +7,44 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.7\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-10-18 00:12+0200\n"
-"PO-Revision-Date: 2010-08-25 06:29\n"
-"Last-Translator: <fph@ngi.it>\n"
+"POT-Creation-Date: 2011-11-18 19:14+0100\n"
+"PO-Revision-Date: 2011-11-19 11:27\n"
+"Last-Translator: <tapion@pdp.linux.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
+"Language: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
-"Language: \n"
"X-Translated-Using: django-rosetta 0.5.6\n"
"Plural-Forms: nplurals=2; plural=n != 1;\n"
#: exceptions.py:13
-#, fuzzy
msgid "Sorry, but anonymous visitors cannot access this function"
-msgstr "mi spiace, devi essere registrato per accettare una risposta"
+msgstr "Mi spiace, ma devi essere registrato per usare questa funzionalità"
#: feed.py:26 feed.py:100
msgid " - "
-msgstr "-"
+msgstr " - "
#: feed.py:26
-#, fuzzy
msgid "Individual question feed"
-msgstr "Domande selezionate individualmente"
+msgstr "Feed di un'unica domanda"
#: feed.py:100
msgid "latest questions"
msgstr "domande recenti"
#: forms.py:74
-#, fuzzy
msgid "select country"
-msgstr "Cancella il tuo utente"
+msgstr "scegli lo Stato"
#: forms.py:83
msgid "Country"
-msgstr ""
+msgstr "Paese"
#: forms.py:91
-#, fuzzy
msgid "Country field is required"
-msgstr "campo obbligatorio"
+msgstr "Il campo Stato è obbligatorio"
#: forms.py:104
msgid "title"
@@ -95,7 +91,7 @@ msgstr[1] "per favore usa un numero uguale o inferiore a %(tag_count)d tags"
#: forms.py:181
#, python-format
msgid "At least one of the following tags is required : %(tags)s"
-msgstr ""
+msgstr "Devi inserire almeno uno di questi tag: %(tags)s"
#: forms.py:190
#, python-format
@@ -110,7 +106,7 @@ msgstr "usa-questi-caratteri-nei-tag"
#: forms.py:233
msgid "community wiki (karma is not awarded & many others can edit wiki post)"
-msgstr ""
+msgstr "wiki della comunità (il karma non è ricompensato & molti altri possono modificare le pagine del wiki)"
#: forms.py:234
msgid ""
@@ -134,30 +130,29 @@ msgstr ""
#: forms.py:327
msgid "Enter number of points to add or subtract"
-msgstr "inserisci un numero di punti da aggiungere o rimuovere"
+msgstr "Inserisci un numero di punti da aggiungere o rimuovere"
-#: forms.py:341 const/__init__.py:245
+#: forms.py:341 const/__init__.py:250
msgid "approved"
msgstr "approvato"
-#: forms.py:342 const/__init__.py:246
+#: forms.py:342 const/__init__.py:251
msgid "watched"
msgstr "osservato"
-#: forms.py:343 const/__init__.py:247
+#: forms.py:343 const/__init__.py:252
msgid "suspended"
msgstr "sospeso"
-#: forms.py:344 const/__init__.py:248
+#: forms.py:344 const/__init__.py:253
msgid "blocked"
msgstr "bloccato"
#: forms.py:346
-#, fuzzy
msgid "administrator"
-msgstr "Amministratore del sito"
+msgstr "Amministratore"
-#: forms.py:347 const/__init__.py:244
+#: forms.py:347 const/__init__.py:249
msgid "moderator"
msgstr "moderatore"
@@ -182,16 +177,15 @@ msgid "Cannot change status of another moderator"
msgstr "Non è possibile cambiare lo stato di un altro moderatore"
#: forms.py:434
-#, fuzzy
msgid "Cannot change status to admin"
-msgstr "Non è possibile cambiare il proprio stato"
+msgstr "Non è possibile cambiare il proprio stato ad amministratore"
#: forms.py:440
-#, fuzzy, python-format
+#, python-format
msgid ""
"If you wish to change %(username)s's status, please make a meaningful "
"selection."
-msgstr "Se desideri cambiare lo stato di %(username)s, "
+msgstr "Se desideri cambiare lo stato di %(username)s, per piacere fai una selezione sensata."
#: forms.py:449
msgid "Subject line"
@@ -214,41 +208,43 @@ msgid "Your message:"
msgstr "Il tuo messaggio:"
#: forms.py:581
-#, fuzzy
msgid "ask anonymously"
-msgstr "utente non registrato"
+msgstr "chiedi come utente anonimo"
#: forms.py:583
msgid "Check if you do not want to reveal your name when asking this question"
-msgstr ""
+msgstr "Controlla se non vuoi rivelare il tuo nome quando fai questa domanda"
#: forms.py:743
msgid ""
"You have asked this question anonymously, if you decide to reveal your "
"identity, please check this box."
-msgstr ""
+msgstr "Hai posto questa domanda in modo anonimo. se decidi di rivelare la tua "
+"identità, per favore seleziona questo campo."
#: forms.py:747
msgid "reveal identity"
-msgstr ""
+msgstr "rivela l'identità"
#: forms.py:805
msgid ""
"Sorry, only owner of the anonymous question can reveal his or her identity, "
"please uncheck the box"
-msgstr ""
+msgstr "Spiacenti, solo il proprietario della domanda anonima può rivelare la sua identità, "
+"per favore togli la spunta dal campo"
#: forms.py:818
msgid ""
"Sorry, apparently rules have just changed - it is no longer possible to ask "
"anonymously. Please either check the \"reveal identity\" box or reload this "
"page and try editing the question again."
-msgstr ""
+msgstr "Spiacenti, sembra che le regole siano cambiate e che non è più possibile "
+"porre domande anonime. Controlla il box \"rivela identità\" oppure ricarica questa "
+"pagina e prova a modificare la domanda ancora"
#: forms.py:856
-#, fuzzy
msgid "this email will be linked to gravatar"
-msgstr "questa email non deve essere linkata al gravatar"
+msgstr "questa email verrà linkata a gravatar"
#: forms.py:863
msgid "Real name"
@@ -260,11 +256,11 @@ msgstr "Sito web"
#: forms.py:877
msgid "City"
-msgstr ""
+msgstr "Città"
#: forms.py:886
msgid "Show country"
-msgstr ""
+msgstr "Mostra paese"
#: forms.py:891
msgid "Date of birth"
@@ -323,410 +319,421 @@ msgstr "no askbot email please, thanks"
msgid "please choose one of the options above"
msgstr "per favore scegli una delle opzioni soprariportate"
-#: urls.py:53
+#: urls.py:57
msgid "about/"
msgstr "about/"
-#: urls.py:54
+#: urls.py:58
msgid "faq/"
msgstr "faq/"
-#: urls.py:55
+#: urls.py:59
msgid "privacy/"
msgstr "privacy/"
-#: urls.py:57 urls.py:62
+#: urls.py:61 urls.py:66
msgid "answers/"
msgstr "risposte/"
-#: urls.py:57 urls.py:83 urls.py:203
+#: urls.py:61 urls.py:87 urls.py:207
msgid "edit/"
msgstr "modifica/"
-#: urls.py:62 urls.py:113
+#: urls.py:66 urls.py:117
msgid "revisions/"
msgstr "revisioni/"
-#: urls.py:68 urls.py:78 urls.py:83 urls.py:88 urls.py:93 urls.py:98
-#: urls.py:103 urls.py:108 urls.py:113 urls.py:290
+#: urls.py:72 urls.py:82 urls.py:87 urls.py:92 urls.py:97 urls.py:102
+#: urls.py:107 urls.py:112 urls.py:117 urls.py:294
msgid "questions/"
msgstr "domande/"
-#: urls.py:78
+#: urls.py:82
msgid "ask/"
msgstr "chiedi/"
-#: urls.py:88
+#: urls.py:92
msgid "retag/"
msgstr "retag/"
-#: urls.py:93
+#: urls.py:97
msgid "close/"
msgstr "chiudi/"
-#: urls.py:98
+#: urls.py:102
msgid "reopen/"
msgstr "riapri/"
-#: urls.py:103
+#: urls.py:107
msgid "answer/"
msgstr "rispondi/"
-#: urls.py:108
+#: urls.py:112
msgid "vote/"
msgstr "vota/"
-#: urls.py:149
+#: urls.py:153
msgid "tags/"
msgstr "tag/"
-#: urls.py:192
+#: urls.py:196
msgid "subscribe-for-tags/"
-msgstr ""
+msgstr "iscrivi-per-tag/"
-#: urls.py:197 urls.py:203 urls.py:209 urls.py:217
+#: urls.py:201 urls.py:207 urls.py:213 urls.py:221
msgid "users/"
msgstr "utenti/"
-#: urls.py:210
-#, fuzzy
+#: urls.py:214
msgid "subscriptions/"
-msgstr "notifiche"
+msgstr "iscrizioni/"
-#: urls.py:222
+#: urls.py:226
msgid "users/update_has_custom_avatar/"
-msgstr ""
+msgstr "utenti/aggiornamenti_ha_avatar_personalizzzato"
-#: urls.py:227 urls.py:232
+#: urls.py:231 urls.py:236
msgid "badges/"
msgstr "badges/"
-#: urls.py:237
+#: urls.py:241
msgid "messages/"
msgstr "messaggi/"
-#: urls.py:237
+#: urls.py:241
msgid "markread/"
msgstr "segnacomeletto/"
-#: urls.py:253
+#: urls.py:257
msgid "upload/"
msgstr "upload/"
-#: urls.py:254
+#: urls.py:258
msgid "feedback/"
msgstr "contatti/"
-#: urls.py:296
+#: urls.py:300
msgid "question/"
msgstr "domanda/"
-#: urls.py:303 setup_templates/settings.py:203
+#: urls.py:307 setup_templates/settings.py:205
msgid "account/"
msgstr "account/"
-#: conf/badges.py:12
-#, fuzzy
+#: conf/badges.py:13
msgid "Badge settings"
-msgstr "Impostazioni base"
+msgstr "Impostazioni del badge"
-#: conf/badges.py:21
+#: conf/badges.py:23
msgid "Disciplined: minimum upvotes for deleted post"
-msgstr ""
+msgstr "Moderato: voti positivi minimi per il post cancellato"
-#: conf/badges.py:30
+#: conf/badges.py:32
msgid "Peer Pressure: minimum downvotes for deleted post"
-msgstr ""
+msgstr "Pressione tra pari: voti negativi minimi per i contenuti cancellati"
-#: conf/badges.py:39
+#: conf/badges.py:41
msgid "Teacher: minimum upvotes for the answer"
-msgstr ""
+msgstr "Insegnante: voti positivi minimi per la risposta"
-#: conf/badges.py:48
+#: conf/badges.py:50
msgid "Nice Answer: minimum upvotes for the answer"
-msgstr ""
+msgstr "Bella risposta: minimi voti positivi per la risposta"
-#: conf/badges.py:57
+#: conf/badges.py:59
msgid "Good Answer: minimum upvotes for the answer"
-msgstr ""
+msgstr "Buona Risposta: voti positivi minimi per la risposta"
-#: conf/badges.py:66
+#: conf/badges.py:68
msgid "Great Answer: minimum upvotes for the answer"
-msgstr ""
+msgstr "Ottima Risposta: voti positivi minimi per la risposta"
-#: conf/badges.py:75
+#: conf/badges.py:77
msgid "Nice Question: minimum upvotes for the question"
-msgstr ""
+msgstr "Bella Domanda: voti positivi minimi per la domanda"
-#: conf/badges.py:84
+#: conf/badges.py:86
msgid "Good Question: minimum upvotes for the question"
-msgstr ""
+msgstr "Buona Domanda: messaggi positivi minimi per la domanda"
-#: conf/badges.py:93
+#: conf/badges.py:95
msgid "Great Question: minimum upvotes for the question"
-msgstr ""
+msgstr "Grande Domanda: voti positivi minimi per la domanda"
-#: conf/badges.py:102
-#, fuzzy
+#: conf/badges.py:104
msgid "Popular Question: minimum views"
-msgstr "Domanda gettonata"
+msgstr "Domanda Gettonata: visualizzazioni minime"
-#: conf/badges.py:111
-#, fuzzy
+#: conf/badges.py:113
msgid "Notable Question: minimum views"
-msgstr "Domanda notevole"
+msgstr "Domanda notevole: visualizzazioni minime"
-#: conf/badges.py:120
-#, fuzzy
+#: conf/badges.py:122
msgid "Famous Question: minimum views"
-msgstr "Domanda famosa"
+msgstr "Domanda famosa: visualizzazioni minime"
-#: conf/badges.py:129
+#: conf/badges.py:131
msgid "Self-Learner: minimum answer upvotes"
-msgstr ""
+msgstr "Autodidatta: votazioni positive minime alle risposte"
-#: conf/badges.py:138
+#: conf/badges.py:140
msgid "Civic Duty: minimum votes"
-msgstr ""
+msgstr "Senso Civico: votazioni minime"
-#: conf/badges.py:147
+#: conf/badges.py:149
msgid "Enlightened Duty: minimum upvotes"
-msgstr ""
+msgstr "Dovere Illuminato: votazioni positive minime"
-#: conf/badges.py:156
+#: conf/badges.py:158
msgid "Guru: minimum upvotes"
-msgstr ""
+msgstr "Guru: votazioni positive minime"
-#: conf/badges.py:165
+#: conf/badges.py:167
msgid "Necromancer: minimum upvotes"
-msgstr ""
+msgstr "Negromante"
-#: conf/badges.py:174
+#: conf/badges.py:176
msgid "Necromancer: minimum delay in days"
-msgstr ""
+msgstr "Necromante: ritardo minimo in giorni"
-#: conf/badges.py:183
+#: conf/badges.py:185
msgid "Associate Editor: minimum number of edits"
-msgstr ""
+msgstr "Editore Assiciato: numero minimo di modifiche"
-#: conf/badges.py:192
-#, fuzzy
+#: conf/badges.py:194
msgid "Favorite Question: minimum stars"
-msgstr "Domanda apprezzata"
+msgstr "Domanda apprezzata: numero minimo di stellette"
-#: conf/badges.py:201
-#, fuzzy
+#: conf/badges.py:203
msgid "Stellar Question: minimum stars"
-msgstr "Domanda stellare"
+msgstr "Domanda stellare: numero minimo di stellette"
-#: conf/badges.py:210
+#: conf/badges.py:212
msgid "Commentator: minimum comments"
-msgstr ""
+msgstr "Commentatore: numero minimo di commenti"
-#: conf/badges.py:219
+#: conf/badges.py:221
msgid "Taxonomist: minimum tag use count"
-msgstr ""
+msgstr "Tassonomista: numero minimo di tag"
-#: conf/badges.py:228
+#: conf/badges.py:230
msgid "Enthusiast: minimum days"
-msgstr ""
+msgstr "Entusiasta: numero minimo di giorni"
-#: conf/email.py:14
+#: conf/email.py:15
msgid "Email and email alert settings"
msgstr "Configurazione email ed avvisi tramite mail"
-#: conf/email.py:22
-#, fuzzy
+#: conf/email.py:24
msgid "Prefix for the email subject line"
-msgstr "Benvenuto!"
+msgstr "Prefisso per l'oggetto delle email"
-#: conf/email.py:24
+#: conf/email.py:26
msgid ""
"This setting takes default from the django settingEMAIL_SUBJECT_PREFIX. A "
-"value entered here will overridethe default."
-msgstr ""
+"value entered here will override the default."
+msgstr "Questa impostazione vengono prese dalle impostazioni predefinite di django EMAIL_SUBJECT_PREFIX. A"
+"il valore inserito quà sovrascriverà il predefinito."
-#: conf/email.py:36
+#: conf/email.py:38
msgid "Maximum number of news entries in an email alert"
msgstr "Massimo numero di news in un avviso tramite mail"
-#: conf/email.py:64
-#, fuzzy
+#: conf/email.py:48
msgid "Default notification frequency all questions"
msgstr "Frequenza di notifica news predefinita"
-#: conf/email.py:66
+#: conf/email.py:50
msgid "Option to define frequency of emailed updates for: all questions."
-msgstr ""
+msgstr "Opzione per determinare la frequenza di email autovalutate"
-#: conf/email.py:78
-#, fuzzy
+#: conf/email.py:62
msgid "Default notification frequency questions asked by the user"
-msgstr "Frequenza di notifica news predefinita"
+msgstr "Frequenza predefinita della notifica delle domande fatte dagli utenti"
-#: conf/email.py:80
+#: conf/email.py:64
msgid ""
"Option to define frequency of emailed updates for: Question asked by the "
"user."
-msgstr ""
+msgstr "Opzione per definire la frequenza degli aggiornamenti per email per: Domande chieste dall'"
+"utente"
-#: conf/email.py:92
-#, fuzzy
+#: conf/email.py:76
msgid "Default notification frequency questions answered by the user"
-msgstr "Frequenza di notifica news predefinita"
+msgstr "Frequenza predefinita di invio delle notifiche per risposte date dall'utente"
-#: conf/email.py:94
+#: conf/email.py:78
msgid ""
"Option to define frequency of emailed updates for: Question answered by the "
"user."
-msgstr ""
+msgstr "Opzione per definire la frequenza degli aggiornamenti email per: Domande risposte da "
+"utente."
-#: conf/email.py:106
+#: conf/email.py:90
msgid ""
"Default notification frequency questions individually "
"selected by the user"
-msgstr ""
+msgstr "Frequenza predefinita di aggiornamento per le domande selezionate individualmente dall'utente"
-#: conf/email.py:109
+#: conf/email.py:93
msgid ""
"Option to define frequency of emailed updates for: Question individually "
"selected by the user."
-msgstr ""
+msgstr "Opzione per definire la frequenza di aggiornamenti email per: Domande individuali, selezionati dall'utente."
-#: conf/email.py:121
+#: conf/email.py:105
msgid ""
"Default notification frequency for mentions and "
"comments"
-msgstr ""
+msgstr "Frequenza predefinita per le notifiche per menzionare e"
+"commenti"
-#: conf/email.py:124
+#: conf/email.py:108
msgid ""
"Option to define frequency of emailed updates for: Mentions and comments."
-msgstr ""
+msgstr "Opzione per definire la frequenza degli aggiornamenti email per: Menzionati e commenti."
-#: conf/email.py:135
-#, fuzzy
+#: conf/email.py:119
msgid "Send periodic reminders about unanswered questions"
msgstr "Non ci sono domande senza risposte"
-#: conf/email.py:137
+#: conf/email.py:121
msgid ""
"NOTE: in order to use this feature, it is necessary to run the management "
"command \"send_unanswered_question_reminders\" (for example, via a cron job "
-"- with an appropriate frequency) and an IMAP server with a dedicated inbox "
-"must be configured "
+"- with an appropriate frequency) "
msgstr ""
-#: conf/email.py:151
-#, fuzzy
+#: conf/email.py:134
msgid "Days before starting to send reminders about unanswered questions"
-msgstr "Non ci sono domande senza risposte"
+msgstr "Giorni trascorsi prima di inviare promemoria riguardo domande non risposte"
-#: conf/email.py:162
+#: conf/email.py:145
msgid ""
"How often to send unanswered question reminders (in days between the "
"reminders sent)."
-msgstr ""
+msgstr "Quanto spesso inviare i promemoria riguardo alle domande senza risposta"
-#: conf/email.py:174
+#: conf/email.py:157
msgid "Max. number of reminders to send about unanswered questions"
+msgstr "Numero massimo di promemoria da inviare riguardo alle domande non risposte"
+
+#: conf/email.py:168
+msgid "Send periodic reminders to accept the best answer"
+msgstr "Manda promemoria periodici per accettare la risposta migliore"
+
+#: conf/email.py:170
+msgid ""
+"NOTE: in order to use this feature, it is necessary to run the management "
+"command \"send_accept_answer_reminders\" (for example, via a cron job - with "
+"an appropriate frequency) "
msgstr ""
-#: conf/email.py:186
+#: conf/email.py:183
+msgid "Days before starting to send reminders to accept an answer"
+msgstr "Giorni trascorsi prima di inviare un promemoria per accettare una risposta"
+
+#: conf/email.py:194
+msgid ""
+"How often to send accept answer reminders (in days between the reminders "
+"sent)."
+msgstr "Quanto spesso "
+
+#: conf/email.py:206
+msgid "Max. number of reminders to send to accept the best answer"
+msgstr "Numero massimo di promemoria da inviare per accettare la miglior risposta"
+
+#: conf/email.py:218
msgid "Require email verification before allowing to post"
msgstr ""
"Richiede la verifica dell'indirizzo email prima di consentire la "
"pubblicazione di post"
-#: conf/email.py:187
+#: conf/email.py:219
msgid ""
"Active email verification is done by sending a verification key in email"
msgstr "La verifica dell'email è effettuata inviando una chiave all'indirizzo "
-#: conf/email.py:196
+#: conf/email.py:228
msgid "Allow only one account per email address"
msgstr "Consenti solo un account per indirizzo email"
-#: conf/email.py:205
+#: conf/email.py:237
msgid "Fake email for anonymous user"
msgstr "Email fasulla per gli utenti non registrati"
-#: conf/email.py:206
+#: conf/email.py:238
msgid "Use this setting to control gravatar for email-less user"
msgstr ""
"Utilizza questi settaggi per controllare il gravatar per utenti senza email"
-#: conf/email.py:215
-#, fuzzy
+#: conf/email.py:247
msgid "Allow posting questions by email"
-msgstr ""
-"<span class=\"strong big\">Puoi cominciare ora a scrivere la tua domanda "
-"come utente non registrato</span>. Quando avrai finito, sarai reindirizzato "
-"alla pagina di accesso/registrazione. La tua domanda sarà salvata e "
-"pubblicata non appena ti sarai registrato. Accedere al proprio account "
-"richiede circa 30 secondi, registrarne uno nuovo meno di un minuto."
+msgstr "Consenti di inviare domande per email"
-#: conf/email.py:217
+#: conf/email.py:249
msgid ""
"Before enabling this setting - please fill out IMAP settings in the settings."
"py file"
-msgstr ""
+msgstr "Prima di abilitare questa opzione, prima compila le impostazioni IMAP nelle impostazioni."
+"file py"
-#: conf/email.py:228
+#: conf/email.py:260
msgid "Replace space in emailed tags with dash"
-msgstr ""
+msgstr "Sostituisci lo spazio nei tag delle email con un trattino"
-#: conf/email.py:230
+#: conf/email.py:262
msgid ""
"This setting applies to tags written in the subject line of questions asked "
"by email"
-msgstr ""
+msgstr "Queste impostazioni si applicano ai tag scritti nel campo oggetto della domanda risolta"
+"per email"
-#: conf/external_keys.py:10
-msgid "Keys to connect the site with external services like Facebook, etc."
-msgstr "Chiavi per connettere il sito con servizi esterni come Facebook, ecc."
+#: conf/external_keys.py:11
+msgid "Keys for external services"
+msgstr "Chiave per servizi esterni"
-#: conf/external_keys.py:18
+#: conf/external_keys.py:19
msgid "Google site verification key"
msgstr "Site verification key di Google"
-#: conf/external_keys.py:20
-#, fuzzy, python-format
+#: conf/external_keys.py:21
+#, python-format
msgid ""
"This key helps google index your site please obtain is at <a href=\"%(url)s?"
"hl=%(lang)s\">google webmasters tools site</a>"
msgstr ""
"Questa chiave aiuta google ad indicizzare il tuo sito. Per favore ottienila "
-"presso gli <a href=\"%(google_webmasters_tools_url)s\">strumenti per i "
+"presso gli <a href=\"%(url)s hl=%(lang)s\">strumenti per i "
"webmaster di Google</a>"
-#: conf/external_keys.py:35
+#: conf/external_keys.py:36
msgid "Google Analytics key"
msgstr "Chiave Google Analytics"
-#: conf/external_keys.py:37
-#, fuzzy, python-format
+#: conf/external_keys.py:38
+#, python-format
msgid ""
"Obtain is at <a href=\"%(url)s\">Google Analytics</a> site, if you wish to "
"use Google Analytics to monitor your site"
msgstr ""
-"Ottieni un account <a href=\"%(ga_site)s\">Google Analytics</a>, se vuoi "
+"Ottieni un account <a href=\"%(url)s\">Google Analytics</a>, se vuoi "
"utilizzare Google Analytics per monitorare il tuo sito web"
-#: conf/external_keys.py:50
+#: conf/external_keys.py:51
msgid "Enable recaptcha (keys below are required)"
-msgstr ""
+msgstr "Abilita il recaptcha (le chiavi quà sotto sono necessarie)"
-#: conf/external_keys.py:59
+#: conf/external_keys.py:60
msgid "Recaptcha public key"
msgstr "Chiave pubblica Recaptcha"
-#: conf/external_keys.py:67
+#: conf/external_keys.py:68
msgid "Recaptcha private key"
msgstr "Chiave privata Recaptcha"
-#: conf/external_keys.py:69
-#, fuzzy, python-format
+#: conf/external_keys.py:70
+#, python-format
msgid ""
"Recaptcha is a tool that helps distinguish real people from annoying spam "
"robots. Please get this and a public key at the <a href=\"%(url)s\">%(url)s</"
@@ -734,14 +741,14 @@ msgid ""
msgstr ""
"Recaptcha è un tool che aiuta a distinguere persone reali da fastidisosi "
"spam robots. Per favore ottieni questa ed una chiave pubblica all'indirizzo "
-"<a href=\"http://recaptcha.net\">recaptcha.net</a>"
+"<a href=\"%(url)s\">recaptcha.net</a>"
-#: conf/external_keys.py:81
+#: conf/external_keys.py:82
msgid "Facebook public API key"
msgstr "Facebook API key"
-#: conf/external_keys.py:83
-#, fuzzy, python-format
+#: conf/external_keys.py:84
+#, python-format
msgid ""
"Facebook API key and Facebook secret allow to use Facebook Connect login "
"method at your site. Please obtain these keys at <a href=\"%(url)s"
@@ -749,83 +756,84 @@ msgid ""
msgstr ""
"La Facebook API key ed il Facebook secret ti permettono di usare Facebook "
"Connect per i login al tuo sito. Per favore ottieni queste chiavi presso la "
-"pagina <a href=\"http://www.facebook.com/developers/createapp.php\">facebook "
+"pagina <a href=\"%(url)s\">facebook "
"create app</a>"
-#: conf/external_keys.py:96
+#: conf/external_keys.py:97
msgid "Facebook secret key"
msgstr "Facebook secret key"
-#: conf/external_keys.py:104
+#: conf/external_keys.py:105
msgid "Twitter consumer key"
-msgstr ""
+msgstr "Il codice utente di Twitter"
-#: conf/external_keys.py:106
+#: conf/external_keys.py:107
#, python-format
msgid ""
"Please register your forum at <a href=\"%(url)s\">twitter applications site</"
"a>"
-msgstr ""
+msgstr "Per favore registra il tuo form a <a href=\"%(url)s\">sito dell'applicazione twitter</a>"
-#: conf/external_keys.py:117
+#: conf/external_keys.py:118
msgid "Twitter consumer secret"
-msgstr ""
+msgstr "Il codice segreto dell'utente di Twitter"
-#: conf/external_keys.py:125
+#: conf/external_keys.py:126
msgid "LinkedIn consumer key"
-msgstr ""
+msgstr "Il codice utente di LinkedIn"
-#: conf/external_keys.py:127
+#: conf/external_keys.py:128
#, python-format
msgid ""
"Please register your forum at <a href=\"%(url)s\">LinkedIn developer site</a>"
msgstr ""
+"Per favore, registra il tuo form a <a href=\"%(url)s\">sito di sviluppo di LinkedIn"
-#: conf/external_keys.py:138
+#: conf/external_keys.py:139
msgid "LinkedIn consumer secret"
-msgstr ""
+msgstr "Codice segreto di LinkedIn"
-#: conf/external_keys.py:146
+#: conf/external_keys.py:147
msgid "ident.ca consumer key"
-msgstr ""
+msgstr "codice utente di ident.ca"
-#: conf/external_keys.py:148
+#: conf/external_keys.py:149
#, python-format
msgid ""
"Please register your forum at <a href=\"%(url)s\">Identi.ca applications "
"site</a>"
msgstr ""
+"Per favore registra il tuo forum a <a href\"%(url)s\">Identi.ca"
-#: conf/external_keys.py:159
+#: conf/external_keys.py:160
msgid "ident.ca consumer secret"
-msgstr ""
+msgstr "codice utente di identi.ca"
-#: conf/external_keys.py:167
+#: conf/external_keys.py:168
msgid "Use LDAP authentication for the password login"
-msgstr ""
+msgstr "Usa l'autenticazione LDAP per le passwird "
-#: conf/external_keys.py:176
+#: conf/external_keys.py:177
msgid "LDAP service provider name"
-msgstr ""
+msgstr "Nome utente del provider LDAP"
-#: conf/external_keys.py:184
+#: conf/external_keys.py:185
msgid "URL for the LDAP service"
-msgstr ""
+msgstr "URL del servizio LDAP"
-#: conf/external_keys.py:192
-#, fuzzy
+#: conf/external_keys.py:193
msgid "Explain how to change LDAP password"
-msgstr "Cambia password"
+msgstr "Spiega come modificare la password LDAP"
-#: conf/flatpages.py:10
+#: conf/flatpages.py:11
msgid "Flatpages - about, privacy policy, etc."
msgstr "Pagine statiche - about, privacy policy, etc."
-#: conf/flatpages.py:17
+#: conf/flatpages.py:19
msgid "Text of the Q&A forum About page (html format)"
msgstr "Testo della pagina About del Q&A forum (formato html)"
-#: conf/flatpages.py:20
+#: conf/flatpages.py:22
msgid ""
"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
"the \"about\" page to check your input."
@@ -833,13 +841,11 @@ msgstr ""
"Salva, poi <a href=\"http://validator.w3.org/\">utilizza il validatore "
"HTML<a> sulla pagina \"about\" per controllare il tuo input."
-#: conf/flatpages.py:30
-#, fuzzy
+#: conf/flatpages.py:32
msgid "Text of the Q&A forum FAQ page (html format)"
msgstr "Testo della pagina About del Q&A forum (formato html)"
-#: conf/flatpages.py:33
-#, fuzzy
+#: conf/flatpages.py:35
msgid ""
"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
"the \"faq\" page to check your input."
@@ -847,11 +853,11 @@ msgstr ""
"Salva, poi <a href=\"http://validator.w3.org/\">utilizza il validatore "
"HTML<a> sulla pagina \"about\" per controllare il tuo input."
-#: conf/flatpages.py:44
+#: conf/flatpages.py:46
msgid "Text of the Q&A forum Privacy Policy (html format)"
msgstr "Testo della pagina Privacy Policy del Q&A forum (formato html)"
-#: conf/flatpages.py:47
+#: conf/flatpages.py:49
msgid ""
"Save, then <a href=\"http://validator.w3.org/\">use HTML validator</a> on "
"the \"privacy\" page to check your input."
@@ -859,264 +865,284 @@ msgstr ""
"Salva, poi <a href=\"http://validator.w3.org/\">utilizza il validatore "
"HTML<a> sulla pagina \"about\" per controllare il tuo input."
-#: conf/forum_data_rules.py:11
-#, fuzzy
-msgid "Data entry and display"
+#: conf/forum_data_rules.py:12
+msgid "Data entry and display rules"
msgstr "Impostazioni per la visualizzazione dei dati di Askbot"
-#: conf/forum_data_rules.py:20
+#: conf/forum_data_rules.py:22
#, python-format
msgid ""
"Enable embedding videos. <em>Note: please read <a href=\"%(url)s>read this</"
"a> first.</em>"
msgstr ""
+"Abilita l'inserimento di video. <em>Nota: per favore leggi <a href=\"%(url)s>leggi questo</"
+"a> prima </em>"
-#: conf/forum_data_rules.py:31
+#: conf/forum_data_rules.py:33
msgid "Check to enable community wiki feature"
msgstr "Spunta per impostare come 'domanda comunitaria'"
-#: conf/forum_data_rules.py:40
+#: conf/forum_data_rules.py:42
msgid "Allow asking questions anonymously"
-msgstr ""
+msgstr "Permetti di rispondere alle domande anonimamente"
-#: conf/forum_data_rules.py:42
+#: conf/forum_data_rules.py:44
msgid ""
"Users do not accrue reputation for anonymous questions and their identity is "
"not revealed until they change their mind"
msgstr ""
-#: conf/forum_data_rules.py:54
+#: conf/forum_data_rules.py:56
msgid "Allow posting before logging in"
-msgstr ""
+msgstr "Permetti di postare prima del login"
-#: conf/forum_data_rules.py:56
+#: conf/forum_data_rules.py:58
msgid ""
"Check if you want to allow users start posting questions or answers before "
"logging in. Enabling this may require adjustments in the user login system "
"to check for pending posts every time the user logs in. The builtin Askbot "
"login system supports this feature."
msgstr ""
+"Seleziona se vuoi permettere agli utenti di inserire domande o risposte prima "
+"di fare login. Questa impostazione richiede una modifica nel sistema dei login "
+"per verificare se ci sono inserimenti in attesa ogni volta che un utente accede."
+"Il sistema di login integrato in Askbot supporta questa funzionalità."
-#: conf/forum_data_rules.py:71
-#, fuzzy
+#: conf/forum_data_rules.py:73
msgid "Allow swapping answer with question"
-msgstr "Rispondi alla domanda"
+msgstr "Consenti di scambiare la domanda con la risposta"
-#: conf/forum_data_rules.py:73
+#: conf/forum_data_rules.py:75
msgid ""
"This setting will help import data from other forums such as zendesk, when "
"automatic data import fails to detect the original question correctly."
msgstr ""
+"Questa impostazione aiuterà ad importare i dati da altri forum come zendesk, quando "
+"l'importazione automatica dei dati non riesce ad identificare correttamente la domanda originale."
-#: conf/forum_data_rules.py:85
+#: conf/forum_data_rules.py:87
msgid "Maximum length of tag (number of characters)"
msgstr "Massima lunghezza di un tag (numero di caratteri)"
-#: conf/forum_data_rules.py:93
-#, fuzzy
+#: conf/forum_data_rules.py:95
msgid "Mandatory tags"
-msgstr "ha aggiornato i tag"
+msgstr "Tag obbligatori"
-#: conf/forum_data_rules.py:96
+#: conf/forum_data_rules.py:98
msgid ""
"At least one of these tags will be required for any new or newly edited "
"question. A mandatory tag may be wildcard, if the wildcard tags are active."
msgstr ""
+"Almeno uno di questi tag sarà richiesto per ogni domanda creata o modificata."
+"Il tag obbligatorio può essere anche un wildcard, se i tag wilcard sono attivi."
-#: conf/forum_data_rules.py:108
+#: conf/forum_data_rules.py:110
msgid "Force lowercase the tags"
-msgstr ""
+msgstr "Forza tag con lettere minuscole"
-#: conf/forum_data_rules.py:110
+#: conf/forum_data_rules.py:112
msgid ""
"Attention: after checking this, please back up the database, and run a "
"management command: <code>python manage.py fix_question_tags</code> to "
"globally rename the tags"
msgstr ""
+"Attenzione: dopo aver selezionato questa impostazione fai un backup del database "
+"ed esegui il comando <code>python manage.py fix_question_tags</code> per "
+"aggiornare i tag globalmente"
-#: conf/forum_data_rules.py:124
+#: conf/forum_data_rules.py:126
msgid "Format of tag list"
-msgstr ""
+msgstr "Formato della lista dei tag"
-#: conf/forum_data_rules.py:126
+#: conf/forum_data_rules.py:128
msgid ""
"Select the format to show tags in, either as a simple list, or as a tag cloud"
msgstr ""
+"Seleziona il formato con cui mostrare i tag: lista semplice o come una nuvola di tag"
-#: conf/forum_data_rules.py:138
-#, fuzzy
+#: conf/forum_data_rules.py:140
msgid "Use wildcard tags"
-msgstr "Tag"
+msgstr "Usa tag multipli"
-#: conf/forum_data_rules.py:140
+#: conf/forum_data_rules.py:142
msgid ""
"Wildcard tags can be used to follow or ignore many tags at once, a valid "
"wildcard tag has a single wildcard at the very end"
msgstr ""
+"I tag wildcards possono essere usati per selezionare o ignorare più tag insieme, un "
+"tag wildcard valido ha una wildcard singola alla fine"
-#: conf/forum_data_rules.py:153
+#: conf/forum_data_rules.py:155
msgid "Default max number of comments to display under posts"
-msgstr ""
+msgstr "Numero massimo di commenti da mostrare sotto il post"
-#: conf/forum_data_rules.py:164
+#: conf/forum_data_rules.py:166
#, python-format
msgid "Maximum comment length, must be < %(max_len)s"
-msgstr ""
+msgstr "La lunghezza massima del commento deve essere < %(max_len)s"
-#: conf/forum_data_rules.py:174
+#: conf/forum_data_rules.py:176
msgid "Limit time to edit comments"
-msgstr ""
+msgstr "Limita il tempo per modificare i commenti"
-#: conf/forum_data_rules.py:176
+#: conf/forum_data_rules.py:178
msgid "If unchecked, there will be no time limit to edit the comments"
-msgstr ""
+msgstr "Se non selezionato, non ci sarà un limite di tempo per modificare i commenti"
-#: conf/forum_data_rules.py:187
+#: conf/forum_data_rules.py:189
msgid "Minutes allowed to edit a comment"
-msgstr ""
+msgstr "Minuti concessi per modificare un commento"
-#: conf/forum_data_rules.py:188
+#: conf/forum_data_rules.py:190
msgid "To enable this setting, check the previous one"
-msgstr ""
+msgstr "Per abilitare questa impostazione devi selezionare la precedente"
-#: conf/forum_data_rules.py:197
+#: conf/forum_data_rules.py:199
msgid "Save comment by pressing <Enter> key"
-msgstr ""
+msgstr "Salva i commenti premendo <Enter>"
-#: conf/forum_data_rules.py:206
+#: conf/forum_data_rules.py:208
msgid "Minimum length of search term for Ajax search"
-msgstr ""
+msgstr "Lunghezza minima dei termini di ricerca per la ricerca Ajax"
-#: conf/forum_data_rules.py:207
+#: conf/forum_data_rules.py:209
msgid "Must match the corresponding database backend setting"
-msgstr ""
+msgstr "Deve corrispondere all'analoga impostazione backend del database"
-#: conf/forum_data_rules.py:216
+#: conf/forum_data_rules.py:218
msgid "Do not make text query sticky in search"
-msgstr ""
+msgstr "Non rendere il campo di ricerca adesivo"
-#: conf/forum_data_rules.py:218
+#: conf/forum_data_rules.py:220
msgid ""
"Check to disable the \"sticky\" behavior of the search query. This may be "
"useful if you want to move the search bar away from the default position or "
"do not like the default sticky behavior of the text search query."
msgstr ""
+"Seleziona per disabilitare il comportamento \"adesivo\" della barra di ricerca. Questo può "
+"essere utile se vuoi spostare la barra di ricerca dalla sua posizione predefinita o "
+"non ti piace il comportamento adesivo predefinito della barra di ricerca."
-#: conf/forum_data_rules.py:231
+#: conf/forum_data_rules.py:233
msgid "Maximum number of tags per question"
msgstr "Massimo numero di tag per domanda"
-#: conf/forum_data_rules.py:243
+#: conf/forum_data_rules.py:245
msgid "Number of questions to list by default"
msgstr "Numero di domande da mostrare di default"
-#: conf/forum_data_rules.py:253
+#: conf/forum_data_rules.py:255
msgid "What should \"unanswered question\" mean?"
msgstr "Cosa dovrebbe significare \"domande senza risposta\"?"
-#: conf/license.py:12
-#, fuzzy
-msgid "License settings"
-msgstr "Impostazioni base"
+#: conf/license.py:13
+msgid "Content LicensContent License"
+msgstr "Contenuto LicensaContenuto Licensa"
-#: conf/license.py:19
+#: conf/license.py:21
msgid "Show license clause in the site footer"
-msgstr ""
+msgstr "Mostra le clausole di licenza nel footer del sito"
-#: conf/license.py:28
+#: conf/license.py:30
msgid "Short name for the license"
-msgstr ""
+msgstr "Nome breve per la licenza"
-#: conf/license.py:37
+#: conf/license.py:39
msgid "Full name of the license"
-msgstr ""
+msgstr "Nome completo della licenza"
-#: conf/license.py:38
+#: conf/license.py:40
msgid "Creative Commons Attribution Share Alike 3.0"
-msgstr ""
+msgstr "Creative Commons Attribuzione Condividi allo stesso modo 3.0"
-#: conf/license.py:46
+#: conf/license.py:48
msgid "Add link to the license page"
-msgstr ""
+msgstr "Aggiungi link alla pagina della licenza"
-#: conf/license.py:55
-#, fuzzy
+#: conf/license.py:57
msgid "License homepage"
-msgstr "torna alla home page"
+msgstr "Home page della licenza"
-#: conf/license.py:57
+#: conf/license.py:59
msgid "URL of the official page with all the license legal clauses"
-msgstr ""
+msgstr "URL della pagina ufficiale del testo della licenza"
-#: conf/license.py:67
-#, fuzzy
+#: conf/license.py:69
msgid "Use license logo"
-msgstr "Logo del forum Q&A"
+msgstr "Usa il logo della licenza"
-#: conf/license.py:76
+#: conf/license.py:78
msgid "License logo image"
-msgstr ""
+msgstr "Immagine di logo della licenza"
-#: conf/login_providers.py:12
+#: conf/login_providers.py:13
msgid "Login provider setings"
-msgstr ""
+msgstr "Impostazioni del login"
-#: conf/login_providers.py:20
+#: conf/login_providers.py:22
msgid ""
"Show alternative login provider buttons on the password \"Sign Up\" page"
msgstr ""
+"Mostra un bottone alternativo per il login nella pagina \"Iscriviti\""
-#: conf/login_providers.py:29
+#: conf/login_providers.py:31
msgid "Always display local login form and hide \"Askbot\" button."
-msgstr ""
+msgstr "Mostra sempre il campo per il login e nascondi il bottone \"Askbot\""
-#: conf/login_providers.py:38
+#: conf/login_providers.py:40
msgid "Activate to allow login with self-hosted wordpress site"
-msgstr ""
+msgstr "Attiva per permettere il login nel sito wordpress ospitato"
-#: conf/login_providers.py:39
+#: conf/login_providers.py:41
msgid ""
"to activate this feature you must fill out the wordpress xml-rpc setting "
"bellow"
msgstr ""
+"per attivare questa funzione devi compilare le impostazioni xml-rpc di wordpress "
+"quà sotto"
-#: conf/login_providers.py:48
+#: conf/login_providers.py:50
msgid ""
"Fill it with the wordpress url to the xml-rpc, normally http://mysite.com/"
"xmlrpc.php"
msgstr ""
+"Inserisci l'url dell'xml-rpc di wordpress, di solito questo è http://miosito.com/xmlrpc.php"
-#: conf/login_providers.py:49
+#: conf/login_providers.py:51
msgid ""
"To enable, go to Settings->Writing->Remote Publishing and check the box for "
"XML-RPC"
msgstr ""
+"Per abilitarlo, vai in Impostazioni->Scrittura->Pubblicazione Remota e seleziona la casella per "
+"XML-RPC"
-#: conf/login_providers.py:60
+#: conf/login_providers.py:62
msgid "Upload your icon"
-msgstr ""
+msgstr "Carica la tua icona"
-#: conf/login_providers.py:90
+#: conf/login_providers.py:92
#, python-format
msgid "Activate %(provider)s login"
-msgstr ""
+msgstr "Attiva il login per %(provider)s"
-#: conf/login_providers.py:95
+#: conf/login_providers.py:97
#, python-format
msgid ""
"Note: to really enable %(provider)s login some additional parameters will "
"need to be set in the \"External keys\" section"
msgstr ""
+"Nota: per abilitare veramente il login per %(provider)s devi aggiungere dei paramentri "
+"nella sezione \"Chiavi esterne\""
-#: conf/markup.py:14
-msgid "Markup formatting"
-msgstr ""
+#: conf/markup.py:15
+msgid "Markup in posts"
+msgstr "Markup nei post"
-#: conf/markup.py:39
+#: conf/markup.py:41
msgid "Enable code-friendly Markdown"
-msgstr ""
+msgstr "Abilita Markdown che supporta il codice"
-#: conf/markup.py:41
+#: conf/markup.py:43
msgid ""
"If checked, underscore characters will not trigger italic or bold formatting "
"- bold and italic text can still be marked up with asterisks. Note that "
@@ -1124,43 +1150,43 @@ msgid ""
"are heavily used in LaTeX input."
msgstr ""
-#: conf/markup.py:56
+#: conf/markup.py:58
msgid "Mathjax support (rendering of LaTeX)"
msgstr ""
-#: conf/markup.py:58
+#: conf/markup.py:60
#, python-format
msgid ""
"If you enable this feature, <a href=\"%(url)s\">mathjax</a> must be "
"installed on your server in its own directory."
msgstr ""
-#: conf/markup.py:72
+#: conf/markup.py:74
msgid "Base url of MathJax deployment"
msgstr ""
-#: conf/markup.py:74
+#: conf/markup.py:76
msgid ""
"Note - <strong>MathJax is not included with askbot</strong> - you should "
"deploy it yourself, preferably at a separate domain and enter url pointing "
"to the \"mathjax\" directory (for example: http://mysite.com/mathjax)"
msgstr ""
-#: conf/markup.py:89
+#: conf/markup.py:91
msgid "Enable autolinking with specific patterns"
msgstr ""
-#: conf/markup.py:91
+#: conf/markup.py:93
msgid ""
"If you enable this feature, the application will be able to detect patterns "
"and auto link to URLs"
msgstr ""
-#: conf/markup.py:104
+#: conf/markup.py:106
msgid "Regexes to detect the link patterns"
msgstr ""
-#: conf/markup.py:106
+#: conf/markup.py:108
msgid ""
"Enter valid regular expressions for the patters, one per line. For example "
"to detect a bug pattern like #bug123, use the following regex: #bug(\\d+). "
@@ -1169,11 +1195,11 @@ msgid ""
"expressions elsewhere."
msgstr ""
-#: conf/markup.py:125
+#: conf/markup.py:127
msgid "URLs for autolinking"
msgstr ""
-#: conf/markup.py:127
+#: conf/markup.py:129
msgid ""
"Here, please enter url templates for the patterns entered in the previous "
"setting, also one entry per line. <strong>Make sure that number of lines in "
@@ -1183,172 +1209,169 @@ msgid ""
"in the redhat bug tracker."
msgstr ""
-#: conf/minimum_reputation.py:11
-msgid "Minimum reputation required to perform actions"
-msgstr "Reputazione minima per eseguire operazioni"
+#: conf/minimum_reputation.py:12
+msgid "Karma thresholds"
+msgstr ""
-#: conf/minimum_reputation.py:20
+#: conf/minimum_reputation.py:22
msgid "Upvote"
msgstr "Dare un voto positivo"
-#: conf/minimum_reputation.py:29
+#: conf/minimum_reputation.py:31
msgid "Downvote"
msgstr "Dare un voto negativo"
-#: conf/minimum_reputation.py:38
-#, fuzzy
+#: conf/minimum_reputation.py:40
msgid "Answer own question immediately"
-msgstr "Rispondi alla tua domanda"
+msgstr "Rispondi alla tua domanda subito"
-#: conf/minimum_reputation.py:47
-#, fuzzy
+#: conf/minimum_reputation.py:49
msgid "Accept own answer"
-msgstr "modificare ogni risposta"
+msgstr "Accetta la tua riposta"
-#: conf/minimum_reputation.py:56
+#: conf/minimum_reputation.py:58
msgid "Flag offensive"
msgstr "Segnalare come inappropriato"
-#: conf/minimum_reputation.py:65
+#: conf/minimum_reputation.py:67
msgid "Leave comments"
msgstr "Lasciare commenti"
-#: conf/minimum_reputation.py:74
+#: conf/minimum_reputation.py:76
msgid "Delete comments posted by others"
msgstr "Cancellare commenti inviati da altri"
-#: conf/minimum_reputation.py:83
+#: conf/minimum_reputation.py:85
msgid "Delete questions and answers posted by others"
msgstr "Cancellare domande e risposte inviate da altri"
-#: conf/minimum_reputation.py:92
+#: conf/minimum_reputation.py:94
msgid "Upload files"
msgstr "Caricare files"
-#: conf/minimum_reputation.py:101
+#: conf/minimum_reputation.py:103
msgid "Close own questions"
msgstr "Chiudere le proprie domande"
-#: conf/minimum_reputation.py:110
+#: conf/minimum_reputation.py:112
msgid "Retag questions posted by other people"
msgstr "Ritaggare domande inviate da altri utenti"
-#: conf/minimum_reputation.py:119
+#: conf/minimum_reputation.py:121
msgid "Reopen own questions"
msgstr "Riaprire le proprie domande"
-#: conf/minimum_reputation.py:128
+#: conf/minimum_reputation.py:130
msgid "Edit community wiki posts"
msgstr "Modificare le domande comunitarie"
-#: conf/minimum_reputation.py:137
+#: conf/minimum_reputation.py:139
msgid "Edit posts authored by other people"
msgstr "Modificare i post scritti da altri utenti"
-#: conf/minimum_reputation.py:146
+#: conf/minimum_reputation.py:148
msgid "View offensive flags"
msgstr "Visualizzare i flag inappropriati"
-#: conf/minimum_reputation.py:155
+#: conf/minimum_reputation.py:157
msgid "Close questions asked by others"
msgstr "Chiudere domande poste da altri"
-#: conf/minimum_reputation.py:164
+#: conf/minimum_reputation.py:166
msgid "Lock posts"
msgstr "Bloccare posts"
-#: conf/minimum_reputation.py:173
+#: conf/minimum_reputation.py:175
msgid "Remove rel=nofollow from own homepage"
msgstr ""
-#: conf/minimum_reputation.py:175
+#: conf/minimum_reputation.py:177
msgid ""
"When a search engine crawler will see a rel=nofollow attribute on a link - "
"the link will not count towards the rank of the users personal site."
msgstr ""
-#: conf/reputation_changes.py:12
-#, fuzzy
-msgid "Reputation loss and gain rules"
+#: conf/reputation_changes.py:13
+msgid "Karma loss and gain rules"
msgstr "Regole relative all'ottenimento e cessione di punti reputazione"
-#: conf/reputation_changes.py:21
+#: conf/reputation_changes.py:23
msgid "Maximum daily reputation gain per user"
msgstr "Massima reputazione ottenibile da un utente giornamente"
-#: conf/reputation_changes.py:30
+#: conf/reputation_changes.py:32
msgid "Gain for receiving an upvote"
msgstr "Guadagno per aver ricevuto un voto positivo"
-#: conf/reputation_changes.py:39
+#: conf/reputation_changes.py:41
msgid "Gain for the author of accepted answer"
msgstr "Guadagno per l'autore di una risposta accettata"
-#: conf/reputation_changes.py:48
+#: conf/reputation_changes.py:50
msgid "Gain for accepting best answer"
msgstr "Guadagno per aver accettato una migliore risposta"
-#: conf/reputation_changes.py:57
+#: conf/reputation_changes.py:59
msgid "Gain for post owner on canceled downvote"
msgstr ""
"Guadagno per il proprietario del post in caso di annullamento di un voto "
"negativo"
-#: conf/reputation_changes.py:66
+#: conf/reputation_changes.py:68
msgid "Gain for voter on canceling downvote"
msgstr ""
"Guadagno per un votante in caso di annullamento del proprio voto negativo"
-#: conf/reputation_changes.py:76
+#: conf/reputation_changes.py:78
msgid "Loss for voter for canceling of answer acceptance"
msgstr ""
"Perdita per un votante in caso di cancellazione di una risposta accettata"
-#: conf/reputation_changes.py:86
+#: conf/reputation_changes.py:88
msgid "Loss for author whose answer was \"un-accepted\""
msgstr ""
"Perdita per l'autore nel caso una risposta passi da accettata a non "
"accettata "
-#: conf/reputation_changes.py:96
+#: conf/reputation_changes.py:98
msgid "Loss for giving a downvote"
msgstr "Perdita in caso di assegnamento di un voto negativo"
-#: conf/reputation_changes.py:106
+#: conf/reputation_changes.py:108
msgid "Loss for owner of post that was flagged offensive"
msgstr "Perdita per l'autore di un post in caso di flag inappropriato"
-#: conf/reputation_changes.py:116
+#: conf/reputation_changes.py:118
msgid "Loss for owner of post that was downvoted"
msgstr "Perdita per l'autore nel caso il post venga votato negativamente"
-#: conf/reputation_changes.py:126
+#: conf/reputation_changes.py:128
msgid "Loss for owner of post that was flagged 3 times per same revision"
msgstr ""
"Perdita per l'autore nel caso il post venga flaggato 3 volte per la stessa "
"revisione"
-#: conf/reputation_changes.py:136
+#: conf/reputation_changes.py:138
msgid "Loss for owner of post that was flagged 5 times per same revision"
msgstr ""
"Perdita per l'autore nel caso il post venga flaggato 5 volte per la stessa "
"revisione"
-#: conf/reputation_changes.py:146
+#: conf/reputation_changes.py:148
msgid "Loss for post owner when upvote is canceled"
msgstr "Perdita per l'autore nel caso un voto positivo venga annullato"
-#: conf/sidebar_main.py:11
-msgid "Sidebar widget settings - main page"
+#: conf/sidebar_main.py:12
+msgid "Main page sidebar"
msgstr ""
-#: conf/sidebar_main.py:18 conf/sidebar_profile.py:18
-#: conf/sidebar_question.py:18
+#: conf/sidebar_main.py:20 conf/sidebar_profile.py:20
+#: conf/sidebar_question.py:19
msgid "Custom sidebar header"
msgstr ""
-#: conf/sidebar_main.py:21 conf/sidebar_profile.py:21
-#: conf/sidebar_question.py:21
+#: conf/sidebar_main.py:23 conf/sidebar_profile.py:23
+#: conf/sidebar_question.py:22
msgid ""
"Use this area to enter content at the TOP of the sidebarin HTML format. "
"When using this option (as well as the sidebar footer), please use the HTML "
@@ -1356,44 +1379,44 @@ msgid ""
"all browsers."
msgstr ""
-#: conf/sidebar_main.py:34
+#: conf/sidebar_main.py:36
msgid "Show avatar block in sidebar"
msgstr ""
-#: conf/sidebar_main.py:36
+#: conf/sidebar_main.py:38
msgid "Uncheck this if you want to hide the avatar block from the sidebar "
msgstr ""
-#: conf/sidebar_main.py:47
+#: conf/sidebar_main.py:49
msgid "Limit how many avatars will be displayed on the sidebar"
msgstr ""
-#: conf/sidebar_main.py:57
+#: conf/sidebar_main.py:59
msgid "Show tag selector in sidebar"
msgstr ""
-#: conf/sidebar_main.py:59
+#: conf/sidebar_main.py:61
msgid ""
"Uncheck this if you want to hide the options for choosing interesting and "
"ignored tags "
msgstr ""
-#: conf/sidebar_main.py:70
+#: conf/sidebar_main.py:72
msgid "Show tag list/cloud in sidebar"
msgstr ""
-#: conf/sidebar_main.py:72
+#: conf/sidebar_main.py:74
msgid ""
"Uncheck this if you want to hide the tag cloud or tag list from the sidebar "
msgstr ""
-#: conf/sidebar_main.py:83 conf/sidebar_profile.py:34
-#: conf/sidebar_question.py:74
+#: conf/sidebar_main.py:85 conf/sidebar_profile.py:36
+#: conf/sidebar_question.py:75
msgid "Custom sidebar footer"
msgstr ""
-#: conf/sidebar_main.py:86 conf/sidebar_profile.py:37
-#: conf/sidebar_question.py:77
+#: conf/sidebar_main.py:88 conf/sidebar_profile.py:39
+#: conf/sidebar_question.py:78
msgid ""
"Use this area to enter content at the BOTTOM of the sidebarin HTML format. "
"When using this option (as well as the sidebar header), please use the HTML "
@@ -1401,52 +1424,49 @@ msgid ""
"all browsers."
msgstr ""
-#: conf/sidebar_profile.py:11
-msgid "Sidebar widget settings - profile page"
-msgstr ""
+#: conf/sidebar_profile.py:12
+msgid "User profile sidebar"
+msgstr "Profilo utente"
#: conf/sidebar_question.py:11
-msgid "Sidebar widget settings - question page"
-msgstr ""
+msgid "Question page sidebar"
+msgstr "Pagina delle domande nella barra laterale"
-#: conf/sidebar_question.py:34
+#: conf/sidebar_question.py:35
msgid "Show tag list in sidebar"
msgstr ""
-#: conf/sidebar_question.py:36
+#: conf/sidebar_question.py:37
msgid "Uncheck this if you want to hide the tag list from the sidebar "
msgstr ""
-#: conf/sidebar_question.py:47
+#: conf/sidebar_question.py:48
msgid "Show meta information in sidebar"
msgstr ""
-#: conf/sidebar_question.py:49
+#: conf/sidebar_question.py:50
msgid ""
"Uncheck this if you want to hide the meta information about the question "
"(post date, views, last updated). "
msgstr ""
-#: conf/sidebar_question.py:61
-#, fuzzy
+#: conf/sidebar_question.py:62
msgid "Show related questions in sidebar"
-msgstr "Domande simili"
+msgstr "Mostra domande simili nella barra laterale"
-#: conf/sidebar_question.py:63
-#, fuzzy
+#: conf/sidebar_question.py:64
msgid "Uncheck this if you want to hide the list of related questions. "
-msgstr "clicca qui per vedere le domande modificate meno recentemente"
+msgstr "Non selezionare questa impostazione se vuoi nascondere la lista di domande collegate."
-#: conf/site_modes.py:63
-#, fuzzy
-msgid "Site modes"
-msgstr "Siti"
+#: conf/site_modes.py:64
+msgid "Bootstrap mode"
+msgstr ""
-#: conf/site_modes.py:72
+#: conf/site_modes.py:74
msgid "Activate a \"Bootstrap\" mode"
msgstr ""
-#: conf/site_modes.py:74
+#: conf/site_modes.py:76
msgid ""
"Bootstrap mode lowers reputation and certain badge thresholds, to values, "
"more suitable for the smaller communities, <strong>WARNING:</strong> your "
@@ -1454,53 +1474,51 @@ msgid ""
"changed after you modify this setting."
msgstr ""
-#: conf/site_settings.py:11
-msgid "Q&A forum website parameters and urls"
-msgstr "Parametri ed url per il Q&A forum"
+#: conf/site_settings.py:12
+msgid "URLS, keywords & greetings"
+msgstr ""
-#: conf/site_settings.py:19
+#: conf/site_settings.py:21
msgid "Site title for the Q&A forum"
msgstr "Titolo del sito per il Q&A forum"
-#: conf/site_settings.py:28
+#: conf/site_settings.py:30
msgid "Comma separated list of Q&A site keywords"
msgstr "Lista di parole chiave per il Q&A forum, separate da virgole"
-#: conf/site_settings.py:37
+#: conf/site_settings.py:39
msgid "Copyright message to show in the footer"
msgstr "Messaggio di Copyright da mostrare in fondo alla pagina"
-#: conf/site_settings.py:47
+#: conf/site_settings.py:49
msgid "Site description for the search engines"
msgstr "Descrizione del sito per i motori di ricerca"
-#: conf/site_settings.py:56
+#: conf/site_settings.py:58
msgid "Short name for your Q&A forum"
msgstr "Nome breve per il tuo forum Q&A"
-#: conf/site_settings.py:66
+#: conf/site_settings.py:68
msgid "Base URL for your Q&A forum, must start with http or https"
msgstr "URL base per il tuo forum Q&A (deve cominciare con http o https)"
-#: conf/site_settings.py:77
-#, fuzzy
+#: conf/site_settings.py:79
msgid "Check to enable greeting for anonymous user"
-msgstr "Email fasulla per gli utenti non registrati"
+msgstr "Seleziona per abilitare i saluti agli utenti anonimi"
-#: conf/site_settings.py:88
-#, fuzzy
+#: conf/site_settings.py:90
msgid "Text shown in the greeting message shown to the anonymous user"
-msgstr "Link mostrato agli utenti non registrati nel messaggio di benvenuto"
+msgstr "Testo mostrato nel benvenuto agli utenti anonimi"
-#: conf/site_settings.py:92
+#: conf/site_settings.py:94
msgid "Use HTML to format the message "
-msgstr ""
+msgstr "Usa l'HTML per formattare il messaggio"
-#: conf/site_settings.py:101
+#: conf/site_settings.py:103
msgid "Feedback site URL"
msgstr "URL di un sito esterno per i contatti"
-#: conf/site_settings.py:103
+#: conf/site_settings.py:105
msgid "If left empty, a simple internal feedback form will be used instead"
msgstr "Se lasciato vuoto, verrà usata una pagina interna per i contatti"
@@ -1526,9 +1544,8 @@ msgstr "colore di sfondo quando non ci sono voti"
#: conf/skin_counter_settings.py:206 conf/skin_counter_settings.py:216
#: conf/skin_counter_settings.py:228 conf/skin_counter_settings.py:239
#: conf/skin_counter_settings.py:252 conf/skin_counter_settings.py:262
-#, fuzzy
msgid "HTML color name or hex value"
-msgstr "Nome di colore HTML o valore esadecimale"
+msgstr "Nome del colore HTML o valore esadecimale"
#: conf/skin_counter_settings.py:40
msgid "Foreground color for votes = 0"
@@ -1614,34 +1631,34 @@ msgstr "Colore di sfondo per le domande con una <risposta accettata"
msgid "Foreground color for accepted answer"
msgstr "Colore del testo per le domande con una <risposta accettata"
-#: conf/skin_general_settings.py:14
-msgid "Skin and User Interface settings"
-msgstr "Impostazioni della skin e dell'interfaccia utente"
+#: conf/skin_general_settings.py:15
+msgid "Logos and HTML <head> parts"
+msgstr ""
-#: conf/skin_general_settings.py:21
+#: conf/skin_general_settings.py:23
msgid "Q&A site logo"
msgstr "Logo del forum Q&A"
-#: conf/skin_general_settings.py:23
+#: conf/skin_general_settings.py:25
msgid "To change the logo, select new file, then submit this whole form."
msgstr ""
"Per cambiare il logo, seleziona il nuovo file, poi salva le impostazioni"
-#: conf/skin_general_settings.py:37
+#: conf/skin_general_settings.py:39
msgid "Show logo"
msgstr ""
-#: conf/skin_general_settings.py:39
+#: conf/skin_general_settings.py:41
msgid ""
"Check if you want to show logo in the forum header or uncheck in the case "
"you do not want the logo to appear in the default location"
msgstr ""
-#: conf/skin_general_settings.py:51
+#: conf/skin_general_settings.py:53
msgid "Site favicon"
msgstr ""
-#: conf/skin_general_settings.py:53
+#: conf/skin_general_settings.py:55
#, python-format
msgid ""
"A small 16x16 or 32x32 pixel icon image used to distinguish your site in the "
@@ -1649,21 +1666,21 @@ msgid ""
"href=\"%(favicon_info_url)s\">this page</a>."
msgstr ""
-#: conf/skin_general_settings.py:71
+#: conf/skin_general_settings.py:73
msgid "Password login button"
msgstr ""
-#: conf/skin_general_settings.py:73
+#: conf/skin_general_settings.py:75
msgid ""
"An 88x38 pixel image that is used on the login screen for the password login "
"button."
msgstr ""
-#: conf/skin_general_settings.py:88
+#: conf/skin_general_settings.py:90
msgid "Show all UI functions to all users"
msgstr "Mostra tutte le funzionalità a tutti gli utenti"
-#: conf/skin_general_settings.py:90
+#: conf/skin_general_settings.py:92
msgid ""
"If checked, all forum functions will be shown to users, regardless of their "
"reputation. However to use those functions, moderation rules, reputation and "
@@ -1673,19 +1690,19 @@ msgstr ""
"utenti, anche se non hanno reputazione sufficiente per utilizzarle. In ogni "
"caso, i vincoli di reputazione necessari per utilizzarle rimangono validi."
-#: conf/skin_general_settings.py:105
+#: conf/skin_general_settings.py:107
msgid "Select skin"
msgstr "Scegli skin"
-#: conf/skin_general_settings.py:116
+#: conf/skin_general_settings.py:118
msgid "Customize HTML <HEAD>"
msgstr ""
-#: conf/skin_general_settings.py:125
+#: conf/skin_general_settings.py:127
msgid "Custom portion of the HTML <HEAD>"
msgstr ""
-#: conf/skin_general_settings.py:127
+#: conf/skin_general_settings.py:129
msgid ""
"<strong>To use this option</strong>, check \"Customize HTML &lt;HEAD&gt;\" "
"above. Contents of this box will be inserted into the &lt;HEAD&gt; portion "
@@ -1697,11 +1714,11 @@ msgid ""
"please test the site with the W3C HTML validator service."
msgstr ""
-#: conf/skin_general_settings.py:149
+#: conf/skin_general_settings.py:151
msgid "Custom header additions"
msgstr ""
-#: conf/skin_general_settings.py:151
+#: conf/skin_general_settings.py:153
msgid ""
"Header is the bar at the top of the content that contains user info and site "
"links, and is common to all pages. Use this area to enter contents of the "
@@ -1710,21 +1727,21 @@ msgid ""
"sure that your input is valid and works well in all browsers."
msgstr ""
-#: conf/skin_general_settings.py:166
+#: conf/skin_general_settings.py:168
msgid "Site footer mode"
msgstr ""
-#: conf/skin_general_settings.py:168
+#: conf/skin_general_settings.py:170
msgid ""
"Footer is the bottom portion of the content, which is common to all pages. "
"You can disable, customize, or use the default footer."
msgstr ""
-#: conf/skin_general_settings.py:185
+#: conf/skin_general_settings.py:187
msgid "Custom footer (HTML format)"
msgstr ""
-#: conf/skin_general_settings.py:187
+#: conf/skin_general_settings.py:189
msgid ""
"<strong>To enable this function</strong>, please select option 'customize' "
"in the \"Site footer mode\" above. Use this area to enter contents of the "
@@ -1733,21 +1750,21 @@ msgid ""
"that your input is valid and works well in all browsers."
msgstr ""
-#: conf/skin_general_settings.py:202
+#: conf/skin_general_settings.py:204
msgid "Apply custom style sheet (CSS)"
msgstr ""
-#: conf/skin_general_settings.py:204
+#: conf/skin_general_settings.py:206
msgid ""
"Check if you want to change appearance of your form by adding custom style "
"sheet rules (please see the next item)"
msgstr ""
-#: conf/skin_general_settings.py:216
+#: conf/skin_general_settings.py:218
msgid "Custom style sheet (CSS)"
msgstr ""
-#: conf/skin_general_settings.py:218
+#: conf/skin_general_settings.py:220
msgid ""
"<strong>To use this function</strong>, check \"Apply custom style sheet\" "
"option above. The CSS rules added in this window will be applied after the "
@@ -1756,19 +1773,19 @@ msgid ""
"depends (default is empty string) on the url configuration in your urls.py."
msgstr ""
-#: conf/skin_general_settings.py:234
+#: conf/skin_general_settings.py:236
msgid "Add custom javascript"
msgstr ""
-#: conf/skin_general_settings.py:237
+#: conf/skin_general_settings.py:239
msgid "Check to enable javascript that you can enter in the next field"
msgstr ""
-#: conf/skin_general_settings.py:247
+#: conf/skin_general_settings.py:249
msgid "Custom javascript"
msgstr ""
-#: conf/skin_general_settings.py:249
+#: conf/skin_general_settings.py:251
msgid ""
"Type or paste plain javascript that you would like to run on your site. Link "
"to the script will be inserted at the bottom of the HTML output and will be "
@@ -1779,141 +1796,162 @@ msgid ""
"above)."
msgstr ""
-#: conf/skin_general_settings.py:267
+#: conf/skin_general_settings.py:269
msgid "Skin media revision number"
msgstr "Numero di revisione dei media della skin"
-#: conf/skin_general_settings.py:269
+#: conf/skin_general_settings.py:271
msgid "Will be set automatically but you can modify it if necessary."
msgstr ""
-#: conf/skin_general_settings.py:280
+#: conf/skin_general_settings.py:282
msgid "Hash to update the media revision number automatically."
msgstr ""
-#: conf/skin_general_settings.py:284
+#: conf/skin_general_settings.py:286
msgid "Will be set automatically, it is not necesary to modify manually."
msgstr ""
-#: conf/social_sharing.py:10
+#: conf/social_sharing.py:11
msgid "Sharing content on social networks"
msgstr ""
-#: conf/social_sharing.py:18
-#, fuzzy
+#: conf/social_sharing.py:20
msgid "Check to enable sharing of questions on Twitter"
-msgstr "Riapri questa domanda"
+msgstr "Seleziona per abilitare la condivisione delle domande su Twitter"
-#: conf/social_sharing.py:27
+#: conf/social_sharing.py:29
msgid "Check to enable sharing of questions on Facebook"
msgstr ""
-#: conf/social_sharing.py:36
+#: conf/social_sharing.py:38
msgid "Check to enable sharing of questions on LinkedIn"
msgstr ""
-#: conf/social_sharing.py:45
+#: conf/social_sharing.py:47
msgid "Check to enable sharing of questions on Identi.ca"
msgstr ""
-#: conf/social_sharing.py:54
+#: conf/social_sharing.py:56
msgid "Check to enable sharing of questions on Google+"
msgstr ""
-#: conf/spam_and_moderation.py:9
-msgid "Spam control and content moderation"
+#: conf/spam_and_moderation.py:10
+msgid "Akismet spam protection"
msgstr ""
-#: conf/spam_and_moderation.py:16
+#: conf/spam_and_moderation.py:18
msgid "Enable Akismet spam detection(keys below are required)"
msgstr ""
-#: conf/spam_and_moderation.py:19
+#: conf/spam_and_moderation.py:21
#, python-format
msgid "To get an Akismet key please visit <a href=\"%(url)s\">Akismet site</a>"
msgstr ""
-#: conf/spam_and_moderation.py:29
+#: conf/spam_and_moderation.py:31
msgid "Akismet key for spam detection"
msgstr ""
-#: conf/user_settings.py:11
-#, fuzzy
+#: conf/super_groups.py:5
+msgid "Reputation, Badges, Votes & Flags"
+msgstr ""
+
+#: conf/super_groups.py:6
+msgid "Static Content, URLS & UI"
+msgstr ""
+
+#: conf/super_groups.py:7
+msgid "Data rules & Formatting"
+msgstr ""
+
+#: conf/super_groups.py:8
+msgid "External Services"
+msgstr ""
+
+#: conf/super_groups.py:9
+msgid "Login, Users & Communication"
+msgstr ""
+
+#: conf/user_settings.py:12
msgid "User settings"
-msgstr "Impostazioni dei diritti degli utenti"
+msgstr "Impostazioni degli utenti"
-#: conf/user_settings.py:19
+#: conf/user_settings.py:21
msgid "Allow editing user screen name"
msgstr "Permetti di modificare il nome utente visualizzato"
-#: conf/user_settings.py:28
-#, fuzzy
+#: conf/user_settings.py:30
msgid "Allow account recovery by email"
-msgstr "Consenti solo un account per indirizzo email"
+msgstr "Consenti il recupero dell'account per email"
-#: conf/user_settings.py:37
+#: conf/user_settings.py:39
msgid "Allow adding and removing login methods"
msgstr ""
-#: conf/user_settings.py:47
+#: conf/user_settings.py:49
msgid "Minimum allowed length for screen name"
msgstr "Lunghezza minima per il nome utente visualizzato"
-#: conf/user_settings.py:57
+#: conf/user_settings.py:59
msgid "Default Gravatar icon type"
msgstr ""
-#: conf/user_settings.py:59
+#: conf/user_settings.py:61
msgid ""
"This option allows you to set the default avatar type for email addresses "
"without associated gravatar images. For more information, please visit <a "
"href=\"http://en.gravatar.com/site/implement/images/\">this page</a>."
msgstr ""
-#: conf/user_settings.py:69
-#, fuzzy
+#: conf/user_settings.py:71
msgid "Name for the Anonymous user"
-msgstr "Email fasulla per gli utenti non registrati"
+msgstr "Nome per gli utenti anonimi"
-#: conf/vote_rules.py:13
-msgid "Limits applicable to votes and moderation flags"
-msgstr "Limiti riguardanti i voti e i post segnati come inappropriati"
+#: conf/vote_rules.py:14
+msgid "Vote and flag limits"
+msgstr ""
-#: conf/vote_rules.py:22
+#: conf/vote_rules.py:24
msgid "Number of votes a user can cast per day"
msgstr "Massimo numero di voti che un utente può dare ogni giorno"
-#: conf/vote_rules.py:31
+#: conf/vote_rules.py:33
msgid "Maximum number of flags per user per day"
msgstr ""
"Massimo numero di post che un utente può segnare come inappropriati ogni "
"giorno"
-#: conf/vote_rules.py:40
+#: conf/vote_rules.py:42
msgid "Threshold for warning about remaining daily votes"
msgstr "Soglia per avvertire del numero di voti rimanenti"
-#: conf/vote_rules.py:49
+#: conf/vote_rules.py:51
msgid "Number of days to allow canceling votes"
msgstr "Numero di giorni per consentire di cancellare voti"
-#: conf/vote_rules.py:58
-#, fuzzy
+#: conf/vote_rules.py:60
msgid "Number of days required before answering own question"
-msgstr "Numero di giorni per consentire di cancellare voti"
+msgstr "Numero di giorni richiesti per rispondere alla propria domanda"
-#: conf/vote_rules.py:67
+#: conf/vote_rules.py:69
msgid "Number of flags required to automatically hide posts"
msgstr ""
"Numero di segnalazioni come inappropriato dopo il quale il post viene "
"nascosto automaticamente"
-#: conf/vote_rules.py:76
+#: conf/vote_rules.py:78
msgid "Number of flags required to automatically delete posts"
msgstr ""
"Numero di segnalazioni come inappropriato dopo il quale il post viene "
"cancellato automaticamente"
+#: conf/vote_rules.py:87
+msgid ""
+"Minimum days to accept an answer, if it has not been accepted by the "
+"question poster"
+msgstr ""
+
#: const/__init__.py:10
msgid "duplicate question"
msgstr "la domanda è già stata posta"
@@ -2000,9 +2038,8 @@ msgid "favorite"
msgstr "preferite"
#: const/__init__.py:64
-#, fuzzy
msgid "list"
-msgstr "Lista dei tag"
+msgstr "lista"
#: const/__init__.py:65
msgid "cloud"
@@ -2016,219 +2053,213 @@ msgstr "La domanda non ha risposte"
msgid "Question has no accepted answers"
msgstr "La domanda non ha risposte accettate"
-#: const/__init__.py:121
+#: const/__init__.py:122
msgid "asked a question"
msgstr "ha posto una domanda"
-#: const/__init__.py:122
+#: const/__init__.py:123
msgid "answered a question"
msgstr "ha risposto a una domanda"
-#: const/__init__.py:123
+#: const/__init__.py:124
msgid "commented question"
msgstr "ha commentato una domanda"
-#: const/__init__.py:124
+#: const/__init__.py:125
msgid "commented answer"
msgstr "ha commentato una risposta"
-#: const/__init__.py:125
+#: const/__init__.py:126
msgid "edited question"
msgstr "ha modificato una domanda"
-#: const/__init__.py:126
+#: const/__init__.py:127
msgid "edited answer"
msgstr "ha modificato una risposta"
-#: const/__init__.py:127
+#: const/__init__.py:128
msgid "received award"
msgstr "ha ricevuto una medaglia"
-#: const/__init__.py:128
+#: const/__init__.py:129
msgid "marked best answer"
msgstr "ha accettato una risposta"
-#: const/__init__.py:129
+#: const/__init__.py:130
msgid "upvoted"
msgstr "ha dato un voto positivo"
-#: const/__init__.py:130
+#: const/__init__.py:131
msgid "downvoted"
msgstr "ha dato un voto positivo"
-#: const/__init__.py:131
+#: const/__init__.py:132
msgid "canceled vote"
msgstr "ha annullato un voto"
-#: const/__init__.py:132
+#: const/__init__.py:133
msgid "deleted question"
msgstr "ha cancellato una domanda"
-#: const/__init__.py:133
+#: const/__init__.py:134
msgid "deleted answer"
msgstr "ha cancellato una risposta"
-#: const/__init__.py:134
+#: const/__init__.py:135
msgid "marked offensive"
msgstr "ha segnalato come inappropriata"
-#: const/__init__.py:135
+#: const/__init__.py:136
msgid "updated tags"
msgstr "ha aggiornato i tag"
-#: const/__init__.py:136
+#: const/__init__.py:137
msgid "selected favorite"
msgstr "ha scelto un tag preferito"
-#: const/__init__.py:137
+#: const/__init__.py:138
msgid "completed user profile"
msgstr "ha completato il suo profilo utente"
-#: const/__init__.py:138
+#: const/__init__.py:139
msgid "email update sent to user"
msgstr "aggiornamento via mail inviato all'utente"
-#: const/__init__.py:141
-#, fuzzy
+#: const/__init__.py:142
msgid "reminder about unanswered questions sent"
-msgstr "vedi domande senza risposta"
+msgstr "notifica le domande inviate che non hanno avuto risposta"
-#: const/__init__.py:143
+#: const/__init__.py:146
+msgid "reminder about accepting the best answer sent"
+msgstr "notifica quando la risposta viene considerata la migliore"
+
+#: const/__init__.py:148
msgid "mentioned in the post"
msgstr "menzionato nel post"
-#: const/__init__.py:194
+#: const/__init__.py:199
msgid "question_answered"
msgstr "risposta_a_una_domanda"
-#: const/__init__.py:195
+#: const/__init__.py:200
msgid "question_commented"
msgstr "commento_a_una_domanda"
-#: const/__init__.py:196
+#: const/__init__.py:201
msgid "answer_commented"
msgstr "risposta_commentata"
-#: const/__init__.py:197
+#: const/__init__.py:202
msgid "answer_accepted"
msgstr "risposta_accettata"
-#: const/__init__.py:201
+#: const/__init__.py:206
msgid "[closed]"
msgstr "[chiusa]"
-#: const/__init__.py:202
+#: const/__init__.py:207
msgid "[deleted]"
msgstr "[cancellata]"
-#: const/__init__.py:203 views/readers.py:613
+#: const/__init__.py:208 views/readers.py:578
msgid "initial version"
msgstr "versione iniziale"
-#: const/__init__.py:204
+#: const/__init__.py:209
msgid "retagged"
msgstr "ritaggata"
-#: const/__init__.py:212
+#: const/__init__.py:217
msgid "off"
msgstr ""
-#: const/__init__.py:213
-#, fuzzy
+#: const/__init__.py:218
msgid "exclude ignored"
-msgstr "escludi tag ignorati"
+msgstr "escludi gli ignorati"
-#: const/__init__.py:214
-#, fuzzy
+#: const/__init__.py:219
msgid "only selected"
-msgstr "Selezionato individualmente"
+msgstr "unico selezionato"
-#: const/__init__.py:218
+#: const/__init__.py:223
msgid "instantly"
msgstr "immediatamente"
-#: const/__init__.py:219
+#: const/__init__.py:224
msgid "daily"
msgstr "ogni giorno"
-#: const/__init__.py:220
+#: const/__init__.py:225
msgid "weekly"
msgstr "ogni settimana"
-#: const/__init__.py:221
+#: const/__init__.py:226
msgid "no email"
msgstr "mai"
-#: const/__init__.py:228
+#: const/__init__.py:233
msgid "identicon"
msgstr ""
-#: const/__init__.py:229
-#, fuzzy
+#: const/__init__.py:234
msgid "mystery-man"
-msgstr "ieri"
+msgstr "mystery-man"
-#: const/__init__.py:230
+#: const/__init__.py:235
msgid "monsterid"
msgstr ""
-#: const/__init__.py:231
-#, fuzzy
+#: const/__init__.py:236
msgid "wavatar"
-msgstr ""
-"Come cambio la mia immagine personale (gravatar)? Che cos'è il gravatar?"
+msgstr "wavatar"
-#: const/__init__.py:232
+#: const/__init__.py:237
msgid "retro"
msgstr ""
-#: const/__init__.py:279
+#: const/__init__.py:284
msgid "gold"
msgstr "oro"
-#: const/__init__.py:280
+#: const/__init__.py:285
msgid "silver"
msgstr "argento"
-#: const/__init__.py:281
+#: const/__init__.py:286
msgid "bronze"
msgstr "bronzo"
-#: const/__init__.py:293
+#: const/__init__.py:298
msgid "None"
msgstr ""
-#: const/__init__.py:294
+#: const/__init__.py:299
msgid "Gravatar"
msgstr ""
-#: const/__init__.py:295
+#: const/__init__.py:300
msgid "Uploaded Avatar"
msgstr ""
#: const/message_keys.py:15
-#, fuzzy
msgid "most relevant questions"
-msgstr "poni una domanda interessante per gli altri"
+msgstr "la domanda più rilevante"
#: const/message_keys.py:16
-#, fuzzy
msgid "click to see most relevant questions"
-msgstr "clicca qui per vedere le domande più votate"
+msgstr "clicca qui se vuoi vedere le domande più rilevanti"
#: const/message_keys.py:17
-#, fuzzy
msgid "by relevance"
-msgstr "rilevanza"
+msgstr "per rilevanza"
#: const/message_keys.py:18
msgid "click to see the oldest questions"
msgstr "clicca qui per vedere le domande più vecchie"
#: const/message_keys.py:19
-#, fuzzy
msgid "by date"
-msgstr "Conferma"
+msgstr "per data"
#: const/message_keys.py:20
msgid "click to see the newest questions"
@@ -2239,37 +2270,32 @@ msgid "click to see the least recently updated questions"
msgstr "clicca qui per vedere le domande modificate meno recentemente"
#: const/message_keys.py:22
-#, fuzzy
msgid "by activity"
-msgstr "attività"
+msgstr "per attività"
#: const/message_keys.py:23
msgid "click to see the most recently updated questions"
msgstr "clicca qui per vedere le domande modificate più di recente"
#: const/message_keys.py:24
-#, fuzzy
msgid "click to see the least answered questions"
-msgstr "clicca qui per vedere le domande più vecchie"
+msgstr "clicca qui per vedere l'ultima domanda risposta"
#: const/message_keys.py:25
-#, fuzzy
msgid "by answers"
-msgstr "risposte"
+msgstr "per risposte"
#: const/message_keys.py:26
-#, fuzzy
msgid "click to see the most answered questions"
-msgstr "clicca qui per vedere le domande più votate"
+msgstr "clicca qui per vedere le domande più risposte"
#: const/message_keys.py:27
msgid "click to see least voted questions"
msgstr "clicca per vedere le domande meno votate"
#: const/message_keys.py:28
-#, fuzzy
msgid "by votes"
-msgstr "voti"
+msgstr "per voti"
#: const/message_keys.py:29
msgid "click to see most voted questions"
@@ -2286,28 +2312,24 @@ msgid "i-names are not supported"
msgstr "i-names non sono supportati"
#: deps/django_authopenid/forms.py:233
-#, fuzzy, python-format
msgid "Please enter your %(username_token)s"
-msgstr "Per favore inserisci il tuo username"
+msgstr "Per favore inserisci il tuo %(username_token)s"
#: deps/django_authopenid/forms.py:259
-#, fuzzy
msgid "Please, enter your user name"
msgstr "Per favore inserisci il tuo username"
#: deps/django_authopenid/forms.py:263
-#, fuzzy
msgid "Please, enter your password"
msgstr "Per favore inserisci la tua password"
#: deps/django_authopenid/forms.py:270 deps/django_authopenid/forms.py:274
-#, fuzzy
msgid "Please, enter your new password"
-msgstr "Per favore inserisci la tua password"
+msgstr "Per favore inserisci la tua nuova password"
#: deps/django_authopenid/forms.py:285
msgid "Passwords did not match"
-msgstr ""
+msgstr "Le password non corrispondono"
#: deps/django_authopenid/forms.py:297
#, python-format
@@ -2339,7 +2361,7 @@ msgid "Incorrect username."
msgstr "Mi spiace, questo username non esiste"
#: deps/django_authopenid/urls.py:9 deps/django_authopenid/urls.py:12
-#: deps/django_authopenid/urls.py:15 setup_templates/settings.py:203
+#: deps/django_authopenid/urls.py:15 setup_templates/settings.py:205
msgid "signin/"
msgstr "signin/"
@@ -2352,9 +2374,8 @@ msgid "complete/"
msgstr "complete/"
#: deps/django_authopenid/urls.py:15
-#, fuzzy
msgid "complete-oauth/"
-msgstr "complete/"
+msgstr "complete-oauth/"
#: deps/django_authopenid/urls.py:19
msgid "register/"
@@ -2369,21 +2390,18 @@ msgid "logout/"
msgstr "logout/"
#: deps/django_authopenid/urls.py:30
-#, fuzzy
msgid "recover/"
-msgstr "riapri/"
+msgstr "recupera/"
#: deps/django_authopenid/util.py:378
-#, fuzzy, python-format
msgid "%(site)s user name and password"
-msgstr "Per favore inserisci username e password"
+msgstr "Per favore inserisci username e password di %(site)s"
#: deps/django_authopenid/util.py:384
msgid "Create a password-protected account"
msgstr ""
#: deps/django_authopenid/util.py:385
-#, fuzzy
msgid "Change your password"
msgstr "Cambia password"
@@ -2392,24 +2410,20 @@ msgid "Sign in with Yahoo"
msgstr ""
#: deps/django_authopenid/util.py:480
-#, fuzzy
msgid "AOL screen name"
msgstr "Nome utente"
#: deps/django_authopenid/util.py:488
-#, fuzzy
msgid "OpenID url"
msgstr "url OpenID:"
#: deps/django_authopenid/util.py:517
-#, fuzzy
msgid "Flickr user name"
-msgstr "nome utente"
+msgstr "nome utente Flickr"
#: deps/django_authopenid/util.py:525
-#, fuzzy
msgid "Technorati user name"
-msgstr "Scegli un nome utente"
+msgstr "nome utente di Technorati"
#: deps/django_authopenid/util.py:533
msgid "WordPress blog name"
@@ -2424,24 +2438,20 @@ msgid "LiveJournal blog name"
msgstr ""
#: deps/django_authopenid/util.py:557
-#, fuzzy
msgid "ClaimID user name"
-msgstr "nome utente"
+msgstr "nome utente di ClaimID"
#: deps/django_authopenid/util.py:565
-#, fuzzy
msgid "Vidoop user name"
-msgstr "nome utente"
+msgstr "nome utente di Vidoop"
#: deps/django_authopenid/util.py:573
-#, fuzzy
msgid "Verisign user name"
-msgstr "nome utente"
+msgstr "nome utente Verisign"
#: deps/django_authopenid/util.py:608
-#, fuzzy, python-format
msgid "Change your %(provider)s password"
-msgstr "Cambia password"
+msgstr "Cambia password di %(provider)s"
#: deps/django_authopenid/util.py:612
#, python-format
@@ -2454,12 +2464,10 @@ msgid "Create password for %(provider)s"
msgstr ""
#: deps/django_authopenid/util.py:625
-#, fuzzy, python-format
msgid "Connect your %(provider)s account to %(site_name)s"
-msgstr "Utilizza OpenID per accedere a questo sito"
+msgstr "Collega il tuo account %(provider)s per %(site_name)s"
#: deps/django_authopenid/util.py:634
-#, fuzzy, python-format
msgid "Signin with %(provider)s user name and password"
msgstr "Per favore inserisci username e password"
@@ -2482,9 +2490,8 @@ msgid ""
msgstr ""
#: deps/django_authopenid/views.py:365
-#, fuzzy
msgid "Your new password saved"
-msgstr "New password created"
+msgstr "Nuova password salvata"
#: deps/django_authopenid/views.py:469
msgid "The login password combination was not correct"
@@ -2520,9 +2527,8 @@ msgid "Login method %(provider_name)s does not exist"
msgstr ""
#: deps/django_authopenid/views.py:663
-#, fuzzy
msgid "Oops, sorry - there was some error - please try again"
-msgstr "le due password non coincidono, riprova"
+msgstr "Oops! C'è stato un errore, per favore riprova"
#: deps/django_authopenid/views.py:754
#, python-format
@@ -2536,9 +2542,8 @@ msgstr ""
"Il tuo indirizzo e-mail dev'essere verificato &mdash; vedi %(details_url)s"
#: deps/django_authopenid/views.py:1092
-#, fuzzy, python-format
msgid "Recover your %(site)s account"
-msgstr "Scegli una nuova password"
+msgstr "Recupera la password su %(site)s"
#: deps/django_authopenid/views.py:1162
msgid "Please check your email and visit the enclosed link."
@@ -2548,24 +2553,28 @@ msgstr ""
msgid "Site"
msgstr "Sito"
-#: deps/livesettings/values.py:106
+#: deps/livesettings/values.py:68
+msgid "Main"
+msgstr ""
+
+#: deps/livesettings/values.py:127
msgid "Base Settings"
msgstr "Impostazioni base"
-#: deps/livesettings/values.py:213
+#: deps/livesettings/values.py:234
msgid "Default value: \"\""
msgstr "Valore predefinito: \"\""
-#: deps/livesettings/values.py:220
+#: deps/livesettings/values.py:241
msgid "Default value: "
msgstr "Valore predefinito:"
-#: deps/livesettings/values.py:223
+#: deps/livesettings/values.py:244
#, python-format
msgid "Default value: %s"
msgstr "Valore predefinito: %s"
-#: deps/livesettings/values.py:601
+#: deps/livesettings/values.py:622
#, python-format
msgid "Allowed image file types are %(types)s"
msgstr "I tipi di file immagine consentiti sono %(types)s"
@@ -2615,10 +2624,6 @@ msgstr "Impostazioni incluse in %(name)s."
msgid "You don't have permission to edit values."
msgstr "Non hai i permessi per modificare i valori."
-#: deps/livesettings/templates/livesettings/group_settings.html:68
-msgid "Setting groups"
-msgstr "Gruppi di impostazioni"
-
#: deps/livesettings/templates/livesettings/site_settings.html:27
msgid "Edit Site Settings"
msgstr "Modifica impostazioni del sito"
@@ -2669,15 +2674,15 @@ msgstr ""
#: management/commands/post_emailed_questions.py:55
#, python-format
msgid ""
-"<p>Sorry, there was an error posting your question please contact the %(site)"
-"s administrator</p>"
+"<p>Sorry, there was an error posting your question please contact the "
+"%(site)s administrator</p>"
msgstr ""
#: management/commands/post_emailed_questions.py:61
#, python-format
msgid ""
-"<p>Sorry, in order to post questions on %(site)s by email, please <a href=\"%"
-"(url)s\">register first</a></p>"
+"<p>Sorry, in order to post questions on %(site)s by email, please <a href="
+"\"%(url)s\">register first</a></p>"
msgstr ""
#: management/commands/post_emailed_questions.py:69
@@ -2686,6 +2691,19 @@ msgid ""
"of your user account</p>"
msgstr ""
+#: management/commands/send_accept_answer_reminders.py:57
+#, python-format
+msgid "Accept the best answer for %(question_count)d of your questions"
+msgstr ""
+
+#: management/commands/send_accept_answer_reminders.py:62
+msgid "Please accept the best answer for this question:"
+msgstr "Per favore accetta la migliore risposta per questa domanda:"
+
+#: management/commands/send_accept_answer_reminders.py:64
+msgid "Please accept the best answer for these questions:"
+msgstr "Per favore accetta la migliore risposta per queste domande:"
+
#: management/commands/send_email_alerts.py:411
#, python-format
msgid "%(question_count)d updated question about %(topics)s"
@@ -2701,8 +2719,8 @@ msgstr[0] ""
"<p>Caro %(name)s,</p></p>ci sono degli aggiornamenti riguardanti questa "
"domanda sul forum Q&A:</p>"
msgstr[1] ""
-"<p>Caro %(name)s,</p><p>ci sono degli aggiornamenti riguardanti queste %"
-"(num) domande sul forum Q&A:</p>"
+"<p>Caro %(name)s,</p><p>ci sono degli aggiornamenti riguardanti queste "
+"%(num) domande sul forum Q&A:</p>"
#: management/commands/send_email_alerts.py:438
msgid "new question"
@@ -2748,8 +2766,8 @@ msgstr ""
#: management/commands/send_email_alerts.py:490
#, python-format
msgid ""
-"go to %(email_settings_link)s to change frequency of email updates or %"
-"(admin_email)s administrator"
+"go to %(email_settings_link)s to change frequency of email updates or "
+"%(admin_email)s administrator"
msgstr ""
"<p>Ricorda che puoi <a href='%(email_settings_link)s'>modificare</a> la "
"frequenza degli aggiornamenti via e-mail o disabilitarli completamente.<br/"
@@ -2758,75 +2776,78 @@ msgstr ""
"l'amministratore del forum all'indirizzo %(admin_email)s.</p><p>Cordialmente,"
"</p><p>Il tuo amico server del forum Q&A</p>"
-#: management/commands/send_unanswered_question_reminders.py:80
+#: management/commands/send_unanswered_question_reminders.py:56
#, python-format
msgid "%(question_count)d unanswered question about %(topics)s"
msgid_plural "%(question_count)d unanswered questions about %(topics)s"
msgstr[0] ""
msgstr[1] ""
-#: models/__init__.py:316
+#: models/__init__.py:317
msgid ""
"Sorry, you cannot accept or unaccept best answers because your account is "
"blocked"
msgstr ""
"Mi spiace, non puoi accettare risposte perché il tuo account è stato bloccato"
-#: models/__init__.py:320
+#: models/__init__.py:321
msgid ""
"Sorry, you cannot accept or unaccept best answers because your account is "
"suspended"
msgstr "Mi spiace, non puoi accettare risposte perché il tuo account è sospeso"
-#: models/__init__.py:333
-#, fuzzy, python-format
+#: models/__init__.py:334
msgid ""
">%(points)s points required to accept or unaccept your own answer to your "
"own question"
-msgstr "Mi spiace, non puoi accettare una tua risposta a una tua domanda"
+msgstr "Ti servono più di %(points)s punti per accettare o negare la risposta alla tua stessa domanda"
+
+#: models/__init__.py:353
+#, python-format
+msgid ""
+"Sorry, you will be able to accept this answer only after %(will_be_able_at)s"
+msgstr ""
-#: models/__init__.py:347
-#, fuzzy, python-format
+#: models/__init__.py:361
msgid ""
-"Sorry, only original author of the question - %(username)s - can accept or "
-"unaccept the best answer"
+"Sorry, only moderators or original author of the question - %(username)s - "
+"can accept or unaccept the best answer"
msgstr ""
-"Mi spiace, solo l'autore della domanda, %(username)s, può accettare una "
-"risposta"
+"Mi spiace, solo il moderatore o l'autore della domanda, %(username)s, può accettare la risposta migliore"
-#: models/__init__.py:375
+#: models/__init__.py:389
msgid "cannot vote for own posts"
msgstr "Mi spiace, non puoi votare per i tuoi post"
-#: models/__init__.py:378
+#: models/__init__.py:392
msgid "Sorry your account appears to be blocked "
msgstr "Mi spiace, il tuo account è stato bloccato"
-#: models/__init__.py:383
+#: models/__init__.py:397
msgid "Sorry your account appears to be suspended "
msgstr "Mi spiace, il tuo account è stato sospeso"
-#: models/__init__.py:393
+#: models/__init__.py:407
#, python-format
msgid ">%(points)s points required to upvote"
msgstr ""
"Serve avere più di %(points)s punti reputazione per poter votare a favore"
-#: models/__init__.py:399
+#: models/__init__.py:413
#, python-format
msgid ">%(points)s points required to downvote"
msgstr ""
"Serve avere più di %(points)s punti reputazione per poter votare contro"
-#: models/__init__.py:414
+#: models/__init__.py:428
msgid "Sorry, blocked users cannot upload files"
msgstr "Mi spiace, gli utenti bloccati non possono caricare files"
-#: models/__init__.py:415
+#: models/__init__.py:429
msgid "Sorry, suspended users cannot upload files"
msgstr "Mi spiace, gli utenti sospesi non possono caricare files"
-#: models/__init__.py:417
+#: models/__init__.py:431
#, python-format
msgid ""
"uploading images is limited to users with >%(min_rep)s reputation points"
@@ -2834,21 +2855,21 @@ msgstr ""
"Mi spiace, serve avere più di %(min_rep)s punti reputazione per caricare "
"immagini"
-#: models/__init__.py:436 models/__init__.py:503 models/__init__.py:918
+#: models/__init__.py:450 models/__init__.py:517 models/__init__.py:932
msgid "blocked users cannot post"
msgstr ""
"Mi spiace, il tuo account è stato bloccato; non puoi fare nuovi post finché "
"la questione non verrà risolta. Contatta l'amministratore del forum per "
"trovare una soluzione."
-#: models/__init__.py:437 models/__init__.py:921
+#: models/__init__.py:451 models/__init__.py:935
msgid "suspended users cannot post"
msgstr ""
"Mi spiace, il tuo account è stato sospeso; non puoi fare nuovi post finché "
"la questione non verrà risolta. Puoi però modificare i tuoi vecchi post. "
"Contatta l'amministratore del forum per trovare una soluzione."
-#: models/__init__.py:464
+#: models/__init__.py:478
#, python-format
msgid ""
"Sorry, comments (except the last one) are editable only within %(minutes)s "
@@ -2859,21 +2880,20 @@ msgid_plural ""
msgstr[0] ""
msgstr[1] ""
-#: models/__init__.py:476
-#, fuzzy
+#: models/__init__.py:490
msgid "Sorry, but only post owners or moderators can edit comments"
msgstr ""
"Mi spiace, solo gli autori, i moderatori e gli amministratori possono "
-"cambiare i tag di una domanda cancellata"
+"modificare i commenti"
-#: models/__init__.py:489
+#: models/__init__.py:503
msgid ""
"Sorry, since your account is suspended you can comment only your own posts"
msgstr ""
"Mi spiace, visto che il tuo account è sospeso puoi commentare solo i tuoi "
"post"
-#: models/__init__.py:493
+#: models/__init__.py:507
#, python-format
msgid ""
"Sorry, to comment any post a minimum reputation of %(min_rep)s points is "
@@ -2883,8 +2903,7 @@ msgstr ""
"Per commentare gli altri post serve avere almeno %(min_rep)s punti "
"reputazione. "
-#: models/__init__.py:521
-#, fuzzy
+#: models/__init__.py:535
msgid ""
"This post has been deleted and can be seen only by post owners, site "
"administrators and moderators"
@@ -2892,7 +2911,7 @@ msgstr ""
"Questo post è stato cancellato e può essere consultato solo dall'autore, dai "
"moderatori e dagli amministratori"
-#: models/__init__.py:538
+#: models/__init__.py:552
msgid ""
"Sorry, only moderators, site administrators and post owners can edit deleted "
"posts"
@@ -2900,27 +2919,25 @@ msgstr ""
"Mi spiace, solo l'autore, i moderatori e gli amministratori possono "
"modificare un post cancellato."
-#: models/__init__.py:553
+#: models/__init__.py:567
msgid "Sorry, since your account is blocked you cannot edit posts"
msgstr ""
"Mi spiace, non puoi modificare alcun post perché il tuo account è stato "
"bloccato"
-#: models/__init__.py:557
+#: models/__init__.py:571
msgid "Sorry, since your account is suspended you can edit only your own posts"
msgstr ""
"Mi spiace, puoi modificare solo i tuoi post perché il tuo account è sospeso"
-#: models/__init__.py:562
-#, fuzzy, python-format
+#: models/__init__.py:576
msgid ""
"Sorry, to edit wiki posts, a minimum reputation of %(min_rep)s is required"
msgstr ""
-"Mi spiace, per modificare i post appartenenti allo wiki servono almeno %"
-"(min_rep)s punti reputazione"
+"Mi spiace, per modificare i post appartenenti allo wiki servono almeno "
+"%(min_rep)s punti reputazione"
-#: models/__init__.py:569
-#, fuzzy, python-format
+#: models/__init__.py:583
msgid ""
"Sorry, to edit other people's posts, a minimum reputation of %(min_rep)s is "
"required"
@@ -2928,7 +2945,7 @@ msgstr ""
"Mi spiace, per modificare i post altrui servono almeno %(min_rep)s punti "
"reputazione"
-#: models/__init__.py:632
+#: models/__init__.py:646
msgid ""
"Sorry, cannot delete your question since it has an upvoted answer posted by "
"someone else"
@@ -2942,17 +2959,17 @@ msgstr[1] ""
"Mi spiace, non puoi cancellare la tua domanda perché qualcun altro ha "
"fornito delle risposte con voti a favore"
-#: models/__init__.py:647
+#: models/__init__.py:661
msgid "Sorry, since your account is blocked you cannot delete posts"
msgstr "Mi spiace, non puoi cancellare post perché il tuo account è blocato"
-#: models/__init__.py:651
+#: models/__init__.py:665
msgid ""
"Sorry, since your account is suspended you can delete only your own posts"
msgstr ""
"Mi spiace, puoi cancellare solo i tuoi post perché il tuo account è sospeso"
-#: models/__init__.py:655
+#: models/__init__.py:669
#, python-format
msgid ""
"Sorry, to deleted other people' posts, a minimum reputation of %(min_rep)s "
@@ -2961,16 +2978,16 @@ msgstr ""
"Mi spiace, per cancellare i post altrui servono almeno %(min_rep)s punti "
"reputazione"
-#: models/__init__.py:675
+#: models/__init__.py:689
msgid "Sorry, since your account is blocked you cannot close questions"
msgstr ""
"Mi spiace, non puoi chiudere domande perché il tuo account è stato bloccato"
-#: models/__init__.py:679
+#: models/__init__.py:693
msgid "Sorry, since your account is suspended you cannot close questions"
msgstr "Mi spiace, non puoi chiudere domande perché il tuo account è sospeso"
-#: models/__init__.py:683
+#: models/__init__.py:697
#, python-format
msgid ""
"Sorry, to close other people' posts, a minimum reputation of %(min_rep)s is "
@@ -2979,7 +2996,7 @@ msgstr ""
"Mi spiace, per chiudere post altrui servono almeno %(min_rep)s punti "
"reputazione."
-#: models/__init__.py:692
+#: models/__init__.py:706
#, python-format
msgid ""
"Sorry, to close own question a minimum reputation of %(min_rep)s is required"
@@ -2987,16 +3004,16 @@ msgstr ""
"Mi spiace, per chiudere una tua domanda servono almeno %(min_rep)s punti "
"reputazione."
-#: models/__init__.py:716
+#: models/__init__.py:730
#, python-format
msgid ""
-"Sorry, only administrators, moderators or post owners with reputation > %"
-"(min_rep)s can reopen questions."
+"Sorry, only administrators, moderators or post owners with reputation > "
+"%(min_rep)s can reopen questions."
msgstr ""
"Mi spiace, solo amministratori, moderatori e autori con più di %(min_rep)s "
"punti reputazione possono riaprire domande."
-#: models/__init__.py:722
+#: models/__init__.py:736
#, python-format
msgid ""
"Sorry, to reopen own question a minimum reputation of %(min_rep)s is required"
@@ -3004,39 +3021,39 @@ msgstr ""
"Mi spiace, per riaprire una tua domanda devi avere almeno %(min_rep)s punti "
"reputazione."
-#: models/__init__.py:742
+#: models/__init__.py:756
msgid "cannot flag message as offensive twice"
msgstr ""
"Hai già segnalato questo messaggio come inappropriato, non puoi farlo una "
"seconda volta."
-#: models/__init__.py:747
+#: models/__init__.py:761
msgid "blocked users cannot flag posts"
msgstr ""
"Non puoi segnalare questo messaggio come inappropriato perché il tuo account "
"è stato bloccato."
-#: models/__init__.py:749
+#: models/__init__.py:763
msgid "suspended users cannot flag posts"
msgstr ""
"Non puoi segnalare questo messaggio come inappropriato perché il tuo account "
"è sospeso."
-#: models/__init__.py:751
+#: models/__init__.py:765
#, python-format
msgid "need > %(min_rep)s points to flag spam"
msgstr ""
"Mi spiace, servono più di %(min_rep)s punti reputazione per segnalare un "
"post come inappropriato."
-#: models/__init__.py:770
+#: models/__init__.py:784
#, python-format
msgid "%(max_flags_per_day)s exceeded"
msgstr ""
"Mi spiace, hai già segnalato %(max_flags_per_day)s post come offensivi oggi, "
"hai superato il massimo giornaliero."
-#: models/__init__.py:785
+#: models/__init__.py:799
msgid ""
"Sorry, only question owners, site administrators and moderators can retag "
"deleted questions"
@@ -3044,19 +3061,19 @@ msgstr ""
"Mi spiace, solo gli autori, i moderatori e gli amministratori possono "
"cambiare i tag di una domanda cancellata"
-#: models/__init__.py:792
+#: models/__init__.py:806
msgid "Sorry, since your account is blocked you cannot retag questions"
msgstr ""
"Mi spiace, non puoi cambiare i tag perché il tuo account è stato bloccato."
-#: models/__init__.py:796
+#: models/__init__.py:810
msgid ""
"Sorry, since your account is suspended you can retag only your own questions"
msgstr ""
"Mi spiace, puoi cambiare i tag solo alle tue domande perché il tuo account è "
"sospeso."
-#: models/__init__.py:800
+#: models/__init__.py:814
#, python-format
msgid ""
"Sorry, to retag questions a minimum reputation of %(min_rep)s is required"
@@ -3064,160 +3081,148 @@ msgstr ""
"Mi spiace, servono almeno %(min_rep)s punti reputazione per cambiare i tag "
"di una domanda"
-#: models/__init__.py:819
+#: models/__init__.py:833
msgid "Sorry, since your account is blocked you cannot delete comment"
msgstr ""
"Mi spiace, non puoi cancellare commenti perché il tuo account è stato "
"bloccato."
-#: models/__init__.py:823
+#: models/__init__.py:837
msgid ""
"Sorry, since your account is suspended you can delete only your own comments"
msgstr ""
"Mi spiace, puoi cancellare solo i tuoi commenti perché il tuo account è "
"sospeso."
-#: models/__init__.py:827
+#: models/__init__.py:841
#, python-format
msgid "Sorry, to delete comments reputation of %(min_rep)s is required"
msgstr ""
"Mi spiace, servono almeno %(min_rep)s punti reputazione per cancellare "
"commenti."
-#: models/__init__.py:850
+#: models/__init__.py:864
msgid "cannot revoke old vote"
msgstr "Mi spiace, non è possibile annullare voti."
-#: models/__init__.py:1325 utils/functions.py:70
+#: models/__init__.py:1339 utils/functions.py:70
#, python-format
msgid "on %(date)s"
msgstr "il %(date)s"
-#: models/__init__.py:1327
+#: models/__init__.py:1341
msgid "in two days"
msgstr ""
-#: models/__init__.py:1329
+#: models/__init__.py:1343
msgid "tomorrow"
msgstr ""
-#: models/__init__.py:1331
-#, fuzzy, python-format
+#: models/__init__.py:1345
msgid "in %(hr)d hour"
msgid_plural "in %(hr)d hours"
msgstr[0] "%(hr)d ora fa"
msgstr[1] "%(hr)d ore fa"
-#: models/__init__.py:1333
-#, fuzzy, python-format
+#: models/__init__.py:1347
msgid "in %(min)d min"
msgid_plural "in %(min)d mins"
msgstr[0] "%(min)d minuto fa"
msgstr[1] "%(min)d minuti fa"
-#: models/__init__.py:1334
+#: models/__init__.py:1348
#, python-format
msgid "%(days)d day"
msgid_plural "%(days)d days"
msgstr[0] ""
msgstr[1] ""
-#: models/__init__.py:1336
+#: models/__init__.py:1350
#, python-format
msgid ""
"New users must wait %(days)s before answering their own question. You can "
"post an answer %(left)s"
msgstr ""
-#: models/__init__.py:1502
-#, fuzzy
+#: models/__init__.py:1516
msgid "Anonymous"
msgstr "utente non registrato"
-#: models/__init__.py:1598 views/users.py:365
+#: models/__init__.py:1612 views/users.py:368
msgid "Site Adminstrator"
msgstr "Amministratore del sito"
-#: models/__init__.py:1600 views/users.py:367
+#: models/__init__.py:1614 views/users.py:370
msgid "Forum Moderator"
msgstr "Moderatore del forum"
-#: models/__init__.py:1602 views/users.py:369
+#: models/__init__.py:1616 views/users.py:372
msgid "Suspended User"
msgstr "Utente sospeso"
-#: models/__init__.py:1604 views/users.py:371
+#: models/__init__.py:1618 views/users.py:374
msgid "Blocked User"
msgstr "Utente bloccato"
-#: models/__init__.py:1606 views/users.py:373
+#: models/__init__.py:1620 views/users.py:376
msgid "Registered User"
msgstr "Utente registrato"
-#: models/__init__.py:1608
+#: models/__init__.py:1622
msgid "Watched User"
msgstr "Utente in prova"
-#: models/__init__.py:1610
+#: models/__init__.py:1624
msgid "Approved User"
msgstr "Utente approvato"
-#: models/__init__.py:1719
-#, fuzzy, python-format
+#: models/__init__.py:1733
msgid "%(username)s karma is %(reputation)s"
-msgstr "hai %(reputation)s punti reputazione"
+msgstr "%(username)s ha %(reputation)s punti reputazione"
-#: models/__init__.py:1729
+#: models/__init__.py:1743
#, python-format
msgid "one gold badge"
msgid_plural "%(count)d gold badges"
msgstr[0] ""
msgstr[1] ""
-#: models/__init__.py:1736
-#, fuzzy, python-format
+#: models/__init__.py:1750
+#, python-format
msgid "one silver badge"
msgid_plural "%(count)d silver badges"
-msgstr[0] ""
-"Per ottenere le medaglie d'argento ci vuole del tempo. Se ne hai ottenuta "
-"una, vuol dire che hai dato un grande contributo alla comunità."
-msgstr[1] ""
-"Per ottenere le medaglie d'argento ci vuole del tempo. Se ne hai ottenuta "
-"una, vuol dire che hai dato un grande contributo alla comunità."
+msgstr[0] "una medaglia d'argento"
+msgstr[1] "%(count)d medaglie d'argento"
-#: models/__init__.py:1743
-#, fuzzy, python-format
+#: models/__init__.py:1757
+#, python-format
msgid "one bronze badge"
msgid_plural "%(count)d bronze badges"
-msgstr[0] ""
-"Se partecipi regolarmente a questa comunità, verrai sicuramente premiato con "
-"delle medaglie di bronzo."
-msgstr[1] ""
-"Se partecipi regolarmente a questa comunità, verrai sicuramente premiato con "
-"delle medaglie di bronzo."
+msgstr[0] "una medaglia di bronzo"
+msgstr[1] "%(count)d medaglie di bronzo"
-#: models/__init__.py:1754
+#: models/__init__.py:1768
#, python-format
msgid "%(item1)s and %(item2)s"
msgstr ""
-#: models/__init__.py:1758
+#: models/__init__.py:1772
#, python-format
msgid "%(user)s has %(badges)s"
msgstr ""
-#: models/__init__.py:2165 models/__init__.py:2171 models/__init__.py:2176
-#: models/__init__.py:2181
-#, fuzzy, python-format
+#: models/__init__.py:2179 models/__init__.py:2185 models/__init__.py:2190
+#: models/__init__.py:2195
+#, python-format
msgid "Re: \"%(title)s\""
-msgstr "nuova domanda"
+msgstr "Re:\"%(title)s\""
-#: models/__init__.py:2186 models/__init__.py:2191
-#, fuzzy, python-format
+#: models/__init__.py:2200 models/__init__.py:2205
+#, python-format
msgid "Question: \"%(title)s\""
-msgstr "nuova domanda"
+msgstr "Domanda: \"%(title)s\""
-#: models/__init__.py:2372
+#: models/__init__.py:2386
#, python-format
msgid ""
"Congratulations, you have received a badge '%(badge_name)s'. Check out <a "
@@ -3226,7 +3231,7 @@ msgstr ""
"Congratulazioni, hai ricevuto la medaglia %(badge_name)s. Controlla il <a "
"href=\"%(user_profile)s\">tuo profilo</a>."
-#: models/__init__.py:2551 views/commands.py:396
+#: models/__init__.py:2565 views/commands.py:396
msgid "Your tag subscription was saved, thanks!"
msgstr ""
@@ -3237,23 +3242,22 @@ msgid ""
msgstr ""
#: models/answer.py:112
-#, fuzzy
msgid "Sorry, this answer has been removed and is no longer accessible"
msgstr "Mi spiace, questa domanda è stata cancellata e non è più accessibile"
#: models/badges.py:129
-#, fuzzy, python-format
+#, python-format
msgid "Deleted own post with %(votes)s or more upvotes"
-msgstr "Ha cancellato un proprio post con un punteggio di -3 o meno"
+msgstr "Ha cancellato un proprio post con un punteggio di %(votes)s o più"
#: models/badges.py:133
msgid "Disciplined"
msgstr "Ordinato"
#: models/badges.py:151
-#, fuzzy, python-format
+#, python-format
msgid "Deleted own post with %(votes)s or more downvotes"
-msgstr "Ha cancellato un proprio post con un punteggio di -3 o meno"
+msgstr "Ha cancellato un proprio post con un punteggio di %(votes)s o più"
#: models/badges.py:155
msgid "Peer Pressure"
@@ -3273,7 +3277,6 @@ msgid "Supporter"
msgstr "Sostenitore"
#: models/badges.py:219
-#, fuzzy
msgid "First upvote"
msgstr "Primo voto positivo"
@@ -3282,38 +3285,35 @@ msgid "Critic"
msgstr "Critico"
#: models/badges.py:228
-#, fuzzy
msgid "First downvote"
msgstr "Primo voto negativo"
#: models/badges.py:237
-#, fuzzy
msgid "Civic Duty"
msgstr "Senso civico"
#: models/badges.py:238
-#, fuzzy, python-format
+#, python-format
msgid "Voted %(num)s times"
-msgstr "Ha votato almeno 300 volte"
+msgstr "Votata almeno %(num)s volte"
#: models/badges.py:252
-#, fuzzy, python-format
+#, python-format
msgid "Answered own question with at least %(num)s up votes"
-msgstr "Ha risposto da solo a una sua domanda con almeno 3 voti"
+msgstr "Ha risposto da solo ad una sua domanda con almeno %(num)s voti"
#: models/badges.py:256
msgid "Self-Learner"
msgstr "Autodidatta"
#: models/badges.py:304
-#, fuzzy
msgid "Nice Answer"
msgstr "Buona risposta"
#: models/badges.py:309 models/badges.py:321 models/badges.py:333
-#, fuzzy, python-format
+#, python-format
msgid "Answer voted up %(num)s times"
-msgstr "Risposta votata 10 volte"
+msgstr "Risposta votata %(num)s volte"
#: models/badges.py:316
msgid "Good Answer"
@@ -3328,9 +3328,9 @@ msgid "Nice Question"
msgstr "Buona domanda"
#: models/badges.py:345 models/badges.py:357 models/badges.py:369
-#, fuzzy, python-format
+#, python-format
msgid "Question voted up %(num)s times"
-msgstr "Domanda votata 10 volte"
+msgstr "Domanda votata %(num)s volte"
#: models/badges.py:352
msgid "Good Question"
@@ -3353,23 +3353,21 @@ msgid "Popular Question"
msgstr "Domanda gettonata"
#: models/badges.py:418 models/badges.py:429 models/badges.py:441
-#, fuzzy, python-format
+#, python-format
msgid "Asked a question with %(views)s views"
-msgstr "Ha posto una domanda con più di 1000 consultazioni"
+msgstr "Ha posto una domanda con %(views)s consultazioni"
#: models/badges.py:425
msgid "Notable Question"
msgstr "Domanda notevole"
#: models/badges.py:436
-#, fuzzy
msgid "Famous Question"
-msgstr "Domanda famosa"
+msgstr "Domande famose"
#: models/badges.py:450
-#, fuzzy
msgid "Asked a question and accepted an answer"
-msgstr "La domanda non ha risposte accettate"
+msgstr "Domanda inserita e risposta accettata"
#: models/badges.py:453
msgid "Scholar"
@@ -3380,33 +3378,32 @@ msgid "Enlightened"
msgstr "Illuminato"
#: models/badges.py:499
-#, fuzzy, python-format
+#, python-format
msgid "First answer was accepted with %(num)s or more votes"
-msgstr "La sua prima risposta è stata accettata con almeno 10 voti"
+msgstr "La sua prima risposta è stata accettata con almeno %(num)s voti"
#: models/badges.py:507
msgid "Guru"
msgstr "Guru"
#: models/badges.py:510
-#, fuzzy, python-format
+#, python-format
msgid "Answer accepted with %(num)s or more votes"
-msgstr "La sua prima risposta è stata accettata con almeno 10 voti"
+msgstr "La sua prima risposta è stata accettata con almeno %(num)s voti"
#: models/badges.py:518
-#, fuzzy, python-format
+#, python-format
msgid ""
"Answered a question more than %(days)s days later with at least %(votes)s "
"votes"
msgstr ""
-"Ha risposto a una domanda vecchia di almeno 60 giorni ottenendo almeno 5 voti"
+"Ha risposto a una domanda vecchia di almeno %(days)s giorni ottenendo almeno %(votes)s voti"
#: models/badges.py:525
msgid "Necromancer"
msgstr "Negromante"
#: models/badges.py:548
-#, fuzzy
msgid "Citizen Patrol"
msgstr "Sempre in guardia"
@@ -3443,7 +3440,6 @@ msgid "Associate Editor"
msgstr ""
#: models/badges.py:627
-#, fuzzy, python-format
msgid "Edited %(num)s entries"
msgstr "Ha fatto almeno 100 revisioni"
@@ -3464,7 +3460,6 @@ msgid "Completed all user profile fields"
msgstr "Ha completato tutti i campi del suo profilo utente"
#: models/badges.py:663
-#, fuzzy, python-format
msgid "Question favorited by %(num)s users"
msgstr "Domanda inserita tra le \"preferite\" da almeno 25 utenti"
@@ -3486,21 +3481,18 @@ msgid "Visited site every day for %(num)s days in a row"
msgstr ""
#: models/badges.py:732
-#, fuzzy
msgid "Commentator"
-msgstr "Documentazione"
+msgstr "Commentatore"
#: models/badges.py:736
-#, fuzzy, python-format
msgid "Posted %(num_comments)s comments"
-msgstr "(%(comment_count)s commento)"
+msgstr "Inseriti (%(comment_count)s commenti"
#: models/badges.py:752
msgid "Taxonomist"
msgstr "Tassonomista"
#: models/badges.py:756
-#, fuzzy, python-format
msgid "Created a tag used by %(num)s questions"
msgstr "Ha creato un tag usato da almeno 50 domande"
@@ -3512,53 +3504,52 @@ msgstr "Esperto"
msgid "Very active in one tag"
msgstr "Molto attivo in domande con lo stesso tag"
-#: models/meta.py:112
+#: models/meta.py:116
msgid ""
"Sorry, the comment you are looking for is no longer accessible, because the "
"parent question has been removed"
msgstr ""
-#: models/meta.py:119
+#: models/meta.py:123
msgid ""
"Sorry, the comment you are looking for is no longer accessible, because the "
"parent answer has been removed"
msgstr ""
-#: models/question.py:72
+#: models/question.py:70
#, python-format
msgid "\" and \"%s\""
msgstr ""
-#: models/question.py:75
-#, fuzzy
+#: models/question.py:73
msgid "\" and more"
-msgstr "Scopri di più"
+msgstr "\" ed altro ancora"
-#: models/question.py:452
+#: models/question.py:492
msgid "Sorry, this question has been deleted and is no longer accessible"
msgstr "Mi spiace, questa domanda è stata cancellata e non è più accessibile"
-#: models/question.py:908
+#: models/question.py:948
#, python-format
msgid "%(author)s modified the question"
msgstr "%(author)s ha modificato la sua domanda"
-#: models/question.py:912
+#: models/question.py:952
#, python-format
msgid "%(people)s posted %(new_answer_count)s new answers"
msgstr "%(people)s ha/hanno scritto %(new_answer_count)s nuova/e risposta/e"
-#: models/question.py:917
+#: models/question.py:957
#, python-format
msgid "%(people)s commented the question"
msgstr "%(people)s ha/hanno commentato la domanda"
-#: models/question.py:922
+#: models/question.py:962
#, python-format
msgid "%(people)s commented answers"
msgstr "%(people)s ha/hanno commentato alcune risposte"
-#: models/question.py:924
+#: models/question.py:964
#, python-format
msgid "%(people)s commented an answer"
msgstr "%(people)s ha/hanno commentato una risposta"
@@ -3571,8 +3562,8 @@ msgstr "<em>Modificato da un moderatore. Motivo:</em> %(reason)s"
#: models/repute.py:153
#, python-format
msgid ""
-"%(points)s points were added for %(username)s's contribution to question %"
-"(question_title)s"
+"%(points)s points were added for %(username)s's contribution to question "
+"%(question_title)s"
msgstr ""
" %(username)s ha guadagnato %(points)s punti reputazione per i suoi "
"contributi alla domanda %(question_title)s"
@@ -3630,6 +3621,14 @@ msgstr "Ogni settimana"
msgid "No email"
msgstr "Mai"
+#: skins/old/templates/user_profile/user_info.html:90
+msgid "todays unused votes"
+msgstr "voti rimanenti per oggi"
+
+#: skins/old/templates/user_profile/user_info.html:91
+msgid "votes left"
+msgstr "voti rimanenti"
+
#: templatetags/extra_filters.py:145 templatetags/extra_filters_jinja.py:240
msgid "no items in counter"
msgstr "no"
@@ -3644,9 +3643,8 @@ msgid "Oops, apologies - there was some error"
msgstr ""
#: utils/decorators.py:109
-#, fuzzy
msgid "Please login to post"
-msgstr "Accedi o registrati"
+msgstr "Accedi o registrati per inserire domande"
#: utils/decorators.py:205
msgid "Spam was detected on your post, sorry for if this is a mistake"
@@ -3770,9 +3768,8 @@ msgid "You have %(votes_left)s votes left for today"
msgstr "Puoi votare ancora %(votes_left)s volte oggi"
#: views/commands.py:122
-#, fuzzy
msgid "Sorry, but anonymous users cannot access the inbox"
-msgstr "mi spiace, devi essere registrato per accettare una risposta"
+msgstr "Spiacenti, gli utenti anonimi non possono accedere ai messaggi in arrivo"
#: views/commands.py:192
msgid "Sorry, something is not right here..."
@@ -3801,14 +3798,12 @@ msgid "Tag subscription was canceled (<a href=\"%(url)s\">undo</a>)."
msgstr ""
#: views/commands.py:409
-#, fuzzy, python-format
msgid "Please sign in to subscribe for: %(tags)s"
-msgstr "Accedi o registrati"
+msgstr "Accedi per sottoscrivere i tag: %(tags)s"
#: views/commands.py:542
-#, fuzzy
msgid "Please sign in to vote"
-msgstr "Puoi accedere al tuo account da qui:"
+msgstr "Accedi per votare"
#: views/meta.py:83
msgid "Q&A forum feedback"
@@ -3823,122 +3818,101 @@ msgid "We look forward to hearing your feedback! Please, give it next time :)"
msgstr ""
"Siamo curiosi di sentire la tua opinione! Sarà per la prossima volta :)"
-#: views/readers.py:131
-#, fuzzy, python-format
+#: views/readers.py:151
msgid "%(q_num)s question, tagged"
msgid_plural "%(q_num)s questions, tagged"
-msgstr[0] "%(q_num)s domanda"
-msgstr[1] "%(q_num)s domande"
+msgstr[0] "%(q_num)s domanda, taggata"
+msgstr[1] "%(q_num)s domande, taggate"
-#: views/readers.py:139
+#: views/readers.py:159
#, python-format
msgid "%(q_num)s question"
msgid_plural "%(q_num)s questions"
msgstr[0] "%(q_num)s domanda"
msgstr[1] "%(q_num)s domande"
-#: views/readers.py:177
+#: views/readers.py:199
#, python-format
msgid "%(badge_count)d %(badge_level)s badge"
msgid_plural "%(badge_count)d %(badge_level)s badges"
msgstr[0] "%(badge_count)d%(badge_level)s medaglia"
msgstr[1] "%(badge_count)d%(badge_level)s medaglie"
-#: views/readers.py:232
-msgid "vote"
-msgid_plural "votes"
-msgstr[0] "voto"
-msgstr[1] "voti"
-
-#: views/readers.py:235
-#, fuzzy
-msgid "answer"
-msgid_plural "answers"
-msgstr[0] "risposta"
-msgstr[1] "risposta"
-
-#: views/readers.py:238
-msgid "view"
-msgid_plural "views"
-msgstr[0] "consultazione"
-msgstr[1] "consultazioni"
-
-#: views/readers.py:440
-#, fuzzy
+#: views/readers.py:407
msgid ""
"Sorry, the comment you are looking for has been deleted and is no longer "
"accessible"
-msgstr "Mi spiace, questa domanda è stata cancellata e non è più accessibile"
+msgstr "Mi spiace, questo commento è stata cancellato e non è più accessibile"
-#: views/users.py:224
+#: views/users.py:227
msgid "moderate this user"
msgstr "modera questo utente"
-#: views/users.py:225
+#: views/users.py:228
msgid "moderate user"
msgstr "modera utente"
-#: views/users.py:380
+#: views/users.py:383
msgid "user profile"
msgstr "profilo utente"
-#: views/users.py:381
+#: views/users.py:384
msgid "user profile overview"
msgstr "profilo"
-#: views/users.py:685
+#: views/users.py:694
msgid "recent user activity"
msgstr "attività recente"
-#: views/users.py:686
+#: views/users.py:695
msgid "profile - recent activity"
msgstr "profilo utente &mdash; attività recente"
-#: views/users.py:772
+#: views/users.py:781
msgid "comments and answers to others questions"
msgstr "commenti e risposte a domande"
-#: views/users.py:773
+#: views/users.py:782
msgid "profile - responses"
msgstr "profilo utente &mdash; risposte"
-#: views/users.py:847
+#: views/users.py:856
msgid "user vote record"
msgstr "elenco dei voti dati"
-#: views/users.py:848
+#: views/users.py:857
msgid "profile - votes"
msgstr "profilo utente &mdash; voti"
-#: views/users.py:883
+#: views/users.py:892
msgid "user reputation in the community"
msgstr "punti reputazione"
-#: views/users.py:884
+#: views/users.py:893
msgid "profile - user reputation"
msgstr "profilo utente &mdash; reputazione"
-#: views/users.py:911
+#: views/users.py:920
msgid "users favorite questions"
msgstr "domande preferite"
-#: views/users.py:912
+#: views/users.py:921
msgid "profile - favorite questions"
msgstr "profilo utente &mdash; domande preferite"
-#: views/users.py:932 views/users.py:936
+#: views/users.py:941 views/users.py:945
msgid "changes saved"
msgstr "i cambiamenti sono stati salvati"
-#: views/users.py:942
+#: views/users.py:951
msgid "email updates canceled"
msgstr "notifiche via e-mail cancellate"
-#: views/users.py:960
+#: views/users.py:969
msgid "email subscription settings"
msgstr "impostazioni notifiche via e-mail"
-#: views/users.py:961
+#: views/users.py:970
msgid "profile - email subscriptions"
msgstr "profilo utente &mdash; notifiche via e-mail"
@@ -3961,14 +3935,12 @@ msgid "Error uploading file. Please contact the site administrator. Thank you."
msgstr "Errore nel caricamento del file. Contatta un amministratore."
#: views/writers.py:191
-#, fuzzy
msgid "Please log in to ask questions"
-msgstr "Ricorda, puoi sempre porre tu stesso una domanda!"
+msgstr "Accedi per fare una domanda"
#: views/writers.py:492
-#, fuzzy
msgid "Please log in to answer questions"
-msgstr "vedi domande senza risposta"
+msgstr "Accedi per rispondere alle domande"
#: views/writers.py:598
#, python-format
@@ -3976,13 +3948,12 @@ msgid ""
"Sorry, you appear to be logged out and cannot post comments. Please <a href="
"\"%(sign_in_url)s\">sign in</a>."
msgstr ""
-"Gli utenti non registrati non possono lasciare commenti. <a href=\"%"
-"(sign_in_url)s\">Accedi o registrati</a>."
+"Gli utenti non registrati non possono lasciare commenti. <a href="
+"\"%(sign_in_url)s\">Accedi o registrati</a>."
#: views/writers.py:646
-#, fuzzy
msgid "Sorry, anonymous users cannot edit comments"
-msgstr "Mi spiace, gli utenti non registrati non possono caricare file."
+msgstr "Mi spiace, gli utenti non registrati non possono modificare i commenti."
#: views/writers.py:654
#, python-format
@@ -3990,13 +3961,56 @@ msgid ""
"Sorry, you appear to be logged out and cannot delete comments. Please <a "
"href=\"%(sign_in_url)s\">sign in</a>."
msgstr ""
-"Gli utenti non registrati non possono cancellare commenti. <a href=\"%"
-"(sign_in_url)s\">Accedi o registrati</a>."
+"Gli utenti non registrati non possono cancellare commenti. <a href="
+"\"%(sign_in_url)s\">Accedi o registrati</a>."
#: views/writers.py:675
msgid "sorry, we seem to have some technical difficulties"
msgstr "Mi spiace, ci sono dei problemi tecnici"
+#~ msgid "Keys to connect the site with external services like Facebook, etc."
+#~ msgstr ""
+#~ "Chiavi per connettere il sito con servizi esterni come Facebook, ecc."
+
+#, fuzzy
+#~ msgid "License settings"
+#~ msgstr "Impostazioni base"
+
+#~ msgid "Minimum reputation required to perform actions"
+#~ msgstr "Reputazione minima per eseguire operazioni"
+
+#, fuzzy
+#~ msgid "Site modes"
+#~ msgstr "Siti"
+
+#~ msgid "Q&A forum website parameters and urls"
+#~ msgstr "Parametri ed url per il Q&A forum"
+
+#~ msgid "Skin and User Interface settings"
+#~ msgstr "Impostazioni della skin e dell'interfaccia utente"
+
+#~ msgid "Limits applicable to votes and moderation flags"
+#~ msgstr "Limiti riguardanti i voti e i post segnati come inappropriati"
+
+#~ msgid "Setting groups"
+#~ msgstr "Gruppi di impostazioni"
+
+#~ msgid "vote"
+#~ msgid_plural "votes"
+#~ msgstr[0] "voto"
+#~ msgstr[1] "voti"
+
+#, fuzzy
+#~ msgid "answer"
+#~ msgid_plural "answers"
+#~ msgstr[0] "risposta"
+#~ msgstr[1] "risposta"
+
+#~ msgid "view"
+#~ msgid_plural "views"
+#~ msgstr[0] "consultazione"
+#~ msgstr[1] "consultazioni"
+
#~ msgid ""
#~ "This option currently defines default frequency of emailed updates in the "
#~ "following five categories: questions asked by user, answered by user, "
@@ -4121,8 +4135,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#, fuzzy
#~ msgid ""
#~ "Below is the list of available badges and number \n"
-#~ "of times each type of badge has been awarded. Give us feedback at %"
-#~ "(feedback_faq_url)s.\n"
+#~ "of times each type of badge has been awarded. Give us feedback at "
+#~ "%(feedback_faq_url)s.\n"
#~ msgstr ""
#~ "Qui sotto trovi una lista delle medaglie disponibili, con indicato il "
#~ "numero di persone che le hanno ottenute. Hai qualche idea per delle nuove "
@@ -4233,8 +4247,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid ""
#~ "For example, if you ask an interesting question or give a helpful answer, "
#~ "your input will be upvoted. On the other hand if the answer is misleading "
-#~ "- it will be downvoted. Each vote in favor will generate <strong>%"
-#~ "(REP_GAIN_FOR_RECEIVING_UPVOTE)s</strong> points, each vote against will "
+#~ "- it will be downvoted. Each vote in favor will generate <strong>"
+#~ "%(REP_GAIN_FOR_RECEIVING_UPVOTE)s</strong> points, each vote against will "
#~ "subtract <strong>%(REP_LOSS_FOR_RECEIVING_DOWNVOTE)s</strong> points. "
#~ "There is a limit of <strong>%(MAX_REP_GAIN_PER_USER_PER_DAY)s</strong> "
#~ "points that can be accumulated for a question or answer per day. The "
@@ -4245,8 +4259,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ "gli utenti ti daranno dei voti positivi. D'altro canto, se la risposta è "
#~ "sbagliata, gli utenti ti daranno dei voti negativi. Ogni voto a tuo "
#~ "favore ti procura <strong>%(REP_GAIN_FOR_RECEIVING_UPVOTE)s</strong> "
-#~ "punti reputazione; ogni voto contro di te ti fa perdere <strong>%"
-#~ "(REP_LOSS_FOR_RECEIVING_DOWNVOTE)s</strong> punti reputazione. Puoi "
+#~ "punti reputazione; ogni voto contro di te ti fa perdere <strong>"
+#~ "%(REP_LOSS_FOR_RECEIVING_DOWNVOTE)s</strong> punti reputazione. Puoi "
#~ "guadagnare un massimo di <strong>%(MAX_REP_GAIN_PER_USER_PER_DAY)s</"
#~ "strong> punti al giorno per ogni tua domanda o risposta. Nella tabella "
#~ "qui sotto trovi quanti punti reputazione sono necessari per ogni tipo di "
@@ -4728,9 +4742,6 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid "Your answer"
#~ msgstr "La tua risposta"
-#~ msgid "Be the first one to answer this question!"
-#~ msgstr "Rispondi per primo!"
-
#~ msgid "you can answer anonymously and then login"
#~ msgstr ""
#~ "<span class='strong big'>Comincia pure a rispondere </span> - la tua "
@@ -4789,9 +4800,6 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid "subsribe to rss feed"
#~ msgstr "sottoscrivi al feed delle domande"
-#~ msgid "Question tags"
-#~ msgstr "Tag"
-
#~ msgid "question asked"
#~ msgstr "Chiesta il"
@@ -4942,8 +4950,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid "validate %(email)s info or go to %(change_email_url)s"
#~ msgstr ""
-#~ "<span class=\"strong big\">Un'e-mail di verifica è stata spedita a %"
-#~ "(email)s.</span> <strong>Clicca sul link contenuto nell'e-mail</strong> "
+#~ "<span class=\"strong big\">Un'e-mail di verifica è stata spedita a "
+#~ "%(email)s.</span> <strong>Clicca sul link contenuto nell'e-mail</strong> "
#~ "per verificare il tuo indirizzo. La verifica dell'e-mail è necessaria "
#~ "per l'utilizzo del forum. Se preferisci usare <strong>un altro indirizzo</"
#~ "strong>, puoi <a href='%(change_email_url)s'><strong>cambiarlo di nuovo</"
@@ -5007,8 +5015,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid ""
#~ "%(username)s already exists, choose another name for \n"
-#~ " %(provider)s. Email is required too, see %"
-#~ "(gravatar_faq_url)s\n"
+#~ " %(provider)s. Email is required too, see "
+#~ "%(gravatar_faq_url)s\n"
#~ " "
#~ msgstr ""
#~ "<p><span class='strong big'>Oops... l'utente %(username)s esiste già.</"
@@ -5633,12 +5641,6 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid "age unit"
#~ msgstr "anni"
-#~ msgid "todays unused votes"
-#~ msgstr "voti rimanenti per oggi"
-
-#~ msgid "votes left"
-#~ msgstr "voti rimanenti"
-
#~ msgid "moderation"
#~ msgstr "modera"
@@ -5754,9 +5756,6 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgid "Answer to:"
#~ msgstr "consigli per le risposte"
-#~ msgid "User profile"
-#~ msgstr "Profilo utente"
-
#~ msgid "graph of user reputation"
#~ msgstr "registro dei punti reputazione"
@@ -6580,8 +6579,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgstr "Login attraverso un sito esterno"
#~ msgid ""
-#~ "how to login with password through external login website or use %"
-#~ "(feedback_url)s"
+#~ "how to login with password through external login website or use "
+#~ "%(feedback_url)s"
#~ msgstr ""
#~ "Inserisci qui le informazioni per il login attraverso un sito esterno o "
#~ "utilizza %(feedback_url)s"
@@ -6608,8 +6607,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ "Someone has requested to reset your password on %(site_url)s.\n"
#~ "If it were not you, it is safe to ignore this email."
#~ msgstr ""
-#~ "Qualcuno sta cercando di recuperare la tua password per il sito %"
-#~ "(site_url)s.\n"
+#~ "Qualcuno sta cercando di recuperare la tua password per il sito "
+#~ "%(site_url)s.\n"
#~ "Se non si tratta di te, puoi ignorare questo messaggio."
#~ msgid ""
@@ -6711,8 +6710,8 @@ msgstr "Mi spiace, ci sono dei problemi tecnici"
#~ msgstr "subscriptions"
#~ msgid ""
-#~ "go to %(email_settings_url)s to change frequency of email updates or %"
-#~ "(admin_email)s administrator"
+#~ "go to %(email_settings_url)s to change frequency of email updates or "
+#~ "%(admin_email)s administrator"
#~ msgstr ""
#~ "<p>Please remember that you can always <a href='%(link)s'>adjust</a> "
#~ "frequency of the email updates or turn them off entirely.<br/>If you "
diff --git a/askbot/locale/it/LC_MESSAGES/djangojs.mo b/askbot/locale/it/LC_MESSAGES/djangojs.mo
deleted file mode 100644
index 8db0bfa4..00000000
--- a/askbot/locale/it/LC_MESSAGES/djangojs.mo
+++ /dev/null
Binary files differ
diff --git a/askbot/locale/it/LC_MESSAGES/djangojs.po b/askbot/locale/it/LC_MESSAGES/djangojs.po
index e681e807..654c82a6 100644
--- a/askbot/locale/it/LC_MESSAGES/djangojs.po
+++ b/askbot/locale/it/LC_MESSAGES/djangojs.po
@@ -7,9 +7,9 @@ msgid ""
msgstr ""
"Project-Id-Version: 0.7\n"
"Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2011-11-22 12:17-0400\n"
-"PO-Revision-Date: 2011-09-28 08:20-0800\n"
-"Last-Translator: Rosandra Cuello <rosandra.cuello@gmail.com>\n"
+"POT-Creation-Date: 2011-10-08 02:27-0500\n"
+"PO-Revision-Date: 2011-11-19 06:41+0100\n"
+"Last-Translator: Luca Ferroni <luca@befair.it>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"Language: \n"
"MIME-Version: 1.0\n"
@@ -151,19 +151,19 @@ msgstr "Post eliminato"
#: skins/common/media/js/post.js:537 skins/old/media/js/post.js:535
msgid "Follow"
-msgstr ""
+msgstr "Segui"
#: skins/common/media/js/post.js:546 skins/common/media/js/post.js.c:555
#: skins/old/media/js/post.js:544 skins/old/media/js/post.js.c:553
#, c-format
msgid "%s follower"
msgid_plural "%s followers"
-msgstr[0] ""
-msgstr[1] ""
+msgstr[0] "seguito da %s persona"
+msgstr[1] "seguito da %s persone"
#: skins/common/media/js/post.js:551 skins/old/media/js/post.js:549
msgid "<div>Following</div><div class=\"unfollow\">Unfollow</div>"
-msgstr ""
+msgstr "<div>Segui</div><div class=\"unfollow\">Non seguire</div>"
#: skins/common/media/js/post.js:613
msgid "undelete"
@@ -209,18 +209,18 @@ msgstr "Vuoi davvero cancellare il commento?"
#: skins/common/media/js/post.js:1624 skins/old/media/js/post.js:1621
msgid "Please enter question title (>10 characters)"
-msgstr ""
+msgstr "Per piacere inserisce un titolo per la tua domanda (>10 caratteri)"
#: skins/common/media/js/tag_selector.js:15
#: skins/old/media/js/tag_selector.js:15
msgid "Tag \"<span></span>\" matches:"
-msgstr ""
+msgstr "Il tag \"<span></span>\" corrisponde a:"
#: skins/common/media/js/tag_selector.js:84
#: skins/old/media/js/tag_selector.js:84
#, c-format
msgid "and %s more, not shown..."
-msgstr ""
+msgstr "e altre %s non mostrate..."
#: skins/common/media/js/user.js:14
msgid "Please select at least one item"
@@ -234,22 +234,22 @@ msgstr[1] ""
#: skins/common/media/js/user.js:125 skins/old/media/js/user.js:129
msgid "Please <a href=\"%(signin_url)s\">signin</a> to follow %(username)s"
-msgstr ""
+msgstr "<a href=\"%(signin_url)s\">Entra</a> per seguire %(username)s"
#: skins/common/media/js/user.js:157 skins/old/media/js/user.js:161
#, c-format
msgid "unfollow %s"
-msgstr ""
+msgstr "non seguire %s"
#: skins/common/media/js/user.js:160 skins/old/media/js/user.js:164
#, c-format
msgid "following %s"
-msgstr ""
+msgstr "stai seguendo %s"
#: skins/common/media/js/user.js:166 skins/old/media/js/user.js:170
#, c-format
msgid "follow %s"
-msgstr ""
+msgstr "segui %s"
#: skins/common/media/js/utils.js:43
msgid "click to close"
diff --git a/askbot/locale/ja/LC_MESSAGES/django.mo b/askbot/locale/ja/LC_MESSAGES/django.mo
index efb75cc8..7f98e565 100644
--- a/askbot/locale/ja/LC_MESSAGES/django.mo
+++ b/askbot/locale/ja/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/ko/LC_MESSAGES/django.mo b/askbot/locale/ko/LC_MESSAGES/django.mo
index 5f175980..c117d238 100644
--- a/askbot/locale/ko/LC_MESSAGES/django.mo
+++ b/askbot/locale/ko/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/pt_BR/LC_MESSAGES/django.mo b/askbot/locale/pt_BR/LC_MESSAGES/django.mo
index 172807a7..2e17a8ef 100644
--- a/askbot/locale/pt_BR/LC_MESSAGES/django.mo
+++ b/askbot/locale/pt_BR/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/ro/LC_MESSAGES/django.mo b/askbot/locale/ro/LC_MESSAGES/django.mo
index 7b66727a..33ff42f7 100644
--- a/askbot/locale/ro/LC_MESSAGES/django.mo
+++ b/askbot/locale/ro/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/ru/LC_MESSAGES/django.mo b/askbot/locale/ru/LC_MESSAGES/django.mo
index c41a06bf..4d01e193 100644
--- a/askbot/locale/ru/LC_MESSAGES/django.mo
+++ b/askbot/locale/ru/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/sr/LC_MESSAGES/django.mo b/askbot/locale/sr/LC_MESSAGES/django.mo
index 00cab4f5..3e3ca237 100644
--- a/askbot/locale/sr/LC_MESSAGES/django.mo
+++ b/askbot/locale/sr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/tr/LC_MESSAGES/django.mo b/askbot/locale/tr/LC_MESSAGES/django.mo
index 5e511994..5f3f7a79 100644
--- a/askbot/locale/tr/LC_MESSAGES/django.mo
+++ b/askbot/locale/tr/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/vi/LC_MESSAGES/django.mo b/askbot/locale/vi/LC_MESSAGES/django.mo
index 4f175ad6..cb82d178 100644
--- a/askbot/locale/vi/LC_MESSAGES/django.mo
+++ b/askbot/locale/vi/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/zh-tw/LC_MESSAGES/django.mo b/askbot/locale/zh-tw/LC_MESSAGES/django.mo
index 9e398bb2..3a914dd3 100644
--- a/askbot/locale/zh-tw/LC_MESSAGES/django.mo
+++ b/askbot/locale/zh-tw/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/locale/zh_CN/LC_MESSAGES/django.mo b/askbot/locale/zh_CN/LC_MESSAGES/django.mo
index 59fb0403..e0c7877e 100644
--- a/askbot/locale/zh_CN/LC_MESSAGES/django.mo
+++ b/askbot/locale/zh_CN/LC_MESSAGES/django.mo
Binary files differ
diff --git a/askbot/management/commands/merge_users.py b/askbot/management/commands/merge_users.py
new file mode 100644
index 00000000..4691c4b3
--- /dev/null
+++ b/askbot/management/commands/merge_users.py
@@ -0,0 +1,60 @@
+from django.core.management.base import CommandError, BaseCommand
+from askbot.models import User
+
+
+class Command(BaseCommand):
+ args = '<from_user_id> <to_user_id>'
+ help = 'Merge an account and all information from a <user_id> to a <user_id>, deleting the <from_user>'
+
+ def parse_arguments(self, *arguments):
+ if len(arguments) != 2:
+ raise CommandError('Arguments are <from_user_id> to <to_user_id>')
+ self.from_user = User.objects.get(id = arguments[0])
+ self.to_user = User.objects.get(id = arguments[1])
+
+ def handle(self, *arguments, **options):
+ self.parse_arguments(*arguments)
+
+ for rel in User._meta.get_all_related_objects():
+ try:
+ self.process_field(rel.model, rel.field.name)
+ except Exception, error:
+ self.stdout.write(u'Warning: %s\n' % error)
+
+ for rel in User._meta.get_all_related_many_to_many_objects():
+ try:
+ self.process_m2m_field(rel.model, rel.field.name)
+ except Exception, error:
+ self.stdout.write(u'Warning: %s\n' % error)
+
+ self.to_user.reputation += self.from_user.reputation - 1
+ self.to_user.gold += self.from_user.gold
+ self.to_user.silver += self.from_user.silver
+ self.to_user.bronze += self.from_user.bronze
+
+ if self.from_user.last_seen > self.to_user.last_seen:
+ self.to_user.last_seen = self.from_user.last_seen
+
+ if self.from_user.date_joined < self.to_user.date_joined:
+ self.to_user.date_joined = self.from_user.date_joined
+
+ self.to_user.save()
+
+ self.from_user.delete()
+
+ def process_field(self, model, field_name):
+ """reassigns the related object to the new user"""
+ filter_condition = {field_name: self.from_user}
+ related_objects_qs = model.objects.filter(**filter_condition)
+ update_condition = {field_name: self.to_user}
+ related_objects_qs.update(**update_condition)
+
+ def process_m2m_field(self, model, field_name):
+ """removes the old user from the M2M relation
+ and adds the new user"""
+ filter_condition = {field_name: self.from_user}
+ related_objects_qs = model.objects.filter(**filter_condition)
+ for obj in related_objects_qs:
+ m2m_field = getattr(obj, field_name)
+ m2m_field.remove(self.from_user)
+ m2m_field.add(self.to_user)
diff --git a/askbot/management/commands/send_accept_answer_reminders.py b/askbot/management/commands/send_accept_answer_reminders.py
new file mode 100644
index 00000000..58b07b45
--- /dev/null
+++ b/askbot/management/commands/send_accept_answer_reminders.py
@@ -0,0 +1,84 @@
+import datetime
+from django.core.management.base import NoArgsCommand
+from django.conf import settings as django_settings
+from askbot import models
+from askbot import const
+from askbot.conf import settings as askbot_settings
+from django.utils.translation import ugettext as _
+from django.utils.translation import ungettext
+from askbot.utils import mail
+from askbot.utils.classes import ReminderSchedule
+
+DEBUG_THIS_COMMAND = False
+
+class Command(NoArgsCommand):
+ def handle_noargs(self, **options):
+ if askbot_settings.ENABLE_ACCEPT_ANSWER_REMINDERS == False:
+ return
+ #get questions without answers, excluding closed and deleted
+ #order it by descending added_at date
+
+ schedule = ReminderSchedule(
+ askbot_settings.DAYS_BEFORE_SENDING_ACCEPT_ANSWER_REMINDER,
+ askbot_settings.ACCEPT_ANSWER_REMINDER_FREQUENCY,
+ askbot_settings.MAX_ACCEPT_ANSWER_REMINDERS
+ )
+
+ questions = models.Question.objects.exclude(
+ deleted = True
+ ).added_between(
+ start = schedule.start_cutoff_date,
+ end = schedule.end_cutoff_date
+ ).filter(
+ answer_count__gt = 0
+ ).filter(
+ answer_accepted = False
+ ).order_by('-added_at')
+ #for all users, excluding blocked
+ #for each user, select a tag filtered subset
+ #format the email reminder and send it
+ for user in models.User.objects.exclude(status = 'b'):
+ user_questions = questions.filter(author = user)
+
+ final_question_list = user_questions.get_questions_needing_reminder(
+ activity_type = const.TYPE_ACTIVITY_ACCEPT_ANSWER_REMINDER_SENT,
+ user = user,
+ recurrence_delay = schedule.recurrence_delay
+ )
+ #todo: rewrite using query set filter
+ #may be a lot more efficient
+
+ question_count = len(final_question_list)
+ if question_count == 0:
+ continue
+
+ #tag_summary = get_tag_summary_from_questions(final_question_list)
+ subject_line = _(
+ 'Accept the best answer for %(question_count)d of your questions'
+ ) % {'question_count': question_count}
+
+ #todo - make a template for these
+ if question_count == 1:
+ reminder_phrase = _('Please accept the best answer for this question:')
+ else:
+ reminder_phrase = _('Please accept the best answer for these questions:')
+ body_text = '<p>' + reminder_phrase + '</p>'
+ body_text += '<ul>'
+ for question in final_question_list:
+ body_text += '<li><a href="%s%s?sort=latest">%s</a></li>' \
+ % (
+ askbot_settings.APP_URL,
+ question.get_absolute_url(),
+ question.title
+ )
+ body_text += '</ul>'
+
+ if DEBUG_THIS_COMMAND:
+ print "User: %s<br>\nSubject:%s<br>\nText: %s<br>\n" % \
+ (user.email, subject_line, body_text)
+ else:
+ mail.send_mail(
+ subject_line = subject_line,
+ body_text = body_text,
+ recipient_list = (user.email,)
+ )
diff --git a/askbot/management/commands/send_email.py b/askbot/management/commands/send_email.py
new file mode 100644
index 00000000..2493c51b
--- /dev/null
+++ b/askbot/management/commands/send_email.py
@@ -0,0 +1,24 @@
+from askbot.utils.mail import send_mail
+from django.core.exceptions import ValidationError
+from django.core.management.base import BaseCommand, CommandError
+from django.core.validators import validate_email
+
+class Command(BaseCommand):
+ args = '<recipients email>'
+ help = 'Sends a test email to the specified email address'
+
+ def handle(self, *args, **options):
+
+ if len(args) != 1:
+ raise CommandError('Recipients email address required')
+
+ try:
+ validate_email(args[0])
+ except ValidationError:
+ raise CommandError('%s is not a valid email address' % (args[0]))
+
+ send_mail(
+ subject_line = 'Askbot Mail Test',
+ body_text = 'Askbot Mail Test',
+ recipient_list = [args[0]],
+ )
diff --git a/askbot/management/commands/send_email_alerts.py b/askbot/management/commands/send_email_alerts.py
index 330e1cc9..c904cdde 100644
--- a/askbot/management/commands/send_email_alerts.py
+++ b/askbot/management/commands/send_email_alerts.py
@@ -3,8 +3,8 @@ from django.core.management.base import NoArgsCommand
from django.core.urlresolvers import reverse
from django.db import connection
from django.db.models import Q, F
-from askbot.models import User, Question, Answer, Tag, QuestionRevision
-from askbot.models import AnswerRevision, Activity, EmailFeedSetting
+from askbot.models import User, Question, Answer, Tag, PostRevision
+from askbot.models import Activity, EmailFeedSetting
from askbot.models import Comment
from askbot.models.question import get_tag_summary_from_questions
from django.utils.translation import ugettext as _
@@ -336,7 +336,7 @@ class Command(NoArgsCommand):
#collect info on all sorts of news that happened after
#the most recent emailing to the user about this question
- q_rev = QuestionRevision.objects.filter(
+ q_rev = PostRevision.objects.question_revisions().filter(
question=q,
revised_at__gt=emailed_at
)
@@ -359,7 +359,7 @@ class Command(NoArgsCommand):
new_ans = new_ans.exclude(author=user)
meta_data['new_ans'] = len(new_ans)
- ans_rev = AnswerRevision.objects.filter(
+ ans_rev = PostRevision.objects.answer_revisions().filter(
answer__question = q,
answer__deleted = False,
revised_at__gt = emailed_at
diff --git a/askbot/management/commands/send_unanswered_question_reminders.py b/askbot/management/commands/send_unanswered_question_reminders.py
index 41fa8569..778a8575 100644
--- a/askbot/management/commands/send_unanswered_question_reminders.py
+++ b/askbot/management/commands/send_unanswered_question_reminders.py
@@ -1,41 +1,36 @@
-import datetime
from django.core.management.base import NoArgsCommand
-from django.conf import settings as django_settings
from askbot import models
from askbot import const
from askbot.conf import settings as askbot_settings
-from django.utils.translation import ugettext as _
from django.utils.translation import ungettext
from askbot.utils import mail
+from askbot.utils.classes import ReminderSchedule
from askbot.models.question import get_tag_summary_from_questions
DEBUG_THIS_COMMAND = False
class Command(NoArgsCommand):
+ """management command that sends reminders
+ about unanswered questions to all users
+ """
def handle_noargs(self, **options):
if askbot_settings.ENABLE_UNANSWERED_REMINDERS == False:
return
#get questions without answers, excluding closed and deleted
#order it by descending added_at date
- wait_period = datetime.timedelta(
- askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER
+ schedule = ReminderSchedule(
+ askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER,
+ askbot_settings.UNANSWERED_REMINDER_FREQUENCY,
+ max_reminders = askbot_settings.MAX_UNANSWERED_REMINDERS
)
- start_cutoff_date = datetime.datetime.now() - wait_period
-
- recurrence_delay = datetime.timedelta(
- askbot_settings.UNANSWERED_REMINDER_FREQUENCY
- )
- max_emails = askbot_settings.MAX_UNANSWERED_REMINDERS
- end_cutoff_date = start_cutoff_date - (max_emails - 1)*recurrence_delay
questions = models.Question.objects.exclude(
closed = True
).exclude(
deleted = True
- ).filter(
- added_at__lt = start_cutoff_date
- ).exclude(
- added_at__lt = end_cutoff_date
+ ).added_between(
+ start = schedule.start_cutoff_date,
+ end = schedule.end_cutoff_date
).filter(
answer_count = 0
).order_by('-added_at')
@@ -46,30 +41,11 @@ class Command(NoArgsCommand):
user_questions = questions.exclude(author = user)
user_questions = user.get_tag_filtered_questions(user_questions)
- final_question_list = list()
- #todo: rewrite using query set filter
- #may be a lot more efficient
- for question in user_questions:
- activity_type = const.TYPE_ACTIVITY_UNANSWERED_REMINDER_SENT
- try:
- activity = models.Activity.objects.get(
- user = user,
- question = question,
- activity_type = activity_type
- )
- now = datetime.datetime.now()
- if now < activity.active_at + recurrence_delay:
- continue
- except models.Activity.DoesNotExist:
- activity = models.Activity(
- user = user,
- question = question,
- activity_type = activity_type,
- content_object = question,
- )
- activity.active_at = datetime.datetime.now()
- activity.save()
- final_question_list.append(question)
+ final_question_list = user_questions.get_questions_needing_reminder(
+ user = user,
+ activity_type = const.TYPE_ACTIVITY_UNANSWERED_REMINDER_SENT,
+ recurrence_delay = schedule.recurrence_delay
+ )
question_count = len(final_question_list)
if question_count == 0:
diff --git a/askbot/middleware/anon_user.py b/askbot/middleware/anon_user.py
index adaf6fd2..7cd9279d 100644
--- a/askbot/middleware/anon_user.py
+++ b/askbot/middleware/anon_user.py
@@ -63,7 +63,8 @@ class ConnectToSessionMessagesMiddleware(object):
"""Adds the ``'askbot_visitor'``key to cookie if user ever
authenticates so that the anonymous user message won't
be shown after the user logs out"""
- if request.user.is_authenticated() and \
+ if hasattr(request, 'user') and \
+ request.user.is_authenticated() and \
'askbot_visitor' not in request.COOKIES :
#import datetime
#max_age = 365*24*60*60
diff --git a/askbot/middleware/forum_mode.py b/askbot/middleware/forum_mode.py
new file mode 100644
index 00000000..874b5559
--- /dev/null
+++ b/askbot/middleware/forum_mode.py
@@ -0,0 +1,35 @@
+from django.http import HttpResponseRedirect
+from django.utils.translation import ugettext as _
+from django.conf import settings
+from django.core.urlresolvers import resolve
+
+from askbot.conf import settings as askbot_settings
+
+PROTECTED_URLS = [
+ 'about',
+ 'feeds',
+ 'privacy',
+ 'tags',
+ 'badges',
+ 'questions',
+ 'question',
+ 'question_revisions',
+ 'users',
+ 'edit_user',
+ 'faq',
+ 'user_profile',
+ 'answer_revisions',
+ 'user_subscriptions']
+
+
+class ForumModeMiddleware(object):
+
+ def process_request(self, request):
+ if (askbot_settings.ASKBOT_CLOSED_FORUM_MODE
+ and request.user.is_anonymous()
+ and resolve(request.path).url_name in PROTECTED_URLS):
+ request.user.message_set.create(_('Please log in to use %s') % \
+ askbot_settings.APP_SHORT_NAME)
+ return HttpResponseRedirect(settings.LOGIN_URL)
+ else:
+ return None
diff --git a/askbot/migrations/0046_add_uniques_to_email_feed_settings.py b/askbot/migrations/0046_add_uniques_to_email_feed_settings.py
new file mode 100644
index 00000000..bab16266
--- /dev/null
+++ b/askbot/migrations/0046_add_uniques_to_email_feed_settings.py
@@ -0,0 +1,306 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+ db.create_unique(u'askbot_emailfeedsetting', ('feed_type', 'subscriber_id'))
+
+ def backwards(self, orm):
+ db.add_unique(u'askbot_emailfeedsetting', ('feed_type', 'subscriber_id'))
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.answerrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Answer']"}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting', 'unique_together': "(('feed_type', 'subscriber'),)"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Question']"}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'has_custom_avatar': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/migrations/0047_auto__add_field_answerrevision_revision_type__add_field_answerrevision.py b/askbot/migrations/0047_auto__add_field_answerrevision_revision_type__add_field_answerrevision.py
new file mode 100644
index 00000000..61ae0ee7
--- /dev/null
+++ b/askbot/migrations/0047_auto__add_field_answerrevision_revision_type__add_field_answerrevision.py
@@ -0,0 +1,352 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding field 'AnswerRevision.revision_type'
+ db.add_column(u'answer_revision', 'revision_type', self.gf('django.db.models.fields.SmallIntegerField')(default=0), keep_default=False)
+
+ # Adding field 'AnswerRevision.title'
+ db.add_column(u'answer_revision', 'title', self.gf('django.db.models.fields.CharField')(default='', max_length=300, blank=True), keep_default=False)
+
+ # Adding field 'AnswerRevision.tagnames'
+ db.add_column(u'answer_revision', 'tagnames', self.gf('django.db.models.fields.CharField')(default='', max_length=125, blank=True), keep_default=False)
+
+ # Adding field 'AnswerRevision.is_anonymous'
+ db.add_column(u'answer_revision', 'is_anonymous', self.gf('django.db.models.fields.BooleanField')(default=False), keep_default=False)
+
+ # Adding unique constraint on 'AnswerRevision', fields ['answer', 'revision']
+ db.create_unique(u'answer_revision', ['answer_id', 'revision'])
+
+ # Adding field 'QuestionRevision.revision_type'
+ db.add_column(u'question_revision', 'revision_type', self.gf('django.db.models.fields.SmallIntegerField')(default=0), keep_default=False)
+
+ # Adding unique constraint on 'QuestionRevision', fields ['question', 'revision']
+ db.create_unique(u'question_revision', ['question_id', 'revision'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'QuestionRevision', fields ['question', 'revision']
+ db.delete_unique(u'question_revision', ['question_id', 'revision'])
+
+ # Removing unique constraint on 'AnswerRevision', fields ['answer', 'revision']
+ db.delete_unique(u'answer_revision', ['answer_id', 'revision'])
+
+ # Deleting field 'AnswerRevision.revision_type'
+ db.delete_column(u'answer_revision', 'revision_type')
+
+ # Deleting field 'AnswerRevision.title'
+ db.delete_column(u'answer_revision', 'title')
+
+ # Deleting field 'AnswerRevision.tagnames'
+ db.delete_column(u'answer_revision', 'tagnames')
+
+ # Deleting field 'AnswerRevision.is_anonymous'
+ db.delete_column(u'answer_revision', 'is_anonymous')
+
+ # Deleting field 'QuestionRevision.revision_type'
+ db.delete_column(u'question_revision', 'revision_type')
+
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.answerrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'),)", 'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Answer']"}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('question', 'revision'),)", 'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Question']"}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/migrations/0048_set_proper_revision_types.py b/askbot/migrations/0048_set_proper_revision_types.py
new file mode 100644
index 00000000..3b55462e
--- /dev/null
+++ b/askbot/migrations/0048_set_proper_revision_types.py
@@ -0,0 +1,313 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import DataMigration
+from django.db import models
+
+class Migration(DataMigration):
+
+ def forwards(self, orm):
+ orm.QuestionRevision.objects.update(revision_type=1)
+ orm.AnswerRevision.objects.update(revision_type=2)
+
+
+ def backwards(self, orm):
+ "Write your backwards methods here."
+
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.answerrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'),)", 'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Answer']"}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('question', 'revision'),)", 'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Question']"}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/migrations/0049_add_postrevision_model.py b/askbot/migrations/0049_add_postrevision_model.py
new file mode 100644
index 00000000..af2816aa
--- /dev/null
+++ b/askbot/migrations/0049_add_postrevision_model.py
@@ -0,0 +1,357 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Adding model 'PostRevision'
+ db.create_table('askbot_postrevision', (
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('revision_type', self.gf('django.db.models.fields.SmallIntegerField')()),
+ ('revision', self.gf('django.db.models.fields.PositiveIntegerField')()),
+ ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='postrevisions', to=orm['auth.User'])),
+ ('revised_at', self.gf('django.db.models.fields.DateTimeField')()),
+ ('summary', self.gf('django.db.models.fields.CharField')(max_length=300, blank=True)),
+ ('text', self.gf('django.db.models.fields.TextField')()),
+ ('title', self.gf('django.db.models.fields.CharField')(default='', max_length=300, blank=True)),
+ ('tagnames', self.gf('django.db.models.fields.CharField')(default='', max_length=125, blank=True)),
+ ('is_anonymous', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('answer', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['askbot.Answer'], null=True, blank=True)),
+ ('question', self.gf('django.db.models.fields.related.ForeignKey')(to=orm['askbot.Question'], null=True, blank=True)),
+ ))
+ db.send_create_signal('askbot', ['PostRevision'])
+
+ # Adding unique constraint on 'PostRevision', fields ['answer', 'revision']
+ db.create_unique('askbot_postrevision', ['answer_id', 'revision'])
+
+ # Adding unique constraint on 'PostRevision', fields ['question', 'revision']
+ db.create_unique('askbot_postrevision', ['question_id', 'revision'])
+
+
+ def backwards(self, orm):
+
+ # Removing unique constraint on 'PostRevision', fields ['question', 'revision']
+ db.delete_unique('askbot_postrevision', ['question_id', 'revision'])
+
+ # Removing unique constraint on 'PostRevision', fields ['answer', 'revision']
+ db.delete_unique('askbot_postrevision', ['answer_id', 'revision'])
+
+ # Deleting model 'PostRevision'
+ db.delete_table('askbot_postrevision')
+
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.answerrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'),)", 'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Answer']"}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.postrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'), ('question', 'revision'))", 'object_name': 'PostRevision'},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Answer']", 'null': 'True', 'blank': 'True'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'postrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('question', 'revision'),)", 'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Question']"}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/migrations/0050_move_qa_revisions_to_postrevision.py b/askbot/migrations/0050_move_qa_revisions_to_postrevision.py
new file mode 100644
index 00000000..36c46551
--- /dev/null
+++ b/askbot/migrations/0050_move_qa_revisions_to_postrevision.py
@@ -0,0 +1,366 @@
+# encoding: utf-8
+import datetime
+
+from django.db import models
+
+from south.db import db
+from south.v2 import DataMigration
+
+class Migration(DataMigration):
+
+ def copy_revision(self, orm, source_revision):
+ question = getattr(source_revision, 'question', None)
+ answer = getattr(source_revision, 'answer', None)
+
+ if bool(question) == bool(answer): # one and only one has to be set (!xor)
+ raise ValueError('Strange source revision! Check this manually')
+
+ if (question and source_revision.revision_type != 1) or (answer and source_revision.revision_type != 2):
+ raise ValueError('Data problem! Check this manually')
+
+ orm.PostRevision.objects.create(
+ question=question,
+ answer=answer,
+
+ revision_type=source_revision.revision_type,
+
+ revision=source_revision.revision,
+ author=source_revision.author,
+ revised_at=source_revision.revised_at,
+ summary=source_revision.summary,
+ text=source_revision.text,
+
+ title=source_revision.title,
+ tagnames=source_revision.tagnames,
+ is_anonymous=source_revision.is_anonymous
+ )
+
+ # INFO: There's no need to migrate also the related Activity instances
+ # - it's because `revision edited` Activities point to Question&Answer instances
+ # ans not to their relevant revisions. (BTW this might be considered a bug)
+
+
+ def forwards(self, orm):
+ # Process revisions
+ for qr in orm.QuestionRevision.objects.all():
+ self.copy_revision(orm=orm, source_revision=qr)
+
+ for ar in orm.AnswerRevision.objects.all():
+ self.copy_revision(orm=orm, source_revision=ar)
+
+
+ def backwards(self, orm):
+ "Write your backwards methods here."
+
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.answerrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'),)", 'object_name': 'AnswerRevision', 'db_table': "u'answer_revision'"},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Answer']"}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answerrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.postrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'), ('question', 'revision'))", 'object_name': 'PostRevision'},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Answer']", 'null': 'True', 'blank': 'True'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'postrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('question', 'revision'),)", 'object_name': 'QuestionRevision', 'db_table': "u'question_revision'"},
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questionrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'revisions'", 'to': "orm['askbot.Question']"}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/migrations/0051_proxify_qa_rev_models.py b/askbot/migrations/0051_proxify_qa_rev_models.py
new file mode 100644
index 00000000..c4e37593
--- /dev/null
+++ b/askbot/migrations/0051_proxify_qa_rev_models.py
@@ -0,0 +1,347 @@
+# encoding: utf-8
+import datetime
+from south.db import db
+from south.v2 import SchemaMigration
+from django.db import models
+
+class Migration(SchemaMigration):
+
+ def forwards(self, orm):
+
+ # Removing unique constraint on 'QuestionRevision', fields ['question', 'revision']
+ db.delete_unique(u'question_revision', ['question_id', 'revision'])
+
+ # Removing unique constraint on 'AnswerRevision', fields ['answer', 'revision']
+ db.delete_unique(u'answer_revision', ['answer_id', 'revision'])
+
+ # Deleting model 'AnswerRevision'
+ db.delete_table(u'answer_revision')
+
+ # Deleting model 'QuestionRevision'
+ db.delete_table(u'question_revision')
+
+
+ def backwards(self, orm):
+
+ # Adding model 'AnswerRevision'
+ db.create_table(u'answer_revision', (
+ ('text', self.gf('django.db.models.fields.TextField')()),
+ ('revised_at', self.gf('django.db.models.fields.DateTimeField')()),
+ ('revision_type', self.gf('django.db.models.fields.SmallIntegerField')()),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('is_anonymous', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='answerrevisions', to=orm['auth.User'])),
+ ('tagnames', self.gf('django.db.models.fields.CharField')(default='', max_length=125, blank=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(default='', max_length=300, blank=True)),
+ ('summary', self.gf('django.db.models.fields.CharField')(max_length=300, blank=True)),
+ ('answer', self.gf('django.db.models.fields.related.ForeignKey')(related_name='revisions', to=orm['askbot.Answer'])),
+ ('revision', self.gf('django.db.models.fields.PositiveIntegerField')()),
+ ))
+ db.send_create_signal('askbot', ['AnswerRevision'])
+
+ # Adding unique constraint on 'AnswerRevision', fields ['answer', 'revision']
+ db.create_unique(u'answer_revision', ['answer_id', 'revision'])
+
+ # Adding model 'QuestionRevision'
+ db.create_table(u'question_revision', (
+ ('text', self.gf('django.db.models.fields.TextField')()),
+ ('revised_at', self.gf('django.db.models.fields.DateTimeField')()),
+ ('revision_type', self.gf('django.db.models.fields.SmallIntegerField')()),
+ ('id', self.gf('django.db.models.fields.AutoField')(primary_key=True)),
+ ('is_anonymous', self.gf('django.db.models.fields.BooleanField')(default=False)),
+ ('author', self.gf('django.db.models.fields.related.ForeignKey')(related_name='questionrevisions', to=orm['auth.User'])),
+ ('tagnames', self.gf('django.db.models.fields.CharField')(default='', max_length=125, blank=True)),
+ ('title', self.gf('django.db.models.fields.CharField')(default='', max_length=300, blank=True)),
+ ('question', self.gf('django.db.models.fields.related.ForeignKey')(related_name='revisions', to=orm['askbot.Question'])),
+ ('summary', self.gf('django.db.models.fields.CharField')(max_length=300, blank=True)),
+ ('revision', self.gf('django.db.models.fields.PositiveIntegerField')()),
+ ))
+ db.send_create_signal('askbot', ['QuestionRevision'])
+
+ # Adding unique constraint on 'QuestionRevision', fields ['question', 'revision']
+ db.create_unique(u'question_revision', ['question_id', 'revision'])
+
+
+ models = {
+ 'askbot.activity': {
+ 'Meta': {'object_name': 'Activity', 'db_table': "u'activity'"},
+ 'active_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'activity_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_auditted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True'}),
+ 'receiving_users': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'received_activity'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'recipients': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'incoming_activity'", 'symmetrical': 'False', 'through': "orm['askbot.ActivityAuditStatus']", 'to': "orm['auth.User']"}),
+ 'summary': ('django.db.models.fields.TextField', [], {'default': "''"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.activityauditstatus': {
+ 'Meta': {'unique_together': "(('user', 'activity'),)", 'object_name': 'ActivityAuditStatus'},
+ 'activity': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Activity']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'status': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.anonymousanswer': {
+ 'Meta': {'object_name': 'AnonymousAnswer'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'anonymous_answers'", 'to': "orm['askbot.Question']"}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.anonymousquestion': {
+ 'Meta': {'object_name': 'AnonymousQuestion'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']", 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ip_addr': ('django.db.models.fields.IPAddressField', [], {'max_length': '15'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'session_key': ('django.db.models.fields.CharField', [], {'max_length': '40'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'})
+ },
+ 'askbot.answer': {
+ 'Meta': {'object_name': 'Answer', 'db_table': "u'answer'"},
+ 'accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'accepted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_answers'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'answers'", 'to': "orm['askbot.Question']"}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.award': {
+ 'Meta': {'object_name': 'Award', 'db_table': "u'award'"},
+ 'awarded_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'badge': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_badge'", 'to': "orm['askbot.BadgeData']"}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'notified': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'award_user'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.badgedata': {
+ 'Meta': {'ordering': "('slug',)", 'object_name': 'BadgeData'},
+ 'awarded_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'awarded_to': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'badges'", 'symmetrical': 'False', 'through': "orm['askbot.Award']", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'slug': ('django.db.models.fields.SlugField', [], {'unique': 'True', 'max_length': '50', 'db_index': 'True'})
+ },
+ 'askbot.comment': {
+ 'Meta': {'ordering': "('-added_at',)", 'object_name': 'Comment', 'db_table': "u'comment'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '2048'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'html': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '2048'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'offensive_flag_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'comments'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.emailfeedsetting': {
+ 'Meta': {'object_name': 'EmailFeedSetting'},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'auto_now_add': 'True', 'blank': 'True'}),
+ 'feed_type': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'frequency': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '8'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reported_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True'}),
+ 'subscriber': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'notification_subscriptions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.favoritequestion': {
+ 'Meta': {'object_name': 'FavoriteQuestion', 'db_table': "u'favorite_question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_favorite_questions'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.markedtag': {
+ 'Meta': {'object_name': 'MarkedTag'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'reason': ('django.db.models.fields.CharField', [], {'max_length': '16'}),
+ 'tag': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'user_selections'", 'to': "orm['askbot.Tag']"}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'tag_selections'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.postrevision': {
+ 'Meta': {'ordering': "('-revision',)", 'unique_together': "(('answer', 'revision'), ('question', 'revision'))", 'object_name': 'PostRevision'},
+ 'answer': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Answer']", 'null': 'True', 'blank': 'True'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'postrevisions'", 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'revised_at': ('django.db.models.fields.DateTimeField', [], {}),
+ 'revision': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'revision_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '300', 'blank': 'True'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '125', 'blank': 'True'}),
+ 'text': ('django.db.models.fields.TextField', [], {}),
+ 'title': ('django.db.models.fields.CharField', [], {'default': "''", 'max_length': '300', 'blank': 'True'})
+ },
+ 'askbot.question': {
+ 'Meta': {'object_name': 'Question', 'db_table': "u'question'"},
+ 'added_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'answer_accepted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'answer_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'author': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'questions'", 'to': "orm['auth.User']"}),
+ 'close_reason': ('django.db.models.fields.SmallIntegerField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'closed_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'closed_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'closed_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'comment_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'favorited_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'favorite_questions'", 'symmetrical': 'False', 'through': "orm['askbot.FavoriteQuestion']", 'to': "orm['auth.User']"}),
+ 'favourite_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'followed_by': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'followed_questions'", 'symmetrical': 'False', 'to': "orm['auth.User']"}),
+ 'html': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'is_anonymous': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_activity_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_activity_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'last_active_in_questions'", 'to': "orm['auth.User']"}),
+ 'last_edited_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'last_edited_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'last_edited_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'locked': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'locked_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'locked_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'locked_questions'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'offensive_flag_count': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'score': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'summary': ('django.db.models.fields.CharField', [], {'max_length': '180'}),
+ 'tagnames': ('django.db.models.fields.CharField', [], {'max_length': '125'}),
+ 'tags': ('django.db.models.fields.related.ManyToManyField', [], {'related_name': "'questions'", 'symmetrical': 'False', 'to': "orm['askbot.Tag']"}),
+ 'text': ('django.db.models.fields.TextField', [], {'null': 'True'}),
+ 'title': ('django.db.models.fields.CharField', [], {'max_length': '300'}),
+ 'view_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'}),
+ 'vote_down_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'vote_up_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'wiki': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'wikified_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'})
+ },
+ 'askbot.questionview': {
+ 'Meta': {'object_name': 'QuestionView'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'viewed'", 'to': "orm['askbot.Question']"}),
+ 'when': ('django.db.models.fields.DateTimeField', [], {}),
+ 'who': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'question_views'", 'to': "orm['auth.User']"})
+ },
+ 'askbot.repute': {
+ 'Meta': {'object_name': 'Repute', 'db_table': "u'repute'"},
+ 'comment': ('django.db.models.fields.CharField', [], {'max_length': '128', 'null': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'negative': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'positive': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'question': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['askbot.Question']", 'null': 'True', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.IntegerField', [], {'default': '1'}),
+ 'reputation_type': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'reputed_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['auth.User']"})
+ },
+ 'askbot.tag': {
+ 'Meta': {'ordering': "('-used_count', 'name')", 'object_name': 'Tag', 'db_table': "u'tag'"},
+ 'created_by': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'created_tags'", 'to': "orm['auth.User']"}),
+ 'deleted': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'deleted_at': ('django.db.models.fields.DateTimeField', [], {'null': 'True', 'blank': 'True'}),
+ 'deleted_by': ('django.db.models.fields.related.ForeignKey', [], {'blank': 'True', 'related_name': "'deleted_tags'", 'null': 'True', 'to': "orm['auth.User']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '255'}),
+ 'used_count': ('django.db.models.fields.PositiveIntegerField', [], {'default': '0'})
+ },
+ 'askbot.vote': {
+ 'Meta': {'unique_together': "(('content_type', 'object_id', 'user'),)", 'object_name': 'Vote', 'db_table': "u'vote'"},
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'object_id': ('django.db.models.fields.PositiveIntegerField', [], {}),
+ 'user': ('django.db.models.fields.related.ForeignKey', [], {'related_name': "'votes'", 'to': "orm['auth.User']"}),
+ 'vote': ('django.db.models.fields.SmallIntegerField', [], {}),
+ 'voted_at': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'})
+ },
+ 'auth.group': {
+ 'Meta': {'object_name': 'Group'},
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '80'}),
+ 'permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'})
+ },
+ 'auth.permission': {
+ 'Meta': {'ordering': "('content_type__app_label', 'content_type__model', 'codename')", 'unique_together': "(('content_type', 'codename'),)", 'object_name': 'Permission'},
+ 'codename': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'content_type': ('django.db.models.fields.related.ForeignKey', [], {'to': "orm['contenttypes.ContentType']"}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '50'})
+ },
+ 'auth.user': {
+ 'Meta': {'object_name': 'User'},
+ 'about': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'avatar_type': ('django.db.models.fields.CharField', [], {'default': "'n'", 'max_length': '1'}),
+ 'bronze': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'consecutive_days_visit_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'country': ('django_countries.fields.CountryField', [], {'max_length': '2', 'blank': 'True'}),
+ 'date_joined': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'date_of_birth': ('django.db.models.fields.DateField', [], {'null': 'True', 'blank': 'True'}),
+ 'display_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'email': ('django.db.models.fields.EmailField', [], {'max_length': '75', 'blank': 'True'}),
+ 'email_isvalid': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'email_key': ('django.db.models.fields.CharField', [], {'max_length': '32', 'null': 'True'}),
+ 'email_tag_filter_strategy': ('django.db.models.fields.SmallIntegerField', [], {'default': '1'}),
+ 'first_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'gold': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'gravatar': ('django.db.models.fields.CharField', [], {'max_length': '32'}),
+ 'groups': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Group']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'ignored_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'interesting_tags': ('django.db.models.fields.TextField', [], {'blank': 'True'}),
+ 'is_active': ('django.db.models.fields.BooleanField', [], {'default': 'True'}),
+ 'is_staff': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'is_superuser': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'last_login': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'last_name': ('django.db.models.fields.CharField', [], {'max_length': '30', 'blank': 'True'}),
+ 'last_seen': ('django.db.models.fields.DateTimeField', [], {'default': 'datetime.datetime.now'}),
+ 'location': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'new_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'password': ('django.db.models.fields.CharField', [], {'max_length': '128'}),
+ 'questions_per_page': ('django.db.models.fields.SmallIntegerField', [], {'default': '10'}),
+ 'real_name': ('django.db.models.fields.CharField', [], {'max_length': '100', 'blank': 'True'}),
+ 'reputation': ('django.db.models.fields.PositiveIntegerField', [], {'default': '1'}),
+ 'seen_response_count': ('django.db.models.fields.IntegerField', [], {'default': '0'}),
+ 'show_country': ('django.db.models.fields.BooleanField', [], {'default': 'False'}),
+ 'silver': ('django.db.models.fields.SmallIntegerField', [], {'default': '0'}),
+ 'status': ('django.db.models.fields.CharField', [], {'default': "'w'", 'max_length': '2'}),
+ 'user_permissions': ('django.db.models.fields.related.ManyToManyField', [], {'to': "orm['auth.Permission']", 'symmetrical': 'False', 'blank': 'True'}),
+ 'username': ('django.db.models.fields.CharField', [], {'unique': 'True', 'max_length': '30'}),
+ 'website': ('django.db.models.fields.URLField', [], {'max_length': '200', 'blank': 'True'})
+ },
+ 'contenttypes.contenttype': {
+ 'Meta': {'ordering': "('name',)", 'unique_together': "(('app_label', 'model'),)", 'object_name': 'ContentType', 'db_table': "'django_content_type'"},
+ 'app_label': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'id': ('django.db.models.fields.AutoField', [], {'primary_key': 'True'}),
+ 'model': ('django.db.models.fields.CharField', [], {'max_length': '100'}),
+ 'name': ('django.db.models.fields.CharField', [], {'max_length': '100'})
+ }
+ }
+
+ complete_apps = ['askbot']
diff --git a/askbot/models/__init__.py b/askbot/models/__init__.py
index 5d1cd95d..6a609923 100644
--- a/askbot/models/__init__.py
+++ b/askbot/models/__init__.py
@@ -19,13 +19,14 @@ import askbot
from askbot import exceptions as askbot_exceptions
from askbot import const
from askbot.conf import settings as askbot_settings
-from askbot.models.question import Question, QuestionRevision
+from askbot.models.question import Question
from askbot.models.question import QuestionView, AnonymousQuestion
from askbot.models.question import FavoriteQuestion
-from askbot.models.answer import Answer, AnonymousAnswer, AnswerRevision
+from askbot.models.answer import Answer, AnonymousAnswer
from askbot.models.tag import Tag, MarkedTag
from askbot.models.meta import Vote, Comment
from askbot.models.user import EmailFeedSetting, ActivityAuditStatus, Activity
+from askbot.models.post import PostRevision
from askbot.models import signals
from askbot.models.badges import award_badges_signal, get_badge, init_badges
#from user import AuthKeyUserAssociation
@@ -2656,15 +2657,15 @@ __all__ = [
'signals',
'Question',
- 'QuestionRevision',
'QuestionView',
'FavoriteQuestion',
'AnonymousQuestion',
'Answer',
- 'AnswerRevision',
'AnonymousAnswer',
+ 'PostRevision',
+
'Tag',
'Comment',
'Vote',
diff --git a/askbot/models/answer.py b/askbot/models/answer.py
index b9b28f89..cd9699ec 100644
--- a/askbot/models/answer.py
+++ b/askbot/models/answer.py
@@ -7,7 +7,7 @@ from django.core import exceptions as django_exceptions
from django.conf import settings
from askbot import exceptions
from askbot.models.base import AnonymousContent, DeletableContent
-from askbot.models.base import ContentRevision
+from askbot.models.post import PostRevision
from askbot.models.base import parse_post_text, parse_and_save_post
from askbot.models import content
from askbot import const
@@ -217,7 +217,7 @@ class Answer(content.Content, DeletableContent):
comment = const.POST_STATUS['default_version']
else:
comment = 'No.%s Revision' % rev_no
- return AnswerRevision.objects.create(
+ return PostRevision.objects.create_answer_revision(
answer=self,
author=author,
revised_at=revised_at,
@@ -300,32 +300,6 @@ class Answer(content.Content, DeletableContent):
return self.html
-class AnswerRevision(ContentRevision):
- """A revision of an Answer."""
- answer = models.ForeignKey('Answer', related_name='revisions')
-
- def get_absolute_url(self):
- return reverse('answer_revisions', kwargs={'id':self.answer.id})
-
- def get_question_title(self):
- return self.answer.question.title
-
- def as_html(self, **kwargs):
- markdowner = markup.get_parser()
- return sanitize_html(markdowner.convert(self.text))
-
- class Meta(ContentRevision.Meta):
- db_table = u'answer_revision'
- ordering = ('-revision',)
-
- def save(self, **kwargs):
- """Looks up the next available revision number if not set."""
- if not self.revision:
- self.revision = AnswerRevision.objects.filter(
- answer=self.answer).values_list('revision',
- flat=True)[0] + 1
- super(AnswerRevision, self).save(**kwargs)
-
class AnonymousAnswer(AnonymousContent):
question = models.ForeignKey('Question', related_name='anonymous_answers')
diff --git a/askbot/models/base.py b/askbot/models/base.py
index b456bca8..5ac2ac7a 100644
--- a/askbot/models/base.py
+++ b/askbot/models/base.py
@@ -1,17 +1,20 @@
import datetime
import cgi
+import logging
+
from django.db import models
from django.utils.html import strip_tags
from django.contrib.auth.models import User
from django.contrib.contenttypes import generic
from django.contrib.contenttypes.models import ContentType
from django.contrib.sitemaps import ping_google
+
#todo: maybe merge askbot.utils.markup and forum.utils.html
from askbot.utils import markup
from askbot.utils.diff import textDiff as htmldiff
from askbot.utils.html import sanitize_html
from django.utils import html
-import logging
+
#todo: following methods belong to a future common post class
def parse_post_text(post):
@@ -215,30 +218,6 @@ class DeletableContent(models.Model):
app_label = 'askbot'
-class ContentRevision(models.Model):
- """
- Base class for QuestionRevision and AnswerRevision
- """
- revision = models.PositiveIntegerField()
- author = models.ForeignKey(User, related_name='%(class)ss')
- revised_at = models.DateTimeField()
- summary = models.CharField(max_length=300, blank=True)
- text = models.TextField()
-
- class Meta:
- abstract = True
- app_label = 'askbot'
-
- def as_html(self, **kwargs):
- """should return html representation of
- the revision
- """
- raise NotImplementedError()
-
- def get_snipet(self):
- pass
-
-
class AnonymousContent(models.Model):
"""
Base class for AnonymousQuestion and AnonymousAnswer
diff --git a/askbot/models/post.py b/askbot/models/post.py
new file mode 100644
index 00000000..16352228
--- /dev/null
+++ b/askbot/models/post.py
@@ -0,0 +1,130 @@
+from django.db import models
+from django.core.exceptions import ValidationError
+
+from askbot.utils import markup
+from askbot.utils.html import sanitize_html
+
+#class Post(models.Model):
+# pass
+
+class PostRevisionManager(models.Manager):
+ # TODO: Make sure this manager /with the "blocked" .create() method/ is used also as a `related` manager:
+ # - https://docs.djangoproject.com/en/1.3/topics/db/managers/#controlling-automatic-manager-types
+ # - use_for_related_fields
+ def create(self, *kargs, **kwargs):
+ raise NotImplementedError # Prevent accidental creation of PostRevision instance without `revision_type` set
+
+
+ def create_question_revision(self, *kargs, **kwargs):
+ kwargs['revision_type'] = self.model.QUESTION_REVISION
+ return super(PostRevisionManager, self).create(*kargs, **kwargs)
+
+ def create_answer_revision(self, *kargs, **kwargs):
+ kwargs['revision_type'] = self.model.ANSWER_REVISION
+ return super(PostRevisionManager, self).create(*kargs, **kwargs)
+
+ def question_revisions(self):
+ return self.filter(revision_type=self.model.QUESTION_REVISION)
+
+ def answer_revisions(self):
+ return self.filter(revision_type=self.model.ANSWER_REVISION)
+
+
+class PostRevision(models.Model):
+ QUESTION_REVISION_TEMPLATE_NO_TAGS = (
+ '<h3>%(title)s</h3>\n'
+ '<div class="text">%(html)s</div>\n'
+ )
+
+ QUESTION_REVISION = 1
+ ANSWER_REVISION = 2
+ REVISION_TYPE_CHOICES = (
+ (QUESTION_REVISION, 'question'),
+ (ANSWER_REVISION, 'answer'),
+ )
+ REVISION_TYPE_CHOICES_DICT = dict(REVISION_TYPE_CHOICES)
+
+ answer = models.ForeignKey('askbot.Answer', related_name='revisions', null=True, blank=True)
+ question = models.ForeignKey('askbot.Question', related_name='revisions', null=True, blank=True)
+
+ revision_type = models.SmallIntegerField(choices=REVISION_TYPE_CHOICES)
+
+ revision = models.PositiveIntegerField()
+ author = models.ForeignKey('auth.User', related_name='%(class)ss')
+ revised_at = models.DateTimeField()
+ summary = models.CharField(max_length=300, blank=True)
+ text = models.TextField()
+
+ # Question-specific fields
+ title = models.CharField(max_length=300, blank=True, default='')
+ tagnames = models.CharField(max_length=125, blank=True, default='')
+ is_anonymous = models.BooleanField(default=False)
+
+ objects = PostRevisionManager()
+
+ class Meta:
+ # INFO: This `unique_together` constraint might be problematic for databases in which
+ # 2+ NULLs cannot be stored in an UNIQUE column.
+ # As far as I know MySQL, PostgreSQL and SQLite allow that so we're on the safe side.
+ unique_together = (('answer', 'revision'), ('question', 'revision'))
+ ordering = ('-revision',)
+ app_label = 'askbot'
+
+ def revision_type_str(self):
+ return self.REVISION_TYPE_CHOICES_DICT[self.revision_type]
+
+ def __unicode__(self):
+ return u'%s - revision %s of %s' % (self.revision_type_str(), self.revision, self.title)
+
+ def parent(self):
+ if self.is_question_revision():
+ return self.question
+ elif self.is_answer_revision():
+ return self.answer
+
+ def clean(self):
+ "Internal cleaning method, called from self.save() by self.full_clean()"
+ if bool(self.question) == bool(self.answer): # one and only one has to be set (!xor)
+ raise ValidationError('One (and only one) of question/answer fields has to be set.')
+ if (self.question and not self.is_question_revision()) or (self.answer and not self.is_answer_revision()):
+ raise ValidationError('Revision_type doesn`t match values in question/answer fields.')
+
+ def save(self, **kwargs):
+ # Determine the revision number, if not set
+ if not self.revision:
+ # TODO: Maybe use Max() aggregation? Or `revisions.count() + 1`
+ self.revision = self.parent().revisions.values_list('revision', flat=True)[0] + 1
+
+ # Make sure that everything is ok, in particular that `revision_type` and `revision` are set to valid values
+ self.full_clean()
+
+ super(PostRevision, self).save(**kwargs)
+
+ def is_question_revision(self):
+ return self.revision_type == self.QUESTION_REVISION
+
+ def is_answer_revision(self):
+ return self.revision_type == self.ANSWER_REVISION
+
+ @models.permalink
+ def get_absolute_url(self):
+ if self.is_question_revision():
+ return 'question_revisions', (self.question.id,), {}
+ elif self.is_answer_revision():
+ return 'answer_revisions', (), {'id':self.answer.id}
+
+ def get_question_title(self):
+ #INFO: ack-grepping shows that it's only used for Questions, so there's no code for Answers
+ return self.question.title
+
+ def as_html(self, **kwargs):
+ markdowner = markup.get_parser()
+ sanitized_html = sanitize_html(markdowner.convert(self.text))
+
+ if self.is_question_revision():
+ return self.QUESTION_REVISION_TEMPLATE_NO_TAGS % {
+ 'title': self.title,
+ 'html': sanitized_html
+ }
+ elif self.is_answer_revision():
+ return sanitized_html
diff --git a/askbot/models/question.py b/askbot/models/question.py
index 0ddb5b08..c2d4be11 100644
--- a/askbot/models/question.py
+++ b/askbot/models/question.py
@@ -15,7 +15,7 @@ from askbot import exceptions
from askbot.models.tag import Tag
from askbot.models.base import AnonymousContent
from askbot.models.base import DeletableContent
-from askbot.models.base import ContentRevision
+from askbot.models.post import PostRevision
from askbot.models.base import BaseQuerySetManager
from askbot.models.base import parse_post_text
from askbot.models.base import parse_and_save_post
@@ -24,8 +24,6 @@ from askbot.models import signals
from askbot import const
from askbot.utils.lists import LazyList
from askbot.utils.slug import slugify
-from askbot.utils import markup
-from askbot.utils.html import sanitize_html
from askbot.utils import mysql
#todo: too bad keys are duplicated see const sort methods
@@ -141,12 +139,12 @@ class QuestionQuerySet(models.query.QuerySet):
| models.Q(answers__text__search = search_query)
)
elif 'postgresql_psycopg2' in askbot.get_database_engine_name():
- rank_clause = "ts_rank(question.text_search_vector, to_tsquery(%s))";
+ rank_clause = "ts_rank(question.text_search_vector, plainto_tsquery(%s))";
search_query = '&'.join(search_query.split())
extra_params = (search_query,)
extra_kwargs = {
'select': {'relevance': rank_clause},
- 'where': ['text_search_vector @@ to_tsquery(%s)'],
+ 'where': ['text_search_vector @@ plainto_tsquery(%s)'],
'params': extra_params,
'select_params': extra_params,
}
@@ -360,6 +358,48 @@ class QuestionQuerySet(models.query.QuerySet):
meta_data['ignored_tag_names'].extend(tagnames.split())
return qs, meta_data, related_tags
+ def added_between(self, start, end):
+ """questions added between ``start`` and ``end`` timestamps"""
+ return self.filter(
+ added_at__gt = start
+ ).exclude(
+ added_at__gt = end
+ )
+
+ def get_questions_needing_reminder(self,
+ user = None,
+ activity_type = None,
+ recurrence_delay = None):
+ """returns list of questions that need a reminder,
+ corresponding the given ``activity_type``
+ ``user`` - is the user receiving the reminder
+ ``recurrence_delay`` - interval between sending the
+ reminders about the same question
+ """
+ from askbot.models import Activity#avoid circular import
+ question_list = list()
+ for question in self:
+ try:
+ activity = Activity.objects.get(
+ user = user,
+ question = question,
+ activity_type = activity_type
+ )
+ now = datetime.datetime.now()
+ if now < activity.active_at + recurrence_delay:
+ continue
+ except Activity.DoesNotExist:
+ activity = Activity(
+ user = user,
+ question = question,
+ activity_type = activity_type,
+ content_object = question,
+ )
+ activity.active_at = datetime.datetime.now()
+ activity.save()
+ question_list.append(question)
+ return question_list
+
#todo: this function is similar to get_response_receivers
#profile this function against the other one
#todo: maybe this must be a query set method, not manager method
@@ -718,7 +758,7 @@ class Question(content.Content, DeletableContent):
# Create a new revision
latest_revision = self.get_latest_revision()
- QuestionRevision.objects.create(
+ PostRevision.objects.create_question_revision(
question = self,
title = latest_revision.title,
author = retagged_by,
@@ -796,7 +836,7 @@ class Question(content.Content, DeletableContent):
else:
comment = 'No.%s Revision' % rev_no
- return QuestionRevision.objects.create(
+ return PostRevision.objects.create_question_revision(
question = self,
revision = rev_no,
title = self.title,
@@ -965,54 +1005,6 @@ class FavoriteQuestion(models.Model):
def __unicode__(self):
return '[%s] favorited at %s' %(self.user, self.added_at)
-QUESTION_REVISION_TEMPLATE = ('<h3>%(title)s</h3>\n'
- '<div class="text">%(html)s</div>\n'
- '<div class="tags">%(tags)s</div>')
-QUESTION_REVISION_TEMPLATE_NO_TAGS = ('<h3>%(title)s</h3>\n'
- '<div class="text">%(html)s</div>\n')
-class QuestionRevision(ContentRevision):
- """A revision of a Question."""
- question = models.ForeignKey(Question, related_name='revisions')
- title = models.CharField(max_length=300)
- tagnames = models.CharField(max_length=125)
- is_anonymous = models.BooleanField(default=False)
-
- class Meta(ContentRevision.Meta):
- db_table = u'question_revision'
- ordering = ('-revision',)
-
- def get_question_title(self):
- return self.question.title
-
- def get_absolute_url(self):
- #print 'in QuestionRevision.get_absolute_url()'
- return reverse('question_revisions', args=[self.question.id])
-
- def as_html(self, include_tags=True):
- markdowner = markup.get_parser()
- if include_tags:
- return QUESTION_REVISION_TEMPLATE % {
- 'title': self.title,
- 'html': sanitize_html(markdowner.convert(self.text)),
- 'tags': ' '.join(['<a class="post-tag">%s</a>' % tag
- for tag in self.tagnames.split(' ')]),
- }
- else:
- return QUESTION_REVISION_TEMPLATE_NO_TAGS % {
- 'title': self.title,
- 'html': sanitize_html(markdowner.convert(self.text))
- }
-
- def save(self, **kwargs):
- """Looks up the next available revision number."""
- if not self.revision:
- self.revision = QuestionRevision.objects.filter(
- question=self.question).values_list('revision',
- flat=True)[0] + 1
- super(QuestionRevision, self).save(**kwargs)
-
- def __unicode__(self):
- return u'revision %s of %s' % (self.revision, self.title)
class AnonymousQuestion(AnonymousContent):
"""question that was asked before logging in
diff --git a/askbot/models/user.py b/askbot/models/user.py
index ab5b43fb..6a0e3d4d 100644
--- a/askbot/models/user.py
+++ b/askbot/models/user.py
@@ -286,6 +286,10 @@ class EmailFeedSetting(models.Model):
reported_at = models.DateTimeField(null=True)
objects = EmailFeedSettingManager()
+ class Meta:
+ #added to make account merges work properly
+ unique_together = ('subscriber', 'feed_type')
+
def __str__(self):
if self.reported_at is None:
reported_at = "'not yet'"
diff --git a/askbot/search/sphinx/sphinx.conf b/askbot/search/sphinx/sphinx.conf
index 7ff44604..cdf0f004 100644
--- a/askbot/search/sphinx/sphinx.conf
+++ b/askbot/search/sphinx/sphinx.conf
@@ -25,12 +25,13 @@ source src_askbot
INNER JOIN \
( \
SELECT MAX(id) as id, question_id \
- FROM question_revision \
+ FROM askbot_postrevision \
+ WHERE revision_type = 1 \
GROUP BY question_id \
) \
AS mqr \
ON q.id=mqr.question_id \
- INNER JOIN question_revision AS qr ON qr.id=mqr.id \
+ INNER JOIN askbot_postrevision AS qr ON qr.id=mqr.id \
LEFT JOIN \
( \
SELECT GROUP_CONCAT(answer_current.text SEPARATOR '. ') AS text, \
@@ -42,12 +43,13 @@ source src_askbot
INNER JOIN \
( \
SELECT MAX(id) as id, answer_id \
- FROM answer_revision \
+ FROM askbot_postrevision \
+ WHERE revision_type = 2 \
GROUP BY answer_id \
) \
AS mar \
ON mar.answer_id = a.id \
- INNER JOIN answer_revision AS ar ON ar.id=mar.id \
+ INNER JOIN askbot_postrevision AS ar ON ar.id=mar.id \
WHERE a.deleted=0 \
) \
AS answer_current \
diff --git a/askbot/setup_templates/settings.py b/askbot/setup_templates/settings.py
index 3aead40f..a6d257ae 100644
--- a/askbot/setup_templates/settings.py
+++ b/askbot/setup_templates/settings.py
@@ -40,7 +40,7 @@ EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
#go to the site's live settings and enable the feature
#"Email settings" -> "allow asking by email"
#
-# WARNING: command post_emailed_questions DELETES all
+# WARNING: command post_emailed_questions DELETES all
# emails from the mailbox each time
# do not use your personal mail box here!!!
#
@@ -78,7 +78,7 @@ PROJECT_ROOT = os.path.dirname(__file__)
ADMIN_MEDIA_PREFIX = '/admin/media/'
# Make up some unique string, and don't share it with anybody.
-SECRET_KEY = 'sdljdfjkldsflsdjkhsjkldgjlsdgfs s '
+SECRET_KEY = 'sdljdfjkldsflsdjkhsjkldgjlsdgfs s '
# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
@@ -102,6 +102,7 @@ MIDDLEWARE_CLASSES = (
#below is askbot stuff for this tuple
'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware',
+ 'askbot.middleware.forum_mode.ForumModeMiddleware',
'askbot.middleware.pagesize.QuestionsPageSizeMiddleware',
'askbot.middleware.cancel.CancelActionMiddleware',
'django.middleware.transaction.TransactionMiddleware',
@@ -116,7 +117,7 @@ ROOT_URLCONF = os.path.basename(os.path.dirname(__file__)) + '.urls'
#UPLOAD SETTINGS
FILE_UPLOAD_TEMP_DIR = os.path.join(
- os.path.dirname(__file__),
+ os.path.dirname(__file__),
'tmp'
).replace('\\','/')
@@ -200,8 +201,10 @@ logging.basicConfig(
# ASKBOT_URL = 'forum/'
#
ASKBOT_URL = '' #no leading slash, default = '' empty string
+ASKBOT_TRANSLATE_URL = True #translate specific URLs
_ = lambda v:v #fake translation function for the login url
LOGIN_URL = '/%s%s%s' % (ASKBOT_URL,_('account/'),_('signin/'))
+LOGIN_REDIRECT_URL = ASKBOT_URL #adjust if needed
#note - it is important that upload dir url is NOT translated!!!
#also, this url must not have the leading slash
ASKBOT_UPLOADED_FILES_URL = '%s%s' % (ASKBOT_URL, 'upfiles/')
@@ -209,11 +212,11 @@ ALLOW_UNICODE_SLUGS = False
ASKBOT_USE_STACKEXCHANGE_URLS = False #mimic url scheme of stackexchange
#Celery Settings
-BROKER_BACKEND = "djkombu.transport.DatabaseTransport"
+BROKER_TRANSPORT = "djkombu.transport.DatabaseTransport"
CELERY_ALWAYS_EAGER = True
import djcelery
djcelery.setup_loader()
-CSRF_COOKIE_NAME = 'askbot_scrf'
+CSRF_COOKIE_NAME = 'askbot_csrf'
CSRF_COOKIE_DOMAIN = ''#enter domain name here - e.g. example.com
diff --git a/askbot/setup_templates/settings.py.mustache b/askbot/setup_templates/settings.py.mustache
new file mode 100644
index 00000000..e177c649
--- /dev/null
+++ b/askbot/setup_templates/settings.py.mustache
@@ -0,0 +1,222 @@
+## Django settings for ASKBOT enabled project.
+import os.path
+import logging
+import sys
+import askbot
+
+#this line is added so that we can import pre-packaged askbot dependencies
+sys.path.append(os.path.join(os.path.dirname(askbot.__file__), 'deps'))
+
+DEBUG = False#set to True to enable debugging
+TEMPLATE_DEBUG = False#keep false when debugging jinja2 templates
+INTERNAL_IPS = ('127.0.0.1',)
+
+ADMINS = (
+ ('Your Name', 'your_email@domain.com'),
+)
+
+MANAGERS = ADMINS
+
+DATABASE_ENGINE = 'postgresql_psycopg2' # only postgres (>8.3) and mysql are supported so far others have not been tested yet
+DATABASE_NAME = '{{database_name}}' # Or path to database file if using sqlite3.
+DATABASE_USER = '{{database_user}}' # Not used with sqlite3.
+DATABASE_PASSWORD = '{{database_password}}' # Not used with sqlite3.
+DATABASE_HOST = '' # Set to empty string for localhost. Not used with sqlite3.
+DATABASE_PORT = '' # Set to empty string for default. Not used with sqlite3.
+
+#outgoing mail server settings
+SERVER_EMAIL = ''
+DEFAULT_FROM_EMAIL = ''
+EMAIL_HOST_USER = ''
+EMAIL_HOST_PASSWORD = ''
+EMAIL_SUBJECT_PREFIX = ''
+EMAIL_HOST=''
+EMAIL_PORT=''
+EMAIL_USE_TLS=False
+EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
+
+#incoming mail settings
+#after filling out these settings - please
+#go to the site's live settings and enable the feature
+#"Email settings" -> "allow asking by email"
+#
+# WARNING: command post_emailed_questions DELETES all
+# emails from the mailbox each time
+# do not use your personal mail box here!!!
+#
+IMAP_HOST = ''
+IMAP_HOST_USER = ''
+IMAP_HOST_PASSWORD = ''
+IMAP_PORT = ''
+IMAP_USE_TLS = False
+
+# Local time zone for this installation. Choices can be found here:
+# http://en.wikipedia.org/wiki/List_of_tz_zones_by_name
+# although not all choices may be available on all operating systems.
+# On Unix systems, a value of None will cause Django to use the same
+# timezone as the operating system.
+# If running in a Windows environment this must be set to the same as your
+# system time zone.
+TIME_ZONE = 'America/Chicago'
+
+SITE_ID = 1
+
+# If you set this to False, Django will make some optimizations so as not
+# to load the internationalization machinery.
+USE_I18N = True
+LANGUAGE_CODE = 'en'
+
+# Absolute path to the directory that holds media.
+# Example: "/home/media/media.lawrence.com/"
+ASKBOT_FILE_UPLOAD_DIR = os.path.join(os.path.dirname(__file__), 'askbot', 'upfiles')
+
+PROJECT_ROOT = os.path.dirname(__file__)
+
+# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
+# trailing slash.
+# Examples: "http://foo.com/media/", "/media/".
+ADMIN_MEDIA_PREFIX = '/admin/media/'
+
+# Make up some unique string, and don't share it with anybody.
+SECRET_KEY = 'sdljdfjkldsflsdjkhsjkldgjlsdgfs s '
+
+# List of callables that know how to import templates from various sources.
+TEMPLATE_LOADERS = (
+ 'django.template.loaders.filesystem.load_template_source',
+ 'django.template.loaders.app_directories.load_template_source',
+ #below is askbot stuff for this tuple
+ 'askbot.skins.loaders.filesystem_load_template_source',
+ #'django.template.loaders.eggs.load_template_source',
+)
+
+
+MIDDLEWARE_CLASSES = (
+ #'django.middleware.gzip.GZipMiddleware',
+ 'django.contrib.sessions.middleware.SessionMiddleware',
+ #'django.middleware.cache.UpdateCacheMiddleware',
+ 'django.middleware.common.CommonMiddleware',
+ #'django.middleware.cache.FetchFromCacheMiddleware',
+ 'django.contrib.auth.middleware.AuthenticationMiddleware',
+ #'django.middleware.sqlprint.SqlPrintingMiddleware',
+
+ #below is askbot stuff for this tuple
+ 'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware',
+ 'askbot.middleware.forum_mode.ForumModeMiddleware',
+ 'askbot.middleware.pagesize.QuestionsPageSizeMiddleware',
+ 'askbot.middleware.cancel.CancelActionMiddleware',
+ 'django.middleware.transaction.TransactionMiddleware',
+ #'debug_toolbar.middleware.DebugToolbarMiddleware',
+ 'askbot.middleware.view_log.ViewLogMiddleware',
+ 'askbot.middleware.spaceless.SpacelessMiddleware',
+)
+
+
+ROOT_URLCONF = os.path.basename(os.path.dirname(__file__)) + '.urls'
+
+
+#UPLOAD SETTINGS
+FILE_UPLOAD_TEMP_DIR = os.path.join(
+ os.path.dirname(__file__),
+ 'tmp'
+ ).replace('\\','/')
+
+FILE_UPLOAD_HANDLERS = (
+ 'django.core.files.uploadhandler.MemoryFileUploadHandler',
+ 'django.core.files.uploadhandler.TemporaryFileUploadHandler',
+)
+ASKBOT_ALLOWED_UPLOAD_FILE_TYPES = ('.jpg', '.jpeg', '.gif', '.bmp', '.png', '.tiff')
+ASKBOT_MAX_UPLOAD_FILE_SIZE = 1024 * 1024 #result in bytes
+DEFAULT_FILE_STORAGE = 'django.core.files.storage.FileSystemStorage'
+
+
+#TEMPLATE_DIRS = (,) #template have no effect in askbot, use the variable below
+#ASKBOT_EXTRA_SKIN_DIR = #path to your private skin collection
+#take a look here http://askbot.org/en/question/207/
+
+TEMPLATE_CONTEXT_PROCESSORS = (
+ 'django.core.context_processors.request',
+ 'askbot.context.application_settings',
+ #'django.core.context_processors.i18n',
+ 'askbot.user_messages.context_processors.user_messages',#must be before auth
+ 'django.core.context_processors.auth', #this is required for admin
+ 'django.core.context_processors.csrf', #necessary for csrf protection
+)
+
+
+INSTALLED_APPS = (
+ 'django.contrib.auth',
+ 'django.contrib.contenttypes',
+ 'django.contrib.sessions',
+ 'django.contrib.sites',
+
+ #all of these are needed for the askbot
+ 'django.contrib.admin',
+ 'django.contrib.humanize',
+ 'django.contrib.sitemaps',
+ #'debug_toolbar',
+ 'askbot',
+ 'askbot.deps.django_authopenid',
+ #'askbot.importers.stackexchange', #se loader
+ 'south',
+ 'askbot.deps.livesettings',
+ 'keyedcache',
+ 'robots',
+ 'django_countries',
+ 'djcelery',
+ 'djkombu',
+ 'followit',
+ #'avatar',#experimental use git clone git://github.com/ericflo/django-avatar.git$
+ #requires setting of MEDIA_ROOT and MEDIA_URL
+)
+
+
+#setup memcached for production use!
+#see http://docs.djangoproject.com/en/1.1/topics/cache/ for details
+CACHE_BACKEND = 'locmem://'
+#needed for django-keyedcache
+CACHE_TIMEOUT = 6000
+CACHE_PREFIX = 'askbot' #make this unique
+CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True
+#If you use memcache you may want to uncomment the following line to enable memcached based sessions
+#SESSION_ENGINE = 'django.contrib.sessions.backends.cache_db'
+
+AUTHENTICATION_BACKENDS = (
+ 'django.contrib.auth.backends.ModelBackend',
+ 'askbot.deps.django_authopenid.backends.AuthBackend',
+)
+
+#logging settings
+LOG_FILENAME = 'askbot.log'
+logging.basicConfig(
+ filename=os.path.join(os.path.dirname(__file__), 'log', LOG_FILENAME),
+ level=logging.CRITICAL,
+ format='%(pathname)s TIME: %(asctime)s MSG: %(filename)s:%(funcName)s:%(lineno)d %(message)s',
+)
+
+###########################
+#
+# this will allow running your forum with url like http://site.com/forum
+#
+# ASKBOT_URL = 'forum/'
+#
+ASKBOT_URL = '' #no leading slash, default = '' empty string
+ASKBOT_TRANSLATE_URL = True #translate specific URLs
+_ = lambda v:v #fake translation function for the login url
+LOGIN_URL = '/%s%s%s' % (ASKBOT_URL,_('account/'),_('signin/'))
+LOGIN_REDIRECT_URL = ASKBOT_URL #adjust, if needed
+#note - it is important that upload dir url is NOT translated!!!
+#also, this url must not have the leading slash
+ASKBOT_UPLOADED_FILES_URL = '%s%s' % (ASKBOT_URL, 'upfiles/')
+ALLOW_UNICODE_SLUGS = False
+ASKBOT_USE_STACKEXCHANGE_URLS = False #mimic url scheme of stackexchange
+
+#Celery Settings
+BROKER_TRANSPORT = "djkombu.transport.DatabaseTransport"
+CELERY_ALWAYS_EAGER = True
+
+import djcelery
+djcelery.setup_loader()
+DOMAIN_NAME = '{{domain_name}}'
+
+CSRF_COOKIE_NAME = '{{domain_name}}_csrf'
+CSRF_COOKIE_DOMAIN = DOMAIN_NAME
diff --git a/askbot/skins/common/media/js/live_search.js b/askbot/skins/common/media/js/live_search.js
index a02060f8..73e1453a 100644
--- a/askbot/skins/common/media/js/live_search.js
+++ b/askbot/skins/common/media/js/live_search.js
@@ -338,6 +338,12 @@ var liveSearch = function(){
}
};
+ var change_rss_url = function(feed_url){
+ if(feed_url){
+ $("#ContentLeft a.rss:first").attr("href", feed_url);
+ }
+ }
+
var remove_search_tag = function(tag_name){
$.ajax({
url: askbot['urls']['questions'],
@@ -414,6 +420,7 @@ var liveSearch = function(){
render_faces(data['faces']);
render_related_tags(data['related_tags']);
render_relevance_sort_tab();
+ change_rss_url(data['feed_url']);
set_active_sort_tab(sortMethod);
query.focus();
diff --git a/askbot/skins/common/media/js/post.js b/askbot/skins/common/media/js/post.js
index f4574cb3..5dc49080 100644
--- a/askbot/skins/common/media/js/post.js
+++ b/askbot/skins/common/media/js/post.js
@@ -323,27 +323,27 @@ var Vote = function(){
return $(favoriteNumber);
};
var getQuestionVoteUpButton = function(){
- var questionVoteUpButton = 'div.'+ voteContainerId +' img[id^='+ imgIdPrefixQuestionVoteup +']';
+ var questionVoteUpButton = 'div.'+ voteContainerId +' div[id^='+ imgIdPrefixQuestionVoteup +']';
return $(questionVoteUpButton);
};
var getQuestionVoteDownButton = function(){
- var questionVoteDownButton = 'div.'+ voteContainerId +' img[id^='+ imgIdPrefixQuestionVotedown +']';
+ var questionVoteDownButton = 'div.'+ voteContainerId +' div[id^='+ imgIdPrefixQuestionVotedown +']';
return $(questionVoteDownButton);
};
var getAnswerVoteUpButtons = function(){
- var answerVoteUpButton = 'div.'+ voteContainerId +' img[id^='+ imgIdPrefixAnswerVoteup +']';
+ var answerVoteUpButton = 'div.'+ voteContainerId +' div[id^='+ imgIdPrefixAnswerVoteup +']';
return $(answerVoteUpButton);
};
var getAnswerVoteDownButtons = function(){
- var answerVoteDownButton = 'div.'+ voteContainerId +' img[id^='+ imgIdPrefixAnswerVotedown +']';
+ var answerVoteDownButton = 'div.'+ voteContainerId +' div[id^='+ imgIdPrefixAnswerVotedown +']';
return $(answerVoteDownButton);
};
var getAnswerVoteUpButton = function(id){
- var answerVoteUpButton = 'div.'+ voteContainerId +' img[id='+ imgIdPrefixAnswerVoteup + id + ']';
+ var answerVoteUpButton = 'div.'+ voteContainerId +' div[id='+ imgIdPrefixAnswerVoteup + id + ']';
return $(answerVoteUpButton);
};
var getAnswerVoteDownButton = function(id){
- var answerVoteDownButton = 'div.'+ voteContainerId +' img[id='+ imgIdPrefixAnswerVotedown + id + ']';
+ var answerVoteDownButton = 'div.'+ voteContainerId +' div[id='+ imgIdPrefixAnswerVotedown + id + ']';
return $(answerVoteDownButton);
};
@@ -376,19 +376,21 @@ var Vote = function(){
};
var setVoteImage = function(voteType, undo, object){
- var flag = undo ? "" : "-on";
- var arrow = (voteType == VoteType.questionUpVote || voteType == VoteType.answerUpVote) ? "up" : "down";
- object.attr("src", mediaUrl("media/images/vote-arrow-"+ arrow + flag +".png"));
+ var flag = undo ? false : true;
+ if (object.hasClass("on")) {
+ object.removeClass("on");
+ }else{
+ object.addClass("on");
+ }
- // if undo voting, then undo the pair of arrows.
if(undo){
if(voteType == VoteType.questionUpVote || voteType == VoteType.questionDownVote){
- $(getQuestionVoteUpButton()).attr("src", mediaUrl("media/images/vote-arrow-up.png"));
- $(getQuestionVoteDownButton()).attr("src", mediaUrl("media/images/vote-arrow-down.png"));
+ $(getQuestionVoteUpButton()).removeClass("on");
+ $(getQuestionVoteDownButton()).removeClass("on");
}
else{
- $(getAnswerVoteUpButton(postId)).attr("src", mediaUrl("media/images/vote-arrow-up.png"));
- $(getAnswerVoteDownButton(postId)).attr("src", mediaUrl("media/images/vote-arrow-down.png"));
+ $(getAnswerVoteUpButton(postId)).removeClass("on");
+ $(getAnswerVoteDownButton(postId)).removeClass("on");
}
}
};
@@ -977,6 +979,8 @@ EditCommentForm.prototype.getCounterUpdater = function(){
length2 = Math.round(0.9*maxCommentLength);
}
+ //todo:
+ //1) use class instead of color - move color def to css
var color = 'maroon';
var chars = 10;
if (length === 0){
@@ -1573,7 +1577,7 @@ var socialSharing = function(){
url = url.replace('{TEXT}', TEXT);
var params = SERVICE_DATA[service_name]['params'];
if(!window.open(url, "sharing", params)){
- window.location.href=share_url;
+ window.location.href=url;
}
}
});
diff --git a/askbot/skins/common/media/js/wmd/wmd.css b/askbot/skins/common/media/js/wmd/wmd.css
index 15182541..3ad615e7 100644
--- a/askbot/skins/common/media/js/wmd/wmd.css
+++ b/askbot/skins/common/media/js/wmd/wmd.css
@@ -15,7 +15,7 @@
border-top:#cce6ec 3px solid;
border-right:#cce6ec 3px solid;
float:left;
- width:100%;
+ width:730px;
}
#wmd-input
diff --git a/askbot/skins/common/media/js/wmd/wmd.js b/askbot/skins/common/media/js/wmd/wmd.js
index 85e3ccd6..1d524361 100644
--- a/askbot/skins/common/media/js/wmd/wmd.js
+++ b/askbot/skins/common/media/js/wmd/wmd.js
@@ -244,7 +244,7 @@ util.prompt = function(text, defaultInputText, makeLinkMarkdown, dialogType){
text = text.replace('http://https://', 'https://');
text = text.replace('http://ftp://', 'ftp://');
- if (text.indexOf('http://') === -1 && text.indexOf('ftp://') === -1) {
+ if (text.indexOf('http://') === -1 && text.indexOf('ftp://') === -1 && text.indexOf('https://') === -1) {
if (dialogType == 'link'){
//add http only to urls
text = 'http://' + text;
diff --git a/askbot/skins/common/templates/question/answer_vote_buttons.html b/askbot/skins/common/templates/question/answer_vote_buttons.html
index 2744e37d..0ff57e4b 100644
--- a/askbot/skins/common/templates/question/answer_vote_buttons.html
+++ b/askbot/skins/common/templates/question/answer_vote_buttons.html
@@ -3,15 +3,15 @@
visitor_vote = user_answer_votes[answer.id]
)
}}
-{% if request.user == question.author or request.user.is_authenticated() and (request.user.is_moderator() or request.user.is_superuser()) %}
+{% if request.user == question.author or (request.user.is_authenticated() and (request.user.is_moderator() or request.user.is_administrator())) %}
<img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
{% if answer.accepted %}
src="{{'/images/vote-accepted-on.png'|media}}"
{% else %}
src="{{'/images/vote-accepted.png'|media}}"
{% endif %}
- alt="{% trans %}mark this answer as favorite (click again to undo){% endtrans %}"
- title="{% trans %}mark this answer as favorite (click again to undo){% endtrans %}" />
+ alt="{% trans %}mark this answer as correct (click again to undo){% endtrans %}"
+ title="{% trans %}mark this answer as correct (click again to undo){% endtrans %}" />
{% else %}
{% if answer.accepted %}
<img id="answer-img-accept-{{ answer.id }}" class="answer-img-accept"
@@ -22,5 +22,6 @@
{% endif %}
alt="{% trans question_author=question.author.username %}{{question_author}} has selected this answer as correct{% endtrans %}"
title="{% trans questsion_author=question.author.username%}{{question_author}} has selected this answer as correct{% endtrans %}"
+ />
{% endif %}
{% endif %}
diff --git a/askbot/skins/common/templates/widgets/search_bar.html b/askbot/skins/common/templates/widgets/search_bar.html
index 5efe3860..d5a7859b 100644
--- a/askbot/skins/common/templates/widgets/search_bar.html
+++ b/askbot/skins/common/templates/widgets/search_bar.html
@@ -21,8 +21,12 @@
{% endif %}
{# class was searchInput #}
<input
- {% if query %}
+ {% if query and request.user.is_authenticated() %}
+ class="searchInputCancelableAuth"
+ {% elif query %}
class="searchInputCancelable"
+ {% elif request.user.is_authenticated() %}
+ class="searchInputAuth"
{% else %}
class="searchInput"
{% endif %}
diff --git a/askbot/skins/default/media/images/logo.gif b/askbot/skins/default/media/images/logo.gif
index ac4ceda6..810b0bcf 100644
--- a/askbot/skins/default/media/images/logo.gif
+++ b/askbot/skins/default/media/images/logo.gif
Binary files differ
diff --git a/askbot/skins/default/media/style/lib_style.less b/askbot/skins/default/media/style/lib_style.less
index e6d554b1..4f2bad79 100644
--- a/askbot/skins/default/media/style/lib_style.less
+++ b/askbot/skins/default/media/style/lib_style.less
@@ -8,7 +8,7 @@
@button-label:#4a757f;
@section-title:#7ea9b3;
@info-text:#707070;
-@info-text-dark:#6b6b6b;
+@info-text-dark:#525252;
/* Variables for fonts*/
diff --git a/askbot/skins/default/media/style/style.css b/askbot/skins/default/media/style/style.css
index d2eeb364..ba5875ad 100644
--- a/askbot/skins/default/media/style/style.css
+++ b/askbot/skins/default/media/style/style.css
@@ -1,2503 +1,2487 @@
@import url(jquery.autocomplete.css);
-@import "lib_style.less"; /* Library of predifined less functions styles */
-
+/* General Predifined classes, read more in lesscss.org */
+/* Variables for Colors*/
+/* Variables for fonts*/
+/* "Trebuchet MS", sans-serif;*/
+/* Receive exactly positions for background Sprite */
+/* CSS3 Elements */
+/* Library of predifined less functions styles */
/* ----- General HTML Styles----- */
-
body {
- background: #FFF;
- font-size: 14px;
- line-height: 150%;
- margin: 0;
- padding: 0;
- color: #000;
- font-family: @main-font;
+ background: #FFF;
+ font-size: 14px;
+ line-height: 150%;
+ margin: 0;
+ padding: 0;
+ color: #000;
+ font-family: Arial;
}
-
div {
- margin: 0 auto;
- padding: 0;
-}
-
-h1, h2, h3, h4, h5, h6, ul, li, dl, dt, dd, form, img, p {
- margin: 0;
- padding: 0;
- border: none;
+ margin: 0 auto;
+ padding: 0;
+}
+h1,
+h2,
+h3,
+h4,
+h5,
+h6,
+ul,
+li,
+dl,
+dt,
+dd,
+form,
+img,
+p {
+ margin: 0;
+ padding: 0;
+ border: none;
}
-
label {
- vertical-align: middle;
+ vertical-align: middle;
}
-
hr {
- border: none;
- border-top: 1px dashed #ccccce;
+ border: none;
+ border-top: 1px dashed #ccccce;
}
-
input, select {
- vertical-align: middle;
- font-family: Trebuchet MS, "segoe ui", Helvetica, Tahoma, Verdana, MingLiu, PMingLiu, Arial, sans-serif;
+ vertical-align: middle;
+ font-family: Trebuchet MS, "segoe ui", Helvetica, Tahoma, Verdana, MingLiu, PMingLiu, Arial, sans-serif;
+ margin-left: 0px;
}
-
p {
- font-size: 14px;
- line-height: 140%;
- margin-bottom: 6px;
- padding-left: 5px;
+ font-size: 14px;
+ line-height: 140%;
+ margin-bottom: 6px;
}
-
a {
- color:@link;
- text-decoration: none;
- cursor: pointer;
+ color: #1b79bd;
+ text-decoration: none;
+ cursor: pointer;
}
-
h2 {
- font-size: 140%;
- padding: 3px 0 3px 5px;
+ font-size: 21px;
+ padding: 3px 0 3px 5px;
}
-
h3 {
- font-size: 120%;
- padding: 3px 0 3px 5px;
+ font-size: 19px;
+ padding: 3px 0 3px 5px;
}
-
ul {
- list-style: disc;
- margin-left: 20px;
- padding-left: 0px;
- margin-bottom: 1em;
+ list-style: disc;
+ margin-left: 20px;
+ padding-left: 0px;
+ margin-bottom: 1em;
}
-
ol {
- list-style: decimal;
- margin-left: 30px;
- margin-bottom: 1em;
- padding-left: 0px;
+ list-style: decimal;
+ margin-left: 30px;
+ margin-bottom: 1em;
+ padding-left: 0px;
}
-
td ul {
- vertical-align: middle;
+ vertical-align: middle;
}
-
li input {
- margin: 3px 3px 4px 3px;
+ margin: 3px 3px 4px 3px;
}
-
pre {
- font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
- font-size: 100%;
- margin-bottom: 10px;
- /*overflow: auto;*/
- background-color: #F5F5F5;
- padding-left: 5px;
- padding-top: 5px;
- /*width: 671px;*/
- padding-bottom: 20px ! ie7;
-}
+ font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
+ font-size: 100%;
+ margin-bottom: 10px;
+ /*overflow: auto;*/
-code {
- font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
- font-size: 100%;
+ background-color: #F5F5F5;
+ padding-left: 5px;
+ padding-top: 5px;
+ /*width: 671px;*/
+ padding-bottom: 20px ! ie7;
+}
+code {
+ font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
+ font-size: 100%;
}
-
blockquote {
- margin-bottom: 10px;
- margin-right: 15px;
- padding: 10px 0px 1px 10px;
- background-color: #F5F5F5;
+ margin-bottom: 10px;
+ margin-right: 15px;
+ padding: 10px 0px 1px 10px;
+ background-color: #F5F5F5;
}
-
/* http://pathfindersoftware.com/2007/09/developers-note-2/ */
-* html .clearfix,
-* html .paginator {
- height: 1;
- overflow: visible;
-}
-+ html .clearfix,
-+ html .paginator {
- min-height: 1%;
-}
-.clearfix:after,
-.paginator:after {
- clear: both;
- content:".";
- display:block;
- height: 0;
- visibility: hidden;
+* html .clearfix, * html .paginator {
+ height: 1;
+ overflow: visible;
+}
++ html .clearfix, + html .paginator {
+ min-height: 1%;
+}
+.clearfix:after, .paginator:after {
+ clear: both;
+ content: ".";
+ display: block;
+ height: 0;
+ visibility: hidden;
+}
+body.user-messages {
+ margin-top: 2.4em;
}
-
.badges a {
- color: #763333;
- text-decoration: underline;
+ color: #763333;
+ text-decoration: underline;
}
-
a:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
-
.badge-context-toggle.active {
- cursor: pointer;
- text-decoration: underline;
+ cursor: pointer;
+ text-decoration: underline;
}
-
h1 {
- font-size: 160%;
- padding: 10px 0 5px 0px;
+ font-size: 24px;
+ padding: 10px 0 5px 0px;
}
-
/* ----- Custom positions ----- */
-
-.left{float:left}
-.right{float:right}
-.clean{clear:both}
-.center{
- margin: 0 auto;
- padding: 0;
+.left {
+ float: left;
+}
+.right {
+ float: right;
+}
+.clean {
+ clear: both;
+}
+.center {
+ margin: 0 auto;
+ padding: 0;
}
-
-
/* ----- Notify message bar , check blocks/system_messages.html ----- */
-
.notify {
- position: fixed;
- top: 0px;
- left: 0px;
- width: 100%;
- z-index: 100;
- padding: 0;
- text-align: center;
- background-color: #f5dd69;
- border-top:#fff 1px solid;
-
- p {
- margin-top: 6px;
- margin-bottom: 6px;
- font-size: 16px;
- color:#424242
- }
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ z-index: 100;
+ padding: 0;
+ text-align: center;
+ background-color: #f5dd69;
+ border-top: #fff 1px solid;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.notify p.notification {
+ margin-top: 6px;
+ margin-bottom: 6px;
+ font-size: 16px;
+ color: #424242;
}
-
#closeNotify {
- position: absolute;
- right: 5px;
- top: 7px;
- color: #735005;
- text-decoration: none;
- line-height: 18px;
- .sprites(-6px,-5px);
- cursor: pointer;
- width:20px;
- height:20px;
+ position: absolute;
+ right: 5px;
+ top: 7px;
+ color: #735005;
+ text-decoration: none;
+ line-height: 18px;
+ background: -6px -5px url(../images/sprites.png) no-repeat;
+ cursor: pointer;
+ width: 20px;
+ height: 20px;
}
-
#closeNotify:hover {
- .sprites(-26px,-5px);
+ background: -26px -5px url(../images/sprites.png) no-repeat;
}
-
/* ----- Header, check blocks/header.html ----- */
-
#header {
- margin-top: 0px;
- background: @header-color;
-}
-
-.content-wrapper {/* wrapper positioning class */
- width: 960px;
- margin: auto;
- position:relative;
-}
-
-#logo img{
- padding: 5px 0px 5px 0px;
-}
-
-#userToolsNav {/* Navigation bar containing login link or user information, check widgets/user_navigation.html*/
- height: 20px;
- position:absolute;
- bottom: 0;
- right:0px;
- padding-bottom:5px;
-
- a {
- height: 35px;
- text-align: right;
- margin-left: 20px;
- text-decoration: underline;
- color:#d0e296;
- font-size:16px;
- }
-
- a:first-child {
- margin-left: 0;
- }
-
- a#ab-responses {
- margin-left: 3px;
- }
-
- .user-info,.user-micro-info{
- color:#b5b593;
- }
-
- a img {
- vertical-align:middle;
- margin-bottom:2px;
- }
-
- .user-info a {
- margin: 0;
- text-decoration: none;
- }
+ margin-top: 0px;
+ background: #16160f;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.content-wrapper {
+ /* wrapper positioning class */
+
+ width: 960px;
+ margin: auto;
+ position: relative;
+}
+#logo img {
+ padding: 5px 0px 5px 0px;
+ height: 75px;
+ width: auto;
+ float: left;
+}
+#userToolsNav {
+ /* Navigation bar containing login link or user information, check widgets/user_navigation.html*/
+
+ height: 20px;
+ position: absolute;
+ bottom: 0;
+ right: 0px;
+ padding-bottom: 5px;
+}
+#userToolsNav a {
+ height: 35px;
+ text-align: right;
+ margin-left: 20px;
+ text-decoration: underline;
+ color: #d0e296;
+ font-size: 16px;
+}
+#userToolsNav a:first-child {
+ margin-left: 0;
+}
+#userToolsNav a#ab-responses {
+ margin-left: 3px;
+}
+#userToolsNav .user-info, #userToolsNav .user-micro-info {
+ color: #b5b593;
+}
+#userToolsNav a img {
+ vertical-align: middle;
+ margin-bottom: 2px;
+}
+#userToolsNav .user-info a {
+ margin: 0;
+ text-decoration: none;
+}
+#metaNav {
+ /* Top Navigation bar containing links for tags, people and badges, check widgets/header.html */
+
+ float: right;
+}
+#metaNav a {
+ color: #e2e2ae;
+ padding: 0px 0px 0px 35px;
+ height: 25px;
+ line-height: 30px;
+ margin: 5px 0px 0px 10px;
+ font-size: 18px;
+ font-weight: 100;
+ text-decoration: none;
+ display: block;
+ float: left;
+}
+#metaNav a:hover {
+ text-decoration: underline;
+}
+#metaNav a.on {
+ font-weight: bold;
+ color: #FFF;
+ text-decoration: none;
+}
+#metaNav a.special {
+ font-size: 18px;
+ color: #B02B2C;
+ font-weight: bold;
+ text-decoration: none;
+}
+#metaNav a.special:hover {
+ text-decoration: underline;
+}
+#metaNav #navTags {
+ background: -50px -5px url(../images/sprites.png) no-repeat;
+}
+#metaNav #navUsers {
+ background: -125px -5px url(../images/sprites.png) no-repeat;
+}
+#metaNav #navBadges {
+ background: -210px -5px url(../images/sprites.png) no-repeat;
+}
+#secondaryHeader {
+ /* Div containing Home button, scope navigation, search form and ask button, check blocks/secondary_header.html */
+
+ height: 55px;
+ background: #e9e9e1;
+ border-bottom: #d3d3c2 1px solid;
+ border-top: #fcfcfc 1px solid;
+ margin-bottom: 10px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+#secondaryHeader #homeButton {
+ border-right: #afaf9e 1px solid;
+ background: -6px -36px url(../images/sprites.png) no-repeat;
+ height: 55px;
+ width: 43px;
+ display: block;
+ float: left;
+}
+#secondaryHeader #homeButton:hover {
+ background: -51px -36px url(../images/sprites.png) no-repeat;
+}
+#secondaryHeader #scopeWrapper {
+ width: 688px;
+ float: left;
+}
+#secondaryHeader #scopeWrapper a {
+ display: block;
+ float: left;
+}
+#secondaryHeader #scopeWrapper .scope-selector {
+ font-size: 21px;
+ color: #5a5a4b;
+ height: 55px;
+ line-height: 55px;
+ margin-left: 24px;
+}
+#secondaryHeader #scopeWrapper .on {
+ background: url(../images/scopearrow.png) no-repeat center bottom;
+}
+#secondaryHeader #scopeWrapper .ask-message {
+ font-size: 24px;
+}
+#searchBar {
+ /* Main search form , check widgets/search_bar.html */
+
+ display: inline-block;
+ background-color: #fff;
+ width: 412px;
+ border: 1px solid #c9c9b5;
+ float: right;
+ height: 42px;
+ margin: 6px 0px 0px 15px;
+}
+#searchBar .searchInput,
+#searchBar .searchInputCancelable,
+#searchBar .searchInputAuth,
+#searchBar .searchInputCancelableAuth {
+ font-size: 30px;
+ height: 40px;
+ font-weight: 300;
+ background: #FFF;
+ border: 0px;
+ color: #484848;
+ padding-left: 10px;
+ font-family: Arial;
+ vertical-align: middle;
+}
+#searchBar .searchInput, #searchBar .searchInputCancelable {
+ width: 352px;
+}
+#searchBar .searchInputCancelable {
+ width: 317px;
+}
+#searchBar .searchInputAuth {
+ width: 340px;
+}
+#searchBar .searchInputCancelableAuth {
+ width: 310px;
+ /*FIXME byron */
+
+}
+#searchBar .logoutsearch {
+ width: 337px;
+}
+#searchBar .searchBtn {
+ font-size: 10px;
+ color: #666;
+ background-color: #eee;
+ height: 42px;
+ border: #FFF 1px solid;
+ line-height: 22px;
+ text-align: center;
+ float: right;
+ margin: 0px;
+ width: 48px;
+ background: -98px -36px url(../images/sprites.png) no-repeat;
+ cursor: pointer;
+}
+#searchBar .searchBtn:hover {
+ background: -146px -36px url(../images/sprites.png) no-repeat;
+}
+#searchBar .cancelSearchBtn {
+ font-size: 30px;
+ color: #ce8888;
+ background: #fff;
+ height: 42px;
+ border: 0px;
+ border-left: #deded0 1px solid;
+ text-align: center;
+ width: 35px;
+ cursor: pointer;
+}
+#searchBar .cancelSearchBtn:hover {
+ color: #d84040;
+}
+#askButton {
+ /* check blocks/secondary_header.html and widgets/ask_button.html*/
+
+ background: url(../images/bigbutton.png) repeat-x bottom;
+ line-height: 44px;
+ text-align: center;
+ width: 200px;
+ height: 42px;
+ font-size: 23px;
+ color: #4a757f;
+ margin-top: 7px;
+ float: right;
+ text-transform: uppercase;
+ border-radius: 5px;
+ -ms-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ -webkit-box-shadow: 1px 1px 2px #636363;
+ -moz-box-shadow: 1px 1px 2px #636363;
+ box-shadow: 1px 1px 2px #636363;
+}
+#askButton:hover {
+ text-decoration: none;
+ background: url(../images/bigbutton.png) repeat-x top;
+ text-shadow: 0px 1px 0px #c6d9dd;
+ -moz-text-shadow: 0px 1px 0px #c6d9dd;
+ -webkit-text-shadow: 0px 1px 0px #c6d9dd;
}
-
-#metaNav {/* Top Navigation bar containing links for tags, people and badges, check widgets/header.html */
- float:right;
-
- a {
- color: #e2e2ae;
- padding: 0px 0px 0px 35px;
- height: 25px;
- line-height: 30px;
- margin:5px 0px 0px 10px;
- font-size: 18px;
- font-weight: 100;
- text-decoration: none;
- display: block;
- float: left;
- }
-
- a:hover {
- text-decoration: underline;
- }
-
- a.on {
- font-weight:bold;
- color: #FFF;
- text-decoration: none;
- }
-
- a.special {
- font-size: 18px;
- color: #B02B2C;
- font-weight: bold;
- text-decoration: none;
- }
-
- a.special:hover {
- text-decoration: underline;
- }
-
- #navTags{
- .sprites(-50px,-5px)
- }
-
- #navUsers{
- .sprites(-125px,-5px)
- }
-
- #navBadges{
- .sprites(-210px,-5px)
- }
-}
-
-#secondaryHeader{ /* Div containing Home button, scope navigation, search form and ask button, check blocks/secondary_header.html */
- height:55px;
- background:#e9e9e1;
- border-bottom:#d3d3c2 1px solid;
- border-top:#fcfcfc 1px solid;
- margin-bottom:10px;
-
- #homeButton{
- border-right:#afaf9e 1px solid;
- .sprites(-6px,-36px);
- height:55px;
- width:43px;
- display:block;
- float:left;
- }
-
- #homeButton:hover{
- .sprites(-6px-45,-36px);
- }
-
- #scopeWrapper{
- width:688px;
- float:left;
-
- a{
- display:block;
- float:left;
- }
-
- .scope-selector{
- font-size:21px;
- color:#5a5a4b;
- height:55px;
- line-height:55px;
- margin-left:24px
- }
- .on{
- background:url(../images/scopearrow.png) no-repeat center bottom;
- }
-
- .ask-message{
- font-size:24px;
- }
- }
-}
-
-#searchBar { /* Main search form , check widgets/search_bar.html */
- display:inline-block;
- background-color: #fff;
- width:412px;
- border: 1px solid #c9c9b5;
- float:right;
- height:42px;
- margin:6px 0px 0px 15px;
-
- .searchInput, .searchInputCancelable {
- font-size: 30px;
- height: 40px;
- font-weight:300;
- background:#FFF;
- border:0px;
- color:#484848;
- padding-left:10px;
- font-family:@body-font;
- vertical-align: middle;
- }
-
- .searchInput, .searchInputCancelable {
- width: 352px;
- }
-
- .searchInputCancelable {
- width: 317px;
- }
- .logoutsearch {
- width: 337px;
- }
-
- .searchBtn {
- font-size: 10px;
- color: #666;
- background-color: #eee;
- height: 42px;
- border:#FFF 1px solid;
- line-height: 22px;
- text-align: center;
- float:right;
- margin: 0px;
- width:48px;
- .sprites(-98px,-36px);
- cursor:pointer;
- }
-
- .searchBtn:hover {
- .sprites(-98px-48,-36px);
- }
-
- .cancelSearchBtn {
- font-size: 30px;
- color: #ce8888;
- background:#fff;
- height: 42px;
- border:0px;
- border-left:#deded0 1px solid;
- text-align: center;
- width: 35px;
- cursor:pointer;
- }
-
- .cancelSearchBtn:hover {
- color: #d84040;
- }
-}
-
-#askButton{ /* check blocks/secondary_header.html and widgets/ask_button.html*/
- background: url(../images/bigbutton.png) repeat-x bottom;
- line-height:44px;
- text-align:center;
- width:200px;
- height:42px;
- font-size:23px;
- color:@button-label;
- margin-top:7px;
- float:right;
- text-transform:uppercase;
- .rounded-corners(5px);
- .box-shadow(1px, 1px, 2px, #636363)
-}
-
-#askButton:hover{
- text-decoration:none;
- background: url(../images/bigbutton.png) repeat-x top;
- .text-shadow(0px, 1px, 0px, #c6d9dd)
-}
-
/* ----- Content layout, check two_column_body.html or one_column_body.html ----- */
-
#ContentLeft {
- width: 730px;
- float: left;
- position: relative;
- padding-bottom:10px;
+ width: 730px;
+ float: left;
+ position: relative;
+ padding-bottom: 10px;
}
-
#ContentRight {
- width: 200px;
- float: right;
- padding: 0 0px 10px 0px;
+ width: 200px;
+ float: right;
+ padding: 0 0px 10px 0px;
}
-
#ContentFull {
- float: left;
- width: 950px;
+ float: left;
+ width: 960px;
}
-
/* ----- Sidebar Widgets Box, check main_page/sidebar.html or question/sidebar.html ----- */
-
.box {
- background: #fff;
- padding: 4px 0px 10px 0px;
- width:200px;
-
- p {
- margin-bottom: 4px;
- }
-
- p.info-box-follow-up-links {
- text-align: right;
- margin: 0;
- }
-
- h2 {
- padding-left: 0;
- background:#eceeeb;
- height:30px;
- line-height:30px;
- text-align:right;
- font-size:24px;
- font-weight:normal;
- color:#656565;
- padding-right:10px;
- margin-bottom:10px;
- }
- h3{
- color:#4a757f;
- font-size:18px;
- text-align:left;
- font-weight:normal;
- }
- .contributorback{
- background: #eceeeb url(../images/contributorsback.png) no-repeat center left;
- }
-
- label {
- color: @info-text;
- font-size:15px;
- display: block;
- float: right;
- width: 172px;
- }
-
- ul {
- margin-left: 22px;
- }
-
- li {
- list-style-type: disc;
- font-size: 16px;
- line-height: 20px;
- margin-bottom: 10px;
- color:@info-text;
- }
- ul.tags {
- list-style: none;
- margin: 0;
- padding: 0;
- line-height: 170%;
- display: block;
- }
- #displayTagFilterControl p label{
- color:@info-text;
- font-size:15px;
- }
-
- .inputs{
- #interestingTagInput, #ignoredTagInput{
- width:159px;
- border:#c9c9b5 1px solid;
- height:25px;
- }
- #interestingTagAdd, #ignoredTagAdd{
- background:url(../images/small-button-blue.png) repeat-x top;
- border:0;
- color:@button-label;
- font-weight:bold;
- font-size:12px;
- width:33px;
- height:27px;
- margin-top:-2px;
- cursor:pointer;
- .rounded-corners(4px);
- .text-shadow(0px,1px,0px,#E6F6FA);
- .box-shadow(1px, 1px, 2px, #808080)
-
- }
- #interestingTagAdd:hover, #ignoredTagAdd:hover{
- background:url(../images/small-button-blue.png) repeat-x bottom;
- }
- }
-
- img.gravatar {
- margin:1px;
- }
-
-/* widgets for question template */
-
- a.followed, a.follow{
- background: url(../images/medium-button.png) top repeat-x;
- height:34px;
- line-height:34px;
- text-align:center;
- border:0;
- font-family:@main-font;
- color:@button-label;
- font-weight:normal;
- font-size:21px;
- margin-top:3px;
- display:block;
- width:120px;
- text-decoration:none;
- .rounded-corners(4px);
- .box-shadow(1px, 1px, 2px, #636363);
- .center;
- }
-
- a.followed:hover, a.follow:hover{
- text-decoration:none;
- background: url(../images/medium-button.png) bottom repeat-x;
- .text-shadow(0px, 1px, 0px, #c6d9dd);
- }
-
- a.followed div.unfollow{
- display:none;
- }
-
- a.followed:hover div{
- display:none;
- }
- a.followed:hover div.unfollow{
- display:inline;
- color:#a05736;
- }
-
- .favorite-number {
- padding: 5px 0 0 5px;
- font-size: 100%;
- font-family: Arial;
- font-weight: bold;
- color: #777;
- text-align:center;
- }
-}
-
-.statsWidget p{
- color:@info-text;
- font-size:16px;
- border-bottom:#cccccc 1px solid;
-
- strong{
- float:right;
- padding-right:10px;
- }
+ background: #fff;
+ padding: 4px 0px 10px 0px;
+ width: 200px;
+ /* widgets for question template */
+
+}
+.box p {
+ margin-bottom: 4px;
+}
+.box p.info-box-follow-up-links {
+ text-align: right;
+ margin: 0;
+}
+.box h2 {
+ padding-left: 0;
+ background: #eceeeb;
+ height: 30px;
+ line-height: 30px;
+ text-align: right;
+ font-size: 18px !important;
+ font-weight: normal;
+ color: #656565;
+ padding-right: 10px;
+ margin-bottom: 10px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.box h3 {
+ color: #4a757f;
+ font-size: 18px;
+ text-align: left;
+ font-weight: normal;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.box .contributorback {
+ background: #eceeeb url(../images/contributorsback.png) no-repeat center left;
+}
+.box label {
+ color: #707070;
+ font-size: 15px;
+ display: block;
+ float: right;
+ width: 177px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.box ul {
+ margin-left: 22px;
+}
+.box li {
+ list-style-type: disc;
+ font-size: 13px;
+ line-height: 20px;
+ margin-bottom: 10px;
+ color: #707070;
+}
+.box ul.tags {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ line-height: 170%;
+ display: block;
+}
+.box #displayTagFilterControl p label {
+ color: #707070;
+ font-size: 15px;
+}
+.box .inputs #interestingTagInput, .box .inputs #ignoredTagInput {
+ width: 158px;
+ border: #c9c9b5 1px solid;
+ height: 25px;
+}
+.box .inputs #interestingTagAdd, .box .inputs #ignoredTagAdd {
+ background: url(../images/small-button-blue.png) repeat-x top;
+ border: 0;
+ color: #4a757f;
+ font-weight: bold;
+ font-size: 12px;
+ width: 30px;
+ height: 27px;
+ margin-top: -2px;
+ cursor: pointer;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ text-shadow: 0px 1px 0px #e6f6fa;
+ -moz-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-box-shadow: 1px 1px 2px #808080;
+ -moz-box-shadow: 1px 1px 2px #808080;
+ box-shadow: 1px 1px 2px #808080;
+}
+.box .inputs #interestingTagAdd:hover, .box .inputs #ignoredTagAdd:hover {
+ background: url(../images/small-button-blue.png) repeat-x bottom;
+}
+.box img.gravatar {
+ margin: 1px;
+}
+.box a.followed, .box a.follow {
+ background: url(../images/medium-button.png) top repeat-x;
+ height: 34px;
+ line-height: 34px;
+ text-align: center;
+ border: 0;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ color: #4a757f;
+ font-weight: normal;
+ font-size: 21px;
+ margin-top: 3px;
+ display: block;
+ width: 120px;
+ text-decoration: none;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-box-shadow: 1px 1px 2px #636363;
+ -moz-box-shadow: 1px 1px 2px #636363;
+ box-shadow: 1px 1px 2px #636363;
+ margin: 0 auto;
+ padding: 0;
+}
+.box a.followed:hover, .box a.follow:hover {
+ text-decoration: none;
+ background: url(../images/medium-button.png) bottom repeat-x;
+ text-shadow: 0px 1px 0px #c6d9dd;
+ -moz-text-shadow: 0px 1px 0px #c6d9dd;
+ -webkit-text-shadow: 0px 1px 0px #c6d9dd;
+}
+.box a.followed div.unfollow {
+ display: none;
+}
+.box a.followed:hover div {
+ display: none;
+}
+.box a.followed:hover div.unfollow {
+ display: inline;
+ color: #a05736;
+}
+.box .favorite-number {
+ padding: 5px 0 0 5px;
+ font-size: 100%;
+ font-family: Arial;
+ font-weight: bold;
+ color: #777;
+ text-align: center;
+}
+.statsWidget p {
+ color: #707070;
+ font-size: 16px;
+ border-bottom: #cccccc 1px solid;
+ font-size: 13px;
+}
+.statsWidget p strong {
+ float: right;
+ padding-right: 10px;
}
.questions-related {
- word-wrap: break-word;
-
- p {
- line-height: 20px;
- padding: 4px 0px 4px 0px;
- font-size: 16px;
- font-weight:normal;
- border-bottom:#cccccc 1px solid;
- }
+ word-wrap: break-word;
+}
+.questions-related p {
+ line-height: 20px;
+ padding: 4px 0px 4px 0px;
+ font-size: 16px;
+ font-weight: normal;
+ border-bottom: #cccccc 1px solid;
+}
+.questions-related a {
+ font-size: 13px;
}
/* tips and markdown help are widgets for ask template */
-
-#tips{
- li{
- color:@info-text;
- font-size:16px;
- list-style-image: url(../images/tips.png);
- }
- a{
- font-size:16px;
- }
+#tips li {
+ color: #707070;
+ font-size: 13px;
+ list-style-image: url(../images/tips.png);
}
-
-#markdownHelp{
- li{
- color:@info-text;
- font-size:16px;
- }
- a{
- font-size:16px;
- }
+#tips a {
+ font-size: 16px;
+}
+#markdownHelp li {
+ color: #707070;
+ font-size: 13px;
+}
+#markdownHelp a {
+ font-size: 16px;
}
-
-
/* ----- Sorting top Tab, check main_page/tab_bar.html ------*/
-
.tabBar {
- background-color: #eff5f6;
- height: 30px;
- width: 336px;
- margin-bottom: 3px;
- margin-top: 3px;
- float:right;
- font-family:@sort-font;
- font-size:16px;
- .rounded-corners(5px);
+ background-color: #eff5f6;
+ height: 30px;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ float: right;
+ font-family: Georgia, serif;
+ font-size: 16px;
+ border-radius: 5px;
+ -ms-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
}
-
.tabBar h2 {
- float: left;
+ float: left;
}
-
.tabsA, .tabsC {
- float: right;
- position: relative;
- display: block;
- height: 20px;
+ float: right;
+ position: relative;
+ display: block;
+ height: 20px;
}
-
/* tabsA - used for sorting */
-.tabsA { float: right; }
-.tabsC { float: left; }
-
-.tabsA a, .tabsC a{
-
- border-left: 1px solid #d0e1e4;
- color: @section-title;
- display: block;
- float: left;
- height: 20px;
- line-height: 20px;
- padding:4px 7px 4px 7px;
- text-decoration: none;
-}
-
-.tabsA a.on, .tabsC a.on, .tabsA a:hover, .tabsC a:hover {
- color: @button-label;
-}
-
-.tabsA a.rev.on, tabsA a.rev.on:hover {
+.tabsA {
+ float: right;
+}
+.tabsC {
+ float: left;
+}
+.tabsA a, .tabsC a {
+ border-left: 1px solid #d0e1e4;
+ color: #7ea9b3;
+ display: block;
+ float: left;
+ height: 20px;
+ line-height: 20px;
+ padding: 4px 7px 4px 7px;
+ text-decoration: none;
+}
+.tabsA a.on,
+.tabsC a.on,
+.tabsA a:hover,
+.tabsC a:hover {
+ color: #4a757f;
}
-
.tabsA .label, .tabsC .label {
- float: left;
- color: #646464;
- margin-top:4px;
- margin-right:5px;
+ float: left;
+ color: #646464;
+ margin-top: 4px;
+ margin-right: 5px;
}
-
.tabsB a {
- background: #eee;
- border: 1px solid #eee;
- color: #777;
- display: block;
- float: left;
- height: 22px;
- line-height: 28px;
- margin: 5px 0px 0 4px;
- padding: 0 11px 0 11px;
- text-decoration: none;
+ background: #eee;
+ border: 1px solid #eee;
+ color: #777;
+ display: block;
+ float: left;
+ height: 22px;
+ line-height: 28px;
+ margin: 5px 0px 0 4px;
+ padding: 0 11px 0 11px;
+ text-decoration: none;
}
-
.rss {
- float: right;
- font-size: 16px;
- color: #f57900;
- margin: 5px 0px 3px 7px;
- width:52px;
- padding-left: 16px;
- padding-top:3px;
- background:#fff url(../images/feed-icon-small.png) no-repeat center right;
- float:right;
- font-family:@sort-font;
- font-size:16px;
+ float: right;
+ font-size: 16px;
+ color: #f57900;
+ margin: 5px 0px 3px 7px;
+ width: 52px;
+ padding-left: 16px;
+ padding-top: 3px;
+ background: #ffffff url(../images/feed-icon-small.png) no-repeat center right;
+ float: right;
+ font-family: Georgia, serif;
+ font-size: 16px;
}
-
.rss:hover {
- color: #F4A731 !important;
+ color: #F4A731 !important;
}
-
/* ----- Headline, containing number of questions and tags selected, check main_page/headline.html ----- */
-
-#questionCount{
- font-weight:bold;
- font-size:23px;
- color:@section-title;
- width:200px;
- float:left;
- margin-bottom:8px;
- padding-top:6px;
-}
-
-#listSearchTags{
- float:left;
- margin-top:3px;
- color:@info-text;
- font-size:16px;
+#questionCount {
+ font-weight: bold;
+ font-size: 23px;
+ color: #7ea9b3;
+ width: 200px;
+ float: left;
+ margin-bottom: 8px;
+ padding-top: 6px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+#listSearchTags {
+ float: left;
+ margin-top: 3px;
+ color: #707070;
+ font-size: 16px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
}
-
ul#searchTags {
- margin-left:10px;
- float:right;
- padding-top:2px;
+ margin-left: 10px;
+ float: right;
+ padding-top: 2px;
}
-
.search-tips {
- font-size:16px;
- line-height:17px;
- color: @info-text;
- margin:5px 0 10px 0;
- padding:0px;
- float:left;
-
- a {
- text-decoration: underline;
- color: @link;
- }
+ font-size: 16px;
+ line-height: 17px;
+ color: #707070;
+ margin: 5px 0 10px 0;
+ padding: 0px;
+ float: left;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.search-tips a {
+ text-decoration: underline;
+ color: #1b79bd;
}
-
/* ----- Question list , check main_page/content.html and macros/macros.html----- */
-
#question-list {
- float: left;
- position: relative;
- background-color: #FFF;
- padding: 0;
- width: 100%;
+ float: left;
+ position: relative;
+ background-color: #FFF;
+ padding: 0;
+ width: 100%;
}
-
.short-summary {
- position: relative;
- filter: inherit;
- padding: 10px;
- border-bottom: 1px solid #DDDBCE;
- margin-bottom:1px;
- overflow: hidden;
- width: 710px;
- float: left;
- background: url(../images/summary-background.png) repeat-x;
-
- h2 {
- font-size: 24px;
- font-weight:normal;
- line-height: 26px;
- padding-left: 0;
- margin-bottom:8px;
- display:block;
- }
-
- a {
- color:@question-link;
- }
-
- .userinfo {
- text-align:right;
- line-height:16px;
- font-family:@body-font;
- padding-right:4px;
- }
-
-
- .userinfo .relativetime, span.anonymous
- {
- font-size: 11px;
- clear:both;
- font-weight: normal;
- color: #555;
- }
-
- .userinfo a{
- font-weight:bold;
- font-size:11px;
- }
-
- .counts {
- float: right;
- margin: 4px 0 0 5px;
- }
-
- .counts .item-count {
- padding:0px 5px 0px 5px;
- font-size: 25px;
- font-family:@main-font;
- }
-
- .counts .votes div,
- .counts .views div,
- .counts .answers div,
- .counts .favorites div
- {
- margin-top:3px;
- font-size: 14px;
- line-height:14px;
- color: #646464;
- }
-
- .tags {
- margin-top: 0;
- }
-
- .votes, .answers, .favorites, .views {
- text-align: center;
- margin: 0 3px;
- padding: 8px 2px 0px 2px;
- width: 51px;
- float: right;
- height:44px;
- border:#dbdbd4 1px solid;
- }
-
- .votes{
- background: url(../images/vote-background.png) repeat-x;
- }
-
- .answers{
- background:url(../images/answers-background.png) repeat-x;
- }
-
- .views {
- background:url(../images/view-background.png) repeat-x;
- }
-
- .no-votes .item-count {
- color: #b1b5b6;
- }
- .some-votes .item-count {
- color: #4a757f;
- }
-
- .no-answers .item-count {
- color: #b1b5b6;
- }
- .some-answers .item-count {
- color: #eab243;
- }
-
- .no-views .item-count {
- color: #b1b5b6;
- }
- .some-views .item-count {
- color: #d33f00;
- }
-
- .accepted .item-count {
- background:url(../images/accept.png) no-repeat top right;
- display: block;
- text-align: center;
- width: 40px;
- color: #eab243;
- }
-
- .some-favorites .item-count {
- background:#338333;
- color:#d0f5a9;
- }
- .no-favorites .item-count {
- background: #eab243;
- color: yellow;
- }
-
+ position: relative;
+ filter: inherit;
+ padding: 10px;
+ border-bottom: 1px solid #DDDBCE;
+ margin-bottom: 1px;
+ overflow: hidden;
+ width: 710px;
+ float: left;
+ background: url(../images/summary-background.png) repeat-x;
+}
+.short-summary h2 {
+ font-size: 24px;
+ font-weight: normal;
+ line-height: 26px;
+ padding-left: 0;
+ margin-bottom: 8px;
+ display: block;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.short-summary a {
+ color: #464646;
+}
+.short-summary .userinfo {
+ text-align: right;
+ line-height: 16px;
+ font-family: Arial;
+ padding-right: 4px;
+}
+.short-summary .userinfo .relativetime, .short-summary span.anonymous {
+ font-size: 11px;
+ clear: both;
+ font-weight: normal;
+ color: #555;
+}
+.short-summary .userinfo a {
+ font-weight: bold;
+ font-size: 11px;
+}
+.short-summary .counts {
+ float: right;
+ margin: 4px 0 0 5px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.short-summary .counts .item-count {
+ padding: 0px 5px 0px 5px;
+ font-size: 25px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.short-summary .counts .votes div,
+.short-summary .counts .views div,
+.short-summary .counts .answers div,
+.short-summary .counts .favorites div {
+ margin-top: 3px;
+ font-size: 14px;
+ line-height: 14px;
+ color: #646464;
+}
+.short-summary .tags {
+ margin-top: 0;
+}
+.short-summary .votes,
+.short-summary .answers,
+.short-summary .favorites,
+.short-summary .views {
+ text-align: center;
+ margin: 0 3px;
+ padding: 8px 2px 0px 2px;
+ width: 51px;
+ float: right;
+ height: 44px;
+ border: #dbdbd4 1px solid;
+}
+.short-summary .votes {
+ background: url(../images/vote-background.png) repeat-x;
+}
+.short-summary .answers {
+ background: url(../images/answers-background.png) repeat-x;
+}
+.short-summary .views {
+ background: url(../images/view-background.png) repeat-x;
+}
+.short-summary .no-votes .item-count {
+ color: #b1b5b6;
+}
+.short-summary .some-votes .item-count {
+ color: #4a757f;
+}
+.short-summary .no-answers .item-count {
+ color: #b1b5b6;
+}
+.short-summary .some-answers .item-count {
+ color: #eab243;
+}
+.short-summary .no-views .item-count {
+ color: #b1b5b6;
+}
+.short-summary .some-views .item-count {
+ color: #d33f00;
+}
+.short-summary .accepted .item-count {
+ background: url(../images/accept.png) no-repeat top right;
+ display: block;
+ text-align: center;
+ width: 40px;
+ color: #eab243;
+}
+.short-summary .some-favorites .item-count {
+ background: #338333;
+ color: #d0f5a9;
+}
+.short-summary .no-favorites .item-count {
+ background: #eab243;
+ color: yellow;
}
-
/* ----- Question list Paginator , check main_content/pager.html and macros/utils_macros.html----- */
-
.evenMore {
- font-size: 16px;
- color:@info-text;
- padding:15px 0px 10px 0px;
- clear:both;
+ font-size: 13px;
+ color: #707070;
+ padding: 15px 0px 10px 0px;
+ clear: both;
}
-
.evenMore a {
- text-decoration: underline;
- color:@link;
+ text-decoration: underline;
+ color: #1b79bd;
}
-
.pager {
- margin-top: 10px;
- margin-bottom: 16px;
+ margin-top: 10px;
+ margin-bottom: 16px;
}
-
.pagesize {
- margin-top: 10px;
- margin-bottom: 16px;
- float: right;
+ margin-top: 10px;
+ margin-bottom: 16px;
+ float: right;
}
-
.paginator {
- padding: 5px 0 10px 0;
- font-size:16px;
-
- .prev a, .prev a:visited,
- .next a, .next a:visited {
- background-color: #fff;
- color: #777;
- padding: 2px 4px 3px 4px;
- font-family:@main-font;
- }
- a{
- color:@section-title;
- }
- .prev {
- margin-right: .5em;
- }
-
- .next {
- margin-left: .5em;
- }
-
- .page a, .page a:visited, .curr {
- padding: .25em;
- background-color: #fff;
- margin: 0em .25em;
- color: #ff;
- }
-
- .curr {
- background-color: #8ebcc7;
- color: #fff;
- font-weight: bold;
- }
- .next a, .prev a{
- color:@section-title
- }
- .page a:hover,
- .curr a:hover,
- .prev a:hover,
- .next a:hover {
- color: #8C8C8C;
- background-color: #E1E1E1;
- text-decoration: none;
- }
-
- .text {
- color: #777;
- padding: .3em;
- }
-
- .paginator-container-left {
- padding: 5px 0 10px 0;
- }
-
+ padding: 5px 0 10px 0;
+ font-size: 13px;
+}
+.paginator .prev a,
+.paginator .prev a:visited,
+.paginator .next a,
+.paginator .next a:visited {
+ background-color: #fff;
+ color: #777;
+ padding: 2px 4px 3px 4px;
+}
+.paginator a {
+ color: #7ea9b3;
+}
+.paginator .prev {
+ margin-right: .5em;
+}
+.paginator .next {
+ margin-left: .5em;
+}
+.paginator .page a, .paginator .page a:visited, .paginator .curr {
+ padding: .25em;
+ background-color: #fff;
+ margin: 0em .25em;
+ color: #ff;
+}
+.paginator .curr {
+ background-color: #8ebcc7;
+ color: #fff;
+ font-weight: bold;
+}
+.paginator .next a, .paginator .prev a {
+ color: #7ea9b3;
+}
+.paginator .page a:hover,
+.paginator .curr a:hover,
+.paginator .prev a:hover,
+.paginator .next a:hover {
+ color: #8C8C8C;
+ background-color: #E1E1E1;
+ text-decoration: none;
+}
+.paginator .text {
+ color: #777;
+ padding: .3em;
+}
+.paginator .paginator-container-left {
+ padding: 5px 0 10px 0;
}
-
/* ----- Tags Styles ----- */
-
/* tag formatting is also copy-pasted in template
because it must be the same in the emails
askbot/models/__init__.py:format_instant_notification_email()
*/
-
/* tag cloud */
-
.tag-size-1 {
- font-size:12px;
+ font-size: 12px;
}
.tag-size-2 {
- font-size:13px;
+ font-size: 13px;
}
.tag-size-3 {
- font-size:14px;
+ font-size: 14px;
}
.tag-size-4 {
- font-size:15px;
+ font-size: 15px;
}
.tag-size-5 {
- font-size:16px;
+ font-size: 16px;
}
.tag-size-6 {
- font-size:17px;
+ font-size: 17px;
}
.tag-size-7 {
- font-size:18px;
+ font-size: 18px;
}
.tag-size-8 {
- font-size:19px;
+ font-size: 19px;
}
.tag-size-9 {
- font-size:20px;
+ font-size: 20px;
}
.tag-size-10 {
- font-size:21px;
+ font-size: 21px;
}
-
-ul.tags,
-ul.tags.marked-tags,
-ul#related-tags {
- list-style: none;
- margin: 0;
- padding: 0;
- line-height: 170%;
- display: block;
+ul.tags, ul.tags.marked-tags, ul#related-tags {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ line-height: 170%;
+ display: block;
}
-
ul.tags li {
- float:left;
- display: block;
- margin: 0 5px 0 0;
- padding: 0;
- height:20px;
+ float: left;
+ display: block;
+ margin: 0 5px 0 0;
+ padding: 0;
+ height: 20px;
}
-
.wildcard-tags {
- clear: both;
+ clear: both;
}
-
-ul.tags.marked-tags li,
-.wildcard-tags ul.tags li {
- margin-bottom: 5px;
+ul.tags.marked-tags li, .wildcard-tags ul.tags li {
+ margin-bottom: 5px;
}
-
#tagSelector div.inputs {
- clear: both;
- float: none;
- margin-bottom:10px;
+ clear: both;
+ float: none;
+ margin-bottom: 10px;
}
-
-.tags-page ul.tags li,
-ul#ab-user-tags li {
- width: 160px;
- margin:5px;
+.tags-page ul.tags li, ul#ab-user-tags li {
+ width: 160px;
+ margin: 5px;
}
-
ul#related-tags li {
- margin: 0 5px 5px 0;
- float: left;
- clear: left;
+ margin: 0 5px 5px 0;
+ float: left;
+ clear: left;
}
-
/* .tag-left and .tag-right are for the sliding doors decoration of tags */
-
.tag-left {
- background: url(../images/tag-right.png) no-repeat right center;
- border: none;
- cursor: pointer;
- display: block;
- float: left;
- height: 20px;
- margin: 0 5px 0 0;
- padding: 0;
+ background: url(../images/tag-right.png) no-repeat right center;
+ border: none;
+ cursor: pointer;
+ display: block;
+ float: left;
+ height: 20px;
+ margin: 0 5px 0 0;
+ padding: 0;
}
-
.tag-right {
- background:url(../images/tag-left.png) no-repeat left center;
- border: none;
- display: block;
- float: left;
- height: 20px;
- line-height: 20px;
- font-weight: normal;
- font-size: 11px;
- padding: 0px 10px 0px 15px;
- text-decoration: none;
- text-align: center;
- white-space: nowrap;
- vertical-align: middle;
- font-family:@body-font;
- color:#717179;
+ background: url(../images/tag-left.png) no-repeat left center;
+ border: none;
+ display: block;
+ float: left;
+ height: 20px;
+ line-height: 20px;
+ font-weight: normal;
+ font-size: 11px;
+ padding: 0px 10px 0px 15px;
+ text-decoration: none;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ font-family: Arial;
+ color: #717179;
}
.deletable-tag {
- margin-right: 3px;
- white-space: nowrap;
+ margin-right: 3px;
+ white-space: nowrap;
}
-
.deletable-tag .tag-right {
- padding-right: 0px;
- float: left;
+ padding-right: 0px;
+ float: left;
}
.deletable-tag.tag-left {
- padding-right: 0px;
+ padding-right: 0px;
}
-
-.tags a.tag-right,
-.tags span.tag-right {
- color: #585858;
- text-decoration: none;
-
+.tags a.tag-right, .tags span.tag-right {
+ color: #585858;
+ text-decoration: none;
}
-.tags a:hover{
- color: #1A1A1A;
+.tags a:hover {
+ color: #1A1A1A;
}
-
.users-page h1, .tags-page h1 {
- float: left;
+ float: left;
}
-
.main-page h1 {
- margin-right: 5px;
+ margin-right: 5px;
}
-
span.delete-icon {
- padding-left: 13px;
- vertical-align: bottom;
- background: url(../images/close-small-dark.png) bottom no-repeat;
- cursor: default;
+ padding-left: 13px;
+ vertical-align: bottom;
+ background: url(../images/close-small-dark.png) bottom no-repeat;
+ cursor: default;
}
span.delete-icon:hover {
- background: url(../images/close-small-dark.png) top no-repeat;
+ background: url(../images/close-small-dark.png) top no-repeat;
}
-
.tags span.delete-icon {
- float: left;
- height: 20px;
- width:8px;
- margin: 0px 0 0 10px;
- display: block;
+ float: left;
+ height: 20px;
+ width: 8px;
+ margin: 0px 0 0 10px;
+ display: block;
}
-
.tag-number {
- font-weight: normal;
- float: left;
- font-size:16px;
- color:#5d5d5d;
+ font-weight: normal;
+ float: left;
+ font-size: 16px;
+ color: #5d5d5d;
}
-
.badges .tag-number {
- float: none;
- display: inline;
- padding-right: 15px;
+ float: none;
+ display: inline;
+ padding-right: 15px;
}
-
/* ----- Ask and Edit Question Form template----- */
-
-.section-title{
- color:@section-title;
- font-family:@main-font;
- font-weight:bold;
- font-size:24px;
+.section-title {
+ color: #7ea9b3;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ font-weight: bold;
+ font-size: 24px;
}
-
.ask-body {
- padding-right: 10px;
+ padding-right: 10px;
}
-
-#fmask{
- margin-bottom:30px;
- width:100%;
+#fmask {
+ margin-bottom: 30px;
+ width: 100%;
}
-
#askFormBar {
- display:inline-block;
- padding: 4px 7px 5px 0px;
- margin-top:0px;
-
- p{
- margin:0 0 5px 0;
- font-size:16px;
- color:@info-text-dark;
- line-height:1.2;
- }
- .questionTitleInput {
- font-size: 24px;
- line-height: 24px;
- height: 36px;
- margin: 0px;
- padding: 0px 0 0 5px;
- border:#cce6ec 3px solid;
- width:725px;
- }
-}
-
-.ask-page, .edit-question-page{
-
- div#question-list {
- float: none;
- border-bottom:#f0f0ec 1px solid;
- float:left;
- margin-bottom:10px;
-
- }
-
- div#question-list h2 {
- font-size: 16px;
- padding-bottom: 0;
- color:@link;
- border-top:#f0f0ec 1px solid;
- border-left:#f0f0ec 1px solid;
- height:30px;
- line-height:30px;
- font-weight:normal;
- }
-
- div#question-list span {
- width:28px;
- height:26px;
- line-height:26px;
- text-align:center;
- margin-right: 10px;
- float:left;
- display:block;
- color:#fff;
- background: #b8d0d5;
- .rounded-corners(3px);
- }
- label{
- color:@info-text-dark;
- font-size:15px;
- }
-
- #id_tags{
- border:#cce6ec 3px solid;
- height:25px;
- padding-left:5px;
- width:395px;
- font-size:14px;
- }
+ display: inline-block;
+ padding: 4px 7px 5px 0px;
+ margin-top: 0px;
+}
+#askFormBar p {
+ margin: 0 0 5px 0;
+ font-size: 14px;
+ color: #525252;
+ line-height: 1.4;
+}
+#askFormBar .questionTitleInput {
+ font-size: 24px;
+ line-height: 24px;
+ height: 36px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border: #cce6ec 3px solid;
+ width: 725px;
+}
+.ask-page div#question-list, .edit-question-page div#question-list {
+ float: none;
+ border-bottom: #f0f0ec 1px solid;
+ float: left;
+ margin-bottom: 10px;
+}
+.ask-page div#question-list a, .edit-question-page div#question-list a {
+ line-height: 30px;
+}
+.ask-page div#question-list h2, .edit-question-page div#question-list h2 {
+ font-size: 13px;
+ padding-bottom: 0;
+ color: #1b79bd;
+ border-top: #f0f0ec 1px solid;
+ border-left: #f0f0ec 1px solid;
+ height: 30px;
+ line-height: 30px;
+ font-weight: normal;
+}
+.ask-page div#question-list span, .edit-question-page div#question-list span {
+ width: 28px;
+ height: 26px;
+ line-height: 26px;
+ text-align: center;
+ margin-right: 10px;
+ float: left;
+ display: block;
+ color: #fff;
+ background: #b8d0d5;
+ border-radius: 3px;
+ -ms-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -khtml-border-radius: 3px;
+}
+.ask-page label, .edit-question-page label {
+ color: #525252;
+ font-size: 13px;
+}
+.ask-page #id_tags, .edit-question-page #id_tags {
+ border: #cce6ec 3px solid;
+ height: 25px;
+ padding-left: 5px;
+ width: 395px;
+ font-size: 14px;
}
-
.title-desc {
- color: @info-text;
- font-size: 15px;
-}
-
-#fmanswer input.submit,
-.ask-page input.submit,
-.edit-question-page input.submit {
- float: left;
- background: url(../images/medium-button.png) top repeat-x;
- height:34px;
- border:0;
- font-family:@main-font;
- color:@button-label;
- font-weight:normal;
- font-size:21px;
- margin-top:3px;
- .rounded-corners(4px);
- .box-shadow(1px, 1px, 2px, #636363);
- margin-right:7px;
+ color: #707070;
+ font-size: 13px;
+}
+#fmanswer input.submit, .ask-page input.submit, .edit-question-page input.submit {
+ float: left;
+ background: url(../images/medium-button.png) top repeat-x;
+ height: 34px;
+ border: 0;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ color: #4a757f;
+ font-weight: normal;
+ font-size: 21px;
+ margin-top: 3px;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-box-shadow: 1px 1px 2px #636363;
+ -moz-box-shadow: 1px 1px 2px #636363;
+ box-shadow: 1px 1px 2px #636363;
+ margin-right: 7px;
+}
+#fmanswer input.submit:hover, .ask-page input.submit:hover, .edit-question-page input.submit:hover {
+ text-decoration: none;
+ background: url(../images/medium-button.png) bottom repeat-x;
+ text-shadow: 0px 1px 0px #c6d9dd;
+ -moz-text-shadow: 0px 1px 0px #c6d9dd;
+ -webkit-text-shadow: 0px 1px 0px #c6d9dd;
+}
+#editor {
+ /*adjustment for editor preview*/
+
+ font-size: 100%;
+ min-height: 200px;
+ line-height: 18px;
+ margin: 0;
+ border-left: #cce6ec 3px solid;
+ border-bottom: #cce6ec 3px solid;
+ border-right: #cce6ec 3px solid;
+ border-top: 0;
+ padding: 10px;
+ margin-bottom: 10px;
+ width: 710px;
}
-
-#fmanswer input.submit:hover,
-.ask-page input.submit:hover,
-.edit-question-page input.submit:hover{
- text-decoration:none;
- background: url(../images/medium-button.png) bottom repeat-x;
- .text-shadow(0px, 1px, 0px, #c6d9dd)
-}
-#editor { /*adjustment for editor preview*/
- font-size: 100%;
- min-height: 200px;
- line-height: 18px;
- margin:0;
- border-left:#cce6ec 3px solid;
- border-bottom:#cce6ec 3px solid;
- border-right:#cce6ec 3px solid;
- border-top:0;
- padding:10px;
- margin-bottom:10px;
- width:710px;
-}
-
#id_title {
- width: 100%;
+ width: 100%;
}
-
.wmd-preview {
- margin: 3px 0 5px 0;
- padding: 6px;
- background-color: #F5F5F5;
- min-height: 20px;
- overflow: auto;
- font-size:13px;
- font-family:@body-font;
-
- p{
- margin-bottom:14px;
- line-height:1.4;
- font-size:14px;
- }
+ margin: 3px 0 5px 0;
+ padding: 6px;
+ background-color: #F5F5F5;
+ min-height: 20px;
+ overflow: auto;
+ font-size: 13px;
+ font-family: Arial;
+}
+.wmd-preview p {
+ margin-bottom: 14px;
+ line-height: 1.4;
+ font-size: 14px;
}
-
.wmd-preview pre {
- background-color: #E7F1F8;
-
+ background-color: #E7F1F8;
}
-
.wmd-preview blockquote {
- background-color: #eee;
+ background-color: #eee;
}
-
.wmd-preview IMG {
- max-width: 600px;
+ max-width: 600px;
}
-
.preview-toggle {
- width: 100%;
- color: #b6a475; /*letter-spacing:1px;*/
- text-align: left;
-}
+ width: 100%;
+ color: #b6a475;
+ /*letter-spacing:1px;*/
+ text-align: left;
+}
.preview-toggle span:hover {
- cursor: pointer;
+ cursor: pointer;
}
-
.after-editor {
- margin-top: 10px;
+ margin-top: 10px;
}
-
.checkbox {
- margin-left:5px;
- font-weight:normal;
- cursor:help
+ margin-left: 5px;
+ font-weight: normal;
+ cursor: help;
}
-
.question-options {
- margin-top: 1px;
- color: #666;
- line-height: 13px;
- margin-bottom:5px;
+ margin-top: 1px;
+ color: #666;
+ line-height: 13px;
+ margin-bottom: 5px;
}
.question-options label {
- vertical-align: text-bottom;
+ vertical-align: text-bottom;
}
-
.edit-content-html {
- border-top: 1px dotted #D8D2A9;
- border-bottom: 1px dotted #D8D2A9;
- margin: 5px 0 5px 0;
-}
-
-.edit-question-page{
- #id_revision{
- font-size:14px;
- margin-top:10px;
- }
- #id_title{
- font-size: 24px;
- line-height: 24px;
- height: 36px;
- margin: 0px;
- padding: 0px 0 0 5px;
- border:#cce6ec 3px solid;
- width:725px;
- margin-bottom:10px;
- }
- #id_summary{
- border:#cce6ec 3px solid;
- height:25px;
- padding-left:5px;
- width:395px;
- font-size:14px;
- }
- .title-desc{
- margin-bottom:10px;
- }
+ border-top: 1px dotted #D8D2A9;
+ border-bottom: 1px dotted #D8D2A9;
+ margin: 5px 0 5px 0;
+}
+.edit-question-page, #fmedit {
+ color: #525252;
+}
+.edit-question-page #id_revision, #fmedit #id_revision {
+ font-size: 14px;
+ margin-top: 5px;
+ margin-bottom: 5px;
+}
+.edit-question-page #id_title, #fmedit #id_title {
+ font-size: 24px;
+ line-height: 24px;
+ height: 36px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border: #cce6ec 3px solid;
+ width: 725px;
+ margin-bottom: 10px;
+}
+.edit-question-page #id_summary, #fmedit #id_summary {
+ border: #cce6ec 3px solid;
+ height: 25px;
+ padding-left: 5px;
+ width: 395px;
+ font-size: 14px;
+}
+.edit-question-page .title-desc, #fmedit .title-desc {
+ margin-bottom: 10px;
}
-
/* ----- Question template ----- */
-
-.question-page{
-
- h1{
- padding-top:0px;
- }
-
- h1 a{
- color:@question-link;
- font-size:30px;
- font-weight:normal;
- line-height:1;
- }
-
- p.rss {
- float:none;
- clear:both;
- padding: 3px 0 0 25px;
- font-size: 15px;
- width:110px;
- background-position:center left;
- margin-left:4px;
- }
-
- p.rss a {
- font-family:@main-font;
- vertical-align: top;
- }
-
- .question-content{
- float:right;
- width:690px;
- margin-bottom:10px;
- }
-
- #question-table{
- float:left;
- border-top:#f0f0f0 1px solid;
- }
-
- #question-table,
- .answer-table {
- margin: 6px 0 0px 0;
- border-spacing: 0px;
- width: 680px;
- padding-right:3px;
- }
-
- .answer-table {
- margin-top:0px;
- border-bottom: 1px solid #D4D4D4;
- float:left;
- }
-
- .answer-table td,
- #question-table td {
- width:20px;
- vertical-align:top;
- }
- .question-body, .answer-body {
- overflow: auto;
- margin-top:10px;
- font-family:@body-font;
- color:#4b4b4b;
-
- p{
- margin-bottom:14px;
- line-height:1.4;
- font-size:14px;
- padding:0px 5px 5px 0px;
- }
-
- a {
- color:@link;
- }
-
- li {
- margin-bottom:7px;
- }
- }
-
- .question-body IMG, .answer-body IMG {
- max-width: 600px;
- }
-
- .post-update-info-container {
- float: right;
- width: 175px;
- }
-
- .post-update-info {
- background: #fff url(../images/background-user-info.png) repeat-x bottom;
- float: right;
- font-size: 9px;
- font-family:@secondary-font;
- width: 158px;
- padding:4px;
- margin:0px 0px 5px 5px;
- line-height: 14px;
- .rounded-corners(4px);
- .box-shadow (0px, 2px,1px,#bfbfbf);
-
- p {
- line-height: 13px;
- font-size: 11px;
- margin: 0 0 2px 1px;
- padding: 0;
- }
- a{
- color:#444;
- }
- .gravatar {
- float: left;
- margin-right: 4px;
- }
-
- p.tip {
- color: #444;
- line-height: 13px;
- font-size: 10px;
- }
- }
-
- .post-controls{
- font-size: 11px;
- line-height: 12px;
- min-width: 200px;
- padding-left: 5px;
- text-align:right;
- clear: left;
- float: right;
- margin-top:10px;
-
- a {
- color: #777;
- padding: 0px 3px 3px 22px;
- cursor: pointer;
- border: none;
- font-size:12px;
- font-family:@body-font;
- text-decoration: none;
- height:18px;
- display:block;
- float:right;
- line-height:18px;
- margin-top:-2px;
- margin-left:4px;
- }
-
- a:hover {
- background-color: #f5f0c9;
-
- }
- .sep {
- color: #ccc;
- float:right;
- height:18px;
- font-size:18px;
- }
- }
- .post-controls, .answer-controls{
- .question-delete{
- background: url(../images/delete.png) no-repeat center left;
- padding-left:16px;
- }
- .question-flag{
- background: url(../images/flag.png) no-repeat center left;
- }
- .question-edit{
- background: url(../images/edit2.png) no-repeat center left;
- }
- .question-retag{
- background: url(../images/retag.png) no-repeat center left;
- }
- .question-close{
- background: url(../images/close.png) no-repeat center left;
- }
- .permant-link{
- background: url(../images/link.png) no-repeat center left;
- }
- }
- .tabBar{
- width:100%;
- }
-
- #questionCount{
- float:left;
- font-family:@main-font;
- line-height:15px;
- }
-
- .question-img-upvote, .question-img-downvote,
- .answer-img-upvote, .answer-img-downvote {
- width: 25px;
- height: 20px;
- cursor:pointer;
- }
-
- .question-img-upvote, .answer-img-upvote {
- background: url(../images/vote-arrow-up-new.png) no-repeat;
- }
-
- .question-img-downvote, .answer-img-downvote {
- background: url(../images/vote-arrow-down-new.png) no-repeat;
- }
-
- .question-img-upvote:hover, .question-img-upvote.on,
- .answer-img-upvote:hover, .answer-img-upvote.on {
- background: url(../images/vote-arrow-up-on-new.png) no-repeat;
- }
-
- .question-img-downvote:hover, .question-img-downvote.on,
- .answer-img-downvote:hover, .answer-img-downvote.on {
- background: url(../images/vote-arrow-down-on-new.png) no-repeat;
- }
-
- .question-img-favorite:hover {
- background: url(../images/vote-favorite-on.png)
- }
- div.comments {
- padding: 0;
- }
- #comment-title{
- font-weight:bold;
- font-size:23px;
- color:@section-title;
- width:200px;
- float:left;
- }
- .comments {
- font-size: 12px;
- clear: both;
-
- div.controls {
- clear: both;
- float:left;
- width: 100%;
- margin: 3px 0 20px 5px;
- }
-
- .controls a {
- color: #988e4c;
- padding: 0 3px 2px 22px;
- font-family:@body-font;
- font-size:13px;
- background:url(../images/comment.png) no-repeat center left;
- }
-
- .controls a:hover {
- background-color: #f5f0c9;
- text-decoration: none;
- }
-
- .button {
- color: #988e4c;
- font-size: 11px;
- padding: 3px;
- cursor: pointer;
- }
- a {
- background-color: inherit;
- color: @link;
- padding: 0;
- }
-
- form.post-comments {
- margin: 3px 30px 4px 5px;
- }
-
- textarea {
- height: 42px;
- width:100%;
- margin: 12px 0 5px 1px;
- font-family: @body-font;
- outline: none;
- overflow:auto;
- font-size: 12px;
- line-height: 140%;
- padding-left:2px;
- padding-top:4px;
- border:#cce6ec 3px solid;
- }
-
- input {
- margin-left: 10px;
- margin-top: 1px;
- vertical-align: top;
- width: 100px;
- }
- button{
- background:url(../images/small-button-blue.png) repeat-x top;
- border:0;
- color:@button-label;
- font-size:12px;
- width:95px;
- font-weight:bold;
- height:24px;
- margin-top:-2px;
- cursor:pointer;
- .rounded-corners(4px);
- .text-shadow(0px,1px,0px,#E6F6FA);
- .box-shadow(1px, 1px, 2px, #808080);
- float:left;
- }
- button:hover{
- background: url(../images/small-button-blue.png) bottom repeat-x;
- .text-shadow(0px, 1px, 0px, #c6d9dd);
- }
- .counter {
- display: inline-block;
- width: 245px;
- float:right;
- color:#b6a475 !important;
- vertical-align: top;
- font-family:@body-font;
- float:right;
- text-align:right;
- }
- .comment {
- border-bottom: 1px solid #edeeeb;
- margin: 0;
- margin-top:8px;
- padding-bottom:4px;
- overflow: auto;
- font-family:@body-font;
- font-size:11px;
- min-height: 25px;
- background:url(../images/comment-background.png) bottom repeat-x;
- .rounded-corners(5px);
- }
- div.comment:hover {
- background-color: #efefef;
- }
- a.author{
- background-color: inherit;
- color: @link;
- padding: 0;
- }
-
- a.author:hover {
- text-decoration: underline;
- }
- span.delete-icon{
- background:url(../images/close-small.png) no-repeat;
- }
- span.delete-icon:hover{
- border:#BC564B 2px solid;
- .rounded-corners(10px);
-
- }
- .content {
- margin-bottom: 7px;
- }
-
- .comment-votes {
- float: left;
- width: 37px;
- line-height: 130%;
- padding: 6px 5px 6px 3px;
- }
-
- .comment-body {
- line-height: 1.3;
- margin: 3px 26px 0 46px;
- padding: 5px 3px;
- color: #666;
- font-size:13px;
- }
-
- .comment-body p{
- font-size:13px;
- line-height:1.3;
- margin-bottom: 3px;
- padding: 0;
- }
-
- .comment-delete {
- float: right;
- width: 14px;
- line-height: 130%;
- padding: 8px 6px;
- }
-
- .upvote {
- margin: 0px;
- padding-right: 17px;
- padding-top: 2px;
- text-align: right;
- height: 20px;
- font-size: 13px;
- font-weight: bold;
- color: #777;
- }
-
- .upvote.upvoted {
- color: #d64000;
- }
-
- .upvote.hover {
- background: url(../images/go-up-grey.png) no-repeat;
- background-position: right 1px;
- }
-
- .upvote:hover {
- background: url(../images/go-up-orange.png) no-repeat;
- background-position: right 1px;
- }
-
- .help-text{
- float: right;
- text-align:right;
- color: gray;
- margin-bottom: 0px;
- margin-top: 0px;
- line-height: 50%;
- }
- }
- #questionTools {
- font-size: 22px;
- margin-top: 11px;
- text-align: left;
- }
-
- .question-status {
- margin-top: 10px;
- margin-bottom:15px;
- padding: 20px;
- background-color: #fef7cc;
- text-align: center;
- border:#e1c04a 1px solid;
- }
-
- .question-status h3 {
- font-size: 20px;
- color:@info-text;
- font-weight:normal;
- }
-
- .vote-buttons {
- float: left;
- text-align: center;
- padding-top: 2px;
- margin:3px 10px 0px 3px;
- }
-
- .vote-buttons IMG {
- cursor: pointer;
- }
-
- .vote-number {
- font-family: @main-font;
- padding: 0px 0 5px 0;
- font-size: 25px;
- font-weight: bold;
- color: #777;
- }
-
- .vote-buttons .notify-sidebar {
- text-align: left;
- }
- .vote-buttons .notify-sidebar label {
- vertical-align: top;
- }
-
- .tabBar-answer{
- margin-bottom:15px;
- padding-left:7px;
- width:723px;
- margin-top:10px;
- }
- .answer{
- .vote-buttons {
- float:left;
- }
- }
- .accepted-answer {
- background-color: #f7fecc;
- border-bottom-color: #9BD59B;
-
- .vote-buttons {
- width:27px;
- margin-right:10px;
- }
- }
-
- .answer .post-update-info a{
- color:#444444;
- }
-
- .accepted-answer .comments {
- background-color: #f1f6d4;
- }
-
- .answered {
- background: #CCC;
- color: #999;
- }
-
- .answered-accepted {
- background: #DCDCDC;
- color: #763333;
-
- strong {
- color: #E1E818;
- }
- }
-
- .answered-by-owner {
- background: #F1F1FF;
-
- .comments .button {
- background-color: #E6ECFF;
- }
- .comments {
- background-color: #E6ECFF;
- }
- .vote-buttons {
- margin-right:10px;
- }
- }
-
- .answer-img-accept:hover {
- background: url(../images/vote-accepted-on.png)
- }
- .answer-body a {
- color:@link;
- }
- .answer-body li {
- margin-bottom:0.7em;
- }
-
- #fmanswer{
- color:@info-text;
- font-size:16px;
- line-height:1.2;
- margin-top:10px;
- }
- .message {
- padding: 5px;
- margin: 10px 0 10px 0;
-
- }
-
+.question-page h1 {
+ padding-top: 0px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.question-page h1 a {
+ color: #464646;
+ font-size: 30px;
+ font-weight: normal;
+ line-height: 1;
+}
+.question-page p.rss {
+ float: none;
+ clear: both;
+ padding: 3px 0 0 23px;
+ font-size: 15px;
+ width: 110px;
+ background-position: center left;
+ margin-left: 0px !important;
+}
+.question-page p.rss a {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ vertical-align: top;
+}
+.question-page .question-content {
+ float: right;
+ width: 690px;
+ margin-bottom: 10px;
+}
+.question-page #question-table {
+ float: left;
+ border-top: #f0f0f0 1px solid;
+}
+.question-page #question-table, .question-page .answer-table {
+ margin: 6px 0 0px 0;
+ border-spacing: 0px;
+ width: 680px;
+ padding-right: 3px;
+}
+.question-page .answer-table {
+ margin-top: 0px;
+ border-bottom: 1px solid #D4D4D4;
+ float: left;
+}
+.question-page .answer-table td, .question-page #question-table td {
+ width: 20px;
+ vertical-align: top;
+}
+.question-page .question-body, .question-page .answer-body {
+ overflow: auto;
+ margin-top: 10px;
+ font-family: Arial;
+ color: #4b4b4b;
+}
+.question-page .question-body p, .question-page .answer-body p {
+ margin-bottom: 14px;
+ line-height: 1.4;
+ font-size: 14px;
+ padding: 0px 5px 5px 0px;
+}
+.question-page .question-body a, .question-page .answer-body a {
+ color: #1b79bd;
+}
+.question-page .question-body li, .question-page .answer-body li {
+ margin-bottom: 7px;
+}
+.question-page .question-body IMG, .question-page .answer-body IMG {
+ max-width: 600px;
+}
+.question-page .post-update-info-container {
+ float: right;
+ width: 175px;
+}
+.question-page .post-update-info {
+ background: #ffffff url(../images/background-user-info.png) repeat-x bottom;
+ float: right;
+ font-size: 9px;
+ font-family: Arial;
+ width: 158px;
+ padding: 4px;
+ margin: 0px 0px 5px 5px;
+ line-height: 14px;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ -webkit-box-shadow: 0px 2px 1px #bfbfbf;
+ -moz-box-shadow: 0px 2px 1px #bfbfbf;
+ box-shadow: 0px 2px 1px #bfbfbf;
+}
+.question-page .post-update-info p {
+ line-height: 13px;
+ font-size: 11px;
+ margin: 0 0 2px 1px;
+ padding: 0;
+}
+.question-page .post-update-info a {
+ color: #444;
+}
+.question-page .post-update-info .gravatar {
+ float: left;
+ margin-right: 4px;
+}
+.question-page .post-update-info p.tip {
+ color: #444;
+ line-height: 13px;
+ font-size: 10px;
+}
+.question-page .post-controls {
+ font-size: 11px;
+ line-height: 12px;
+ min-width: 200px;
+ padding-left: 5px;
+ text-align: right;
+ clear: left;
+ float: right;
+ margin-top: 10px;
+}
+.question-page .post-controls a {
+ color: #777;
+ padding: 0px 3px 3px 22px;
+ cursor: pointer;
+ border: none;
+ font-size: 12px;
+ font-family: Arial;
+ text-decoration: none;
+ height: 18px;
+ display: block;
+ float: right;
+ line-height: 18px;
+ margin-top: -2px;
+ margin-left: 4px;
+}
+.question-page .post-controls a:hover {
+ background-color: #f5f0c9;
+}
+.question-page .post-controls .sep {
+ color: #ccc;
+ float: right;
+ height: 18px;
+ font-size: 18px;
+}
+.question-page .post-controls .question-delete, .question-page .answer-controls .question-delete {
+ background: url(../images/delete.png) no-repeat center left;
+ padding-left: 16px;
+}
+.question-page .post-controls .question-flag, .question-page .answer-controls .question-flag {
+ background: url(../images/flag.png) no-repeat center left;
+}
+.question-page .post-controls .question-edit, .question-page .answer-controls .question-edit {
+ background: url(../images/edit2.png) no-repeat center left;
+}
+.question-page .post-controls .question-retag, .question-page .answer-controls .question-retag {
+ background: url(../images/retag.png) no-repeat center left;
+}
+.question-page .post-controls .question-close, .question-page .answer-controls .question-close {
+ background: url(../images/close.png) no-repeat center left;
+}
+.question-page .post-controls .permant-link, .question-page .answer-controls .permant-link {
+ background: url(../images/link.png) no-repeat center left;
+}
+.question-page .tabBar {
+ width: 100%;
+}
+.question-page #questionCount {
+ float: left;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ line-height: 15px;
+}
+.question-page .question-img-upvote,
+.question-page .question-img-downvote,
+.question-page .answer-img-upvote,
+.question-page .answer-img-downvote {
+ width: 25px;
+ height: 20px;
+ cursor: pointer;
+}
+.question-page .question-img-upvote, .question-page .answer-img-upvote {
+ background: url(../images/vote-arrow-up-new.png) no-repeat;
+}
+.question-page .question-img-downvote, .question-page .answer-img-downvote {
+ background: url(../images/vote-arrow-down-new.png) no-repeat;
+}
+.question-page .question-img-upvote:hover,
+.question-page .question-img-upvote.on,
+.question-page .answer-img-upvote:hover,
+.question-page .answer-img-upvote.on {
+ background: url(../images/vote-arrow-up-on-new.png) no-repeat;
+}
+.question-page .question-img-downvote:hover,
+.question-page .question-img-downvote.on,
+.question-page .answer-img-downvote:hover,
+.question-page .answer-img-downvote.on {
+ background: url(../images/vote-arrow-down-on-new.png) no-repeat;
+}
+.question-page .question-img-favorite:hover {
+ background: url(../images/vote-favorite-on.png);
+}
+.question-page div.comments {
+ padding: 0;
+}
+.question-page #comment-title {
+ font-weight: bold;
+ font-size: 23px;
+ color: #7ea9b3;
+ width: 200px;
+ float: left;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+.question-page .comments {
+ font-size: 12px;
+ clear: both;
+}
+.question-page .comments div.controls {
+ clear: both;
+ float: left;
+ width: 100%;
+ margin: 3px 0 20px 5px;
+}
+.question-page .comments .controls a {
+ color: #988e4c;
+ padding: 0 3px 2px 22px;
+ font-family: Arial;
+ font-size: 13px;
+ background: url(../images/comment.png) no-repeat center left;
+}
+.question-page .comments .controls a:hover {
+ background-color: #f5f0c9;
+ text-decoration: none;
+}
+.question-page .comments .button {
+ color: #988e4c;
+ font-size: 11px;
+ padding: 3px;
+ cursor: pointer;
+}
+.question-page .comments a {
+ background-color: inherit;
+ color: #1b79bd;
+ padding: 0;
+}
+.question-page .comments form.post-comments {
+ margin: 3px 30px 4px 5px;
+}
+.question-page .comments textarea {
+ height: 42px;
+ width: 100%;
+ margin: 12px 0 5px 1px;
+ font-family: Arial;
+ outline: none;
+ overflow: auto;
+ font-size: 12px;
+ line-height: 140%;
+ padding-left: 2px;
+ padding-top: 4px;
+ border: #cce6ec 3px solid;
+}
+.question-page .comments input {
+ margin-left: 10px;
+ margin-top: 1px;
+ vertical-align: top;
+ width: 100px;
+}
+.question-page .comments button {
+ background: url(../images/small-button-blue.png) repeat-x top;
+ border: 0;
+ color: #4a757f;
+ font-size: 12px;
+ width: 95px;
+ font-weight: bold;
+ height: 24px;
+ margin-top: -2px;
+ cursor: pointer;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ text-shadow: 0px 1px 0px #e6f6fa;
+ -moz-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-box-shadow: 1px 1px 2px #808080;
+ -moz-box-shadow: 1px 1px 2px #808080;
+ box-shadow: 1px 1px 2px #808080;
+ float: left;
+}
+.question-page .comments button:hover {
+ background: url(../images/small-button-blue.png) bottom repeat-x;
+ text-shadow: 0px 1px 0px #c6d9dd;
+ -moz-text-shadow: 0px 1px 0px #c6d9dd;
+ -webkit-text-shadow: 0px 1px 0px #c6d9dd;
+}
+.question-page .comments .counter {
+ display: inline-block;
+ width: 245px;
+ float: right;
+ color: #b6a475 !important;
+ vertical-align: top;
+ font-family: Arial;
+ float: right;
+ text-align: right;
+}
+.question-page .comments .comment {
+ border-bottom: 1px solid #edeeeb;
+ margin: 0;
+ margin-top: 8px;
+ padding-bottom: 4px;
+ overflow: auto;
+ font-family: Arial;
+ font-size: 11px;
+ min-height: 25px;
+ background: url(../images/comment-background.png) bottom repeat-x;
+ border-radius: 5px;
+ -ms-border-radius: 5px;
+ -moz-border-radius: 5px;
+ -webkit-border-radius: 5px;
+ -khtml-border-radius: 5px;
+}
+.question-page .comments div.comment:hover {
+ background-color: #efefef;
+}
+.question-page .comments a.author {
+ background-color: inherit;
+ color: #1b79bd;
+ padding: 0;
+}
+.question-page .comments a.author:hover {
+ text-decoration: underline;
+}
+.question-page .comments span.delete-icon {
+ background: url(../images/close-small.png) no-repeat;
+}
+.question-page .comments span.delete-icon:hover {
+ border: #BC564B 2px solid;
+ border-radius: 10px;
+ -ms-border-radius: 10px;
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ -khtml-border-radius: 10px;
+}
+.question-page .comments .content {
+ margin-bottom: 7px;
+}
+.question-page .comments .comment-votes {
+ float: left;
+ width: 37px;
+ line-height: 130%;
+ padding: 6px 5px 6px 3px;
+}
+.question-page .comments .comment-body {
+ line-height: 1.3;
+ margin: 3px 26px 0 46px;
+ padding: 5px 3px;
+ color: #666;
+ font-size: 13px;
+}
+.question-page .comments .comment-body p {
+ font-size: 13px;
+ line-height: 1.3;
+ margin-bottom: 3px;
+ padding: 0;
+}
+.question-page .comments .comment-delete {
+ float: right;
+ width: 14px;
+ line-height: 130%;
+ padding: 8px 6px;
+}
+.question-page .comments .upvote {
+ margin: 0px;
+ padding-right: 17px;
+ padding-top: 2px;
+ text-align: right;
+ height: 20px;
+ font-size: 13px;
+ font-weight: bold;
+ color: #777;
+}
+.question-page .comments .upvote.upvoted {
+ color: #d64000;
+}
+.question-page .comments .upvote.hover {
+ background: url(../images/go-up-grey.png) no-repeat;
+ background-position: right 1px;
+}
+.question-page .comments .upvote:hover {
+ background: url(../images/go-up-orange.png) no-repeat;
+ background-position: right 1px;
+}
+.question-page .comments .help-text {
+ float: right;
+ text-align: right;
+ color: gray;
+ margin-bottom: 0px;
+ margin-top: 0px;
+ line-height: 50%;
+}
+.question-page #questionTools {
+ font-size: 22px;
+ margin-top: 11px;
+ text-align: left;
+}
+.question-page .question-status {
+ margin-top: 10px;
+ margin-bottom: 15px;
+ padding: 20px;
+ background-color: #fef7cc;
+ text-align: center;
+ border: #e1c04a 1px solid;
+}
+.question-page .question-status h3 {
+ font-size: 20px;
+ color: #707070;
+ font-weight: normal;
+}
+.question-page .vote-buttons {
+ float: left;
+ text-align: center;
+ padding-top: 2px;
+ margin: 3px 10px 0px 3px;
+}
+.question-page .vote-buttons IMG {
+ cursor: pointer;
+}
+.question-page .vote-number {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ padding: 0px 0 5px 0;
+ font-size: 25px;
+ font-weight: bold;
+ color: #777;
+}
+.question-page .vote-buttons .notify-sidebar {
+ text-align: left;
+}
+.question-page .vote-buttons .notify-sidebar label {
+ vertical-align: top;
+}
+.question-page .tabBar-answer {
+ margin-bottom: 15px;
+ padding-left: 7px;
+ width: 723px;
+ margin-top: 10px;
+}
+.question-page .answer .vote-buttons {
+ float: left;
+}
+.question-page .accepted-answer {
+ background-color: #f7fecc;
+ border-bottom-color: #9BD59B;
+}
+.question-page .accepted-answer .vote-buttons {
+ width: 27px;
+ margin-right: 10px;
+}
+.question-page .answer .post-update-info a {
+ color: #444444;
+}
+.question-page .accepted-answer .comments {
+ background-color: #f1f6d4;
+}
+.question-page .answered {
+ background: #CCC;
+ color: #999;
+}
+.question-page .answered-accepted {
+ background: #DCDCDC;
+ color: #763333;
+}
+.question-page .answered-accepted strong {
+ color: #E1E818;
+}
+.question-page .answered-by-owner {
+ background: #F1F1FF;
+}
+.question-page .answered-by-owner .comments .button {
+ background-color: #E6ECFF;
+}
+.question-page .answered-by-owner .comments {
+ background-color: #E6ECFF;
+}
+.question-page .answered-by-owner .vote-buttons {
+ margin-right: 10px;
+}
+.question-page .answer-img-accept:hover {
+ background: url(../images/vote-accepted-on.png);
+}
+.question-page .answer-body a {
+ color: #1b79bd;
+}
+.question-page .answer-body li {
+ margin-bottom: 0.7em;
+}
+.question-page #fmanswer {
+ color: #707070;
+ line-height: 1.2;
+ margin-top: 10px;
}
-
-.facebook-share.icon, .twitter-share.icon, .linkedin-share.icon, .identica-share.icon {
- background: url(../images/socialsprite.png) no-repeat;
- display:block;
- text-indent:-100em;
- height:25px;
- width:25px;
- margin-bottom:3px;
+.question-page #fmanswer p {
+ font-size: 13px;
+ line-height: 1.3;
}
-
-.facebook-share.icon:hover, .twitter-share.icon:hover, .linkedin-share.icon:hover, .identica-share.icon:hover{
- opacity:0.8;
- filter: alpha(opacity=80);
+.question-page #fmanswer h2 {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ color: #7ea9b3;
+ font-size: 24px;
+}
+.question-page #fmanswer label {
+ font-size: 13px;
+}
+.question-page .message {
+ padding: 5px;
+ margin: 0px 0 10px 0;
+}
+.facebook-share.icon,
+.twitter-share.icon,
+.linkedin-share.icon,
+.identica-share.icon {
+ background: url(../images/socialsprite.png) no-repeat;
+ display: block;
+ text-indent: -100em;
+ height: 25px;
+ width: 25px;
+ margin-bottom: 3px;
+}
+.facebook-share.icon:hover,
+.twitter-share.icon:hover,
+.linkedin-share.icon:hover,
+.identica-share.icon:hover {
+ opacity: 0.8;
+ filter: alpha(opacity=80);
}
-
.facebook-share.icon {
- background-position: -26px 0px;
+ background-position: -26px 0px;
}
.identica-share.icon {
- background-position: -78px 0px;
+ background-position: -78px 0px;
}
.twitter-share.icon {
- margin-top:10px;
- background-position: 0px 0px;
+ margin-top: 10px;
+ background-position: 0px 0px;
}
.linkedin-share.icon {
- background-position: -52px 0px;
+ background-position: -52px 0px;
}
-
/* -----Content pages, Login, About, FAQ, Users----- */
-
-.openid-signin,
-.meta,
-.users-page,
-{
- p{
- font-size:15px;
- color:@info-text;
- }
- h2{
- color:@info-text-dark;
- padding-left:0px;
- }
-}
-
-#email-input-fs,#local_login_buttons,#password-fs,#openid-fs{
- margin-top:10px;
- #id_email,#id_username,#id_password,input{
- font-size: 12px;
- line-height: 20px;
- height: 20px;
- margin: 0px;
- padding: 0px 0 0 5px;
- border:#cce6ec 3px solid;
- width:200px;
- }
- .submit-b{
- background:url(../images/small-button-blue.png) repeat-x top;
- border:0;
- color:@button-label;
- font-weight:bold;
- font-size:12px;
- height:24px;
- margin-top:-2px;
- cursor:pointer;
- .rounded-corners(4px);
- .text-shadow(0px,1px,0px,#E6F6FA);
- .box-shadow(1px, 1px, 2px, #808080)
- }
- .submit-b:hover{
- background:url(../images/small-button-blue.png) repeat-x bottom;
- }
+.openid-signin, .meta, .users-page {
+ font-size: 13px;
+ line-height: 1.3;
+ color: #525252;
+}
+.openid-signin p, .meta p, .users-page p {
+ font-size: 13px;
+ color: #707070;
+ line-height: 1.3;
+ font-family: Arial;
+ color: #525252;
+ margin-bottom: 12px;
+}
+.openid-signin h2, .meta h2, .users-page h2 {
+ color: #525252;
+ padding-left: 0px;
+ font-size: 16px;
+}
+.openid-signin #id_email,
+.meta #id_email,
+.users-page #id_email,
+.openid-signin #id_name,
+.meta #id_name,
+.users-page #id_name {
+ border: #cce6ec 3px solid;
+ height: 25px;
+ padding-left: 5px;
+ width: 395px;
+ font-size: 14px;
+}
+.openid-signin textarea, .meta textarea, .users-page textarea {
+ border: #cce6ec 3px solid;
+ padding-left: 5px;
+ padding-top: 5px;
+ width: 395px;
+ font-size: 14px;
+}
+.openid-signin input.submit, .meta input.submit, .users-page input.submit {
+ background: url(../images/small-button-blue.png) repeat-x top;
+ border: 0;
+ color: #4a757f;
+ font-weight: bold;
+ font-size: 12px;
+ height: 24px;
+ margin-top: -2px;
+ cursor: pointer;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ text-shadow: 0px 1px 0px #e6f6fa;
+ -moz-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-box-shadow: 1px 1px 2px #808080;
+ -moz-box-shadow: 1px 1px 2px #808080;
+ box-shadow: 1px 1px 2px #808080;
+}
+.openid-signin input.submit:hover, .meta input.submit:hover, .users-page input.submit:hover {
+ background: url(../images/small-button-blue.png) repeat-x bottom;
+ text-decoration: none;
+}
+.openid-signin .cancel, .meta .cancel, .users-page .cancel {
+ background: url(../images/small-button-cancel.png) repeat-x top !important;
+ color: #525252 !important;
+}
+.openid-signin .cancel:hover, .meta .cancel:hover, .users-page .cancel:hover {
+ background: url(../images/small-button-cancel.png) repeat-x bottom !important;
+}
+#email-input-fs,
+#local_login_buttons,
+#password-fs,
+#openid-fs {
+ margin-top: 10px;
+}
+#email-input-fs #id_email,
+#local_login_buttons #id_email,
+#password-fs #id_email,
+#openid-fs #id_email,
+#email-input-fs #id_username,
+#local_login_buttons #id_username,
+#password-fs #id_username,
+#openid-fs #id_username,
+#email-input-fs #id_password,
+#local_login_buttons #id_password,
+#password-fs #id_password,
+#openid-fs #id_password,
+#email-input-fs input,
+#local_login_buttons input,
+#password-fs input,
+#openid-fs input {
+ font-size: 12px;
+ line-height: 20px;
+ height: 20px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border: #cce6ec 3px solid;
+ width: 200px;
+}
+#email-input-fs .submit-b,
+#local_login_buttons .submit-b,
+#password-fs .submit-b,
+#openid-fs .submit-b {
+ background: url(../images/small-button-blue.png) repeat-x top;
+ border: 0;
+ color: #4a757f;
+ font-weight: bold;
+ font-size: 12px;
+ height: 24px;
+ margin-top: -2px;
+ cursor: pointer;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ text-shadow: 0px 1px 0px #e6f6fa;
+ -moz-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-box-shadow: 1px 1px 2px #808080;
+ -moz-box-shadow: 1px 1px 2px #808080;
+ box-shadow: 1px 1px 2px #808080;
+}
+#email-input-fs .submit-b:hover,
+#local_login_buttons .submit-b:hover,
+#password-fs .submit-b:hover,
+#openid-fs .submit-b:hover {
+ background: url(../images/small-button-blue.png) repeat-x bottom;
}
.openid-input {
- background: url(../images/openid.gif) no-repeat;
- padding-left: 15px;
- cursor: pointer;
+ background: url(../images/openid.gif) no-repeat;
+ padding-left: 15px;
+ cursor: pointer;
}
-
.openid-login-input {
- background-position: center left;
- background: url(../images/openid.gif) no-repeat 0% 50%;
- padding: 5px 5px 5px 15px;
- cursor: pointer;
- font-family: Trebuchet MS;
- font-weight: 300;
- font-size: 150%;
- width: 500px;
+ background-position: center left;
+ background: url(../images/openid.gif) no-repeat 0% 50%;
+ padding: 5px 5px 5px 15px;
+ cursor: pointer;
+ font-family: Trebuchet MS;
+ font-weight: 300;
+ font-size: 150%;
+ width: 500px;
}
-
.openid-login-submit {
- height: 40px;
- width: 80px;
- line-height: 40px;
- cursor: pointer;
- border: 1px solid #777;
- font-weight: bold;
- font-size: 120%;
+ height: 40px;
+ width: 80px;
+ line-height: 40px;
+ cursor: pointer;
+ border: 1px solid #777;
+ font-weight: bold;
+ font-size: 120%;
}
-
/* People page */
-
-.tabBar-user{
- width:375px;
+.tabBar-user {
+ width: 375px;
}
-
.user {
- padding: 5px;
- line-height: 140%;
- width: 166px;
- border:#eee 1px solid;
- margin-bottom:5px;
- .rounded-corners(3px);
- .user-micro-info{
- color:@info-text-dark;
- }
-
+ padding: 5px;
+ line-height: 140%;
+ width: 166px;
+ border: #eee 1px solid;
+ margin-bottom: 5px;
+ border-radius: 3px;
+ -ms-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -khtml-border-radius: 3px;
+}
+.user .user-micro-info {
+ color: #525252;
}
-
.user ul {
- margin: 0;
- list-style-type: none;
+ margin: 0;
+ list-style-type: none;
}
-
.user .thumb {
- clear: both;
- float: left;
- margin-right: 4px;
- display: inline;
+ clear: both;
+ float: left;
+ margin-right: 4px;
+ display: inline;
}
-
/* tags page */
-
-.tabBar-tags{
- width:270px;
- margin-bottom:15px;
+.tabBar-tags {
+ width: 270px;
+ margin-bottom: 15px;
}
-
/* badges page */
-
a.medal {
- font-size: 17px;
- line-height: 250%;
- margin-right:5px;
- color: #333;
- text-decoration: none;
- background: url(../images/medala.gif) no-repeat;
- border-left: 1px solid #EEE;
- border-top: 1px solid #EEE;
- border-bottom: 1px solid #CCC;
- border-right: 1px solid #CCC;
- padding: 4px 12px 4px 6px;
+ font-size: 17px;
+ line-height: 250%;
+ margin-right: 5px;
+ color: #333;
+ text-decoration: none;
+ background: url(../images/medala.gif) no-repeat;
+ border-left: 1px solid #EEE;
+ border-top: 1px solid #EEE;
+ border-bottom: 1px solid #CCC;
+ border-right: 1px solid #CCC;
+ padding: 4px 12px 4px 6px;
}
-
a:hover.medal {
- color: #333;
- text-decoration: none;
- background: url(../images/medala_on.gif) no-repeat;
- border-left: 1px solid #E7E296;
- border-top: 1px solid #E7E296;
- border-bottom: 1px solid #D1CA3D;
- border-right: 1px solid #D1CA3D;
-}
-
-#award-list{
- .user{
- float:left;
- margin:5px;
- }
+ color: #333;
+ text-decoration: none;
+ background: url(../images/medala_on.gif) no-repeat;
+ border-left: 1px solid #E7E296;
+ border-top: 1px solid #E7E296;
+ border-bottom: 1px solid #D1CA3D;
+ border-right: 1px solid #D1CA3D;
+}
+#award-list .user {
+ float: left;
+ margin: 5px;
}
-
/* profile page */
-
-.tabBar-profile{
- width:100%;
- margin-bottom:15px;
- float:left;
-}
-
-.user-profile-page{
- font-size:15px;
- color:@info-text-dark;
- .avatar img{
- border:#eee 1px solid;
- padding:5px;
- }
- h2{
- padding:10px 0px 10px 0px;
- }
+.tabBar-profile {
+ width: 100%;
+ margin-bottom: 15px;
+ float: left;
}
-
-.user-details {
- font-size: 15px;
+.user-profile-page {
+ font-size: 13px;
+ color: #525252;
}
-
-.user-about {
- background-color: #EEEEEE;
- height: 200px;
- line-height: 20px;
- overflow: auto;
- padding: 10px;
- width: 90%;
- p{font-size:18px;}
+.user-profile-page p {
+ font-size: 13px;
+ line-height: 1.3;
+ color: #525252;
}
-
-.user-info-table td{
- padding-bottom:5px;
+.user-profile-page .avatar img {
+ border: #eee 1px solid;
+ padding: 5px;
}
-
-.follow-toggle {
- border:0;
- color:@button-label;
- font-weight:bold;
- font-size:12px;
- height:26px;
- line-height:26px;
- margin-top:-2px;
- font-size:15px;
- cursor:pointer;
- background:url(../images/small-button-blue.png) repeat-x top;
- .rounded-corners(4px);
- .text-shadow(0px,1px,0px,#E6F6FA);
- .box-shadow(1px, 1px, 2px, #808080)
+.user-profile-page h2 {
+ padding: 10px 0px 10px 0px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
}
-
-.follow-toggle:hover {
- background:url(../images/small-button-blue.png) repeat-x bottom;
+.user-details {
+ font-size: 13px;
}
-
-.follow-toggle .follow{
- font-color: #000;
- font-style:normal;
+.user-details h3 {
+ font-size: 16px;
}
-
-.follow-toggle .unfollow div.unfollow-red{
- display:none;
+.user-about {
+ background-color: #EEEEEE;
+ height: 200px;
+ line-height: 20px;
+ overflow: auto;
+ padding: 10px;
+ width: 90%;
+}
+.user-about p {
+ font-size: 13px;
+}
+.follow-toggle, .submit {
+ border: 0 !important;
+ color: #4a757f;
+ font-weight: bold;
+ font-size: 12px;
+ height: 26px;
+ line-height: 26px;
+ margin-top: -2px;
+ font-size: 15px;
+ cursor: pointer;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ background: url(../images/small-button-blue.png) repeat-x top;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ text-shadow: 0px 1px 0px #e6f6fa;
+ -moz-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-text-shadow: 0px 1px 0px #e6f6fa;
+ -webkit-box-shadow: 1px 1px 2px #808080;
+ -moz-box-shadow: 1px 1px 2px #808080;
+ box-shadow: 1px 1px 2px #808080;
+}
+.follow-toggle:hover, .submit:hover {
+ background: url(../images/small-button-blue.png) repeat-x bottom;
+ text-decoration: none !important;
+}
+.follow-toggle .follow {
+ font-color: #000;
+ font-style: normal;
+}
+.follow-toggle .unfollow div.unfollow-red {
+ display: none;
+}
+.follow-toggle .unfollow:hover div.unfollow-red {
+ display: inline;
+ color: #fff;
+ font-weight: bold;
+ color: #A05736;
+}
+.follow-toggle .unfollow:hover div.unfollow-green {
+ display: none;
}
-
-.follow-toggle .unfollow:hover div.unfollow-red{
- display:inline;
- color:#fff;
- font-weight:bold;
- color:#A05736;
+.count {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ font-size: 200%;
+ font-weight: 700;
+ color: #777777;
}
+.scoreNumber {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ font-size: 35px;
+ font-weight: 800;
+ color: #777;
+ line-height: 40px;
+ /*letter-spacing:0px*/
-.follow-toggle .unfollow:hover div.unfollow-green{
- display:none;
+ margin-top: 3px;
}
-
.vote-count {
- font-family: Arial;
- font-size: 160%;
- font-weight: 700;
- color: #777;
+ font-family: Arial;
+ font-size: 160%;
+ font-weight: 700;
+ color: #777;
}
-
.answer-summary {
- display: block;
- clear: both;
- padding: 3px;
+ display: block;
+ clear: both;
+ padding: 3px;
}
-
.answer-votes {
- background-color: #EEEEEE;
- color: #555555;
- float: left;
- font-family: Arial;
- font-size: 15px;
- font-weight: bold;
- height: 17px;
- padding: 2px 4px 5px;
- text-align: center;
- text-decoration: none;
- width: 20px;
- margin-right: 10px;
- .rounded-corners(4px);
+ background-color: #EEEEEE;
+ color: #555555;
+ float: left;
+ font-family: Arial;
+ font-size: 15px;
+ font-weight: bold;
+ height: 17px;
+ padding: 2px 4px 5px;
+ text-align: center;
+ text-decoration: none;
+ width: 20px;
+ margin-right: 10px;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
}
-
+.karma-summary {
+ padding: 5px;
+ font-size: 13px;
+}
+.karma-summary h3 {
+ text-align: center;
+ font-weight: bold;
+ padding: 5px;
+}
+.karma-diagram {
+ width: 477px;
+ height: 300px;
+ float: left;
+ margin-right: 10px;
+}
+.karma-details {
+ float: right;
+ width: 450px;
+ height: 250px;
+ overflow-y: auto;
+ word-wrap: break-word;
+}
+.karma-details p {
+ margin-bottom: 10px;
+}
+.karma-gained {
+ font-weight: bold;
+ background: #eee;
+ width: 25px;
+ margin-right: 5px;
+ color: green;
+ padding: 3px;
+ display: block;
+ float: left;
+ text-align: center;
+ border-radius: 3px;
+ -ms-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -khtml-border-radius: 3px;
+}
+.karma-lost {
+ font-weight: bold;
+ background: #eee;
+ width: 25px;
+ color: red;
+ padding: 3px;
+ display: block;
+ margin-right: 5px;
+ float: left;
+ text-align: center;
+ border-radius: 3px;
+ -ms-border-radius: 3px;
+ -moz-border-radius: 3px;
+ -webkit-border-radius: 3px;
+ -khtml-border-radius: 3px;
+}
+.submit-row {
+ margin-bottom: 10px;
+}
+/*----- Revision pages ----- */
+.revision {
+ margin: 10px 0 10px 0;
+ font-size: 13px;
+ color: #525252;
+}
+.revision p {
+ font-size: 13px;
+ line-height: 1.3;
+ color: #525252;
+}
+.revision h3 {
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+ font-size: 21px;
+ padding-left: 0px;
+}
+.revision .header {
+ background-color: #F5F5F5;
+ padding: 5px;
+ cursor: pointer;
+}
+.revision .author {
+ background-color: #e9f3f5;
+}
+.revision .summary {
+ padding: 5px 0 10px 0;
+}
+.revision .summary span {
+ background-color: #fde785;
+ padding: 6px;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+ display: inline;
+ -webkit-box-shadow: 1px 1px 4px #cfb852;
+ -moz-box-shadow: 1px 1px 4px #cfb852;
+ box-shadow: 1px 1px 4px #cfb852;
+}
+.revision .answerbody {
+ padding: 10px 0 5px 10px;
+}
+.revision .revision-mark {
+ width: 150px;
+ text-align: left;
+ display: inline-block;
+ font-size: 11px;
+ overflow: hidden;
+}
+.revision .revision-mark .gravatar {
+ float: left;
+ margin-right: 4px;
+ padding-top: 5px;
+}
+.revision .revision-number {
+ font-size: 300%;
+ font-weight: bold;
+ font-family: sans-serif;
+}
+del, del .post-tag {
+ color: #C34719;
+}
+ins .post-tag, ins p, ins {
+ background-color: #E6F0A2;
+}
+/* ----- Red Popup notification ----- */
.vote-notification {
- z-index: 1;
- cursor: pointer;
- display: none;
- position: absolute;
- font-family:@secondary-font;
- font-size:14px;
- font-weight:normal;
- color: white;
- background-color: #8e0000;
- text-align: center;
- padding-bottom:10px;
- .box-shadow(0px, 2px, 4px, #370000);
- .rounded-corners(4px);
-
- h3{
- background:url(../images/notification.png) repeat-x top;
- padding:10px 10px 10px 10px;
- font-size:13px;
- margin-bottom:5px;
- border-top:#8e0000 1px solid;
- color:#fff;
- font-weight:normal;
- .rounded-corners-top(4px);
- }
- a {
- color: #fb7321;
- text-decoration: underline;
- font-weight:bold;
- }
-
+ z-index: 1;
+ cursor: pointer;
+ display: none;
+ position: absolute;
+ font-family: Arial;
+ font-size: 14px;
+ font-weight: normal;
+ color: white;
+ background-color: #8e0000;
+ text-align: center;
+ padding-bottom: 10px;
+ -webkit-box-shadow: 0px 2px 4px #370000;
+ -moz-box-shadow: 0px 2px 4px #370000;
+ box-shadow: 0px 2px 4px #370000;
+ border-radius: 4px;
+ -ms-border-radius: 4px;
+ -moz-border-radius: 4px;
+ -webkit-border-radius: 4px;
+ -khtml-border-radius: 4px;
+}
+.vote-notification h3 {
+ background: url(../images/notification.png) repeat-x top;
+ padding: 10px 10px 10px 10px;
+ font-size: 13px;
+ margin-bottom: 5px;
+ border-top: #8e0000 1px solid;
+ color: #fff;
+ font-weight: normal;
+ border-top-right-radius: 4px;
+ border-top-left-radius: 4px;
+ -moz-border-radius-topright: 4px;
+ -moz-border-radius-topleft: 4px;
+ -webkit-border-top-left-radius: 4px;
+ -webkit-border-top-right-radius: 4px;
+}
+.vote-notification a {
+ color: #fb7321;
+ text-decoration: underline;
+ font-weight: bold;
}
-
/* ----- Footer links , check blocks/footer.html----- */
-
#ground {
- width: 100%;
- clear: both;
- border-top: 1px solid #000;
- padding: 6px 0 0 0;
- background: @header-color;
- font-size:16px;
-
- p {
- margin-bottom:0;
- }
+ width: 100%;
+ clear: both;
+ border-top: 1px solid #000;
+ padding: 6px 0 0 0;
+ background: #16160f;
+ font-size: 16px;
+ font-family: 'Yanone Kaffeesatz', sans-serif;
+}
+#ground p {
+ margin-bottom: 0;
}
-
.footer-links {
- color: #EEE;
- text-align:left;
- width:500px;
- float:left;
- a {
- color: #e7e8a8;
- }
+ color: #EEE;
+ text-align: left;
+ width: 500px;
+ float: left;
}
-
-.powered-link{
- width:500px;
- float:left;
- text-align:left;
- a{
- color:#8ebcc7;
- }
+.footer-links a {
+ color: #e7e8a8;
}
-
-.copyright{
- color:#616161;
- width:450px;
- float:right;
- text-align:right;
-
- a{
- color:#8ebcc7;
- }
- img.license-logo {
- margin: 6px 0px 20px 10px;
- float:right;
- }
+.powered-link {
+ width: 500px;
+ float: left;
+ text-align: left;
+}
+.powered-link a {
+ color: #8ebcc7;
+}
+.copyright {
+ color: #616161;
+ width: 450px;
+ float: right;
+ text-align: right;
+}
+.copyright a {
+ color: #8ebcc7;
+}
+.copyright img.license-logo {
+ margin: 6px 0px 20px 10px;
+ float: right;
}
-
-
.notify-me {
- float: left;
+ float: left;
}
-
-
span.text-counter {
- margin-right: 20px;
+ margin-right: 20px;
}
-
span.form-error {
- color: #990000;
- font-weight: normal;
- margin-left: 5px;
+ color: #990000;
+ font-weight: normal;
+ margin-left: 5px;
}
-
p.form-item {
- margin: 0px;
+ margin: 0px;
}
-
-
-
-
.deleted {
- background: #F4E7E7 none repeat scroll 0 0;
+ background: #F4E7E7 none repeat scroll 0 0;
}
-
-
/* openid styles */
.form-row {
- line-height: 25px;
+ line-height: 25px;
}
-
table.form-as-table {
- margin-top: 5px;
+ margin-top: 5px;
}
-
table.form-as-table ul {
- list-style-type: none;
- display: inline;
+ list-style-type: none;
+ display: inline;
}
-
table.form-as-table li {
- display: inline;
+ display: inline;
}
-
table.form-as-table td {
- text-align: right;
+ text-align: right;
}
-
table.form-as-table th {
- text-align: left;
- font-weight: normal;
+ text-align: left;
+ font-weight: normal;
}
-
table.ab-subscr-form {
- width: 45em;
+ width: 45em;
}
-
table.ab-tag-filter-form {
- width: 45em;
+ width: 45em;
}
-
.submit-row {
- line-height: 30px;
- padding-top: 10px;
- display: block;
- clear: both;
+ line-height: 30px;
+ padding-top: 10px;
+ display: block;
+ clear: both;
}
-
.errors {
- line-height: 20px;
- color: red;
+ line-height: 20px;
+ color: red;
}
-
.error {
- color: darkred;
- margin: 0;
- font-size: 10px;
+ color: darkred;
+ margin: 0;
+ font-size: 10px;
}
-
label.retag-error {
- color: darkred;
- padding-left: 5px;
- font-size: 10px;
+ color: darkred;
+ padding-left: 5px;
+ font-size: 10px;
}
-
.fieldset {
- border: none;
- margin-top: 10px;
- padding: 10px;
+ border: none;
+ margin-top: 10px;
+ padding: 10px;
}
-
-
span.form-error {
- color: #990000;
- font-size: 90%;
- font-weight: normal;
- margin-left: 5px;
+ color: #990000;
+ font-size: 90%;
+ font-weight: normal;
+ margin-left: 5px;
}
-
-.revision {
- margin: 10px 0 10px 0;
- width: 100%;
- font-size: 13px;
-}
-
-.revision .header {
- background-color: #eee;
- padding: 5px;
- cursor: pointer;
-}
-
-.revision .author {
- background-color: #E9E9FF;
-}
-
-.revision .summary {
- padding: 5px 0 10px 0;
-}
-
-.revision .summary span {
- background-color: yellow;
- padding-left: 3px;
- padding-right: 3px;
- display: inline;
-}
-
-.revision h1 {
- font-size: 130%;
- font-weight: 600;
- padding: 15px 0 15px 0;
-}
-
-.revision-mark {
- width: 200px;
- text-align: left;
- display: inline-block;
- font-size: 90%;
- overflow: hidden;
-}
-
-.revision-number {
- font-size: 300%;
- font-weight: bold;
- font-family: sans-serif;
-}
-
-.revision .answerbody {
- padding: 10px 0 5px 10px;
-}
-
-/* Revision pages */
-del {
- color: #FF5F5F;
-}
-
-del .post-tag {
- color: #FF5F5F;
-}
-
-ins {
- background-color: #97ff97;
-}
-
-ins p{
- background-color: #97ff97;
-}
-
-ins .post-tag {
- background-color: #97ff97;
-}
-
-/*用户资料页面*/
-.count {
- font-family: Arial;
- font-size: 200%;
- font-weight: 700;
- color: #777
-}
-
-.scoreNumber {
- font-family: Arial;
- font-size: 35px;
- font-weight: 800;
- color: #777;
- line-height: 40px; /*letter-spacing:0px*/
- margin-top: 3px;
-}
-
-
/*
.favorites-count-off {
color: #919191;
@@ -2511,620 +2495,527 @@ ins .post-tag {
text-align: center;
}
*/
-
/* todo: get rid of this in html */
.favorites-empty {
- width: 32px;
- height: 45px;
- float: left;
+ width: 32px;
+ height: 45px;
+ float: left;
}
-
.user-info-table {
- margin-bottom: 10px;
- border-spacing: 0;
+ margin-bottom: 10px;
+ border-spacing: 0;
}
-
/* todo: remove this hack? */
.user-stats-table .narrow {
- width: 660px;
+ width: 660px;
}
-
.narrow .summary h3 {
- padding: 0px;
- margin: 0px;
+ padding: 0px;
+ margin: 0px;
}
-
.relativetime {
- font-weight: bold;
- text-decoration: none;
+ font-weight: bold;
+ text-decoration: none;
}
-
.narrow .tags {
- float: left;
+ float: left;
}
-
-
-
-
/* todo: make these more semantic */
.user-action-1 {
- font-weight: bold;
- color: #333;
+ font-weight: bold;
+ color: #333;
}
-
.user-action-2 {
- font-weight: bold;
- color: #CCC;
+ font-weight: bold;
+ color: #CCC;
}
-
.user-action-3 {
- color: #333;
+ color: #333;
}
-
.user-action-4 {
- color: #333;
+ color: #333;
}
-
.user-action-5 {
- color: darkred;
+ color: darkred;
}
-
.user-action-6 {
- color: darkred;
+ color: darkred;
}
-
.user-action-7 {
- color: #333;
+ color: #333;
}
-
.user-action-8 {
- padding: 3px;
- font-weight: bold;
- background-color: #CCC;
- color: #763333;
+ padding: 3px;
+ font-weight: bold;
+ background-color: #CCC;
+ color: #763333;
}
-
.revision-summary {
- background-color: #FFFE9B;
- padding: 2px;
+ background-color: #FFFE9B;
+ padding: 2px;
}
-
.question-title-link a {
- font-weight: bold;
- color: #0077CC;
+ font-weight: bold;
+ color: #0077CC;
}
-
.answer-title-link a {
- color: #333;
+ color: #333;
}
-
/* todo: make these more semantic */
.post-type-1 a {
- font-weight: bold;
-
+ font-weight: bold;
}
-
.post-type-3 a {
- font-weight: bold;
-
+ font-weight: bold;
}
-
.post-type-5 a {
- font-weight: bold;
+ font-weight: bold;
}
-
.post-type-2 a {
- color: #333;
+ color: #333;
}
-
.post-type-4 a {
- color: #333;
+ color: #333;
}
-
.post-type-6 a {
- color: #333;
+ color: #333;
}
-
.post-type-8 a {
- color: #333;
+ color: #333;
}
-
.hilite {
- background-color: #ff0;
+ background-color: #ff0;
}
-
.hilite1 {
- background-color: #ff0;
+ background-color: #ff0;
}
-
.hilite2 {
- background-color: #f0f;
+ background-color: #f0f;
}
-
.hilite3 {
- background-color: #0ff;
+ background-color: #0ff;
}
-
.gold, .badge1 {
- color: #FFCC00;
+ color: #FFCC00;
}
-
.silver, .badge2 {
- color: #CCCCCC;
+ color: #CCCCCC;
}
-
.bronze, .badge3 {
- color: #CC9933;
+ color: #CC9933;
}
-
.score {
- font-weight: 800;
- color: #333;
+ font-weight: 800;
+ color: #333;
}
-
-
a.comment {
- background: #EEE;
- color: #993300;
- padding: 5px;
+ background: #EEE;
+ color: #993300;
+ padding: 5px;
}
-
a.offensive {
- color: #999;
+ color: #999;
}
-
.message h1 {
- padding-top: 0px;
- font-size: 15px;
+ padding-top: 0px;
+ font-size: 15px;
}
-
.message p {
- margin-bottom: 0px;
+ margin-bottom: 0px;
}
-
p.space-above {
- margin-top: 10px;
+ margin-top: 10px;
}
-
.warning {
- color: red;
+ color: red;
}
-
-
-
button::-moz-focus-inner {
- padding:0;
- border:none;
+ padding: 0;
+ border: none;
}
.submit {
- cursor: pointer; /*letter-spacing:1px;*/
- background-color: #D4D0C8;
- height: 30px;
- border: 1px solid #777777; /* width:100px; */
- font-weight: bold;
- font-size: 120%;
-}
+ cursor: pointer;
+ /*letter-spacing:1px;*/
+ background-color: #D4D0C8;
+ height: 30px;
+ border: 1px solid #777777;
+ /* width:100px; */
+
+ font-weight: bold;
+ font-size: 120%;
+}
.submit:hover {
- text-decoration: underline;
+ text-decoration: underline;
}
-
.submit.small {
- margin-right:5px;
- height:20px;
- font-weight:normal;
- font-size:12px;
- padding:1px 5px;
+ margin-right: 5px;
+ height: 20px;
+ font-weight: normal;
+ font-size: 12px;
+ padding: 1px 5px;
}
.submit.small:hover {
- text-decoration:none;
+ text-decoration: none;
}
.question-page a.submit {
- display: -moz-inline-stack;
- display: inline-block;
- line-height: 30px;
- padding: 0 5px;
- *display: inline;
+ display: -moz-inline-stack;
+ display: inline-block;
+ line-height: 30px;
+ padding: 0 5px;
+ *display: inline;
}
-
.noscript {
- position: fixed;
- top: 0px;
- left: 0px;
- width: 100%;
- z-index: 100;
- padding: 5px 0;
- text-align: center;
- font-family: sans-serif;
- font-size: 120%;
- font-weight: Bold;
- color: #FFFFFF;
- background-color: #AE0000;
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ z-index: 100;
+ padding: 5px 0;
+ text-align: center;
+ font-family: sans-serif;
+ font-size: 120%;
+ font-weight: Bold;
+ color: #FFFFFF;
+ background-color: #AE0000;
}
-
.big {
- font-size: 15px;
+ font-size: 14px;
}
-
.strong {
- font-weight: bold;
+ font-weight: bold;
}
+.orange {
+ /* used in django.po */
-.orange {/* used in django.po */
- color: #d64000;
- font-weight: bold;
+ color: #d64000;
+ font-weight: bold;
}
-
.grey {
- color: #808080;
+ color: #808080;
}
-
.about div {
- padding: 10px 5px 10px 5px;
- border-top: 1px dashed #aaaaaa;
+ padding: 10px 5px 10px 5px;
+ border-top: 1px dashed #aaaaaa;
}
-
.highlight {
- background-color: #FFF8C6;
+ background-color: #FFF8C6;
}
-
.nomargin {
- margin: 0;
+ margin: 0;
}
-
.margin-bottom {
- margin-bottom: 10px;
+ margin-bottom: 10px;
}
-
.margin-top {
- margin-top: 10px;
+ margin-top: 10px;
}
-
.inline-block {
- display: inline-block;
+ display: inline-block;
}
-
.action-status {
- margin: 0;
- border: none;
- text-align: center;
- line-height: 10px;
- font-size: 12px;
- padding: 0;
+ margin: 0;
+ border: none;
+ text-align: center;
+ line-height: 10px;
+ font-size: 12px;
+ padding: 0;
}
-
.action-status span {
- padding: 3px 5px 3px 5px;
- background-color: #fff380; /* nice yellow */
- font-weight: normal;
- -moz-border-radius: 5px;
- -khtml-border-radius: 5px;
- -webkit-border-radius: 5px;
-}
+ padding: 3px 5px 3px 5px;
+ background-color: #fff380;
+ /* nice yellow */
+ font-weight: normal;
+ -moz-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
.list-table td {
- vertical-align: top;
+ vertical-align: top;
}
-
/* these need to go */
table.form-as-table .errorlist {
- display: block;
- margin: 0;
- padding: 0 0 0 5px;
- text-align: left;
- font-size: 10px;
- color: darkred;
+ display: block;
+ margin: 0;
+ padding: 0 0 0 5px;
+ text-align: left;
+ font-size: 10px;
+ color: darkred;
}
-
table.form-as-table input {
- display: inline;
- margin-left: 4px;
+ display: inline;
+ margin-left: 4px;
}
-
table.form-as-table th {
- vertical-align: bottom;
- padding-bottom: 4px;
+ vertical-align: bottom;
+ padding-bottom: 4px;
}
-
.form-row-vertical {
- margin-top: 8px;
- display: block;
+ margin-top: 8px;
+ display: block;
}
-
.form-row-vertical label {
- margin-bottom: 3px;
- display: block;
+ margin-bottom: 3px;
+ display: block;
}
-
/* above stuff needs to go */
.text-align-right {
- text-align: center;
+ text-align: center;
}
-
ul.form-horizontal-rows {
- list-style: none;
- margin: 0;
+ list-style: none;
+ margin: 0;
}
-
ul.form-horizontal-rows li {
- position: relative;
- height: 40px;
+ position: relative;
+ height: 40px;
}
-
ul.form-horizontal-rows label {
- display: inline-block;
+ display: inline-block;
}
-
ul.form-horizontal-rows ul.errorlist {
- list-style: none;
- color: darkred;
- font-size: 10px;
- line-height: 10px;
- position: absolute;
- top: 2px;
- left: 180px;
- text-align: left;
- margin: 0;
+ list-style: none;
+ color: darkred;
+ font-size: 10px;
+ line-height: 10px;
+ position: absolute;
+ top: 2px;
+ left: 180px;
+ text-align: left;
+ margin: 0;
}
-
ul.form-horizontal-rows ul.errorlist li {
- height: 10px;
+ height: 10px;
}
-
ul.form-horizontal-rows label {
- position: absolute;
- left: 0px;
- bottom: 6px;
- margin: 0px;
- line-height: 12px;
- font-size: 12px;
+ position: absolute;
+ left: 0px;
+ bottom: 6px;
+ margin: 0px;
+ line-height: 12px;
+ font-size: 12px;
}
-
ul.form-horizontal-rows li input {
- position: absolute;
- bottom: 0px;
- left: 180px;
- margin: 0px;
+ position: absolute;
+ bottom: 0px;
+ left: 180px;
+ margin: 0px;
}
-
.narrow .summary {
- float: left;
+ float: left;
}
-
.user-profile-tool-links {
- font-weight: bold;
- vertical-align: top;
+ font-weight: bold;
+ vertical-align: top;
}
-
-
ul.post-tags {
- margin-left: 7px;
+ margin-left: 7px;
}
ul.post-tags li {
- margin-top: 4px;
- margin-bottom: 3px;
+ margin-top: 4px;
+ margin-bottom: 3px;
}
-
ul.post-retag {
- margin-bottom:0px;
- margin-left:5px;
+ margin-bottom: 0px;
+ margin-left: 5px;
}
-
#question-controls .tags {
- margin: 0 0 3px 0;
+ margin: 0 0 3px 0;
}
-
#tagSelector {
- padding-bottom: 2px;
- margin-bottom: 0;
+ padding-bottom: 2px;
+ margin-bottom: 0;
}
-
#related-tags {
- padding-left: 3px;
+ padding-left: 3px;
}
-
#hideIgnoredTagsControl {
- margin: 5px 0 0 0;
+ margin: 5px 0 0 0;
}
-
#hideIgnoredTagsControl label {
- font-size: 12px;
- color: #666;
+ font-size: 12px;
+ color: #666;
}
-
#hideIgnoredTagsCb {
- margin: 0 2px 0 1px;
+ margin: 0 2px 0 1px;
}
-
#recaptcha_widget_div {
- width: 318px;
- float: left;
- clear: both;
+ width: 318px;
+ float: left;
+ clear: both;
}
-
p.signup_p {
- margin: 20px 0px 0px 0px;
+ margin: 20px 0px 0px 0px;
}
-
.simple-subscribe-options ul {
- list-style: none;
- list-style-position: outside;
- margin: 0;
+ list-style: none;
+ list-style-position: outside;
+ margin: 0;
}
-
/* a workaround to set link colors correctly */
-
.wmd-preview a {
- color:@link;
+ color: #1b79bd;
}
.wmd-preview li {
- margin-bottom:7px;
+ margin-bottom: 7px;
+ font-size: 14px;
}
-
-.karma-summary {
- padding:5px;
- font-size:13px;
-}
-
-.karma-summary h3 {
- text-align: center;
- font-weight: bold;
- padding:5px;
-}
-
-.karma-diagram {
- width:377px;
- height:300px;
- float:left;
- margin-right:10px;
-}
-
-.karma-details {
- float:right;
- width:300px;
- height:250px;
- overflow-y:auto;
- word-wrap:break-word;
-}
-
-.karma-gained {
- font-weight:bold;
- background:#eee;
- width:20px;
- color:green;
- padding:5px;
-}
-
-.karma-lost {
- font-weight:bold;
- background:#eee;
- width:20px;
- color:red;
- padding:5px;
-}
-
.search-result-summary {
- font-weight: bold;
- font-size:18px;
- line-height:22px;
- margin:0px 0px 0px 0px;
- padding:2px 0 0 0;
- float: left;
+ font-weight: bold;
+ font-size: 18px;
+ line-height: 22px;
+ margin: 0px 0px 0px 0px;
+ padding: 2px 0 0 0;
+ float: left;
}
-
-.faq-rep-item {
- text-align:right;
- padding-right:5px;
+.faq-rep-item {
+ text-align: right;
+ padding-right: 5px;
}
-
-
.user-info-table .gravatar {
- margin:0;
+ margin: 0;
}
-
#responses {
- clear:both;
- line-height:18px;
- margin-bottom:15px;
+ clear: both;
+ line-height: 18px;
+ margin-bottom: 15px;
}
-
#responses div.face {
- float:left;
- text-align: center;
- width: 54px;
- padding: 3px;
- overflow:hidden;
+ float: left;
+ text-align: center;
+ width: 54px;
+ padding: 3px;
+ overflow: hidden;
}
-
.response-parent {
- margin-top: 18px;
+ margin-top: 18px;
}
-
-.response-parent strong{
- font-size: 20px;
+.response-parent strong {
+ font-size: 20px;
}
-
.re {
- min-height: 57px;
- clear: both;
- margin-top: 10px;
+ min-height: 57px;
+ clear: both;
+ margin-top: 10px;
}
-
#responses input {
- float:left;
+ float: left;
}
#re_tools {
- margin-bottom:10px;
+ margin-bottom: 10px;
}
#re_sections {
- margin-bottom:6px;
+ margin-bottom: 6px;
}
#re_sections .on {
- font-weight:bold;
+ font-weight: bold;
}
-
.avatar-page ul {
- list-style: none;
+ list-style: none;
}
.avatar-page li {
- display: inline;
+ display: inline;
}
.user-profile-page .avatar p {
- margin-bottom: 0px;
+ margin-bottom: 0px;
}
.user-profile-page .tabBar a#stats {
- margin-left: 0;
+ margin-left: 0;
}
.user-profile-page img.gravatar {
- margin: 2px 0 3px 0;
+ margin: 2px 0 3px 0;
}
.user-profile-page h3 {
- padding: 0;
- margin-top: -3px;
+ padding: 0;
+ margin-top: -3px;
}
.userList {
- font-size: 13px;
+ font-size: 13px;
}
-
img.flag {
- border: 1px solid #eee;
- vertical-align: text-top;
+ border: 1px solid #eee;
+ vertical-align: text-top;
}
-
.main-page img.flag {
- vertical-align: text-bottom;
+ vertical-align: text-bottom;
}
-
-
/* Pretty printing styles. Used with prettify.js. */
-
a.edit {
- padding-left:3px;
- color: #145bff;
+ padding-left: 3px;
+ color: #145bff;
+}
+.str {
+ color: #080;
+}
+.kwd {
+ color: #008;
+}
+.com {
+ color: #800;
+}
+.typ {
+ color: #606;
+}
+.lit {
+ color: #066;
+}
+.pun {
+ color: #660;
+}
+.pln {
+ color: #000;
+}
+.tag {
+ color: #008;
+}
+/* name conflict here */
+.atn {
+ color: #606;
+}
+.atv {
+ color: #080;
+}
+.dec {
+ color: #606;
+}
+pre.prettyprint {
+ padding: 3px;
+ border: 0px solid #888;
}
-
-.str { color: #080; }
-.kwd { color: #008; }
-.com { color: #800; }
-.typ { color: #606; }
-.lit { color: #066; }
-.pun { color: #660; }
-.pln { color: #000; }
-.tag { color: #008; }/* name conflict here */
-.atn { color: #606; }
-.atv { color: #080; }
-.dec { color: #606; }
-pre.prettyprint { padding: 3px; border: 0px solid #888; }
-
@media print {
- .str { color: #060; }
- .kwd { color: #006; font-weight: bold; }
- .com { color: #600; font-style: italic; }
- .typ { color: #404; font-weight: bold; }
- .lit { color: #044; }
- .pun { color: #440; }
- .pln { color: #000; }
- .tag { color: #006; font-weight: bold; }
- .atn { color: #404; }
- .atv { color: #060; }
+ .str {
+ color: #060;
+ }
+ .kwd {
+ color: #006;
+ font-weight: bold;
+ }
+ .com {
+ color: #600;
+ font-style: italic;
+ }
+ .typ {
+ color: #404;
+ font-weight: bold;
+ }
+ .lit {
+ color: #044;
+ }
+ .pun {
+ color: #440;
+ }
+ .pln {
+ color: #000;
+ }
+ .tag {
+ color: #006;
+ font-weight: bold;
+ }
+ .atn {
+ color: #404;
+ }
+ .atv {
+ color: #060;
+ }
}
diff --git a/askbot/skins/default/media/style/style.less b/askbot/skins/default/media/style/style.less
new file mode 100644
index 00000000..543b6157
--- /dev/null
+++ b/askbot/skins/default/media/style/style.less
@@ -0,0 +1,3263 @@
+@import url(jquery.autocomplete.css);
+@import "lib_style.less"; /* Library of predifined less functions styles */
+
+/* ----- General HTML Styles----- */
+
+body {
+ background: #FFF;
+ font-size: 14px;
+ line-height: 150%;
+ margin: 0;
+ padding: 0;
+ color: #000;
+ font-family:@body-font;
+}
+
+div {
+ margin: 0 auto;
+ padding: 0;
+}
+
+h1, h2, h3, h4, h5, h6, ul, li, dl, dt, dd, form, img, p {
+ margin: 0;
+ padding: 0;
+ border: none;
+}
+
+label {
+ vertical-align: middle;
+}
+
+hr {
+ border: none;
+ border-top: 1px dashed #ccccce;
+}
+
+input, select {
+ vertical-align: middle;
+ font-family: Trebuchet MS, "segoe ui", Helvetica, Tahoma, Verdana, MingLiu, PMingLiu, Arial, sans-serif;
+ margin-left:0px;
+}
+
+p {
+ font-size: 14px;
+ line-height: 140%;
+ margin-bottom: 6px;
+}
+
+a {
+ color:@link;
+ text-decoration: none;
+ cursor: pointer;
+}
+
+h2 {
+ font-size: 21px;
+ padding: 3px 0 3px 5px;
+}
+
+h3 {
+ font-size: 19px;
+ padding: 3px 0 3px 5px;
+}
+
+ul {
+ list-style: disc;
+ margin-left: 20px;
+ padding-left: 0px;
+ margin-bottom: 1em;
+}
+
+ol {
+ list-style: decimal;
+ margin-left: 30px;
+ margin-bottom: 1em;
+ padding-left: 0px;
+}
+
+td ul {
+ vertical-align: middle;
+}
+
+li input {
+ margin: 3px 3px 4px 3px;
+}
+
+pre {
+ font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
+ font-size: 100%;
+ margin-bottom: 10px;
+ /*overflow: auto;*/
+ background-color: #F5F5F5;
+ padding-left: 5px;
+ padding-top: 5px;
+ /*width: 671px;*/
+ padding-bottom: 20px ! ie7;
+}
+
+code {
+ font-family: Consolas, Monaco, Liberation Mono, Lucida Console, Monospace;
+ font-size: 100%;
+
+}
+
+blockquote {
+ margin-bottom: 10px;
+ margin-right: 15px;
+ padding: 10px 0px 1px 10px;
+ background-color: #F5F5F5;
+}
+
+/* http://pathfindersoftware.com/2007/09/developers-note-2/ */
+* html .clearfix,
+* html .paginator {
+ height: 1;
+ overflow: visible;
+}
++ html .clearfix,
++ html .paginator {
+ min-height: 1%;
+}
+.clearfix:after,
+.paginator:after {
+ clear: both;
+ content:".";
+ display:block;
+ height: 0;
+ visibility: hidden;
+}
+
+.badges a {
+ color: #763333;
+ text-decoration: underline;
+}
+
+a:hover {
+ text-decoration: underline;
+}
+
+.badge-context-toggle.active {
+ cursor: pointer;
+ text-decoration: underline;
+}
+
+h1 {
+ font-size: 24px;
+ padding: 10px 0 5px 0px;
+}
+
+/* ----- Extra space above for messages ----- */
+
+body.user-messages {
+ margin-top: 2.4em;
+}
+
+/* ----- Custom positions ----- */
+
+.left{float:left}
+.right{float:right}
+.clean{clear:both}
+.center{
+ margin: 0 auto;
+ padding: 0;
+}
+
+
+/* ----- Notify message bar , check blocks/system_messages.html ----- */
+
+.notify {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ z-index: 100;
+ padding: 0;
+ text-align: center;
+ background-color: #f5dd69;
+ border-top:#fff 1px solid;
+ font-family:@main-font;
+
+ p.notification {
+ margin-top: 6px;
+ margin-bottom: 6px;
+ font-size: 16px;
+ color:#424242
+ }
+}
+
+#closeNotify {
+ position: absolute;
+ right: 5px;
+ top: 7px;
+ color: #735005;
+ text-decoration: none;
+ line-height: 18px;
+ .sprites(-6px,-5px);
+ cursor: pointer;
+ width:20px;
+ height:20px;
+}
+
+#closeNotify:hover {
+ .sprites(-26px,-5px);
+}
+
+/* ----- Header, check blocks/header.html ----- */
+
+#header {
+ margin-top: 0px;
+ background: @header-color;
+ font-family:@main-font;
+}
+
+.content-wrapper {/* wrapper positioning class */
+ width: 960px;
+ margin: auto;
+ position:relative;
+}
+
+#logo img{
+ padding: 5px 0px 5px 0px;
+ height: 75px;
+ width: auto;
+ float: left;
+}
+
+#userToolsNav {/* Navigation bar containing login link or user information, check widgets/user_navigation.html*/
+ height: 20px;
+ position:absolute;
+ bottom: 0;
+ right:0px;
+ padding-bottom:5px;
+
+ a {
+ height: 35px;
+ text-align: right;
+ margin-left: 20px;
+ text-decoration: underline;
+ color:#d0e296;
+ font-size:16px;
+ }
+
+ a:first-child {
+ margin-left: 0;
+ }
+
+ a#ab-responses {
+ margin-left: 3px;
+ }
+
+ .user-info,.user-micro-info{
+ color:#b5b593;
+ }
+
+ a img {
+ vertical-align:middle;
+ margin-bottom:2px;
+ }
+
+ .user-info a {
+ margin: 0;
+ text-decoration: none;
+ }
+}
+
+#metaNav {/* Top Navigation bar containing links for tags, people and badges, check widgets/header.html */
+ float:right;
+
+ a {
+ color: #e2e2ae;
+ padding: 0px 0px 0px 35px;
+ height: 25px;
+ line-height: 30px;
+ margin:5px 0px 0px 10px;
+ font-size: 18px;
+ font-weight: 100;
+ text-decoration: none;
+ display: block;
+ float: left;
+ }
+
+ a:hover {
+ text-decoration: underline;
+ }
+
+ a.on {
+ font-weight:bold;
+ color: #FFF;
+ text-decoration: none;
+ }
+
+ a.special {
+ font-size: 18px;
+ color: #B02B2C;
+ font-weight: bold;
+ text-decoration: none;
+ }
+
+ a.special:hover {
+ text-decoration: underline;
+ }
+
+ #navTags{
+ .sprites(-50px,-5px)
+ }
+
+ #navUsers{
+ .sprites(-125px,-5px)
+ }
+
+ #navBadges{
+ .sprites(-210px,-5px)
+ }
+}
+
+#secondaryHeader{ /* Div containing Home button, scope navigation, search form and ask button, check blocks/secondary_header.html */
+ height:55px;
+ background:#e9e9e1;
+ border-bottom:#d3d3c2 1px solid;
+ border-top:#fcfcfc 1px solid;
+ margin-bottom:10px;
+ font-family:@main-font;
+
+ #homeButton{
+ border-right:#afaf9e 1px solid;
+ .sprites(-6px,-36px);
+ height:55px;
+ width:43px;
+ display:block;
+ float:left;
+ }
+
+ #homeButton:hover{
+ .sprites(-6px-45,-36px);
+ }
+
+ #scopeWrapper{
+ width:688px;
+ float:left;
+
+ a{
+ display:block;
+ float:left;
+ }
+
+ .scope-selector{
+ font-size:21px;
+ color:#5a5a4b;
+ height:55px;
+ line-height:55px;
+ margin-left:24px
+ }
+ .on{
+ background:url(../images/scopearrow.png) no-repeat center bottom;
+ }
+
+ .ask-message{
+ font-size:24px;
+ }
+ }
+}
+
+#searchBar { /* Main search form , check widgets/search_bar.html */
+ display:inline-block;
+ background-color: #fff;
+ width:412px;
+ border: 1px solid #c9c9b5;
+ float:right;
+ height:42px;
+ margin:6px 0px 0px 15px;
+
+ .searchInput, .searchInputCancelable,
+ .searchInputAuth, .searchInputCancelableAuth {
+ font-size: 30px;
+ height: 40px;
+ font-weight:300;
+ background:#FFF;
+ border:0px;
+ color:#484848;
+ padding-left:10px;
+ font-family:@body-font;
+ vertical-align: middle;
+ }
+
+ .searchInput, .searchInputCancelable {
+ width: 352px;
+ }
+
+ .searchInputCancelable {
+ width: 317px;
+ }
+
+ .searchInputAuth{
+ width: 340px;
+ }
+
+ .searchInputCancelableAuth {
+ width: 310px; /*FIXME byron */
+ }
+
+ .logoutsearch {
+ width: 337px;
+ }
+
+ .searchBtn {
+ font-size: 10px;
+ color: #666;
+ background-color: #eee;
+ height: 42px;
+ border:#FFF 1px solid;
+ line-height: 22px;
+ text-align: center;
+ float:right;
+ margin: 0px;
+ width:48px;
+ .sprites(-98px,-36px);
+ cursor:pointer;
+ }
+
+ .searchBtn:hover {
+ .sprites(-98px-48,-36px);
+ }
+
+ .cancelSearchBtn {
+ font-size: 30px;
+ color: #ce8888;
+ background:#fff;
+ height: 42px;
+ border:0px;
+ border-left:#deded0 1px solid;
+ text-align: center;
+ width: 35px;
+ cursor:pointer;
+ }
+
+ .cancelSearchBtn:hover {
+ color: #d84040;
+ }
+}
+
+#askButton{ /* check blocks/secondary_header.html and widgets/ask_button.html*/
+ background: url(../images/bigbutton.png) repeat-x bottom;
+ line-height:44px;
+ text-align:center;
+ width:200px;
+ height:42px;
+ font-size:23px;
+ color:@button-label;
+ margin-top:7px;
+ float:right;
+ text-transform:uppercase;
+ .rounded-corners(5px);
+ .box-shadow(1px, 1px, 2px, #636363)
+}
+
+#askButton:hover{
+ text-decoration:none;
+ background: url(../images/bigbutton.png) repeat-x top;
+ .text-shadow(0px, 1px, 0px, #c6d9dd)
+}
+
+/* ----- Content layout, check two_column_body.html or one_column_body.html ----- */
+
+#ContentLeft {
+ width: 730px;
+ float: left;
+ position: relative;
+ padding-bottom:10px;
+}
+
+#ContentRight {
+ width: 200px;
+ float: right;
+ padding: 0 0px 10px 0px;
+}
+
+#ContentFull {
+ float: left;
+ width: 960px;
+}
+
+/* ----- Sidebar Widgets Box, check main_page/sidebar.html or question/sidebar.html ----- */
+
+.box {
+ background: #fff;
+ padding: 4px 0px 10px 0px;
+ width:200px;
+
+ p {
+ margin-bottom: 4px;
+ }
+
+ p.info-box-follow-up-links {
+ text-align: right;
+ margin: 0;
+ }
+
+ h2 {
+ padding-left: 0;
+ background:#eceeeb;
+ height:30px;
+ line-height:30px;
+ text-align:right;
+ font-size:18px !important;
+ font-weight:normal;
+ color:#656565;
+ padding-right:10px;
+ margin-bottom:10px;
+ font-family:@main-font;
+ }
+ h3{
+ color:#4a757f;
+ font-size:18px;
+ text-align:left;
+ font-weight:normal;
+ font-family:@main-font;
+ }
+ .contributorback{
+ background: #eceeeb url(../images/contributorsback.png) no-repeat center left;
+ }
+
+ label {
+ color: @info-text;
+ font-size:15px;
+ display: block;
+ float: right;
+ width: 177px;
+ font-family:@main-font;
+ }
+
+ ul {
+ margin-left: 22px;
+ }
+
+ li {
+ list-style-type: disc;
+ font-size: 13px;
+ line-height: 20px;
+ margin-bottom: 10px;
+ color:@info-text;
+ }
+ ul.tags {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ line-height: 170%;
+ display: block;
+ }
+ #displayTagFilterControl p label{
+ color:@info-text;
+ font-size:15px;
+ }
+
+ .inputs{
+ #interestingTagInput, #ignoredTagInput{
+ width:158px;
+ border:#c9c9b5 1px solid;
+ height:25px;
+ }
+ #interestingTagAdd, #ignoredTagAdd{
+ background:url(../images/small-button-blue.png) repeat-x top;
+ border:0;
+ color:@button-label;
+ font-weight:bold;
+ font-size:12px;
+ width:30px;
+ height:27px;
+ margin-top:-2px;
+ cursor:pointer;
+ .rounded-corners(4px);
+ .text-shadow(0px,1px,0px,#E6F6FA);
+ .box-shadow(1px, 1px, 2px, #808080);
+
+
+ }
+ #interestingTagAdd:hover, #ignoredTagAdd:hover{
+ background:url(../images/small-button-blue.png) repeat-x bottom;
+ }
+ }
+
+ img.gravatar {
+ margin:1px;
+ }
+
+/* widgets for question template */
+
+ a.followed, a.follow{
+ background: url(../images/medium-button.png) top repeat-x;
+ height:34px;
+ line-height:34px;
+ text-align:center;
+ border:0;
+ font-family:@main-font;
+ color:@button-label;
+ font-weight:normal;
+ font-size:21px;
+ margin-top:3px;
+ display:block;
+ width:120px;
+ text-decoration:none;
+ .rounded-corners(4px);
+ .box-shadow(1px, 1px, 2px, #636363);
+ .center;
+ }
+
+ a.followed:hover, a.follow:hover{
+ text-decoration:none;
+ background: url(../images/medium-button.png) bottom repeat-x;
+ .text-shadow(0px, 1px, 0px, #c6d9dd);
+ }
+
+ a.followed div.unfollow{
+ display:none;
+ }
+
+ a.followed:hover div{
+ display:none;
+ }
+ a.followed:hover div.unfollow{
+ display:inline;
+ color:#a05736;
+ }
+
+ .favorite-number {
+ padding: 5px 0 0 5px;
+ font-size: 100%;
+ font-family: Arial;
+ font-weight: bold;
+ color: #777;
+ text-align:center;
+ }
+
+ /* notify by email box */
+ .notify-sidebar #question-subscribe-sidebar {
+ margin: 7px 0 0 3px;
+ }
+}
+
+.statsWidget p{
+ color:@info-text;
+ font-size:16px;
+ border-bottom:#cccccc 1px solid;
+ font-size:13px;
+
+ strong{
+ float:right;
+ padding-right:10px;
+ }
+}
+.questions-related {
+ word-wrap: break-word;
+
+ p {
+ line-height: 20px;
+ padding: 4px 0px 4px 0px;
+ font-size: 16px;
+ font-weight:normal;
+ border-bottom:#cccccc 1px solid;
+ }
+ a{
+ font-size:13px;
+ }
+}
+/* tips and markdown help are widgets for ask template */
+
+#tips{
+ li{
+ color:@info-text;
+ font-size:13px;
+ list-style-image: url(../images/tips.png);
+ }
+ a{
+ font-size:16px;
+ }
+}
+
+#markdownHelp{
+ li{
+ color:@info-text;
+ font-size:13px;
+ }
+ a{
+ font-size:16px;
+ }
+}
+
+
+/* ----- Sorting top Tab, check main_page/tab_bar.html ------*/
+
+.tabBar {
+ background-color: #eff5f6;
+ height: 30px;
+ margin-bottom: 3px;
+ margin-top: 3px;
+ float:right;
+ font-family:@sort-font;
+ font-size:16px;
+ .rounded-corners(5px);
+}
+
+.tabBar h2 {
+ float: left;
+}
+
+.tabsA, .tabsC {
+ float: right;
+ position: relative;
+ display: block;
+ height: 20px;
+}
+
+/* tabsA - used for sorting */
+.tabsA { float: right; }
+.tabsC { float: left; }
+
+.tabsA a, .tabsC a{
+
+ border-left: 1px solid #d0e1e4;
+ color: @section-title;
+ display: block;
+ float: left;
+ height: 20px;
+ line-height: 20px;
+ padding:4px 7px 4px 7px;
+ text-decoration: none;
+}
+
+.tabsA a.on, .tabsC a.on, .tabsA a:hover, .tabsC a:hover {
+ color: @button-label;
+}
+
+.tabsA a.rev.on, tabsA a.rev.on:hover {
+}
+
+.tabsA .label, .tabsC .label {
+ float: left;
+ color: #646464;
+ margin-top:4px;
+ margin-right:5px;
+}
+
+.tabsB a {
+ background: #eee;
+ border: 1px solid #eee;
+ color: #777;
+ display: block;
+ float: left;
+ height: 22px;
+ line-height: 28px;
+ margin: 5px 0px 0 4px;
+ padding: 0 11px 0 11px;
+ text-decoration: none;
+}
+
+.rss {
+ float: right;
+ font-size: 16px;
+ color: #f57900;
+ margin: 5px 0px 3px 7px;
+ width:52px;
+ padding-left: 16px;
+ padding-top:3px;
+ background:#fff url(../images/feed-icon-small.png) no-repeat center right;
+ float:right;
+ font-family:@sort-font;
+ font-size:16px;
+}
+
+.rss:hover {
+ color: #F4A731 !important;
+}
+
+/* ----- Headline, containing number of questions and tags selected, check main_page/headline.html ----- */
+
+#questionCount{
+ font-weight:bold;
+ font-size:23px;
+ color:@section-title;
+ width:200px;
+ float:left;
+ margin-bottom:8px;
+ padding-top:6px;
+ font-family:@main-font;
+}
+
+#listSearchTags{
+ float:left;
+ margin-top:3px;
+ color:@info-text;
+ font-size:16px;
+ font-family:@main-font;
+}
+
+ul#searchTags {
+ margin-left:10px;
+ float:right;
+ padding-top:2px;
+}
+
+.search-tips {
+ font-size:16px;
+ line-height:17px;
+ color: @info-text;
+ margin:5px 0 10px 0;
+ padding:0px;
+ float:left;
+ font-family:@main-font;
+
+ a {
+ text-decoration: underline;
+ color: @link;
+ }
+}
+
+/* ----- Question list , check main_page/content.html and macros/macros.html----- */
+
+#question-list {
+ float: left;
+ position: relative;
+ background-color: #FFF;
+ padding: 0;
+ width: 100%;
+}
+
+.short-summary {
+ position: relative;
+ filter: inherit;
+ padding: 10px;
+ border-bottom: 1px solid #DDDBCE;
+ margin-bottom:1px;
+ overflow: hidden;
+ width: 710px;
+ float: left;
+ background: url(../images/summary-background.png) repeat-x;
+
+ h2 {
+ font-size: 24px;
+ font-weight:normal;
+ line-height: 26px;
+ padding-left: 0;
+ margin-bottom:8px;
+ display:block;
+ font-family:@main-font;
+ }
+
+ a {
+ color:@question-link;
+ }
+
+ .userinfo {
+ text-align:right;
+ line-height:16px;
+ font-family:@body-font;
+ padding-right:4px;
+ }
+
+
+ .userinfo .relativetime, span.anonymous
+ {
+ font-size: 11px;
+ clear:both;
+ font-weight: normal;
+ color: #555;
+ }
+
+ .userinfo a{
+ font-weight:bold;
+ font-size:11px;
+ }
+
+ .counts {
+ float: right;
+ margin: 4px 0 0 5px;
+ font-family:@main-font;
+ }
+
+ .counts .item-count {
+ padding:0px 5px 0px 5px;
+ font-size: 25px;
+ font-family:@main-font;
+ }
+
+ .counts .votes div,
+ .counts .views div,
+ .counts .answers div,
+ .counts .favorites div
+ {
+ margin-top:3px;
+ font-size: 14px;
+ line-height:14px;
+ color: #646464;
+ }
+
+ .tags {
+ margin-top: 0;
+ }
+
+ .votes, .answers, .favorites, .views {
+ text-align: center;
+ margin: 0 3px;
+ padding: 8px 2px 0px 2px;
+ width: 51px;
+ float: right;
+ height:44px;
+ border:#dbdbd4 1px solid;
+ }
+
+ .votes{
+ background: url(../images/vote-background.png) repeat-x;
+ }
+
+ .answers{
+ background:url(../images/answers-background.png) repeat-x;
+ }
+
+ .views {
+ background:url(../images/view-background.png) repeat-x;
+ }
+
+ .no-votes .item-count {
+ color: #b1b5b6;
+ }
+ .some-votes .item-count {
+ color: #4a757f;
+ }
+
+ .no-answers .item-count {
+ color: #b1b5b6;
+ }
+ .some-answers .item-count {
+ color: #eab243;
+ }
+
+ .no-views .item-count {
+ color: #b1b5b6;
+ }
+ .some-views .item-count {
+ color: #d33f00;
+ }
+
+ .accepted .item-count {
+ background:url(../images/accept.png) no-repeat top right;
+ display: block;
+ text-align: center;
+ width: 40px;
+ color: #eab243;
+ }
+
+ .some-favorites .item-count {
+ background:#338333;
+ color:#d0f5a9;
+ }
+ .no-favorites .item-count {
+ background: #eab243;
+ color: yellow;
+ }
+
+}
+
+/* ----- Question list Paginator , check main_content/pager.html and macros/utils_macros.html----- */
+
+.evenMore {
+ font-size: 13px;
+ color:@info-text;
+ padding:15px 0px 10px 0px;
+ clear:both;
+}
+
+.evenMore a {
+ text-decoration: underline;
+ color:@link;
+}
+
+.pager {
+ margin-top: 10px;
+ margin-bottom: 16px;
+}
+
+.pagesize {
+ margin-top: 10px;
+ margin-bottom: 16px;
+ float: right;
+}
+
+.paginator {
+ padding: 5px 0 10px 0;
+ font-size:13px;
+
+ .prev a, .prev a:visited,
+ .next a, .next a:visited {
+ background-color: #fff;
+ color: #777;
+ padding: 2px 4px 3px 4px;
+ }
+ a{
+ color:@section-title;
+ }
+ .prev {
+ margin-right: .5em;
+ }
+
+ .next {
+ margin-left: .5em;
+ }
+
+ .page a, .page a:visited, .curr {
+ padding: .25em;
+ background-color: #fff;
+ margin: 0em .25em;
+ color: #ff;
+ }
+
+ .curr {
+ background-color: #8ebcc7;
+ color: #fff;
+ font-weight: bold;
+ }
+ .next a, .prev a{
+ color:@section-title
+ }
+ .page a:hover,
+ .curr a:hover,
+ .prev a:hover,
+ .next a:hover {
+ color: #8C8C8C;
+ background-color: #E1E1E1;
+ text-decoration: none;
+ }
+
+ .text {
+ color: #777;
+ padding: .3em;
+ }
+
+ .paginator-container-left {
+ padding: 5px 0 10px 0;
+ }
+
+}
+
+/* ----- Tags Styles ----- */
+
+/* tag formatting is also copy-pasted in template
+ because it must be the same in the emails
+ askbot/models/__init__.py:format_instant_notification_email()
+*/
+
+/* tag cloud */
+
+.tag-size-1 {
+ font-size:12px;
+}
+.tag-size-2 {
+ font-size:13px;
+}
+.tag-size-3 {
+ font-size:14px;
+}
+.tag-size-4 {
+ font-size:15px;
+}
+.tag-size-5 {
+ font-size:16px;
+}
+.tag-size-6 {
+ font-size:17px;
+}
+.tag-size-7 {
+ font-size:18px;
+}
+.tag-size-8 {
+ font-size:19px;
+}
+.tag-size-9 {
+ font-size:20px;
+}
+.tag-size-10 {
+ font-size:21px;
+}
+
+ul.tags,
+ul.tags.marked-tags,
+ul#related-tags {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ line-height: 170%;
+ display: block;
+}
+
+ul.tags li {
+ float:left;
+ display: block;
+ margin: 0 5px 0 0;
+ padding: 0;
+ height:20px;
+}
+
+.wildcard-tags {
+ clear: both;
+}
+
+ul.tags.marked-tags li,
+.wildcard-tags ul.tags li {
+ margin-bottom: 5px;
+}
+
+#tagSelector div.inputs {
+ clear: both;
+ float: none;
+ margin-bottom:10px;
+}
+
+.tags-page ul.tags li,
+ul#ab-user-tags li {
+ width: 160px;
+ margin:5px;
+}
+
+ul#related-tags li {
+ margin: 0 5px 5px 0;
+ float: left;
+ clear: left;
+}
+
+/* .tag-left and .tag-right are for the sliding doors decoration of tags */
+
+.tag-left {
+ background: url(../images/tag-right.png) no-repeat right center;
+ border: none;
+ cursor: pointer;
+ display: block;
+ float: left;
+ height: 20px;
+ margin: 0 5px 0 0;
+ padding: 0;
+}
+
+.tag-right {
+ background:url(../images/tag-left.png) no-repeat left center;
+ border: none;
+ display: block;
+ float: left;
+ height: 20px;
+ line-height: 20px;
+ font-weight: normal;
+ font-size: 11px;
+ padding: 0px 10px 0px 15px;
+ text-decoration: none;
+ text-align: center;
+ white-space: nowrap;
+ vertical-align: middle;
+ font-family:@body-font;
+ color:#717179;
+}
+.deletable-tag {
+ margin-right: 3px;
+ white-space: nowrap;
+}
+
+.deletable-tag .tag-right {
+ padding-right: 0px;
+ float: left;
+}
+.deletable-tag.tag-left {
+ padding-right: 0px;
+}
+
+.tags a.tag-right,
+.tags span.tag-right {
+ color: #585858;
+ text-decoration: none;
+
+}
+.tags a:hover{
+ color: #1A1A1A;
+}
+
+.users-page h1, .tags-page h1 {
+ float: left;
+}
+
+.main-page h1 {
+ margin-right: 5px;
+}
+
+span.delete-icon {
+ padding-left: 13px;
+ vertical-align: bottom;
+ background: url(../images/close-small-dark.png) bottom no-repeat;
+ cursor: default;
+}
+span.delete-icon:hover {
+ background: url(../images/close-small-dark.png) top no-repeat;
+}
+
+.tags span.delete-icon {
+ float: left;
+ height: 20px;
+ width:8px;
+ margin: 0px 0 0 10px;
+ display: block;
+}
+
+.tag-number {
+ font-weight: normal;
+ float: left;
+ font-size:16px;
+ color:#5d5d5d;
+}
+
+.badges .tag-number {
+ float: none;
+ display: inline;
+ padding-right: 15px;
+}
+
+/* ----- Ask and Edit Question Form template----- */
+
+.section-title{
+ color:@section-title;
+ font-family:@main-font;
+ font-weight:bold;
+ font-size:24px;
+}
+
+.ask-body {
+ padding-right: 10px;
+}
+
+#fmask{
+ margin-bottom:30px;
+ width:100%;
+}
+
+#askFormBar {
+ display:inline-block;
+ padding: 4px 7px 5px 0px;
+ margin-top:0px;
+
+ p{
+ margin:0 0 5px 0;
+ font-size:14px;
+ color:@info-text-dark;
+ line-height:1.4;
+ }
+ .questionTitleInput {
+ font-size: 24px;
+ line-height: 24px;
+ height: 36px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border:#cce6ec 3px solid;
+ width:725px;
+ }
+}
+
+.ask-page, .edit-question-page{
+
+ div#question-list {
+ float: none;
+ border-bottom:#f0f0ec 1px solid;
+ float:left;
+ margin-bottom:10px;
+ a{
+ line-height:30px;
+ }
+
+ }
+
+ div#question-list h2 {
+ font-size: 13px;
+ padding-bottom: 0;
+ color:@link;
+ border-top:#f0f0ec 1px solid;
+ border-left:#f0f0ec 1px solid;
+ height:30px;
+ line-height:30px;
+ font-weight:normal;
+ }
+
+ div#question-list span {
+ width:28px;
+ height:26px;
+ line-height:26px;
+ text-align:center;
+ margin-right: 10px;
+ float:left;
+ display:block;
+ color:#fff;
+ background: #b8d0d5;
+ .rounded-corners(3px);
+ }
+ label{
+ color:@info-text-dark;
+ font-size:13px;
+ }
+
+ #id_tags{
+ border:#cce6ec 3px solid;
+ height:25px;
+ padding-left:5px;
+ width:395px;
+ font-size:14px;
+ }
+}
+
+.title-desc {
+ color: @info-text;
+ font-size: 13px;
+}
+
+#fmanswer input.submit,
+.ask-page input.submit,
+.edit-question-page input.submit {
+ float: left;
+ background: url(../images/medium-button.png) top repeat-x;
+ height:34px;
+ border:0;
+ font-family:@main-font;
+ color:@button-label;
+ font-weight:normal;
+ font-size:21px;
+ margin-top:3px;
+ .rounded-corners(4px);
+ .box-shadow(1px, 1px, 2px, #636363);
+ margin-right:7px;
+}
+
+#fmanswer input.submit:hover,
+.ask-page input.submit:hover,
+.edit-question-page input.submit:hover{
+ text-decoration:none;
+ background: url(../images/medium-button.png) bottom repeat-x;
+ .text-shadow(0px, 1px, 0px, #c6d9dd)
+}
+#editor { /*adjustment for editor preview*/
+ font-size: 100%;
+ min-height: 200px;
+ line-height: 18px;
+ margin:0;
+ border-left:#cce6ec 3px solid;
+ border-bottom:#cce6ec 3px solid;
+ border-right:#cce6ec 3px solid;
+ border-top:0;
+ padding:10px;
+ margin-bottom:10px;
+ width:710px;
+}
+
+#id_title {
+ width: 100%;
+}
+
+.wmd-preview {
+ margin: 3px 0 5px 0;
+ padding: 6px;
+ background-color: #F5F5F5;
+ min-height: 20px;
+ overflow: auto;
+ font-size:13px;
+ font-family:@body-font;
+
+ p{
+ margin-bottom:14px;
+ line-height:1.4;
+ font-size:14px;
+ }
+}
+
+.wmd-preview pre {
+ background-color: #E7F1F8;
+
+}
+
+.wmd-preview blockquote {
+ background-color: #eee;
+}
+
+.wmd-preview IMG {
+ max-width: 600px;
+}
+
+.preview-toggle {
+ width: 100%;
+ color: #b6a475; /*letter-spacing:1px;*/
+ text-align: left;
+}
+
+.preview-toggle span:hover {
+ cursor: pointer;
+}
+
+.after-editor {
+ margin-top: 10px;
+}
+
+.checkbox {
+ margin-left:5px;
+ font-weight:normal;
+ cursor:help
+}
+
+.question-options {
+ margin-top: 1px;
+ color: #666;
+ line-height: 13px;
+ margin-bottom:5px;
+}
+.question-options label {
+ vertical-align: text-bottom;
+}
+
+.edit-content-html {
+ border-top: 1px dotted #D8D2A9;
+ border-bottom: 1px dotted #D8D2A9;
+ margin: 5px 0 5px 0;
+}
+
+.edit-question-page, #fmedit{
+ color:@info-text-dark;
+
+ #id_revision{
+ font-size:14px;
+ margin-top:5px;
+ margin-bottom:5px;
+ }
+ #id_title{
+ font-size: 24px;
+ line-height: 24px;
+ height: 36px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border:#cce6ec 3px solid;
+ width:725px;
+ margin-bottom:10px;
+ }
+ #id_summary{
+ border:#cce6ec 3px solid;
+ height:25px;
+ padding-left:5px;
+ width:395px;
+ font-size:14px;
+ }
+ .title-desc{
+ margin-bottom:10px;
+ }
+}
+
+/* ----- Question template ----- */
+
+.question-page{
+
+ h1{
+ padding-top:0px;
+ font-family:@main-font;
+ }
+
+ h1 a{
+ color:@question-link;
+ font-size:30px;
+ font-weight:normal;
+ line-height:1;
+ }
+
+ p.rss {
+ float:none;
+ clear:both;
+ padding: 3px 0 0 23px;
+ font-size: 15px;
+ width:110px;
+ background-position:center left;
+ margin-left:0px !important;
+ }
+
+ p.rss a {
+ font-family:@main-font;
+ vertical-align: top;
+ }
+
+ .question-content{
+ float:right;
+ width:690px;
+ margin-bottom:10px;
+ }
+
+ #question-table{
+ float:left;
+ border-top:#f0f0f0 1px solid;
+ }
+
+ #question-table,
+ .answer-table {
+ margin: 6px 0 0px 0;
+ border-spacing: 0px;
+ width: 680px;
+ padding-right:3px;
+ }
+
+ .answer-table {
+ margin-top:0px;
+ border-bottom: 1px solid #D4D4D4;
+ float:left;
+ }
+
+ .answer-table td,
+ #question-table td {
+ width:20px;
+ vertical-align:top;
+ }
+ .question-body, .answer-body {
+ overflow: auto;
+ margin-top:10px;
+ font-family:@body-font;
+ color:#4b4b4b;
+
+ p{
+ margin-bottom:14px;
+ line-height:1.4;
+ font-size:14px;
+ padding:0px 5px 5px 0px;
+ }
+
+ a {
+ color:@link;
+ }
+
+ li {
+ margin-bottom:7px;
+ }
+ }
+
+ .question-body IMG, .answer-body IMG {
+ max-width: 600px;
+ }
+
+ .post-update-info-container {
+ float: right;
+ width: 175px;
+ }
+
+ .post-update-info {
+ background: #fff url(../images/background-user-info.png) repeat-x bottom;
+ float: right;
+ font-size: 9px;
+ font-family:@secondary-font;
+ width: 158px;
+ padding:4px;
+ margin:0px 0px 5px 5px;
+ line-height: 14px;
+ .rounded-corners(4px);
+ .box-shadow (0px, 2px,1px,#bfbfbf);
+
+ p {
+ line-height: 13px;
+ font-size: 11px;
+ margin: 0 0 2px 1px;
+ padding: 0;
+ }
+ a{
+ color:#444;
+ }
+ .gravatar {
+ float: left;
+ margin-right: 4px;
+ }
+
+ p.tip {
+ color: #444;
+ line-height: 13px;
+ font-size: 10px;
+ }
+ }
+
+ .post-controls{
+ font-size: 11px;
+ line-height: 12px;
+ min-width: 200px;
+ padding-left: 5px;
+ text-align:right;
+ clear: left;
+ float: right;
+ margin-top:10px;
+
+ a {
+ color: #777;
+ padding: 0px 3px 3px 22px;
+ cursor: pointer;
+ border: none;
+ font-size:12px;
+ font-family:@body-font;
+ text-decoration: none;
+ height:18px;
+ display:block;
+ float:right;
+ line-height:18px;
+ margin-top:-2px;
+ margin-left:4px;
+ }
+
+ a:hover {
+ background-color: #f5f0c9;
+
+ }
+ .sep {
+ color: #ccc;
+ float:right;
+ height:18px;
+ font-size:18px;
+ }
+ }
+ .post-controls, .answer-controls{
+ .question-delete{
+ background: url(../images/delete.png) no-repeat center left;
+ padding-left:16px;
+ }
+ .question-flag{
+ background: url(../images/flag.png) no-repeat center left;
+ }
+ .question-edit{
+ background: url(../images/edit2.png) no-repeat center left;
+ }
+ .question-retag{
+ background: url(../images/retag.png) no-repeat center left;
+ }
+ .question-close{
+ background: url(../images/close.png) no-repeat center left;
+ }
+ .permant-link{
+ background: url(../images/link.png) no-repeat center left;
+ }
+ }
+ .tabBar{
+ width:100%;
+ }
+
+ #questionCount{
+ float:left;
+ font-family:@main-font;
+ line-height:15px;
+ }
+
+ .question-img-upvote, .question-img-downvote,
+ .answer-img-upvote, .answer-img-downvote {
+ width: 25px;
+ height: 20px;
+ cursor:pointer;
+ }
+
+ .question-img-upvote, .answer-img-upvote {
+ background: url(../images/vote-arrow-up-new.png) no-repeat;
+ }
+
+ .question-img-downvote, .answer-img-downvote {
+ background: url(../images/vote-arrow-down-new.png) no-repeat;
+ }
+
+ .question-img-upvote:hover, .question-img-upvote.on,
+ .answer-img-upvote:hover, .answer-img-upvote.on {
+ background: url(../images/vote-arrow-up-on-new.png) no-repeat;
+ }
+
+ .question-img-downvote:hover, .question-img-downvote.on,
+ .answer-img-downvote:hover, .answer-img-downvote.on {
+ background: url(../images/vote-arrow-down-on-new.png) no-repeat;
+ }
+
+ .question-img-favorite:hover {
+ background: url(../images/vote-favorite-on.png)
+ }
+ div.comments {
+ padding: 0;
+ }
+ #comment-title{
+ font-weight:bold;
+ font-size:23px;
+ color:@section-title;
+ width:200px;
+ float:left;
+ font-family:@main-font;
+ }
+ .comments {
+ font-size: 12px;
+ clear: both;
+
+ div.controls {
+ clear: both;
+ float:left;
+ width: 100%;
+ margin: 3px 0 20px 5px;
+ }
+
+ .controls a {
+ color: #988e4c;
+ padding: 0 3px 2px 22px;
+ font-family:@body-font;
+ font-size:13px;
+ background:url(../images/comment.png) no-repeat center left;
+ }
+
+ .controls a:hover {
+ background-color: #f5f0c9;
+ text-decoration: none;
+ }
+
+ .button {
+ color: #988e4c;
+ font-size: 11px;
+ padding: 3px;
+ cursor: pointer;
+ }
+ a {
+ background-color: inherit;
+ color: @link;
+ padding: 0;
+ }
+
+ form.post-comments {
+ margin: 3px 30px 4px 5px;
+ }
+
+ textarea {
+ height: 42px;
+ width:100%;
+ margin: 12px 0 5px 1px;
+ font-family: @body-font;
+ outline: none;
+ overflow:auto;
+ font-size: 12px;
+ line-height: 140%;
+ padding-left:2px;
+ padding-top:4px;
+ border:#cce6ec 3px solid;
+ }
+
+ input {
+ margin-left: 10px;
+ margin-top: 1px;
+ vertical-align: top;
+ width: 100px;
+ }
+ button{
+ background:url(../images/small-button-blue.png) repeat-x top;
+ border:0;
+ color:@button-label;
+ font-size:12px;
+ width:95px;
+ font-weight:bold;
+ height:24px;
+ margin-top:-2px;
+ cursor:pointer;
+ .rounded-corners(4px);
+ .text-shadow(0px,1px,0px,#E6F6FA);
+ .box-shadow(1px, 1px, 2px, #808080);
+ float:left;
+ }
+ button:hover{
+ background: url(../images/small-button-blue.png) bottom repeat-x;
+ .text-shadow(0px, 1px, 0px, #c6d9dd);
+ }
+ .counter {
+ display: inline-block;
+ width: 245px;
+ float:right;
+ color:#b6a475 !important;
+ vertical-align: top;
+ font-family:@body-font;
+ float:right;
+ text-align:right;
+ }
+ .comment {
+ border-bottom: 1px solid #edeeeb;
+ margin: 0;
+ margin-top:8px;
+ padding-bottom:4px;
+ overflow: auto;
+ font-family:@body-font;
+ font-size:11px;
+ min-height: 25px;
+ background:url(../images/comment-background.png) bottom repeat-x;
+ .rounded-corners(5px);
+ }
+ div.comment:hover {
+ background-color: #efefef;
+ }
+ a.author{
+ background-color: inherit;
+ color: @link;
+ padding: 0;
+ }
+
+ a.author:hover {
+ text-decoration: underline;
+ }
+ span.delete-icon{
+ background:url(../images/close-small.png) no-repeat;
+ }
+ span.delete-icon:hover{
+ border:#BC564B 2px solid;
+ .rounded-corners(10px);
+
+ }
+ .content {
+ margin-bottom: 7px;
+ }
+
+ .comment-votes {
+ float: left;
+ width: 37px;
+ line-height: 130%;
+ padding: 6px 5px 6px 3px;
+ }
+
+ .comment-body {
+ line-height: 1.3;
+ margin: 3px 26px 0 46px;
+ padding: 5px 3px;
+ color: #666;
+ font-size:13px;
+ }
+
+ .comment-body p{
+ font-size:13px;
+ line-height:1.3;
+ margin-bottom: 3px;
+ padding: 0;
+ }
+
+ .comment-delete {
+ float: right;
+ width: 14px;
+ line-height: 130%;
+ padding: 8px 6px;
+ }
+
+ .upvote {
+ margin: 0px;
+ padding-right: 17px;
+ padding-top: 2px;
+ text-align: right;
+ height: 20px;
+ font-size: 13px;
+ font-weight: bold;
+ color: #777;
+ }
+
+ .upvote.upvoted {
+ color: #d64000;
+ }
+
+ .upvote.hover {
+ background: url(../images/go-up-grey.png) no-repeat;
+ background-position: right 1px;
+ }
+
+ .upvote:hover {
+ background: url(../images/go-up-orange.png) no-repeat;
+ background-position: right 1px;
+ }
+
+ .help-text{
+ float: right;
+ text-align:right;
+ color: gray;
+ margin-bottom: 0px;
+ margin-top: 0px;
+ line-height: 50%;
+ }
+ }
+ #questionTools {
+ font-size: 22px;
+ margin-top: 11px;
+ text-align: left;
+ }
+
+ .question-status {
+ margin-top: 10px;
+ margin-bottom:15px;
+ padding: 20px;
+ background-color: #fef7cc;
+ text-align: center;
+ border:#e1c04a 1px solid;
+ }
+
+ .question-status h3 {
+ font-size: 20px;
+ color:@info-text;
+ font-weight:normal;
+ }
+
+ .vote-buttons {
+ float: left;
+ text-align: center;
+ padding-top: 2px;
+ margin:3px 10px 0px 3px;
+ }
+
+ .vote-buttons IMG {
+ cursor: pointer;
+ }
+
+ .vote-number {
+ font-family: @main-font;
+ padding: 0px 0 5px 0;
+ font-size: 25px;
+ font-weight: bold;
+ color: #777;
+ }
+
+ .vote-buttons .notify-sidebar {
+ text-align: left;
+ }
+ .vote-buttons .notify-sidebar label {
+ vertical-align: top;
+ }
+
+ .tabBar-answer{
+ margin-bottom:15px;
+ padding-left:7px;
+ width:723px;
+ margin-top:10px;
+ }
+ .answer{
+ .vote-buttons {
+ float:left;
+ }
+ }
+ .accepted-answer {
+ background-color: #f7fecc;
+ border-bottom-color: #9BD59B;
+
+ .vote-buttons {
+ width:27px;
+ margin-right:10px;
+ }
+ }
+
+ .answer .post-update-info a{
+ color:#444444;
+ }
+
+ .accepted-answer .comments {
+ background-color: #f1f6d4;
+ }
+
+ .answered {
+ background: #CCC;
+ color: #999;
+ }
+
+ .answered-accepted {
+ background: #DCDCDC;
+ color: #763333;
+
+ strong {
+ color: #E1E818;
+ }
+ }
+
+ .answered-by-owner {
+ background: #F1F1FF;
+
+ .comments .button {
+ background-color: #E6ECFF;
+ }
+ .comments {
+ background-color: #E6ECFF;
+ }
+ .vote-buttons {
+ margin-right:10px;
+ }
+ }
+
+ .answer-img-accept:hover {
+ background: url(../images/vote-accepted-on.png)
+ }
+ .answer-body a {
+ color:@link;
+ }
+ .answer-body li {
+ margin-bottom:0.7em;
+ }
+
+ #fmanswer{
+ color:@info-text;
+ line-height:1.2;
+ margin-top:10px;
+ p{
+ font-size:13px;
+ line-height:1.3;
+ }
+ h2{
+ font-family:@main-font;
+ color:@section-title;
+ font-size:24px;
+ }
+ label{
+ font-size:13px;
+ }
+ }
+ .message {
+ padding: 5px;
+ margin: 0px 0 10px 0;
+
+ }
+
+}
+
+.facebook-share.icon, .twitter-share.icon, .linkedin-share.icon, .identica-share.icon {
+ background: url(../images/socialsprite.png) no-repeat;
+ display:block;
+ text-indent:-100em;
+ height:25px;
+ width:25px;
+ margin-bottom:3px;
+}
+
+.facebook-share.icon:hover, .twitter-share.icon:hover, .linkedin-share.icon:hover, .identica-share.icon:hover{
+ opacity:0.8;
+ filter: alpha(opacity=80);
+}
+
+.facebook-share.icon {
+ background-position: -26px 0px;
+}
+.identica-share.icon {
+ background-position: -78px 0px;
+}
+.twitter-share.icon {
+ margin-top:10px;
+ background-position: 0px 0px;
+}
+.linkedin-share.icon {
+ background-position: -52px 0px;
+}
+
+/* -----Content pages, Login, About, FAQ, Users----- */
+
+.openid-signin,
+.meta,
+.users-page,
+{
+ font-size:13px;
+ line-height:1.3;
+ color:@info-text-dark;
+ p{
+ font-size:13px;
+ color:@info-text;
+ line-height:1.3;
+ font-family:@body-font;
+ color:@info-text-dark;
+ margin-bottom:12px;
+ }
+ h2{
+ color:@info-text-dark;
+ padding-left:0px;
+ font-size:16px;
+ }
+ #id_email,#id_name{
+ border:#cce6ec 3px solid;
+ height:25px;
+ padding-left:5px;
+ width:395px;
+ font-size:14px;
+ }
+ textarea{
+ border:#cce6ec 3px solid;
+ padding-left:5px;
+ padding-top:5px;
+ width:395px;
+ font-size:14px;
+ }
+ input.submit{
+ background:url(../images/small-button-blue.png) repeat-x top;
+ border:0;
+ color:@button-label;
+ font-weight:bold;
+ font-size:12px;
+ height:24px;
+ margin-top:-2px;
+ cursor:pointer;
+ .rounded-corners(4px);
+ .text-shadow(0px,1px,0px,#E6F6FA);
+ .box-shadow(1px, 1px, 2px, #808080);
+ }
+ input.submit:hover{
+ background:url(../images/small-button-blue.png) repeat-x bottom;
+ text-decoration:none;
+ }
+ .cancel{
+ background:url(../images/small-button-cancel.png) repeat-x top !important;
+ color:#525252 !important;
+ }
+ .cancel:hover{
+ background:url(../images/small-button-cancel.png) repeat-x bottom !important;
+ }
+}
+
+#email-input-fs,#local_login_buttons,#password-fs,#openid-fs{
+ margin-top:10px;
+ #id_email,#id_username,#id_password,input{
+ font-size: 12px;
+ line-height: 20px;
+ height: 20px;
+ margin: 0px;
+ padding: 0px 0 0 5px;
+ border:#cce6ec 3px solid;
+ width:200px;
+ }
+ .submit-b{
+ background:url(../images/small-button-blue.png) repeat-x top;
+ border:0;
+ color:@button-label;
+ font-weight:bold;
+ font-size:12px;
+ height:24px;
+ margin-top:-2px;
+ cursor:pointer;
+ .rounded-corners(4px);
+ .text-shadow(0px,1px,0px,#E6F6FA);
+ .box-shadow(1px, 1px, 2px, #808080)
+ }
+ .submit-b:hover{
+ background:url(../images/small-button-blue.png) repeat-x bottom;
+ }
+}
+.openid-input {
+ background: url(../images/openid.gif) no-repeat;
+ padding-left: 15px;
+ cursor: pointer;
+}
+
+.openid-login-input {
+ background-position: center left;
+ background: url(../images/openid.gif) no-repeat 0% 50%;
+ padding: 5px 5px 5px 15px;
+ cursor: pointer;
+ font-family: Trebuchet MS;
+ font-weight: 300;
+ font-size: 150%;
+ width: 500px;
+}
+
+.openid-login-submit {
+ height: 40px;
+ width: 80px;
+ line-height: 40px;
+ cursor: pointer;
+ border: 1px solid #777;
+ font-weight: bold;
+ font-size: 120%;
+}
+
+/* People page */
+
+.tabBar-user{
+ width:375px;
+}
+
+.user {
+ padding: 5px;
+ line-height: 140%;
+ width: 166px;
+ border:#eee 1px solid;
+ margin-bottom:5px;
+ .rounded-corners(3px);
+ .user-micro-info{
+ color:@info-text-dark;
+ }
+
+}
+
+.user ul {
+ margin: 0;
+ list-style-type: none;
+}
+
+.user .thumb {
+ clear: both;
+ float: left;
+ margin-right: 4px;
+ display: inline;
+}
+
+/* tags page */
+
+.tabBar-tags{
+ width:270px;
+ margin-bottom:15px;
+}
+
+/* badges page */
+
+a.medal {
+ font-size: 17px;
+ line-height: 250%;
+ margin-right:5px;
+ color: #333;
+ text-decoration: none;
+ background: url(../images/medala.gif) no-repeat;
+ border-left: 1px solid #EEE;
+ border-top: 1px solid #EEE;
+ border-bottom: 1px solid #CCC;
+ border-right: 1px solid #CCC;
+ padding: 4px 12px 4px 6px;
+}
+
+a:hover.medal {
+ color: #333;
+ text-decoration: none;
+ background: url(../images/medala_on.gif) no-repeat;
+ border-left: 1px solid #E7E296;
+ border-top: 1px solid #E7E296;
+ border-bottom: 1px solid #D1CA3D;
+ border-right: 1px solid #D1CA3D;
+}
+
+#award-list{
+ .user{
+ float:left;
+ margin:5px;
+ }
+}
+
+/* profile page */
+
+.tabBar-profile{
+ width:100%;
+ margin-bottom:15px;
+ float:left;
+}
+
+.user-profile-page{
+ font-size:13px;
+ color:@info-text-dark;
+
+ p{
+ font-size:13px;
+ line-height:1.3;
+ color:@info-text-dark;
+ }
+ .avatar img{
+ border:#eee 1px solid;
+ padding:5px;
+ }
+ h2{
+ padding:10px 0px 10px 0px;
+ font-family:@main-font;
+ }
+}
+
+.user-details {
+ font-size: 13px;
+ h3{
+ font-size:16px;
+ }
+}
+
+.user-about {
+ background-color: #EEEEEE;
+ height: 200px;
+ line-height: 20px;
+ overflow: auto;
+ padding: 10px;
+ width: 90%;
+ p{font-size:13px;}
+}
+
+.follow-toggle,.submit {
+ border:0 !important;
+ color:@button-label;
+ font-weight:bold;
+ font-size:12px;
+ height:26px;
+ line-height:26px;
+ margin-top:-2px;
+ font-size:15px;
+ cursor:pointer;
+ font-family:@main-font;
+ background:url(../images/small-button-blue.png) repeat-x top;
+ .rounded-corners(4px);
+ .text-shadow(0px,1px,0px,#E6F6FA);
+ .box-shadow(1px, 1px, 2px, #808080)
+}
+
+.follow-toggle:hover, .submit:hover {
+ background:url(../images/small-button-blue.png) repeat-x bottom;
+ text-decoration:none !important;
+}
+
+.follow-toggle .follow{
+ font-color: #000;
+ font-style:normal;
+}
+
+.follow-toggle .unfollow div.unfollow-red{
+ display:none;
+}
+
+.follow-toggle .unfollow:hover div.unfollow-red{
+ display:inline;
+ color:#fff;
+ font-weight:bold;
+ color:#A05736;
+}
+
+.follow-toggle .unfollow:hover div.unfollow-green{
+ display:none;
+}
+
+.count {
+ font-family: @main-font;
+ font-size: 200%;
+ font-weight: 700;
+ color: #777
+}
+
+.scoreNumber {
+ font-family: @main-font;
+ font-size: 35px;
+ font-weight: 800;
+ color: #777;
+ line-height: 40px; /*letter-spacing:0px*/
+ margin-top: 3px;
+}
+
+.vote-count {
+ font-family: Arial;
+ font-size: 160%;
+ font-weight: 700;
+ color: #777;
+}
+
+.answer-summary {
+ display: block;
+ clear: both;
+ padding: 3px;
+}
+
+.answer-votes {
+ background-color: #EEEEEE;
+ color: #555555;
+ float: left;
+ font-family: Arial;
+ font-size: 15px;
+ font-weight: bold;
+ height: 17px;
+ padding: 2px 4px 5px;
+ text-align: center;
+ text-decoration: none;
+ width: 20px;
+ margin-right: 10px;
+ .rounded-corners(4px);
+}
+
+.karma-summary {
+ padding:5px;
+ font-size:13px;
+}
+
+.karma-summary h3 {
+ text-align: center;
+ font-weight: bold;
+ padding:5px;
+}
+
+.karma-diagram {
+ width:477px;
+ height:300px;
+ float:left;
+ margin-right:10px;
+}
+
+.karma-details {
+ float:right;
+ width:450px;
+ height:250px;
+ overflow-y:auto;
+ word-wrap:break-word;
+ p{margin-bottom:10px;}
+}
+
+.karma-gained {
+ font-weight:bold;
+ background:#eee;
+ width:25px;
+ margin-right:5px;
+ color:green;
+ padding:3px;
+ display:block;
+ float:left;
+ text-align:center;
+ .rounded-corners(3px);
+}
+
+.karma-lost {
+ font-weight:bold;
+ background:#eee;
+ width:25px;
+ color:red;
+ padding:3px;
+ display:block;
+ margin-right:5px;
+ float:left;
+ text-align:center;
+ .rounded-corners(3px);
+}
+
+.submit-row{
+ margin-bottom:10px;
+}
+
+/*----- Revision pages ----- */
+
+.revision {
+ margin: 10px 0 10px 0;
+ font-size: 13px;
+ color:@info-text-dark;
+
+ p{
+ font-size:13px;
+ line-height:1.3;
+ color:@info-text-dark;
+ }
+
+ h3{
+ font-family:@main-font;
+ font-size:21px;
+ padding-left:0px;
+ }
+
+ .header {
+ background-color: #F5F5F5;
+ padding: 5px;
+ cursor: pointer;
+ }
+
+ .author {
+ background-color: #e9f3f5;
+ }
+
+ .summary {
+ padding: 5px 0 10px 0;
+ }
+
+ .summary span {
+ background-color:#fde785;
+ padding:6px;
+ .rounded-corners(4px);
+ display: inline;
+ .box-shadow(1px, 1px, 4px, #cfb852);
+ }
+
+ .answerbody {
+ padding: 10px 0 5px 10px;
+ }
+
+ .revision-mark {
+ width: 150px;
+ text-align: left;
+ display: inline-block;
+ font-size: 11px;
+ overflow: hidden;
+
+ .gravatar{
+ float:left;
+ margin-right:4px;
+ padding-top:5px;
+ }
+ }
+
+ .revision-number {
+ font-size: 300%;
+ font-weight: bold;
+ font-family: sans-serif;
+ }
+}
+
+del, del .post-tag {
+ color: #C34719;
+}
+
+ins .post-tag, ins p, ins {
+ background-color: #E6F0A2;
+}
+
+/* ----- Red Popup notification ----- */
+
+.vote-notification {
+ z-index: 1;
+ cursor: pointer;
+ display: none;
+ position: absolute;
+ font-family:@secondary-font;
+ font-size:14px;
+ font-weight:normal;
+ color: white;
+ background-color: #8e0000;
+ text-align: center;
+ padding-bottom:10px;
+ .box-shadow(0px, 2px, 4px, #370000);
+ .rounded-corners(4px);
+
+ h3{
+ background:url(../images/notification.png) repeat-x top;
+ padding:10px 10px 10px 10px;
+ font-size:13px;
+ margin-bottom:5px;
+ border-top:#8e0000 1px solid;
+ color:#fff;
+ font-weight:normal;
+ .rounded-corners-top(4px);
+ }
+ a {
+ color: #fb7321;
+ text-decoration: underline;
+ font-weight:bold;
+ }
+
+}
+
+
+/* ----- Footer links , check blocks/footer.html----- */
+
+#ground {
+ width: 100%;
+ clear: both;
+ border-top: 1px solid #000;
+ padding: 6px 0 0 0;
+ background: @header-color;
+ font-size:16px;
+ font-family:@main-font;
+
+ p {
+ margin-bottom:0;
+ }
+}
+
+.footer-links {
+ color: #EEE;
+ text-align:left;
+ width:500px;
+ float:left;
+ a {
+ color: #e7e8a8;
+ }
+}
+
+.powered-link{
+ width:500px;
+ float:left;
+ text-align:left;
+ a{
+ color:#8ebcc7;
+ }
+}
+
+.copyright{
+ color:#616161;
+ width:450px;
+ float:right;
+ text-align:right;
+
+ a{
+ color:#8ebcc7;
+ }
+ img.license-logo {
+ margin: 6px 0px 20px 10px;
+ float:right;
+ }
+}
+
+
+.notify-me {
+ float: left;
+}
+
+
+span.text-counter {
+ margin-right: 20px;
+}
+
+span.form-error {
+ color: #990000;
+ font-weight: normal;
+ margin-left: 5px;
+}
+
+p.form-item {
+ margin: 0px;
+}
+
+
+
+
+.deleted {
+ background: #F4E7E7 none repeat scroll 0 0;
+}
+
+
+/* openid styles */
+.form-row {
+ line-height: 25px;
+}
+
+table.form-as-table {
+ margin-top: 5px;
+}
+
+table.form-as-table ul {
+ list-style-type: none;
+ display: inline;
+}
+
+table.form-as-table li {
+ display: inline;
+}
+
+table.form-as-table td {
+ text-align: right;
+}
+
+table.form-as-table th {
+ text-align: left;
+ font-weight: normal;
+}
+
+table.ab-subscr-form {
+ width: 45em;
+}
+
+table.ab-tag-filter-form {
+ width: 45em;
+}
+
+.submit-row {
+ line-height: 30px;
+ padding-top: 10px;
+ display: block;
+ clear: both;
+}
+
+.errors {
+ line-height: 20px;
+ color: red;
+}
+
+.error {
+ color: darkred;
+ margin: 0;
+ font-size: 10px;
+}
+
+label.retag-error {
+ color: darkred;
+ padding-left: 5px;
+ font-size: 10px;
+}
+
+.fieldset {
+ border: none;
+ margin-top: 10px;
+ padding: 10px;
+}
+
+
+span.form-error {
+ color: #990000;
+ font-size: 90%;
+ font-weight: normal;
+ margin-left: 5px;
+}
+
+
+/*
+.favorites-count-off {
+ color: #919191;
+ float: left;
+ text-align: center;
+}
+
+.favorites-count {
+ color: #D4A849;
+ float: left;
+ text-align: center;
+}
+*/
+
+/* todo: get rid of this in html */
+.favorites-empty {
+ width: 32px;
+ height: 45px;
+ float: left;
+}
+
+.user-info-table {
+ margin-bottom: 10px;
+ border-spacing: 0;
+}
+
+/* todo: remove this hack? */
+.user-stats-table .narrow {
+ width: 660px;
+}
+
+.narrow .summary h3 {
+ padding: 0px;
+ margin: 0px;
+}
+
+.relativetime {
+ font-weight: bold;
+ text-decoration: none;
+}
+
+.narrow .tags {
+ float: left;
+}
+
+
+
+
+/* todo: make these more semantic */
+.user-action-1 {
+ font-weight: bold;
+ color: #333;
+}
+
+.user-action-2 {
+ font-weight: bold;
+ color: #CCC;
+}
+
+.user-action-3 {
+ color: #333;
+}
+
+.user-action-4 {
+ color: #333;
+}
+
+.user-action-5 {
+ color: darkred;
+}
+
+.user-action-6 {
+ color: darkred;
+}
+
+.user-action-7 {
+ color: #333;
+}
+
+.user-action-8 {
+ padding: 3px;
+ font-weight: bold;
+ background-color: #CCC;
+ color: #763333;
+}
+
+.revision-summary {
+ background-color: #FFFE9B;
+ padding: 2px;
+}
+
+.question-title-link a {
+ font-weight: bold;
+ color: #0077CC;
+}
+
+.answer-title-link a {
+ color: #333;
+}
+
+/* todo: make these more semantic */
+.post-type-1 a {
+ font-weight: bold;
+
+}
+
+.post-type-3 a {
+ font-weight: bold;
+
+}
+
+.post-type-5 a {
+ font-weight: bold;
+}
+
+.post-type-2 a {
+ color: #333;
+}
+
+.post-type-4 a {
+ color: #333;
+}
+
+.post-type-6 a {
+ color: #333;
+}
+
+.post-type-8 a {
+ color: #333;
+}
+
+.hilite {
+ background-color: #ff0;
+}
+
+.hilite1 {
+ background-color: #ff0;
+}
+
+.hilite2 {
+ background-color: #f0f;
+}
+
+.hilite3 {
+ background-color: #0ff;
+}
+
+.gold, .badge1 {
+ color: #FFCC00;
+}
+
+.silver, .badge2 {
+ color: #CCCCCC;
+}
+
+.bronze, .badge3 {
+ color: #CC9933;
+}
+
+.score {
+ font-weight: 800;
+ color: #333;
+}
+
+
+a.comment {
+ background: #EEE;
+ color: #993300;
+ padding: 5px;
+}
+
+a.offensive {
+ color: #999;
+}
+
+.message h1 {
+ padding-top: 0px;
+ font-size: 15px;
+}
+
+.message p {
+ margin-bottom: 0px;
+}
+
+p.space-above {
+ margin-top: 10px;
+}
+
+.warning {
+ color: red;
+}
+
+
+
+button::-moz-focus-inner {
+ padding:0;
+ border:none;
+}
+.submit {
+ cursor: pointer; /*letter-spacing:1px;*/
+ background-color: #D4D0C8;
+ height: 30px;
+ border: 1px solid #777777; /* width:100px; */
+ font-weight: bold;
+ font-size: 120%;
+}
+
+.submit:hover {
+ text-decoration: underline;
+}
+
+.submit.small {
+ margin-right:5px;
+ height:20px;
+ font-weight:normal;
+ font-size:12px;
+ padding:1px 5px;
+}
+.submit.small:hover {
+ text-decoration:none;
+}
+.question-page a.submit {
+ display: -moz-inline-stack;
+ display: inline-block;
+ line-height: 30px;
+ padding: 0 5px;
+ *display: inline;
+}
+
+.noscript {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ width: 100%;
+ z-index: 100;
+ padding: 5px 0;
+ text-align: center;
+ font-family: sans-serif;
+ font-size: 120%;
+ font-weight: Bold;
+ color: #FFFFFF;
+ background-color: #AE0000;
+}
+
+.big {
+ font-size: 14px;
+}
+
+.strong {
+ font-weight: bold;
+}
+
+.orange {/* used in django.po */
+ color: #d64000;
+ font-weight: bold;
+}
+
+.grey {
+ color: #808080;
+}
+
+.about div {
+ padding: 10px 5px 10px 5px;
+ border-top: 1px dashed #aaaaaa;
+}
+
+.highlight {
+ background-color: #FFF8C6;
+}
+
+.nomargin {
+ margin: 0;
+}
+
+.margin-bottom {
+ margin-bottom: 10px;
+}
+
+.margin-top {
+ margin-top: 10px;
+}
+
+.inline-block {
+ display: inline-block;
+}
+
+.action-status {
+ margin: 0;
+ border: none;
+ text-align: center;
+ line-height: 10px;
+ font-size: 12px;
+ padding: 0;
+}
+
+.action-status span {
+ padding: 3px 5px 3px 5px;
+ background-color: #fff380; /* nice yellow */
+ font-weight: normal;
+ -moz-border-radius: 5px;
+ -khtml-border-radius: 5px;
+ -webkit-border-radius: 5px;
+}
+
+.list-table td {
+ vertical-align: top;
+}
+
+/* these need to go */
+table.form-as-table .errorlist {
+ display: block;
+ margin: 0;
+ padding: 0 0 0 5px;
+ text-align: left;
+ font-size: 10px;
+ color: darkred;
+}
+
+table.form-as-table input {
+ display: inline;
+ margin-left: 4px;
+}
+
+table.form-as-table th {
+ vertical-align: bottom;
+ padding-bottom: 4px;
+}
+
+.form-row-vertical {
+ margin-top: 8px;
+ display: block;
+}
+
+.form-row-vertical label {
+ margin-bottom: 3px;
+ display: block;
+}
+
+/* above stuff needs to go */
+.text-align-right {
+ text-align: center;
+}
+
+ul.form-horizontal-rows {
+ list-style: none;
+ margin: 0;
+}
+
+ul.form-horizontal-rows li {
+ position: relative;
+ height: 40px;
+}
+
+ul.form-horizontal-rows label {
+ display: inline-block;
+}
+
+ul.form-horizontal-rows ul.errorlist {
+ list-style: none;
+ color: darkred;
+ font-size: 10px;
+ line-height: 10px;
+ position: absolute;
+ top: 2px;
+ left: 180px;
+ text-align: left;
+ margin: 0;
+}
+
+ul.form-horizontal-rows ul.errorlist li {
+ height: 10px;
+}
+
+ul.form-horizontal-rows label {
+ position: absolute;
+ left: 0px;
+ bottom: 6px;
+ margin: 0px;
+ line-height: 12px;
+ font-size: 12px;
+}
+
+ul.form-horizontal-rows li input {
+ position: absolute;
+ bottom: 0px;
+ left: 180px;
+ margin: 0px;
+}
+
+.narrow .summary {
+ float: left;
+}
+
+.user-profile-tool-links {
+ font-weight: bold;
+ vertical-align: top;
+}
+
+
+ul.post-tags {
+ margin-left: 7px;
+}
+ul.post-tags li {
+ margin-top: 4px;
+ margin-bottom: 3px;
+}
+
+ul.post-retag {
+ margin-bottom:0px;
+ margin-left:5px;
+}
+
+#question-controls .tags {
+ margin: 0 0 3px 0;
+}
+
+#tagSelector {
+ padding-bottom: 2px;
+ margin-bottom: 0;
+}
+
+#related-tags {
+ padding-left: 3px;
+}
+
+#hideIgnoredTagsControl {
+ margin: 5px 0 0 0;
+}
+
+#hideIgnoredTagsControl label {
+ font-size: 12px;
+ color: #666;
+}
+
+#hideIgnoredTagsCb {
+ margin: 0 2px 0 1px;
+}
+
+#recaptcha_widget_div {
+ width: 318px;
+ float: left;
+ clear: both;
+}
+
+p.signup_p {
+ margin: 20px 0px 0px 0px;
+}
+
+.simple-subscribe-options ul {
+ list-style: none;
+ list-style-position: outside;
+ margin: 0;
+}
+
+/* a workaround to set link colors correctly */
+
+.wmd-preview a {
+ color:@link;
+}
+
+.wmd-preview li {
+ margin-bottom:7px;
+ font-size:14px;
+}
+
+.search-result-summary {
+ font-weight: bold;
+ font-size:18px;
+ line-height:22px;
+ margin:0px 0px 0px 0px;
+ padding:2px 0 0 0;
+ float: left;
+}
+
+.faq-rep-item {
+ text-align:right;
+ padding-right:5px;
+}
+
+
+.user-info-table .gravatar {
+ margin:0;
+}
+
+#responses {
+ clear:both;
+ line-height:18px;
+ margin-bottom:15px;
+}
+
+#responses div.face {
+ float:left;
+ text-align: center;
+ width: 54px;
+ padding: 3px;
+ overflow:hidden;
+}
+
+.response-parent {
+ margin-top: 18px;
+}
+
+.response-parent strong{
+ font-size: 20px;
+}
+
+.re {
+ min-height: 57px;
+ clear: both;
+ margin-top: 10px;
+}
+
+#responses input {
+ float:left;
+}
+#re_tools {
+ margin-bottom:10px;
+}
+#re_sections {
+ margin-bottom:6px;
+}
+#re_sections .on {
+ font-weight:bold;
+}
+
+.avatar-page ul {
+ list-style: none;
+}
+.avatar-page li {
+ display: inline;
+}
+.user-profile-page .avatar p {
+ margin-bottom: 0px;
+}
+.user-profile-page .tabBar a#stats {
+ margin-left: 0;
+}
+.user-profile-page img.gravatar {
+ margin: 2px 0 3px 0;
+}
+.user-profile-page h3 {
+ padding: 0;
+ margin-top: -3px;
+}
+.userList {
+ font-size: 13px;
+}
+
+img.flag {
+ border: 1px solid #eee;
+ vertical-align: text-top;
+}
+
+.main-page img.flag {
+ vertical-align: text-bottom;
+}
+
+
+/* Pretty printing styles. Used with prettify.js. */
+
+a.edit {
+ padding-left:3px;
+ color: #145bff;
+}
+
+.str { color: #080; }
+.kwd { color: #008; }
+.com { color: #800; }
+.typ { color: #606; }
+.lit { color: #066; }
+.pun { color: #660; }
+.pln { color: #000; }
+.tag { color: #008; }/* name conflict here */
+.atn { color: #606; }
+.atv { color: #080; }
+.dec { color: #606; }
+pre.prettyprint { padding: 3px; border: 0px solid #888; }
+
+@media print {
+ .str { color: #060; }
+ .kwd { color: #006; font-weight: bold; }
+ .com { color: #600; font-style: italic; }
+ .typ { color: #404; font-weight: bold; }
+ .lit { color: #044; }
+ .pun { color: #440; }
+ .pln { color: #000; }
+ .tag { color: #006; font-weight: bold; }
+ .atn { color: #404; }
+ .atv { color: #060; }
+}
diff --git a/askbot/skins/default/templates/about.html b/askbot/skins/default/templates/about.html
index fce4223e..d5d1b949 100644
--- a/askbot/skins/default/templates/about.html
+++ b/askbot/skins/default/templates/about.html
@@ -2,7 +2,7 @@
<!-- template about.html -->
{% block title %}{% spaceless %}{% trans site_name=settings.APP_SHORT_NAME %}About {{site_name}}{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
-<h1>{% trans site_name=settings.APP_SHORT_NAME %}About {{site_name}}{% endtrans %}</h1>
+<h1 class="section-title">{% trans site_name=settings.APP_SHORT_NAME %}About {{site_name}}{% endtrans %}</h1>
<div class="content">
{{settings.FORUM_ABOUT}}
</div>
diff --git a/askbot/skins/default/templates/answer_edit.html b/askbot/skins/default/templates/answer_edit.html
index 168ba784..bbf3edef 100644
--- a/askbot/skins/default/templates/answer_edit.html
+++ b/askbot/skins/default/templates/answer_edit.html
@@ -6,24 +6,25 @@
<link rel="stylesheet" type="text/css" href="{{"/js/wmd/wmd.css"|media}}" />
{% endblock %}
{% block content %}
-<h1>
+<h1 class="section-title">
{% trans %}Edit answer{% endtrans %} [<a href="{{ answer.question.get_absolute_url() }}#{{ answer.id }}">{% trans %}back{% endtrans %}</a>]
</h1>
<div id="main-body" class="ask-body">
<form id="fmedit" action="{% url edit_answer answer.id %}" method="post" >{% csrf_token %}
- <label for="id_revision" ><strong>{% trans %}revision{% endtrans %}:</strong></label> <br/>
+ <label for="id_revision" >{% trans %}revision{% endtrans %}:</label> <br/>
{% if revision_form.revision.errors %}{{ revision_form.revision.errors.as_ul() }}{% endif %}
<div style="vertical-align:middle">
{{ revision_form.revision }} <input type="submit" style="display:none" id="select_revision" name="select_revision" value="{% trans %}select revision{% endtrans %}">
</div>
{{ macros.edit_post(form) }}
+ {% if settings.WIKI_ON and answer.wiki == False %}
+ {{ macros.checkbox_in_div(form.wiki) }}
+ {% endif %}
<div class="after-editor">
<input type="submit" value="{% trans %}Save edit{% endtrans %}" class="submit" />&nbsp;
<input type="button" value="{% trans %}Cancel{% endtrans %}" class="submit" onclick="history.back(-1);" />
</div>
- {% if settings.WIKI_ON and answer.wiki == False %}
- {{ macros.checkbox_in_div(form.wiki) }}
- {% endif %}
+
</form>
</div>
{% endblock %}
diff --git a/askbot/skins/default/templates/base.html b/askbot/skins/default/templates/base.html
index f84e031d..9e44494b 100644
--- a/askbot/skins/default/templates/base.html
+++ b/askbot/skins/default/templates/base.html
@@ -14,7 +14,7 @@
{% endif %}
</head>
{% endspaceless %}
- <body class="{% block body_class %}{% endblock %}{% if page_class %} {{page_class}}{% endif %}">
+ <body class="{% block body_class %}{% endblock %}{% if user_messages %} user-messages{% endif %}{% if page_class %} {{page_class}}{% endif %}">
{% include "widgets/system_messages.html" %}
{% include "custom_header.html" ignore missing %}
{% include "widgets/header.html" %} {# Logo, user tool navigation and meta navitation #}
diff --git a/askbot/skins/default/templates/faq.html b/askbot/skins/default/templates/faq.html
index be25d2ee..51873a06 100644
--- a/askbot/skins/default/templates/faq.html
+++ b/askbot/skins/default/templates/faq.html
@@ -3,6 +3,7 @@
{% block title %}{% spaceless %}{% trans %}FAQ{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
<div class="content">
+<h1 class="section-title">FAQ</h1>
{{forum_faq}}
</div>
{% endblock %}
diff --git a/askbot/skins/default/templates/feedback.html b/askbot/skins/default/templates/feedback.html
index d5e8b3a7..60ea2fca 100644
--- a/askbot/skins/default/templates/feedback.html
+++ b/askbot/skins/default/templates/feedback.html
@@ -2,7 +2,7 @@
<!-- template feedback.html -->
{% block title %}{% spaceless %}{% trans %}Feedback{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
-<h1>{% trans %}Give us your feedback!{% endtrans %}</h1>
+<h1 class="section-title">{% trans %}Give us your feedback!{% endtrans %}</h1>
<form method="post" action="{% url feedback %}" accept-charset="utf-8">{% csrf_token %}
{% if user.is_authenticated() %}
<p class="message">
@@ -39,7 +39,7 @@
{{form.next}}
<div class="submit-row">
<input type="submit" class="submit" value="{% trans %}Send Feedback{% endtrans %}"/>&nbsp;
- <input type="submit" class="submit" name="cancel" value="{% trans %}Cancel{% endtrans %}"/>
+ <input type="submit" class="submit cancel" name="cancel" value="{% trans %}Cancel{% endtrans %}"/>
</div>
</form>
{% endblock %}
diff --git a/askbot/skins/default/templates/macros.html b/askbot/skins/default/templates/macros.html
index d0a27b5d..680b9d7b 100644
--- a/askbot/skins/default/templates/macros.html
+++ b/askbot/skins/default/templates/macros.html
@@ -92,7 +92,7 @@ poor design of the data or methods on data objects #}
{% else %}
{% trans %}posted{% endtrans %}
{% endif %}
- {% if post.__class__.__name__ in ('QuestionRevision', 'AnswerRevision') %}
+ {% if post.__class__.__name__ == 'PostRevision' %}
<strong>{{post.revised_at|diff_date}}</strong>
{% else %}
<strong>{{post.added_at|diff_date}}</strong>
@@ -106,7 +106,7 @@ poor design of the data or methods on data objects #}
{% set last_edited_at = post.last_edited_at %}
{% set original_author = post.author %}
{% set update_author = post.last_edited_by %}
- {% elif post.__class__.__name__ in ('QuestionRevision', 'AnswerRevision') %}
+ {% elif post.__class__.__name__ == 'PostRevision' %}
{% set last_edited_at = post.revised_at %}
{% set original_author = None %}{# fake value to force display widget in the revision views #}
{% set update_author = post.author %}
diff --git a/askbot/skins/default/templates/main_page/javascript.html b/askbot/skins/default/templates/main_page/javascript.html
index deef318c..e35113dd 100644
--- a/askbot/skins/default/templates/main_page/javascript.html
+++ b/askbot/skins/default/templates/main_page/javascript.html
@@ -34,8 +34,13 @@
askbot['urls']['unmark_tag'] = scriptUrl + '{% url unmark_tag %}';
askbot['urls']['set_tag_filter_strategy'] = '{% url "set_tag_filter_strategy" %}';
askbot['urls']['questions'] = '{% url "questions" %}';
+ {% if settings.ASKBOT_TRANSLATE_URL %}
askbot['urls']['question_url_template'] = scriptUrl + '{% trans %}question/{% endtrans %}{{ "{{QuestionID}}/" }}';
askbot['urls']['user_url_template'] = scriptUrl + '{% trans %}users/{% endtrans %}{{ "{{user_id}}" }}/{{ "{{slug}}" }}/';
+ {% else %}
+ askbot['urls']['question_url_template'] = scriptUrl + 'question/{{ "{{QuestionID}}/" }}';
+ askbot['urls']['user_url_template'] = scriptUrl + 'users/{{ "{{user_id}}" }}/{{ "{{slug}}" }}/';
+ {% endif %}
askbot['messages']['name_of_anonymous_user'] = '{{ name_of_anonymous_user }}';
</script>
<script type='text/javascript' src='{{"/js/editor.js"|media}}'></script>
diff --git a/askbot/skins/default/templates/main_page/nothing_found.html b/askbot/skins/default/templates/main_page/nothing_found.html
index 50f2f340..e6d65ea5 100644
--- a/askbot/skins/default/templates/main_page/nothing_found.html
+++ b/askbot/skins/default/templates/main_page/nothing_found.html
@@ -5,7 +5,7 @@
{% endif %}
{% if scope == "favorite" %}
{% trans %}No questions here. {% endtrans %}
- {% trans %}Please star (bookmark) some questions or follow some users.{% endtrans %}
+ {% trans %}Please follow some questions or follow some users.{% endtrans %}
{% endif %}
</p>
{% if query or search_tags or author_name %}
diff --git a/askbot/skins/default/templates/main_page/tab_bar.html b/askbot/skins/default/templates/main_page/tab_bar.html
index dc4ede35..5ed6e5b5 100644
--- a/askbot/skins/default/templates/main_page/tab_bar.html
+++ b/askbot/skins/default/templates/main_page/tab_bar.html
@@ -1,7 +1,11 @@
{% import "macros.html" as macros %}
{% cache 0 "scope_sort_tabs" search_tags request.user scope sort query context.page context.page_size language_code %}
<a class="rss"
+ {% if feed_url %}
+ href="{{settings.APP_URL}}{{feed_url}}"
+ {% else %}
href="{{settings.APP_URL}}/feeds/rss/"
+ {% endif %}
title="{% trans %}subscribe to the questions feed{% endtrans %}"
>{% trans %}RSS{% endtrans %}
</a>
diff --git a/askbot/skins/default/templates/meta/bottom_scripts.html b/askbot/skins/default/templates/meta/bottom_scripts.html
index 0693a3e4..0df25e7c 100644
--- a/askbot/skins/default/templates/meta/bottom_scripts.html
+++ b/askbot/skins/default/templates/meta/bottom_scripts.html
@@ -37,10 +37,8 @@
src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.3/jquery.min.js"
{% endif %}
></script>
-<script type='text/javascript' src="{{"/js/i18n.js"|media }}"></script>
-<script type='text/javascript' src="{{"/js/jquery.i18n.js"|media }}"></script>
<script type='text/javascript' src="{{"/js/utils.js"|media }}"></script>
-<link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:300,400,700' rel='stylesheet' type='text/css'>
+<script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script>
{% if settings.ENABLE_MATHJAX %}
<script type='text/javascript' src="{{settings.MATHJAX_BASE_URL}}/MathJax.js">
MathJax.Hub.Config({
diff --git a/askbot/skins/default/templates/meta/html_head_javascript.html b/askbot/skins/default/templates/meta/html_head_javascript.html
index 900b1191..f960d11d 100644
--- a/askbot/skins/default/templates/meta/html_head_javascript.html
+++ b/askbot/skins/default/templates/meta/html_head_javascript.html
@@ -5,7 +5,6 @@
askbot['settings'] = {};
askbot['messages'] = {};
</script>
-<script type="text/javascript" src="{% url django.views.i18n.javascript_catalog %}"></script>
{% block forejs %}
{% endblock %}
{# avoid adding javascript here so that pages load faster #}
diff --git a/askbot/skins/default/templates/meta/html_head_stylesheets.html b/askbot/skins/default/templates/meta/html_head_stylesheets.html
index 9d5aebad..14f3c106 100644
--- a/askbot/skins/default/templates/meta/html_head_stylesheets.html
+++ b/askbot/skins/default/templates/meta/html_head_stylesheets.html
@@ -1,5 +1,10 @@
-<link href="{{"/style/style.css"|media }}" rel="stylesheet/less" type="text/css" />
+{% if settings.ASKBOT_CSS_DEVEL == False %}
+<link href="{{"/style/style.css"|media }}" rel="stylesheet" type="text/css" />
+{% else %}
+<link href="{{"/style/style.less"|media }}" rel="stylesheet/less" type="text/css" />
<script type="text/javascript" src="{{"/js/less.min.js"|media}}"></script>
+{% endif %}
+<link href='http://fonts.googleapis.com/css?family=Yanone+Kaffeesatz:300,400,700' rel='stylesheet' type='text/css'>
{{ skin.get_extra_css_link() }}
{% if settings.USE_CUSTOM_CSS %}
<link
@@ -8,8 +13,3 @@
type="text/css"
/>
{% endif %}
-{% if user_messages %}
-<style type="text/css">
- body { margin-top:2.4em; }
-</style>
-{% endif %}
diff --git a/askbot/skins/default/templates/privacy.html b/askbot/skins/default/templates/privacy.html
index 61f4d945..e9b6f58b 100644
--- a/askbot/skins/default/templates/privacy.html
+++ b/askbot/skins/default/templates/privacy.html
@@ -1,8 +1,8 @@
-{% extends "one_column_body.html" %}
+{% extends "two_column_body.html" %}
<!-- privacy.html -->
{% block title %}{% spaceless %}{% trans %}Privacy policy{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
-<h1>{% trans %}Privacy policy{% endtrans %}</h1>
+<h1 class="section-title">{% trans %}Privacy policy{% endtrans %}</h1>
{{settings.FORUM_PRIVACY}}
{% endblock %}
<!-- end privacy.html -->
diff --git a/askbot/skins/default/templates/question/answer_tab_bar.html b/askbot/skins/default/templates/question/answer_tab_bar.html
index 24042b4a..3e39f795 100644
--- a/askbot/skins/default/templates/question/answer_tab_bar.html
+++ b/askbot/skins/default/templates/question/answer_tab_bar.html
@@ -1,11 +1,11 @@
<div class="tabBar tabBar-answer">
- <h1 id="questionCount">
+ <h2 id="questionCount">
{% trans counter=answers|length %}
{{counter}} Answer
{% pluralize %}
{{counter}} Answers
{% endtrans %}
- </h1>
+ </h2>
<div class="tabsA">
<span class="label">
Sort by »
diff --git a/askbot/skins/default/templates/question/javascript.html b/askbot/skins/default/templates/question/javascript.html
index 552155de..c5dd9f37 100644
--- a/askbot/skins/default/templates/question/javascript.html
+++ b/askbot/skins/default/templates/question/javascript.html
@@ -11,9 +11,14 @@
askbot['urls']['editComment'] = '{% url edit_comment %}';
askbot['urls']['deleteComment'] = '{% url delete_comment %}';
askbot['urls']['getComment'] = '{% url get_comment %}';
+ {%if settings.ASKBOT_TRANSLATE_URL %}
askbot['urls']['question_url_template'] = scriptUrl + '{% trans %}question/{% endtrans %}{{ "{{QuestionID}}/{{questionSlug}}" }}';{# yes it needs to be that whacky #}
- askbot['urls']['user_signin'] = '{{ settings.LOGIN_URL }}';
askbot['urls']['vote_url_template'] = scriptUrl + '{% trans %}questions/{% endtrans %}{{ "{{QuestionID}}/" }}{% trans %}vote/{% endtrans %}';
+ {%else%}
+ askbot['urls']['question_url_template'] = scriptUrl + 'question/{{ "{{QuestionID}}/{{questionSlug}}" }}';{# yes it needs to be that whacky #}
+ askbot['urls']['vote_url_template'] = scriptUrl + 'questions/{{ "{{QuestionID}}/" }}vote/';
+ {%endif%}
+ askbot['urls']['user_signin'] = '{{ settings.LOGIN_URL }}';
askbot['urls']['swap_question_with_answer'] = '{% url swap_question_with_answer %}';
askbot['urls']['upvote_comment'] = '{% url upvote_comment %}';
askbot['messages']['addComment'] = '{% trans %}add comment{% endtrans %}';
diff --git a/askbot/skins/default/templates/revisions.html b/askbot/skins/default/templates/revisions.html
index 0c10e6d4..7fb985e2 100644
--- a/askbot/skins/default/templates/revisions.html
+++ b/askbot/skins/default/templates/revisions.html
@@ -3,7 +3,7 @@
<!-- revisions.html -->
{% block title %}{% spaceless %}{% trans %}Revision history{% endtrans %}{% endspaceless %}{% endblock %}
{% block content %}
-<h1>
+<h1 class="section-title">
{% trans %}Revision history{% endtrans %} [<a href="{{ post.get_absolute_url() }}">{% trans %}back{% endtrans %}</a>]
</h1>
<div id="revisions">
diff --git a/askbot/skins/default/templates/user_profile/user.html b/askbot/skins/default/templates/user_profile/user.html
index 6ec4bc3a..1693303e 100644
--- a/askbot/skins/default/templates/user_profile/user.html
+++ b/askbot/skins/default/templates/user_profile/user.html
@@ -1,4 +1,4 @@
-{% extends "two_column_body.html" %}
+{% extends "one_column_body.html" %}
<!-- user.html -->
{% block title %}{% spaceless %}{{ page_title }}{% endspaceless %}{% endblock %}
{% block forestyle%}
diff --git a/askbot/skins/default/templates/user_profile/user_reputation.html b/askbot/skins/default/templates/user_profile/user_reputation.html
index 99b304d2..0deb2b97 100644
--- a/askbot/skins/default/templates/user_profile/user_reputation.html
+++ b/askbot/skins/default/templates/user_profile/user_reputation.html
@@ -8,16 +8,17 @@
<div id="diagram" class="karma-diagram"></div>
<div class="karma-details">
{% if view_user.id == user.id %}
- <h3>{% trans %}Your karma change log.{% endtrans %}</h3>
+ <h2>{% trans %}Your karma change log.{% endtrans %}</h2>
{% else %}
- <h3>{% trans user_name=view_user.username %}{{user_name}}'s karma change log{% endtrans %}</h3>
+ <h2>{% trans user_name=view_user.username %}{{user_name}}'s karma change log{% endtrans %}</h2>
{% endif %}
{% for rep in reputation %}
<p>
<span class="karma-gained">{{ rep.positive }}</span>
<span class="karma-lost">{{ rep.negative }}</span>
{{ rep.get_explanation_snippet() }}
- <span class="small">({{rep.reputed_at|diff_date}})</span>
+ <span class="small">({{rep.reputed_at|diff_date}})</span>
+ <div class="clean"></div>
</p>
{% endfor %}
</div>
diff --git a/askbot/skins/default/templates/widgets/answer_edit_tips.html b/askbot/skins/default/templates/widgets/answer_edit_tips.html
index 23e4df53..9cf0606e 100644
--- a/askbot/skins/default/templates/widgets/answer_edit_tips.html
+++ b/askbot/skins/default/templates/widgets/answer_edit_tips.html
@@ -1,8 +1,8 @@
<!-- template answer_edit_tips.html -->
-<div class="boxC">
+<div class="box">
<h2>{% trans %}answer tips{% endtrans %}</h2>
- <div>
- <ul>
+ <div id="tips">
+ <ul >
<li> <b>{% trans %}please make your answer relevant to this community{% endtrans %}</b>
</li>
<li>
@@ -16,12 +16,14 @@
</li>
</ul>
<p class='info-box-follow-up-links'>
- <a href="{% url faq %}" target="_blank" title="{% trans %}see frequently asked questions{% endtrans %}">faq »</a>
+<!-- will be change to a popup windows
+ <a href="{% url faq %}" target="_blank" title="{% trans %}see frequently asked questions{% endtrans %}">{% trans %}FAQ{% endtrans %} »</a>
+-->
</p>
</div>
</div>
-<div class="boxC">
+<div class="box">
<h2>{% trans %}Markdown tips{% endtrans %}</h2>
<ul>
{% if settings.MARKUP_CODE_FRIENDLY or settings.ENABLE_MATHJAX %}
@@ -57,7 +59,9 @@
</li>
</ul>
<p class='info-box-follow-up-links'>
+<!-- will be change to a popup windows
<a href="http://en.wikipedia.org/wiki/Markdown" target="_blank">{% trans %}learn more about Markdown{% endtrans %} »</a>
+-->
</p>
</div>
<!-- end template answer_edit_tips.html -->
diff --git a/askbot/skins/default/templates/widgets/system_messages.html b/askbot/skins/default/templates/widgets/system_messages.html
index 6b803846..10ba4a84 100644
--- a/askbot/skins/default/templates/widgets/system_messages.html
+++ b/askbot/skins/default/templates/widgets/system_messages.html
@@ -1,7 +1,7 @@
<div class="notify" style="display:none">
{% if user_messages %}
{% for message in user_messages %}
- <p>{{ message }}</p>
+ <p class="notification">{{ message }}</p>
{% endfor %}
{% endif %}
<a id="closeNotify" onclick="notify.close(true)"></a>
diff --git a/askbot/skins/loaders.py b/askbot/skins/loaders.py
index 64d14072..24559512 100644
--- a/askbot/skins/loaders.py
+++ b/askbot/skins/loaders.py
@@ -108,9 +108,11 @@ def get_template(template, request = None):
request variable will be used in the future to set
template according to the user preference or admins preference
- at this point request variable is not used though
+ request variable is used to localize the skin if possible
"""
skin = get_skin(request)
+ if hasattr(request,'LANGUAGE_CODE'):
+ skin.set_language(request.LANGUAGE_CODE)
return skin.get_template(template)
def render_into_skin(template, data, request, mimetype = 'text/html'):
diff --git a/askbot/skins/old/media/js/post.js b/askbot/skins/old/media/js/post.js
index 52772cc0..260d081e 100644
--- a/askbot/skins/old/media/js/post.js
+++ b/askbot/skins/old/media/js/post.js
@@ -1570,7 +1570,7 @@ var socialSharing = function(){
url = url.replace('{TEXT}', TEXT);
var params = SERVICE_DATA[service_name]['params'];
if(!window.open(url, "sharing", params)){
- window.location.href=share_url;
+ window.location.href=url;
}
}
});
diff --git a/askbot/skins/old/templates/authopenid/email_validation.txt b/askbot/skins/old/templates/authopenid/email_validation.txt
index 9c5baa8a..087ce844 100644
--- a/askbot/skins/old/templates/authopenid/email_validation.txt
+++ b/askbot/skins/old/templates/authopenid/email_validation.txt
@@ -6,9 +6,9 @@
{% trans %}Following the link above will help us verify your email address.{% endtrans %}
-{% trans %}If you beleive that this message was sent in mistake -
-no further action is needed. Just ingore this email, we apologize
-for any inconvenience{% endtrans %}
+{% trans %}If you believe that this message was sent in mistake -
+no further action is needed. Just ignore this email, we apologize
+for any inconvenience.{% endtrans %}
{% trans %}Sincerely,
Forum Administrator{% endtrans %}
diff --git a/askbot/skins/old/templates/main_page/headline.html b/askbot/skins/old/templates/main_page/headline.html
index 130a9bd9..71d36fa5 100644
--- a/askbot/skins/old/templates/main_page/headline.html
+++ b/askbot/skins/old/templates/main_page/headline.html
@@ -3,7 +3,11 @@
<div style="clear:both">
<p class="rss">
(<a
+ {% if feed_url %}
+ href="{{settings.APP_URL}}{{feed_url}}"
+ {% else %}
href="{{settings.APP_URL}}/feeds/rss/"
+ {% endif %}
title="{% trans %}subscribe to the questions feed{% endtrans %}"
>{% trans %}rss feed{% endtrans %}</a>)
</p>
diff --git a/askbot/startup_procedures.py b/askbot/startup_procedures.py
index 94d9b852..7ca06e1b 100644
--- a/askbot/startup_procedures.py
+++ b/askbot/startup_procedures.py
@@ -8,6 +8,7 @@ question: why not run these from askbot/__init__.py?
the main function is run_startup_tests
"""
import sys
+import os
from django.db import transaction
from django.conf import settings as django_settings
from django.core.exceptions import ImproperlyConfigured
@@ -34,7 +35,7 @@ def format_as_text_tuple_entries(items):
#
# *validate emails in settings.py
def test_askbot_url():
- """Tests the ASKBOT_URL setting for the
+ """Tests the ASKBOT_URL setting for the
well-formedness and raises the ImproperlyConfigured
exception, if the setting is not good.
"""
@@ -76,6 +77,7 @@ def test_middleware():
'django.middleware.common.CommonMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'askbot.middleware.anon_user.ConnectToSessionMessagesMiddleware',
+ 'askbot.middleware.forum_mode.ForumModeMiddleware',
'askbot.middleware.pagesize.QuestionsPageSizeMiddleware',
'askbot.middleware.cancel.CancelActionMiddleware',
'django.middleware.transaction.TransactionMiddleware',
@@ -91,8 +93,8 @@ def test_middleware():
if missing_middleware_set:
error_message = """\n\nPlease add the following middleware (listed after this message)
-to the MIDDLEWARE_CLASSES variable in your site settings.py file.
-The order the middleware records may be important, please take a look at the example in
+to the MIDDLEWARE_CLASSES variable in your site settings.py file.
+The order the middleware records may be important, please take a look at the example in
https://github.com/ASKBOT/askbot-devel/blob/master/askbot/setup_templates/settings.py:\n\n"""
middleware_text = format_as_text_tuple_entries(missing_middleware_set)
raise ImproperlyConfigured(PREAMBLE + error_message + middleware_text)
@@ -112,19 +114,8 @@ the list of MIDDLEWARE_CLASSES in your settings.py - these are not used any more
middleware_text = format_as_text_tuple_entries(remove_middleware_set)
raise ImproperlyConfigured(PREAMBLE + error_message + middleware_text)
-
-
-def test_i18n():
- """askbot requires use of USE_I18N setting"""
- if getattr(django_settings, 'USE_I18N', False) == False:
- raise ImproperlyConfigured(
- 'Please set USE_I18N = True in settings.py and '
- 'set the LANGUAGE_CODE parameter correctly '
- 'it is very important for askbot.'
- )
-
def try_import(module_name, pypi_package_name):
- """tries importing a module and advises to install
+ """tries importing a module and advises to install
A corresponding Python package in the case import fails"""
try:
load_module(module_name)
@@ -173,17 +164,90 @@ def test_encoding():
)
def test_template_loader():
- """Sends a warning if you have an old style template
+ """Sends a warning if you have an old style template
loader that used to send a warning"""
old_template_loader = 'askbot.skins.loaders.load_template_source'
if old_template_loader in django_settings.TEMPLATE_LOADERS:
raise ImproperlyConfigured(PREAMBLE + \
"\nPlease change: \n"
- "'askbot.skins.loaders.load_template_source', to\n"
+ "'askbot.skins.loaders.load_template_source', to\n"
"'askbot.skins.loaders.filesystem_load_template_source',\n"
"in the TEMPLATE_LOADERS of your settings.py file"
)
+def test_celery():
+ """Tests celery settings
+ todo: we are testing two things here
+ that correct name is used for the setting
+ and that a valid value is chosen
+ """
+ broker_backend = getattr(django_settings, 'BROKER_BACKEND', None)
+ broker_transport = getattr(django_settings, 'BROKER_TRANSPORT', None)
+
+ if broker_backend is None:
+ if broker_transport is None:
+ raise ImproperlyConfigured(PREAMBLE + \
+ "\nPlease add\n"
+ 'BROKER_TRANSPORT = "djkombu.transport.DatabaseTransport"\n'
+ "or other valid value to your settings.py file"
+ )
+ else:
+ #todo: check that broker transport setting is valid
+ return
+
+ if broker_backend != broker_transport:
+ raise ImproperlyConfigured(PREAMBLE + \
+ "\nPlease rename setting BROKER_BACKEND to BROKER_TRANSPORT\n"
+ "in your settings.py file\n"
+ "If you have both in your settings.py - then\n"
+ "delete the BROKER_BACKEND setting and leave the BROKER_TRANSPORT"
+ )
+
+ if hasattr(django_settings, 'BROKER_BACKEND') and not hasattr(django_settings, 'BROKER_TRANSPORT'):
+ raise ImproperlyConfigured(PREAMBLE + \
+ "\nPlease rename setting BROKER_BACKEND to BROKER_TRANSPORT\n"
+ "in your settings.py file"
+ )
+
+class SettingsTester(object):
+ """class to test contents of the settings.py file"""
+
+ def __init__(self, requirements = None):
+ """loads the settings module and inits some variables
+ parameter `requirements` is a dictionary with keys
+ as setting names and values - another dictionary, which
+ has keys (optional, if noted and required otherwise)::
+
+ * required_value (optional)
+ * error_message
+ """
+ self.settings = load_module(os.environ['DJANGO_SETTINGS_MODULE'])
+ self.messages = list()
+ self.requirements = requirements
+
+
+ def test_setting(self, name, value = None, message = None):
+ """if setting does is not present or if the value != required_value,
+ adds an error message
+ """
+ if not hasattr(self.settings, name):
+ self.messages.append(message)
+ elif value and getattr(self.settings, name) != value:
+ self.messages.append(message)
+
+ def run(self):
+ for setting_name in self.requirements:
+ self.test_setting(
+ setting_name,
+ **self.requirements[setting_name]
+ )
+ if len(self.messages) != 0:
+ raise ImproperlyConfigured(
+ PREAMBLE +
+ '\n\nTime to do some maintenance of your settings.py:\n\n* ' +
+ '\n\n* '.join(self.messages)
+ )
+
def run_startup_tests():
"""function that runs
all startup tests, mainly checking settings config so far
@@ -194,9 +258,27 @@ def run_startup_tests():
test_encoding()
test_modules()
test_askbot_url()
- test_i18n()
test_postgres()
test_middleware()
+ test_celery()
+ settings_tester = SettingsTester({
+ 'CACHE_MIDDLEWARE_ANONYMOUS_ONLY': {
+ 'value': True,
+ 'message': "add line CACHE_MIDDLEWARE_ANONYMOUS_ONLY = True"
+ },
+ 'USE_I18N': {
+ 'value': True,
+ 'message': 'Please set USE_I18N = True and\n'
+ 'set the LANGUAGE_CODE parameter correctly'
+ },
+ 'LOGIN_REDIRECT_URL': {
+ 'message': 'add setting LOGIN_REDIRECT_URL - an url\n'
+ 'where you want to send users after they log in\n'
+ 'a reasonable default is\n'
+ 'LOGIN_REDIRECT_URL = ASKBOT_URL'
+ }
+ })
+ settings_tester.run()
@transaction.commit_manually
def run():
diff --git a/askbot/tests/__init__.py b/askbot/tests/__init__.py
index b06c2b06..ca74d696 100644
--- a/askbot/tests/__init__.py
+++ b/askbot/tests/__init__.py
@@ -1,3 +1,4 @@
+from askbot.tests.cache_tests import *
from askbot.tests.email_alert_tests import *
from askbot.tests.on_screen_notification_tests import *
from askbot.tests.page_load_tests import *
@@ -11,3 +12,5 @@ from askbot.tests.form_tests import *
from askbot.tests.follow_tests import *
from askbot.tests.templatefilter_tests import *
from askbot.tests.markup_test import *
+#from askbot.tests.misc_tests import *
+from askbot.tests.post_model_tests import *
diff --git a/askbot/tests/cache_tests.py b/askbot/tests/cache_tests.py
new file mode 100644
index 00000000..5eda8c74
--- /dev/null
+++ b/askbot/tests/cache_tests.py
@@ -0,0 +1,43 @@
+from django.db import connection
+from django.core.urlresolvers import reverse
+from django.conf import settings
+from askbot.tests.utils import AskbotTestCase
+
+class CacheTests(AskbotTestCase):
+ def setUp(self):
+ self.create_user()
+ self.create_user('other_user')
+ self.question = self.post_question()
+ self.post_answer(question = self.question)
+ settings.DEBUG = True # because it's forsed to False
+
+ def visit_question(self):
+ self.client.get(self.question.get_absolute_url(), follow=True)
+
+ def test_anonymous_question_cache(self):
+
+ self.visit_question()
+ counter = len(connection.queries)
+ print 'we have %d queries' % counter
+ self.visit_question()
+
+ #second hit to the same question should give fewer queries
+ self.assertTrue(counter > len(connection.queries))
+ settings.DEBUG = False
+
+ def test_authentificated_no_question_cache(self):
+ url = reverse('question', kwargs={'id': self.question.id})
+
+ password = '123'
+ self.other_user.set_password(password)
+ self.client.login(username=self.other_user.username, password=password)
+
+ self.visit_question()
+ counter = len(connection.queries)
+ self.visit_question()
+
+ #expect the same number of queries both times
+ self.assertEqual(counter, len(connection.queries))
+ settings.DEBUG = False
+
+
diff --git a/askbot/tests/db_api_tests.py b/askbot/tests/db_api_tests.py
index e1268d9f..b54bb2e9 100644
--- a/askbot/tests/db_api_tests.py
+++ b/askbot/tests/db_api_tests.py
@@ -5,7 +5,6 @@ e.g. ``some_user.do_something(...)``
"""
from django.core import exceptions
from django.core.urlresolvers import reverse
-from django.db import connection
from django.test.client import Client
from django.conf import settings
from askbot.tests.utils import AskbotTestCase
@@ -43,37 +42,6 @@ class DBApiTests(AskbotTestCase):
self.assertTrue(post.deleted_by == None)
self.assertTrue(post.deleted_at == None)
- def test_anonymous_question_cache(self):
- question = self.post_question()
- settings.DEBUG = True # because it's forsed to False
- url = reverse('question', kwargs={'id': question.id})
-
- client = Client()
- client.get(url, follow=True)
- counter = len(connection.queries)
- client.get(url, follow=True)
-
- self.assertTrue(counter > len(connection.queries))
- self.assertEqual(3, len(connection.queries)) # session-related only
- settings.DEBUG = False
-
- def test_authentificated_no_question_cache(self):
- question = self.post_question()
- settings.DEBUG = True # because it's forsed to False
- url = reverse('question', kwargs={'id': question.id})
-
- password = '123'
- client = Client()
- self.other_user.set_password(password)
- client.login(username=self.other_user.username, password=password)
-
- client.get(url, follow=True)
- counter = len(connection.queries)
- client.get(url, follow=True)
-
- self.assertEqual(counter, len(connection.queries))
- settings.DEBUG = False
-
def test_flag_question(self):
self.user.set_status('m')
self.user.flag_post(self.question)
diff --git a/askbot/tests/email_alert_tests.py b/askbot/tests/email_alert_tests.py
index dcea2e54..5ff45d6b 100644
--- a/askbot/tests/email_alert_tests.py
+++ b/askbot/tests/email_alert_tests.py
@@ -810,31 +810,84 @@ class TagFollowedInstantWholeForumEmailAlertTests(utils.AskbotTestCase):
self.user1.email in outbox[0].recipients()
)
-class UnansweredReminderTests(utils.AskbotTestCase):
+class EmailReminderTestCase(utils.AskbotTestCase):
+ #subclass must define these (example below)
+ #enable_setting_name = 'ENABLE_UNANSWERED_REMINDERS'
+ #frequency_setting_name = 'UNANSWERED_REMINDER_FREQUENCY'
+ #days_before_setting_name = 'DAYS_BEFORE_SENDING_UNANSWERED_REMINDER'
+ #max_reminder_setting_name = 'MAX_UNANSWERED_REMINDERS'
+
def setUp(self):
self.u1 = self.create_user(username = 'user1')
self.u2 = self.create_user(username = 'user2')
- askbot_settings.update('ENABLE_UNANSWERED_REMINDERS', True)
- askbot_settings.update('MAX_UNANSWERED_REMINDERS', 5)
- askbot_settings.update('UNANSWERED_REMINDER_FREQUENCY', 1)
- askbot_settings.update('DAYS_BEFORE_SENDING_UNANSWERED_REMINDER', 2)
-
- self.wait_days = askbot_settings.DAYS_BEFORE_SENDING_UNANSWERED_REMINDER
- self.recurrence_days = askbot_settings.UNANSWERED_REMINDER_FREQUENCY
- self.max_emails = askbot_settings.MAX_UNANSWERED_REMINDERS
+ askbot_settings.update(self.enable_setting_name, True)
+ askbot_settings.update(self.max_reminder_setting_name, 5)
+ askbot_settings.update(self.frequency_setting_name, 1)
+ askbot_settings.update(self.days_before_setting_name, 2)
+ self.wait_days = getattr(askbot_settings, self.days_before_setting_name)
+ self.recurrence_days = getattr(askbot_settings, self.frequency_setting_name)
+ self.max_emails = getattr(askbot_settings, self.max_reminder_setting_name)
def assert_have_emails(self, email_count = None):
- management.call_command('send_unanswered_question_reminders')
+ management.call_command(self.command_name)
outbox = django.core.mail.outbox
self.assertEqual(len(outbox), email_count)
def do_post(self, timestamp):
- self.post_question(
+ self.question = self.post_question(
user = self.u1,
timestamp = timestamp
)
+
+class AcceptAnswerReminderTests(EmailReminderTestCase):
+ """only two test cases here, because the algorithm here
+ is the same as for unanswered questons,
+ except here we are dealing with the questions that have
+ or do not have an accepted answer
+ """
+ enable_setting_name = 'ENABLE_ACCEPT_ANSWER_REMINDERS'
+ frequency_setting_name = 'ACCEPT_ANSWER_REMINDER_FREQUENCY'
+ days_before_setting_name = 'DAYS_BEFORE_SENDING_ACCEPT_ANSWER_REMINDER'
+ max_reminder_setting_name = 'MAX_ACCEPT_ANSWER_REMINDERS'
+ command_name = 'send_accept_answer_reminders'
+
+ def do_post(self, timestamp):
+ super(AcceptAnswerReminderTests, self).do_post(timestamp)
+ self.answer = self.post_answer(
+ question = self.question,
+ user = self.u2,
+ timestamp = timestamp
+ )
+
+ def test_reminder_positive_wait(self):
+ """a positive test - user must receive a reminder
+ """
+ days_ago = self.wait_days
+ timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600)
+ self.do_post(timestamp)
+ self.assert_have_emails(1)
+
+ def test_reminder_negative_wait(self):
+ """negative test - the answer is accepted already"""
+ days_ago = self.wait_days
+ timestamp = datetime.datetime.now() - datetime.timedelta(days_ago, 3600)
+ self.do_post(timestamp)
+ self.u1.accept_best_answer(
+ answer = self.answer,
+ )
+ self.assert_have_emails(0)
+
+
+class UnansweredReminderTests(EmailReminderTestCase):
+
+ enable_setting_name = 'ENABLE_UNANSWERED_REMINDERS'
+ frequency_setting_name = 'UNANSWERED_REMINDER_FREQUENCY'
+ days_before_setting_name = 'DAYS_BEFORE_SENDING_UNANSWERED_REMINDER'
+ max_reminder_setting_name = 'MAX_UNANSWERED_REMINDERS'
+ command_name = 'send_unanswered_question_reminders'
+
def test_reminder_positive_wait(self):
"""a positive test - user must receive a reminder
"""
diff --git a/askbot/tests/management_command_tests.py b/askbot/tests/management_command_tests.py
index 9eb41cdf..001689c1 100644
--- a/askbot/tests/management_command_tests.py
+++ b/askbot/tests/management_command_tests.py
@@ -26,3 +26,26 @@ class ManagementCommandTests(AskbotTestCase):
#try to log in
user = auth.authenticate(username = username, password = password)
self.assertTrue(user is not None)
+
+ def test_merge_users(self):
+ """Verify a users account can be transfered to another user"""
+ # Create a new user and add some random related objects
+ user_one = self.create_user()
+ question = self.post_question(user=user_one)
+ comment = self.post_comment(user=user_one, parent_post=question)
+ number_of_gold = 50
+ user_one.gold = number_of_gold
+ reputation = 20
+ user_one.reputation = reputation
+ user_one.save()
+ # Create a second user and transfer all objects from 'user_one' to 'user_two'
+ user_two = self.create_user(username='unique')
+ management.call_command('merge_users', user_one.id, user_two.id)
+ # Check that the first user was deleted
+ self.assertEqual(models.User.objects.filter(pk=user_one.id).count(), 0)
+ # Explicitly check that the values assigned to user_one are now user_two's
+ self.assertEqual(user_two.questions.filter(pk=question.id).count(), 1)
+ self.assertEqual(user_two.comments.filter(pk=comment.id).count(), 1)
+ user_two = models.User.objects.get(pk=2)
+ self.assertEqual(user_two.gold, number_of_gold)
+ self.assertEqual(user_two.reputation, reputation)
diff --git a/askbot/tests/misc_tests.py b/askbot/tests/misc_tests.py
new file mode 100644
index 00000000..ddf16360
--- /dev/null
+++ b/askbot/tests/misc_tests.py
@@ -0,0 +1,50 @@
+import datetime
+from django.contrib.contenttypes.models import ContentType
+from django.test.client import Client
+from askbot.tests.utils import AskbotTestCase
+from askbot.conf import settings
+from askbot import models
+from askbot.models.badges import award_badges_signal
+
+from askbot.views.users import get_related_object_type_name
+
+class MiscTests(AskbotTestCase):
+
+ def setUp(self):
+ self.u1 = self.create_user(username='user1')
+ self.u2 = self.create_user(username='user2')
+ self.u3 = self.create_user(username='user3')
+
+ def test_get_related_object_type_name_for_question(self):
+ question = self.post_question(user=self.u1)
+ ct = ContentType.objects.get_for_model(question)
+ self.assertEqual('question', get_related_object_type_name(ct.id, question.id))
+
+ def test_get_related_object_type_name_for_question_revision(self):
+ question = self.post_question(user=self.u1)
+ revision = question.revisions.all()[0]
+ ct = ContentType.objects.get_for_model(revision)
+ self.assertEqual('question', get_related_object_type_name(ct.id, revision.id))
+
+ def test_get_related_object_type_name_for_answer(self):
+ question = self.post_question(user=self.u1)
+ answer = self.post_answer(user=self.u1, question=question)
+ ct = ContentType.objects.get_for_model(answer)
+ self.assertEqual('answer', get_related_object_type_name(ct.id, answer.id))
+
+ def test_get_related_object_type_name_for_answer_revision(self):
+ question = self.post_question(user=self.u1)
+ answer = self.post_answer(user=self.u1, question=question)
+ revision = answer.revisions.all()[0]
+ ct = ContentType.objects.get_for_model(revision)
+ self.assertEqual('answer', get_related_object_type_name(ct.id, revision.id))
+
+ def test_get_related_object_type_name_for_anything_else_1(self):
+ ct = ContentType.objects.get_for_model(self.u2)
+ self.assertIsNone(get_related_object_type_name(ct.id, self.u2.id))
+
+ def test_get_related_object_type_name_for_anything_else_2(self):
+ question = self.post_question(user=self.u1)
+ comment = self.post_comment(user=self.u1, parent_post=question)
+ ct = ContentType.objects.get_for_model(comment)
+ self.assertIsNone(get_related_object_type_name(ct.id, comment.id))
diff --git a/askbot/tests/page_load_tests.py b/askbot/tests/page_load_tests.py
index 9c107112..e0bcce86 100644
--- a/askbot/tests/page_load_tests.py
+++ b/askbot/tests/page_load_tests.py
@@ -1,6 +1,7 @@
from django.test import TestCase
from django.test import signals
from django.template import defaultfilters
+from django.conf import settings
from django.core.urlresolvers import reverse
import coffin
import coffin.template
@@ -8,11 +9,15 @@ from askbot import models
from askbot.utils.slug import slugify
from askbot.deployment import package_utils
from askbot.tests.utils import AskbotTestCase
+from askbot.conf import settings as askbot_settings
+from askbot.tests.utils import skipIf
import sys
+
def patch_jinja2():
from jinja2 import Template
ORIG_JINJA2_RENDERER = Template.render
+
def instrumented_render(template_object, *args, **kwargs):
context = dict(*args, **kwargs)
signals.template_rendered.send(
@@ -25,28 +30,38 @@ def patch_jinja2():
(CMAJOR, CMINOR, CMICRO) = package_utils.get_coffin_version()
if CMAJOR == 0 and CMINOR == 3 and CMICRO < 4:
+ import ipdb; ipdb.set_trace()
patch_jinja2()
-class PageLoadTestCase(TestCase):
+
+class PageLoadTestCase(AskbotTestCase):
def try_url(
self,
- url_name, status_code=200, template=None,
+ url_name, status_code=200, template=None,
kwargs={}, redirect_url=None, follow=False,
- data = {},
- ):
- url = reverse(url_name, kwargs = kwargs)
- url_info = 'getting url %s' % url
+ data={}):
+ url = reverse(url_name, kwargs=kwargs)
+ if status_code == 302:
+ url_info = 'redirecting to LOGIN_URL in closed_mode: %s' % url
+ else:
+ url_info = 'getting url %s' % url
if data:
url_info += '?' + '&'.join(['%s=%s' % (k, v) for k, v in data.iteritems()])
print url_info
+ # if redirect expected, but we wont' follow
+ if status_code == 302 and follow:
+ response = self.client.get(url, data=data)
+ self.assertTrue(settings.LOGIN_URL in response['Location'])
+ return
+
r = self.client.get(url, data=data, follow=follow)
if hasattr(self.client, 'redirect_chain'):
print 'redirect chain: %s' % ','.join(self.client.redirect_chain)
self.assertEqual(r.status_code, status_code)
- if template:
+ if template and status_code != 302:
if isinstance(r.template, coffin.template.Template):
self.assertEqual(r.template.name, template)
elif isinstance(r.template, list):
@@ -66,8 +81,29 @@ class PageLoadTestCase(TestCase):
else:
raise Exception('unexpected error while runnig test')
-class PageLoadTests(PageLoadTestCase):
- fixtures = ['tmp/fixture2.json', ]
+ def setUp(self):
+ self.u1 = self.create_user(username='user1')
+ self.u2 = self.create_user(username='user2')
+ self.u3 = self.create_user(username='user3')
+
+ self.question = self.post_question(user=self.u1)
+
+ self.answer = self.post_answer(user=self.u1, question=self.question)
+ self.answer.id = 38 # one of the tests tries this id
+ self.answer.save()
+
+ self.question2 = self.post_question(user=self.u2)
+ self.question2.id = 2
+ self.question2.save()
+
+ self.question3 = self.post_question(user=self.u3)
+ self.question3.id = 3
+ self.question3.save()
+
+ self.question17 = self.post_question(user=self.u1)
+ self.question17.id = 17
+ self.question17.save()
+
def test_index(self):
#todo: merge this with all reader url tests
@@ -77,168 +113,236 @@ class PageLoadTests(PageLoadTestCase):
self.failUnless(response.redirect_chain[0][0].endswith('/questions/'))
self.assertEquals(response.template.name, 'main_page.html')
- def proto_test_non_user_urls(self):
+ def proto_test_ask_page(self, allow_anonymous, status_code):
+ prev_setting = askbot_settings.ALLOW_POSTING_BEFORE_LOGGING_IN
+ askbot_settings.update('ALLOW_POSTING_BEFORE_LOGGING_IN', allow_anonymous)
+ self.try_url(
+ 'ask',
+ status_code = status_code,
+ template = 'ask.html'
+ )
+ askbot_settings.update('ALLOW_POSTING_BEFORE_LOGGING_IN', prev_setting)
+
+ def test_ask_page_allowed_anonymous(self):
+ self.proto_test_ask_page(True, 200)
+
+ def test_ask_page_disallowed_anonymous(self):
+ self.proto_test_ask_page(False, 302)
+
+ def proto_test_non_user_urls(self, status_code):
"""test all reader views thoroughly
on non-crashiness (no correcteness tests here)
"""
self.try_url('sitemap')
- self.try_url('feeds', kwargs={'url':'rss'})
- self.try_url('about', template='about.html')
- self.try_url('privacy', template='privacy.html')
+ self.try_url(
+ 'feeds',
+ status_code=status_code,
+ kwargs={'url':'rss'})
+ self.try_url(
+ 'about',
+ status_code=status_code,
+ template='about.html')
+ self.try_url(
+ 'privacy',
+ status_code=status_code,
+ template='privacy.html')
self.try_url('logout', template='authopenid/logout.html')
#todo: test different tabs
- self.try_url('tags', template='tags.html')
- self.try_url('tags', data={'sort':'name'}, template='tags.html')
- self.try_url('tags', data={'sort':'used'}, template='tags.html')
- self.try_url('badges', template='badges.html')
self.try_url(
- 'answer_revisions',
+ 'tags',
+ status_code=status_code,
+ template='tags.html')
+ self.try_url(
+ 'tags',
+ status_code=status_code,
+ data={'sort':'name'}, template='tags.html')
+ self.try_url(
+ 'tags',
+ status_code=status_code,
+ data={'sort':'used'}, template='tags.html')
+ self.try_url(
+ 'badges',
+ status_code=status_code,
+ template='badges.html')
+ self.try_url(
+ 'answer_revisions',
+ status_code=status_code,
template='revisions.html',
kwargs={'id':38}
)
#todo: test different sort methods and scopes
self.try_url(
'questions',
+ status_code=status_code,
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'start_over':'true'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'unanswered'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'favorite'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'unanswered', 'sort':'age-desc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'unanswered', 'sort':'age-asc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'unanswered', 'sort':'activity-desc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'scope':'unanswered', 'sort':'activity-asc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'sort':'answers-desc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'sort':'answers-asc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'sort':'votes-desc'},
template='main_page.html'
)
self.try_url(
'questions',
+ status_code=status_code,
data={'sort':'votes-asc'},
template='main_page.html'
)
self.try_url(
'question',
+ status_code=status_code,
kwargs={'id':1},
follow=True,
template='question.html'
)
self.try_url(
'question',
+ status_code=status_code,
kwargs={'id':2},
follow=True,
template='question.html'
)
self.try_url(
'question',
+ status_code=status_code,
kwargs={'id':3},
follow=True,
template='question.html'
)
self.try_url(
'question_revisions',
+ status_code=status_code,
kwargs={'id':17},
template='revisions.html'
)
- self.try_url('users', template='users.html')
+ self.try_url('users',
+ status_code=status_code,
+ template='users.html')
#todo: really odd naming conventions for sort methods
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'reputation'},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'newest'},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'last'},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'user'},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'reputation', 'page':2},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'newest', 'page':2},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'last', 'page':2},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'user', 'page':2},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'reputation', 'page':1},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'newest', 'page':1},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'last', 'page':1},
)
self.try_url(
'users',
+ status_code=status_code,
template='users.html',
data={'sort':'user', 'page':1},
)
@@ -246,72 +350,99 @@ class PageLoadTests(PageLoadTestCase):
'edit_user',
template='authopenid/signin.html',
kwargs={'id':4},
- status_code=200,
+ status_code=status_code,
follow=True,
)
self.try_url(
'faq',
template='faq_static.html',
- status_code=200,
+ status_code=status_code,
)
def test_non_user_urls(self):
- self.proto_test_non_user_urls()
+ self.proto_test_non_user_urls(status_code=200)
+
+ @skipIf('askbot.middleware.forum_mode.ForumModeMiddleware' \
+ not in settings.MIDDLEWARE_CLASSES,
+ 'no ForumModeMiddleware set')
+ def test_non_user_urls_in_closed_forum_mode(self):
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = True
+ self.proto_test_non_user_urls(status_code=302)
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = False
#def test_non_user_urls_logged_in(self):
#user = User.objects.get(id=1)
#somehow login this user
#self.proto_test_non_user_urls()
- def test_user_urls(self):
+ def proto_test_user_urls(self, status_code):
user = models.User.objects.get(id=2)
name_slug = slugify(user.username)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'stats'},
+ status_code=status_code,
+ data={'sort':'stats'},
template='user_profile/user_stats.html'
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'recent'},
+ status_code=status_code,
+ data={'sort':'recent'},
template='user_profile/user_recent.html'
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'inbox'},
+ status_code=status_code,
+ data={'sort':'inbox'},
template='authopenid/signin.html',
follow=True
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'reputation'},
+ status_code=status_code,
+ data={'sort':'reputation'},
template='user_profile/user_reputation.html'
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'votes'},
+ status_code=status_code,
+ data={'sort':'votes'},
template='authopenid/signin.html',
follow = True
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'favorites'},
+ status_code=status_code,
+ data={'sort':'favorites'},
template='user_profile/user_favorites.html'
)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': 2, 'slug': name_slug},
- data={'sort':'email_subscriptions'},
+ status_code=status_code,
+ data={'sort':'email_subscriptions'},
template='authopenid/signin.html',
follow = True
)
+ def test_user_urls(self):
+ self.proto_test_user_urls(status_code=200)
+
+ @skipIf('askbot.middleware.forum_mode.ForumModeMiddleware' \
+ not in settings.MIDDLEWARE_CLASSES,
+ 'no ForumModeMiddleware set')
+ def test_user_urls_in_closed_forum_mode(self):
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = True
+ self.proto_test_user_urls(status_code=302)
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = False
+
+
def test_user_urls_logged_in(self):
user = models.User.objects.get(id=2)
name_slug = slugify(user.username)
@@ -338,12 +469,13 @@ class PageLoadTests(PageLoadTestCase):
)
self.client.login(method = 'force', user_id = asker.id)
self.try_url(
- 'user_profile',
+ 'user_profile',
kwargs={'id': asker.id, 'slug': slugify(asker.username)},
- data={'sort':'inbox'},
+ data={'sort':'inbox'},
template='user_profile/user_inbox.html',
)
+
class AvatarTests(AskbotTestCase):
def test_avatar_for_two_word_user_works(self):
diff --git a/askbot/tests/permission_assertion_tests.py b/askbot/tests/permission_assertion_tests.py
index fc1fbcb7..b83d7827 100644
--- a/askbot/tests/permission_assertion_tests.py
+++ b/askbot/tests/permission_assertion_tests.py
@@ -1,10 +1,15 @@
import datetime
+from django.test.client import Client
+from django.core.urlresolvers import reverse
+from django.conf import settings
from django.test import TestCase
from django.core import exceptions
from askbot.tests import utils
from askbot.conf import settings as askbot_settings
from askbot import models
from askbot.templatetags import extra_filters as template_filters
+from askbot.tests.utils import skipIf
+
class PermissionAssertionTestCase(TestCase):
"""base TestCase class for permission
@@ -1573,3 +1578,43 @@ class UploadPermissionAssertionTests(PermissionAssertionTestCase):
self.user.assert_can_upload_file()
except exceptions.PermissionDenied:
self.fail('high rep user must be able to upload')
+
+class ClosedForumTests(utils.AskbotTestCase):
+ def setUp(self):
+ self.password = '123'
+ self.create_user()
+ self.create_user(username = 'other_user')
+ self.other_user.set_password(self.password)
+ self.other_user.save()
+ self.question = self.post_question()
+ self.test_url = self.question.get_absolute_url()
+ self.redirect_to = settings.LOGIN_URL
+ self.client = Client()
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = True
+
+ @skipIf('askbot.middleware.forum_mode.ForumModeMiddleware' \
+ not in settings.MIDDLEWARE_CLASSES,
+ 'no ForumModeMiddleware set')
+ def test_login_page_accessable(self):
+ # futher see in page_load_tests.py
+ response = self.client.get(reverse('user_signin'))
+ self.assertEquals(response.status_code, 200)
+
+ @skipIf('askbot.middleware.forum_mode.ForumModeMiddleware' \
+ not in settings.MIDDLEWARE_CLASSES,
+ 'no ForumModeMiddleware set')
+ def test_anonymous_access(self):
+ response = self.client.get(self.test_url)
+ self.assertEquals(response.status_code, 302)
+ self.assertTrue(self.redirect_to in response['Location'])
+
+ @skipIf('askbot.middleware.forum_mode.ForumModeMiddleware' \
+ not in settings.MIDDLEWARE_CLASSES,
+ 'no ForumModeMiddleware set')
+ def test_authenticated_access(self):
+ self.client.login(username=self.other_user.username, password=self.password)
+ response = self.client.get(self.test_url)
+ self.assertEquals(response.status_code, 200)
+
+ def tearDown(self):
+ askbot_settings.ASKBOT_CLOSED_FORUM_MODE = False
diff --git a/askbot/tests/post_model_tests.py b/askbot/tests/post_model_tests.py
new file mode 100644
index 00000000..7ea8621a
--- /dev/null
+++ b/askbot/tests/post_model_tests.py
@@ -0,0 +1,55 @@
+import datetime
+
+from django.core.exceptions import ValidationError
+from askbot.tests.utils import AskbotTestCase
+from askbot.models import PostRevision
+
+
+class PostModelTests(AskbotTestCase):
+
+ def setUp(self):
+ self.u1 = self.create_user(username='user1')
+ self.u2 = self.create_user(username='user2')
+ self.u3 = self.create_user(username='user3')
+
+ def test_model_validation(self):
+ with self.assertRaises(NotImplementedError):
+ PostRevision.objects.create(text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision_type=PostRevision.QUESTION_REVISION)
+
+ with self.assertRaisesRegexp(AttributeError, r"'NoneType' object has no attribute 'revisions'"):
+ # cannot set `revision` without a parent
+ PostRevision.objects.create_answer_revision(text='blah', author=self.u1, revised_at=datetime.datetime.now())
+
+ with self.assertRaisesRegexp(ValidationError, r"{'__all__': \[u'One \(and only one\) of question/answer fields has to be set.'\], 'revision_type': \[u'Value 4 is not a valid choice.'\]}"):
+ # revision_type not in (1,2)
+ PostRevision(text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision=1, revision_type=4).save()
+
+ question = self.post_question(user=self.u1)
+
+ rev2 = PostRevision(question=question, text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision=2, revision_type=PostRevision.QUESTION_REVISION)
+ rev2.save()
+ self.assertIsNotNone(rev2.id)
+
+ with self.assertRaisesRegexp(ValidationError, r"{'__all__': \[u'Revision_type doesn`t match values in question/answer fields.', u'Post revision with this Question and Revision already exists.'\]}"):
+ PostRevision(question=question, text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision=2, revision_type=PostRevision.ANSWER_REVISION).save()
+
+ with self.assertRaisesRegexp(ValidationError, r"{'__all__': \[u'Revision_type doesn`t match values in question/answer fields.'\]}"):
+ PostRevision(question=question, text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision=3, revision_type=PostRevision.ANSWER_REVISION).save()
+
+ rev3 = PostRevision.objects.create_question_revision(question=question, text='blah', author=self.u1, revised_at=datetime.datetime.now(), revision_type=123) # revision_type
+ self.assertIsNotNone(rev3.id)
+ self.assertEqual(3, rev3.revision) # By the way: let's test the auto-increase of revision number
+ self.assertEqual(PostRevision.QUESTION_REVISION, rev3.revision_type)
+
+ def test_post_revision_autoincrease(self):
+ question = self.post_question(user=self.u1)
+ self.assertEqual(1, question.revisions.all()[0].revision)
+ self.assertEqual(1, question.revisions.count())
+
+ question.apply_edit(edited_by=self.u1, text="blah2", comment="blahc2")
+ self.assertEqual(2, question.revisions.all()[0].revision)
+ self.assertEqual(2, question.revisions.count())
+
+ question.apply_edit(edited_by=self.u1, text="blah3", comment="blahc3")
+ self.assertEqual(3, question.revisions.all()[0].revision)
+ self.assertEqual(3, question.revisions.count())
diff --git a/askbot/tests/utils.py b/askbot/tests/utils.py
index 03478419..54a2a0ec 100644
--- a/askbot/tests/utils.py
+++ b/askbot/tests/utils.py
@@ -1,6 +1,7 @@
"""utility functions used by Askbot test cases
"""
from django.test import TestCase
+from django.utils.unittest.compatibility import wraps
from askbot import models
def create_user(
@@ -176,3 +177,46 @@ class AskbotTestCase(TestCase):
)
return comment
+
+"""
+Some test decorators, taken from Django-1.3
+"""
+
+
+class SkipTest(Exception):
+ """
+ Raise this exception in a test to skip it.
+
+ Usually you can use TestResult.skip() or one of the skipping decorators
+ instead of raising this directly.
+ """
+
+
+def _id(obj):
+ return obj
+
+
+def skip(reason):
+ """
+ Unconditionally skip a test.
+ """
+ def decorator(test_item):
+ if not (isinstance(test_item, type) and issubclass(test_item, TestCase)):
+ @wraps(test_item)
+ def skip_wrapper(*args, **kwargs):
+ raise SkipTest(reason)
+ test_item = skip_wrapper
+
+ test_item.__unittest_skip__ = True
+ test_item.__unittest_skip_why__ = reason
+ return test_item
+ return decorator
+
+
+def skipIf(condition, reason):
+ """
+ Skip a test if the condition is true.
+ """
+ if condition:
+ return skip(reason)
+ return _id
diff --git a/askbot/urls.py b/askbot/urls.py
index a45a530f..be21217b 100644
--- a/askbot/urls.py
+++ b/askbot/urls.py
@@ -6,7 +6,6 @@ from django.conf import settings
from django.conf.urls.defaults import url, patterns, include
from django.conf.urls.defaults import handler500, handler404
from django.contrib import admin
-from django.utils.translation import ugettext as _
from askbot import views
from askbot.feed import RssLastestQuestionsFeed, RssIndividualQuestionFeed
from askbot.sitemap import QuestionsSitemap
@@ -15,6 +14,11 @@ from askbot.skins.utils import update_media_revision
admin.autodiscover()
update_media_revision()#needs to be run once, so put it here
+if hasattr(settings, "ASKBOT_TRANSLATE_URL") and settings.ASKBOT_TRANSLATE_URL:
+ from django.utils.translation import ugettext as _
+else:
+ _ = lambda s:s
+
feeds = {
'rss': RssLastestQuestionsFeed,
'question':RssIndividualQuestionFeed
diff --git a/askbot/utils/classes.py b/askbot/utils/classes.py
new file mode 100644
index 00000000..4d1e1394
--- /dev/null
+++ b/askbot/utils/classes.py
@@ -0,0 +1,34 @@
+"""various utility classes"""
+import datetime
+
+class ReminderSchedule(object):
+ """class that given the three settings:
+ * days to wait before sending the reminders
+ * frequency of reminders
+ * maximum number of reminders
+ return dates when to start sending the reminders,
+ when to stop, and give friendly names to other
+ variables
+
+ These objects can be reused to all methods that
+ intend to remind of certain events periodically
+ """
+
+ def __init__(self,
+ days_before_starting = None,
+ frequency_days = None,
+ max_reminders = None):
+ """function that calculates values
+ and assigns them to user-friendly variable names
+
+ * ``days_before_starting`` - days to wait before sending any reminders
+ * ``frequency_days`` - days to wait between sending reminders
+ * ``max_reminders`` - maximum number of reminders to send
+ """
+ self.wait_period = datetime.timedelta(days_before_starting)
+ self.end_cutoff_date = datetime.datetime.now() - self.wait_period
+
+ self.recurrence_delay = datetime.timedelta(frequency_days)
+ self.max_reminders = max_reminders
+ self.start_cutoff_date = self.end_cutoff_date - \
+ (self.max_reminders - 1)*self.recurrence_delay
diff --git a/askbot/utils/forms.py b/askbot/utils/forms.py
index 575416bc..c3bccf24 100644
--- a/askbot/utils/forms.py
+++ b/askbot/utils/forms.py
@@ -11,19 +11,19 @@ import logging
import urllib
DEFAULT_NEXT = '/' + getattr(settings, 'ASKBOT_URL')
-def clean_next(next):
- if next is None:
- return DEFAULT_NEXT
+def clean_next(next, default = None):
+ if next is None or not next.startswith('/'):
+ if default:
+ return default
+ else:
+ return DEFAULT_NEXT
next = str_to_unicode(urllib.unquote(next), 'utf-8')
next = next.strip()
- if next.startswith('/'):
- logging.debug('next url is %s' % next)
- return next
- logging.debug('next url is %s' % DEFAULT_NEXT)
- return DEFAULT_NEXT
+ logging.debug('next url is %s' % next)
+ return next
-def get_next_url(request):
- return clean_next(request.REQUEST.get('next'))
+def get_next_url(request, default = None):
+ return clean_next(request.REQUEST.get('next'), default)
class StrippedNonEmptyCharField(forms.CharField):
def clean(self,value):
diff --git a/askbot/views/readers.py b/askbot/views/readers.py
index 4a12fe2c..53ef519e 100644
--- a/askbot/views/readers.py
+++ b/askbot/views/readers.py
@@ -24,6 +24,7 @@ from django.core.urlresolvers import reverse
from django.core import exceptions as django_exceptions
from django.contrib.humanize.templatetags import humanize
from django.views.decorators.cache import cache_page
+from django.http import QueryDict
import askbot
from askbot import exceptions
@@ -124,6 +125,24 @@ def questions(request):
'page_size' : search_state.page_size,#todo in T pagesize -> page_size
}
+ # We need to pass the rss feed url based
+ # on the search state to the template.
+ # We use QueryDict to get a querystring
+ # from dicts and arrays. Much cleaner
+ # than parsing and string formating.
+ rss_query_dict = QueryDict("").copy()
+ if search_state.query:
+ # We have search string in session - pass it to
+ # the QueryDict
+ rss_query_dict.update({"q": search_state.query})
+ if search_state.tags:
+ # We have tags in session - pass it to the
+ # QueryDict but as a list - we want tags+
+ rss_query_dict.setlist("tags", search_state.tags)
+
+ # Format the url with the QueryDict
+ context_feed_url = '/feeds/rss/?%s' % rss_query_dict.urlencode()
+
if request.is_ajax():
q_count = paginator.count
@@ -170,7 +189,8 @@ def questions(request):
'question_counter': question_counter,
'questions': list(),
'related_tags': list(),
- 'faces': list()
+ 'faces': list(),
+ 'feed_url': context_feed_url,
}
badge_levels = dict(const.BADGE_TYPE_CHOICES)
@@ -223,6 +243,7 @@ def questions(request):
reset_method_count += 1
if meta_data.get('author_name',None):
reset_method_count += 1
+
template_data = {
'active_tab': 'questions',
@@ -249,6 +270,7 @@ def questions(request):
'font_size' : font_size,
'tag_filter_strategy_choices': const.TAG_FILTER_STRATEGY_CHOICES,
'update_avatar_data': schedules.should_update_avatar_data(request),
+ 'feed_url': context_feed_url,
}
assert(request.is_ajax() == False)
@@ -350,11 +372,12 @@ def tags(request):#view showing a listing of available tags - plain list
return render_into_skin('tags.html', data, request)
@csrf.csrf_protect
-@cache_page(60 * 5)
+#@cache_page(60 * 5)
def question(request, id):#refactor - long subroutine. display question body, answers and comments
"""view that displays body of the question and
all answers to it
"""
+ #process url parameters
#todo: fix inheritance of sort method from questions
default_sort_method = request.session.get('questions_sort_method', 'votes')
form = ShowQuestionForm(request.GET, default_sort_method)
@@ -373,7 +396,14 @@ def question(request, id):#refactor - long subroutine. display question body, an
#redirect also happens if id of the object's origin post != requested id
show_post = None #used for permalinks
if show_comment is not None:
- #comments
+ #if url calls for display of a specific comment,
+ #check that comment exists, that it belongs to
+ #the current question
+ #if it is an answer comment and the answer is hidden -
+ #redirect to the default view of the question
+ #if the question is hidden - redirect to the main page
+ #in addition - if url points to a comment and the comment
+ #is for the answer - we need the answer object
try:
show_comment = models.Comment.objects.get(id = show_comment)
if str(show_comment.get_origin_post().id) != id:
@@ -396,7 +426,10 @@ def question(request, id):#refactor - long subroutine. display question body, an
return HttpResponseRedirect(reverse('index'))
elif show_answer is not None:
- #answers
+ #if the url calls to view a particular answer to
+ #question - we must check whether the question exists
+ #whether answer is actually corresponding to the current question
+ #and that the visitor is allowed to see it
try:
show_post = get_object_or_404(models.Answer, id = show_answer)
if str(show_post.question.id) != id:
diff --git a/askbot/views/users.py b/askbot/views/users.py
index f1f29f71..130f79a4 100644
--- a/askbot/views/users.py
+++ b/askbot/views/users.py
@@ -38,27 +38,30 @@ from askbot.templatetags import extra_tags
question_type = ContentType.objects.get_for_model(models.Question)
answer_type = ContentType.objects.get_for_model(models.Answer)
comment_type = ContentType.objects.get_for_model(models.Comment)
-question_revision_type = ContentType.objects.get_for_model(
- models.QuestionRevision
- )
-
-answer_revision_type = ContentType.objects.get_for_model(
- models.AnswerRevision
- )
+post_revision_type = ContentType.objects.get_for_model(models.PostRevision)
repute_type = ContentType.objects.get_for_model(models.Repute)
+
question_type_id = question_type.id
answer_type_id = answer_type.id
comment_type_id = comment_type.id
-question_revision_type_id = question_revision_type.id
-answer_revision_type_id = answer_revision_type.id
+post_revision_type_id = post_revision_type.id
repute_type_id = repute_type.id
#todo: queries in the user activity summary view must be redone
-def get_related_object_type_name(content_type_id):
- if content_type_id in (question_type_id, question_revision_type_id,):
+def get_related_object_type_name(content_type_id, object_id):
+# if content_type_id in (question_type_id, question_revision_type_id,):
+# return 'question'
+# elif content_type_id in (answer_type_id, answer_revision_type_id,):
+# return 'answer'
+
+ if content_type_id == question_type_id:
return 'question'
- elif content_type_id in (answer_type_id, answer_revision_type_id,):
+ elif content_type_id == answer_type_id:
return 'answer'
+ elif content_type_id == post_revision_type_id:
+ post_revision = models.PostRevision.objects.get(id=object_id)
+ return post_revision.revision_type_str()
+
return None
def owner_or_moderator_required(f):
@@ -556,18 +559,20 @@ def user_recent(request, user, context):
# question revisions
revisions = models.Activity.objects.extra(
select={
- 'title' : 'question_revision.title',
- 'question_id' : 'question_revision.question_id',
+ 'title' : 'askbot_postrevision.title',
+ 'question_id' : 'askbot_postrevision.question_id',
'added_at' : 'activity.active_at',
'activity_type' : 'activity.activity_type',
- 'summary' : 'question_revision.summary'
+ 'summary' : 'askbot_postrevision.summary'
},
- tables=['activity', 'question_revision', 'question'],
- where=['activity.content_type_id = %s AND activity.object_id = question_revision.id AND '+
- 'question_revision.id=question.id AND NOT question.deleted AND '+
- 'activity.user_id = question_revision.author_id AND activity.user_id = %s AND '+
- 'activity.activity_type=%s'],
- params=[question_revision_type_id, user.id, const.TYPE_ACTIVITY_UPDATE_QUESTION],
+ tables=['activity', 'askbot_postrevision', 'question'],
+ where=['''
+ activity.content_type_id=%s AND activity.object_id=askbot_postrevision.id AND
+ askbot_postrevision.question_id=question.id AND askbot_postrevision.revision_type=%s AND NOT question.deleted AND
+ activity.user_id=askbot_postrevision.author_id AND activity.user_id=%s AND
+ activity.activity_type=%s
+ '''],
+ params=[post_revision_type_id, models.PostRevision.QUESTION_REVISION, user.id, const.TYPE_ACTIVITY_UPDATE_QUESTION],
order_by=['-activity.active_at']
).values(
'title',
@@ -590,16 +595,17 @@ def user_recent(request, user, context):
'answer_id' : 'answer.id',
'added_at' : 'activity.active_at',
'activity_type' : 'activity.activity_type',
- 'summary' : 'answer_revision.summary'
+ 'summary' : 'askbot_postrevision.summary'
},
- tables=['activity', 'answer_revision', 'question', 'answer'],
-
- where=['activity.content_type_id = %s AND activity.object_id = answer_revision.id AND '+
- 'activity.user_id = answer_revision.author_id AND activity.user_id = %s AND '+
- 'answer_revision.answer_id=answer.id AND answer.question_id = question.id AND '+
- 'NOT question.deleted AND NOT answer.deleted AND '+
- 'activity.activity_type=%s'],
- params=[answer_revision_type_id, user.id, const.TYPE_ACTIVITY_UPDATE_ANSWER],
+ tables=['activity', 'askbot_postrevision', 'question', 'answer'],
+ where=['''
+ activity.content_type_id=%s AND activity.object_id=askbot_postrevision.id AND
+ askbot_postrevision.answer_id=answer.id AND askbot_postrevision.revision_type=%s AND
+ answer.question_id=question.id AND NOT question.deleted AND NOT answer.deleted AND
+ activity.user_id=askbot_postrevision.author_id AND activity.user_id=%s AND
+ activity.activity_type=%s
+ '''],
+ params=[post_revision_type_id, models.PostRevision.ANSWER_REVISION, user.id, const.TYPE_ACTIVITY_UPDATE_ANSWER],
order_by=['-activity.active_at']
).values(
'title',
@@ -662,7 +668,10 @@ def user_recent(request, user, context):
'activity_type'
)
for award in awards:
- related_object_type = get_related_object_type_name(award['content_type_id'])
+ related_object_type = get_related_object_type_name(
+ content_type_id=award['content_type_id'],
+ object_id=award['object_id']
+ )
activities.append(
AwardEvent(
award['awarded_at'],
diff --git a/askbot/views/writers.py b/askbot/views/writers.py
index 8b07681a..5f073b37 100644
--- a/askbot/views/writers.py
+++ b/askbot/views/writers.py
@@ -274,7 +274,7 @@ def ask(request):#view used to ask a new question
else:
#attemp to get tags from search state
search_state = request.session.get('search_state', None)
- if search_state.tags:
+ if search_state and search_state.tags:
tags = ' '.join(search_state.tags)
form.initial['tags'] = tags
@@ -363,7 +363,7 @@ def edit_question(request, id):
if revision_form.is_valid():
# Replace with those from the selected revision
rev_id = revision_form.cleaned_data['revision']
- selected_revision = models.QuestionRevision.objects.get(
+ selected_revision = models.PostRevision.objects.question_revisions().get(
question = question,
revision = rev_id
)
@@ -448,7 +448,7 @@ def edit_answer(request, id):
if revision_form.is_valid():
# Replace with those from the selected revision
rev = revision_form.cleaned_data['revision']
- selected_revision = models.AnswerRevision.objects.get(
+ selected_revision = models.PostRevision.objects.answer_revisions().get(
answer = answer,
revision = rev
)
diff --git a/askbot_requirements.txt b/askbot_requirements.txt
index a1d3b603..fc11d9d1 100644
--- a/askbot_requirements.txt
+++ b/askbot_requirements.txt
@@ -16,3 +16,4 @@ django-kombu==0.9.2
django-followit
django-recaptcha-works
python-openid
+pystache==0.3.1
diff --git a/setup.py b/setup.py
index 71ed2abb..253f9db9 100644
--- a/setup.py
+++ b/setup.py
@@ -25,6 +25,7 @@ install_requires = [
'django-followit',
'django-recaptcha-works',
'python-openid',
+ 'pystache==0.3.1',
]
import askbot