changeset f035bbe07409 in sao:default
details: https://hg.tryton.org/sao?cmd=changeset;node=f035bbe07409
description:
Re-use FormXMLViewParser to parse board view
issue8313
review275591002
diffstat:
src/board.js | 177 +++++++++-------------------------------------------------
1 files changed, 28 insertions(+), 149 deletions(-)
diffs (201 lines):
diff -r 2df3f46934df -r f035bbe07409 src/board.js
--- a/src/board.js Thu Jun 27 14:34:56 2019 +0200
+++ b/src/board.js Mon Jul 08 17:15:51 2019 +0200
@@ -3,8 +3,33 @@
(function() {
'use strict';
+ Sao.View.BoardXMLViewParser = Sao.class_(Sao.View.FormXMLViewParser, {
+ _parse_board: function(node, attributes) {
+ var container = new Sao.View.Form.Container(
+ Number(node.getAttribute('col') || 4));
+ this.view.el.append(container.el);
+ this.parse_child(node, container);
+ if (this._containers.length > 0) {
+ throw 'AssertionError';
+ }
+ },
+ _parse_action: function(node, attributes) {
+ var action;
+ if (attributes.yexpand === undefined) {
+ attributes.yexpand = true;
+ }
+ if (attributes.yfill === undefined) {
+ attributes.yfill = true;
+ }
+ action = new Sao.View.Board.Action(attributes, this.view.context);
+ this.view.actions.push(action);
+ this.container.add(action, attributes);
+ },
+ });
+
Sao.View.Board = Sao.class_(Object, {
- init: function(view_xml, context) {
+ xml_parser: Sao.View.BoardXMLViewParser,
+ init: function(xml, context) {
var attributes, attribute, node, actions_prms;
this.context = context;
@@ -12,160 +37,14 @@
this.el = jQuery('<div/>', {
'class': 'board'
});
-
- attributes = {};
- node = view_xml.children()[0];
- for (var i = 0, len = node.attributes.length; i < len; i++) {
- attribute = node.attributes[i];
- attributes[attribute.name] = attribute.value;
- }
- this.attributes = attributes;
- this.el.append(this.parse(node).el);
+ new this.xml_parser(this, null, {}).parse(xml.children()[0]);
actions_prms = [];
- for (i = 0, len = this.actions.length; i < len; i++) {
+ for (var i = 0, len = this.actions.length; i < len; i++) {
actions_prms.push(this.actions[i].action_prm);
}
this.actions_prms = jQuery.when.apply(jQuery, actions_prms);
},
- _parse_node: function(child, container, attributes) {
- switch (child.tagName) {
- case 'image':
- break;
- case 'separator':
- this._parse_separator(child, container, attributes);
- break;
- case 'label':
- this._parse_label(child, container, attributes);
- break;
- case 'newline':
- container.add_row();
- break;
- case 'notebook':
- this._parse_notebook(child, container, attributes);
- break;
- case 'page':
- this._parse_page(child, container, attributes);
- break;
- case 'group':
- this._parse_group(child, container, attributes);
- break;
- case 'hpaned':
- this._parse_pane(child, container, attributes,
- 'horizontal');
- break;
- case 'vpaned':
- this._parse_pane(child, container, attributes,
- 'vertical');
- break;
- case 'child':
- this._parse_child(child, container, attributes);
- break;
- case 'action':
- this._parse_action(child, container, attributes);
- break;
- }
- },
- parse: function(node, container) {
- var _parse;
- if (!container) {
- container = new Sao.View.Form.Container(
- Number(node.getAttribute('col') || 4));
- }
- _parse = function(index, child) {
- var attributes, attribute;
- var i, len;
- attributes = {};
- for (i = 0, len = child.attributes.length; i < len; i++) {
- attribute = child.attributes[i];
- attributes[attribute.name] = attribute.value;
- }
- ['yexpand', 'yfill', 'xexpand', 'xfill', 'colspan',
- 'position'].forEach(function(name) {
- if (attributes[name]) {
- attributes[name] = Number(attributes[name]);
- }
- });
- this._parse_node(child, container, attributes);
- };
- jQuery(node).children().each(_parse.bind(this));
- return container;
- },
- _parse_separator: function(node, container, attributes) {
- var text, separator;
- text = attributes.string;
- separator = new Sao.view.Form.Separator(text, attributes);
- container.add(separator, attributes);
- },
- _parse_label: function(node, container, attributes) {
- var text, label;
- text = attributes.string;
- if (!text) {
- container.add(null, attributes);
- return;
- }
- label = new Sao.View.Form.Label(text, attributes);
- container.add(label, attributes);
- },
- _parse_notebook: function(node, container, attributes) {
- var notebook;
- if (attributes.yexpand === undefined) {
- attributes.yexpand = true;
- }
- if (attributes.yfill === undefined) {
- attributes.yfill = true;
- }
- notebook = new Sao.View.Form.Notebook(attributes);
- container.add(notebook, attributes);
- this.parse(node, container);
- },
- _parse_page: function(node, container, attributes) {
- var text;
- text = attributes.string;
- page = this.parse(node, container);
- page = new Sao.View.Form.Page(container.add(page.el, text),
- attributes);
- },
- _parse_group: function(node, container, attributes) {
- var group;
- group = new Sao.View.Form.Group(attributes);
- container.add(group, attributes);
- },
- _parse_pane: function(node, container, attributes, orientation) {
- var paned;
- if (attributes.yexpand === undefined) {
- attributes.yexpand = true;
- }
- if (attributes.yfill === undefined) {
- attributes.yfill = true;
- }
- paned = new Sao.common.Paned(orientation);
- container.add(paned, attributes);
- this.parse(node, paned);
- },
- _parse_child: function(node, paned, attributes) {
- var container, child1, child2;
- container = this.parse(node);
- child1 = paned.get_child1();
- if (child1.children().length > 0) {
- child2 = paned.get_child2();
- child2.append(container.el);
- } else {
- child1.append(container.el);
- }
- },
- _parse_action: function(node, container, attributes) {
- var action;
- if (attributes.yexpand === undefined) {
- attributes.yexpand = true;
- }
- if (attributes.yfill === undefined) {
- attributes.yfill = true;
- }
- action = new Sao.View.Board.Action(attributes, this.context);
- this.actions.push(action);
- container.add(action, attributes);
- },
reload: function() {
for (var i = 0; i < this.actions.length; i++) {
this.actions[i].display();