diff --git a/core/js/placeholder.js b/core/js/placeholder.js index 5fb5b5b8f8..8eb17b43fa 100644 --- a/core/js/placeholder.js +++ b/core/js/placeholder.js @@ -1,6 +1,8 @@ /** * ownCloud * + * @author John Molakvoæ + * @copyright 2016 John Molakvoæ * @author Morris Jobke * @copyright 2013 Morris Jobke * @@ -48,16 +50,64 @@ (function ($) { $.fn.imageplaceholder = function(seed, text, size) { - // set optional argument "text" to value of "seed" if undefined text = text || seed; - var hash = md5(seed).substring(0, 4), - maxRange = parseInt('ffff', 16), - hue = parseInt(hash, 16) / maxRange * 256, - height = this.height() || size || 32; - this.css('background-color', 'hsl(' + hue + ', 90%, 65%)'); + var hash = seed.toLowerCase().replace(/[^0-9a-f]+/g, ''); + + // Already a md5 hash? + if( !hash.match(/^[0-9a-f]{32}$/g) ) { + hash = md5(hash); + } + + function rgbToHsl(r, g, b) { + r /= 255, g /= 255, b /= 255; + var max = Math.max(r, g, b), min = Math.min(r, g, b); + var h, s, l = (max + min) / 2; + if(max === min) { + h = s = 0; // achromatic + } else { + var d = max - min; + s = l > 0.5 ? d / (2 - max - min) : d / (max + min); + switch(max) { + case r: h = (g - b) / d + (g < b ? 6 : 0); break; + case g: h = (b - r) / d + 2; break; + case b: h = (r - g) / d + 4; break; + } + h /= 6; + } + return [h, s, l]; + } + + // Init vars + var result = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]; + var rgb = [0, 0, 0]; + var sat = 80; + var lum = 68; + var modulo = 16; + + // Splitting evenly the string + for(var i in hash) { + result[i%modulo] = result[i%modulo] + parseInt(hash.charAt(i), 16).toString(); + } + + // Converting our data into a usable rgb format + // Start at 1 because 16%3=1 but 15%3=0 and makes the repartition even + for(var count=1;count= 200) { + sat = 60; + } + var hue = parseInt(hsl[0] * 360); + this.css('background-color', 'hsl('+hue+', '+sat+'%, '+lum+'%)'); // Placeholders are square + var height = this.height() || size || 32; this.height(height); this.width(height);