Files
test/web_map/static/src/map_view/map_arch_parser.js
2023-04-14 17:42:23 +08:00

71 lines
2.3 KiB
JavaScript

/** @odoo-module **/
import { unique } from "@web/core/utils/arrays";
import { XMLParser } from "@web/core/utils/xml";
import { archParseBoolean } from "@web/views/utils";
export class MapArchParser extends XMLParser {
parse(arch) {
const archInfo = {
fieldNames: [],
fieldNamesMarkerPopup: [],
};
this.visitXML(arch, (node) => {
switch (node.tagName) {
case "map":
this.visitMap(node, archInfo);
break;
case "field":
this.visitField(node, archInfo);
break;
}
});
archInfo.fieldNames = unique(archInfo.fieldNames);
archInfo.fieldNamesMarkerPopup = unique(archInfo.fieldNamesMarkerPopup);
return archInfo;
}
visitMap(node, archInfo) {
archInfo.resPartnerField = node.getAttribute("res_partner");
archInfo.fieldNames.push(archInfo.resPartnerField);
if (node.hasAttribute("limit")) {
archInfo.limit = parseInt(node.getAttribute("limit"), 10);
}
if (node.hasAttribute("panel_title")) {
archInfo.panelTitle = node.getAttribute("panel_title");
}
if (node.hasAttribute("routing")) {
archInfo.routing = archParseBoolean(node.getAttribute("routing"));
}
if (node.hasAttribute("hide_title")) {
archInfo.hideTitle = archParseBoolean(node.getAttribute("hide_title"));
}
if (node.hasAttribute("hide_address")) {
archInfo.hideAddress = archParseBoolean(node.getAttribute("hide_address"));
}
if (node.hasAttribute("hide_name")) {
archInfo.hideName = archParseBoolean(node.getAttribute("hide_name"));
}
if (!archInfo.hideName) {
archInfo.fieldNames.push("display_name");
}
if (node.hasAttribute("default_order")) {
archInfo.defaultOrder = {
name: node.getAttribute("default_order"),
asc: true,
};
}
}
visitField(node, params) {
params.fieldNames.push(node.getAttribute("name"));
params.fieldNamesMarkerPopup.push({
fieldName: node.getAttribute("name"),
string: node.getAttribute("string"),
});
}
}