[FIX] Statusbar buttons completely clickable, disabled current stage button.
bzr revid: vta@openerp.com-20120802135403-eh2jkpu5tp2i2psj
This commit is contained in:
commit
74b5da35f1
|
@ -3,8 +3,10 @@
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":
|
||||||
"""
|
"""
|
||||||
OpenERP Web core module.
|
OpenERP Web core module.
|
||||||
This module provides the core of the OpenERP Web Client.
|
========================
|
||||||
|
|
||||||
|
This module provides the core of the OpenERP Web Client.
|
||||||
""",
|
""",
|
||||||
"depends" : [],
|
"depends" : [],
|
||||||
'auto_install': True,
|
'auto_install': True,
|
||||||
|
|
|
@ -426,10 +426,13 @@ class DisableCacheMiddleware(object):
|
||||||
referer = environ.get('HTTP_REFERER', '')
|
referer = environ.get('HTTP_REFERER', '')
|
||||||
parsed = urlparse.urlparse(referer)
|
parsed = urlparse.urlparse(referer)
|
||||||
debug = parsed.query.count('debug') >= 1
|
debug = parsed.query.count('debug') >= 1
|
||||||
filtered_headers = [(k,v) for k,v in headers if not (k=='Last-Modified' or (debug and (k=='Cache-Control' or k=='Expires')))]
|
nh = dict(headers)
|
||||||
|
if 'Last-Modified' in nh: del nh['Last-Modified']
|
||||||
if debug:
|
if debug:
|
||||||
filtered_headers.append(('Cache-Control', 'no-cache'))
|
if 'Expires' in nh: del nh['Expires']
|
||||||
start_response(status, filtered_headers)
|
if 'Etag' in nh: del nh['Etag']
|
||||||
|
nh['Cache-Control'] = 'no-cache'
|
||||||
|
start_response(status, nh.items())
|
||||||
return self.app(environ, start_wrapped)
|
return self.app(environ, start_wrapped)
|
||||||
|
|
||||||
class Root(object):
|
class Root(object):
|
||||||
|
|
|
@ -997,6 +997,16 @@ class DataSet(openerpweb.Controller):
|
||||||
elif isinstance(kwargs[k], common.nonliterals.BaseDomain):
|
elif isinstance(kwargs[k], common.nonliterals.BaseDomain):
|
||||||
kwargs[k] = req.session.eval_domain(kwargs[k])
|
kwargs[k] = req.session.eval_domain(kwargs[k])
|
||||||
|
|
||||||
|
# Temporary implements future display_name special field for model#read()
|
||||||
|
if method == 'read' and kwargs.get('context') and kwargs['context'].get('future_display_name'):
|
||||||
|
if 'display_name' in args[1]:
|
||||||
|
names = req.session.model(model).name_get(args[0], **kwargs)
|
||||||
|
args[1].remove('display_name')
|
||||||
|
r = getattr(req.session.model(model), method)(*args, **kwargs)
|
||||||
|
for i in range(len(r)):
|
||||||
|
r[i]['display_name'] = names[i][1] or "%s#%d" % (model, names[i][0])
|
||||||
|
return r
|
||||||
|
|
||||||
return getattr(req.session.model(model), method)(*args, **kwargs)
|
return getattr(req.session.model(model), method)(*args, **kwargs)
|
||||||
|
|
||||||
@openerpweb.jsonrequest
|
@openerpweb.jsonrequest
|
||||||
|
|
|
@ -896,7 +896,8 @@ instance.web.Client = instance.web.Widget.extend({
|
||||||
this.$element.on('click', '.oe_dropdown_toggle', function(ev) {
|
this.$element.on('click', '.oe_dropdown_toggle', function(ev) {
|
||||||
ev.preventDefault();
|
ev.preventDefault();
|
||||||
var $toggle = $(this);
|
var $toggle = $(this);
|
||||||
var $menu = $toggle.parent().find('.oe_dropdown_menu');
|
var $menu = $toggle.siblings('.oe_dropdown_menu');
|
||||||
|
$menu = $menu.size() >= 1 ? $menu : $toggle.find('.oe_dropdown_menu');
|
||||||
var state = $menu.is('.oe_opened');
|
var state = $menu.is('.oe_opened');
|
||||||
setTimeout(function() {
|
setTimeout(function() {
|
||||||
// Do not alter propagation
|
// Do not alter propagation
|
||||||
|
|
|
@ -267,7 +267,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
if (this.$pager) {
|
if (this.$pager) {
|
||||||
this.$pager.show();
|
this.$pager.show();
|
||||||
}
|
}
|
||||||
this.$element.show().css('visibility', 'hidden');
|
|
||||||
this.$element.add(this.$buttons).removeClass('oe_form_dirty');
|
this.$element.add(this.$buttons).removeClass('oe_form_dirty');
|
||||||
|
|
||||||
var shown = this.has_been_loaded;
|
var shown = this.has_been_loaded;
|
||||||
|
@ -277,8 +276,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
// null index means we should start a new record
|
// null index means we should start a new record
|
||||||
return self.on_button_new();
|
return self.on_button_new();
|
||||||
}
|
}
|
||||||
return self.dataset.read_index(_.keys(self.fields_view.fields), {
|
var fields = _.keys(self.fields_view.fields);
|
||||||
context: { 'bin_size': true }
|
fields.push('display_name');
|
||||||
|
return self.dataset.read_index(fields, {
|
||||||
|
context: { 'bin_size': true, 'future_display_name' : true }
|
||||||
}).pipe(self.on_record_loaded);
|
}).pipe(self.on_record_loaded);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
@ -286,7 +287,6 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
if (options.editable) {
|
if (options.editable) {
|
||||||
self.to_edit_mode();
|
self.to_edit_mode();
|
||||||
}
|
}
|
||||||
self.$element.css('visibility', 'visible');
|
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
do_hide: function () {
|
do_hide: function () {
|
||||||
|
@ -302,7 +302,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
this._super();
|
this._super();
|
||||||
},
|
},
|
||||||
on_record_loaded: function(record) {
|
on_record_loaded: function(record) {
|
||||||
var self = this, defs = [];
|
var self = this, set_values = [];
|
||||||
if (!record) {
|
if (!record) {
|
||||||
this.set({ 'title' : undefined });
|
this.set({ 'title' : undefined });
|
||||||
this.do_warn("Form", "The record could not be found in the database.", true);
|
this.do_warn("Form", "The record could not be found in the database.", true);
|
||||||
|
@ -310,19 +310,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
}
|
}
|
||||||
this.datarecord = record;
|
this.datarecord = record;
|
||||||
this._actualize_mode();
|
this._actualize_mode();
|
||||||
|
this.set({ 'title' : record.id ? record.display_name : "New record" });
|
||||||
var titleDef = $.Deferred();
|
|
||||||
if (record.id) {
|
|
||||||
this.dataset.name_get(record.id).then(function(names) {
|
|
||||||
self.set({ 'title' : names[0][1] });
|
|
||||||
}).always(function() {
|
|
||||||
titleDef.resolve();
|
|
||||||
});
|
|
||||||
} else {
|
|
||||||
this.set({ 'title' : "New record" });
|
|
||||||
titleDef.resolve();
|
|
||||||
}
|
|
||||||
defs.push(titleDef);
|
|
||||||
|
|
||||||
if (this.qweb) {
|
if (this.qweb) {
|
||||||
this.kill_current_form();
|
this.kill_current_form();
|
||||||
|
@ -334,9 +322,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
_(this.fields).each(function (field, f) {
|
_(this.fields).each(function (field, f) {
|
||||||
field._dirty_flag = false;
|
field._dirty_flag = false;
|
||||||
var result = field.set_value(self.datarecord[f] || false);
|
var result = field.set_value(self.datarecord[f] || false);
|
||||||
defs.push(result);
|
set_values.push(result);
|
||||||
});
|
});
|
||||||
return $.when.apply(null, defs).pipe(function() {
|
return $.when.apply(null, set_values).pipe(function() {
|
||||||
if (!record.id) {
|
if (!record.id) {
|
||||||
// New record: Second pass in order to trigger the onchanges
|
// New record: Second pass in order to trigger the onchanges
|
||||||
// respecting the fields order defined in the view
|
// respecting the fields order defined in the view
|
||||||
|
@ -635,8 +623,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
*/
|
*/
|
||||||
_actualize_mode: function(switch_to) {
|
_actualize_mode: function(switch_to) {
|
||||||
var mode = switch_to || this.get("actual_mode");
|
var mode = switch_to || this.get("actual_mode");
|
||||||
if (! this.datarecord.id)
|
if (! this.datarecord.id) {
|
||||||
mode = "create";
|
mode = "create";
|
||||||
|
}
|
||||||
this.set({actual_mode: mode});
|
this.set({actual_mode: mode});
|
||||||
},
|
},
|
||||||
check_actual_mode: function(source, options) {
|
check_actual_mode: function(source, options) {
|
||||||
|
@ -672,8 +661,9 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
},
|
},
|
||||||
on_button_save: function() {
|
on_button_save: function() {
|
||||||
var self = this;
|
var self = this;
|
||||||
return this.do_save().then(function(result) {
|
return this.do_save().then(function(result) {
|
||||||
self.to_view_mode();
|
self.to_view_mode();
|
||||||
|
self.fields.stage_id.render_list();
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
on_button_cancel: function(event) {
|
on_button_cancel: function(event) {
|
||||||
|
@ -693,6 +683,7 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
});
|
});
|
||||||
},
|
},
|
||||||
on_button_edit: function() {
|
on_button_edit: function() {
|
||||||
|
this.fields.stage_id.render_list();
|
||||||
return this.to_edit_mode();
|
return this.to_edit_mode();
|
||||||
},
|
},
|
||||||
on_button_create: function() {
|
on_button_create: function() {
|
||||||
|
@ -776,16 +767,16 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
self.set({'display_invalid_fields': false});
|
self.set({'display_invalid_fields': false});
|
||||||
var save_deferral;
|
var save_deferral;
|
||||||
if (!self.datarecord.id) {
|
if (!self.datarecord.id) {
|
||||||
//console.log("FormView(", self, ") : About to create", values);
|
// console.log("FormView(", self, ") : About to create", values);
|
||||||
save_deferral = self.dataset.create(values).pipe(function(r) {
|
save_deferral = self.dataset.create(values).pipe(function(r) {
|
||||||
return self.on_created(r, undefined, prepend_on_create);
|
return self.on_created(r, undefined, prepend_on_create);
|
||||||
}, null);
|
}, null);
|
||||||
} else if (_.isEmpty(values) && ! self.force_dirty) {
|
} else if (_.isEmpty(values) && ! self.force_dirty) {
|
||||||
//console.log("FormView(", self, ") : Nothing to save");
|
// console.log("FormView(", self, ") : Nothing to save");
|
||||||
save_deferral = $.Deferred().resolve({}).promise();
|
save_deferral = $.Deferred().resolve({}).promise();
|
||||||
} else {
|
} else {
|
||||||
self.force_dirty = false;
|
self.force_dirty = false;
|
||||||
//console.log("FormView(", self, ") : About to save", values);
|
// console.log("FormView(", self, ") : About to save", values);
|
||||||
save_deferral = self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) {
|
save_deferral = self.dataset.write(self.datarecord.id, values, {}).pipe(function(r) {
|
||||||
return self.on_saved(r);
|
return self.on_saved(r);
|
||||||
}, null);
|
}, null);
|
||||||
|
@ -868,8 +859,10 @@ instance.web.FormView = instance.web.View.extend(instance.web.form.FieldManagerM
|
||||||
if (self.dataset.index == null || self.dataset.index < 0) {
|
if (self.dataset.index == null || self.dataset.index < 0) {
|
||||||
return $.when(self.on_button_new());
|
return $.when(self.on_button_new());
|
||||||
} else {
|
} else {
|
||||||
return self.dataset.read_index(_.keys(self.fields_view.fields), {
|
var fields = _.keys(self.fields_view.fields);
|
||||||
context : { 'bin_size' : true }
|
fields.push('display_name');
|
||||||
|
return self.dataset.read_index(fields, {
|
||||||
|
context : { 'bin_size' : true, 'future_display_name' : true }
|
||||||
}).pipe(self.on_record_loaded);
|
}).pipe(self.on_record_loaded);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
@ -2074,7 +2067,7 @@ instance.web.form.FieldChar = instance.web.form.AbstractField.extend(instance.we
|
||||||
return this.get('value') === '' || this._super();
|
return this.get('value') === '' || this._super();
|
||||||
},
|
},
|
||||||
focus: function() {
|
focus: function() {
|
||||||
this.delay_focus(this.$element.find('input:first'));
|
this.$element.find('input:first')[0].focus();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -4681,18 +4674,22 @@ instance.web.form.FieldStatus = instance.web.form.AbstractField.extend({
|
||||||
var content = instance.web.qweb.render("FieldStatus.content", {widget: this, _:_});
|
var content = instance.web.qweb.render("FieldStatus.content", {widget: this, _:_});
|
||||||
this.$element.html(content);
|
this.$element.html(content);
|
||||||
clickable = this.node.attrs.clickable;
|
clickable = this.node.attrs.clickable;
|
||||||
if (clickable != undefined && (clickable.toLowerCase() === 'true' || clickable === "1")) {
|
if (clickable != undefined && (clickable.toLowerCase() === 'true' || clickable === "1") /*&&
|
||||||
|
this.view.get("actual_mode") !== 'view'*/) {
|
||||||
var elemts = this.$element.find('.oe_form_steps_item')
|
var elemts = this.$element.find('.oe_form_steps_item')
|
||||||
_.each(elemts, function(element){
|
_.each(elemts, function(element){
|
||||||
$item = $(element);
|
$item = $(element);
|
||||||
if($item.attr("data-id") != self.selected_value){
|
if ($item.attr("data-id") != self.selected_value) {
|
||||||
$item.attr("style", "cursor: pointer;");
|
$item.attr("style", "cursor: pointer;");
|
||||||
$item.click(function(event){
|
$item.click(function(event){
|
||||||
var data_id = parseInt($(this).attr("data-id"))
|
var data_id = parseInt($(this).attr("data-id"))
|
||||||
self.view.dataset.call('stage_set', [[self.view.datarecord.id],data_id]).then(function() {
|
self.view.dataset.call('stage_set', [[self.view.datarecord.id],data_id]).then(function() {
|
||||||
return self.view.reload();});
|
return self.view.reload();
|
||||||
|
});
|
||||||
});
|
});
|
||||||
};
|
} else {
|
||||||
|
$item.attr("disable", true).addClass("ui-state-disabled");
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}");
|
var colors = JSON.parse((this.node.attrs || {}).statusbar_colors || "{}");
|
||||||
|
|
|
@ -1032,8 +1032,8 @@
|
||||||
<t t-set="size" t-value="widget.to_show.length"/>
|
<t t-set="size" t-value="widget.to_show.length"/>
|
||||||
<t t-foreach="_.range(size)" t-as="i">
|
<t t-foreach="_.range(size)" t-as="i">
|
||||||
<li t-att-class="widget.to_show[i][0] === widget.selected_value ? 'oe_form_steps_active' : ''">
|
<li t-att-class="widget.to_show[i][0] === widget.selected_value ? 'oe_form_steps_active' : ''">
|
||||||
<!-- <button t-if="widget.view.get('actual_mode') === 'edit'" class="oe_form_steps_item" t-att-data-id="widget.to_show[i][0]"><t t-esc="widget.to_show[i][1]"/></button> -->
|
<button class="oe_form_steps_item" t-att-data-id="widget.to_show[i][0]"><t t-esc="widget.to_show[i][1]"/></button>
|
||||||
<span class="oe_form_steps_item" t-att-data-id="widget.to_show[i][0]"><t t-esc="widget.to_show[i][1]"/></span>
|
<!-- <span class="oe_form_steps_item" t-att-data-id="widget.to_show[i][0]"><t t-esc="widget.to_show[i][1]"/></span> -->
|
||||||
<img t-att-src='_s + "/web/static/src/img/form_steps.png"' class="oe_form_steps_arrow" t-if="i < size - 1"/>
|
<img t-att-src='_s + "/web/static/src/img/form_steps.png"' class="oe_form_steps_arrow" t-if="i < size - 1"/>
|
||||||
</li>
|
</li>
|
||||||
</t>
|
</t>
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Web Calendar",
|
"name": "Web Calendar",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web Calendar view.""",
|
||||||
"""
|
|
||||||
OpenERP Web Calendar view.
|
|
||||||
""",
|
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"depends": ['web'],
|
"depends": ['web'],
|
||||||
"js": [
|
"js": [
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Web Dashboard",
|
"name": "Web Dashboard",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web Dashboard view.""",
|
||||||
"""
|
|
||||||
OpenERP Web Dashboard view.
|
|
||||||
""",
|
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"depends": ['web'],
|
"depends": ['web'],
|
||||||
"js": [
|
"js": [
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name" : "OpenERP Web Diagram",
|
"name" : "OpenERP Web Diagram",
|
||||||
"category" : "Hidden",
|
"category" : "Hidden",
|
||||||
"description":'Openerp Web Diagram view',
|
"description":"""Openerp Web Diagram view.""",
|
||||||
"version" : "2.0",
|
"version" : "2.0",
|
||||||
"depends" : ["web"],
|
"depends" : ["web"],
|
||||||
"js": [
|
"js": [
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Web Gantt",
|
"name": "Web Gantt",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web Gantt chart view.""",
|
||||||
"""
|
|
||||||
OpenERP Web Gantt chart view.
|
|
||||||
""",
|
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"depends": ['web'],
|
"depends": ['web'],
|
||||||
"js": [
|
"js": [
|
||||||
|
|
|
@ -1,14 +1,16 @@
|
||||||
{
|
{
|
||||||
"name": "Graph Views",
|
"name": "Graph Views",
|
||||||
"category" : "Hidden",
|
"category" : "Hidden",
|
||||||
"description":"""Graph Views for Web Client
|
"description":"""
|
||||||
|
Graph Views for Web Client.
|
||||||
|
===========================
|
||||||
|
|
||||||
* Parse a <graph> view but allows changing dynamically the presentation
|
* Parse a <graph> view but allows changing dynamically the presentation
|
||||||
* Graph Types: pie, lines, areas, bars, radar
|
* Graph Types: pie, lines, areas, bars, radar
|
||||||
* Stacked/Not Stacked for areas and bars
|
* Stacked/Not Stacked for areas and bars
|
||||||
* Legends: top, inside (top/left), hidden
|
* Legends: top, inside (top/left), hidden
|
||||||
* Features: download as PNG or CSV, browse data grid, switch orientation
|
* Features: download as PNG or CSV, browse data grid, switch orientation
|
||||||
* Unlimited "Group By" levels (not stacked), two cross level analysis (stacked)
|
* Unlimited "Group By" levels (not stacked), two cross level analysis (stacked)
|
||||||
""",
|
""",
|
||||||
"version": "3.0",
|
"version": "3.0",
|
||||||
"depends": ['web'],
|
"depends": ['web'],
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Hello",
|
"name": "Hello",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web example module.""",
|
||||||
"""
|
|
||||||
OpenERP Web example module.
|
|
||||||
""",
|
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"depends": [],
|
"depends": [],
|
||||||
"js": ["static/*/*.js", "static/*/js/*.js"],
|
"js": ["static/*/*.js", "static/*/js/*.js"],
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name" : "Base Kanban",
|
"name" : "Base Kanban",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web kanban view.""",
|
||||||
"""
|
|
||||||
OpenERP Web kanban view.
|
|
||||||
""",
|
|
||||||
"version" : "2.0",
|
"version" : "2.0",
|
||||||
"depends" : ["web"],
|
"depends" : ["web"],
|
||||||
"js": [
|
"js": [
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name" : "OpenERP Web Mobile",
|
"name" : "OpenERP Web Mobile",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web Mobile.""",
|
||||||
"""
|
|
||||||
OpenERP Web Mobile.
|
|
||||||
""",
|
|
||||||
"version" : "2.0",
|
"version" : "2.0",
|
||||||
"depends" : [],
|
"depends" : [],
|
||||||
'auto_install': True,
|
'auto_install': True,
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name" : "Process",
|
"name" : "Process",
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"description":
|
"description":"""OpenERP Web process view.""",
|
||||||
"""
|
|
||||||
OpenERP Web process view.
|
|
||||||
""",
|
|
||||||
"depends" : ["web_diagram"],
|
"depends" : ["web_diagram"],
|
||||||
"js": [
|
"js": [
|
||||||
'static/lib/dracula/*.js',
|
'static/lib/dracula/*.js',
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
{
|
{
|
||||||
"name" : "OpenERP Web Web",
|
"name" : "OpenERP Web Web",
|
||||||
"category" : "Hidden",
|
"category" : "Hidden",
|
||||||
"description":'Openerp Web Web',
|
"description":"""Openerp Web Web.""",
|
||||||
"version" : "2.0",
|
"version" : "2.0",
|
||||||
"depends" : [],
|
"depends" : [],
|
||||||
"installable" : False,
|
"installable" : False,
|
||||||
|
|
|
@ -1,10 +1,7 @@
|
||||||
{
|
{
|
||||||
"name": "Tests",
|
"name": "Tests",
|
||||||
"category": "Hidden",
|
"category": "Hidden",
|
||||||
"description":
|
"description":"""OpenERP Web test suite.""",
|
||||||
"""
|
|
||||||
OpenERP Web test suite.
|
|
||||||
""",
|
|
||||||
"version": "2.0",
|
"version": "2.0",
|
||||||
"depends": [],
|
"depends": [],
|
||||||
"js": ["static/src/js/*.js"],
|
"js": ["static/src/js/*.js"],
|
||||||
|
|
Loading…
Reference in New Issue