2018-09-24 11:05:10 +02:00
|
|
|
/*eslint max-len: ["error", { "code": 150 }]*/
|
2018-09-23 22:06:52 +02:00
|
|
|
/**!
|
|
|
|
* @preserve Shadow animation 1.11
|
|
|
|
* http://www.bitstorm.org/jquery/shadow-animation/
|
|
|
|
* Copyright 2011, 2013 Edwin Martin
|
|
|
|
* Contributors: Mark Carver, Xavier Lepretre and Jason Redding
|
|
|
|
* Released under the MIT and GPL licenses.
|
|
|
|
*/
|
|
|
|
|
|
|
|
define(['jquery'], function (jQuery) {
|
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
return jQuery(function($) {
|
|
|
|
/**
|
|
|
|
* Check whether the browser supports RGBA color mode.
|
|
|
|
*
|
|
|
|
* Author Mehdi Kabab <http://pioupioum.fr>
|
|
|
|
* @return {boolean} True if the browser support RGBA. False otherwise.
|
|
|
|
*/
|
|
|
|
function isRGBACapable() {
|
|
|
|
var $script = $('script:first'),
|
|
|
|
color = $script.css('color'),
|
|
|
|
result = false;
|
|
|
|
if (/^rgba/.test(color)) {
|
|
|
|
result = true;
|
|
|
|
} else {
|
|
|
|
try {
|
|
|
|
result = (color !== $script.css('color', 'rgba(0, 0, 0, 0.5)').css('color'));
|
|
|
|
$script.css('color', color);
|
|
|
|
} catch (e) {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
$script.removeAttr('style');
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
return result;
|
|
|
|
}
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
$.extend(true, $, {
|
|
|
|
support: {
|
|
|
|
'rgba': isRGBACapable()
|
|
|
|
}
|
|
|
|
});
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
/*************************************/
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
// First define which property to use
|
|
|
|
var styles = $('html').prop('style');
|
|
|
|
var boxShadowProperty;
|
|
|
|
$.each(['boxShadow', 'MozBoxShadow', 'WebkitBoxShadow'], function(i, property) {
|
|
|
|
var val = styles[property];
|
|
|
|
if (typeof val !== 'undefined') {
|
|
|
|
boxShadowProperty = property;
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
});
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
// Extend the animate-function
|
|
|
|
if (boxShadowProperty) {
|
|
|
|
$['Tween']['propHooks']['boxShadow'] = {
|
|
|
|
get: function(tween) {
|
|
|
|
return $(tween.elem).css(boxShadowProperty);
|
|
|
|
},
|
|
|
|
set: function(tween) {
|
|
|
|
var style = tween.elem.style;
|
|
|
|
var p_begin = parseShadows($(tween.elem)[0].style[boxShadowProperty] || $(tween.elem).css(boxShadowProperty));
|
|
|
|
var p_end = parseShadows(tween.end);
|
|
|
|
var maxShadowCount = Math.max(p_begin.length, p_end.length);
|
|
|
|
var i;
|
|
|
|
for(i = 0; i < maxShadowCount; i++) {
|
|
|
|
p_end[i] = $.extend({}, p_begin[i], p_end[i]);
|
|
|
|
if (p_begin[i]) {
|
|
|
|
if (!('color' in p_begin[i]) || $.isArray(p_begin[i].color) === false) {
|
|
|
|
p_begin[i].color = p_end[i].color || [0, 0, 0, 0];
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
p_begin[i] = parseShadows('0 0 0 0 rgba(0,0,0,0)')[0];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
tween['run'] = function(progress) {
|
|
|
|
var rs = calculateShadows(p_begin, p_end, progress);
|
|
|
|
style[boxShadowProperty] = rs;
|
|
|
|
};
|
|
|
|
}
|
|
|
|
};
|
|
|
|
}
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
// Calculate an in-between shadow.
|
|
|
|
function calculateShadows(beginList, endList, pos) {
|
|
|
|
var shadows = [];
|
|
|
|
$.each(beginList, function(i) {
|
|
|
|
var parts = [], begin = beginList[i], end = endList[i];
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
if (begin.inset) {
|
|
|
|
parts.push('inset');
|
|
|
|
}
|
|
|
|
if (typeof end.left !== 'undefined') {
|
|
|
|
parts.push(parseFloat(begin.left + pos * (end.left - begin.left)) + 'px '
|
|
|
|
+ parseFloat(begin.top + pos * (end.top - begin.top)) + 'px');
|
|
|
|
}
|
|
|
|
if (typeof end.blur !== 'undefined') {
|
|
|
|
parts.push(parseFloat(begin.blur + pos * (end.blur - begin.blur)) + 'px');
|
|
|
|
}
|
|
|
|
if (typeof end.spread !== 'undefined') {
|
|
|
|
parts.push(parseFloat(begin.spread + pos * (end.spread - begin.spread)) + 'px');
|
|
|
|
}
|
|
|
|
if (typeof end.color !== 'undefined') {
|
|
|
|
var color = 'rgb' + ($.support['rgba'] ? 'a' : '') + '('
|
|
|
|
+ parseInt((begin.color[0] + pos * (end.color[0] - begin.color[0])), 10) + ','
|
|
|
|
+ parseInt((begin.color[1] + pos * (end.color[1] - begin.color[1])), 10) + ','
|
|
|
|
+ parseInt((begin.color[2] + pos * (end.color[2] - begin.color[2])), 10);
|
|
|
|
if ($.support['rgba']) {
|
|
|
|
color += ',' + parseFloat(begin.color[3] + pos * (end.color[3] - begin.color[3]));
|
|
|
|
}
|
|
|
|
color += ')';
|
|
|
|
parts.push(color);
|
|
|
|
}
|
|
|
|
shadows.push(parts.join(' '));
|
|
|
|
});
|
|
|
|
return shadows.join(', ');
|
|
|
|
}
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
// Parse the shadow value and extract the values.
|
|
|
|
function parseShadows(shadow) {
|
|
|
|
var parsedShadows = [];
|
|
|
|
var parsePosition = 0;
|
|
|
|
var parseLength = shadow.length;
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
function findInset() {
|
|
|
|
var m = /^inset\b/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.inset = true;
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function findOffsets() {
|
|
|
|
var m = /^(-?[0-9\.]+)(?:px)?\s+(-?[0-9\.]+)(?:px)?(?:\s+(-?[0-9\.]+)(?:px)?)?(?:\s+(-?[0-9\.]+)(?:px)?)?/.exec(
|
|
|
|
shadow.substring(parsePosition)
|
|
|
|
);
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.left = parseInt(m[1], 10);
|
|
|
|
parsedShadow.top = parseInt(m[2], 10);
|
|
|
|
parsedShadow.blur = (m[3] ? parseInt(m[3], 10) : 0);
|
|
|
|
parsedShadow.spread = (m[4] ? parseInt(m[4], 10) : 0);
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function findColor() {
|
|
|
|
var m = /^#([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.color = [parseInt(m[1], 16), parseInt(m[2], 16), parseInt(m[3], 16), 1];
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
m = /^#([0-9a-fA-F])([0-9a-fA-F])([0-9a-fA-F])/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.color = [parseInt(m[1], 16) * 17, parseInt(m[2], 16) * 17, parseInt(m[3], 16) * 17, 1];
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
m = /^rgb\(\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*\)/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.color = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), 1];
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
m = /^rgba\(\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*,\s*([0-9\.]+)\s*\)/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsedShadow.color = [parseInt(m[1], 10), parseInt(m[2], 10), parseInt(m[3], 10), parseFloat(m[4])];
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function findWhiteSpace() {
|
|
|
|
var m = /^\s+/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function findComma() {
|
|
|
|
var m = /^\s*,\s*/.exec(shadow.substring(parsePosition));
|
|
|
|
if (m !== null && m.length > 0) {
|
|
|
|
parsePosition += m[0].length;
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
function normalizeShadow(shadow) {
|
|
|
|
if ($.isPlainObject(shadow)) {
|
|
|
|
var i, sColor, cLength = 0, color = [];
|
|
|
|
if ($.isArray(shadow.color)) {
|
|
|
|
sColor = shadow.color;
|
|
|
|
cLength = sColor.length;
|
|
|
|
}
|
|
|
|
for(i = 0; i < 4; i++) {
|
|
|
|
if (i < cLength) {
|
|
|
|
color.push(sColor[i]);
|
|
|
|
} else if (i === 3) {
|
|
|
|
color.push(1);
|
|
|
|
} else {
|
|
|
|
color.push(0);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return $.extend({
|
|
|
|
'left': 0,
|
|
|
|
'top': 0,
|
|
|
|
'blur': 0,
|
|
|
|
'spread': 0
|
|
|
|
}, shadow);
|
|
|
|
}
|
|
|
|
var parsedShadow = normalizeShadow();
|
2018-09-23 22:06:52 +02:00
|
|
|
|
2018-09-24 11:05:10 +02:00
|
|
|
while (parsePosition < parseLength) {
|
|
|
|
if (findInset()) {
|
|
|
|
findWhiteSpace();
|
|
|
|
} else if (findOffsets()) {
|
|
|
|
findWhiteSpace();
|
|
|
|
} else if (findColor()) {
|
|
|
|
findWhiteSpace();
|
|
|
|
} else if (findComma()) {
|
|
|
|
parsedShadows.push(normalizeShadow(parsedShadow));
|
|
|
|
parsedShadow = {};
|
|
|
|
} else {
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
parsedShadows.push(normalizeShadow(parsedShadow));
|
|
|
|
return parsedShadows;
|
|
|
|
}
|
2018-09-23 22:06:52 +02:00
|
|
|
});
|
|
|
|
|
|
|
|
});
|