From 27c605c00f9e928e182a9b96f57145dd01fbb8a3 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 3 Mar 2015 17:43:45 +0000 Subject: [PATCH 1/2] initial work on allowing jquery.autosize to work with our new streamfield textblock --- wagtail/wagtailadmin/widgets.py | 11 +++++++++++ wagtail/wagtailcore/blocks/field_block.py | 15 ++++++++++----- 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index 4e65201f2..69282378d 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -15,6 +15,17 @@ from wagtail.wagtailcore.models import Page from taggit.forms import TagWidget +class AdminAutoHeightTextInput(WidgetWithScript, widgets.Textarea): + def __init__(self, attrs=None): + # Use slightly better defaults than HTML's 20x2 box + default_attrs = {'rows': '1'} + if attrs: + default_attrs.update(attrs) + super(AdminAutoHeightTextInput, self).__init__(default_attrs) + + def render_js_init(self, id_, name, value): + return '$("#{0}").autosize();'.format(json.dumps(id_)) + class AdminDateInput(WidgetWithScript, widgets.DateInput): def render_js_init(self, id_, name, value): return 'initDateChooser({0});'.format(json.dumps(id_)) diff --git a/wagtail/wagtailcore/blocks/field_block.py b/wagtail/wagtailcore/blocks/field_block.py index c6dd7b166..76c2dd9f4 100644 --- a/wagtail/wagtailcore/blocks/field_block.py +++ b/wagtail/wagtailcore/blocks/field_block.py @@ -68,13 +68,18 @@ class CharBlock(FieldBlock): class TextBlock(FieldBlock): - def __init__(self, required=True, help_text=None, max_length=None, min_length=None, **kwargs): - self.field = forms.CharField( - widget=forms.Textarea(), - required=required, help_text=help_text, - max_length=max_length, min_length=min_length) + def __init__(self, required=True, help_text=None, rows=1, max_length=None, min_length=None, **kwargs): + self.field_options = {'required': required, 'help_text': help_text, 'max_length': max_length, 'min_length': min_length} + self.rows = rows super(TextBlock, self).__init__(**kwargs) + @cached_property + def field(self): + from wagtail.wagtailadmin.widgets import AdminAutoHeightTextInput + field_kwargs = {'widget': AdminAutoHeightTextInput(attrs={'rows':self.rows})} + field_kwargs.update(self.field_options) + return forms.CharField(**field_kwargs) + def get_searchable_content(self, value): return [force_text(value)] From 2d38f23fb09c4928fee8319ba296a8ceeaaa9e96 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Wed, 4 Mar 2015 09:23:34 +0000 Subject: [PATCH 2/2] ensuring autosize fires. styling field --- .../static/wagtailadmin/scss/layouts/page-editor.scss | 3 ++- wagtail/wagtailadmin/widgets.py | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss index 241932c84..1263cdb40 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/layouts/page-editor.scss @@ -267,7 +267,8 @@ } .struct-block .widget-text_input > label, - .struct-block .widget-textarea > label{ + .struct-block .widget-textarea > label, + .struct-block .widget-admin_auto_height_text_input > label{ display:none; } diff --git a/wagtail/wagtailadmin/widgets.py b/wagtail/wagtailadmin/widgets.py index 69282378d..6a2f146b4 100644 --- a/wagtail/wagtailadmin/widgets.py +++ b/wagtail/wagtailadmin/widgets.py @@ -17,14 +17,15 @@ from taggit.forms import TagWidget class AdminAutoHeightTextInput(WidgetWithScript, widgets.Textarea): def __init__(self, attrs=None): - # Use slightly better defaults than HTML's 20x2 box + # Use more appropriate rows default, given autoheight will alter this anyway default_attrs = {'rows': '1'} if attrs: default_attrs.update(attrs) + super(AdminAutoHeightTextInput, self).__init__(default_attrs) def render_js_init(self, id_, name, value): - return '$("#{0}").autosize();'.format(json.dumps(id_)) + return '$("#{0}").autosize();'.format(id_) class AdminDateInput(WidgetWithScript, widgets.DateInput): def render_js_init(self, id_, name, value):