@@ -106,6 +106,36 @@ | |||||
"set_only_once": 0, | "set_only_once": 0, | ||||
"unique": 0 | "unique": 0 | ||||
}, | }, | ||||
{ | |||||
"allow_bulk_edit": 0, | |||||
"allow_on_submit": 0, | |||||
"bold": 0, | |||||
"collapsible": 0, | |||||
"columns": 0, | |||||
"fieldname": "color", | |||||
"fieldtype": "Color", | |||||
"hidden": 0, | |||||
"ignore_user_permissions": 0, | |||||
"ignore_xss_filter": 0, | |||||
"in_filter": 0, | |||||
"in_global_search": 0, | |||||
"in_list_view": 1, | |||||
"in_standard_filter": 0, | |||||
"label": "Color", | |||||
"length": 0, | |||||
"no_copy": 0, | |||||
"permlevel": 0, | |||||
"precision": "", | |||||
"print_hide": 0, | |||||
"print_hide_if_no_value": 0, | |||||
"read_only": 0, | |||||
"remember_last_selected_value": 0, | |||||
"report_hide": 0, | |||||
"reqd": 0, | |||||
"search_index": 0, | |||||
"set_only_once": 0, | |||||
"unique": 0 | |||||
}, | |||||
{ | { | ||||
"allow_bulk_edit": 0, | "allow_bulk_edit": 0, | ||||
"allow_on_submit": 0, | "allow_on_submit": 0, | ||||
@@ -514,7 +544,7 @@ | |||||
"issingle": 0, | "issingle": 0, | ||||
"istable": 0, | "istable": 0, | ||||
"max_attachments": 0, | "max_attachments": 0, | ||||
"modified": "2017-07-13 17:44:54.369254", | |||||
"modified": "2017-09-05 12:54:58.044162", | |||||
"modified_by": "Administrator", | "modified_by": "Administrator", | ||||
"module": "Desk", | "module": "Desk", | ||||
"name": "ToDo", | "name": "ToDo", | ||||
@@ -231,7 +231,10 @@ frappe.views.ListRenderer = Class.extend({ | |||||
this.columns = this.columns.uniqBy(col => col.title); | this.columns = this.columns.uniqBy(col => col.title); | ||||
// Remove TextEditor field columns | // Remove TextEditor field columns | ||||
this.columns = this.columns.filter(col => col.fieldtype !== 'Text Editor') | |||||
this.columns = this.columns.filter(col => col.fieldtype !== 'Text Editor'); | |||||
// Remove color field | |||||
this.columns = this.columns.filter(col => col.fieldtype !== 'Color'); | |||||
// Limit number of columns to 4 | // Limit number of columns to 4 | ||||
this.columns = this.columns.slice(0, 4); | this.columns = this.columns.slice(0, 4); | ||||
@@ -84,6 +84,7 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({ | |||||
} | } | ||||
}); | }); | ||||
this.render_dropdown(); | this.render_dropdown(); | ||||
this.set_colors(); | |||||
}, | }, | ||||
render_dropdown: function() { | render_dropdown: function() { | ||||
@@ -105,8 +106,7 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({ | |||||
__(view_mode) + "</a></li>"; | __(view_mode) + "</a></li>"; | ||||
}); | }); | ||||
var $dropdown = $(dropdown) | var $dropdown = $(dropdown) | ||||
$dropdown.find(".dropdown-menu") | |||||
.append(dropdown_list); | |||||
$dropdown.find(".dropdown-menu").append(dropdown_list); | |||||
me.list_view.$page | me.list_view.$page | ||||
.find(`[data-list-renderer='Gantt'] > .list-row-right`) | .find(`[data-list-renderer='Gantt'] > .list-row-right`) | ||||
.css("margin-right", "15px").html($dropdown) | .css("margin-right", "15px").html($dropdown) | ||||
@@ -117,6 +117,30 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({ | |||||
}); | }); | ||||
}, | }, | ||||
set_colors: function() { | |||||
const classes = this.tasks | |||||
.map(t => t.custom_class) | |||||
.filter(c => c && c.startsWith('color-')); | |||||
let style = classes.map(c => { | |||||
const class_name = c.replace('#', ''); | |||||
const bar_color = '#' + c.substr(6); | |||||
const progress_color = frappe.ui.color.get_contrast_color(bar_color); | |||||
return ` | |||||
.gantt .bar-wrapper.${class_name} .bar { | |||||
fill: ${bar_color}; | |||||
} | |||||
.gantt .bar-wrapper.${class_name} .bar-progress { | |||||
fill: ${progress_color}; | |||||
} | |||||
`; | |||||
}).join(""); | |||||
style = `<style>${style}</style>`; | |||||
this.wrapper.prepend(style); | |||||
}, | |||||
prepare_tasks: function() { | prepare_tasks: function() { | ||||
var me = this; | var me = this; | ||||
var meta = frappe.get_meta(this.doctype); | var meta = frappe.get_meta(this.doctype); | ||||
@@ -147,11 +171,15 @@ frappe.views.GanttView = frappe.views.ListRenderer.extend({ | |||||
dependencies: item.depends_on_tasks || "" | dependencies: item.depends_on_tasks || "" | ||||
}; | }; | ||||
if(item.color && frappe.ui.color.validate_hex(item.color)) { | |||||
r['custom_class'] = 'color-' + item.color.substr(1); | |||||
} | |||||
if(item.is_milestone) { | if(item.is_milestone) { | ||||
r['custom_class'] = 'bar-milestone'; | r['custom_class'] = 'bar-milestone'; | ||||
}; | |||||
} | |||||
return r | |||||
return r; | |||||
}); | }); | ||||
}, | }, | ||||
get_item: function(name) { | get_item: function(name) { | ||||
@@ -190,7 +190,7 @@ frappe.provide("frappe.views"); | |||||
// cache original order | // cache original order | ||||
const _cards = this.cards.slice(); | const _cards = this.cards.slice(); | ||||
const _columns = this.columns.slice(); | const _columns = this.columns.slice(); | ||||
frappe.call({ | frappe.call({ | ||||
method: method_prefix + "update_order", | method: method_prefix + "update_order", | ||||
args: { | args: { | ||||
@@ -363,7 +363,7 @@ frappe.provide("frappe.views"); | |||||
var set_filter_state = function () { | var set_filter_state = function () { | ||||
fluxify.doAction('set_filter_state'); | fluxify.doAction('set_filter_state'); | ||||
} | } | ||||
if(isBound(self.$kanban_board, 'after-refresh', set_filter_state)) return; | if(isBound(self.$kanban_board, 'after-refresh', set_filter_state)) return; | ||||
store.on('change:filters_modified', function (modified) { | store.on('change:filters_modified', function (modified) { | ||||
@@ -606,6 +606,20 @@ frappe.provide("frappe.views"); | |||||
'<i class="octicon octicon-comment"></i> ' + card.comment_count + | '<i class="octicon octicon-comment"></i> ' + card.comment_count + | ||||
'</span>'; | '</span>'; | ||||
html += get_assignees_html(); | html += get_assignees_html(); | ||||
if (card.color && frappe.ui.color.validate_hex(card.color)) { | |||||
const $div = $('<div>'); | |||||
$('<div></div>').css({ | |||||
width: '20px', | |||||
height: '5px', | |||||
borderRadius: '2px', | |||||
marginBottom: '4px', | |||||
backgroundColor: card.color | |||||
}).appendTo($div); | |||||
self.$card.find('.kanban-card.content').prepend($div); | |||||
} | |||||
self.$card.find(".kanban-card-meta").empty().append(html); | self.$card.find(".kanban-card-meta").empty().append(html); | ||||
} | } | ||||
@@ -942,6 +956,7 @@ frappe.provide("frappe.views"); | |||||
column: card[state.board.field_name], | column: card[state.board.field_name], | ||||
assigned_list: card.assigned_list || assigned_list, | assigned_list: card.assigned_list || assigned_list, | ||||
comment_count: card.comment_count || comment_count, | comment_count: card.comment_count || comment_count, | ||||
color: card.color || null, | |||||
doc: doc | doc: doc | ||||
}; | }; | ||||
} | } | ||||