diff options
-rw-r--r-- | askbot/conf/forum_data_rules.py | 20 | ||||
-rw-r--r-- | askbot/media/js/post.js | 20 | ||||
-rw-r--r-- | askbot/media/style/style.css | 13 | ||||
-rw-r--r-- | askbot/media/style/style.less | 13 | ||||
-rw-r--r-- | askbot/templates/ask.html | 8 | ||||
-rw-r--r-- | askbot/templates/ask_by_widget.html | 14 | ||||
-rw-r--r-- | askbot/templates/widgets/ask_form.html | 38 | ||||
-rw-r--r-- | askbot/templatetags/extra_filters_jinja.py | 13 | ||||
-rw-r--r-- | askbot/utils/html.py | 5 |
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) |