Fix central node positioning issue

This commit is contained in:
Paulo Gustavo Veiga 2022-02-15 11:36:14 -08:00
parent e35e911d33
commit 88de302ab8
15 changed files with 524 additions and 738 deletions

View File

@ -20,7 +20,7 @@ import { Mindmap } from '../..';
import NodeModel from '../model/NodeModel';
import ModelCodeName from './ModelCodeName';
import XMLMindmapSerializer from './XMLMindmapSerializer';
import XMLSerializerPela from './XMLSerializerPela';
import XMLSerializerPela from './XMLSerializerTango';
class Beta2PelaMigrator implements XMLMindmapSerializer {
private _betaSerializer: XMLMindmapSerializer;

View File

@ -72,7 +72,7 @@ class Pela2TangoMigrator implements XMLMindmapSerializer {
}
}
private _fixPosition(mindmap: Mindmap) {
private _fixPosition(mindmap: Mindmap): void {
// Position was not required in previous versions. Try to synthesize one .
const centralNode = mindmap.getBranches()[0];
const children = centralNode.getChildren();
@ -83,7 +83,7 @@ class Pela2TangoMigrator implements XMLMindmapSerializer {
}
}
_fixNodePosition(node: NodeModel, parentPosition: {x:number, y:number}) {
private _fixNodePosition(node: NodeModel, parentPosition: { x: number, y: number }): void {
// Position was not required in previous versions. Try to synthesize one .
let position = node.getPosition();
if (!position) {

View File

@ -20,7 +20,6 @@ import ModelCodeName from './ModelCodeName';
import Beta2PelaMigrator from './Beta2PelaMigrator';
import Pela2TangoMigrator from './Pela2TangoMigrator';
import XMLSerializerBeta from './XMLSerializerBeta';
import XMLSerializerPela from './XMLSerializerPela';
import XMLSerializerTango from './XMLSerializerTango';
import Mindmap from '../model/Mindmap';
import XMLMindmapSerializer from './XMLMindmapSerializer';
@ -35,7 +34,7 @@ const codeToSerializer: { codeName: string, serializer, migrator }[] = [
},
{
codeName: ModelCodeName.PELA,
serializer: XMLSerializerPela,
serializer: XMLSerializerTango,
migrator: Beta2PelaMigrator,
},
{

View File

@ -1,519 +0,0 @@
/*
* Copyright [2021] [wisemapping]
*
* Licensed under WiseMapping Public License, Version 1.0 (the "License").
* It is basically the Apache License, Version 2.0 (the "License") plus the
* "powered by wisemapping" text requirement on every single page;
* you may not use this file except in compliance with the License.
* You may obtain a copy of the license at
*
* http://www.wisemapping.org/license
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { $assert, $defined, createDocument } from '@wisemapping/core-js';
import { Point } from '@wisemapping/web2d';
import Mindmap from '../model/Mindmap';
import { TopicShape } from '../model/INodeModel';
import ConnectionLine from '../ConnectionLine';
import FeatureModelFactory from '../model/FeatureModelFactory';
import NodeModel from '../model/NodeModel';
import RelationshipModel from '../model/RelationshipModel';
import XMLMindmapSerializer from './XMLMindmapSerializer';
import FeatureType from '../model/FeatureType';
class XMLSerializerPela implements XMLMindmapSerializer {
private static MAP_ROOT_NODE = 'map';
private _idsMap: Record<number, Element>;
toXML(mindmap: Mindmap): Document {
$assert(mindmap, 'Can not save a null mindmap');
const document = createDocument();
// Store map attributes ...
const mapElem = document.createElement('map');
const name = mindmap.getId();
if ($defined(name)) {
mapElem.setAttribute('name', this._rmXmlInv(name));
}
const version = mindmap.getVersion();
if ($defined(version)) {
mapElem.setAttribute('version', version);
}
document.appendChild(mapElem);
// Create branches ...
const topics = mindmap.getBranches();
topics.forEach((topic) => {
const topicDom = this._topicToXML(document, topic);
mapElem.appendChild(topicDom);
});
// Create Relationships
const relationships = mindmap.getRelationships();
relationships.forEach((relationship) => {
if (
mindmap.findNodeById(relationship.getFromNode()) !== null
&& mindmap.findNodeById(relationship.getToNode()) !== null
) {
// Isolated relationships are not persisted ....
const relationDom = XMLSerializerPela._relationshipToXML(document, relationship);
mapElem.appendChild(relationDom);
}
});
return document;
}
protected _topicToXML(document: Document, topic: NodeModel) {
const parentTopic = document.createElement('topic');
// Set topic attributes...
if (topic.getType() === 'CentralTopic') {
parentTopic.setAttribute('central', 'true');
} else {
const pos = topic.getPosition();
parentTopic.setAttribute('position', `${pos.x},${pos.y}`);
const order = topic.getOrder();
if (typeof order === 'number' && Number.isFinite(order)) {
parentTopic.setAttribute('order', order.toString());
}
}
const text = topic.getText();
if ($defined(text)) {
this._noteTextToXML(document, parentTopic, text);
}
const shape = topic.getShapeType();
if ($defined(shape)) {
parentTopic.setAttribute('shape', shape);
if (shape === TopicShape.IMAGE) {
const size = topic.getImageSize();
parentTopic.setAttribute(
'image',
`${size.width},${size.height}:${topic.getImageUrl()}`,
);
}
}
if (topic.areChildrenShrunken() && topic.getType() !== 'CentralTopic') {
parentTopic.setAttribute('shrink', 'true');
}
// Font properties ...
const id = topic.getId();
parentTopic.setAttribute('id', id.toString());
let font = '';
const fontFamily = topic.getFontFamily();
font += `${fontFamily || ''};`;
const fontSize = topic.getFontSize();
font += `${fontSize || ''};`;
const fontColor = topic.getFontColor();
font += `${fontColor || ''};`;
const fontWeight = topic.getFontWeight();
font += `${fontWeight || ''};`;
const fontStyle = topic.getFontStyle();
font += `${fontStyle || ''};`;
if (
$defined(fontFamily)
|| $defined(fontSize)
|| $defined(fontColor)
|| $defined(fontWeight)
|| $defined(fontStyle)
) {
parentTopic.setAttribute('fontStyle', font);
}
const bgColor = topic.getBackgroundColor();
if ($defined(bgColor)) {
parentTopic.setAttribute('bgColor', bgColor);
}
const brColor = topic.getBorderColor();
if ($defined(brColor)) {
parentTopic.setAttribute('brColor', brColor);
}
const metadata = topic.getMetadata();
if ($defined(metadata)) {
parentTopic.setAttribute('metadata', metadata);
}
// Serialize features ...
const features = topic.getFeatures();
features.forEach((feature) => {
const featureType = feature.getType();
const featureDom = document.createElement(featureType);
const attributes = feature.getAttributes();
const attributesKeys = Object.keys(attributes);
for (let attrIndex = 0; attrIndex < attributesKeys.length; attrIndex++) {
const key = attributesKeys[attrIndex];
const value = attributes[key];
if (key === 'text') {
const cdata = document.createCDATASection(this._rmXmlInv(value));
featureDom.appendChild(cdata);
} else {
featureDom.setAttribute(key, this._rmXmlInv(value));
}
}
parentTopic.appendChild(featureDom);
});
// CHILDREN TOPICS
const childTopics = topic.getChildren();
childTopics.forEach((childTopic) => {
const childDom = this._topicToXML(document, childTopic);
parentTopic.appendChild(childDom);
});
return parentTopic;
}
protected _noteTextToXML(document: Document, elem: Element, text: string) {
if (text.indexOf('\n') === -1) {
elem.setAttribute('text', this._rmXmlInv(text));
} else {
const textDom = document.createElement('text');
const cdata = document.createCDATASection(this._rmXmlInv(text));
textDom.appendChild(cdata);
elem.appendChild(textDom);
}
}
static _relationshipToXML(document: Document, relationship: RelationshipModel) {
const result = document.createElement('relationship');
result.setAttribute('srcTopicId', relationship.getFromNode().toString());
result.setAttribute('destTopicId', relationship.getToNode().toString());
const lineType = relationship.getLineType();
result.setAttribute('lineType', lineType.toString());
if (lineType === ConnectionLine.CURVED || lineType === ConnectionLine.SIMPLE_CURVED) {
if ($defined(relationship.getSrcCtrlPoint())) {
const srcPoint = relationship.getSrcCtrlPoint();
result.setAttribute(
'srcCtrlPoint',
`${Math.round(srcPoint.x)},${Math.round(srcPoint.y)}`,
);
}
if ($defined(relationship.getDestCtrlPoint())) {
const destPoint = relationship.getDestCtrlPoint();
result.setAttribute(
'destCtrlPoint',
`${Math.round(destPoint.x)},${Math.round(destPoint.y)}`,
);
}
}
result.setAttribute('endArrow', String(relationship.getEndArrow()));
result.setAttribute('startArrow', String(relationship.getStartArrow()));
return result;
}
loadFromDom(dom: Document, mapId: string) {
$assert(dom, 'dom can not be null');
$assert(mapId, 'mapId can not be null');
const rootElem = dom.documentElement;
// Is a wisemap?.
$assert(
rootElem.tagName === XMLSerializerPela.MAP_ROOT_NODE,
`This seem not to be a map document. Found tag: ${rootElem.tagName}`,
);
this._idsMap = {};
// Start the loading process ...
const version = rootElem.getAttribute('version') || 'pela';
const mindmap = new Mindmap(mapId, version);
// Add all the topics nodes ...
const childNodes = Array.from(rootElem.childNodes);
const topicsNodes = childNodes
.filter(
(child: ChildNode) => child.nodeType === 1 && (child as Element).tagName === 'topic',
)
.map((c) => c as Element);
topicsNodes.forEach((child) => {
const topic = this._deserializeNode(child, mindmap);
mindmap.addBranch(topic);
});
// Then all relationshops, they are connected to topics ...
const relationshipsNodes = childNodes
.filter(
(child: ChildNode) => child.nodeType === 1 && (child as Element).tagName === 'relationship',
)
.map((c) => c as Element);
relationshipsNodes.forEach((child) => {
try {
const relationship = XMLSerializerPela._deserializeRelationship(child, mindmap);
mindmap.addRelationship(relationship);
} catch (e) {
console.error(e);
}
});
// Clean up from the recursion ...
this._idsMap = null;
mindmap.setId(mapId);
return mindmap;
}
protected _deserializeNode(domElem: Element, mindmap: Mindmap) {
const type = domElem.getAttribute('central') != null ? 'CentralTopic' : 'MainTopic';
// Load attributes...
let id: number | null = null;
if ($defined(domElem.getAttribute('id'))) {
id = Number.parseInt(domElem.getAttribute('id'), 10);
}
if (this._idsMap[id]) {
id = null;
} else {
this._idsMap[id] = domElem;
}
const topic = mindmap.createNode(type, id);
// Set text property is it;s defined...
const text = domElem.getAttribute('text');
if ($defined(text) && text) {
topic.setText(text);
}
const fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle) && fontStyle) {
const font = fontStyle.split(';');
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[1]) {
topic.setFontSize(Number.parseInt(font[1], 10));
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
}
const shape = domElem.getAttribute('shape');
if ($defined(shape)) {
topic.setShapeType(shape);
if (shape === TopicShape.IMAGE) {
const image = domElem.getAttribute('image');
const size = image.substring(0, image.indexOf(':'));
const url = image.substring(image.indexOf(':') + 1, image.length);
topic.setImageUrl(url);
const split = size.split(',');
topic.setImageSize(Number.parseInt(split[0], 10), Number.parseInt(split[1], 10));
}
}
const bgColor = domElem.getAttribute('bgColor');
if ($defined(bgColor)) {
topic.setBackgroundColor(bgColor);
}
const borderColor = domElem.getAttribute('brColor');
if ($defined(borderColor)) {
topic.setBorderColor(borderColor);
}
const order = domElem.getAttribute('order');
if ($defined(order) && order !== 'NaN') {
// Hack for broken maps ...
topic.setOrder(parseInt(order, 10));
}
const isShrink = domElem.getAttribute('shrink');
// Hack: Some production maps has been stored with the central topic collapsed. This is a bug.
if ($defined(isShrink) && type !== 'CentralTopic') {
topic.setChildrenShrunken(Boolean(isShrink));
}
const position = domElem.getAttribute('position');
if ($defined(position)) {
const pos = position.split(',');
topic.setPosition(Number.parseInt(pos[0], 10), Number.parseInt(pos[1], 10));
}
const metadata = domElem.getAttribute('metadata');
if ($defined(metadata)) {
topic.setMetadata(metadata);
}
// Creating icons and children nodes
const children = Array.from(domElem.childNodes);
children.forEach((child) => {
if (child.nodeType === Node.ELEMENT_NODE) {
const elem = child as Element;
if (elem.tagName === 'topic') {
const childTopic = this._deserializeNode(elem, mindmap);
childTopic.connectTo(topic);
} else if (FeatureModelFactory.isSupported(elem.tagName)) {
// Load attributes ...
const namedNodeMap = elem.attributes;
const attributes: Record<string, string> = {};
for (let j = 0; j < namedNodeMap.length; j++) {
const attribute = namedNodeMap.item(j);
attributes[attribute.name] = attribute.value;
}
// Has text node ?.
const textAttr = XMLSerializerPela._deserializeTextAttr(elem);
if (textAttr) {
attributes.text = textAttr;
}
// Create a new element ....
const featureType = elem.tagName as FeatureType;
const feature = FeatureModelFactory.createModel(featureType, attributes);
topic.addFeature(feature);
} else if (elem.tagName === 'text') {
const nodeText = XMLSerializerPela._deserializeNodeText(child);
topic.setText(nodeText);
}
}
});
// Workaround: for some reason, some saved maps have holes in the order.
topic
.getChildren()
.forEach((child, index) => {
if (child.getOrder() !== index) {
child.setOrder(index);
console.log('Toppic with order sequence hole. Introducing auto recovery sequence fix.');
}
});
return topic;
}
static _deserializeTextAttr(domElem: Element): string {
let value = domElem.getAttribute('text');
if (!$defined(value)) {
const children = domElem.childNodes;
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (child.nodeType === Node.CDATA_SECTION_NODE) {
value = child.nodeValue;
}
}
} else {
// Notes must be decoded ...
value = unescape(value);
// Hack for empty nodes ...
if (value === '') {
value = ' ';
}
}
return value;
}
static _deserializeNodeText(domElem) {
const children = domElem.childNodes;
let value = null;
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (child.nodeType === Node.CDATA_SECTION_NODE) {
value = child.nodeValue;
}
}
return value;
}
static _deserializeRelationship(domElement, mindmap) {
const srcId = Number.parseInt(domElement.getAttribute('srcTopicId'), 10);
const destId = Number.parseInt(domElement.getAttribute('destTopicId'), 10);
const lineType = Number.parseInt(domElement.getAttribute('lineType'), 10);
const srcCtrlPoint = domElement.getAttribute('srcCtrlPoint');
const destCtrlPoint = domElement.getAttribute('destCtrlPoint');
// If for some reason a relationship lines has source and dest nodes the same, don't import it.
if (srcId === destId) {
throw new Error('Invalid relationship, dest and source are equals');
}
// Is the connections points valid ?. If it's not, do not load the relationship ...
if (mindmap.findNodeById(srcId) == null || mindmap.findNodeById(destId) == null) {
throw new Error('Transition could not created, missing node for relationship');
}
const model = mindmap.createRelationship(srcId, destId);
model.setLineType(lineType);
if ($defined(srcCtrlPoint) && srcCtrlPoint !== '') {
model.setSrcCtrlPoint(Point.fromString(srcCtrlPoint));
}
if ($defined(destCtrlPoint) && destCtrlPoint !== '') {
model.setDestCtrlPoint(Point.fromString(destCtrlPoint));
}
model.setEndArrow('false');
model.setStartArrow('true');
return model;
}
/**
* This method ensures that the output String has only
* valid XML unicode characters as specified by the
* XML 1.0 standard. For reference, please see
* <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
* standard</a>. This method will return an empty
* String if the input is null or empty.
*
* @param in The String whose non-valid characters we want to remove.
* @return The in String, stripped of non-valid characters.
*/
protected _rmXmlInv(str: string) {
if (str == null || str === undefined) return null;
let result = '';
for (let i = 0; i < str.length; i++) {
const c = str.charCodeAt(i);
if (
c === 0x9
|| c === 0xa
|| c === 0xd
|| (c >= 0x20 && c <= 0xd7ff)
|| (c >= 0xe000 && c <= 0xfffd)
|| (c >= 0x10000 && c <= 0x10ffff)
) {
result += str.charAt(i);
}
}
return result;
}
}
export default XMLSerializerPela;

View File

@ -15,13 +15,506 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import XMLSerializerPela from './XMLSerializerPela';
import { $assert, $defined, createDocument } from '@wisemapping/core-js';
import { Point } from '@wisemapping/web2d';
import Mindmap from '../model/Mindmap';
import { TopicShape } from '../model/INodeModel';
import ConnectionLine from '../ConnectionLine';
import FeatureModelFactory from '../model/FeatureModelFactory';
import NodeModel from '../model/NodeModel';
import RelationshipModel from '../model/RelationshipModel';
import XMLMindmapSerializer from './XMLMindmapSerializer';
import FeatureType from '../model/FeatureType';
/**
* This serializer works exactly the same way as for the former version Pela
*/
class XMLSerializerTango extends XMLSerializerPela {
class XMLSerializerTango implements XMLMindmapSerializer {
private static MAP_ROOT_NODE = 'map';
private _idsMap: Record<number, Element>;
toXML(mindmap: Mindmap): Document {
$assert(mindmap, 'Can not save a null mindmap');
const document = createDocument();
// Store map attributes ...
const mapElem = document.createElement('map');
const name = mindmap.getId();
if ($defined(name)) {
mapElem.setAttribute('name', this._rmXmlInv(name));
}
const version = mindmap.getVersion();
if ($defined(version)) {
mapElem.setAttribute('version', version);
}
document.appendChild(mapElem);
// Create branches ...
const topics = mindmap.getBranches();
topics.forEach((topic) => {
const topicDom = this._topicToXML(document, topic);
mapElem.appendChild(topicDom);
});
// Create Relationships
const relationships = mindmap.getRelationships();
relationships.forEach((relationship) => {
if (
mindmap.findNodeById(relationship.getFromNode()) !== null
&& mindmap.findNodeById(relationship.getToNode()) !== null
) {
// Isolated relationships are not persisted ....
const relationDom = XMLSerializerTango._relationshipToXML(document, relationship);
mapElem.appendChild(relationDom);
}
});
return document;
}
protected _topicToXML(document: Document, topic: NodeModel) {
const parentTopic = document.createElement('topic');
// Set topic attributes...
if (topic.getType() === 'CentralTopic') {
parentTopic.setAttribute('central', 'true');
} else {
const pos = topic.getPosition();
parentTopic.setAttribute('position', `${pos.x},${pos.y}`);
const order = topic.getOrder();
if (typeof order === 'number' && Number.isFinite(order)) {
parentTopic.setAttribute('order', order.toString());
}
}
const text = topic.getText();
if ($defined(text)) {
this._noteTextToXML(document, parentTopic, text);
}
const shape = topic.getShapeType();
if ($defined(shape)) {
parentTopic.setAttribute('shape', shape);
if (shape === TopicShape.IMAGE) {
const size = topic.getImageSize();
parentTopic.setAttribute(
'image',
`${size.width},${size.height}:${topic.getImageUrl()}`,
);
}
}
if (topic.areChildrenShrunken() && topic.getType() !== 'CentralTopic') {
parentTopic.setAttribute('shrink', 'true');
}
// Font properties ...
const id = topic.getId();
parentTopic.setAttribute('id', id.toString());
let font = '';
const fontFamily = topic.getFontFamily();
font += `${fontFamily || ''};`;
const fontSize = topic.getFontSize();
font += `${fontSize || ''};`;
const fontColor = topic.getFontColor();
font += `${fontColor || ''};`;
const fontWeight = topic.getFontWeight();
font += `${fontWeight || ''};`;
const fontStyle = topic.getFontStyle();
font += `${fontStyle || ''};`;
if (
$defined(fontFamily)
|| $defined(fontSize)
|| $defined(fontColor)
|| $defined(fontWeight)
|| $defined(fontStyle)
) {
parentTopic.setAttribute('fontStyle', font);
}
const bgColor = topic.getBackgroundColor();
if ($defined(bgColor)) {
parentTopic.setAttribute('bgColor', bgColor);
}
const brColor = topic.getBorderColor();
if ($defined(brColor)) {
parentTopic.setAttribute('brColor', brColor);
}
const metadata = topic.getMetadata();
if ($defined(metadata)) {
parentTopic.setAttribute('metadata', metadata);
}
// Serialize features ...
const features = topic.getFeatures();
features.forEach((feature) => {
const featureType = feature.getType();
const featureDom = document.createElement(featureType);
const attributes = feature.getAttributes();
const attributesKeys = Object.keys(attributes);
for (let attrIndex = 0; attrIndex < attributesKeys.length; attrIndex++) {
const key = attributesKeys[attrIndex];
const value = attributes[key];
if (key === 'text') {
const cdata = document.createCDATASection(this._rmXmlInv(value));
featureDom.appendChild(cdata);
} else {
featureDom.setAttribute(key, this._rmXmlInv(value));
}
}
parentTopic.appendChild(featureDom);
});
// CHILDREN TOPICS
const childTopics = topic.getChildren();
childTopics.forEach((childTopic) => {
const childDom = this._topicToXML(document, childTopic);
parentTopic.appendChild(childDom);
});
return parentTopic;
}
protected _noteTextToXML(document: Document, elem: Element, text: string) {
if (text.indexOf('\n') === -1) {
elem.setAttribute('text', this._rmXmlInv(text));
} else {
const textDom = document.createElement('text');
const cdata = document.createCDATASection(this._rmXmlInv(text));
textDom.appendChild(cdata);
elem.appendChild(textDom);
}
}
static _relationshipToXML(document: Document, relationship: RelationshipModel) {
const result = document.createElement('relationship');
result.setAttribute('srcTopicId', relationship.getFromNode().toString());
result.setAttribute('destTopicId', relationship.getToNode().toString());
const lineType = relationship.getLineType();
result.setAttribute('lineType', lineType.toString());
if (lineType === ConnectionLine.CURVED || lineType === ConnectionLine.SIMPLE_CURVED) {
if ($defined(relationship.getSrcCtrlPoint())) {
const srcPoint = relationship.getSrcCtrlPoint();
result.setAttribute(
'srcCtrlPoint',
`${Math.round(srcPoint.x)},${Math.round(srcPoint.y)}`,
);
}
if ($defined(relationship.getDestCtrlPoint())) {
const destPoint = relationship.getDestCtrlPoint();
result.setAttribute(
'destCtrlPoint',
`${Math.round(destPoint.x)},${Math.round(destPoint.y)}`,
);
}
}
result.setAttribute('endArrow', String(relationship.getEndArrow()));
result.setAttribute('startArrow', String(relationship.getStartArrow()));
return result;
}
loadFromDom(dom: Document, mapId: string) {
$assert(dom, 'dom can not be null');
$assert(mapId, 'mapId can not be null');
const rootElem = dom.documentElement;
// Is a wisemap?.
$assert(
rootElem.tagName === XMLSerializerTango.MAP_ROOT_NODE,
`This seem not to be a map document. Found tag: ${rootElem.tagName}`,
);
this._idsMap = {};
// Start the loading process ...
const version = rootElem.getAttribute('version') || 'pela';
const mindmap = new Mindmap(mapId, version);
// Add all the topics nodes ...
const childNodes = Array.from(rootElem.childNodes);
const topicsNodes = childNodes
.filter(
(child: ChildNode) => child.nodeType === 1 && (child as Element).tagName === 'topic',
)
.map((c) => c as Element);
topicsNodes.forEach((child) => {
const topic = this._deserializeNode(child, mindmap);
mindmap.addBranch(topic);
});
// Then all relationshops, they are connected to topics ...
const relationshipsNodes = childNodes
.filter(
(child: ChildNode) => child.nodeType === 1 && (child as Element).tagName === 'relationship',
)
.map((c) => c as Element);
relationshipsNodes.forEach((child) => {
try {
const relationship = XMLSerializerTango._deserializeRelationship(child, mindmap);
mindmap.addRelationship(relationship);
} catch (e) {
console.error(e);
}
});
// Clean up from the recursion ...
this._idsMap = null;
mindmap.setId(mapId);
return mindmap;
}
protected _deserializeNode(domElem: Element, mindmap: Mindmap) {
const type = domElem.getAttribute('central') != null ? 'CentralTopic' : 'MainTopic';
// Load attributes...
let id: number | null = null;
if ($defined(domElem.getAttribute('id'))) {
id = Number.parseInt(domElem.getAttribute('id'), 10);
}
if (this._idsMap[id]) {
id = null;
} else {
this._idsMap[id] = domElem;
}
const topic = mindmap.createNode(type, id);
// Set text property is it;s defined...
const text = domElem.getAttribute('text');
if ($defined(text) && text) {
topic.setText(text);
}
const fontStyle = domElem.getAttribute('fontStyle');
if ($defined(fontStyle) && fontStyle) {
const font = fontStyle.split(';');
if (font[0]) {
topic.setFontFamily(font[0]);
}
if (font[1]) {
topic.setFontSize(Number.parseInt(font[1], 10));
}
if (font[2]) {
topic.setFontColor(font[2]);
}
if (font[3]) {
topic.setFontWeight(font[3]);
}
if (font[4]) {
topic.setFontStyle(font[4]);
}
}
const shape = domElem.getAttribute('shape');
if ($defined(shape)) {
topic.setShapeType(shape);
if (shape === TopicShape.IMAGE) {
const image = domElem.getAttribute('image');
const size = image.substring(0, image.indexOf(':'));
const url = image.substring(image.indexOf(':') + 1, image.length);
topic.setImageUrl(url);
const split = size.split(',');
topic.setImageSize(Number.parseInt(split[0], 10), Number.parseInt(split[1], 10));
}
}
const bgColor = domElem.getAttribute('bgColor');
if ($defined(bgColor)) {
topic.setBackgroundColor(bgColor);
}
const borderColor = domElem.getAttribute('brColor');
if ($defined(borderColor)) {
topic.setBorderColor(borderColor);
}
const order = domElem.getAttribute('order');
if ($defined(order) && order !== 'NaN') {
// Hack for broken maps ...
topic.setOrder(parseInt(order, 10));
}
const isShrink = domElem.getAttribute('shrink');
// Hack: Some production maps has been stored with the central topic collapsed. This is a bug.
if ($defined(isShrink) && type !== 'CentralTopic') {
topic.setChildrenShrunken(Boolean(isShrink));
}
const position = domElem.getAttribute('position');
if ($defined(position)) {
const pos = position.split(',');
topic.setPosition(Number.parseInt(pos[0], 10), Number.parseInt(pos[1], 10));
}
const metadata = domElem.getAttribute('metadata');
if ($defined(metadata)) {
topic.setMetadata(metadata);
}
// Creating icons and children nodes
const children = Array.from(domElem.childNodes);
children.forEach((child) => {
if (child.nodeType === Node.ELEMENT_NODE) {
const elem = child as Element;
if (elem.tagName === 'topic') {
const childTopic = this._deserializeNode(elem, mindmap);
childTopic.connectTo(topic);
} else if (FeatureModelFactory.isSupported(elem.tagName)) {
// Load attributes ...
const namedNodeMap = elem.attributes;
const attributes: Record<string, string> = {};
for (let j = 0; j < namedNodeMap.length; j++) {
const attribute = namedNodeMap.item(j);
attributes[attribute.name] = attribute.value;
}
// Has text node ?.
const textAttr = XMLSerializerTango._deserializeTextAttr(elem);
if (textAttr) {
attributes.text = textAttr;
}
// Create a new element ....
const featureType = elem.tagName as FeatureType;
const feature = FeatureModelFactory.createModel(featureType, attributes);
topic.addFeature(feature);
} else if (elem.tagName === 'text') {
const nodeText = XMLSerializerTango._deserializeNodeText(child);
topic.setText(nodeText);
}
}
});
// Workaround: for some reason, some saved maps have holes in the order.
if (topic.getType() !== 'CentralTopic') {
topic
.getChildren()
.forEach((child, index) => {
if (child.getOrder() !== index) {
child.setOrder(index);
console.log('Toppic with order sequence hole. Introducing auto recovery sequence fix.');
}
});
}
return topic;
}
static _deserializeTextAttr(domElem: Element): string {
let value = domElem.getAttribute('text');
if (!$defined(value)) {
const children = domElem.childNodes;
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (child.nodeType === Node.CDATA_SECTION_NODE) {
value = child.nodeValue;
}
}
} else {
// Notes must be decoded ...
value = unescape(value);
// Hack for empty nodes ...
if (value === '') {
value = ' ';
}
}
return value;
}
static _deserializeNodeText(domElem) {
const children = domElem.childNodes;
let value = null;
for (let i = 0; i < children.length; i++) {
const child = children[i];
if (child.nodeType === Node.CDATA_SECTION_NODE) {
value = child.nodeValue;
}
}
return value;
}
static _deserializeRelationship(domElement, mindmap) {
const srcId = Number.parseInt(domElement.getAttribute('srcTopicId'), 10);
const destId = Number.parseInt(domElement.getAttribute('destTopicId'), 10);
const lineType = Number.parseInt(domElement.getAttribute('lineType'), 10);
const srcCtrlPoint = domElement.getAttribute('srcCtrlPoint');
const destCtrlPoint = domElement.getAttribute('destCtrlPoint');
// If for some reason a relationship lines has source and dest nodes the same, don't import it.
if (srcId === destId) {
throw new Error('Invalid relationship, dest and source are equals');
}
// Is the connections points valid ?. If it's not, do not load the relationship ...
if (mindmap.findNodeById(srcId) == null || mindmap.findNodeById(destId) == null) {
throw new Error('Transition could not created, missing node for relationship');
}
const model = mindmap.createRelationship(srcId, destId);
model.setLineType(lineType);
if ($defined(srcCtrlPoint) && srcCtrlPoint !== '') {
model.setSrcCtrlPoint(Point.fromString(srcCtrlPoint));
}
if ($defined(destCtrlPoint) && destCtrlPoint !== '') {
model.setDestCtrlPoint(Point.fromString(destCtrlPoint));
}
model.setEndArrow('false');
model.setStartArrow('true');
return model;
}
/**
* This method ensures that the output String has only
* valid XML unicode characters as specified by the
* XML 1.0 standard. For reference, please see
* <a href="http://www.w3.org/TR/2000/REC-xml-20001006#NT-Char">the
* standard</a>. This method will return an empty
* String if the input is null or empty.
*
* @param in The String whose non-valid characters we want to remove.
* @return The in String, stripped of non-valid characters.
*/
protected _rmXmlInv(str: string) {
if (str == null || str === undefined) return null;
let result = '';
for (let i = 0; i < str.length; i++) {
const c = str.charCodeAt(i);
if (
c === 0x9
|| c === 0xa
|| c === 0xd
|| (c >= 0x20 && c <= 0xd7ff)
|| (c >= 0xe000 && c <= 0xfffd)
|| (c >= 0x10000 && c <= 0x10ffff)
) {
result += str.charAt(i);
}
}
return result;
}
}
// eslint-disable-next-line camelcase
export default XMLSerializerTango;

View File

@ -1,4 +1,4 @@
<map name="bug2" version="tango"><topic central="true" text="SaberMás" id="1"><topic position="271,-39" order="0" text="Utilización de medios de expresión artística, digitales y analógicos" id="5"/><topic position="-181,-17" order="1" text="Precio también limitado: 100-120?" id="9"/><topic position="132,165" order="2" text="Talleres temáticos" id="2"><topic position="242,57" order="0" text="Naturaleza" id="13"><topic position="362,57" order="0" text="Animales, Plantas, Piedras" id="17"/></topic><topic position="245,84" order="1" text="Arqueología" id="21"/><topic position="236,138" order="2" text="Energía" id="18"/><topic position="244,192" order="3" text="Astronomía" id="16"/><topic position="245,219" order="4" text="Arquitectura" id="20"/><topic position="234,246" order="5" text="Cocina" id="11"/><topic position="234,273" order="6" text="Poesía" id="24"/><topic position="256,111" order="7" text="Culturas Antiguas" id="25"><topic position="378,111" order="0" text="Egipto, Grecia, China..." id="26"/></topic><topic position="248,165" order="8" text="Paleontología" id="38"/></topic><topic position="-168,-49" order="3" text="Duración limitada: 5-6 semanas" id="6"/><topic position="-181,16" order="4" text="Niños y niñas que quieren saber más" id="7"/><topic position="-184,-81" order="5" text="Alternativa a otras actividades de ocio" id="8"/><topic position="255,-6" order="6" text="Uso de la tecnología durante todo el proceso de aprendizaje" id="23"/><topic position="336,-137" order="7" text="Estructura PBL: aprendemos cuando buscamos respuestas a nuestras propias preguntas " id="3"/><topic position="238,-105" order="8" text="Trabajo basado en la experimentación y en la investigación" id="4"/><topic position="-201,48" order="9" text="De 8 a 12 años, sin separación por edades" id="10"/><topic position="-146,81" order="10" text="Máximo 10/1 por taller" id="19"/><topic position="211,-72" order="11" text="Actividades centradas en el contexto cercano" id="37"/><topic position="303,27" order="12" text="Flexibilidad en el uso de las lenguas de trabajo (inglés, castellano, esukara?)" id="22"/><topic position="206,-220" order="13" text="Complementamos el trabajo de la escuela" shape="rounded rectagle" id="27"><note><![CDATA[Todos los contenidos de los talleres están relacionados con el currículo de la enseñanza básica.
<map name="bug2" version="tango"><topic central="true" text="SaberMás" id="1"><topic position="271,-39" order="8" text="Utilización de medios de expresión artística, digitales y analógicos" id="5"/><topic position="-181,-17" order="5" text="Precio también limitado: 100-120?" id="9"/><topic position="132,165" order="14" text="Talleres temáticos" id="2"><topic position="242,57" order="0" text="Naturaleza" id="13"><topic position="362,57" order="0" text="Animales, Plantas, Piedras" id="17"/></topic><topic position="245,84" order="1" text="Arqueología" id="21"/><topic position="236,138" order="2" text="Energía" id="18"/><topic position="244,192" order="3" text="Astronomía" id="16"/><topic position="245,219" order="4" text="Arquitectura" id="20"/><topic position="234,246" order="5" text="Cocina" id="11"/><topic position="234,273" order="6" text="Poesía" id="24"/><topic position="256,111" order="7" text="Culturas Antiguas" id="25"><topic position="378,111" order="0" text="Egipto, Grecia, China..." id="26"/></topic><topic position="248,165" order="8" text="Paleontología" id="38"/></topic><topic position="-168,-49" order="3" text="Duración limitada: 5-6 semanas" id="6"/><topic position="-181,16" order="7" text="Niños y niñas que quieren saber más" id="7"/><topic position="-184,-81" order="1" text="Alternativa a otras actividades de ocio" id="8"/><topic position="255,-6" order="10" text="Uso de la tecnología durante todo el proceso de aprendizaje" id="23"/><topic position="336,-137" order="2" text="Estructura PBL: aprendemos cuando buscamos respuestas a nuestras propias preguntas " id="3"/><topic position="238,-105" order="4" text="Trabajo basado en la experimentación y en la investigación" id="4"/><topic position="-201,48" order="9" text="De 8 a 12 años, sin separación por edades" id="10"/><topic position="-146,81" order="11" text="Máximo 10/1 por taller" id="19"/><topic position="211,-72" order="6" text="Actividades centradas en el contexto cercano" id="37"/><topic position="303,27" order="12" text="Flexibilidad en el uso de las lenguas de trabajo (inglés, castellano, esukara?)" id="22"/><topic position="206,-220" order="0" text="Complementamos el trabajo de la escuela" shape="rounded rectagle" id="27"><note><![CDATA[Todos los contenidos de los talleres están relacionados con el currículo de la enseñanza básica.
A diferencia de la práctica tradicional, pretendemos ahondar en el conocimiento partiendo de lo que realmente interesa al niño o niña,
ayudándole a que encuentre respuesta a las preguntas que él o ella se plantea.

View File

@ -1,5 +1,5 @@
<map name="complex" version="tango"><topic central="true" text="PPM Plan" id="1" bgColor="#32e36a"><topic position="241,250" order="0" text="Business Development " id="4" fontStyle=";;;bold;;"/><topic position="226,-100" order="2" text="Backlog Management" shape="line" id="18" fontStyle=";;;bold;;"><link url="https://docs.google.com/a/freeform.ca/drawings/d/1mrtkVAN3_XefJJCgfxw4Va6xk9TVDBKXDt_uzyIF4Us/edit" urlType="url"/></topic><topic position="-193,50" order="1" text="Freeform IT" id="10" fontStyle=";;;bold;;"/><topic position="-271,-50" order="3" text="Client Project Management" id="204" fontStyle=";;;bold;;"/><topic position="-183,-150" order="5" text="Governance &amp; Executive" id="206" fontStyle=";;;bold;;"/><topic position="124,-200" order="4" text="Finance" id="5" fontStyle=";;;bold;;"/><topic position="176,-150" order="6" text="Administration" id="3" fontStyle=";;;bold;;"/><topic position="222,100" order="8" text="Human Resources" id="154" fontStyle=";;;bold;;"><note><![CDATA[HR Vision: Freeform Solutions is successful at its mission, sustainable as an organization AND is a great place to work.
HR Mission: To provide a positive HR service experience for applicants and employees, and collaborate with departments to recruit, develop, support, and retain diverse and talented employees who are the key to Freeforms reputation and success.]]></note></topic><topic position="-202,150" order="7" text="Freeform Hosting" id="16" fontStyle=";;;bold;;"/><topic position="197,50" order="10" text="Community Outreach" id="247" fontStyle=";;;bold;;"/><topic position="124,300" order="12" text="R&amp;D" id="261" fontStyle=";;;bold;;"><topic position="230,289" order="0" text="Goals" id="263"/><topic position="239,313" order="1" text="Formulize" id="264"/></topic><topic position="-158,0" order="9" text="Probono" id="268"><topic position="-273,1" order="0" id="269"/></topic></topic><topic position="1558,-249" text="Strategy 2: Talent Development" id="31"><note><![CDATA[Strategy #2: Support the talent development of our employees through professional development and learning and through improved performance management.]]></note><topic position="1817,-260" order="0" text="Strategic Priority 2a: Personal Plans" id="113"><note><![CDATA[Each employee will have a personal Professional Development Plan. ]]></note></topic><topic position="1869,-236" order="1" text="Strategic Priority 2b: External learning matches organ. goals" id="114"><note><![CDATA[Each department of Freeform will identify areas that need development to meet overall FS goals. Eg. Project Manager may identify needed improvement in a development tool. Or... Bus. Dev. may identify a new need in NFP that FS could fill within mandate, if training were provided. Professional Dev. priority will be given to proposals for development with clear ROIs.]]></note></topic><topic position="1831,-212" order="2" text="Strategic Priority 2c: Learning Environment" id="116"><note><![CDATA[Learning and innovation are an essential part of providing the best solutions to NFPs. Cost effective internal learning and time to explore innovation will be encouraged, provided they conform with organization goal and clear ROI is demonstrated.]]></note></topic><topic position="1766,-188" order="3" text="So That..." id="112"><icon id="object_rainbow"/><note><![CDATA[(So that... our employees have improved skills and knowledge, So that... they are highly competent and can work well in agile teams and feel fulfilled and self actualized... So that we can so the best work possible, for the least cost, in the shortest time for other NFPs, So that... NFPs can help those who need it.)]]></note></topic></topic><topic position="1952,168" text="Strategy 4: Inclusive, Positive Environment" id="105"><note><![CDATA[Strategy #4: Foster a diverse, inclusive community with a positive work environment.]]></note><topic position="2229,142" order="0" text="Strategic Priority 4a:Feedback" id="119"><note><![CDATA[Conduct regular organizational feedback assessments and collaborate to improve the work climate]]></note></topic><topic position="2246,166" order="1" text="Strategic Priority 4b: Anti Harassment" id="120"><note><![CDATA[Educate employees on the prevention of harassment and discrimination and productive ways to resolve conflict]]></note></topic><topic position="2228,190" order="2" text="Strategic Priority 4c: Diversity" id="121"><note><![CDATA[Insure we promote our commitment to diversity and non-discrimination through our actions and in our outreach and employee recruitment efforts]]></note></topic><topic position="2178,214" order="3" id="253"/><topic position="2191,238" order="4" text="So That..." id="118"><icon id="object_rainbow"/><note><![CDATA[(So that... we can reflect the diverse populations we serve AND ensure everyone feels safe, respected and included, So that... we better serve our diverse client organizations AND we are a great place to work )]]></note></topic></topic><topic position="1326,-642" text="Strategy 1: Recruit &amp; Retain" id="29"><note><![CDATA[Recruit and retain top talent commensurate with identified organizational capacity requirements ]]></note><topic position="1444,-781" order="0" text="So that..." id="28"><note><![CDATA[(So that... we find and keep good people, So that... they are highly competent and can work well in agile teams... So that we can so the best work possible, for the least cost, in the shortest time for other NFPs, So that... NFPs can help those who need it.)]]></note></topic><topic position="1539,-742" order="1" text="Strategic Priority 1a: Recruitment" id="37"><note><![CDATA[1. Identify and use proactive and effective recruitment strategies, ]]></note><topic position="1573,-752" order="0" text="Modify App Form" shrink="true" id="238"><note><![CDATA[Recently, I saw a few job posts sent through different community
<map name="complex" version="tango"><topic central="true" text="PPM Plan" id="1" bgColor="#32e36a"><topic position="241,250" order="10" text="Business Development " id="4" fontStyle=";;;bold;;"/><topic position="226,-100" order="2" text="Backlog Management" shape="line" id="18" fontStyle=";;;bold;;"><link url="https://docs.google.com/a/freeform.ca/drawings/d/1mrtkVAN3_XefJJCgfxw4Va6xk9TVDBKXDt_uzyIF4Us/edit" urlType="url"/></topic><topic position="-193,50" order="5" text="Freeform IT" id="10" fontStyle=";;;bold;;"/><topic position="-271,-50" order="3" text="Client Project Management" id="204" fontStyle=";;;bold;;"/><topic position="-183,-150" order="7" text="Governance &amp; Executive" id="206" fontStyle=";;;bold;;"/><topic position="124,-200" order="8" text="Finance" id="5" fontStyle=";;;bold;;"/><topic position="176,-150" order="6" text="Administration" id="3" fontStyle=";;;bold;;"/><topic position="222,100" order="4" text="Human Resources" id="154" fontStyle=";;;bold;;"><note><![CDATA[HR Vision: Freeform Solutions is successful at its mission, sustainable as an organization AND is a great place to work.
HR Mission: To provide a positive HR service experience for applicants and employees, and collaborate with departments to recruit, develop, support, and retain diverse and talented employees who are the key to Freeforms reputation and success.]]></note></topic><topic position="-202,150" order="9" text="Freeform Hosting" id="16" fontStyle=";;;bold;;"/><topic position="197,50" order="0" text="Community Outreach" id="247" fontStyle=";;;bold;;"/><topic position="124,300" order="12" text="R&amp;D" id="261" fontStyle=";;;bold;;"><topic position="230,289" order="0" text="Goals" id="263"/><topic position="239,313" order="1" text="Formulize" id="264"/></topic><topic position="-158,0" order="1" text="Probono" id="268"><topic position="-273,1" order="0" id="269"/></topic></topic><topic position="1558,-249" text="Strategy 2: Talent Development" id="31"><note><![CDATA[Strategy #2: Support the talent development of our employees through professional development and learning and through improved performance management.]]></note><topic position="1817,-260" order="0" text="Strategic Priority 2a: Personal Plans" id="113"><note><![CDATA[Each employee will have a personal Professional Development Plan. ]]></note></topic><topic position="1869,-236" order="1" text="Strategic Priority 2b: External learning matches organ. goals" id="114"><note><![CDATA[Each department of Freeform will identify areas that need development to meet overall FS goals. Eg. Project Manager may identify needed improvement in a development tool. Or... Bus. Dev. may identify a new need in NFP that FS could fill within mandate, if training were provided. Professional Dev. priority will be given to proposals for development with clear ROIs.]]></note></topic><topic position="1831,-212" order="2" text="Strategic Priority 2c: Learning Environment" id="116"><note><![CDATA[Learning and innovation are an essential part of providing the best solutions to NFPs. Cost effective internal learning and time to explore innovation will be encouraged, provided they conform with organization goal and clear ROI is demonstrated.]]></note></topic><topic position="1766,-188" order="3" text="So That..." id="112"><icon id="object_rainbow"/><note><![CDATA[(So that... our employees have improved skills and knowledge, So that... they are highly competent and can work well in agile teams and feel fulfilled and self actualized... So that we can so the best work possible, for the least cost, in the shortest time for other NFPs, So that... NFPs can help those who need it.)]]></note></topic></topic><topic position="1952,168" text="Strategy 4: Inclusive, Positive Environment" id="105"><note><![CDATA[Strategy #4: Foster a diverse, inclusive community with a positive work environment.]]></note><topic position="2229,142" order="0" text="Strategic Priority 4a:Feedback" id="119"><note><![CDATA[Conduct regular organizational feedback assessments and collaborate to improve the work climate]]></note></topic><topic position="2246,166" order="1" text="Strategic Priority 4b: Anti Harassment" id="120"><note><![CDATA[Educate employees on the prevention of harassment and discrimination and productive ways to resolve conflict]]></note></topic><topic position="2228,190" order="2" text="Strategic Priority 4c: Diversity" id="121"><note><![CDATA[Insure we promote our commitment to diversity and non-discrimination through our actions and in our outreach and employee recruitment efforts]]></note></topic><topic position="2178,214" order="3" id="253"/><topic position="2191,238" order="4" text="So That..." id="118"><icon id="object_rainbow"/><note><![CDATA[(So that... we can reflect the diverse populations we serve AND ensure everyone feels safe, respected and included, So that... we better serve our diverse client organizations AND we are a great place to work )]]></note></topic></topic><topic position="1326,-642" text="Strategy 1: Recruit &amp; Retain" id="29"><note><![CDATA[Recruit and retain top talent commensurate with identified organizational capacity requirements ]]></note><topic position="1444,-781" order="0" text="So that..." id="28"><note><![CDATA[(So that... we find and keep good people, So that... they are highly competent and can work well in agile teams... So that we can so the best work possible, for the least cost, in the shortest time for other NFPs, So that... NFPs can help those who need it.)]]></note></topic><topic position="1539,-742" order="1" text="Strategic Priority 1a: Recruitment" id="37"><note><![CDATA[1. Identify and use proactive and effective recruitment strategies, ]]></note><topic position="1573,-752" order="0" text="Modify App Form" shrink="true" id="238"><note><![CDATA[Recently, I saw a few job posts sent through different community
groups and they seem to be taking our idea of screening candidates
to a next level. Not only they ask candidates to provide resume and
cover letter + some project related information but also request

File diff suppressed because one or more lines are too long

View File

@ -1,4 +1,4 @@
<map name="enc" version="tango"><topic central="true" text="Artigos GF comentários interessantes" id="1"><topic position="-466,16" order="0" text="Baraloto et al. 2010. Functional trait variation and sampling strategies in species-rich plant communities" shape="rectagle" id="5" bgColor="#cccccc" brColor="#cccccc"><topic position="-1042,-163" order="0" id="6"><text><![CDATA[Therecent growth of large functional trait data
<map name="enc" version="tango"><topic central="true" text="Artigos GF comentários interessantes" id="1"><topic position="-466,16" order="3" text="Baraloto et al. 2010. Functional trait variation and sampling strategies in species-rich plant communities" shape="rectagle" id="5" bgColor="#cccccc" brColor="#cccccc"><topic position="-1042,-163" order="0" id="6"><text><![CDATA[Therecent growth of large functional trait data
bases has been fuelled by standardized protocols forthe
measurement of individual functional traits and intensive
efforts to compile trait data(Cornelissen etal. 2003; Chave etal. 2009). Nonetheless, there remains no consensusfor
@ -28,7 +28,7 @@ failed to accurately estimate the variance of trait values. This
indicates that in situations where accurate estimation of plotlevel
variance is desired, complete censuses are essential.]]></text><note><![CDATA[Isso significa que estudos de característica de história de vida compensam? Ver nos m&m.]]></note></topic><topic position="-915,219" order="7" id="15"><text><![CDATA[We suggest that, in these studies,
the investment in complete sampling may be worthwhile
for at least some traits.]]></text><note><![CDATA[Falar que isso corrobora nossa sugestão de utilizar poucas medidas, mas que elas sejam confiáveis.]]></note></topic></topic><topic position="297,0" order="1" text="Chazdon 2010. Biotropica. 42(1): 3140" shape="rectagle" id="17" fontStyle=";;#000000;;;" bgColor="#cccccc" brColor="#cccccc"><topic position="586,-383" order="0" id="22"><text><![CDATA[Here, we develop a new approach that links functional attributes
for at least some traits.]]></text><note><![CDATA[Falar que isso corrobora nossa sugestão de utilizar poucas medidas, mas que elas sejam confiáveis.]]></note></topic></topic><topic position="297,0" order="0" text="Chazdon 2010. Biotropica. 42(1): 3140" shape="rectagle" id="17" fontStyle=";;#000000;;;" bgColor="#cccccc" brColor="#cccccc"><topic position="586,-383" order="0" id="22"><text><![CDATA[Here, we develop a new approach that links functional attributes
of tree species with studies of forest recovery and regional
land-use transitions (Chazdon et al. 2007). Grouping species according
to their functional attributes or demographic rates provides
@ -109,4 +109,4 @@ ZHANG, Z. D., R. G. ZANG, AND Y. D. QI. 2008. Spatiotemporal patterns and
dynamics of species richness and abundance of woody plant functional
groups in a tropical forest landscape of Hainan Island, South China.
J. Integr. Plant Biol. 50: 547558.
]]></text></topic></topic><topic position="-313,-224" order="2" text="Poorter 1999. Functional Ecology. 13:396-410" shape="rectagle" id="2" fontStyle=";;#000000;;;" bgColor="#cccccc" brColor="#cccccc"><topic position="-619,-221" order="0" text="Espécies pioneiras crescem mais rápido do que as não pioneiras" id="3"><topic position="-980,-221" order="0" text="Tolerância a sombra está relacionada com persistência e não com crescimento" id="4"/></topic></topic></topic></map>
]]></text></topic></topic><topic position="-313,-224" order="1" text="Poorter 1999. Functional Ecology. 13:396-410" shape="rectagle" id="2" fontStyle=";;#000000;;;" bgColor="#cccccc" brColor="#cccccc"><topic position="-619,-221" order="0" text="Espécies pioneiras crescem mais rápido do que as não pioneiras" id="3"><topic position="-980,-221" order="0" text="Tolerância a sombra está relacionada com persistência e não com crescimento" id="4"/></topic></topic></topic></map>

View File

@ -1 +1 @@
<map name="i18n" version="tango"><topic central="true" text="i18n" shape="rounded rectagle" id="0"><topic position="200,0" order="0" text="Este es un é con acento" shape="line" id="1"/><topic position="-200,0" order="1" text="Este es una ñ" shape="line" id="2"/><topic position="200,100" order="2" text="這是一個樣本 Japanise。" shape="line" id="3"/></topic></map>
<map name="i18n" version="tango"><topic central="true" text="i18n" shape="rounded rectagle" id="0"><topic position="200,0" order="0" text="Este es un é con acento" shape="line" id="1"/><topic position="-200,0" order="0" text="Este es una ñ" shape="line" id="2"/><topic position="200,100" order="4" text="這是一個樣本 Japanise。" shape="line" id="3"/></topic></map>

View File

@ -1,2 +1,2 @@
<map name="i18n2" version="tango"><topic central="true" text="أَبْجَدِيَّة عَرَبِيَّة" shape="rounded rectagle" id="0"><topic position="200,0" order="0" text="أَبْجَدِيَّة عَرَبِ" shape="line" id="1"><note><![CDATA[This is a not in languange أَبْجَدِيَّة عَرَبِ]]></note></topic><topic position="-200,0" order="1" shape="line" id="2"><text><![CDATA[Long text node:
<map name="i18n2" version="tango"><topic central="true" text="أَبْجَدِيَّة عَرَبِيَّة" shape="rounded rectagle" id="0"><topic position="200,0" order="0" text="أَبْجَدِيَّة عَرَبِ" shape="line" id="1"><note><![CDATA[This is a not in languange أَبْجَدِيَّة عَرَبِ]]></note></topic><topic position="-200,0" order="0" shape="line" id="2"><text><![CDATA[Long text node:
أَبْجَدِيَّة عَرَب]]></text></topic></topic></map>

View File

@ -8,7 +8,7 @@ BD, Disco duro, Memoria flash.]]></text></topic></topic></topic><topic position=
]]></text><topic position="-664,-145" order="0" shape="rectagle" id="92" fontStyle=";8;#000000;normal;;" bgColor="#f1c232" brColor="#7f6000"><text><![CDATA[Software de Sistema:Permite el entendimiento
entre el usuario y la maquina.]]></text><topic position="-883,-174" order="0" text="Microsoft Windows" shape="rectagle" id="101" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#7f6000"/><topic position="-864,-145" order="1" text="GNU/LINUX" shape="rectagle" id="106" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#7f6000"/><topic position="-846,-116" order="2" text="MAC " shape="rectagle" id="107" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#7f6000"/></topic><topic position="-667,-43" order="1" shape="rectagle" id="93" fontStyle=";8;#000000;;;" bgColor="#f1c232" brColor="#7f6000"><text><![CDATA[Software de Aplicación: Permite hacer hojas de
calculo navegar en internet, base de datos, etc.]]></text><topic position="-855,-87" order="0" text="Office" shape="rectagle" id="108" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#783f04"/><topic position="-869,-58" order="1" text="Libre Office" shape="rectagle" id="109" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#7f6000"/><topic position="-873,-29" order="2" text="Navegadores" shape="rectagle" id="110" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#7f6000"/><topic position="-851,0" order="3" text="Msn" shape="rectagle" id="111" fontStyle=";8;#000000;;;" bgColor="#ffd966" brColor="#783f04"/></topic><topic position="-590,29" order="2" shape="rectagle" id="94" fontStyle=";8;#000000;;;" bgColor="#f1c232" brColor="#7f6000"><text><![CDATA[Software de Desarrollo
]]></text></topic></topic><topic position="-218,116" order="2" text="Tipos de computadora" shape="elipse" id="3" fontStyle=";10;;bold;;"><topic position="-476,58" order="0" text="Computadora personal de escritorio o Desktop" shape="elipse" id="8" fontStyle=";8;;bold;;"/><topic position="-352,87" order="1" shape="elipse" id="10" fontStyle=";8;;bold;;"><text><![CDATA[PDA
]]></text></topic></topic><topic position="-218,116" order="3" text="Tipos de computadora" shape="elipse" id="3" fontStyle=";10;;bold;;"><topic position="-476,58" order="0" text="Computadora personal de escritorio o Desktop" shape="elipse" id="8" fontStyle=";8;;bold;;"/><topic position="-352,87" order="1" shape="elipse" id="10" fontStyle=";8;;bold;;"><text><![CDATA[PDA
]]></text></topic><topic position="-360,116" order="2" text="Laptop" shape="elipse" id="11" fontStyle=";8;;bold;;"/><topic position="-365,145" order="3" text="Servidor" shape="elipse" id="12" fontStyle=";8;;bold;;"/><topic position="-368,174" order="4" text="Tablet PC" shape="elipse" id="13" fontStyle=";8;;bold;;"/></topic></topic><topic position="283,192" text="CPU y sus partes internas" shape="rounded rectagle" id="35" fontStyle=";10;#feffff;;;" bgColor="#c27ba0" brColor="#4c1130"><topic position="493,120" order="0" text="Ranuras de expansión o PCI" shape="rounded rectagle" id="36" fontStyle=";8;#000000;;;" bgColor="#ead1dc" brColor="#4c1130"/><topic position="458,149" order="1" shape="rounded rectagle" id="38" fontStyle=";8;#000000;;;" bgColor="#ead1dc" brColor="#4c1130"><text><![CDATA[Memoria RAM
]]></text></topic><topic position="466,178" order="2" shape="rounded rectagle" id="40" fontStyle=";8;#000000;;;" bgColor="#ead1dc" brColor="#4c1130"><text><![CDATA[Unidades ópticas
]]></text></topic><topic position="457,207" order="3" shape="rounded rectagle" id="41" fontStyle=";8;#000000;;;" bgColor="#ead1dc" brColor="#4c1130"><text><![CDATA[Tarjeta Madre

File diff suppressed because one or more lines are too long

View File

@ -1,3 +1,3 @@
<map name="welcome" version="tango"><topic central="true" text="Welcome To WiseMapping" id="1" fontStyle=";;#ffffff;;;"><icon id="sign_info"/><topic position="199,-112" order="0" id="30"><text><![CDATA[5 min tutorial video ?
Follow the link !]]></text><link url="https://www.youtube.com/tv?vq=medium#/watch?v=rKxZwNKs9cE" urlType="url"/><icon id="hard_computer"/></topic><topic position="-167,-112" order="1" text="Try it Now!" id="11" fontStyle=";;#525c61;;;" bgColor="#250be3" brColor="#080559"><icon id="face_surprise"/><topic position="-260,-141" order="0" text="Double Click" id="12" fontStyle=";;#525c61;;italic;"/><topic position="-278,-112" order="1" id="13"><text><![CDATA[Press "enter" to add a
Sibling]]></text></topic><topic position="-271,-83" order="2" text="Drag map to move" id="14" fontStyle=";;#525c61;;italic;"/></topic><topic position="155,-18" order="2" text="Features" id="15" fontStyle=";;#525c61;;;"><topic position="244,-80" order="0" text="Links to Sites" id="16" fontStyle=";6;#525c61;;;"><link url="http://www.digg.com" urlType="url"/></topic><topic position="224,-30" order="1" text="Styles" id="31"><topic position="285,-55" order="0" text="Fonts" id="17" fontStyle=";;#525c61;;;"/><topic position="299,-30" order="1" text="Topic Shapes" shape="line" id="19" fontStyle=";;#525c61;;;"/><topic position="295,-5" order="2" text="Topic Color" id="18" fontStyle=";;#525c61;;;"/></topic><topic position="229,20" order="2" text="Icons" id="20" fontStyle=";;#525c61;;;"><icon id="object_rainbow"/></topic><topic position="249,45" order="3" text="History Changes" id="21" fontStyle=";;#525c61;;;"><icon id="arrowc_turn_left"/></topic></topic><topic position="-176,-21" order="3" text="Mind Mapping" id="6" fontStyle=";;#525c61;;;" bgColor="#edabff"><icon id="thumb_thumb_up"/><topic position="-293,-58" order="0" text="Share with Collegues" id="7" fontStyle=";;#525c61;;;"/><topic position="-266,-33" order="1" text="Online" id="8" fontStyle=";;#525c61;;;"/><topic position="-288,-8" order="2" text="Anyplace, Anytime" id="9" fontStyle=";;#525c61;;;"/><topic position="-266,17" order="3" text="Free!!!" id="10" fontStyle=";;#525c61;;;"/></topic><topic position="171,95" order="4" text="Productivity" id="2" fontStyle=";;#525c61;;;" bgColor="#d9b518"><icon id="chart_bar"/><topic position="281,70" order="0" text="Share your ideas" id="3" fontStyle=";;#525c61;;;"><icon id="bulb_light_on"/></topic><topic position="270,95" order="1" text="Brainstorming" id="4" fontStyle=";;#525c61;;;"/><topic position="256,120" order="2" text="Visual " id="5" fontStyle=";;#525c61;;;"/></topic><topic position="-191,54" order="5" text="Install In Your Server" id="27" fontStyle=";;#525c61;;;"><icon id="hard_computer"/><topic position="-319,42" order="0" text="Open Source" id="29" fontStyle=";;#525c61;;;"><icon id="soft_penguin"/><link url="http://www.wisemapping.org/" urlType="url"/></topic><topic position="-310,67" order="1" text="Download" id="28" fontStyle=";;#525c61;;;"><link url="http://www.wisemapping.com/inyourserver.html" urlType="url"/></topic></topic><topic position="-169,117" order="6" text="Collaborate" id="32"><icon id="people_group"/><topic position="-253,92" order="0" text="Embed" id="33"/><topic position="-254,117" order="1" text="Publish" id="34"/><topic position="-277,142" order="2" text="Share for Edition" id="35"><icon id="mail_envelop"/></topic></topic></topic><relationship srcTopicId="30" destTopicId="11" lineType="3" srcCtrlPoint="-80,-56" destCtrlPoint="110,-116" endArrow="false" startArrow="true"/></map>
Sibling]]></text></topic><topic position="-271,-83" order="2" text="Drag map to move" id="14" fontStyle=";;#525c61;;italic;"/></topic><topic position="155,-18" order="2" text="Features" id="15" fontStyle=";;#525c61;;;"><topic position="244,-80" order="0" text="Links to Sites" id="16" fontStyle=";6;#525c61;;;"><link url="http://www.digg.com" urlType="url"/></topic><topic position="224,-30" order="1" text="Styles" id="31"><topic position="285,-55" order="0" text="Fonts" id="17" fontStyle=";;#525c61;;;"/><topic position="299,-30" order="1" text="Topic Shapes" shape="line" id="19" fontStyle=";;#525c61;;;"/><topic position="295,-5" order="2" text="Topic Color" id="18" fontStyle=";;#525c61;;;"/></topic><topic position="229,20" order="2" text="Icons" id="20" fontStyle=";;#525c61;;;"><icon id="object_rainbow"/></topic><topic position="249,45" order="3" text="History Changes" id="21" fontStyle=";;#525c61;;;"><icon id="arrowc_turn_left"/></topic></topic><topic position="-176,-21" order="3" text="Mind Mapping" id="6" fontStyle=";;#525c61;;;" bgColor="#edabff"><icon id="thumb_thumb_up"/><topic position="-293,-58" order="0" text="Share with Collegues" id="7" fontStyle=";;#525c61;;;"/><topic position="-266,-33" order="1" text="Online" id="8" fontStyle=";;#525c61;;;"/><topic position="-288,-8" order="2" text="Anyplace, Anytime" id="9" fontStyle=";;#525c61;;;"/><topic position="-266,17" order="3" text="Free!!!" id="10" fontStyle=";;#525c61;;;"/></topic><topic position="171,95" order="4" text="Productivity" id="2" fontStyle=";;#525c61;;;" bgColor="#d9b518"><icon id="chart_bar"/><topic position="281,70" order="0" text="Share your ideas" id="3" fontStyle=";;#525c61;;;"><icon id="bulb_light_on"/></topic><topic position="270,95" order="1" text="Brainstorming" id="4" fontStyle=";;#525c61;;;"/><topic position="256,120" order="2" text="Visual " id="5" fontStyle=";;#525c61;;;"/></topic><topic position="-191,54" order="5" text="Install In Your Server" id="27" fontStyle=";;#525c61;;;"><icon id="hard_computer"/><topic position="-319,42" order="0" text="Open Source" id="29" fontStyle=";;#525c61;;;"><icon id="soft_penguin"/><link url="http://www.wisemapping.org/" urlType="url"/></topic><topic position="-310,67" order="1" text="Download" id="28" fontStyle=";;#525c61;;;"><link url="http://www.wisemapping.com/inyourserver.html" urlType="url"/></topic></topic><topic position="-169,117" order="7" text="Collaborate" id="32"><icon id="people_group"/><topic position="-253,92" order="0" text="Embed" id="33"/><topic position="-254,117" order="1" text="Publish" id="34"/><topic position="-277,142" order="2" text="Share for Edition" id="35"><icon id="mail_envelop"/></topic></topic></topic><relationship srcTopicId="30" destTopicId="11" lineType="3" srcCtrlPoint="-80,-56" destCtrlPoint="110,-116" endArrow="false" startArrow="true"/></map>

205
yarn.lock
View File

@ -1089,43 +1089,6 @@
dependencies:
"@date-io/core" "^2.13.1"
"@bcoe/v8-coverage@^0.2.3":
version "0.2.3"
resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39"
integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==
"@cypress/request@^2.88.10", "@cypress/request@^2.88.6":
version "2.88.10"
resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.10.tgz#b66d76b07f860d3a4b8d7a0604d020c662752cce"
integrity sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==
dependencies:
aws-sign2 "~0.7.0"
aws4 "^1.8.0"
caseless "~0.12.0"
combined-stream "~1.0.6"
extend "~3.0.2"
forever-agent "~0.6.1"
form-data "~2.3.2"
http-signature "~1.3.6"
is-typedarray "~1.0.0"
isstream "~0.1.2"
json-stringify-safe "~5.0.1"
mime-types "~2.1.19"
performance-now "^2.1.0"
qs "~6.5.2"
safe-buffer "^5.1.2"
tough-cookie "~2.5.0"
tunnel-agent "^0.6.0"
uuid "^8.3.2"
"@cypress/xvfb@^1.2.4":
version "1.2.4"
resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a"
integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==
dependencies:
debug "^3.1.0"
lodash.once "^4.1.1"
"@discoveryjs/json-ext@^0.5.0":
version "0.5.6"
resolved "https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.6.tgz#d5e0706cf8c6acd8c6032f8d54070af261bbbb2f"
@ -5315,13 +5278,6 @@ cookie@0.4.1:
resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.4.1.tgz#afd713fe26ebd21ba95ceb61f9a8116e50a537d1"
integrity sha512-ZwrFkGJxUR3EIoXtO+yVE69Eb7KlixbaeAWfBQB9vVsNn/o+Yw69gBWSSDK825hQNdN+wF8zELf3dFNl/kxkUA==
copy-anything@^2.0.1:
version "2.0.3"
resolved "https://registry.yarnpkg.com/copy-anything/-/copy-anything-2.0.3.tgz#842407ba02466b0df844819bbe3baebbe5d45d87"
integrity sha512-GK6QUtisv4fNS+XcI7shX0Gx9ORg7QqIznyfho79JTnX1XhLiyZHfftvGiziqzRiEi/Bjhgpi+D2o7HxJFPnDQ==
dependencies:
is-what "^3.12.0"
copy-concurrently@^1.0.0:
version "1.0.5"
resolved "https://registry.yarnpkg.com/copy-concurrently/-/copy-concurrently-1.0.5.tgz#92297398cae34937fcafd6ec8139c18051f0b5e0"
@ -5425,14 +5381,6 @@ cosmiconfig@^7.0.0:
path-type "^4.0.0"
yaml "^1.10.0"
create-react-context@^0.3.0:
version "0.3.0"
resolved "https://registry.yarnpkg.com/create-react-context/-/create-react-context-0.3.0.tgz#546dede9dc422def0d3fc2fe03afe0bc0f4f7d8c"
integrity sha512-dNldIoSuNSvlTJ7slIKC/ZFGKexBMBrrcc+TTe1NdmROnaASuLPvqpwj9v4XS4uXZ8+YPu0sNmShX2rXI5LNsw==
dependencies:
gud "^1.0.0"
warning "^4.0.3"
create-require@^1.1.0:
version "1.1.1"
resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
@ -6245,7 +6193,7 @@ err-code@^1.0.0:
resolved "https://registry.yarnpkg.com/err-code/-/err-code-1.1.2.tgz#06e0116d3028f6aef4806849eb0ea6a748ae6960"
integrity sha1-BuARbTAo9q70gGhJ6w6mp0iuaWA=
errno@^0.1.1, errno@^0.1.3:
errno@^0.1.3:
version "0.1.8"
resolved "https://registry.yarnpkg.com/errno/-/errno-0.1.8.tgz#8bb3e9c7d463be4976ff888f76b4809ebc2e811f"
integrity sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==
@ -6608,7 +6556,7 @@ eslint@^7.14.0:
ajv "^6.10.0"
chalk "^4.0.0"
cross-spawn "^7.0.2"
debug "^4.3.2"
debug "^4.0.1"
doctrine "^3.0.0"
enquirer "^2.3.5"
escape-string-regexp "^4.0.0"
@ -6627,7 +6575,7 @@ eslint@^7.14.0:
import-fresh "^3.0.0"
imurmurhash "^0.1.4"
is-glob "^4.0.0"
js-yaml "^4.1.0"
js-yaml "^3.13.1"
json-stable-stringify-without-jsonify "^1.0.1"
levn "^0.4.1"
lodash.merge "^4.6.2"
@ -6635,9 +6583,9 @@ eslint@^7.14.0:
natural-compare "^1.4.0"
optionator "^0.9.1"
progress "^2.0.0"
regexpp "^3.2.0"
regexpp "^3.1.0"
semver "^7.2.1"
strip-ansi "^6.0.1"
strip-ansi "^6.0.0"
strip-json-comments "^3.1.0"
table "^6.0.9"
text-table "^0.2.0"
@ -6838,49 +6786,6 @@ execa@^0.7.0:
signal-exit "^3.0.0"
strip-eof "^1.0.0"
execa@4.1.0, execa@^4.1.0:
version "4.1.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a"
integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==
dependencies:
cross-spawn "^7.0.0"
get-stream "^5.0.0"
human-signals "^1.1.1"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^4.0.0"
onetime "^5.1.0"
signal-exit "^3.0.2"
strip-final-newline "^2.0.0"
execa@5.1.1, execa@^5.0.0:
version "5.1.1"
resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
dependencies:
cross-spawn "^7.0.3"
get-stream "^6.0.0"
human-signals "^2.1.0"
is-stream "^2.0.0"
merge-stream "^2.0.0"
npm-run-path "^4.0.1"
onetime "^5.1.2"
signal-exit "^3.0.3"
strip-final-newline "^2.0.0"
execa@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777"
integrity sha1-lEvs00zEHuMqY6n68nrVpl/Fl3c=
dependencies:
cross-spawn "^5.0.1"
get-stream "^3.0.0"
is-stream "^1.1.0"
npm-run-path "^2.0.0"
p-finally "^1.0.0"
signal-exit "^3.0.0"
strip-eof "^1.0.0"
execa@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/execa/-/execa-1.0.0.tgz#c6236a5bb4df6d6f15e88e7f017798216749ddd8"
@ -7777,11 +7682,6 @@ growl@1.10.5:
resolved "https://registry.yarnpkg.com/growl/-/growl-1.10.5.tgz#f2735dc2283674fa67478b10181059355c369e5e"
integrity sha512-qBr4OuELkhPenW6goKVXiv47US3clb3/IbuWF9KNKEijAy9oeHxU9IgzjvJhHkUzhaj7rOUD7+YGWqUjLp5oSA==
gud@^1.0.0:
version "1.0.0"
resolved "https://registry.yarnpkg.com/gud/-/gud-1.0.0.tgz#a489581b17e6a70beca9abe3ae57de7a499852c0"
integrity sha512-zGEOVKFM5sVPPrYs7J5/hYEw2Pof8KCyOwyhG8sAF26mCAeUFAcYPu1mwB7hhpIP29zOIBaDqwuHdLp0jvZXjw==
gzip-size@^6.0.0:
version "6.0.0"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-6.0.0.tgz#065367fd50c239c0671cbcbad5be3e2eeb10e462"
@ -8074,15 +7974,6 @@ http-proxy-agent@^4.0.1:
agent-base "6"
debug "4"
http-proxy-agent@^4.0.1:
version "4.0.1"
resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz#8a8c8ef7f5932ccf953c296ca8291b95aa74aa3a"
integrity sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==
dependencies:
"@tootallnate/once" "1"
agent-base "6"
debug "4"
http-proxy-middleware@0.19.1:
version "0.19.1"
resolved "https://registry.yarnpkg.com/http-proxy-middleware/-/http-proxy-middleware-0.19.1.tgz#183c7dc4aa1479150306498c210cdaf96080a43a"
@ -8185,7 +8076,7 @@ hyphenate-style-name@^1.0.3:
resolved "https://registry.yarnpkg.com/hyphenate-style-name/-/hyphenate-style-name-1.0.4.tgz#691879af8e220aea5750e8827db4ef62a54e361d"
integrity sha512-ygGZLjmXfPHj+ZWh6LwbC37l43MhfztxetbFCoYTM2VjkIUpeHgSNn7QIyVFj7YQ1Wl9Cbw5sholVJPzWvC2MQ==
iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4:
iconv-lite@0.4.24, iconv-lite@^0.4.24:
version "0.4.24"
resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
@ -8711,18 +8602,6 @@ is-number-object@^1.0.4:
dependencies:
has-tostringtag "^1.0.0"
is-npm@^5.0.0:
version "5.0.0"
resolved "https://registry.yarnpkg.com/is-npm/-/is-npm-5.0.0.tgz#43e8d65cc56e1b67f8d47262cf667099193f45a8"
integrity sha512-WW/rQLOazUq+ST/bCAVBp/2oMERWLsR7OrKyt052dNDk4DHcDE0/7QSXITlmi+VBcV13DfIbysG3tZJm5RfdBA==
is-number-object@^1.0.4:
version "1.0.6"
resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.6.tgz#6a7aaf838c7f0686a50b4553f7e54a96494e89f0"
integrity sha512-bEVOqiRcvo3zO1+G2lVMy+gkkEm9Yh7cDMRusKKu5ZJKPUYSJwICTKZrNKHA2EbSP0Tu0+6B/emsYNHZyn6K8g==
dependencies:
has-tostringtag "^1.0.0"
is-number@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/is-number/-/is-number-3.0.0.tgz#24fd6201a4782cf50561c810276afc7d12d71195"
@ -10032,7 +9911,7 @@ loglevel@^1.6.8:
resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.8.0.tgz#e7ec73a57e1e7b419cb6c6ac06bf050b67356114"
integrity sha512-G6A/nJLRgWOuuwdNuA6koovfEV1YpqqAG4pRUlFaz3jj2QNZ8M4vBqnVA+HBTmU/AMNUtlOsMmSpF6NyOjztbA==
loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf"
integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==
@ -10354,7 +10233,7 @@ mime-types@^2.1.12, mime-types@^2.1.27, mime-types@^2.1.31, mime-types@~2.1.17,
dependencies:
mime-db "1.51.0"
mime@1.6.0, mime@^1.4.1:
mime@1.6.0:
version "1.6.0"
resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
@ -10647,15 +10526,6 @@ natural-compare@^1.4.0:
resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7"
integrity sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=
needle@^2.5.2:
version "2.9.1"
resolved "https://registry.yarnpkg.com/needle/-/needle-2.9.1.tgz#22d1dffbe3490c2b83e301f7709b6736cd8f2684"
integrity sha512-6R9fqJ5Zcmf+uYaFgdIHmLwNldn5HbK8L5ybn7Uz+ylX/rnOsSp1AHcvQSrCaFN+qNM1wpymHqD7mVasEOlHGQ==
dependencies:
debug "^3.2.6"
iconv-lite "^0.4.4"
sax "^1.2.4"
negotiator@0.6.2:
version "0.6.2"
resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb"
@ -11373,11 +11243,6 @@ parse-json@^5.0.0:
json-parse-even-better-errors "^2.3.0"
lines-and-columns "^1.1.6"
parse-node-version@^1.0.1:
version "1.0.1"
resolved "https://registry.yarnpkg.com/parse-node-version/-/parse-node-version-1.0.1.tgz#e2b5dbede00e7fa9bc363607f53327e8b073189b"
integrity sha512-3YHlOa/JgH6Mnpr05jP9eDG254US9ek25LyIxZlDItp2iJtwyaXQb57lBYLdT3MowkUFYEV2XXNAYIPlESvJlA==
parse-path@^4.0.0:
version "4.0.3"
resolved "https://registry.yarnpkg.com/parse-path/-/parse-path-4.0.3.tgz#82d81ec3e071dcc4ab49aa9f2c9c0b8966bb22bf"
@ -11772,11 +11637,6 @@ promise-inflight@^1.0.1:
resolved "https://registry.yarnpkg.com/promise-inflight/-/promise-inflight-1.0.1.tgz#98472870bf228132fcbdd868129bad12c3c029e3"
integrity sha1-mEcocL8igTL8vdhoEputEsPAKeM=
promise-polyfill@8.1.0:
version "8.1.0"
resolved "https://registry.yarnpkg.com/promise-polyfill/-/promise-polyfill-8.1.0.tgz#30059da54d1358ce905ac581f287e184aedf995d"
integrity sha512-OzSf6gcCUQ01byV4BgwyUCswlaQQ6gzXc23aLQWhicvfX9kfsUiUhgt3CCQej8jDnl8/PhGF31JdHX2/MzF3WA==
promise-retry@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/promise-retry/-/promise-retry-1.1.1.tgz#6739e968e3051da20ce6497fb2b50f6911df3d6d"
@ -11800,7 +11660,7 @@ promzard@^0.3.0:
dependencies:
read "1"
prop-types@^15.0.0, prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2:
prop-types@^15.5.0, prop-types@^15.6.2, prop-types@^15.7.2:
version "15.8.1"
resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.8.1.tgz#67d87bf1a694f48435cf332c24af10214a3140b5"
integrity sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==
@ -11918,13 +11778,6 @@ qs@6.9.6:
resolved "https://registry.yarnpkg.com/qs/-/qs-6.9.6.tgz#26ed3c8243a431b2924aca84cc90471f35d5a0ee"
integrity sha512-TIRk4aqYLNoJUbd+g2lEdz5kLWIuTMRagAXxl78Q0RiVjAOugHmeKNGdd3cwo/ktpf9aL9epCfFqWDEKysUlLQ==
qs@^6.9.4:
version "6.10.3"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.3.tgz#d6cde1b2ffca87b5aa57889816c5f81535e22e8e"
integrity sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==
dependencies:
side-channel "^1.0.4"
qs@^6.9.4:
version "6.10.2"
resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.2.tgz#c1431bea37fc5b24c5bdbafa20f16bdf2a4b9ffe"
@ -11947,16 +11800,6 @@ query-string@^6.13.8:
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
query-string@^6.13.8:
version "6.14.1"
resolved "https://registry.yarnpkg.com/query-string/-/query-string-6.14.1.tgz#7ac2dca46da7f309449ba0f86b1fd28255b0c86a"
integrity sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==
dependencies:
decode-uri-component "^0.2.0"
filter-obj "^1.1.0"
split-on-first "^1.0.0"
strict-uri-encode "^2.0.0"
querystring@0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/querystring/-/querystring-0.2.0.tgz#b209849203bb25df820da756e747005878521620"
@ -12041,16 +11884,6 @@ react-dom@^17.0.0:
object-assign "^4.1.1"
scheduler "^0.20.2"
react-form-validator-core@1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/react-form-validator-core/-/react-form-validator-core-1.1.1.tgz#d084b94b9ef66bed3847fa8851b45cc2f8960a5c"
integrity sha512-5SG9pKrRptrhrt/dZg0bL28VvyGeuXftfhx6qwJLNdUqs2GgEnrV07BBtGpWyoBKXmO+fplD+O70DbI03CMqUQ==
dependencies:
create-react-context "^0.3.0"
promise-polyfill "8.1.0"
prop-types "^15.0.0"
react-lifecycles-compat "^3.0.2"
react-ga@^3.3.0:
version "3.3.0"
resolved "https://registry.yarnpkg.com/react-ga/-/react-ga-3.3.0.tgz#c91f407198adcb3b49e2bc5c12b3fe460039b3ca"
@ -12092,19 +11925,6 @@ react-is@^17.0.1, react-is@^17.0.2:
resolved "https://registry.yarnpkg.com/react-is/-/react-is-17.0.2.tgz#e691d4a8e9c789365655539ab372762b0efb54f0"
integrity sha512-w2GsyukL62IJnlaff/nRegPQR94C/XXamvMWmSHRJ4y7Ts/4ocGRmTHvOs8PSE6pB3dWOrD/nueuU5sduBsQ4w==
react-lifecycles-compat@^3.0.2:
version "3.0.4"
resolved "https://registry.yarnpkg.com/react-lifecycles-compat/-/react-lifecycles-compat-3.0.4.tgz#4f1a273afdfc8f3488a8c516bfda78f872352362"
integrity sha512-fBASbA6LnOU9dOU2eW7aQ8xmYBSXUIWr+UmF9b1efZBazGNO+rcXT/icdKnYm2pTwcRylVUYwW7H1PHfLekVzA==
react-material-ui-form-validator@^3.0.0:
version "3.0.0"
resolved "https://registry.yarnpkg.com/react-material-ui-form-validator/-/react-material-ui-form-validator-3.0.0.tgz#9cc732147fab0062535d41a8b158537d6794e684"
integrity sha512-WoQvsGCV6cxxGlTvoKOZoLvWtg5KWMRVD9EFfMfJBYYUAZBOR9yXg1OSlu/MgOP7sPiiIUAwPLYVWIds7oLXKQ==
dependencies:
prop-types "^15.0.0"
react-form-validator-core "1.1.1"
react-query@^3.6.0:
version "3.34.12"
resolved "https://registry.yarnpkg.com/react-query/-/react-query-3.34.12.tgz#dcaaf7b629f0868aae8afef9fb7692f6ea7643bf"
@ -14496,13 +14316,6 @@ walker@^1.0.7:
dependencies:
makeerror "1.0.12"
warning@^4.0.3:
version "4.0.3"
resolved "https://registry.yarnpkg.com/warning/-/warning-4.0.3.tgz#16e9e077eb8a86d6af7d64aa1e05fd85b4678ca3"
integrity sha512-rpJyN222KWIvHJ/F53XSZv0Zl/accqHR8et1kpaMTD/fLCRxtV8iX8czMzY7sVZupTI3zcUTg8eycS2kNF9l6w==
dependencies:
loose-envify "^1.0.0"
watchpack@^2.3.1:
version "2.3.1"
resolved "https://registry.yarnpkg.com/watchpack/-/watchpack-2.3.1.tgz#4200d9447b401156eeca7767ee610f8809bc9d25"