summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-25 02:08:52 -0400
committerEvgeny Fadeev <evgeny.fadeev@gmail.com>2013-04-25 02:08:52 -0400
commitbac77a32025a61928110eab85267e96a2c859b15 (patch)
tree0f693d57da68fa2be66df9042cf5482986e09bc2
parent4ad89216ff38c4d616b6821e69e5a889a6a59b2a (diff)
downloadaskbot-bac77a32025a61928110eab85267e96a2c859b15.tar.gz
askbot-bac77a32025a61928110eab85267e96a2c859b15.tar.bz2
askbot-bac77a32025a61928110eab85267e96a2c859b15.zip
made a setting to make question body optional
-rw-r--r--askbot/conf/forum_data_rules.py20
-rw-r--r--askbot/media/js/post.js20
-rw-r--r--askbot/media/style/style.css13
-rw-r--r--askbot/media/style/style.less13
-rw-r--r--askbot/templates/ask.html8
-rw-r--r--askbot/templates/ask_by_widget.html14
-rw-r--r--askbot/templates/widgets/ask_form.html38
-rw-r--r--askbot/templatetags/extra_filters_jinja.py13
-rw-r--r--askbot/utils/html.py5
9 files changed, 122 insertions, 22 deletions
diff --git a/askbot/conf/forum_data_rules.py b/askbot/conf/forum_data_rules.py
index 96cb0ea0..421bbad7 100644
--- a/askbot/conf/forum_data_rules.py
+++ b/askbot/conf/forum_data_rules.py
@@ -110,6 +110,26 @@ settings.register(
)
)
+QUESTION_BODY_EDITOR_MODE_CHOICES = (
+ ('open', _('Fully open by default')),
+ ('folded', _('Folded by default'))
+)
+
+settings.register(
+ livesettings.StringValue(
+ FORUM_DATA_RULES,
+ 'QUESTION_BODY_EDITOR_MODE',
+ choices=QUESTION_BODY_EDITOR_MODE_CHOICES,
+ default='open',
+ description=_('Question details/body editor should be'),
+ help_text =_(
+ 'To use folded mode, please first set minimum '
+ 'question body length to 0. Also - please make tags '
+ 'optional.'
+ )
+ )
+)
+
settings.register(
livesettings.BooleanValue(
FORUM_DATA_RULES,
diff --git a/askbot/media/js/post.js b/askbot/media/js/post.js
index c8f802a7..7b18e7f1 100644
--- a/askbot/media/js/post.js
+++ b/askbot/media/js/post.js
@@ -2569,6 +2569,10 @@ FoldedEditor.prototype.getEditor = function() {
return this._editor;
};
+FoldedEditor.prototype.getEditorInputId = function() {
+ return this._element.find('textarea').attr('id');
+};
+
FoldedEditor.prototype.onAfterOpenHandler = function() {
var editor = this.getEditor();
if (editor) {
@@ -2579,15 +2583,28 @@ FoldedEditor.prototype.onAfterOpenHandler = function() {
FoldedEditor.prototype.getOpenHandler = function() {
var editorBox = this._editorBox;
var promptBox = this._prompt;
+ var externalTrigger = this._externalTrigger;
var me = this;
return function() {
promptBox.hide();
editorBox.show();
me.getElement().addClass('unfolded');
me.onAfterOpenHandler();
+
+ if (externalTrigger) {
+ var label = me.makeElement('label');
+ label.html(externalTrigger.html());
+ //set what the label is for
+ label.attr('for', me.getEditorInputId());
+ externalTrigger.replaceWith(label);
+ }
};
};
+FoldedEditor.prototype.setExternalTrigger = function(element) {
+ this._externalTrigger = element;
+};
+
FoldedEditor.prototype.decorate = function(element) {
this._element = element;
this._prompt = element.find('.prompt');
@@ -2607,6 +2624,9 @@ FoldedEditor.prototype.decorate = function(element) {
var openHandler = this.getOpenHandler();
element.click(openHandler);
element.focus(openHandler);
+ if (this._externalTrigger) {
+ this._externalTrigger.click(openHandler);
+ }
};
/**
diff --git a/askbot/media/style/style.css b/askbot/media/style/style.css
index f7ec93df..c98e6e36 100644
--- a/askbot/media/style/style.css
+++ b/askbot/media/style/style.css
@@ -1634,7 +1634,10 @@ ul#related-tags li {
-webkit-box-sizing: border-box;
}
.ask-page #askFormBar {
- padding: 0 0 10px 0;
+ padding: 0 0 6px 0;
+}
+.ask-page .checkbox {
+ margin: 0;
}
.ask-page div#question-list,
.edit-question-page div#question-list {
@@ -1831,8 +1834,16 @@ ul#related-tags li {
margin: 5px 8px;
display: block;
}
+.ask-page .folded-editor {
+ border: none;
+ height: 0;
+}
.folded-editor.unfolded {
border: none;
+ height: auto;
+}
+.folded-editor.unfolded .editor-proper {
+ display: block;
}
.wmd-container {
border: #cce6ec 3px solid;
diff --git a/askbot/media/style/style.less b/askbot/media/style/style.less
index 14a46f00..03205f4e 100644
--- a/askbot/media/style/style.less
+++ b/askbot/media/style/style.less
@@ -1736,7 +1736,10 @@ ul#related-tags li {
.ask-page {
#askFormBar {
- padding: 0 0 10px 0;
+ padding: 0 0 6px 0;
+ }
+ .checkbox {
+ margin: 0;
}
}
@@ -1936,8 +1939,16 @@ ul#related-tags li {
display: block;
}
}
+.ask-page .folded-editor {
+ border: none;
+ height: 0;
+}
.folded-editor.unfolded {
border: none;
+ height: auto;
+ .editor-proper {
+ display: block;
+ }
}
.wmd-container {
diff --git a/askbot/templates/ask.html b/askbot/templates/ask.html
index 030780f6..4a20d864 100644
--- a/askbot/templates/ask.html
+++ b/askbot/templates/ask.html
@@ -61,6 +61,14 @@
{% else %}
var codeFriendlyMarkdown = false;
{% endif %}
+ (function() {
+ var bodyTriggerLink = $('.question-body-trigger');
+ if (bodyTriggerLink.length === 1) {
+ var foldedEditor = new FoldedEditor();
+ foldedEditor.setExternalTrigger(bodyTriggerLink);
+ foldedEditor.decorate($('.folded-editor'));
+ }
+ })();
$().ready(function(){
//set current module button style
$('#editor').TextAreaResizer();
diff --git a/askbot/templates/ask_by_widget.html b/askbot/templates/ask_by_widget.html
index f700f83a..0eacd0cd 100644
--- a/askbot/templates/ask_by_widget.html
+++ b/askbot/templates/ask_by_widget.html
@@ -1,16 +1,16 @@
{% extends "widget_base.html" %}
{% block forestyle %}
-{%endblock%}
+{% endblock %}
-{%block body%}
+{% block body %}
Enter your question
<form action="." method="POST" accept-charset="utf-8">
{% csrf_token %}
- {{form.title}}
+ {{ form.title }}
{% if form.ask_anonymously %}
- {{form.ask_anonymously}}
- {%endif%}
+ {{ form.ask_anonymously }}
+ {% endif %}
<input type="submit" value="Ask your question" />
</form>
-{{form.errors}}
-{%endblock%}
+{{ form.errors }}
+{% endblock %}
diff --git a/askbot/templates/widgets/ask_form.html b/askbot/templates/widgets/ask_form.html
index e26ec771..3ddb07dd 100644
--- a/askbot/templates/widgets/ask_form.html
+++ b/askbot/templates/widgets/ask_form.html
@@ -12,21 +12,33 @@
value="{% if form.initial.title %}{{form.initial.title|escape}}{% endif %}"/>
</div>
</div>
- {% if settings.MIN_QUESTION_BODY_LENGTH == 0 %}
- <label for="editor">{% trans %}Add details{% endtrans %}</label>
+ {% set editor_is_folded = (
+ settings.MIN_QUESTION_BODY_LENGTH == 0 and
+ form.text.value()|is_empty_editor_value()
+ )
+ %}
+ {% if editor_is_folded %}
+ <a class="question-body-trigger">{% trans %}Add details (optional){% endtrans %}</a>
+ {% elif settings.MIN_QUESTION_BODY_LENGTH == 0 %}
+ <label for="editor">{% trans %}Add details (optional){% endtrans %}</label>
{% else %}
- <label for="editor">{% trans %}Add details, if necessary{% endtrans %}</label>
+ <label for="editor">{% trans %}Add details{% endtrans %}</label>
{% endif %}
- {{
- macros.edit_post(
- form,
- post_type = 'question',
- mandatory_tags = mandatory_tags,
- use_category_selector = (settings.TAG_SOURCE == 'category-tree'),
- editor_type = settings.EDITOR_TYPE,
- user = request.user
- )
- }}
+
+ <div class="folded-editor{% if editor_is_folded == False %} unfolded{% endif %}">
+ <div class="editor-proper">
+ {{
+ macros.edit_post(
+ form,
+ post_type = 'question',
+ mandatory_tags = mandatory_tags,
+ use_category_selector = (settings.TAG_SOURCE == 'category-tree'),
+ editor_type = settings.EDITOR_TYPE,
+ user = request.user
+ )
+ }}
+ </div>
+ </div>
{{ form.group_id }}
<div class="question-options">
{% if settings.WIKI_ON %}
diff --git a/askbot/templatetags/extra_filters_jinja.py b/askbot/templatetags/extra_filters_jinja.py
index a8681f5c..19c216d4 100644
--- a/askbot/templatetags/extra_filters_jinja.py
+++ b/askbot/templatetags/extra_filters_jinja.py
@@ -4,6 +4,7 @@ import re
import time
import urllib
from coffin import template as coffin_template
+from bs4 import BeautifulSoup
from django.core import exceptions as django_exceptions
from django.utils.translation import ugettext as _
from django.utils.translation import get_language as django_get_language
@@ -54,6 +55,18 @@ def is_current_language(lang):
return lang == django_get_language()
@register.filter
+def is_empty_editor_value(value):
+ if value == None:
+ return True
+ if str(value).strip() == '':
+ return True
+ #tinymce uses a weird sentinel placeholder
+ if askbot_settings.EDITOR_TYPE == 'tinymce':
+ soup = BeautifulSoup(value)
+ return soup.getText().strip() == ''
+ return False
+
+@register.filter
def to_int(value):
return int(value)
diff --git a/askbot/utils/html.py b/askbot/utils/html.py
index 549f22bf..9fb46337 100644
--- a/askbot/utils/html.py
+++ b/askbot/utils/html.py
@@ -97,7 +97,12 @@ def replace_links_with_text(html):
def strip_tags(html, tags=None):
"""strips tags from given html output"""
+ #a corner case
+ if html.strip() == '':
+ return html
+
assert(tags != None)
+
soup = BeautifulSoup(html)
for tag in tags:
tag_matches = soup.find_all(tag)