Group Test

by sberube

HTML

<script src="https://code.jquery.com/ui/1.11.2/jquery-ui.js"></script>
<div id="container">
    <div class="group" id="group1">
        <label>Group 1</label>
    </div>
    <div class="group" id="group2">
        <label>Group 2</label>
    </div>
    <div class="node" id="node1"></div>
    <div class="node" id="node2"></div>
    <div class="node" id="node3"></div>
    <div class="node" id="node4"></div>
    <div class="node" id="node5"></div>
    <div class="node" id="node6"></div>
    <div class="node" id="node7"></div>
    <div class="node" id="node8"></div>
</div>

CSS

.node {
    width: 60px;
    height: 60px;
    border: 1px solid black;
    border-radius: 30px;
    position:absolute;
}
#container {
    position: relative;
    width: 400px;
    height: 400px;
    border: 1px solid gray;
}
.group {
    border: 1px solid blue;
    position: absolute;
    background-color: lightblue;
    opacity: 0.8;
    border-radius: 4px;
}
.group label {
    width: 100%;
    color:white;
    font-weight: bold;
}
#group2 {
    border: 1px solid red;
    background-color: red;
    opacity: 0.5;
}
#node1 {
    background-color: orange;
}

JavaScript

var self = this;
var group1 = ['node1', 'node2', 'node3', 'node4'];
var group2 = ['node5', 'node6', 'node7', 'node8'];
var groups = [group1, group2];
var nodeMoved = function () {
    var padding = 30;
    var top, left, width, height, node, $node, position;


    for (var j = 0; j < groups.length; j++) {
        top = left = width = height = node = $node = position = undefined;
        var group = groups[j];


        for (i = 0; i < group.length; i++) {
            node = group[i];
            $node = $('#' + node);
            position = $node.position();
            top = (top === undefined ? position.top : Math.min(top, position.top));
            left = (left === undefined ? position.left : Math.min(left, position.left));
            width = (width === undefined ? (position.left + $node.width()) : Math.max(width, position.left + $node.width()));
            height = (height === undefined ? (position.top + $node.height()) : Math.max(height, position.top + $node.height()));

        }

        top = top - padding;
        left = left - padding;
        height = height - top + padding;
        width = width - left + padding;

        console.log(top + " " + left + " " + width + " " + height);
        $("#group" + (j + 1)).css({
            "top": top,
                "left": left,
                "width": width,
                "height": height
        });

    }
};

var groupMoved = function (event) {
    var groupId = $(event.currentTarget).attr('id');

    if (groupId === "group1") {

    } else if (groupId === "group2") {

    }
}



$(document).ready(function () {
    $('.node').draggable({
        drag: function (event) {
            nodeMoved();
        }
    });
    $('.group').draggable({
        drag: function (event) {
            groupMoved(event);
        }
    });
    nodeMoved();
});