Вход Регистрация
Файл: js/al/ads_tagger.js
Строк: 479
<?php
function adsPhotoTagger(elemoptions) {
  
elem ge(elem);
  if (!
elem || !elem.src) return false;
  var 
initTries 0node elem.parentNode;

  var 
mabs Math.absmmin Math.minmmax Math.maxmfloor Math.floormceil Math.ceilmsign = function(v) {
    return 
? -1;
  };
  var 
dblcmp = (function() {
    var 
eps 1e-8;
    return function(
ab) {
      if (
mabs(a-b) < eps) return 0;
      return 
? -1;
    }
  })();

  var 
bodyNode document.body;

  var 
zstart intval(options.zstart);
  var 
minw intval(options.minw) || 30minh intval(options.minh) || 30;
  var 
maxw intval(options.maxw) || 100maxh intval(options.maxh) || 100;
  var 
minr Number(options.minr) || 1maxr Number(options.maxr) || 1// min/max ratio
  
var defw intval(options.defw) || 100defh intval(options.defh) || 100defw2defh2;
  var 
addXaddYbgimg vkImage();
  var 
icons = [], iconParams = [];
  
img.src elem.src;

  var 
tagframetagimgtagfadedtaghandles = {};
  var 
width 0height 0rect = {}

  var 
showRect = function(rnoUpdate) {
    
rect extend(rectr);
    
each(r, function(i) {
      var 
this + (== 'left' addX : (== 'top' addY 0));
      
tagframe.style[i] = 'px';
    });
    
tagimg.style.marginLeft = -r.left 'px';
    
tagimg.style.marginTop = -r.top 'px';
    
each(taghandles, function(i) {
      if (
i.length 2) { // n, w, e, s
        
if (== 'n' || == 's') {
          
this.style.left = (addX r.left intval(r.width 2) - 5) + 'px';
          
this.style.top = (addY r.top + (== 'n' r.height) - 5) + 'px';
        } else {
          
this.style.left = (addX r.left + (== 'w' r.width) - 5) + 'px';
          
this.style.top = (addY r.top intval(r.height 2) - 5) + 'px';
        }
      } else { 
// nw, ne, sw, se
        
var i.charAt(0), i.charAt(1);
        
this.style.left = (addX r.left + ((== 'w') ? r.width) - 5) + 'px';
        
this.style.top = (addY r.top + ((== 'n') ? r.height) - 5) + 'px';
      }
    });
    if (!
noUpdate) {
      for (var 
i in icons) {
        if (!
icons[i]) continue;
        var 
icon icons[i],
            
iconw iconParams[i].width,
            
iconh iconParams[i].height;
        var 
bbox icon.parentNode,
            
ratio r.width r.height,
            
boxw mmin(iconwintval(iconh ratio)),
            
boxh mmin(iconhintval(boxw ratio));

        
bbox.style.width boxw 'px';
        
bbox.style.height boxh 'px';
        
bbox.style.marginRight mceil((iconw boxw) / 2.0) + 'px';
        
bbox.style.marginLeft mfloor((iconw boxw) / 2.0) + 'px';

        
icon.style.width mceil(width boxw r.width) + 'px';
        
icon.style.height mceil(height boxh r.height) + 'px';
        
icon.style.marginLeft = -mfloor(r.left boxw r.width) + 'px';
        
icon.style.marginTop = -mfloor(r.top boxh r.height) + 'px';
      }
    }
  }

  var 
action 0startXstartYadjXadjYstartRectelemXY;

  var 
adjustPos = function(xy) {
    return [
mmin(widthmmax(0elemXY[0])), mmin(heightmmax(0elemXY[1]))];
  }

  var 
resize = function() {
    var 
dwidth Math.max(intval(window.innerWidth), intval(document.documentElement.clientWidth));
    var 
dheight Math.max(intval(window.innerHeight), intval(document.documentElement.clientHeight));
    
bg.style.width dwidth 'px';
    
bg.style.height dheight 'px';
  }

  var 
updateCursor = function(cur) {
    if (
action) {
      if (
action == || action 0) {
        
cur 'move';
      } else if (
action == 2) {
        
cur 'crosshair';
      } else if (
action.length) {
        
cur action '-resize';
      }
      
bg.style.cursor cur;
    }
  }

  var 
mouseDown = function(e) {
    
startX e.pageX;
    
startY e.pageY;
    
elemXY getXY(elem);
    
startRect extend({}, rect);
    var 
cur false;

    if (
e.target == tagimg) {
      
action 1;
    } else if (
e.target == tagfaded || e.target == elem) {
      
action 2;
    } else if (
e.target.className == 'preview') {
      
action = -e.target.id.substring(4); // id is 'icon<#id>'
    
} else {
      
each(taghandles, function(i) {
        if (
e.target == this) {
          
action i;
          var 
startX elemXY[0], startY elemXY[1];
          var 
vh = [i.charAt(0), (i.length 1) ? i.charAt(1) : i.charAt(0)];
          
startX rect.left + (vh[1] == 'w' rect.width);
          
startY rect.top + (vh[0] == 'n' rect.height);
          var 
tagX startX,
              
tagY startY;
          if (
i.length == 1) {
            if (
== 's' || == 'n') {
              
tagX -= mceil(rect.width 2.0);
            } else {
              
tagY -= mceil(rect.height 2.0);
            }
          }
          
adjX tagX x;
          
adjY tagY y;
        }
      });
    }
    if (
action) {
      if ((
action != && action >= 0) || action.length) {
        
each(taghandles, function() {
          
setStyle(this'opacity'0.7);
        });
      }
      
show(bg);
      
updateCursor();
      
addEvent(bodyNode'mousemove'mouseMove);
      
addEvent(bodyNode'mouseup'mouseUp);
      
addEvent(bodyNode'dragend'mouseUp);
      return 
cancelEvent(e);
    }
  }

  var 
mouseMove = function(e) {
    if (
window.getSelection) {
      var 
sel window.getSelection();
      if (
sel.removeAllRangessel.removeAllRanges();
    }
    var 
cx e.pageXcy e.pageY;
    if (
action == 1) {
      var 
nx startRect.left + (cx startX);
      var 
ny startRect.top + (cy startY);
      
nx mmin(width rect.widthmmax(0nx));
      
ny mmin(height rect.heightmmax(0ny));
      
showRect(extend(rect, {leftnxtopny}));
    } else if (
action == 2) {
      if (
mabs(cx startX) > && mabs(cy startY) > 3) {
        
action 3;
        
updateCursor();
        
elemXY getXY(elem);
        
startX -= elemXY[0]; startY -= elemXY[1];
        
show(tagframetagfaded);
        
each(taghandles, function() { show(this); setStyle(this'opacity'0.7); });
      }
    } else if (
action 0) {
      var 
iconn = -(action 1),
          
cw iconParams[iconn].width,
          
ch iconParams[iconn].height;
      var 
nx startRect.left mfloor((cx startX) * rect.width cw);
      var 
ny startRect.top mfloor((cy startY) * rect.height ch);
      
nx mmin(width rect.widthmmax(0nx));
      
ny mmin(height rect.heightmmax(0ny));
      
showRect(extend(rect, {leftnxtopny}));
    } else if (
action.length) {
      var 
xy adjustPos(cx adjXcy adjY);
      
cx xy[0]; cy xy[1];

      var 
nx rect.leftny rect.topnw rect.widthnh rect.height;

      var 
ver 0hor 0// Where are we moving
      
if (action.length == 2) {
        
ver = (action.charAt(0) == 'n') ? -1;
        
hor = (action.charAt(1) == 'w') ? -1;
      } else {
        
ver = (action == 'n' ? -: (action == 's' 0));
        
hor = (action == 'w' ? -: (action == 'e' 0));
      }

      
startX nx nw * (hor 0);
      
startY ny nh * (ver 0);

      if ((
cx nx || cx nx nw) && mabs(cx startX) < mabs(cx - (nx nw * (hor >= 0)))) {
        
startX startX mmax(minwintval(nh minr)) * hor;
        
hor *= -1;
      }
      if ((
cy ny || cy ny nh) && mabs(cy startY) < mabs(cy - (ny nh * (ver >= 0)))) {
        
startY startY mmax(minhintval(nw maxr)) * ver;
        
ver *= -1;
      }

      var 
dx mabs(hor) * mabs(cx startX), dy mabs(ver) * mabs(cy startY);
      if (!
hordx rect.width;
      if (!
verdy rect.height;
      if (!
dx && !dy) return cancelEvent(e);

      
dx mmax(dxminw);
      
dy mmax(dyminh);

      var 
curmaxw mmin(maxwhor >= width startX startX),
          
curmaxh mmin(maxhver >= height startY startY);

      
dx mmin(dxcurmaxw);
      
dy mmin(dycurmaxh);

      
nx hor >= startX startX dx;
      
ny ver >= startY startY dy;

      var 
movex 0movey 0tmp;
      var 
maxmvx mmin(nxwidth nx dx), maxmvy mmin(nyheight ny dy);

      var 
curRatio dx dy;
      if (
dblcmp(curRatiominr) < 0) {
        if (
hor == 0) {
          
tmp mmin(curmaxwdy minr);
          
movex = (dx tmp) / 2;
          
movex msign(movex) * mmin(mceil(mabs(movex)), maxmvx);
          
dx mmin(dx movexcurmaxw);
          
dy dx minr;
        } else if (
ver == 0) {
          
tmp mmax(dx minrminh);
          
movey = (dy tmp) / 2;
          
movey msign(movey) * mceil(mabs(movey));
          
dy mmax(dy moveyminh);
          
dx dy minr;
        } else {
          
dx mmin(dy minrcurmaxw);
          
dy dx minr;
        }
      } else if (
dblcmp(curRatiomaxr) > 0) {
        if (
hor == 0) {
          
tmp mmax(dy maxrminw);
          
movex = (dx tmp) / 2;
          
movex msign(movex) * mceil(mabs(movex));
          
dx mmax(dx movexminw);
          
dy dx maxr;
        } else if (
ver == 0) {
          
tmp mmin(curmaxhdx maxr);
          
movey = (dy tmp) / 2;
          
movey msign(movey) * mmin(mceil(mabs(movey)), maxmvy);
          
dy mmin(dy moveycurmaxh);
          
dx dy maxr;
        } else {
          
dy mmin(dx maxrcurmaxh);
          
dx dy maxr;
        }
      }
      
dx intval(dx);
      
dy intval(dy);

      
nx hor >= startX startX dx;
      
ny ver >= startY startY dy;

      
nx += movex;
      
ny += movey;

      
showRect({leftnxtopnywidthdxheightdy});

      
ver = (ver 's' : (ver 'n' ''));
      
hor = (hor 'e' : (hor 'w' ''));
      if (
action != ver hor) {
        
action ver hor;
        
updateCursor();
      }
    }
    if (
action == 3) {
      
cx -= elemXY[0];
      
cy -= elemXY[1];
      
cx mmin(widthmmax(0cx));
      
cy mmin(heightmmax(0cy));
      
updateCursor(msign((startX cx) * (startY cy)) > 'nw-resize' 'ne-resize');
      
showRect({leftstartX cx cx startXtopstartY cy cy startYwidthmabs(startX cx), heightmabs(startY cy)}, true);
    }
    return 
cancelEvent(e);
  }

  var 
mouseUp = function(e) {
    var 
cx e.pageXcy e.pageYt;
    
elemXY getXY(elem);
    if (
action == 2) {
      
cx -= elemXY[0];
      
cy -= elemXY[1];
      var 
mmin(width defwmmax(0cx defw2));
      var 
mmin(height defhmmax(0cy defh2));
      
showRect({leftxtopywidthdefwheightdefh});
    } else if (
action == 3) {
      
cx -= elemXY[0];
      
cy -= elemXY[1];
      if (
cx startX) {
        
cxcx startXstartX t;
      }
      if (
cy startY) {
        
cycy startYstartY t;
      }
      var 
startX cxstartY cy;
      if (
cx 0) {
        
+= cx;
        
cx 0;
      }
      if (
cy 0) {
        
+= cy;
        
cy 0;
      }
      
mmin(wwidth cx); mmin(hheight cy);

      if (
minw) {
        var 
minw wd2 intval(2);
        
cx -= d2;
        
minw;
        
cx mmin(width wmmax(0cx));
      }
      if (
minh) {
        var 
minh hd2 intval(2);
        
cy -= d2;
        
minh;
        
cy mmin(height hmmax(0cy));
      }

      var 
curmaxw width cxcurmaxh height cy;
      var 
curRatio h;
      if (
dblcmp(curRatiominr) < 0) {
        
mmin(minrcurmaxw);
        
minr;
      } else if (
dblcmp(curRatiomaxr) > 0) {
        
mmin(maxrcurmaxh);
        
maxr;
      }
      
showRect({leftcxtopcywidthwheighth});
    }
    
show(tagframetagfaded);
    
each(taghandles, function() {
      
fadeTo(this2000.3);
    });
    
hide(bg);
    
action 0;
    
removeEvent(bodyNode'mousemove'mouseMove);
    
removeEvent(bodyNode'mouseup'mouseUp);
    
removeEvent(bodyNode'dragend'mouseUp);
    return 
cancelEvent(e);
  };

  (function() {
    if (
initTries 0) {
      return;
    }

    
width img.width;
    
height img.height;

    if (!
width || !height) {
      if (++
initTries 3000setTimeout(arguments.callee100);
      return;
    }

    
node.style.position 'relative';

    
addX elem.offsetLeft;
    
addY elem.offsetTop;

    
defw mmin(widthdefw); defw2 intval(defw 2);
    
defh mmin(heightdefh); defh2 intval(defh 2);
    
minw mmin(minwdefw); minh mmin(minhdefh);

    if (
options.icons) {
      for (var 
i in options.icons) {
        if (!
options.icons[i] || !options.icons[i].width || !options.icons[i].height || !options.icons[i].box) continue;
        
iconParams.push({widthoptions.icons[i].widthheightoptions.icons[i].height});
        
icons.push(ge(options.icons[i].box).appendChild(ce('img', {srcelem.srcclassName'preview'})));

        
ge(options.icons[i].box).style.overflow 'hidden';
        
icons[icons.length 1].style.cursor 'move';
        
addEvent(icons[icons.length 1], 'mousedown'mouseDown);
      }
    }

    
bg bodyNode.appendChild(ce('div', {className'tag_bg'}, {position'fixed'}));
    
addEvent(window'resize'resize);
    
resize();

    
node.style.zIndex zstart 10;
    
elem.style.zIndex zstart 20;

    
tagframe node.appendChild(ce('div', {
      
className'tag_frame',
      
innerHTML'<img src="' elem.src '" />'
    
}, {
      
cursor 'move',
      
zIndex zstart 40
    
}));
    
tagimg tagframe.firstChild;
    
tagfaded node.appendChild(ce('div', {className'tag_faded'}, {
      
cursor 'crosshair',
      
left   addX,
      
top    addY,
      
width  width,
      
height height,
      
zIndex zstart 30
    
}));

    
each(['nw''n''ne''w''e''sw''s''se'], function() {
      var 
this.toString();
      if (
minr == maxr && s.length 2) return;
      
taghandles[s] = node.appendChild(ce('div', {className'tag_frame_handle ' s}, {
        
cursor '-resize',
        
zIndex zstart 50
      
}));
    });

    
addEvent(node'mousedown'mouseDown);

    if (
options.crop) {
      var 
options.crop.split(',');
      for (var 
0d.length; ++i) {
        
d[i] = intval(d[i]);
      }
      if (!
d[3]) {
        
d[3] = d[2];
      }
      if (
d[2] < minw) {
        
d[2] = minw;
      }
      if (
d[3] < minh) {
        
d[3] = minh;
      }
      
options.rect = {leftd[0], topd[1], widthd[2], heightd[3]};
    }

    if (
options.rect) {
      
showRect(options.rect);
      
show(tagfadedtagframe);
      
each(taghandles, function() { show(this); });
    } else {
      
elem.style.cursor 'crosshair';
      
addEvent(elem'mousedown'mouseDown);
    }

    if (
isFunction(options.onInit)) {
      
options.onInit();
    }
  })();

  return {
    
destroy: function() {
      
initTries = -1;
      
elem.style.cursor 'default';
      
cleanElems(nodeelem);
      for (var 
i in icons) {
        if (
icons[i]) {
          
cleanElems(icons[i]);
        }
      }
      
each(taghandles, function() { cleanElems(this); });
      
removeEvent(window'resize'resize);
    },
    
result: function() {
      return [
rect.leftrect.toprect.widthrect.height];
    }
  }
}

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