@@ -789,26 +789,43 @@ function getLeftXForWord(word, link) {
789789 if ( word instanceof Word ) { //is a word
790790 return word . leftX ;
791791 } else { //is a link
792+ if ( determineSide ( link ) == swapside . YES ) {
793+ if ( link . leftAttach == sides . RIGHT ) {
794+ return word . linesLeftX [ 0 ] ;
795+ } else if ( link . leftAttach == sides . LEFT ) {
796+ return word . linesLeftX [ 0 ] ;
797+ }
798+ }
799+ else {
800+ if ( link . leftAttach == sides . LEFT ) {
801+ return word . linesLeftX [ 0 ] ;
802+ } else if ( link . leftAttach == sides . RIGHT ) {
803+ return word . linesLeftX [ 0 ] ;
804+ }
805+ }
792806
793- if ( link . leftAttach == sides . LEFT ) {
794- return word . linesLeftX [ 0 ] ;
795- } else if ( link . leftAttach == sides . RIGHT ) {
796- return word . linesLeftX [ 0 ] ;
797-
798807 // return word.linesLeftX[word.numLineSegments-1];
799- }
800808 }
801809}
802810
803811function getRightXForWord ( word , link ) {
804812 if ( word instanceof Word ) { //is a word
805813 return word . rightX ;
806814 } else { //is a link
807- if ( link . leftAttach == sides . LEFT ) {
808- return word . linesRightX [ 0 ] ;
809- } else if ( link . leftAttach == sides . RIGHT ) {
810- return word . linesRightX [ 0 ] ;
811- // return word.linesRightX[word.numLineSegments-1];
815+ if ( determineSide ( link ) == swapside . YES ) {
816+ if ( link . leftAttach == sides . RIGHT ) {
817+ return word . linesRightX [ 0 ] ;
818+ } else if ( link . leftAttach == sides . LEFT ) {
819+ return word . linesRightX [ 0 ] ;
820+ // return word.linesRightX[word.numLineSegments-1];
821+ }
822+ }
823+ else {
824+ if ( link . leftAttach == sides . LEFT ) {
825+ return word . linesLeftX [ 0 ] ;
826+ } else if ( link . leftAttach == sides . RIGHT ) {
827+ return word . linesLeftX [ 0 ] ;
828+ }
812829 }
813830 }
814831}
@@ -983,7 +1000,7 @@ function getLinkStyles(link, xpts) {
9831000function storeOnlyArrows ( rowNum , y1 , link , xPositions ) {
9841001
9851002 arrowPos = [ ] ;
986-
1003+ console . log ( "xPos Length: " + xPositions . length ) ;
9871004 for ( var i = 0 ; i < xPositions . length ; i ++ ) {
9881005
9891006 var wordIdx = xPositions [ i ] . wordIdx ;
@@ -1116,7 +1133,7 @@ function calculateStartRow(idx, rowNum, link, percentagePadding, xPositions, lin
11161133
11171134 console . log ( "START link.polylines[i] style = " + linkStyles [ idx ] ) ;
11181135
1119- //storeArrow(0, p1x, p1y, link, link.leftWord, link.leftAttach, getLeftXForLeftWord(link), getRightXForLeftWord(link));
1136+ //storeArrow(0, p1x, p1y, link, link.leftWord, link.leftAttach, getLeftXForLeftWord(link), getRightXForLeftWord(link));
11201137
11211138 //storeLeftArrow(p1x, p1y, link, link.leftWord, link.leftAttach, getLeftXForLeftWord(link), getRightXForLeftWord(link));
11221139
@@ -1407,20 +1424,20 @@ function drawLink(link) {
14071424 var percentagePadding = availableHeight / ( rows [ i ] . maxSlots + 1 ) ;
14081425
14091426 if ( i == minRow && minRow == maxRow ) { //ONLY ROW
1410- var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , i , link ) ;
1427+ var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , i , link , rowtypes . ONLY ) ;
14111428
14121429 calculateOnlyRow ( minRow , link , percentagePadding , rowAttachXPos , linkStyles ) ;
14131430 } else if ( i == minRow ) { //FIRST ROW
14141431
1415- var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , minRow , link , - 1 ) ;
1432+ var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , minRow , link , rowtypes . START ) ;
14161433
14171434 calculateStartRow ( rowNum , i , link , percentagePadding , rowAttachXPos , linkStyles ) ;
14181435 } else if ( i == maxRow ) { //LAST ROW
14191436
1420- var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , maxRow , link , 1 ) ;
1437+ var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , maxRow , link , rowtypes . END ) ;
14211438 calculateEndRow ( rowNum , i , link , percentagePadding , rowAttachXPos , linkStyles ) ;
14221439 } else { //MIDDLE ROW
1423- var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , i , link ) ;
1440+ var rowAttachXPos = filterXPositionsForOnlyThisRow ( attachmentXPositions , i , link , rowtypes . MIDDLE ) ;
14241441
14251442 calculateMiddleRow ( rowNum , i , link , percentagePadding , rowAttachXPos , linkStyles ) ;
14261443 }
@@ -1431,19 +1448,30 @@ function drawLink(link) {
14311448
14321449
14331450
1434- function filterXPositionsForOnlyThisRow ( attachmentXPositions , row , link , which ) {
1435-
1451+ function filterXPositionsForOnlyThisRow ( attachmentXPositions , row , link , type ) {
1452+ // type:
1453+ // 0 only/middle
1454+ // 1 start
1455+ // 2 end
14361456 var rowAttachXPos = [ ] ;
1437-
1457+ //console.log("attachmentXPositions: " + attachmentXPositions.length);
14381458 for ( var aaa = 0 ; aaa < attachmentXPositions . length ; aaa ++ ) {
1459+
14391460 if ( link . words [ aaa ] instanceof Link ) {
14401461
14411462 console . log ( "rootMinWord = " + link . words [ aaa ] . rootMinWord . toString ( ) ) ;
14421463 console . log ( "rootMaxWord = " + link . words [ aaa ] . rootMaxWord . toString ( ) ) ;
1443-
1444- if ( link . words [ aaa ] . rootMinWord . row . idx == row ) {
1445- rowAttachXPos . push ( { wordIdx :aaa , xpos :attachmentXPositions [ aaa ] } ) ;
1464+ //console.log("link idx: " + link.words[aaa].rootMinWord.row.idx + " row: " + row);
1465+ if ( link . words [ aaa ] . rootMinWord . row . idx == row ) {
1466+ rowAttachXPos . push ( { wordIdx :aaa , xpos :attachmentXPositions [ aaa ] } ) ;
1467+ console . log ( "linkaaa: " + link . words [ aaa ] . rootMinWord ) ;
14461468 }
1469+ else if ( type == rowtypes . END ) {
1470+ if ( link . words [ aaa ] . rootMinWord . row . idx != link . words [ aaa ] . rootMaxWord . row . idx ) {
1471+ console . log ( "linkaaa: " + link . words [ aaa ] . rootMinWord ) ;
1472+ rowAttachXPos . push ( { wordIdx :aaa , xpos :attachmentXPositions [ aaa + 1 ] } ) ;
1473+ }
1474+ }
14471475
14481476 } else if ( link . words [ aaa ] instanceof Word ) {
14491477
@@ -1452,11 +1480,12 @@ function filterXPositionsForOnlyThisRow(attachmentXPositions, row, link, which)
14521480 }
14531481 }
14541482 }
1455-
1483+ //console.log("rowAttachXpos: " + rowAttachXPos);
14561484 return rowAttachXPos ;
14571485}
14581486
14591487
1488+
14601489function storeArrow ( idx , x , y , link , word , side , leftX , rightX ) {
14611490 console . log ( "\n *** in storedArrow \n x: " + x + " y: " + y + " word: " + word ) ;
14621491 link . arrows [ idx ] = { x :x , y :y , link :link , word :word , side :side , leftX :leftX , rightX : rightX , visibility :true } ;
@@ -1479,22 +1508,40 @@ function getLeftXForLeftWord(link) {
14791508 if ( link . leftType == types . WORD ) {
14801509 return link . leftWord . leftX ;
14811510 } else { //link
1482- if ( link . leftAttach == sides . LEFT ) {
1483- return link . leftWord . linesLeftX [ 0 ] ;
1484- } else if ( link . leftAttach == sides . RIGHT ) {
1485- return link . leftWord . linesLeftX [ link . leftWord . numLineSegments - 1 ] ;
1486- }
1511+ if ( determineSide ( link ) == swapside . YES ) {
1512+ if ( link . leftAttach == sides . RIGHT ) {
1513+ return link . leftWord . linesLeftX [ 0 ] ;
1514+ } else if ( link . leftAttach == sides . LEFT ) {
1515+ return link . leftWord . linesLeftX [ link . leftWord . numLineSegments - 1 ] ;
1516+ }
1517+ }
1518+ else {
1519+ if ( link . leftAttach == sides . LEFT ) {
1520+ return link . leftWord . linesLeftX [ 0 ] ;
1521+ } else if ( link . leftAttach == sides . RIGHT ) {
1522+ return link . leftWord . linesLeftX [ link . leftWord . numLineSegments - 1 ] ;
1523+ }
1524+ }
14871525 }
14881526}
14891527
14901528function getRightXForLeftWord ( link ) {
14911529 if ( link . leftType == types . WORD ) {
14921530 return link . leftWord . rightX ;
14931531 } else { //link
1494- if ( link . leftAttach == sides . LEFT ) {
1495- return link . leftWord . linesRightX [ 0 ] ;
1496- } else if ( link . leftAttach == sides . RIGHT ) {
1497- return link . leftWord . linesRightX [ link . leftWord . numLineSegments - 1 ] ;
1532+ if ( determineSide ( link ) == swapside . YES ) {
1533+ if ( link . leftAttach == sides . RIGHT ) {
1534+ return link . leftWord . linesRightX [ 0 ] ;
1535+ } else if ( link . leftAttach == sides . LEFT ) {
1536+ return link . leftWord . linesRightX [ link . leftWord . numLineSegments - 1 ] ;
1537+ }
1538+ }
1539+ else {
1540+ if ( link . leftAttach == sides . LEFT ) {
1541+ return link . leftWord . linesRightX [ 0 ] ;
1542+ } else if ( link . leftAttach == sides . RIGHT ) {
1543+ return link . leftWord . linesRightX [ link . leftWord . numLineSegments - 1 ] ;
1544+ }
14981545 }
14991546 }
15001547}
@@ -1503,10 +1550,19 @@ function getLeftXForRightWord(link) {
15031550 if ( link . rightType == types . WORD ) {
15041551 return link . rightWord . leftX ;
15051552 } else { //link
1506- if ( link . rightAttach == sides . LEFT ) {
1507- return link . rightWord . linesLeftX [ 0 ] ;
1508- } else if ( link . rightAttach == sides . RIGHT ) {
1509- return link . rightWord . linesLeftX [ link . rightWord . numLineSegments - 1 ] ;
1553+ if ( determineSide ( link ) == swapside . YES ) {
1554+ if ( link . rightAttach == sides . RIGHT ) {
1555+ return link . rightWord . linesLeftX [ 0 ] ;
1556+ } else if ( link . rightAttach == sides . LEFT ) {
1557+ return link . rightWord . linesLeftX [ link . rightWord . numLineSegments - 1 ] ;
1558+ }
1559+ }
1560+ else {
1561+ if ( link . rightAttach == sides . LEFT ) {
1562+ return link . rightWord . linesLeftX [ 0 ] ;
1563+ } else if ( link . rightAttach == sides . RIGHT ) {
1564+ return link . rightWord . linesLeftX [ link . rightWord . numLineSegments - 1 ] ;
1565+ }
15101566 }
15111567 }
15121568}
@@ -1515,10 +1571,19 @@ function getRightXForRightWord(link) {
15151571 if ( link . rightType == types . WORD ) {
15161572 return link . rightWord . rightX ;
15171573 } else { //link
1518- if ( link . rightAttach == sides . LEFT ) {
1519- return link . rightWord . linesRightX [ 0 ] ;
1520- } else if ( link . rightAttach == sides . RIGHT ) {
1521- return link . rightWord . linesRightX [ link . rightWord . numLineSegments - 1 ] ;
1574+ if ( determineSide ( link ) == swapside . YES ) {
1575+ if ( link . rightAttach == sides . RIGHT ) {
1576+ return link . rightWord . linesRightX [ 0 ] ;
1577+ } else if ( link . rightAttach == sides . LEFT ) {
1578+ return link . rightWord . linesRightX [ link . rightWord . numLineSegments - 1 ] ;
1579+ }
1580+ }
1581+ else {
1582+ if ( link . rightAttach == sides . LEFT ) {
1583+ return link . rightWord . linesLeftX [ 0 ] ;
1584+ } else if ( link . rightAttach == sides . RIGHT ) {
1585+ return link . rightWord . linesLeftX [ link . rightWord . numLineSegments - 1 ] ;
1586+ }
15221587 }
15231588 }
15241589}
0 commit comments