X-Git-Url: http://positon.org/gitweb/?p=bizou.git;a=blobdiff_plain;f=plugins%2F_disabled%2Fbalanced%2Fscripts.js;fp=plugins%2F_disabled%2Fbalanced%2Fscripts.js;h=51eb4c6d4119b37ba08d927697f1c3e2ec7ac35f;hp=0000000000000000000000000000000000000000;hb=c4491b6746923f941bea358f6bbbe9d40368a0f8;hpb=983aec6f252b587aaf4118a5c416bc919d84669e diff --git a/plugins/_disabled/balanced/scripts.js b/plugins/_disabled/balanced/scripts.js new file mode 100644 index 0000000..51eb4c6 --- /dev/null +++ b/plugins/_disabled/balanced/scripts.js @@ -0,0 +1,129 @@ +function applyOptimalImagesSize() +{ + var divimages = document.getElementsByClassName("image"); + var images = new Array(); + for(var i = 0 ; i < divimages.length ; ++i) + { + images.push(divimages[i].children[0].children[0]); + } + var bestHeight = parseInt(document.getElementById("thumbsize").textContent); + var newHList = getOptimalHeights(images, bestHeight); + for( var i = 0 ; i < images.length ; ++i) + { + images[i].height = newHList[i]; + } +} + +//Renvoi un tuple (with,height) de la taille de la surface d'affichage du navigateur +function getClientWindowSize() +{ + var w = 0; + var h = 0; + + if (document.body) + { + w = (document.body.clientWidth); + h = (document.body.clientHeight); + } + else + { + w = (window.innerWidth); + h = (window.innerHeight); + } + + return [w,h]; +} + +//renvoie la hauteur optimal de chaque image pour occuper toute la largeur de la surface d'affichage +function getOptimalHeights(images, bestHeight) +{ + var imageHeight = bestHeight; + var originalSizes = getAllImageSizesForHeight(images, imageHeight); + var clientSize = getClientWindowSize(); + var newHeights = new Array(); + var allWidth = new Array(); + for(var i = 0 ; i < originalSizes.length ; ++i) + { + allWidth.push(originalSizes[i][0]); + } + + var splittedWidth = splitTab(allWidth, clientSize[0]); + for(var i = 0 ; i < splittedWidth.length ; ++i) + { + var sum = 15; + var ratiosum = 0.0; + for(var j=0 ; j< splittedWidth[i].length ; ++j) + { + sum += splittedWidth[i][j] + 5; + ratiosum += parseFloat(splittedWidth[i][j]) / parseFloat(imageHeight); + } + var deltaHeight = parseInt((clientSize[0] - sum) / parseFloat(ratiosum)); + + var lastandtoobig = i == (splittedWidth.length-1) && sum < clientSize[0]/2; + + for(var j=0 ; j< splittedWidth[i].length ; ++j) + { + if(lastandtoobig) + { + newHeights.push(bestHeight); + } + else + { + newHeights.push(imageHeight + deltaHeight); + } + } + } + return newHeights; +} + +//donne la taille de toutes les images affichées +function getAllImageSizes(images) +{ + var sizes = new Array(); + for (var i = 0; i < images.length; i++) { + sizes.push([images[i].width, images[i].height]); + } + return sizes; +} + +//donne la taille de toutes les images affichées, redimensionnées pour une hauteur donnée +function getAllImageSizesForHeight(images, height) +{ + var sizes = new Array(); + for (var i = 0; i < images.length; i++) { + sizes.push([images[i].width / (images[i].height / height) , height]); + } + return sizes; +} + + + + +//Renvoi un tableau de tableau, correspondant au découpage du tableau d'entrée découpé par tranche de MAX +function splitTab(tab, max) +{ + var splitedTabs = [new Array()]; + var sumSize = 15; + for (var i = 0; i < tab.length; i++) + { + element = tab[i]; + + var total = sumSize + element + 5; + //regles arbirtaire de découpage en plus de total > max + //(parce que ca rend mieux visuellement) + //=> on ajoute la suite l'élement qui dépasse si sa taille fait moins d'1/4 de max + //=> ou si l'écart restant représente plus de la moitié de l'élément à ajouter + if((total > max && (sumSize > max ||(max - sumSize) > (element / 2) || element > max / 4)) || element >= max) + { + splitedTabs.push(new Array()); + splitedTabs[splitedTabs.length - 1].push(element); + sumSize = 16 + element + 4; + } + else + { + splitedTabs[splitedTabs.length - 1].push(element); + sumSize = total; + } + } + return splitedTabs; +}