Вход Регистрация
Файл: js/al/qsorter.js
Строк: 425
<?php
var qsorter = {
  
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(qsorter.animtimer);
    
qsorter.animtimer false;
  },
  
animcache: {},
  
animstep: function() {
    var 
finished = [], all truetemp;
    for (var 
i in qsorter.animcache) {
      if (
== 0) {
        
all false;
        
scrollNode.scrollTop += Math.ceil(qsorter.animcache[i] / 5);
        continue;
      }
      var 
qsorter.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';
        if (
browser.msie8) { // force redraw
          
temp e.offsetLeft;
        }
        continue;
      }
      
e.style.left = (a.sx a.dx) + 'px';
      
e.style.top = (a.sy a.dy) + 'px';
      if (
browser.msie8) { // force redraw
        
temp e.offsetLeft;
      }
      
clearInterval(a.timer);
      
finished.push(e.parentNode.id);
      if (
a.ha.h.apply(e);
    }
    for (var 
i in finished) {
      
delete(qsorter.animcache[finished[i]]);
    }
    if (
all) {
      
qsorter.animstop();
    }
  },
  
animdone: function(s) {
    if (
s.cls) {
      
domPN(this).className s.cls;
    } else {
      
removeClass(domPN(this), s.clsUp);
    }
    
this.style.left this.style.top '';
    if (
cur.qsorterSetSize) {
      
setStyle(this.parentNode, {width''height''});
    }
  },
  
animate: function(esxsyxyhandlers) {
    if (
browser.msie8) {
      if (
s.cls) {
        
domPN(e).className s.cls;
      } else {
        
removeClass(domPN(e), s.clsUp);
      }
      
e.style.left e.style.top '';
      if (
cur.qsorterSetSize) {
        
setStyle(e.parentNode, {width''height''});
      }
      return;
    }
    var 
anim = {t0sxsxsysydxsxdysyhhandlerprevvkNow()};
    if (
qsorter.animcache[e.parentNode.id]) {
      
extend(qsorter.animcache[e.parentNode.id], anim);
      return;
    }
    
qsorter.animcache[e.parentNode.id] = extend(anim, {ele});
    if (!
qsorter.animtimer) {
      
qsorter.animtimer setInterval(qsorter.animstep13);
    }
  },

  
first: function(obj) {
    
el obj.firstChild;
    while(
el && el.nodeType == 3) {
      
el el.nextSibling;
    }
    return 
el;
  },

  
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 (
qsorter.current) return;
    
cur.qsorterOver false;

    var 
el thisinner qsorter.first(el), el.parentNode.qsorterevc qsorter.evCoords(ev);
    if (
s.canDrag) {
      if (!
s.canDrag(el)) return;
    } else if (
ev.target.getAttribute('nosorthandle') || el.getAttribute('nodrag')) return;

    
qsorter.current s;
    
qsorter.nextEl el.nextSibling;
    
extend(s, {dragel});
    
setStyle(inner, {leftel.'px'topel.s.offset 'px'zIndex150});
    if (
s.cls) {
      
el.className s.clsUp;
    } else {
      
addClass(els.clsUp);
    }
    if (
cur.qsorterSetSize) {
      var 
size getSize(inner);
      
setStyle(el, {widthsize[0], heightsize[1]});
    }

    
addEvent(document'mousemove drag touchmove'qsorter.mousemove);
    
addEvent(document'mouseup touchend touchcancel'qsorter.mouseup);
    if (!
browser.opera && !browser.msie && !browser.mozilla && !browser.safari_mobile && !browser.android && !s.noscroll) {
      
addEvent(qsorter.scrollNode'scroll'qsorter.mousemove);
    }
    
extend(s, {
      
startXevc[0],
      
startYevc[1] + (browser.msie6 pageNode.scrollTop 0),
      
beforeel.nextSibling,
      
afterel.previousSibling
    
});
    
extend(qsorter, {lastXevc[0], lastYevc[1], lastSscrollNode.scrollTop});

    if (
window.PrivacyPrivacy.hide(-1);

    
cur.cancelClick false;

    return 
touch || cancelEvent(ev);
  },

  
