Вход Регистрация
Файл: js/al/sorter.js
Строк: 410
<?php
var sorter = {
  
sqr: function(x) {
    return 
x;
  },
  
evCoords: function(ev) {
    return 
browser.android ? [ev.touches[0].pageX + (ev.pageX || 0), ev.touches[0].pageY + (ev.pageY || 0)] : [ev.pageXev.pageY];
  },

  
animstop: function() {
    
clearInterval(sorter.animtimer);
    
sorter.animtimer false;
  },
  
animcache: {},
  
animstep: function() {
    var 
finished = [], all true;
    for (var 
i in sorter.animcache) {
      if (
== 0) {
        
all false;
        
scrollNode.scrollTop += Math.ceil(sorter.animcache[i] / 5);
        continue;
      }
      var 
sorter.animcache[i], a.elFx.Transitions.easeOutQuintdt 200;
      var 
prev vkNow();
      
a.+= prev a.prev;
      
a.prev prev;
      if (
a.dt) {
        
all false;
        
e.style.left f(a.ta.sxa.dxdt) + 'px';
        
e.style.top f(a.ta.sya.dydt) + 'px';
        continue;
      }
      
e.style.left = (a.sx a.dx) + 'px';
      
e.style.top = (a.sy a.dy) + 'px';
      
clearInterval(a.timer);
      
finished.push(e.id);
      if (
a.ha.h();
    }
    for (var 
i in finished) {
      
delete(sorter.animcache[finished[i]]);
    }
    if (
all) {
      
sorter.animstop();
    }
  },
  
animate: function(exyhandler) {
    if (
browser.msie8) {
      
setStyle(e, {leftxtopy});
      if (
handlerhandler();
      return;
    }
    var 
sx intval(getStyle(e'left')), sy intval(getStyle(e'top'));
    var 
anim = {t0sxsxsysydxsxdysyhhandlerprevvkNow()};
    if (
sorter.animcache[e.id]) {
      
extend(sorter.animcache[e.id], anim);
      return;
    }
    
sorter.animcache[e.id] = extend(anim, {ele});
    if (!
sorter.animtimer) {
      
sorter.animtimer setInterval(sorter.animstep13);
    }
  },

  
mousedown: function(ev) {
    var 
touch ev && ev.touches && ev.touches.length == 1;
    if (
ev && (ev.button == || ev.which == || ev.ctrlKey || ev.metaKey) && !touch) {
      return 
true;
    }
    if (
sorter.current) return;

    var 
el thisel.parentNode.sorterevc sorter.evCoords(ev);
    if (
ev.target.tagName == 'A' || ev.target.tagName == 'INPUT' || ev.target.tagName == 'TEXTAREA' || ev.target.getAttribute('nosorthandle')) return;
    if (
ev.target.parentNode && ev.target.parentNode.tagName == 'A') return;

    
sorter.current s;
    
s.drag el;

    
addEvent(document'mousemove drag touchmove'sorter.mousemove);
    
addEvent(document'mouseup touchend touchcancel'sorter.mouseup);
    if (!
browser.opera && !browser.msie && !browser.mozilla && !browser.safari_mobile && !browser.android && !s.noscroll) {
      
addEvent(sorter.scrollNode'scroll'sorter.mousemove);
    }
    
extend(s, {
      
startXevc[0],
      
startYevc[1] + (browser.msie6 pageNode.scrollTop 0),
      
before: (el.nextSibling el.nextSibling.nextSibling false),
      
afterel.helper.previousSibling,
      
startIndexel.index
    
});
    
extend(sorter, {lastXevc[0], lastYevc[1], lastSscrollNode.scrollTop});
    
setStyle(el, {zIndex150});
    
addClass(el'sort_taken');

    if (
window.PrivacyPrivacy.hide(-1);
    if (
s.onMouseDown) {
      
s.onMouseDown(el);
    }

    
cur.cancelClick false;

    return 
touch || cancelEvent(ev);
  },
  
mousemove: function(ev) {
    if (!
sorter.current) return;

    var 
cancel trueevc = (ev.type == 'scroll') ? [sorter.lastXsorter.lastY scrollNode.scrollTop sorter.lastS] : sorter.evCoords(ev);
    var 
sorter.current;
    if (
ev.type == 'scroll') {
      
cancel false;
    } else {
      
sorter.lastX evc[0];
      
sorter.lastY evc[1];
      
sorter.lastS scrollNode.scrollTop;
      var 
my evc[1] - (browser.msie6 scrollNode.scrollTop);
      if (!
browser.safari_mobile && !browser.android && !s.noscroll) {
        if (
my 100) {
          
sorter.animcache[0] = my 100;
        } else if (
my lastWindowHeight 100) {
          
sorter.animcache[0] = my 100 lastWindowHeight;
        } else if (
sorter.animcache[0]) {
          
delete(sorter.animcache[0]);
        }
        if (
sorter.animcache[0] && !sorter.animtimer) {
          
sorter.animtimer setInterval(sorter.animstep13);
        }
      }
    }
    var 
el s.dragdx evc[0] - s.startXdy evc[1] + (browser.msie6 pageNode.scrollTop 0) - s.startY;
    var 
el.helper.offsetLeftel.helper.offsetTopnx dxny dy;

    if (
dx 10 || dx < -10 || dy 10 || dy < -10) {
      
cur.cancelClick true;
    }

    if (
s._dragtargets) {
      for (var 
i in s._dragtargets.nodes) {
        var 
dragtarget s._dragtargets.nodes[i];
        var 
xy getXY(dragtarget), sz getSize(dragtarget);
        var 
p1 = {x: (evc[0] - xy[0]), y: (evc[1] - xy[1])};
        if (
p1.&& p1.sz[0] && p1.&& p1.sz[1]) {
          if (!
dragtarget._dragover) {
            if (
s._dragtargets.onDragOver) {
              
s._dragtargets.onDragOver(eldragtarget);
            }
            
dragtarget._dragover true;
            
s._dragtarget dragtarget;
          }
        } else if (
dragtarget._dragover) {
          if (
s._dragtargets.onDragOut) {
            
s._dragtargets.onDragOut(eldragtarget);
          }
          
dragtarget._dragover false;
          
s._dragtarget null;
        }
      }
    }

    
setStyle(el, {leftnxtopny});
    if (
browser.msie8) { // force redraw
      
var temp el.offsetLeft;
    }
    if (
nx el.&& ny el.&& nx el.&& ny el.y) return cancel cancelEvent(ev) : true;

    for (var 
0newind 0newdist 1e9s.elems.length; ++i) {
      var 
s.elems[i], dist sorter.sqr(e.nx) + sorter.sqr(e.ny);
      if (
newdist dist) {
        
newind i;
        
newdist dist;
      }
    }
    if (
newind == el.index) return cancel cancelEvent(ev) : true;

    var 
d;
    if (
newind el.index) {
      
s.parent.insertBefore(els.elems[newind].helper);
      
= -1;
    } else if (
newind el.index) {
      if (
s.elems[newind].nextSibling) {
        
s.parent.insertBefore(els.elems[newind].nextSibling);
      } else {
        
s.parent.appendChild(el);
      }
      
1;
    }
    
s.parent.insertBefore(el.helperel);
    (
newind == s.elems.length addClass removeClass)(el.helper'sort_helper_last');

    for (var 
el.index!= newind+= d) {
      var 
s.elems[i] = s.elems[d], e.helper.offsetLefte.helper.offsetTop;
      
extend(e, {
        
indexe.index d,
        
xe.2,
        
ye.2
      
});
      
sorter.animate(exy);
    }
    
s.elems[newind] = el;
    
extend(el, {
      
indexnewind,
      
xel.helper.offsetLeft el.2,
      
yel.helper.offsetTop el.2
    
});
    
s.startX evc[0] - nx el.helper.offsetLeft;
    
s.startY evc[1] + (browser.msie6 pageNode.scrollTop 0) - ny el.helper.offsetTop;

    return 
cancel cancelEvent(ev) : true;
  },
  
mouseup: function(ev) {
    if (!
sorter.current) return;

    var 
sorter.currentel s.drag;
    
setStyle(el, {zIndex125});
    
sorter.animate(elel.previousSibling.offsetLeftel.previousSibling.offsetTop, function() {
      
setStyle(el, {zIndex100});
      
removeClass(el'sort_taken');
    });

    
sorter.stop();

    if (
sorter.animcache[0]) {
      
delete(sorter.animcache[0]);
      if (
isEmpty(sorter.animcache)) {
        
sorter.animstop();
      }
    }

    if (
s.onMouseUp) {
      var 
target s._dragtarget;
      if (
target) {
        if(
s._dragtargets.onDragOuts._dragtargets.onDragOut(eltarget);
        
sorter.restore(sel);
      }
      
s.onMouseUp(eltarget);
      
delete(s._dragtarget);
      if (
target) {
        return 
cancelEvent(ev);
      }
    }
    var 
before = (el.nextSibling el.nextSibling.nextSibling false), after el.helper.previousSibling;
    if ((
before != s.before || after != s.after) && s.onReorder) {
      
s.onReorder(elbeforeafter);
    }
    
delete(s.startIndex);
    
delete(s.before);
    
delete(s.after);

    return 
cancelEvent(ev);
  },
  
stop: function() {
    var 
sorter.current;
    
removeEvent(document'mousemove drag touchmove'sorter.mousemove);
    
removeEvent(document'mouseup touchend touchcancel'sorter.mouseup);
    
s.drag sorter.current false;
  },
  
restore: function(sel) {
    var 
doldind s.startIndex;
    if (
oldind el.index) {
      
s.parent.insertBefore(els.elems[oldind].helper);
      
= -1;
    } else if (
oldind el.index) {
      if (
s.elems[oldind].nextSibling) {
        
s.parent.insertBefore(els.elems[oldind].nextSibling);
      } else {
        
s.parent.appendChild(el);
      }
      
1;
    }
    
s.parent.insertBefore(el.helperel);

    for (var 
el.index!= oldind+= d) {
      var 
s.elems[i] = s.elems[d], e.helper.offsetLefte.helper.offsetTop;
      
extend(e, {
        
indexe.index d,
        
xe.2,
        
ye.2
      
});
      
sorter.animate(exy);
    }
    
s.elems[oldind] = el;
    
extend(el, {
      
indexoldind,
      
xel.helper.offsetLeft el.2,
      
yel.helper.offsetTop el.2
    
});
    
sorter.animate(elel.helper.offsetLeftel.helper.offsetTop);
    
delete(s.startIndex);
    
delete(s.before);
    
delete(s.after);
  },
  
shift: function(parent) { // move last to first place
    
var parent.sorterel s.elems[s.elems.length 1], newind 0d;

    
s.parent.insertBefore(els.elems[newind].helper);
    
= -1;

    
s.parent.insertBefore(el.helperel);

    for (var 
el.index!= newind+= d) {
      var 
s.elems[i] = s.elems[d], e.helper.offsetLefte.helper.offsetTop;
      
extend(e, {
        
indexe.index d,
        
xe.2,
        
ye.2
      
});
      
e.style.left 'px';
      
e.style.top 'px';
    }

    var 
el.helper.offsetLeftel.helper.offsetTop;
    
s.elems[newind] = el;
    
extend(el, {
      
indexnewind,
      
xel.2,
      
yel.2
    
});
    
el.style.left 'px';
    
el.style.top 'px';
  },
  
added: function(parent) {
    var 
parent.sorters.elems.length;
    var 
el parent.sorter.elems[1].nextSibling parent.firstChild;
    for (var 
lel && !el.getAttribute('stopsort'); el el.nextSibling, ++i) {
      
s.elems.push(el);

      var 
el.offsetLeftel.offsetTopsz getSize(el);
      var 
st = {
        
widthsz[0],
        
heightsz[1] - s.dh
      
}
      
extend(el, {
        
helperce('div', {className'sort_helper'}, st),
        
xsz[0] / 2wsz[0],
        
ysz[1] / 2hsz[1],
        
indexi
      
});
      var 
styles = {
        
zIndex100,
        
leftx,
        
topy,
        
widthgetStyle(el'width'),
        
position'absolute'
      
};
      if (!
s.noMoveCursorstyles.cursor 'move'

      
setStyle(elstyles);
      
parent.insertBefore(el.helperel);
      
addEvent(el'mousedown touchstart'sorter.mousedown);
    }
  },

  
update: function(obj) {
    if (!
obj) return;
    var 
parent obj.parentNodeparent.sorter;
    var 
started false;
    for (var 
i in s.elems) {
      var 
el s.elems[i];
      if (
el == obj) {
        
started true;
      }
      if (
started) {
        var 
el.helper.offsetLeftel.helper.offsetTopsz getSize(el);
        
setStyle(el.helper, {
          
heightsz[1] - s.dh
        
});
        
extend(el, {
          
xsz[0] / 2wsz[0],
          
ysz[1] / 2hsz[1]
        });
        var 
styles = {
          
zIndex100,
          
leftx,
          
topy,
          
position'absolute'
        
}
        if (!
s.noMoveCursorstyles.cursor 'move'

        
setStyle(elstyles);
      }
    }
  },

  
init: function(parentopts) {
    if (
browser.mobile && !browser.safari_mobile && !browser.android) return;

    
sorter.scrollNode browser.msie6 pageNode window;
    
parent ge(parent);

    var 
result = {
      
parentparent,
      
dhopts.dh || 0,
      
noMoveCursoropts.noMoveCursor || 0,
      
elems: [],
      
stop: function() {
        if (
sorter.current == result) {
          
sorter.stop();
        }
        for (var 
i in result.elems) {
          var 
ch result.elems[i];
          if (
sorter.animcache[ch.id]) {
            
delete(sorter.animcache[ch.id]);
          }
        }
      },
      
destroy: function() {
        
result.stop();
        var 
el result.parent;
        
removeAttr(el'sorter');
        for (var 
i in result.elems) {
          var 
ch result.elems[i];
          
el.removeChild(ch.helper);
          
removeEvent(ch'mousedown touchstart'sorter.mousedown);
          
setStyle(ch, {position''margin''});
          
removeAttr(ch'helper');
        }
        
sorter.animstop();
      },
      
onReorderopts.onReorder,
      
noscrollopts.noscroll
    
}
    if (
opts.onMouseDownresult.onMouseDown opts.onMouseDown;
    if (
opts.onMouseUpresult.onMouseUp opts.onMouseUp;
    var 
dragtargets = {nodes: []};
      if (
opts && opts.target) {
        var 
nodes opts.target.childNodes;
        
each(nodes, function(i,v) {
        if (
v.nodeType == 1) {
          
dragtargets.nodes.push(v);
        }
      });
      
dragtargets.onDragOver opts.onDragOver;
      
dragtargets.onDragOut opts.onDragOut;
      if (
dragtargets.nodes.length 0) {
        
result._dragtargets dragtargets;
      }
    }
    
parent.sorter result;
    
sorter.added(parent);
    return 
result;
  }
}

try{
stManager.done('sorter.js');}catch(e){}
?>
Онлайн: 0
Реклама