From 37eb4eaffc2d3385887916f4927ec6e9ed68cab7 Mon Sep 17 00:00:00 2001 From: Rushabh Mehta Date: Tue, 13 Sep 2016 14:38:38 +0530 Subject: [PATCH] [wip] grid in web form (#2044) * [wip] grid in web form * [complete] webform in grid * [minor] configurable sidebar items in web form * [fix] tests * [style] --- .../email/doctype/newsletter/newsletter.json | 13 +- frappe/email/doctype/newsletter/newsletter.py | 3 + frappe/public/css/common.css | 7 + frappe/public/css/desk.css | 7 + frappe/public/css/website.css | 7 + frappe/public/less/common.less | 9 + frappe/templates/generators/web_form.html | 286 +++++++++++++----- frappe/website/context.py | 15 +- .../portal_menu_item/portal_menu_item.json | 10 +- .../website/doctype/web_form/test_web_form.py | 33 +- frappe/website/doctype/web_form/web_form.js | 40 ++- frappe/website/doctype/web_form/web_form.json | 77 ++++- frappe/website/doctype/web_form/web_form.py | 67 ++-- .../web_form_field/web_form_field.json | 24 +- 14 files changed, 447 insertions(+), 151 deletions(-) diff --git a/frappe/email/doctype/newsletter/newsletter.json b/frappe/email/doctype/newsletter/newsletter.json index 7b96fee6d7..0790dad9f2 100644 --- a/frappe/email/doctype/newsletter/newsletter.json +++ b/frappe/email/doctype/newsletter/newsletter.json @@ -2,7 +2,7 @@ "allow_copy": 0, "allow_import": 0, "allow_rename": 1, - "autoname": "field:subject", + "autoname": "", "beta": 0, "creation": "2013-01-10 16:34:31", "custom": 0, @@ -16,6 +16,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "email_group", "fieldtype": "Link", "hidden": 0, @@ -42,6 +43,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "subject", "fieldtype": "Small Text", "hidden": 0, @@ -66,6 +68,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "send_from", "fieldtype": "Data", @@ -91,6 +94,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "email_sent", "fieldtype": "Check", "hidden": 0, @@ -115,6 +119,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "newsletter_content", "fieldtype": "Section Break", "hidden": 0, @@ -139,6 +144,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "message", "fieldtype": "Text Editor", "hidden": 0, @@ -163,6 +169,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "", "fieldname": "test_the_newsletter", "fieldtype": "Section Break", @@ -188,6 +195,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "description": "A Lead with this email id should exist", "fieldname": "test_email_id", "fieldtype": "Data", @@ -213,6 +221,7 @@ "allow_on_submit": 0, "bold": 0, "collapsible": 0, + "columns": 0, "fieldname": "test_send", "fieldtype": "Button", "hidden": 0, @@ -247,7 +256,7 @@ "istable": 0, "max_attachments": 0, "menu_index": 0, - "modified": "2016-08-05 06:26:58.705579", + "modified": "2016-09-13 11:33:47.892910", "modified_by": "Administrator", "module": "Email", "name": "Newsletter", diff --git a/frappe/email/doctype/newsletter/newsletter.py b/frappe/email/doctype/newsletter/newsletter.py index ab0eb636b6..1fa4b3ead7 100755 --- a/frappe/email/doctype/newsletter/newsletter.py +++ b/frappe/email/doctype/newsletter/newsletter.py @@ -15,6 +15,9 @@ from frappe.email.queue import send from frappe.email.doctype.email_group.email_group import add_subscribers class Newsletter(Document): + def autoname(self): + self.name = self.subject + def onload(self): if self.email_sent: self.get("__onload").status_count = dict(frappe.db.sql("""select status, count(name) diff --git a/frappe/public/css/common.css b/frappe/public/css/common.css index 8700c5572f..d0079b691e 100644 --- a/frappe/public/css/common.css +++ b/frappe/public/css/common.css @@ -228,3 +228,10 @@ a.no-decoration:active { -webkit-filter: grayscale(100%); filter: grayscale(100%); } +.uppercase { + padding-bottom: 4px; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.4px; + color: #8D99A6; +} diff --git a/frappe/public/css/desk.css b/frappe/public/css/desk.css index 18a97a9e0f..cba476850e 100644 --- a/frappe/public/css/desk.css +++ b/frappe/public/css/desk.css @@ -228,6 +228,13 @@ a.no-decoration:active { -webkit-filter: grayscale(100%); filter: grayscale(100%); } +.uppercase { + padding-bottom: 4px; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.4px; + color: #8D99A6; +} .nav-pills a, .nav-pills a:hover { border-bottom: none; diff --git a/frappe/public/css/website.css b/frappe/public/css/website.css index f7b4759965..626906ffe2 100644 --- a/frappe/public/css/website.css +++ b/frappe/public/css/website.css @@ -228,6 +228,13 @@ a.no-decoration:active { -webkit-filter: grayscale(100%); filter: grayscale(100%); } +.uppercase { + padding-bottom: 4px; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.4px; + color: #8D99A6; +} .avatar { display: inline-block; vertical-align: middle; diff --git a/frappe/public/less/common.less b/frappe/public/less/common.less index 5a11c27611..ea8e5c4189 100644 --- a/frappe/public/less/common.less +++ b/frappe/public/less/common.less @@ -263,3 +263,12 @@ a.no-decoration& { -webkit-filter: grayscale(100%); filter: grayscale(100%); } + +.uppercase { + padding-bottom: 4px; + text-transform: uppercase; + font-size: 12px; + letter-spacing: 0.4px; + color: @text-muted; +} + diff --git a/frappe/templates/generators/web_form.html b/frappe/templates/generators/web_form.html index f58012fe0a..21495d8eaf 100644 --- a/frappe/templates/generators/web_form.html +++ b/frappe/templates/generators/web_form.html @@ -18,7 +18,7 @@ {{ _("Submit") if frappe.form_dict.new else _("Update") }} {% elif is_list %}
- + {{ _("New {0}").format(_(doc_type)) }}
@@ -50,17 +50,22 @@
{%- macro properties(field) %} - name="{{ field.fieldname }}" id="{{ field.fieldname }}" + name="{{ field.fieldname }}" {% if field.placeholder -%} placeholder="{{ _(field.placeholder) }}" {%- endif %} data-label="{{ _(field.label) }}" data-fieldtype="{{ field.fieldtype }}" + data-doctype="{{ field.parent }}" data-default="{{ field.default or "" }}" {{ (field.reqd and field.fieldtype!="Attach") and "required" or "" }} {{ field.read_only and "disabled" or "" }} {% endmacro -%} -{%- macro value(field) -%}{% if doc %}{{ - doc.get(field.fieldname) or - field.default or - frappe.form_dict.get(field.fieldname) or "" }}{% else %}{{ getCookie(field.options) or field.default or "" }}{% endif %}{%- endmacro -%} +{%- macro value(field, _doc) -%} + {%- if _doc -%} + {{ _doc.get(field.fieldname) or field.default + or frappe.form_dict.get(field.fieldname) or "" }} + {%- else -%} + {{ field.default or "" }} + {%- endif -%} +{%- endmacro -%} {%- macro help(field) -%} {% if field.description -%} @@ -73,7 +78,7 @@ {{ _(field.label) }} {% endmacro %} -{% macro render_field(field) %} +{% macro render_field(field, _doc=None, with_label=True) %} {% if field.hidden %} @@ -83,18 +88,18 @@ {% elif field.fieldtype in ("Data", "Date", "Datetime") %}
- {{ label(field) }} + {% if with_label %}{{ label(field) }}{% endif %} + value="{{ value(field, _doc) }}"> {{ help(field) }}
{% elif field.fieldtype=="Select" %}
- {{ label(field) }} + {% if with_label %}{{ label(field) }}{% endif %} @@ -102,24 +107,24 @@
{% elif field.fieldtype=="Text" %}
- {{ label(field) }} + {% if with_label %}{{ label(field) }}{% endif %} {{ help(field) }} + {{ properties(field) }}>{{ value(field, _doc) }}
{% elif field.fieldtype=="Attach" %}
- {{ label(field) }} - {% if value(field) -%} + {% if with_label %}{{ label(field) }}{% endif %} + {% if value(field, _doc) -%}

- {{ doc.get(field.fieldname) }} + {{ _doc.get(field.fieldname) }}

{%- endif %} -

+

@@ -128,18 +133,65 @@ {% elif field.fieldtype=="Check" %}
+ {% if with_label %} + {% endif %} {{ help(field) }}
{% endif %} {% endmacro %} +{% macro render_row(field, d=None, hidden=False) %} + + {% for df in frappe.get_meta(field.options).fields %} + {% if df.in_list_view %} + <{{ 'th' if d==None else 'td' }} style="width: {{ (field.columns or 2) * 8.3333 }}%;"> + {% if d!=None %} + {{ render_field(df, d, False) }} + {% else %} + {{ df.label }} + {% endif %} + + {% endif %} + {% endfor %} + + {% if d!=None %} + + {% endif %} + + +{% endmacro %} + +{% macro render_table(field) %} +
+ + + {{ render_row(field) }} + + + {{ render_row(field, {}, True) }} + {% if doc.get(field.fieldname) %} + {% for d in doc.get(field.fieldname) %} + {{ render_row(field, d) }} + {% endfor %} + {% else %} + {{ render_row(field, {}) }} + {% endif %} + +
+
+

+{% endmacro %} +
@@ -153,23 +205,29 @@
{% endif %} - - {% if frappe.form_dict.name -%} - + {%- endif %} - {% for section in layout %} + {% for section in layout %} + {% if section.label %} +
{{ _(section.label) }}
+ {% endif %}
- {% for column in section %} -
+ {% for column in section.columns %} +
{% for field in column %} - {{ render_field(field) }} + {% if field.fieldtype=='Table' %} + {{ render_table(field) }} + {% else %} + {{ render_field(field, doc) }} + {% endif %} {% endfor %}
{% endfor %}
- {% endfor %} + {% endfor %} {% if allow_comments and not frappe.form_dict.new -%}
@@ -186,8 +244,10 @@