checkOver: function(sevc) {
    for (var 
i in s.dragEls) {
      var 
s.dragEls[i];
      if (!
d.xy || d.xy[0] == 0) {
        
d.xy getXY(d);
        
d.sz getSize(d);
      }
      if (
evc[0] > d.xy[0] && evc[1] > d.xy[1] && evc[0] < d.xy[0]+d.sz[0] && evc[1] < d.xy[1]+d.sz[1]) {
        if (
cur.qsorterOver != d) {
          if (
cur.qsorterOver) {
            
s.onDragOut(cur.qsorterOver);
          }
          
cur.qsorterOver d;
          
s.onDragOver(d);
        }
      } else if (
cur.qsorterOver && cur.qsorterOver == d) {
        
cur.qsorterOver false;
        
s.onDragOut(d);
      }
    }
  },

  
mousemove: function(ev) {
    if (!
qsorter.current) return;

    var 
cancel trueevc = (ev.type == 'scroll') ? [qsorter.lastXqsorter.lastY scrollNode.scrollTop qsorter.lastS] : qsorter.evCoords(ev);
    var 
qsorter.current;
    if (
ev.type == 'scroll') {
      
cancel false;
    } else {
      
qsorter.lastX evc[0];
      
qsorter.lastY evc[1];
      
qsorter.lastS scrollNode.scrollTop;
      if (!
browser.safari_mobile && !browser.android && !s.noscroll) {
        var 
my evc[1] - (browser.msie6 scrollNode.scrollTop);
        if (
my 100) {
          
qsorter.animcache[0] = my 100;
        } else if (
my lastWindowHeight 100) {
          
qsorter.animcache[0] = my 100 lastWindowHeight;
        } else if (
qsorter.animcache[0]) {
          
delete(qsorter.animcache[0]);
        }
        if (
qsorter.animcache[0] && !qsorter.animtimer) {
          
qsorter.animtimer setInterval(qsorter.animstep13);
        }
      }
    }

    var 
el s.drag;
    var 
dx evc[0] - s.startX;
    var 
dy evc[1] + (browser.msie6 pageNode.scrollTop 0) - s.startY;
    var 
el.xnx dxel.yny dys.widths.heighttemp;
    var 
el.ixsize s.xsizexsizeMath.floor((0.1) / xsize);

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

    
setStyle(qsorter.first(el), {leftnxtopny s.offset});
    if (
browser.msie8) { // force redraw
      
temp el.offsetLeft;
    }

    if (
s.dragCont && s.dragCont.visible) {
      if (
evc[0] > s.dragCont.x1 && evc[1] > s.dragCont.y1 && evc[0] < s.dragCont.x2 && evc[1] < s.dragCont.y2) {
        if (!
cur.sorterDragIn) {
          
cur.sorterDragIn 1;
          
animate(el, {opacity0.2}, 400);
        }
        
qsorter.checkOver(sevc);
        return;
      } else if (
cur.sorterDragIn) {
        
cur.sorterDragIn 0;
        
animate(el, {opacity1}, 400);
      }
      if (
cur.qsorterOver) {
        
qsorter.checkOver(sevc);
      }
    }

    var 
newp Math.floor(0.5 + (dx w)),
        
newq Math.floor(0.5 + (dy h)),
        
nodragq Math.floor(s.noDragCount xsize),
        
nodragp s.noDragCount nodragq xsize;
    
newp Math.min(Math.max(newp0), xsize 1); newq Math.max(newq0);
    if (
newq nodragqnewq nodragq;
    if (
newq == Math.ceil(s.noDragCount xsize) - && newp nodragpnewp nodragp;
    var 
newi newq xsize newp;
    if (
newi s.count 1) {
      var 
newd newi - (s.count 1);
      
newq -= Math.floor((newd 0.1) / xsize);
      
newp -= newd xsize;
      if (
newp 0) {
        
newp += xsize;
        --
newq;
      }
      
newi s.count 1;
    }
    if (
newi == i) return cancel cancelEvent(ev) : true;

    var 
op poq qfalse= (newi i) ? -1;

    for (var 
i!= newi+= d) {
      var 
np dnq q;
      if (
np == xsize) {
        
np 0;
        ++
nq;
      } else if (
np 0) {
        
np xsize 1;
        --
nq;
      }

      
s.elems[np][nq];

      var 
sx e.x;
      var 
sy e.y;
      var 
sx + (np) * w;
      var 
sy + (nq) * h;
      
setStyle(qsorter.first(e), {leftsxtopsy s.offset});
      if (
s.cls) {
        
e.className s.clsUp;
      } else {
        
addClass(es.clsUp);
      }
      if (
cur.qsorterSetSize) {
        var 
size getSize(qsorter.first(e));
        
setStyle(e, {widthsize[0], heightsize[1]});
      }

      
extend(e, {
        
ij,
        
xx,
        
yy
      
});
      
s.elems[p][q] = e;
      
qsorter.animate(qsorter.first(e), sxsy+s.offsetxy+s.offsetqsorter.animdone.bind(qsorter.first(e), s), s);

      
npnq;
    }

    if (
0) {
      
s.parent.insertBefore(ele);
    } else {
      if (
e.nextSibling) {
        
s.parent.insertBefore(ele.nextSibling);
      } else {
        
s.parent.appendChild(el);
      }
    }

    
dx = (op) * w;
    
dy = (oq) * h;
    
s.elems[newp][newq] = el;
    
extend(el, {
      
inewi,
      
xel.dx,
      
yel.dy
    
});

    
s.startX += dxs.startY += dy;

    if (
browser.msie8) { // force redraw
      
temp el.offsetLeft;
    }

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

    var 
qsorter.current;
    var 
el s.dragevc qsorter.evCoords(ev);
    var 
dx = (evc[0] || qsorter.lastX) - s.startX;
    var 
dy = (evc[1] || qsorter.lastY) + (browser.msie6 pageNode.scrollTop 0) - s.startY s.offset;
    
setStyle(qsorter.first(el), {zIndex125});
    
qsorter.current s.drag false;
    if (
cur.qsorterOver) {
      if (
s.onDrop(cur.qsorterOverel)) {
        var 
qsorter.first(el);
        
setStyle(f, {top0left0})
        if (
qsorter.nextEl) {
          
el.parentNode.insertBefore(elqsorter.nextEl);
        } else {
          
el.parentNode.appendChild(el);
        }
        
qsorter.animdone.bind(f)(s);
        
qsorter.stop();
        if (
qsorter.animcache[0]) {
          
delete(qsorter.animcache[0]);
          if (
isEmpty(qsorter.animcache)) {
            
qsorter.animstop();
          }
        }
        if (
cur.sorterDragIn) {
          
cur.sorterDragIn 0;
          
setStyle(el, {opacity1});
        }
        return 
cancelEvent(ev);
      }
    }

    
qsorter.animate(qsorter.first(el), el.dxel.dyel.xel.s.offsetqsorter.animdone.bind(qsorter.first(el), s), s);

    
qsorter.stop();

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

    if (
cur.sorterDragIn) {
      
cur.sorterDragIn 0;
      
animate(el, {opacity1}, 100);
    }

    var 
before el.nextSiblingafter el.previousSibling;
    if ((
before != s.before || after != s.after) && s.onReorder) {
      
s.onReorder(elbeforeafter);
    }
    
delete(s.before);
    
delete(s.after);

    return 
cancelEvent(ev);
  },
  
stop: function() {
    var 
qsorter.current;
    
removeEvent(document'mousemove drag touchmove'qsorter.mousemove);
    
removeEvent(document'mouseup touchend touchcancel'qsorter.mouseup);
    
s.drag qsorter.current false;
  },
  
update: function(parentopts) {
    if (
browser.mobile && !browser.safari_mobile && !browser.android) return;
    var 
parent.qsorter;
    
extend(sopts);
    
s.count 0;
    
s.elems = [];
    
s.noDragCount 0;
    if (
s.dragCont) {
      
s.updateDragCont();
    }
    
this.added(parent);
  },
  
added: function(parent) {
    if (
browser.mobile && !browser.safari_mobile && !browser.android) return;
    var 
parent.qsorters.countxsize s.xsizeto xsize;
    var 
el s.elems[(1) % xsize][Math.floor((0.9) / xsize)].nextSibling qsorter.first(parent);
    
s.noDragCount s.noDragCount || 0;
    for (var 
lelel el.nextSibling, ++i) {
      if (
el.nodeType == 3) continue;
      var 
noDrag el.getAttribute('nodrag');
      if (
noDrags.noDragCount++;
      if (!
s.elems[to]) {
        
s.elems[to] = [];
      }
      
s.elems[to].push(el);

      var 
first qsorter.first(el);
      var 
first.offsetLeftfirst.offsetTop;
      if (
browser.msie7 || browser.msie6) {
        
+= el.offsetLeft;
        
+= el.offsetTop;
      }
      
extend(el, {xxyyii});
      
addEvent(el'mousedown touchstart'qsorter.mousedown);
      if (
browser.opera && !cur.qsorterNoOperaStyle) {
        
el.style.display 'block';
        
el.style.cssFloat 'left';
      }
      if (!
noDrag && !s.noMoveCursorel.style.cursor 'move';

      ++
to;
      if (
to >= xsizeto -= xsize;
    }
    
s.count += (l);
  },
  
remove: function(parentobj) {
    var 
parent.qsorters.countxsize s.xsizeto xsize;
    
debugLog('x'obj.xobj.y);

    if (!
s.elems.length) return;
    var 
row s.elems[0].length;

    var 
lastEl false;
    
debugLog('startRow'row);
    while(
row) {
      
row -= 1;
      var 
col s.xsize;
      while(
col) {
        
col -= 1;
        var 
tEl = (s.elems[col] || [])[row];

        
debugLog('col: 'col' row: 'row' el: 'tEl);
        if (!
tEl) {
          continue;
        }

        if (
lastEl) {
          
s.elems[col][row] = extend(lastEl, {
            
xtEl.x,
            
ytEl.y,
            
itEl.i
          
});
          
debugLog('G'colrowtEl.i);
        } else {
          
s.elems[col].pop();
        }

        if (
tEl == obj) {
          
row 0;
          break;
        }

        
lastEl tEl;
      }
    }

    
re(obj);
    
s.count -= 1;
    return 
lastEl;
  },

// needs width,height,xsize
  
init: function(parentopts) {
    if (
browser.mobile && !browser.safari_mobile && !browser.android) return;

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

    if (
browser.msie7 || browser.msie6parent.style.position 'relative';

    var 
result = {
      
parentparent,
      
xsizeopts.xsize,
      
widthopts.width,
      
heightopts.height,
      
canDragopts.canDrag,
      
clsopts.clsUp false : (cur.qsorterRowClass || 'photo_row'),
      
clsUpopts.clsUp opts.clsUp : (cur.qsorterRowUpClass || 'photo_row photo_row_up'),
      
count0,
      
offset0,
      
elems: new Array(opts.xsize),
      
stop: function() {
        if (
qsorter.current == result) {
          
qsorter.stop();
        }
        for (var 
i in result.elems) {
          var 
els result.elems[i];
          for (var 
0= ((els || {}).length || 0); n; ++j) {
            var 
ch els[j];
            if (
qsorter.animcache[ch.id]) {
              
delete(qsorter.animcache[ch.id]);
            }
          }
        }
      },
      
destroy: function() {
        
result.stop();
        var 
el result.parent;
        
removeAttr(el'qsorter');
        for (var 
0result.elems.lengthl; ++i) {
          var 
els result.elems[i];
          for (var 
0= ((els || {}).length || 0); n; ++j) {
            var 
ch els[j];
            
removeEvent(ch'mousedown touchstart'qsorter.mousedown);
          }
        }
      },
      
updateDragCont: function() {
        var 
xy getXY(opts.dragCont);
        var 
sizegetSize(opts.dragCont);
        
this.dragCont = {
          
visibleisVisible(opts.dragCont),
          
elopts.dragCont,
          
x1xy[0],
          
y1xy[1],
          
x2xy[0] + size[0],
          
y2xy[1] + size[1],
        };
      },
      
onReorderopts.onReorder,
      
noscrollopts.noscroll,
      
dragElsopts.dragEls,
      
onDragOveropts.onDragOver,
      
onDragOutopts.onDragOut,
      
onDropopts.onDrop,
      
noMoveCursoropts.noMoveCursor
    
}

    if (
opts.dragCont) {
      
result.updateDragCont();
    }
    
parent.qsorter result;
    
qsorter.added(parent);
    return 
result;
  }
}

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