Commit b1a73a52 by Valera Rozuvan Committed by Alexander Kryklia

Client side drag and drop. Work in progress. Part 5.

parent 57bec408
...@@ -8,6 +8,10 @@ define(['logme'], function (logme) { ...@@ -8,6 +8,10 @@ define(['logme'], function (logme) {
return Draggables; return Draggables;
function Draggables(state) { function Draggables(state) {
var _draggables;
_draggables = [];
(function (i) { (function (i) {
while (i < state.config.draggable.length) { while (i < state.config.draggable.length) {
processDraggable(state.config.draggable[i], i + 1); processDraggable(state.config.draggable[i], i + 1);
...@@ -15,9 +19,10 @@ define(['logme'], function (logme) { ...@@ -15,9 +19,10 @@ define(['logme'], function (logme) {
} }
}(0)); }(0));
return;
function processDraggable(obj, index) { function processDraggable(obj, index) {
var draggableContainerEl, imgEl, inContainer, var draggableContainerEl, imgEl, inContainer, ousePressed;
mouseDown;
draggableContainerEl = $( draggableContainerEl = $(
'<div ' + '<div ' +
...@@ -27,6 +32,7 @@ define(['logme'], function (logme) { ...@@ -27,6 +32,7 @@ define(['logme'], function (logme) {
'display: inline; ' + 'display: inline; ' +
'float: left; ' + 'float: left; ' +
'overflow: hidden; ' + 'overflow: hidden; ' +
'z-index: ' + index + '; ' +
'" ' + '" ' +
'data-draggable-position-index="' + index + '" ' + 'data-draggable-position-index="' + index + '" ' +
'></div>' '></div>'
...@@ -49,89 +55,114 @@ define(['logme'], function (logme) { ...@@ -49,89 +55,114 @@ define(['logme'], function (logme) {
} }
draggableContainerEl.appendTo(state.sliderEl); draggableContainerEl.appendTo(state.sliderEl);
_draggables.push(draggableContainerEl);
inContainer = true; inContainer = true;
mouseDown = false; mousePressed = false;
draggableContainerEl.mousedown(mouseDown);
draggableContainerEl.mouseup(mouseUp);
draggableContainerEl.mousemove(mouseMove);
draggableContainerEl.mouseleave(mouseLeave);
draggableContainerEl.mousedown(function (event) { return;
if (mouseDown === false) {
function mouseDown(event) {
if (mousePressed === false) {
if (inContainer === true) { if (inContainer === true) {
draggableContainerEl.detach(); draggableContainerEl.detach();
draggableContainerEl.css('position', 'absolute'); draggableContainerEl.css('position', 'absolute');
draggableContainerEl.css('left', (event.pageX - 50)); draggableContainerEl.css('left', event.pageX - 50);
draggableContainerEl.css('top', (event.pageY - 50)); draggableContainerEl.css('top', event.pageY - 50);
draggableContainerEl.appendTo(state.containerEl); draggableContainerEl.appendTo(state.containerEl);
inContainer = false; inContainer = false;
} }
mouseDown = true; draggableContainerEl.attr('data-old-z-index', draggableContainerEl.css('z-index'));
draggableContainerEl.css('z-index', '1000');
mousePressed = true;
event.preventDefault(); event.preventDefault();
} }
}); }
draggableContainerEl.mouseup(function (event) { function mouseUp(event) {
if (mouseDown === true) { if (mousePressed === true) {
mouseDown = false;
checkLandingElement(event); checkLandingElement(event);
event.preventDefault();
} }
}); }
draggableContainerEl.mousemove(function (event) { function mouseMove(event) {
if (mouseDown === true) { if (mousePressed === true) {
draggableContainerEl.css('left', (event.pageX - 50)); draggableContainerEl.css('left', (event.pageX - 50));
draggableContainerEl.css('top', (event.pageY - 50)); draggableContainerEl.css('top', (event.pageY - 50));
event.preventDefault(); event.preventDefault();
} }
}); }
draggableContainerEl.mouseleave(function (event) { function mouseLeave(event) {
if (mouseDown === true) { if (mousePressed === true) {
mouseDown = false;
checkLandingElement(event); checkLandingElement(event);
event.preventDefault();
} }
}); }
return;
function checkLandingElement(event) { function checkLandingElement(event) {
var offsetDE, children; var offsetDE, offsetTE, indexes, DEindex;
mousePressed = false;
offsetDE = draggableContainerEl.offset(); offsetDE = draggableContainerEl.offset();
offsetTE = state.targetEl.offset();
if ( if (
(offsetDE.left < state.targetEl.offset().left) || (offsetDE.left < offsetTE.left) ||
(offsetDE.left + 100 > state.targetEl.offset().left + state.targetEl.width()) || (offsetDE.left + 100 > offsetTE.left + state.targetEl.width()) ||
(offsetDE.top < state.targetEl.offset().top) || (offsetDE.top < offsetTE.top) ||
(offsetDE.top + 100 > state.targetEl.offset().top + state.targetEl.height()) (offsetDE.top + 100 > offsetTE.top + state.targetEl.height())
) { ) {
draggableContainerEl.detach(); draggableContainerEl.detach();
draggableContainerEl.css('position', 'static'); draggableContainerEl.css('position', 'static');
children = state.sliderEl.children(); indexes = [];
DEindex = parseInt(draggableContainerEl.attr('data-draggable-position-index'), 10);
if (children.length === 0) { state.sliderEl.children().each(function (index, value) {
draggableContainerEl.appendTo(state.sliderEl); indexes.push({
} else { 'index': parseInt($(value).attr('data-draggable-position-index'), 10),
state.sliderEl.children().each(function (index, value) { 'el': $(value)
if (inContainer === false) {
if (parseInt($(value).attr('data-draggable-position-index'), 10) + 1 === parseInt(draggableContainerEl.attr('data-draggable-position-index'), 10)) {
$(value).after(draggableContainerEl);
inContainer = true;
} else if (parseInt($(value).attr('data-draggable-position-index'), 10) - 1 === parseInt(draggableContainerEl.attr('data-draggable-position-index'), 10)) {
$(value).before(draggableContainerEl);
inContainer = true;
}
}
}); });
} });
(function (c1) {
while (c1 < indexes.length) {
if ((inContainer === false) && (indexes[c1].index > DEindex)) {
indexes[c1].el.before(draggableContainerEl);
inContainer = true;
}
c1 += 1;
}
}(0));
if (inContainer === false) { if (inContainer === false) {
draggableContainerEl.appendTo(state.sliderEl); draggableContainerEl.appendTo(state.sliderEl);
inContainer = true;
} }
} }
(function (c1) {
while (c1 < _draggables.length) {
if (draggableContainerEl.attr('data-old-z-index') < _draggables[c1].css('z-index')) {
_draggables[c1].css('z-index', _draggables[c1].css('z-index') - 1);
}
c1 += 1;
}
draggableContainerEl.css('z-index', c1);
}(0));
event.preventDefault();
} }
} }
......
...@@ -61,7 +61,8 @@ define( ...@@ -61,7 +61,8 @@ define(
Scroller(state); Scroller(state);
Draggables(state); Draggables(state);
logme(state); logme('config', config);
logme('state', state);
} }
}); });
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment