From 4788144c86b1dbdc5e230add8407652acefd0316 Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 17 Jun 2014 15:09:10 +0100 Subject: [PATCH 1/4] first bash at customisable tabs like in PR #210 --- wagtail/wagtailadmin/edit_handlers.py | 3 +- .../edit_handlers/tabbed_interface.html | 4 +- wagtail/wagtailadmin/views/pages.py | 40 +++++++++++++++++-- 3 files changed, 40 insertions(+), 7 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index 245f7ad60..ecf692025 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -447,10 +447,11 @@ class BaseObjectList(BaseCompositeEditHandler): template = "wagtailadmin/edit_handlers/object_list.html" -def ObjectList(children, heading=""): +def ObjectList(children, heading="", classes=None): return type('_ObjectList', (BaseObjectList,), { 'children': children, 'heading': heading, + 'classes': classes }) diff --git a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/tabbed_interface.html b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/tabbed_interface.html index 5bbccb03b..813e40f53 100644 --- a/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/tabbed_interface.html +++ b/wagtail/wagtailadmin/templates/wagtailadmin/edit_handlers/tabbed_interface.html @@ -1,12 +1,12 @@
{% for child in self.children %} -
+
{{ child.render_as_object }}
{% endfor %} diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 69e6b7f4f..dedf3bff3 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -155,6 +155,9 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_ page.save_revision(user=request.user, submitted_for_moderation=is_submitting) if is_publishing: + message = mark_safe(render_to_string(self.template, { + 'self': self + })) messages.success(request, _("Page '{0}' published.").format(page.title)) elif is_submitting: messages.success(request, _("Page '{0}' submitted for moderation.").format(page.title)) @@ -527,12 +530,41 @@ def set_page_position(request, page_to_move_id): PAGE_EDIT_HANDLERS = {} +def get_default_panels(page_class): + panels = [] + + try: + panels.append(ObjectList(page_class.content_panels, heading='Content')) + except AttributeError: + pass + + try: + panels.append(ObjectList(page_class.promote_panels, heading='Promote')) + except AttributeError: + pass + + try: + panels.append(ObjectList(page_class.settings_panels, heading='Settings', classes='settings')) + except AttributeError: + pass + + return panels + + +def get_panels(page_class): + try: + return page_class.panels + except AttributeError: + return get_default_panels(page_class) + + +def set_panels(page_class, panels): + page_class.panels = panels + + def get_page_edit_handler(page_class): if page_class not in PAGE_EDIT_HANDLERS: - PAGE_EDIT_HANDLERS[page_class] = TabbedInterface([ - ObjectList(page_class.content_panels, heading='Content'), - ObjectList(page_class.promote_panels, heading='Promote') - ]) + PAGE_EDIT_HANDLERS[page_class] = TabbedInterface(get_panels(page_class)) return PAGE_EDIT_HANDLERS[page_class] From 9efb6a38d75269caaeae71809c3c8b6409deadee Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 17 Jun 2014 16:37:22 +0100 Subject: [PATCH 2/4] styling for scenario where tabs run onto multiple lines --- wagtail/wagtailadmin/edit_handlers.py | 2 +- .../wagtailadmin/scss/components/icons.scss | 1 - .../wagtailadmin/scss/components/tabs.scss | 49 ++++++++++++++----- wagtail/wagtailadmin/views/pages.py | 20 ++++---- 4 files changed, 49 insertions(+), 23 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index ecf692025..d3be76161 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -447,7 +447,7 @@ class BaseObjectList(BaseCompositeEditHandler): template = "wagtailadmin/edit_handlers/object_list.html" -def ObjectList(children, heading="", classes=None): +def ObjectList(children, heading="", classes=""): return type('_ObjectList', (BaseObjectList,), { 'children': children, 'heading': heading, diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss index 4de3aa131..9411cb1a8 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/icons.scss @@ -96,7 +96,6 @@ .icon-unlocked:before { content: "p"; } - .icon-doc-full-inverse:before { content: "r"; } diff --git a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss index b0dec687d..c008ed15e 100644 --- a/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss +++ b/wagtail/wagtailadmin/static/wagtailadmin/scss/components/tabs.scss @@ -1,13 +1,15 @@ .tab-nav{ @include clearfix(); padding:0; + background:$color-grey-4; li{ list-style-type:none; - width:48%; + width:50%; float:left; padding:0; position:relative; + margin-bottom:-1px; &:before,&:after{ display:none; @@ -18,13 +20,12 @@ @include box-shadow(inset 0px -2px 3px 0 rgba(0,0,0,0.1)); background-color:$color-grey-4; outline:none; - line-height:3em; text-transform:uppercase; font-weight:700; font-size:1.2em; text-decoration:none; display:block; - padding:0 20px; + padding:0.7em $mobile-nice-padding; color:$color-grey-2; border-top:0.3em solid $color-grey-4; border-bottom:1px solid transparent; @@ -57,6 +58,20 @@ } } + li.settings a{ + padding-left:30px; + padding-right:30px; + + &:before{ + font-family:wagtail; + vertical-align:middle; + text-transform:none; + content:"w"; + margin-right:0.5em; + font-size:1.2em; + } + } + li.active a{ @include box-shadow(none); color:$color-grey-1; @@ -66,7 +81,6 @@ /* For cases where tab-nav should merge with header */ &.merged{ - background-color:$color-header-bg; margin-top:0; } } @@ -82,14 +96,27 @@ } @media screen and (min-width: $breakpoint-mobile){ - .tab-nav li{ - width:auto; - padding:0; - margin-left:0.7em; - } + .tab-nav{ + /* For cases where tab-nav should merge with header */ + &.merged{ + background-color:$color-header-bg; + } - .tab-nav a{ - padding:0 50px; + li{ + width:auto; + padding:0; + margin-left:0.7em; + + &.tab-right{ + float:right; + margin-right:0.7em; + } + } + + a{ + padding-left:$desktop-nice-padding - 10; + padding-right:$desktop-nice-padding - 10; + } } .modal-content .tab-nav li{ diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index dedf3bff3..086c61f0f 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -531,40 +531,40 @@ PAGE_EDIT_HANDLERS = {} def get_default_panels(page_class): - panels = [] + handlers = [] try: - panels.append(ObjectList(page_class.content_panels, heading='Content')) + handlers.append(ObjectList(page_class.content_panels, heading='Content')) except AttributeError: pass try: - panels.append(ObjectList(page_class.promote_panels, heading='Promote')) + handlers.append(ObjectList(page_class.promote_panels, heading='Promote')) except AttributeError: pass try: - panels.append(ObjectList(page_class.settings_panels, heading='Settings', classes='settings')) + handlers.append(ObjectList(page_class.settings_panels, heading='Settings', classes='tab-right settings')) except AttributeError: pass - return panels + return handlers -def get_panels(page_class): +def get_which_page_edit_handler(page_class): try: - return page_class.panels + return page_class.handlers except AttributeError: return get_default_panels(page_class) -def set_panels(page_class, panels): - page_class.panels = panels +def set_page_edit_handler(page_class, handlers): + page_class.handlers = handlers def get_page_edit_handler(page_class): if page_class not in PAGE_EDIT_HANDLERS: - PAGE_EDIT_HANDLERS[page_class] = TabbedInterface(get_panels(page_class)) + PAGE_EDIT_HANDLERS[page_class] = TabbedInterface(get_which_page_edit_handler(page_class)) return PAGE_EDIT_HANDLERS[page_class] From b95d6a0fab18a17a59dc981f7c6213e083c07d6d Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 17 Jun 2014 16:58:12 +0100 Subject: [PATCH 3/4] removed partial work from other branch --- wagtail/wagtailadmin/views/pages.py | 3 --- 1 file changed, 3 deletions(-) diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 086c61f0f..15aa81808 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -155,9 +155,6 @@ def create(request, content_type_app_name, content_type_model_name, parent_page_ page.save_revision(user=request.user, submitted_for_moderation=is_submitting) if is_publishing: - message = mark_safe(render_to_string(self.template, { - 'self': self - })) messages.success(request, _("Page '{0}' published.").format(page.title)) elif is_submitting: messages.success(request, _("Page '{0}' submitted for moderation.").format(page.title)) From fb9a876e92c0cbd53a3e30367efcbc05e35b0cdc Mon Sep 17 00:00:00 2001 From: Dave Cranwell Date: Tue, 17 Jun 2014 17:20:22 +0100 Subject: [PATCH 4/4] moved set_page_edit_hanlder to edit_handlders.py. Still not happy it's invoked the right way though --- wagtail/wagtailadmin/edit_handlers.py | 4 ++++ wagtail/wagtailadmin/views/pages.py | 4 ---- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/wagtail/wagtailadmin/edit_handlers.py b/wagtail/wagtailadmin/edit_handlers.py index d3be76161..b7090ff22 100644 --- a/wagtail/wagtailadmin/edit_handlers.py +++ b/wagtail/wagtailadmin/edit_handlers.py @@ -261,6 +261,10 @@ def extract_panel_definitions_from_model_class(model, exclude=None): return panels +def set_page_edit_handler(page_class, handlers): + page_class.handlers = handlers + + class EditHandler(object): """ Abstract class providing sensible default behaviours for objects implementing diff --git a/wagtail/wagtailadmin/views/pages.py b/wagtail/wagtailadmin/views/pages.py index 15aa81808..67d0e7525 100644 --- a/wagtail/wagtailadmin/views/pages.py +++ b/wagtail/wagtailadmin/views/pages.py @@ -555,10 +555,6 @@ def get_which_page_edit_handler(page_class): return get_default_panels(page_class) -def set_page_edit_handler(page_class, handlers): - page_class.handlers = handlers - - def get_page_edit_handler(page_class): if page_class not in PAGE_EDIT_HANDLERS: PAGE_EDIT_HANDLERS[page_class] = TabbedInterface(get_which_page_edit_handler(page_class))