), \r\nwhen option $ThumbnailNavigatorOptions.$AutoCenter set to 0, it should be specified by inline style in pixels (like
)");
- // }
- // }
- //});
- $JssorUtils$.$CssWidth(_SlidesContainer, slidesContainerWidth);
- $JssorUtils$.$CssHeight(_SlidesContainer, slidesContainerHeight);
-
- var slideItemElmts = [];
- $JssorUtils$.$Each(items, function (item, index) {
- var navigationItem = new NavigationItem(item, index);
- var navigationItemWrapper = navigationItem.$Wrapper;
-
- var columnIndex = Math.floor(index / _Lanes);
- var laneIndex = index % _Lanes;
-
- $JssorUtils$.$CssLeft(navigationItemWrapper, (_PrototypeWidth + _SpacingX) * laneIndex * (1 - horizontal));
- $JssorUtils$.$CssTop(navigationItemWrapper, (_PrototypeHeight + _SpacingY) * laneIndex * horizontal);
-
- if (!slideItemElmts[columnIndex]) {
- slideItemElmts[columnIndex] = $JssorUtils$.$CreateDivElement();
- $JssorUtils$.$AppendChild(_SlidesContainer, slideItemElmts[columnIndex]);
- }
-
- $JssorUtils$.$AppendChild(slideItemElmts[columnIndex], navigationItemWrapper);
-
- _NavigationItems.push(navigationItem);
- });
-
- var thumbnailSliderOptions = $JssorUtils$.$Extend({
- $AutoPlay: false,
- $NaviQuitDrag: false,
- $SlideWidth: slideWidth,
- $SlideHeight: slideHeight,
- $SlideSpacing: _SpacingX * horizontal + _SpacingY * (1 - horizontal),
- $MinDragOffsetToSlide: 12,
- $SlideDuration: 200,
- $PauseOnHover: 1,
- $PlayOrientation: _Options.$Orientation,
- $DragOrientation: _Options.$DisableDrag ? 0 : _Options.$Orientation
- }, _Options);
-
- _Slider = new $JssorSlider$(elmt, thumbnailSliderOptions);
-
- _Initialized = true;
- }
-
- //_Self.$TriggerEvent($JssorNavigatorEvents$.$RESET);
- };
-
- //JssorThumbnailNavigator Constructor
- {
- _Self.$Options = _Options = $JssorUtils$.$Extend({
- $SpacingX: 3,
- $SpacingY: 3,
- $DisplayPieces: 1,
- $Orientation: 1,
- $AutoCenter: 3,
- $ActionMode: 1
- }, options);
-
- //Sodo statement for development time intellisence only
- $JssorDebug$.$Execute(function () {
- _Options = $JssorUtils$.$Extend({
- $Lanes: undefined,
- $Width: undefined,
- $Height: undefined
- }, _Options);
- });
-
- _Width = $JssorUtils$.$CssWidth(elmt);
- _Height = $JssorUtils$.$CssHeight(elmt);
-
- $JssorDebug$.$Execute(function () {
- if (!_Width)
- $JssorDebug$.$Fail("width of 'thumbnavigator' container not specified.");
- if (!_Height)
- $JssorDebug$.$Fail("height of 'thumbnavigator' container not specified.");
- });
-
- _SlidesContainer = $JssorUtils$.$FindFirstChildByAttribute(elmt, "slides");
- _ThumbnailPrototype = $JssorUtils$.$FindFirstChildByAttribute(_SlidesContainer, "prototype");
-
- $JssorDebug$.$Execute(function () {
- if (!_ThumbnailPrototype)
- $JssorDebug$.$Fail("prototype of 'thumbnavigator' not defined.");
- });
-
- _PrototypeWidth = $JssorUtils$.$CssWidth(_ThumbnailPrototype);
- _PrototypeHeight = $JssorUtils$.$CssHeight(_ThumbnailPrototype);
-
- $JssorUtils$.$RemoveChild(_SlidesContainer, _ThumbnailPrototype);
-
- _Lanes = _Options.$Lanes || 1;
- _SpacingX = _Options.$SpacingX;
- _SpacingY = _Options.$SpacingY;
- _DisplayPieces = _Options.$DisplayPieces;
- }
-};
-
-//$JssorCaptionSlider$
-function $JssorCaptionSliderBase$() {
- $JssorAnimator$.call(this, 0, 0);
- this.$Revert = $JssorUtils$.$EmptyFunction;
-}
-
-var $JssorCaptionSlider$ = window.$JssorCaptionSlider$ = function (container, captionSlideOptions, playIn) {
- $JssorDebug$.$Execute(function () {
- if (!captionSlideOptions.$CaptionTransitions) {
- $JssorDebug$.$Error("'$CaptionSliderOptions' option error, '$CaptionSliderOptions.$CaptionTransitions' not specified.");
- }
- //else if (!$JssorUtils$.$IsArray(captionSlideOptions.$CaptionTransitions)) {
- // $JssorDebug$.$Error("'$CaptionSliderOptions' option error, '$CaptionSliderOptions.$CaptionTransitions' is not an array.");
- //}
- });
-
- var _Self = this;
- var _ImmediateOutCaptionHanger;
- var _PlayMode = playIn ? captionSlideOptions.$PlayInMode : captionSlideOptions.$PlayOutMode;
-
- var _CaptionTransitions = captionSlideOptions.$CaptionTransitions;
- var _CaptionTuningFetcher = { $Transition: "t", $Delay: "d", $Duration: "du", $ScaleHorizontal: "x", $ScaleVertical: "y", $Rotate: "r", $Zoom: "z", $Opacity: "f", $BeginTime: "b" };
- var _CaptionTuningTransfer = {
- $Default: function (value, tuningValue) {
- if (!isNaN(tuningValue.$Value))
- value = tuningValue.$Value;
- else
- value *= tuningValue.$Percent;
-
- return value;
- },
- $Opacity: function (value, tuningValue) {
- return this.$Default(value - 1, tuningValue);
- }
- };
- _CaptionTuningTransfer.$Zoom = _CaptionTuningTransfer.$Opacity;
-
- $JssorAnimator$.call(_Self, 0, 0);
-
- function GetCaptionItems(element, level) {
-
- var itemsToPlay = [];
- var lastTransitionName;
- var namedTransitions = [];
- var namedTransitionOrders = [];
-
- //$JssorDebug$.$Execute(function () {
-
- // var debugInfoElement = $JssorUtils$.$GetElement("debugInfo");
-
- // if (debugInfoElement && playIn) {
-
- // var text = $JssorUtils$.$GetInnerHtml(debugInfoElement) + "
";
-
- // $JssorUtils$.$SetInnerHtml(debugInfoElement, text);
- // }
- //});
-
- function FetchRawTransition(captionElmt, index) {
- var rawTransition = {};
-
- $JssorUtils$.$Each(_CaptionTuningFetcher, function (fetchAttribute, fetchProperty) {
- var attributeValue = $JssorUtils$.$GetAttributeEx(captionElmt, fetchAttribute + (index || ""));
- if (attributeValue) {
- var propertyValue = {};
-
- if (fetchAttribute == "t") {
- //if (($JssorUtils$.$IsBrowserChrome() || $JssorUtils$.$IsBrowserSafari() || $JssorUtils$.$IsBrowserFireFox()) && attributeValue == "*") {
- // attributeValue = Math.floor(Math.random() * captionSlideOptions.$CaptionTransitions.length);
- // $JssorUtils$.$SetAttribute(captionElmt, fetchAttribute + (index || ""), attributeValue);
- //}
-
- propertyValue.$Value = attributeValue;
- }
- else if (attributeValue.indexOf("%") + 1)
- propertyValue.$Percent = $JssorUtils$.$ParseFloat(attributeValue) / 100;
- else
- propertyValue.$Value = $JssorUtils$.$ParseFloat(attributeValue);
-
- rawTransition[fetchProperty] = propertyValue;
- }
- });
-
- return rawTransition;
- }
-
- function GetRandomTransition() {
- //return _CaptionTransitions.length && _CaptionTransitions[Math.floor(Math.random() * 42737 / (i + 1)) % _CaptionTransitions.length];
- return _CaptionTransitions[Math.floor(Math.random() * _CaptionTransitions.length)];
- }
-
- function EvaluateCaptionTransition(transitionName) {
-
- var transition;
-
- if (transitionName == "*") {
- transition = GetRandomTransition();
- }
- else if (transitionName) {
-
- //indexed transition allowed, just the same as named transition
- var tempTransition = _CaptionTransitions[$JssorUtils$.$ParseInt(transitionName)] || _CaptionTransitions[transitionName];
-
- if ($JssorUtils$.$IsArray(tempTransition)) {
- if (transitionName != lastTransitionName) {
- lastTransitionName = transitionName;
- namedTransitionOrders[transitionName] = 0;
-
- namedTransitions[transitionName] = tempTransition[Math.floor(Math.random() * tempTransition.length)];
- }
- else {
- namedTransitionOrders[transitionName]++;
- }
-
- tempTransition = namedTransitions[transitionName];
-
- if ($JssorUtils$.$IsArray(tempTransition)) {
- tempTransition = tempTransition.length && tempTransition[namedTransitionOrders[transitionName] % tempTransition.length];
-
- if ($JssorUtils$.$IsArray(tempTransition)) {
- //got transition from array level 3, random for all captions
- tempTransition = tempTransition[Math.floor(Math.random() * tempTransition.length)];
- }
- //else {
- // //got transition from array level 2, in sequence for all adjacent captions with same name specified
- // transition = tempTransition;
- //}
- }
- //else {
- // //got transition from array level 1, random but same for all adjacent captions with same name specified
- // transition = tempTransition;
- //}
- }
- //else {
- // //got transition directly from a simple transition object
- // transition = tempTransition;
- //}
-
- transition = tempTransition;
-
- if ($JssorUtils$.$IsString(transition))
- transition = EvaluateCaptionTransition(transition);
- }
-
- return transition;
- }
-
- var captionElmts = $JssorUtils$.$GetChildren(element);
- $JssorUtils$.$Each(captionElmts, function (captionElmt, i) {
-
- var transitionsWithTuning = [];
- transitionsWithTuning.$Elmt = captionElmt;
- var isCaption = $JssorUtils$.$GetAttributeEx(captionElmt, "u") == "caption";
-
- $JssorUtils$.$Each(playIn ? [0, 3] : [2], function (j, k) {
-
- if (isCaption) {
- var transition;
- var rawTransition;
-
- if (j != 2 || !$JssorUtils$.$GetAttributeEx(captionElmt, "t3")) {
- rawTransition = FetchRawTransition(captionElmt, j);
-
- if (j == 2 && !rawTransition.$Transition) {
- rawTransition.$Delay = rawTransition.$Delay || { $Value: 0 };
- rawTransition = $JssorUtils$.$Extend(FetchRawTransition(captionElmt, 0), rawTransition);
- }
- }
-
- if (rawTransition && rawTransition.$Transition) {
-
- transition = EvaluateCaptionTransition(rawTransition.$Transition.$Value);
-
- if (transition) {
-
- var transitionWithTuning = $JssorUtils$.$Extend({ $Delay: 0, $ScaleHorizontal: 1, $ScaleVertical: 1 }, transition);
-
- $JssorUtils$.$Each(rawTransition, function (rawPropertyValue, propertyName) {
- var tuningPropertyValue = (_CaptionTuningTransfer[propertyName] || _CaptionTuningTransfer.$Default).apply(_CaptionTuningTransfer, [transitionWithTuning[propertyName], rawTransition[propertyName]]);
- if (!isNaN(tuningPropertyValue))
- transitionWithTuning[propertyName] = tuningPropertyValue;
- });
-
- if (!k) {
- if (rawTransition.$BeginTime)
- transitionWithTuning.$BeginTime = rawTransition.$BeginTime.$Value || 0;
- else if ((_PlayMode) & 2)
- transitionWithTuning.$BeginTime = 0;
- }
- }
- }
-
- transitionsWithTuning.push(transitionWithTuning);
- }
-
- if ((level % 2) && !k) {
- //transitionsWithTuning.$Children = GetCaptionItems(captionElmt, lastTransitionName, [].concat(namedTransitions), [].concat(namedTransitionOrders), level + 1);
- transitionsWithTuning.$Children = GetCaptionItems(captionElmt, level + 1);
- }
- });
-
- itemsToPlay.push(transitionsWithTuning);
- });
-
- return itemsToPlay;
- }
-
- function CreateAnimator(item, transition, immediateOut) {
-
- var animatorOptions = {
- $Easing: transition.$Easing,
- $Round: transition.$Round,
- $During: transition.$During,
- $Reverse: playIn && !immediateOut,
- $Optimize: true
- };
-
- $JssorDebug$.$Execute(function () {
- animatorOptions.$CaptionAnimator = true;
- });
-
- var captionItem = item;
- var captionParent = $JssorUtils$.$GetParentNode(item);
-
- var captionItemWidth = $JssorUtils$.$CssWidth(captionItem);
- var captionItemHeight = $JssorUtils$.$CssHeight(captionItem);
- var captionParentWidth = $JssorUtils$.$CssWidth(captionParent);
- var captionParentHeight = $JssorUtils$.$CssHeight(captionParent);
-
- var toStyles = {};
- var fromStyles = {};
- var scaleClip = transition.$ScaleClip || 1;
-
- //Opacity
- if (transition.$Opacity) {
- toStyles.$Opacity = 2 - transition.$Opacity;
- }
-
- animatorOptions.$OriginalWidth = captionItemWidth;
- animatorOptions.$OriginalHeight = captionItemHeight;
-
- //Transform
- if (transition.$Zoom || transition.$Rotate) {
- toStyles.$Zoom = transition.$Zoom ? transition.$Zoom - 1 : 1;
-
- if ($JssorUtils$.$IsBrowserIe9Earlier() || $JssorUtils$.$IsBrowserOpera())
- toStyles.$Zoom = Math.min(toStyles.$Zoom, 2);
-
- fromStyles.$Zoom = 1;
-
- var rotate = transition.$Rotate || 0;
- if (rotate == true)
- rotate = 1;
-
- toStyles.$Rotate = rotate * 360;
- fromStyles.$Rotate = 0;
- }
- //Clip
- else if (transition.$Clip) {
- var fromStyleClip = { $Top: 0, $Right: captionItemWidth, $Bottom: captionItemHeight, $Left: 0 };
- var toStyleClip = $JssorUtils$.$Extend({}, fromStyleClip);
-
- var blockOffset = toStyleClip.$Offset = {};
-
- var topBenchmark = transition.$Clip & 4;
- var bottomBenchmark = transition.$Clip & 8;
- var leftBenchmark = transition.$Clip & 1;
- var rightBenchmark = transition.$Clip & 2;
-
- if (topBenchmark && bottomBenchmark) {
- blockOffset.$Top = captionItemHeight / 2 * scaleClip;
- blockOffset.$Bottom = -blockOffset.$Top;
- }
- else if (topBenchmark)
- blockOffset.$Bottom = -captionItemHeight * scaleClip;
- else if (bottomBenchmark)
- blockOffset.$Top = captionItemHeight * scaleClip;
-
- if (leftBenchmark && rightBenchmark) {
- blockOffset.$Left = captionItemWidth / 2 * scaleClip;
- blockOffset.$Right = -blockOffset.$Left;
- }
- else if (leftBenchmark)
- blockOffset.$Right = -captionItemWidth * scaleClip;
- else if (rightBenchmark)
- blockOffset.$Left = captionItemWidth * scaleClip;
-
- animatorOptions.$Move = transition.$Move;
- toStyles.$Clip = toStyleClip;
- fromStyles.$Clip = fromStyleClip;
- }
-
- //Fly
- {
- var direction = transition.$FlyDirection;
-
- var toLeft = 0;
- var toTop = 0;
-
- var scaleHorizontal = transition.$ScaleHorizontal;
- var scaleVertical = transition.$ScaleVertical;
-
- if ($JssorDirection$.$IsToLeft(direction)) {
- toLeft -= captionParentWidth * scaleHorizontal;
- }
- else if ($JssorDirection$.$IsToRight(direction)) {
- toLeft += captionParentWidth * scaleHorizontal;
- }
-
- if ($JssorDirection$.$IsToTop(direction)) {
- toTop -= captionParentHeight * scaleVertical;
- }
- else if ($JssorDirection$.$IsToBottom(direction)) {
- toTop += captionParentHeight * scaleVertical;
- }
-
- if (toLeft || toTop || animatorOptions.$Move) {
- toStyles.$Left = toLeft + $JssorUtils$.$CssLeft(captionItem);
- toStyles.$Top = toTop + $JssorUtils$.$CssTop(captionItem);
- }
- }
-
- //duration
- var duration = transition.$Duration;
-
- fromStyles = $JssorUtils$.$Extend(fromStyles, $JssorUtils$.$GetStyles(captionItem, toStyles));
-
- animatorOptions.$Setter = $JssorUtils$.$GetStyleSetterEx();
-
- return new $JssorAnimator$(transition.$Delay, duration, animatorOptions, captionItem, fromStyles, toStyles);
- }
-
- function CreateAnimators(streamLineLength, captionItems) {
-
- $JssorUtils$.$Each(captionItems, function (captionItem, i) {
-
- $JssorDebug$.$Execute(function () {
- if (captionItem.length) {
- var top = $JssorUtils$.$CssTop(captionItem.$Elmt);
- var left = $JssorUtils$.$CssLeft(captionItem.$Elmt);
- var width = $JssorUtils$.$CssWidth(captionItem.$Elmt);
- var height = $JssorUtils$.$CssHeight(captionItem.$Elmt);
-
- var error = null;
-
- if (isNaN(top))
- error = "Style 'top' for caption not specified. Please always specify caption like 'position: absolute; top: ...px; left: ...px; width: ...px; height: ...px;'.";
- else if (isNaN(left))
- error = "Style 'left' not specified. Please always specify caption like 'position: absolute; top: ...px; left: ...px; width: ...px; height: ...px;'.";
- else if (isNaN(width))
- error = "Style 'width' not specified. Please always specify caption like 'position: absolute; top: ...px; left: ...px; width: ...px; height: ...px;'.";
- else if (isNaN(height))
- error = "Style 'height' not specified. Please always specify caption like 'position: absolute; top: ...px; left: ...px; width: ...px; height: ...px;'.";
-
- if (error)
- $JssorDebug$.$Error("Caption " + (i + 1) + " definition error, \r\n" + error + "\r\n" + captionItem.$Elmt.outerHTML);
- }
- });
-
- var animator;
- var captionElmt = captionItem.$Elmt;
- var transition = captionItem[0];
- var transition3 = captionItem[1];
-
- if (transition) {
-
- animator = CreateAnimator(captionElmt, transition);
- streamLineLength = animator.$Locate($JssorUtils$.$IsUndefined(transition.$BeginTime) ? streamLineLength : transition.$BeginTime, 1);
- }
-
- streamLineLength = CreateAnimators(streamLineLength, captionItem.$Children);
-
- if (transition3) {
- var animator3 = CreateAnimator(captionElmt, transition3, 1);
- animator3.$Locate(streamLineLength, 1);
- _Self.$Combine(animator3);
- _ImmediateOutCaptionHanger.$Combine(animator3);
- }
-
- if (animator)
- _Self.$Combine(animator);
- });
-
- return streamLineLength;
- }
-
- _Self.$Revert = function () {
- _Self.$GoToPosition(_Self.$GetPosition_OuterEnd() * (playIn || 0));
- _ImmediateOutCaptionHanger.$GoToBegin();
- };
-
- //Constructor
- {
- _ImmediateOutCaptionHanger = new $JssorAnimator$(0, 0);
-
- //var streamLineLength = 0;
- //var captionItems = GetCaptionItems(container, null, [], [], 1);
-
- CreateAnimators(0, _PlayMode ? GetCaptionItems(container, 1) : []);
- }
-};
-
-//Event Table
-
-//$EVT_CLICK = 21; function(slideIndex[, event])
-//$EVT_DRAG_START = 22; function(position[, virtualPosition, event])
-//$EVT_DRAG_END = 23; function(position, startPosition[, virtualPosition, virtualStartPosition, event])
-//$EVT_SWIPE_START = 24; function(position[, virtualPosition])
-//$EVT_SWIPE_END = 25; function(position[, virtualPosition])
-
-//$EVT_LOAD_START = 26; function(slideIndex)
-//$EVT_LOAD_END = 27; function(slideIndex)
-
-//$EVT_POSITION_CHANGE = 202; function(position, fromPosition[, virtualPosition, virtualFromPosition])
-//$EVT_PARK = 203; function(slideIndex, fromIndex)
-
-//$EVT_PROGRESS_CHANGE = 208; function(slideIndex, progress[, progressBegin, idleBegin, idleEnd, progressEnd])
-//$EVT_STATE_CHANGE = 209; function(slideIndex, progress[, progressBegin, idleBegin, idleEnd, progressEnd])
-
-//$EVT_ROLLBACK_START = 210; function(slideIndex, progress[, progressBegin, idleBegin, idleEnd, progressEnd])
-//$EVT_ROLLBACK_END = 211; function(slideIndex, progress[, progressBegin, idleBegin, idleEnd, progressEnd])
-
-//$EVT_SLIDESHOW_START = 206; function(slideIndex[, progressBegin, slideshowBegin, slideshowEnd, progressEnd])
-//$EVT_SLIDESHOW_END = 207; function(slideIndex[, progressBegin, slideshowBegin, slideshowEnd, progressEnd])
-
-//http://www.jssor.com/development/reference-api.html
diff --git a/spree_theme/app/assets/javascripts/jssor.slider/jssor.utils.js b/spree_theme/app/assets/javascripts/jssor.slider/jssor.utils.js
deleted file mode 100644
index f9e84d48..00000000
--- a/spree_theme/app/assets/javascripts/jssor.slider/jssor.utils.js
+++ /dev/null
@@ -1,2522 +0,0 @@
-///
-
-/*
-* Jssor.Utils 17.0
-* http://www.jssor.com/
-*
-* TERMS OF USE - Jssor.Utils
-*
-* Copyright 2014 Jssor
-*
-* Permission is hereby granted, free of charge, to any person obtaining
-* a copy of this software and associated documentation files (the
-* "Software"), to deal in the Software without restriction, including
-* without limitation the rights to use, copy, modify, merge, publish,
-* distribute, sublicense, and/or sell copies of the Software, and to
-* permit persons to whom the Software is furnished to do so, subject to
-* the following conditions:
-*
-* The above copyright notice and this permission notice shall be
-* included in all copies or substantial portions of the Software.
-*
-* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
-* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
-* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
-* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
-* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
-* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
-* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-*/
-
-
-//$JssorPoint$
-var $JssorPoint$;
-
-(function () {
-
- $JssorPoint$ = function (x, y) {
-
- // Properties
-
- this.x = typeof (x) == "number" ? x : 0;
- this.y = typeof (y) == "number" ? y : 0;
-
- };
-
- // Methods
-
- var SDPointPrototype = $JssorPoint$.prototype;
-
- SDPointPrototype.$Plus = function (point) {
- return new $JssorPoint$(this.x + point.x, this.y + point.y);
- };
-
- SDPointPrototype.$Minus = function (point) {
- return new $JssorPoint$(this.x - point.x, this.y - point.y);
- };
-
- SDPointPrototype.$Times = function (factor) {
- return new $JssorPoint$(this.x * factor, this.y * factor);
- };
-
- SDPointPrototype.$Divide = function (factor) {
- return new $JssorPoint$(this.x / factor, this.y / factor);
- };
-
- SDPointPrototype.$Negate = function () {
- return new $JssorPoint$(-this.x, -this.y);
- };
-
- SDPointPrototype.$DistanceTo = function (point) {
- return Math.sqrt(Math.pow(this.x - point.x, 2) +
- Math.pow(this.y - point.y, 2));
- };
-
- SDPointPrototype.$Apply = function (func) {
- return new $JssorPoint$(func(this.x), func(this.y));
- };
-
- SDPointPrototype.$Equals = function (point) {
- return (point instanceof $JssorPoint$) &&
- (this.x === point.x) && (this.y === point.y);
- };
-
- SDPointPrototype.$ToString = function () {
- return "(" + this.x + "," + this.y + ")";
- };
-
-})();
-
-//$JssorEasing$
-var $JssorEasing$ = window.$JssorEasing$ = {
- $EaseLinear: function (t) {
- return t;
- },
- $EaseGoBack: function (t) {
- return 1 - Math.abs((t *= 2) - 1);
- },
- $EaseSwing: function (t) {
- return -Math.cos(t * Math.PI) / 2 + .5;
- },
- $EaseInQuad: function (t) {
- return t * t;
- },
- $EaseOutQuad: function (t) {
- return -t * (t - 2);
- },
- $EaseInOutQuad: function (t) {
- return (t *= 2) < 1 ? 1 / 2 * t * t : -1 / 2 * (--t * (t - 2) - 1);
- },
- $EaseInCubic: function (t) {
- return t * t * t;
- },
- $EaseOutCubic: function (t) {
- return (t -= 1) * t * t + 1;
- },
- $EaseInOutCubic: function (t) {
- return (t *= 2) < 1 ? 1 / 2 * t * t * t : 1 / 2 * ((t -= 2) * t * t + 2);
- },
- $EaseInQuart: function (t) {
- return t * t * t * t;
- },
- $EaseOutQuart: function (t) {
- return -((t -= 1) * t * t * t - 1);
- },
- $EaseInOutQuart: function (t) {
- return (t *= 2) < 1 ? 1 / 2 * t * t * t * t : -1 / 2 * ((t -= 2) * t * t * t - 2);
- },
- $EaseInQuint: function (t) {
- return t * t * t * t * t;
- },
- $EaseOutQuint: function (t) {
- return (t -= 1) * t * t * t * t + 1;
- },
- $EaseInOutQuint: function (t) {
- return (t *= 2) < 1 ? 1 / 2 * t * t * t * t * t : 1 / 2 * ((t -= 2) * t * t * t * t + 2);
- },
- $EaseInSine: function (t) {
- return 1 - Math.cos(t * Math.PI / 2);
- },
- $EaseOutSine: function (t) {
- return Math.sin(t * Math.PI / 2);
- },
- $EaseInOutSine: function (t) {
- return -1 / 2 * (Math.cos(Math.PI * t) - 1);
- },
- $EaseInExpo: function (t) {
- return t == 0 ? 0 : Math.pow(2, 10 * (t - 1));
- },
- $EaseOutExpo: function (t) {
- return t == 1 ? 1 : -Math.pow(2, -10 * t) + 1;
- },
- $EaseInOutExpo: function (t) {
- return t == 0 || t == 1 ? t : (t *= 2) < 1 ? 1 / 2 * Math.pow(2, 10 * (t - 1)) : 1 / 2 * (-Math.pow(2, -10 * --t) + 2);
- },
- $EaseInCirc: function (t) {
- return -(Math.sqrt(1 - t * t) - 1);
- },
- $EaseOutCirc: function (t) {
- return Math.sqrt(1 - (t -= 1) * t);
- },
- $EaseInOutCirc: function (t) {
- return (t *= 2) < 1 ? -1 / 2 * (Math.sqrt(1 - t * t) - 1) : 1 / 2 * (Math.sqrt(1 - (t -= 2) * t) + 1);
- },
- $EaseInElastic: function (t) {
- if (!t || t == 1)
- return t;
- var p = .3, s = .075;
- return -(Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * 2 * Math.PI / p));
- },
- $EaseOutElastic: function (t) {
- if (!t || t == 1)
- return t;
- var p = .3, s = .075;
- return Math.pow(2, -10 * t) * Math.sin((t - s) * 2 * Math.PI / p) + 1;
- },
- $EaseInOutElastic: function (t) {
- if (!t || t == 1)
- return t;
- var p = .45, s = .1125;
- return (t *= 2) < 1 ? -.5 * Math.pow(2, 10 * (t -= 1)) * Math.sin((t - s) * 2 * Math.PI / p) : Math.pow(2, -10 * (t -= 1)) * Math.sin((t - s) * 2 * Math.PI / p) * .5 + 1;
- },
- $EaseInBack: function (t) {
- var s = 1.70158;
- return t * t * ((s + 1) * t - s);
- },
- $EaseOutBack: function (t) {
- var s = 1.70158;
- return (t -= 1) * t * ((s + 1) * t + s) + 1;
- },
- $EaseInOutBack: function (t) {
- var s = 1.70158;
- return (t *= 2) < 1 ? 1 / 2 * t * t * (((s *= 1.525) + 1) * t - s) : 1 / 2 * ((t -= 2) * t * (((s *= 1.525) + 1) * t + s) + 2);
- },
- $EaseInBounce: function (t) {
- return 1 - $JssorEasing$.$EaseOutBounce(1 - t)
- },
- $EaseOutBounce: function (t) {
- return t < 1 / 2.75 ? 7.5625 * t * t : t < 2 / 2.75 ? 7.5625 * (t -= 1.5 / 2.75) * t + .75 : t < 2.5 / 2.75 ? 7.5625 * (t -= 2.25 / 2.75) * t + .9375 : 7.5625 * (t -= 2.625 / 2.75) * t + .984375;
- },
- $EaseInOutBounce: function (t) {
- return t < 1 / 2 ? $JssorEasing$.$EaseInBounce(t * 2) * .5 : $JssorEasing$.$EaseOutBounce(t * 2 - 1) * .5 + .5;
- },
- $EaseInWave: function (t) {
- return 1 - Math.cos(t * Math.PI * 2)
- },
- $EaseOutWave: function (t) {
- return Math.sin(t * Math.PI * 2);
- },
- $EaseOutJump: function (t) {
- return 1 - (((t *= 2) < 1) ? (t = 1 - t) * t * t : (t -= 1) * t * t);
- },
- $EaseInJump: function (t) {
- return ((t *= 2) < 1) ? t * t * t : (t = 2 - t) * t * t;
- }
-};
-
-var $JssorDirection$ = window.$JssorDirection$ = {
- $TO_LEFT: 0x0001,
- $TO_RIGHT: 0x0002,
- $TO_TOP: 0x0004,
- $TO_BOTTOM: 0x0008,
- $HORIZONTAL: 0x0003,
- $VERTICAL: 0x000C,
- $LEFTRIGHT: 0x0003,
- $TOPBOTOM: 0x000C,
- $TOPLEFT: 0x0005,
- $TOPRIGHT: 0x0006,
- $BOTTOMLEFT: 0x0009,
- $BOTTOMRIGHT: 0x000A,
- $AROUND: 0x000F,
-
- $GetDirectionHorizontal: function (direction) {
- return direction & 0x0003;
- },
- $GetDirectionVertical: function (direction) {
- return direction & 0x000C;
- },
- $ChessHorizontal: function (direction) {
- return (~direction & 0x0003) + (direction & 0x000C);
- },
- $ChessVertical: function (direction) {
- return (~direction & 0x000C) + (direction & 0x0003);
- },
- $IsToLeft: function (direction) {
- return (direction & 0x0003) == 0x0001;
- },
- $IsToRight: function (direction) {
- return (direction & 0x0003) == 0x0002;
- },
- $IsToTop: function (direction) {
- return (direction & 0x000C) == 0x0004;
- },
- $IsToBottom: function (direction) {
- return (direction & 0x000C) == 0x0008;
- },
- $IsHorizontal: function (direction) {
- return (direction & 0x0003) > 0;
- },
- $IsVertical: function (direction) {
- return (direction & 0x000C) > 0;
- }
-};
-
-var $JssorKeyCode$ = {
- $BACKSPACE: 8,
- $COMMA: 188,
- $DELETE: 46,
- $DOWN: 40,
- $END: 35,
- $ENTER: 13,
- $ESCAPE: 27,
- $HOME: 36,
- $LEFT: 37,
- $NUMPAD_ADD: 107,
- $NUMPAD_DECIMAL: 110,
- $NUMPAD_DIVIDE: 111,
- $NUMPAD_ENTER: 108,
- $NUMPAD_MULTIPLY: 106,
- $NUMPAD_SUBTRACT: 109,
- $PAGE_DOWN: 34,
- $PAGE_UP: 33,
- $PERIOD: 190,
- $RIGHT: 39,
- $SPACE: 32,
- $TAB: 9,
- $UP: 38
-};
-
-var $JssorAlignment$ = {
- $TopLeft: 0x11,
- $TopCenter: 0x12,
- $TopRight: 0x14,
- $MiddleLeft: 0x21,
- $MiddleCenter: 0x22,
- $MiddleRight: 0x24,
- $BottomLeft: 0x41,
- $BottomCenter: 0x42,
- $BottomRight: 0x44,
-
- $IsTop: function (aligment) {
- return aligment & 0x10 > 0;
- },
- $IsMiddle: function (alignment) {
- return alignment & 0x20 > 0;
- },
- $IsBottom: function (alignment) {
- return alignment & 0x40 > 0;
- },
- $IsLeft: function (alignment) {
- return alignment & 0x01 > 0;
- },
- $IsCenter: function (alignment) {
- return alignment & 0x02 > 0;
- },
- $IsRight: function (alignment) {
- return alignment & 0x04 > 0;
- }
-};
-
-var $JssorMatrix$;
-
-var $JssorBrowser$ = {
- $UNKNOWN: 0,
- $IE: 1,
- $FIREFOX: 2,
- $SAFARI: 3,
- $CHROME: 4,
- $OPERA: 5
-};
-
-var $ROWSER_UNKNOWN$ = 0;
-var $ROWSER_IE$ = 1;
-var $ROWSER_FIREFOX$ = 2;
-var $ROWSER_SAFARI$ = 3;
-var $ROWSER_CHROME$ = 4;
-var $ROWSER_OPERA$ = 5;
-
-var $JssorAnimator$;
-
-// $JssorUtils$ is a static class, so make it singleton instance
-var $JssorUtils$ = window.$JssorUtils$ = new function () {
-
- // Fields
-
- var self = this;
-
- var arrActiveX = ["Msxml2.XMLHTTP", "Msxml3.XMLHTTP", "Microsoft.XMLHTTP"];
- var supportedImageFormats = {
- "bmp": false,
- "jpeg": true,
- "jpg": true,
- "png": true,
- "tif": false,
- "wdp": false
- };
-
- var browser = $JssorBrowser$.$UNKNOWN;
- var browserRuntimeVersion = 0;
- var browserEngineVersion = 0;
- var browserJavascriptVersion = 0;
- var webkitVersion = 0;
-
- var app = navigator.appName;
- var ver = navigator.appVersion;
- var ua = navigator.userAgent;
-
- var urlParams = {};
-
- function DetectBrowser() {
- if (!browser) {
- if (app == "Microsoft Internet Explorer" &&
- !!window.attachEvent && !!window.ActiveXObject) {
-
- var ieOffset = ua.indexOf("MSIE");
- browser = $JssorBrowser$.$IE;
- browserEngineVersion = parseFloat(ua.substring(ieOffset + 5, ua.indexOf(";", ieOffset)));
-
- //check IE javascript version
- /*@cc_on
- browserJavascriptVersion = @_jscript_version;
- @*/
-
- // update: for intranet sites and compat view list sites, IE sends
- // an IE7 User-Agent to the server to be interoperable, and even if
- // the page requests a later IE version, IE will still report the
- // IE7 UA to JS. we should be robust to self.
- //var docMode = document.documentMode;
- //if (typeof docMode !== "undefined") {
- // browserRuntimeVersion = docMode;
- //}
-
- browserRuntimeVersion = document.documentMode || browserEngineVersion;
-
- }
- else if (app == "Netscape" && !!window.addEventListener) {
-
- var ffOffset = ua.indexOf("Firefox");
- var saOffset = ua.indexOf("Safari");
- var chOffset = ua.indexOf("Chrome");
- var webkitOffset = ua.indexOf("AppleWebKit");
-
- if (ffOffset >= 0) {
- browser = $JssorBrowser$.$FIREFOX;
- browserRuntimeVersion = parseFloat(ua.substring(ffOffset + 8));
- }
- else if (saOffset >= 0) {
- var slash = ua.substring(0, saOffset).lastIndexOf("/");
- browser = (chOffset >= 0) ? $JssorBrowser$.$CHROME : $JssorBrowser$.$SAFARI;
- browserRuntimeVersion = parseFloat(ua.substring(slash + 1, saOffset));
- }
-
- if (webkitOffset >= 0)
- webkitVersion = parseFloat(ua.substring(webkitOffset + 12));
- }
- else {
- var match = /(opera)(?:.*version|)[ \/]([\w.]+)/i.exec(ua);
- if (match) {
- browser = $JssorBrowser$.$OPERA;
- browserRuntimeVersion = parseFloat(match[2]);
- }
- }
- }
- }
-
- function IsBrowserIE() {
- DetectBrowser();
- return browser == $ROWSER_IE$;
- }
-
- function IsBrowserIeQuirks() {
-
- return IsBrowserIE() && (browserRuntimeVersion < 6 || document.compatMode == "BackCompat"); //Composite to "CSS1Compat"
- }
-
- function IsBrowserFireFox() {
- DetectBrowser();
- return browser == $ROWSER_FIREFOX$;
- }
-
- function IsBrowserSafari() {
- DetectBrowser();
- return browser == $ROWSER_SAFARI$;
- }
-
- function IsBrowserChrome() {
- DetectBrowser();
- return browser == $ROWSER_CHROME$;
- }
-
- function IsBrowserOpera() {
- DetectBrowser();
- return browser == $ROWSER_OPERA$;
- }
-
- function IsBrowserBadTransform() {
- return IsBrowserSafari() && (webkitVersion > 534) && (webkitVersion < 535);
- }
-
- function IsBrowserSafeHWA() {
- return IsBrowserSafari() && (webkitVersion < 535);
- }
-
- function IsBrowserIe9Earlier() {
-
- //IE 8- and chrome 1 won't fade well
- return IsBrowserIE() && browserRuntimeVersion < 9; // || (IsBrowserChrome() && browserRuntimeVersion < 2);
- }
-
- var _TransformProperty;
- function GetTransformProperty(elmt) {
-
- if (!_TransformProperty) {
- // Note that in some versions of IE9 it is critical that
- // msTransform appear in this list before MozTransform
-
- each(['transform', 'WebkitTransform', 'msTransform', 'MozTransform', 'OTransform'], function (property) {
- if (!self.$IsUndefined(elmt.style[property])) {
- _TransformProperty = property;
- return true;
- }
- });
-
- _TransformProperty = _TransformProperty || "transform";
- }
-
- return _TransformProperty;
- }
-
- // Constructor
- {
- //Ignore urlParams
- // // Url parameters
-
- // var query = window.location.search.substring(1); // ignore '?'
- // var parts = query.split('&');
-
- // for (var i = 0; i < parts.length; i++) {
- // var part = parts[i];
- // var sep = part.indexOf('=');
-
- // if (sep > 0) {
- // urlParams[part.substring(0, sep)] =
- // decodeURIComponent(part.substring(sep + 1));
- // }
- // }
-
- // Browser behaviors
-
- }
-
- // Helpers
- function getOffsetParent(elmt, isFixed) {
- // IE and Opera "fixed" position elements don't have offset parents.
- // regardless, if it's fixed, its offset parent is the body.
- if (isFixed && elmt != document.body) {
- return document.body;
- } else {
- return elmt.offsetParent;
- }
- }
-
- function toString(obj) {
- return Object.prototype.toString.call(obj);
- }
-
- // [[Class]] -> type pairs
- var class2type;
-
- function each(object, callback) {
- if (toString(object) == "[object Array]") {
- for (var i = 0; i < object.length; i++) {
- if (callback(object[i], i, object)) {
- break;
- }
- }
- } else {
- for (var name in object) {
- if (callback(object[name], name, object)) {
- break;
- }
- }
- }
- }
-
- function GetClass2Type() {
- if (!class2type) {
- class2type = {};
- each(["Boolean", "Number", "String", "Function", "Array", "Date", "RegExp", "Object"], function (name) {
- class2type["[object " + name + "]"] = name.toLowerCase();
- });
- }
-
- return class2type;
- }
-
- function type(obj) {
- return obj == null ? String(obj) : GetClass2Type()[toString(obj)] || "object";
- }
-
- function isPlainObject(obj) {
- // Must be an Object.
- // Because of IE, we also have to check the presence of the constructor property.
- // Make sure that DOM nodes and window objects don't pass through, as well
- if (!obj || type(obj) !== "object" || obj.nodeType || self.$IsWindow(obj)) {
- return false;
- }
-
- var hasOwn = Object.prototype.hasOwnProperty;
-
- try {
- // Not own constructor property must be Object
- if (obj.constructor &&
- !hasOwn.call(obj, "constructor") &&
- !hasOwn.call(obj.constructor.prototype, "isPrototypeOf")) {
- return false;
- }
- } catch (e) {
- // IE8,9 Will throw exceptions on certain host objects #9897
- return false;
- }
-
- // Own properties are enumerated firstly, so to speed up,
- // if last one is own, then all properties are own.
-
- var key;
- for (key in obj) { }
-
- return key === undefined || hasOwn.call(obj, key);
- }
-
- function Delay(code, delay) {
- setTimeout(code, delay || 0);
- }
-
- function RemoveByReg(str, reg) {
- var m = reg.exec(str);
-
- if (m) {
- var header = str.substr(0, m.index);
- var tailer = str.substr(m.lastIndex + 1, str.length - (m.lastIndex + 1));
- str = header + tailer;
- }
-
- return str;
- }
-
- function BuildNewCss(oldCss, removeRegs, replaceValue) {
- var css = (!oldCss || oldCss == "inherit") ? "" : oldCss;
-
- each(removeRegs, function (removeReg) {
- var m = removeReg.exec(css);
-
- if (m) {
- var header = css.substr(0, m.index);
- var tailer = css.substr(m.lastIndex + 1, css.length - (m.lastIndex + 1));
- css = header + tailer;
- }
- });
-
- css = replaceValue + (css.indexOf(" ") != 0 ? " " : "") + css;
-
- return css;
- }
-
- function SetStyleFilterIE(elmt, value) {
- if (browserRuntimeVersion < 9) {
- elmt.style.filter = value;
- }
- }
-
- function SetStyleMatrixIE(elmt, matrix, offset) {
- //matrix is not for ie9+ running in ie8- mode
- if (browserJavascriptVersion < 9) {
- var oldFilterValue = elmt.style.filter;
- var matrixReg = new RegExp(/[\s]*progid:DXImageTransform\.Microsoft\.Matrix\([^\)]*\)/g);
- var matrixValue = matrix ? "progid:DXImageTransform.Microsoft.Matrix(" + "M11=" + matrix[0][0] + ", M12=" + matrix[0][1] + ", M21=" + matrix[1][0] + ", M22=" + matrix[1][1] + ", SizingMethod='auto expand')" : "";
-
- var newFilterValue = BuildNewCss(oldFilterValue, [matrixReg], matrixValue);
-
- SetStyleFilterIE(elmt, newFilterValue);
-
- self.$CssMarginTop(elmt, offset.y);
- self.$CssMarginLeft(elmt, offset.x);
- }
- }
-
- // Methods
-
- self.$IsBrowserIE = IsBrowserIE;
-
- self.$IsBrowserIeQuirks = IsBrowserIeQuirks;
-
- self.$IsBrowserFireFox = IsBrowserFireFox;
-
- self.$IsBrowserSafari = IsBrowserSafari;
-
- self.$IsBrowserChrome = IsBrowserChrome;
-
- self.$IsBrowserOpera = IsBrowserOpera;
-
- self.$IsBrowserBadTransform = IsBrowserBadTransform;
-
- self.$IsBrowserSafeHWA = IsBrowserSafeHWA;
-
- self.$IsBrowserIe9Earlier = IsBrowserIe9Earlier;
-
- self.$GetBrowserVersion = function () {
- return browserRuntimeVersion;
- };
-
- self.$GetBrowserEngineVersion = function () {
- return browserEngineVersion || browserRuntimeVersion;
- };
-
- self.$GetWebKitVersion = function () {
- return webkitVersion;
- };
-
- self.$Delay = Delay;
-
- self.$GetElement = function (elmt) {
- if (self.$IsString(elmt)) {
- elmt = document.getElementById(elmt);
- }
-
- return elmt;
- };
-
- self.$GetElementPosition = function (elmt) {
- elmt = self.$GetElement(elmt);
- var result = new $JssorPoint$();
-
- // technique from:
- // http://www.quirksmode.org/js/findpos.html
- // with special check for "fixed" elements.
-
- while (elmt) {
- result.x += elmt.offsetLeft;
- result.y += elmt.offsetTop;
-
- var isFixed = self.$GetElementStyle(elmt).position == "fixed";
-
- if (isFixed) {
- result = result.$Plus(self.$GetPageScroll(window));
- }
-
- elmt = getOffsetParent(elmt, isFixed);
- }
-
- return result;
- };
-
- self.$GetElementSize = function (elmt) {
- elmt = self.$GetElement(elmt);
- return new $JssorPoint$(elmt.clientWidth, elmt.clientHeight);
- };
-
- self.$GetEvent = function (event) {
- return event ? event : window.event;
- };
-
- self.$GetEventSrcElement = function (event) {
- event = self.$GetEvent(event);
- return event.target || event.srcElement || document;
- };
-
- self.$GetEventDstElement = function (event) {
- event = self.$GetEvent(event);
- return event.relatedTarget || event.toElement;
- };
-
- self.$GetMousePosition = function (event) {
- event = self.$GetEvent(event);
- var result = new $JssorPoint$();
-
- // technique from:
- // http://www.quirksmode.org/js/events_properties.html
-
- if (event.type == "DOMMouseScroll" &&
- IsBrowserFireFox() && browserRuntimeVersion < 3) {
- // hack for FF2 which reports incorrect position for mouse scroll
- result.x = event.screenX;
- result.y = event.screenY;
- } else if (typeof (event.pageX) == "number") {
- result.x = event.pageX;
- result.y = event.pageY;
- } else if (typeof (event.clientX) == "number") {
- result.x = event.clientX + document.body.scrollLeft + document.documentElement.scrollLeft;
- result.y = event.clientY + document.body.scrollTop + document.documentElement.scrollTop;
- } else {
- $JssorDebug$.$Fail("Unknown event mouse position, no known technique.");
- }
-
- return result;
- };
-
- self.$GetMouseScroll = function (event) {
- event = self.$GetEvent(event);
- var delta = 0; // default value
-
- // technique from:
- // http://blog.paranoidferret.com/index.php/2007/10/31/javascript-tutorial-the-scroll-wheel/
-
- if (typeof (event.wheelDelta) == "number") {
- delta = event.wheelDelta;
- } else if (typeof (event.detail) == "number") {
- delta = event.detail * -1;
- } else {
- $JssorDebug$.$Fail("Unknown event mouse scroll, no known technique.");
- }
-
- // normalize value to [-1, 1]
- return delta ? delta / Math.abs(delta) : 0;
- };
-
- self.$GetPageScroll = function (window) {
- var result = new $JssorPoint$();
- var docElmt = window.document.documentElement || {};
- var body = window.document.body || {};
-
- // technique from:
- // http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
-
- if (typeof (window.pageXOffset) == "number") {
- // most browsers
- result.x = window.pageXOffset;
- result.y = window.pageYOffset;
- } else if (body.scrollLeft || body.scrollTop) {
- // W3C spec, IE6+ in quirks mode
- result.x = body.scrollLeft;
- result.y = body.scrollTop;
- } else if (docElmt.scrollLeft || docElmt.scrollTop) {
- // IE6+ in standards mode
- result.x = docElmt.scrollLeft;
- result.y = docElmt.scrollTop;
- }
-
- // note: we specifically aren't testing for typeof here, because IE sets
- // the appropriate variables undefined instead of 0 under certain
- // conditions. self means we also shouldn't fail if none of the three
- // cases are hit; we'll just assume the page scroll is 0.
-
- return result;
- };
-
- self.$GetWindowSize = function (window) {
- var result = new $JssorPoint$();
-
- // technique from:
- // http://www.howtocreate.co.uk/tutorials/javascript/browserwindow
-
- //jQuery way to get window size, but support ie quirks mode
- var checkElement = (IsBrowserIeQuirks() ? window.document.body : window.document.documentElement);
-
- result.x = checkElement.clientWidth;
- result.y = checkElement.clientHeight;
-
- return result;
- };
-
- //self.$MakeAjaxRequest = function (url, callback) {
- // var async = typeof (callback) == "function";
- // var req = null;
-
- // if (async) {
- // var actual = callback;
- // var callback = function () {
- // Delay($JssorUtils$.$CreateCallback(null, actual, req), 1);
- // };
- // }
-
- // if (window.ActiveXObject) {
- // for (var i = 0; i < arrActiveX.length; i++) {
- // try {
- // req = new ActiveXObject(arrActiveX[i]);
- // break;
- // } catch (e) {
- // continue;
- // }
- // }
- // } else if (window.XMLHttpRequest) {
- // req = new XMLHttpRequest();
- // }
-
- // if (!req) {
- // $JssorDebug$.$Fail("Browser doesn't support XMLHttpRequest.");
- // }
-
- // if (async) {
- // req.onreadystatechange = function () {
- // if (req.readyState == 4) {
- // // prevent memory leaks by breaking circular reference now
- // req.onreadystatechange = new Function();
- // callback();
- // }
- // };
- // }
-
- // try {
- // req.open("GET", url, async);
- // req.send(null);
- // } catch (e) {
- // $JssorDebug$.$Log(e.name + " while making AJAX request: " + e.message);
-
- // req.onreadystatechange = null;
- // req = null;
-
- // if (async) {
- // callback();
- // }
- // }
-
- // return async ? null : req;
- //};
-
- //self.$ParseXml = function (string) {
- // var xmlDoc = null;
-
- // if (window.ActiveXObject) {
- // try {
- // xmlDoc = new ActiveXObject("Microsoft.XMLDOM");
- // xmlDoc.async = false;
- // xmlDoc.loadXML(string);
- // } catch (e) {
- // $JssorDebug$.$Log(e.name + " while parsing XML (ActiveX): " + e.message);
- // }
- // } else if (window.DOMParser) {
- // try {
- // var parser = new DOMParser();
- // xmlDoc = parser.parseFromString(string, "text/xml");
- // } catch (e) {
- // $JssorDebug$.$Log(e.name + " while parsing XML (DOMParser): " + e.message);
- // }
- // } else {
- // $JssorDebug$.$Fail("Browser doesn't support XML DOM.");
- // }
-
- // return xmlDoc;
- //};
-
- function Css(elmt, name, value) {
- ///
- /// access css
- /// $JssorUtils$.$Css(elmt, name); //get css value
- /// $JssorUtils$.$Css(elmt, name, value); //set css value
- ///
- ///
- /// the element to access css
- ///
- ///
- /// the name of css property
- ///
- ///
- /// the value to set
- ///
- if (value != undefined) {
- elmt.style[name] = value;
- }
- else {
- var style = elmt.currentStyle || elmt.style;
- value = style[name];
-
- if(value == "" && window.getComputedStyle) {
- style = elmt.ownerDocument.defaultView.getComputedStyle(elmt, null);
-
- style && (value = style.getPropertyValue(name) || style[name]);
- }
-
- return value;
- }
- }
-
- function CssN(elmt, name, value, isDimensional) {
- ///
- /// access css as numeric
- /// $JssorUtils$.$CssN(elmt, name); //get css value
- /// $JssorUtils$.$CssN(elmt, name, value); //set css value
- ///
- ///
- /// the element to access css
- ///
- ///
- /// the name of css property
- ///
- ///
- /// the value to set
- ///
- if (value != undefined) {
- isDimensional && (value += "px");
- Css(elmt, name, value);
- }
- else {
- return parseFloat(Css(elmt, name));
- }
- }
-
- function CssP(elmt, name, value) {
- ///
- /// access css in pixel as numeric, like 'top', 'left', 'width', 'height'
- /// $JssorUtils$.$CssP(elmt, name); //get css value
- /// $JssorUtils$.$CssP(elmt, name, value); //set css value
- ///
- ///
- /// the element to access css
- ///
- ///
- /// the name of css property
- ///
- ///
- /// the value to set
- ///
- return CssN(elmt, name, value, true);
- }
-
- function CssProxy(name, numericOrDimension) {
- ///
- /// create proxy to access css, CssProxy(name[, numericOrDimension]);
- ///
- ///
- /// the element to access css
- ///
- ///
- /// not set: access original css, 1: access css as numeric, 2: access css in pixel as numeric
- ///
- var isDimensional = numericOrDimension & 2;
- var cssAccessor = numericOrDimension ? CssN : Css;
- return function (elmt, value) {
- return cssAccessor(elmt, name, value, isDimensional);
- };
- }
-
- function GetStyleOpacity(elmt) {
- if (IsBrowserIE() && browserEngineVersion < 9) {
- var match = /opacity=([^)]*)/.exec(elmt.style.filter || "");
- return match ? (parseFloat(match[1]) / 100) : 1;
- }
- else
- return parseFloat(elmt.style.opacity || "1");
- }
-
- function SetStyleOpacity(elmt, opacity, ie9EarlierForce) {
-
- if (IsBrowserIE() && browserEngineVersion < 9) {
- //var filterName = "filter"; // browserEngineVersion < 8 ? "filter" : "-ms-filter";
- var finalFilter = elmt.style.filter || "";
-
- // for CSS filter browsers (IE), remove alpha filter if it's unnecessary.
- // update: doing self always since IE9 beta seems to have broken the
- // behavior if we rely on the programmatic filters collection.
- var alphaReg = new RegExp(/[\s]*alpha\([^\)]*\)/g);
-
- // important: note the lazy star! self protects against
- // multiple filters; we don't want to delete the other ones.
- // update: also trimming extra whitespace around filter.
-
- var ieOpacity = Math.round(100 * opacity);
- var alphaFilter = "";
- if (ieOpacity < 100 || ie9EarlierForce) {
- alphaFilter = "alpha(opacity=" + ieOpacity + ") ";
- //elmt.style["-ms-filter"] = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + ieOpacity + ") ";
- }
-
- var newFilterValue = BuildNewCss(finalFilter, [alphaReg], alphaFilter);
-
- SetStyleFilterIE(elmt, newFilterValue);
- }
-
- //if (!IsBrowserIE() || browserEngineVersion >= 9)
- else {
- elmt.style.opacity = opacity == 1 ? "" : Math.round(opacity * 100) / 100;
- }
- }
-
- function SetStyleTransformInternal(elmt, transform) {
- var rotate = transform.$Rotate || 0;
- var scale = transform.$Scale == undefined ? 1 : transform.$Scale;
-
- if (IsBrowserIe9Earlier()) {
- var matrix = self.$CreateMatrix(rotate / 180 * Math.PI, scale, scale);
- SetStyleMatrixIE(elmt, (!rotate && scale == 1) ? null : matrix, self.$GetMatrixOffset(matrix, transform.$OriginalWidth, transform.$OriginalHeight));
- }
- else {
- //rotate(15deg) scale(.5) translateZ(0)
- var transformProperty = GetTransformProperty(elmt);
- if (transformProperty) {
- var transformValue = "rotate(" + rotate % 360 + "deg) scale(" + scale + ")";
- if ($JssorUtils$.$IsBrowserChrome() && webkitVersion > 535)
- transformValue += " perspective(2000px)";
-
- elmt.style[transformProperty] = transformValue;
- }
- }
- }
-
- self.$SetStyleTransform = function (elmt, transform) {
- if (IsBrowserBadTransform()) {
- Delay(self.$CreateCallback(null, SetStyleTransformInternal, elmt, transform));
- }
- else {
- SetStyleTransformInternal(elmt, transform);
- }
- };
-
- self.$SetStyleTransformOrigin = function (elmt, transformOrigin) {
- var transformProperty = GetTransformProperty(elmt);
-
- if (transformProperty)
- elmt.style[transformProperty + "Origin"] = transformOrigin;
- };
-
- self.$SetStyleScale = function (elmt, scale) {
-
- if (IsBrowserIE() && browserEngineVersion < 9 || (browserEngineVersion < 10 && IsBrowserIeQuirks())) {
- elmt.style.zoom = (scale == 1) ? "" : scale;
- }
- else {
- var transformProperty = GetTransformProperty(elmt);
-
- if (transformProperty) {
- //rotate(15deg) scale(.5)
- var transformValue = "scale(" + scale + ")";
-
- var oldTransformValue = elmt.style[transformProperty];
- var scaleReg = new RegExp(/[\s]*scale\(.*?\)/g);
-
- var newTransformValue = BuildNewCss(oldTransformValue, [scaleReg], transformValue);
-
- elmt.style[transformProperty] = newTransformValue;
- }
- }
- };
-
- self.$EnableHWA = function (elmt) {
- if (!elmt.style[GetTransformProperty(elmt)] || elmt.style[GetTransformProperty(elmt)] == "none")
- elmt.style[GetTransformProperty(elmt)] = "perspective(2000px)";
- };
-
- self.$DisableHWA = function (elmt) {
- //if (force || elmt.style[GetTransformProperty(elmt)] == "perspective(2000px)")
- elmt.style[GetTransformProperty(elmt)] = "none";
- };
-
- var ie8OffsetWidth = 0;
- var ie8OffsetHeight = 0;
- var ie8WindowResizeCallbackHandlers;
- //var ie8LastVerticalScrollbar;
- //var toggleInfo = "";
-
- function Ie8WindowResizeFilter(window) {
-
- var trigger = true;
-
- var checkElement = (IsBrowserIeQuirks() ? window.document.body : window.document.documentElement);
- if (checkElement) {
- //check vertical bar
- //var hasVerticalBar = checkElement.scrollHeight > checkElement.clientHeight;
- //var verticalBarToggle = hasVerticalBar != ie8LastVerticalScrollbar;
- //ie8LastVerticalScrollbar = hasVerticalBar;
-
- var widthChange = checkElement.offsetWidth - ie8OffsetWidth;
- var heightChange = checkElement.offsetHeight - ie8OffsetHeight;
- if (widthChange || heightChange) {
-
- ie8OffsetWidth += widthChange;
- ie8OffsetHeight += heightChange;
- }
- else
- trigger = false;
- }
-
- trigger && each(ie8WindowResizeCallbackHandlers, function (handler) {
- handler();
- });
- }
-
- self.$OnWindowResize = function (window, handler) {
-
- if (IsBrowserIE() && browserEngineVersion < 9) {
- if (!ie8WindowResizeCallbackHandlers) {
- ie8WindowResizeCallbackHandlers = [handler];
- handler = self.$CreateCallback(null, Ie8WindowResizeFilter, window);
- }
- else {
- ie8WindowResizeCallbackHandlers.push(handler);
- return;
- }
- }
-
- self.$AddEvent(window, "resize", handler);
- };
-
- self.$AddEvent = function (elmt, eventName, handler, useCapture) {
- elmt = self.$GetElement(elmt);
-
- // technique from:
- // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/
-
- if (elmt.addEventListener) {
- if (eventName == "mousewheel") {
- elmt.addEventListener("DOMMouseScroll", handler, useCapture);
- }
- // we are still going to add the mousewheel -- not a mistake!
- // self is for opera, since it uses onmousewheel but needs addEventListener.
- elmt.addEventListener(eventName, handler, useCapture);
- }
- else if (elmt.attachEvent) {
- elmt.attachEvent("on" + eventName, handler);
- if (useCapture && elmt.setCapture) {
- elmt.setCapture();
- }
- }
-
- $JssorDebug$.$Execute(function () {
- if (!elmt.addEventListener && !elmt.attachEvent) {
- $JssorDebug$.$Fail("Unable to attach event handler, no known technique.");
- }
- });
-
- };
-
- self.$RemoveEvent = function (elmt, eventName, handler, useCapture) {
- elmt = self.$GetElement(elmt);
-
- // technique from:
- // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/
-
- if (elmt.removeEventListener) {
- if (eventName == "mousewheel") {
- elmt.removeEventListener("DOMMouseScroll", handler, useCapture);
- }
- // we are still going to remove the mousewheel -- not a mistake!
- // self is for opera, since it uses onmousewheel but needs removeEventListener.
- elmt.removeEventListener(eventName, handler, useCapture);
- }
- else if (elmt.detachEvent) {
- elmt.detachEvent("on" + eventName, handler);
- if (useCapture && elmt.releaseCapture) {
- elmt.releaseCapture();
- }
- }
-
- $JssorDebug$.$Execute(function () {
- if (!elmt.removeEventListener && !elmt.detachEvent) {
- $JssorDebug$.$Fail("Unable to detach event handler, no known technique.");
- }
- });
- };
-
- self.$FireEvent = function (elmt, eventName) {
- //var document = elmt.document;
-
- $JssorDebug$.$Execute(function () {
- if (!document.createEvent && !document.createEventObject) {
- $JssorDebug$.$Fail("Unable to fire event, no known technique.");
- }
-
- if (!elmt.dispatchEvent && !elmt.fireEvent) {
- $JssorDebug$.$Fail("Unable to fire event, no known technique.");
- }
- });
-
- var evento;
-
- if (document.createEvent) {
- evento = document.createEvent("HTMLEvents");
- evento.initEvent(eventName, false, false);
- elmt.dispatchEvent(evento);
- }
- else {
- var ieEventName = "on" + eventName;
- evento = document.createEventObject();
- //event.eventType = ieEventName;
- //event.eventName = ieEventName;
-
- elmt.fireEvent(ieEventName, evento);
- }
- };
-
- self.$AddEventBrowserMouseUp = function (handler, userCapture) {
- self.$AddEvent((IsBrowserIe9Earlier()) ? document : window, "mouseup", handler, userCapture);
- };
-
- self.$RemoveEventBrowserMouseUp = function (handler, userCapture) {
- self.$RemoveEvent((IsBrowserIe9Earlier()) ? document : window, "mouseup", handler, userCapture);
- };
-
- self.$AddEventBrowserMouseDown = function (handler, userCapture) {
- self.$AddEvent((IsBrowserIe9Earlier()) ? document : window, "mousedown", handler, userCapture);
- };
-
- self.$RemoveEventBrowserMouseDown = function (handler, userCapture) {
- self.$RemoveEvent((IsBrowserIe9Earlier()) ? document : window, "mousedown", handler, userCapture);
- };
-
- self.$CancelEvent = function (event) {
- event = self.$GetEvent(event);
-
- // technique from:
- // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/
-
- if (event.preventDefault) {
- event.preventDefault(); // W3C for preventing default
- }
-
- event.cancel = true; // legacy for preventing default
- event.returnValue = false; // IE for preventing default
- };
-
- self.$StopEvent = function (event) {
- event = self.$GetEvent(event);
-
- // technique from:
- // http://blog.paranoidferret.com/index.php/2007/08/10/javascript-working-with-events/
-
- if (event.stopPropagation) {
- event.stopPropagation(); // W3C for stopping propagation
- }
-
- event.cancelBubble = true; // IE for stopping propagation
- };
-
- self.$CreateCallback = function (object, method) {
- // create callback args
- var initialArgs = [];
- for (var i = 2; i < arguments.length; i++) {
- initialArgs.push(arguments[i]);
- }
-
- // create closure to apply method
- var callback = function () {
- // concatenate new args, but make a copy of initialArgs first
- var args = initialArgs.concat([]);
- for (var i = 0; i < arguments.length; i++) {
- args.push(arguments[i]);
- }
-
- return method.apply(object, args);
- };
-
- $JssorDebug$.$LiveStamp(callback, "callback_" + ($JssorUtils$.$GetNow() & 11111111));
-
- return callback;
- };
-
- var _Freeer;
- self.$FreeElement = function (elmt) {
- if (!_Freeer)
- _Freeer = self.$CreateDivElement();
-
- if (elmt) {
- $JssorUtils$.$AppendChild(_Freeer, elmt);
- $JssorUtils$.$ClearInnerHtml(_Freeer);
- }
- };
-
- self.$SetInnerText = function (elmt, text) {
- var textNode = document.createTextNode(text);
- self.$ClearInnerHtml(elmt);
- elmt.appendChild(textNode);
- };
-
- self.$GetInnerText = function (elmt) {
- return elmt.textContent || elmt.innerText;
- };
-
- self.$GetInnerHtml = function (elmt) {
- return elmt.innerHTML;
- };
-
- self.$SetInnerHtml = function (elmt, html) {
- elmt.innerHTML = html;
- };
-
- self.$ClearInnerHtml = function (elmt) {
- elmt.innerHTML = "";
- };
-
- self.$EncodeHtml = function (text) {
- var div = self.$CreateDivElement();
- self.$SetInnerText(div, text);
- return self.$GetInnerHtml(div);
- };
-
- self.$DecodeHtml = function (html) {
- var div = self.$CreateDivElement();
- self.$SetInnerHtml(div, html);
- return self.$GetInnerText(div);
- };
-
- self.$SelectElement = function (elmt) {
- var userSelection;
- if (window.getSelection) {
- //W3C default
- userSelection = window.getSelection();
- }
- var theRange = null;
- if (document.createRange) {
- theRange = document.createRange();
- theRange.selectNode(elmt);
- }
- else {
- theRange = document.body.createTextRange();
- theRange.moveToElementText(elmt);
- theRange.select();
- }
- //set user selection
- if (userSelection)
- userSelection.addRange(theRange);
- };
-
- self.$DeselectElements = function () {
- if (document.selection) {
- document.selection.empty();
- } else if (window.getSelection) {
- window.getSelection().removeAllRanges();
- }
- };
-
- self.$GetChildren = function (elmt) {
- var children = [];
-
- for (var tmpEl = elmt.firstChild; tmpEl; tmpEl = tmpEl.nextSibling) {
- if (tmpEl.nodeType == 1) {
- children.push(tmpEl);
- }
- }
-
- return children;
- };
-
- function FindFirstChildByAttribute(elmt, attrValue, attrName, deep) {
- if (!attrName)
- attrName = "u";
-
- for (elmt = elmt ? elmt.firstChild : null; elmt; elmt = elmt.nextSibling) {
- if (elmt.nodeType == 1) {
- if (self.$GetAttributeEx(elmt, attrName) == attrValue)
- return elmt;
-
- if (deep) {
- var childRet = FindFirstChildByAttribute(elmt, attrValue, attrName, deep);
- if (childRet)
- return childRet;
- }
- }
- }
- }
-
- self.$FindFirstChildByAttribute = FindFirstChildByAttribute;
-
- function FindChildrenByAttribute(elmt, attrValue, attrName, deep) {
- if (!attrName)
- attrName = "u";
-
- var ret = [];
-
- for (elmt = elmt ? elmt.firstChild : null; elmt; elmt = elmt.nextSibling) {
- if (elmt.nodeType == 1) {
- if (self.$GetAttributeEx(elmt, attrName) == attrValue)
- ret.push(elmt);
-
- if (deep) {
- var childRet = FindChildrenByAttribute(elmt, attrValue, attrName, deep);
- if (childRet.length)
- ret = ret.concat(childRet);
- }
- }
- }
-
- return ret;
- }
-
- self.$FindChildrenByAttribute = FindChildrenByAttribute;
-
- function FindFirstChildByTag(elmt, tagName, deep) {
-
- for (elmt = elmt ? elmt.firstChild : null; elmt; elmt = elmt.nextSibling) {
- if (elmt.nodeType == 1) {
- if (elmt.tagName == tagName)
- return elmt;
-
- if (deep) {
- var childRet = FindFirstChildByTag(elmt, tagName, deep);
- if (childRet)
- return childRet;
- }
- }
- }
- }
-
- self.$FindFirstChildByTag = FindFirstChildByTag;
-
- function FindChildrenByTag(elmt, tagName, deep) {
- var ret = [];
-
- for (elmt = elmt ? elmt.firstChild : null; elmt; elmt = elmt.nextSibling) {
- if (elmt.nodeType == 1) {
- if (!tagName || elmt.tagName == tagName)
- ret.push(elmt);
-
- if (deep) {
- var childRet = FindChildrenByTag(elmt, tagName, true);
- if (childRet.length)
- ret = ret.concat(childRet);
- }
- }
- }
-
- return ret;
- }
-
- self.$FindChildrenByTag = FindChildrenByTag;
-
- self.$GetElementsByTagName = function (elmt, tagName) {
- return elmt.getElementsByTagName(tagName);
- };
-
- self.$Extend = function (target) {
- for (var i = 1; i < arguments.length; i++) {
-
- var options = arguments[i];
-
- // Only deal with non-null/undefined values
- if (options) {
- // Extend the base object
- for (var name in options) {
- target[name] = options[name];
- }
- }
- }
-
- // Return the modified object
- return target;
- };
-
- self.$Unextend = function (target, options) {
- $JssorDebug$.$Assert(options);
-
- var unextended = {};
-
- // Extend the base object
- for (var name in target) {
- if (target[name] != options[name]) {
- unextended[name] = target[name];
- }
- }
-
- // Return the modified object
- return unextended;
- };
-
- self.$IsUndefined = function (obj) {
- return type(obj) == "undefined";
- };
-
- self.$IsFunction = function (obj) {
- return type(obj) == "function";
- };
-
- self.$IsArray = Array.isArray || function (obj) {
- return type(obj) == "array";
- };
-
- self.$IsString = function (obj) {
- return type(obj) == "string";
- };
-
- self.$IsNumeric = function (obj) {
- return !isNaN(parseFloat(obj)) && isFinite(obj);
- };
-
- self.$IsWindow = function (obj) {
- return obj != null && obj == obj.window;
- };
-
- self.$Type = type;
-
- // args is for internal usage only
- self.$Each = each;
-
- self.$IsPlainObject = isPlainObject;
-
- self.$CreateDivElement = function (doc) {
- return self.$CreateElement("DIV", doc);
- };
-
- self.$CreateSpanElement = function (doc) {
- return self.$CreateElement("SPAN", doc);
- };
-
- self.$CreateElement = function (tagName, doc) {
- doc = doc || document;
- return doc.createElement(tagName);
- };
-
- self.$EmptyFunction = function () { };
-
- self.$GetAttribute = function (elmt, name) {
- return elmt.getAttribute(name);
- };
-
- self.$GetAttributeEx = function (elmt, name) {
- return self.$GetAttribute(elmt, name) || self.$GetAttribute(elmt, "data-" + name);
- };
-
- self.$SetAttribute = function (elmt, name, value) {
- elmt.setAttribute(name, value);
- };
-
- self.$GetClassName = function (elmt) {
- return elmt.className;
- };
-
- self.$SetClassName = function (elmt, className) {
- elmt.className = className || "";
- };
-
- self.$GetParentNode = function (elmt) {
- return elmt.parentNode;
- };
-
- self.$HideElement = function (elmt) {
- self.$CssDisplay(elmt, "none");
- };
-
- self.$HideElements = function (elmts) {
- for (var i = 0; i < elmts.length; i++) {
- self.$HideElement(elmts[i]);
- }
- };
-
- self.$ShowElement = function (elmt, show) {
- self.$CssDisplay(elmt, show == false ? "none" : "");
- };
-
- self.$ShowElements = function (elmts) {
- for (var i = 0; i < elmts.length; i++) {
- self.$ShowElement(elmts[i]);
- }
- };
-
- self.$RemoveAttribute = function (elmt, attrbuteName) {
- elmt.removeAttribute(attrbuteName);
- };
-
- self.$CanClearClip = function () {
- //return !IsBrowserIE() || browserEngineVersion > 9 || (browserRuntimeVersion > 7 && !IsBrowserIeQuirks());
- return IsBrowserIE() && browserRuntimeVersion < 10;
- };
-
- self.$SetStyleClip = function (elmt, clip) {
- if (clip) {
- elmt.style.clip = "rect(" + Math.round(clip.$Top) + "px " + Math.round(clip.$Right) + "px " + Math.round(clip.$Bottom) + "px " + Math.round(clip.$Left) + "px)";
- }
- else {
- var cssText = elmt.style.cssText;
- var clipRegs = [
- new RegExp(/[\s]*clip: rect\(.*?\)[;]?/i),
- new RegExp(/[\s]*cliptop: .*?[;]?/i),
- new RegExp(/[\s]*clipright: .*?[;]?/i),
- new RegExp(/[\s]*clipbottom: .*?[;]?/i),
- new RegExp(/[\s]*clipleft: .*?[;]?/i)
- ];
-
- var newCssText = BuildNewCss(cssText, clipRegs, "");
-
- $JssorUtils$.$CssCssText(elmt, newCssText);
- }
- };
-
- self.$GetNow = function () {
- return new Date().getTime();
- };
-
- self.$AppendChild = function (elmt, child) {
- elmt.appendChild(child);
- };
-
- self.$AppendChildren = function (elmt, children) {
- each(children, function (child) {
- self.$AppendChild(elmt, child);
- });
- };
-
- self.$InsertBefore = function (elmt, child, refObject) {
- elmt.insertBefore(child, refObject);
- };
-
- self.$InsertAdjacentHtml = function (elmt, where, text) {
- elmt.insertAdjacentHTML(where, text);
- };
-
- self.$RemoveChild = function (elmt, child) {
- elmt.removeChild(child);
- };
-
- self.$RemoveChildren = function (elmt, children) {
- each(children, function (child) {
- self.$RemoveChild(elmt, child);
- });
- };
-
- self.$ClearChildren = function (elmt) {
- self.$RemoveChildren(elmt, self.$GetChildren(elmt));
- };
-
- self.$ParseInt = function (str, radix) {
- return parseInt(str, radix || 10);
- };
-
- self.$ParseFloat = function (str) {
- return parseFloat(str);
- };
-
- self.$IsChild = function (elmtA, elmtB) {
- var body = document.body;
- while (elmtB && elmtA != elmtB && body != elmtB) {
- try {
- elmtB = elmtB.parentNode;
- } catch (e) {
- // Firefox sometimes fires events for XUL elements, which throws
- // a "permission denied" error. so this is not a child.
- return false;
- }
- }
- return elmtA == elmtB;
- };
-
- self.$ToLowerCase = function (value) {
- if (value)
- value = value.toLowerCase();
-
- return value;
- };
-
- self.$CloneNode = function (elmt, deep) {
- return elmt.cloneNode(deep);
- };
-
- function LoadImageCallback(callback, image, abort) {
- image.onload = null;
- image.abort = null;
-
- if (callback)
- callback(image, abort);
- }
-
- self.$LoadImage = function (src, callback) {
- if (self.$IsBrowserOpera() && browserRuntimeVersion < 11.6 || !src) {
- LoadImageCallback(callback, null);
- }
- else {
- var image = new Image();
- image.onload = self.$CreateCallback(null, LoadImageCallback, callback, image);
- image.onabort = self.$CreateCallback(null, LoadImageCallback, callback, image, true);
- image.src = src;
- }
- };
-
- self.$LoadImages = function (imageElmts, mainImageElmt, callback) {
-
- var _ImageLoading = imageElmts.length + 1;
-
- function LoadImageCompleteEventHandler(image, abort) {
- _ImageLoading--;
- if (mainImageElmt && image && image.src == mainImageElmt.src)
- mainImageElmt = image;
- !_ImageLoading && callback && callback(mainImageElmt);
- }
-
- $JssorUtils$.$Each(imageElmts, function (imageElmt) {
- $JssorUtils$.$LoadImage(imageElmt.src, LoadImageCompleteEventHandler);
- });
-
- LoadImageCompleteEventHandler();
- };
-
- self.$BuildElement = function (template, tagName, replacer, createCopy) {
- if (createCopy)
- template = $JssorUtils$.$CloneNode(template, true);
-
- var templateHolders = $JssorUtils$.$GetElementsByTagName(template, tagName);
- for (var j = templateHolders.length - 1; j > -1; j--) {
- var templateHolder = templateHolders[j];
- var replaceItem = $JssorUtils$.$CloneNode(replacer, true);
- $JssorUtils$.$SetClassName(replaceItem, $JssorUtils$.$GetClassName(templateHolder));
- $JssorUtils$.$CssCssText(replaceItem, templateHolder.style.cssText);
-
- var thumbnailPlaceHolderParent = $JssorUtils$.$GetParentNode(templateHolder);
- $JssorUtils$.$InsertBefore(thumbnailPlaceHolderParent, replaceItem, templateHolder);
- $JssorUtils$.$RemoveChild(thumbnailPlaceHolderParent, templateHolder);
- }
-
- return template;
- };
-
- var _MouseDownButtons;
- var _MouseOverButtons = [];
- function JssorButtonEx(elmt) {
- var _Self = this;
-
- var _OriginClassName;
-
- var _IsMouseDown; //class name 'dn'
- var _IsActive; //class name 'av'
-
- function Highlight() {
- var className = _OriginClassName;
-
- if (_IsMouseDown) {
- className += 'dn';
- }
- else if (_IsActive) {
- className += "av";
- }
-
- $JssorUtils$.$SetClassName(elmt, className);
- }
-
- function OnMouseDown(event) {
- _MouseDownButtons.push(_Self);
-
- _IsMouseDown = true;
-
- Highlight();
- }
-
- _Self.$MouseUp = function () {
- ///
- /// Internal member function, do not use it.
- ///
- ///
-
- _IsMouseDown = false;
-
- Highlight();
- };
-
- _Self.$Activate = function (activate) {
- _IsActive = activate;
-
- Highlight();
- };
-
- //JssorButtonEx Constructor
- {
- elmt = self.$GetElement(elmt);
-
- if (!_MouseDownButtons) {
- self.$AddEventBrowserMouseUp(function () {
- var oldMouseDownButtons = _MouseDownButtons;
- _MouseDownButtons = [];
-
- each(oldMouseDownButtons, function (button) {
- button.$MouseUp();
- });
- });
-
- _MouseDownButtons = [];
- }
-
- _OriginClassName = self.$GetClassName(elmt);
-
- $JssorUtils$.$AddEvent(elmt, "mousedown", OnMouseDown);
- }
- }
-
- self.$Buttonize = function (elmt) {
- return new JssorButtonEx(elmt);
- };
-
- self.$Css = Css;
- self.$CssN = CssN;
- self.$CssP = CssP;
-
- self.$CssOverflow = CssProxy("overflow");
-
- self.$CssTop = CssProxy("top", 2);
- self.$CssLeft = CssProxy("left", 2);
- self.$CssWidth = CssProxy("width", 2);
- self.$CssHeight = CssProxy("height", 2);
- self.$CssMarginLeft = CssProxy("marginLeft", 2);
- self.$CssMarginTop = CssProxy("marginTop", 2);
- self.$CssPosition = CssProxy("position");
- self.$CssDisplay = CssProxy("display");
- self.$CssZIndex = CssProxy("zIndex", 1);
- self.$CssFloat = function (elmt, float) {
- return Css(elmt, IsBrowserIE() ? "styleFloat" : "cssFloat", float);
- };
- self.$CssOpacity = function (elmt, opacity, ie9EarlierForce) {
- if (opacity != undefined) {
- SetStyleOpacity(elmt, opacity, ie9EarlierForce);
- }
- else {
- return GetStyleOpacity(elmt);
- }
- };
- self.$CssCssText = function (elmt, text) {
- if (text != undefined) {
- elmt.style.cssText = text;
- }
- else {
- return elmt.style.cssText;
- }
- };
-
- var _StyleGetter = {
- $Opacity: self.$CssOpacity,
- $Top: self.$CssTop,
- $Left: self.$CssLeft,
- $Width: self.$CssWidth,
- $Height: self.$CssHeight,
- $Position: self.$CssPosition,
- $Display: self.$CssDisplay,
- $ZIndex: self.$CssZIndex
- };
-
- //var _StyleGetter = {
- // $Opacity: self.$GetStyleOpacity,
- // $Top: self.$GetStyleTop,
- // $Left: self.$GetStyleLeft,
- // $Width: self.$GetStyleWidth,
- // $Height: self.$GetStyleHeight,
- // $Position: self.$GetStylePosition,
- // $Display: self.$GetStyleDisplay,
- // $ZIndex: self.$GetStyleZIndex
- //};
-
- var _StyleSetterReserved;
-
- //var _StyleSetterReserved = {
- // $Opacity: self.$SetStyleOpacity,
- // $Top: self.$SetStyleTop,
- // $Left: self.$SetStyleLeft,
- // $Width: self.$SetStyleWidth,
- // $Height: self.$SetStyleHeight,
- // $Display: self.$SetStyleDisplay,
- // $Clip: self.$SetStyleClip,
- // $MarginLeft: self.$SetStyleMarginLeft,
- // $MarginTop: self.$SetStyleMarginTop,
- // $Transform: self.$SetStyleTransform,
- // $Position: self.$SetStylePosition,
- // $ZIndex: self.$SetStyleZIndex
- //};
-
- function GetStyleSetter() {
- if (!_StyleSetterReserved) {
- _StyleSetterReserved = self.$Extend({
- $MarginTop: self.$CssMarginTop,
- $MarginLeft: self.$CssMarginLeft,
- $Clip: self.$SetStyleClip,
- $Transform: self.$SetStyleTransform
- }, _StyleGetter);
- }
- return _StyleSetterReserved;
- }
-
- function GetStyleSetterEx() {
- GetStyleSetter();
-
- //For Compression Only
- _StyleSetterReserved.$Transform = _StyleSetterReserved.$Transform;
-
- return _StyleSetterReserved;
- }
-
- self.$GetStyleSetter = GetStyleSetter;
-
- self.$GetStyleSetterEx = GetStyleSetterEx;
-
- self.$GetStyles = function (elmt, originStyles) {
- GetStyleSetter();
-
- var styles = {};
-
- each(originStyles, function (value, key) {
- if (_StyleGetter[key]) {
- styles[key] = _StyleGetter[key](elmt);
- }
- });
-
- return styles;
- };
-
- self.$SetStyles = function (elmt, styles) {
- var styleSetter = GetStyleSetter();
-
- each(styles, function (value, key) {
- styleSetter[key] && styleSetter[key](elmt, value);
- });
- };
-
- self.$SetStylesEx = function (elmt, styles) {
- GetStyleSetterEx();
-
- self.$SetStyles(elmt, styles);
- };
-
- $JssorMatrix$ = new function () {
- var _This = this;
-
- function Multiply(ma, mb) {
- var acs = ma[0].length;
- var rows = ma.length;
- var cols = mb[0].length;
-
- var matrix = [];
-
- for (var r = 0; r < rows; r++) {
- var row = matrix[r] = [];
- for (var c = 0; c < cols; c++) {
- var unitValue = 0;
-
- for (var ac = 0; ac < acs; ac++) {
- unitValue += ma[r][ac] * mb[ac][c];
- }
-
- row[c] = unitValue;
- }
- }
-
- return matrix;
- }
-
- _This.$ScaleX = function (matrix, sx) {
- return _This.$ScaleXY(matrix, sx, 0);
- };
-
- _This.$ScaleY = function (matrix, sy) {
- return _This.$ScaleXY(matrix, 0, sy);
- };
-
- _This.$ScaleXY = function (matrix, sx, sy) {
- return Multiply(matrix, [[sx, 0], [0, sy]]);
- };
-
- _This.$TransformPoint = function (matrix, p) {
- var pMatrix = Multiply(matrix, [[p.x], [p.y]]);
-
- return new $JssorPoint$(pMatrix[0][0], pMatrix[1][0]);
- };
- };
-
- self.$CreateMatrix = function (alpha, scaleX, scaleY) {
- var cos = Math.cos(alpha);
- var sin = Math.sin(alpha);
- //var r11 = cos;
- //var r21 = sin;
- //var r12 = -sin;
- //var r22 = cos;
-
- //var m11 = cos * scaleX;
- //var m12 = -sin * scaleY;
- //var m21 = sin * scaleX;
- //var m22 = cos * scaleY;
-
- return [[cos * scaleX, -sin * scaleY], [sin * scaleX, cos * scaleY]];
- };
-
- self.$GetMatrixOffset = function (matrix, width, height) {
- var p1 = $JssorMatrix$.$TransformPoint(matrix, new $JssorPoint$(-width / 2, -height / 2));
- var p2 = $JssorMatrix$.$TransformPoint(matrix, new $JssorPoint$(width / 2, -height / 2));
- var p3 = $JssorMatrix$.$TransformPoint(matrix, new $JssorPoint$(width / 2, height / 2));
- var p4 = $JssorMatrix$.$TransformPoint(matrix, new $JssorPoint$(-width / 2, height / 2));
-
- return new $JssorPoint$(Math.min(p1.x, p2.x, p3.x, p4.x) + width / 2, Math.min(p1.y, p2.y, p3.y, p4.y) + height / 2);
- };
-};
-
-$JssorAnimator$ = function (delay, duration, options, elmt, fromStyles, toStyles) {
- delay = delay || 0;
-
- var _This = this;
- var _AutoPlay;
- var _Hiden;
- var _CombineMode;
- var _PlayToPosition;
- var _PlayDirection;
- var _NoStop;
- var _TimeStampLastFrame = 0;
-
- var _SubEasings;
- var _SubRounds;
- var _SubDurings;
- var _Callback;
-
- var _Position_Current = 0;
- var _Position_Display = 0;
- var _Hooked;
-
- var _Position_InnerBegin = delay;
- var _Position_InnerEnd = delay + duration;
- var _Position_OuterBegin;
- var _Position_OuterEnd;
- var _LoopLength;
-
- var _NestedAnimators = [];
- var _StyleSetter;
-
- function GetPositionRange(position, begin, end) {
- var range = 0;
-
- if (position < begin)
- range = -1;
-
- else if (position > end)
- range = 1;
-
- return range;
- }
-
- function GetInnerPositionRange(position) {
- return GetPositionRange(position, _Position_InnerBegin, _Position_InnerEnd);
- }
-
- function GetOuterPositionRange(position) {
- return GetPositionRange(position, _Position_OuterBegin, _Position_OuterEnd);
- }
-
- function Shift(offset) {
- _Position_OuterBegin += offset;
- _Position_OuterEnd += offset;
- _Position_InnerBegin += offset;
- _Position_InnerEnd += offset;
-
- _Position_Current += offset;
- _Position_Display += offset;
-
- $JssorUtils$.$Each(_NestedAnimators, function (animator) {
- animator, animator.$Shift(offset);
- });
- }
-
- function Locate(position, relative) {
- var offset = position - _Position_OuterBegin + delay * relative;
-
- Shift(offset);
-
- //$JssorDebug$.$Execute(function () {
- // _This.$Position_InnerBegin = _Position_InnerBegin;
- // _This.$Position_InnerEnd = _Position_InnerEnd;
- // _This.$Position_OuterBegin = _Position_OuterBegin;
- // _This.$Position_OuterEnd = _Position_OuterEnd;
- //});
-
- return _Position_OuterEnd;
- }
-
- function GoToPosition(positionOuter, force) {
- var trimedPositionOuter = positionOuter;
-
- if (_LoopLength && (trimedPositionOuter >= _Position_OuterEnd || trimedPositionOuter <= _Position_OuterBegin)) {
- trimedPositionOuter = ((trimedPositionOuter - _Position_OuterBegin) % _LoopLength + _LoopLength) % _LoopLength + _Position_OuterBegin;
- }
-
- if (!_Hooked || _NoStop || force || _Position_Current != trimedPositionOuter) {
-
- var positionToDisplay = Math.min(trimedPositionOuter, _Position_OuterEnd);
- positionToDisplay = Math.max(positionToDisplay, _Position_OuterBegin);
-
- if (!_Hooked || _NoStop || force || positionToDisplay != _Position_Display) {
- if (toStyles) {
- var currentStyles = toStyles;
-
- if (fromStyles) {
- var interPosition = (positionToDisplay - _Position_InnerBegin) / (duration || 1);
- if (options.$Optimize && $JssorUtils$.$IsBrowserChrome() && duration)
- interPosition = Math.round(interPosition * duration / 16) / duration * 16;
- if (options.$Reverse)
- interPosition = 1 - interPosition;
-
- currentStyles = {};
-
- for (var key in toStyles) {
- var round = _SubRounds[key] || 1;
- var during = _SubDurings[key] || [0, 1];
- var propertyInterPosition = (interPosition - during[0]) / during[1];
- propertyInterPosition = Math.min(Math.max(propertyInterPosition, 0), 1);
- propertyInterPosition = propertyInterPosition * round;
- var floorPosition = Math.floor(propertyInterPosition);
- if (propertyInterPosition != floorPosition)
- propertyInterPosition -= floorPosition;
-
- var easing = _SubEasings[key] || _SubEasings.$Default;
- var easingValue = easing(propertyInterPosition);
- var currentPropertyValue;
- var value = fromStyles[key];
- var toValue = toStyles[key];
-
- if ($JssorUtils$.$IsNumeric(toValue)) {
- currentPropertyValue = value + (toValue - value) * easingValue;
- }
- else {
- currentPropertyValue = $JssorUtils$.$Extend({ $Offset: {} }, fromStyles[key]);
-
- $JssorUtils$.$Each(toValue.$Offset, function (rectX, n) {
- var offsetValue = rectX * easingValue;
- currentPropertyValue.$Offset[n] = offsetValue;
- currentPropertyValue[n] += offsetValue;
- });
- }
- currentStyles[key] = currentPropertyValue;
- }
- }
-
- if (fromStyles.$Zoom) {
- currentStyles.$Transform = { $Rotate: currentStyles.$Rotate || 0, $Scale: currentStyles.$Zoom, $OriginalWidth: options.$OriginalWidth, $OriginalHeight: options.$OriginalHeight };
- }
-
- if (toStyles.$Clip && options.$Move) {
- var styleFrameNClipOffset = currentStyles.$Clip.$Offset;
-
- var offsetY = (styleFrameNClipOffset.$Top || 0) + (styleFrameNClipOffset.$Bottom || 0);
- var offsetX = (styleFrameNClipOffset.$Left || 0) + (styleFrameNClipOffset.$Right || 0);
-
- currentStyles.$Left = (currentStyles.$Left || 0) + offsetX;
- currentStyles.$Top = (currentStyles.$Top || 0) + offsetY;
- currentStyles.$Clip.$Left -= offsetX;
- currentStyles.$Clip.$Right -= offsetX;
- currentStyles.$Clip.$Top -= offsetY;
- currentStyles.$Clip.$Bottom -= offsetY;
- }
-
- if (currentStyles.$Clip && $JssorUtils$.$CanClearClip() && !currentStyles.$Clip.$Top && !currentStyles.$Clip.$Left && (currentStyles.$Clip.$Right == options.$OriginalWidth) && (currentStyles.$Clip.$Bottom == options.$OriginalHeight))
- currentStyles.$Clip = null;
-
- $JssorUtils$.$Each(currentStyles, function (value, key) {
- _StyleSetter[key] && _StyleSetter[key](elmt, value);
- });
- }
-
- _This.$OnInnerOffsetChange(_Position_Display - _Position_InnerBegin, positionToDisplay - _Position_InnerBegin);
- }
-
- _Position_Display = positionToDisplay;
-
- $JssorUtils$.$Each(_NestedAnimators, function (animator, i) {
- var nestedAnimator = positionOuter < _Position_Current ? _NestedAnimators[_NestedAnimators.length - i - 1] : animator;
- nestedAnimator.$GoToPosition(positionOuter, force);
- });
-
- var positionOld = _Position_Current;
- var positionNew = positionOuter;
-
- _Position_Current = trimedPositionOuter;
- _Hooked = true;
-
- _This.$OnPositionChange(positionOld, positionNew);
- }
- }
-
- function Join(animator, combineMode) {
- ///
- /// Combine another animator as nested animator
- ///
- ///
- /// An instance of $JssorAnimator$
- ///
- ///
- /// 0: parallel - place the animator parallel to this animator.
- /// 1: chain - chain the animator at the _Position_InnerEnd of this animator.
- ///
- $JssorDebug$.$Execute(function () {
- if (combineMode !== 0 && combineMode !== 1)
- $JssorDebug$.$Fail("Argument out of range, the value of 'combineMode' should be either 0 or 1.");
- });
-
- if (combineMode)
- animator.$Locate(_Position_OuterEnd, 1);
-
- _Position_OuterEnd = Math.max(_Position_OuterEnd, animator.$GetPosition_OuterEnd());
- _NestedAnimators.push(animator);
- }
-
- function PlayFrame() {
- if (_AutoPlay) {
- var now = $JssorUtils$.$GetNow();
- var timeOffset = Math.min(now - _TimeStampLastFrame, $JssorUtils$.$IsBrowserOpera() ? 80 : 20);
- var timePosition = _Position_Current + timeOffset * _PlayDirection;
- _TimeStampLastFrame = now;
-
- if (timePosition * _PlayDirection >= _PlayToPosition * _PlayDirection)
- timePosition = _PlayToPosition;
-
- GoToPosition(timePosition);
-
- if (!_NoStop && timePosition * _PlayDirection >= _PlayToPosition * _PlayDirection) {
- Stop(_Callback);
- }
- else {
- $JssorUtils$.$Delay(PlayFrame, options.$Interval);
- }
- }
- }
-
- function PlayToPosition(toPosition, callback, noStop) {
- if (!_AutoPlay) {
- _AutoPlay = true;
- _NoStop = noStop
- _Callback = callback;
- toPosition = Math.max(toPosition, _Position_OuterBegin);
- toPosition = Math.min(toPosition, _Position_OuterEnd);
- _PlayToPosition = toPosition;
- _PlayDirection = _PlayToPosition < _Position_Current ? -1 : 1;
- _This.$OnStart();
- _TimeStampLastFrame = $JssorUtils$.$GetNow();
- PlayFrame();
- }
- }
-
- function Stop(callback) {
- if (_AutoPlay) {
- _NoStop = _AutoPlay = _Callback = false;
- _This.$OnStop();
-
- if (callback)
- callback();
- }
- }
-
- _This.$Play = function (positionLength, callback, noStop) {
- PlayToPosition(positionLength ? _Position_Current + positionLength : _Position_OuterEnd, callback, noStop);
- };
-
- _This.$PlayToPosition = function (position, callback, noStop) {
- PlayToPosition(position, callback, noStop);
- };
-
- _This.$PlayToBegin = function (callback, noStop) {
- PlayToPosition(_Position_OuterBegin, callback, noStop);
- };
-
- _This.$PlayToEnd = function (callback, noStop) {
- PlayToPosition(_Position_OuterEnd, callback, noStop);
- };
-
- _This.$Stop = function () {
- Stop();
- };
-
- _This.$Continue = function (toPosition) {
- PlayToPosition(toPosition);
- };
-
- _This.$GetPosition = function () {
- return _Position_Current;
- };
-
- _This.$GetPlayToPosition = function () {
- return _PlayToPosition;
- };
-
- _This.$GetPosition_Display = function () {
- return _Position_Display;
- };
-
- _This.$GoToPosition = GoToPosition;
-
- _This.$GoToBegin = function () {
- GoToPosition(_Position_OuterBegin, true);
- };
-
- _This.$GoToEnd = function () {
- GoToPosition(_Position_OuterEnd, true);
- };
-
- _This.$Move = function (offset) {
- GoToPosition(_Position_Current + offset);
- };
-
- _This.$CombineMode = function () {
- return _CombineMode;
- };
-
- _This.$GetDuration = function () {
- return duration;
- };
-
- _This.$IsPlaying = function () {
- return _AutoPlay;
- };
-
- _This.$IsOnTheWay = function () {
- return _Position_Current > _Position_InnerBegin && _Position_Current <= _Position_InnerEnd;
- };
-
- _This.$SetLoopLength = function (length) {
- _LoopLength = length;
- };
-
- _This.$Locate = Locate;
-
- _This.$Shift = Shift;
-
- _This.$Join = Join;
-
- _This.$Combine = function (animator) {
- ///
- /// Combine another animator parallel to this animator
- ///
- ///
- /// An instance of $JssorAnimator$
- ///
- Join(animator, 0);
- };
-
- _This.$Chain = function (animator) {
- ///
- /// Chain another animator at the _Position_InnerEnd of this animator
- ///
- ///
- /// An instance of $JssorAnimator$
- ///
- Join(animator, 1);
- };
-
- _This.$GetPosition_InnerBegin = function () {
- ///
- /// Internal member function, do not use it.
- ///
- ///
- ///
- return _Position_InnerBegin;
- };
-
- _This.$GetPosition_InnerEnd = function () {
- ///
- /// Internal member function, do not use it.
- ///
- ///
- ///
- return _Position_InnerEnd;
- };
-
- _This.$GetPosition_OuterBegin = function () {
- ///
- /// Internal member function, do not use it.
- ///
- ///
- ///
- return _Position_OuterBegin;
- };
-
- _This.$GetPosition_OuterEnd = function () {
- ///
- /// Internal member function, do not use it.
- ///
- ///
- ///
- return _Position_OuterEnd;
- };
-
- _This.$OnPositionChange = $JssorUtils$.$EmptyFunction;
- _This.$OnStart = $JssorUtils$.$EmptyFunction;
- _This.$OnStop = $JssorUtils$.$EmptyFunction;
- _This.$OnInnerOffsetChange = $JssorUtils$.$EmptyFunction;
- _This.$Version = $JssorUtils$.$GetNow();
-
- //Constructor` 1
- {
- options = $JssorUtils$.$Extend({
- $Interval: 16
- }, options);
-
- //Sodo statement, for development time intellisence only
- $JssorDebug$.$Execute(function () {
- options = $JssorUtils$.$Extend({
- $LoopLength: undefined,
- $Setter: undefined,
- $Easing: undefined
- }, options);
- });
-
- _LoopLength = options.$LoopLength;
-
- _StyleSetter = $JssorUtils$.$Extend({}, $JssorUtils$.$GetStyleSetter(), options.$Setter);
-
- _Position_OuterBegin = _Position_InnerBegin = delay;
- _Position_OuterEnd = _Position_InnerEnd = delay + duration;
-
- var _SubRounds = options.$Round || {};
- var _SubDurings = options.$During || {};
- _SubEasings = $JssorUtils$.$Extend({ $Default: $JssorUtils$.$IsFunction(options.$Easing) && options.$Easing || $JssorEasing$.$EaseSwing }, options.$Easing);
- }
-};
-
-function $JssorPlayerClass$() {
-
- var _SelfPlayer = this;
- var _PlayerControllers = [];
-
- function PlayerController(playerElement) {
- var _SelfPlayerController = this;
- var _PlayerInstance;
- var _PlayerInstantces = [];
-
- function OnPlayerInstanceDataAvailable(event) {
- var srcElement = $JssorUtils$.$GetEventSrcElement(event);
- _PlayerInstance = srcElement.pInstance;
-
- $JssorUtils$.$RemoveEvent(srcElement, "dataavailable", OnPlayerInstanceDataAvailable);
- $JssorUtils$.$Each(_PlayerInstantces, function (playerInstance) {
- if (playerInstance != _PlayerInstance) {
- playerInstance.$Remove();
- }
- });
-
- playerElement.pTagName = _PlayerInstance.tagName;
- _PlayerInstantces = null;
- }
-
- function HandlePlayerInstance(playerInstanceElement) {
- var playerHandler;
-
- if (!playerInstanceElement.pInstance) {
- var playerHandlerAttribute = $JssorUtils$.$GetAttributeEx(playerInstanceElement, "pHandler");
-
- if ($JssorPlayer$[playerHandlerAttribute]) {
- $JssorUtils$.$AddEvent(playerInstanceElement, "dataavailable", OnPlayerInstanceDataAvailable);
- playerHandler = new $JssorPlayer$[playerHandlerAttribute](playerElement, playerInstanceElement);
- _PlayerInstantces.push(playerHandler);
-
- $JssorDebug$.$Execute(function () {
- if ($JssorUtils$.$Type(playerHandler.$Remove) != "function") {
- $JssorDebug$.$Fail("'pRemove' interface not implemented for player handler '" + playerHandlerAttribute + "'.");
- }
- });
- }
- }
-
- return playerHandler;
- }
-
- _SelfPlayerController.$InitPlayerController = function () {
- if (!playerElement.pInstance && !HandlePlayerInstance(playerElement)) {
-
- var playerInstanceElements = $JssorUtils$.$GetChildren(playerElement);
-
- $JssorUtils$.$Each(playerInstanceElements, function (playerInstanceElement) {
- HandlePlayerInstance(playerInstanceElement);
- });
- }
- };
- }
-
- _SelfPlayer.$EVT_SWITCH = 21;
-
- _SelfPlayer.$FetchPlayers = function (elmt) {
- elmt = elmt || document.body;
-
- var playerElements = $JssorUtils$.$FindChildrenByAttribute(elmt, "player", null, true);
-
- $JssorUtils$.$Each(playerElements, function (playerElement) {
- if (!_PlayerControllers[playerElement.pId]) {
- playerElement.pId = _PlayerControllers.length;
- _PlayerControllers.push(new PlayerController(playerElement));
- }
- var playerController = _PlayerControllers[playerElement.pId];
- playerController.$InitPlayerController();
- });
- };
-}
\ No newline at end of file
diff --git a/spree_theme/app/assets/javascripts/scotchPanels.js b/spree_theme/app/assets/javascripts/scotchPanels.js
new file mode 100644
index 00000000..4dd18fc3
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/scotchPanels.js
@@ -0,0 +1,656 @@
+/*
+* scotchPanels - v1.0.3 - 2014-09-25
+* https://github.com/scotch-io/scotch-panels
+* Copyright (c) 2014 Nicholas Cerminara
+*/
+// Start with Semicolon to block
+;(function($) {
+
+ // Enable Strict Mode
+ 'use strict';
+
+ // Create Panels Array
+ var panels = [];
+
+ // Has done CSS3 browser support check?
+ var browserSupportTest = false;
+ var has3d = false;
+ var hasTransitions = false;
+
+ // Plugin Default Settings
+ var defaults = {
+
+ // General Config
+ containerSelector: 'body',
+ type: 'html', // html, iframe, video, image
+
+ // Styles
+ direction: 'top', // top, left, right, bottom
+ duration: 300, // ms
+ transition: 'ease', // linear, ease, ease-in, ease-out, ease-in-out, cubic-bezier(P1x,P1y,P2x,P2y)
+
+ // Browser Support
+ easingPluginTransition: 'easeInCirc',
+ useCSS: true, // Consider not using if have Fixed Elements
+ useEasingPlugin: false, // http://gsgd.co.uk/sandbox/jquery/easing/ only for browser support
+
+ // Image Options
+ imageURL: false,
+
+ // Iframe Options
+ iframeURL: false,
+
+ // Video Options
+ autoPlayVideo: true,
+ youtubeID: false,
+ youTubeTheme: 'light',
+
+ // TranslateX Options
+ distanceX: '70%',
+
+ // TranslateY Options
+ forceMinHeight: false,
+ minHeight: '200px',
+
+ // Triggers
+ closeAfter: 0, // ms
+ startOpened: false,
+ startOpenedDelay: 0, // ms
+
+ // Event Helpers
+ clickSelector: false,
+ enableEscapeKey: true,
+ hoverSelector: false,
+ touchSelector: false,
+
+ // Callbacks
+ beforePanelOpen: function() {},
+ afterPanelOpen: function() {},
+ beforePanelClose: function() {},
+ afterPanelClose: function() {}
+ };
+
+
+ $.fn.scotchPanel = function(options) {
+
+ // Check to see if Default Options are Set
+ if (typeof options === 'undefined') {
+ options = {};
+ }
+
+ // Check to see if an element is even selected
+ if (this.length === 0) return this;
+
+ // Support selecting Panels
+ if (this.length > 1) {
+
+ // Loop through all selected scotch panels
+ this.each(function() {
+ // Add panel to array
+ panels.push($(this).scotchPanel(options));
+ });
+
+ // Public Functions Functionality for all at once
+ panels.open = function() {
+ for (var i = 0; i < panels.length; i++) {
+ panels[i].open();
+ }
+ };
+ panels.close = function() {
+ for (var i = 0; i < panels.length; i++) {
+ panels[i].close();
+ }
+ };
+ panels.toggle = function() {
+ for (var i = 0; i < panels.length; i++) {
+ panels[i].toggle();
+ }
+ };
+
+ // Return the Scotch Panels
+ return panels;
+ }
+
+ // Create Current Scotch Panel Object
+ var panel = {};
+ panel = this;
+
+
+ /*=========================================
+ = PRIVATE FUNCTIONS =
+ =========================================*/
+ // Prep everything
+ var init = function() {
+
+ // Do CSS3 Check!
+ if (!browserSupportTest) {
+ browserSupportTest = true;
+ has3d = browserSupport.transition();
+ hasTransitions = browserSupport.translate3d();
+ }
+
+ // Check for HTML5 data attributes instead
+ for (var key in defaults) {
+ if (defaults.hasOwnProperty(key)) {
+ if (panel.attr('data-'+key.toLowerCase())) {
+ options[key] = panel.data(key.toLowerCase());
+ }
+ }
+ }
+
+ // Merge Custom Plugin Settings with Default
+ panel.settings = $.extend({}, defaults, options);
+
+ // Start DOM and CSS Modifications
+ setup();
+ };
+
+
+ // DOM / CSS Changes / Make Things Happen
+ var setup = function() {
+
+ // Wrap the panel!
+ var container = $(panel.settings.containerSelector);
+ if (!container.hasClass('scotchified')) {
+ container.wrapInner('').addClass('scotchified');
+ }
+
+ // Scotch Panel Wrapper CSS
+ $('.scotch-panel-wrapper').css({
+ 'position': 'relative',
+ 'overflow': 'hidden',
+ 'width': '100%'
+ });
+ // Scotch Panel Canvas CSS
+ $('.scotch-panel-canvas').css({
+ 'position': 'relative',
+ 'height': '100%',
+ 'width': '100%'
+ });
+ // Do 3D Stuff separate
+ if (panel.settings.useCSS) {
+ $('.scotch-panel-canvas').css({
+ '-moz-transform': 'translate3d(0, 0, 0)',
+ '-ms-transform': 'translate3d(0, 0, 0)',
+ '-o-transform': 'translate3d(0, 0, 0)',
+ '-webkit-transform': 'translate3d(0, 0, 0)',
+ 'transform': 'translate3d(0, 0, 0)',
+ '-moz-backface-visibility': 'hidden',
+ '-ms-backface-visibility': 'hidden',
+ '-o-backface-visibility': 'hidden',
+ '-webkit-backface-visibility': 'hidden',
+ 'backface-visibility': 'hidden'
+ });
+ }
+
+ // Figure out which off canvas style is used (left, top, right)
+ if (panel.settings.direction == 'top') {
+ panel.height = panel.height();
+ panel.addClass('scotch-panel-top');
+
+ panel.css({
+ 'bottom': '100%',
+ 'left': '0',
+ 'width': '100%',
+ 'position': 'absolute',
+ 'z-index': '888888',
+ 'overflow': 'hidden'
+ });
+ }
+ if (panel.settings.direction == 'bottom') {
+ panel.height = panel.height();
+ panel.addClass('scotch-panel-bottom');
+
+ panel.css({
+ 'top': '100%',
+ 'left': '0',
+ 'width': '100%',
+ 'position': 'absolute',
+ 'z-index': '888888',
+ 'overflow': 'hidden'
+ });
+ }
+ if (panel.settings.direction == 'left') {
+ panel.addClass('scotch-panel-left');
+
+ panel.css({
+ 'top': '0',
+ 'left': '-' + panel.settings.distanceX,
+ 'width': panel.settings.distanceX,
+ 'height': '100%',
+ 'position': 'absolute',
+ 'z-index': '888888',
+ 'overflow': 'hidden'
+ });
+ }
+ if (panel.settings.direction == 'right') {
+ panel.addClass('scotch-panel-right');
+
+ panel.css({
+ 'top': '0',
+ 'right': '-' + panel.settings.distanceX,
+ 'width': panel.settings.distanceX,
+ 'height': '100%',
+ 'position': 'absolute',
+ 'z-index': '888888',
+ 'overflow': 'hidden'
+ });
+ }
+ panel.css({
+ '-moz-backface-visibility': 'hidden',
+ '-ms-backface-visibility': 'hidden',
+ '-o-backface-visibility': 'hidden',
+ '-webkit-backface-visibility': 'hidden',
+ 'backface-visibility': 'hidden'
+ });
+
+ // Photo Logic
+ if (panel.settings.type == 'image' && panel.settings.imageURL) {
+ panel.css({
+ '-o-background-size': 'cover',
+ '-ms-background-size': 'cover',
+ '-moz-background-size': 'cover',
+ '-webkit-background-size': 'cover',
+ 'background-size': 'cover',
+ 'background-position': '50% 0',
+ 'background-repeat': 'no-repeat',
+ 'background-image': 'url('+panel.settings.imageURL+')'
+ });
+
+ // Update Panel Height if top or bottom
+ if (panel.settings.direction == 'top' || panel.settings.direction == 'bottom') {
+ panel.css('min-height', panel.settings.minHeight);
+ panel.height = $(panel).height();
+ }
+ }
+
+ // Iframe Logic
+ if (panel.settings.type == 'iframe' && panel.settings.iframeURL) {
+ panel.iframeIsLoaded = false;
+ panel.append('');
+
+ // Update Panel Height if top or bottom
+ if (panel.settings.direction == 'top' || panel.settings.direction == 'bottom') {
+ panel.height = $(panel).height();
+ }
+ }
+
+ // YouTube Logic
+ if (panel.settings.type == 'video' && panel.settings.youtubeID) {
+ panel.append('');
+
+ // Update Panel Height if top or bottom
+ if (panel.settings.direction == 'top' || panel.settings.direction == 'bottom') {
+ panel.height = $(panel).height();
+ }
+ }
+
+ // Apply CSS3 Transitions if modern browser
+ if (has3d && hasTransitions) {
+ applyTransition(panel.settings.transition, panel.settings.duration);
+ }
+
+ // Open on Start?
+ if (panel.settings.startOpened) {
+ setTimeout(function(){
+ panel.open();
+ }, panel.settings.startOpenedDelay);
+ }
+
+ // Close after X milliseconds?
+ if (panel.settings.closeAfter != 0) {
+ setTimeout(function(){
+ panel.close();
+ }, panel.settings.closeAfter);
+ }
+ };
+
+
+ // Browser Support Object
+ var browserSupport = {
+ transition: function() {
+ // IE 7 + 8 Sucks
+ if (!window.getComputedStyle) {
+ return false;
+ }
+
+ var b = document.body || document.documentElement,
+ s = b.style,
+ p = 'transition';
+
+ if (typeof s[p] == 'string') { return true; }
+
+ // Tests for vendor specific prop
+ var v = ['Moz', 'webkit', 'Webkit', 'Khtml', 'O', 'ms'];
+ p = p.charAt(0).toUpperCase() + p.substr(1);
+
+ for (var i=0; i 3.0
diff --git a/spree_theme/app/assets/javascripts/spree/frontend/spree_multi_site.js b/spree_theme/app/assets/javascripts/spree/frontend/spree_multi_site.js
new file mode 100644
index 00000000..fa0a16ee
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/spree/frontend/spree_multi_site.js
@@ -0,0 +1 @@
+//= require spree/frontend
diff --git a/spree_theme/app/assets/javascripts/spree/frontend/spree_related_products.js b/spree_theme/app/assets/javascripts/spree/frontend/spree_related_products.js
new file mode 100644
index 00000000..fa0a16ee
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/spree/frontend/spree_related_products.js
@@ -0,0 +1 @@
+//= require spree/frontend
diff --git a/spree_theme/app/assets/javascripts/spree/frontend/spree_theme.js b/spree_theme/app/assets/javascripts/spree/frontend/spree_theme.js
new file mode 100644
index 00000000..7537f983
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/spree/frontend/spree_theme.js
@@ -0,0 +1 @@
+//it is placeholder for test spree ~> 3.0
diff --git a/spree_theme/app/assets/javascripts/store/ckeditor_effect.js b/spree_theme/app/assets/javascripts/store/ckeditor_effect.js
new file mode 100644
index 00000000..08e998b6
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/ckeditor_effect.js
@@ -0,0 +1,94 @@
+// handle effect for ckeditor content
+
+$(document).on('turbolinks:load',function() {
+ //
+ //
+ //
+ //
content 1
+ //
content 2
+ //
+ //
+
+ $(".ck_effect_page_nav a.page").click(function(event){
+ var $this = $(this);
+ var $page_content = $this.parent().siblings('.ck_effect_page_content');
+ var i = $this.prevAll('.page').size();
+ $page_content.children().removeClass('current').hide().eq(i).addClass('current').show();
+ event.preventDefault();
+ })
+ $(".ck_effect_page_nav a.next").click(function(event){
+ var $this = $(this);
+ var $page_content = $this.parent().siblings('.ck_effect_page_content').children('.current');
+ if( $page_content.next().is('*')){
+ $page_content.removeClass('current').hide().next().addClass('current').show();
+ }
+ event.preventDefault();
+ })
+ $(".ck_effect_page_nav a.prev").click(function(event){
+ var $this = $(this);
+ var $page_content = $this.parent().siblings('.ck_effect_page_content').children('.current');
+ if( $page_content.prev().is('*')){
+ $page_content.removeClass('current').hide().prev().addClass('current').show();
+ }
+ event.preventDefault();
+ })
+
+ //http://stackoverflow.com/questions/5811122/how-to-trigger-a-click-on-a-link-using-jquery
+ if( $('.ck_effect_screen_logo').is('*')){
+ window.setTimeout("$('.ck_effect_screen_logo').children().click()", 3000)
+ }
+
+ //
+ $(".ck_effect_hover a").hover(function(event){
+ var $this = $(this);
+ var hover_style = $this.data("hover-style")
+ // background-color:transparent;color:#e20012;background-image:url('http://aliimg.getstore.cn/358/ckeditor_picture/598_arraw.jpg');
+ if( hover_style)
+ {
+ var attrs = _.chain(hover_style.split(";")).map( function( attr ){
+ line = attr.split(':');
+ var cssDirective = line[0].trim();
+ var cssValue = line.slice(1).join(':').trim();
+
+ if (cssDirective.length < 1 || cssValue.length < 1) {
+ return [] //there is no css directive or value that is of length 0
+ }else{
+ return [cssDirective, cssValue]
+ }
+ }).filter( function(attr){ return attr.length==2;}).value();
+ //['color','red'] => { color: 'red' }
+ attrs = _.object(attrs);
+ $this.css( attrs);
+ // it is difficult to parse background-image:url('http://aliimg.getstore.cn/358/ckeditor_picture/598_arraw.jpg'), so just set style
+ // do not use this way, this would discard original style which not in data-style
+ //$this.attr( 'style', hover_style )
+ }
+ },function(event){
+ var $this = $(this);
+ var style = $this.data("style")
+ if( style ) {
+ var attrs = _.chain(style.split(";")).map( function( attr){ return attr.split(':')
+ line = attr.split(':');
+ var cssDirective = line[0].trim();
+ var cssValue = line.slice(1).join(':').trim();
+
+ if (cssDirective.length < 1 || cssValue.length < 1) {
+ return [] //there is no css directive or value that is of length 0
+ }else{
+ return [cssDirective, cssValue]
+ }
+ }).filter( function(attr){ return attr.length==2;}).value();
+
+ attrs = _.object(attrs);
+ $this.css( attrs);
+ //$this.attr( 'style', style )
+
+ }else{
+ $this.css({'background-color': '', 'color':''});
+ }
+ })
+ // style in json, handle background-image:url('http://aliimg.getstore.cn/358/ckeditor_picture/598_arraw.jpg');
+
+})
diff --git a/spree_theme/app/assets/javascripts/store/section_editor.js b/spree_theme/app/assets/javascripts/store/section_editor.js
new file mode 100644
index 00000000..36e1c28f
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/section_editor.js
@@ -0,0 +1,106 @@
+//= require jquery.ajax
+//= require interface.js
+
+$(document).on('turbolinks:load',function() {
+
+ if (typeof(g_client_info) != 'undefined' && g_client_info.is_preview==true)
+ {
+ if (typeof(g_selector_gadget) == 'undefined' || g_selector_gadget == null) {
+ g_selector_gadget = new SelectorGadget();
+ g_selector_gadget.setMode('interactive');
+ }
+ $( "#editor_panel a.close" ).click(
+ function() { $(this).parent().hide(); $( "#editor_panel_icon" ).show();}
+ );
+ $( "#editor_panel_icon" ).click(
+ function() { $( "#editor_panel" ).show(); }
+ );
+
+ //$('body').layout({ applyDefaultStyles: true,
+ // stateManagement__enabled: true //enable stateManagement - automatic cookie load & save enabled by default
+ //});
+
+ //$("#section_select_dialog").dialog({ autoOpen: false,
+ // buttons: { "Cancel": function() { $(this).dialog("close"); },
+ // "OK": function() { submit_layout_tree_form( 'add_child',null, $(this).find('[name="selected_section_id"]').val());
+ // $(this).dialog("close"); }
+ // },
+ // width:500,height:245 });
+
+ $("#section_select_dialog .titles li").click(function(){
+ $(this).parent().children().removeClass('selected');
+ $(this).addClass('selected');
+ $(this).parent().next().children().removeClass('selected');
+ $(this).parent().next().children().eq($(this).index()).addClass('selected');
+ $(this).parent().siblings('input').val($(this).attr('data-section-id'));
+ });
+ $("#section_select_dialog .dialog_close_button").click(function(){
+ $.simplemodal.close();
+ });
+ $("#section_select_dialog .dialog_ok_button").click(function(){
+ $('#selected_section_id').val($('#section_select_dialog [name="selected_section_id"]').val());
+
+ submit_layout_tree_form( this );
+ $.simplemodal.close();
+ });
+ // add, remove, move section
+
+ // event is erase when layout tree updated.
+ $("#layout_tree_form .click_editable").editable(function(value, settings) {
+ var jquery_element = $(this);
+ var url = Spree.routes.admin_page_layouts( jquery_element.data('tid') )+'/'+jquery_element.data('lid');
+ var submitdata = {};
+ submitdata[settings.name] = value;
+ //submitdata[settings.id] = self.id;
+ $.ajax({ dataType: 'json', url: url, type: 'put', data : submitdata,
+ success: function(data){
+ // data is null, "nocontent" returned
+ // jquery_element.html(data.page_layout.title);
+ }
+ });
+ return(value);
+ },
+ { //since dblclick would trigger click, for a link, we should not click,dblclick together
+ event : "click_editable",
+ name : "page_layout[title]",
+ cssclass : "editable",
+ style : "inherit"
+ });
+
+ $(document).on( 'click',"#layout_tree_form .click_editable",function(){
+ self = $(this);
+
+ $('#selected_page_layout_id').val(self.data('lid'));
+ $('#layout_editor_form').trigger('submit');
+
+ });
+
+ $(document).on('mouseover',"#editors .tabs li", function(){
+ $(this).parent().find('a').removeClass('selected');
+ $(this).find('a').addClass('selected');
+ $(this).parent().next().children().hide();
+ $(this).parent().next().children().eq($(this).index()).show();
+ $("#selected_editor_id").val($(this).attr('data-id'));
+ });
+
+ }
+});
+function submit_layout_tree_form ( currentTarget ) {
+ var target = $(currentTarget);
+ var page_layout_id = target.data('id');
+
+ var op = target.data('op');
+ if(op=='list_section'){
+ $('#layout_id').val(page_layout_id);
+ $('#section_select_dialog').simplemodal({ minHeight:300, minWidth: 600,
+ overlayCss:{ 'background-color': 'gray' },
+ containerCss: {'background-color': 'white', 'overflow' :'auto' }
+ });
+ return;
+ }
+
+ $('#op').val(op);
+ // layout_id, selected_section_id could be null.
+ if (page_layout_id) $('#layout_id').val(page_layout_id);
+ $('#layout_tree_form').trigger('submit');
+}
diff --git a/spree_theme/app/assets/javascripts/store/section_effect.js b/spree_theme/app/assets/javascripts/store/section_effect.js
new file mode 100644
index 00000000..bb4cd74e
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/section_effect.js
@@ -0,0 +1,375 @@
+//= require image_zoom
+//= require jquery.menuhover
+//= require jquery.ias.dev
+//= require jquery.sidr
+//= require store/section_effect_scroll
+//= require store/ckeditor_effect
+
+function AddFavorite() {
+ var url = window.location;
+ var title = document.title;
+ var ua = navigator.userAgent.toLowerCase();
+ if (ua.indexOf("360se") > -1) {
+ alert(Spree.translations.unsupported_browser_add_favorite);
+ }
+ else if (ua.indexOf("msie 8") > -1) {
+ window.external.AddToFavoritesBar(url, title); //IE8
+ }
+ else if (document.all) {
+ try{
+ window.external.addFavorite(url, title);
+ }catch(e){
+ alert(Spree.translations.unsupported_browser_add_favorite);
+ }
+ }
+ //else if(window.sidebar) {
+ // // add rel=sidebar
+ // // firefox handle it.
+ //}
+ else {// firefox,chrome,safair
+ alert(Spree.translations.unsupported_browser_add_favorite);
+ }
+}
+
+function SetHome(){
+ try{
+ this.style.behavior='url(#default#homepage)';
+ this.setHomePage(window.location);
+ }catch(e){
+ alert(Spree.translations.unsupported_browser_set_home);
+ }
+}
+
+
+
+$(document).on('turbolinks:load',function() {
+ //return to top
+ $('.return_top').click(function(){
+ //var $element =$(this);
+ //$("#return_top").hide();
+ //$(window).scroll(function(){
+ // if ($(window).scrollTop()>100){
+ // $("#return_top").fadeIn(500);
+ // }
+ // else{
+ // $("#return_top").fadeOut(1500);
+ // }
+ //});
+ $("body,html").animate({scrollTop:0},1000);
+ return false;
+ });
+
+ // change bg,border when hovering
+ $('.hoverable').hover(function(){
+ $('.inner',this).addClass( 'hover' );
+ }, function(){
+ $('.inner',this).removeClass( 'hover' );
+ });
+
+ // like taobao, show big image when hovering product image.
+ $('.zoomable').each(function(i, element){
+ var $element =$(element);
+ var $main_image_wrapper = $element.find('.main_image_wrapper');
+ $element.find('.thumbnails a').click(function(){
+ var $this = $(this);
+ $main_image_wrapper.find('img').data('big-image', $this.find('img').data('big-image'));
+ });
+ $element.imageZoom({
+ zoomType: 'standard',
+ lens:true,
+ preloadImages: false,
+ alwaysOn:false,
+ thumbConfig: {
+ containerSelector: null//'.thumbnails'
+ },
+ zoomViewerConfig:{
+ width: $main_image_wrapper.width()-2, // 2 is border l+r
+ height: $main_image_wrapper.height()-2
+ },
+ zoomPadConfig: {
+ containerSelector: '.main_image_wrapper'
+ }
+ });
+ });
+
+
+ $('.lightboxable').each( function(i, element){
+
+ var $element =$(element);
+ var $main_image = $element.find('.main_image_wrapper img');
+ var jsonData =[];
+ var thumbnails = $element.find('.thumbnails img');
+ if( thumbnails.is('*') ){
+ thumbnails.each(function(j,img){
+ jsonData.push({ url:$(img).data('big-image'), title: img.alt });
+ });
+ }else{
+ jsonData.push({ url:$main_image.data('big-image'), title: $main_image.attr('alt') });
+ }
+
+ $main_image.lightbox({
+ fitToScreen: true,
+ jsonData: jsonData,
+ loopImages: true,
+ imageClickClose: false,
+ disableNavbarLinks: true
+ });
+
+ });
+
+ // scroll to target
+ $('.effect_scroll').click(function() {
+ var $body = (window.opera) ? (document.compatMode == "CSS1Compat" ? $('html') : $('body')) : $('html,body');
+ var $self = $(this);
+ var $target = $($self.attr('href'));
+ if($target.is('*')) {
+ $body.animate({
+ scrollTop : ($target.offset().top - 120)
+ }, 500);
+ return false;
+ }
+ });
+
+
+ if($("#map").is('*')) {
+ // initialize baid map.
+ initMap();
+ };
+
+ // dom
+ // div.hover_effect_xxx
+ // .child_1
+ // .child_2
+ // div.hover_effect_xxx
+ // .child_1
+ // .child_2
+
+ //menu effect slide
+ $(".hover_effect_slide").each(function(index, element) {
+ //nav sliding
+ var height = '' + $('.child_1', element).height() + 'px';
+ var offset = '-' + height;
+ //$('.name',element).css({ height: height});
+ $('.child_2', element).css({
+ bottom : offset,
+ height : height
+ });
+ //nav sliding
+ $(element).hover(function() {
+ $(".child_1", this).stop().animate({
+ top : offset,
+ left : '0px'
+ }, {
+ queue : false,
+ duration : 300
+ });
+ $(".child_2", this).stop().animate({
+ bottom : '0px',
+ left : '0px'
+ }, {
+ queue : false,
+ duration : 300
+ });
+ }, function() {
+ $(".child_1", this).stop().animate({
+ top : '0px',
+ left : '0px'
+ }, {
+ queue : false,
+ duration : 300
+ });
+ $(".child_2", this).stop().animate({
+ bottom : offset,
+ left : '0px'
+ }, {
+ queue : false,
+ duration : 300
+ });
+ });
+ });
+ //
+ $('.hover_effect_show').hover(function() {
+ $('.child_2', this).stop().slideDown();
+ }, function() {
+ $('.child_2', this).stop().slideUp();
+ });
+ //slides the element with class "menu_body" when mouse is over the paragraph
+ $(".hover_effect_expansion .child_1").mouseover(function() {
+ $(this).parents('.hover_effect_expansion').addClass('hovered').siblings().removeClass('hovered');
+ $(this).next(".child_2").slideDown(500);
+ $(this).parents('.hover_effect_expansion').siblings().find('.child_2').slideUp("slow");
+ });
+
+ $(".hover_effect_overlay").hover(function() {
+ var offset = '-' + $('.child_1', this).width() + 'px';
+ $(".child_2", this).stop().animate({
+ top : '0',
+ left : offset
+ }, {
+ queue : false,
+ duration : 400
+ });
+ }, function() {
+ $(".child_2", this).stop().animate({
+ top : '0px',
+ left : '0px'
+ }, {
+ queue : false,
+ duration : 400
+ });
+ });
+ $(".hover_effect_multi_level_menu").each(function(index, element) {
+ // navigation horizental two level menu
+ // menu item1 | menu item2 hovering | menu item3
+ // | menu item21 |
+ // | menu item22 |
+ $("ul ul", element).css({
+ display: "none"
+ }); // Opera Fix
+ $("ul li", element).hover(function() {
+ $(this).find('ul:first').css({
+ visibility: "visible",
+ display: "none"
+ }).slideDown("normal");
+ }, function() {
+ $(this).find('ul:first').css({
+ visibility: "hidden"
+ });
+ });
+
+ });
+ // usage: compute child_2 display position of window for effect popup
+ // html
+ // params: direction- there are five option values t,r,b,l,rl,
+ // it composite of three character.
+ // xya: x axis, y axis, a alignment. ex. lbl, position left bottom, align left
+ function compute_popup_position( $container, direction ){
+ var $self = $container;
+ var child1 = $(".child_1", $self);
+ var child2 = $(".child_2", $self);
+ var offset = child1.offset();
+ // get silbings, get parent.width, get current
+ // get currentTarge.pageX,
+ var position = [0,0];
+ // top, left
+ var block = $(window);
+ var scroll_top = block.scrollTop();
+ var scroll_left = block.scrollLeft();
+ if ( direction == 'rl' ){
+ var p = $self.parent().width() / 2 - $self.position().left - $self.width();
+ if(p >= 0) {// pop up on right side of child2
+ position[0] = offset.top - (child2.height() - child1.height() ) / 2 - scroll_top;
+ position[1] = offset.left + child1.width();
+ } else {// pop up on left side of $self
+ position[0] = offset.top - (child2.height() - child1.height() ) / 2 - scroll_top;
+ position[1] = offset.left - child2.width();
+ }
+ }else if ( direction == 'b' ){
+ position[0] = offset.top + child1.height() - scroll_top;;
+ position[1] = offset.left - (child2.width() - child1.width() ) / 2 - scroll_left;
+ }else if ( direction == 't' ){
+ position[0] = offset.top - child2.height() - scroll_top;;
+ position[1] = offset.left - (child2.width() - child1.width() ) / 2 - scroll_left;
+ }else if ( direction == 'l' ){
+ position[0] = offset.top - (child2.height() - child1.height() ) / 2 - scroll_top;
+ position[1] = offset.left - child2.width();
+ }else if ( direction == 'lbl' ){
+ position[0] = offset.top - (child2.height() - child1.height() ) - scroll_top;
+ position[1] = offset.left - child2.width();
+ }
+ return position;
+ }
+
+ $(".hover_effect_popup").hover(function(e) {
+ var $this = $(this);
+ var direction = 'rl';
+ if ($this.hasClass('direction-t')){
+ direction = 't';
+ }
+ var position = compute_popup_position( $this, direction );
+ //console.log( "pos y=%d, x=%d", position[0], position[1] );
+ $(".child_2", this).simplemodal({
+ appendTo: '#page-wrapper',
+ closeHTML:'', // remove a.close, or get incorrect container demension
+ modal : false,
+ focus : false,
+ position : position,
+ fixed : false
+ });
+ }, function() {
+ $.simplemodal.close();
+ });
+
+ // popup menu, enable mouse hover on popup div, user could click menu on it.
+ $(".hover_effect_popup_menu_l,.hover_effect_popup_menu").each(function(i, element){
+ var $self = $(element);
+ var direction = 'b';// popup at bottom, center as well.
+ if ($self.hasClass('hover_effect_popup_menu_l')){
+ direction = 'l';
+ }else if ($self.hasClass('hover_effect_popup_menu_lbl')){
+ direction = 'lbl';
+ }
+ function activate_element( ){
+ var $hover_effect_container = this.$hover_effect_container;
+ var position = compute_popup_position( $hover_effect_container, direction );
+ //console.log( "pos y=%d, x=%d", position[0], position[1] );
+ $(".child_2", $hover_effect_container).simplemodal({
+ appendTo: '#page-wrapper',
+ closeHTML:'', // remove a.close, or get incorrect container demension
+ modal : false,
+ focus : false,
+ position : position,
+ fixed : false
+ });
+ };
+ function deactivate_element( ){
+ $.simplemodal.close();
+ };
+ var child1 = $(".child_1", this);
+ var child2 = $(".child_2", this);
+ // eliminate empty popup simplemodal
+ if(child2 && child2.children().html().trim().length>0){
+ $(element).menuhover({
+ activate: activate_element,
+ deactivate: deactivate_element,
+ submenuDirection: direction,
+ $hover: child2
+ });
+ }
+ });
+ $(".click_effect_sider").each(function(i, element){
+ var child2 = $(".child_2", element);
+ //var class_names = $(".child_2", element).attr('class').replace(/(^\s+)|(\s+$)/g,"").replace(/\s+/g,'.');
+ $(".child_1", element).sidr({
+ name: 'sidr'+i,
+ body: '#page-inner', // append into page innner, apply page css.
+ displace: false,
+ renaming: false,
+ source: function(){
+ return ( child2.is("*") ? child2[0].outerHTML : "no content");
+ }
+ });
+
+ });
+
+ $(".sidr").on( 'click touchstart',".sidr_close",function(e){
+ //
+ e.stopPropagation();
+ var sidr_name = $(this).parents('.sidr').attr('id');
+ $.sidr( 'close', sidr_name);
+
+ });
+ $("#page").on( 'click touchstart',".sidr_overlay",function(e){
+ //
+ //
+ //sidr0-overlay
+ e.preventDefault();
+ e.stopPropagation();
+ var sidr_name = $(this).attr('id').split('-').shift();
+ $.sidr( 'close',sidr_name);
+ });
+
+});
diff --git a/spree_theme/app/assets/javascripts/store/section_effect.mobile.js b/spree_theme/app/assets/javascripts/store/section_effect.mobile.js
new file mode 100644
index 00000000..84ab9388
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/section_effect.mobile.js
@@ -0,0 +1,56 @@
+
+$(document).on('turbolinks:load',function() {
+ //"content_layout s_551_2 c_549 effect_infinitescroll u_container"
+ var section_css_class_regex = /\bs\_([0-9]+)\_([0-9]+)\b/;
+
+ //$("#page").on( 'tap', '.sidr_overlay', function(e) {
+ // e.stopPropagation();
+ // e.preventDefault(); /* should not trigger link under overlay*/
+ // //sidr0-overlay
+ // var sidr_name = $(this).attr('id').split('-').shift();
+ // $.sidr( 'close', sidr_name );
+ //});
+ // prevent scrolling happen
+ //$('#page').on('drag', '.sidr_overlay', function(e) {
+ // // prevent default horizontal scrolling
+ // e.preventDefault();
+ //});
+
+
+ $('.infinitescroll').each(function(i, element){
+ var $element = $(element);
+ var css_class = $element.attr('class');
+ var matches = css_class.match( section_css_class_regex );
+ var section_css_class = matches[0]
+ var section_id = matches[1];
+//console.debug( section_css_class, '.'+section_css_class+" .pagination .next a")
+ if( $('.pagination', this).is('*') ){
+ var ias = jQuery.ias({
+ container: '.'+section_css_class+"> .inner",
+ item: ' .c_'+section_id,
+ pagination: '.'+section_css_class+" .pagination",
+ next: '.'+section_css_class+" .pagination .next a"
+ });
+ //disable spinner since it maybe always showing if too much scroll event.
+ // shows a spinner (a.k.a. loader)
+ //ias.extension(new IASSpinnerExtension());
+ // shows a trigger after page 3
+ ias.extension(new IASTriggerExtension({offset: 3}));
+ ias.extension(new IASNoneLeftExtension());
+ //$element.infinitescroll({
+ // loading: {
+ // msgText: "努力加载中...",
+ // finishedMsg: "恭喜你,已无更多内容."
+ // },
+ // //debug : true,
+ // contentSelector : '.'+section_css_class+"> .inner",
+ // navSelector : '.'+section_css_class+" .pagination",
+ // // selector for the paged navigation (it will be hidden)
+ // nextSelector : '.'+section_css_class+" .pagination .next a",
+ // // selector for the NEXT link (to page 2)
+ // itemSelector : '.'+section_css_class+' .c_'+section_id,
+ // // selector for all items you'll retrieve
+ //});
+ }
+ });
+});
diff --git a/spree_theme/app/assets/javascripts/store/section_effect_scroll.js b/spree_theme/app/assets/javascripts/store/section_effect_scroll.js
new file mode 100644
index 00000000..a662654c
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/section_effect_scroll.js
@@ -0,0 +1,134 @@
+// it is using jssor.20 for effect slider
+
+$(document).on('turbolinks:load',function() {
+ $(".swiper-container").each(function(index, element) {
+
+ var mySwiper = new Swiper (element, {
+ direction: 'horizontal',
+ loop: true,
+ autoplay: 3000,
+ // 如果需要分页器
+ pagination: '.swiper-pagination',
+
+ // 如果需要前进后退按钮
+ //nextButton: '.swiper-button-next',
+ //prevButton: '.swiper-button-prev',
+
+ // 如果需要滚动条
+ //scrollbar: '.swiper-scrollbar',
+ })
+ })
+ function ScaleSlider(event) {
+ // console.debug( jssor_slider )
+ //Object { data=slider, originalEvent=Event load, type="load", timeStamp=0, more...}
+ var slider = event.data
+ var refSize = slider.$Elmt.parentNode.clientWidth;
+ if (refSize) {
+ refSize = Math.min(refSize, 1920);
+ slider.$ScaleWidth(refSize);
+ }
+ //else {
+ // window.setTimeout(ScaleSlider, 30);
+ //}
+ }
+ // dom structure
+ //
+ //
+ //
+ //
slide1
+ //
slide2
+ //
+ //
+ $(".effect_slider").each(function(index, element) {
+ var $self = $(element);
+ var $parent = $self.parent();
+ //slides
+ var $slides = $self.children("[data-u='slides']");
+ var $arrow_navigator = $self.children(".arrowleft");
+ var $bullet_navigator = $self.children("[data-u='navigator']");
+ // for feature fullwidth
+ var parent_width = $parent.width();
+ // if parent height is 1, use width. it is for product image slider on mobile
+ var height = $slides.height();
+ var width = $slides.width();
+
+ $self.css({ height: height, width: width });
+ $slides.css({ height: height, width: width });
+
+ var transitions = { fade: [{$Duration:1200,$Opacity:2}] };
+ var options = null, slideshow_options=null;
+ var auto_play = ( $slides.data('auto-play') == null ? true : $slides.data('auto-play') );
+ var display_pieces = $slides.data('display-pieces');
+ var transition_name = $slides.data('transition');
+
+
+ if( display_pieces ){
+ var slide_width = $self.find("[data-u='slides']>div").width();
+ var display_piece = Math.ceil( width / slide_width );
+ // get width of a slide
+ options = {
+ $AutoPlay: auto_play, //[Optional] Whether to auto play, to enable slideshow, this option must be set to true, default value is false
+ $AutoPlaySteps: 1, //[Optional] Steps to go for each navigation request (this options applys only when slideshow disabled), the default value is 1
+ $AutoPlayInterval: 0, //[Optional] Interval (in milliseconds) to go for next slide since the previous stopped if the slider is auto playing, default value is 3000
+ $PauseOnHover: 4, //[Optional] Whether to pause when mouse over if a slider is auto playing, 0 no pause, 1 pause for desktop, 2 pause for touch device, 3 pause for desktop and touch device, 4 freeze for desktop, 8 freeze for touch device, 12 freeze for desktop and touch device, default value is 1
+
+ $ArrowKeyNavigation: true, //[Optional] Allows keyboard (arrow key) navigation or not, default value is false
+ $SlideEasing: $JssorEasing$.$EaseLinear, //[Optional] Specifies easing for right to left animation, default value is $JssorEasing$.$EaseOutQuad
+ $SlideDuration: 1600, //[Optional] Specifies default duration (swipe) for slide in milliseconds, default value is 500
+ $MinDragOffsetToSlide: 20, //[Optional] Minimum drag offset to trigger slide , default value is 20
+ $SlideWidth: slide_width, //it is requried //[Optional] Width of every slide in pixels, default value is width of 'slides' container
+ //$SlideHeight: 100, //[Optional] Height of every slide in pixels, default value is height of 'slides' container
+ $SlideSpacing: 0, //[Optional] Space between each slide in pixels, default value is 0
+ $DisplayPieces: display_piece, //it is required //[Optional] Number of pieces to display (the slideshow would be disabled if the value is set to greater than 1), the default value is 1
+ $Cols: display_piece, // new for 2.0
+ $ParkingPosition: 0, //[Optional] The offset position to park slide (this options applys only when slideshow disabled), default value is 0.
+ $UISearchMode: 1, //[Optional] The way (0 parellel, 1 recursive, default value is 1) to search UI components (slides container, loading screen, navigator container, arrow navigator container, thumbnail navigator container etc).
+ $PlayOrientation: 1, //[Optional] Orientation to play slide (for auto play, navigation), 1 horizental, 2 vertical, 5 horizental reverse, 6 vertical reverse, default value is 1
+ $DragOrientation: 1 //[Optional] Orientation to drag slide, 0 no drag, 1 horizental, 2 vertical, 3 either, default value is 1 (Note that the $DragOrientation should be the same as $PlayOrientation when $DisplayPieces is greater than 1, or parking position is not 0)
+ };
+
+ } else{
+ // arrow or bullet navigator
+ options = {
+ $AutoPlay : auto_play,
+ $FillMode : 2
+ };
+ if( $bullet_navigator.is('*')){
+ options['$BulletNavigatorOptions'] = {
+ $Class : $JssorBulletNavigator$,
+ $ChanceToShow : 2,
+ $AutoCenter : 1
+ }
+ }
+ if( $arrow_navigator.is('*')){
+ options['$ArrowNavigatorOptions'] = {
+ $Class : $JssorArrowNavigator$,
+ $ChanceToShow : 1,
+ $AutoCenter : 2
+ }
+ }
+ if( transitions[transition_name] ){
+ options['$SlideshowOptions'] = {
+ $Class: $JssorSlideshowRunner$,
+ $Transitions: transitions[transition_name]
+ }
+ }
+
+ }
+ if( $slides.children().length>0){
+ var jssor_slider1 = new $JssorSlider$($self.get(0), options);
+ //responsive code begin
+ //you can remove responsive code if you don't want the slider scales while window resizes
+ //Scale slider immediately
+ if ( parent_width != width){
+ ScaleSlider({ data:jssor_slider1} );
+ }
+
+ //Scale slider while window load/resize/orientationchange.
+ $(window).bind("load", jssor_slider1, ScaleSlider);
+ $(window).bind("resize",jssor_slider1, ScaleSlider);
+ $(window).bind("orientationchange", jssor_slider1, ScaleSlider);
+ //responsive code end
+ }
+ });
+});
diff --git a/spree_theme/app/assets/javascripts/store/spree_essential_blog.js b/spree_theme/app/assets/javascripts/store/spree_essential_blog.js
new file mode 100644
index 00000000..fa0a16ee
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/spree_essential_blog.js
@@ -0,0 +1 @@
+//= require spree/frontend
diff --git a/spree_theme/app/assets/javascripts/store/spree_theme.client.js b/spree_theme/app/assets/javascripts/store/spree_theme.client.js
index c6cfa32f..51a9714b 100644
--- a/spree_theme/app/assets/javascripts/store/spree_theme.client.js
+++ b/spree_theme/app/assets/javascripts/store/spree_theme.client.js
@@ -1,8 +1,15 @@
-//= require jquery
-//= require jquery.validate/localization/messages_zh-CN.js
-//= require jquery.simplemodal.js
+//= require jquery.validate.min
+//= require jquery.validate/localization/messages_zh-CN
+//= require jquery.lightbox.custom
+//= require store/section_effect
+//= require store/section_editor
+
+$(document).on('turbolinks:load',function() {
+ // disable progress-bar, coolpadwebkit do not support
+ //if( !g_client_info.is_mobile ){
+ // Turbolinks.enableProgressBar();
+ //}
-$(document).ready(function() {
// template theme selection for designer shop
$( "#embeded_content_wrapper" ).hover(
function() { $(this).show(); $( "#embeded_content_wrapper_icon" ).hide();},
@@ -11,21 +18,15 @@ $(document).ready(function() {
$( "#embeded_content_wrapper_icon" ).hover(
function() { $( "#embeded_content_wrapper" ).show(); }
);
-
-});
-$(document).ready(function() {
- // initialize sections
- $($("input.fixed_container").val()).floatBar({
- bodyWidth:980, vertical:"top", moveOnOff:false, focusOnOff:false
- });
- $("input.hover_effect_container").each(function(index, element){
- var children = $(element).siblings('div');
- if( children.length == 2){
- var child1 = $(children[0]); var child2 = $(children[1]);
- child2.on('mouseenter',function(){ child1.show();child2.hide(); })
- child1.on('mouseout', function(){child2.show();child1.hide();})
- }
- })
+
+
+ // code for theme, should move to template_themes.js
+ $(".u_dialog").delegate( "a.cancel,button.cancel", "click",function(){
+ $.simplemodal.close();
+ });
+ // Make flash messages disappear
+ setTimeout('$(".alert-auto-disappear").slideUp()', 5000);
+
});
// copy from project https://github.com/citrus/spree_variant_options
@@ -35,9 +36,9 @@ $(document).ready(function() {
// allow_select_outofstock: By setting allow_select_outofstock to true, when an user selects variant options it will automatically update any form's input variant_id with an data-form-type="variant" attribute.
// default_instock: (default: false) If this is option is set to true, it will automatically preselect in-stock variant options.
function VariantOptions(params) {
- var view_style = params['view_style']
+ var view_style = params['view_style'];
var options = params['options'];
- var container_selector = params['container_selector']
+ var container_selector = params['container_selector'];
var allow_backorders = !params['track_inventory_levels'] || params['allow_backorders'];
var allow_select_outofstock = params['allow_select_outofstock'];
var default_instock = params['default_instock'];
@@ -45,7 +46,7 @@ function VariantOptions(params) {
var option_types, option_values_container, index = 0;
// option_types: all option_types included option_values
// option_values_container: a container for option_values of an option_type
- var available_variant_ids = []; // base on selected option value, there are some available variant ids
+ var available_variant_ids = []; // base on selected option value, there are some available variant ids
var buttons;
@@ -63,7 +64,7 @@ function VariantOptions(params) {
});
}
}
-
+
// set current option type
function update(i) {
index = isNaN(i) ? index : i;
@@ -76,15 +77,15 @@ function VariantOptions(params) {
}
// enable option values of current option type
function enable(btns) {
- var bt = btns.not('.unavailable').removeClass('locked')
+ var bt = btns.not('.unavailable').removeClass('locked');
if (!allow_select_outofstock && !allow_backorders){
- bt = bt.filter('.in-stock')
- }
+ bt = bt.filter('.in-stock');
+ }
return bt.filter('.auto-click').removeClass('auto-click').click();
}
function advance() {
- index++
+ index++;
update();
inventory(buttons.removeClass('locked'));
enable(buttons);
@@ -108,14 +109,14 @@ function VariantOptions(params) {
var a = $(this);
//return if has class unavailable locked
if( a.hasClass("unavailable") || a.hasClass("locked")){
- return
+ return;
}
//if (!allow_select_outofstock && !allow_backorders){
// bt = bt.filter('.in-stock')
- //}
-
+ //}
+
if (a.filter('.selected').length>0){
- // unclick selected,
+ // unclick selected,
clear(option_types.index(a.parents('.variant-option:first')));
}else{
if (!option_values_container.has(a).length) {
@@ -126,8 +127,8 @@ function VariantOptions(params) {
advance();
if (target_variant=find_variant()) {
toggle(target_variant);
- }
- }
+ }
+ }
}
@@ -158,27 +159,28 @@ function VariantOptions(params) {
function hide_all_variant_images() {
$('li.vtmb').hide();
}
-
+
function inventory(btns) {
// for each option_value there is collection of available variants
- // given option_values, Intersection of those collections is final available variants
+ // given option_values, Intersection of those collections is final available variants
var variant_ids, variants, count = 0, selected = {};
- var sels = $.map(option_types.find('a.selected'), function(i) { return i.rel });
-
+ var sels = $.map(option_types.find('a.selected'), function(i) { return i.rel; });
+
variants = get_variant_objects(sels);
- available_variant_ids = $.map(variants, function(i) { return i.id });
+ available_variant_ids = $.map(variants, function(i) { return i.id; });
btns.removeClass('in-stock out-of-stock unavailable').each(function(i, element) {
variants = get_variant_objects([].concat( sels, element.rel));
- variant_ids = $.map(variants, function(i) { return i.id });
+ variant_ids = $.map(variants, function(i) { return i.id; });
if (variant_ids.length == 0) {
disable($(element).addClass('unavailable locked'));
} else if (variant_ids.length == 1) {
var _var = variants.pop();
- $(element).addClass((allow_backorders || _var.count) ? available_variant_ids.length == 1 ? 'in-stock auto-click' : 'in-stock' : 'out-of-stock');
+ $(element).addClass((allow_backorders ||_var.in_stock) ? available_variant_ids.length == 1 ? 'in-stock auto-click' : 'in-stock' : 'out-of-stock');
+ //$(element).addClass((allow_backorders || _var.count) ? available_variant_ids.length == 1 ? 'in-stock auto-click' : 'in-stock' : 'out-of-stock');
} else if (allow_backorders) {
$(element).addClass('in-stock');
} else {
- $.each(variants, function(variant) { count += variant.count });
+ $.each(variants, function(variant) { count += (variant.in_stock ? 1 : 0); });
$(element).addClass(count ? 'in-stock' : 'out-of-stock');
}
});
@@ -189,10 +191,10 @@ function VariantOptions(params) {
//------------------------------------------------------------------------------------------
function init_for_slide_style() {
option_types = $(container_selector+" .variant-option");
- option_types.find('a.option-value').click( handle_click_for_slide_style );
+ option_types.find('a.option-value').click( handle_click_for_slide_style );
$(container_selector+' button.next').click( next_step_click );
$(container_selector+' button.back').click( back_step_click );
-
+
initialize_option_view();
}
@@ -202,21 +204,21 @@ function VariantOptions(params) {
update_model();
// hide button back if index =0
if (index==0){
- $(container_selector+' button.back').attr('disabled', true);
+ $(container_selector+' button.back').attr('disabled', true);
}else{
- $(container_selector+' button.back').attr('disabled', false);
+ $(container_selector+' button.back').attr('disabled', false);
}
if ((index+1) == option_types.length){
- $(container_selector+' button.next').attr('disabled', true);
+ $(container_selector+' button.next').attr('disabled', true);
}else{
- $(container_selector+' button.next').attr('disabled', false);
+ $(container_selector+' button.next').attr('disabled', false);
}
-
+
// select one, or no option image show.
if( option_values_container.find("a.option-value.selected").length == 0) {
option_values_container.find("a.option-value:first").click();
}
- option_values_container.show()
+ option_values_container.show();
}
// update
// update data, option_values_container,buttons
@@ -224,49 +226,49 @@ function VariantOptions(params) {
option_values_container = $(option_types.get(index));
buttons = option_values_container.find('a.option-value');
}
-
- // update price?
+
+ // update price?
function update_view() {
- //show
+ //show
var option_type_id_and_option_value_id = buttons.filter('.selected').attr('rel').split('-');
option_values_container.find(' .olge').hide();
option_values_container.find(' .lge-'+option_type_id_and_option_value_id[1]).show();
}
-
+
function next_step_click() {
index++;
initialize_option_view();
}
-
+
function back_step_click() {
index--;
initialize_option_view();
}
-
+
function handle_click_for_slide_style(evt) {
evt.preventDefault();
var a = $(this);
var target_variant= null;
//return if has class unavailable locked
if( a.hasClass("unavailable") || a.hasClass("locked")|| a.hasClass("selected")){
- return
- }
+ return;
+ }
buttons.not(a).removeClass('selected');
a.addClass('selected');
-
+
update_view();
-
- target_variant=find_variant()
+
+ target_variant=find_variant();
toggle(target_variant);
-
+
}
// end slide style
//==========================================================================================
-
+
//==========================================================================================
// common method for option value
//------------------------------------------------------------------------------------------
-
+
function index_of_array(array, obj) {
for(var i = 0; i < array.length; i++){
if(array[i] == obj) {
@@ -275,21 +277,21 @@ function VariantOptions(params) {
}
return -1;
}
-
+
function to_f(string) {
return parseFloat(string.replace(/[^\d\.]/g, ''));
}
function find_variant() {
- var form_container = $(container_selector).parents('form:first')
- var rels = $.map(option_types.find('a.selected'), function(i) { return i.rel });
+ var form_container = $(container_selector).parents('form:first');
+ var rels = $.map(option_types.find('a.selected'), function(i) { return i.rel; });
var variants = get_variant_objects(rels);
if (rels.length == option_types.length) {
return variants.pop();
} else {
var prices = [];
- $.each(variants, function(i, variant) { prices.push(variant.price) });
+ $.each(variants, function(i, variant) { prices.push(variant.price); });
prices = $.unique(prices).sort(function(a, b) {
return to_f(a) < to_f(b) ? -1 : 1;
});
@@ -301,16 +303,16 @@ function VariantOptions(params) {
return false;
}
}
-
+
// get variants by selected option_vlaues
function get_variant_objects(rels) {
- var variant_objects = []
+ var variant_objects = [];
var i, ids, obj, variants = {};
if (typeof(rels) == 'string') { rels = [rels]; }
var otid, ovid, opt, opv;
i = rels.length;
try {
- for(var i=0; i 0 || allow_backorders)
+ if (target_variant.in_stock || allow_backorders)
form_container.find('button[type=submit]').attr('disabled', false).fadeTo(100, 1);
try {
show_variant_images(target_variant.id);
@@ -347,17 +349,17 @@ function VariantOptions(params) {
} else {
form_container.find('input.variant_id').val('');
form_container.find('button[type=submit]').attr('disabled', true).fadeTo(0, 0.5);
- var price = form_container.find('.price').addClass('unselected')
+ var price = form_container.find('.price').addClass('unselected');
// Replace product price by "(select)" only when there are at least 1 variant not out-of-stock
- var variants = $("div.variant-option.index-0")
+ var variants = $("div.variant-option.index-0");
if (variants.find("a.option-value.out-of-stock").length != variants.find("a.option-value").length)
price.text('(select)');
}
}
- // end common methods
+ // end common methods
//==========================================================================================
-
+
// it is unused for now.
function option_value_click_handler(){
evt.preventDefault();
@@ -365,16 +367,18 @@ function VariantOptions(params) {
var a = $(this);
//return if has class unavailable locked selected
if( a.hasClass("unavailable") || a.hasClass("locked") || a.hasClass("selected")){
- return
- }
+ return;
+ }
// select option type
// select current clicked option value
- // correct next all selected option value
- }
-
- if( view_style == 'slide' ){
- $(document).ready(init_for_slide_style);
- }else{
- $(document).ready(init);
+ // correct next all selected option value
}
+ // FIXME turbolinks use event turbolinks:load
+ //if( Object.getOwnPropertyNames(options).length>0){
+ // if( view_style == 'slide' ){
+ // $(document).ready(init_for_slide_style);
+ // }else{
+ // $(document).ready(init);
+ // }
+ //}
};
diff --git a/spree_theme/app/assets/javascripts/store/spree_theme.js b/spree_theme/app/assets/javascripts/store/spree_theme.js
index b7518535..590f4c1b 100644
--- a/spree_theme/app/assets/javascripts/store/spree_theme.js
+++ b/spree_theme/app/assets/javascripts/store/spree_theme.js
@@ -1,81 +1,12 @@
+//= require underscore-min
//= require jquery
//= require jquery_ujs
//= require jquery.form
-//= require jquery.layout
-//= require jquery.ajax
-//= require jssor.slider.one
+//= require jquery.simplemodal
+//= require jssor.slider.20.min
+//= require swiper.jquery.min
//= require spree/frontend
//= require store/spree_theme.client
-//= require interface.js
+//= require store/spree_theme.routes
//= require jquery.jeditable.js
-//= require jquery.floatBar.js
-
-$(document).ready(function() {
- if (typeof(g_is_preview) != 'undefined' && g_is_preview==true)
- {
- if (typeof(g_selector_gadget) == 'undefined' || g_selector_gadget == null) {
- g_selector_gadget = new SelectorGadget();
- g_selector_gadget.setMode('interactive');
- }
-
- $('body').layout({ applyDefaultStyles: true,
- stateManagement__enabled: true // enable stateManagement - automatic cookie load & save enabled by default
- });
-
- //$("#section_select_dialog").dialog({ autoOpen: false,
- // buttons: { "Cancel": function() { $(this).dialog("close"); },
- // "OK": function() { submit_layout_tree_form( 'add_child',null, $(this).find('[name="selected_section_id"]').val());
- // $(this).dialog("close"); }
- // },
- // width:500,height:245 });
-
- $("#section_select_dialog .titles li").click(function(){
- $(this).parent().children().removeClass('selected');
- $(this).addClass('selected');
- $(this).parent().next().children().removeClass('selected');
- $(this).parent().next().children().eq($(this).index()).addClass('selected');
- $(this).parent().siblings('input').val($(this).attr('data-section-id'))
- });
- $("#section_select_dialog .dialog_close_button").click(function(){
- $.modal.close();
- })
- $("#section_select_dialog .dialog_ok_button").click(function(){
- submit_layout_tree_form( 'add_child',null, $('#section_select_dialog [name="selected_section_id"]').val());
- $.modal.close();
- })
- // add, remove, move section
- $('.add_section_button').click(function(){
- var page_layout_id = $(this).data('id');
- $('#layout_id').val(page_layout.id);
- $('#section_select_dialog').modal({ minHeight:300, minWidth: 600 });
- })
- $('.remove_section_button').click(function(){
- var page_layout_id = $(this).data('id');
- if (confirm('Really?')) submit_layout_tree_form('del_self', page_layout.id )
- })
- $('.move_section_to_left_button').click(function(){
- var page_layout_id = $(this).data('id');
- submit_layout_tree_form('move_left',page_layout.id )
- })
- $('.move_section_to_right_button').click(function(){
- var page_layout_id = $(this).data('id');
- submit_layout_tree_form('move_right',page_layout.id )
- })
- $('.promote_section_button').click(function(){
- var page_layout_id = $(this).data('id');
- submit_layout_tree_form('promote',page_layout.id )
- })
- $('.demote_section_button').click(function(){
- var page_layout_id = $(this).data('id');
- submit_layout_tree_form('demote',page_layout.id )
- })
- }
-})
-function submit_layout_tree_form (op, layout_id, selected_section_id) {
- $('#op').val(op);
- // layout_id, selected_section_id could be null.
- if (layout_id) $('#layout_id').val(layout_id);
- if (selected_section_id) $('#selected_section_id').val(selected_section_id);
- $('#layout_tree_form').trigger('submit');
-}
-
+//= require turbolinks
diff --git a/spree_theme/app/assets/javascripts/store/spree_theme.login.js b/spree_theme/app/assets/javascripts/store/spree_theme.login.js
new file mode 100644
index 00000000..52e9ebc1
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/spree_theme.login.js
@@ -0,0 +1 @@
+//= require spree
diff --git a/spree_theme/app/assets/javascripts/store/spree_theme.mobile.js b/spree_theme/app/assets/javascripts/store/spree_theme.mobile.js
new file mode 100644
index 00000000..bbacf445
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/spree_theme.mobile.js
@@ -0,0 +1,14 @@
+//= require jquery
+//= require jquery_ujs
+//= require jquery.form
+//= require jquery.finger.16.min
+//= require jquery.simplemodal.mobile
+//= require jssor.slider.20.min
+//= require spree/frontend
+//= require store/spree_theme.client
+//= require store/spree_theme.routes
+//= require jquery.jeditable.js
+// require bootstrap-sprockets
+//= require store/section_effect.mobile
+//= require store/weixin_support
+//= require turbolinks
diff --git a/spree_theme/app/assets/javascripts/store/spree_theme.routes.js b/spree_theme/app/assets/javascripts/store/spree_theme.routes.js
new file mode 100644
index 00000000..1cf93825
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/spree_theme.routes.js
@@ -0,0 +1,5 @@
+
+Spree.routes.admin_template_themes = Spree.pathFor('admin/template_themes')
+Spree.routes.admin_page_layouts = function(template_theme_id) {
+ return Spree.pathFor('admin/template_themes/'+template_theme_id+'/page_layouts')
+}
diff --git a/spree_theme/app/assets/javascripts/store/weixin_support.js b/spree_theme/app/assets/javascripts/store/weixin_support.js
new file mode 100644
index 00000000..18833b25
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/store/weixin_support.js
@@ -0,0 +1,39 @@
+//= require jweixin-1.1.0
+//= require store/weixin_support
+
+if( g_client_info.is_weixin && getstore.wx_cfg_params ){
+ wx.config({
+ debug: getstore.wx_cfg_params.debug,
+ appId: getstore.wx_cfg_params.app_id,
+ timestamp: getstore.wx_cfg_params.timestamp,
+ nonceStr: getstore.wx_cfg_params.nonce_str,
+ signature: getstore.wx_cfg_params.signature,
+ jsApiList: getstore.wx_cfg_params.js_api_list
+ });
+
+ wx.ready(function () {
+ wx.onMenuShareTimeline({
+ title: getstore.share_data.desc,
+ desc:getstore.share_data.title,
+ link: getstore.share_data.link,
+ imgUrl: getstore.share_data.img_url,
+ success: function () {
+ },
+ cancel: function () {
+ }
+ });
+ wx.onMenuShareAppMessage({
+ title: getstore.share_data.title,
+ desc: getstore.share_data.desc,
+ link: getstore.share_data.link,
+ imgUrl: getstore.share_data.img_url,
+ type: '',
+ dataUrl: '',
+ success: function () {
+ },
+ cancel: function () {
+ }
+ });
+ });
+
+}
diff --git a/spree_theme/app/assets/javascripts/superfish.js b/spree_theme/app/assets/javascripts/superfish.js
new file mode 100644
index 00000000..d594a739
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/superfish.js
@@ -0,0 +1,262 @@
+/*
+ * jQuery Superfish Menu Plugin - v1.7.5
+ * Copyright (c) 2014 Joel Birch
+ *
+ * Dual licensed under the MIT and GPL licenses:
+ * http://www.opensource.org/licenses/mit-license.php
+ * http://www.gnu.org/licenses/gpl.html
+ */
+
+;(function ($, w) {
+ "use strict";
+
+ var methods = (function () {
+ // private properties and methods go here
+ var c = {
+ bcClass: 'sf-breadcrumb',
+ menuClass: 'sf-js-enabled',
+ anchorClass: 'sf-with-ul',
+ menuArrowClass: 'sf-arrows'
+ },
+ ios = (function () {
+ var ios = /iPhone|iPad|iPod/i.test(navigator.userAgent);
+ if (ios) {
+ // iOS clicks only bubble as far as body children
+ $(w).load(function () {
+ $('body').children().on('click', $.noop);
+ });
+ }
+ return ios;
+ })(),
+ wp7 = (function () {
+ var style = document.documentElement.style;
+ return ('behavior' in style && 'fill' in style && /iemobile/i.test(navigator.userAgent));
+ })(),
+ unprefixedPointerEvents = (function () {
+ return (!!w.PointerEvent);
+ })(),
+ toggleMenuClasses = function ($menu, o) {
+ var classes = c.menuClass;
+ if (o.cssArrows) {
+ classes += ' ' + c.menuArrowClass;
+ }
+ $menu.toggleClass(classes);
+ },
+ setPathToCurrent = function ($menu, o) {
+ return $menu.find('li.' + o.pathClass).slice(0, o.pathLevels)
+ .addClass(o.hoverClass + ' ' + c.bcClass)
+ .filter(function () {
+ return ($(this).children(o.popUpSelector).hide().show().length);
+ }).removeClass(o.pathClass);
+ },
+ toggleAnchorClass = function ($li) {
+ $li.children('a').toggleClass(c.anchorClass);
+ },
+ toggleTouchAction = function ($menu) {
+ var msTouchAction = $menu.css('ms-touch-action');
+ var touchAction = $menu.css('touch-action');
+ touchAction = touchAction || msTouchAction;
+ touchAction = (touchAction === 'pan-y') ? 'auto' : 'pan-y';
+ $menu.css({
+ 'ms-touch-action': touchAction,
+ 'touch-action': touchAction
+ });
+ },
+ applyHandlers = function ($menu, o) {
+ var targets = 'li:has(' + o.popUpSelector + ')';
+ if ($.fn.hoverIntent && !o.disableHI) {
+ $menu.hoverIntent(over, out, targets);
+ }
+ else {
+ $menu
+ .on('mouseenter.superfish', targets, over)
+ .on('mouseleave.superfish', targets, out);
+ }
+ var touchevent = 'MSPointerDown.superfish';
+ if (unprefixedPointerEvents) {
+ touchevent = 'pointerdown.superfish';
+ }
+ if (!ios) {
+ touchevent += ' touchend.superfish';
+ }
+ if (wp7) {
+ touchevent += ' mousedown.superfish';
+ }
+ $menu
+ .on('focusin.superfish', 'li', over)
+ .on('focusout.superfish', 'li', out)
+ .on(touchevent, 'a', o, touchHandler);
+ },
+ touchHandler = function (e) {
+ var $this = $(this),
+ $ul = $this.siblings(e.data.popUpSelector);
+
+ if ($ul.length > 0 && $ul.is(':hidden')) {
+ $this.one('click.superfish', false);
+ if (e.type === 'MSPointerDown' || e.type === 'pointerdown') {
+ $this.trigger('focus');
+ } else {
+ $.proxy(over, $this.parent('li'))();
+ }
+ }
+ },
+ over = function () {
+ var $this = $(this),
+ o = getOptions($this);
+ clearTimeout(o.sfTimer);
+ $this.siblings().superfish('hide').end().superfish('show');
+ },
+ out = function () {
+ var $this = $(this),
+ o = getOptions($this);
+ if (ios) {
+ $.proxy(close, $this, o)();
+ }
+ else {
+ clearTimeout(o.sfTimer);
+ o.sfTimer = setTimeout($.proxy(close, $this, o), o.delay);
+ }
+ },
+ close = function (o) {
+ o.retainPath = ($.inArray(this[0], o.$path) > -1);
+ this.superfish('hide');
+
+ if (!this.parents('.' + o.hoverClass).length) {
+ o.onIdle.call(getMenu(this));
+ if (o.$path.length) {
+ $.proxy(over, o.$path)();
+ }
+ }
+ },
+ getMenu = function ($el) {
+ return $el.closest('.' + c.menuClass);
+ },
+ getOptions = function ($el) {
+ return getMenu($el).data('sf-options');
+ };
+
+ return {
+ // public methods
+ hide: function (instant) {
+ if (this.length) {
+ var $this = this,
+ o = getOptions($this);
+ if (!o) {
+ return this;
+ }
+ var not = (o.retainPath === true) ? o.$path : '',
+ $ul = $this.find('li.' + o.hoverClass).add(this).not(not).removeClass(o.hoverClass).children(o.popUpSelector),
+ speed = o.speedOut;
+
+ if (instant) {
+ $ul.show();
+ speed = 0;
+ }
+ o.retainPath = false;
+ o.onBeforeHide.call($ul);
+ $ul.stop(true, true).animate(o.animationOut, speed, function () {
+ var $this = $(this);
+ o.onHide.call($this);
+ });
+ }
+ return this;
+ },
+ show: function () {
+ var o = getOptions(this);
+ if (!o) {
+ return this;
+ }
+ var $this = this.addClass(o.hoverClass),
+ $ul = $this.children(o.popUpSelector);
+
+ o.onBeforeShow.call($ul);
+ $ul.stop(true, true).animate(o.animation, o.speed, function () {
+ o.onShow.call($ul);
+ });
+ return this;
+ },
+ destroy: function () {
+ return this.each(function () {
+ var $this = $(this),
+ o = $this.data('sf-options'),
+ $hasPopUp;
+ if (!o) {
+ return false;
+ }
+ $hasPopUp = $this.find(o.popUpSelector).parent('li');
+ clearTimeout(o.sfTimer);
+ toggleMenuClasses($this, o);
+ toggleAnchorClass($hasPopUp);
+ toggleTouchAction($this);
+ // remove event handlers
+ $this.off('.superfish').off('.hoverIntent');
+ // clear animation's inline display style
+ $hasPopUp.children(o.popUpSelector).attr('style', function (i, style) {
+ return style.replace(/display[^;]+;?/g, '');
+ });
+ // reset 'current' path classes
+ o.$path.removeClass(o.hoverClass + ' ' + c.bcClass).addClass(o.pathClass);
+ $this.find('.' + o.hoverClass).removeClass(o.hoverClass);
+ o.onDestroy.call($this);
+ $this.removeData('sf-options');
+ });
+ },
+ init: function (op) {
+ return this.each(function () {
+ var $this = $(this);
+ if ($this.data('sf-options')) {
+ return false;
+ }
+ var o = $.extend({}, $.fn.superfish.defaults, op),
+ $hasPopUp = $this.find(o.popUpSelector).parent('li');
+ o.$path = setPathToCurrent($this, o);
+
+ $this.data('sf-options', o);
+
+ toggleMenuClasses($this, o);
+ toggleAnchorClass($hasPopUp);
+ toggleTouchAction($this);
+ applyHandlers($this, o);
+
+ $hasPopUp.not('.' + c.bcClass).superfish('hide', true);
+
+ o.onInit.call(this);
+ });
+ }
+ };
+ })();
+
+ $.fn.superfish = function (method, args) {
+ if (methods[method]) {
+ return methods[method].apply(this, Array.prototype.slice.call(arguments, 1));
+ }
+ else if (typeof method === 'object' || ! method) {
+ return methods.init.apply(this, arguments);
+ }
+ else {
+ return $.error('Method ' + method + ' does not exist on jQuery.fn.superfish');
+ }
+ };
+
+ $.fn.superfish.defaults = {
+ popUpSelector: 'ul,.sf-mega', // within menu context
+ hoverClass: 'sfHover',
+ pathClass: 'overrideThisToUse',
+ pathLevels: 1,
+ delay: 800,
+ animation: {opacity: 'show'},
+ animationOut: {opacity: 'hide'},
+ speed: 'normal',
+ speedOut: 'fast',
+ cssArrows: true,
+ disableHI: false,
+ onInit: $.noop,
+ onBeforeShow: $.noop,
+ onShow: $.noop,
+ onBeforeHide: $.noop,
+ onHide: $.noop,
+ onIdle: $.noop,
+ onDestroy: $.noop
+ };
+
+})(jQuery, window);
diff --git a/spree_theme/app/assets/javascripts/swiper.jquery.min.js b/spree_theme/app/assets/javascripts/swiper.jquery.min.js
new file mode 100644
index 00000000..3d379c7b
--- /dev/null
+++ b/spree_theme/app/assets/javascripts/swiper.jquery.min.js
@@ -0,0 +1,18 @@
+/**
+ * Swiper 3.4.2
+ * Most modern mobile touch slider and framework with hardware accelerated transitions
+ *
+ * http://www.idangero.us/swiper/
+ *
+ * Copyright 2017, Vladimir Kharlampidi
+ * The iDangero.us
+ * http://www.idangero.us/
+ *
+ * Licensed under MIT
+ *
+ * Released on: March 10, 2017
+ */
+!function(){"use strict";var e,a=function(t,s){function r(e){return Math.floor(e)}function i(){var e=x.params.autoplay,a=x.slides.eq(x.activeIndex);a.attr("data-swiper-autoplay")&&(e=a.attr("data-swiper-autoplay")||x.params.autoplay),x.autoplayTimeoutId=setTimeout(function(){x.params.loop?(x.fixLoop(),x._slideNext(),x.emit("onAutoplay",x)):x.isEnd?s.autoplayStopOnLast?x.stopAutoplay():(x._slideTo(0),x.emit("onAutoplay",x)):(x._slideNext(),x.emit("onAutoplay",x))},e)}function n(a,t){var s=e(a.target);if(!s.is(t))if("string"==typeof t)s=s.parents(t);else if(t.nodeType){var r;return s.parents().each(function(e,a){a===t&&(r=t)}),r?t:void 0}if(0!==s.length)return s[0]}function o(e,a){a=a||{};var t=window.MutationObserver||window.WebkitMutationObserver,s=new t(function(e){e.forEach(function(e){x.onResize(!0),x.emit("onObserverUpdate",x,e)})});s.observe(e,{attributes:void 0===a.attributes||a.attributes,childList:void 0===a.childList||a.childList,characterData:void 0===a.characterData||a.characterData}),x.observers.push(s)}function l(e){e.originalEvent&&(e=e.originalEvent);var a=e.keyCode||e.charCode;if(!x.params.allowSwipeToNext&&(x.isHorizontal()&&39===a||!x.isHorizontal()&&40===a))return!1;if(!x.params.allowSwipeToPrev&&(x.isHorizontal()&&37===a||!x.isHorizontal()&&38===a))return!1;if(!(e.shiftKey||e.altKey||e.ctrlKey||e.metaKey||document.activeElement&&document.activeElement.nodeName&&("input"===document.activeElement.nodeName.toLowerCase()||"textarea"===document.activeElement.nodeName.toLowerCase()))){if(37===a||39===a||38===a||40===a){var t=!1;if(x.container.parents("."+x.params.slideClass).length>0&&0===x.container.parents("."+x.params.slideActiveClass).length)return;var s={left:window.pageXOffset,top:window.pageYOffset},r=window.innerWidth,i=window.innerHeight,n=x.container.offset();x.rtl&&(n.left=n.left-x.container[0].scrollLeft);for(var o=[[n.left,n.top],[n.left+x.width,n.top],[n.left,n.top+x.height],[n.left+x.width,n.top+x.height]],l=0;l=s.left&&p[0]<=s.left+r&&p[1]>=s.top&&p[1]<=s.top+i&&(t=!0)}if(!t)return}x.isHorizontal()?(37!==a&&39!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),(39===a&&!x.rtl||37===a&&x.rtl)&&x.slideNext(),(37===a&&!x.rtl||39===a&&x.rtl)&&x.slidePrev()):(38!==a&&40!==a||(e.preventDefault?e.preventDefault():e.returnValue=!1),40===a&&x.slideNext(),38===a&&x.slidePrev()),x.emit("onKeyPress",x,a)}}function p(e){var a=0,t=0,s=0,r=0;return"detail"in e&&(t=e.detail),"wheelDelta"in e&&(t=-e.wheelDelta/120),"wheelDeltaY"in e&&(t=-e.wheelDeltaY/120),"wheelDeltaX"in e&&(a=-e.wheelDeltaX/120),"axis"in e&&e.axis===e.HORIZONTAL_AXIS&&(a=t,t=0),s=10*a,r=10*t,"deltaY"in e&&(r=e.deltaY),"deltaX"in e&&(s=e.deltaX),(s||r)&&e.deltaMode&&(1===e.deltaMode?(s*=40,r*=40):(s*=800,r*=800)),s&&!a&&(a=s<1?-1:1),r&&!t&&(t=r<1?-1:1),{spinX:a,spinY:t,pixelX:s,pixelY:r}}function d(e){e.originalEvent&&(e=e.originalEvent);var a=0,t=x.rtl?-1:1,s=p(e);if(x.params.mousewheelForceToAxis)if(x.isHorizontal()){if(!(Math.abs(s.pixelX)>Math.abs(s.pixelY)))return;a=s.pixelX*t}else{if(!(Math.abs(s.pixelY)>Math.abs(s.pixelX)))return;a=s.pixelY}else a=Math.abs(s.pixelX)>Math.abs(s.pixelY)?-s.pixelX*t:-s.pixelY;if(0!==a){if(x.params.mousewheelInvert&&(a=-a),x.params.freeMode){var r=x.getWrapperTranslate()+a*x.params.mousewheelSensitivity,i=x.isBeginning,n=x.isEnd;if(r>=x.minTranslate()&&(r=x.minTranslate()),r<=x.maxTranslate()&&(r=x.maxTranslate()),x.setWrapperTransition(0),x.setWrapperTranslate(r),x.updateProgress(),x.updateActiveIndex(),(!i&&x.isBeginning||!n&&x.isEnd)&&x.updateClasses(),x.params.freeModeSticky?(clearTimeout(x.mousewheel.timeout),x.mousewheel.timeout=setTimeout(function(){x.slideReset()},300)):x.params.lazyLoading&&x.lazy&&x.lazy.load(),x.emit("onScroll",x,e),x.params.autoplay&&x.params.autoplayDisableOnInteraction&&x.stopAutoplay(),0===r||r===x.maxTranslate())return}else{if((new window.Date).getTime()-x.mousewheel.lastScrollTime>60)if(a<0)if(x.isEnd&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slideNext(),x.emit("onScroll",x,e);else if(x.isBeginning&&!x.params.loop||x.animating){if(x.params.mousewheelReleaseOnEdges)return!0}else x.slidePrev(),x.emit("onScroll",x,e);x.mousewheel.lastScrollTime=(new window.Date).getTime()}return e.preventDefault?e.preventDefault():e.returnValue=!1,!1}}function m(a,t){a=e(a);var s,r,i,n=x.rtl?-1:1;s=a.attr("data-swiper-parallax")||"0",r=a.attr("data-swiper-parallax-x"),i=a.attr("data-swiper-parallax-y"),r||i?(r=r||"0",i=i||"0"):x.isHorizontal()?(r=s,i="0"):(i=s,r="0"),r=r.indexOf("%")>=0?parseInt(r,10)*t*n+"%":r*t*n+"px",i=i.indexOf("%")>=0?parseInt(i,10)*t+"%":i*t+"px",a.transform("translate3d("+r+", "+i+",0px)")}function u(e){return 0!==e.indexOf("on")&&(e=e[0]!==e[0].toUpperCase()?"on"+e[0].toUpperCase()+e.substring(1):"on"+e),e}if(!(this instanceof a))return new a(t,s);var c={direction:"horizontal",touchEventsTarget:"container",initialSlide:0,speed:300,autoplay:!1,autoplayDisableOnInteraction:!0,autoplayStopOnLast:!1,iOSEdgeSwipeDetection:!1,iOSEdgeSwipeThreshold:20,freeMode:!1,freeModeMomentum:!0,freeModeMomentumRatio:1,freeModeMomentumBounce:!0,freeModeMomentumBounceRatio:1,freeModeMomentumVelocityRatio:1,freeModeSticky:!1,freeModeMinimumVelocity:.02,autoHeight:!1,setWrapperSize:!1,virtualTranslate:!1,effect:"slide",coverflow:{rotate:50,stretch:0,depth:100,modifier:1,slideShadows:!0},flip:{slideShadows:!0,limitRotation:!0},cube:{slideShadows:!0,shadow:!0,shadowOffset:20,shadowScale:.94},fade:{crossFade:!1},parallax:!1,zoom:!1,zoomMax:3,zoomMin:1,zoomToggle:!0,scrollbar:null,scrollbarHide:!0,scrollbarDraggable:!1,scrollbarSnapOnRelease:!1,keyboardControl:!1,mousewheelControl:!1,mousewheelReleaseOnEdges:!1,mousewheelInvert:!1,mousewheelForceToAxis:!1,mousewheelSensitivity:1,mousewheelEventsTarged:"container",hashnav:!1,hashnavWatchState:!1,history:!1,replaceState:!1,breakpoints:void 0,spaceBetween:0,slidesPerView:1,slidesPerColumn:1,slidesPerColumnFill:"column",slidesPerGroup:1,centeredSlides:!1,slidesOffsetBefore:0,slidesOffsetAfter:0,roundLengths:!1,touchRatio:1,touchAngle:45,simulateTouch:!0,shortSwipes:!0,longSwipes:!0,longSwipesRatio:.5,longSwipesMs:300,followFinger:!0,onlyExternal:!1,threshold:0,touchMoveStopPropagation:!0,touchReleaseOnEdges:!1,uniqueNavElements:!0,pagination:null,paginationElement:"span",paginationClickable:!1,paginationHide:!1,paginationBulletRender:null,paginationProgressRender:null,paginationFractionRender:null,paginationCustomRender:null,paginationType:"bullets",resistance:!0,resistanceRatio:.85,nextButton:null,prevButton:null,watchSlidesProgress:!1,watchSlidesVisibility:!1,grabCursor:!1,preventClicks:!0,preventClicksPropagation:!0,slideToClickedSlide:!1,lazyLoading:!1,lazyLoadingInPrevNext:!1,lazyLoadingInPrevNextAmount:1,lazyLoadingOnTransitionStart:!1,preloadImages:!0,updateOnImagesReady:!0,loop:!1,loopAdditionalSlides:0,loopedSlides:null,control:void 0,controlInverse:!1,controlBy:"slide",normalizeSlideIndex:!0,allowSwipeToPrev:!0,allowSwipeToNext:!0,swipeHandler:null,noSwiping:!0,noSwipingClass:"swiper-no-swiping",passiveListeners:!0,containerModifierClass:"swiper-container-",slideClass:"swiper-slide",slideActiveClass:"swiper-slide-active",slideDuplicateActiveClass:"swiper-slide-duplicate-active",slideVisibleClass:"swiper-slide-visible",slideDuplicateClass:"swiper-slide-duplicate",slideNextClass:"swiper-slide-next",slideDuplicateNextClass:"swiper-slide-duplicate-next",slidePrevClass:"swiper-slide-prev",slideDuplicatePrevClass:"swiper-slide-duplicate-prev",wrapperClass:"swiper-wrapper",bulletClass:"swiper-pagination-bullet",bulletActiveClass:"swiper-pagination-bullet-active",buttonDisabledClass:"swiper-button-disabled",paginationCurrentClass:"swiper-pagination-current",paginationTotalClass:"swiper-pagination-total",paginationHiddenClass:"swiper-pagination-hidden",paginationProgressbarClass:"swiper-pagination-progressbar",paginationClickableClass:"swiper-pagination-clickable",paginationModifierClass:"swiper-pagination-",lazyLoadingClass:"swiper-lazy",lazyStatusLoadingClass:"swiper-lazy-loading",lazyStatusLoadedClass:"swiper-lazy-loaded",lazyPreloaderClass:"swiper-lazy-preloader",notificationClass:"swiper-notification",preloaderClass:"preloader",zoomContainerClass:"swiper-zoom-container",observer:!1,observeParents:!1,a11y:!1,prevSlideMessage:"Previous slide",nextSlideMessage:"Next slide",firstSlideMessage:"This is the first slide",lastSlideMessage:"This is the last slide",paginationBulletMessage:"Go to slide {{index}}",runCallbacksOnInit:!0},g=s&&s.virtualTranslate;s=s||{};var h={};for(var v in s)if("object"!=typeof s[v]||null===s[v]||(s[v].nodeType||s[v]===window||s[v]===document||"undefined"!=typeof Dom7&&s[v]instanceof Dom7||"undefined"!=typeof jQuery&&s[v]instanceof jQuery))h[v]=s[v];else{h[v]={};for(var f in s[v])h[v][f]=s[v][f]}for(var w in c)if(void 0===s[w])s[w]=c[w];else if("object"==typeof s[w])for(var y in c[w])void 0===s[w][y]&&(s[w][y]=c[w][y]);var x=this;if(x.params=s,x.originalParams=h,x.classNames=[],void 0!==e&&"undefined"!=typeof Dom7&&(e=Dom7),(void 0!==e||(e="undefined"==typeof Dom7?window.Dom7||window.Zepto||window.jQuery:Dom7))&&(x.$=e,x.currentBreakpoint=void 0,x.getActiveBreakpoint=function(){if(!x.params.breakpoints)return!1;var e,a=!1,t=[];for(e in x.params.breakpoints)x.params.breakpoints.hasOwnProperty(e)&&t.push(e);t.sort(function(e,a){return parseInt(e,10)>parseInt(a,10)});for(var s=0;s=window.innerWidth&&!a&&(a=e);return a||"max"},x.setBreakpoint=function(){var e=x.getActiveBreakpoint();if(e&&x.currentBreakpoint!==e){var a=e in x.params.breakpoints?x.params.breakpoints[e]:x.originalParams,t=x.params.loop&&a.slidesPerView!==x.params.slidesPerView;for(var s in a)x.params[s]=a[s];x.currentBreakpoint=e,t&&x.destroyLoop&&x.reLoop(!0)}},x.params.breakpoints&&x.setBreakpoint(),x.container=e(t),0!==x.container.length)){if(x.container.length>1){var T=[];return x.container.each(function(){T.push(new a(this,s))}),T}x.container[0].swiper=x,x.container.data("swiper",x),x.classNames.push(x.params.containerModifierClass+x.params.direction),x.params.freeMode&&x.classNames.push(x.params.containerModifierClass+"free-mode"),x.support.flexbox||(x.classNames.push(x.params.containerModifierClass+"no-flexbox"),x.params.slidesPerColumn=1),x.params.autoHeight&&x.classNames.push(x.params.containerModifierClass+"autoheight"),(x.params.parallax||x.params.watchSlidesVisibility)&&(x.params.watchSlidesProgress=!0),x.params.touchReleaseOnEdges&&(x.params.resistanceRatio=0),["cube","coverflow","flip"].indexOf(x.params.effect)>=0&&(x.support.transforms3d?(x.params.watchSlidesProgress=!0,x.classNames.push(x.params.containerModifierClass+"3d")):x.params.effect="slide"),"slide"!==x.params.effect&&x.classNames.push(x.params.containerModifierClass+x.params.effect),"cube"===x.params.effect&&(x.params.resistanceRatio=0,x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.centeredSlides=!1,x.params.spaceBetween=0,x.params.virtualTranslate=!0),"fade"!==x.params.effect&&"flip"!==x.params.effect||(x.params.slidesPerView=1,x.params.slidesPerColumn=1,x.params.slidesPerGroup=1,x.params.watchSlidesProgress=!0,x.params.spaceBetween=0,void 0===g&&(x.params.virtualTranslate=!0)),x.params.grabCursor&&x.support.touch&&(x.params.grabCursor=!1),x.wrapper=x.container.children("."+x.params.wrapperClass),x.params.pagination&&(x.paginationContainer=e(x.params.pagination),x.params.uniqueNavElements&&"string"==typeof x.params.pagination&&x.paginationContainer.length>1&&1===x.container.find(x.params.pagination).length&&(x.paginationContainer=x.container.find(x.params.pagination)),"bullets"===x.params.paginationType&&x.params.paginationClickable?x.paginationContainer.addClass(x.params.paginationModifierClass+"clickable"):x.params.paginationClickable=!1,x.paginationContainer.addClass(x.params.paginationModifierClass+x.params.paginationType)),(x.params.nextButton||x.params.prevButton)&&(x.params.nextButton&&(x.nextButton=e(x.params.nextButton),x.params.uniqueNavElements&&"string"==typeof x.params.nextButton&&x.nextButton.length>1&&1===x.container.find(x.params.nextButton).length&&(x.nextButton=x.container.find(x.params.nextButton))),x.params.prevButton&&(x.prevButton=e(x.params.prevButton),x.params.uniqueNavElements&&"string"==typeof x.params.prevButton&&x.prevButton.length>1&&1===x.container.find(x.params.prevButton).length&&(x.prevButton=x.container.find(x.params.prevButton)))),x.isHorizontal=function(){return"horizontal"===x.params.direction},x.rtl=x.isHorizontal()&&("rtl"===x.container[0].dir.toLowerCase()||"rtl"===x.container.css("direction")),x.rtl&&x.classNames.push(x.params.containerModifierClass+"rtl"),x.rtl&&(x.wrongRTL="-webkit-box"===x.wrapper.css("display")),x.params.slidesPerColumn>1&&x.classNames.push(x.params.containerModifierClass+"multirow"),x.device.android&&x.classNames.push(x.params.containerModifierClass+"android"),x.container.addClass(x.classNames.join(" ")),x.translate=0,x.progress=0,x.velocity=0,x.lockSwipeToNext=function(){x.params.allowSwipeToNext=!1,x.params.allowSwipeToPrev===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipeToPrev=function(){x.params.allowSwipeToPrev=!1,x.params.allowSwipeToNext===!1&&x.params.grabCursor&&x.unsetGrabCursor()},x.lockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!1,x.params.grabCursor&&x.unsetGrabCursor()},x.unlockSwipeToNext=function(){x.params.allowSwipeToNext=!0,x.params.allowSwipeToPrev===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipeToPrev=function(){x.params.allowSwipeToPrev=!0,x.params.allowSwipeToNext===!0&&x.params.grabCursor&&x.setGrabCursor()},x.unlockSwipes=function(){x.params.allowSwipeToNext=x.params.allowSwipeToPrev=!0,x.params.grabCursor&&x.setGrabCursor()},x.setGrabCursor=function(e){x.container[0].style.cursor="move",x.container[0].style.cursor=e?"-webkit-grabbing":"-webkit-grab",x.container[0].style.cursor=e?"-moz-grabbin":"-moz-grab",x.container[0].style.cursor=e?"grabbing":"grab"},x.unsetGrabCursor=function(){x.container[0].style.cursor=""},x.params.grabCursor&&x.setGrabCursor(),x.imagesToLoad=[],x.imagesLoaded=0,x.loadImage=function(e,a,t,s,r,i){function n(){i&&i()}var o;e.complete&&r?n():a?(o=new window.Image,o.onload=n,o.onerror=n,s&&(o.sizes=s),t&&(o.srcset=t),a&&(o.src=a)):n()},x.preloadImages=function(){function e(){void 0!==x&&null!==x&&x&&(void 0!==x.imagesLoaded&&x.imagesLoaded++,x.imagesLoaded===x.imagesToLoad.length&&(x.params.updateOnImagesReady&&x.update(),x.emit("onImagesReady",x)))}x.imagesToLoad=x.container.find("img");for(var a=0;a1)for(e=0;ex.slides.length)break;a.push(x.slides.eq(s)[0])}else a.push(x.slides.eq(x.activeIndex)[0]);for(e=0;et?r:t}t&&x.wrapper.css("height",t+"px")},x.updateContainerSize=function(){var e,a;e=void 0!==x.params.width?x.params.width:x.container[0].clientWidth,a=void 0!==x.params.height?x.params.height:x.container[0].clientHeight,0===e&&x.isHorizontal()||0===a&&!x.isHorizontal()||(e=e-parseInt(x.container.css("padding-left"),10)-parseInt(x.container.css("padding-right"),10),a=a-parseInt(x.container.css("padding-top"),10)-parseInt(x.container.css("padding-bottom"),10),x.width=e,x.height=a,x.size=x.isHorizontal()?x.width:x.height)},x.updateSlidesSize=function(){x.slides=x.wrapper.children("."+x.params.slideClass),x.snapGrid=[],x.slidesGrid=[],x.slidesSizesGrid=[];var e,a=x.params.spaceBetween,t=-x.params.slidesOffsetBefore,s=0,i=0;if(void 0!==x.size){"string"==typeof a&&a.indexOf("%")>=0&&(a=parseFloat(a.replace("%",""))/100*x.size),x.virtualSize=-a,x.rtl?x.slides.css({marginLeft:"",marginTop:""}):x.slides.css({marginRight:"",marginBottom:""});var n;x.params.slidesPerColumn>1&&(n=Math.floor(x.slides.length/x.params.slidesPerColumn)===x.slides.length/x.params.slidesPerColumn?x.slides.length:Math.ceil(x.slides.length/x.params.slidesPerColumn)*x.params.slidesPerColumn,"auto"!==x.params.slidesPerView&&"row"===x.params.slidesPerColumnFill&&(n=Math.max(n,x.params.slidesPerView*x.params.slidesPerColumn)));var o,l=x.params.slidesPerColumn,p=n/l,d=p-(x.params.slidesPerColumn*p-x.slides.length);for(e=0;e1){var u,c,g;"column"===x.params.slidesPerColumnFill?(c=Math.floor(e/l),g=e-c*l,(c>d||c===d&&g===l-1)&&++g>=l&&(g=0,c++),u=c+g*n/l,m.css({"-webkit-box-ordinal-group":u,"-moz-box-ordinal-group":u,"-ms-flex-order":u,"-webkit-order":u,order:u})):(g=Math.floor(e/p),c=e-g*p),m.css("margin-"+(x.isHorizontal()?"top":"left"),0!==g&&x.params.spaceBetween&&x.params.spaceBetween+"px").attr("data-swiper-column",c).attr("data-swiper-row",g)}"none"!==m.css("display")&&("auto"===x.params.slidesPerView?(o=x.isHorizontal()?m.outerWidth(!0):m.outerHeight(!0),x.params.roundLengths&&(o=r(o))):(o=(x.size-(x.params.slidesPerView-1)*a)/x.params.slidesPerView,x.params.roundLengths&&(o=r(o)),x.isHorizontal()?x.slides[e].style.width=o+"px":x.slides[e].style.height=o+"px"),x.slides[e].swiperSlideSize=o,x.slidesSizesGrid.push(o),x.params.centeredSlides?(t=t+o/2+s/2+a,0===s&&0!==e&&(t=t-x.size/2-a),0===e&&(t=t-x.size/2-a),Math.abs(t)<.001&&(t=0),i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t)):(i%x.params.slidesPerGroup==0&&x.snapGrid.push(t),x.slidesGrid.push(t),t=t+o+a),x.virtualSize+=o+a,s=o,i++)}x.virtualSize=Math.max(x.virtualSize,x.size)+x.params.slidesOffsetAfter;var h;if(x.rtl&&x.wrongRTL&&("slide"===x.params.effect||"coverflow"===x.params.effect)&&x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}),x.support.flexbox&&!x.params.setWrapperSize||(x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"})),x.params.slidesPerColumn>1&&(x.virtualSize=(o+x.params.spaceBetween)*n,x.virtualSize=Math.ceil(x.virtualSize/x.params.slidesPerColumn)-x.params.spaceBetween,x.isHorizontal()?x.wrapper.css({width:x.virtualSize+x.params.spaceBetween+"px"}):x.wrapper.css({height:x.virtualSize+x.params.spaceBetween+"px"}),x.params.centeredSlides)){for(h=[],e=0;e1&&x.snapGrid.push(x.virtualSize-x.size)}0===x.snapGrid.length&&(x.snapGrid=[0]),0!==x.params.spaceBetween&&(x.isHorizontal()?x.rtl?x.slides.css({marginLeft:a+"px"}):x.slides.css({marginRight:a+"px"}):x.slides.css({marginBottom:a+"px"})),x.params.watchSlidesProgress&&x.updateSlidesOffset()}},x.updateSlidesOffset=function(){for(var e=0;ex.size&&(s=!0));for(a=x.activeIndex-1;a>=0;a--)x.slides[a]&&!s&&(r+=x.slides[a].swiperSlideSize,t++,r>x.size&&(s=!0))}else for(e=x.activeIndex+1;e=0&&i0&&n<=x.size||i<=0&&n>=x.size)&&x.slides.eq(t).addClass(x.params.slideVisibleClass)}s.progress=x.rtl?-r:r}}},x.updateProgress=function(e){void 0===e&&(e=x.translate||0);var a=x.maxTranslate()-x.minTranslate(),t=x.isBeginning,s=x.isEnd;0===a?(x.progress=0,x.isBeginning=x.isEnd=!0):(x.progress=(e-x.minTranslate())/a,x.isBeginning=x.progress<=0,x.isEnd=x.progress>=1),x.isBeginning&&!t&&x.emit("onReachBeginning",x),x.isEnd&&!s&&x.emit("onReachEnd",x),x.params.watchSlidesProgress&&x.updateSlidesProgress(e),x.emit("onProgress",x,x.progress)},x.updateActiveIndex=function(){var e,a,t,s=x.rtl?x.translate:-x.translate;for(a=0;a=x.slidesGrid[a]&&s=x.slidesGrid[a]&&s=x.slidesGrid[a]&&(e=a);x.params.normalizeSlideIndex&&(e<0||void 0===e)&&(e=0),t=Math.floor(e/x.params.slidesPerGroup),t>=x.snapGrid.length&&(t=x.snapGrid.length-1),e!==x.activeIndex&&(x.snapIndex=t,x.previousIndex=x.activeIndex,x.activeIndex=e,x.updateClasses(),x.updateRealIndex())},x.updateRealIndex=function(){x.realIndex=parseInt(x.slides.eq(x.activeIndex).attr("data-swiper-slide-index")||x.activeIndex,10)},x.updateClasses=function(){x.slides.removeClass(x.params.slideActiveClass+" "+x.params.slideNextClass+" "+x.params.slidePrevClass+" "+x.params.slideDuplicateActiveClass+" "+x.params.slideDuplicateNextClass+" "+x.params.slideDuplicatePrevClass);var a=x.slides.eq(x.activeIndex);a.addClass(x.params.slideActiveClass),s.loop&&(a.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+x.realIndex+'"]').addClass(x.params.slideDuplicateActiveClass));var t=a.next("."+x.params.slideClass).addClass(x.params.slideNextClass);x.params.loop&&0===t.length&&(t=x.slides.eq(0),t.addClass(x.params.slideNextClass));var r=a.prev("."+x.params.slideClass).addClass(x.params.slidePrevClass);if(x.params.loop&&0===r.length&&(r=x.slides.eq(-1),r.addClass(x.params.slidePrevClass)),s.loop&&(t.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+t.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicateNextClass),r.hasClass(x.params.slideDuplicateClass)?x.wrapper.children("."+x.params.slideClass+":not(."+x.params.slideDuplicateClass+')[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass):x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass+'[data-swiper-slide-index="'+r.attr("data-swiper-slide-index")+'"]').addClass(x.params.slideDuplicatePrevClass)),x.paginationContainer&&x.paginationContainer.length>0){var i,n=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length;if(x.params.loop?(i=Math.ceil((x.activeIndex-x.loopedSlides)/x.params.slidesPerGroup),i>x.slides.length-1-2*x.loopedSlides&&(i-=x.slides.length-2*x.loopedSlides),i>n-1&&(i-=n),i<0&&"bullets"!==x.params.paginationType&&(i=n+i)):i=void 0!==x.snapIndex?x.snapIndex:x.activeIndex||0,"bullets"===x.params.paginationType&&x.bullets&&x.bullets.length>0&&(x.bullets.removeClass(x.params.bulletActiveClass),x.paginationContainer.length>1?x.bullets.each(function(){e(this).index()===i&&e(this).addClass(x.params.bulletActiveClass)}):x.bullets.eq(i).addClass(x.params.bulletActiveClass)),"fraction"===x.params.paginationType&&(x.paginationContainer.find("."+x.params.paginationCurrentClass).text(i+1),x.paginationContainer.find("."+x.params.paginationTotalClass).text(n)),"progress"===x.params.paginationType){var o=(i+1)/n,l=o,p=1;x.isHorizontal()||(p=o,l=1),x.paginationContainer.find("."+x.params.paginationProgressbarClass).transform("translate3d(0,0,0) scaleX("+l+") scaleY("+p+")").transition(x.params.speed)}"custom"===x.params.paginationType&&x.params.paginationCustomRender&&(x.paginationContainer.html(x.params.paginationCustomRender(x,i+1,n)),x.emit("onPaginationRendered",x,x.paginationContainer[0]))}x.params.loop||(x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.isBeginning?(x.prevButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.prevButton)):(x.prevButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.prevButton))),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.isEnd?(x.nextButton.addClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.disable(x.nextButton)):(x.nextButton.removeClass(x.params.buttonDisabledClass),x.params.a11y&&x.a11y&&x.a11y.enable(x.nextButton))))},x.updatePagination=function(){if(x.params.pagination&&x.paginationContainer&&x.paginationContainer.length>0){var e="";if("bullets"===x.params.paginationType){for(var a=x.params.loop?Math.ceil((x.slides.length-2*x.loopedSlides)/x.params.slidesPerGroup):x.snapGrid.length,t=0;t'+x.params.paginationElement+">";x.paginationContainer.html(e),x.bullets=x.paginationContainer.find("."+x.params.bulletClass),x.params.paginationClickable&&x.params.a11y&&x.a11y&&x.a11y.initPagination()}"fraction"===x.params.paginationType&&(e=x.params.paginationFractionRender?x.params.paginationFractionRender(x,x.params.paginationCurrentClass,x.params.paginationTotalClass):' / ',x.paginationContainer.html(e)),"progress"===x.params.paginationType&&(e=x.params.paginationProgressRender?x.params.paginationProgressRender(x,x.params.paginationProgressbarClass):'',x.paginationContainer.html(e)),"custom"!==x.params.paginationType&&x.emit("onPaginationRendered",x,x.paginationContainer[0])}},x.update=function(e){function a(){x.rtl,x.translate;t=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate()),x.setWrapperTranslate(t),x.updateActiveIndex(),x.updateClasses()}if(x){x.updateContainerSize(),x.updateSlidesSize(),x.updateProgress(),x.updatePagination(),x.updateClasses(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set();var t;if(e){x.controller&&x.controller.spline&&(x.controller.spline=void 0),x.params.freeMode?(a(),x.params.autoHeight&&x.updateAutoHeight()):(("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0))||a()}else x.params.autoHeight&&x.updateAutoHeight()}},x.onResize=function(e){x.params.onBeforeResize&&x.params.onBeforeResize(x),x.params.breakpoints&&x.setBreakpoint();var a=x.params.allowSwipeToPrev,t=x.params.allowSwipeToNext;x.params.allowSwipeToPrev=x.params.allowSwipeToNext=!0,x.updateContainerSize(),x.updateSlidesSize(),("auto"===x.params.slidesPerView||x.params.freeMode||e)&&x.updatePagination(),x.params.scrollbar&&x.scrollbar&&x.scrollbar.set(),x.controller&&x.controller.spline&&(x.controller.spline=void 0);var s=!1;if(x.params.freeMode){var r=Math.min(Math.max(x.translate,x.maxTranslate()),x.minTranslate());x.setWrapperTranslate(r),x.updateActiveIndex(),x.updateClasses(),x.params.autoHeight&&x.updateAutoHeight()}else x.updateClasses(),s=("auto"===x.params.slidesPerView||x.params.slidesPerView>1)&&x.isEnd&&!x.params.centeredSlides?x.slideTo(x.slides.length-1,0,!1,!0):x.slideTo(x.activeIndex,0,!1,!0);x.params.lazyLoading&&!s&&x.lazy&&x.lazy.load(),x.params.allowSwipeToPrev=a,x.params.allowSwipeToNext=t,x.params.onAfterResize&&x.params.onAfterResize(x)},x.touchEventsDesktop={start:"mousedown",move:"mousemove",end:"mouseup"},window.navigator.pointerEnabled?x.touchEventsDesktop={start:"pointerdown",move:"pointermove",end:"pointerup"}:window.navigator.msPointerEnabled&&(x.touchEventsDesktop={start:"MSPointerDown",move:"MSPointerMove",end:"MSPointerUp"}),x.touchEvents={start:x.support.touch||!x.params.simulateTouch?"touchstart":x.touchEventsDesktop.start,move:x.support.touch||!x.params.simulateTouch?"touchmove":x.touchEventsDesktop.move,end:x.support.touch||!x.params.simulateTouch?"touchend":x.touchEventsDesktop.end},(window.navigator.pointerEnabled||window.navigator.msPointerEnabled)&&("container"===x.params.touchEventsTarget?x.container:x.wrapper).addClass("swiper-wp8-"+x.params.direction),x.initEvents=function(e){var a=e?"off":"on",t=e?"removeEventListener":"addEventListener",r="container"===x.params.touchEventsTarget?x.container[0]:x.wrapper[0],i=x.support.touch?r:document,n=!!x.params.nested;if(x.browser.ie)r[t](x.touchEvents.start,x.onTouchStart,!1),i[t](x.touchEvents.move,x.onTouchMove,n),i[t](x.touchEvents.end,x.onTouchEnd,!1);else{if(x.support.touch){var o=!("touchstart"!==x.touchEvents.start||!x.support.passiveListener||!x.params.passiveListeners)&&{passive:!0,capture:!1};r[t](x.touchEvents.start,x.onTouchStart,o),r[t](x.touchEvents.move,x.onTouchMove,n),r[t](x.touchEvents.end,x.onTouchEnd,o)}(s.simulateTouch&&!x.device.ios&&!x.device.android||s.simulateTouch&&!x.support.touch&&x.device.ios)&&(r[t]("mousedown",x.onTouchStart,!1),document[t]("mousemove",x.onTouchMove,n),document[t]("mouseup",x.onTouchEnd,!1))}window[t]("resize",x.onResize),x.params.nextButton&&x.nextButton&&x.nextButton.length>0&&(x.nextButton[a]("click",x.onClickNext),x.params.a11y&&x.a11y&&x.nextButton[a]("keydown",x.a11y.onEnterKey)),x.params.prevButton&&x.prevButton&&x.prevButton.length>0&&(x.prevButton[a]("click",x.onClickPrev),x.params.a11y&&x.a11y&&x.prevButton[a]("keydown",x.a11y.onEnterKey)),x.params.pagination&&x.params.paginationClickable&&(x.paginationContainer[a]("click","."+x.params.bulletClass,x.onClickIndex),x.params.a11y&&x.a11y&&x.paginationContainer[a]("keydown","."+x.params.bulletClass,x.a11y.onEnterKey)),(x.params.preventClicks||x.params.preventClicksPropagation)&&r[t]("click",x.preventClicks,!0)},x.attachEvents=function(){x.initEvents()},x.detachEvents=function(){x.initEvents(!0)},x.allowClick=!0,x.preventClicks=function(e){x.allowClick||(x.params.preventClicks&&e.preventDefault(),x.params.preventClicksPropagation&&x.animating&&(e.stopPropagation(),e.stopImmediatePropagation()))},x.onClickNext=function(e){e.preventDefault(),x.isEnd&&!x.params.loop||x.slideNext()},x.onClickPrev=function(e){e.preventDefault(),x.isBeginning&&!x.params.loop||x.slidePrev()},x.onClickIndex=function(a){a.preventDefault();var t=e(this).index()*x.params.slidesPerGroup
+;x.params.loop&&(t+=x.loopedSlides),x.slideTo(t)},x.updateClickedSlide=function(a){var t=n(a,"."+x.params.slideClass),s=!1;if(t)for(var r=0;rx.slides.length-x.loopedSlides+l/2?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o):o>x.slides.length-l?(x.fixLoop(),o=x.wrapper.children("."+x.params.slideClass+'[data-swiper-slide-index="'+i+'"]:not(.'+x.params.slideDuplicateClass+")").eq(0).index(),setTimeout(function(){x.slideTo(o)},0)):x.slideTo(o)}else x.slideTo(o)}};var b,C,S,z,M,P,E,I,k,D,L="input, select, textarea, button, video",B=Date.now(),H=[];x.animating=!1,x.touches={startX:0,startY:0,currentX:0,currentY:0,diff:0};var G,X;x.onTouchStart=function(a){if(a.originalEvent&&(a=a.originalEvent),(G="touchstart"===a.type)||!("which"in a)||3!==a.which){if(x.params.noSwiping&&n(a,"."+x.params.noSwipingClass))return void(x.allowClick=!0);if(!x.params.swipeHandler||n(a,x.params.swipeHandler)){var t=x.touches.currentX="touchstart"===a.type?a.targetTouches[0].pageX:a.pageX,s=x.touches.currentY="touchstart"===a.type?a.targetTouches[0].pageY:a.pageY;if(!(x.device.ios&&x.params.iOSEdgeSwipeDetection&&t<=x.params.iOSEdgeSwipeThreshold)){if(b=!0,C=!1,S=!0,M=void 0,X=void 0,x.touches.startX=t,x.touches.startY=s,z=Date.now(),x.allowClick=!0,x.updateContainerSize(),x.swipeDirection=void 0,x.params.threshold>0&&(I=!1),"touchstart"!==a.type){var r=!0;e(a.target).is(L)&&(r=!1),document.activeElement&&e(document.activeElement).is(L)&&document.activeElement.blur(),r&&a.preventDefault()}x.emit("onTouchStart",x,a)}}}},x.onTouchMove=function(a){if(a.originalEvent&&(a=a.originalEvent),!G||"mousemove"!==a.type){if(a.preventedByNestedSwiper)return x.touches.startX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,void(x.touches.startY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY);if(x.params.onlyExternal)return x.allowClick=!1,void(b&&(x.touches.startX=x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.startY=x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,z=Date.now()));if(G&&x.params.touchReleaseOnEdges&&!x.params.loop)if(x.isHorizontal()){if(x.touches.currentXx.touches.startX&&x.translate>=x.minTranslate())return}else if(x.touches.currentYx.touches.startY&&x.translate>=x.minTranslate())return;if(G&&document.activeElement&&a.target===document.activeElement&&e(a.target).is(L))return C=!0,void(x.allowClick=!1);if(S&&x.emit("onTouchMove",x,a),!(a.targetTouches&&a.targetTouches.length>1)){if(x.touches.currentX="touchmove"===a.type?a.targetTouches[0].pageX:a.pageX,x.touches.currentY="touchmove"===a.type?a.targetTouches[0].pageY:a.pageY,void 0===M){var t;x.isHorizontal()&&x.touches.currentY===x.touches.startY||!x.isHorizontal()&&x.touches.currentX===x.touches.startX?M=!1:(t=180*Math.atan2(Math.abs(x.touches.currentY-x.touches.startY),Math.abs(x.touches.currentX-x.touches.startX))/Math.PI,M=x.isHorizontal()?t>x.params.touchAngle:90-t>x.params.touchAngle)}if(M&&x.emit("onTouchMoveOpposite",x,a),void 0===X&&(x.touches.currentX===x.touches.startX&&x.touches.currentY===x.touches.startY||(X=!0)),b){if(M)return void(b=!1);if(X){x.allowClick=!1,x.emit("onSliderMove",x,a),a.preventDefault(),x.params.touchMoveStopPropagation&&!x.params.nested&&a.stopPropagation(),C||(s.loop&&x.fixLoop(),E=x.getWrapperTranslate(),x.setWrapperTransition(0),x.animating&&x.wrapper.trigger("webkitTransitionEnd transitionend oTransitionEnd MSTransitionEnd msTransitionEnd"),x.params.autoplay&&x.autoplaying&&(x.params.autoplayDisableOnInteraction?x.stopAutoplay():x.pauseAutoplay()),D=!1,!x.params.grabCursor||x.params.allowSwipeToNext!==!0&&x.params.allowSwipeToPrev!==!0||x.setGrabCursor(!0)),C=!0;var r=x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY;r*=x.params.touchRatio,x.rtl&&(r=-r),x.swipeDirection=r>0?"prev":"next",P=r+E;var i=!0;if(r>0&&P>x.minTranslate()?(i=!1,x.params.resistance&&(P=x.minTranslate()-1+Math.pow(-x.minTranslate()+E+r,x.params.resistanceRatio))):r<0&&PE&&(P=E),x.params.threshold>0){if(!(Math.abs(r)>x.params.threshold||I))return void(P=E);if(!I)return I=!0,x.touches.startX=x.touches.currentX,x.touches.startY=x.touches.currentY,P=E,void(x.touches.diff=x.isHorizontal()?x.touches.currentX-x.touches.startX:x.touches.currentY-x.touches.startY)}x.params.followFinger&&((x.params.freeMode||x.params.watchSlidesProgress)&&x.updateActiveIndex(),x.params.freeMode&&(0===H.length&&H.push({position:x.touches[x.isHorizontal()?"startX":"startY"],time:z}),H.push({position:x.touches[x.isHorizontal()?"currentX":"currentY"],time:(new window.Date).getTime()})),x.updateProgress(P),x.setWrapperTranslate(P))}}}}},x.onTouchEnd=function(a){if(a.originalEvent&&(a=a.originalEvent),S&&x.emit("onTouchEnd",x,a),S=!1,b){x.params.grabCursor&&C&&b&&(x.params.allowSwipeToNext===!0||x.params.allowSwipeToPrev===!0)&&x.setGrabCursor(!1);var t=Date.now(),s=t-z;if(x.allowClick&&(x.updateClickedSlide(a),x.emit("onTap",x,a),s<300&&t-B>300&&(k&&clearTimeout(k),k=setTimeout(function(){x&&(x.params.paginationHide&&x.paginationContainer.length>0&&!e(a.target).hasClass(x.params.bulletClass)&&x.paginationContainer.toggleClass(x.params.paginationHiddenClass),x.emit("onClick",x,a))},300)),s<300&&t-B<300&&(k&&clearTimeout(k),x.emit("onDoubleTap",x,a))),B=Date.now(),setTimeout(function(){x&&(x.allowClick=!0)},0),!b||!C||!x.swipeDirection||0===x.touches.diff||P===E)return void(b=C=!1);b=C=!1;var r;if(r=x.params.followFinger?x.rtl?x.translate:-x.translate:-P,x.params.freeMode){if(r<-x.minTranslate())return void x.slideTo(x.activeIndex);if(r>-x.maxTranslate())return void(x.slides.length1){var i=H.pop(),n=H.pop(),o=i.position-n.position,l=i.time-n.time;x.velocity=o/l,x.velocity=x.velocity/2,Math.abs(x.velocity)150||(new window.Date).getTime()-i.time>300)&&(x.velocity=0)}else x.velocity=0;x.velocity=x.velocity*x.params.freeModeMomentumVelocityRatio,H.length=0;var p=1e3*x.params.freeModeMomentumRatio,d=x.velocity*p,m=x.translate+d;x.rtl&&(m=-m);var u,c=!1,g=20*Math.abs(x.velocity)*x.params.freeModeMomentumBounceRatio;if(mx.minTranslate())x.params.freeModeMomentumBounce?(m-x.minTranslate()>g&&(m=x.minTranslate()+g),u=x.minTranslate(),c=!0,D=!0):m=x.minTranslate();else if(x.params.freeModeSticky){var h,v=0;for(v=0;v-m){h=v;break}m=Math.abs(x.snapGrid[h]-m)=x.params.longSwipesMs)&&(x.updateProgress(),x.updateActiveIndex()))}var f,w=0,y=x.slidesSizesGrid[0];for(f=0;f=x.slidesGrid[f]&&r=x.slidesGrid[f]&&(w=f,y=x.slidesGrid[x.slidesGrid.length-1]-x.slidesGrid[x.slidesGrid.length-2]);var T=(r-x.slidesGrid[w])/y;if(s>x.params.longSwipesMs){if(!x.params.longSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&(T>=x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w)),"prev"===x.swipeDirection&&(T>1-x.params.longSwipesRatio?x.slideTo(w+x.params.slidesPerGroup):x.slideTo(w))}else{if(!x.params.shortSwipes)return void x.slideTo(x.activeIndex);"next"===x.swipeDirection&&x.slideTo(w+x.params.slidesPerGroup),"prev"===x.swipeDirection&&x.slideTo(w)}}},x._slideTo=function(e,a){return x.slideTo(e,a,!0,!0)},x.slideTo=function(e,a,t,s){void 0===t&&(t=!0),void 0===e&&(e=0),e<0&&(e=0),x.snapIndex=Math.floor(e/x.params.slidesPerGroup),x.snapIndex>=x.snapGrid.length&&(x.snapIndex=x.snapGrid.length-1);var r=-x.snapGrid[x.snapIndex];if(x.params.autoplay&&x.autoplaying&&(s||!x.params.autoplayDisableOnInteraction?x.pauseAutoplay(a):x.stopAutoplay()),x.updateProgress(r),x.params.normalizeSlideIndex)for(var i=0;i=Math.floor(100*x.slidesGrid[i])&&(e=i);return!(!x.params.allowSwipeToNext&&rx.translate&&r>x.maxTranslate()&&(x.activeIndex||0)!==e)&&(void 0===a&&(a=x.params.speed),x.previousIndex=x.activeIndex||0,x.activeIndex=e,x.updateRealIndex(),x.rtl&&-r===x.translate||!x.rtl&&r===x.translate?(x.params.autoHeight&&x.updateAutoHeight(),x.updateClasses(),"slide"!==x.params.effect&&x.setWrapperTranslate(r),!1):(x.updateClasses(),x.onTransitionStart(t),0===a||x.browser.lteIE9?(x.setWrapperTranslate(r),x.setWrapperTransition(0),x.onTransitionEnd(t)):(x.setWrapperTranslate(r),x.setWrapperTransition(a),x.animating||(x.animating=!0,x.wrapper.transitionEnd(function(){x&&x.onTransitionEnd(t)}))),!0)))},x.onTransitionStart=function(e){void 0===e&&(e=!0),x.params.autoHeight&&x.updateAutoHeight(),x.lazy&&x.lazy.onTransitionStart(),e&&(x.emit("onTransitionStart",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeStart",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextStart",x):x.emit("onSlidePrevStart",x)))},x.onTransitionEnd=function(e){x.animating=!1,x.setWrapperTransition(0),void 0===e&&(e=!0),x.lazy&&x.lazy.onTransitionEnd(),e&&(x.emit("onTransitionEnd",x),x.activeIndex!==x.previousIndex&&(x.emit("onSlideChangeEnd",x),x.activeIndex>x.previousIndex?x.emit("onSlideNextEnd",x):x.emit("onSlidePrevEnd",x))),x.params.history&&x.history&&x.history.setHistory(x.params.history,x.activeIndex),x.params.hashnav&&x.hashnav&&x.hashnav.setHash()},x.slideNext=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)}return x.slideTo(x.activeIndex+x.params.slidesPerGroup,a,e,t)},x._slideNext=function(e){return x.slideNext(!0,e,!0)},x.slidePrev=function(e,a,t){if(x.params.loop){if(x.animating)return!1;x.fixLoop();x.container[0].clientLeft;return x.slideTo(x.activeIndex-1,a,e,t)}return x.slideTo(x.activeIndex-1,a,e,t)},x._slidePrev=function(e){return x.slidePrev(!0,e,!0)},x.slideReset=function(e,a,t){return x.slideTo(x.activeIndex,a,e)},x.disableTouchControl=function(){return x.params.onlyExternal=!0,!0},x.enableTouchControl=function(){return x.params.onlyExternal=!1,!0},x.setWrapperTransition=function(e,a){x.wrapper.transition(e),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTransition(e),x.params.parallax&&x.parallax&&x.parallax.setTransition(e),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTransition(e),x.params.control&&x.controller&&x.controller.setTransition(e,a),x.emit("onSetTransition",x,e)},x.setWrapperTranslate=function(e,a,t){var s=0,i=0;x.isHorizontal()?s=x.rtl?-e:e:i=e,x.params.roundLengths&&(s=r(s),i=r(i)),x.params.virtualTranslate||(x.support.transforms3d?x.wrapper.transform("translate3d("+s+"px, "+i+"px, 0px)"):x.wrapper.transform("translate("+s+"px, "+i+"px)")),x.translate=x.isHorizontal()?s:i;var n,o=x.maxTranslate()-x.minTranslate();n=0===o?0:(e-x.minTranslate())/o,n!==x.progress&&x.updateProgress(e),a&&x.updateActiveIndex(),"slide"!==x.params.effect&&x.effects[x.params.effect]&&x.effects[x.params.effect].setTranslate(x.translate),x.params.parallax&&x.parallax&&x.parallax.setTranslate(x.translate),x.params.scrollbar&&x.scrollbar&&x.scrollbar.setTranslate(x.translate),x.params.control&&x.controller&&x.controller.setTranslate(x.translate,t),x.emit("onSetTranslate",x,x.translate)},x.getTranslate=function(e,a){var t,s,r,i;return void 0===a&&(a="x"),x.params.virtualTranslate?x.rtl?-x.translate:x.translate:(r=window.getComputedStyle(e,null),window.WebKitCSSMatrix?(s=r.transform||r.webkitTransform,s.split(",").length>6&&(s=s.split(", ").map(function(e){return e.replace(",",".")}).join(", ")),i=new window.WebKitCSSMatrix("none"===s?"":s)):(i=r.MozTransform||r.OTransform||r.MsTransform||r.msTransform||r.transform||r.getPropertyValue("transform").replace("translate(","matrix(1, 0, 0, 1,"),t=i.toString().split(",")),"x"===a&&(s=window.WebKitCSSMatrix?i.m41:16===t.length?parseFloat(t[12]):parseFloat(t[4])),"y"===a&&(s=window.WebKitCSSMatrix?i.m42:16===t.length?parseFloat(t[13]):parseFloat(t[5])),x.rtl&&s&&(s=-s),s||0)},x.getWrapperTranslate=function(e){return void 0===e&&(e=x.isHorizontal()?"x":"y"),x.getTranslate(x.wrapper[0],e)},x.observers=[],x.initObservers=function(){if(x.params.observeParents)for(var e=x.container.parents(),a=0;aa.length&&(x.loopedSlides=a.length);var t,s=[],r=[];for(a.each(function(t,i){var n=e(this);t=a.length-x.loopedSlides&&s.push(i),n.attr("data-swiper-slide-index",t)}),t=0;t=0;t--)x.wrapper.prepend(e(s[t].cloneNode(!0)).addClass(x.params.slideDuplicateClass))},x.destroyLoop=function(){x.wrapper.children("."+x.params.slideClass+"."+x.params.slideDuplicateClass).remove(),x.slides.removeAttr("data-swiper-slide-index")},x.reLoop=function(e){var a=x.activeIndex-x.loopedSlides;x.destroyLoop(),x.createLoop(),x.updateSlidesSize(),e&&x.slideTo(a+x.loopedSlides,0,!1)},x.fixLoop=function(){var e;x.activeIndex=2*x.loopedSlides||x.activeIndex>x.slides.length-2*x.params.slidesPerView)&&(e=-x.slides.length+x.activeIndex+x.loopedSlides,e+=x.loopedSlides,x.slideTo(e,0,!1,!0))},x.appendSlide=function(e){if(x.params.loop&&x.destroyLoop(),"object"==typeof e&&e.length)for(var a=0;a'),t.append(m)),d.length&&(d[0].style.opacity=Math.max(-s,0)),m.length&&(m[0].style.opacity=Math.max(s,0))}t.transform("translate3d("+l+"px, "+p+"px, 0px) rotateX("+o+"deg) rotateY("+n+"deg)")}},setTransition:function(a){if(x.slides.transition(a).find(".swiper-slide-shadow-top, .swiper-slide-shadow-right, .swiper-slide-shadow-bottom, .swiper-slide-shadow-left").transition(a),x.params.virtualTranslate&&0!==a){var t=!1;x.slides.eq(x.activeIndex).transitionEnd(function(){if(!t&&x&&e(this).hasClass(x.params.slideActiveClass)){t=!0,x.animating=!1;for(var a=["webkitTransitionEnd","transitionend","oTransitionEnd","MSTransitionEnd","msTransitionEnd"],s=0;s