diff --git a/frappe/public/css/desk.css b/frappe/public/css/desk.css
index 743eba419f..10308e2207 100644
--- a/frappe/public/css/desk.css
+++ b/frappe/public/css/desk.css
@@ -40,7 +40,6 @@ a.form-link {
}
.text-ellipsis {
- display: inline-block;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
@@ -148,6 +147,10 @@ div#freeze {
/* list */
+.progress {
+ height: 10px;
+}
+
.doclist-row {
position: relative;
padding-top: 5px;
@@ -155,6 +158,18 @@ div#freeze {
border-bottom: "1px solid #eee";
}
+.doclist-row .progress {
+ margin-top: 12px;
+}
+
+.doclist-row .filterable {
+ cursor: pointer;
+}
+
+.doclist-row .label {
+ margin-right: 8px;
+}
+
.list-timestamp {
position: absolute;
right: 15px;
diff --git a/frappe/public/js/frappe/form/formatters.js b/frappe/public/js/frappe/form/formatters.js
index e1dc1caed4..a2ce2ead19 100644
--- a/frappe/public/js/frappe/form/formatters.js
+++ b/frappe/public/js/frappe/form/formatters.js
@@ -147,3 +147,15 @@ frappe.format = function(value, df, options, doc) {
return formatter(value, df, options, doc);
}
+
+frappe.get_format_helper = function(doc) {
+ var helper = {
+ get_formatted: function(fieldname) {
+ var df = frappe.meta.get_docfield(doc.doctype, fieldname);
+ if(!df) { console.log("fieldname not found: " + fieldname); };
+ return frappe.format(doc[fieldname], df, {inline:1}, doc);
+ }
+ };
+ $.extend(helper, doc);
+ return helper;
+}
diff --git a/frappe/public/js/frappe/form/grid.js b/frappe/public/js/frappe/form/grid.js
index 67ce0204fa..b363f53ccd 100644
--- a/frappe/public/js/frappe/form/grid.js
+++ b/frappe/public/js/frappe/form/grid.js
@@ -275,7 +275,10 @@ frappe.ui.form.GridRow = Class.extend({
if(this.grid.template) {
$('
').appendTo(this.row)
.html(frappe.render(this.grid.template, {
- doc:this.doc || null, frm:this.frm, row: this}));
+ doc: this.doc ? frappe.get_format_helper(this.doc) : null,
+ frm: this.frm,
+ row: this
+ }));
} else {
this.add_visible_columns();
}
@@ -318,7 +321,7 @@ frappe.ui.form.GridRow = Class.extend({
var df = this.static_display_template[ci][0];
var colsize = this.static_display_template[ci][1];
var txt = this.doc ?
- this.get_formatted(df.fieldname) :
+ frappe.format(this.doc[df.fieldname], df, null, this.doc) :
__(df.label);
if(this.doc && df.fieldtype === "Select") {
txt = __(txt);
@@ -542,7 +545,8 @@ frappe.ui.form.GridRow = Class.extend({
refresh_field: function(fieldname) {
var $col = this.row.find("[data-fieldname='"+fieldname+"']");
if($col.length) {
- $col.html(this.get_formatted(fieldname));
+ $col.html(frappe.format(this.doc[fieldname],
+ frappe.meta.get_docfield(this.doc.doctype, fieldname, this.frm.docname), null, this.frm.doc));
}
// in form
@@ -550,11 +554,6 @@ frappe.ui.form.GridRow = Class.extend({
this.fields_dict[fieldname].refresh();
}
},
- get_formatted: function(fieldname) {
- var df = frappe.meta.get_docfield(this.grid.doctype, fieldname, this.frm.docname);
- if(!df) { console.log("fieldname not found: " + fieldname); }
- return frappe.format(this.doc[fieldname], df, {inline:1}, this.doc);
- },
get_visible_columns: function(blacklist) {
var visible_columns = $.map(this.docfields, function(df) {
if(df.print_hide || df.hidden
diff --git a/frappe/public/js/frappe/views/doclistview.js b/frappe/public/js/frappe/views/doclistview.js
index c3a07fc050..22fae23c2a 100644
--- a/frappe/public/js/frappe/views/doclistview.js
+++ b/frappe/public/js/frappe/views/doclistview.js
@@ -85,6 +85,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
this.appframe.set_title_left(this.listview.settings.set_title_left);
}
this.make_help();
+ this.setup_filterable();
this.$page.find(".show_filters").css({"padding":"15px", "margin":"0px -15px"});
var me = this;
this.$w.on("render-complete", function() {
@@ -101,6 +102,23 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
this.$page.find(".layout-main-section").css({"min-height": h_side});
},
+ setup_filterable: function() {
+ var me = this;
+ this.$page.on("click", ".filterable", function(e) {
+ var filters = $(this).attr("data-filter").split("|");
+ $.each(filters, function(i, f) {
+ f = f.split(",");
+ if(f[2]==="Today") {
+ f[2] = frappe.datetime.get_today();
+ } else if(f[2]=="User") {
+ f[2] = user;
+ }
+ me.filter_list.add_filter(me.doctype, f[0], f[1], f[2]);
+ });
+ me.run();
+ })
+ },
+
show_match_help: function() {
var me = this;
var match_rules = frappe.perm.get_match_rules(this.doctype);
@@ -296,6 +314,7 @@ frappe.views.DocListView = frappe.ui.Listing.extend({
return $(e).parents(".list-row:first").data('data');
});
},
+
delete_items: function() {
var me = this;
var dl = this.get_checked_items();
diff --git a/frappe/public/js/frappe/views/listview.js b/frappe/public/js/frappe/views/listview.js
index 6ce220b49e..e6362d84a6 100644
--- a/frappe/public/js/frappe/views/listview.js
+++ b/frappe/public/js/frappe/views/listview.js
@@ -46,7 +46,7 @@ frappe.views.ListView = Class.extend({
// add title field
if(this.meta.title_field) {
- this.title_field = meta.title_field;
+ this.title_field = this.meta.title_field;
add_field(this.meta.title_field);
}
@@ -181,17 +181,10 @@ frappe.views.ListView = Class.extend({
},
render_template: function (row, data) {
- var me = this,
- helper = {
- get_formatted: function(fieldname) {
- var df = frappe.meta.get_docfield(me.doctype, fieldname);
- if(!df) { console.log("fieldname not found: " + fieldname); };
- return frappe.format(data[fieldname], df, {inline:1}, data);
- }
- };
- $(frappe.render(this.template,
- { doc : data, list : this, row : helper}))
- .appendTo($('
').appendTo(row));
+ $(frappe.render(this.template, {
+ doc: frappe.get_format_helper(data),
+ list: this
+ })).appendTo($('
').appendTo(row));
},
render_standard_columns: function(row, data) {
@@ -327,7 +320,7 @@ frappe.views.ListView = Class.extend({
}
// title
- html += repl('
%(title)s', {
doctype: data.doctype,
name: encodeURIComponent(data.name),