diff --git a/frappe/__init__.py b/frappe/__init__.py index 7c62ae1808..8617c528e4 100644 --- a/frappe/__init__.py +++ b/frappe/__init__.py @@ -372,7 +372,7 @@ def get_module(modulename): return importlib.import_module(modulename) def scrub(txt): - return txt.replace(' ','_').replace('-', '_').replace('/', '_').lower() + return txt.replace(' ','_').replace('-', '_').lower() def unscrub(txt): return txt.replace('_',' ').replace('-', ' ').title() diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py index 963c7dbb93..24693fe0b5 100644 --- a/frappe/core/doctype/doctype/doctype.py +++ b/frappe/core/doctype/doctype/doctype.py @@ -12,6 +12,10 @@ from frappe.model import no_value_fields from frappe.model.document import Document from frappe.model.db_schema import type_map +form_grid_templates = { + "fields": "templates/form_grid/fields.html" +} + class DocType(Document): def validate(self): if not frappe.conf.get("developer_mode"): diff --git a/frappe/modules/__init__.py b/frappe/modules/__init__.py index 9f8890c482..7a301db61f 100644 --- a/frappe/modules/__init__.py +++ b/frappe/modules/__init__.py @@ -44,10 +44,13 @@ def export_doc(doctype, name, module=None): def get_doctype_module(doctype): return frappe.db.get_value('DocType', doctype, 'module') or "core" +doctype_modules = {} def load_doctype_module(doctype, module=None, prefix=""): - if not module: - module = get_doctype_module(doctype) - return frappe.get_module(get_module_name(doctype, module, prefix)) + if not doctype in doctype_modules: + if not module: + module = get_doctype_module(doctype) + doctype_modules[doctype] = frappe.get_module(get_module_name(doctype, module, prefix)) + return doctype_modules[doctype] def get_module_name(doctype, module, prefix=""): from frappe.modules import scrub diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js index daefe582ac..163719b174 100644 --- a/frappe/public/js/frappe/form/grid.js +++ b/frappe/public/js/frappe/form/grid.js @@ -6,6 +6,11 @@ frappe.ui.form.Grid = Class.extend({ $.extend(this, opts); this.fieldinfo = {}; this.doctype = this.df.options; + this.template = null; + if(this.frm.meta.__form_grid_templates + && this.frm.meta.__form_grid_templates[this.df.fieldname]) { + this.template = this.frm.meta.__form_grid_templates[this.df.fieldname]; + } this.is_grid = true; }, make: function() { @@ -61,7 +66,7 @@ frappe.ui.form.Grid = Class.extend({ if(!force && this.data_rows_are_same(data)) { // soft refresh - this.header_row.refresh(); + this.header_row && this.header_row.refresh(); for(var i in this.grid_rows) { this.grid_rows[i].refresh(); } @@ -261,38 +266,27 @@ frappe.ui.form.GridRow = Class.extend({ }, make_static_display: function() { var me = this; - this.make_static_display_template(); this.row.empty(); - $('