diff --git a/frappe/cli.py b/frappe/cli.py
index a8820f0b7b..8124c9d93b 100755
--- a/frappe/cli.py
+++ b/frappe/cli.py
@@ -207,7 +207,9 @@ def setup_utilities(parser):
parser.add_argument("--make_conf", nargs="*", metavar=("DB-NAME", "DB-PASSWORD"),
help="Create new conf.py file")
parser.add_argument("--make_custom_server_script", nargs=1, metavar="DOCTYPE",
- help="Create new conf.py file")
+ help="Create new custome server script")
+ parser.add_argument("--init_list", nargs=1, metavar="DOCTYPE",
+ help="Create new list.js and list.html files")
parser.add_argument("--set_admin_password", metavar='ADMIN-PASSWORD', nargs="*",
help="Set administrator password")
parser.add_argument("--request", metavar='URL-ARGS', nargs=1, help="Run request as admin")
@@ -534,6 +536,11 @@ def make_custom_server_script(doctype):
make_custom_server_script_file(doctype)
frappe.destroy()
+@cmd
+def init_list(doctype):
+ import frappe.core.doctype.doctype.doctype
+ frappe.core.doctype.doctype.doctype.init_list(doctype)
+
# clear
@cmd
def clear_cache():
diff --git a/frappe/core/doctype/doctype/boilerplate/controller_list.html b/frappe/core/doctype/doctype/boilerplate/controller_list.html
new file mode 100644
index 0000000000..7d36980f80
--- /dev/null
+++ b/frappe/core/doctype/doctype/boilerplate/controller_list.html
@@ -0,0 +1,33 @@
+
+
+
+ {{%= list.get_avatar_and_id(doc) %}}
+
+
+
+ {{%= doc.text %}}
+
+
+ {{% if(doc.check) {{ %}}
+
+
+
+ {{% }} %}}
+
+
+
+ {{%= doc.status %}}
+
+
+
+
+
+ {{% var completed = doc.completed, title = __("Completed") %}}
+ {{% include "templates/form_grid/includes/progress.html" %}}
+
+
diff --git a/frappe/core/doctype/doctype/boilerplate/controller_list.js b/frappe/core/doctype/doctype/boilerplate/controller_list.js
new file mode 100644
index 0000000000..7f4915b301
--- /dev/null
+++ b/frappe/core/doctype/doctype/boilerplate/controller_list.js
@@ -0,0 +1,4 @@
+frappe.listview_settings['{doctype}'] = {{
+ add_fields: ["status"],
+ filters:[["status","=", "Open"]]
+}};
diff --git a/frappe/core/doctype/doctype/doctype.py b/frappe/core/doctype/doctype/doctype.py
index aa76e9cd44..d6ea379ea8 100644
--- a/frappe/core/doctype/doctype/doctype.py
+++ b/frappe/core/doctype/doctype/doctype.py
@@ -13,6 +13,7 @@ from frappe.model.document import Document
from frappe.model.db_schema import type_map
from frappe.core.doctype.property_setter.property_setter import make_property_setter
from frappe.core.doctype.notification_count.notification_count import delete_notification_count_for
+from frappe.modules import get_doc_path, get_module_path, scrub
form_grid_templates = {
"fields": "templates/form_grid/fields.html"
@@ -146,31 +147,11 @@ class DocType(Document):
import_from_files(record_list=[[self.module, 'doctype', self.name]])
def make_controller_template(self):
- from frappe.modules import get_doc_path, get_module_path, scrub
-
- target_path = get_doc_path(self.module, self.doctype, self.name)
-
- app = frappe.local.module_app[scrub(self.module)]
- if not app:
- frappe.throw(_("App not found"))
- app_publisher = frappe.get_hooks(hook="app_publisher", app_name=app)[0]
-
- def _make_boilerplate(template):
- template_name = template.replace("controller", scrub(self.name))
- target_file_path = os.path.join(target_path, template_name)
- if not os.path.exists(target_file_path):
-
- with open(target_file_path, 'w') as target:
- with open(os.path.join(get_module_path("core"), "doctype", "doctype",
- "boilerplate", template), 'r') as source:
- target.write(source.read().format(app_publisher=app_publisher,
- classname=self.name.replace(" ", ""), doctype=self.name))
-
- _make_boilerplate("controller.py")
+ make_boilerplate("controller.py", self)
if not (self.istable or self.issingle):
- _make_boilerplate("test_controller.py")
- _make_boilerplate("test_records.json")
+ make_boilerplate("test_controller.py", self)
+ make_boilerplate("test_records.json", self)
def make_amendable(self):
"""
@@ -392,3 +373,25 @@ def make_module_and_roles(doc, perm_fieldname="permissions"):
pass
else:
raise
+
+def init_list(doctype):
+ doc = frappe.get_meta(doctype)
+ make_boilerplate("controller_list.js", doc)
+ make_boilerplate("controller_list.html", doc)
+
+def make_boilerplate(template, doc):
+ target_path = get_doc_path(doc.module, doc.doctype, doc.name)
+ template_name = template.replace("controller", scrub(doc.name))
+ target_file_path = os.path.join(target_path, template_name)
+
+ app = frappe.local.module_app[scrub(doc.module)]
+ if not app:
+ frappe.throw(_("App not found"))
+ app_publisher = frappe.get_hooks(hook="app_publisher", app_name=app)[0]
+
+ if not os.path.exists(target_file_path):
+ with open(target_file_path, 'w') as target:
+ with open(os.path.join(get_module_path("core"), "doctype", "doctype",
+ "boilerplate", template), 'r') as source:
+ target.write(source.read().format(app_publisher=app_publisher,
+ classname=doc.name.replace(" ", ""), doctype=doc.name))
diff --git a/frappe/public/js/frappe/views/listview.js b/frappe/public/js/frappe/views/listview.js
index 0ef6d00da7..ddab0a8775 100644
--- a/frappe/public/js/frappe/views/listview.js
+++ b/frappe/public/js/frappe/views/listview.js
@@ -322,11 +322,16 @@ frappe.views.ListView = Class.extend({
}
// title
+ var full_title = data[this.title_field || "name"], title = full_title;
+ if(full_title.length > 40) {
+ title = full_title.slice(0, 40) + "...";
+ }
html += repl('%(title)s', {
+ href="#Form/%(doctype)s/%(name)s" title="%(full_title)s">%(title)s', {
doctype: data.doctype,
name: encodeURIComponent(data.name),
- title: data[this.title_field || "name"]
+ title: title,
+ full_title: full_title,
});
this.title_offset_left += 5;