Вход Регистрация
Файл: js/al/thumbs_edit.js
Строк: 905
<?php
var ThumbsEdit = {
  
cache: function() {
    if (!
cur._thEdCachecur._thEdCache = {};
    return 
cur._thEdCache;
  },
  
loaded: function() {
    if (!
cur._thEdLoadedcur._thEdLoaded = {};
    return 
cur._thEdLoaded;
  },
  
cur: function() {
    if (!
cur._thEdCurcur._thEdCur = {};
    return 
cur._thEdCur;
  },
  
convert: function(typeidmedia) {
    var 
result = {typetyperemovemedia.removeclickmedia.click}, ids id.split('_');
    switch (
type) {
      case 
'photo':
        
result.photo = {owner_idids[0], pidids[1], sizesmedia.sizes};
      break;
      case 
'video':
        
result.video = {owner_idids[0], vidids[1], durationmedia.durationsizesmedia.sizes};
      break;
      case 
'album':
        
result.album = {owner_idids[0], aidids[1], titlemedia.titlesizemedia.sizethumb: {sizesmedia.sizes}};
      break;
    }
    return 
result;
  },

  
getMedias: function(el) {
    var 
res = [];

    
el ge(el);
    if (!
el) return res;

    for (var 
arr = (ThumbsEdit.cache()[el.id] || {}).previews || [], 0arr.lengthl; ++i) {
      switch (
arr[i].type) {
        case 
'photo'res.push(['photo'arr[i].photo.owner_id '_' arr[i].photo.pid]); break;
        case 
'video'res.push(['video'arr[i].video.owner_id '_' arr[i].video.vid]); break;
        case 
'album'res.push(['album'arr[i].album.owner_id '_' arr[i].album.aid]); break;
      }
    }
    return 
res;
  },

  
init: function(elattachmentsoptions){
    
el ge(el);
    if(!
el) return;

    
options options === true || options === false ? {wideoptions} : options || {};
    var 
opts = clone(options);

    var 
wide opts.wide;
    var 
maxW opts.width;
    var 
maxH opts.height;
    if(!
maxW || !maxH){
      
maxW el.parentNode.offsetWidth;
      
maxH maxW 0.666;
    } else {
      
opts.force true;
    }
    if(
wide === undefined){
      
options.wide opts.wide wide = !!ThumbsEdit.getParent(el'wide_wall_module');
    }

    var 
_e ThumbsEdit;
    var 
thumbs _e.processThumbs(maxWmaxHattachmentsopts);
    var 
atts = [];

    
each(attachments, function(ka){
      if(
a.type == 'photo' || a.type == 'video' || a.type == 'album'atts[atts.length] = a;
    });
    
_e.cache()[el.id] = {previewsattsthumbsthumbs.thumbsheightthumbs.heightoptsoptionswidewide};

    (
wide addClass removeClass)(el'wide');
    
el.innerHTML '';
    
each(thumbs.thumbs, function(kt){
      
el.appendChild(_e.thumbElement(tk));
    });
    
setStyle(el, {widththumbs.widthheightthumbs.height});

  },
  
getParent: function(nodeclassName){
    var 
ref node;
    while(!
hasClass(refclassName) && ref.parentNoderef ref.parentNode;
    return 
ref.parentNode ref null;
  },
  
thumbElement: function(thumbindex){
    var 
style = { widthintval(thumb.width), heightintval(thumb.height) };

    var 
el ce('div', { className'thumb_wrap fl_l' + (thumb.lastColumn ' last_column' '') + (thumb.lastRow ' last_row' '') }, style);
    var 
img ce('img', { className'preview'});
    var 
overlay ce('div', { className'overlay' });
    var 
xbutn ce('div', { className'thumb_x_button'innerHTML'<div class="thumb_x"></div>' });
    var 
draggable ce('div', {className'draggable_thumb clear_fix' + (thumb.unsized ' unsized' + (thumb.single ' unsized_single' '') : '')}, style);

    
addEvent(draggable'click', function(e){
      if(
ThumbsEdit.cur().updating || ThumbsEdit.getParent(e.target'thumb_x_button')) return;
      var 
ThumbsEdit.getParent(e.target'thumb_wrap');
      if (
ThumbsEdit.cache()[t.parentNode.id].previews[t.getAttribute('index')].click) {
        
ThumbsEdit.cache()[t.parentNode.id].previews[t.getAttribute('index')].click();
      }
    });

    
addEvent(xbutn'click', function(e) {
      var 
ThumbsEdit.getParent(e.target'thumb_wrap');
      
hide(t.firstChild);
      
ThumbsEdit.removeMedia(t.parentNode.idt.getAttribute('index'));
    });
    if (
browser.msie && browser.version 9) {
      
xbutn.setAttribute('title'getLang('dont_attach'));
    } else {
      
addEvent(xbutn'mouseover', function() {
        
showTooltip(this, {textgetLang('dont_attach'), shift: [1433], black1});
      });
    }

    
addEvent(draggable'mousedown touchstart'ThumbsEdit.startDrag);

    var 
image   thumb.old_image thumb.old_image thumb.image;
    var 
cropped ThumbsEdit.crop(thumbthumb.widththumb.height);

    if(!
thumb.unsized){
      
extend(img, {widthcropped.widthheightcropped.height});
      
setStyle(img, {marginLeftcropped.marginLeftmarginTopcropped.marginTop});
      
img.src image.src;
    } else {
      
setStyle(draggable'backgroundImage''url(' image.src ')')
    }

    if(
thumb.old_image){
      
ThumbsEdit.loadAndDisplayImage(imgthumb);
    }

    if(!
thumb.unsizeddraggable.appendChild(img);
    
draggable.appendChild(overlay);
    
draggable.appendChild(xbutn);
    
el.appendChild(draggable);
    
el.setAttribute('index'index);
    
el.setAttribute('attachment'thumb.id);

    if(
thumb.duration){
      if(
thumb.single){
        
draggable.appendChild(ce('div', {className'page_post_video_play_inline'}));
      } else {
        
draggable.appendChild(ce('div', {className'duration'innerHTMLthumb.duration}));
      }
    }

    if((
thumb.title || thumb.thumb) && !thumb.duration){
      var 
title ce('div', {className'album_title'});
      
title.appendChild(ce('div', {innerHTMLthumb.height 100 thumb.title ' 'className'fl_l title_text'}, {widthstyle.width 70}));
      
title.appendChild(ce('div', {innerHTMLthumb.sizeclassName'album_size'}));
      
draggable.appendChild(title);
    }

    return 
el;
  },
  
loadAndDisplayImage: function(nodethumb){
    if(!
node) return;

    var 
img = new Image();

    var 
image thumb.image;
    var 
old_image thumb.old_image;

    if(!
old_image) return;

    if(
ThumbsEdit.loaded()[image.src] && node.src != image.src){
      
node.src image.src;
      
thumb.old_image null;
      return;
    }

    var 
loader = function(){
      if(
node.src == old_image.src){
        
node.src image.src;
        
thumb.old_image null;
        
ThumbsEdit.loaded()[image.src] = true;
      }
      
removeEvent(img'load'loader);
    };

    
addEvent(img'load'loader);
    
img.src image.src;
  },

  
move: function(arrold_indexnew_index){
    if(
new_index >= arr.length){
      var 
new_index arr.length;
      while ((
k--) + 1) {
        
arr.push(undefined);
      }
    }
    
arr.splice(new_index0arr.splice(old_index1)[0]);
    return 
arr;
  },
  
scale: function(widthheightmax_widthmax_heightcrop){
    var 
intval(width);
    var 
intval(height);
    if(!
max_heightmax_height max_width;
    if(
width >= height && width max_width){
      
max_width;
      
intval(height / (width max_width));
    } else if((
width height) && height max_height) {
      
max_height;
      
intval(width / (height max_height));
    }
    return [
wh];
  },
  
crop: function(thumbwidthheight){
    if(
thumb.vid){
      return {
widthwidthheightheight};
    }

    var 
single thumb.single;
    var 
image_size thumb.image;
    var 
img_w width;
    var 
img_h height;
    var 
0;
    var 
0;

    if(
image_size.width && image_size.height){
      var 
img_ratio image_size.width image_size.height;

      if (
img_ratio width height) {
        if (
single && image_size.width width) {
          
width image_size.width;
          
height Math.min(heightimage_size.height);
        }
        
img_w width;
        
img_h img_w img_ratio;
        if (
img_h height) {
          
= -intval((img_h height) / 3);
        }
      } else {
        if (
single && image_size.height height) {
          
height image_size.height;
          
width Math.min(widthimage_size.width);
        }
        
img_h height;
        
img_w img_h img_ratio;
        if (
img_w width) {
          
= -intval((img_w width) / 3);
        }
      }
    }

    return {
widthimg_wheightimg_hmarginLeftxmarginTopthumb.isAlbum && thumb.single y};
  },

  
getCoords: function(wrapwrap_pos){
    var 
coords = [];
    var 
wpos wrap_pos || getXY(wrap);
    
each(wrap.childNodes, function(knode){
      if(!
hasClass(node'thumb_wrap')) return;
      var 
getXY(node);
      
coords[coords.length] = {
        
idnode.getAttribute('attachment'),
        
xintval(p[0] - wpos[0]),
        
yintval(p[1] - wpos[1]),
        
widthintval(node.offsetWidth),
        
heightintval(node.offsetHeight),
        
indexintval(node.getAttribute('index')),
        
nodenode
      
};
    });
    return 
coords;
  },

  
startDrag: function(e){
    var 
touch e.touches && e.touches.length == 1;
    var 
clck e.button == undefined || e.button != && !(e.button == && browser.msie8);

    if((
clck && !touch) || ThumbsEdit.getParent(e.target'thumb_x_button') || ThumbsEdit.cur().updating) {
      return;
    }

    var 
el ThumbsEdit.getParent(e.target'draggable_thumb');
    var 
wr ThumbsEdit.getParent(el'editable_thumbs');
    var 
cache ThumbsEdit.cache()[wr.id];

    if(!
cache || (cache.previews || []).length 2) return;

    
ThumbsEdit.cur().el el;
    
addEvent(window'mousemove touchmove'ThumbsEdit.drag);
    
addEvent(window'mouseup touchend touchcancel'ThumbsEdit.drop);
    return 
touch || cancelEvent(e);
  },
  
drag: function(e){
    var 
_e ThumbsEdit;

    var 
el _e.cur().el;

    if(
e.touches && e.touches.length 1) return _e.drop();

    var 
pageX browser.android e.touches[0].pageX + (e.pageX || 0) : e.pageX;
    var 
pageY browser.android e.touches[0].pageY + (e.pageY || 0) : e.pageY;
    var 
ecur _e.cur();

    if(!
hasClass(el'moving')){
      var 
wrap el.parentNode.parentNode;
      var 
overlay geByClass('overlay'el)[0];
      var 
img geByClass('preview'el)[0];

      var 
intval(el.parentNode.getAttribute('index'));
      var 
thumb _e.cache()[wrap.id].thumbs[i];
      var 
wpos getXY(wrap);
      var 
pos getXY(el.parentNode);
      var 
coords _e.getCoords(wrapwpos);

      
//alert(pageX + ' ' + wpos[0] + ' ' + wpos[1]);

      
ecur.id wrap.id;
      
ecur.i;
      
ecur.to_i i;
      
ecur.pageX pos[0];
      
ecur.pageY pos[1];
      
ecur.thumb;
      
ecur.thumb.width;
      
ecur.thumb.height;
      
ecur.pos pos;
      
ecur.wpos wpos;
      
ecur.crop _e.crop(thumbthumb.widththumb.height);
      
ecur.coords coords;

      var 
scaled _e.scale(thumb.widththumb.height75);
      var 
scaled[0];
      var 
scaled[1];
      var 
intval((thumb.width w) * (browser.android 0.5 ecur.thumb.width));
      var 
intval((thumb.height h) * (browser.android 0.5 ecur.thumb.height));

      
addClass(el'moving');
      
setStyle(el'zIndex'100);

      var 
anim    = {duration120transitionFx.Transitions.easeOutCubic};
      var 
cropped _e.crop(thumbwh);

      
animate(el, {opacity0.85widthwheighthmarginLeftxmarginTopy}, anim);
      
animate(overlay, {opacity1}, anim);
      if(
imganimate(imgcroppedanim);

    } else {
      var 
pageX - (ecur.pos[0] + ecur.x);
      var 
pageY - (ecur.pos[1] + ecur.y);
      
setStyle(el, {leftxtopy});

      var 
wpos ecur.wpos;

      
ecur.pos[0] + intval(el.style.marginLeft) + wpos[0];
      
ecur.pos[1] + intval(el.style.marginTop) + wpos[1];

      var 
= { xxyyoffsetXel.offsetWidthoffsetYel.offsetHeightindexecur.inodeel };
      var 
good false; var to_index ecur.i; var skip = -1;
      var 
margin = (_e.cache()[ecur.id] || {}).wide 3;

      
each(ecur.coords, function(kn){
        if(
== ecur.|| == skip) return;

        
n.offsetX n.node.offsetWidth margin;
        
n.offsetY n.node.offsetHeight margin;

        var 
prev ecur.coords[1];
        var 
next ecur.coords[1];

        var 
cX c.+ (c.offsetX 2);
        var 
cY c.+ (c.offsetY 2);
        var 
ncX n.+ (n.offsetX 2);
        var 
ncY n.+ (n.offsetY 2);
        var 
fcX c.c.offsetX;
        var 
fcY c.c.offsetY;
        var 
fnX n.n.offsetX;
        var 
fnY n.n.offsetY;

        var 
mvert  = ((prev && prev.== n.&& prev.!= n.&& n.!= 0) || (next && next.== n.&& next.!= n.y)) && n.!= 0;
        var 
mleft  cX >= ncX && ((next && ((cX <= next.+ (next.offsetX 2) && ((next.offsetY == n.offsetY) || (cX fnX))) || next.!= n.y)) || (!next && c.<= fnX)) && cY n.&& cY fnY;
        var 
mright cX ncX && cX >= n.&& ((!prev || (prev.!= n.&& !(prev.== n.&& !next))) && cY n.&& cY fnY);

        var 
mup mvert && ((cY >= ncY && cY fnY) && cX n.&& cX fnX);
        var 
mdown  mvert && (cY ncY && cY >= n.&& cX n.&& cX fnX);

        
mleft mleft && !mvert;
        
mright mright && !mvert && !mleft;

        var 
mleft || mright || mup || mdown;

        if(
m){
          
good true;
          
to_index n.index ecur.&& (mleft || mup) ? n.index c.index n.index && (mdown || mright) ? n.index n.index;
        }

        if(
to_index != ecur.i){
          
setStyle(n.node, {leftmleft ? -mright 0topmup ? -mdown 0});
        } else {
          
setStyle(n.node, {left0top0});
        }

        if(
mleft && next && next.== n.&& next.n.&& c.index n.index){
          
setStyle(n.node, {left0top0});
          
setStyle(next.node, {left2top0});
          
skip k+1;
        }

        if(
mup && next && next.== n.&& next.n.&& cY <= ncY){
          
setStyle(next.node, {left0top0});
          
skip k+1;
        }

        if(
mdown && prev && prev.== n.&& prev.n.&& cY <= ncY){
          
setStyle(prev.node, {left0top: -2});
          
setStyle(n.node, {left0top0});
        }
      });

      
ecur.to_i good to_index ecur.i;
    }

    return 
cancelEvent(e);
  },
  
drop: function(e){
    var 
_e ThumbsEditecur _e.cur();

    
ecur.updating true;

    var 
el ecur.el;
    var 
overlay geByClass('overlay'el)[0];
    var 
img geByClass('preview'el)[0];

    
removeEvent(window'mousemove touchmove'ThumbsEdit.drag);
    
removeEvent(window'mouseup touchend touchcancel'ThumbsEdit.drop);

    if(!
hasClass(el'moving')) {
      
ecur.updating false;
      return 
cancelEvent(e);
    }

    if(
ecur.to_i == ecur.i){
      var 
thumb ecur.t;
      var 
cropped ecur.crop;

      var 
anim = { duration120transitionFx.Transitions.easeOutCubic };

      
animate(el, { marginTop0marginLeft0top0left0widthecur.wheightecur.hopacity}, extend(anim, { onComplete: function(){ setStyle(el'zIndex'null); ecur.updating false; } }));
      
animate(overlay, {opacity0}, anim);
      if(
imganimate(imgcroppedanim);
    } else {
      var 
attachments _e.cache()[ecur.id].previews;
      
attachments _e.move(attachmentsecur.iecur.to_i);
      
_e.update(ecur.idattachments);
    }

    
removeClass(el'moving');
    return 
cancelEvent(e);
  },

  
update: function(elattachments){
    if(!(
el ge(el))) return;
    var 
id el.id;

    var 
_e ThumbsEdit;

    var 
wrap ge(id);
    var 
cache _e.cache()[wrap.id];
    var 
old_thumbs cache.thumbs;
    var 
old_height cache.height;

    var 
options cache.opts;
    var 
opts options === true || options === false ? {wideoptions} : clone(options || {});
    var 
maxW opts.width;
    var 
maxH opts.height;
    if(!
maxW || !maxH){
      
maxW el.parentNode.offsetWidth;
      
maxH maxW 0.666;
    } else {
      
opts.force true;
    }
    var 
thumbs _e.processThumbs(maxWmaxHattachmentsopts);

    var 
fake_wrap ce('div');
    var 
fake ce('div', {className'editable_thumbs' + (cache.wide ' wide' '')});

    
each(thumbs.thumbs, function(kt){
      
fake.appendChild(_e.thumbElement(tk));
    });
    
setStyle(fake, {widththumbs.widthheightthumbs.height});
    
setStyle(fake_wrap, {height0overflow'hidden'});
    
fake_wrap.appendChild(fake);
    
wrap.parentNode.appendChild(fake_wrap);

    var 
wpos getXY(fake);
    var 
coords _e.getCoords(fake);

    
each(coords, function(kcoord){
      var 
obj null;
      for(var 
crds _e.cur().coords0crds.lengthl; ++i) {
        if(
crds[i].id == coord.id){
          
obj crds[i];
          break;
        }
      }
      if(
obj == null) return;

      var 
draggable geByClass('draggable_thumb'obj.node)[0];
      var 
overlay geByClass('overlay'draggable)[0];
      var 
img geByClass('preview'draggable)[0];
      var 
caption geByClass('title_text'draggable)[0];

      var 
old_thumb old_thumbs[obj.index];
      var 
thumb null;

      
each(thumbs.thumbs, function(kt){
        if(
t.id == old_thumb.id) {
          if(!
_e.loaded()[t.image.src]) t.old_image old_thumb.image;
          
thumb t;
        }
      });

      
setStyle(obj.node, {left0top0});
      if(
obj.height != coord.height || obj.width != obj.width || coord.!= obj.|| coord.!= obj.|| obj.index == _e.cur().i){
        if(
hasClass(draggable'moving')) fadeOut(overlay150);
        
setTimeout(function(){
          
animate(draggable, {topcoord.obj.yleftcoord.obj.xmarginLeft0marginTop0heightcoord.heightwidthcoord.widthopacity1}, 150);
          var 
cropped _e.crop(thumbcoord.widthcoord.height);
          if(
imganimate(imgcropped150);
          (
thumb.unsized && thumb.single addClass removeClass)(draggable'unsized_single');
        }, 
4);
      }
      
//var isTouch = typeof document.documentElement.ontouchstart != 'undefined';
      //if(!isTouch) _e.loadAndDisplayImage(img, thumb);
    
});

    if(
old_height != thumbs.height) { setTimeout(function(){ animate(wrap, {heightthumbs.height}, 150); }, 4); }

    
setTimeout(function(){
      
setStyle(wrap, {heightthumbs.heightwidththumbs.width});
      
wrap.innerHTML '';
      
_e.cache()[id].thumbs thumbs.thumbs;
      
_e.cache()[id].previews attachments;
      
_e.cache()[id].height thumbs.height;
      
each(thumbs.thumbs, function(kt){ wrap.appendChild(_e.thumbElement(tk)); });
      
fake_wrap.parentNode.removeChild(fake_wrap);
      
_e.cur().updating false;
    }, 
150);
  },

  
setWide: function(elisWideoptions){
    if(!(
el ge(el))) return;

    var 
obj ThumbsEdit.cache()[el.id];
    var 
opts = clone(options || {});

    if (
isWide === undefined) {
      
isWide = !!ThumbsEdit.getParent(el'wide_wall_module');
    }
    
opts.wide isWide;

    if(
obj.wide != isWide){
      
ThumbsEdit.init(elobj.previewsopts);
    }
  },
  
hasMedia: function(elmedia){
    if(!(
el ge(el))) return;

    var 
id el.idfound falsecache ThumbsEdit.cache()[id];

    if(
cache){
      var 
medias cache.previews;
      for(var 
i=0i<medias.lengthi++){
        var 
medias[i];
        if(
m[m.type].id == media) {
          
found true;
          break;
        }
      }
    }

    return 
found;
  },
  
addMedia: function(elmedia){
    if(!(
el ge(el)) || !media) return;

    var 
_e ThumbsEdit;

    var 
id el.idcache _e.cache()[id];

    if(!
cache) return;

    var 
opts = clone(cache.opts);
    var 
medias = clone(cache.previews);
    if(
_e.hasMedia(elmedia[media.type].id)){
      return;
    }
    if(
medias.length == 10){
      return;
    }
    
medias[medias.length] = media;

    
_e.cache()[id] = null;
    
_e.init(idmediasopts);
  },
  
removeAll: function(el) {
    if(!(
el ge(el))) return;

    var 
_e ThumbsEditid el.idcache _e.cache()[id];

    if(!
cache) return;

    
_e.cache()[id] = null;
    
_e.init(id, [], cache.opts);
  },
  
removeMedia: function(elindex){
    if(!(
el ge(el))) return null;
    
index intval(index);

    var 
obj ThumbsEdit.cache()[el.id];
    if(!
obj) return;

    var 
del obj.previews.splice(index1), idr del[0][del[0].type].id;
    
each (el.childNodes, function(kv) {
      if (
v.getAttribute && v.getAttribute('attachment') == idr) {
        var 
tt = (geByClass1('thumb_x_button'v) || {}).tt;
        if (
tt && tt.destroytt.destroy();
      }
    });

    
ThumbsEdit.cur().coords ThumbsEdit.getCoords(el);

    if(
obj.previews.length == 0ThumbsEdit.init(el, [], obj.opts);
    else 
ThumbsEdit.update(elobj.previews);

    if (
del[0] && del[0].removedel[0].remove();

    return 
del;
  },
  
removeById: function(elattId) {
    if(!(
el ge(el))) return null;

    var 
arr = (ThumbsEdit.cache()[el.id] || {}).previews || [];
    for (var 
0arr.lengthl; ++i) {
      if (
        (
arr[i].type == 'photo' && arr[i].photo.id == attId) ||
        (
arr[i].type == 'video' && arr[i].video.id == attId) ||
        (
arr[i].type == 'album' && arr[i].album.id == attId)
      ) {
        return 
ThumbsEdit.removeMedia(eli);
      }
    }
    return 
null;
  },

  
getRatio: function(thumb){
    if(
thumb.vid){
      return 
1.33;
    }
    if(
thumb.thumb){
      return 
279 185;
    }
    
//var t = !!thumb.thumb ? thumb.thumb.sizes['x'] : thumb.sizes['x'];
    
var thumb.sizes['x'];
    var 
ratio t[1] == || t[2] == t[1] / t[2];
    return 
ratio;
  },
  
getSize: function(thumbwidthheightsingle){
    if(!
thumb) return {};

    if(
thumb.vid) {
      var 
video_type '';
      var 
vid_w intval(width * (window.devicePixelRatio || 1));
      var 
vid_h intval(height * (window.devicePixelRatio || 1));
      var 
has_l = !!thumb.sizes['l'];
      var 
has_y = !!thumb.sizes['y'];
      var 
video_width 0;
      var 
video_height 0;

      if(
vid_w <= 130 && vid_h <= 98){
        
video_type 's';
        
video_width 130;
        
video_height 98;
      } else if(
vid_w <= 320 && vid_h <= 240){
        
video_type has_l 'l' 'm';
        
video_width 320;
        
video_height 240;
      } else {
        
video_type has_y 'y' has_l 'l' 'm';
        
video_width 640;
        
video_height 480;
      }

      return {
widthvideo_widthheightvideo_heightsrcthumb.sizes[video_type][0]}
    }

    var 
isAlbum = !!thumb.thumb;
    var 
image_sizes isAlbum thumb.thumb.sizes thumb.sizes;
    var 
pixel_ratio window.devicePixelRatio || 1;
    var 
x_size image_sizes['x'] || {};
    var 
ratio = (x_size[1] || 1) / (x_size[2] || 1);
    var 
min_s 0;

    if (
ratio width height) {
      
min_s height;
      if (
ratio 1.0) {
        
min_s *= ratio;
      }
    } else {
      
min_s width;
      if (
ratio 1.0) {
        
min_s /= ratio;
      }
    }
    
//min_s *= pixel_ratio;
    
height /= pixel_ratio;
    
width /= pixel_ratio;

    var 
use_cropped = !single && !!image_sizes['o'];
    var 
photo_type '';
    var 
image_size null;

    if(
min_s 75){
      
photo_type 's';
    } else if(
min_s 130){
      
photo_type 'm';
    } else if(
use_cropped && (image_size image_sizes['o']) && image_size[1] >= width && image_size[2] >= height){
      
photo_type 'o';
    } else if(
use_cropped && (image_size image_sizes['p']) && image_size[1] >= width && image_size[2] >= height){
      
photo_type 'p';
    } else if(
use_cropped && (image_size image_sizes['q']) && image_size[1] >= width && image_size[2] >= height){
      
photo_type 'q';
    } else if(
use_cropped && (image_size image_sizes['r']) && image_size[1] >= width && image_size[2] >= height){
      
photo_type 'r';
    } else {
      
photo_type 'x';
    }

    var 
size image_sizes[photo_type];
    if(!
size[1] || !size[2]) thumb.unsized true;

    return {
srcsize[0], widthsize[1], heightsize[2]};
  },
  
compute: function(twhopt){
    
t.id t.vid 'video' t.owner_id '_' t.vid t.pid 'photo' t.owner_id '_' t.pid 'album' t.owner_id '_' t.aid;

    var 
res = {
      
idt.id,
      
widthintval(w),
      
heightintval(h),
      
lastColumnopt.lastColumn,
      
lastRowopt.lastRow,
      
singleopt.single,
      
imageThumbsEdit.getSize(twhopt.single),
      
unsizedt.unsized,
      
origt
    
};

    if(
t.title && t.size != undefined){
      
extend(res, {titlet.titlesizet.sizeisAlbumtrue});
    }

    if(
t.duration){
      var 
intval(t.duration 60);
      var 
intval(60);
      var 
t.duration 60;
      
-= 60;

      
res.duration = (':' '') + (|| >= 10 '0' m) + ':' + (>= 10 '0' s);
    }

    if(
res.unsized){
      
res.ratio 1;
    } else {
      
res.ratio res.image.width res.image.height;
    }

    return 
res;
  },
  
processThumbs: function(maxWmaxHattachmentsopts){
    var 
_e ThumbsEdit;

    var 
getRatio _e.getRatio;
    var 
compute  _e.compute;
    var 
oi = function(o){
      return 
== 'n' == 'q' 0;
    }, 
sum = function(a){
      var 
sum 0;
      
each(a, function(kf){ sum+=f; });
      return 
sum;
    }, 
getKeys = function(obj){
      var 
keys = [];
      
each(obj, function(kv){ keys[keys.length] = k; });
      return 
keys;
    }, 
multiThumbsHeight = function(ratioswidthmargin){
      return (
width - (ratios.length 1) * margin) / sum(ratios);
    };

    
opts isObject(opts) ? opts : {};
    var 
wide opts.wide;

    var 
thumbs = [], result = [];
    
each(attachments, function(ka){
      if(
a.type == 'photo' || a.type == 'video' || a.type == 'album') {
        
thumbs[thumbs.length] = a[a.type];
      }
    });

    var 
orients ''orients_cnt = [0,0,0,0], ratios = [],
        
cnt thumbs.length;

    
each(thumbs, function(kt){
      var 
ratio getRatio(t);
      var 
orient ratio 1.2 'w' ratio 0.8 'v' 'q';
      
orients += orient;
      
orients_cnt[oi(orient)]++;
      
ratios[ratios.length] = ratio;
    });

    var 
avg_ratio ratios.length sum(ratios) / ratios.length 1.0;
    var 
max_wmax_hmargin_w wide 3margin_h margin_w;

    if(
opts.force){
      
max_w maxW;
      
max_h maxH;
    } else {
      if(
wide) {
        
max_w 537;
        
max_h 310;
      } else {
        if(
maxW >= 381){
          
max_w 381;
          
max_h cnt == 361 237;
        } else {
          
max_w 337;
          
max_h cnt == 320 210;
        }
      }
      if(
maxW max_w){
        
max_w maxW;
        
max_h maxH;
      }
    }

    var 
max_ratio max_w max_h;
    var 
thumbs_width 0;
    var 
thumbs_height 0;

    if(
cnt == 1){
      var 
opt = { lastColumn1lastRow1single};
      if(
thumbs[0].thumb){
        
thumbs_width 279;
        
thumbs_height 185;
      } else if(
ratios[0] >= 1.0 max_ratio){
        
thumbs_width max_w;
        
thumbs_height Math.min(thumbs_width ratios[0], max_h);
      } else {
        
thumbs_height max_h;
        
thumbs_width Math.min(thumbs_height ratios[0], max_w);
      }
      var 
compute(thumbs[0], thumbs_widththumbs_heightopt);
      if(!
t.unsized && (t.image.width thumbs_width || t.image.height thumbs_height)){
        
thumbs_width t.image.width;
        
thumbs_height t.image.height;
        
compute(thumbs[0], thumbs_widththumbs_heightopt);
      }
      
result[0] = t;
    }

    else if(
cnt == 2) switch(orients){
      case 
'ww':
        if (
avg_ratio 1.4 max_ratio && (ratios[1] - ratios[0]) < 0.2) {
          var 
max_w;
          var 
Math.min(ratios[0], ratios[1], (max_h margin_h) / 2.0);
          
result[0] = compute(thumbs[0], wh, { lastColumn});
          
result[1] = compute(thumbs[1], wh, { lastColumn1lastRow});

          
thumbs_width max_w;
          
thumbs_height margin_h;
          break;
        }
      case 
'vv':
      case 
'qv':
      case 
'vq':
      case 
'qq':
        
= (max_w margin_w) / 2;
        
Math.min(ratios[0], ratios[1], max_h);
        
result[0] = compute(thumbs[0], wh, {lastRow1});
        
result[1] = compute(thumbs[1], wh, {lastRow1lastColumn1});

        
thumbs_width max_w;
        
thumbs_height h;
        break;
      default:
        var 
w0 intval((max_w margin_w) / ratios[1] / (ratios[0] + ratios[1]));
        var 
w1 max_w w0 margin_w;
        var 
Math.min(max_hw0 ratios[0], w1 ratios[1]);
        
result[0] = compute(thumbs[0], w0h, {lastRow1});
        
result[1] = compute(thumbs[1], w1h, {lastColumn1lastRow1});

        
thumbs_width max_w;
        
thumbs_height h;
    } else if(
cnt == 3){
      if ((
ratios[0] > 1.2 max_ratio || avg_ratio 1.5 max_ratio) && orients == 'www') {
        var 
max_w;
        var 
h_cover Math.min(ratios[0], (max_h margin_h) * 0.66);
        
result[0] = compute(thumbs[0], wh_cover, {lastColumn1});
        if (
orients == 'www') {
          var 
intval(max_w margin_w) / 2;
          var 
Math.min(max_h h_cover margin_hratios[1], ratios[2]);
          
result[1] = compute(thumbs[1], wh, {lastRow1});
          
result[2] = compute(thumbs[2], max_w margin_wh, {lastColumn1lastRow1});
        } else {
          var 
w0 intval(((max_w margin_w) / ratios[2]) / (ratios[1] + ratios[2]));
          var 
w1 max_w w0 margin_w;
          var 
Math.min(max_h h_cover margin_hw0 ratios[2], w1 ratios[1]);

          
result[1] = compute(thumbs[1], w0h, {lastRow1});
          
result[2] = compute(thumbs[2], w0h, {lastRow1lastColumn1});
        }
        
thumbs_width max_w;
        
thumbs_height h_cover margin_h;
      } else {
        var 
max_h;
        var 
w_cover intval(Math.min(ratios[0], (max_w margin_w) * 0.75));
        
result[0] = compute(thumbs[0], w_coverh, {lastRow1});

        var 
h1 ratios[1] * (max_h margin_h) / (ratios[2] + ratios[1]);
        var 
h0 max_h h1 margin_h;
        var 
Math.min(max_w w_cover margin_wintval(h1 ratios[2]), intval(h0 ratios[1]));

        
result[1] = compute(thumbs[1], wh0, {lastColumn1});
        
result[2] = compute(thumbs[2], wh1, {lastColumn1lastRow1});

        var 
thumbs_width w_cover margin_w;
        var 
thumbs_height max_h;
      }
    } else if(
cnt == 4){
      if ((
ratios[0] > 1.2 max_ratio || avg_ratio 1.5 max_ratio) && orients == 'wwww') {
        var 
max_w;
        var 
h_cover Math.min(ratios[0], (max_h margin_h) * 0.66);
        
result[0] = compute(thumbs[0], wh_cover, {lastColumn1});

        var 
= (max_w margin_w) / (ratios[1] + ratios[2] + ratios[3]);
        var 
w0 intval(ratios[1]);
        var 
w1 intval(ratios[2]);
        var 
w2 w0 w1 -  (margin_w);
        var 
Math.min(max_h h_cover margin_hh);

        
result[1] = compute(thumbs[1], w0h, {lastRow1});
        
result[2] = compute(thumbs[2], w1h, {lastRow1});
        
result[3] = compute(thumbs[3], w2h, {lastColumn1lastRow1});

        
thumbs_width max_w;
        
thumbs_height h_cover margin_h;
      } else {
        var 
max_h;
        var 
w_cover Math.min(ratios[0], (max_w margin_w) * 0.66);
        
result[0] = compute(thumbs[0], w_coverh, {lastRow1});

        var 
= (max_h margin_h) / (ratios[1] + ratios[2] + ratios[3]);
        var 
h0 intval(ratios[1]);
        var 
h1 intval(ratios[2]);
        var 
h2 h0 h1 - (margin_h);
        var 
Math.min(max_w w_cover margin_ww);

        
result[1] = compute(thumbs[1], wh0, {lastColumn1});
        
result[2] = compute(thumbs[2], wh1, {lastColumn1});
        
result[3] = compute(thumbs[3], wh2, {lastColumn1lastRow1});

        
thumbs_width w_cover margin_w;
        
thumbs_height max_h;
      }
    } else {
      var 
ratios_cropped = [];
      if(
avg_ratio 1.1){
        
each(ratios, function(kratio){
          
ratios_cropped[ratios_cropped.length] = Math.max(1.0ratio);
        })
      } else {
        
each(ratios, function(kratio){
          
ratios_cropped[ratios_cropped.length] = Math.min(1.0ratio);
        });
      }

      var 
tries = {};

      var 
first_linesecond_linethird_line;
      
tries[(first_line cnt) + ''] = [ multiThumbsHeight(ratios_croppedmax_wmargin_w) ];

      for(
first_line 1first_line <= cnt 1first_line++){
        
tries[first_line ',' + (secont_line cnt first_line)] = [
          
multiThumbsHeight(ratios_cropped.slice(0first_line), max_wmargin_w),
          
multiThumbsHeight(ratios_cropped.slice(first_line), max_wmargin_w)
        ];
      }

      for(
first_line 1first_line <= cnt 2first_line++){
        for(
second_line 1second_line <= cnt first_line 1second_line++){
          
tries[first_line ',' second_line ',' + (third_line cnt first_line second_line)] = [
            
multiThumbsHeight(ratios_cropped.slice(0first_line), max_wmargin_w),
            
multiThumbsHeight(ratios_cropped.slice(first_linefirst_line second_line), max_wmargin_w),
            
multiThumbsHeight(ratios_cropped.slice(first_line second_line), max_wmargin_w)
          ];
        }
      }

      var 
opt_conf null;
      var 
opt_diff 0;
      var 
opt_height 0;
      var 
opt_h;
      for(var 
conf in tries){
        var 
heights tries[conf];
        var 
conf_h sum(heights) + margin_h * (heights.length 1);
        var 
conf_diff Math.abs(conf_h max_h);

        if(
conf.indexOf(',') != -1){
          var 
conf_nums conf.split(',');
          for(var 
0i<conf_nums.lengthi++) conf_nums[i] = intval(conf_nums[i]);
          if (
conf_nums[0] > conf_nums[1] || conf_nums[2] && conf_nums[1] > conf_nums[2]) {
            
conf_diff += 50;
            
conf_diff *= 1.5;
          }
        }
        if (
opt_conf == null || conf_diff opt_diff) {
          
opt_conf conf;
          
opt_diff conf_diff;
          
opt_h conf_h;
        }
      }

      var 
thumbs_remain = clone(thumbs);
      var 
ratios_remain = clone(ratios_cropped);
      var 
chunks opt_conf.split(',');
      var 
opt_heights tries[opt_conf];
      var 
last_row chunks.length 1;

      for(var 
0i<chunks.lengthi++){
        var 
line_chunks_num parseInt(chunks[i]);
        var 
line_thumbs thumbs_remain.splice(0line_chunks_num);
        var 
line_height opt_heights.shift();
        var 
last_column line_thumbs.length 1;
        var 
opts = {};
        if (
last_row == i) {
          
opts.lastRow true;
        }
        var 
width_remains max_w;
        for(var 
0j<line_thumbs.lengthj++){
          var 
thumb line_thumbs[j];
          var 
thumb_ratio ratios_remain.shift();
          var 
thumb_opts opts;
          if(
last_column == j){
            
thumb_width Math.ceil(width_remains);
            
thumb_opts.lastColumn true;
          } else {
            
thumb_width intval(thumb_ratio line_height);
            
width_remains -= thumb_width margin_w;
          }
          
result[result.length] = compute(thumbthumb_widthline_heightthumb_opts);
        }
      }

      
thumbs_width max_w;
      
thumbs_height opt_h;
    }
    return {
widthintval(thumbs_width), heightintval(thumbs_height), thumbsresult};
  }
}

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