changeset c6257e8ce10b in sao:default
details: https://hg.tryton.org/sao?cmd=changeset&node=c6257e8ce10b
description:
Add creatable attribute on tree and form views
issue10929
review370201002
diffstat:
CHANGELOG | 2 ++
src/screen.js | 40 +++++++++++++++-------------------------
src/view.js | 1 +
src/view/calendar.js | 1 +
src/view/form.js | 7 +++++--
src/view/list_form.js | 7 +++++--
src/view/tree.js | 13 ++++++++++++-
7 files changed, 41 insertions(+), 30 deletions(-)
diffs (212 lines):
diff -r d17fdbfd65e3 -r c6257e8ce10b CHANGELOG
--- a/CHANGELOG Thu Dec 16 22:16:01 2021 +0100
+++ b/CHANGELOG Thu Dec 16 22:26:04 2021 +0100
@@ -1,3 +1,5 @@
+* Manage creatable attribute of view
+
Version 6.2.0 - 2021-11-01
* Bug fixes (see mercurial logs for details)
* Support grouping attribute
diff -r d17fdbfd65e3 -r c6257e8ce10b src/screen.js
--- a/src/screen.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/screen.js Thu Dec 16 22:26:04 2021 +0100
@@ -941,7 +941,7 @@
get number_of_views() {
return this.views.length + this.view_to_load.length;
},
- switch_view: function(view_type, view_id, display) {
+ switch_view: function(view_type, view_id, creatable, display) {
display = display === undefined ? true : display;
if ((view_id !== undefined) && (view_id !== null)) {
view_id = Number(view_id);
@@ -969,14 +969,17 @@
if (!this.current_view) {
return false;
}
- else if (!view_type && (view_id === null)) {
- return false;
+ var result = true;
+ if ((view_type !== undefined) && (view_type !== null)) {
+ result &= this.current_view.view_type == view_type;
}
- else if (view_id !== null) {
- return this.current_view.view_id == view_id;
- } else {
- return this.current_view.view_type == view_type;
+ if ((view_id !== undefined) && (view_id !== null)) {
+ result &= this.current_view.view_id == view_id;
}
+ if ((creatable !== undefined) && (creatable !== null)) {
+ result &= this.current_view.creatable == creatable;
+ }
+ return result;
}.bind(this);
var _switch = function() {
var set_container = function() {
@@ -995,21 +998,12 @@
}
}.bind(this));
}.bind(this);
- var continue_loop = function() {
- if (!view_type && (view_id === null)) {
- return false;
- }
- if (view_type && !view_id && !this.view_to_load.length) {
- return false;
- }
- return true;
- }.bind(this);
var set_current_view = function() {
this.current_view = this.views[this.views.length - 1];
}.bind(this);
var switch_current_view = (function() {
set_current_view();
- if (continue_loop()) {
+ if (!found()) {
return _switch();
} else {
return set_container();
@@ -1019,7 +1013,7 @@
return view.view_id == view_id;
};
- while (!found()) {
+ for (var n = 0; n < this.views.length +
this.view_to_load.length; n++) {
if (this.view_to_load.length) {
return this.load_next_view().then(switch_current_view);
} else if ((view_id !== null) &&
@@ -1031,7 +1025,7 @@
this.current_view = this.views[
(i + 1) % this.views.length];
}
- if (!continue_loop()) {
+ if (found()) {
break;
}
}
@@ -1461,13 +1455,9 @@
var prm = jQuery.when();
if (this.current_view.view_type == 'calendar') {
var selected_date = this.current_view.get_selected_date();
- prm = this.switch_view('form', undefined, false);
}
- if (this.current_view &&
- ((this.current_view.view_type == 'tree' &&
- !this.current_view.editable) ||
- this.current_view.view_type == 'graph')) {
- prm = this.switch_view('form', undefined, false);
+ if (this.current_view && !this.current_view.creatable) {
+ prm = this.switch_view('form', undefined, true, false);
}
return prm.then(function() {
if (!this.current_view.editable) {
diff -r d17fdbfd65e3 -r c6257e8ce10b src/view.js
--- a/src/view.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/view.js Thu Dec 16 22:26:04 2021 +0100
@@ -10,6 +10,7 @@
view_id: null,
modified: null,
editable: null,
+ creatable: null,
children_field: null,
xml_parser: null,
init: function(view_id, screen, xml) {
diff -r d17fdbfd65e3 -r c6257e8ce10b src/view/calendar.js
--- a/src/view/calendar.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/view/calendar.js Thu Dec 16 22:26:04 2021 +0100
@@ -83,6 +83,7 @@
/* Fullcalendar works with utc date, the default week start day depends on
the user language, the events dates are handled by moment object. */
editable: false,
+ creatable: false,
view_type: 'calendar',
xml_parser: Sao.View.CalendarXMLViewParser,
init: function(view_id, screen, xml) {
diff -r d17fdbfd65e3 -r c6257e8ce10b src/view/form.js
--- a/src/view/form.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/view/form.js Thu Dec 16 22:26:04 2021 +0100
@@ -275,6 +275,7 @@
Sao.View.Form = Sao.class_(Sao.View, {
editable: true,
+ creatable: true,
view_type: 'form',
xml_parser: Sao.View.FormXMLViewParser,
init: function(view_id, screen, xml) {
@@ -286,6 +287,9 @@
this.containers = [];
this.widget_id = 0;
Sao.View.Form._super.init.call(this, view_id, screen, xml);
+ if (this.attributes.creatable) {
+ this.creatable = Boolean(parseInt(this.attributes.creatable,
10));
+ }
},
get_fields: function() {
return Object.keys(this.widgets);
@@ -3456,8 +3460,7 @@
sequence, this.screen.new_position);
}
}.bind(this);
- if (this.screen.current_view.type == 'form' ||
- this.screen.current_view.editable) {
+ if (this.screen.current_view.creatable) {
this.screen.new_().then(update_sequence);
this.screen.current_view.el.prop('disabled', false);
} else {
diff -r d17fdbfd65e3 -r c6257e8ce10b src/view/list_form.js
--- a/src/view/list_form.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/view/list_form.js Thu Dec 16 22:26:04 2021 +0100
@@ -4,7 +4,6 @@
'use strict';
Sao.View.ListGroupViewForm = Sao.class_(Sao.View.Form, {
- editable: true,
get record() {
return this._record;
},
@@ -14,10 +13,14 @@
});
Sao.View.ListForm = Sao.class_(Sao.View, {
+ editable: true,
+ creatable: true,
view_type: 'list-form',
init: function(view_id, screen, xml) {
Sao.View.ListForm._super.init.call(this, view_id, screen, xml);
- this.editable = true;
+ if (this.attributes.creatable) {
+ this.creatable = Boolean(parseInt(this.attributes.creatable,
10));
+ }
this.form_xml = xml;
this.el = jQuery('<ul/>', {
diff -r d17fdbfd65e3 -r c6257e8ce10b src/view/tree.js
--- a/src/view/tree.js Thu Dec 16 22:16:01 2021 +0100
+++ b/src/view/tree.js Thu Dec 16 22:26:04 2021 +0100
@@ -281,6 +281,17 @@
return (parseInt(this.attributes.editable || 0, 10) &&
!this.screen.attributes.readonly);
},
+ get creatable() {
+ if (this.editable) {
+ if (this.attributes.creatable) {
+ return Boolean(parseInt(this.attributes.creatable, 10));
+ } else {
+ return true;
+ }
+ } else {
+ return false;
+ }
+ },
unfold: function() {
if (!this.expander) {
return;
@@ -2016,7 +2027,7 @@
this.tree.screen.model_name);
var limit = ((this.tree.screen.size_limit
!== null) &&
(model.length >=
this.tree.screen.size_limit));
- if (access.create && !limit) {
+ if (this.tree.creatable && access.create
&& !limit) {
prm.then(function() {
return this.tree.screen.new_();
}.bind(this))