From 110ec335b85579c85b9974bf14d4a695a235a9de Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Tue, 12 Apr 2016 23:53:24 +0530 Subject: [PATCH 1/5] [WIP] Do not merge --- frappe/public/css/website.css | 1 + frappe/templates/includes/footer/footer.html | 87 ++++++----- frappe/templates/includes/login/login.css | 65 +++++++- frappe/templates/pages/login.html | 76 +++++----- .../website/doctype/footer_item/__init__.py | 0 .../doctype/footer_item/footer_item.json | 142 ++++++++++++++++++ .../doctype/footer_item/footer_item.py | 10 ++ .../doctype/top_bar_item/top_bar_item.json | 37 ++++- .../website_settings/website_settings.json | 12 +- .../website_theme/standard/standard.json | 13 +- 10 files changed, 355 insertions(+), 88 deletions(-) create mode 100644 frappe/website/doctype/footer_item/__init__.py create mode 100644 frappe/website/doctype/footer_item/footer_item.json create mode 100644 frappe/website/doctype/footer_item/footer_item.py diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index 1ee132e904..643f251104 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -411,6 +411,7 @@ a.no-decoration:active { .web-footer { padding: 20px 0px; min-height: 140px; + border-top: 1px solid #ebeff2; } .carousel-control .icon { position: absolute; diff --git a/frappe/templates/includes/footer/footer.html b/frappe/templates/includes/footer/footer.html index ca1f0a1441..3ad3d94ec9 100644 --- a/frappe/templates/includes/footer/footer.html +++ b/frappe/templates/includes/footer/footer.html @@ -1,56 +1,61 @@ diff --git a/frappe/templates/includes/login/login.css b/frappe/templates/includes/login/login.css index 84bc3bccae..96b4fbdee6 100644 --- a/frappe/templates/includes/login/login.css +++ b/frappe/templates/includes/login/login.css @@ -7,8 +7,30 @@ width: 100%; } +.blue { + color: #78D6FF; +} + +.icon-facebook, .icon-facebook-sign{ + color: #3b5998; +} +.icon-google-plus, .icon-google-plus-sign{ + color: #C63D2D; +} +.icon-github, .icon-github-sign{ + color: black; +} + +.icon-twitter, .icon-twitter-sign{ + color: #00a0d1; +} + +.icon-linkedin, .icon-linkedin-sign{ + color: #4875B4; +} + #wrap { - background-color: #fafbfc; + background-color: #78D6FF; } .form-signin { @@ -42,3 +64,44 @@ .btn-social { margin: 10px; } + +h5 { + position: relative; + text-align: center; + margin-top:20px; + margin-bottom:20px; +} + +h5 span { + background: #fff; + padding: 0 15px; + position: relative; + z-index: 1; +} + +h5:before { + background: #ddd; + content: ""; + display: block; + height: 1px; + position: absolute; + top: 50%; + width: 100%; +} +h5:before { + left: 0; +} +.login_header{ + font-size: 36px; + position: relative; + text-align: center; + margin:20px; +} + +p{ + margin-bottom:20px; +} +.btn-login, .btn-signup, .btn-forgot { + background: #78D6FF; + color: white; +} \ No newline at end of file diff --git a/frappe/templates/pages/login.html b/frappe/templates/pages/login.html index 2c36041191..42d694d959 100644 --- a/frappe/templates/pages/login.html +++ b/frappe/templates/pages/login.html @@ -2,53 +2,53 @@ {% block style %} {% endblock %} {% block page_content %} -
+ -
- {%- block page_content -%}{%- endblock -%} -
+ +
+ {% if show_sidebar %} + + {% endif %} +
+
+ {%- block page_content -%}{%- endblock -%} +
+
+
{% endblock %} diff --git a/frappe/website/doctype/top_bar_item/top_bar_item.json b/frappe/website/doctype/top_bar_item/top_bar_item.json index 312cf279dc..938dec5da9 100644 --- a/frappe/website/doctype/top_bar_item/top_bar_item.json +++ b/frappe/website/doctype/top_bar_item/top_bar_item.json @@ -57,6 +57,7 @@ "length": 0, "no_column": 0, "no_copy": 0, + "options": "", "permlevel": 0, "print_hide": 0, "print_hide_if_no_value": 0, diff --git a/frappe/website/doctype/website_settings/website_settings.js b/frappe/website/doctype/website_settings/website_settings.js index 8712f24b0e..a517bfd2ae 100644 --- a/frappe/website/doctype/website_settings/website_settings.js +++ b/frappe/website/doctype/website_settings/website_settings.js @@ -34,6 +34,9 @@ $.extend(cur_frm.cscript, { if(item.parentfield === "top_bar_items") { this.set_parent_label_options(); } + else if(item.parentfield === "footer_items") { + this.set_parent_label_options_footer(); + } }, parent_label: function(doc, cdt, cdn) { @@ -52,6 +55,15 @@ $.extend(cur_frm.cscript, { cur_frm.fields_dict.top_bar_items.grid.refresh(); } }, + + set_parent_label_options_footer: function() { + frappe.meta.get_docfield("Top Bar Item", "parent_label", cur_frm.docname).options = + this.get_parent_options("footer_items"); + + if($(cur_frm.fields_dict.footer_items.grid.wrapper).find(".grid-row-open")) { + cur_frm.fields_dict.footer_items.grid.refresh(); + } + }, // get labels of parent items get_parent_options: function(table_field) { diff --git a/frappe/website/doctype/website_settings/website_settings.py b/frappe/website/doctype/website_settings/website_settings.py index 22483c8d3b..0572b5458b 100644 --- a/frappe/website/doctype/website_settings/website_settings.py +++ b/frappe/website/doctype/website_settings/website_settings.py @@ -39,10 +39,20 @@ class WebsiteSettings(Document): top_bar_item.idx)) def validate_footer_items(self): - """clear parent label in footer""" + """validate url in top bar items""" for footer_item in self.get("footer_items"): - footer_item.parent_label = None + if footer_item.parent_label: + parent_label_item = self.get("footer_items", {"label": footer_item.parent_label}) + if not parent_label_item: + # invalid item + frappe.throw(_("{0} does not exist in row {1}").format(footer_item.parent_label, footer_item.idx)) + + elif not parent_label_item[0] or parent_label_item[0].url: + # parent cannot have url + frappe.throw(_("{0} in row {1} cannot have both URL and child items").format(footer_item.parent_label, + footer_item.idx)) + def on_update(self): self.clear_cache() @@ -59,32 +69,12 @@ class WebsiteSettings(Document): frappe.clear_cache() + def get_website_settings(): hooks = frappe.get_hooks() - - all_top_items = frappe.db.sql("""\ - select * from `tabTop Bar Item` - where parent='Website Settings' and parentfield='top_bar_items' - order by idx asc""", as_dict=1) - - top_items = [d for d in all_top_items if not d['parent_label']] - - # attach child items to top bar - for d in all_top_items: - if d['parent_label']: - for t in top_items: - if t['label']==d['parent_label']: - if not 'child_items' in t: - t['child_items'] = [] - t['child_items'].append(d) - break - context = frappe._dict({ - 'top_bar_items': top_items, - 'footer_items': frappe.db.sql("""\ - select * from `tabTop Bar Item` - where parent='Website Settings' and parentfield='footer_items' - order by idx asc""", as_dict=1), + 'top_bar_items': get_items('top_bar_items'), + 'footer_items': get_items('footer_items'), "post_login": [ {"label": "My Account", "url": "/me"}, {"class": "divider"}, @@ -134,4 +124,23 @@ def get_website_settings(): context["favicon"] = settings.favicon return context + +def get_items(parentfield): + all_top_items = frappe.db.sql("""\ + select * from `tabTop Bar Item` + where parent='Website Settings' and parentfield= %s + order by idx asc""", parentfield, as_dict=1) + top_items = [d for d in all_top_items if not d['parent_label']] + + # attach child items to top bar + for d in all_top_items: + if d['parent_label']: + for t in top_items: + if t['label']==d['parent_label']: + if not 'child_items' in t: + t['child_items'] = [] + t['child_items'].append(d) + break + return top_items + From b1b3c17b2d6d68aaec3685418b65e826bfc993ac Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Fri, 15 Apr 2016 14:51:33 +0530 Subject: [PATCH 3/5] Changes 2 --- frappe/public/css/website.css | 9 +-- frappe/public/less/website.less | 10 +-- .../{pages => includes}/web_sidebar.html | 0 frappe/templates/pages/list.py | 1 + frappe/templates/pages/me.html | 4 +- frappe/templates/pages/web_sidebar.py | 15 +---- frappe/templates/web.html | 63 ++++++++----------- frappe/website/context.py | 19 ++++++ 8 files changed, 56 insertions(+), 65 deletions(-) rename frappe/templates/{pages => includes}/web_sidebar.html (100%) diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index c955be43bd..1c607a3d34 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -459,7 +459,6 @@ a.no-decoration:active { padding-left: 15px; } .page-header-actions-block { - padding-top: 20px; text-align: right; } fieldset { @@ -490,6 +489,8 @@ fieldset { } .page-container { padding: 0px; + max-width: 970px; + margin: auto; } .page-content hr { margin-left: -15px; @@ -641,9 +642,6 @@ a.active { pointer-events: none; cursor: default; } -.page-breadcrumbs { - padding-top: 20px; -} .page-breadcrumbs .breadcrumb { padding: 0px; background-color: transparent; @@ -846,8 +844,7 @@ body { padding-bottom: 50px; } .content-header { - padding-bottom: 50px; - font-size: 28px; + padding-bottom: 20px; } .selected-p-item { color: #78D6FF; diff --git a/frappe/public/less/website.less b/frappe/public/less/website.less index 1ce11fe6c6..493818f106 100644 --- a/frappe/public/less/website.less +++ b/frappe/public/less/website.less @@ -124,7 +124,6 @@ } .page-header-actions-block { - padding-top: 20px; text-align: right; } @@ -160,6 +159,8 @@ fieldset { .page-container { padding: 0px; + max-width: 970px; + margin: auto; } .page-content { @@ -355,10 +356,6 @@ a.active { // background-color: #ffa; // } -.page-breadcrumbs { - padding-top: 20px; -} - .page-breadcrumbs .breadcrumb { padding: 0px; background-color: transparent; @@ -444,8 +441,7 @@ a.active { padding-bottom:50px; } .content-header { - padding-bottom:50px; - font-size:28px; + padding-bottom:20px; } .selected-p-item { diff --git a/frappe/templates/pages/web_sidebar.html b/frappe/templates/includes/web_sidebar.html similarity index 100% rename from frappe/templates/pages/web_sidebar.html rename to frappe/templates/includes/web_sidebar.html diff --git a/frappe/templates/pages/list.py b/frappe/templates/pages/list.py index 615fd40eff..00f5c73c92 100644 --- a/frappe/templates/pages/list.py +++ b/frappe/templates/pages/list.py @@ -52,6 +52,7 @@ def get(doctype, txt=None, limit_start=0, **kwargs): for doc in raw_result: doc.doctype = doctype new_context = frappe._dict(doc=doc, meta=meta) + new_context.doc = frappe.get_doc(doc) if not frappe.flags.in_test: new_context["pathname"] = frappe.local.request.path.strip("/ ") diff --git a/frappe/templates/pages/me.html b/frappe/templates/pages/me.html index 9565716506..6881f82d74 100644 --- a/frappe/templates/pages/me.html +++ b/frappe/templates/pages/me.html @@ -1,14 +1,14 @@ {% extends "templates/web.html" %} {% block title %}{{ _("My Account") }}{% endblock %} -{% block header %}{{ _("My Account") }}{% endblock %} +{% block header %}

{{ _("My Account") }}

{% endblock %} {% block page_sidebar %} {% include "templates/pages/web_sidebar.html" %} {% endblock %} {% block page_content %} -
{{ _("My Account") }}
+
diff --git a/frappe/templates/pages/web_sidebar.py b/frappe/templates/pages/web_sidebar.py index 0a0d8846e2..87db14e26a 100644 --- a/frappe/templates/pages/web_sidebar.py +++ b/frappe/templates/pages/web_sidebar.py @@ -11,17 +11,4 @@ no_cache = 1 no_sitemap = 1 def get_context(context): - if frappe.session.user == "Guest": - frappe.throw(_("You need to be logged in to access this page."), frappe.PermissionError) - - context.my_account_list = frappe.get_all('Portal Menu Item', - fields=['title', 'route', 'reference_doctype'], filters={'enabled': 1}, order_by='idx asc') - - for item in context.my_account_list: - if item.reference_doctype: - item.count = len(frappe.templates.pages.list.get(item.reference_doctype).get('result')) - - - info = get_fullname_and_avatar(frappe.session.user) - context["fullname"] = info.fullname - context["user_image"] = info.avatar + pass diff --git a/frappe/templates/web.html b/frappe/templates/web.html index 645e20a022..26433613e9 100644 --- a/frappe/templates/web.html +++ b/frappe/templates/web.html @@ -1,44 +1,35 @@ {% extends base_template_path %} {% block hero %}{% endblock %} -{% block header %}{% endblock %} {% block content %}
-
-
-
- {% set full_width = (self.breadcrumbs() or self.header()) and not self.header_actions() -%} -
- {% if self.breadcrumbs() %} - - {% endif %} - -
- {% if not full_width %} -
-
- {% block header_actions %}{% endblock %} -
-
+ {% if page_or_generator=="Generator" %}data-doctype="{{ doctype }}"{% endif %}> +
+
+ {% if show_sidebar %} + {% endif %} -
-
- -
- {% if show_sidebar %} - - {% endif %} -
-
- {%- block page_content -%}{%- endblock -%} -
-
-
-
+
+
+ {% if self.breadcrumbs() %} + + {% endif %} +
+
{% block header %}{% endblock %}
+
+ {% block header_actions %}{% endblock %} +
+
+
+
+ {%- block page_content -%}{%- endblock -%} +
+
+
+
{% endblock %} diff --git a/frappe/website/context.py b/frappe/website/context.py index a09eb75809..de75863617 100644 --- a/frappe/website/context.py +++ b/frappe/website/context.py @@ -62,6 +62,9 @@ def build_context(context): if hasattr(module, "get_children"): context.children = module.get_children(context) + if context.show_sidebar: + add_sidebar_data(context) + add_metatags(context) # determine templates to be used @@ -71,6 +74,22 @@ def build_context(context): return context +def add_sidebar_data(context): + from frappe.utils.user import get_fullname_and_avatar + + context.my_account_list = frappe.get_all('Portal Menu Item', + fields=['title', 'route', 'reference_doctype'], filters={'enabled': 1}, order_by='idx asc') + + for item in context.my_account_list: + if item.reference_doctype: + item.count = len(frappe.templates.pages.list.get(item.reference_doctype).get('result')) + + + info = get_fullname_and_avatar(frappe.session.user) + context["fullname"] = info.fullname + context["user_image"] = info.avatar + + def add_metatags(context): tags = context.get("metatags") if tags: From 1e7ddf4404adbc5c26ee89fe7f5b82d4c5828a30 Mon Sep 17 00:00:00 2001 From: Kanchan Chauhan Date: Fri, 15 Apr 2016 16:18:03 +0530 Subject: [PATCH 4/5] Changes 3 --- frappe/templates/includes/web_sidebar.html | 13 +++---------- frappe/templates/pages/me.html | 11 +---------- frappe/templates/pages/me.py | 16 +--------------- frappe/website/js/website.js | 4 +++- 4 files changed, 8 insertions(+), 36 deletions(-) diff --git a/frappe/templates/includes/web_sidebar.html b/frappe/templates/includes/web_sidebar.html index adf2210853..d37ea0b2a5 100644 --- a/frappe/templates/includes/web_sidebar.html +++ b/frappe/templates/includes/web_sidebar.html @@ -1,14 +1,7 @@
-