summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2016-09-06 15:38:52 +0200
committerSimon Rettberg2016-09-06 15:38:52 +0200
commit4e99fe0bee5d1744ecea7c53991fbd021cbf9e63 (patch)
treed4e0d04b786b1aa5b9178345d54150a9d34e28be
parentCSS: Make the checkbox style fix global (diff)
parentfind near available position and place item there if minimal collision was de... (diff)
downloadslx-admin-4e99fe0bee5d1744ecea7c53991fbd021cbf9e63.tar.gz
slx-admin-4e99fe0bee5d1744ecea7c53991fbd021cbf9e63.tar.xz
slx-admin-4e99fe0bee5d1744ecea7c53991fbd021cbf9e63.zip
Merge branch 'modularization' of dnbd3:openslx-ng/slx-admin into modularization
-rw-r--r--modules-available/roomplanner/js/grid.js48
1 files changed, 45 insertions, 3 deletions
diff --git a/modules-available/roomplanner/js/grid.js b/modules-available/roomplanner/js/grid.js
index 9fdd99e4..eb845f9f 100644
--- a/modules-available/roomplanner/js/grid.js
+++ b/modules-available/roomplanner/js/grid.js
@@ -445,12 +445,54 @@ $(document).ready(function(){
// the element is already in drawing area
var el = (ui.helper == ui.draggable) ? ui.draggable : $(ui.helper.clone());
- if ($(el).collision('[itemtype="'+$(el).attr('itemtype').replace('_drag','')+'"]').length) {
+
+ var collidingElements = $(el).collision('[itemtype="'+$(el).attr('itemtype').replace('_drag','')+'"]');
+
+ var i = 0;
+ while (collidingElements.length > 0) {
+ // too much tries - abort
+ if (i > 5) { return; }
- // pathfinding zu besserer position
+ if (ui.helper != ui.draggable) {
+ var leftPos = parseInt($(el).css('left'))-parseInt($('#drawarea').css('left'))-$('#drawpanel').offset().left;
+ var topPos = parseInt($(el).css('top'))-parseInt($('#drawarea').css('top'))-($('#drawpanel').offset().top + $('#drawpanel .panel-heading').height());
+ var cp = roomplanner.getCellPositionFromPixels(leftPos,topPos);
+ leftPos = cp[0];
+ topPos = cp[1];
- return;
+ } else {
+ var leftPos = parseInt($(el).css('left'));
+ var topPos = parseInt($(el).css('top'));
+ }
+
+ var collider = $(collidingElements[0]);
+ var colliderTop = parseInt(collider.css('top'));
+ var colliderLeft = parseInt(collider.css('left'));
+
+ var overlap = {
+ x: Math.min(colliderLeft+collider.outerWidth(),leftPos+$(el).outerWidth()) - Math.max(leftPos,colliderLeft),
+ y: Math.min(colliderTop+collider.outerHeight(),topPos+$(el).outerHeight()) - Math.max(topPos,colliderTop)
+ };
+
+ if (overlap.x <= overlap.y) {
+ var lpos = parseInt($(el).css('left'));
+ if (colliderLeft + overlap.x == leftPos + $(el).width()) {
+ $(el).css('left',(lpos - (overlap.x+2))+"px");
+ } else {
+ $(el).css('left',(lpos + overlap.x+2)+"px");
+ }
+ } else {
+ var tpos = parseInt($(el).css('top'));
+ if (colliderTop + overlap.y == topPos + $(el).height()) {
+ $(el).css('top',(tpos - (overlap.y+2))+"px");
+ } else {
+ $(el).css('top',(tpos + overlap.y+2)+"px");
+ }
+ }
+ collidingElements = $(el).collision('[itemtype="'+$(el).attr('itemtype').replace('_drag','')+'"]');
+
+ i++;
}
var itemtype = $(el).attr('itemtype');