Помогите допилить. Очень не хватает. Да и думаю всем понравится.
Код:
console.log("EFFECTS SCRIPT STARTING");
var effects = [
{
"title": chrome.i18n.getMessage("fix_media_content")
}
];
if (status == 'disabled' || !settings.effects){
throw "stop";
}
/*====================================================================================== FIX_MEDIA_CONTENT_SIZE */
if (settings.effects[0]){
var thumbs = document.getElementsByClassName('page_post_sized_thumbs');
for (var l=0;l<thumbs.length;l++){
fixMediaSize(thumbs[l]);
}
document.body.addEventListener("DOMNodeInserted", function (ev) {
if (ev.target.className){
if (ev.target.className.indexOf('feed_row')!=-1 || ev.target.className.indexOf('post')!=-1){
var media = ev.target.getElementsByClassName('page_post_sized_thumbs');
if (media.length>0){
for (var m=0;m<media.length;m++){
fixMediaSize(media[m]);
}
}
}
}
});
}
function fixMediaSize(thumbs){
var matrix = [[[]]];
var items = thumbs.getElementsByClassName('page_post_thumb_wrap');
var x=0,y=0,z=0;
for (var i=0; i<items.length;i++){
matrix[x][y][z]=items[i];
if (items[i].className.indexOf('last_column')!=-1 && i!=items.length-1){
if (items[i+1].className.indexOf('last_column')!=-1){
z++;
} else {
x++;
y=0;
matrix[x]=[[]];
}
} else {
y++;
z=0;
if (i!=items.length-1){
matrix[x][y]=[];
}
}
}
for (x=0; x<matrix.length;x++){
for (y=0; y<matrix[x].length;y++){
if (matrix[x][y].length>1){
var colHeight = 0;
for (z=0;z<matrix[x][y].length;z++){
colHeight+=parseInt(matrix[x][y][z].style.height);
}
var scale_percent = (5*(matrix[x][y].length-1)/colHeight*100+100)/100;
for (z=0;z<matrix[x][y].length;z++){
matrix[x][y][z].style.height=Math.ceil(parseInt(matrix[x][y][z].style.height)*scale_percent)+'px';
matrix[x][y][z].getElementsByTagName('img')[0].height=Math.ceil(matrix[x][y][z].getElementsByTagName('img')[0].height*scale_percent);
matrix[x][y][z].style.width=Math.ceil(parseInt(matrix[x][y][z].style.width)*scale_percent)+'px';
matrix[x][y][z].getElementsByTagName('img')[0].width=Math.ceil(matrix[x][y][z].getElementsByTagName('img')[0].width*scale_percent);
}
}
}
}
if (thumbs.parentElement.parentElement.className.indexOf('wall_text')!=-1 || thumbs.parentElement.className.indexOf('wall_text')!=-1 || thumbs.parentElement.className.indexOf('feed_since_photos')!=-1 || thumbs.parentElement.className.indexOf('page_post_queue_wide')!=-1 && thumbs.parentElement.parentElement.parentElement.className.indexOf('reply_text')==-1 || thumbs.parentElement.className.indexOf('wall_album_under_row')!=-1){
zoomMediaContent(thumbs,matrix,630);
}
if (thumbs.parentElement.className.indexOf('page_post_queue_narrow')!=-1 && thumbs.parentElement.parentElement.parentElement.className.indexOf('reply_text')==-1 || thumbs.parentElement.parentElement.parentElement.className.indexOf('page_post_queue_narrow')!=-1){
zoomMediaContent(thumbs,matrix,396);
}
if (thumbs.parentElement.className.indexOf('wall_album_photos')!=-1){
var album_cover=thumbs.parentElement.parentElement.getElementsByClassName('wall_album')[0];
//zoomMediaContent(thumbs,matrix,100);
}
}
function zoomMediaContent(tmbs, mtrx, zWidth){
var curr_width = [];
var zoom_percent = [];
for (var j=0;j<mtrx.length;j++){
curr_width[j]=0;
for (var k=0;k<mtrx[j].length;k++){
curr_width[j]+=parseInt(mtrx[j][k][0].style.width);
}
zoom_percent[j] = (zWidth-k)/curr_width[j];
}
for (var x=0;x<mtrx.length;x++){
for (var y=0;y<mtrx[x].length;y++){
for (var z=0;z<mtrx[x][y].length;z++){
mtrx[x][y][z].style.height=Math.floor(parseInt(mtrx[x][y][z].style.height)*zoom_percent[x])+'px';
mtrx[x][y][z].getElementsByTagName('img')[0].height=Math.floor(mtrx[x][y][z].getElementsByTagName('img')[0].height*zoom_percent[x]);
mtrx[x][y][z].style.width=Math.floor(parseInt(mtrx[x][y][z].style.width)*zoom_percent[x])+'px';
mtrx[x][y][z].getElementsByTagName('img')[0].width=Math.floor(mtrx[x][y][z].getElementsByTagName('img')[0].width*zoom_percent[x]);
if (mtrx[x][y][z].className.indexOf('video')==-1){
mtrx[x][y][z].getElementsByTagName('img')[0].src=getBiggestPrev(mtrx[x][y][z]);
}
}
}
}
var zoomed_height = 0;
for (var i=0;i<mtrx.length;i++){
zoomed_height+=parseInt(mtrx[i][0][0].style.height);
}
tmbs.style.width=zWidth+'px';
tmbs.style.height=zoomed_height+'px';
}
function getBiggestPrev(elm){
var s = new XMLSerializer();
var str = s.serializeToString(elm);
var start = str.indexOf('base":"');
var end = 0;
if (start!=-1){
end = str.indexOf('"', start+17);
}
var dataStr = str.substr(start+17,end-start-17);
var urlZ = dataStr;
start = str.indexOf('z_":["');
end = 0;
if (start!=-1){
end = str.indexOf('"', start+16);
}
else {
start = str.indexOf('y_":["');
if (start!=-1){
end = str.indexOf('"', start+16);
}
else {
start = str.indexOf('x_":["');
if (start!=-1){
end = str.indexOf('"', start+16);
}
}
}
dataStr = str.substr(start+16,end-start-16);
urlZ+=dataStr+'.jpg';
return urlZ;
}