bzr revid: nicolas.vanhoren@openerp.com-20120125131453-sblhwsshiahe4qsw
This commit is contained in:
niv-openerp 2012-01-25 14:14:53 +01:00
commit 921543ab32
16 changed files with 132 additions and 59 deletions

View File

@ -83,7 +83,7 @@ body { padding: 0; margin: 0; }
border-bottom-left-radius: 8px;
}
.openerp .oe_notification {
z-index: 1001;
z-index: 1050;
display: none;
}
.openerp .oe_notification * {
@ -2286,6 +2286,24 @@ ul.oe-arrow-list li.oe-arrow-list-selected .oe-arrow-list-after {
color: black;
}
/* Debug stuff */
.openerp .oe_debug_view_log {
font-size: 95%;
}
.openerp .oe_debug_view_log label {
display: block;
width: 49%;
text-align: right;
float: left;
font-weight: bold;
color: #009;
}
.openerp .oe_debug_view_log span {
display: block;
width: 49%;
float: right;
color: #333;
}
/* Internet Explorer Fix */
a img {

View File

@ -17,7 +17,7 @@ openerp.web.Notification = openerp.web.OldWidget.extend(/** @lends openerp.web.
this._super.apply(this, arguments);
this.$element.notify({
speed: 500,
expires: 1500
expires: 2500
});
},
notify: function(title, text) {

View File

@ -443,7 +443,9 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
};
var deferred = $.Deferred();
this.on_rpc_request();
this.rpc_function(url, payload).then(
var aborter = params.aborter;
delete params.aborter;
var request = this.rpc_function(url, payload).then(
function (response, textStatus, jqXHR) {
self.on_rpc_response();
if (!response.error) {
@ -469,6 +471,16 @@ openerp.web.Connection = openerp.web.CallbackEnabled.extend( /** @lends openerp.
};
deferred.reject(error, $.Event());
});
if (aborter) {
aborter.abort_last = function () {
if (!(request.isResolved() || request.isRejected())) {
deferred.fail(function (error, event) {
event.preventDefault();
});
request.abort();
}
};
}
// Allow deferred user to disable on_rpc_error in fail
deferred.fail(function() {
deferred.fail(function(error, event) {
@ -952,6 +964,8 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
init: function(parent) {
this._super();
this.session = openerp.connection;
this.$element = $(document.createElement(this.tag_name));
this.widget_parent = parent;
this.widget_children = [];
@ -1113,14 +1127,17 @@ openerp.web.Widget = openerp.web.CallbackEnabled.extend(/** @lends openerp.web.W
}
});
/**
* @deprecated use :class:`openerp.web.Widget`
*/
openerp.web.OldWidget = openerp.web.Widget.extend({
init: function(parent, /** @deprecated */ element_id) {
init: function(parent, element_id) {
this._super(parent);
this.element_id = element_id;
this.element_id = this.element_id || _.uniqueId('widget-');
var tmp = document.getElementById(this.element_id);
this.$element = tmp ? $(tmp) : $(document.createElement(this.tag_name));
},
}
});
openerp.web.TranslationDataBase = openerp.web.Class.extend(/** @lends openerp.web.TranslationDataBase# */{
@ -1206,7 +1223,7 @@ openerp.web.qweb.default_dict = {
'_' : _,
'_t' : openerp.web._t
};
openerp.web.qweb.format_text_node = function(s) {
openerp.web.qweb.format_text_node = function (s) {
// Note that 'this' is the Qweb Node of the text
var translation = this.node.parentNode.attributes['t-translation'];
if (translation && translation.value === 'off') {
@ -1218,13 +1235,13 @@ openerp.web.qweb.format_text_node = function(s) {
}
var tr = openerp.web._t(ts);
return tr === ts ? s : tr;
}
};
/** Jquery extentions */
$.Mutex = (function() {
function Mutex() {
this.def = $.Deferred().resolve();
};
}
Mutex.prototype.exec = function(action) {
var current = this.def;
var next = this.def = $.Deferred();

View File

@ -430,7 +430,9 @@ openerp.web.DataSet = openerp.web.OldWidget.extend( /** @lends openerp.web.Data
method: method,
domain_id: domain_index == undefined ? null : domain_index,
context_id: context_index == undefined ? null : context_index,
args: args || []
args: args || [],
// FIXME: API which does not suck for aborting requests in-flight
aborter: this
}, callback, error_callback);
},
/**

View File

@ -989,12 +989,17 @@ openerp.web.search.ManyToOneField = openerp.web.search.CharField.extend({
var self = this;
this.$element.autocomplete({
source: function (req, resp) {
if (self.abort_last) {
self.abort_last();
delete self.abort_last;
}
self.dataset.name_search(
req.term, self.attrs.domain, 'ilike', 8, function (data) {
resp(_.map(data, function (result) {
return {id: result[0], label: result[1]}
}));
});
self.abort_last = self.dataset.abort_last;
},
select: function (event, ui) {
self.id = ui.item.id;

View File

@ -4,8 +4,8 @@ var QWeb = openerp.web.qweb;
openerp.web.ViewEditor = openerp.web.OldWidget.extend({
init: function(parent, element_id, dataset, view, options) {
this._super(parent);
this.element_id = element_id
this.parent = parent
this.element_id = element_id;
this.parent = parent;
this.dataset = new openerp.web.DataSetSearch(this, 'ir.ui.view', null, null),
this.model = dataset.model;
this.xml_element_id = 0;
@ -107,7 +107,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
type_widget.dirty = true;
}
type_widget.start();
type_widget.set_value(value)
type_widget.set_value(value);
self.create_view_widget.push(type_widget);
});
},
@ -177,7 +177,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
'att_list': [],
'name': this.add_node_name(node),
'child_id': []
}
};
ViewNode.att_list.push(node.tagName.toLowerCase());
_.each(node.attributes, function(att) {
ViewNode.att_list.push([att.nodeName, att.nodeValue]);
@ -576,7 +576,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
var check = _.detect(one_object , function(obj) {
return id == obj.id;
});
if (check) {result.push(check);};
if (check) {result.push(check);}
_.each(one_object, function(obj) {
self.get_object_by_id(id,obj.child_id, result);
});
@ -817,7 +817,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
values.push('');
values.sort();
_PROPERTIES_ATTRIBUTES['widget']['selection'] = values;
var widgets = _.filter(_PROPERTIES_ATTRIBUTES, function(property){ return _.include(properties, property.name)})
var widgets = _.filter(_PROPERTIES_ATTRIBUTES, function (property) { return _.include(properties, property.name)});
_.each(widgets, function(widget) {
var type_widget = new (self.property.get_any([widget.type])) (self.edit_node_dialog, widget);
var value = _.detect(arch_val[0]['att_list'],function(res) {
@ -842,24 +842,23 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
var group_ids = [], group_names = {}, groups = [];
var res_groups = new openerp.web.DataSetSearch(this,'res.groups', null, null),
model_data = new openerp.web.DataSetSearch(self,'ir.model.data', null, null);
res_groups
.read_slice([], {})
.done(function(res_grp) {
_.each(res_grp,function(res){
res_groups.read_slice([], {}).done(function (res_grp) {
_.each(res_grp, function (res) {
var key = res.id;
group_names[key]=res.name;
group_names[key] = res.name;
group_ids.push(res.id);
});
model_data
.read_slice([],{domain:[['res_id', 'in', group_ids],['model','=','res.groups']]})
.done(function(model_grp) {
_.each(model_grp, function(res_group) {
groups.push([res_group.module + "." + res_group.name,group_names[res_group.res_id]]);
model_data.read_slice([], {domain: [
['res_id', 'in', group_ids],
['model', '=', 'res.groups']
]}).done(function (model_grp) {
_.each(model_grp, function (res_group) {
groups.push([res_group.module + "." + res_group.name, group_names[res_group.res_id]]);
});
self.groups = groups;
def.resolve();
});
})
});
return def.promise();
},
on_add_node: function(properties, fields){
@ -922,7 +921,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
render_new_field :function(id){
var self = this;
var action = {
context: {'default_model_id': id, 'manual':true},
context: {'default_model_id': id, 'manual': true},
res_model: "ir.model.fields",
views: [[false, 'form']],
type: 'ir.actions.act_window',
@ -930,7 +929,7 @@ openerp.web.ViewEditor = openerp.web.OldWidget.extend({
flags: {
action_buttons: true
}
}
};
var action_manager = new openerp.web.ActionManager(self);
$.when(action_manager.do_action(action)).then(function() {
var controller = action_manager.dialog_viewmanager.views['form'].controller;

View File

@ -125,7 +125,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
if (state.id && this.datarecord.id != state.id) {
var idx = this.dataset.get_id_index(state.id);
if (idx === null) {
this.dataset.ids.push(state.id)
this.dataset.ids.push(state.id);
this.dataset.index = this.dataset.ids.length - 1;
}
this.do_show();
@ -233,7 +233,7 @@ openerp.web.FormView = openerp.web.View.extend( /** @lends openerp.web.FormView#
do_update_pager: function(hide_index) {
var $pager = this.$form_header.find('div.oe_form_pager');
var index = hide_index ? '-' : this.dataset.index + 1;
$pager.find('button').prop('disabled', this.dataset.ids.length < 2)
$pager.find('button').prop('disabled', this.dataset.ids.length < 2);
$pager.find('span.oe_pager_index').html(index);
$pager.find('span.oe_pager_count').html(this.dataset.ids.length);
},
@ -1873,6 +1873,10 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
var search_val = request.term;
var self = this;
if (this.abort_last) {
this.abort_last();
delete this.abort_last;
}
var dataset = new openerp.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_search(search_val, self.build_domain(), 'ilike',
@ -1912,13 +1916,14 @@ openerp.web.form.FieldMany2One = openerp.web.form.Field.extend({
response(values);
});
this.abort_last = dataset.abort_last;
},
_quick_create: function(name) {
var self = this;
var slow_create = function() {
var slow_create = function () {
self._change_int_value(null);
self._search_create_popup("form", undefined, {"default_name": name});
}
};
if (self.get_definition_options().quick_create === undefined || self.get_definition_options().quick_create) {
var dataset = new openerp.web.DataSetStatic(this, this.field.relation, self.build_context());
dataset.name_create(name, function(data) {
@ -2931,6 +2936,7 @@ openerp.web.form.FieldReference = openerp.web.form.Field.extend({
name: 'm2o',
widget: 'many2one'
}});
this.m2o.on_ui_change.add_last(this.on_ui_change);
},
on_nop: function() {
},

View File

@ -1,15 +0,0 @@
/*---------------------------------------------------------
* OpenERP web library
*---------------------------------------------------------*/
openerp.web.view_help = function(openerp) {
openerp.web.ProcessView = openerp.web.OldWidget.extend({
});
openerp.web.HelpView = openerp.web.OldWidget.extend({
});
};
// vim:et fdc=0 fdl=0 foldnestmax=3 fdm=syntax:

View File

@ -557,6 +557,20 @@ session.web.ViewManagerAction = session.web.ViewManager.extend(/** @lends oepner
var dialog = new session.web.Dialog(this, { title: _t("Fields View Get"), width: '95%' }).open();
$('<pre>').text(session.web.json_node_to_xml(current_view.fields_view.arch, true)).appendTo(dialog.$element);
break;
case 'perm_read':
var ids = current_view.get_selected_ids();
if (ids.length === 1) {
this.dataset.call('perm_read', [ids]).then(function(result) {
var dialog = new session.web.Dialog(this, {
title: _.str.sprintf(_t("View Log (%s)"), self.dataset.model),
width: 400
}, QWeb.render('ViewManagerDebugViewLog', {
perm : result[0],
format : session.web.format_value
})).open();
});
}
break;
case 'fields':
this.dataset.call_and_eval(
'fields_get', [false, {}], null, 1).then(function (fields) {
@ -1040,7 +1054,7 @@ session.web.TranslateDialog = session.web.Dialog.extend({
}
});
session.web.View = session.web.OldWidget.extend(/** @lends session.web.View# */{
session.web.View = session.web.Widget.extend(/** @lends session.web.View# */{
template: "EmptyComponent",
// name displayed in view switchers
display_name: '',

View File

@ -471,17 +471,39 @@
</t>
<t t-name="ViewManagerDebug">
<option value="">Debug View#<t t-esc="view.fields_view.view_id"/></option>
<option value="fvg">Fields View Get</option>
<option t-if="_.indexOf(['form', 'page'], view_manager.active_view) gt -1" value="perm_read" data-views="form,page">View Log (perm_read)</option>
<option value="fields">View Fields</option>
<option value="fvg">Fields View Get</option>
<t t-if="view_manager.session.uid === 1">
<option value="manage_views">Manage Views</option>
<option value="edit" data-model="ir.ui.view" t-att-data-id="view.fields_view.view_id">Edit <t t-esc="_.str.capitalize(view.fields_view.type)"/>View</option>
<option t-if="view_manager.searchview" value="edit" data-model="ir.ui.view" t-att-data-id="view_manager.searchview.view_id">Edit SearchView</option>
<option t-if="view_manager.action" value="edit" t-att-data-model="view_manager.action.type" t-att-data-id="view_manager.action.id">Edit Action</option>
<option value="customize_object">Customize Object</option>
<option value="edit_workflow">Edit Workflow</option>
<option value="customize_object">Customize Object</option>
</t>
</t>
<t t-name="ViewManagerDebugViewLog">
<div class="oe_debug_view_log">
<label>ID:</label>
<span><t t-esc="perm.id"/></span>
<label>XML ID:</label>
<span><t t-esc="perm.xmlid"/></span>
<label>Creation User:</label>
<span><t t-esc="format(perm.create_uid, { 'type' : 'many2one' }, '/')"/></span>
<label>Creation Date:</label>
<span><t t-esc="format(perm.create_date, { 'type' : 'datetime' }, '/')"/></span>
<label>Latest Modification by:</label>
<span><t t-esc="format(perm.write_uid, { 'type' : 'many2one' }, '/')"/></span>
<label>Latest Modification Date:</label>
<span><t t-esc="format(perm.write_date, { 'type' : 'datetime' }, '/')"/></span>
</div>
</t>
<t t-extend="ViewManager" t-name="One2Many.viewmanager">
<t t-jquery="span.oe_view_title_text" t-operation="replace"/>

View File

@ -381,7 +381,7 @@ openerp.web_calendar.CalendarView = openerp.web.View.extend({
this.do_ranged_search();
},
do_ranged_search: function() {
var self = this
var self = this;
scheduler.clearAll();
$.when(this.has_been_loaded, this.ready).then(function() {
self.dataset.read_slice(_.keys(self.fields), {

View File

@ -19,7 +19,7 @@
font-weight: bold;
text-transform: uppercase;
text-indent: 10px;
vertical-align: center;
vertical-align: middle;
border-bottom: 1px solid #e5e5e5;
background: white url("/web/static/src/img/box-a-header-a.gif") 0% 0% repeat-x;
}
@ -90,6 +90,11 @@
padding:0 3px;
}
.openerp .oe-dashboard .oe-listview th.oe-sortable .ui-icon {
height: 100%;
margin-top: -9px;
}
/* Layouts */
.openerp .oe-dashboard-layout_1 .oe-dashboard-column.index_0 {
width: 100%;

View File

@ -190,9 +190,9 @@ openerp.web.form.DashBoard = openerp.web.form.Widget.extend({
this.action_managers.push(am);
am.appendTo($action);
am.do_action(action);
am.do_action = function(action) {
am.do_action = function (action) {
self.do_action(action);
}
};
if (action_attrs.creatable && action_attrs.creatable !== 'false') {
var action_id = parseInt(action_attrs.creatable, 10);
$action.parent().find('button.oe_dashboard_button_create').click(function() {

View File

@ -78,7 +78,7 @@ openerp.web_kanban.KanbanView = openerp.web.View.extend({
node.tag = qweb_prefix;
node.attrs[qweb_prefix + '-esc'] = 'record.' + node.attrs['name'] + '.value';
this.extract_aggregates(node);
break
break;
case 'button':
case 'a':
var type = node.attrs.type || '';
@ -395,7 +395,7 @@ openerp.web_kanban.KanbanRecord = openerp.web.OldWidget.extend({
this.qweb_context = {
record: this.record,
widget: this
}
};
for (var p in this) {
if (_.str.startsWith(p, 'kanban_')) {
this.qweb_context[p] = _.bind(this[p], this);
@ -444,7 +444,7 @@ openerp.web_kanban.KanbanRecord = openerp.web.OldWidget.extend({
var self = this;
if (confirm(_t("Are you sure you want to delete this record ?"))) {
return $.when(this.view.dataset.unlink([this.id])).then(function() {
self.group.remove_record(self.id)
self.group.remove_record(self.id);
self.stop();
});
}

View File

@ -153,7 +153,7 @@ openerp.web_mobile.Shortcuts = openerp.web.OldWidget.extend({
start: function() {
var self = this;
this.rpc('/web/session/sc_list',{} ,function(res){
self.$element.html(self.render({'sc' : res}))
self.$element.html(self.render({'sc': res}));
self.$element.find("[data-role=header]").find('h1').html('Favourite');
self.$element.find("[data-role=header]").find('#home').click(function(){
$.mobile.changePage("#oe_menu", "slide", false, true);

View File

@ -169,7 +169,7 @@ openerp.web_process = function (openerp) {
// Node text
process_node_text = r.text(n.node.x, n.node.y, (n.node.name))
.attr({"fill": "#fff", "font-weight": "bold", "cursor": "pointer"});
process_node_text.translate((process_node.getBBox().width/ 2) + 5, 10)
process_node_text.translate((process_node.getBBox().width / 2) + 5, 10);
if(n.node.subflow) {
process_node_text.click(function() {
self.process_id = n.node.subflow[0];