Advertisement
Redfern_89

tpinger.js

Mar 7th, 2021
632
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function getCoords(elem) {
  2.     var box = elem.getBoundingClientRect();
  3.     return {
  4.         top: box.top + pageYOffset,
  5.         left: box.left + pageXOffset
  6.     };
  7. }
  8.  
  9. function clearSelected() {
  10.     var selected = document.getElementsByClassName('selected') || undefined;
  11.     if (typeof selected !== 'undefined') {
  12.         for (var i = 0; i < selected.length; i++) {
  13.             selected[i].classList.remove('selected');
  14.         }
  15.     }
  16. }
  17.  
  18. function line(id, x1, y1, x2, y2) {
  19.     var container = document.getElementById('container');
  20.     container.innerHTML = container.innerHTML + '<line x1="' + x1 + '" y1="' + y1 + '" x2="' + x2 + '" y2="' + y2 + '" stroke="black" id="' + id + '" />';
  21. }
  22.  
  23. function setLineXY1(id, x, y) {
  24.     var line = document.getElementById(id);
  25.     line.setAttribute('x1', x);
  26.     line.setAttribute('y1', y);
  27. }
  28.  
  29. function setLineXY2(id, x, y) {
  30.     var line = document.getElementById(id);
  31.     line.setAttribute('x2', x);
  32.     line.setAttribute('y2', y);
  33. }
  34.  
  35. window.onload = function() {
  36.     var selObjShiftX = 0;
  37.     var selObjShiftY = 0;
  38.     var dragObjFlag = 0;
  39.     var draggedObj = {};
  40.     var selectedObjs = [];
  41.     var multiselect = 0;
  42.     var draggedObjType = 'parent';
  43.    
  44.     var containerTop = document.getElementById('container').getBoundingClientRect().top;
  45.     var containerLeft = document.getElementById('container').getBoundingClientRect().left;
  46.     var containerHeight = document.getElementById('container').getBoundingClientRect().height;
  47.     var containerWidth = document.getElementById('container').getBoundingClientRect().width;
  48.    
  49.     var parents = document.getElementsByClassName('parent');
  50.     var parentLinesIDS = [];
  51.     var childLinesID = [];
  52.    
  53.     if (parents.length > 0) {
  54.         for (var i = 0; i < parents.length; i++) {
  55.             var p = parents[i];
  56.             var parentNum = p.getAttribute('data-num');
  57.             var parentRect = p.getElementsByClassName('icon')[0].getBoundingClientRect() || undefined;
  58.             var childs = document.getElementsByClassName('child-' + parentNum);
  59.            
  60.             for (var j = 0; j < childs.length; j++) {
  61.                 var childRect = childs[j].getElementsByClassName('icon')[0].getBoundingClientRect();
  62.                 line('line-' + parentNum + '-' + j, parentRect.x, parentRect.y, childRect.x, childRect.y);
  63.                 childs[j].setAttribute('data-line', 'line-' + parentNum + '-' + j);
  64.                 parentLinesIDS.push('line-' + parentNum + '-' + j);
  65.             }
  66.            
  67.             p.setAttribute('data-lines', parentLinesIDS.join(','));
  68.             parentLinesIDS = [];
  69.            
  70.         }
  71.     }
  72.    
  73.     document.addEventListener('keydown', function(e) {
  74.         if (e.key == 'Control') multiselect = 1;
  75.     });
  76.    
  77.     document.addEventListener('keyup', function(e) {
  78.         if (e.key == 'Control') multiselect = 0;
  79.     });
  80.        
  81.    
  82.     document.addEventListener('mousemove', function(e) {
  83.         if (dragObjFlag) {
  84.             var curX = e.pageX - selObjShiftX;
  85.             var curY = e.pageY - selObjShiftY;
  86.            
  87.             var thisW = draggedObj.offsetWidth - 16;
  88.             var thisH = draggedObj.offsetHeight - 16;
  89.            
  90.             if (curX < containerLeft) curX = containerLeft;
  91.             if (curY < containerTop) curY = containerTop;
  92.             if (curY > containerHeight) curY = containerHeight;
  93.             if (curX > (containerWidth - thisW)) curX = containerWidth - thisW;
  94.             if (curY > (containerHeight - thisH)) curY = containerHeight - thisH;
  95.            
  96.             draggedObj.style.left = curX + 'px';
  97.             draggedObj.style.top = curY + 'px';
  98.            
  99.             var lineX = draggedObj.getElementsByClassName('icon')[0].getBoundingClientRect().left;
  100.             var lineY = draggedObj.getElementsByClassName('icon')[0].getBoundingClientRect().top;
  101.            
  102.             if (draggedObjType == 'parent' || draggedObjType == 'parent-child') {
  103.                 var lines = draggedObj.getAttribute('data-lines') || undefined;
  104.                
  105.                 if (typeof lines !== 'undefined') {
  106.                     lines = lines.split(',');
  107.                     for (var i = 0; i < lines.length; i++) {
  108.                         setLineXY1(lines[i], lineX, lineY);
  109.                         console.log(lines[i]);
  110.                     }
  111.                 }
  112.             }
  113.            
  114.             if (draggedObjType == 'child' || draggedObjType == 'parent-child') {
  115.                 var line = draggedObj.getAttribute('data-line') || undefined;
  116.                
  117.                 if (typeof line !== 'undefined') {
  118.                     setLineXY2(line, lineX, lineY);
  119.                 }
  120.             }
  121.         }
  122.     });
  123.    
  124.     document.addEventListener('mousedown', function(e) {
  125.         if (e.button == 0) {
  126.             multiselect = 0;
  127.             selectedObjs = [];
  128.             for (var i = 0; i < 2; i++)
  129.                 clearSelected();
  130.         }
  131.     });
  132.    
  133.     var objsCollection = document.getElementsByClassName('object') || undefined;
  134.     if (typeof objsCollection !== 'undefined') {
  135.         for (var i = 0; i < objsCollection.length; i++) {
  136.            
  137.             objsCollection[i].addEventListener('mousedown', function(e) {
  138.                 dragObjFlag = true;
  139.                 selObjShiftX = e.pageX - getCoords(this).left;
  140.                 selObjShiftY = e.pageY - getCoords(this).top;
  141.                 draggedObj = this;
  142.                
  143.                 if (this.classList.contains('parent')) {
  144.                     draggedObjType = 'parent';
  145.                 } else {
  146.                     draggedObjType = 'child';
  147.                 }
  148.                 if (this.classList.contains('parent') && this.classList.contains('child')) {
  149.                     draggedObjType = 'parent-child';
  150.                 }
  151.                
  152.                 if (!multiselect && selectedObjs.length <= 1) {
  153.                     clearSelected();
  154.                     this.classList.add('selected');
  155.                 }
  156.                 if (multiselect && selectedObjs.length >= 1) {
  157.                     this.classList.toggle('selected');
  158.                 }
  159.                 if (multiselect && selectedObjs.length <= 1) {
  160.                     this.classList.add('selected');                
  161.                 }
  162.                
  163.                 var selected = document.getElementsByClassName('selected') || undefined;
  164.                
  165.                 if (typeof selected !== 'undefined') {
  166.                     selectedObjs = [];
  167.                     for (var j = 0; j < selected.length; j++) {
  168.                         selectedObjs.push(selected[j]);
  169.                     }
  170.                 }
  171.  
  172.                 e.preventDefault();
  173.                 e.stopPropagation();
  174.             });
  175.            
  176.             objsCollection[i].addEventListener('mouseup', function(e) {
  177.                 dragObjFlag = false;
  178.                 draggedObj = {};
  179.             });
  180.            
  181.         }
  182.     }
  183.  
  184.    
  185. };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement