123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319 |
- if(!dojo._hasResource["dojox.mdnd.dropMode.OverDropMode"]){
- dojo._hasResource["dojox.mdnd.dropMode.OverDropMode"] = true;
- dojo.provide("dojox.mdnd.dropMode.OverDropMode");
- dojo.require("dojox.mdnd.AreaManager");
- dojo.declare(
- "dojox.mdnd.dropMode.OverDropMode",
- null,
- {
-
-
-
-
- _oldXPoint: null,
-
-
- _oldYPoint: null,
-
-
- _oldBehaviour: "up",
- constructor: function(){
-
- this._dragHandler = [
- dojo.connect(dojox.mdnd.areaManager(), "onDragEnter", function(coords, size){
- var m = dojox.mdnd.areaManager();
- if(m._oldIndexArea == -1){
- m._oldIndexArea = m._lastValidIndexArea;
- }
- })
- ];
- },
- addArea: function(/*Array*/areas, /*Object*/object){
-
-
-
-
-
-
-
-
-
- var length = areas.length,
- position = dojo.position(object.node, true);
- object.coords = {'x':position.x, 'y':position.y};
- if(length == 0){
- areas.push(object);
- }
- else{
- var x = object.coords.x;
- for(var i = 0; i < length; i++){
- if(x < areas[i].coords.x){
- for(var j = length-1; j >= i; j--)
- areas[j + 1] = areas[j];
- areas[i] = object;
- break;
- }
- }
- if(i == length){
- areas.push(object);
- }
- }
- return areas;
- },
- updateAreas: function(/*Array*/areaList){
-
-
-
-
-
-
-
- var length = areaList.length;
- for(var i = 0; i < length; i++){
- this._updateArea(areaList[i]);
- }
- },
- _updateArea : function(/*Object*/area){
-
-
-
-
-
-
-
- var position = dojo.position(area.node, true);
- area.coords.x = position.x;
- area.coords.x2 = position.x + position.w;
- area.coords.y = position.y;
- },
- initItems: function(/*Object*/area){
-
-
-
-
-
- dojo.forEach(area.items, function(obj){
-
- var node = obj.item.node;
- var position = dojo.position(node, true);
- var y = position.y + position.h/2;
- obj.y = y;
- });
- area.initItems = true;
- },
- refreshItems: function(/*Object*/area, /*Integer*/indexItem, /*Object*/size, /*Boolean*/added){
-
-
-
-
-
-
-
-
-
-
-
- if(indexItem == -1){
- return;
- }
- else if(area && size && size.h){
- var height = size.h;
- if(area.margin){
- height += area.margin.t;
- }
- var length = area.items.length;
- for(var i = indexItem; i < length; i++){
- var item = area.items[i];
- if(added){
- item.y += height;
- }
- else{
- item.y -= height;
- }
- }
- }
- },
- getDragPoint: function(/*Object*/coords, /*Object*/size, /*Object*/mousePosition){
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- return {
- 'x': mousePosition.x,
- 'y': mousePosition.y
- }
- },
- getTargetArea: function(/*Array*/areaList, /*Object*/ coords, /*integer*/currentIndexArea ){
-
-
-
-
-
-
-
-
-
-
-
- var index = 0;
- var x = coords.x;
- var y = coords.y;
- var end = areaList.length;
- var start = 0, direction = "right", compute = false;
- if(currentIndexArea == -1 || arguments.length < 3){
-
- compute = true;
- }
- else{
-
- if(this._checkInterval(areaList, currentIndexArea, x, y)){
- index = currentIndexArea;
- }
- else{
- if(this._oldXPoint < x){
- start = currentIndexArea + 1;
- }
- else{
- start = currentIndexArea - 1;
- end = 0;
- direction = "left";
- }
- compute = true;
- }
- }
- if(compute){
- if(direction === "right"){
- for(var i = start; i < end; i++){
- if(this._checkInterval(areaList, i, x, y)){
- index = i;
- break;
- }
- }
- if(i == end){
- index = -1;
- }
- }
- else{
- for(var i = start; i >= end; i--){
- if(this._checkInterval(areaList, i, x, y)){
- index = i;
- break;
- }
- }
- if(i == end-1){
- index = -1;
- }
- }
- }
- this._oldXPoint = x;
- return index;
- },
- _checkInterval: function(/*Array*/areaList, /*Integer*/index, /*Coord*/x, /*Coord*/y){
-
-
-
-
-
-
-
-
-
-
-
-
-
- var area = areaList[index];
- var node = area.node;
- var coords = area.coords;
- var startX = coords.x;
- var endX = coords.x2;
- var startY = coords.y;
- var endY = startY + node.offsetHeight;
- if(startX <= x && x <= endX && startY <= y && y <= endY){
- return true;
- }
- return false;
- },
- getDropIndex: function(/*Object*/ targetArea, /*Object*/ coords){
-
-
-
-
-
-
-
-
-
- var length = targetArea.items.length;
- var coordinates = targetArea.coords;
- var y = coords.y;
- if(length > 0){
-
- for(var i = 0; i < length; i++){
-
- if(y < targetArea.items[i].y){
- return i;
- }
- else{
- if(i == length-1){
- return -1;
- }
- }
- }
- }
- return -1;
- },
- destroy: function(){
- dojo.forEach(this._dragHandler, dojo.disconnect);
- }
- });
- (function(){
- dojox.mdnd.areaManager()._dropMode = new dojox.mdnd.dropMode.OverDropMode();
- }());
- }
|