{"version":3,"file":"kendo.fx.min.js","sources":["kendo.fx.js"],"sourcesContent":["(function(f, define) {\n define('kendo.fx',[ \"kendo.core\" ], f);\n})(function() {\n\nvar __meta__ = {\n id: \"fx\",\n name: \"Effects\",\n category: \"framework\",\n description: \"Required for animation effects in all Kendo UI widgets.\",\n depends: [ \"core\" ]\n};\n\n(function($, undefined) {\n var kendo = window.kendo,\n fx = kendo.effects,\n each = $.each,\n extend = $.extend,\n support = kendo.support,\n browser = support.browser,\n transforms = support.transforms,\n transitions = support.transitions,\n scaleProperties = { scale: 0, scalex: 0, scaley: 0, scale3d: 0 },\n translateProperties = { translate: 0, translatex: 0, translatey: 0, translate3d: 0 },\n hasZoom = (typeof document.documentElement.style.zoom !== \"undefined\") && !transforms,\n matrix3dRegExp = /matrix3?d?\\s*\\(.*,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?,\\s*([\\d\\.\\-]+)\\w*?/i,\n cssParamsRegExp = /^(-?[\\d\\.\\-]+)?[\\w\\s]*,?\\s*(-?[\\d\\.\\-]+)?[\\w\\s]*/i,\n translateXRegExp = /translatex?$/i,\n oldEffectsRegExp = /(zoom|fade|expand)(\\w+)/,\n singleEffectRegExp = /(zoom|fade|expand)/,\n unitRegExp = /[xy]$/i,\n transformProps = [\"perspective\", \"rotate\", \"rotatex\", \"rotatey\", \"rotatez\", \"rotate3d\", \"scale\", \"scalex\", \"scaley\", \"scalez\", \"scale3d\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"translatez\", \"translate3d\", \"matrix\", \"matrix3d\"],\n transform2d = [\"rotate\", \"scale\", \"scalex\", \"scaley\", \"skew\", \"skewx\", \"skewy\", \"translate\", \"translatex\", \"translatey\", \"matrix\"],\n transform2units = { \"rotate\": \"deg\", scale: \"\", skew: \"px\", translate: \"px\" },\n cssPrefix = transforms.css,\n round = Math.round,\n BLANK = \"\",\n PX = \"px\",\n NONE = \"none\",\n AUTO = \"auto\",\n WIDTH = \"width\",\n HEIGHT = \"height\",\n HIDDEN = \"hidden\",\n ORIGIN = \"origin\",\n ABORT_ID = \"abortId\",\n OVERFLOW = \"overflow\",\n TRANSLATE = \"translate\",\n POSITION = \"position\",\n COMPLETE_CALLBACK = \"completeCallback\",\n TRANSITION = cssPrefix + \"transition\",\n TRANSFORM = cssPrefix + \"transform\",\n BACKFACE = cssPrefix + \"backface-visibility\",\n PERSPECTIVE = cssPrefix + \"perspective\",\n DEFAULT_PERSPECTIVE = \"1500px\",\n TRANSFORM_PERSPECTIVE = \"perspective(\" + DEFAULT_PERSPECTIVE + \")\",\n directions = {\n left: {\n reverse: \"right\",\n property: \"left\",\n transition: \"translatex\",\n vertical: false,\n modifier: -1\n },\n right: {\n reverse: \"left\",\n property: \"left\",\n transition: \"translatex\",\n vertical: false,\n modifier: 1\n },\n down: {\n reverse: \"up\",\n property: \"top\",\n transition: \"translatey\",\n vertical: true,\n modifier: 1\n },\n up: {\n reverse: \"down\",\n property: \"top\",\n transition: \"translatey\",\n vertical: true,\n modifier: -1\n },\n top: {\n reverse: \"bottom\"\n },\n bottom: {\n reverse: \"top\"\n },\n \"in\": {\n reverse: \"out\",\n modifier: -1\n },\n out: {\n reverse: \"in\",\n modifier: 1\n },\n\n vertical: {\n reverse: \"vertical\"\n },\n\n horizontal: {\n reverse: \"horizontal\"\n }\n };\n\n kendo.directions = directions;\n\n extend($.fn, {\n kendoStop: function(clearQueue, gotoEnd) {\n if (transitions) {\n return fx.stopQueue(this, clearQueue || false, gotoEnd || false);\n } else {\n return this.stop(clearQueue, gotoEnd);\n }\n }\n });\n\n /* jQuery support for all transform animations (FF 3.5/3.6, Opera 10.x, IE9 */\n\n if (transforms && !transitions) {\n each(transform2d, function(idx, value) {\n $.fn[value] = function(val) {\n if (typeof val == \"undefined\") {\n return animationProperty(this, value);\n } else {\n var that = $(this)[0],\n transformValue = value + \"(\" + val + transform2units[value.replace(unitRegExp, \"\")] + \")\";\n\n if (that.style.cssText.indexOf(TRANSFORM) == -1) {\n $(this).css(TRANSFORM, transformValue);\n } else {\n that.style.cssText = that.style.cssText.replace(new RegExp(value + \"\\\\(.*?\\\\)\", \"i\"), transformValue);\n }\n }\n return this;\n };\n\n $.fx.step[value] = function(fx) {\n $(fx.elem)[value](fx.now);\n };\n });\n\n var curProxy = $.fx.prototype.cur;\n $.fx.prototype.cur = function() {\n if (transform2d.indexOf(this.prop) != -1) {\n return parseFloat($(this.elem)[this.prop]());\n }\n\n return curProxy.apply(this, arguments);\n };\n }\n\n kendo.toggleClass = function(element, classes, options, add) {\n if (classes) {\n classes = classes.split(\" \");\n\n if (transitions) {\n options = extend({\n exclusive: \"all\",\n duration: 400,\n ease: \"ease-out\"\n }, options);\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease);\n setTimeout(function() {\n element.css(TRANSITION, \"\").css(HEIGHT);\n }, options.duration); // TODO: this should fire a kendoAnimate session instead.\n }\n\n each(classes, function(idx, value) {\n element.toggleClass(value, add);\n });\n }\n\n return element;\n };\n\n kendo.parseEffects = function(input, mirror) {\n var effects = {};\n\n if (typeof input === \"string\") {\n each(input.split(\" \"), function(idx, value) {\n var redirectedEffect = !singleEffectRegExp.test(value),\n resolved = value.replace(oldEffectsRegExp, function(match, $1, $2) {\n return $1 + \":\" + $2.toLowerCase();\n }), // Support for old zoomIn/fadeOut style, now deprecated.\n effect = resolved.split(\":\"),\n direction = effect[1],\n effectBody = {};\n\n if (effect.length > 1) {\n effectBody.direction = (mirror && redirectedEffect ? directions[direction].reverse : direction);\n }\n\n effects[effect[0]] = effectBody;\n });\n } else {\n each(input, function(idx) {\n var direction = this.direction;\n\n if (direction && mirror && !singleEffectRegExp.test(idx)) {\n this.direction = directions[direction].reverse;\n }\n\n effects[idx] = this;\n });\n }\n\n return effects;\n };\n\n function parseInteger(value) {\n return parseInt(value, 10);\n }\n\n function parseCSS(element, property) {\n return parseInteger(element.css(property));\n }\n\n function keys(obj) {\n var acc = [];\n for (var propertyName in obj) {\n acc.push(propertyName);\n }\n return acc;\n }\n\n function strip3DTransforms(properties) {\n for (var key in properties) {\n if (transformProps.indexOf(key) != -1 && transform2d.indexOf(key) == -1) {\n delete properties[key];\n }\n }\n\n return properties;\n }\n\n function normalizeCSS(element, properties) {\n var transformation = [], cssValues = {}, lowerKey, key, value, isTransformed;\n\n for (key in properties) {\n lowerKey = key.toLowerCase();\n isTransformed = transforms && transformProps.indexOf(lowerKey) != -1;\n\n if (!support.hasHW3D && isTransformed && transform2d.indexOf(lowerKey) == -1) {\n delete properties[key];\n } else {\n value = properties[key];\n\n if (isTransformed) {\n transformation.push(key + \"(\" + value + \")\");\n } else {\n cssValues[key] = value;\n }\n }\n }\n\n if (transformation.length) {\n cssValues[TRANSFORM] = transformation.join(\" \");\n }\n\n return cssValues;\n }\n\n if (transitions) {\n extend(fx, {\n transition: function(element, properties, options) {\n var css,\n delay = 0,\n oldKeys = element.data(\"keys\") || [],\n timeoutID;\n\n options = extend({\n duration: 200,\n ease: \"ease-out\",\n complete: null,\n exclusive: \"all\"\n },\n options\n );\n\n var stopTransitionCalled = false;\n\n var stopTransition = function() {\n if (!stopTransitionCalled) {\n stopTransitionCalled = true;\n\n if (timeoutID) {\n clearTimeout(timeoutID);\n timeoutID = null;\n }\n\n element\n .removeData(ABORT_ID)\n .dequeue()\n .css(TRANSITION, \"\")\n .css(TRANSITION);\n\n options.complete.call(element);\n }\n };\n\n options.duration = $.fx ? $.fx.speeds[options.duration] || options.duration : options.duration;\n\n css = normalizeCSS(element, properties);\n\n $.merge(oldKeys, keys(css));\n\n if ($.hasOwnProperty(\"uniqueSort\")) {\n element\n .data(\"keys\", $.uniqueSort(oldKeys))\n .height();\n } else {\n element\n .data(\"keys\", $.unique(oldKeys))\n .height();\n }\n\n element.css(TRANSITION, options.exclusive + \" \" + options.duration + \"ms \" + options.ease).css(TRANSITION);\n element.css(css).css(TRANSFORM);\n\n /**\n * Use transitionEnd event for browsers who support it - but duplicate it with setTimeout, as the transitionEnd event will not be triggered if no CSS properties change.\n * This should be cleaned up at some point (widget by widget), and refactored to widgets not relying on the complete callback if no transition occurs.\n *\n * For IE9 and below, resort to setTimeout.\n */\n if (transitions.event) {\n element.one(transitions.event, stopTransition);\n if (options.duration !== 0) {\n delay = 500;\n }\n }\n\n timeoutID = setTimeout(stopTransition, options.duration + delay);\n element.data(ABORT_ID, timeoutID);\n element.data(COMPLETE_CALLBACK, stopTransition);\n },\n\n stopQueue: function(element, clearQueue, gotoEnd) {\n var cssValues,\n taskKeys = element.data(\"keys\"),\n retainPosition = (!gotoEnd && taskKeys),\n completeCallback = element.data(COMPLETE_CALLBACK);\n\n if (retainPosition) {\n cssValues = kendo.getComputedStyles(element[0], taskKeys);\n }\n\n if (completeCallback) {\n completeCallback();\n }\n\n if (retainPosition) {\n element.css(cssValues);\n }\n\n return element\n .removeData(\"keys\")\n .stop(clearQueue);\n }\n });\n }\n\n function animationProperty(element, property) {\n if (transforms) {\n var transform = element.css(TRANSFORM);\n if (transform == NONE) {\n return property == \"scale\" ? 1 : 0;\n }\n\n var match = transform.match(new RegExp(property + \"\\\\s*\\\\(([\\\\d\\\\w\\\\.]+)\")),\n computed = 0;\n\n if (match) {\n computed = parseInteger(match[1]);\n } else {\n match = transform.match(matrix3dRegExp) || [0, 0, 0, 0, 0];\n property = property.toLowerCase();\n\n if (translateXRegExp.test(property)) {\n computed = parseFloat(match[3] / match[2]);\n } else if (property == \"translatey\") {\n computed = parseFloat(match[4] / match[2]);\n } else if (property == \"scale\") {\n computed = parseFloat(match[2]);\n } else if (property == \"rotate\") {\n computed = parseFloat(Math.atan2(match[2], match[1]));\n }\n }\n\n return computed;\n } else {\n return parseFloat(element.css(property));\n }\n }\n\n var EffectSet = kendo.Class.extend({\n init: function(element, options) {\n var that = this;\n\n that.element = element;\n that.effects = [];\n that.options = options;\n that.restore = [];\n },\n\n run: function(effects) {\n var that = this,\n effect,\n idx, jdx,\n length = effects.length,\n element = that.element,\n options = that.options,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children,\n childrenLength;\n\n that.effects = effects;\n\n deferred.done(that.complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n effect = effects[idx];\n\n effect.setReverse(options.reverse);\n effect.setOptions(options);\n\n that.addRestoreProperties(effect.restore);\n\n effect.prepare(start, end);\n\n children = effect.children();\n\n for (jdx = 0, childrenLength = children.length; jdx < childrenLength; jdx ++) {\n children[jdx].duration(options.duration).run();\n }\n }\n\n // legacy support for options.properties\n for (var effectName in options.effects) {\n extend(end, options.effects[effectName].properties);\n }\n\n // Show the element initially\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms && !options.reset) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start)\n .css(TRANSFORM); // Nudge\n\n for (idx = 0; idx < length; idx ++) {\n effects[idx].setup();\n }\n\n if (options.init) {\n options.init();\n }\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, extend({}, options, { complete: deferred.resolve }));\n\n return deferred.promise();\n },\n\n stop: function() {\n $(this.element).kendoStop(true, true);\n },\n\n addRestoreProperties: function(restore) {\n var element = this.element,\n value,\n i = 0,\n length = restore.length;\n\n for (; i < length; i ++) {\n value = restore[i];\n\n this.restore.push(value);\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n },\n\n restoreCallback: function() {\n var element = this.element;\n\n for (var i = 0, length = this.restore.length; i < length; i ++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n\n complete: function() {\n var that = this,\n idx = 0,\n element = that.element,\n options = that.options,\n effects = that.effects,\n length = effects.length;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n if (options.hide) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n this.restoreCallback();\n\n if (hasZoom && !transforms) {\n setTimeout(this.restoreCallback.bind(this), 0); // Again jQuery callback in IE8-\n }\n\n for (; idx < length; idx ++) {\n effects[idx].teardown();\n }\n\n if (options.completeCallback) {\n options.completeCallback(element);\n }\n }\n });\n\n fx.promise = function(element, options) {\n var effects = [],\n effectClass,\n effectSet = new EffectSet(element, options),\n parsedEffects = kendo.parseEffects(options.effects),\n effect;\n\n options.effects = parsedEffects;\n\n for (var effectName in parsedEffects) {\n effectClass = fx[capitalize(effectName)];\n\n if (effectClass) {\n effect = new effectClass(element, parsedEffects[effectName].direction);\n effects.push(effect);\n }\n }\n\n if (effects[0]) {\n effectSet.run(effects);\n } else { // Not sure how would an fx promise reach this state - means that you call kendoAnimate with no valid effects? Why?\n if (!element.is(\":visible\")) {\n element.css({ display: element.data(\"olddisplay\") || \"block\" }).css(\"display\");\n }\n\n if (options.init) {\n options.init();\n }\n\n element.dequeue();\n effectSet.complete();\n }\n };\n\n extend(fx, {\n animate: function(elements, properties, options) {\n var useTransition = options.transition !== false;\n delete options.transition;\n\n if (transitions && \"transition\" in fx && useTransition) {\n fx.transition(elements, properties, options);\n } else {\n if (transforms) {\n elements.animate(strip3DTransforms(properties), { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n } else {\n elements.each(function() {\n var element = $(this),\n multiple = {};\n\n each(transformProps, function(idx, value) { // remove transforms to avoid IE and older browsers confusion\n var params,\n currentValue = properties ? properties[value] + \" \" : null; // We need to match\n\n if (currentValue) {\n var single = properties;\n\n if (value in scaleProperties && properties[value] !== undefined) {\n params = currentValue.match(cssParamsRegExp);\n if (transforms) {\n extend(single, { scale: +params[0] });\n }\n } else {\n if (value in translateProperties && properties[value] !== undefined) {\n var position = element.css(POSITION),\n isFixed = (position == \"absolute\" || position == \"fixed\");\n\n if (!element.data(TRANSLATE)) {\n if (isFixed) {\n element.data(TRANSLATE, {\n top: parseCSS(element, \"top\") || 0,\n left: parseCSS(element, \"left\") || 0,\n bottom: parseCSS(element, \"bottom\"),\n right: parseCSS(element, \"right\")\n });\n } else {\n element.data(TRANSLATE, {\n top: parseCSS(element, \"marginTop\") || 0,\n left: parseCSS(element, \"marginLeft\") || 0\n });\n }\n }\n\n var originalPosition = element.data(TRANSLATE);\n\n params = currentValue.match(cssParamsRegExp);\n if (params) {\n\n var dX = value == TRANSLATE + \"y\" ? +null : +params[1],\n dY = value == TRANSLATE + \"y\" ? +params[1] : +params[2];\n\n if (isFixed) {\n if (!isNaN(originalPosition.right)) {\n if (!isNaN(dX)) { extend(single, { right: originalPosition.right - dX }); }\n } else {\n if (!isNaN(dX)) { extend(single, { left: originalPosition.left + dX }); }\n }\n\n if (!isNaN(originalPosition.bottom)) {\n if (!isNaN(dY)) { extend(single, { bottom: originalPosition.bottom - dY }); }\n } else {\n if (!isNaN(dY)) { extend(single, { top: originalPosition.top + dY }); }\n }\n } else {\n if (!isNaN(dX)) { extend(single, { marginLeft: originalPosition.left + dX }); }\n if (!isNaN(dY)) { extend(single, { marginTop: originalPosition.top + dY }); }\n }\n }\n }\n }\n\n if (!transforms && value != \"scale\" && value in single) {\n delete single[value];\n }\n\n if (single) {\n extend(multiple, single);\n }\n }\n });\n\n if (browser.msie) {\n delete multiple.scale;\n }\n\n element.animate(multiple, { queue: false, show: false, hide: false, duration: options.duration, complete: options.complete }); // Stop animate from showing/hiding the element to be able to hide it later on.\n });\n }\n }\n }\n });\n\n fx.animatedPromise = fx.promise;\n\n var Effect = kendo.Class.extend({\n init: function(element, direction) {\n var that = this;\n that.element = element;\n that._direction = direction;\n that.options = {};\n that._additionalEffects = [];\n\n if (!that.restore) {\n that.restore = [];\n }\n },\n\n// Public API\n reverse: function() {\n this._reverse = true;\n return this.run();\n },\n\n play: function() {\n this._reverse = false;\n return this.run();\n },\n\n add: function(additional) {\n this._additionalEffects.push(additional);\n return this;\n },\n\n direction: function(value) {\n this._direction = value;\n return this;\n },\n\n duration: function(duration) {\n this._duration = duration;\n return this;\n },\n\n compositeRun: function() {\n var that = this,\n effectSet = new EffectSet(that.element, { reverse: that._reverse, duration: that._duration }),\n effects = that._additionalEffects.concat([ that ]);\n\n return effectSet.run(effects);\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n idx = 0,\n restore = that.restore,\n length = restore.length,\n value,\n deferred = $.Deferred(),\n start = {},\n end = {},\n target,\n children = that.children(),\n childrenLength = children.length;\n\n deferred.done(that._complete.bind(that));\n\n element.data(\"animating\", true);\n\n for (idx = 0; idx < length; idx ++) {\n value = restore[idx];\n\n if (!element.data(value)) {\n element.data(value, element.css(value));\n }\n }\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].duration(that._duration).run();\n }\n\n that.prepare(start, end);\n\n if (!element.is(\":visible\")) {\n extend(start, { display: element.data(\"olddisplay\") || \"block\" });\n }\n\n if (transforms) {\n target = element.data(\"targetTransform\");\n\n if (target) {\n start = extend(target, start);\n }\n }\n\n start = normalizeCSS(element, start);\n\n if (transforms && !transitions) {\n start = strip3DTransforms(start);\n }\n\n element.css(start).css(TRANSFORM); // Trick webkit into re-rendering\n\n that.setup();\n\n element.data(\"targetTransform\", end);\n fx.animate(element, end, { duration: that._duration, complete: deferred.resolve });\n\n return deferred.promise();\n },\n\n stop: function() {\n var idx = 0,\n children = this.children(),\n childrenLength = children.length;\n\n for (idx = 0; idx < childrenLength; idx ++) {\n children[idx].stop();\n }\n\n $(this.element).kendoStop(true, true);\n return this;\n },\n\n restoreCallback: function() {\n var element = this.element;\n\n for (var i = 0, length = this.restore.length; i < length; i ++) {\n var value = this.restore[i];\n element.css(value, element.data(value));\n }\n },\n\n _complete: function() {\n var that = this,\n element = that.element;\n\n element\n .removeData(\"animating\")\n .dequeue(); // call next animation from the queue\n\n that.restoreCallback();\n\n if (that.shouldHide()) {\n element.data(\"olddisplay\", element.css(\"display\")).hide();\n }\n\n if (hasZoom && !transforms) {\n setTimeout(that.restoreCallback.bind(that), 0); // Again jQuery callback in IE8-\n }\n\n that.teardown();\n },\n\n /////////////////////////// Support for kendo.animate;\n setOptions: function(options) {\n extend(true, this.options, options);\n },\n\n children: function() {\n return [];\n },\n\n shouldHide: $.noop,\n\n setup: $.noop,\n prepare: $.noop,\n teardown: $.noop,\n directions: [],\n\n setReverse: function(reverse) {\n this._reverse = reverse;\n return this;\n }\n });\n\n function capitalize(word) {\n return word.charAt(0).toUpperCase() + word.substring(1);\n }\n\n function createEffect(name, definition) {\n var effectClass = Effect.extend(definition),\n directions = effectClass.prototype.directions;\n\n fx[capitalize(name)] = effectClass;\n\n fx.Element.prototype[name] = function(direction, opt1, opt2, opt3) {\n return new effectClass(this.element, direction, opt1, opt2, opt3);\n };\n\n each(directions, function(idx, theDirection) {\n fx.Element.prototype[name + capitalize(theDirection)] = function(opt1, opt2, opt3) {\n return new effectClass(this.element, theDirection, opt1, opt2, opt3);\n };\n });\n }\n\n var FOUR_DIRECTIONS = [\"left\", \"right\", \"up\", \"down\"],\n IN_OUT = [\"in\", \"out\"];\n\n createEffect(\"slideIn\", {\n directions: FOUR_DIRECTIONS,\n\n divisor: function(value) {\n this.options.divisor = value;\n return this;\n },\n\n prepare: function(start, end) {\n var that = this,\n tmp,\n element = that.element,\n outerWidth = kendo._outerWidth,\n outerHeight = kendo._outerHeight,\n direction = directions[that._direction],\n offset = -direction.modifier * (direction.vertical ? outerHeight(element) : outerWidth(element)),\n startValue = offset / (that.options && that.options.divisor || 1) + PX,\n endValue = \"0px\";\n\n if (that._reverse) {\n tmp = start;\n start = end;\n end = tmp;\n }\n\n if (transforms) {\n start[direction.transition] = startValue;\n end[direction.transition] = endValue;\n } else {\n start[direction.property] = startValue;\n end[direction.property] = endValue;\n }\n }\n });\n\n createEffect(\"tile\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, previous) {\n Effect.prototype.init.call(this, element, direction);\n this.options = { previous: previous };\n },\n\n previousDivisor: function(value) {\n this.options.previousDivisor = value;\n return this;\n },\n\n children: function() {\n var that = this,\n reverse = that._reverse,\n previous = that.options.previous,\n divisor = that.options.previousDivisor || 1,\n dir = that._direction;\n\n var children = [ kendo.fx(that.element).slideIn(dir).setReverse(reverse) ];\n\n if (previous) {\n children.push( kendo.fx(previous).slideIn(directions[dir].reverse).divisor(divisor).setReverse(!reverse) );\n }\n\n return children;\n }\n });\n\n function createToggleEffect(name, property, defaultStart, defaultEnd) {\n createEffect(name, {\n directions: IN_OUT,\n\n startValue: function(value) {\n this._startValue = value;\n return this;\n },\n\n endValue: function(value) {\n this._endValue = value;\n return this;\n },\n\n shouldHide: function() {\n return this._shouldHide;\n },\n\n prepare: function(start, end) {\n var that = this,\n startValue,\n endValue,\n out = this._direction === \"out\",\n startDataValue = that.element.data(property),\n startDataValueIsSet = !(isNaN(startDataValue) || startDataValue == defaultStart);\n\n if (startDataValueIsSet) {\n startValue = startDataValue;\n } else if (typeof this._startValue !== \"undefined\") {\n startValue = this._startValue;\n } else {\n startValue = out ? defaultStart : defaultEnd;\n }\n\n if (typeof this._endValue !== \"undefined\") {\n endValue = this._endValue;\n } else {\n endValue = out ? defaultEnd : defaultStart;\n }\n\n if (this._reverse) {\n start[property] = endValue;\n end[property] = startValue;\n } else {\n start[property] = startValue;\n end[property] = endValue;\n }\n\n that._shouldHide = end[property] === defaultEnd;\n }\n });\n }\n\n createToggleEffect(\"fade\", \"opacity\", 1, 0);\n createToggleEffect(\"zoom\", \"scale\", 1, 0.01);\n\n createEffect(\"slideMargin\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n origin = element.data(ORIGIN),\n offset = options.offset,\n margin,\n reverse = that._reverse;\n\n if (!reverse && origin === null) {\n element.data(ORIGIN, parseFloat(element.css(\"margin-\" + options.axis)));\n }\n\n margin = (element.data(ORIGIN) || 0);\n end[\"margin-\" + options.axis] = !reverse ? margin + offset : margin;\n }\n });\n\n createEffect(\"slideTo\", {\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n offset = options.offset.split(\",\"),\n reverse = that._reverse;\n\n if (transforms) {\n end.translatex = !reverse ? offset[0] : 0;\n end.translatey = !reverse ? offset[1] : 0;\n } else {\n end.left = !reverse ? offset[0] : 0;\n end.top = !reverse ? offset[1] : 0;\n }\n element.css(\"left\");\n }\n });\n\n createEffect(\"expand\", {\n directions: [\"horizontal\", \"vertical\"],\n\n restore: [ OVERFLOW ],\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n options = that.options,\n reverse = that._reverse,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n setLength = element[0].style[property],\n oldLength = element.data(property),\n length = parseFloat(oldLength || setLength),\n realLength = round(element.css(property, AUTO)[property]());\n\n start.overflow = HIDDEN;\n\n length = (options && options.reset) ? realLength || length : length || realLength;\n\n end[property] = (reverse ? 0 : length) + PX;\n start[property] = (reverse ? length : 0) + PX;\n\n if (oldLength === undefined) {\n element.data(property, setLength);\n }\n },\n\n shouldHide: function() {\n return this._reverse;\n },\n\n teardown: function() {\n var that = this,\n element = that.element,\n property = that._direction === \"vertical\" ? HEIGHT : WIDTH,\n length = element.data(property);\n\n if (length == AUTO || length === BLANK) {\n setTimeout(function() { element.css(property, AUTO).css(property); }, 0); // jQuery animate complete callback in IE is called before the last animation step!\n }\n }\n });\n\n var TRANSFER_START_STATE = { position: \"absolute\", marginLeft: 0, marginTop: 0, scale: 1 };\n /**\n * Intersection point formulas are taken from here - http://zonalandeducation.com/mmts/intersections/intersectionOfTwoLines1/intersectionOfTwoLines1.html\n * Formula for a linear function from two points from here - http://demo.activemath.org/ActiveMath2/search/show.cmd?id=mbase://AC_UK_calculus/functions/ex_linear_equation_two_points\n * The transform origin point is the intersection point of the two lines from the top left corners/top right corners of the element and target.\n * The math and variables below MAY BE SIMPLIFIED (zeroes removed), but this would make the formula too cryptic.\n */\n createEffect(\"transfer\", {\n init: function(element, target) {\n this.element = element;\n this.options = { target: target };\n this.restore = [];\n },\n\n setup: function() {\n this.element.appendTo(document.body);\n },\n\n prepare: function(start, end) {\n var that = this,\n element = that.element,\n outerBox = fx.box(element),\n innerBox = fx.box(that.options.target),\n currentScale = animationProperty(element, \"scale\"),\n scale = fx.fillScale(innerBox, outerBox),\n transformOrigin = fx.transformOrigin(innerBox, outerBox);\n\n extend(start, TRANSFER_START_STATE);\n end.scale = 1;\n\n element.css(TRANSFORM, \"scale(1)\").css(TRANSFORM);\n element.css(TRANSFORM, \"scale(\" + currentScale + \")\");\n\n start.top = outerBox.top;\n start.left = outerBox.left;\n start.transformOrigin = transformOrigin.x + PX + \" \" + transformOrigin.y + PX;\n\n if (that._reverse) {\n start.scale = scale;\n } else {\n end.scale = scale;\n }\n }\n });\n\n\n var CLIPS = {\n top: \"rect(auto auto $size auto)\",\n bottom: \"rect($size auto auto auto)\",\n left: \"rect(auto $size auto auto)\",\n right: \"rect(auto auto auto $size)\"\n };\n\n var ROTATIONS = {\n top: { start: \"rotatex(0deg)\", end: \"rotatex(180deg)\" },\n bottom: { start: \"rotatex(-180deg)\", end: \"rotatex(0deg)\" },\n left: { start: \"rotatey(0deg)\", end: \"rotatey(-180deg)\" },\n right: { start: \"rotatey(180deg)\", end: \"rotatey(0deg)\" }\n };\n\n function clipInHalf(container, direction) {\n var vertical = kendo.directions[direction].vertical,\n size = (container[vertical ? HEIGHT : WIDTH]() / 2) + \"px\";\n\n return CLIPS[direction].replace(\"$size\", size);\n }\n\n createEffect(\"turningPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n prepare: function(start, end) {\n var that = this,\n reverse = that._reverse,\n direction = reverse ? directions[that._direction].reverse : that._direction,\n rotation = ROTATIONS[direction];\n\n start.zIndex = 1;\n\n if (that._clipInHalf) {\n start.clip = clipInHalf(that._container, kendo.directions[direction].reverse);\n }\n\n start[BACKFACE] = HIDDEN;\n\n end[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.start : rotation.end);\n start[TRANSFORM] = TRANSFORM_PERSPECTIVE + (reverse ? rotation.end : rotation.start);\n },\n\n setup: function() {\n this._container.append(this.element);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n clipInHalf: function(value) {\n this._clipInHalf = value;\n return this;\n },\n\n temporary: function() {\n this.element.addClass('temp-page');\n return this;\n }\n });\n\n createEffect(\"staticPage\", {\n directions: FOUR_DIRECTIONS,\n\n init: function(element, direction, container) {\n Effect.prototype.init.call(this, element, direction);\n this._container = container;\n },\n\n restore: [\"clip\"],\n\n prepare: function(start, end) {\n var that = this,\n direction = that._reverse ? directions[that._direction].reverse : that._direction;\n\n start.clip = clipInHalf(that._container, direction);\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n shouldHide: function() {\n var that = this,\n reverse = that._reverse,\n face = that._face;\n\n return (reverse && !face) || (!reverse && face);\n },\n\n face: function(value) {\n this._face = value;\n return this;\n }\n });\n\n createEffect(\"pageturn\", {\n directions: [\"horizontal\", \"vertical\"],\n\n init: function(element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n faceClone = options.face.clone(true).removeAttr(\"id\"),\n backClone = options.back.clone(true).removeAttr(\"id\"),\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n\n return [\n kendo.fx(options.face).staticPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).staticPage(reverseDirection, element).setReverse(reverse),\n kendo.fx(faceClone).turningPage(direction, element).face(true).clipInHalf(true).temporary().setReverse(reverse),\n kendo.fx(backClone).turningPage(reverseDirection, element).clipInHalf(true).temporary().setReverse(reverse)\n ];\n },\n\n prepare: function(start, end) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n // hack to trigger transition end.\n start.opacity = 0.999;\n end.opacity = 1;\n },\n\n teardown: function() {\n this.element.find(\".temp-page\").remove();\n }\n });\n\n createEffect(\"flip\", {\n directions: [\"horizontal\", \"vertical\"],\n\n init: function(element, direction, face, back) {\n Effect.prototype.init.call(this, element, direction);\n this.options = {};\n this.options.face = face;\n this.options.back = back;\n },\n\n children: function() {\n var that = this,\n options = that.options,\n direction = that._direction === \"horizontal\" ? \"left\" : \"top\",\n reverseDirection = kendo.directions[direction].reverse,\n reverse = that._reverse,\n temp,\n element = that.element;\n\n if (reverse) {\n temp = direction;\n direction = reverseDirection;\n reverseDirection = temp;\n }\n\n return [\n kendo.fx(options.face).turningPage(direction, element).face(true).setReverse(reverse),\n kendo.fx(options.back).turningPage(reverseDirection, element).setReverse(reverse)\n ];\n },\n\n prepare: function(start) {\n start[PERSPECTIVE] = DEFAULT_PERSPECTIVE;\n start.transformStyle = \"preserve-3d\";\n }\n });\n\n var RESTORE_OVERFLOW = !support.mobileOS.android;\n var IGNORE_TRANSITION_EVENT_SELECTOR = \".km-touch-scrollbar, .km-actionsheet-wrapper\";\n\n createEffect(\"replace\", {\n _before: $.noop,\n _after: $.noop,\n init: function(element, previous, transitionClass) {\n Effect.prototype.init.call(this, element);\n this._previous = $(previous);\n this._transitionClass = transitionClass;\n },\n\n duration: function() {\n throw new Error(\"The replace effect does not support duration setting; the effect duration may be customized through the transition class rule\");\n },\n\n beforeTransition: function(callback) {\n this._before = callback;\n return this;\n },\n\n afterTransition: function(callback) {\n this._after = callback;\n return this;\n },\n\n _both: function() {\n return $().add(this._element).add(this._previous);\n },\n\n _containerClass: function() {\n var direction = this._direction,\n containerClass = \"k-fx k-fx-start k-fx-\" + this._transitionClass;\n\n if (direction) {\n containerClass += \" k-fx-\" + direction;\n }\n\n if (this._reverse) {\n containerClass += \" k-fx-reverse\";\n }\n\n return containerClass;\n },\n\n complete: function(e) {\n if (!this.deferred || (e && $(e.target).is(IGNORE_TRANSITION_EVENT_SELECTOR))) {\n return;\n }\n\n var container = this.container;\n\n container\n .removeClass(\"k-fx-end\")\n .removeClass(this._containerClass())\n .off(transitions.event, this.completeProxy);\n\n this._previous.hide().removeClass(\"k-fx-current\");\n this.element.removeClass(\"k-fx-next\");\n\n if (RESTORE_OVERFLOW) {\n container.css(OVERFLOW, \"\");\n }\n\n if (!this.isAbsolute) {\n this._both().css(POSITION, \"\");\n }\n\n this.deferred.resolve();\n delete this.deferred;\n },\n\n run: function() {\n if (this._additionalEffects && this._additionalEffects[0]) {\n return this.compositeRun();\n }\n\n var that = this,\n element = that.element,\n previous = that._previous,\n container = element.parents().filter(previous.parents()).first(),\n both = that._both(),\n deferred = $.Deferred(),\n originalPosition = element.css(POSITION),\n originalOverflow;\n\n // edge case for grid/scheduler, where the previous is already destroyed.\n if (!container.length) {\n container = element.parent();\n }\n\n this.container = container;\n this.deferred = deferred;\n this.isAbsolute = originalPosition == \"absolute\";\n\n if (!this.isAbsolute) {\n both.css(POSITION, \"absolute\");\n }\n\n if (RESTORE_OVERFLOW) {\n originalOverflow = container.css(OVERFLOW);\n container.css(OVERFLOW, \"hidden\");\n }\n\n if (!transitions) {\n this.complete();\n } else {\n element.addClass(\"k-fx-hidden\");\n\n container.addClass(this._containerClass());\n\n this.completeProxy = this.complete.bind(this);\n container.on(transitions.event, this.completeProxy);\n\n kendo.animationFrame(function() {\n element.removeClass(\"k-fx-hidden\").addClass(\"k-fx-next\");\n previous.css(\"display\", \"\").addClass(\"k-fx-current\");\n that._before(previous, element);\n kendo.animationFrame(function() {\n container.removeClass(\"k-fx-start\").addClass(\"k-fx-end\");\n that._after(previous, element);\n });\n });\n }\n\n return deferred.promise();\n },\n\n stop: function() {\n this.complete();\n }\n });\n\n var Animation = kendo.Class.extend({\n init: function() {\n var that = this;\n that._tickProxy = that._tick.bind(that);\n that._started = false;\n },\n\n tick: $.noop,\n done: $.noop,\n onEnd: $.noop,\n onCancel: $.noop,\n\n start: function() {\n if (!this.enabled()) {\n return;\n }\n\n if (!this.done()) {\n this._started = true;\n kendo.animationFrame(this._tickProxy);\n } else {\n this.onEnd();\n }\n },\n\n enabled: function() {\n return true;\n },\n\n cancel: function() {\n this._started = false;\n this.onCancel();\n },\n\n _tick: function() {\n var that = this;\n if (!that._started) { return; }\n\n that.tick();\n\n if (!that.done()) {\n kendo.animationFrame(that._tickProxy);\n } else {\n that._started = false;\n that.onEnd();\n }\n }\n });\n\n var Transition = Animation.extend({\n init: function(options) {\n var that = this;\n extend(that, options);\n Animation.fn.init.call(that);\n },\n\n done: function() {\n return this.timePassed() >= this.duration;\n },\n\n timePassed: function() {\n return Math.min(this.duration, (new Date()) - this.startDate);\n },\n\n moveTo: function(options) {\n var that = this,\n movable = that.movable;\n\n that.initial = movable[that.axis];\n that.delta = options.location - that.initial;\n\n that.duration = typeof options.duration == \"number\" ? options.duration : 300;\n\n that.tick = that._easeProxy(options.ease);\n\n that.startDate = new Date();\n that.start();\n },\n\n _easeProxy: function(ease) {\n var that = this;\n\n return function() {\n that.movable.moveAxis(that.axis, ease(that.timePassed(), that.initial, that.delta, that.duration));\n };\n }\n });\n\n extend(Transition, {\n easeOutExpo: function(t, b, c, d) {\n return (t == d) ? b + c : c * (-Math.pow(2, -10 * t / d) + 1) + b;\n },\n\n easeOutBack: function(t, b, c, d, s) {\n s = 1.70158;\n return c * ((t = t / d - 1) * t * ((s + 1) * t + s) + 1) + b;\n }\n });\n\n fx.Animation = Animation;\n fx.Transition = Transition;\n fx.createEffect = createEffect;\n\n fx.box = function(element) {\n element = $(element);\n var result = element.offset();\n result.width = kendo._outerWidth(element);\n result.height = kendo._outerHeight(element);\n return result;\n };\n\n fx.transformOrigin = function(inner, outer) {\n var x = (inner.left - outer.left) * outer.width / (outer.width - inner.width),\n y = (inner.top - outer.top) * outer.height / (outer.height - inner.height);\n\n return {\n x: isNaN(x) ? 0 : x,\n y: isNaN(y) ? 0 : y\n };\n };\n\n fx.fillScale = function(inner, outer) {\n return Math.min(inner.width / outer.width, inner.height / outer.height);\n };\n\n fx.fitScale = function(inner, outer) {\n return Math.max(inner.width / outer.width, inner.height / outer.height);\n };\n})(window.kendo.jQuery);\n\nreturn window.kendo;\n\n}, typeof define == 'function' && define.amd ? define : function(a1, a2, a3) { (a3 || a2)(); });\n\n"],"names":["define","__meta__","id","name","category","description","depends","$","window","kendo","jQuery","undefined","fx","effects","each","extend","support","browser","transforms","transitions","scaleProperties","scale","scalex","scaley","scale3d","translateProperties","translate","translatex","translatey","translate3d","hasZoom","document","documentElement","style","zoom","matrix3dRegExp","cssParamsRegExp","translateXRegExp","oldEffectsRegExp","singleEffectRegExp","unitRegExp","transformProps","transform2d","transform2units","rotate","skew","cssPrefix","css","round","Math","BLANK","PX","NONE","AUTO","WIDTH","HEIGHT","HIDDEN","ORIGIN","ABORT_ID","OVERFLOW","TRANSLATE","POSITION","COMPLETE_CALLBACK","TRANSITION","TRANSFORM","BACKFACE","PERSPECTIVE","DEFAULT_PERSPECTIVE","TRANSFORM_PERSPECTIVE","directions","left","reverse","property","transition","vertical","modifier","right","down","up","top","bottom","in","out","horizontal","fn","kendoStop","clearQueue","gotoEnd","stopQueue","this","stop","idx","value","val","animationProperty","that","transformValue","replace","cssText","indexOf","RegExp","step","elem","now","curProxy","prototype","cur","prop","parseFloat","apply","arguments","parseInteger","parseInt","parseCSS","element","keys","obj","acc","propertyName","push","strip3DTransforms","properties","key","normalizeCSS","transformation","cssValues","lowerKey","isTransformed","toLowerCase","hasHW3D","length","join","toggleClass","classes","options","add","split","exclusive","duration","ease","setTimeout","parseEffects","input","mirror","redirectedEffect","test","resolved","match","$1","$2","effect","direction","effectBody","delay","oldKeys","data","timeoutID","complete","stopTransitionCalled","stopTransition","clearTimeout","removeData","dequeue","call","speeds","merge","hasOwnProperty","uniqueSort","height","unique","event","one","taskKeys","retainPosition","completeCallback","getComputedStyles","transform","computed","atan2","EffectSet","Class","init","restore","run","jdx","deferred","Deferred","start","end","target","children","childrenLength","done","bind","setReverse","setOptions","addRestoreProperties","prepare","effectName","is","display","reset","setup","animate","resolve","promise","i","restoreCallback","hide","teardown","Effect","effectClass","effectSet","parsedEffects","capitalize","elements","useTransition","queue","show","multiple","params","currentValue","single","position","isFixed","originalPosition","dX","dY","isNaN","marginLeft","marginTop","msie","animatedPromise","_direction","_additionalEffects","_reverse","play","additional","_duration","compositeRun","concat","_complete","shouldHide","noop","word","charAt","toUpperCase","substring","createEffect","definition","Element","opt1","opt2","opt3","theDirection","FOUR_DIRECTIONS","IN_OUT","createToggleEffect","defaultStart","defaultEnd","startValue","_startValue","endValue","_endValue","_shouldHide","startDataValue","startDataValueIsSet","divisor","tmp","outerWidth","_outerWidth","outerHeight","_outerHeight","offset","previous","previousDivisor","dir","slideIn","origin","margin","axis","setLength","oldLength","realLength","overflow","TRANSFER_START_STATE","CLIPS","appendTo","body","outerBox","box","innerBox","currentScale","fillScale","transformOrigin","x","y","ROTATIONS","clipInHalf","container","size","_container","rotation","zIndex","_clipInHalf","clip","append","face","_face","temporary","addClass","opacity","back","reverseDirection","temp","faceClone","clone","removeAttr","backClone","staticPage","turningPage","transformStyle","find","remove","RESTORE_OVERFLOW","mobileOS","android","IGNORE_TRANSITION_EVENT_SELECTOR","Animation","_before","_after","transitionClass","_previous","_transitionClass","Error","beforeTransition","callback","afterTransition","_both","_element","_containerClass","containerClass","e","removeClass","off","completeProxy","isAbsolute","parents","filter","first","both","originalOverflow","parent","on","animationFrame","_tickProxy","_tick","_started","tick","onEnd","onCancel","enabled","cancel","Transition","timePassed","min","Date","startDate","moveTo","movable","initial","delta","location","_easeProxy","moveAxis","easeOutExpo","t","b","c","d","pow","easeOutBack","s","result","width","inner","outer","fitScale","max","amd","a1","a2","a3"],"mappings":"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"}