Skip to content

Commit 3e620ad

Browse files
Merge pull request #31 from BasicPrimitives/primaryparent
Added primaryParent option to primitives.famdiagram.ItemConfig
2 parents d3e9fe1 + 7a2dfbe commit 3e620ad

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

45 files changed

+4638
-3263
lines changed

ReferenceControlsProcessingDiagram.html

Lines changed: 358 additions & 299 deletions
Large diffs are not rendered by default.

apireference.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -610,6 +610,7 @@ function read_annotation(lines) {
610610
case "group":
611611
annotation.tag = tagName;
612612
annotation.group = get_tag_description(annotationLine);
613+
break;
613614
case "classdesc":
614615
if (annotationLine != "") {
615616
var description = get_tag_description(annotationLine);

apireference/famdiagram.md

Lines changed: 97 additions & 96 deletions
Large diffs are not rendered by default.

apireference/orgdiagram.md

Lines changed: 91 additions & 91 deletions
Large diffs are not rendered by default.

changelog.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
1+
#### Version 5.7.0
2+
* Added `primaryParent` property to `primitives.famdiagram.ItemConfig`. Property define user preference for item placement relative to its multiple parents in Family Diagram. See Technological Tree Demo.
13
#### Version 5.6.4
24
* Updated IntelliSense API annotations
35
#### Version 5.6.3

index.html

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,12 @@
9595
jquery: "samples/jquery.widgets/DemoFamily.html"
9696
}
9797
},
98+
{
99+
label: "Tech Tree Chart",
100+
frameworks: {
101+
javascript: "samples/javascript.controls/DemoTechTree.html"
102+
}
103+
},
98104
{
99105
label: "Financial Ownership Chart",
100106
frameworks: {
@@ -423,7 +429,13 @@
423429
frameworks: {
424430
javascript: "samples/javascript.controls/CaseMultipleFamiliesOrdering.html"
425431
}
426-
}
432+
},
433+
{
434+
label: "Primary Parent",
435+
frameworks: {
436+
javascript: "samples/javascript.controls/CaseFamilyChartPrimaryParent.html"
437+
}
438+
},
427439
]
428440
},
429441
{

min/package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "basicprimitives",
3-
"version": "5.6.4",
3+
"version": "5.7.0",
44
"description": "Basic Primitives Diagrams for JavaScript - data visualization components library that implements organizational chart and multi-parent dependency diagrams, contains implementations of JavaScript Controls and PDF rendering plugins.",
55
"main": "primitives.latest.js",
66
"scripts": {

min/primitives.jquery.min.js

Lines changed: 21 additions & 18 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

min/primitives.latest.js

Lines changed: 82 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/**
2-
* @preserve Basic Primitives Diagrams v5.6.4
2+
* @preserve Basic Primitives Diagrams v5.7.0
33
* Copyright (c) 2013 - 2020 Basic Primitives Inc
44
*
55
* Non-commercial - Free
@@ -35,7 +35,7 @@
3535

3636
var primitives = {
3737
common: {
38-
version: "5.6.4"
38+
version: "5.7.0"
3939
},
4040
orgdiagram: {},
4141
famdiagram: {},
@@ -8797,6 +8797,15 @@ primitives.famdiagram.ItemConfig = function (arg0, arg1, arg2, arg3, arg4) {
87978797
*/
87988798
this.position = null;
87998799

8800+
/**
8801+
* Primary parents id. Set this property to place item close to the selected primary parent in `parents` collection.
8802+
* If property set to null or referenced parent does not exists then this property is ignored.
8803+
*
8804+
* @group Order
8805+
* @type {string}
8806+
*/
8807+
this.primaryParent = null;
8808+
88008809
/**
88018810
* Title
88028811
*
@@ -9741,7 +9750,8 @@ primitives.famdiagram.OrderFamilyNodesOptionTask = function (optionsTask, defaul
97419750
id: new primitives.common.ValueReader(["string", "number"], true),
97429751
position: new primitives.common.ValueReader(["number"], true),
97439752
relativeItem: new primitives.common.ValueReader(["string", "number"], true),
9744-
placementType: new primitives.common.EnumerationReader(primitives.common.AdviserPlacementType, false, defaultItemConfig.placementType)
9753+
placementType: new primitives.common.EnumerationReader(primitives.common.AdviserPlacementType, false, defaultItemConfig.placementType),
9754+
primaryParent: new primitives.common.ValueReader(["string", "number"], true),
97459755
}),
97469756
true,
97479757
"id"
@@ -10002,14 +10012,12 @@ primitives.famdiagram.FamilyBalance.prototype.FamLink = function (fromItem, toIt
1000210012

1000310013
primitives.famdiagram.FamilyBalance.prototype.createOrgTree = function (params, data) {
1000410014
var index, len, index2, len2,
10005-
famItem,
1000610015
familiesGraph, /* primitives.common.graph */
1000710016
link, links,
1000810017
fromFamily,
1000910018
toFamily,
1001010019
sortedFamilies = [], sortedFamiliesHash,
1001110020
attachedFamilies,
10012-
userItem,
1001310021
familyId,
1001410022
family,
1001510023
familyRootItem,
@@ -10018,8 +10026,6 @@ primitives.famdiagram.FamilyBalance.prototype.createOrgTree = function (params,
1001810026
rootItem, rootItems, bestRootItem, bestReference,
1001910027
spanningTree,
1002010028
extraGravities, grandChildren,
10021-
parsedId,
10022-
itemsHavingSpouses, spouses,
1002310029
orgItemRoot,
1002410030
famItemsExtracted,
1002510031
families = [],
@@ -10037,7 +10043,7 @@ primitives.famdiagram.FamilyBalance.prototype.createOrgTree = function (params,
1003710043
/* extractOrgChart method extracts hiearchy of family members starting from grandParent and takes only non extracted family items
1003810044
* For every extracted item it assigns its familyId, it is used for building families relations graph and finding cross family links
1003910045
*/
10040-
this.extractOrgChart(grandParentId, params.logicalFamily, params.defaultItemConfig, data.orgTree, data.orgPartners, data.itemByChildrenKey, famItemsExtracted, family);
10046+
this.extractOrgChart(grandParentId, params.logicalFamily, params.primaryParents, params.defaultItemConfig, data.orgTree, data.orgPartners, data.itemByChildrenKey, famItemsExtracted, family);
1004110047
families.push(family);
1004210048
families2.push(family);
1004310049
familyId += 1;
@@ -10655,7 +10661,7 @@ primitives.famdiagram.FamilyBalance.prototype.attachFamilyToOrgChart = function
1065510661
data.orgTree.adopt(rootItem.id, familyRoot.id, familyRoot);
1065610662
};
1065710663

10658-
primitives.famdiagram.FamilyBalance.prototype.extractOrgChart = function (grandParentId, logicalFamily, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family) {
10664+
primitives.famdiagram.FamilyBalance.prototype.extractOrgChart = function (grandParentId, logicalFamily, primaryParentsPath, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family) {
1065910665
var index, len,
1066010666
children = [], tempChildren,
1066110667
childItem,
@@ -10672,24 +10678,24 @@ primitives.famdiagram.FamilyBalance.prototype.extractOrgChart = function (grandP
1067210678
newOrgItem.hideChildrenConnection = grandParent.hideChildrenConnection;
1067310679
family.items.push(newOrgItem);
1067410680

10675-
famItemsExtracted[grandParent.id] = true;
10681+
famItemsExtracted[grandParent.id] = grandParent;
1067610682
grandParent.familyId = family.id;
1067710683

1067810684
/* extract its children */
10679-
children = this.extractChildren(grandParent, logicalFamily, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family);
10685+
children = this.extractChildren(grandParent, logicalFamily, primaryParentsPath, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family);
1068010686

1068110687
while (children.length > 0) {
1068210688
tempChildren = [];
1068310689
for (index = 0, len = children.length; index < len; index += 1) {
1068410690
childItem = children[index];
10685-
tempChildren = tempChildren.concat(this.extractChildren(childItem, logicalFamily, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family));
10691+
tempChildren = tempChildren.concat(this.extractChildren(childItem, logicalFamily, primaryParentsPath, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family));
1068610692
}
1068710693

1068810694
children = tempChildren;
1068910695
}
1069010696
};
1069110697

10692-
primitives.famdiagram.FamilyBalance.prototype.extractChildren = function (parentItem, logicalFamily, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family) {
10698+
primitives.famdiagram.FamilyBalance.prototype.extractChildren = function (parentItem, logicalFamily, primaryParentsPath, defaultItemConfig, orgTree, orgPartners, itemByChildrenKey, famItemsExtracted, family) {
1069310699
var result = [],
1069410700
firstChild = null,
1069510701
partnerItem = null,
@@ -10711,6 +10717,17 @@ primitives.famdiagram.FamilyBalance.prototype.extractChildren = function (parent
1071110717
family.links.push(new this.FamLink(parentItem.id, firstChild));
1071210718
} else {
1071310719
if (firstChild != null) {
10720+
if (primaryParentsPath.hasOwnProperty(firstChild)) {
10721+
var realParent = primaryParentsPath[firstChild];
10722+
if (realParent != parentItem.id) {
10723+
if (orgPartners[realParent] == null) {
10724+
orgPartners[realParent] = [];
10725+
}
10726+
orgPartners[realParent].push(parentItem.id);
10727+
family.links.push(new this.FamLink(parentItem.id, firstChild));
10728+
return result;
10729+
}
10730+
}
1071410731
itemByChildrenKey[firstChild] = parentItem;
1071510732
}
1071610733

@@ -11336,6 +11353,54 @@ primitives.famdiagram.UserDefinedNodesOrder.prototype.getUserDefinedPositions =
1133611353
};
1133711354
}
1133811355

11356+
/* /Controls/FamDiagram/Tasks/Transformations/FamilyTransformations/UserDefinedPrimaryNodes.js*/
11357+
primitives.famdiagram.UserDefinedPrimaryParents = function () {
11358+
11359+
};
11360+
11361+
primitives.famdiagram.UserDefinedPrimaryParents.prototype.getUserDefinedPrimaryParents = function (items, family) {
11362+
var result = {};
11363+
11364+
var primaryParents = {};
11365+
for (var index = 0; index < items.length; index += 1) {
11366+
var item = items[index];
11367+
if (item.primaryParent != null) {
11368+
primaryParents[item.id] = item.primaryParent;
11369+
}
11370+
}
11371+
11372+
for (var nodeid in primaryParents) {
11373+
var primaryParent = primaryParents[nodeid];
11374+
var trace = {}
11375+
11376+
var nodes = [nodeid];
11377+
while (nodes.length > 0) {
11378+
var tempNodes = [];
11379+
for (var index = 0; index < nodes.length; index += 1) {
11380+
nodeid = nodes[index];
11381+
family.loopParents(this, nodeid, function (parentid, parent) {
11382+
trace[parentid] = nodeid;
11383+
if (parentid == primaryParent) {
11384+
while (trace[parentid] != null) {
11385+
result[trace[parentid]] = parentid;
11386+
parentid = trace[parentid];
11387+
}
11388+
tempNodes = [];
11389+
return family.BREAK;
11390+
}
11391+
if (parent.isVisible == false) {
11392+
tempNodes.push(parentid);
11393+
}
11394+
return family.SKIP;
11395+
})
11396+
}
11397+
nodes = tempNodes;
11398+
}
11399+
}
11400+
return result;
11401+
}
11402+
11403+
1133911404
/* /Controls/FamDiagram/Tasks/Transformations/Layouts/BaseLayout.js*/
1134011405
primitives.common.BaseLayout = function (params, options) {
1134111406
this._children = {};
@@ -12746,6 +12811,7 @@ primitives.famdiagram.OrderFamilyNodesTask = function (orderFamilyNodesOptionTas
1274612811
},
1274712812
_familyBalance = new primitives.famdiagram.FamilyBalance(),
1274812813
_familyMatrixesExtractor = new primitives.famdiagram.FamilyMatrixesExtractor(false),
12814+
_userDefinedPrimaryParents = new primitives.famdiagram.UserDefinedPrimaryParents(),
1274912815
_nullTreeLevelConnectorStackSize = new primitives.orgdiagram.TreeLevelConnectorStackSize();
1275012816

1275112817
function process(debug) {
@@ -12756,6 +12822,7 @@ primitives.famdiagram.OrderFamilyNodesTask = function (orderFamilyNodesOptionTas
1275612822
bundles = [];
1275712823

1275812824
var orderFamilyNodesOptions = orderFamilyNodesOptionTask.getOptions();
12825+
1275912826
var options = {
1276012827
enableMatrixLayout: orderFamilyNodesOptions.enableMatrixLayout,
1276112828
minimumMatrixSize: orderFamilyNodesOptions.minimumMatrixSize,
@@ -12775,7 +12842,8 @@ primitives.famdiagram.OrderFamilyNodesTask = function (orderFamilyNodesOptionTas
1277512842
maximumId: maximumId,
1277612843
defaultItemConfig: defaultItemConfig,
1277712844
itemsPositions: userDefinedNodesOrderTask.getPositions(),
12778-
itemsGroups: userDefinedNodesOrderTask.getGroups()
12845+
itemsGroups: userDefinedNodesOrderTask.getGroups(),
12846+
primaryParents: _userDefinedPrimaryParents.getUserDefinedPrimaryParents(orderFamilyNodesOptions.items, logicalFamily)
1277912847
};
1278012848

1278112849
var balanceResult = _familyBalance.balance(balanceParams);

0 commit comments

Comments
 (0)