diff --git a/addons/base/static/src/js/views.js b/addons/base/static/src/js/views.js index 5e1d6be4f61..1bc0f896ee6 100644 --- a/addons/base/static/src/js/views.js +++ b/addons/base/static/src/js/views.js @@ -219,7 +219,7 @@ openerp.base.ViewManager = openerp.base.Controller.extend({ }, /** * Event launched when a controller has been inited. - * + * * @param {String} view_type type of view * @param {String} view the inited controller */ @@ -525,7 +525,7 @@ openerp.base.View = openerp.base.Controller.extend({ * Directly set a view to use instead of calling fields_view_get. This method must * be called before start(). When an embedded view is set, underlying implementations * of openerp.base.View must use the provided view instead of any other one. - * + * * @param embedded_view A view. */ set_embedded_view: function(embedded_view) { @@ -541,7 +541,11 @@ openerp.base.views = new openerp.base.Registry(); openerp.base.json_node_to_xml = function(node, single_quote, indent) { // For debugging purpose, this function will convert a json node back to xml // Maybe usefull for xml view editor - if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) { + + if (typeof(node) === 'string') { + return node; + } + else if (typeof(node.tag) !== 'string' || !node.children instanceof Array || !node.attrs instanceof Object) { throw("Node a json node"); } indent = indent || 0; diff --git a/addons/base_kanban/__openerp__.py b/addons/base_kanban/__openerp__.py index 81f7228c1cb..df1fe37564c 100644 --- a/addons/base_kanban/__openerp__.py +++ b/addons/base_kanban/__openerp__.py @@ -3,8 +3,10 @@ "version" : "2.0", "depends" : ["base"], "js": [ - "static/src/js/kanban.js" + "static/src/js/kanban.js" + ], + "css": [ + "static/src/css/kanban.css" ], - "css": [], 'active': True } diff --git a/addons/base_kanban/static/src/js/kanban.js b/addons/base_kanban/static/src/js/kanban.js index f10b0d45c37..72b47b4c99e 100644 --- a/addons/base_kanban/static/src/js/kanban.js +++ b/addons/base_kanban/static/src/js/kanban.js @@ -1,4 +1,5 @@ openerp.base_kanban = function (openerp) { +QWeb.add_template('/base_kanban/static/src/xml/base_kanban.xml'); openerp.base.views.add('kanban', 'openerp.base_kanban.KanbanView'); openerp.base_kanban.KanbanView = openerp.base.View.extend({ @@ -8,22 +9,73 @@ openerp.base_kanban.KanbanView = openerp.base.View.extend({ this.dataset = dataset; this.model = this.dataset.model; this.view_id = view_id; + this.element_id = element_id; }, start: function() { this.rpc("/base_kanban/kanbanview/load", {"model": this.model, "view_id": this.view_id}, this.on_loaded); }, - on_loaded: function(data) { + var self = this; var template_xml = ''; + _.each(data.fields_view.arch.children, function(child) { if (child.tag == "template"){ template_xml = openerp.base.json_node_to_xml(child, true) } }); - console.log(":template_xml:::",template_xml); + + if(template_xml){ + self.dataset.read_slice([], 0, false, function (records) { + self.on_show_data(records, template_xml); + }); + } }, + + on_show_data: function(records, template_xml) { + var self = this; + var new_qweb = new QWeb2.Engine(); + new_qweb.add_template('' + template_xml + '') + + self.$element.html(QWeb.render("KanbanBiew", {"records" :records})); + _.each(records, function(record) { + self.$element.find("#data_" + record.id).append(new_qweb.render('custom_template', record)); + }); + + this.$element.find(".column").sortable({ + connectWith: ".column" + }); + this.$element.find(".portlet").addClass("ui-widget ui-widget-content ui-helper-clearfix ui-corner-all") + .find(".portlet-header") + .addClass("ui-widget-header ui-corner-all") + .prepend( "") + .end() + .find( ".portlet-content" ); + + this.$element.find(".portlet-header .ui-icon").click(function() { + $(this).toggleClass("ui-icon-minusthick").toggleClass("ui-icon-plusthick"); + $(this).parents(".portlet:first").find(".portlet-content").toggle(); + }); + this.$element.find('.portlet .ui-icon-closethick').click(this.on_close_action); + this.$element.find(".column").disableSelection(); + this.$element.find(".ui.item").css("background-color","#c3dAf9"); + + //self.$element.find( ".column" ).css("width",column_width); + }, + + on_close_action: function(e) { + $(e.currentTarget).parents('.portlet:first').remove(); + }, + + do_show: function () { + this.$element.show(); + }, + + do_hide: function () { + this.$element.hide(); + }, + }); };