[ADD] basic quick_create UI in kanban view

bzr revid: xmo@openerp.com-20120416123359-l60csuz0jgx37f7c
This commit is contained in:
Xavier Morel 2012-04-16 14:33:59 +02:00
parent 53510b98e7
commit 5b20f124a5
3 changed files with 94 additions and 3 deletions

View File

@ -224,6 +224,30 @@
line-height: 1em;
}
.openerp .oe_kanban_add {
cursor: pointer;
position: absolute;
top: 6px;
right: 6px;
width: 16px;
height: 16px;
background: url(/web_kanban/static/src/img/plus-icon.png) no-repeat;
}
.openerp .oe_kanban_quick_create {
/* apply block formatting context */
overflow: hidden;
}
.openerp .oe_kanban_quick_create input {
display: block;
/* margins within width */
box-sizing: border-box;
width: 100%;
}
.openerp .oe_kanban_quick_create button {
float: right;
}
/* Custom colors are also present in kanban.js */
/* Custom color#0 */
.openerp .oe_kanban_color_0 .oe_kanban_color_bglight {

View File

@ -351,6 +351,12 @@ openerp.web_kanban.KanbanGroup = openerp.web.OldWidget.extend({
self.view.compute_groups_width();
return false;
});
this.$element.find('.oe_kanban_add').click(function () {
if (self.quick) { return; }
self.quick = new openerp.web_kanban.QuickCreate(this)
.on('added', self, self.proxy('quick_add'));
self.quick.appendTo(self.$element.find('.oe_kanban_group_header'));
});
this.$records.find('.oe_kanban_show_more').click(this.do_show_more);
if (this.state.folded) {
this.do_toggle_fold();
@ -373,12 +379,17 @@ openerp.web_kanban.KanbanGroup = openerp.web.OldWidget.extend({
'offset': self.dataset_offset += self.view.limit
}).then(this.do_add_records);
},
do_add_records: function(records) {
do_add_records: function(records, prepend) {
var self = this;
_.each(records, function(record) {
var rec = new openerp.web_kanban.KanbanRecord(self, record);
rec.insertBefore(self.$records.find('.oe_kanban_show_more'));
self.records.push(rec);
if (!prepend) {
rec.insertBefore(self.$records.find('.oe_kanban_show_more'));
self.records.push(rec);
} else {
rec.prependTo(self.$records);
self.records.unshift(rec);
}
});
this.$records.find('.oe_kanban_show_more').toggle(this.records.length < this.dataset.size())
.find('.oe_kanban_remaining').text(this.dataset.size() - this.records.length);
@ -401,6 +412,35 @@ openerp.web_kanban.KanbanGroup = openerp.web.OldWidget.extend({
self.view.dataset.write(record.id, { sequence : index });
});
}
},
/**
* Handles user event from nested quick creation view
*
* @param {String} name name to give to the new record
*/
quick_add: function (name) {
var context = {};
context['default_' + this.view.group_by] = this.value;
// FIXME: what if name_create fails?
new openerp.web.Model(this.dataset.model).call(
'name_create', [name], {context: new openerp.web.CompoundContext(
this.dataset.get_context(), context)})
.then(this.proxy('quick_created'))
},
/**
* Handles a non-erroneous response from name_create
*
* @param {(Id, String)} record name_get format for the newly created record
*/
quick_created: function (record) {
var id = record[0], self = this;
this.quick.destroy();
delete this.quick;
new openerp.web.Model(this.dataset.model).call(
'read', [[id], this.view.fields_keys], {})
.then(function (records) {
self.do_add_records(records, 'prepend');
});
}
});
@ -602,6 +642,28 @@ openerp.web_kanban.KanbanRecord = openerp.web.OldWidget.extend({
}
}
});
/**
* Quick creation view.
*
* Triggers a single event "added" with a single parameter "name", which is the
* name entered by the user
*
* @class
* @type {*}
*/
openerp.web_kanban.QuickCreate = openerp.web.Widget.extend({
template: 'KanbanView.quick_create',
start: function () {
var self = this;
this.$element.on('submit', function () {
self.trigger('added', self.$element.find('input').val());
return false;
});
return this._super();
}
});
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -20,6 +20,7 @@
<t t-if="widget.view.group_by">
<div class="oe_kanban_group_header">
<div class="oe_kanban_fold_icon"></div>
<div class="oe_kanban_add"></div>
<div class="oe_fold_column">
<div t-attf-class="oe_kanban_group_title #{widget.undefined_title ? 'oe_kanban_group_title_undefined' : ''}">
<t t-esc="widget.title"/>
@ -62,4 +63,8 @@
</tr>
</table>
</t>
<form t-name="KanbanView.quick_create" class="oe_kanban_quick_create">
<input/>
<button type="submit">Add</button>
</form>
</template>