Crelly Slider - Version 1.1.2

Version Description

  • Bug fix: security issues
  • Other minor changes and bug fixes
Download this release

Release Info

Developer fabiorino
Plugin Icon 128x128 Crelly Slider
Version 1.1.2
Comparing to
See all releases

Code changes from version 1.1.1 to 1.1.2

crellyslider.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: Crelly Slider
4
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
5
  * Description: A free responsive slider that supports layers. Add texts, images and videos using a Drop & Builder.
6
- * Version: 1.1.1
7
  * Author: fabiorino
8
  * Author URI: http://fabiorino1.altervista.org
9
  * Text Domain: crelly-slider
@@ -11,13 +11,15 @@
11
  * License: MIT
12
  */
13
 
 
 
14
  /*************/
15
  /** GLOBALS **/
16
- /*************/
17
 
18
  define('CS_DEBUG', false);
19
 
20
- define('CS_VERSION', '1.1.1');
21
  define('CS_PATH', plugin_dir_path(__FILE__));
22
  define('CS_PLUGIN_URL', plugins_url() . '/crelly-slider');
23
 
@@ -25,8 +27,8 @@ require_once CS_PATH . 'wordpress/common.php';
25
  require_once CS_PATH . 'wordpress/tables.php';
26
  require_once CS_PATH . 'wordpress/frontend.php';
27
 
28
- // Create (or remove) 3 tables: the sliders settings, the slides settings and the elements proprieties. We will also store the current version of the plugin
29
- register_activation_hook(__FILE__, array('CrellySliderTables', 'setVersion'));
30
  register_activation_hook(__FILE__, array('CrellySliderTables', 'setTables'));
31
  register_uninstall_hook(__FILE__, array('CrellySliderTables', 'removeVersion'));
32
  register_uninstall_hook(__FILE__, array('CrellySliderTables', 'dropTables'));
@@ -53,12 +55,12 @@ if(is_admin()) {
53
  if(CS_VERSION != get_option('cs_version')) {
54
  CrellySliderTables::setVersion();
55
  }
56
-
57
  CrellySliderAdmin::setEnqueues();
58
  CrellySliderAdmin::showSettings();
59
-
60
  // Ajax functions
61
- require_once CS_PATH . 'wordpress/ajax.php';
62
  }
63
 
64
- ?>
3
  * Plugin Name: Crelly Slider
4
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
5
  * Description: A free responsive slider that supports layers. Add texts, images and videos using a Drop & Builder.
6
+ * Version: 1.1.2
7
  * Author: fabiorino
8
  * Author URI: http://fabiorino1.altervista.org
9
  * Text Domain: crelly-slider
11
  * License: MIT
12
  */
13
 
14
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
15
+
16
  /*************/
17
  /** GLOBALS **/
18
+ /*************/
19
 
20
  define('CS_DEBUG', false);
21
 
22
+ define('CS_VERSION', '1.1.2');
23
  define('CS_PATH', plugin_dir_path(__FILE__));
24
  define('CS_PLUGIN_URL', plugins_url() . '/crelly-slider');
25
 
27
  require_once CS_PATH . 'wordpress/tables.php';
28
  require_once CS_PATH . 'wordpress/frontend.php';
29
 
30
+ // Create (or remove) 3 tables: the sliders settings, the slides settings and the elements proprieties. We will also store the current version of the plugin
31
+ register_activation_hook(__FILE__, array('CrellySliderTables', 'setVersion'));
32
  register_activation_hook(__FILE__, array('CrellySliderTables', 'setTables'));
33
  register_uninstall_hook(__FILE__, array('CrellySliderTables', 'removeVersion'));
34
  register_uninstall_hook(__FILE__, array('CrellySliderTables', 'dropTables'));
55
  if(CS_VERSION != get_option('cs_version')) {
56
  CrellySliderTables::setVersion();
57
  }
58
+
59
  CrellySliderAdmin::setEnqueues();
60
  CrellySliderAdmin::showSettings();
61
+
62
  // Ajax functions
63
+ require_once CS_PATH . 'wordpress/ajax.php';
64
  }
65
 
66
+ ?>
js/jquery.crellyslider.js CHANGED
@@ -2,74 +2,74 @@
2
  * Plugin Name: Crelly Slider
3
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
4
  * Description: The first free WordPress slider with elements animations.
5
- * Version: 1.1.1
6
  * Author: fabiorino
7
  * Author URI: http://fabiorino1.altervista.org
8
  * License: MIT
9
  */
10
 
11
  (function($) {
12
-
13
  /************************/
14
  /** EXTERNAL RESOURCES **/
15
  /************************/
16
-
17
  // Custom build of jQuery mobile. I need it for swipeleft and swiperight
18
  (function(e,t,n){typeof define=="function"&&define.amd?define(["jquery"],function(r){return n(r,e,t),r.mobile}):n(e.jQuery,e,t)})(this,document,function(e,t,n,r){(function(e,t,n,r){function T(e){while(e&&typeof e.originalEvent!="undefined")e=e.originalEvent;return e}function N(t,n){var i=t.type,s,o,a,l,c,h,p,d,v;t=e.Event(t),t.type=n,s=t.originalEvent,o=e.event.props,i.search(/^(mouse|click)/)>-1&&(o=f);if(s)for(p=o.length,l;p;)l=o[--p],t[l]=s[l];i.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1);if(i.search(/^touch/)!==-1){a=T(s),i=a.touches,c=a.changedTouches,h=i&&i.length?i[0]:c&&c.length?c[0]:r;if(h)for(d=0,v=u.length;d<v;d++)l=u[d],t[l]=h[l]}return t}function C(t){var n={},r,s;while(t){r=e.data(t,i);for(s in r)r[s]&&(n[s]=n.hasVirtualBinding=!0);t=t.parentNode}return n}function k(t,n){var r;while(t){r=e.data(t,i);if(r&&(!n||r[n]))return t;t=t.parentNode}return null}function L(){g=!1}function A(){g=!0}function O(){E=0,v.length=0,m=!1,A()}function M(){L()}function _(){D(),c=setTimeout(function(){c=0,O()},e.vmouse.resetTimerDuration)}function D(){c&&(clearTimeout(c),c=0)}function P(t,n,r){var i;if(r&&r[t]||!r&&k(n.target,t))i=N(n,t),e(n.target).trigger(i);return i}function H(t){var n=e.data(t.target,s),r;!m&&(!E||E!==n)&&(r=P("v"+t.type,t),r&&(r.isDefaultPrevented()&&t.preventDefault(),r.isPropagationStopped()&&t.stopPropagation(),r.isImmediatePropagationStopped()&&t.stopImmediatePropagation()))}function B(t){var n=T(t).touches,r,i,o;n&&n.length===1&&(r=t.target,i=C(r),i.hasVirtualBinding&&(E=w++,e.data(r,s,E),D(),M(),d=!1,o=T(t).touches[0],h=o.pageX,p=o.pageY,P("vmouseover",t,i),P("vmousedown",t,i)))}function j(e){if(g)return;d||P("vmousecancel",e,C(e.target)),d=!0,_()}function F(t){if(g)return;var n=T(t).touches[0],r=d,i=e.vmouse.moveDistanceThreshold,s=C(t.target);d=d||Math.abs(n.pageX-h)>i||Math.abs(n.pageY-p)>i,d&&!r&&P("vmousecancel",t,s),P("vmousemove",t,s),_()}function I(e){if(g)return;A();var t=C(e.target),n,r;P("vmouseup",e,t),d||(n=P("vclick",e,t),n&&n.isDefaultPrevented()&&(r=T(e).changedTouches[0],v.push({touchID:E,x:r.clientX,y:r.clientY}),m=!0)),P("vmouseout",e,t),d=!1,_()}function q(t){var n=e.data(t,i),r;if(n)for(r in n)if(n[r])return!0;return!1}function R(){}function U(t){var n=t.substr(1);return{setup:function(){q(this)||e.data(this,i,{});var r=e.data(this,i);r[t]=!0,l[t]=(l[t]||0)+1,l[t]===1&&b.bind(n,H),e(this).bind(n,R),y&&(l.touchstart=(l.touchstart||0)+1,l.touchstart===1&&b.bind("touchstart",B).bind("touchend",I).bind("touchmove",F).bind("scroll",j))},teardown:function(){--l[t],l[t]||b.unbind(n,H),y&&(--l.touchstart,l.touchstart||b.unbind("touchstart",B).unbind("touchmove",F).unbind("touchend",I).unbind("scroll",j));var r=e(this),s=e.data(this,i);s&&(s[t]=!1),r.unbind(n,R),q(this)||r.removeData(i)}}}var i="virtualMouseBindings",s="virtualTouchID",o="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),u="clientX clientY pageX pageY screenX screenY".split(" "),a=e.event.mouseHooks?e.event.mouseHooks.props:[],f=e.event.props.concat(a),l={},c=0,h=0,p=0,d=!1,v=[],m=!1,g=!1,y="addEventListener"in n,b=e(n),w=1,E=0,S,x;e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(x=0;x<o.length;x++)e.event.special[o[x]]=U(o[x]);y&&n.addEventListener("click",function(t){var n=v.length,r=t.target,i,o,u,a,f,l;if(n){i=t.clientX,o=t.clientY,S=e.vmouse.clickDistanceThreshold,u=r;while(u){for(a=0;a<n;a++){f=v[a],l=0;if(u===r&&Math.abs(f.x-i)<S&&Math.abs(f.y-o)<S||e.data(u,s)===f.touchID){t.preventDefault(),t.stopPropagation();return}}u=u.parentNode}}},!0)})(e,t,n),function(e){e.mobile={}}(e),function(e,t){var r={touch:"ontouchend"in n};e.mobile.support=e.mobile.support||{},e.extend(e.support,r),e.extend(e.mobile.support,r)}(e),function(e,t,r){function l(t,n,i,s){var o=i.type;i.type=n,s?e.event.trigger(i,r,t):e.event.dispatch.call(t,i),i.type=o}var i=e(n),s=e.mobile.support.touch,o="touchmove scroll",u=s?"touchstart":"mousedown",a=s?"touchend":"mouseup",f=s?"touchmove":"mousemove";e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,n){e.fn[n]=function(e){return e?this.bind(n,e):this.trigger(n)},e.attrFn&&(e.attrFn[n]=!0)}),e.event.special.scrollstart={enabled:!0,setup:function(){function s(e,n){r=n,l(t,r?"scrollstart":"scrollstop",e)}var t=this,n=e(t),r,i;n.bind(o,function(t){if(!e.event.special.scrollstart.enabled)return;r||s(t,!0),clearTimeout(i),i=setTimeout(function(){s(t,!1)},50)})},teardown:function(){e(this).unbind(o)}},e.event.special.tap={tapholdThreshold:750,emitTapOnTaphold:!0,setup:function(){var t=this,n=e(t),r=!1;n.bind("vmousedown",function(s){function a(){clearTimeout(u)}function f(){a(),n.unbind("vclick",c).unbind("vmouseup",a),i.unbind("vmousecancel",f)}function c(e){f(),!r&&o===e.target?l(t,"tap",e):r&&e.preventDefault()}r=!1;if(s.which&&s.which!==1)return!1;var o=s.target,u;n.bind("vmouseup",a).bind("vclick",c),i.bind("vmousecancel",f),u=setTimeout(function(){e.event.special.tap.emitTapOnTaphold||(r=!0),l(t,"taphold",e.Event("taphold",{target:o}))},e.event.special.tap.tapholdThreshold)})},teardown:function(){e(this).unbind("vmousedown").unbind("vclick").unbind("vmouseup"),i.unbind("vmousecancel")}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:30,getLocation:function(e){var n=t.pageXOffset,r=t.pageYOffset,i=e.clientX,s=e.clientY;if(e.pageY===0&&Math.floor(s)>Math.floor(e.pageY)||e.pageX===0&&Math.floor(i)>Math.floor(e.pageX))i-=n,s-=r;else if(s<e.pageY-r||i<e.pageX-n)i=e.pageX-n,s=e.pageY-r;return{x:i,y:s}},start:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y],origin:e(t.target)}},stop:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y]}},handleSwipe:function(t,n,r,i){if(n.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-n.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])<e.event.special.swipe.verticalDistanceThreshold){var s=t.coords[0]>n.coords[0]?"swipeleft":"swiperight";return l(r,"swipe",e.Event("swipe",{target:i,swipestart:t,swipestop:n}),!0),l(r,s,e.Event(s,{target:i,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,r=e(n),s={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=s,s.start=function(t){if(e.event.special.swipe.eventInProgress)return;e.event.special.swipe.eventInProgress=!0;var r,o=e.event.special.swipe.start(t),u=t.target,l=!1;s.move=function(t){if(!o||t.isDefaultPrevented())return;r=e.event.special.swipe.stop(t),l||(l=e.event.special.swipe.handleSwipe(o,r,n,u),l&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(o.coords[0]-r.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault()},s.stop=function(){l=!0,e.event.special.swipe.eventInProgress=!1,i.off(f,s.move),s.move=null},i.on(f,s.move).one(a,s.stop)},r.on(u,s.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,t.length===0&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(u,n.start),n.move&&i.off(f,n.move),n.stop&&i.off(a,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)});
19
-
20
  // YouTube API:
21
  var tag = document.createElement('script');
22
  tag.src = "https://www.youtube.com/iframe_api";
23
  var firstScriptTag = document.getElementsByTagName('script')[0];
24
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
25
-
26
  // Vimeo API
27
  var Froogaloop=function(){function e(a){return new e.fn.init(a)}function g(a,c,b){if(!b.contentWindow.postMessage)return!1;a=JSON.stringify({method:a,value:c});b.contentWindow.postMessage(a,h)}function l(a){var c,b;try{c=JSON.parse(a.data),b=c.event||c.method}catch(e){}"ready"!=b||k||(k=!0);if(!/^https?:\/\/player.vimeo.com/.test(a.origin))return!1;"*"===h&&(h=a.origin);a=c.value;var m=c.data,f=""===f?null:c.player_id;c=f?d[f][b]:d[b];b=[];if(!c)return!1;void 0!==a&&b.push(a);m&&b.push(m);f&&b.push(f);
28
  return 0<b.length?c.apply(null,b):c.call()}function n(a,c,b){b?(d[b]||(d[b]={}),d[b][a]=c):d[a]=c}var d={},k=!1,h="*";e.fn=e.prototype={element:null,init:function(a){"string"===typeof a&&(a=document.getElementById(a));this.element=a;return this},api:function(a,c){if(!this.element||!a)return!1;var b=this.element,d=""!==b.id?b.id:null,e=c&&c.constructor&&c.call&&c.apply?null:c,f=c&&c.constructor&&c.call&&c.apply?c:null;f&&n(a,f,d);g(a,e,b);return this},addEvent:function(a,c){if(!this.element)return!1;
29
  var b=this.element,d=""!==b.id?b.id:null;n(a,c,d);"ready"!=a?g("addEventListener",a,b):"ready"==a&&k&&c.call(null,d);return this},removeEvent:function(a){if(!this.element)return!1;var c=this.element,b=""!==c.id?c.id:null;a:{if(b&&d[b]){if(!d[b][a]){b=!1;break a}d[b][a]=null}else{if(!d[a]){b=!1;break a}d[a]=null}b=!0}"ready"!=a&&b&&g("removeEventListener",a,c)}};e.fn.init.prototype=e.fn;window.addEventListener?window.addEventListener("message",l,!1):window.attachEvent("onmessage",l);return window.Froogaloop=
30
- window.$f=e}();
31
-
32
  /*******************/
33
  /** CRELLY SLIDER **/
34
  /*******************/
35
-
36
  $.CrellySlider = function(target, settings) {
37
-
38
  /**********************/
39
  /** USEFUL VARIABLES **/
40
  /**********************/
41
-
42
  // HTML classes of the slider
43
  var SLIDER = $(target);
44
  var CRELLY = 'div.crellyslider';
45
  var SLIDES = 'ul.cs-slides';
46
  var SLIDE = 'li.cs-slide';
47
  var ELEMENTS = '> *';
48
-
49
  var total_slides;
50
  var current_slide = 0;
51
-
52
  var paused = false;
53
  var can_pause = false; // Also used as "can change slide"
54
  var executed_slide = false; // Will be true as soon as the current slide is executed
55
  var first_play = true;
56
-
57
  // Slide timer: only current slide. Elements timers: all the elements. This prevents conflicts during changes and pauses
58
  var current_slide_time_timer = new Timer(function() {}, 0);
59
  var elements_times_timers = new Array();
60
  var elements_delays_timers = new Array();
61
-
62
  // The arrays "link" every DOM iframe element to its player element that can interact with APIs
63
  var youtube_videos = {};
64
  var vimeo_videos = {};
65
-
66
  var scale = 1;
67
  var window_width_before_setResponsive = 0; // This variable is useful ONLY to prevent that window.resize fires on vertical resizing or on a right window width
68
-
69
  /********************/
70
  /** INITIALIZATION **/
71
  /********************/
72
-
73
  // EVERYTHING BEGINS HERE
74
  // Before initializing Crelly Slider, we have to wait for the YouTube API. I use the setInterval method to prevent compatibility issues with other plugins and to be sure that, if there is more than a slider loaded on the page, everything works
75
  if((typeof(YT) == 'undefined' || typeof(YT.Player) == 'undefined')) {
@@ -83,22 +83,22 @@
83
  else {
84
  init();
85
  }
86
-
87
  // The slider constructor: runs automatically only the first time, sets the basic needs of the slider and the preloader then runs Crelly Slider
88
- function init() {
89
  // Add wrappers and classes
90
  SLIDER.wrapInner('<div class="crellyslider" />');
91
  SLIDER.find(CRELLY + ' > ul').addClass('cs-slides');
92
  SLIDER.find(CRELLY + ' ' + SLIDES + ' > li').addClass('cs-slide');
93
-
94
  // Set total_slides
95
  total_slides = getSlides().length;
96
-
97
  // If the slider is empty, stop
98
  if(total_slides == 0) {
99
  return false;
100
  }
101
-
102
  // If there is only a slide, clone it
103
  if(total_slides == 1) {
104
  var clone = getSlide(0);
@@ -106,12 +106,12 @@
106
  clone.clone().prependTo(prepend);
107
  total_slides++;
108
  }
109
-
110
  // Show controls (previous and next arrows)
111
  if(settings.showControls) {
112
  SLIDER.find(CRELLY).append('<div class="cs-controls"><span class="cs-next"></span><span class="cs-previous"></span></div>');
113
  }
114
-
115
  // Show navigation
116
  if(settings.showNavigation) {
117
  var nav = '<div class="cs-navigation">';
@@ -121,7 +121,7 @@
121
  nav += '</div>';
122
  SLIDER.find(CRELLY).append(nav);
123
  }
124
-
125
  // Show progress bar
126
  if(settings.showProgressBar) {
127
  SLIDER.find(CRELLY).append('<div class="cs-progress-bar"></div>');
@@ -129,16 +129,16 @@
129
  else {
130
  SLIDER.find(CRELLY).append('<div class="cs-progress-bar cs-progress-bar-hidden"></div>');
131
  }
132
-
133
  // Display slider
134
  SLIDER.css('display', 'block');
135
-
136
  // Set layout for the first time
137
  if(settings.responsive) {
138
  setScale();
139
- }
140
  setLayout();
141
-
142
  // Set slides links
143
  getSlides().find('.cs-background-link')
144
  .html(' ')
@@ -152,9 +152,9 @@
152
  'delay' : 0,
153
  'time' : 'all',
154
  });
155
-
156
  setPreloader();
157
-
158
  initVideos().done(function() {
159
  // Timeout needed to prevent compatibility issues
160
  var loading = setInterval(function() {
@@ -165,21 +165,21 @@
165
  }, 100);
166
  });
167
  }
168
-
169
  // Inits Youtube and Vimeo videos
170
- function initVideos() {
171
  var def = new $.Deferred();
172
  var total_iframes = getSlides().find('.cs-yt-iframe, .cs-vimeo-iframe').length;
173
  var loaded_iframes = 0;
174
-
175
  if(total_iframes == 0) {
176
  return def.resolve().promise();
177
  }
178
-
179
  // When iframes are loaded...
180
  getSlides().find('.cs-yt-iframe, .cs-vimeo-iframe').each(function() {
181
  var iframe = $(this);
182
-
183
  iframe.one('load', function() {
184
  loaded_iframes++;
185
  if(loaded_iframes == total_iframes) {
@@ -192,10 +192,10 @@
192
  }
193
  })
194
  });
195
-
196
  return def.promise();
197
  }
198
-
199
  // Generates an unique id for each youtube iframe, then links them to a new YouTube player
200
  function initYoutubeVideos() {
201
  var def = new $.Deferred();
@@ -203,50 +203,50 @@
203
  var total_yt_videos = slides.find(ELEMENTS + '.cs-yt-iframe').length;
204
  var loaded_videos = 0;
205
  var temp;
206
-
207
  if(total_yt_videos == 0) {
208
  return def.resolve().promise();
209
  }
210
-
211
  slides.each(function() {
212
  var slide = $(this);
213
  var elements = slide.find(ELEMENTS + '.cs-yt-iframe');
214
-
215
  elements.each(function() {
216
  var element = $(this);
217
-
218
  element.uniqueId();
219
  element.attr('id', 'cs-yt-iframe-' + element.attr('id'));
220
-
221
  var player = new YT.Player(element.attr('id'), {
222
  events: {
223
- 'onReady' : function() {
224
  loaded_videos++;
225
  if(loaded_videos == total_yt_videos) {
226
  def.resolve();
227
  }
228
  },
229
-
230
  'onStateChange' : function(e) {
231
  if(e.data === YT.PlayerState.ENDED && getItemData(element, 'loop')) {
232
- player.playVideo();
233
  }
234
  },
235
  },
236
  });
237
-
238
  temp = {
239
  player : player,
240
  played_once : false
241
  };
242
-
243
  youtube_videos[element.attr('id')] = temp;
244
  });
245
  });
246
-
247
  return def.promise();
248
  }
249
-
250
  // Generates an unique id for each Vimeo iframe, then links them to a new Vimeo player
251
  function initVimeoVideos() {
252
  var def = new $.Deferred();
@@ -254,75 +254,75 @@
254
  var total_vimeo_videos = slides.find(ELEMENTS + '.cs-vimeo-iframe').length;
255
  var loaded_videos = 0;
256
  var temp;
257
-
258
  if(total_vimeo_videos == 0) {
259
  return def.resolve().promise();
260
  }
261
-
262
  slides.each(function() {
263
  var slide = $(this);
264
  var elements = slide.find(ELEMENTS + '.cs-vimeo-iframe');
265
-
266
  elements.each(function() {
267
  var element = $(this);
268
-
269
  element.uniqueId();
270
  element.attr('id', 'cs-vimeo-iframe-' + element.attr('id'));
271
  element.attr('src', element.attr('src') + '&player_id=' + element.attr('id'));
272
-
273
  var player = $f(element[0]);
274
-
275
  player.addEvent('ready', function() {
276
  player.addEvent('finish', function() {
277
  vimeo_videos[element.attr('id')].ended = true;
278
  });
279
-
280
  player.addEvent('play', function() {
281
  vimeo_videos[element.attr('id')].played_once = true;
282
  vimeo_videos[element.attr('id')].ended = false;
283
  });
284
-
285
  if(getItemData(element, 'loop')) {
286
- player.api('setLoop', true);
287
  }
288
-
289
- loaded_videos++;
290
  if(loaded_videos == total_vimeo_videos) {
291
  def.resolve();
292
  }
293
  });
294
-
295
  temp = {
296
  player : player,
297
  played_once : false,
298
  ended : false,
299
  };
300
-
301
  vimeo_videos[element.attr('id')] = temp;
302
  });
303
  });
304
-
305
  return def.promise();
306
  }
307
-
308
  // Does operations after window.load is complete. Need to do it as a function for back-end compatibility
309
- function loadedWindow() {
310
  // Set layout for the second time
311
  if(settings.responsive) {
312
  setScale();
313
  }
314
  setLayout();
315
-
316
  window_width_before_setResponsive = $(window).width();
317
-
318
  initProperties();
319
-
320
  addListeners();
321
-
322
  unsetPreloader();
323
-
324
  settings.beforeStart();
325
-
326
  // Positions and responsive dimensions then run
327
  if(settings.responsive) {
328
  setResponsive();
@@ -331,116 +331,116 @@
331
  play();
332
  }
333
  }
334
-
335
  // Stores original slides, elements and elements contents values then hide all the slides and elements. "display: none" only if is an element, not an element content
336
  function initProperties() {
337
  getSlides().each(function() {
338
  var slide = $(this);
339
-
340
  slide.find(ELEMENTS).each(function() {
341
  var element = $(this);
342
-
343
  element.find('*').each(function() {
344
  var element_content = $(this);
345
  setElementDatas(element_content, true);
346
  });
347
-
348
  setElementDatas(element, false);
349
  });
350
-
351
  slide.css('display', 'none');
352
  slide.data('opacity', parseFloat(slide.css('opacity')));
353
  });
354
  }
355
-
356
  // Initializes the element with original values
357
  function setElementDatas(element, is_element_content) {
358
  element.data('width', parseFloat(element.width()));
359
- element.data('height', parseFloat(element.height()));
360
  element.data('letter-spacing', parseFloat(element.css('letter-spacing')));
361
  element.data('font-size', parseFloat(element.css('font-size')));
362
-
363
  if(element.css('line-height').slice(-2).toLowerCase() == 'px') {
364
  element.data('line-height', parseFloat(element.css('line-height')));
365
  }
366
  else {
367
  element.data('line-height', parseFloat(element.css('line-height')) * getItemData(element, 'font-size'));
368
  }
369
-
370
  element.data('padding-top', parseFloat(element.css('padding-top')));
371
  element.data('padding-right', parseFloat(element.css('padding-right')));
372
  element.data('padding-bottom', parseFloat(element.css('padding-bottom')));
373
  element.data('padding-left', parseFloat(element.css('padding-left')));
374
  element.data('opacity', parseFloat(element.css('opacity')));
375
-
376
  if(! is_element_content) {
377
  element.css('display', 'none');
378
  }
379
  }
380
-
381
  // Sets all listeners for the user interaction
382
  function addListeners() {
383
  // Make responsive. Run if resizing horizontally and the slider is not at the right dimension
384
- if(settings.responsive) {
385
  $(window).resize(function() {
386
  if(window_width_before_setResponsive != $(window).width() && ((settings.layout == 'full-width' && getWidth() != $(SLIDER).width()) || ($(SLIDER).width() < getWidth() || (($(SLIDER).width() > getWidth()) && getWidth() < settings.startWidth)))) {
387
  setResponsive();
388
  }
389
  });
390
  }
391
-
392
- // Previous control click
393
  SLIDER.find(CRELLY).find('.cs-controls > .cs-previous').click(function() {
394
  changeSlide(getPreviousSlide());
395
  });
396
-
397
  // Next Control click
398
  SLIDER.find(CRELLY).find('.cs-controls > .cs-next').click(function() {
399
  changeSlide(getNextSlide());
400
  });
401
-
402
  // Swipe and drag
403
- if(settings.enableSwipe) {
404
  SLIDER.find(CRELLY).on('swipeleft', function() {
405
  resume();
406
  changeSlide(getNextSlide());
407
  });
408
-
409
  SLIDER.find(CRELLY).on('swiperight', function() {
410
  resume();
411
  changeSlide(getPreviousSlide());
412
  });
413
  }
414
-
415
  // Navigation link click
416
  SLIDER.find(CRELLY).find('.cs-navigation > .cs-slide-link').click(function() {
417
  changeSlide($(this).index());
418
  });
419
-
420
  // Pause on hover
421
  if(settings.pauseOnHover) {
422
  SLIDER.find(CRELLY).find(SLIDES).hover(function() {
423
  pause();
424
  });
425
-
426
  SLIDER.find(CRELLY).find(SLIDES).mouseleave(function() {
427
  resume();
428
  });
429
  }
430
  }
431
-
432
  // Hides the unnecessary divs and sets the blurred preloader and the gif spinner
433
  function setPreloader() {
434
  // Setup
435
  SLIDER.find(CRELLY).find(SLIDES).css('visibility', 'hidden');
436
  SLIDER.find(CRELLY).find('.cs-progress-bar').css('display', 'none');
437
  SLIDER.find(CRELLY).find('.cs-navigation').css('display', 'none');
438
- SLIDER.find(CRELLY).find('.cs-controls').css('display', 'none');
439
-
440
  // Get the URL of the background image of the first slide
441
  var img_url = getSlide(0).css('background-image');
442
  img_url = img_url.replace(/^url\(["']?/, '').replace(/["']?\)$/, '');
443
-
444
  if(! img_url.match(/\.(jpeg|jpg|gif|png|bmp|tiff|tif)$/)) { // If there isn't a background image
445
  addPreloaderHTML();
446
  }
@@ -457,20 +457,20 @@
457
  }
458
  });
459
  }
460
-
461
  function addPreloaderHTML() {
462
  // Add preloader
463
  SLIDER.find(CRELLY).append('<div class="cs-preloader"><div class="cs-bg"></div><div class="cs-loader"><div class="cs-spinner"></div></div></div>');
464
-
465
  // Set background. Background is set to both the preloader div and the bg div to fix the CSS blur effect
466
- SLIDER.find(CRELLY).find('.cs-preloader').css({
467
  'background-color' : getSlide(0).css('background-color'),
468
  'background-image' : getSlide(0).css('background-image'),
469
  'background-position' : getSlide(0).css('background-position'),
470
  'background-repeat' : getSlide(0).css('background-repeat'),
471
  'background-size' : getSlide(0).css('background-size'),
472
- });
473
- SLIDER.find(CRELLY).find('.cs-preloader > .cs-bg').css({
474
  'background-color' : getSlide(0).css('background-color'),
475
  'background-image' : getSlide(0).css('background-image'),
476
  'background-position' : getSlide(0).css('background-position'),
@@ -479,7 +479,7 @@
479
  });
480
  }
481
  }
482
-
483
  // Shows the necessary divs and fades out the preloader
484
  function unsetPreloader() {
485
  // Setup
@@ -487,11 +487,11 @@
487
  SLIDER.find(CRELLY).find('.cs-progress-bar').css('display', 'block');
488
  SLIDER.find(CRELLY).find('.cs-navigation').css('display', 'block');
489
  SLIDER.find(CRELLY).find('.cs-controls').css('display', 'block');
490
-
491
  // Display the first slide to avoid the slide in animation
492
  slideIn(getSlide(0));
493
  getSlide(0).finish();
494
-
495
  // Fade out
496
  SLIDER.find(CRELLY).find('.cs-preloader').animate({
497
  'opacity' : 0,
@@ -499,16 +499,16 @@
499
  SLIDER.find(CRELLY).find('.cs-preloader').remove();
500
  });
501
  }
502
-
503
  /*******************************/
504
  /** LAYOUT AND RESPONSIVENESS **/
505
  /*******************************/
506
-
507
  // Sets slider and slides. Width and height are scaled
508
  function setLayout() {
509
  var layout = settings.layout;
510
  var width, height;
511
-
512
  switch(layout) {
513
  case 'fixed':
514
  width = settings.startWidth;
@@ -522,8 +522,8 @@
522
  'height' : getScaled(height),
523
  });
524
  break;
525
-
526
- case 'full-width':
527
  width = SLIDER.width();
528
  height = settings.startHeight;
529
  SLIDER.find(CRELLY).css({
@@ -540,96 +540,96 @@
540
  break;
541
  }
542
  }
543
-
544
  // Returns the element top end left gaps (when the slider is full-width is very useful)
545
- function getLayoutGaps(element) {
546
  var top_gap = (getHeight() - settings.startHeight) / 2;
547
  var left_gap = (getWidth() - settings.startWidth) / 2;
548
-
549
  var new_top = 0;
550
  var new_left = 0;
551
-
552
  if(top_gap > 0) {
553
  new_top = top_gap;
554
  }
555
  if(left_gap > 0) {
556
  new_left = left_gap;
557
  }
558
-
559
  return {
560
  top: new_top,
561
  left: new_left,
562
  };
563
  }
564
-
565
  // Scales every element to make it responsive. It automatically restarts the current slide
566
  function setResponsive() {
567
  settings.beforeSetResponsive();
568
-
569
  var slides = getSlides();
570
-
571
  stop(true);
572
-
573
  slides.each(function() {
574
  var slide = $(this);
575
  var elements = slide.find(ELEMENTS);
576
-
577
  slide.finish();
578
  slideIn(slide);
579
  slide.finish();
580
-
581
  elements.each(function() {
582
  var element = $(this);
583
-
584
  element.finish();
585
  elementIn(element);
586
  element.finish();
587
-
588
  if(isVideo(element)) {
589
  pauseVideo(element);
590
  }
591
  });
592
  });
593
-
594
  setScale();
595
-
596
  setLayout();
597
-
598
  slides.each(function() {
599
  var slide = $(this);
600
  var elements = slide.find(ELEMENTS);
601
-
602
- elements.each(function() {
603
  var element = $(this);
604
-
605
  element.find('*').each(function() {
606
  var element_content = $(this);
607
  scaleElement(element_content);
608
  });
609
-
610
  scaleElement(element);
611
-
612
  element.finish();
613
  elementOut(element);
614
  element.finish();
615
-
616
  if(isVideo(element)) {
617
  pauseVideo(element);
618
  }
619
  });
620
-
621
  slide.finish();
622
  slideOut(slide);
623
  slide.finish();
624
  });
625
-
626
  window_width_before_setResponsive = $(window).width();
627
-
628
  play();
629
  }
630
-
631
  // Scales a text or an image and their contents
632
- function scaleElement(element) {
633
  // Standard element
634
  element.css({
635
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top),
@@ -639,16 +639,16 @@
639
  'padding-bottom' : getScaled(getItemData(element, 'padding-bottom')),
640
  'padding-left' : getScaled(getItemData(element, 'padding-left')),
641
  });
642
-
643
  // Element contains text
644
- if(element.is('input') || element.is('button') || element.text().trim().length) {
645
- element.css({
646
  'line-height' : getScaled(getItemData(element, 'line-height')) + 'px',
647
  'letter-spacing' : getScaled(getItemData(element, 'letter-spacing')),
648
  'font-size' : getScaled(getItemData(element, 'font-size')),
649
  });
650
  }
651
-
652
  // Element doesn't contain text (like images or iframes)
653
  else {
654
  element.css({
@@ -657,12 +657,12 @@
657
  });
658
  }
659
  }
660
-
661
  // Using the start dimensions, sets how the slider and it's elements should be scaled
662
  function setScale() {
663
  var slider_width = SLIDER.width();
664
  var start_width = settings.startWidth;
665
-
666
  if(slider_width >= start_width || ! settings.responsive) {
667
  scale = 1;
668
  }
@@ -670,40 +670,40 @@
670
  scale = slider_width / start_width;
671
  }
672
  }
673
-
674
  // Using the current scale variable, returns the value that receives correctly scaled. Remember to always use getScaled() to get positions & dimensions of the elements
675
  function getScaled(value) {
676
  return value * scale;
677
  }
678
-
679
  /*********************/
680
  /** SLIDER COMMANDS **/
681
  /*********************/
682
-
683
  // Runs Crelly from the current slide
684
- function play() {
685
  if(settings.automaticSlide) {
686
  loopSlides();
687
  }
688
  else {
689
  executeSlide(current_slide);
690
  }
691
-
692
  first_play = false;
693
  }
694
-
695
  // Stops all the slides and the elements and resets the progress bar
696
- function stop(finish_queues) {
697
  for(var i = 0; i < elements_times_timers.length; i++) {
698
  elements_times_timers[i].clear();
699
  }
700
-
701
  for(var i = 0; i < elements_delays_timers.length; i++) {
702
  elements_delays_timers[i].clear();
703
  }
704
-
705
  current_slide_time_timer.clear();
706
-
707
  getSlides().each(function() {
708
  var temp_slide = $(this);
709
  if(finish_queues) {
@@ -722,56 +722,56 @@
722
  }
723
  });
724
  });
725
-
726
  resetProgressBar();
727
  }
728
-
729
  // Stops the progress bar and the slide time timer
730
  function pause() {
731
  if(! paused && can_pause) {
732
  settings.beforePause();
733
-
734
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
735
  progress_bar.stop(true);
736
  current_slide_time_timer.pause();
737
-
738
  paused = true;
739
  }
740
  }
741
-
742
  // Animates until the end the progress bar and resumes the current slide time timer
743
  function resume() {
744
  if(paused && can_pause) {
745
  settings.beforeResume();
746
-
747
- var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
748
  var slide_time = getItemData(getSlide(current_slide), 'time');
749
  var remained_delay = current_slide_time_timer.getRemaining();
750
-
751
  progress_bar.animate({
752
  'width' : '100%',
753
  }, remained_delay);
754
-
755
  current_slide_time_timer.resume();
756
-
757
  paused = false;
758
  }
759
  }
760
-
761
  /****************************************/
762
  /** SLIDER OR SLIDES DATAS / UTILITIES **/
763
  /****************************************/
764
-
765
  // Returns the Crelly Slider container width
766
  function getWidth() {
767
  return SLIDER.find(CRELLY).width();
768
  }
769
-
770
  // Returns the Crelly Slider container height
771
  function getHeight() {
772
  return SLIDER.find(CRELLY).height();
773
  }
774
-
775
  // Returns the index of the next slide
776
  function getNextSlide() {
777
  if(current_slide + 1 == total_slides) {
@@ -779,7 +779,7 @@
779
  }
780
  return current_slide + 1;
781
  }
782
-
783
  // Returns the index of the previous slide
784
  function getPreviousSlide() {
785
  if(current_slide - 1 < 0) {
@@ -787,18 +787,18 @@
787
  }
788
  return current_slide - 1;
789
  }
790
-
791
  // Returns a "data" of an item (slide or element). If is an integer || float, returns the parseInt() || parseFloat() of it. If the slide or the element has no data returns the default value
792
  function getItemData(item, data) {
793
  var is_slide;
794
-
795
  if(item.parent('ul').hasClass('cs-slides')) {
796
  is_slide = true;
797
  }
798
  else {
799
  is_slide = false;
800
  }
801
-
802
  switch(data) {
803
  case 'ease-in' :
804
  if(is_slide) {
@@ -808,7 +808,7 @@
808
  return isNaN(parseInt(item.data(data))) ? settings.elementsEaseIn : parseInt(item.data(data));
809
  }
810
  break;
811
-
812
  case 'ease-out' :
813
  if(is_slide) {
814
  return isNaN(parseInt(item.data(data))) ? settings.slidesEaseOut : parseInt(item.data(data));
@@ -817,12 +817,12 @@
817
  return isNaN(parseInt(item.data(data))) ? settings.elementsEaseOut : parseInt(item.data(data));
818
  }
819
  break;
820
-
821
  case 'delay' :
822
  return isNaN(parseInt(item.data(data))) ? settings.elementsDelay : parseInt(item.data(data));
823
-
824
  break;
825
-
826
  case 'time' :
827
  if(is_slide) {
828
  return isNaN(parseInt(item.data(data))) ? settings.slidesTime : parseInt(item.data(data));
@@ -836,7 +836,7 @@
836
  }
837
  }
838
  break;
839
-
840
  case 'ignore-ease-out' :
841
  if(parseInt(item.data(data)) == 1) {
842
  return true;
@@ -846,7 +846,7 @@
846
  }
847
  return settings.ignoreElementsEaseOut;
848
  break;
849
-
850
  case 'autoplay' :
851
  if(parseInt(item.data(data)) == 1) {
852
  return true;
@@ -856,7 +856,7 @@
856
  }
857
  return settings.videoAutoplay;
858
  break;
859
-
860
  case 'loop' :
861
  if(parseInt(item.data(data)) == 1) {
862
  return true;
@@ -866,11 +866,11 @@
866
  }
867
  return settings.videoLoop;
868
  break;
869
-
870
  case 'top' :
871
  case 'left' :
872
  case 'width' :
873
- case 'height' :
874
  case 'padding-top' :
875
  case 'padding-right' :
876
  case 'padding-bottom' :
@@ -880,29 +880,29 @@
880
  case 'font-size' :
881
  return isNaN(parseFloat(item.data(data))) ? 0 : parseFloat(item.data(data));
882
  break;
883
-
884
  case 'in' :
885
  case 'out' :
886
  case 'opacity' :
887
  return item.data(data);
888
  break;
889
-
890
  default :
891
  return false;
892
  break;
893
  }
894
  }
895
-
896
  // Returns the slides DOM elements
897
  function getSlides() {
898
  return SLIDER.find(CRELLY).find(SLIDES).find(SLIDE);
899
  }
900
-
901
  // Returns the slide DOM element
902
  function getSlide(slide_index) {
903
  return getSlides().eq(slide_index);
904
  }
905
-
906
  // Timeout with useful methods
907
  function Timer(callback, delay) {
908
  var id;
@@ -921,11 +921,11 @@
921
  callback();
922
  }, remaining);
923
  };
924
-
925
  this.clear = function () {
926
  clearTimeout(id);
927
  };
928
-
929
  // For now, works only after this.pause(). No need to calculate in other moments
930
  this.getRemaining = function() {
931
  return remaining;
@@ -933,53 +933,53 @@
933
 
934
  this.resume();
935
  }
936
-
937
  // Returns true if the user is using a mobile browser
938
  function isMobile() {
939
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
940
  }
941
-
942
  /*****************/
943
  /** SLIDER CORE **/
944
  /*****************/
945
-
946
  // Loops trough the slides
947
  function loopSlides() {
948
- executeSlide(current_slide).done(function() {
949
  if(! paused) {
950
  current_slide = getNextSlide();
951
  loopSlides();
952
  }
953
  });
954
  }
955
-
956
  // Resets the progress bar and draws the progress bar of the current slide
957
  function drawProgressBar() {
958
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
959
-
960
  resetProgressBar();
961
-
962
  progress_bar.animate({
963
  'width' : '100%',
964
  }, getItemData(getSlide(current_slide), 'time'));
965
  }
966
-
967
  // Resets the progress bar animation and CSS
968
  function resetProgressBar() {
969
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
970
-
971
- progress_bar.stop();
972
  progress_bar.css('width', 0);
973
  }
974
-
975
  // Sets the right HTML classes of the navigation links
976
  function setNavigationLink() {
977
  var nav = SLIDER.find(CRELLY).find('.cs-navigation');
978
  var links = nav.find('> .cs-slide-link');
979
-
980
  links.each(function() {
981
  var link = $(this);
982
-
983
  if(link.index() == current_slide) {
984
  link.addClass('cs-active');
985
  }
@@ -988,106 +988,106 @@
988
  }
989
  });
990
  }
991
-
992
  // Finishes the current slide (animations out of elements and slide) and then plays the new slide
993
- function changeSlide(slide_index) {
994
  if(slide_index == current_slide) {
995
  return;
996
  }
997
-
998
- if(can_pause || executed_slide) {
999
  stop(false);
1000
-
1001
  finishSlide(current_slide, false, true).done(function() {
1002
  current_slide = slide_index;
1003
  play();
1004
  });
1005
  }
1006
  }
1007
-
1008
  // Executes a slide completely. If the auto loop is disabled won't animate out the slide and the elements with time == "all"
1009
  function executeSlide(slide_index) {
1010
  settings.beforeSlideStart();
1011
-
1012
  var def = new $.Deferred();
1013
-
1014
  executed_slide = false;
1015
-
1016
  // If something is still animating, reset
1017
  for(var i = 0; i < elements_times_timers.length; i++) {
1018
  elements_times_timers[i].clear();
1019
- }
1020
  for(var i = 0; i < elements_delays_timers.length; i++) {
1021
  elements_delays_timers[i].clear();
1022
- }
1023
  current_slide_time_timer.clear();
1024
  getSlide(slide_index).finish();
1025
  slideOut(slide_index);
1026
- getSlide(slide_index).finish();
1027
  var elements = getSlide(slide_index).find(ELEMENTS);
1028
  elements.each(function() {
1029
- var element = $(this);
1030
- element.finish();
1031
  elementOut(element);
1032
  element.finish();
1033
  });
1034
-
1035
-
1036
  setNavigationLink();
1037
-
1038
  runSlide(slide_index);
1039
-
1040
  if(settings.automaticSlide) {
1041
  finishSlide(slide_index, true, true).done(function() {
1042
  executed_slide = true;
1043
- def.resolve();
1044
  });
1045
  }
1046
  else {
1047
  finishSlide(slide_index, true, false).done(function() {
1048
- executed_slide = true;
1049
- def.resolve();
1050
  });
1051
  }
1052
-
1053
  return def.promise();
1054
  }
1055
-
1056
  // Executes the in animation of the slide and it's elements
1057
- function runSlide(slide_index) {
1058
  var slide = getSlide(slide_index);
1059
  var elements = slide.find(ELEMENTS);
1060
-
1061
  var elements_in_completed = 0;
1062
  var slide_in_completed = false;
1063
-
1064
  var def = new $.Deferred();
1065
-
1066
  can_pause = false;
1067
-
1068
  // Do slide in animation
1069
- slideIn(slide_index).done(function() {
1070
  drawProgressBar();
1071
-
1072
  can_pause = true;
1073
-
1074
  slide_in_completed = true;
1075
  if(slide_in_completed && elements_in_completed == elements.length) {
1076
  def.resolve();
1077
  }
1078
  });
1079
-
1080
  // Do elements in animation
1081
  elements.each(function() {
1082
  var element = $(this);
1083
  var element_delay = getItemData(element, 'delay');
1084
-
1085
  elements_delays_timers.push(new Timer(function() {
1086
- elementIn(element).done(function() {
1087
  if(isVideo(element)) {
1088
  playVideo(element);
1089
  }
1090
-
1091
  elements_in_completed++;
1092
  if(slide_in_completed && elements_in_completed == elements.length) {
1093
  def.resolve();
@@ -1095,46 +1095,46 @@
1095
  });
1096
  }, element_delay));
1097
  });
1098
-
1099
  return def.promise();
1100
  }
1101
-
1102
  // Does all times, elements out animations and slide out animation
1103
  // execute_time, if true, will do the slide and the elements timers. If false, the timers will be = 0 so the plugin will execute the code of the callback function immediately.
1104
  // animate_all_out, if false, will execute the elements with time != all out animations but not the slide and the elements with time == all out animations. If true, executes all the out animations
1105
- function finishSlide(slide_index, execute_time, animate_all_out) {
1106
  var slide = getSlide(slide_index);
1107
  var elements = slide.find(ELEMENTS);
1108
  var data_time = execute_time ? getItemData(slide, 'time') + getItemData(slide, 'ease-in') : 0;
1109
-
1110
  var elements_out_completed = 0;
1111
  var slide_time_completed = false;
1112
-
1113
  var def = new $.Deferred();
1114
-
1115
  // Elements with time != "all"
1116
  elements.each(function() {
1117
  var element = $(this);
1118
  var time = getItemData(element, 'time');
1119
-
1120
  if(time != 'all') {
1121
  var final_element_time = execute_time ? time : 0;
1122
-
1123
  if(getItemData(element, 'ignore-ease-out')) {
1124
  elements_out_completed++;
1125
-
1126
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1127
  pauseVideos(slide_index);
1128
  slideOut(slide_index);
1129
  def.resolve();
1130
  }
1131
  }
1132
-
1133
- elements_times_timers.push(new Timer(function() {
1134
  elementOut(element).done(function() {
1135
  if(! getItemData(element, 'ignore-ease-out')) {
1136
  elements_out_completed++;
1137
-
1138
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1139
  pauseVideos(slide_index);
1140
  slideOut(slide_index);
@@ -1145,45 +1145,45 @@
1145
  }, final_element_time));
1146
  }
1147
  });
1148
-
1149
  // Execute slide time
1150
  current_slide_time_timer = new Timer(function() {
1151
  can_pause = false;
1152
-
1153
  resetProgressBar();
1154
-
1155
  slide_time_completed = true;
1156
-
1157
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1158
  pauseVideos(slide_index);
1159
  slideOut(slide_index);
1160
  def.resolve();
1161
- }
1162
-
1163
  if(! animate_all_out) {
1164
  def.resolve();
1165
  }
1166
- else {
1167
  // Elements with time == "all"
1168
  elements.each(function() {
1169
  var element = $(this);
1170
  var time = getItemData(element, 'time');
1171
-
1172
  if(time == 'all') {
1173
  if(getItemData(element, 'ignore-ease-out')) {
1174
  elements_out_completed++;
1175
-
1176
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1177
  pauseVideos(slide_index);
1178
  slideOut(slide_index);
1179
  def.resolve();
1180
  }
1181
  }
1182
-
1183
  elementOut(element).done(function() {
1184
  if(! getItemData(element, 'ignore-ease-out')) {
1185
  elements_out_completed++;
1186
-
1187
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1188
  pauseVideos(slide_index);
1189
  slideOut(slide_index);
@@ -1195,17 +1195,17 @@
1195
  });
1196
  }
1197
  }, data_time);
1198
-
1199
  return def.promise();
1200
  }
1201
-
1202
  // VIDEOS FUNCTIONS
1203
-
1204
  // Returns true if the element is a YouTube or a Vimeo iframe
1205
  function isVideo(element) {
1206
  return isYoutubeVideo(element) || isVimeoVideo(element);
1207
  }
1208
-
1209
  // Checks what's the source of the video, then plays it
1210
  function playVideo(element) {
1211
  if(isYoutubeVideo(element)) {
@@ -1215,13 +1215,13 @@
1215
  playVimeoVideo(element);
1216
  }
1217
  }
1218
-
1219
  // Pauses all the YouTube and Vimeo videos
1220
  function pauseVideos(slide_index) {
1221
  pauseYoutubeVideos(slide_index);
1222
  pauseVimeoVideos(slide_index);
1223
  }
1224
-
1225
  // Checks what's the source of the video, then pauses it
1226
  function pauseVideo(element) {
1227
  if(isYoutubeVideo(element)) {
@@ -1231,17 +1231,17 @@
1231
  pauseVimeoVideo(element);
1232
  }
1233
  }
1234
-
1235
  // Checks if the element is a YouTube video
1236
  function isYoutubeVideo(element) {
1237
  return element.hasClass('cs-yt-iframe');
1238
  }
1239
-
1240
  // Returns the player associated to the element
1241
  function getYoutubePlayer(element) {
1242
  return youtube_videos[element.attr('id')].player;
1243
  }
1244
-
1245
  /*
1246
  Returns:
1247
  -1 – unstarted
@@ -1254,97 +1254,97 @@
1254
  function getYoutubePlayerState(element) {
1255
  return getYoutubePlayer(element).getPlayerState();
1256
  }
1257
-
1258
  // Checks if the video can be played and plays it
1259
  function playYoutubeVideo(element) {
1260
  // If autplay and first slide loop. Disabled on mobile for compatibility reasons (details on the Youtube's website)
1261
  if(getItemData(element, 'autoplay') && ! youtube_videos[element.attr('id')].played_once && ! isMobile()) {
1262
  getYoutubePlayer(element).playVideo();
1263
  }
1264
-
1265
  // If was paused
1266
  if(getYoutubePlayerState(element) == 2) {
1267
  getYoutubePlayer(element).playVideo();
1268
  }
1269
-
1270
  youtube_videos[element.attr('id')].played_once = true;
1271
  }
1272
-
1273
  // Pause all the videos in a slide
1274
  function pauseYoutubeVideos(slide_index) {
1275
  getSlide(slide_index).each(function() {
1276
  var slide = $(this);
1277
-
1278
  slide.find(ELEMENTS + '.cs-yt-iframe').each(function() {
1279
  pauseYoutubeVideo($(this));
1280
  });
1281
  });
1282
  }
1283
-
1284
  // Checks if the video can be paused and pauses it
1285
  function pauseYoutubeVideo(element) {
1286
  if(getYoutubePlayerState(element) == 1) {
1287
  getYoutubePlayer(element).pauseVideo();
1288
  }
1289
  }
1290
-
1291
  // Checks if the element is a Vimeo video
1292
  function isVimeoVideo(element) {
1293
  return element.hasClass('cs-vimeo-iframe');
1294
  }
1295
-
1296
  // Returns the player associated to the element
1297
  function getVimeoPlayer(element) {
1298
  return vimeo_videos[element.attr('id')].player;
1299
  }
1300
-
1301
  // Plays the video
1302
- function playVimeoVideo(element) {
1303
  // If autplay and first slide loop. Disabled on mobile for compatibility reasons (details on the Vimeo's website)
1304
  if(getItemData(element, 'autoplay') && ! vimeo_videos[element.attr('id')].played_once && ! isMobile()) {
1305
  getVimeoPlayer(element).api('play');
1306
  }
1307
-
1308
  // If was paused
1309
  if(getVimeoPlayer(element).api('paused') && ! vimeo_videos[element.attr('id')].ended && vimeo_videos[element.attr('id')].played_once) {
1310
  getVimeoPlayer(element).api('play');
1311
  }
1312
  }
1313
-
1314
  // Pause all the videos in a slide
1315
  function pauseVimeoVideos(slide_index) {
1316
  getSlide(slide_index).each(function() {
1317
  var slide = $(this);
1318
-
1319
  slide.find(ELEMENTS + '.cs-vimeo-iframe').each(function() {
1320
  pauseVimeoVideo($(this));
1321
  });
1322
  });
1323
  }
1324
-
1325
  // Pauses the video
1326
  function pauseVimeoVideo(element) {
1327
  getVimeoPlayer(element).api('pause');
1328
  }
1329
-
1330
  /****************/
1331
  /** ANIMATIONS **/
1332
  /****************/
1333
-
1334
  // WARNING: slideIn and elementIn must reset every CSS propriety to the correct value before starting
1335
-
1336
  // Does slide in animation
1337
- function slideIn(slide_index) {
1338
  var slide = getSlide(slide_index);
1339
  var data_in = getItemData(slide, 'in');
1340
  var data_ease_in = getItemData(slide, 'ease-in');
1341
-
1342
  var def = new $.Deferred();
1343
-
1344
  if(slide.css('display') == 'block') {
1345
  return def.resolve().promise();
1346
  }
1347
-
1348
  // If first play, don't execute the animation
1349
  if(first_play) {
1350
  slide.css({
@@ -1355,7 +1355,7 @@
1355
  });
1356
  return def.resolve().promise();
1357
  }
1358
-
1359
  switch(data_in) {
1360
  case 'fade' :
1361
  slide.css({
@@ -1368,7 +1368,7 @@
1368
  'opacity' : getItemData(slide, 'opacity'),
1369
  }, data_ease_in, function() { def.resolve(); });
1370
  break;
1371
-
1372
  case 'fadeLeft' :
1373
  slide.css({
1374
  'display' : 'block',
@@ -1381,7 +1381,7 @@
1381
  'left' : 0,
1382
  }, data_ease_in, function() { def.resolve(); });
1383
  break;
1384
-
1385
  case 'fadeRight' :
1386
  slide.css({
1387
  'display' : 'block',
@@ -1394,7 +1394,7 @@
1394
  'left' : 0,
1395
  }, data_ease_in, function() { def.resolve(); });
1396
  break;
1397
-
1398
  case 'slideLeft' :
1399
  slide.css({
1400
  'display' : 'block',
@@ -1406,7 +1406,7 @@
1406
  'left' : 0,
1407
  }, data_ease_in, function() { def.resolve(); });
1408
  break;
1409
-
1410
  case 'slideRight' :
1411
  slide.css({
1412
  'display' : 'block',
@@ -1418,7 +1418,7 @@
1418
  'left' : 0,
1419
  }, data_ease_in, function() { def.resolve(); });
1420
  break;
1421
-
1422
  case 'slideUp' :
1423
  slide.css({
1424
  'display' : 'block',
@@ -1430,7 +1430,7 @@
1430
  'top' : 0,
1431
  }, data_ease_in, function() { def.resolve(); });
1432
  break;
1433
-
1434
  case 'slideDown' :
1435
  slide.css({
1436
  'display' : 'block',
@@ -1442,7 +1442,7 @@
1442
  'top' : 0,
1443
  }, data_ease_in, function() { def.resolve(); });
1444
  break;
1445
-
1446
  default:
1447
  slide.css({
1448
  'display' : 'block',
@@ -1453,22 +1453,22 @@
1453
  def.resolve();
1454
  break;
1455
  }
1456
-
1457
  return def.promise();
1458
  }
1459
-
1460
  // Does slide out animation
1461
  function slideOut(slide_index) {
1462
  var slide = getSlide(slide_index);
1463
  var data_out = getItemData(slide, 'out');
1464
  var data_ease_out = getItemData(slide, 'ease-out');
1465
-
1466
  var def = new $.Deferred();
1467
-
1468
  if(slide.css('display') == 'none') {
1469
  return def.resolve().promise();
1470
  }
1471
-
1472
  switch(data_out) {
1473
  case 'fade' :
1474
  slide.animate({
@@ -1482,7 +1482,7 @@
1482
  def.resolve();
1483
  });
1484
  break;
1485
-
1486
  case 'fadeLeft' :
1487
  slide.animate({
1488
  'opacity' : 0,
@@ -1497,7 +1497,7 @@
1497
  def.resolve();
1498
  });
1499
  break;
1500
-
1501
  case 'fadeRight' :
1502
  slide.animate({
1503
  'opacity' : 0,
@@ -1512,7 +1512,7 @@
1512
  def.resolve();
1513
  });
1514
  break;
1515
-
1516
  case 'slideLeft' :
1517
  slide.animate({
1518
  'left' : -getWidth(),
@@ -1525,7 +1525,7 @@
1525
  def.resolve();
1526
  });
1527
  break;
1528
-
1529
  case 'slideRight' :
1530
  slide.animate({
1531
  'left' : getWidth(),
@@ -1538,7 +1538,7 @@
1538
  def.resolve();
1539
  });
1540
  break;
1541
-
1542
  case 'slideUp' :
1543
  slide.animate({
1544
  'top' : -getHeight(),
@@ -1551,7 +1551,7 @@
1551
  def.resolve();
1552
  });
1553
  break;
1554
-
1555
  case 'slideDown' :
1556
  slide.animate({
1557
  'top' : getHeight(),
@@ -1564,7 +1564,7 @@
1564
  def.resolve();
1565
  });
1566
  break;
1567
-
1568
  default :
1569
  slide.css({
1570
  'display' : 'none',
@@ -1572,10 +1572,10 @@
1572
  def.resolve();
1573
  break;
1574
  }
1575
-
1576
  return def.promise();
1577
  }
1578
-
1579
  // Does element in animation
1580
  function elementIn(element) {
1581
  var element_width = element.outerWidth();
@@ -1584,13 +1584,13 @@
1584
  var data_ease_in = getItemData(element, 'ease-in');
1585
  var data_top = getItemData(element, 'top');
1586
  var data_left = getItemData(element, 'left');
1587
-
1588
  var def = new $.Deferred();
1589
-
1590
  if(element.css('display') == 'block') {
1591
  return def.resolve().promise();
1592
  }
1593
-
1594
  switch(data_in) {
1595
  case 'slideDown' :
1596
  element.css({
@@ -1602,7 +1602,7 @@
1602
  'top' : getScaled(data_top + getLayoutGaps(element).top),
1603
  }, data_ease_in, function() { def.resolve(); });
1604
  break;
1605
-
1606
  case 'slideUp' :
1607
  element.css({
1608
  'display' : 'block',
@@ -1613,7 +1613,7 @@
1613
  'top' : getScaled(data_top + getLayoutGaps(element).top),
1614
  }, data_ease_in, function() { def.resolve(); });
1615
  break;
1616
-
1617
  case 'slideLeft' :
1618
  element.css({
1619
  'display' : 'block',
@@ -1624,7 +1624,7 @@
1624
  'left' : getScaled(data_left + getLayoutGaps(element).left),
1625
  }, data_ease_in, function() { def.resolve(); });
1626
  break;
1627
-
1628
  case 'slideRight' :
1629
  element.css({
1630
  'display' : 'block',
@@ -1635,7 +1635,7 @@
1635
  'left' : getScaled(data_left + getLayoutGaps(element).left),
1636
  }, data_ease_in, function() { def.resolve(); });
1637
  break;
1638
-
1639
  case 'fade' :
1640
  element.css({
1641
  'display' : 'block',
@@ -1646,7 +1646,7 @@
1646
  'opacity' : getItemData(element, 'opacity'),
1647
  }, data_ease_in, function() { def.resolve(); });
1648
  break;
1649
-
1650
  case 'fadeDown' :
1651
  element.css({
1652
  'display' : 'block',
@@ -1658,7 +1658,7 @@
1658
  'opacity' : getItemData(element, 'opacity'),
1659
  }, data_ease_in, function() { def.resolve(); });
1660
  break;
1661
-
1662
  case 'fadeUp' :
1663
  element.css({
1664
  'display' : 'block',
@@ -1670,7 +1670,7 @@
1670
  'opacity' : getItemData(element, 'opacity'),
1671
  }, data_ease_in, function() { def.resolve(); });
1672
  break;
1673
-
1674
  case 'fadeLeft' :
1675
  element.css({
1676
  'display' : 'block',
@@ -1682,7 +1682,7 @@
1682
  'opacity' : getItemData(element, 'opacity'),
1683
  }, data_ease_in, function() { def.resolve(); });
1684
  break;
1685
-
1686
  case 'fadeRight' :
1687
  element.css({
1688
  'display' : 'block',
@@ -1694,7 +1694,7 @@
1694
  'opacity' : getItemData(element, 'opacity'),
1695
  }, data_ease_in, function() { def.resolve(); });
1696
  break;
1697
-
1698
  case 'fadeSmallDown' :
1699
  element.css({
1700
  'display' : 'block',
@@ -1706,7 +1706,7 @@
1706
  'opacity' : getItemData(element, 'opacity'),
1707
  }, data_ease_in, function() { def.resolve(); });
1708
  break;
1709
-
1710
  case 'fadeSmallUp' :
1711
  element.css({
1712
  'display' : 'block',
@@ -1718,7 +1718,7 @@
1718
  'opacity' : getItemData(element, 'opacity'),
1719
  }, data_ease_in, function() { def.resolve(); });
1720
  break;
1721
-
1722
  case 'fadeSmallLeft' :
1723
  element.css({
1724
  'display' : 'block',
@@ -1730,7 +1730,7 @@
1730
  'opacity' : getItemData(element, 'opacity'),
1731
  }, data_ease_in, function() { def.resolve(); });
1732
  break;
1733
-
1734
  case 'fadeSmallRight' :
1735
  element.css({
1736
  'display' : 'block',
@@ -1742,7 +1742,7 @@
1742
  'opacity' : getItemData(element, 'opacity'),
1743
  }, data_ease_in, function() { def.resolve(); });
1744
  break;
1745
-
1746
  default :
1747
  element.css({
1748
  'display' : 'block',
@@ -1753,23 +1753,23 @@
1753
  def.resolve();
1754
  break;
1755
  }
1756
-
1757
  return def.promise();
1758
  }
1759
-
1760
  // Does element out animation
1761
  function elementOut(element) {
1762
  var element_width = element.outerWidth();
1763
  var element_height = element.outerHeight();
1764
  var data_out = getItemData(element, 'out');
1765
  var data_ease_out = getItemData(element, 'ease-out');
1766
-
1767
  var def = new $.Deferred();
1768
-
1769
  if(element.css('display') == 'none') {
1770
  return def.resolve().promise();
1771
  }
1772
-
1773
  switch(data_out) {
1774
  case 'slideDown' :
1775
  element.animate({
@@ -1782,7 +1782,7 @@
1782
  def.resolve();
1783
  });
1784
  break;
1785
-
1786
  case 'slideUp' :
1787
  element.animate({
1788
  'top' : - element_height,
@@ -1794,7 +1794,7 @@
1794
  def.resolve();
1795
  });
1796
  break;
1797
-
1798
  case 'slideLeft' :
1799
  element.animate({
1800
  'left' : - element_width,
@@ -1806,7 +1806,7 @@
1806
  def.resolve();
1807
  });
1808
  break;
1809
-
1810
  case 'slideRight' :
1811
  element.animate({
1812
  'left' : getWidth(),
@@ -1818,7 +1818,7 @@
1818
  def.resolve();
1819
  });
1820
  break;
1821
-
1822
  case 'fade' :
1823
  element.animate({
1824
  'opacity' : 0,
@@ -1831,7 +1831,7 @@
1831
  def.resolve();
1832
  });
1833
  break;
1834
-
1835
  case 'fadeDown' :
1836
  element.animate({
1837
  'top' : getHeight(),
@@ -1845,7 +1845,7 @@
1845
  def.resolve();
1846
  });
1847
  break;
1848
-
1849
  case 'fadeUp' :
1850
  element.animate({
1851
  'top' : - element_height,
@@ -1859,7 +1859,7 @@
1859
  def.resolve();
1860
  });
1861
  break;
1862
-
1863
  case 'fadeLeft' :
1864
  element.animate({
1865
  'left' : - element_width,
@@ -1873,7 +1873,7 @@
1873
  def.resolve();
1874
  });
1875
  break;
1876
-
1877
  case 'fadeRight' :
1878
  element.animate({
1879
  'left' : getWidth(),
@@ -1887,7 +1887,7 @@
1887
  def.resolve();
1888
  });
1889
  break;
1890
-
1891
  case 'fadeSmallDown' :
1892
  element.animate({
1893
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top + 30),
@@ -1901,7 +1901,7 @@
1901
  def.resolve();
1902
  });
1903
  break;
1904
-
1905
  case 'fadeSmallUp' :
1906
  element.animate({
1907
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top - 30),
@@ -1915,7 +1915,7 @@
1915
  def.resolve();
1916
  });
1917
  break;
1918
-
1919
  case 'fadeSmallLeft' :
1920
  element.animate({
1921
  'left' : getScaled(getItemData(element, 'left') + getLayoutGaps(element).left - 30),
@@ -1929,7 +1929,7 @@
1929
  def.resolve();
1930
  });
1931
  break;
1932
-
1933
  case 'fadeSmallRight' :
1934
  element.animate({
1935
  'left' : getScaled(getItemData(element, 'left') + getLayoutGaps(element).left + 30),
@@ -1943,7 +1943,7 @@
1943
  def.resolve();
1944
  });
1945
  break;
1946
-
1947
  default :
1948
  element.css({
1949
  'display' : 'none',
@@ -1951,62 +1951,62 @@
1951
  def.resolve();
1952
  break;
1953
  }
1954
-
1955
  return def.promise();
1956
  }
1957
-
1958
  /**********************/
1959
  /** PUBLIC FUNCTIONS **/
1960
  /**********************/
1961
-
1962
  this.resume = function() {
1963
  resume();
1964
  }
1965
-
1966
  this.pause = function() {
1967
  pause();
1968
  }
1969
-
1970
  this.nextSlide = function() {
1971
  changeSlide(getNextSlide());
1972
  }
1973
-
1974
  this.previousSlide = function() {
1975
  changeSlide(getPreviousSlide());
1976
  }
1977
-
1978
  this.changeSlide = function(slide_index) {
1979
  changeSlide(slide_index);
1980
  }
1981
-
1982
  this.getCurrentSlide = function() {
1983
  return current_slide;
1984
  }
1985
-
1986
  this.getTotalSlides = function() {
1987
  return total_slides;
1988
  }
1989
-
1990
  };
1991
-
1992
  /**************************/
1993
  /** CRELLY SLIDER PLUGIN **/
1994
  /**************************/
1995
-
1996
- $.fn.crellySlider = function(options) {
1997
  var settings = $.extend({
1998
  layout : 'fixed',
1999
  responsive : true,
2000
  startWidth : 1140,
2001
  startHeight : 500,
2002
-
2003
- pauseOnHover : true,
2004
  automaticSlide : true,
2005
  showControls : true,
2006
  showNavigation : true,
2007
  showProgressBar : true,
2008
  enableSwipe : true,
2009
-
2010
  slidesTime : 3000,
2011
  elementsDelay : 0,
2012
  elementsTime : 'all',
@@ -2015,10 +2015,10 @@
2015
  slidesEaseOut : 300,
2016
  elementsEaseOut : 300,
2017
  ignoreElementsEaseOut : false,
2018
-
2019
  videoAutoplay : false,
2020
  videoLoop : false,
2021
-
2022
  beforeStart : function() {},
2023
  beforeSetResponsive : function() {},
2024
  beforeSlideStart : function() {},
@@ -2033,5 +2033,5 @@
2033
  }
2034
  });
2035
  };
2036
-
2037
- })(jQuery);
2
  * Plugin Name: Crelly Slider
3
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
4
  * Description: The first free WordPress slider with elements animations.
5
+ * Version: 1.1.2
6
  * Author: fabiorino
7
  * Author URI: http://fabiorino1.altervista.org
8
  * License: MIT
9
  */
10
 
11
  (function($) {
12
+
13
  /************************/
14
  /** EXTERNAL RESOURCES **/
15
  /************************/
16
+
17
  // Custom build of jQuery mobile. I need it for swipeleft and swiperight
18
  (function(e,t,n){typeof define=="function"&&define.amd?define(["jquery"],function(r){return n(r,e,t),r.mobile}):n(e.jQuery,e,t)})(this,document,function(e,t,n,r){(function(e,t,n,r){function T(e){while(e&&typeof e.originalEvent!="undefined")e=e.originalEvent;return e}function N(t,n){var i=t.type,s,o,a,l,c,h,p,d,v;t=e.Event(t),t.type=n,s=t.originalEvent,o=e.event.props,i.search(/^(mouse|click)/)>-1&&(o=f);if(s)for(p=o.length,l;p;)l=o[--p],t[l]=s[l];i.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1);if(i.search(/^touch/)!==-1){a=T(s),i=a.touches,c=a.changedTouches,h=i&&i.length?i[0]:c&&c.length?c[0]:r;if(h)for(d=0,v=u.length;d<v;d++)l=u[d],t[l]=h[l]}return t}function C(t){var n={},r,s;while(t){r=e.data(t,i);for(s in r)r[s]&&(n[s]=n.hasVirtualBinding=!0);t=t.parentNode}return n}function k(t,n){var r;while(t){r=e.data(t,i);if(r&&(!n||r[n]))return t;t=t.parentNode}return null}function L(){g=!1}function A(){g=!0}function O(){E=0,v.length=0,m=!1,A()}function M(){L()}function _(){D(),c=setTimeout(function(){c=0,O()},e.vmouse.resetTimerDuration)}function D(){c&&(clearTimeout(c),c=0)}function P(t,n,r){var i;if(r&&r[t]||!r&&k(n.target,t))i=N(n,t),e(n.target).trigger(i);return i}function H(t){var n=e.data(t.target,s),r;!m&&(!E||E!==n)&&(r=P("v"+t.type,t),r&&(r.isDefaultPrevented()&&t.preventDefault(),r.isPropagationStopped()&&t.stopPropagation(),r.isImmediatePropagationStopped()&&t.stopImmediatePropagation()))}function B(t){var n=T(t).touches,r,i,o;n&&n.length===1&&(r=t.target,i=C(r),i.hasVirtualBinding&&(E=w++,e.data(r,s,E),D(),M(),d=!1,o=T(t).touches[0],h=o.pageX,p=o.pageY,P("vmouseover",t,i),P("vmousedown",t,i)))}function j(e){if(g)return;d||P("vmousecancel",e,C(e.target)),d=!0,_()}function F(t){if(g)return;var n=T(t).touches[0],r=d,i=e.vmouse.moveDistanceThreshold,s=C(t.target);d=d||Math.abs(n.pageX-h)>i||Math.abs(n.pageY-p)>i,d&&!r&&P("vmousecancel",t,s),P("vmousemove",t,s),_()}function I(e){if(g)return;A();var t=C(e.target),n,r;P("vmouseup",e,t),d||(n=P("vclick",e,t),n&&n.isDefaultPrevented()&&(r=T(e).changedTouches[0],v.push({touchID:E,x:r.clientX,y:r.clientY}),m=!0)),P("vmouseout",e,t),d=!1,_()}function q(t){var n=e.data(t,i),r;if(n)for(r in n)if(n[r])return!0;return!1}function R(){}function U(t){var n=t.substr(1);return{setup:function(){q(this)||e.data(this,i,{});var r=e.data(this,i);r[t]=!0,l[t]=(l[t]||0)+1,l[t]===1&&b.bind(n,H),e(this).bind(n,R),y&&(l.touchstart=(l.touchstart||0)+1,l.touchstart===1&&b.bind("touchstart",B).bind("touchend",I).bind("touchmove",F).bind("scroll",j))},teardown:function(){--l[t],l[t]||b.unbind(n,H),y&&(--l.touchstart,l.touchstart||b.unbind("touchstart",B).unbind("touchmove",F).unbind("touchend",I).unbind("scroll",j));var r=e(this),s=e.data(this,i);s&&(s[t]=!1),r.unbind(n,R),q(this)||r.removeData(i)}}}var i="virtualMouseBindings",s="virtualTouchID",o="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),u="clientX clientY pageX pageY screenX screenY".split(" "),a=e.event.mouseHooks?e.event.mouseHooks.props:[],f=e.event.props.concat(a),l={},c=0,h=0,p=0,d=!1,v=[],m=!1,g=!1,y="addEventListener"in n,b=e(n),w=1,E=0,S,x;e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500};for(x=0;x<o.length;x++)e.event.special[o[x]]=U(o[x]);y&&n.addEventListener("click",function(t){var n=v.length,r=t.target,i,o,u,a,f,l;if(n){i=t.clientX,o=t.clientY,S=e.vmouse.clickDistanceThreshold,u=r;while(u){for(a=0;a<n;a++){f=v[a],l=0;if(u===r&&Math.abs(f.x-i)<S&&Math.abs(f.y-o)<S||e.data(u,s)===f.touchID){t.preventDefault(),t.stopPropagation();return}}u=u.parentNode}}},!0)})(e,t,n),function(e){e.mobile={}}(e),function(e,t){var r={touch:"ontouchend"in n};e.mobile.support=e.mobile.support||{},e.extend(e.support,r),e.extend(e.mobile.support,r)}(e),function(e,t,r){function l(t,n,i,s){var o=i.type;i.type=n,s?e.event.trigger(i,r,t):e.event.dispatch.call(t,i),i.type=o}var i=e(n),s=e.mobile.support.touch,o="touchmove scroll",u=s?"touchstart":"mousedown",a=s?"touchend":"mouseup",f=s?"touchmove":"mousemove";e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,n){e.fn[n]=function(e){return e?this.bind(n,e):this.trigger(n)},e.attrFn&&(e.attrFn[n]=!0)}),e.event.special.scrollstart={enabled:!0,setup:function(){function s(e,n){r=n,l(t,r?"scrollstart":"scrollstop",e)}var t=this,n=e(t),r,i;n.bind(o,function(t){if(!e.event.special.scrollstart.enabled)return;r||s(t,!0),clearTimeout(i),i=setTimeout(function(){s(t,!1)},50)})},teardown:function(){e(this).unbind(o)}},e.event.special.tap={tapholdThreshold:750,emitTapOnTaphold:!0,setup:function(){var t=this,n=e(t),r=!1;n.bind("vmousedown",function(s){function a(){clearTimeout(u)}function f(){a(),n.unbind("vclick",c).unbind("vmouseup",a),i.unbind("vmousecancel",f)}function c(e){f(),!r&&o===e.target?l(t,"tap",e):r&&e.preventDefault()}r=!1;if(s.which&&s.which!==1)return!1;var o=s.target,u;n.bind("vmouseup",a).bind("vclick",c),i.bind("vmousecancel",f),u=setTimeout(function(){e.event.special.tap.emitTapOnTaphold||(r=!0),l(t,"taphold",e.Event("taphold",{target:o}))},e.event.special.tap.tapholdThreshold)})},teardown:function(){e(this).unbind("vmousedown").unbind("vclick").unbind("vmouseup"),i.unbind("vmousecancel")}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:30,getLocation:function(e){var n=t.pageXOffset,r=t.pageYOffset,i=e.clientX,s=e.clientY;if(e.pageY===0&&Math.floor(s)>Math.floor(e.pageY)||e.pageX===0&&Math.floor(i)>Math.floor(e.pageX))i-=n,s-=r;else if(s<e.pageY-r||i<e.pageX-n)i=e.pageX-n,s=e.pageY-r;return{x:i,y:s}},start:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y],origin:e(t.target)}},stop:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,r=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[r.x,r.y]}},handleSwipe:function(t,n,r,i){if(n.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-n.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])<e.event.special.swipe.verticalDistanceThreshold){var s=t.coords[0]>n.coords[0]?"swipeleft":"swiperight";return l(r,"swipe",e.Event("swipe",{target:i,swipestart:t,swipestop:n}),!0),l(r,s,e.Event(s,{target:i,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,r=e(n),s={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=s,s.start=function(t){if(e.event.special.swipe.eventInProgress)return;e.event.special.swipe.eventInProgress=!0;var r,o=e.event.special.swipe.start(t),u=t.target,l=!1;s.move=function(t){if(!o||t.isDefaultPrevented())return;r=e.event.special.swipe.stop(t),l||(l=e.event.special.swipe.handleSwipe(o,r,n,u),l&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(o.coords[0]-r.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault()},s.stop=function(){l=!0,e.event.special.swipe.eventInProgress=!1,i.off(f,s.move),s.move=null},i.on(f,s.move).one(a,s.stop)},r.on(u,s.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,t.length===0&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(u,n.start),n.move&&i.off(f,n.move),n.stop&&i.off(a,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)});
19
+
20
  // YouTube API:
21
  var tag = document.createElement('script');
22
  tag.src = "https://www.youtube.com/iframe_api";
23
  var firstScriptTag = document.getElementsByTagName('script')[0];
24
  firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
25
+
26
  // Vimeo API
27
  var Froogaloop=function(){function e(a){return new e.fn.init(a)}function g(a,c,b){if(!b.contentWindow.postMessage)return!1;a=JSON.stringify({method:a,value:c});b.contentWindow.postMessage(a,h)}function l(a){var c,b;try{c=JSON.parse(a.data),b=c.event||c.method}catch(e){}"ready"!=b||k||(k=!0);if(!/^https?:\/\/player.vimeo.com/.test(a.origin))return!1;"*"===h&&(h=a.origin);a=c.value;var m=c.data,f=""===f?null:c.player_id;c=f?d[f][b]:d[b];b=[];if(!c)return!1;void 0!==a&&b.push(a);m&&b.push(m);f&&b.push(f);
28
  return 0<b.length?c.apply(null,b):c.call()}function n(a,c,b){b?(d[b]||(d[b]={}),d[b][a]=c):d[a]=c}var d={},k=!1,h="*";e.fn=e.prototype={element:null,init:function(a){"string"===typeof a&&(a=document.getElementById(a));this.element=a;return this},api:function(a,c){if(!this.element||!a)return!1;var b=this.element,d=""!==b.id?b.id:null,e=c&&c.constructor&&c.call&&c.apply?null:c,f=c&&c.constructor&&c.call&&c.apply?c:null;f&&n(a,f,d);g(a,e,b);return this},addEvent:function(a,c){if(!this.element)return!1;
29
  var b=this.element,d=""!==b.id?b.id:null;n(a,c,d);"ready"!=a?g("addEventListener",a,b):"ready"==a&&k&&c.call(null,d);return this},removeEvent:function(a){if(!this.element)return!1;var c=this.element,b=""!==c.id?c.id:null;a:{if(b&&d[b]){if(!d[b][a]){b=!1;break a}d[b][a]=null}else{if(!d[a]){b=!1;break a}d[a]=null}b=!0}"ready"!=a&&b&&g("removeEventListener",a,c)}};e.fn.init.prototype=e.fn;window.addEventListener?window.addEventListener("message",l,!1):window.attachEvent("onmessage",l);return window.Froogaloop=
30
+ window.$f=e}();
31
+
32
  /*******************/
33
  /** CRELLY SLIDER **/
34
  /*******************/
35
+
36
  $.CrellySlider = function(target, settings) {
37
+
38
  /**********************/
39
  /** USEFUL VARIABLES **/
40
  /**********************/
41
+
42
  // HTML classes of the slider
43
  var SLIDER = $(target);
44
  var CRELLY = 'div.crellyslider';
45
  var SLIDES = 'ul.cs-slides';
46
  var SLIDE = 'li.cs-slide';
47
  var ELEMENTS = '> *';
48
+
49
  var total_slides;
50
  var current_slide = 0;
51
+
52
  var paused = false;
53
  var can_pause = false; // Also used as "can change slide"
54
  var executed_slide = false; // Will be true as soon as the current slide is executed
55
  var first_play = true;
56
+
57
  // Slide timer: only current slide. Elements timers: all the elements. This prevents conflicts during changes and pauses
58
  var current_slide_time_timer = new Timer(function() {}, 0);
59
  var elements_times_timers = new Array();
60
  var elements_delays_timers = new Array();
61
+
62
  // The arrays "link" every DOM iframe element to its player element that can interact with APIs
63
  var youtube_videos = {};
64
  var vimeo_videos = {};
65
+
66
  var scale = 1;
67
  var window_width_before_setResponsive = 0; // This variable is useful ONLY to prevent that window.resize fires on vertical resizing or on a right window width
68
+
69
  /********************/
70
  /** INITIALIZATION **/
71
  /********************/
72
+
73
  // EVERYTHING BEGINS HERE
74
  // Before initializing Crelly Slider, we have to wait for the YouTube API. I use the setInterval method to prevent compatibility issues with other plugins and to be sure that, if there is more than a slider loaded on the page, everything works
75
  if((typeof(YT) == 'undefined' || typeof(YT.Player) == 'undefined')) {
83
  else {
84
  init();
85
  }
86
+
87
  // The slider constructor: runs automatically only the first time, sets the basic needs of the slider and the preloader then runs Crelly Slider
88
+ function init() {
89
  // Add wrappers and classes
90
  SLIDER.wrapInner('<div class="crellyslider" />');
91
  SLIDER.find(CRELLY + ' > ul').addClass('cs-slides');
92
  SLIDER.find(CRELLY + ' ' + SLIDES + ' > li').addClass('cs-slide');
93
+
94
  // Set total_slides
95
  total_slides = getSlides().length;
96
+
97
  // If the slider is empty, stop
98
  if(total_slides == 0) {
99
  return false;
100
  }
101
+
102
  // If there is only a slide, clone it
103
  if(total_slides == 1) {
104
  var clone = getSlide(0);
106
  clone.clone().prependTo(prepend);
107
  total_slides++;
108
  }
109
+
110
  // Show controls (previous and next arrows)
111
  if(settings.showControls) {
112
  SLIDER.find(CRELLY).append('<div class="cs-controls"><span class="cs-next"></span><span class="cs-previous"></span></div>');
113
  }
114
+
115
  // Show navigation
116
  if(settings.showNavigation) {
117
  var nav = '<div class="cs-navigation">';
121
  nav += '</div>';
122
  SLIDER.find(CRELLY).append(nav);
123
  }
124
+
125
  // Show progress bar
126
  if(settings.showProgressBar) {
127
  SLIDER.find(CRELLY).append('<div class="cs-progress-bar"></div>');
129
  else {
130
  SLIDER.find(CRELLY).append('<div class="cs-progress-bar cs-progress-bar-hidden"></div>');
131
  }
132
+
133
  // Display slider
134
  SLIDER.css('display', 'block');
135
+
136
  // Set layout for the first time
137
  if(settings.responsive) {
138
  setScale();
139
+ }
140
  setLayout();
141
+
142
  // Set slides links
143
  getSlides().find('.cs-background-link')
144
  .html(' ')
152
  'delay' : 0,
153
  'time' : 'all',
154
  });
155
+
156
  setPreloader();
157
+
158
  initVideos().done(function() {
159
  // Timeout needed to prevent compatibility issues
160
  var loading = setInterval(function() {
165
  }, 100);
166
  });
167
  }
168
+
169
  // Inits Youtube and Vimeo videos
170
+ function initVideos() {
171
  var def = new $.Deferred();
172
  var total_iframes = getSlides().find('.cs-yt-iframe, .cs-vimeo-iframe').length;
173
  var loaded_iframes = 0;
174
+
175
  if(total_iframes == 0) {
176
  return def.resolve().promise();
177
  }
178
+
179
  // When iframes are loaded...
180
  getSlides().find('.cs-yt-iframe, .cs-vimeo-iframe').each(function() {
181
  var iframe = $(this);
182
+
183
  iframe.one('load', function() {
184
  loaded_iframes++;
185
  if(loaded_iframes == total_iframes) {
192
  }
193
  })
194
  });
195
+
196
  return def.promise();
197
  }
198
+
199
  // Generates an unique id for each youtube iframe, then links them to a new YouTube player
200
  function initYoutubeVideos() {
201
  var def = new $.Deferred();
203
  var total_yt_videos = slides.find(ELEMENTS + '.cs-yt-iframe').length;
204
  var loaded_videos = 0;
205
  var temp;
206
+
207
  if(total_yt_videos == 0) {
208
  return def.resolve().promise();
209
  }
210
+
211
  slides.each(function() {
212
  var slide = $(this);
213
  var elements = slide.find(ELEMENTS + '.cs-yt-iframe');
214
+
215
  elements.each(function() {
216
  var element = $(this);
217
+
218
  element.uniqueId();
219
  element.attr('id', 'cs-yt-iframe-' + element.attr('id'));
220
+
221
  var player = new YT.Player(element.attr('id'), {
222
  events: {
223
+ 'onReady' : function() {
224
  loaded_videos++;
225
  if(loaded_videos == total_yt_videos) {
226
  def.resolve();
227
  }
228
  },
229
+
230
  'onStateChange' : function(e) {
231
  if(e.data === YT.PlayerState.ENDED && getItemData(element, 'loop')) {
232
+ player.playVideo();
233
  }
234
  },
235
  },
236
  });
237
+
238
  temp = {
239
  player : player,
240
  played_once : false
241
  };
242
+
243
  youtube_videos[element.attr('id')] = temp;
244
  });
245
  });
246
+
247
  return def.promise();
248
  }
249
+
250
  // Generates an unique id for each Vimeo iframe, then links them to a new Vimeo player
251
  function initVimeoVideos() {
252
  var def = new $.Deferred();
254
  var total_vimeo_videos = slides.find(ELEMENTS + '.cs-vimeo-iframe').length;
255
  var loaded_videos = 0;
256
  var temp;
257
+
258
  if(total_vimeo_videos == 0) {
259
  return def.resolve().promise();
260
  }
261
+
262
  slides.each(function() {
263
  var slide = $(this);
264
  var elements = slide.find(ELEMENTS + '.cs-vimeo-iframe');
265
+
266
  elements.each(function() {
267
  var element = $(this);
268
+
269
  element.uniqueId();
270
  element.attr('id', 'cs-vimeo-iframe-' + element.attr('id'));
271
  element.attr('src', element.attr('src') + '&player_id=' + element.attr('id'));
272
+
273
  var player = $f(element[0]);
274
+
275
  player.addEvent('ready', function() {
276
  player.addEvent('finish', function() {
277
  vimeo_videos[element.attr('id')].ended = true;
278
  });
279
+
280
  player.addEvent('play', function() {
281
  vimeo_videos[element.attr('id')].played_once = true;
282
  vimeo_videos[element.attr('id')].ended = false;
283
  });
284
+
285
  if(getItemData(element, 'loop')) {
286
+ player.api('setLoop', true);
287
  }
288
+
289
+ loaded_videos++;
290
  if(loaded_videos == total_vimeo_videos) {
291
  def.resolve();
292
  }
293
  });
294
+
295
  temp = {
296
  player : player,
297
  played_once : false,
298
  ended : false,
299
  };
300
+
301
  vimeo_videos[element.attr('id')] = temp;
302
  });
303
  });
304
+
305
  return def.promise();
306
  }
307
+
308
  // Does operations after window.load is complete. Need to do it as a function for back-end compatibility
309
+ function loadedWindow() {
310
  // Set layout for the second time
311
  if(settings.responsive) {
312
  setScale();
313
  }
314
  setLayout();
315
+
316
  window_width_before_setResponsive = $(window).width();
317
+
318
  initProperties();
319
+
320
  addListeners();
321
+
322
  unsetPreloader();
323
+
324
  settings.beforeStart();
325
+
326
  // Positions and responsive dimensions then run
327
  if(settings.responsive) {
328
  setResponsive();
331
  play();
332
  }
333
  }
334
+
335
  // Stores original slides, elements and elements contents values then hide all the slides and elements. "display: none" only if is an element, not an element content
336
  function initProperties() {
337
  getSlides().each(function() {
338
  var slide = $(this);
339
+
340
  slide.find(ELEMENTS).each(function() {
341
  var element = $(this);
342
+
343
  element.find('*').each(function() {
344
  var element_content = $(this);
345
  setElementDatas(element_content, true);
346
  });
347
+
348
  setElementDatas(element, false);
349
  });
350
+
351
  slide.css('display', 'none');
352
  slide.data('opacity', parseFloat(slide.css('opacity')));
353
  });
354
  }
355
+
356
  // Initializes the element with original values
357
  function setElementDatas(element, is_element_content) {
358
  element.data('width', parseFloat(element.width()));
359
+ element.data('height', parseFloat(element.height()));
360
  element.data('letter-spacing', parseFloat(element.css('letter-spacing')));
361
  element.data('font-size', parseFloat(element.css('font-size')));
362
+
363
  if(element.css('line-height').slice(-2).toLowerCase() == 'px') {
364
  element.data('line-height', parseFloat(element.css('line-height')));
365
  }
366
  else {
367
  element.data('line-height', parseFloat(element.css('line-height')) * getItemData(element, 'font-size'));
368
  }
369
+
370
  element.data('padding-top', parseFloat(element.css('padding-top')));
371
  element.data('padding-right', parseFloat(element.css('padding-right')));
372
  element.data('padding-bottom', parseFloat(element.css('padding-bottom')));
373
  element.data('padding-left', parseFloat(element.css('padding-left')));
374
  element.data('opacity', parseFloat(element.css('opacity')));
375
+
376
  if(! is_element_content) {
377
  element.css('display', 'none');
378
  }
379
  }
380
+
381
  // Sets all listeners for the user interaction
382
  function addListeners() {
383
  // Make responsive. Run if resizing horizontally and the slider is not at the right dimension
384
+ if(settings.responsive) {
385
  $(window).resize(function() {
386
  if(window_width_before_setResponsive != $(window).width() && ((settings.layout == 'full-width' && getWidth() != $(SLIDER).width()) || ($(SLIDER).width() < getWidth() || (($(SLIDER).width() > getWidth()) && getWidth() < settings.startWidth)))) {
387
  setResponsive();
388
  }
389
  });
390
  }
391
+
392
+ // Previous control click
393
  SLIDER.find(CRELLY).find('.cs-controls > .cs-previous').click(function() {
394
  changeSlide(getPreviousSlide());
395
  });
396
+
397
  // Next Control click
398
  SLIDER.find(CRELLY).find('.cs-controls > .cs-next').click(function() {
399
  changeSlide(getNextSlide());
400
  });
401
+
402
  // Swipe and drag
403
+ if(settings.enableSwipe) {
404
  SLIDER.find(CRELLY).on('swipeleft', function() {
405
  resume();
406
  changeSlide(getNextSlide());
407
  });
408
+
409
  SLIDER.find(CRELLY).on('swiperight', function() {
410
  resume();
411
  changeSlide(getPreviousSlide());
412
  });
413
  }
414
+
415
  // Navigation link click
416
  SLIDER.find(CRELLY).find('.cs-navigation > .cs-slide-link').click(function() {
417
  changeSlide($(this).index());
418
  });
419
+
420
  // Pause on hover
421
  if(settings.pauseOnHover) {
422
  SLIDER.find(CRELLY).find(SLIDES).hover(function() {
423
  pause();
424
  });
425
+
426
  SLIDER.find(CRELLY).find(SLIDES).mouseleave(function() {
427
  resume();
428
  });
429
  }
430
  }
431
+
432
  // Hides the unnecessary divs and sets the blurred preloader and the gif spinner
433
  function setPreloader() {
434
  // Setup
435
  SLIDER.find(CRELLY).find(SLIDES).css('visibility', 'hidden');
436
  SLIDER.find(CRELLY).find('.cs-progress-bar').css('display', 'none');
437
  SLIDER.find(CRELLY).find('.cs-navigation').css('display', 'none');
438
+ SLIDER.find(CRELLY).find('.cs-controls').css('display', 'none');
439
+
440
  // Get the URL of the background image of the first slide
441
  var img_url = getSlide(0).css('background-image');
442
  img_url = img_url.replace(/^url\(["']?/, '').replace(/["']?\)$/, '');
443
+
444
  if(! img_url.match(/\.(jpeg|jpg|gif|png|bmp|tiff|tif)$/)) { // If there isn't a background image
445
  addPreloaderHTML();
446
  }
457
  }
458
  });
459
  }
460
+
461
  function addPreloaderHTML() {
462
  // Add preloader
463
  SLIDER.find(CRELLY).append('<div class="cs-preloader"><div class="cs-bg"></div><div class="cs-loader"><div class="cs-spinner"></div></div></div>');
464
+
465
  // Set background. Background is set to both the preloader div and the bg div to fix the CSS blur effect
466
+ SLIDER.find(CRELLY).find('.cs-preloader').css({
467
  'background-color' : getSlide(0).css('background-color'),
468
  'background-image' : getSlide(0).css('background-image'),
469
  'background-position' : getSlide(0).css('background-position'),
470
  'background-repeat' : getSlide(0).css('background-repeat'),
471
  'background-size' : getSlide(0).css('background-size'),
472
+ });
473
+ SLIDER.find(CRELLY).find('.cs-preloader > .cs-bg').css({
474
  'background-color' : getSlide(0).css('background-color'),
475
  'background-image' : getSlide(0).css('background-image'),
476
  'background-position' : getSlide(0).css('background-position'),
479
  });
480
  }
481
  }
482
+
483
  // Shows the necessary divs and fades out the preloader
484
  function unsetPreloader() {
485
  // Setup
487
  SLIDER.find(CRELLY).find('.cs-progress-bar').css('display', 'block');
488
  SLIDER.find(CRELLY).find('.cs-navigation').css('display', 'block');
489
  SLIDER.find(CRELLY).find('.cs-controls').css('display', 'block');
490
+
491
  // Display the first slide to avoid the slide in animation
492
  slideIn(getSlide(0));
493
  getSlide(0).finish();
494
+
495
  // Fade out
496
  SLIDER.find(CRELLY).find('.cs-preloader').animate({
497
  'opacity' : 0,
499
  SLIDER.find(CRELLY).find('.cs-preloader').remove();
500
  });
501
  }
502
+
503
  /*******************************/
504
  /** LAYOUT AND RESPONSIVENESS **/
505
  /*******************************/
506
+
507
  // Sets slider and slides. Width and height are scaled
508
  function setLayout() {
509
  var layout = settings.layout;
510
  var width, height;
511
+
512
  switch(layout) {
513
  case 'fixed':
514
  width = settings.startWidth;
522
  'height' : getScaled(height),
523
  });
524
  break;
525
+
526
+ case 'full-width':
527
  width = SLIDER.width();
528
  height = settings.startHeight;
529
  SLIDER.find(CRELLY).css({
540
  break;
541
  }
542
  }
543
+
544
  // Returns the element top end left gaps (when the slider is full-width is very useful)
545
+ function getLayoutGaps(element) {
546
  var top_gap = (getHeight() - settings.startHeight) / 2;
547
  var left_gap = (getWidth() - settings.startWidth) / 2;
548
+
549
  var new_top = 0;
550
  var new_left = 0;
551
+
552
  if(top_gap > 0) {
553
  new_top = top_gap;
554
  }
555
  if(left_gap > 0) {
556
  new_left = left_gap;
557
  }
558
+
559
  return {
560
  top: new_top,
561
  left: new_left,
562
  };
563
  }
564
+
565
  // Scales every element to make it responsive. It automatically restarts the current slide
566
  function setResponsive() {
567
  settings.beforeSetResponsive();
568
+
569
  var slides = getSlides();
570
+
571
  stop(true);
572
+
573
  slides.each(function() {
574
  var slide = $(this);
575
  var elements = slide.find(ELEMENTS);
576
+
577
  slide.finish();
578
  slideIn(slide);
579
  slide.finish();
580
+
581
  elements.each(function() {
582
  var element = $(this);
583
+
584
  element.finish();
585
  elementIn(element);
586
  element.finish();
587
+
588
  if(isVideo(element)) {
589
  pauseVideo(element);
590
  }
591
  });
592
  });
593
+
594
  setScale();
595
+
596
  setLayout();
597
+
598
  slides.each(function() {
599
  var slide = $(this);
600
  var elements = slide.find(ELEMENTS);
601
+
602
+ elements.each(function() {
603
  var element = $(this);
604
+
605
  element.find('*').each(function() {
606
  var element_content = $(this);
607
  scaleElement(element_content);
608
  });
609
+
610
  scaleElement(element);
611
+
612
  element.finish();
613
  elementOut(element);
614
  element.finish();
615
+
616
  if(isVideo(element)) {
617
  pauseVideo(element);
618
  }
619
  });
620
+
621
  slide.finish();
622
  slideOut(slide);
623
  slide.finish();
624
  });
625
+
626
  window_width_before_setResponsive = $(window).width();
627
+
628
  play();
629
  }
630
+
631
  // Scales a text or an image and their contents
632
+ function scaleElement(element) {
633
  // Standard element
634
  element.css({
635
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top),
639
  'padding-bottom' : getScaled(getItemData(element, 'padding-bottom')),
640
  'padding-left' : getScaled(getItemData(element, 'padding-left')),
641
  });
642
+
643
  // Element contains text
644
+ if(element.is('input') || element.is('button') || element.text().trim().length) {
645
+ element.css({
646
  'line-height' : getScaled(getItemData(element, 'line-height')) + 'px',
647
  'letter-spacing' : getScaled(getItemData(element, 'letter-spacing')),
648
  'font-size' : getScaled(getItemData(element, 'font-size')),
649
  });
650
  }
651
+
652
  // Element doesn't contain text (like images or iframes)
653
  else {
654
  element.css({
657
  });
658
  }
659
  }
660
+
661
  // Using the start dimensions, sets how the slider and it's elements should be scaled
662
  function setScale() {
663
  var slider_width = SLIDER.width();
664
  var start_width = settings.startWidth;
665
+
666
  if(slider_width >= start_width || ! settings.responsive) {
667
  scale = 1;
668
  }
670
  scale = slider_width / start_width;
671
  }
672
  }
673
+
674
  // Using the current scale variable, returns the value that receives correctly scaled. Remember to always use getScaled() to get positions & dimensions of the elements
675
  function getScaled(value) {
676
  return value * scale;
677
  }
678
+
679
  /*********************/
680
  /** SLIDER COMMANDS **/
681
  /*********************/
682
+
683
  // Runs Crelly from the current slide
684
+ function play() {
685
  if(settings.automaticSlide) {
686
  loopSlides();
687
  }
688
  else {
689
  executeSlide(current_slide);
690
  }
691
+
692
  first_play = false;
693
  }
694
+
695
  // Stops all the slides and the elements and resets the progress bar
696
+ function stop(finish_queues) {
697
  for(var i = 0; i < elements_times_timers.length; i++) {
698
  elements_times_timers[i].clear();
699
  }
700
+
701
  for(var i = 0; i < elements_delays_timers.length; i++) {
702
  elements_delays_timers[i].clear();
703
  }
704
+
705
  current_slide_time_timer.clear();
706
+
707
  getSlides().each(function() {
708
  var temp_slide = $(this);
709
  if(finish_queues) {
722
  }
723
  });
724
  });
725
+
726
  resetProgressBar();
727
  }
728
+
729
  // Stops the progress bar and the slide time timer
730
  function pause() {
731
  if(! paused && can_pause) {
732
  settings.beforePause();
733
+
734
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
735
  progress_bar.stop(true);
736
  current_slide_time_timer.pause();
737
+
738
  paused = true;
739
  }
740
  }
741
+
742
  // Animates until the end the progress bar and resumes the current slide time timer
743
  function resume() {
744
  if(paused && can_pause) {
745
  settings.beforeResume();
746
+
747
+ var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
748
  var slide_time = getItemData(getSlide(current_slide), 'time');
749
  var remained_delay = current_slide_time_timer.getRemaining();
750
+
751
  progress_bar.animate({
752
  'width' : '100%',
753
  }, remained_delay);
754
+
755
  current_slide_time_timer.resume();
756
+
757
  paused = false;
758
  }
759
  }
760
+
761
  /****************************************/
762
  /** SLIDER OR SLIDES DATAS / UTILITIES **/
763
  /****************************************/
764
+
765
  // Returns the Crelly Slider container width
766
  function getWidth() {
767
  return SLIDER.find(CRELLY).width();
768
  }
769
+
770
  // Returns the Crelly Slider container height
771
  function getHeight() {
772
  return SLIDER.find(CRELLY).height();
773
  }
774
+
775
  // Returns the index of the next slide
776
  function getNextSlide() {
777
  if(current_slide + 1 == total_slides) {
779
  }
780
  return current_slide + 1;
781
  }
782
+
783
  // Returns the index of the previous slide
784
  function getPreviousSlide() {
785
  if(current_slide - 1 < 0) {
787
  }
788
  return current_slide - 1;
789
  }
790
+
791
  // Returns a "data" of an item (slide or element). If is an integer || float, returns the parseInt() || parseFloat() of it. If the slide or the element has no data returns the default value
792
  function getItemData(item, data) {
793
  var is_slide;
794
+
795
  if(item.parent('ul').hasClass('cs-slides')) {
796
  is_slide = true;
797
  }
798
  else {
799
  is_slide = false;
800
  }
801
+
802
  switch(data) {
803
  case 'ease-in' :
804
  if(is_slide) {
808
  return isNaN(parseInt(item.data(data))) ? settings.elementsEaseIn : parseInt(item.data(data));
809
  }
810
  break;
811
+
812
  case 'ease-out' :
813
  if(is_slide) {
814
  return isNaN(parseInt(item.data(data))) ? settings.slidesEaseOut : parseInt(item.data(data));
817
  return isNaN(parseInt(item.data(data))) ? settings.elementsEaseOut : parseInt(item.data(data));
818
  }
819
  break;
820
+
821
  case 'delay' :
822
  return isNaN(parseInt(item.data(data))) ? settings.elementsDelay : parseInt(item.data(data));
823
+
824
  break;
825
+
826
  case 'time' :
827
  if(is_slide) {
828
  return isNaN(parseInt(item.data(data))) ? settings.slidesTime : parseInt(item.data(data));
836
  }
837
  }
838
  break;
839
+
840
  case 'ignore-ease-out' :
841
  if(parseInt(item.data(data)) == 1) {
842
  return true;
846
  }
847
  return settings.ignoreElementsEaseOut;
848
  break;
849
+
850
  case 'autoplay' :
851
  if(parseInt(item.data(data)) == 1) {
852
  return true;
856
  }
857
  return settings.videoAutoplay;
858
  break;
859
+
860
  case 'loop' :
861
  if(parseInt(item.data(data)) == 1) {
862
  return true;
866
  }
867
  return settings.videoLoop;
868
  break;
869
+
870
  case 'top' :
871
  case 'left' :
872
  case 'width' :
873
+ case 'height' :
874
  case 'padding-top' :
875
  case 'padding-right' :
876
  case 'padding-bottom' :
880
  case 'font-size' :
881
  return isNaN(parseFloat(item.data(data))) ? 0 : parseFloat(item.data(data));
882
  break;
883
+
884
  case 'in' :
885
  case 'out' :
886
  case 'opacity' :
887
  return item.data(data);
888
  break;
889
+
890
  default :
891
  return false;
892
  break;
893
  }
894
  }
895
+
896
  // Returns the slides DOM elements
897
  function getSlides() {
898
  return SLIDER.find(CRELLY).find(SLIDES).find(SLIDE);
899
  }
900
+
901
  // Returns the slide DOM element
902
  function getSlide(slide_index) {
903
  return getSlides().eq(slide_index);
904
  }
905
+
906
  // Timeout with useful methods
907
  function Timer(callback, delay) {
908
  var id;
921
  callback();
922
  }, remaining);
923
  };
924
+
925
  this.clear = function () {
926
  clearTimeout(id);
927
  };
928
+
929
  // For now, works only after this.pause(). No need to calculate in other moments
930
  this.getRemaining = function() {
931
  return remaining;
933
 
934
  this.resume();
935
  }
936
+
937
  // Returns true if the user is using a mobile browser
938
  function isMobile() {
939
  return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
940
  }
941
+
942
  /*****************/
943
  /** SLIDER CORE **/
944
  /*****************/
945
+
946
  // Loops trough the slides
947
  function loopSlides() {
948
+ executeSlide(current_slide).done(function() {
949
  if(! paused) {
950
  current_slide = getNextSlide();
951
  loopSlides();
952
  }
953
  });
954
  }
955
+
956
  // Resets the progress bar and draws the progress bar of the current slide
957
  function drawProgressBar() {
958
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
959
+
960
  resetProgressBar();
961
+
962
  progress_bar.animate({
963
  'width' : '100%',
964
  }, getItemData(getSlide(current_slide), 'time'));
965
  }
966
+
967
  // Resets the progress bar animation and CSS
968
  function resetProgressBar() {
969
  var progress_bar = SLIDER.find(CRELLY).find('.cs-progress-bar');
970
+
971
+ progress_bar.stop();
972
  progress_bar.css('width', 0);
973
  }
974
+
975
  // Sets the right HTML classes of the navigation links
976
  function setNavigationLink() {
977
  var nav = SLIDER.find(CRELLY).find('.cs-navigation');
978
  var links = nav.find('> .cs-slide-link');
979
+
980
  links.each(function() {
981
  var link = $(this);
982
+
983
  if(link.index() == current_slide) {
984
  link.addClass('cs-active');
985
  }
988
  }
989
  });
990
  }
991
+
992
  // Finishes the current slide (animations out of elements and slide) and then plays the new slide
993
+ function changeSlide(slide_index) {
994
  if(slide_index == current_slide) {
995
  return;
996
  }
997
+
998
+ if(can_pause || executed_slide) {
999
  stop(false);
1000
+
1001
  finishSlide(current_slide, false, true).done(function() {
1002
  current_slide = slide_index;
1003
  play();
1004
  });
1005
  }
1006
  }
1007
+
1008
  // Executes a slide completely. If the auto loop is disabled won't animate out the slide and the elements with time == "all"
1009
  function executeSlide(slide_index) {
1010
  settings.beforeSlideStart();
1011
+
1012
  var def = new $.Deferred();
1013
+
1014
  executed_slide = false;
1015
+
1016
  // If something is still animating, reset
1017
  for(var i = 0; i < elements_times_timers.length; i++) {
1018
  elements_times_timers[i].clear();
1019
+ }
1020
  for(var i = 0; i < elements_delays_timers.length; i++) {
1021
  elements_delays_timers[i].clear();
1022
+ }
1023
  current_slide_time_timer.clear();
1024
  getSlide(slide_index).finish();
1025
  slideOut(slide_index);
1026
+ getSlide(slide_index).finish();
1027
  var elements = getSlide(slide_index).find(ELEMENTS);
1028
  elements.each(function() {
1029
+ var element = $(this);
1030
+ element.finish();
1031
  elementOut(element);
1032
  element.finish();
1033
  });
1034
+
1035
+
1036
  setNavigationLink();
1037
+
1038
  runSlide(slide_index);
1039
+
1040
  if(settings.automaticSlide) {
1041
  finishSlide(slide_index, true, true).done(function() {
1042
  executed_slide = true;
1043
+ def.resolve();
1044
  });
1045
  }
1046
  else {
1047
  finishSlide(slide_index, true, false).done(function() {
1048
+ executed_slide = true;
1049
+ def.resolve();
1050
  });
1051
  }
1052
+
1053
  return def.promise();
1054
  }
1055
+
1056
  // Executes the in animation of the slide and it's elements
1057
+ function runSlide(slide_index) {
1058
  var slide = getSlide(slide_index);
1059
  var elements = slide.find(ELEMENTS);
1060
+
1061
  var elements_in_completed = 0;
1062
  var slide_in_completed = false;
1063
+
1064
  var def = new $.Deferred();
1065
+
1066
  can_pause = false;
1067
+
1068
  // Do slide in animation
1069
+ slideIn(slide_index).done(function() {
1070
  drawProgressBar();
1071
+
1072
  can_pause = true;
1073
+
1074
  slide_in_completed = true;
1075
  if(slide_in_completed && elements_in_completed == elements.length) {
1076
  def.resolve();
1077
  }
1078
  });
1079
+
1080
  // Do elements in animation
1081
  elements.each(function() {
1082
  var element = $(this);
1083
  var element_delay = getItemData(element, 'delay');
1084
+
1085
  elements_delays_timers.push(new Timer(function() {
1086
+ elementIn(element).done(function() {
1087
  if(isVideo(element)) {
1088
  playVideo(element);
1089
  }
1090
+
1091
  elements_in_completed++;
1092
  if(slide_in_completed && elements_in_completed == elements.length) {
1093
  def.resolve();
1095
  });
1096
  }, element_delay));
1097
  });
1098
+
1099
  return def.promise();
1100
  }
1101
+
1102
  // Does all times, elements out animations and slide out animation
1103
  // execute_time, if true, will do the slide and the elements timers. If false, the timers will be = 0 so the plugin will execute the code of the callback function immediately.
1104
  // animate_all_out, if false, will execute the elements with time != all out animations but not the slide and the elements with time == all out animations. If true, executes all the out animations
1105
+ function finishSlide(slide_index, execute_time, animate_all_out) {
1106
  var slide = getSlide(slide_index);
1107
  var elements = slide.find(ELEMENTS);
1108
  var data_time = execute_time ? getItemData(slide, 'time') + getItemData(slide, 'ease-in') : 0;
1109
+
1110
  var elements_out_completed = 0;
1111
  var slide_time_completed = false;
1112
+
1113
  var def = new $.Deferred();
1114
+
1115
  // Elements with time != "all"
1116
  elements.each(function() {
1117
  var element = $(this);
1118
  var time = getItemData(element, 'time');
1119
+
1120
  if(time != 'all') {
1121
  var final_element_time = execute_time ? time : 0;
1122
+
1123
  if(getItemData(element, 'ignore-ease-out')) {
1124
  elements_out_completed++;
1125
+
1126
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1127
  pauseVideos(slide_index);
1128
  slideOut(slide_index);
1129
  def.resolve();
1130
  }
1131
  }
1132
+
1133
+ elements_times_timers.push(new Timer(function() {
1134
  elementOut(element).done(function() {
1135
  if(! getItemData(element, 'ignore-ease-out')) {
1136
  elements_out_completed++;
1137
+
1138
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1139
  pauseVideos(slide_index);
1140
  slideOut(slide_index);
1145
  }, final_element_time));
1146
  }
1147
  });
1148
+
1149
  // Execute slide time
1150
  current_slide_time_timer = new Timer(function() {
1151
  can_pause = false;
1152
+
1153
  resetProgressBar();
1154
+
1155
  slide_time_completed = true;
1156
+
1157
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1158
  pauseVideos(slide_index);
1159
  slideOut(slide_index);
1160
  def.resolve();
1161
+ }
1162
+
1163
  if(! animate_all_out) {
1164
  def.resolve();
1165
  }
1166
+ else {
1167
  // Elements with time == "all"
1168
  elements.each(function() {
1169
  var element = $(this);
1170
  var time = getItemData(element, 'time');
1171
+
1172
  if(time == 'all') {
1173
  if(getItemData(element, 'ignore-ease-out')) {
1174
  elements_out_completed++;
1175
+
1176
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1177
  pauseVideos(slide_index);
1178
  slideOut(slide_index);
1179
  def.resolve();
1180
  }
1181
  }
1182
+
1183
  elementOut(element).done(function() {
1184
  if(! getItemData(element, 'ignore-ease-out')) {
1185
  elements_out_completed++;
1186
+
1187
  if(elements.length == elements_out_completed && slide_time_completed && animate_all_out) {
1188
  pauseVideos(slide_index);
1189
  slideOut(slide_index);
1195
  });
1196
  }
1197
  }, data_time);
1198
+
1199
  return def.promise();
1200
  }
1201
+
1202
  // VIDEOS FUNCTIONS
1203
+
1204
  // Returns true if the element is a YouTube or a Vimeo iframe
1205
  function isVideo(element) {
1206
  return isYoutubeVideo(element) || isVimeoVideo(element);
1207
  }
1208
+
1209
  // Checks what's the source of the video, then plays it
1210
  function playVideo(element) {
1211
  if(isYoutubeVideo(element)) {
1215
  playVimeoVideo(element);
1216
  }
1217
  }
1218
+
1219
  // Pauses all the YouTube and Vimeo videos
1220
  function pauseVideos(slide_index) {
1221
  pauseYoutubeVideos(slide_index);
1222
  pauseVimeoVideos(slide_index);
1223
  }
1224
+
1225
  // Checks what's the source of the video, then pauses it
1226
  function pauseVideo(element) {
1227
  if(isYoutubeVideo(element)) {
1231
  pauseVimeoVideo(element);
1232
  }
1233
  }
1234
+
1235
  // Checks if the element is a YouTube video
1236
  function isYoutubeVideo(element) {
1237
  return element.hasClass('cs-yt-iframe');
1238
  }
1239
+
1240
  // Returns the player associated to the element
1241
  function getYoutubePlayer(element) {
1242
  return youtube_videos[element.attr('id')].player;
1243
  }
1244
+
1245
  /*
1246
  Returns:
1247
  -1 – unstarted
1254
  function getYoutubePlayerState(element) {
1255
  return getYoutubePlayer(element).getPlayerState();
1256
  }
1257
+
1258
  // Checks if the video can be played and plays it
1259
  function playYoutubeVideo(element) {
1260
  // If autplay and first slide loop. Disabled on mobile for compatibility reasons (details on the Youtube's website)
1261
  if(getItemData(element, 'autoplay') && ! youtube_videos[element.attr('id')].played_once && ! isMobile()) {
1262
  getYoutubePlayer(element).playVideo();
1263
  }
1264
+
1265
  // If was paused
1266
  if(getYoutubePlayerState(element) == 2) {
1267
  getYoutubePlayer(element).playVideo();
1268
  }
1269
+
1270
  youtube_videos[element.attr('id')].played_once = true;
1271
  }
1272
+
1273
  // Pause all the videos in a slide
1274
  function pauseYoutubeVideos(slide_index) {
1275
  getSlide(slide_index).each(function() {
1276
  var slide = $(this);
1277
+
1278
  slide.find(ELEMENTS + '.cs-yt-iframe').each(function() {
1279
  pauseYoutubeVideo($(this));
1280
  });
1281
  });
1282
  }
1283
+
1284
  // Checks if the video can be paused and pauses it
1285
  function pauseYoutubeVideo(element) {
1286
  if(getYoutubePlayerState(element) == 1) {
1287
  getYoutubePlayer(element).pauseVideo();
1288
  }
1289
  }
1290
+
1291
  // Checks if the element is a Vimeo video
1292
  function isVimeoVideo(element) {
1293
  return element.hasClass('cs-vimeo-iframe');
1294
  }
1295
+
1296
  // Returns the player associated to the element
1297
  function getVimeoPlayer(element) {
1298
  return vimeo_videos[element.attr('id')].player;
1299
  }
1300
+
1301
  // Plays the video
1302
+ function playVimeoVideo(element) {
1303
  // If autplay and first slide loop. Disabled on mobile for compatibility reasons (details on the Vimeo's website)
1304
  if(getItemData(element, 'autoplay') && ! vimeo_videos[element.attr('id')].played_once && ! isMobile()) {
1305
  getVimeoPlayer(element).api('play');
1306
  }
1307
+
1308
  // If was paused
1309
  if(getVimeoPlayer(element).api('paused') && ! vimeo_videos[element.attr('id')].ended && vimeo_videos[element.attr('id')].played_once) {
1310
  getVimeoPlayer(element).api('play');
1311
  }
1312
  }
1313
+
1314
  // Pause all the videos in a slide
1315
  function pauseVimeoVideos(slide_index) {
1316
  getSlide(slide_index).each(function() {
1317
  var slide = $(this);
1318
+
1319
  slide.find(ELEMENTS + '.cs-vimeo-iframe').each(function() {
1320
  pauseVimeoVideo($(this));
1321
  });
1322
  });
1323
  }
1324
+
1325
  // Pauses the video
1326
  function pauseVimeoVideo(element) {
1327
  getVimeoPlayer(element).api('pause');
1328
  }
1329
+
1330
  /****************/
1331
  /** ANIMATIONS **/
1332
  /****************/
1333
+
1334
  // WARNING: slideIn and elementIn must reset every CSS propriety to the correct value before starting
1335
+
1336
  // Does slide in animation
1337
+ function slideIn(slide_index) {
1338
  var slide = getSlide(slide_index);
1339
  var data_in = getItemData(slide, 'in');
1340
  var data_ease_in = getItemData(slide, 'ease-in');
1341
+
1342
  var def = new $.Deferred();
1343
+
1344
  if(slide.css('display') == 'block') {
1345
  return def.resolve().promise();
1346
  }
1347
+
1348
  // If first play, don't execute the animation
1349
  if(first_play) {
1350
  slide.css({
1355
  });
1356
  return def.resolve().promise();
1357
  }
1358
+
1359
  switch(data_in) {
1360
  case 'fade' :
1361
  slide.css({
1368
  'opacity' : getItemData(slide, 'opacity'),
1369
  }, data_ease_in, function() { def.resolve(); });
1370
  break;
1371
+
1372
  case 'fadeLeft' :
1373
  slide.css({
1374
  'display' : 'block',
1381
  'left' : 0,
1382
  }, data_ease_in, function() { def.resolve(); });
1383
  break;
1384
+
1385
  case 'fadeRight' :
1386
  slide.css({
1387
  'display' : 'block',
1394
  'left' : 0,
1395
  }, data_ease_in, function() { def.resolve(); });
1396
  break;
1397
+
1398
  case 'slideLeft' :
1399
  slide.css({
1400
  'display' : 'block',
1406
  'left' : 0,
1407
  }, data_ease_in, function() { def.resolve(); });
1408
  break;
1409
+
1410
  case 'slideRight' :
1411
  slide.css({
1412
  'display' : 'block',
1418
  'left' : 0,
1419
  }, data_ease_in, function() { def.resolve(); });
1420
  break;
1421
+
1422
  case 'slideUp' :
1423
  slide.css({
1424
  'display' : 'block',
1430
  'top' : 0,
1431
  }, data_ease_in, function() { def.resolve(); });
1432
  break;
1433
+
1434
  case 'slideDown' :
1435
  slide.css({
1436
  'display' : 'block',
1442
  'top' : 0,
1443
  }, data_ease_in, function() { def.resolve(); });
1444
  break;
1445
+
1446
  default:
1447
  slide.css({
1448
  'display' : 'block',
1453
  def.resolve();
1454
  break;
1455
  }
1456
+
1457
  return def.promise();
1458
  }
1459
+
1460
  // Does slide out animation
1461
  function slideOut(slide_index) {
1462
  var slide = getSlide(slide_index);
1463
  var data_out = getItemData(slide, 'out');
1464
  var data_ease_out = getItemData(slide, 'ease-out');
1465
+
1466
  var def = new $.Deferred();
1467
+
1468
  if(slide.css('display') == 'none') {
1469
  return def.resolve().promise();
1470
  }
1471
+
1472
  switch(data_out) {
1473
  case 'fade' :
1474
  slide.animate({
1482
  def.resolve();
1483
  });
1484
  break;
1485
+
1486
  case 'fadeLeft' :
1487
  slide.animate({
1488
  'opacity' : 0,
1497
  def.resolve();
1498
  });
1499
  break;
1500
+
1501
  case 'fadeRight' :
1502
  slide.animate({
1503
  'opacity' : 0,
1512
  def.resolve();
1513
  });
1514
  break;
1515
+
1516
  case 'slideLeft' :
1517
  slide.animate({
1518
  'left' : -getWidth(),
1525
  def.resolve();
1526
  });
1527
  break;
1528
+
1529
  case 'slideRight' :
1530
  slide.animate({
1531
  'left' : getWidth(),
1538
  def.resolve();
1539
  });
1540
  break;
1541
+
1542
  case 'slideUp' :
1543
  slide.animate({
1544
  'top' : -getHeight(),
1551
  def.resolve();
1552
  });
1553
  break;
1554
+
1555
  case 'slideDown' :
1556
  slide.animate({
1557
  'top' : getHeight(),
1564
  def.resolve();
1565
  });
1566
  break;
1567
+
1568
  default :
1569
  slide.css({
1570
  'display' : 'none',
1572
  def.resolve();
1573
  break;
1574
  }
1575
+
1576
  return def.promise();
1577
  }
1578
+
1579
  // Does element in animation
1580
  function elementIn(element) {
1581
  var element_width = element.outerWidth();
1584
  var data_ease_in = getItemData(element, 'ease-in');
1585
  var data_top = getItemData(element, 'top');
1586
  var data_left = getItemData(element, 'left');
1587
+
1588
  var def = new $.Deferred();
1589
+
1590
  if(element.css('display') == 'block') {
1591
  return def.resolve().promise();
1592
  }
1593
+
1594
  switch(data_in) {
1595
  case 'slideDown' :
1596
  element.css({
1602
  'top' : getScaled(data_top + getLayoutGaps(element).top),
1603
  }, data_ease_in, function() { def.resolve(); });
1604
  break;
1605
+
1606
  case 'slideUp' :
1607
  element.css({
1608
  'display' : 'block',
1613
  'top' : getScaled(data_top + getLayoutGaps(element).top),
1614
  }, data_ease_in, function() { def.resolve(); });
1615
  break;
1616
+
1617
  case 'slideLeft' :
1618
  element.css({
1619
  'display' : 'block',
1624
  'left' : getScaled(data_left + getLayoutGaps(element).left),
1625
  }, data_ease_in, function() { def.resolve(); });
1626
  break;
1627
+
1628
  case 'slideRight' :
1629
  element.css({
1630
  'display' : 'block',
1635
  'left' : getScaled(data_left + getLayoutGaps(element).left),
1636
  }, data_ease_in, function() { def.resolve(); });
1637
  break;
1638
+
1639
  case 'fade' :
1640
  element.css({
1641
  'display' : 'block',
1646
  'opacity' : getItemData(element, 'opacity'),
1647
  }, data_ease_in, function() { def.resolve(); });
1648
  break;
1649
+
1650
  case 'fadeDown' :
1651
  element.css({
1652
  'display' : 'block',
1658
  'opacity' : getItemData(element, 'opacity'),
1659
  }, data_ease_in, function() { def.resolve(); });
1660
  break;
1661
+
1662
  case 'fadeUp' :
1663
  element.css({
1664
  'display' : 'block',
1670
  'opacity' : getItemData(element, 'opacity'),
1671
  }, data_ease_in, function() { def.resolve(); });
1672
  break;
1673
+
1674
  case 'fadeLeft' :
1675
  element.css({
1676
  'display' : 'block',
1682
  'opacity' : getItemData(element, 'opacity'),
1683
  }, data_ease_in, function() { def.resolve(); });
1684
  break;
1685
+
1686
  case 'fadeRight' :
1687
  element.css({
1688
  'display' : 'block',
1694
  'opacity' : getItemData(element, 'opacity'),
1695
  }, data_ease_in, function() { def.resolve(); });
1696
  break;
1697
+
1698
  case 'fadeSmallDown' :
1699
  element.css({
1700
  'display' : 'block',
1706
  'opacity' : getItemData(element, 'opacity'),
1707
  }, data_ease_in, function() { def.resolve(); });
1708
  break;
1709
+
1710
  case 'fadeSmallUp' :
1711
  element.css({
1712
  'display' : 'block',
1718
  'opacity' : getItemData(element, 'opacity'),
1719
  }, data_ease_in, function() { def.resolve(); });
1720
  break;
1721
+
1722
  case 'fadeSmallLeft' :
1723
  element.css({
1724
  'display' : 'block',
1730
  'opacity' : getItemData(element, 'opacity'),
1731
  }, data_ease_in, function() { def.resolve(); });
1732
  break;
1733
+
1734
  case 'fadeSmallRight' :
1735
  element.css({
1736
  'display' : 'block',
1742
  'opacity' : getItemData(element, 'opacity'),
1743
  }, data_ease_in, function() { def.resolve(); });
1744
  break;
1745
+
1746
  default :
1747
  element.css({
1748
  'display' : 'block',
1753
  def.resolve();
1754
  break;
1755
  }
1756
+
1757
  return def.promise();
1758
  }
1759
+
1760
  // Does element out animation
1761
  function elementOut(element) {
1762
  var element_width = element.outerWidth();
1763
  var element_height = element.outerHeight();
1764
  var data_out = getItemData(element, 'out');
1765
  var data_ease_out = getItemData(element, 'ease-out');
1766
+
1767
  var def = new $.Deferred();
1768
+
1769
  if(element.css('display') == 'none') {
1770
  return def.resolve().promise();
1771
  }
1772
+
1773
  switch(data_out) {
1774
  case 'slideDown' :
1775
  element.animate({
1782
  def.resolve();
1783
  });
1784
  break;
1785
+
1786
  case 'slideUp' :
1787
  element.animate({
1788
  'top' : - element_height,
1794
  def.resolve();
1795
  });
1796
  break;
1797
+
1798
  case 'slideLeft' :
1799
  element.animate({
1800
  'left' : - element_width,
1806
  def.resolve();
1807
  });
1808
  break;
1809
+
1810
  case 'slideRight' :
1811
  element.animate({
1812
  'left' : getWidth(),
1818
  def.resolve();
1819
  });
1820
  break;
1821
+
1822
  case 'fade' :
1823
  element.animate({
1824
  'opacity' : 0,
1831
  def.resolve();
1832
  });
1833
  break;
1834
+
1835
  case 'fadeDown' :
1836
  element.animate({
1837
  'top' : getHeight(),
1845
  def.resolve();
1846
  });
1847
  break;
1848
+
1849
  case 'fadeUp' :
1850
  element.animate({
1851
  'top' : - element_height,
1859
  def.resolve();
1860
  });
1861
  break;
1862
+
1863
  case 'fadeLeft' :
1864
  element.animate({
1865
  'left' : - element_width,
1873
  def.resolve();
1874
  });
1875
  break;
1876
+
1877
  case 'fadeRight' :
1878
  element.animate({
1879
  'left' : getWidth(),
1887
  def.resolve();
1888
  });
1889
  break;
1890
+
1891
  case 'fadeSmallDown' :
1892
  element.animate({
1893
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top + 30),
1901
  def.resolve();
1902
  });
1903
  break;
1904
+
1905
  case 'fadeSmallUp' :
1906
  element.animate({
1907
  'top' : getScaled(getItemData(element, 'top') + getLayoutGaps(element).top - 30),
1915
  def.resolve();
1916
  });
1917
  break;
1918
+
1919
  case 'fadeSmallLeft' :
1920
  element.animate({
1921
  'left' : getScaled(getItemData(element, 'left') + getLayoutGaps(element).left - 30),
1929
  def.resolve();
1930
  });
1931
  break;
1932
+
1933
  case 'fadeSmallRight' :
1934
  element.animate({
1935
  'left' : getScaled(getItemData(element, 'left') + getLayoutGaps(element).left + 30),
1943
  def.resolve();
1944
  });
1945
  break;
1946
+
1947
  default :
1948
  element.css({
1949
  'display' : 'none',
1951
  def.resolve();
1952
  break;
1953
  }
1954
+
1955
  return def.promise();
1956
  }
1957
+
1958
  /**********************/
1959
  /** PUBLIC FUNCTIONS **/
1960
  /**********************/
1961
+
1962
  this.resume = function() {
1963
  resume();
1964
  }
1965
+
1966
  this.pause = function() {
1967
  pause();
1968
  }
1969
+
1970
  this.nextSlide = function() {
1971
  changeSlide(getNextSlide());
1972
  }
1973
+
1974
  this.previousSlide = function() {
1975
  changeSlide(getPreviousSlide());
1976
  }
1977
+
1978
  this.changeSlide = function(slide_index) {
1979
  changeSlide(slide_index);
1980
  }
1981
+
1982
  this.getCurrentSlide = function() {
1983
  return current_slide;
1984
  }
1985
+
1986
  this.getTotalSlides = function() {
1987
  return total_slides;
1988
  }
1989
+
1990
  };
1991
+
1992
  /**************************/
1993
  /** CRELLY SLIDER PLUGIN **/
1994
  /**************************/
1995
+
1996
+ $.fn.crellySlider = function(options) {
1997
  var settings = $.extend({
1998
  layout : 'fixed',
1999
  responsive : true,
2000
  startWidth : 1140,
2001
  startHeight : 500,
2002
+
2003
+ pauseOnHover : true,
2004
  automaticSlide : true,
2005
  showControls : true,
2006
  showNavigation : true,
2007
  showProgressBar : true,
2008
  enableSwipe : true,
2009
+
2010
  slidesTime : 3000,
2011
  elementsDelay : 0,
2012
  elementsTime : 'all',
2015
  slidesEaseOut : 300,
2016
  elementsEaseOut : 300,
2017
  ignoreElementsEaseOut : false,
2018
+
2019
  videoAutoplay : false,
2020
  videoLoop : false,
2021
+
2022
  beforeStart : function() {},
2023
  beforeSetResponsive : function() {},
2024
  beforeSlideStart : function() {},
2033
  }
2034
  });
2035
  };
2036
+
2037
+ })(jQuery);
js/jquery.crellyslider.min.js CHANGED
@@ -2,10 +2,10 @@
2
  * Plugin Name: Crelly Slider
3
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
4
  * Description: The first free WordPress slider with elements animations.
5
- * Version: 1.1.1
6
  * Author: fabiorino
7
  * Author URI: http://fabiorino1.altervista.org
8
  * License: MIT
9
  */
10
 
11
- !function(e){!function(e,t,n){"function"==typeof define&&define.amd?define(["jquery"],function(i){return n(i,e,t),i.mobile}):n(e.jQuery,e,t)}(this,document,function(e,t,n,i){!function(e,t,n,i){function a(e){for(;e&&"undefined"!=typeof e.originalEvent;)e=e.originalEvent;return e}function o(t,n){var o,s,r,c,l,d,p,f,u,h=t.type;if(t=e.Event(t),t.type=n,o=t.originalEvent,s=e.event.props,h.search(/^(mouse|click)/)>-1&&(s=Y),o)for(p=s.length,c;p;)c=s[--p],t[c]=o[c];if(h.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1),-1!==h.search(/^touch/)&&(r=a(o),h=r.touches,l=r.changedTouches,d=h&&h.length?h[0]:l&&l.length?l[0]:i,d))for(f=0,u=P.length;u>f;f++)c=P[f],t[c]=d[c];return t}function s(t){for(var n,i,a={};t;){n=e.data(t,S);for(i in n)n[i]&&(a[i]=a.hasVirtualBinding=!0);t=t.parentNode}return a}function r(t,n){for(var i;t;){if(i=e.data(t,S),i&&(!n||i[n]))return t;t=t.parentNode}return null}function c(){X=!1}function l(){X=!0}function d(){W=0,C.length=0,z=!1,l()}function p(){c()}function f(){u(),F=setTimeout(function(){F=0,d()},e.vmouse.resetTimerDuration)}function u(){F&&(clearTimeout(F),F=0)}function h(t,n,i){var a;return(i&&i[t]||!i&&r(n.target,t))&&(a=o(n,t),e(n.target).trigger(a)),a}function v(t){var n,i=e.data(t.target,E);!z&&(!W||W!==i)&&(n=h("v"+t.type,t),n&&(n.isDefaultPrevented()&&t.preventDefault(),n.isPropagationStopped()&&t.stopPropagation(),n.isImmediatePropagationStopped()&&t.stopImmediatePropagation()))}function m(t){var n,i,o,r=a(t).touches;r&&1===r.length&&(n=t.target,i=s(n),i.hasVirtualBinding&&(W=_++,e.data(n,E,W),u(),p(),M=!1,o=a(t).touches[0],O=o.pageX,R=o.pageY,h("vmouseover",t,i),h("vmousedown",t,i)))}function y(e){X||(M||h("vmousecancel",e,s(e.target)),M=!0,f())}function g(t){if(!X){var n=a(t).touches[0],i=M,o=e.vmouse.moveDistanceThreshold,r=s(t.target);M=M||Math.abs(n.pageX-O)>o||Math.abs(n.pageY-R)>o,M&&!i&&h("vmousecancel",t,r),h("vmousemove",t,r),f()}}function b(e){if(!X){l();var t,n,i=s(e.target);h("vmouseup",e,i),M||(t=h("vclick",e,i),t&&t.isDefaultPrevented()&&(n=a(e).changedTouches[0],C.push({touchID:W,x:n.clientX,y:n.clientY}),z=!0)),h("vmouseout",e,i),M=!1,f()}}function w(t){var n,i=e.data(t,S);if(i)for(n in i)if(i[n])return!0;return!1}function k(){}function D(t){var n=t.substr(1);return{setup:function(){w(this)||e.data(this,S,{});var i=e.data(this,S);i[t]=!0,x[t]=(x[t]||0)+1,1===x[t]&&H.bind(n,v),e(this).bind(n,k),B&&(x.touchstart=(x.touchstart||0)+1,1===x.touchstart&&H.bind("touchstart",m).bind("touchend",b).bind("touchmove",g).bind("scroll",y))},teardown:function(){--x[t],x[t]||H.unbind(n,v),B&&(--x.touchstart,x.touchstart||H.unbind("touchstart",m).unbind("touchmove",g).unbind("touchend",b).unbind("scroll",y));var i=e(this),a=e.data(this,S);a&&(a[t]=!1),i.unbind(n,k),w(this)||i.removeData(S)}}}var T,I,S="virtualMouseBindings",E="virtualTouchID",N="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),P="clientX clientY pageX pageY screenX screenY".split(" "),L=e.event.mouseHooks?e.event.mouseHooks.props:[],Y=e.event.props.concat(L),x={},F=0,O=0,R=0,M=!1,C=[],z=!1,X=!1,B="addEventListener"in n,H=e(n),_=1,W=0;for(e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500},I=0;I<N.length;I++)e.event.special[N[I]]=D(N[I]);B&&n.addEventListener("click",function(t){var n,i,a,o,s,r,c=C.length,l=t.target;if(c)for(n=t.clientX,i=t.clientY,T=e.vmouse.clickDistanceThreshold,a=l;a;){for(o=0;c>o;o++)if(s=C[o],r=0,a===l&&Math.abs(s.x-n)<T&&Math.abs(s.y-i)<T||e.data(a,E)===s.touchID)return t.preventDefault(),void t.stopPropagation();a=a.parentNode}},!0)}(e,t,n),function(e){e.mobile={}}(e),function(e,t){var i={touch:"ontouchend"in n};e.mobile.support=e.mobile.support||{},e.extend(e.support,i),e.extend(e.mobile.support,i)}(e),function(e,t,i){function a(t,n,a,o){var s=a.type;a.type=n,o?e.event.trigger(a,i,t):e.event.dispatch.call(t,a),a.type=s}var o=e(n),s=e.mobile.support.touch,r="touchmove scroll",c=s?"touchstart":"mousedown",l=s?"touchend":"mouseup",d=s?"touchmove":"mousemove";e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,n){e.fn[n]=function(e){return e?this.bind(n,e):this.trigger(n)},e.attrFn&&(e.attrFn[n]=!0)}),e.event.special.scrollstart={enabled:!0,setup:function(){function t(e,t){n=t,a(o,n?"scrollstart":"scrollstop",e)}var n,i,o=this,s=e(o);s.bind(r,function(a){e.event.special.scrollstart.enabled&&(n||t(a,!0),clearTimeout(i),i=setTimeout(function(){t(a,!1)},50))})},teardown:function(){e(this).unbind(r)}},e.event.special.tap={tapholdThreshold:750,emitTapOnTaphold:!0,setup:function(){var t=this,n=e(t),i=!1;n.bind("vmousedown",function(s){function r(){clearTimeout(d)}function c(){r(),n.unbind("vclick",l).unbind("vmouseup",r),o.unbind("vmousecancel",c)}function l(e){c(),i||p!==e.target?i&&e.preventDefault():a(t,"tap",e)}if(i=!1,s.which&&1!==s.which)return!1;var d,p=s.target;n.bind("vmouseup",r).bind("vclick",l),o.bind("vmousecancel",c),d=setTimeout(function(){e.event.special.tap.emitTapOnTaphold||(i=!0),a(t,"taphold",e.Event("taphold",{target:p}))},e.event.special.tap.tapholdThreshold)})},teardown:function(){e(this).unbind("vmousedown").unbind("vclick").unbind("vmouseup"),o.unbind("vmousecancel")}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:30,getLocation:function(e){var n=t.pageXOffset,i=t.pageYOffset,a=e.clientX,o=e.clientY;return 0===e.pageY&&Math.floor(o)>Math.floor(e.pageY)||0===e.pageX&&Math.floor(a)>Math.floor(e.pageX)?(a-=n,o-=i):(o<e.pageY-i||a<e.pageX-n)&&(a=e.pageX-n,o=e.pageY-i),{x:a,y:o}},start:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,i=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[i.x,i.y],origin:e(t.target)}},stop:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,i=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[i.x,i.y]}},handleSwipe:function(t,n,i,o){if(n.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-n.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])<e.event.special.swipe.verticalDistanceThreshold){var s=t.coords[0]>n.coords[0]?"swipeleft":"swiperight";return a(i,"swipe",e.Event("swipe",{target:o,swipestart:t,swipestop:n}),!0),a(i,s,e.Event(s,{target:o,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,i=e(n),a={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=a,a.start=function(t){if(!e.event.special.swipe.eventInProgress){e.event.special.swipe.eventInProgress=!0;var i,s=e.event.special.swipe.start(t),r=t.target,c=!1;a.move=function(t){s&&!t.isDefaultPrevented()&&(i=e.event.special.swipe.stop(t),c||(c=e.event.special.swipe.handleSwipe(s,i,n,r),c&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(s.coords[0]-i.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault())},a.stop=function(){c=!0,e.event.special.swipe.eventInProgress=!1,o.off(d,a.move),a.move=null},o.on(d,a.move).one(l,a.stop)}},i.on(c,a.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,0===t.length&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(c,n.start),n.move&&o.off(d,n.move),n.stop&&o.off(l,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)});var t=document.createElement("script");t.src="https://www.youtube.com/iframe_api";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);(function(){function e(t){return new e.fn.init(t)}function t(e,t,n){return n.contentWindow.postMessage?(e=JSON.stringify({method:e,value:t}),void n.contentWindow.postMessage(e,s)):!1}function n(e){var t,n;try{t=JSON.parse(e.data),n=t.event||t.method}catch(i){}if("ready"!=n||o||(o=!0),!/^https?:\/\/player.vimeo.com/.test(e.origin))return!1;"*"===s&&(s=e.origin),e=t.value;var r=t.data,c=""===c?null:t.player_id;return t=c?a[c][n]:a[n],n=[],t?(void 0!==e&&n.push(e),r&&n.push(r),c&&n.push(c),0<n.length?t.apply(null,n):t.call()):!1}function i(e,t,n){n?(a[n]||(a[n]={}),a[n][e]=t):a[e]=t}var a={},o=!1,s="*";return e.fn=e.prototype={element:null,init:function(e){return"string"==typeof e&&(e=document.getElementById(e)),this.element=e,this},api:function(e,n){if(!this.element||!e)return!1;var a=this.element,o=""!==a.id?a.id:null,s=n&&n.constructor&&n.call&&n.apply?null:n,r=n&&n.constructor&&n.call&&n.apply?n:null;return r&&i(e,r,o),t(e,s,a),this},addEvent:function(e,n){if(!this.element)return!1;var a=this.element,s=""!==a.id?a.id:null;return i(e,n,s),"ready"!=e?t("addEventListener",e,a):"ready"==e&&o&&n.call(null,s),this},removeEvent:function(e){if(!this.element)return!1;var n=this.element,i=""!==n.id?n.id:null;e:{if(i&&a[i]){if(!a[i][e]){i=!1;break e}a[i][e]=null}else{if(!a[e]){i=!1;break e}a[e]=null}i=!0}"ready"!=e&&i&&t("removeEventListener",e,n)}},e.fn.init.prototype=e.fn,window.addEventListener?window.addEventListener("message",n,!1):window.attachEvent("onmessage",n),window.Froogaloop=window.$f=e})();e.CrellySlider=function(t,n){function i(){if(se.wrapInner('<div class="crellyslider" />'),se.find(re+" > ul").addClass("cs-slides"),se.find(re+" "+ce+" > li").addClass("cs-slide"),oe=P().length,0==oe)return!1;if(1==oe){var e=L(0),t=se.find(re).find(ce);e.clone().prependTo(t),oe++}if(n.showControls&&se.find(re).append('<div class="cs-controls"><span class="cs-next"></span><span class="cs-previous"></span></div>'),n.showNavigation){for(var i='<div class="cs-navigation">',o=0;oe>o;o++)i+='<span class="cs-slide-link"></span>';i+="</div>",se.find(re).append(i)}n.showProgressBar?se.find(re).append('<div class="cs-progress-bar"></div>'):se.find(re).append('<div class="cs-progress-bar cs-progress-bar-hidden"></div>'),se.css("display","block"),n.responsive&&y(),u(),P().find(".cs-background-link").html(" ").data({left:0,top:0,"in":"none",out:"none",easeIn:0,easeOut:0,delay:0,time:"all"}),p(),a().done(function(){var e=setInterval(function(){"complete"==document.readyState&&se.find(re).find(".cs-preloader").length>0&&(clearInterval(e),r())},100)})}function a(){var t=new e.Deferred,n=P().find(".cs-yt-iframe, .cs-vimeo-iframe").length,i=0;return 0==n?t.resolve().promise():(P().find(".cs-yt-iframe, .cs-vimeo-iframe").each(function(){var a=e(this);a.one("load",function(){i++,i==n&&o().done(function(){s().done(function(){t.resolve()})})})}),t.promise())}function o(){var t,n=new e.Deferred,i=P(),a=i.find(de+".cs-yt-iframe").length,o=0;return 0==a?n.resolve().promise():(i.each(function(){var i=e(this),s=i.find(de+".cs-yt-iframe");s.each(function(){var i=e(this);i.uniqueId(),i.attr("id","cs-yt-iframe-"+i.attr("id"));var s=new YT.Player(i.attr("id"),{events:{onReady:function(){o++,o==a&&n.resolve()},onStateChange:function(e){e.data===YT.PlayerState.ENDED&&N(i,"loop")&&s.playVideo()}}});t={player:s,played_once:!1},be[i.attr("id")]=t})}),n.promise())}function s(){var t,n=new e.Deferred,i=P(),a=i.find(de+".cs-vimeo-iframe").length,o=0;return 0==a?n.resolve().promise():(i.each(function(){var i=e(this),s=i.find(de+".cs-vimeo-iframe");s.each(function(){var i=e(this);i.uniqueId(),i.attr("id","cs-vimeo-iframe-"+i.attr("id")),i.attr("src",i.attr("src")+"&player_id="+i.attr("id"));var s=$f(i[0]);s.addEvent("ready",function(){s.addEvent("finish",function(){we[i.attr("id")].ended=!0}),s.addEvent("play",function(){we[i.attr("id")].played_once=!0,we[i.attr("id")].ended=!1}),N(i,"loop")&&s.api("setLoop",!0),o++,o==a&&n.resolve()}),t={player:s,played_once:!1,ended:!1},we[i.attr("id")]=t})}),n.promise())}function r(){n.responsive&&y(),u(),De=e(window).width(),c(),d(),f(),n.beforeStart(),n.responsive?v():b()}function c(){P().each(function(){var t=e(this);t.find(de).each(function(){var t=e(this);t.find("*").each(function(){var t=e(this);l(t,!0)}),l(t,!1)}),t.css("display","none"),t.data("opacity",parseFloat(t.css("opacity")))})}function l(e,t){e.data("width",parseFloat(e.width())),e.data("height",parseFloat(e.height())),e.data("letter-spacing",parseFloat(e.css("letter-spacing"))),e.data("font-size",parseFloat(e.css("font-size"))),"px"==e.css("line-height").slice(-2).toLowerCase()?e.data("line-height",parseFloat(e.css("line-height"))):e.data("line-height",parseFloat(e.css("line-height"))*N(e,"font-size")),e.data("padding-top",parseFloat(e.css("padding-top"))),e.data("padding-right",parseFloat(e.css("padding-right"))),e.data("padding-bottom",parseFloat(e.css("padding-bottom"))),e.data("padding-left",parseFloat(e.css("padding-left"))),e.data("opacity",parseFloat(e.css("opacity"))),t||e.css("display","none")}function d(){n.responsive&&e(window).resize(function(){De!=e(window).width()&&("full-width"==n.layout&&T()!=e(se).width()||e(se).width()<T()||e(se).width()>T()&&T()<n.startWidth)&&v()}),se.find(re).find(".cs-controls > .cs-previous").click(function(){C(E())}),se.find(re).find(".cs-controls > .cs-next").click(function(){C(S())}),n.enableSwipe&&(se.find(re).on("swipeleft",function(){D(),C(S())}),se.find(re).on("swiperight",function(){D(),C(E())})),se.find(re).find(".cs-navigation > .cs-slide-link").click(function(){C(e(this).index())}),n.pauseOnHover&&(se.find(re).find(ce).hover(function(){k()}),se.find(re).find(ce).mouseleave(function(){D()}))}function p(){function t(){se.find(re).append('<div class="cs-preloader"><div class="cs-bg"></div><div class="cs-loader"><div class="cs-spinner"></div></div></div>'),se.find(re).find(".cs-preloader").css({"background-color":L(0).css("background-color"),"background-image":L(0).css("background-image"),"background-position":L(0).css("background-position"),"background-repeat":L(0).css("background-repeat"),"background-size":L(0).css("background-size")}),se.find(re).find(".cs-preloader > .cs-bg").css({"background-color":L(0).css("background-color"),"background-image":L(0).css("background-image"),"background-position":L(0).css("background-position"),"background-repeat":L(0).css("background-repeat"),"background-size":L(0).css("background-size")})}se.find(re).find(ce).css("visibility","hidden"),se.find(re).find(".cs-progress-bar").css("display","none"),se.find(re).find(".cs-navigation").css("display","none"),se.find(re).find(".cs-controls").css("display","none");var n=L(0).css("background-image");n=n.replace(/^url\(["']?/,"").replace(/["']?\)$/,""),n.match(/\.(jpeg|jpg|gif|png|bmp|tiff|tif)$/)?e("<img>").load(function(){t()}).attr("src",n).each(function(){this.complete&&e(this).load()}):t()}function f(){se.find(re).find(ce).css("visibility","visible"),se.find(re).find(".cs-progress-bar").css("display","block"),se.find(re).find(".cs-navigation").css("display","block"),se.find(re).find(".cs-controls").css("display","block"),te(L(0)),L(0).finish(),se.find(re).find(".cs-preloader").animate({opacity:0},300,function(){se.find(re).find(".cs-preloader").remove()})}function u(){var e,t,i=n.layout;switch(i){case"fixed":e=n.startWidth,t=n.startHeight,se.find(re).css({width:g(e),height:g(t)}),P().css({width:g(e),height:g(t)});break;case"full-width":e=se.width(),t=n.startHeight,se.find(re).css({width:e,height:g(t)}),P().css({width:e,height:g(t)});break;default:return!1}}function h(e){var t=(I()-n.startHeight)/2,i=(T()-n.startWidth)/2,a=0,o=0;return t>0&&(a=t),i>0&&(o=i),{top:a,left:o}}function v(){n.beforeSetResponsive();var t=P();w(!0),t.each(function(){var t=e(this),n=t.find(de);t.finish(),te(t),t.finish(),n.each(function(){var t=e(this);t.finish(),ie(t),t.finish(),H(t)&&U(t)})}),y(),u(),t.each(function(){var t=e(this),n=t.find(de);n.each(function(){var t=e(this);t.find("*").each(function(){var t=e(this);m(t)}),m(t),t.finish(),ae(t),t.finish(),H(t)&&U(t)}),t.finish(),ne(t),t.finish()}),De=e(window).width(),b()}function m(e){e.css({top:g(N(e,"top")+h(e).top),left:g(N(e,"left")+h(e).left),"padding-top":g(N(e,"padding-top")),"padding-right":g(N(e,"padding-right")),"padding-bottom":g(N(e,"padding-bottom")),"padding-left":g(N(e,"padding-left"))}),e.is("input")||e.is("button")||e.text().trim().length?e.css({"line-height":g(N(e,"line-height"))+"px","letter-spacing":g(N(e,"letter-spacing")),"font-size":g(N(e,"font-size"))}):e.css({width:g(N(e,"width")),height:g(N(e,"height"))})}function y(){var e=se.width(),t=n.startWidth;ke=e>=t||!n.responsive?1:e/t}function g(e){return e*ke}function b(){n.automaticSlide?F():z(pe),ve=!1}function w(t){for(var n=0;n<ye.length;n++)ye[n].clear();for(var n=0;n<ge.length;n++)ge[n].clear();me.clear(),P().each(function(){var n=e(this);t?n.finish():n.stop(!0,!0),n.find(de).each(function(){var n=e(this);t?n.finish():n.stop(!0,!0)})}),R()}function k(){if(!fe&&ue){n.beforePause();var e=se.find(re).find(".cs-progress-bar");e.stop(!0),me.pause(),fe=!0}}function D(){if(fe&&ue){n.beforeResume();var e=se.find(re).find(".cs-progress-bar"),t=(N(L(pe),"time"),me.getRemaining());e.animate({width:"100%"},t),me.resume(),fe=!1}}function T(){return se.find(re).width()}function I(){return se.find(re).height()}function S(){return pe+1==oe?0:pe+1}function E(){return 0>pe-1?oe-1:pe-1}function N(e,t){var i;switch(i=e.parent("ul").hasClass("cs-slides")?!0:!1,t){case"ease-in":return i?isNaN(parseInt(e.data(t)))?n.slidesEaseIn:parseInt(e.data(t)):isNaN(parseInt(e.data(t)))?n.elementsEaseIn:parseInt(e.data(t));case"ease-out":return i?isNaN(parseInt(e.data(t)))?n.slidesEaseOut:parseInt(e.data(t)):isNaN(parseInt(e.data(t)))?n.elementsEaseOut:parseInt(e.data(t));case"delay":return isNaN(parseInt(e.data(t)))?n.elementsDelay:parseInt(e.data(t));case"time":return i?isNaN(parseInt(e.data(t)))?n.slidesTime:parseInt(e.data(t)):"all"==e.data(t)?"all":isNaN(parseInt(e.data(t)))?n.itemsTime:parseInt(e.data(t));case"ignore-ease-out":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.ignoreElementsEaseOut;case"autoplay":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.videoAutoplay;case"loop":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.videoLoop;case"top":case"left":case"width":case"height":case"padding-top":case"padding-right":case"padding-bottom":case"padding-left":case"line-height":case"letter-spacing":case"font-size":return isNaN(parseFloat(e.data(t)))?0:parseFloat(e.data(t));case"in":case"out":case"opacity":return e.data(t);default:return!1}}function P(){return se.find(re).find(ce).find(le)}function L(e){return P().eq(e)}function Y(e,t){var n,i,a=t;this.pause=function(){clearTimeout(n),a-=new Date-i},this.resume=function(){i=new Date,clearTimeout(n),n=window.setTimeout(function(){e()},a)},this.clear=function(){clearTimeout(n)},this.getRemaining=function(){return a},this.resume()}function x(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function F(){z(pe).done(function(){fe||(pe=S(),F())})}function O(){var e=se.find(re).find(".cs-progress-bar");R(),e.animate({width:"100%"},N(L(pe),"time"))}function R(){var e=se.find(re).find(".cs-progress-bar");e.stop(),e.css("width",0)}function M(){var t=se.find(re).find(".cs-navigation"),n=t.find("> .cs-slide-link");n.each(function(){var t=e(this);t.index()==pe?t.addClass("cs-active"):t.removeClass("cs-active")})}function C(e){e!=pe&&(ue||he)&&(w(!1),B(pe,!1,!0).done(function(){pe=e,b()}))}function z(t){n.beforeSlideStart();var i=new e.Deferred;he=!1;for(var a=0;a<ye.length;a++)ye[a].clear();for(var a=0;a<ge.length;a++)ge[a].clear();me.clear(),L(t).finish(),ne(t),L(t).finish();var o=L(t).find(de);return o.each(function(){var t=e(this);t.finish(),ae(t),t.finish()}),M(),X(t),n.automaticSlide?B(t,!0,!0).done(function(){he=!0,i.resolve()}):B(t,!0,!1).done(function(){he=!0,i.resolve()}),i.promise()}function X(t){var n=L(t),i=n.find(de),a=0,o=!1,s=new e.Deferred;return ue=!1,te(t).done(function(){O(),ue=!0,o=!0,o&&a==i.length&&s.resolve()}),i.each(function(){var t=e(this),n=N(t,"delay");ge.push(new Y(function(){ie(t).done(function(){H(t)&&_(t),a++,o&&a==i.length&&s.resolve()})},n))}),s.promise()}function B(t,n,i){var a=L(t),o=a.find(de),s=n?N(a,"time")+N(a,"ease-in"):0,r=0,c=!1,l=new e.Deferred;return o.each(function(){var a=e(this),s=N(a,"time");if("all"!=s){var d=n?s:0;N(a,"ignore-ease-out")&&(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve())),ye.push(new Y(function(){ae(a).done(function(){N(a,"ignore-ease-out")||(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()))})},d))}}),me=new Y(function(){ue=!1,R(),c=!0,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()),i?o.each(function(){var n=e(this),a=N(n,"time");"all"==a&&(N(n,"ignore-ease-out")&&(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve())),ae(n).done(function(){N(n,"ignore-ease-out")||(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()))}))}):l.resolve()},s),l.promise()}function H(e){return A(e)||Q(e)}function _(e){A(e)?q(e):K(e)}function W(e){$(e),Z(e)}function U(e){A(e)?J(e):ee(e)}function A(e){return e.hasClass("cs-yt-iframe")}function V(e){return be[e.attr("id")].player}function j(e){return V(e).getPlayerState()}function q(e){!N(e,"autoplay")||be[e.attr("id")].played_once||x()||V(e).playVideo(),2==j(e)&&V(e).playVideo(),be[e.attr("id")].played_once=!0}function $(t){L(t).each(function(){var t=e(this);t.find(de+".cs-yt-iframe").each(function(){J(e(this))})})}function J(e){1==j(e)&&V(e).pauseVideo()}function Q(e){return e.hasClass("cs-vimeo-iframe")}function G(e){return we[e.attr("id")].player}function K(e){!N(e,"autoplay")||we[e.attr("id")].played_once||x()||G(e).api("play"),G(e).api("paused")&&!we[e.attr("id")].ended&&we[e.attr("id")].played_once&&G(e).api("play")}function Z(t){L(t).each(function(){var t=e(this);t.find(de+".cs-vimeo-iframe").each(function(){ee(e(this))})})}function ee(e){G(e).api("pause")}function te(t){var n=L(t),i=N(n,"in"),a=N(n,"ease-in"),o=new e.Deferred;if("block"==n.css("display"))return o.resolve().promise();if(ve)return n.css({display:"block",top:0,left:0,opacity:N(n,"opacity")}),o.resolve().promise();switch(i){case"fade":n.css({display:"block",top:0,left:0,opacity:0}),n.animate({opacity:N(n,"opacity")},a,function(){o.resolve()});break;case"fadeLeft":n.css({display:"block",top:0,left:T(),opacity:0}),n.animate({opacity:N(n,"opacity"),left:0},a,function(){o.resolve()});break;case"fadeRight":n.css({display:"block",top:0,left:-T(),opacity:0}),n.animate({opacity:N(n,"opacity"),left:0},a,function(){o.resolve()});break;case"slideLeft":n.css({display:"block",top:0,left:T(),opacity:N(n,"opacity")}),n.animate({left:0},a,function(){o.resolve()});break;case"slideRight":n.css({display:"block",top:0,left:-T(),opacity:N(n,"opacity")}),n.animate({left:0},a,function(){o.resolve()});break;case"slideUp":n.css({display:"block",top:I(),left:0,opacity:N(n,"opacity")}),n.animate({top:0},a,function(){o.resolve()});break;case"slideDown":n.css({display:"block",top:-I(),left:0,opacity:N(n,"opacity")}),n.animate({top:0},a,function(){o.resolve()});break;default:n.css({display:"block",top:0,left:0,opacity:N(n,"opacity")}),o.resolve()}return o.promise()}function ne(t){var n=L(t),i=N(n,"out"),a=N(n,"ease-out"),o=new e.Deferred;if("none"==n.css("display"))return o.resolve().promise();switch(i){case"fade":n.animate({opacity:0},a,function(){n.css({display:"none",opacity:N(n,"opacity")}),o.resolve()});break;case"fadeLeft":n.animate({opacity:0,left:-T()},a,function(){n.css({display:"none",opacity:N(n,"opacity"),left:0}),o.resolve()});break;case"fadeRight":n.animate({opacity:0,left:T()},a,function(){n.css({display:"none",opacity:N(n,"opacity"),left:0}),o.resolve()});break;case"slideLeft":n.animate({left:-T()},a,function(){n.css({display:"none",left:0}),o.resolve()});break;case"slideRight":n.animate({left:T()},a,function(){n.css({display:"none",left:0}),o.resolve()});break;case"slideUp":n.animate({top:-I()},a,function(){n.css({display:"none",top:0}),o.resolve()});break;case"slideDown":n.animate({top:I()},a,function(){n.css({display:"none",top:0}),o.resolve()});break;default:n.css({display:"none"}),o.resolve()}return o.promise()}function ie(t){var n=t.outerWidth(),i=t.outerHeight(),a=N(t,"in"),o=N(t,"ease-in"),s=N(t,"top"),r=N(t,"left"),c=new e.Deferred;if("block"==t.css("display"))return c.resolve().promise();switch(a){case"slideDown":t.css({display:"block",top:-i,left:g(r+h(t).left),opacity:N(t,"opacity")}).animate({top:g(s+h(t).top)},o,function(){c.resolve()});break;case"slideUp":t.css({display:"block",top:I(),left:g(r+h(t).left),opacity:N(t,"opacity")}).animate({top:g(s+h(t).top)},o,function(){c.resolve()});break;case"slideLeft":t.css({display:"block",top:g(s+h(t).top),left:T(),opacity:N(t,"opacity")}).animate({left:g(r+h(t).left)},o,function(){c.resolve()});break;case"slideRight":t.css({display:"block",top:g(s+h(t).top),left:-n,opacity:N(t,"opacity")}).animate({left:g(r+h(t).left)},o,function(){c.resolve()});break;case"fade":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left),opacity:0}).animate({opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeDown":t.css({display:"block",top:-i,left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeUp":t.css({display:"block",top:I(),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeLeft":t.css({display:"block",top:g(s+h(t).top),left:T(),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeRight":t.css({display:"block",top:g(s+h(t).top),left:-n,opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallDown":t.css({display:"block",top:g(s+h(t).top-30),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallUp":t.css({display:"block",top:g(s+h(t).top+30),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallLeft":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left+30),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallRight":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left-30),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;default:t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left),opacity:N(t,"opacity")}),c.resolve()}return c.promise()}function ae(t){var n=t.outerWidth(),i=t.outerHeight(),a=N(t,"out"),o=N(t,"ease-out"),s=new e.Deferred;if("none"==t.css("display"))return s.resolve().promise();switch(a){case"slideDown":t.animate({top:I()},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideUp":t.animate({top:-i},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideLeft":t.animate({left:-n},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideRight":t.animate({left:T()},o,function(){t.css({display:"none"}),s.resolve()});break;case"fade":t.animate({opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeDown":t.animate({top:I(),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeUp":t.animate({top:-i,opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeLeft":t.animate({left:-n,opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeRight":t.animate({left:T(),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallDown":t.animate({top:g(N(t,"top")+h(t).top+30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallUp":t.animate({top:g(N(t,"top")+h(t).top-30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallLeft":t.animate({left:g(N(t,"left")+h(t).left-30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallRight":t.animate({left:g(N(t,"left")+h(t).left+30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;default:t.css({display:"none"}),s.resolve()}return s.promise()}var oe,se=e(t),re="div.crellyslider",ce="ul.cs-slides",le="li.cs-slide",de="> *",pe=0,fe=!1,ue=!1,he=!1,ve=!0,me=new Y(function(){},0),ye=new Array,ge=new Array,be={},we={},ke=1,De=0;if("undefined"==typeof YT||"undefined"==typeof YT.Player)var Te=setInterval(function(){"undefined"!=typeof YT&&"undefined"!=typeof YT.Player&&(clearInterval(Te),i())},100);else i();this.resume=function(){D()},this.pause=function(){k()},this.nextSlide=function(){C(S())},this.previousSlide=function(){C(E())},this.changeSlide=function(e){C(e)},this.getCurrentSlide=function(){return pe},this.getTotalSlides=function(){return oe}},e.fn.crellySlider=function(t){var n=e.extend({layout:"fixed",responsive:!0,startWidth:1140,startHeight:500,pauseOnHover:!0,automaticSlide:!0,showControls:!0,showNavigation:!0,showProgressBar:!0,enableSwipe:!0,slidesTime:3e3,elementsDelay:0,elementsTime:"all",slidesEaseIn:300,elementsEaseIn:300,slidesEaseOut:300,elementsEaseOut:300,ignoreElementsEaseOut:!1,videoAutoplay:!1,videoLoop:!1,beforeStart:function(){},beforeSetResponsive:function(){},beforeSlideStart:function(){},beforePause:function(){},beforeResume:function(){}},t);return this.each(function(){if(void 0==e(this).data("crellySlider")){var t=new e.CrellySlider(this,n);e(this).data("crellySlider",t)}})}}(jQuery);
2
  * Plugin Name: Crelly Slider
3
  * Plugin URI: http://fabiorino1.altervista.org/projects/crellyslider
4
  * Description: The first free WordPress slider with elements animations.
5
+ * Version: 1.1.2
6
  * Author: fabiorino
7
  * Author URI: http://fabiorino1.altervista.org
8
  * License: MIT
9
  */
10
 
11
+ !function(e){!function(e,t,n){"function"==typeof define&&define.amd?define(["jquery"],function(i){return n(i,e,t),i.mobile}):n(e.jQuery,e,t)}(this,document,function(e,t,n,i){!function(e,t,n,i){function a(e){for(;e&&"undefined"!=typeof e.originalEvent;)e=e.originalEvent;return e}function o(t,n){var o,s,r,c,l,d,p,f,u,h=t.type;if(t=e.Event(t),t.type=n,o=t.originalEvent,s=e.event.props,h.search(/^(mouse|click)/)>-1&&(s=Y),o)for(p=s.length,c;p;)c=s[--p],t[c]=o[c];if(h.search(/mouse(down|up)|click/)>-1&&!t.which&&(t.which=1),-1!==h.search(/^touch/)&&(r=a(o),h=r.touches,l=r.changedTouches,d=h&&h.length?h[0]:l&&l.length?l[0]:i,d))for(f=0,u=P.length;u>f;f++)c=P[f],t[c]=d[c];return t}function s(t){for(var n,i,a={};t;){n=e.data(t,S);for(i in n)n[i]&&(a[i]=a.hasVirtualBinding=!0);t=t.parentNode}return a}function r(t,n){for(var i;t;){if(i=e.data(t,S),i&&(!n||i[n]))return t;t=t.parentNode}return null}function c(){X=!1}function l(){X=!0}function d(){W=0,C.length=0,z=!1,l()}function p(){c()}function f(){u(),F=setTimeout(function(){F=0,d()},e.vmouse.resetTimerDuration)}function u(){F&&(clearTimeout(F),F=0)}function h(t,n,i){var a;return(i&&i[t]||!i&&r(n.target,t))&&(a=o(n,t),e(n.target).trigger(a)),a}function v(t){var n,i=e.data(t.target,E);!z&&(!W||W!==i)&&(n=h("v"+t.type,t),n&&(n.isDefaultPrevented()&&t.preventDefault(),n.isPropagationStopped()&&t.stopPropagation(),n.isImmediatePropagationStopped()&&t.stopImmediatePropagation()))}function m(t){var n,i,o,r=a(t).touches;r&&1===r.length&&(n=t.target,i=s(n),i.hasVirtualBinding&&(W=_++,e.data(n,E,W),u(),p(),M=!1,o=a(t).touches[0],O=o.pageX,R=o.pageY,h("vmouseover",t,i),h("vmousedown",t,i)))}function y(e){X||(M||h("vmousecancel",e,s(e.target)),M=!0,f())}function g(t){if(!X){var n=a(t).touches[0],i=M,o=e.vmouse.moveDistanceThreshold,r=s(t.target);M=M||Math.abs(n.pageX-O)>o||Math.abs(n.pageY-R)>o,M&&!i&&h("vmousecancel",t,r),h("vmousemove",t,r),f()}}function b(e){if(!X){l();var t,n,i=s(e.target);h("vmouseup",e,i),M||(t=h("vclick",e,i),t&&t.isDefaultPrevented()&&(n=a(e).changedTouches[0],C.push({touchID:W,x:n.clientX,y:n.clientY}),z=!0)),h("vmouseout",e,i),M=!1,f()}}function w(t){var n,i=e.data(t,S);if(i)for(n in i)if(i[n])return!0;return!1}function k(){}function D(t){var n=t.substr(1);return{setup:function(){w(this)||e.data(this,S,{});var i=e.data(this,S);i[t]=!0,x[t]=(x[t]||0)+1,1===x[t]&&H.bind(n,v),e(this).bind(n,k),B&&(x.touchstart=(x.touchstart||0)+1,1===x.touchstart&&H.bind("touchstart",m).bind("touchend",b).bind("touchmove",g).bind("scroll",y))},teardown:function(){--x[t],x[t]||H.unbind(n,v),B&&(--x.touchstart,x.touchstart||H.unbind("touchstart",m).unbind("touchmove",g).unbind("touchend",b).unbind("scroll",y));var i=e(this),a=e.data(this,S);a&&(a[t]=!1),i.unbind(n,k),w(this)||i.removeData(S)}}}var T,I,S="virtualMouseBindings",E="virtualTouchID",N="vmouseover vmousedown vmousemove vmouseup vclick vmouseout vmousecancel".split(" "),P="clientX clientY pageX pageY screenX screenY".split(" "),L=e.event.mouseHooks?e.event.mouseHooks.props:[],Y=e.event.props.concat(L),x={},F=0,O=0,R=0,M=!1,C=[],z=!1,X=!1,B="addEventListener"in n,H=e(n),_=1,W=0;for(e.vmouse={moveDistanceThreshold:10,clickDistanceThreshold:10,resetTimerDuration:1500},I=0;I<N.length;I++)e.event.special[N[I]]=D(N[I]);B&&n.addEventListener("click",function(t){var n,i,a,o,s,r,c=C.length,l=t.target;if(c)for(n=t.clientX,i=t.clientY,T=e.vmouse.clickDistanceThreshold,a=l;a;){for(o=0;c>o;o++)if(s=C[o],r=0,a===l&&Math.abs(s.x-n)<T&&Math.abs(s.y-i)<T||e.data(a,E)===s.touchID)return t.preventDefault(),void t.stopPropagation();a=a.parentNode}},!0)}(e,t,n),function(e){e.mobile={}}(e),function(e,t){var i={touch:"ontouchend"in n};e.mobile.support=e.mobile.support||{},e.extend(e.support,i),e.extend(e.mobile.support,i)}(e),function(e,t,i){function a(t,n,a,o){var s=a.type;a.type=n,o?e.event.trigger(a,i,t):e.event.dispatch.call(t,a),a.type=s}var o=e(n),s=e.mobile.support.touch,r="touchmove scroll",c=s?"touchstart":"mousedown",l=s?"touchend":"mouseup",d=s?"touchmove":"mousemove";e.each("touchstart touchmove touchend tap taphold swipe swipeleft swiperight scrollstart scrollstop".split(" "),function(t,n){e.fn[n]=function(e){return e?this.bind(n,e):this.trigger(n)},e.attrFn&&(e.attrFn[n]=!0)}),e.event.special.scrollstart={enabled:!0,setup:function(){function t(e,t){n=t,a(o,n?"scrollstart":"scrollstop",e)}var n,i,o=this,s=e(o);s.bind(r,function(a){e.event.special.scrollstart.enabled&&(n||t(a,!0),clearTimeout(i),i=setTimeout(function(){t(a,!1)},50))})},teardown:function(){e(this).unbind(r)}},e.event.special.tap={tapholdThreshold:750,emitTapOnTaphold:!0,setup:function(){var t=this,n=e(t),i=!1;n.bind("vmousedown",function(s){function r(){clearTimeout(d)}function c(){r(),n.unbind("vclick",l).unbind("vmouseup",r),o.unbind("vmousecancel",c)}function l(e){c(),i||p!==e.target?i&&e.preventDefault():a(t,"tap",e)}if(i=!1,s.which&&1!==s.which)return!1;var d,p=s.target;n.bind("vmouseup",r).bind("vclick",l),o.bind("vmousecancel",c),d=setTimeout(function(){e.event.special.tap.emitTapOnTaphold||(i=!0),a(t,"taphold",e.Event("taphold",{target:p}))},e.event.special.tap.tapholdThreshold)})},teardown:function(){e(this).unbind("vmousedown").unbind("vclick").unbind("vmouseup"),o.unbind("vmousecancel")}},e.event.special.swipe={scrollSupressionThreshold:30,durationThreshold:1e3,horizontalDistanceThreshold:30,verticalDistanceThreshold:30,getLocation:function(e){var n=t.pageXOffset,i=t.pageYOffset,a=e.clientX,o=e.clientY;return 0===e.pageY&&Math.floor(o)>Math.floor(e.pageY)||0===e.pageX&&Math.floor(a)>Math.floor(e.pageX)?(a-=n,o-=i):(o<e.pageY-i||a<e.pageX-n)&&(a=e.pageX-n,o=e.pageY-i),{x:a,y:o}},start:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,i=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[i.x,i.y],origin:e(t.target)}},stop:function(t){var n=t.originalEvent.touches?t.originalEvent.touches[0]:t,i=e.event.special.swipe.getLocation(n);return{time:(new Date).getTime(),coords:[i.x,i.y]}},handleSwipe:function(t,n,i,o){if(n.time-t.time<e.event.special.swipe.durationThreshold&&Math.abs(t.coords[0]-n.coords[0])>e.event.special.swipe.horizontalDistanceThreshold&&Math.abs(t.coords[1]-n.coords[1])<e.event.special.swipe.verticalDistanceThreshold){var s=t.coords[0]>n.coords[0]?"swipeleft":"swiperight";return a(i,"swipe",e.Event("swipe",{target:o,swipestart:t,swipestop:n}),!0),a(i,s,e.Event(s,{target:o,swipestart:t,swipestop:n}),!0),!0}return!1},eventInProgress:!1,setup:function(){var t,n=this,i=e(n),a={};t=e.data(this,"mobile-events"),t||(t={length:0},e.data(this,"mobile-events",t)),t.length++,t.swipe=a,a.start=function(t){if(!e.event.special.swipe.eventInProgress){e.event.special.swipe.eventInProgress=!0;var i,s=e.event.special.swipe.start(t),r=t.target,c=!1;a.move=function(t){s&&!t.isDefaultPrevented()&&(i=e.event.special.swipe.stop(t),c||(c=e.event.special.swipe.handleSwipe(s,i,n,r),c&&(e.event.special.swipe.eventInProgress=!1)),Math.abs(s.coords[0]-i.coords[0])>e.event.special.swipe.scrollSupressionThreshold&&t.preventDefault())},a.stop=function(){c=!0,e.event.special.swipe.eventInProgress=!1,o.off(d,a.move),a.move=null},o.on(d,a.move).one(l,a.stop)}},i.on(c,a.start)},teardown:function(){var t,n;t=e.data(this,"mobile-events"),t&&(n=t.swipe,delete t.swipe,t.length--,0===t.length&&e.removeData(this,"mobile-events")),n&&(n.start&&e(this).off(c,n.start),n.move&&o.off(d,n.move),n.stop&&o.off(l,n.stop))}},e.each({scrollstop:"scrollstart",taphold:"tap",swipeleft:"swipe.left",swiperight:"swipe.right"},function(t,n){e.event.special[t]={setup:function(){e(this).bind(n,e.noop)},teardown:function(){e(this).unbind(n)}}})}(e,this)});var t=document.createElement("script");t.src="https://www.youtube.com/iframe_api";var n=document.getElementsByTagName("script")[0];n.parentNode.insertBefore(t,n);(function(){function e(t){return new e.fn.init(t)}function t(e,t,n){return n.contentWindow.postMessage?(e=JSON.stringify({method:e,value:t}),void n.contentWindow.postMessage(e,s)):!1}function n(e){var t,n;try{t=JSON.parse(e.data),n=t.event||t.method}catch(i){}if("ready"!=n||o||(o=!0),!/^https?:\/\/player.vimeo.com/.test(e.origin))return!1;"*"===s&&(s=e.origin),e=t.value;var r=t.data,c=""===c?null:t.player_id;return t=c?a[c][n]:a[n],n=[],t?(void 0!==e&&n.push(e),r&&n.push(r),c&&n.push(c),0<n.length?t.apply(null,n):t.call()):!1}function i(e,t,n){n?(a[n]||(a[n]={}),a[n][e]=t):a[e]=t}var a={},o=!1,s="*";return e.fn=e.prototype={element:null,init:function(e){return"string"==typeof e&&(e=document.getElementById(e)),this.element=e,this},api:function(e,n){if(!this.element||!e)return!1;var a=this.element,o=""!==a.id?a.id:null,s=n&&n.constructor&&n.call&&n.apply?null:n,r=n&&n.constructor&&n.call&&n.apply?n:null;return r&&i(e,r,o),t(e,s,a),this},addEvent:function(e,n){if(!this.element)return!1;var a=this.element,s=""!==a.id?a.id:null;return i(e,n,s),"ready"!=e?t("addEventListener",e,a):"ready"==e&&o&&n.call(null,s),this},removeEvent:function(e){if(!this.element)return!1;var n=this.element,i=""!==n.id?n.id:null;e:{if(i&&a[i]){if(!a[i][e]){i=!1;break e}a[i][e]=null}else{if(!a[e]){i=!1;break e}a[e]=null}i=!0}"ready"!=e&&i&&t("removeEventListener",e,n)}},e.fn.init.prototype=e.fn,window.addEventListener?window.addEventListener("message",n,!1):window.attachEvent("onmessage",n),window.Froogaloop=window.$f=e})();e.CrellySlider=function(t,n){function i(){if(se.wrapInner('<div class="crellyslider" />'),se.find(re+" > ul").addClass("cs-slides"),se.find(re+" "+ce+" > li").addClass("cs-slide"),oe=P().length,0==oe)return!1;if(1==oe){var e=L(0),t=se.find(re).find(ce);e.clone().prependTo(t),oe++}if(n.showControls&&se.find(re).append('<div class="cs-controls"><span class="cs-next"></span><span class="cs-previous"></span></div>'),n.showNavigation){for(var i='<div class="cs-navigation">',o=0;oe>o;o++)i+='<span class="cs-slide-link"></span>';i+="</div>",se.find(re).append(i)}n.showProgressBar?se.find(re).append('<div class="cs-progress-bar"></div>'):se.find(re).append('<div class="cs-progress-bar cs-progress-bar-hidden"></div>'),se.css("display","block"),n.responsive&&y(),u(),P().find(".cs-background-link").html(" ").data({left:0,top:0,"in":"none",out:"none",easeIn:0,easeOut:0,delay:0,time:"all"}),p(),a().done(function(){var e=setInterval(function(){"complete"==document.readyState&&se.find(re).find(".cs-preloader").length>0&&(clearInterval(e),r())},100)})}function a(){var t=new e.Deferred,n=P().find(".cs-yt-iframe, .cs-vimeo-iframe").length,i=0;return 0==n?t.resolve().promise():(P().find(".cs-yt-iframe, .cs-vimeo-iframe").each(function(){var a=e(this);a.one("load",function(){i++,i==n&&o().done(function(){s().done(function(){t.resolve()})})})}),t.promise())}function o(){var t,n=new e.Deferred,i=P(),a=i.find(de+".cs-yt-iframe").length,o=0;return 0==a?n.resolve().promise():(i.each(function(){var i=e(this),s=i.find(de+".cs-yt-iframe");s.each(function(){var i=e(this);i.uniqueId(),i.attr("id","cs-yt-iframe-"+i.attr("id"));var s=new YT.Player(i.attr("id"),{events:{onReady:function(){o++,o==a&&n.resolve()},onStateChange:function(e){e.data===YT.PlayerState.ENDED&&N(i,"loop")&&s.playVideo()}}});t={player:s,played_once:!1},be[i.attr("id")]=t})}),n.promise())}function s(){var t,n=new e.Deferred,i=P(),a=i.find(de+".cs-vimeo-iframe").length,o=0;return 0==a?n.resolve().promise():(i.each(function(){var i=e(this),s=i.find(de+".cs-vimeo-iframe");s.each(function(){var i=e(this);i.uniqueId(),i.attr("id","cs-vimeo-iframe-"+i.attr("id")),i.attr("src",i.attr("src")+"&player_id="+i.attr("id"));var s=$f(i[0]);s.addEvent("ready",function(){s.addEvent("finish",function(){we[i.attr("id")].ended=!0}),s.addEvent("play",function(){we[i.attr("id")].played_once=!0,we[i.attr("id")].ended=!1}),N(i,"loop")&&s.api("setLoop",!0),o++,o==a&&n.resolve()}),t={player:s,played_once:!1,ended:!1},we[i.attr("id")]=t})}),n.promise())}function r(){n.responsive&&y(),u(),De=e(window).width(),c(),d(),f(),n.beforeStart(),n.responsive?v():b()}function c(){P().each(function(){var t=e(this);t.find(de).each(function(){var t=e(this);t.find("*").each(function(){var t=e(this);l(t,!0)}),l(t,!1)}),t.css("display","none"),t.data("opacity",parseFloat(t.css("opacity")))})}function l(e,t){e.data("width",parseFloat(e.width())),e.data("height",parseFloat(e.height())),e.data("letter-spacing",parseFloat(e.css("letter-spacing"))),e.data("font-size",parseFloat(e.css("font-size"))),"px"==e.css("line-height").slice(-2).toLowerCase()?e.data("line-height",parseFloat(e.css("line-height"))):e.data("line-height",parseFloat(e.css("line-height"))*N(e,"font-size")),e.data("padding-top",parseFloat(e.css("padding-top"))),e.data("padding-right",parseFloat(e.css("padding-right"))),e.data("padding-bottom",parseFloat(e.css("padding-bottom"))),e.data("padding-left",parseFloat(e.css("padding-left"))),e.data("opacity",parseFloat(e.css("opacity"))),t||e.css("display","none")}function d(){n.responsive&&e(window).resize(function(){De!=e(window).width()&&("full-width"==n.layout&&T()!=e(se).width()||e(se).width()<T()||e(se).width()>T()&&T()<n.startWidth)&&v()}),se.find(re).find(".cs-controls > .cs-previous").click(function(){C(E())}),se.find(re).find(".cs-controls > .cs-next").click(function(){C(S())}),n.enableSwipe&&(se.find(re).on("swipeleft",function(){D(),C(S())}),se.find(re).on("swiperight",function(){D(),C(E())})),se.find(re).find(".cs-navigation > .cs-slide-link").click(function(){C(e(this).index())}),n.pauseOnHover&&(se.find(re).find(ce).hover(function(){k()}),se.find(re).find(ce).mouseleave(function(){D()}))}function p(){function t(){se.find(re).append('<div class="cs-preloader"><div class="cs-bg"></div><div class="cs-loader"><div class="cs-spinner"></div></div></div>'),se.find(re).find(".cs-preloader").css({"background-color":L(0).css("background-color"),"background-image":L(0).css("background-image"),"background-position":L(0).css("background-position"),"background-repeat":L(0).css("background-repeat"),"background-size":L(0).css("background-size")}),se.find(re).find(".cs-preloader > .cs-bg").css({"background-color":L(0).css("background-color"),"background-image":L(0).css("background-image"),"background-position":L(0).css("background-position"),"background-repeat":L(0).css("background-repeat"),"background-size":L(0).css("background-size")})}se.find(re).find(ce).css("visibility","hidden"),se.find(re).find(".cs-progress-bar").css("display","none"),se.find(re).find(".cs-navigation").css("display","none"),se.find(re).find(".cs-controls").css("display","none");var n=L(0).css("background-image");n=n.replace(/^url\(["']?/,"").replace(/["']?\)$/,""),n.match(/\.(jpeg|jpg|gif|png|bmp|tiff|tif)$/)?e("<img>").load(function(){t()}).attr("src",n).each(function(){this.complete&&e(this).load()}):t()}function f(){se.find(re).find(ce).css("visibility","visible"),se.find(re).find(".cs-progress-bar").css("display","block"),se.find(re).find(".cs-navigation").css("display","block"),se.find(re).find(".cs-controls").css("display","block"),te(L(0)),L(0).finish(),se.find(re).find(".cs-preloader").animate({opacity:0},300,function(){se.find(re).find(".cs-preloader").remove()})}function u(){var e,t,i=n.layout;switch(i){case"fixed":e=n.startWidth,t=n.startHeight,se.find(re).css({width:g(e),height:g(t)}),P().css({width:g(e),height:g(t)});break;case"full-width":e=se.width(),t=n.startHeight,se.find(re).css({width:e,height:g(t)}),P().css({width:e,height:g(t)});break;default:return!1}}function h(e){var t=(I()-n.startHeight)/2,i=(T()-n.startWidth)/2,a=0,o=0;return t>0&&(a=t),i>0&&(o=i),{top:a,left:o}}function v(){n.beforeSetResponsive();var t=P();w(!0),t.each(function(){var t=e(this),n=t.find(de);t.finish(),te(t),t.finish(),n.each(function(){var t=e(this);t.finish(),ie(t),t.finish(),H(t)&&U(t)})}),y(),u(),t.each(function(){var t=e(this),n=t.find(de);n.each(function(){var t=e(this);t.find("*").each(function(){var t=e(this);m(t)}),m(t),t.finish(),ae(t),t.finish(),H(t)&&U(t)}),t.finish(),ne(t),t.finish()}),De=e(window).width(),b()}function m(e){e.css({top:g(N(e,"top")+h(e).top),left:g(N(e,"left")+h(e).left),"padding-top":g(N(e,"padding-top")),"padding-right":g(N(e,"padding-right")),"padding-bottom":g(N(e,"padding-bottom")),"padding-left":g(N(e,"padding-left"))}),e.is("input")||e.is("button")||e.text().trim().length?e.css({"line-height":g(N(e,"line-height"))+"px","letter-spacing":g(N(e,"letter-spacing")),"font-size":g(N(e,"font-size"))}):e.css({width:g(N(e,"width")),height:g(N(e,"height"))})}function y(){var e=se.width(),t=n.startWidth;ke=e>=t||!n.responsive?1:e/t}function g(e){return e*ke}function b(){n.automaticSlide?F():z(pe),ve=!1}function w(t){for(var n=0;n<ye.length;n++)ye[n].clear();for(var n=0;n<ge.length;n++)ge[n].clear();me.clear(),P().each(function(){var n=e(this);t?n.finish():n.stop(!0,!0),n.find(de).each(function(){var n=e(this);t?n.finish():n.stop(!0,!0)})}),R()}function k(){if(!fe&&ue){n.beforePause();var e=se.find(re).find(".cs-progress-bar");e.stop(!0),me.pause(),fe=!0}}function D(){if(fe&&ue){n.beforeResume();var e=se.find(re).find(".cs-progress-bar"),t=(N(L(pe),"time"),me.getRemaining());e.animate({width:"100%"},t),me.resume(),fe=!1}}function T(){return se.find(re).width()}function I(){return se.find(re).height()}function S(){return pe+1==oe?0:pe+1}function E(){return 0>pe-1?oe-1:pe-1}function N(e,t){var i;switch(i=e.parent("ul").hasClass("cs-slides")?!0:!1,t){case"ease-in":return i?isNaN(parseInt(e.data(t)))?n.slidesEaseIn:parseInt(e.data(t)):isNaN(parseInt(e.data(t)))?n.elementsEaseIn:parseInt(e.data(t));case"ease-out":return i?isNaN(parseInt(e.data(t)))?n.slidesEaseOut:parseInt(e.data(t)):isNaN(parseInt(e.data(t)))?n.elementsEaseOut:parseInt(e.data(t));case"delay":return isNaN(parseInt(e.data(t)))?n.elementsDelay:parseInt(e.data(t));case"time":return i?isNaN(parseInt(e.data(t)))?n.slidesTime:parseInt(e.data(t)):"all"==e.data(t)?"all":isNaN(parseInt(e.data(t)))?n.itemsTime:parseInt(e.data(t));case"ignore-ease-out":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.ignoreElementsEaseOut;case"autoplay":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.videoAutoplay;case"loop":return 1==parseInt(e.data(t))?!0:0==parseInt(e.data(t))?!1:n.videoLoop;case"top":case"left":case"width":case"height":case"padding-top":case"padding-right":case"padding-bottom":case"padding-left":case"line-height":case"letter-spacing":case"font-size":return isNaN(parseFloat(e.data(t)))?0:parseFloat(e.data(t));case"in":case"out":case"opacity":return e.data(t);default:return!1}}function P(){return se.find(re).find(ce).find(le)}function L(e){return P().eq(e)}function Y(e,t){var n,i,a=t;this.pause=function(){clearTimeout(n),a-=new Date-i},this.resume=function(){i=new Date,clearTimeout(n),n=window.setTimeout(function(){e()},a)},this.clear=function(){clearTimeout(n)},this.getRemaining=function(){return a},this.resume()}function x(){return/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent)}function F(){z(pe).done(function(){fe||(pe=S(),F())})}function O(){var e=se.find(re).find(".cs-progress-bar");R(),e.animate({width:"100%"},N(L(pe),"time"))}function R(){var e=se.find(re).find(".cs-progress-bar");e.stop(),e.css("width",0)}function M(){var t=se.find(re).find(".cs-navigation"),n=t.find("> .cs-slide-link");n.each(function(){var t=e(this);t.index()==pe?t.addClass("cs-active"):t.removeClass("cs-active")})}function C(e){e!=pe&&(ue||he)&&(w(!1),B(pe,!1,!0).done(function(){pe=e,b()}))}function z(t){n.beforeSlideStart();var i=new e.Deferred;he=!1;for(var a=0;a<ye.length;a++)ye[a].clear();for(var a=0;a<ge.length;a++)ge[a].clear();me.clear(),L(t).finish(),ne(t),L(t).finish();var o=L(t).find(de);return o.each(function(){var t=e(this);t.finish(),ae(t),t.finish()}),M(),X(t),n.automaticSlide?B(t,!0,!0).done(function(){he=!0,i.resolve()}):B(t,!0,!1).done(function(){he=!0,i.resolve()}),i.promise()}function X(t){var n=L(t),i=n.find(de),a=0,o=!1,s=new e.Deferred;return ue=!1,te(t).done(function(){O(),ue=!0,o=!0,o&&a==i.length&&s.resolve()}),i.each(function(){var t=e(this),n=N(t,"delay");ge.push(new Y(function(){ie(t).done(function(){H(t)&&_(t),a++,o&&a==i.length&&s.resolve()})},n))}),s.promise()}function B(t,n,i){var a=L(t),o=a.find(de),s=n?N(a,"time")+N(a,"ease-in"):0,r=0,c=!1,l=new e.Deferred;return o.each(function(){var a=e(this),s=N(a,"time");if("all"!=s){var d=n?s:0;N(a,"ignore-ease-out")&&(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve())),ye.push(new Y(function(){ae(a).done(function(){N(a,"ignore-ease-out")||(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()))})},d))}}),me=new Y(function(){ue=!1,R(),c=!0,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()),i?o.each(function(){var n=e(this),a=N(n,"time");"all"==a&&(N(n,"ignore-ease-out")&&(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve())),ae(n).done(function(){N(n,"ignore-ease-out")||(r++,o.length==r&&c&&i&&(W(t),ne(t),l.resolve()))}))}):l.resolve()},s),l.promise()}function H(e){return A(e)||Q(e)}function _(e){A(e)?q(e):K(e)}function W(e){$(e),Z(e)}function U(e){A(e)?J(e):ee(e)}function A(e){return e.hasClass("cs-yt-iframe")}function V(e){return be[e.attr("id")].player}function j(e){return V(e).getPlayerState()}function q(e){!N(e,"autoplay")||be[e.attr("id")].played_once||x()||V(e).playVideo(),2==j(e)&&V(e).playVideo(),be[e.attr("id")].played_once=!0}function $(t){L(t).each(function(){var t=e(this);t.find(de+".cs-yt-iframe").each(function(){J(e(this))})})}function J(e){1==j(e)&&V(e).pauseVideo()}function Q(e){return e.hasClass("cs-vimeo-iframe")}function G(e){return we[e.attr("id")].player}function K(e){!N(e,"autoplay")||we[e.attr("id")].played_once||x()||G(e).api("play"),G(e).api("paused")&&!we[e.attr("id")].ended&&we[e.attr("id")].played_once&&G(e).api("play")}function Z(t){L(t).each(function(){var t=e(this);t.find(de+".cs-vimeo-iframe").each(function(){ee(e(this))})})}function ee(e){G(e).api("pause")}function te(t){var n=L(t),i=N(n,"in"),a=N(n,"ease-in"),o=new e.Deferred;if("block"==n.css("display"))return o.resolve().promise();if(ve)return n.css({display:"block",top:0,left:0,opacity:N(n,"opacity")}),o.resolve().promise();switch(i){case"fade":n.css({display:"block",top:0,left:0,opacity:0}),n.animate({opacity:N(n,"opacity")},a,function(){o.resolve()});break;case"fadeLeft":n.css({display:"block",top:0,left:T(),opacity:0}),n.animate({opacity:N(n,"opacity"),left:0},a,function(){o.resolve()});break;case"fadeRight":n.css({display:"block",top:0,left:-T(),opacity:0}),n.animate({opacity:N(n,"opacity"),left:0},a,function(){o.resolve()});break;case"slideLeft":n.css({display:"block",top:0,left:T(),opacity:N(n,"opacity")}),n.animate({left:0},a,function(){o.resolve()});break;case"slideRight":n.css({display:"block",top:0,left:-T(),opacity:N(n,"opacity")}),n.animate({left:0},a,function(){o.resolve()});break;case"slideUp":n.css({display:"block",top:I(),left:0,opacity:N(n,"opacity")}),n.animate({top:0},a,function(){o.resolve()});break;case"slideDown":n.css({display:"block",top:-I(),left:0,opacity:N(n,"opacity")}),n.animate({top:0},a,function(){o.resolve()});break;default:n.css({display:"block",top:0,left:0,opacity:N(n,"opacity")}),o.resolve()}return o.promise()}function ne(t){var n=L(t),i=N(n,"out"),a=N(n,"ease-out"),o=new e.Deferred;if("none"==n.css("display"))return o.resolve().promise();switch(i){case"fade":n.animate({opacity:0},a,function(){n.css({display:"none",opacity:N(n,"opacity")}),o.resolve()});break;case"fadeLeft":n.animate({opacity:0,left:-T()},a,function(){n.css({display:"none",opacity:N(n,"opacity"),left:0}),o.resolve()});break;case"fadeRight":n.animate({opacity:0,left:T()},a,function(){n.css({display:"none",opacity:N(n,"opacity"),left:0}),o.resolve()});break;case"slideLeft":n.animate({left:-T()},a,function(){n.css({display:"none",left:0}),o.resolve()});break;case"slideRight":n.animate({left:T()},a,function(){n.css({display:"none",left:0}),o.resolve()});break;case"slideUp":n.animate({top:-I()},a,function(){n.css({display:"none",top:0}),o.resolve()});break;case"slideDown":n.animate({top:I()},a,function(){n.css({display:"none",top:0}),o.resolve()});break;default:n.css({display:"none"}),o.resolve()}return o.promise()}function ie(t){var n=t.outerWidth(),i=t.outerHeight(),a=N(t,"in"),o=N(t,"ease-in"),s=N(t,"top"),r=N(t,"left"),c=new e.Deferred;if("block"==t.css("display"))return c.resolve().promise();switch(a){case"slideDown":t.css({display:"block",top:-i,left:g(r+h(t).left),opacity:N(t,"opacity")}).animate({top:g(s+h(t).top)},o,function(){c.resolve()});break;case"slideUp":t.css({display:"block",top:I(),left:g(r+h(t).left),opacity:N(t,"opacity")}).animate({top:g(s+h(t).top)},o,function(){c.resolve()});break;case"slideLeft":t.css({display:"block",top:g(s+h(t).top),left:T(),opacity:N(t,"opacity")}).animate({left:g(r+h(t).left)},o,function(){c.resolve()});break;case"slideRight":t.css({display:"block",top:g(s+h(t).top),left:-n,opacity:N(t,"opacity")}).animate({left:g(r+h(t).left)},o,function(){c.resolve()});break;case"fade":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left),opacity:0}).animate({opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeDown":t.css({display:"block",top:-i,left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeUp":t.css({display:"block",top:I(),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeLeft":t.css({display:"block",top:g(s+h(t).top),left:T(),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeRight":t.css({display:"block",top:g(s+h(t).top),left:-n,opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallDown":t.css({display:"block",top:g(s+h(t).top-30),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallUp":t.css({display:"block",top:g(s+h(t).top+30),left:g(r+h(t).left),opacity:0}).animate({top:g(s+h(t).top),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallLeft":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left+30),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;case"fadeSmallRight":t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left-30),opacity:0}).animate({left:g(r+h(t).left),opacity:N(t,"opacity")},o,function(){c.resolve()});break;default:t.css({display:"block",top:g(s+h(t).top),left:g(r+h(t).left),opacity:N(t,"opacity")}),c.resolve()}return c.promise()}function ae(t){var n=t.outerWidth(),i=t.outerHeight(),a=N(t,"out"),o=N(t,"ease-out"),s=new e.Deferred;if("none"==t.css("display"))return s.resolve().promise();switch(a){case"slideDown":t.animate({top:I()},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideUp":t.animate({top:-i},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideLeft":t.animate({left:-n},o,function(){t.css({display:"none"}),s.resolve()});break;case"slideRight":t.animate({left:T()},o,function(){t.css({display:"none"}),s.resolve()});break;case"fade":t.animate({opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeDown":t.animate({top:I(),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeUp":t.animate({top:-i,opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeLeft":t.animate({left:-n,opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeRight":t.animate({left:T(),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallDown":t.animate({top:g(N(t,"top")+h(t).top+30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallUp":t.animate({top:g(N(t,"top")+h(t).top-30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallLeft":t.animate({left:g(N(t,"left")+h(t).left-30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;case"fadeSmallRight":t.animate({left:g(N(t,"left")+h(t).left+30),opacity:0},o,function(){t.css({display:"none",opacity:N(t,"opacity")}),s.resolve()});break;default:t.css({display:"none"}),s.resolve()}return s.promise()}var oe,se=e(t),re="div.crellyslider",ce="ul.cs-slides",le="li.cs-slide",de="> *",pe=0,fe=!1,ue=!1,he=!1,ve=!0,me=new Y(function(){},0),ye=new Array,ge=new Array,be={},we={},ke=1,De=0;if("undefined"==typeof YT||"undefined"==typeof YT.Player)var Te=setInterval(function(){"undefined"!=typeof YT&&"undefined"!=typeof YT.Player&&(clearInterval(Te),i())},100);else i();this.resume=function(){D()},this.pause=function(){k()},this.nextSlide=function(){C(S())},this.previousSlide=function(){C(E())},this.changeSlide=function(e){C(e)},this.getCurrentSlide=function(){return pe},this.getTotalSlides=function(){return oe}},e.fn.crellySlider=function(t){var n=e.extend({layout:"fixed",responsive:!0,startWidth:1140,startHeight:500,pauseOnHover:!0,automaticSlide:!0,showControls:!0,showNavigation:!0,showProgressBar:!0,enableSwipe:!0,slidesTime:3e3,elementsDelay:0,elementsTime:"all",slidesEaseIn:300,elementsEaseIn:300,slidesEaseOut:300,elementsEaseOut:300,ignoreElementsEaseOut:!1,videoAutoplay:!1,videoLoop:!1,beforeStart:function(){},beforeSetResponsive:function(){},beforeSlideStart:function(){},beforePause:function(){},beforeResume:function(){}},t);return this.each(function(){if(void 0==e(this).data("crellySlider")){var t=new e.CrellySlider(this,n);e(this).data("crellySlider",t)}})}}(jQuery);
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: http://crellyslider.tk/contribute-and-support/
4
  Tags: animations, layers, texts, images, videos
5
  Requires at least: 3.6.0
6
  Tested up to: 4.7
7
- Stable tag: 1.1.1
8
  License: MIT
9
  License URI: http://opensource.org/licenses/MIT
10
 
@@ -54,6 +54,10 @@ You can find the documentation <a href="http://crellyslider.tk/documentation/">h
54
 
55
  == Changelog ==
56
 
 
 
 
 
57
  = 1.1.1 =
58
  * Bug fix: sometimes, the slider got stuck at loading screen
59
 
4
  Tags: animations, layers, texts, images, videos
5
  Requires at least: 3.6.0
6
  Tested up to: 4.7
7
+ Stable tag: 1.1.2
8
  License: MIT
9
  License URI: http://opensource.org/licenses/MIT
10
 
54
 
55
  == Changelog ==
56
 
57
+ = 1.1.2 =
58
+ * Bug fix: security issues
59
+ * Other minor changes and bug fixes
60
+
61
  = 1.1.1 =
62
  * Bug fix: sometimes, the slider got stuck at loading screen
63
 
wordpress/admin.php CHANGED
@@ -1,119 +1,133 @@
1
  <?php
 
2
 
3
  class CrellySliderAdmin {
4
-
5
  // Creates the menu and the admin panel
6
  public static function showSettings() {
7
  add_action('admin_menu', 'CrellySliderAdmin::pluginMenus');
8
  }
9
-
10
  public static function pluginMenus() {
11
  add_menu_page('Crelly Slider', 'Crelly Slider', 'manage_options', 'crellyslider', 'CrellySliderAdmin::displayPage', 'div');
12
  }
13
-
14
  // Go to the correct page
15
  public static function displayPage() {
16
  if(!isset($_GET['view'])) {
17
  $index = 'home';
18
  }
19
  else {
20
- $index = $_GET['view'];
 
 
 
21
  }
22
-
23
  global $wpdb;
24
-
25
- // Check what the user is doing: is it adding or modifying a slider?
26
- if(isset($_GET['view']) && $_GET['view'] == 'add') {
 
 
27
  $edit = false;
28
  $id = NULL;
29
  }
30
- else {
31
  $edit = true;
32
- $id = isset($_GET['id']) ? $_GET['id'] : NULL;
33
- if(isset($id))
34
- $slider = $wpdb->get_row('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = ' . $id);
 
 
 
35
  }
36
-
37
  ?>
38
  <div
39
  class="wrap cs-admin"
40
  <?php if($edit && isset($slider)): ?>
41
- style="width: <?php echo $slider->startWidth; ?>px;"
42
  <?php else: ?>
43
  style="width: 1140px;"
44
  <?php endif; ?>
45
- >
46
-
47
  <noscript class="cs-no-js">
48
  <div class="cs-message cs-message-error" style="display: block;"><?php _e('JavaScript must be enabled to view this page correctly.', 'crelly-slider'); ?></div>
49
  </noscript>
50
-
51
  <div class="cs-message cs-message-ok" style="display: none;"><?php _e('Operation completed successfully.', 'crelly-slider'); ?></div>
52
  <div class="cs-message cs-message-error" style="display: none;"><?php _e('Something went wrong.', 'crelly-slider'); ?></div>
53
  <?php if(! $edit): ?>
54
  <div class="cs-message cs-message-warning"><?php _e('When you\'ll click "Save Settings", you\'ll be able to add slides and elements.', 'crelly-slider'); ?></div>
55
  <?php endif; ?>
56
-
57
  <h2 class="cs-logo" title="Crelly Slider">
58
  <a href="?page=crellyslider">
59
  <img src="<?php echo CS_PLUGIN_URL . '/wordpress/images/logo2.png' ?>" alt="Crelly Slider" />
60
  </a>
61
  </h2>
62
-
63
  <br />
64
  <br />
65
-
66
  <?php
67
-
68
  switch($index) {
69
  case 'home':
70
  self::displayHome();
71
  break;
72
-
73
  case 'add':
74
  case 'edit':
75
  self::displaySlider();
76
  break;
77
  }
78
-
79
  ?>
80
-
81
  </div>
82
  <?php
83
  }
84
-
85
  // Displays the main plugin page
86
- public static function displayHome() {
87
  ?>
88
  <div class="cs-home">
89
  <?php require_once CS_PATH . 'wordpress/home.php'; ?>
90
  </div>
91
  <?php
92
  }
93
-
94
  // Displays the slider page in wich you can add or modify sliders, slides and elements
95
  public static function displaySlider() {
96
  global $wpdb;
97
-
98
- // Check what the user is doing: is it adding or modifying a slider?
99
- if($_GET['view'] == 'add') {
 
100
  $edit = false;
101
- $id = NULL; //This variable will be used in other files. It contains the ID of the SLIDER that the user is editing
102
  }
103
- else {
104
  $edit = true;
105
- $id = isset($_GET['id']) ? $_GET['id'] : NULL;
106
- $slider = $wpdb->get_row('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = ' . $id);
107
- $slides = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = ' . $id . ' ORDER BY position');
108
- // The elements variable are updated in the foreachh() loop directly in the "slides.php" file
 
 
 
 
109
  }
110
  ?>
111
-
112
  <div class="cs-slider <?php echo $edit ? 'cs-edit-slider' : 'cs-add-slider' ?>">
113
  <div class="cs-tabs cs-tabs-fade cs-tabs-switch-interface">
114
  <?php if($edit): ?>
115
  <ul>
116
-
117
  <li>
118
  <span class="cs-icon icon-settings"></span>
119
  <a id="cs-show-slider-settings"><?php _e('Slider Settings', 'crelly-slider'); ?></a>
@@ -123,59 +137,59 @@ class CrellySliderAdmin {
123
  <a id="cs-show-slides"><?php _e('Edit Slides', 'crelly-slider'); ?></a>
124
  </li>
125
  </ul>
126
-
 
127
  <br />
128
  <br />
129
- <br />
130
  <?php endif; ?>
131
-
132
  <?php require_once CS_PATH . 'wordpress/slider.php'; ?>
133
- <?php
134
  if($edit) {
135
  require_once CS_PATH . 'wordpress/elements.php';
136
  require_once CS_PATH . 'wordpress/slides.php';
137
  }
138
  ?>
139
  </div>
140
-
141
  <br />
142
-
143
  <a class="cs-button cs-is-primary cs-save-settings" data-id="<?php echo $id; ?>" href="#"><?php _e('Save Settings', 'crelly-slider'); ?></a>
144
-
145
  </div>
146
-
147
  <?php
148
  }
149
-
150
  // Avoid incompatibility issues
151
- public static function isAdminJs() {
152
  ?>
153
  <script type="text/javascript">
154
  var crellyslider_is_wordpress_admin = true;
155
  </script>
156
  <?php
157
  }
158
-
159
  public static function setIsAdminJs() {
160
  add_action('admin_enqueue_scripts', 'CrellySliderAdmin::isAdminJs');
161
  }
162
-
163
  // Include CSS and JavaScript
164
- public static function enqueues() {
165
  wp_enqueue_script('jquery-ui-draggable');
166
  wp_enqueue_script('jquery-ui-tabs');
167
  wp_enqueue_script('jquery-ui-sortable');
168
  wp_enqueue_script('jquery-ui-dialog');
169
  wp_enqueue_style('wp-color-picker');
170
  wp_enqueue_media();
171
-
172
  wp_register_script('crellyslider-admin', CS_PLUGIN_URL . '/wordpress/js/admin.js', array('wp-color-picker'), CS_VERSION, true);
173
-
174
  self::localization();
175
-
176
  wp_enqueue_style('crellyslider-admin', CS_PLUGIN_URL . '/wordpress/css/admin.css', array(), CS_VERSION);
177
  wp_enqueue_script('crellyslider-admin');
178
-
179
  $wp_version = get_bloginfo('version');
180
  $menu_icon_url = CS_PLUGIN_URL . '/wordpress/images/menu-icon.png';
181
  if($wp_version < 3.8) {
@@ -232,11 +246,11 @@ class CrellySliderAdmin {
232
  <?php
233
  }
234
  }
235
-
236
  public static function setEnqueues() {
237
  add_action('admin_enqueue_scripts', 'CrellySliderAdmin::enqueues');
238
  }
239
-
240
  public static function localization() {
241
  // Here the translations for the admin.js file
242
  $crellyslider_translations = array(
@@ -256,4 +270,4 @@ class CrellySliderAdmin {
256
 
257
  }
258
 
259
- ?>
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
 
4
  class CrellySliderAdmin {
5
+
6
  // Creates the menu and the admin panel
7
  public static function showSettings() {
8
  add_action('admin_menu', 'CrellySliderAdmin::pluginMenus');
9
  }
10
+
11
  public static function pluginMenus() {
12
  add_menu_page('Crelly Slider', 'Crelly Slider', 'manage_options', 'crellyslider', 'CrellySliderAdmin::displayPage', 'div');
13
  }
14
+
15
  // Go to the correct page
16
  public static function displayPage() {
17
  if(!isset($_GET['view'])) {
18
  $index = 'home';
19
  }
20
  else {
21
+ $index = esc_sql($_GET['view']);
22
+ if($index != 'add' && $index != 'edit') {
23
+ die();
24
+ }
25
  }
26
+
27
  global $wpdb;
28
+
29
+ // Check what the user is doing: is it adding or modifying a slider?
30
+ $edit = true;
31
+ $id = NULL;
32
+ if(isset($_GET['view']) && esc_sql($_GET['view']) == 'add') {
33
  $edit = false;
34
  $id = NULL;
35
  }
36
+ else if(isset($_GET['view']) && esc_sql($_GET['view']) == 'edit') {
37
  $edit = true;
38
+ $id = isset($_GET['id']) ? esc_sql($_GET['id']) : NULL;
39
+ if($id == NULL || ($id != NULL && !CrellySliderCommon::sliderExists($id))) {
40
+ die();
41
+ }
42
+
43
+ $slider = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = %d', $id));
44
  }
45
+
46
  ?>
47
  <div
48
  class="wrap cs-admin"
49
  <?php if($edit && isset($slider)): ?>
50
+ style="width: <?php echo esc_attr($slider->startWidth); ?>px;"
51
  <?php else: ?>
52
  style="width: 1140px;"
53
  <?php endif; ?>
54
+ >
55
+
56
  <noscript class="cs-no-js">
57
  <div class="cs-message cs-message-error" style="display: block;"><?php _e('JavaScript must be enabled to view this page correctly.', 'crelly-slider'); ?></div>
58
  </noscript>
59
+
60
  <div class="cs-message cs-message-ok" style="display: none;"><?php _e('Operation completed successfully.', 'crelly-slider'); ?></div>
61
  <div class="cs-message cs-message-error" style="display: none;"><?php _e('Something went wrong.', 'crelly-slider'); ?></div>
62
  <?php if(! $edit): ?>
63
  <div class="cs-message cs-message-warning"><?php _e('When you\'ll click "Save Settings", you\'ll be able to add slides and elements.', 'crelly-slider'); ?></div>
64
  <?php endif; ?>
65
+
66
  <h2 class="cs-logo" title="Crelly Slider">
67
  <a href="?page=crellyslider">
68
  <img src="<?php echo CS_PLUGIN_URL . '/wordpress/images/logo2.png' ?>" alt="Crelly Slider" />
69
  </a>
70
  </h2>
71
+
72
  <br />
73
  <br />
74
+
75
  <?php
76
+
77
  switch($index) {
78
  case 'home':
79
  self::displayHome();
80
  break;
81
+
82
  case 'add':
83
  case 'edit':
84
  self::displaySlider();
85
  break;
86
  }
87
+
88
  ?>
89
+
90
  </div>
91
  <?php
92
  }
93
+
94
  // Displays the main plugin page
95
+ public static function displayHome() {
96
  ?>
97
  <div class="cs-home">
98
  <?php require_once CS_PATH . 'wordpress/home.php'; ?>
99
  </div>
100
  <?php
101
  }
102
+
103
  // Displays the slider page in wich you can add or modify sliders, slides and elements
104
  public static function displaySlider() {
105
  global $wpdb;
106
+
107
+ $edit = true;
108
+ $id = NULL;
109
+ if(isset($_GET['view']) && esc_sql($_GET['view']) == 'add') {
110
  $edit = false;
111
+ $id = NULL;
112
  }
113
+ else if(isset($_GET['view']) && esc_sql($_GET['view']) == 'edit') {
114
  $edit = true;
115
+ $id = isset($_GET['id']) ? esc_sql($_GET['id']) : NULL;
116
+ if($id == NULL || ($id != NULL && !CrellySliderCommon::sliderExists($id))) {
117
+ die();
118
+ }
119
+
120
+ $slider = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = %d', $id));
121
+ $slides = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = %d ORDER BY position', $id));
122
+ // The elements variable are updated in the foreach() loop directly in the "slides.php" file
123
  }
124
  ?>
125
+
126
  <div class="cs-slider <?php echo $edit ? 'cs-edit-slider' : 'cs-add-slider' ?>">
127
  <div class="cs-tabs cs-tabs-fade cs-tabs-switch-interface">
128
  <?php if($edit): ?>
129
  <ul>
130
+
131
  <li>
132
  <span class="cs-icon icon-settings"></span>
133
  <a id="cs-show-slider-settings"><?php _e('Slider Settings', 'crelly-slider'); ?></a>
137
  <a id="cs-show-slides"><?php _e('Edit Slides', 'crelly-slider'); ?></a>
138
  </li>
139
  </ul>
140
+
141
+ <br />
142
  <br />
143
  <br />
 
144
  <?php endif; ?>
145
+
146
  <?php require_once CS_PATH . 'wordpress/slider.php'; ?>
147
+ <?php
148
  if($edit) {
149
  require_once CS_PATH . 'wordpress/elements.php';
150
  require_once CS_PATH . 'wordpress/slides.php';
151
  }
152
  ?>
153
  </div>
154
+
155
  <br />
156
+
157
  <a class="cs-button cs-is-primary cs-save-settings" data-id="<?php echo $id; ?>" href="#"><?php _e('Save Settings', 'crelly-slider'); ?></a>
158
+
159
  </div>
160
+
161
  <?php
162
  }
163
+
164
  // Avoid incompatibility issues
165
+ public static function isAdminJs() {
166
  ?>
167
  <script type="text/javascript">
168
  var crellyslider_is_wordpress_admin = true;
169
  </script>
170
  <?php
171
  }
172
+
173
  public static function setIsAdminJs() {
174
  add_action('admin_enqueue_scripts', 'CrellySliderAdmin::isAdminJs');
175
  }
176
+
177
  // Include CSS and JavaScript
178
+ public static function enqueues() {
179
  wp_enqueue_script('jquery-ui-draggable');
180
  wp_enqueue_script('jquery-ui-tabs');
181
  wp_enqueue_script('jquery-ui-sortable');
182
  wp_enqueue_script('jquery-ui-dialog');
183
  wp_enqueue_style('wp-color-picker');
184
  wp_enqueue_media();
185
+
186
  wp_register_script('crellyslider-admin', CS_PLUGIN_URL . '/wordpress/js/admin.js', array('wp-color-picker'), CS_VERSION, true);
187
+
188
  self::localization();
189
+
190
  wp_enqueue_style('crellyslider-admin', CS_PLUGIN_URL . '/wordpress/css/admin.css', array(), CS_VERSION);
191
  wp_enqueue_script('crellyslider-admin');
192
+
193
  $wp_version = get_bloginfo('version');
194
  $menu_icon_url = CS_PLUGIN_URL . '/wordpress/images/menu-icon.png';
195
  if($wp_version < 3.8) {
246
  <?php
247
  }
248
  }
249
+
250
  public static function setEnqueues() {
251
  add_action('admin_enqueue_scripts', 'CrellySliderAdmin::enqueues');
252
  }
253
+
254
  public static function localization() {
255
  // Here the translations for the admin.js file
256
  $crellyslider_translations = array(
270
 
271
  }
272
 
273
+ ?>
wordpress/ajax.php CHANGED
@@ -1,4 +1,6 @@
1
  <?php
 
 
2
  /********************/
3
  /** AJAX CALLBACKS **/
4
  /********************/
@@ -13,14 +15,14 @@ function crellyslider_wp_insert_rows($row_arrays = array(), $wp_table_name) {
13
  $place_holders = array();
14
  $query = "";
15
  $query_columns = "";
16
-
17
  $query .= "INSERT INTO {$wp_table_name} (";
18
-
19
  foreach($row_arrays as $count => $row_array)
20
  {
21
-
22
  foreach($row_array as $key => $value) {
23
-
24
  if($count == 0) {
25
  if($query_columns) {
26
  $query_columns .= ",".$key."";
@@ -28,9 +30,9 @@ function crellyslider_wp_insert_rows($row_arrays = array(), $wp_table_name) {
28
  $query_columns .= "".$key."";
29
  }
30
  }
31
-
32
  $values[] = $value;
33
-
34
  if(is_numeric($value)) {
35
  if(isset($place_holders[$count])) {
36
  $place_holders[$count] .= ", '%d'";
@@ -48,17 +50,17 @@ function crellyslider_wp_insert_rows($row_arrays = array(), $wp_table_name) {
48
  // mind closing the GAP
49
  $place_holders[$count] .= ")";
50
  }
51
-
52
  $query .= " $query_columns ) VALUES ";
53
-
54
  $query .= implode(', ', $place_holders);
55
-
56
  if($wpdb->query($wpdb->prepare($query, $values))){
57
  return true;
58
  } else {
59
  return false;
60
  }
61
-
62
  }
63
 
64
  // Add slider
@@ -66,20 +68,20 @@ add_action('wp_ajax_crellyslider_addSlider', 'crellyslider_addSlider_callback');
66
  function crellyslider_addSlider_callback() {
67
  global $wpdb;
68
  $options = $_POST['datas'];
69
-
70
  $output = crellyslider_insertSliderSQL($options);
71
-
72
  // Returning
73
- $output = json_encode($wpdb->insert_id);
74
  if(is_array($output)) print_r($output);
75
  else echo $output;
76
-
77
  die();
78
  }
79
 
80
  function crellyslider_insertSliderSQL($options) {
81
  global $wpdb;
82
-
83
  return $wpdb->insert(
84
  $wpdb->prefix . 'crellyslider_sliders',
85
  array(
@@ -121,7 +123,12 @@ function crellyslider_editSlider_callback() {
121
  global $wpdb;
122
  $options = $_POST['datas'];
123
  $table_name = $wpdb->prefix . 'crellyslider_sliders';
124
-
 
 
 
 
 
125
  $output = $wpdb->update(
126
  $table_name,
127
  array(
@@ -139,7 +146,7 @@ function crellyslider_editSlider_callback() {
139
  'callbacks' => $options['callbacks'],
140
  'enableSwipe' => $options['enableSwipe'],
141
  ),
142
- array('id' => $options['id']),
143
  array(
144
  '%s',
145
  '%s',
@@ -157,12 +164,12 @@ function crellyslider_editSlider_callback() {
157
  ),
158
  array('%d')
159
  );
160
-
161
  // Returning
162
  $output = json_encode($output);
163
  if(is_array($output)) print_r($output);
164
  else echo $output;
165
-
166
  die();
167
  }
168
 
@@ -171,24 +178,33 @@ add_action('wp_ajax_crellyslider_editSlides', 'crellyslider_editSlides_callback'
171
  function crellyslider_editSlides_callback() {
172
  global $wpdb;
173
  $options = $_POST['datas'];
174
-
 
 
 
 
 
175
  $output = true;
176
-
177
  // Remove all the old slides
178
- $output = $wpdb->delete($wpdb->prefix . 'crellyslider_slides', array('slider_parent' => $options['slider_parent']), array('%d'));
179
  if($output === false) {
180
  echo json_encode(false);
181
  }
182
  else {
183
  // It's impossible to have 0 slides (jQuery checks it)
 
 
 
 
184
  $output = crellyslider_wp_insert_rows($options['options'], $wpdb->prefix . 'crellyslider_slides');
185
-
186
  // Returning
187
  $output = json_encode($output);
188
  if(is_array($output)) print_r($output);
189
  else echo $output;
190
  }
191
-
192
  die();
193
  }
194
 
@@ -197,11 +213,16 @@ add_action('wp_ajax_crellyslider_editElements', 'crellyslider_editElements_callb
197
  function crellyslider_editElements_callback() {
198
  global $wpdb;
199
  $options = $_POST['datas'];
200
-
201
- $output = true;
202
-
 
 
 
 
 
203
  // Remove all the old elements
204
- $output = $wpdb->delete($wpdb->prefix . 'crellyslider_elements', array('slider_parent' => $options['slider_parent']), array('%d'));
205
  if($output === false) {
206
  echo json_encode(false);
207
  }
@@ -211,18 +232,18 @@ function crellyslider_editElements_callback() {
211
  if(empty($quick_temp)) {
212
  echo json_encode(true);
213
  }
214
- else {
215
  $options_array = json_decode(stripslashes($options['options']));
216
-
217
  $output = crellyslider_wp_insert_rows($options_array, $wpdb->prefix . 'crellyslider_elements');
218
-
219
  // Returning
220
  $output = json_encode($output);
221
  if(is_array($output)) print_r($output);
222
  else echo $output;
223
  }
224
  }
225
-
226
  die();
227
  }
228
 
@@ -231,35 +252,40 @@ add_action('wp_ajax_crellyslider_deleteSlider', 'crellyslider_deleteSlider_callb
231
  function crellyslider_deleteSlider_callback() {
232
  global $wpdb;
233
  $options = $_POST['datas'];
234
-
 
 
 
 
 
235
  $real_output = true;
236
-
237
  // Delete slider
238
- $table_name = $wpdb->prefix . 'crellyslider_sliders';
239
- $output = $wpdb->delete($table_name, array('id' => $options['id']), array('%d'));
240
  if($output === false) {
241
  $real_output = false;
242
  }
243
-
244
  // Delete slides
245
- $table_name = $wpdb->prefix . 'crellyslider_slides';
246
- $output = $wpdb->delete($table_name, array('slider_parent' => $options['id']), array('%d'));
247
  if($output === false) {
248
  $real_output = false;
249
  }
250
-
251
  // Delete elements
252
- $table_name = $wpdb->prefix . 'crellyslider_elements';
253
- $output = $wpdb->delete($table_name, array('slider_parent' => $options['id']), array('%d'));
254
  if($output === false) {
255
  $real_output = false;
256
  }
257
-
258
  // Returning
259
  $real_output = json_encode($real_output);
260
  if(is_array($real_output)) print_r($real_output);
261
  else echo $real_output;
262
-
263
  die();
264
  }
265
 
@@ -268,30 +294,35 @@ add_action('wp_ajax_crellyslider_duplicateSlider', 'crellyslider_duplicateSlider
268
  function crellyslider_duplicateSlider_callback() {
269
  global $wpdb;
270
  $options = $_POST['datas'];
271
-
 
 
 
 
 
272
  $output = true;
273
  $real_output = true;
274
-
275
- $slider_id = $options['id'];
276
-
277
  $cloned_slider_name = '';
278
  $cloned_slider_alias = '';
279
-
280
- $sliders = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = \'' . $slider_id . '\'', ARRAY_A);
281
  foreach($sliders as $slider) {
282
  $cloned_slider_name = $slider['name'] = $slider['name'] . '_' . __('Copy', 'crelly-slider');
283
  $cloned_slider_alias = $slider['alias'] = $slider['alias'] . '_' . __('copy', 'crelly-slider');
284
  $output = crellyslider_insertSliderSQL($slider);
285
  }
286
-
287
  if($output === false) {
288
  $real_output = false;
289
  }
290
  else {
291
  $cloned_slider_id = $wpdb->insert_id;
292
-
293
  // Clone slides
294
- $slides = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = ' . $slider_id . ' ORDER BY position', ARRAY_A);
295
  if(empty($slides)) {
296
  $output = true;
297
  }
@@ -305,9 +336,9 @@ function crellyslider_duplicateSlider_callback() {
305
  $output = false;
306
  }
307
  }
308
-
309
  // Clone elements
310
- $elements = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = ' . $slider_id, ARRAY_A);
311
  if(empty($elements)) {
312
  $output = true;
313
  }
@@ -320,13 +351,13 @@ function crellyslider_duplicateSlider_callback() {
320
  if($temp === false) {
321
  $output = false;
322
  }
323
-
324
  if($output === false) {
325
  $real_output = false;
326
  }
327
  }
328
  }
329
-
330
  if($real_output === true) {
331
  $real_output = array(
332
  'response' => true,
@@ -343,31 +374,36 @@ function crellyslider_duplicateSlider_callback() {
343
  'cloned_slider_alias' => false,
344
  );
345
  }
346
-
347
  // Returning
348
  $real_output = json_encode($real_output);
349
  if(is_array($real_output)) print_r($real_output);
350
  else echo $real_output;
351
-
352
  die();
353
  }
354
 
355
- // Exports the slider in xml
356
  add_action('wp_ajax_crellyslider_exportSlider', 'crellyslider_exportSlider_callback');
357
  function crellyslider_exportSlider_callback() {
358
  global $wpdb;
359
-
360
  // Clear the temp folder
361
  array_map('unlink', glob(CS_PATH . '/wordpress/temp/*'));
362
-
363
  $options = $_POST['datas'];
364
-
 
 
 
 
 
365
  $real_output = true;
366
-
367
  $result = array();
368
-
369
  // Get the slider
370
- $sliders = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = \'' . $options['id'] . '\'', ARRAY_A);
371
  if(empty($sliders)) {
372
  $real_output = false;
373
  }
@@ -377,21 +413,21 @@ function crellyslider_exportSlider_callback() {
377
  }
378
  $result['sliders'] = $sliders;
379
  }
380
-
381
  $zip = new ZipArchive();
382
  $filename = 'crellyslider-' . $sliders[0]['alias'] . '.zip';
383
  if($zip->open(CS_PATH . '/wordpress/temp/' . $filename, ZipArchive::CREATE) !== TRUE) {
384
  echo false;
385
  die();
386
  }
387
-
388
  // Get the slides
389
- $slides = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = ' . $options['id'] . ' ORDER BY position', ARRAY_A);
390
  if(! empty($slides)) {
391
  foreach($slides as $key => $temp) {
392
  unset($slides[$key]['id']);
393
  unset($slides[$key]['slider_parent']);
394
-
395
  // Add images to zip and remove media directory URLs
396
  if($slides[$key]['background_type_image'] != 'none' && $slides[$key]['background_type_image'] != 'undefined') {
397
  $img = $slides[$key]['background_type_image'];
@@ -401,14 +437,14 @@ function crellyslider_exportSlider_callback() {
401
  }
402
  $result['slides'] = $slides;
403
  }
404
-
405
  // Get the elements
406
- $elements = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = ' . $options['id'], ARRAY_A);
407
  if(! empty($elements)) {
408
  foreach($elements as $key => $temp) {
409
  unset($elements[$key]['id']);
410
  unset($elements[$key]['slider_parent']);
411
-
412
  // Add images to zip and remove media directory URLs
413
  if($elements[$key]['type'] == 'image') {
414
  $img = $elements[$key]['image_src'];
@@ -418,12 +454,12 @@ function crellyslider_exportSlider_callback() {
418
  }
419
  $result['elements'] = $elements;
420
  }
421
-
422
- $json = json_encode($result);
423
  $zip->addFromString("slider.json", $json);
424
-
425
  $zip->close();
426
-
427
  if($real_output === true) {
428
  $real_output = array(
429
  'response' => true,
@@ -436,12 +472,12 @@ function crellyslider_exportSlider_callback() {
436
  'url' => false,
437
  );
438
  }
439
-
440
  // Returning
441
  $real_output = json_encode($real_output);
442
  if(is_array($real_output)) print_r($real_output);
443
  else echo $real_output;
444
-
445
  die();
446
  }
447
 
@@ -449,35 +485,35 @@ function crellyslider_exportSlider_callback() {
449
  add_action('wp_ajax_crellyslider_importSlider', 'crellyslider_importSlider_callback');
450
  function crellyslider_importSlider_callback() {
451
  global $wpdb;
452
-
453
  // Clear the temp folder
454
  array_map('unlink', glob(CS_PATH . '/wordpress/temp/*'));
455
-
456
- foreach($_FILES as $file) {
457
  $output = true;
458
  $real_output = true;
459
-
460
  $zip = new ZipArchive();
461
  if($zip->open($file['tmp_name']) !== TRUE) {
462
  echo false;
463
  die();
464
  }
465
-
466
  $zip->extractTo(CS_PATH . '/wordpress/temp/');
467
-
468
  $imported_array = json_decode(file_get_contents(CS_PATH . '/wordpress/temp/slider.json'));
469
-
470
  $sliders = $imported_array->sliders;
471
  foreach($sliders as $slider) {
472
  $output = crellyslider_insertSliderSQL((array) $slider);
473
  }
474
-
475
  if($output === false) {
476
  $real_output = false;
477
  }
478
  else {
479
  $imported_slider_id = $wpdb->insert_id;
480
-
481
  // Import slides
482
  $slides = $imported_array->slides;
483
  if(empty($slides)) {
@@ -486,10 +522,14 @@ function crellyslider_importSlider_callback() {
486
  else {
487
  foreach($slides as $key => $slide) {
488
  $slides[$key]->slider_parent = $imported_slider_id;
489
-
490
  // Set background images
491
  if($slides[$key]->background_type_image != 'undefined' && $slides[$key]->background_type_image != 'none') {
492
  $upload = media_sideload_image(CS_PLUGIN_URL . '/wordpress/temp/' . $slides[$key]->background_type_image, 0, null, 'src');
 
 
 
 
493
  $slides[$key]->background_type_image = $upload;
494
  }
495
  }
@@ -498,7 +538,7 @@ function crellyslider_importSlider_callback() {
498
  $output = false;
499
  }
500
  }
501
-
502
  // Import elements
503
  $elements = (array) $imported_array->elements;
504
  if(empty($elements)) {
@@ -507,10 +547,14 @@ function crellyslider_importSlider_callback() {
507
  else {
508
  foreach($elements as $key => $element) {
509
  $elements[$key]->slider_parent = $imported_slider_id;
510
-
511
  // Set images
512
  if($elements[$key]->type == 'image') {
513
  $upload = media_sideload_image(CS_PLUGIN_URL . '/wordpress/temp/' . $elements[$key]->image_src, 0, null, 'src');
 
 
 
 
514
  $elements[$key]->image_src = $upload;
515
  }
516
  }
@@ -518,13 +562,13 @@ function crellyslider_importSlider_callback() {
518
  if($temp === false) {
519
  $output = false;
520
  }
521
-
522
  if($output === false) {
523
  $real_output = false;
524
  }
525
  }
526
  }
527
-
528
  if($real_output === true) {
529
  $real_output = array(
530
  'response' => true,
@@ -541,13 +585,13 @@ function crellyslider_importSlider_callback() {
541
  'imported_slider_alias' => false,
542
  );
543
  }
544
-
545
  // Returning
546
  $real_output = json_encode($real_output);
547
  if(is_array($real_output)) print_r($real_output);
548
  else echo $real_output;
549
-
550
  die();
551
  }
552
  }
553
- ?>
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
  /********************/
5
  /** AJAX CALLBACKS **/
6
  /********************/
15
  $place_holders = array();
16
  $query = "";
17
  $query_columns = "";
18
+
19
  $query .= "INSERT INTO {$wp_table_name} (";
20
+
21
  foreach($row_arrays as $count => $row_array)
22
  {
23
+
24
  foreach($row_array as $key => $value) {
25
+
26
  if($count == 0) {
27
  if($query_columns) {
28
  $query_columns .= ",".$key."";
30
  $query_columns .= "".$key."";
31
  }
32
  }
33
+
34
  $values[] = $value;
35
+
36
  if(is_numeric($value)) {
37
  if(isset($place_holders[$count])) {
38
  $place_holders[$count] .= ", '%d'";
50
  // mind closing the GAP
51
  $place_holders[$count] .= ")";
52
  }
53
+
54
  $query .= " $query_columns ) VALUES ";
55
+
56
  $query .= implode(', ', $place_holders);
57
+
58
  if($wpdb->query($wpdb->prepare($query, $values))){
59
  return true;
60
  } else {
61
  return false;
62
  }
63
+
64
  }
65
 
66
  // Add slider
68
  function crellyslider_addSlider_callback() {
69
  global $wpdb;
70
  $options = $_POST['datas'];
71
+
72
  $output = crellyslider_insertSliderSQL($options);
73
+
74
  // Returning
75
+ $output = json_encode(esc_sql($wpdb->insert_id));
76
  if(is_array($output)) print_r($output);
77
  else echo $output;
78
+
79
  die();
80
  }
81
 
82
  function crellyslider_insertSliderSQL($options) {
83
  global $wpdb;
84
+
85
  return $wpdb->insert(
86
  $wpdb->prefix . 'crellyslider_sliders',
87
  array(
123
  global $wpdb;
124
  $options = $_POST['datas'];
125
  $table_name = $wpdb->prefix . 'crellyslider_sliders';
126
+
127
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['id'])))) {
128
+ echo json_encode(false);
129
+ return;
130
+ }
131
+
132
  $output = $wpdb->update(
133
  $table_name,
134
  array(
146
  'callbacks' => $options['callbacks'],
147
  'enableSwipe' => $options['enableSwipe'],
148
  ),
149
+ array('id' => esc_sql($options['id'])),
150
  array(
151
  '%s',
152
  '%s',
164
  ),
165
  array('%d')
166
  );
167
+
168
  // Returning
169
  $output = json_encode($output);
170
  if(is_array($output)) print_r($output);
171
  else echo $output;
172
+
173
  die();
174
  }
175
 
178
  function crellyslider_editSlides_callback() {
179
  global $wpdb;
180
  $options = $_POST['datas'];
181
+
182
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['slider_parent'])))) {
183
+ echo json_encode(false);
184
+ return;
185
+ }
186
+
187
  $output = true;
188
+
189
  // Remove all the old slides
190
+ $output = $wpdb->delete($wpdb->prefix . 'crellyslider_slides', array('slider_parent' => esc_sql($options['slider_parent'])), array('%d'));
191
  if($output === false) {
192
  echo json_encode(false);
193
  }
194
  else {
195
  // It's impossible to have 0 slides (jQuery checks it)
196
+ if(count($options['options']) == 0) {
197
+ echo json_encode(false);
198
+ return;
199
+ }
200
  $output = crellyslider_wp_insert_rows($options['options'], $wpdb->prefix . 'crellyslider_slides');
201
+
202
  // Returning
203
  $output = json_encode($output);
204
  if(is_array($output)) print_r($output);
205
  else echo $output;
206
  }
207
+
208
  die();
209
  }
210
 
213
  function crellyslider_editElements_callback() {
214
  global $wpdb;
215
  $options = $_POST['datas'];
216
+
217
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['slider_parent'])))) {
218
+ echo json_encode(false);
219
+ return;
220
+ }
221
+
222
+ $output = true;
223
+
224
  // Remove all the old elements
225
+ $output = $wpdb->delete($wpdb->prefix . 'crellyslider_elements', array('slider_parent' => esc_sql($options['slider_parent'])), array('%d'));
226
  if($output === false) {
227
  echo json_encode(false);
228
  }
232
  if(empty($quick_temp)) {
233
  echo json_encode(true);
234
  }
235
+ else {
236
  $options_array = json_decode(stripslashes($options['options']));
237
+
238
  $output = crellyslider_wp_insert_rows($options_array, $wpdb->prefix . 'crellyslider_elements');
239
+
240
  // Returning
241
  $output = json_encode($output);
242
  if(is_array($output)) print_r($output);
243
  else echo $output;
244
  }
245
  }
246
+
247
  die();
248
  }
249
 
252
  function crellyslider_deleteSlider_callback() {
253
  global $wpdb;
254
  $options = $_POST['datas'];
255
+
256
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['id'])))) {
257
+ echo json_encode(false);
258
+ return;
259
+ }
260
+
261
  $real_output = true;
262
+
263
  // Delete slider
264
+ $table_name = $wpdb->prefix . 'crellyslider_sliders';
265
+ $output = $wpdb->delete($table_name, array('id' => esc_sql($options['id'])), array('%d'));
266
  if($output === false) {
267
  $real_output = false;
268
  }
269
+
270
  // Delete slides
271
+ $table_name = $wpdb->prefix . 'crellyslider_slides';
272
+ $output = $wpdb->delete($table_name, array('slider_parent' => esc_sql($options['id'])), array('%d'));
273
  if($output === false) {
274
  $real_output = false;
275
  }
276
+
277
  // Delete elements
278
+ $table_name = $wpdb->prefix . 'crellyslider_elements';
279
+ $output = $wpdb->delete($table_name, array('slider_parent' => esc_sql($options['id'])), array('%d'));
280
  if($output === false) {
281
  $real_output = false;
282
  }
283
+
284
  // Returning
285
  $real_output = json_encode($real_output);
286
  if(is_array($real_output)) print_r($real_output);
287
  else echo $real_output;
288
+
289
  die();
290
  }
291
 
294
  function crellyslider_duplicateSlider_callback() {
295
  global $wpdb;
296
  $options = $_POST['datas'];
297
+
298
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['id'])))) {
299
+ echo json_encode(false);
300
+ return;
301
+ }
302
+
303
  $output = true;
304
  $real_output = true;
305
+
306
+ $slider_id = esc_sql($options['id']);
307
+
308
  $cloned_slider_name = '';
309
  $cloned_slider_alias = '';
310
+
311
+ $sliders = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = %d', $slider_id), ARRAY_A);
312
  foreach($sliders as $slider) {
313
  $cloned_slider_name = $slider['name'] = $slider['name'] . '_' . __('Copy', 'crelly-slider');
314
  $cloned_slider_alias = $slider['alias'] = $slider['alias'] . '_' . __('copy', 'crelly-slider');
315
  $output = crellyslider_insertSliderSQL($slider);
316
  }
317
+
318
  if($output === false) {
319
  $real_output = false;
320
  }
321
  else {
322
  $cloned_slider_id = $wpdb->insert_id;
323
+
324
  // Clone slides
325
+ $slides = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = %d ORDER BY position', $slider_id), ARRAY_A);
326
  if(empty($slides)) {
327
  $output = true;
328
  }
336
  $output = false;
337
  }
338
  }
339
+
340
  // Clone elements
341
+ $elements = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = %d', $slider_id), ARRAY_A);
342
  if(empty($elements)) {
343
  $output = true;
344
  }
351
  if($temp === false) {
352
  $output = false;
353
  }
354
+
355
  if($output === false) {
356
  $real_output = false;
357
  }
358
  }
359
  }
360
+
361
  if($real_output === true) {
362
  $real_output = array(
363
  'response' => true,
374
  'cloned_slider_alias' => false,
375
  );
376
  }
377
+
378
  // Returning
379
  $real_output = json_encode($real_output);
380
  if(is_array($real_output)) print_r($real_output);
381
  else echo $real_output;
382
+
383
  die();
384
  }
385
 
386
+ // Exports the slider in .zip
387
  add_action('wp_ajax_crellyslider_exportSlider', 'crellyslider_exportSlider_callback');
388
  function crellyslider_exportSlider_callback() {
389
  global $wpdb;
390
+
391
  // Clear the temp folder
392
  array_map('unlink', glob(CS_PATH . '/wordpress/temp/*'));
393
+
394
  $options = $_POST['datas'];
395
+
396
+ if(!CrellySliderCommon::sliderExists((esc_sql($options['id'])))) {
397
+ echo json_encode(false);
398
+ return;
399
+ }
400
+
401
  $real_output = true;
402
+
403
  $result = array();
404
+
405
  // Get the slider
406
+ $sliders = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = %d', esc_sql($options['id'])), ARRAY_A);
407
  if(empty($sliders)) {
408
  $real_output = false;
409
  }
413
  }
414
  $result['sliders'] = $sliders;
415
  }
416
+
417
  $zip = new ZipArchive();
418
  $filename = 'crellyslider-' . $sliders[0]['alias'] . '.zip';
419
  if($zip->open(CS_PATH . '/wordpress/temp/' . $filename, ZipArchive::CREATE) !== TRUE) {
420
  echo false;
421
  die();
422
  }
423
+
424
  // Get the slides
425
+ $slides = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = %d ORDER BY position', esc_sql($options['id'])), ARRAY_A);
426
  if(! empty($slides)) {
427
  foreach($slides as $key => $temp) {
428
  unset($slides[$key]['id']);
429
  unset($slides[$key]['slider_parent']);
430
+
431
  // Add images to zip and remove media directory URLs
432
  if($slides[$key]['background_type_image'] != 'none' && $slides[$key]['background_type_image'] != 'undefined') {
433
  $img = $slides[$key]['background_type_image'];
437
  }
438
  $result['slides'] = $slides;
439
  }
440
+
441
  // Get the elements
442
+ $elements = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = %d', esc_sql($options['id'])), ARRAY_A);
443
  if(! empty($elements)) {
444
  foreach($elements as $key => $temp) {
445
  unset($elements[$key]['id']);
446
  unset($elements[$key]['slider_parent']);
447
+
448
  // Add images to zip and remove media directory URLs
449
  if($elements[$key]['type'] == 'image') {
450
  $img = $elements[$key]['image_src'];
454
  }
455
  $result['elements'] = $elements;
456
  }
457
+
458
+ $json = json_encode($result);
459
  $zip->addFromString("slider.json", $json);
460
+
461
  $zip->close();
462
+
463
  if($real_output === true) {
464
  $real_output = array(
465
  'response' => true,
472
  'url' => false,
473
  );
474
  }
475
+
476
  // Returning
477
  $real_output = json_encode($real_output);
478
  if(is_array($real_output)) print_r($real_output);
479
  else echo $real_output;
480
+
481
  die();
482
  }
483
 
485
  add_action('wp_ajax_crellyslider_importSlider', 'crellyslider_importSlider_callback');
486
  function crellyslider_importSlider_callback() {
487
  global $wpdb;
488
+
489
  // Clear the temp folder
490
  array_map('unlink', glob(CS_PATH . '/wordpress/temp/*'));
491
+
492
+ foreach($_FILES as $file) {
493
  $output = true;
494
  $real_output = true;
495
+
496
  $zip = new ZipArchive();
497
  if($zip->open($file['tmp_name']) !== TRUE) {
498
  echo false;
499
  die();
500
  }
501
+
502
  $zip->extractTo(CS_PATH . '/wordpress/temp/');
503
+
504
  $imported_array = json_decode(file_get_contents(CS_PATH . '/wordpress/temp/slider.json'));
505
+
506
  $sliders = $imported_array->sliders;
507
  foreach($sliders as $slider) {
508
  $output = crellyslider_insertSliderSQL((array) $slider);
509
  }
510
+
511
  if($output === false) {
512
  $real_output = false;
513
  }
514
  else {
515
  $imported_slider_id = $wpdb->insert_id;
516
+
517
  // Import slides
518
  $slides = $imported_array->slides;
519
  if(empty($slides)) {
522
  else {
523
  foreach($slides as $key => $slide) {
524
  $slides[$key]->slider_parent = $imported_slider_id;
525
+
526
  // Set background images
527
  if($slides[$key]->background_type_image != 'undefined' && $slides[$key]->background_type_image != 'none') {
528
  $upload = media_sideload_image(CS_PLUGIN_URL . '/wordpress/temp/' . $slides[$key]->background_type_image, 0, null, 'src');
529
+ if(is_wp_error($upload)) {
530
+ echo json_encode(false);
531
+ return;
532
+ }
533
  $slides[$key]->background_type_image = $upload;
534
  }
535
  }
538
  $output = false;
539
  }
540
  }
541
+
542
  // Import elements
543
  $elements = (array) $imported_array->elements;
544
  if(empty($elements)) {
547
  else {
548
  foreach($elements as $key => $element) {
549
  $elements[$key]->slider_parent = $imported_slider_id;
550
+
551
  // Set images
552
  if($elements[$key]->type == 'image') {
553
  $upload = media_sideload_image(CS_PLUGIN_URL . '/wordpress/temp/' . $elements[$key]->image_src, 0, null, 'src');
554
+ if(is_wp_error($upload)) {
555
+ echo json_encode(false);
556
+ return;
557
+ }
558
  $elements[$key]->image_src = $upload;
559
  }
560
  }
562
  if($temp === false) {
563
  $output = false;
564
  }
565
+
566
  if($output === false) {
567
  $real_output = false;
568
  }
569
  }
570
  }
571
+
572
  if($real_output === true) {
573
  $real_output = array(
574
  'response' => true,
585
  'imported_slider_alias' => false,
586
  );
587
  }
588
+
589
  // Returning
590
  $real_output = json_encode($real_output);
591
  if(is_array($real_output)) print_r($real_output);
592
  else echo $real_output;
593
+
594
  die();
595
  }
596
  }
597
+ ?>
wordpress/common.php CHANGED
@@ -1,8 +1,9 @@
1
  <?php
 
2
 
3
  class CrellySliderCommon {
4
  // Includes CSS and JavaScript
5
- public static function enqueues() {
6
  wp_enqueue_script('jquery');
7
  wp_enqueue_script('jquery-ui-core');
8
  wp_enqueue_style('crellyslider', CS_PLUGIN_URL . '/css/crellyslider.css', array(), CS_VERSION);
@@ -13,21 +14,31 @@ class CrellySliderCommon {
13
  wp_enqueue_script('jquery.crellyslider.min', CS_PLUGIN_URL . '/js/jquery.crellyslider.min.js', array(), CS_VERSION, false);
14
  }
15
  }
16
-
17
  public static function setEnqueues() {
18
  add_action('wp_enqueue_scripts', 'CrellySliderCommon::enqueues');
19
  add_action('admin_enqueue_scripts', 'CrellySliderCommon::enqueues');
20
  }
21
-
22
  // Loads language file
23
- public static function textDomain() {
24
  $locale = apply_filters('plugin_locale', get_locale(), 'crelly-slider');
25
  load_textdomain('crelly-slider', WP_LANG_DIR . '/crelly-slider/crelly-slider-' . $locale . '.mo');
26
  load_plugin_textdomain('crelly-slider', false, dirname(plugin_basename(__FILE__)) . '/languages');
27
  }
28
-
29
  public static function loadPluginTextDomain() {
30
  add_action('plugins_loaded', 'CrellySliderCommon::textDomain');
31
  }
 
 
 
 
 
 
 
 
 
 
32
  }
33
- ?>
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
 
4
  class CrellySliderCommon {
5
  // Includes CSS and JavaScript
6
+ public static function enqueues() {
7
  wp_enqueue_script('jquery');
8
  wp_enqueue_script('jquery-ui-core');
9
  wp_enqueue_style('crellyslider', CS_PLUGIN_URL . '/css/crellyslider.css', array(), CS_VERSION);
14
  wp_enqueue_script('jquery.crellyslider.min', CS_PLUGIN_URL . '/js/jquery.crellyslider.min.js', array(), CS_VERSION, false);
15
  }
16
  }
17
+
18
  public static function setEnqueues() {
19
  add_action('wp_enqueue_scripts', 'CrellySliderCommon::enqueues');
20
  add_action('admin_enqueue_scripts', 'CrellySliderCommon::enqueues');
21
  }
22
+
23
  // Loads language file
24
+ public static function textDomain() {
25
  $locale = apply_filters('plugin_locale', get_locale(), 'crelly-slider');
26
  load_textdomain('crelly-slider', WP_LANG_DIR . '/crelly-slider/crelly-slider-' . $locale . '.mo');
27
  load_plugin_textdomain('crelly-slider', false, dirname(plugin_basename(__FILE__)) . '/languages');
28
  }
29
+
30
  public static function loadPluginTextDomain() {
31
  add_action('plugins_loaded', 'CrellySliderCommon::textDomain');
32
  }
33
+
34
+ // Returns true if a slider exists into the database. False if it doesn't
35
+ public static function sliderExists($id) {
36
+ global $wpdb;
37
+ $slider = $wpdb->get_row($wpdb->prepare('SELECT id FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE id = %d', esc_sql($id)));
38
+ if($slider != NULL) {
39
+ return true;
40
+ }
41
+ return false;
42
+ }
43
  }
44
+ ?>
wordpress/elements.php CHANGED
@@ -1,4 +1,6 @@
1
  <?php
 
 
2
  function crellyslider_printElements($edit, $slider, $slide, $elements) {
3
  ?>
4
  <div class="cs-elements">
@@ -8,40 +10,40 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
8
  <?php if($edit && $slide): ?>
9
  <?php
10
  if($slide->background_type_image != 'none') {
11
- echo 'data-background-image-src="' . $slide->background_type_image . '"';
12
  }
13
  ?>
14
  style="
15
- width: <?php echo $slider->startWidth; ?>px;
16
- height: <?php echo $slider->startHeight; ?>px;
17
- background-image: url('<?php echo $slide->background_type_image; ?>');
18
- background-color: <?php echo $slide->background_type_color == 'transparent' ? 'rgb(255, 255, 255)' : $slide->background_type_color; ?>;
19
- background-position: <?php echo $slide->background_propriety_position_x . ' ' . $slide->background_propriety_position_y; ?>;
20
- background-repeat: <?php echo $slide->background_repeat; ?>;
21
- background-size: <?php echo $slide->background_propriety_size; ?>;
22
  <?php echo stripslashes($slide->custom_css); ?>
23
  "
24
  <?php endif; ?>
25
- >
26
  <?php
27
  if($edit && $elements != NULL) {
28
  foreach($elements as $element) {
29
  if($element->link != '') {
30
  $target = $element->link_new_tab == 1 ? 'target="_blank"' : '';
31
-
32
  $link_output = '<a' . "\n" .
33
- 'class="cs-element cs-' . $element->type . '-element"' . "\n" .
34
  'href="' . stripslashes($element->link) . '"' . "\n" .
35
  $target . "\n" .
36
  'style="' .
37
- 'z-index: ' . $element->z_index . ';' . "\n" .
38
- 'top: ' . $element->data_top . 'px;' . "\n" .
39
- 'left: ' . $element->data_left . 'px;' . "\n" .
40
  '">' . "\n";
41
-
42
  echo $link_output;
43
  }
44
-
45
  switch($element->type) {
46
  case 'text':
47
  ?>
@@ -49,9 +51,9 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
49
  style="
50
  <?php
51
  if($element->link == '') {
52
- echo 'z-index: ' . $element->z_index . ';';
53
- echo 'left: ' . $element->data_left . 'px;';
54
- echo 'top: ' . $element->data_top . 'px;';
55
  }
56
  echo stripslashes($element->custom_css);
57
  ?>
@@ -69,18 +71,18 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
69
  </div>
70
  <?php
71
  break;
72
-
73
  case 'image':
74
  ?>
75
  <img
76
- src="<?php echo $element->image_src; ?>"
77
- alt="<?php echo $element->image_alt; ?>"
78
  style="
79
  <?php
80
  if($element->link == '') {
81
- echo 'z-index: ' . $element->z_index . ';';
82
- echo 'left: ' . $element->data_left . 'px;';
83
- echo 'top: ' . $element->data_top . 'px;';
84
  }
85
  echo stripslashes($element->custom_css);
86
  ?>
@@ -96,7 +98,7 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
96
  />
97
  <?php
98
  break;
99
-
100
  case 'youtube_video':
101
  ?>
102
  <div
@@ -104,19 +106,19 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
104
  style="
105
  <?php
106
  if($element->link == '') {
107
- echo 'z-index: ' . $element->z_index . ';';
108
- echo 'left: ' . $element->data_left . 'px;';
109
- echo 'top: ' . $element->data_top . 'px;';
110
  }
111
  ?>
112
  "
113
  >
114
  <div class="cs-avoid-interaction"></div>
115
- <iframe style="<?php echo stripslashes($element->custom_css); ?>" class="cs-yt-iframe <?php echo stripslashes($element->custom_css_classes); ?>" type="text/html" width="560" height="315" src="http://www.youtube.com/embed/<?php echo $element->video_id; ?>?enablejsapi=1" frameborder="0"></iframe>
116
  </div>
117
  <?php
118
  break;
119
-
120
  case 'vimeo_video':
121
  ?>
122
  <div
@@ -124,20 +126,20 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
124
  style="
125
  <?php
126
  if($element->link == '') {
127
- echo 'z-index: ' . $element->z_index . ';';
128
- echo 'left: ' . $element->data_left . 'px;';
129
- echo 'top: ' . $element->data_top . 'px;';
130
  }
131
  ?>
132
  "
133
  >
134
  <div class="cs-avoid-interaction"></div>
135
- <iframe style="<?php echo stripslashes($element->custom_css); ?>" class="cs-vimeo-iframe <?php echo stripslashes($element->custom_css_classes); ?>" src="https://player.vimeo.com/video/<?php echo $element->video_id; ?>?api=1" width="560" height="315" frameborder="0" ></iframe>
136
  </div>
137
  <?php
138
  break;
139
  }
140
-
141
  if($element->link != '') {
142
  echo '</a>' . "\n";
143
  }
@@ -145,12 +147,12 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
145
  }
146
  ?>
147
  </div>
148
-
149
  <br />
150
  <br />
151
 
152
  <div class="cs-elements-actions">
153
- <div style="float: left;">
154
  <a class="cs-add-text-element cs-button cs-is-warning"><?php _e('Add text', 'crelly-slider'); ?></a>
155
  <a class="cs-add-image-element cs-button cs-is-warning"><?php _e('Add image', 'crelly-slider'); ?></a>
156
  <a class="cs-add-video-element cs-button cs-is-warning"><?php _e('Add video', 'crelly-slider'); ?></a>
@@ -162,10 +164,10 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
162
  </div>
163
  <div style="clear: both;"></div>
164
  </div>
165
-
166
  <br />
167
  <br />
168
-
169
  <div class="cs-elements-list">
170
  <?php
171
  if($edit && $elements != NULL) {
@@ -176,13 +178,13 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
176
  crellyslider_printTextElement($element);
177
  echo '</div>';
178
  break;
179
-
180
  case 'image':
181
  echo '<div class="cs-element-settings cs-image-element-settings" style="display: none;">';
182
  crellyslider_printImageElement($element);
183
  echo '</div>';
184
  break;
185
-
186
  case 'youtube_video':
187
  case 'vimeo_video':
188
  echo '<div class="cs-element-settings cs-video-element-settings" style="display: none;">';
@@ -210,7 +212,7 @@ function crellyslider_printElements($edit, $slider, $slide, $elements) {
210
 
211
  function crellyslider_printTextElement($element) {
212
  $void = !$element ? true : false;
213
-
214
  $animations = array(
215
  'none' => array(__('None', 'crelly-slider'), false),
216
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
@@ -227,7 +229,7 @@ function crellyslider_printTextElement($element) {
227
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
228
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
229
  );
230
-
231
  ?>
232
  <table class="cs-element-settings-list cs-text-element-settings-list cs-table">
233
  <thead>
@@ -235,7 +237,7 @@ function crellyslider_printTextElement($element) {
235
  <th colspan="3"><?php _e('Element Options', 'crelly-slider'); ?></th>
236
  </tr>
237
  </thead>
238
-
239
  <tbody>
240
  <tr class="cs-table-header">
241
  <td><?php _e('Option', 'crelly-slider'); ?></td>
@@ -245,9 +247,9 @@ function crellyslider_printTextElement($element) {
245
  <tr>
246
  <td class="cs-name"><?php _e('Text', 'crelly-slider'); ?></td>
247
  <td class="cs-content">
248
- <?php
249
  if($void) echo '<textarea class="cs-element-inner_html">' . __('Text element', 'crelly-slider') . '</textarea>';
250
- else echo '<textarea class="cs-element-inner_html">' . stripslashes($element->inner_html) . '</textarea>';
251
  ?>
252
  </td>
253
  <td class="cs-description">
@@ -259,7 +261,7 @@ function crellyslider_printTextElement($element) {
259
  <td class="cs-content">
260
  <?php
261
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
262
- else echo '<input class="cs-element-data_left" type="text" value="' . $element->data_left .'" />';
263
  ?>
264
  px
265
  <br />
@@ -275,7 +277,7 @@ function crellyslider_printTextElement($element) {
275
  <td class="cs-content">
276
  <?php
277
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
278
- else echo '<input class="cs-element-data_top" type="text" value="' . $element->data_top .'" />';
279
  ?>
280
  px
281
  <br />
@@ -291,7 +293,7 @@ function crellyslider_printTextElement($element) {
291
  <td class="cs-content">
292
  <?php
293
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
294
- else echo '<input class="cs-element-z_index" type="text" value="' . $element->z_index .'" />';
295
  ?>
296
  </td>
297
  <td class="cs-description">
@@ -303,7 +305,7 @@ function crellyslider_printTextElement($element) {
303
  <td class="cs-content">
304
  <?php
305
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
306
- else echo '<input class="cs-element-data_delay" type="text" value="' . $element->data_delay .'" />';
307
  ?>
308
  ms
309
  </td>
@@ -316,14 +318,14 @@ function crellyslider_printTextElement($element) {
316
  <td class="cs-content">
317
  <?php
318
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
319
- else echo '<input class="cs-element-data_time" type="text" value="' . $element->data_time .'" />';
320
  ?>
321
  ms
322
  </td>
323
  <td class="cs-description">
324
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
325
  <br />
326
- <br />
327
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
328
  <br />
329
  <br />
@@ -385,7 +387,7 @@ function crellyslider_printTextElement($element) {
385
  <td class="cs-content">
386
  <?php
387
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
388
- else echo '<input class="cs-element-data_easeIn" type="text" value="' . $element->data_easeIn .'" />';
389
  ?>
390
  ms
391
  </td>
@@ -398,7 +400,7 @@ function crellyslider_printTextElement($element) {
398
  <td class="cs-content">
399
  <?php
400
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
401
- else echo '<input class="cs-element-data_easeOut" type="text" value="' . $element->data_easeOut .'" />';
402
  ?>
403
  ms
404
  </td>
@@ -447,7 +449,7 @@ function crellyslider_printTextElement($element) {
447
  <td class="cs-content">
448
  <?php
449
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
450
- else echo '<input class="cs-element-custom_css_classes" type="text" value="' . stripslashes($element->custom_css_classes) . '" />';
451
  ?>
452
  </td>
453
  <td class="cs-description">
@@ -461,7 +463,7 @@ function crellyslider_printTextElement($element) {
461
 
462
  function crellyslider_printImageElement($element) {
463
  $void = !$element ? true : false;
464
-
465
  $animations = array(
466
  'none' => array(__('None', 'crelly-slider'), false),
467
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
@@ -478,7 +480,7 @@ function crellyslider_printImageElement($element) {
478
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
479
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
480
  );
481
-
482
  ?>
483
  <table class="cs-element-settings-list cs-image-element-settings-list cs-table">
484
  <thead>
@@ -497,7 +499,7 @@ function crellyslider_printImageElement($element) {
497
  <td class="cs-content">
498
  <?php
499
  if($void) echo '<input class="cs-image-element-upload-button cs-button cs-is-default" type="button" value="' . __('Open gallery', 'crelly-slider') . '" />';
500
- else echo '<input data-src="' . $element->image_src . '" data-alt="' . $element->image_alt . '" class="cs-image-element-upload-button cs-button cs-is-default" type="button" value="' . __('Open gallery', 'crelly-slider') . '" />';
501
  ?>
502
  </td>
503
  <td class="cs-description">
@@ -509,7 +511,7 @@ function crellyslider_printImageElement($element) {
509
  <td class="cs-content">
510
  <?php
511
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
512
- else echo '<input class="cs-element-data_left" type="text" value="' . $element->data_left .'" />';
513
  ?>
514
  px
515
  <br />
@@ -525,7 +527,7 @@ function crellyslider_printImageElement($element) {
525
  <td class="cs-content">
526
  <?php
527
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
528
- else echo '<input class="cs-element-data_top" type="text" value="' . $element->data_top .'" />';
529
  ?>
530
  px
531
  <br />
@@ -541,7 +543,7 @@ function crellyslider_printImageElement($element) {
541
  <td class="cs-content">
542
  <?php
543
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
544
- else echo '<input class="cs-element-z_index" type="text" value="' . $element->z_index .'" />';
545
  ?>
546
  </td>
547
  <td class="cs-description">
@@ -553,7 +555,7 @@ function crellyslider_printImageElement($element) {
553
  <td class="cs-content">
554
  <?php
555
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
556
- else echo '<input class="cs-element-data_delay" type="text" value="' . $element->data_delay .'" />';
557
  ?>
558
  ms
559
  </td>
@@ -566,14 +568,14 @@ function crellyslider_printImageElement($element) {
566
  <td class="cs-content">
567
  <?php
568
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
569
- else echo '<input class="cs-element-data_time" type="text" value="' . $element->data_time .'" />';
570
  ?>
571
  ms
572
  </td>
573
  <td class="cs-description">
574
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
575
  <br />
576
- <br />
577
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
578
  <br />
579
  <br />
@@ -635,7 +637,7 @@ function crellyslider_printImageElement($element) {
635
  <td class="cs-content">
636
  <?php
637
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
638
- else echo '<input class="cs-element-data_easeIn" type="text" value="' . $element->data_easeIn .'" />';
639
  ?>
640
  ms
641
  </td>
@@ -648,7 +650,7 @@ function crellyslider_printImageElement($element) {
648
  <td class="cs-content">
649
  <?php
650
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
651
- else echo '<input class="cs-element-data_easeOut" type="text" value="' . $element->data_easeOut .'" />';
652
  ?>
653
  ms
654
  </td>
@@ -697,7 +699,7 @@ function crellyslider_printImageElement($element) {
697
  <td class="cs-content">
698
  <?php
699
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
700
- else echo '<input class="cs-element-custom_css_classes" type="text" value="' . stripslashes($element->custom_css_classes) . '" />';
701
  ?>
702
  </td>
703
  <td class="cs-description">
@@ -711,7 +713,7 @@ function crellyslider_printImageElement($element) {
711
 
712
  function crellyslider_printVideoElement($element) {
713
  $void = !$element ? true : false;
714
-
715
  $animations = array(
716
  'none' => array(__('None', 'crelly-slider'), false),
717
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
@@ -728,7 +730,7 @@ function crellyslider_printVideoElement($element) {
728
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
729
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
730
  );
731
-
732
  ?>
733
  <table class="cs-element-settings-list cs-video-element-settings-list cs-table">
734
  <thead>
@@ -736,7 +738,7 @@ function crellyslider_printVideoElement($element) {
736
  <th colspan="3"><?php _e('Element Options', 'crelly-slider'); ?></th>
737
  </tr>
738
  </thead>
739
-
740
  <tbody>
741
  <tr class="cs-table-header">
742
  <td><?php _e('Option', 'crelly-slider'); ?></td>
@@ -746,7 +748,7 @@ function crellyslider_printVideoElement($element) {
746
  <tr>
747
  <td class="cs-name"><?php _e('Video source', 'crelly-slider'); ?></td>
748
  <td class="cs-content">
749
- <?php
750
  if($void) echo '<select class="cs-element-video_src"><option selected value="youtube">YouTube</option><option value="vimeo">Vimeo</option></select>';
751
  else {
752
  if($element->type == 'youtube_video') {
@@ -756,11 +758,11 @@ function crellyslider_printVideoElement($element) {
756
  echo '<select class="cs-element-video_src"><option value="youtube">YouTube</option><option selected value="vimeo">Vimeo</option></select>';
757
  }
758
  }
759
-
760
  echo '<br /><br />';
761
-
762
  if($void) echo '<input placeholder="Video ID" class="cs-element-video_id" type="text" />';
763
- else echo '<input placeholder="Video ID" class="cs-element-video_id" type="text" value="' . $element->video_id .'" />';
764
  ?>
765
  </td>
766
  <td class="cs-description">
@@ -770,7 +772,7 @@ function crellyslider_printVideoElement($element) {
770
  <tr>
771
  <td class="cs-name"><?php _e('Loop video', 'crelly-slider'); ?></td>
772
  <td class="cs-content">
773
- <?php
774
  if($void) echo '<select class="cs-element-video_loop"><option value="1">' . __('Yes', 'crelly-slider') . '</option><option selected value="0">' . __('No', 'crelly-slider') . '</option></select>';
775
  else {
776
  if($element->video_loop == 0) {
@@ -789,7 +791,7 @@ function crellyslider_printVideoElement($element) {
789
  <tr>
790
  <td class="cs-name"><?php _e('Autoplay', 'crelly-slider'); ?></td>
791
  <td class="cs-content">
792
- <?php
793
  if($void) echo '<select class="cs-element-video_autoplay"><option value="1">' . __('Yes', 'crelly-slider') . '</option><option selected value="0">' . __('No', 'crelly-slider') . '</option></select>';
794
  else {
795
  if($element->video_autoplay == 0) {
@@ -810,7 +812,7 @@ function crellyslider_printVideoElement($element) {
810
  <td class="cs-content">
811
  <?php
812
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
813
- else echo '<input class="cs-element-data_left" type="text" value="' . $element->data_left .'" />';
814
  ?>
815
  px
816
  <br />
@@ -826,7 +828,7 @@ function crellyslider_printVideoElement($element) {
826
  <td class="cs-content">
827
  <?php
828
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
829
- else echo '<input class="cs-element-data_top" type="text" value="' . $element->data_top .'" />';
830
  ?>
831
  px
832
  <br />
@@ -842,7 +844,7 @@ function crellyslider_printVideoElement($element) {
842
  <td class="cs-content">
843
  <?php
844
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
845
- else echo '<input class="cs-element-z_index" type="text" value="' . $element->z_index .'" />';
846
  ?>
847
  </td>
848
  <td class="cs-description">
@@ -854,7 +856,7 @@ function crellyslider_printVideoElement($element) {
854
  <td class="cs-content">
855
  <?php
856
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
857
- else echo '<input class="cs-element-data_delay" type="text" value="' . $element->data_delay .'" />';
858
  ?>
859
  ms
860
  </td>
@@ -867,14 +869,14 @@ function crellyslider_printVideoElement($element) {
867
  <td class="cs-content">
868
  <?php
869
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
870
- else echo '<input class="cs-element-data_time" type="text" value="' . $element->data_time .'" />';
871
  ?>
872
  ms
873
  </td>
874
  <td class="cs-description">
875
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
876
  <br />
877
- <br />
878
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
879
  <br />
880
  <br />
@@ -936,7 +938,7 @@ function crellyslider_printVideoElement($element) {
936
  <td class="cs-content">
937
  <?php
938
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
939
- else echo '<input class="cs-element-data_easeIn" type="text" value="' . $element->data_easeIn .'" />';
940
  ?>
941
  ms
942
  </td>
@@ -949,7 +951,7 @@ function crellyslider_printVideoElement($element) {
949
  <td class="cs-content">
950
  <?php
951
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
952
- else echo '<input class="cs-element-data_easeOut" type="text" value="' . $element->data_easeOut .'" />';
953
  ?>
954
  ms
955
  </td>
@@ -974,7 +976,7 @@ function crellyslider_printVideoElement($element) {
974
  <td class="cs-content">
975
  <?php
976
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
977
- else echo '<input class="cs-element-custom_css_classes" type="text" value="' . stripslashes($element->custom_css_classes) . '" />';
978
  ?>
979
  </td>
980
  <td class="cs-description">
@@ -983,4 +985,4 @@ function crellyslider_printVideoElement($element) {
983
  </tr>
984
  </tbody>
985
  </table>
986
- <?php } ?>
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
  function crellyslider_printElements($edit, $slider, $slide, $elements) {
5
  ?>
6
  <div class="cs-elements">
10
  <?php if($edit && $slide): ?>
11
  <?php
12
  if($slide->background_type_image != 'none') {
13
+ echo 'data-background-image-src="' . stripslashes($slide->background_type_image) . '"';
14
  }
15
  ?>
16
  style="
17
+ width: <?php echo esc_attr($slider->startWidth); ?>px;
18
+ height: <?php echo esc_attr($slider->startHeight); ?>px;
19
+ background-image: url('<?php echo stripslashes($slide->background_type_image); ?>');
20
+ background-color: <?php echo esc_attr($slide->background_type_color) == 'transparent' ? 'rgb(255, 255, 255)' : esc_attr($slide->background_type_color); ?>;
21
+ background-position: <?php echo esc_attr($slide->background_propriety_position_x) . ' ' . esc_attr($slide->background_propriety_position_y); ?>;
22
+ background-repeat: <?php echo esc_attr($slide->background_repeat); ?>;
23
+ background-size: <?php echo esc_attr($slide->background_propriety_size); ?>;
24
  <?php echo stripslashes($slide->custom_css); ?>
25
  "
26
  <?php endif; ?>
27
+ >
28
  <?php
29
  if($edit && $elements != NULL) {
30
  foreach($elements as $element) {
31
  if($element->link != '') {
32
  $target = $element->link_new_tab == 1 ? 'target="_blank"' : '';
33
+
34
  $link_output = '<a' . "\n" .
35
+ 'class="cs-element cs-' . esc_attr($element->type) . '-element"' . "\n" .
36
  'href="' . stripslashes($element->link) . '"' . "\n" .
37
  $target . "\n" .
38
  'style="' .
39
+ 'z-index: ' . esc_attr($element->z_index) . ';' . "\n" .
40
+ 'top: ' . esc_attr($element->data_top) . 'px;' . "\n" .
41
+ 'left: ' . esc_attr($element->data_left) . 'px;' . "\n" .
42
  '">' . "\n";
43
+
44
  echo $link_output;
45
  }
46
+
47
  switch($element->type) {
48
  case 'text':
49
  ?>
51
  style="
52
  <?php
53
  if($element->link == '') {
54
+ echo 'z-index: ' . esc_attr($element->z_index) . ';';
55
+ echo 'left: ' . esc_attr($element->data_left) . 'px;';
56
+ echo 'top: ' . esc_attr($element->data_top) . 'px;';
57
  }
58
  echo stripslashes($element->custom_css);
59
  ?>
71
  </div>
72
  <?php
73
  break;
74
+
75
  case 'image':
76
  ?>
77
  <img
78
+ src="<?php echo esc_url($element->image_src); ?>"
79
+ alt="<?php echo esc_attr($element->image_alt); ?>"
80
  style="
81
  <?php
82
  if($element->link == '') {
83
+ echo 'z-index: ' . esc_attr($element->z_index) . ';';
84
+ echo 'left: ' . esc_attr($element->data_left) . 'px;';
85
+ echo 'top: ' . esc_attr($element->data_top) . 'px;';
86
  }
87
  echo stripslashes($element->custom_css);
88
  ?>
98
  />
99
  <?php
100
  break;
101
+
102
  case 'youtube_video':
103
  ?>
104
  <div
106
  style="
107
  <?php
108
  if($element->link == '') {
109
+ echo 'z-index: ' . esc_attr($element->z_index) . ';';
110
+ echo 'left: ' . esc_attr($element->data_left) . 'px;';
111
+ echo 'top: ' . esc_attr($element->data_top) . 'px;';
112
  }
113
  ?>
114
  "
115
  >
116
  <div class="cs-avoid-interaction"></div>
117
+ <iframe style="<?php echo stripslashes($element->custom_css); ?>" class="cs-yt-iframe <?php echo stripslashes($element->custom_css_classes); ?>" type="text/html" width="560" height="315" src="<?php echo esc_url('http://www.youtube.com/embed/' . $element->video_id); ?>?enablejsapi=1" frameborder="0"></iframe>
118
  </div>
119
  <?php
120
  break;
121
+
122
  case 'vimeo_video':
123
  ?>
124
  <div
126
  style="
127
  <?php
128
  if($element->link == '') {
129
+ echo 'z-index: ' . esc_attr($element->z_index) . ';';
130
+ echo 'left: ' . esc_attr($element->data_left) . 'px;';
131
+ echo 'top: ' . esc_attr($element->data_top) . 'px;';
132
  }
133
  ?>
134
  "
135
  >
136
  <div class="cs-avoid-interaction"></div>
137
+ <iframe style="<?php echo stripslashes($element->custom_css); ?>" class="cs-vimeo-iframe <?php echo stripslashes($element->custom_css_classes); ?>" src="<?php echo esc_url('https://player.vimeo.com/video/' . $element->video_id); ?>?api=1" width="560" height="315" frameborder="0" ></iframe>
138
  </div>
139
  <?php
140
  break;
141
  }
142
+
143
  if($element->link != '') {
144
  echo '</a>' . "\n";
145
  }
147
  }
148
  ?>
149
  </div>
150
+
151
  <br />
152
  <br />
153
 
154
  <div class="cs-elements-actions">
155
+ <div style="float: left;">
156
  <a class="cs-add-text-element cs-button cs-is-warning"><?php _e('Add text', 'crelly-slider'); ?></a>
157
  <a class="cs-add-image-element cs-button cs-is-warning"><?php _e('Add image', 'crelly-slider'); ?></a>
158
  <a class="cs-add-video-element cs-button cs-is-warning"><?php _e('Add video', 'crelly-slider'); ?></a>
164
  </div>
165
  <div style="clear: both;"></div>
166
  </div>
167
+
168
  <br />
169
  <br />
170
+
171
  <div class="cs-elements-list">
172
  <?php
173
  if($edit && $elements != NULL) {
178
  crellyslider_printTextElement($element);
179
  echo '</div>';
180
  break;
181
+
182
  case 'image':
183
  echo '<div class="cs-element-settings cs-image-element-settings" style="display: none;">';
184
  crellyslider_printImageElement($element);
185
  echo '</div>';
186
  break;
187
+
188
  case 'youtube_video':
189
  case 'vimeo_video':
190
  echo '<div class="cs-element-settings cs-video-element-settings" style="display: none;">';
212
 
213
  function crellyslider_printTextElement($element) {
214
  $void = !$element ? true : false;
215
+
216
  $animations = array(
217
  'none' => array(__('None', 'crelly-slider'), false),
218
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
229
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
230
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
231
  );
232
+
233
  ?>
234
  <table class="cs-element-settings-list cs-text-element-settings-list cs-table">
235
  <thead>
237
  <th colspan="3"><?php _e('Element Options', 'crelly-slider'); ?></th>
238
  </tr>
239
  </thead>
240
+
241
  <tbody>
242
  <tr class="cs-table-header">
243
  <td><?php _e('Option', 'crelly-slider'); ?></td>
247
  <tr>
248
  <td class="cs-name"><?php _e('Text', 'crelly-slider'); ?></td>
249
  <td class="cs-content">
250
+ <?php
251
  if($void) echo '<textarea class="cs-element-inner_html">' . __('Text element', 'crelly-slider') . '</textarea>';
252
+ else echo '<textarea class="cs-element-inner_html">' . esc_textarea($element->inner_html) . '</textarea>';
253
  ?>
254
  </td>
255
  <td class="cs-description">
261
  <td class="cs-content">
262
  <?php
263
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
264
+ else echo '<input class="cs-element-data_left" type="text" value="' . sanitize_text_field($element->data_left) .'" />';
265
  ?>
266
  px
267
  <br />
277
  <td class="cs-content">
278
  <?php
279
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
280
+ else echo '<input class="cs-element-data_top" type="text" value="' . sanitize_text_field($element->data_top) .'" />';
281
  ?>
282
  px
283
  <br />
293
  <td class="cs-content">
294
  <?php
295
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
296
+ else echo '<input class="cs-element-z_index" type="text" value="' . sanitize_text_field($element->z_index) .'" />';
297
  ?>
298
  </td>
299
  <td class="cs-description">
305
  <td class="cs-content">
306
  <?php
307
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
308
+ else echo '<input class="cs-element-data_delay" type="text" value="' . sanitize_text_field($element->data_delay) .'" />';
309
  ?>
310
  ms
311
  </td>
318
  <td class="cs-content">
319
  <?php
320
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
321
+ else echo '<input class="cs-element-data_time" type="text" value="' . sanitize_text_field($element->data_time) .'" />';
322
  ?>
323
  ms
324
  </td>
325
  <td class="cs-description">
326
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
327
  <br />
328
+ <br />
329
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
330
  <br />
331
  <br />
387
  <td class="cs-content">
388
  <?php
389
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
390
+ else echo '<input class="cs-element-data_easeIn" type="text" value="' . sanitize_text_field($element->data_easeIn) .'" />';
391
  ?>
392
  ms
393
  </td>
400
  <td class="cs-content">
401
  <?php
402
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
403
+ else echo '<input class="cs-element-data_easeOut" type="text" value="' . sanitize_text_field($element->data_easeOut) .'" />';
404
  ?>
405
  ms
406
  </td>
449
  <td class="cs-content">
450
  <?php
451
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
452
+ else echo '<input class="cs-element-custom_css_classes" type="text" value="' . sanitize_text_field($element->custom_css_classes) . '" />';
453
  ?>
454
  </td>
455
  <td class="cs-description">
463
 
464
  function crellyslider_printImageElement($element) {
465
  $void = !$element ? true : false;
466
+
467
  $animations = array(
468
  'none' => array(__('None', 'crelly-slider'), false),
469
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
480
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
481
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
482
  );
483
+
484
  ?>
485
  <table class="cs-element-settings-list cs-image-element-settings-list cs-table">
486
  <thead>
499
  <td class="cs-content">
500
  <?php
501
  if($void) echo '<input class="cs-image-element-upload-button cs-button cs-is-default" type="button" value="' . __('Open gallery', 'crelly-slider') . '" />';
502
+ else echo '<input data-src="' . esc_url($element->image_src) . '" data-alt="' . esc_attr($element->image_alt) . '" class="cs-image-element-upload-button cs-button cs-is-default" type="button" value="' . __('Open gallery', 'crelly-slider') . '" />';
503
  ?>
504
  </td>
505
  <td class="cs-description">
511
  <td class="cs-content">
512
  <?php
513
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
514
+ else echo '<input class="cs-element-data_left" type="text" value="' . sanitize_text_field($element->data_left) .'" />';
515
  ?>
516
  px
517
  <br />
527
  <td class="cs-content">
528
  <?php
529
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
530
+ else echo '<input class="cs-element-data_top" type="text" value="' . sanitize_text_field($element->data_top) .'" />';
531
  ?>
532
  px
533
  <br />
543
  <td class="cs-content">
544
  <?php
545
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
546
+ else echo '<input class="cs-element-z_index" type="text" value="' . sanitize_text_field($element->z_index) .'" />';
547
  ?>
548
  </td>
549
  <td class="cs-description">
555
  <td class="cs-content">
556
  <?php
557
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
558
+ else echo '<input class="cs-element-data_delay" type="text" value="' . sanitize_text_field($element->data_delay) .'" />';
559
  ?>
560
  ms
561
  </td>
568
  <td class="cs-content">
569
  <?php
570
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
571
+ else echo '<input class="cs-element-data_time" type="text" value="' . sanitize_text_field($element->data_time) .'" />';
572
  ?>
573
  ms
574
  </td>
575
  <td class="cs-description">
576
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
577
  <br />
578
+ <br />
579
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
580
  <br />
581
  <br />
637
  <td class="cs-content">
638
  <?php
639
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
640
+ else echo '<input class="cs-element-data_easeIn" type="text" value="' . sanitize_text_field($element->data_easeIn) .'" />';
641
  ?>
642
  ms
643
  </td>
650
  <td class="cs-content">
651
  <?php
652
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
653
+ else echo '<input class="cs-element-data_easeOut" type="text" value="' . sanitize_text_field($element->data_easeOut) .'" />';
654
  ?>
655
  ms
656
  </td>
699
  <td class="cs-content">
700
  <?php
701
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
702
+ else echo '<input class="cs-element-custom_css_classes" type="text" value="' . sanitize_text_field($element->custom_css_classes) . '" />';
703
  ?>
704
  </td>
705
  <td class="cs-description">
713
 
714
  function crellyslider_printVideoElement($element) {
715
  $void = !$element ? true : false;
716
+
717
  $animations = array(
718
  'none' => array(__('None', 'crelly-slider'), false),
719
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
730
  'fadeSmallLeft' => array(__('Fade small left', 'crelly-slider'), false),
731
  'fadeSmallRight' => array(__('Fade small right', 'crelly-slider'), false),
732
  );
733
+
734
  ?>
735
  <table class="cs-element-settings-list cs-video-element-settings-list cs-table">
736
  <thead>
738
  <th colspan="3"><?php _e('Element Options', 'crelly-slider'); ?></th>
739
  </tr>
740
  </thead>
741
+
742
  <tbody>
743
  <tr class="cs-table-header">
744
  <td><?php _e('Option', 'crelly-slider'); ?></td>
748
  <tr>
749
  <td class="cs-name"><?php _e('Video source', 'crelly-slider'); ?></td>
750
  <td class="cs-content">
751
+ <?php
752
  if($void) echo '<select class="cs-element-video_src"><option selected value="youtube">YouTube</option><option value="vimeo">Vimeo</option></select>';
753
  else {
754
  if($element->type == 'youtube_video') {
758
  echo '<select class="cs-element-video_src"><option value="youtube">YouTube</option><option selected value="vimeo">Vimeo</option></select>';
759
  }
760
  }
761
+
762
  echo '<br /><br />';
763
+
764
  if($void) echo '<input placeholder="Video ID" class="cs-element-video_id" type="text" />';
765
+ else echo '<input placeholder="Video ID" class="cs-element-video_id" type="text" value="' . sanitize_text_field($element->video_id) .'" />';
766
  ?>
767
  </td>
768
  <td class="cs-description">
772
  <tr>
773
  <td class="cs-name"><?php _e('Loop video', 'crelly-slider'); ?></td>
774
  <td class="cs-content">
775
+ <?php
776
  if($void) echo '<select class="cs-element-video_loop"><option value="1">' . __('Yes', 'crelly-slider') . '</option><option selected value="0">' . __('No', 'crelly-slider') . '</option></select>';
777
  else {
778
  if($element->video_loop == 0) {
791
  <tr>
792
  <td class="cs-name"><?php _e('Autoplay', 'crelly-slider'); ?></td>
793
  <td class="cs-content">
794
+ <?php
795
  if($void) echo '<select class="cs-element-video_autoplay"><option value="1">' . __('Yes', 'crelly-slider') . '</option><option selected value="0">' . __('No', 'crelly-slider') . '</option></select>';
796
  else {
797
  if($element->video_autoplay == 0) {
812
  <td class="cs-content">
813
  <?php
814
  if($void) echo '<input class="cs-element-data_left" type="text" value="0" />';
815
+ else echo '<input class="cs-element-data_left" type="text" value="' . sanitize_text_field($element->data_left) .'" />';
816
  ?>
817
  px
818
  <br />
828
  <td class="cs-content">
829
  <?php
830
  if($void) echo '<input class="cs-element-data_top" type="text" value="0" />';
831
+ else echo '<input class="cs-element-data_top" type="text" value="' . sanitize_text_field($element->data_top) .'" />';
832
  ?>
833
  px
834
  <br />
844
  <td class="cs-content">
845
  <?php
846
  if($void) echo '<input class="cs-element-z_index" type="text" value="1" />';
847
+ else echo '<input class="cs-element-z_index" type="text" value="' . sanitize_text_field($element->z_index) .'" />';
848
  ?>
849
  </td>
850
  <td class="cs-description">
856
  <td class="cs-content">
857
  <?php
858
  if($void) echo '<input class="cs-element-data_delay" type="text" value="0" />';
859
+ else echo '<input class="cs-element-data_delay" type="text" value="' . sanitize_text_field($element->data_delay) .'" />';
860
  ?>
861
  ms
862
  </td>
869
  <td class="cs-content">
870
  <?php
871
  if($void) echo '<input class="cs-element-data_time" type="text" value="all" />';
872
+ else echo '<input class="cs-element-data_time" type="text" value="' . sanitize_text_field($element->data_time) .'" />';
873
  ?>
874
  ms
875
  </td>
876
  <td class="cs-description">
877
  <?php _e('How long will the element be displayed during the slide execution.', 'crelly-slider'); ?>
878
  <br />
879
+ <br />
880
  <?php _e('Write "all" to set the entire time.', 'crelly-slider'); ?>
881
  <br />
882
  <br />
938
  <td class="cs-content">
939
  <?php
940
  if($void) echo '<input class="cs-element-data_easeIn" type="text" value="300" />';
941
+ else echo '<input class="cs-element-data_easeIn" type="text" value="' . sanitize_text_field($element->data_easeIn) .'" />';
942
  ?>
943
  ms
944
  </td>
951
  <td class="cs-content">
952
  <?php
953
  if($void) echo '<input class="cs-element-data_easeOut" type="text" value="300" />';
954
+ else echo '<input class="cs-element-data_easeOut" type="text" value="' . sanitize_text_field($element->data_easeOut) .'" />';
955
  ?>
956
  ms
957
  </td>
976
  <td class="cs-content">
977
  <?php
978
  if($void) echo '<input class="cs-element-custom_css_classes" type="text" />';
979
+ else echo '<input class="cs-element-custom_css_classes" type="text" value="' . sanitize_text_field($element->custom_css_classes) . '" />';
980
  ?>
981
  </td>
982
  <td class="cs-description">
985
  </tr>
986
  </tbody>
987
  </table>
988
+ <?php } ?>
wordpress/frontend.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
 
3
  // Code output
4
  function crellySlider($alias) {
@@ -10,11 +11,11 @@ function getCrellySlider($alias) {
10
  }
11
 
12
  class CrellySliderFrontend {
13
-
14
  public static function setNotAdminJs() {
15
  add_action('wp_enqueue_scripts', 'CrellySliderFrontend::notAdminJs');
16
  }
17
-
18
  // Shortcode
19
  public static function shortcode($atts) {
20
  $a = shortcode_atts( array(
@@ -35,9 +36,9 @@ class CrellySliderFrontend {
35
 
36
  public static function output($alias, $echo) {
37
  global $wpdb;
38
-
39
- $slider = $wpdb->get_row('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE alias = \'' . $alias . '\'');
40
-
41
  if(! $slider) {
42
  if($echo) {
43
  _e('The slider hasn\'t been found', 'crelly-slider');
@@ -47,33 +48,33 @@ class CrellySliderFrontend {
47
  return __('The slider hasn\'t been found', 'crelly-slider');
48
  }
49
  }
50
-
51
- $slider_id = $slider->id;
52
- $slides = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = ' . $slider_id . ' ORDER BY position');
53
-
54
  $output = '';
55
-
56
- $output .= '<div style="display: none;" class="crellyslider-slider crellyslider-slider-' . $slider->layout . ' crellyslider-slider-' . $alias . '" id="crellyslider-' . $slider_id . '">' . "\n";
57
  $output .= '<ul>' . "\n";
58
  foreach($slides as $slide) {
59
- $background_type_image = $slide->background_type_image == 'undefined' || $slide->background_type_image == 'none' ? 'none;' : 'url(\'' . $slide->background_type_image . '\');';
60
  $output .= '<li' . "\n" .
61
  'style="' . "\n" .
62
- 'background-color: ' . $slide->background_type_color . ';' . "\n" .
63
  'background-image: ' . $background_type_image . "\n" .
64
- 'background-position: ' . $slide->background_propriety_position_x . ' ' . $slide->background_propriety_position_y . ';' . "\n" .
65
- 'background-repeat: ' . $slide->background_repeat . ';' . "\n" .
66
- 'background-size: ' . $slide->background_propriety_size . ';' . "\n" .
67
  stripslashes($slide->custom_css) . "\n" .
68
  '"' . "\n" .
69
-
70
- 'data-in="' . $slide->data_in . '"' . "\n" .
71
- 'data-ease-in="' . $slide->data_easeIn . '"' . "\n" .
72
- 'data-out="' . $slide->data_out . '"' . "\n" .
73
- 'data-ease-out="' . $slide->data_easeOut . '"' . "\n" .
74
- 'data-time="' . $slide->data_time . '"' . "\n" .
75
  '>' . "\n";
76
-
77
  if($slide->link != '') {
78
  if($slide->link_new_tab) {
79
  $output .= '<a class="cs-background-link" target="_blank" href="' . stripslashes($slide->link) . '"></a>';
@@ -82,86 +83,86 @@ class CrellySliderFrontend {
82
  $output .= '<a class="cs-background-link" href="' . stripslashes($slide->link) . '"></a>';
83
  }
84
  }
85
-
86
- $slide_parent = $slide->position;
87
- $elements = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = ' . $slider_id . ' AND slide_parent = ' . $slide_parent);
88
-
89
  foreach($elements as $element) {
90
  if($element->link != '') {
91
  $target = $element->link_new_tab == 1 ? 'target="_blank"' : '';
92
-
93
  $output .= '<a' . "\n" .
94
- 'data-delay="' . $element->data_delay . '"' . "\n" .
95
- 'data-ease-in="' . $element->data_easeIn . '"' . "\n" .
96
- 'data-ease-out="' . $element->data_easeOut . '"' . "\n" .
97
- 'data-in="' . $element->data_in . '"' . "\n" .
98
- 'data-out="' . $element->data_out . '"' . "\n" .
99
- 'data-ignore-ease-out="' . $element->data_ignoreEaseOut . '"' . "\n" .
100
- 'data-top="' . $element->data_top . '"' . "\n" .
101
- 'data-left="' . $element->data_left . '"' . "\n" .
102
- 'data-time="' . $element->data_time . '"' . "\n" .
103
  'href="' . stripslashes($element->link) . '"' . "\n" .
104
  $target . "\n" .
105
  'style="' .
106
  'z-index: ' . $element->z_index . ';' . "\n" .
107
  '">' . "\n";
108
  }
109
-
110
  switch($element->type) {
111
  case 'text':
112
  $output .= '<div' . "\n" .
113
- 'class="' . stripslashes($element->custom_css_classes) . '"' . "\n" .
114
  'style="';
115
  if($element->link == '') {
116
- $output .= 'z-index: ' . $element->z_index . ';' . "\n";
117
  }
118
  $output .= stripslashes($element->custom_css) . "\n" .
119
  '"' . "\n";
120
  if($element->link == '') {
121
- $output .= 'data-delay="' . $element->data_delay . '"' . "\n" .
122
- 'data-ease-in="' . $element->data_easeIn . '"' . "\n" .
123
- 'data-ease-out="' . $element->data_easeOut . '"' . "\n" .
124
- 'data-in="' . $element->data_in . '"' . "\n" .
125
- 'data-out="' . $element->data_out . '"' . "\n" .
126
- 'data-ignore-ease-out="' . $element->data_ignoreEaseOut . '"' . "\n" .
127
- 'data-top="' . $element->data_top . '"' . "\n" .
128
- 'data-left="' . $element->data_left . '"' . "\n" .
129
- 'data-time="' . $element->data_time . '"' . "\n";
130
  }
131
  $output .= '>' . "\n" .
132
  stripslashes($element->inner_html) . "\n" .
133
  '</div>' . "\n";
134
  break;
135
-
136
  case 'image':
137
  $output .= '<img' . "\n" .
138
- 'class="' . stripslashes($element->custom_css_classes) . '"' . "\n" .
139
- 'src="' . $element->image_src . '"' . "\n" .
140
- 'alt="' . $element->image_alt . '"' . "\n" .
141
  'style="' . "\n";
142
  if($element->link == '') {
143
- $output .= 'z-index: ' . $element->z_index . ';' . "\n";
144
  }
145
  $output .= stripslashes($element->custom_css) . "\n" .
146
  '"' . "\n";
147
  if($element->link == '') {
148
- $output .= 'data-delay="' . $element->data_delay . '"' . "\n" .
149
- 'data-ease-in="' . $element->data_easeIn . '"' . "\n" .
150
- 'data-ease-out="' . $element->data_easeOut . '"' . "\n" .
151
- 'data-in="' . $element->data_in . '"' . "\n" .
152
- 'data-out="' . $element->data_out . '"' . "\n" .
153
- 'data-ignore-ease-out="' . $element->data_ignoreEaseOut . '"' . "\n" .
154
- 'data-top="' . $element->data_top . '"' . "\n" .
155
- 'data-left="' . $element->data_left . '"' . "\n" .
156
- 'data-time="' . $element->data_time . '"' . "\n";
157
  }
158
  $output .= '/>' . "\n";
159
  break;
160
-
161
  case 'youtube_video':
162
  $output .= '<iframe frameborder="0" type="text/html" width="560" height="315"' . "\n" .
163
- 'class="cs-yt-iframe ' . stripslashes($element->custom_css_classes) . '"' . "\n" .
164
- 'src="https://www.youtube.com/embed/' . stripslashes($element->video_id) . '?enablejsapi=1"' . "\n" .
165
  'data-autoplay="' . $element->video_autoplay . '"' . "\n" .
166
  'data-loop="' . $element->video_loop . '"' . "\n" .
167
  'style="' . "\n" .
@@ -179,40 +180,40 @@ class CrellySliderFrontend {
179
  'data-time="' . $element->data_time . '"' . "\n" .
180
  '></iframe>' . "\n";
181
  break;
182
-
183
  case 'vimeo_video':
184
  $output .= '<iframe frameborder="0" width="560" height="315"' . "\n" .
185
- 'class="cs-vimeo-iframe ' . stripslashes($element->custom_css_classes) . '"' . "\n" .
186
- 'src="https://player.vimeo.com/video/' . stripslashes($element->video_id) . '?api=1"' . "\n" .
187
- 'data-autoplay="' . $element->video_autoplay . '"' . "\n" .
188
- 'data-loop="' . $element->video_loop . '"' . "\n" .
189
  'style="' . "\n" .
190
- 'z-index: ' . $element->z_index . ';' . "\n" .
191
  stripslashes($element->custom_css) . "\n" .
192
  '"' . "\n" .
193
- 'data-delay="' . $element->data_delay . '"' . "\n" .
194
- 'data-ease-in="' . $element->data_easeIn . '"' . "\n" .
195
- 'data-ease-out="' . $element->data_easeOut . '"' . "\n" .
196
- 'data-in="' . $element->data_in . '"' . "\n" .
197
- 'data-out="' . $element->data_out . '"' . "\n" .
198
- 'data-ignore-ease-out="' . $element->data_ignoreEaseOut . '"' . "\n" .
199
- 'data-top="' . $element->data_top . '"' . "\n" .
200
- 'data-left="' . $element->data_left . '"' . "\n" .
201
- 'data-time="' . $element->data_time . '"' . "\n" .
202
  '></iframe>' . "\n";
203
  break;
204
  }
205
-
206
  if($element->link != '') {
207
  $output .= '</a>' . "\n";
208
  }
209
  }
210
-
211
  $output .= '</li>' . "\n";
212
  }
213
  $output .= '</ul>' . "\n";
214
  $output .= '</div>' . "\n";
215
-
216
  $output .= '<script type="text/javascript">' . "\n";
217
  $output .= '(function($) {' . "\n";
218
  $output .= '$(document).ready(function() {' . "\n";
@@ -232,7 +233,7 @@ class CrellySliderFrontend {
232
  $output .= '});' . "\n";
233
  $output .= '})(jQuery);' . "\n";
234
  $output .= '</script>' . "\n";
235
-
236
  if($echo) {
237
  echo $output;
238
  }
@@ -241,4 +242,4 @@ class CrellySliderFrontend {
241
  }
242
  }
243
 
244
- }
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
 
4
  // Code output
5
  function crellySlider($alias) {
11
  }
12
 
13
  class CrellySliderFrontend {
14
+
15
  public static function setNotAdminJs() {
16
  add_action('wp_enqueue_scripts', 'CrellySliderFrontend::notAdminJs');
17
  }
18
+
19
  // Shortcode
20
  public static function shortcode($atts) {
21
  $a = shortcode_atts( array(
36
 
37
  public static function output($alias, $echo) {
38
  global $wpdb;
39
+
40
+ $slider = $wpdb->get_row($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders WHERE alias = %s', esc_sql($alias)));
41
+
42
  if(! $slider) {
43
  if($echo) {
44
  _e('The slider hasn\'t been found', 'crelly-slider');
48
  return __('The slider hasn\'t been found', 'crelly-slider');
49
  }
50
  }
51
+
52
+ $slider_id = esc_sql($slider->id);
53
+ $slides = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_slides WHERE slider_parent = %d ORDER BY position', $slider_id));
54
+
55
  $output = '';
56
+
57
+ $output .= '<div style="display: none;" class="crellyslider-slider crellyslider-slider-' . esc_attr($slider->layout) . ' crellyslider-slider-' . esc_attr($alias) . '" id="crellyslider-' . esc_attr($slider_id) . '">' . "\n";
58
  $output .= '<ul>' . "\n";
59
  foreach($slides as $slide) {
60
+ $background_type_image = $slide->background_type_image == 'undefined' || $slide->background_type_image == 'none' ? 'none;' : 'url(\'' . stripslashes($slide->background_type_image) . '\');';
61
  $output .= '<li' . "\n" .
62
  'style="' . "\n" .
63
+ 'background-color: ' . esc_attr($slide->background_type_color) . ';' . "\n" .
64
  'background-image: ' . $background_type_image . "\n" .
65
+ 'background-position: ' . esc_attr($slide->background_propriety_position_x) . ' ' . esc_attr($slide->background_propriety_position_y) . ';' . "\n" .
66
+ 'background-repeat: ' . esc_attr($slide->background_repeat) . ';' . "\n" .
67
+ 'background-size: ' . esc_attr($slide->background_propriety_size) . ';' . "\n" .
68
  stripslashes($slide->custom_css) . "\n" .
69
  '"' . "\n" .
70
+
71
+ 'data-in="' . esc_attr($slide->data_in) . '"' . "\n" .
72
+ 'data-ease-in="' . esc_attr($slide->data_easeIn) . '"' . "\n" .
73
+ 'data-out="' . esc_attr($slide->data_out) . '"' . "\n" .
74
+ 'data-ease-out="' . esc_attr($slide->data_easeOut) . '"' . "\n" .
75
+ 'data-time="' . esc_attr($slide->data_time) . '"' . "\n" .
76
  '>' . "\n";
77
+
78
  if($slide->link != '') {
79
  if($slide->link_new_tab) {
80
  $output .= '<a class="cs-background-link" target="_blank" href="' . stripslashes($slide->link) . '"></a>';
83
  $output .= '<a class="cs-background-link" href="' . stripslashes($slide->link) . '"></a>';
84
  }
85
  }
86
+
87
+ $slide_parent = esc_sql($slide->position);
88
+ $elements = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = %d AND slide_parent = %d', $slider_id, $slide_parent));
89
+
90
  foreach($elements as $element) {
91
  if($element->link != '') {
92
  $target = $element->link_new_tab == 1 ? 'target="_blank"' : '';
93
+
94
  $output .= '<a' . "\n" .
95
+ 'data-delay="' . esc_attr($element->data_delay) . '"' . "\n" .
96
+ 'data-ease-in="' . esc_attr($element->data_easeIn) . '"' . "\n" .
97
+ 'data-ease-out="' . esc_attr($element->data_easeOut) . '"' . "\n" .
98
+ 'data-in="' . esc_attr($element->data_in) . '"' . "\n" .
99
+ 'data-out="' . esc_attr($element->data_out) . '"' . "\n" .
100
+ 'data-ignore-ease-out="' . esc_attr($element->data_ignoreEaseOut) . '"' . "\n" .
101
+ 'data-top="' . esc_attr($element->data_top) . '"' . "\n" .
102
+ 'data-left="' . esc_attr($element->data_left) . '"' . "\n" .
103
+ 'data-time="' . esc_attr($element->data_time) . '"' . "\n" .
104
  'href="' . stripslashes($element->link) . '"' . "\n" .
105
  $target . "\n" .
106
  'style="' .
107
  'z-index: ' . $element->z_index . ';' . "\n" .
108
  '">' . "\n";
109
  }
110
+
111
  switch($element->type) {
112
  case 'text':
113
  $output .= '<div' . "\n" .
114
+ 'class="' . esc_attr($element->custom_css_classes) . '"' . "\n" .
115
  'style="';
116
  if($element->link == '') {
117
+ $output .= 'z-index: ' . esc_attr($element->z_index) . ';' . "\n";
118
  }
119
  $output .= stripslashes($element->custom_css) . "\n" .
120
  '"' . "\n";
121
  if($element->link == '') {
122
+ $output .= 'data-delay="' . esc_attr($element->data_delay) . '"' . "\n" .
123
+ 'data-ease-in="' . esc_attr($element->data_easeIn) . '"' . "\n" .
124
+ 'data-ease-out="' . esc_attr($element->data_easeOut) . '"' . "\n" .
125
+ 'data-in="' . esc_attr($element->data_in) . '"' . "\n" .
126
+ 'data-out="' . esc_attr($element->data_out) . '"' . "\n" .
127
+ 'data-ignore-ease-out="' . esc_attr($element->data_ignoreEaseOut) . '"' . "\n" .
128
+ 'data-top="' . esc_attr($element->data_top) . '"' . "\n" .
129
+ 'data-left="' . esc_attr($element->data_left) . '"' . "\n" .
130
+ 'data-time="' . esc_attr($element->data_time) . '"' . "\n";
131
  }
132
  $output .= '>' . "\n" .
133
  stripslashes($element->inner_html) . "\n" .
134
  '</div>' . "\n";
135
  break;
136
+
137
  case 'image':
138
  $output .= '<img' . "\n" .
139
+ 'class="' . esc_attr($element->custom_css_classes) . '"' . "\n" .
140
+ 'src="' . esc_url($element->image_src) . '"' . "\n" .
141
+ 'alt="' . esc_attr($element->image_alt) . '"' . "\n" .
142
  'style="' . "\n";
143
  if($element->link == '') {
144
+ $output .= 'z-index: ' . esc_attr($element->z_index) . ';' . "\n";
145
  }
146
  $output .= stripslashes($element->custom_css) . "\n" .
147
  '"' . "\n";
148
  if($element->link == '') {
149
+ $output .= 'data-delay="' . esc_attr($element->data_delay) . '"' . "\n" .
150
+ 'data-ease-in="' . esc_attr($element->data_easeIn) . '"' . "\n" .
151
+ 'data-ease-out="' . esc_attr($element->data_easeOut) . '"' . "\n" .
152
+ 'data-in="' . esc_attr($element->data_in) . '"' . "\n" .
153
+ 'data-out="' . esc_attr($element->data_out) . '"' . "\n" .
154
+ 'data-ignore-ease-out="' . esc_attr($element->data_ignoreEaseOut) . '"' . "\n" .
155
+ 'data-top="' . esc_attr($element->data_top) . '"' . "\n" .
156
+ 'data-left="' . esc_attr($element->data_left) . '"' . "\n" .
157
+ 'data-time="' . esc_attr($element->data_time) . '"' . "\n";
158
  }
159
  $output .= '/>' . "\n";
160
  break;
161
+
162
  case 'youtube_video':
163
  $output .= '<iframe frameborder="0" type="text/html" width="560" height="315"' . "\n" .
164
+ 'class="cs-yt-iframe ' . esc_attr($element->custom_css_classes) . '"' . "\n" .
165
+ 'src="' . esc_url('https://www.youtube.com/embed/' . $element->video_id . '?enablejsapi=1') . '"' . "\n" .
166
  'data-autoplay="' . $element->video_autoplay . '"' . "\n" .
167
  'data-loop="' . $element->video_loop . '"' . "\n" .
168
  'style="' . "\n" .
180
  'data-time="' . $element->data_time . '"' . "\n" .
181
  '></iframe>' . "\n";
182
  break;
183
+
184
  case 'vimeo_video':
185
  $output .= '<iframe frameborder="0" width="560" height="315"' . "\n" .
186
+ 'class="cs-vimeo-iframe ' . esc_attr($element->custom_css_classes) . '"' . "\n" .
187
+ 'src="' . esc_url('https://player.vimeo.com/video/' . $element->video_id . '?api=1') . '"' . "\n" .
188
+ 'data-autoplay="' . esc_attr($element->video_autoplay) . '"' . "\n" .
189
+ 'data-loop="' . esc_attr($element->video_loop) . '"' . "\n" .
190
  'style="' . "\n" .
191
+ 'z-index: ' . esc_attr($element->z_index) . ';' . "\n" .
192
  stripslashes($element->custom_css) . "\n" .
193
  '"' . "\n" .
194
+ 'data-delay="' . esc_attr($element->data_delay) . '"' . "\n" .
195
+ 'data-ease-in="' . esc_attr($element->data_easeIn) . '"' . "\n" .
196
+ 'data-ease-out="' . esc_attr($element->data_easeOut) . '"' . "\n" .
197
+ 'data-in="' . esc_attr($element->data_in) . '"' . "\n" .
198
+ 'data-out="' . esc_attr($element->data_out) . '"' . "\n" .
199
+ 'data-ignore-ease-out="' . esc_attr($element->data_ignoreEaseOut) . '"' . "\n" .
200
+ 'data-top="' . esc_attr($element->data_top) . '"' . "\n" .
201
+ 'data-left="' . esc_attr($element->data_left) . '"' . "\n" .
202
+ 'data-time="' . esc_attr($element->data_time) . '"' . "\n" .
203
  '></iframe>' . "\n";
204
  break;
205
  }
206
+
207
  if($element->link != '') {
208
  $output .= '</a>' . "\n";
209
  }
210
  }
211
+
212
  $output .= '</li>' . "\n";
213
  }
214
  $output .= '</ul>' . "\n";
215
  $output .= '</div>' . "\n";
216
+
217
  $output .= '<script type="text/javascript">' . "\n";
218
  $output .= '(function($) {' . "\n";
219
  $output .= '$(document).ready(function() {' . "\n";
233
  $output .= '});' . "\n";
234
  $output .= '})(jQuery);' . "\n";
235
  $output .= '</script>' . "\n";
236
+
237
  if($echo) {
238
  echo $output;
239
  }
242
  }
243
  }
244
 
245
+ }
wordpress/home.php CHANGED
@@ -1,4 +1,6 @@
1
  <?php
 
 
2
  global $wpdb;
3
  $sliders = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders');
4
 
@@ -10,7 +12,7 @@ if(!$sliders) {
10
  }
11
  else {
12
  ?>
13
-
14
  <table class="cs-sliders-list cs-table">
15
  <thead>
16
  <tr>
@@ -28,15 +30,15 @@ else {
28
  <?php
29
  foreach($sliders as $slider) {
30
  echo '<tr>';
31
- echo '<td class="cs-slider-id">' . $slider->id . '</td>';
32
- echo '<td class="cs-slider-name"><a href="?page=crellyslider&view=edit&id=' . $slider->id . '">' . $slider->name . '</a></td>';
33
- echo '<td class="cs-slider-alias">' . $slider->alias . '</td>';
34
- echo '<td class="cs-slider-shortcode">[crellyslider alias="' . $slider->alias . '"]</td>';
35
  echo '<td>
36
- <a class="cs-edit-slider cs-button cs-button cs-is-success" href="?page=crellyslider&view=edit&id=' . $slider->id . '">' . __('Edit Slider', 'crelly-slider') . '</a>
37
- <a class="cs-duplicate-slider cs-button cs-button cs-is-primary" href="javascript:void(0)" data-duplicate="' . $slider->id . '">' . __('Duplicate Slider', 'crelly-slider') . '</a>
38
- <a class="cs-export-slider cs-button cs-button cs-is-warning" href="javascript:void(0)" data-export="' . $slider->id . '">' . __('Export Slider', 'crelly-slider') . '</a>
39
- <a class="cs-delete-slider cs-button cs-button cs-is-danger" href="javascript:void(0)" data-delete="' . $slider->id . '">' . __('Delete Slider', 'crelly-slider') . '</a>
40
  </td>';
41
  echo '</tr>';
42
  }
@@ -50,4 +52,4 @@ else {
50
  <br />
51
  <a class="cs-button cs-is-primary cs-add-slider" href="?page=crellyslider&view=add"><?php _e('Add Slider', 'crelly-slider'); ?></a>
52
  <a class="cs-button cs-is-warning cs-import-slider" href="javascript:void(0)"><?php _e('Import Slider', 'crelly-slider'); ?></a>
53
- <input id="cs-import-file" type="file" style="display: none;">
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
+
4
  global $wpdb;
5
  $sliders = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_sliders');
6
 
12
  }
13
  else {
14
  ?>
15
+
16
  <table class="cs-sliders-list cs-table">
17
  <thead>
18
  <tr>
30
  <?php
31
  foreach($sliders as $slider) {
32
  echo '<tr>';
33
+ echo '<td class="cs-slider-id">' . esc_html($slider->id) . '</td>';
34
+ echo '<td class="cs-slider-name"><a href="?page=crellyslider&view=edit&id=' . esc_html($slider->id) . '">' . esc_html($slider->name) . '</a></td>';
35
+ echo '<td class="cs-slider-alias">' . esc_html($slider->alias) . '</td>';
36
+ echo '<td class="cs-slider-shortcode">[crellyslider alias="' . esc_html($slider->alias) . '"]</td>';
37
  echo '<td>
38
+ <a class="cs-edit-slider cs-button cs-button cs-is-success" href="?page=crellyslider&view=edit&id=' . esc_html($slider->id) . '">' . __('Edit Slider', 'crelly-slider') . '</a>
39
+ <a class="cs-duplicate-slider cs-button cs-button cs-is-primary" href="javascript:void(0)" data-duplicate="' . esc_html($slider->id) . '">' . __('Duplicate Slider', 'crelly-slider') . '</a>
40
+ <a class="cs-export-slider cs-button cs-button cs-is-warning" href="javascript:void(0)" data-export="' . esc_html($slider->id) . '">' . __('Export Slider', 'crelly-slider') . '</a>
41
+ <a class="cs-delete-slider cs-button cs-button cs-is-danger" href="javascript:void(0)" data-delete="' . esc_html($slider->id) . '">' . __('Delete Slider', 'crelly-slider') . '</a>
42
  </td>';
43
  echo '</tr>';
44
  }
52
  <br />
53
  <a class="cs-button cs-is-primary cs-add-slider" href="?page=crellyslider&view=add"><?php _e('Add Slider', 'crelly-slider'); ?></a>
54
  <a class="cs-button cs-is-warning cs-import-slider" href="javascript:void(0)"><?php _e('Import Slider', 'crelly-slider'); ?></a>
55
+ <input id="cs-import-file" type="file" style="display: none;">
wordpress/slider.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div id="cs-slider-settings">
2
  <?php
3
  // Contains the key, the display name and a boolean: true if is the default option
@@ -12,42 +14,42 @@
12
  ),
13
  );
14
  ?>
15
-
16
  <?php if($edit) { ?>
17
- <input type="text" id="cs-slider-name" placeholder="<?php _e('Slider Name', 'crelly-slider'); ?>" value="<?php echo $slider->name; ?>" />
18
  <?php
19
  }
20
  else { ?>
21
  <input type="text" id="cs-slider-name" placeholder="<?php _e('Slider Name', 'crelly-slider'); ?>" />
22
  <?php } ?>
23
-
24
  <br />
25
  <br />
26
-
27
  <strong><?php _e('Alias:', 'crelly-slider'); ?></strong>
28
  <?php if($edit) { ?>
29
- <span id="cs-slider-alias"><?php echo $slider->alias; ?></span>
30
  <?php
31
  }
32
  else { ?>
33
  <span id="cs-slider-alias"></span>
34
  <?php } ?>
35
-
36
  <br />
37
  <br />
38
-
39
- <strong><?php _e('Shortcode:', 'crelly-slider'); ?></strong>
40
  <?php if($edit) { ?>
41
- <span id="cs-slider-shortcode">[crellyslider alias="<?php echo $slider->alias; ?>"]</span>
42
  <?php
43
  }
44
  else { ?>
45
  <span id="cs-slider-shortcode"></span>
46
  <?php } ?>
47
-
48
  <br />
49
  <br />
50
-
51
  <table class="cs-slider-settings-list cs-table">
52
  <thead>
53
  <tr class="odd-row">
@@ -103,7 +105,7 @@
103
  <td class="cs-content">
104
  <?php
105
  if(!$edit) echo '<input id="cs-slider-startWidth" type="text" value="1140" />';
106
- else echo '<input id="cs-slider-startWidth" type="text" value="' . $slider->startWidth .'" />';
107
  ?>
108
  px
109
  </td>
@@ -116,7 +118,7 @@
116
  <td class="cs-content">
117
  <?php
118
  if(!$edit) echo '<input id="cs-slider-startHeight" type="text" value="500" />';
119
- else echo '<input id="cs-slider-startHeight" type="text" value="' . $slider->startHeight .'" />';
120
  ?>
121
  px
122
  </td>
@@ -262,4 +264,4 @@ beforeResume : function() {},</textarea>
262
  </tr>
263
  </tbody>
264
  </table>
265
- </div>
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>
2
+
3
  <div id="cs-slider-settings">
4
  <?php
5
  // Contains the key, the display name and a boolean: true if is the default option
14
  ),
15
  );
16
  ?>
17
+
18
  <?php if($edit) { ?>
19
+ <input type="text" id="cs-slider-name" placeholder="<?php _e('Slider Name', 'crelly-slider'); ?>" value="<?php echo sanitize_text_field($slider->name); ?>" />
20
  <?php
21
  }
22
  else { ?>
23
  <input type="text" id="cs-slider-name" placeholder="<?php _e('Slider Name', 'crelly-slider'); ?>" />
24
  <?php } ?>
25
+
26
  <br />
27
  <br />
28
+
29
  <strong><?php _e('Alias:', 'crelly-slider'); ?></strong>
30
  <?php if($edit) { ?>
31
+ <span id="cs-slider-alias"><?php echo esc_html($slider->alias); ?></span>
32
  <?php
33
  }
34
  else { ?>
35
  <span id="cs-slider-alias"></span>
36
  <?php } ?>
37
+
38
  <br />
39
  <br />
40
+
41
+ <strong><?php _e('Shortcode:', 'crelly-slider'); ?></strong>
42
  <?php if($edit) { ?>
43
+ <span id="cs-slider-shortcode">[crellyslider alias="<?php echo esc_html($slider->alias); ?>"]</span>
44
  <?php
45
  }
46
  else { ?>
47
  <span id="cs-slider-shortcode"></span>
48
  <?php } ?>
49
+
50
  <br />
51
  <br />
52
+
53
  <table class="cs-slider-settings-list cs-table">
54
  <thead>
55
  <tr class="odd-row">
105
  <td class="cs-content">
106
  <?php
107
  if(!$edit) echo '<input id="cs-slider-startWidth" type="text" value="1140" />';
108
+ else echo '<input id="cs-slider-startWidth" type="text" value="' . sanitize_text_field($slider->startWidth) .'" />';
109
  ?>
110
  px
111
  </td>
118
  <td class="cs-content">
119
  <?php
120
  if(!$edit) echo '<input id="cs-slider-startHeight" type="text" value="500" />';
121
+ else echo '<input id="cs-slider-startHeight" type="text" value="' . sanitize_text_field($slider->startHeight) .'" />';
122
  ?>
123
  px
124
  </td>
264
  </tr>
265
  </tbody>
266
  </table>
267
+ </div>
wordpress/slides.php CHANGED
@@ -1,3 +1,5 @@
 
 
1
  <div id="cs-slides">
2
  <div class="cs-slide-tabs cs-tabs cs-tabs-border">
3
  <ul class="cs-sortable">
@@ -12,11 +14,11 @@
12
  else {
13
  echo '<li class="ui-state-default">';
14
  }
15
- echo '<a><span class="cs-slide-name-text">' . __('Slide', 'crelly-slider') . ' <span class="cs-slide-index">' . (($slide->position) + 1) . '</span></span></a>';
16
  echo '<span title="' . __('Duplicate slide', 'crelly-slider') . '" class="cs-duplicate"></span>';
17
  echo '<span title="' . __('Delete slide', 'crelly-slider') . '" class="cs-close"></span>';
18
  echo '</li>';
19
-
20
  $j++;
21
  }
22
  }
@@ -24,7 +26,7 @@
24
  <li class="ui-state-default ui-state-disabled"><a class="cs-add-new"><?php _e('Add Slide', 'crelly-slider'); ?></a></li>
25
  <div style="clear: both;"></div>
26
  </ul>
27
-
28
  <div class="cs-slides-list">
29
  <?php
30
  if($edit) {
@@ -35,9 +37,9 @@
35
  }
36
  }
37
  ?>
38
- </div>
39
  <div class="cs-void-slide"><?php crellyslider_printSlide($slider, false, $edit); ?></div>
40
-
41
  <div style="clear: both"></div>
42
  </div>
43
  </div>
@@ -45,8 +47,8 @@
45
  <?php
46
  // Prints a slide. If the ID is not false, prints the values from MYSQL database, else prints a slide with default values. It has to receive the $edit variable because the elements.php file has to see it
47
  function crellyslider_printSlide($slider, $slide, $edit) {
48
- $void = !$slide ? true : false;
49
-
50
  $animations = array(
51
  'none' => array(__('None', 'crelly-slider'), false),
52
  'fade' => array(__('Fade', 'crelly-slider'), true),
@@ -58,14 +60,14 @@ function crellyslider_printSlide($slider, $slide, $edit) {
58
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
59
  );
60
  ?>
61
-
62
  <table class="cs-slide-settings-list cs-table">
63
  <thead>
64
  <tr class="odd-row">
65
  <th colspan="3"><?php _e('Slide Options', 'crelly-slider'); ?></th>
66
  </tr>
67
  </thead>
68
-
69
  <tbody>
70
  <tr class="cs-table-header">
71
  <td><?php _e('Option', 'crelly-slider'); ?></td>
@@ -82,10 +84,10 @@ function crellyslider_printSlide($slider, $slide, $edit) {
82
  <input type="radio" value="0" name="cs-slide-background_type_image" checked /> <?php _e('None', 'crelly-slider'); ?> &nbsp;
83
  <input type="radio" value="1" name="cs-slide-background_type_image" /> <input class="cs-slide-background_type_image-upload-button cs-button cs-is-default" type="button" value="<?php _e('Select image', 'crelly-slider'); ?>" />
84
  </form>
85
-
86
  <br />
87
  <br />
88
-
89
  <?php _e('Background color:', 'crelly-slider'); ?> &nbsp;
90
  <form>
91
  <br />
@@ -96,28 +98,28 @@ function crellyslider_printSlide($slider, $slide, $edit) {
96
  <br />
97
  <input type="radio" value="2" name="cs-slide-background_type_color" placeholder="<?php _e('Enter value', 'crelly-slider'); ?>" /> <input class="cs-slide-background_type_color-manual" type="text" />
98
  </form>
99
-
100
  <br />
101
  <br />
102
-
103
  <?php _e('Background position-x:', 'crelly-slider'); ?> &nbsp;
104
  <input type="text" value="center" class="cs-slide-background_propriety_position_x" />
105
  <br />
106
  <?php _e('Background position-y:', 'crelly-slider'); ?> &nbsp;
107
  <input type="text" value="center" class="cs-slide-background_propriety_position_y" />
108
-
109
  <br />
110
  <br />
111
-
112
  <?php _e('Background repeat:', 'crelly-slider'); ?> &nbsp;
113
  <form>
114
  <input type="radio" value="1" name="cs-slide-background_repeat" /> <?php _e('Repeat', 'crelly-slider'); ?> &nbsp;
115
  <input type="radio" value="0" name="cs-slide-background_repeat" checked /> <?php _e('No repeat', 'crelly-slider'); ?>
116
  </form>
117
-
118
  <br />
119
  <br />
120
-
121
  <?php _e('Background size:', 'crelly-slider'); ?> &nbsp;
122
  <input type="text" value="cover" class="cs-slide-background_propriety_size" />
123
  <?php else: ?>
@@ -130,48 +132,48 @@ function crellyslider_printSlide($slider, $slide, $edit) {
130
  <input type="radio" value="0" name="cs-slide-background_type_image" /> <?php _e('None', 'crelly-slider'); ?> &nbsp;
131
  <input type="radio" value="1" name="cs-slide-background_type_image" checked /> <input class="cs-slide-background_type_image-upload-button cs-button cs-is-default" type="button" value="<?php _e('Select image', 'crelly-slider'); ?>" />
132
  <?php endif; ?>
133
- </form>
134
-
135
  <br />
136
  <br />
137
-
138
  <?php _e('Background color:', 'crelly-slider'); ?> &nbsp;
139
- <form>
 
140
  <br />
141
- <br />
142
  <?php if($slide->background_type_color == 'transparent'): ?>
143
  <input type="radio" value="0" name="cs-slide-background_type_color" checked /> <?php _e('Transparent', 'crelly-slider'); ?> &nbsp;
144
  <?php else: ?>
145
  <input type="radio" value="0" name="cs-slide-background_type_color" /> <?php _e('Transparent', 'crelly-slider'); ?> &nbsp;
146
- <?php endif; ?>
147
-
148
  <br />
149
  <?php if($slide->background_type_color_input == '1' || ($slide->background_type_color_input == '-1' && $slide->background_type_color != 'transparent')): ?>
150
- <input type="radio" value="1" name="cs-slide-background_type_color" checked /> <input class="cs-slide-background_type_color-picker-input cs-button cs-is-default" type="text" value="<?php echo $slide->background_type_color; ?>" />
151
  <?php else: ?>
152
  <input type="radio" value="1" name="cs-slide-background_type_color" /> <input class="cs-slide-background_type_color-picker-input cs-button cs-is-default" type="text" value="rgb(255, 255, 255)" />
153
- <?php endif; ?>
154
-
155
  <br />
156
  <?php if($slide->background_type_color_input == '2'): ?>
157
- <input type="radio" value="2" name="cs-slide-background_type_color" checked /> <input class="cs-slide-background_type_color-manual" type="text" value="<?php echo $slide->background_type_color; ?>" />
158
  <?php else: ?>
159
  <input type="radio" value="2" name="cs-slide-background_type_color" /> <input class="cs-slide-background_type_color-manual" type="text" placeholder="<?php _e('Enter value', 'crelly-slider'); ?>" />
160
- <?php endif; ?>
161
  </form>
162
-
163
  <br />
164
  <br />
165
-
166
  <?php _e('Background position-x:', 'crelly-slider'); ?> &nbsp;
167
- <input type="text" value="<?php echo $slide->background_propriety_position_x; ?>" class="cs-slide-background_propriety_position_x" />
168
  <br />
169
  <?php _e('Background position-y:', 'crelly-slider'); ?> &nbsp;
170
- <input type="text" value="<?php echo $slide->background_propriety_position_y; ?>" class="cs-slide-background_propriety_position_y" />
171
-
172
  <br />
173
  <br />
174
-
175
  <?php _e('Background repeat:', 'crelly-slider'); ?> &nbsp;
176
  <form>
177
  <?php if($slide->background_repeat == 'repeat'): ?>
@@ -182,12 +184,12 @@ function crellyslider_printSlide($slider, $slide, $edit) {
182
  <input type="radio" value="0" name="cs-slide-background_repeat" checked /> <?php _e('No repeat', 'crelly-slider'); ?>
183
  <?php endif; ?>
184
  </form>
185
-
186
  <br />
187
  <br />
188
-
189
  <?php _e('Background size:', 'crelly-slider'); ?> &nbsp;
190
- <input type="text" value="<?php echo $slide->background_propriety_size; ?>" class="cs-slide-background_propriety_size" />
191
  <?php endif; ?>
192
  </td>
193
  <td class="cs-description">
@@ -245,7 +247,7 @@ function crellyslider_printSlide($slider, $slide, $edit) {
245
  <td class="cs-content">
246
  <?php
247
  if($void) echo '<input class="cs-slide-data_time" type="text" value="3000" />';
248
- else echo '<input class="cs-slide-data_time" type="text" value="' . $slide->data_time .'" />';
249
  ?>
250
  ms
251
  </td>
@@ -258,7 +260,7 @@ function crellyslider_printSlide($slider, $slide, $edit) {
258
  <td class="cs-content">
259
  <?php
260
  if($void) echo '<input class="cs-slide-data_easeIn" type="text" value="300" />';
261
- else echo '<input class="cs-slide-data_easeIn" type="text" value="' . $slide->data_easeIn .'" />';
262
  ?>
263
  ms
264
  </td>
@@ -271,7 +273,7 @@ function crellyslider_printSlide($slider, $slide, $edit) {
271
  <td class="cs-content">
272
  <?php
273
  if($void) echo '<input class="cs-slide-data_easeOut" type="text" value="300" />';
274
- else echo '<input class="cs-slide-data_easeOut" type="text" value="' . $slide->data_easeOut .'" />';
275
  ?>
276
  ms
277
  </td>
@@ -317,23 +319,28 @@ function crellyslider_printSlide($slider, $slide, $edit) {
317
  </tr>
318
  </tbody>
319
  </table>
320
-
321
  <br />
322
  <br />
323
-
324
  <?php
325
- // If the slide is not void, select her elements
326
  if(!$void) {
327
  global $wpdb;
328
- $id = isset($_GET['id']) ? $_GET['id'] : NULL;
329
- $slide_parent = $slide->position;
330
- $elements = $wpdb->get_results('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = ' . $id . ' AND slide_parent = ' . $slide_parent);
 
 
 
 
 
331
  }
332
  else {
333
  $slide_id = NULL;
334
  $elements = NULL;
335
  }
336
-
337
  crellyslider_printElements($edit, $slider, $slide, $elements);
338
  }
339
- ?>
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>
2
+
3
  <div id="cs-slides">
4
  <div class="cs-slide-tabs cs-tabs cs-tabs-border">
5
  <ul class="cs-sortable">
14
  else {
15
  echo '<li class="ui-state-default">';
16
  }
17
+ echo '<a><span class="cs-slide-name-text">' . __('Slide', 'crelly-slider') . ' <span class="cs-slide-index">' . esc_html(($slide->position) + 1) . '</span></span></a>';
18
  echo '<span title="' . __('Duplicate slide', 'crelly-slider') . '" class="cs-duplicate"></span>';
19
  echo '<span title="' . __('Delete slide', 'crelly-slider') . '" class="cs-close"></span>';
20
  echo '</li>';
21
+
22
  $j++;
23
  }
24
  }
26
  <li class="ui-state-default ui-state-disabled"><a class="cs-add-new"><?php _e('Add Slide', 'crelly-slider'); ?></a></li>
27
  <div style="clear: both;"></div>
28
  </ul>
29
+
30
  <div class="cs-slides-list">
31
  <?php
32
  if($edit) {
37
  }
38
  }
39
  ?>
40
+ </div>
41
  <div class="cs-void-slide"><?php crellyslider_printSlide($slider, false, $edit); ?></div>
42
+
43
  <div style="clear: both"></div>
44
  </div>
45
  </div>
47
  <?php
48
  // Prints a slide. If the ID is not false, prints the values from MYSQL database, else prints a slide with default values. It has to receive the $edit variable because the elements.php file has to see it
49
  function crellyslider_printSlide($slider, $slide, $edit) {
50
+ $void = !$slide ? true : false;
51
+
52
  $animations = array(
53
  'none' => array(__('None', 'crelly-slider'), false),
54
  'fade' => array(__('Fade', 'crelly-slider'), true),
60
  'slideDown' => array(__('Slide down', 'crelly-slider'), false),
61
  );
62
  ?>
63
+
64
  <table class="cs-slide-settings-list cs-table">
65
  <thead>
66
  <tr class="odd-row">
67
  <th colspan="3"><?php _e('Slide Options', 'crelly-slider'); ?></th>
68
  </tr>
69
  </thead>
70
+
71
  <tbody>
72
  <tr class="cs-table-header">
73
  <td><?php _e('Option', 'crelly-slider'); ?></td>
84
  <input type="radio" value="0" name="cs-slide-background_type_image" checked /> <?php _e('None', 'crelly-slider'); ?> &nbsp;
85
  <input type="radio" value="1" name="cs-slide-background_type_image" /> <input class="cs-slide-background_type_image-upload-button cs-button cs-is-default" type="button" value="<?php _e('Select image', 'crelly-slider'); ?>" />
86
  </form>
87
+
88
  <br />
89
  <br />
90
+
91
  <?php _e('Background color:', 'crelly-slider'); ?> &nbsp;
92
  <form>
93
  <br />
98
  <br />
99
  <input type="radio" value="2" name="cs-slide-background_type_color" placeholder="<?php _e('Enter value', 'crelly-slider'); ?>" /> <input class="cs-slide-background_type_color-manual" type="text" />
100
  </form>
101
+
102
  <br />
103
  <br />
104
+
105
  <?php _e('Background position-x:', 'crelly-slider'); ?> &nbsp;
106
  <input type="text" value="center" class="cs-slide-background_propriety_position_x" />
107
  <br />
108
  <?php _e('Background position-y:', 'crelly-slider'); ?> &nbsp;
109
  <input type="text" value="center" class="cs-slide-background_propriety_position_y" />
110
+
111
  <br />
112
  <br />
113
+
114
  <?php _e('Background repeat:', 'crelly-slider'); ?> &nbsp;
115
  <form>
116
  <input type="radio" value="1" name="cs-slide-background_repeat" /> <?php _e('Repeat', 'crelly-slider'); ?> &nbsp;
117
  <input type="radio" value="0" name="cs-slide-background_repeat" checked /> <?php _e('No repeat', 'crelly-slider'); ?>
118
  </form>
119
+
120
  <br />
121
  <br />
122
+
123
  <?php _e('Background size:', 'crelly-slider'); ?> &nbsp;
124
  <input type="text" value="cover" class="cs-slide-background_propriety_size" />
125
  <?php else: ?>
132
  <input type="radio" value="0" name="cs-slide-background_type_image" /> <?php _e('None', 'crelly-slider'); ?> &nbsp;
133
  <input type="radio" value="1" name="cs-slide-background_type_image" checked /> <input class="cs-slide-background_type_image-upload-button cs-button cs-is-default" type="button" value="<?php _e('Select image', 'crelly-slider'); ?>" />
134
  <?php endif; ?>
135
+ </form>
136
+
137
  <br />
138
  <br />
139
+
140
  <?php _e('Background color:', 'crelly-slider'); ?> &nbsp;
141
+ <form>
142
+ <br />
143
  <br />
 
144
  <?php if($slide->background_type_color == 'transparent'): ?>
145
  <input type="radio" value="0" name="cs-slide-background_type_color" checked /> <?php _e('Transparent', 'crelly-slider'); ?> &nbsp;
146
  <?php else: ?>
147
  <input type="radio" value="0" name="cs-slide-background_type_color" /> <?php _e('Transparent', 'crelly-slider'); ?> &nbsp;
148
+ <?php endif; ?>
149
+
150
  <br />
151
  <?php if($slide->background_type_color_input == '1' || ($slide->background_type_color_input == '-1' && $slide->background_type_color != 'transparent')): ?>
152
+ <input type="radio" value="1" name="cs-slide-background_type_color" checked /> <input class="cs-slide-background_type_color-picker-input cs-button cs-is-default" type="text" value="<?php echo sanitize_text_field($slide->background_type_color); ?>" />
153
  <?php else: ?>
154
  <input type="radio" value="1" name="cs-slide-background_type_color" /> <input class="cs-slide-background_type_color-picker-input cs-button cs-is-default" type="text" value="rgb(255, 255, 255)" />
155
+ <?php endif; ?>
156
+
157
  <br />
158
  <?php if($slide->background_type_color_input == '2'): ?>
159
+ <input type="radio" value="2" name="cs-slide-background_type_color" checked /> <input class="cs-slide-background_type_color-manual" type="text" value="<?php echo sanitize_text_field($slide->background_type_color); ?>" />
160
  <?php else: ?>
161
  <input type="radio" value="2" name="cs-slide-background_type_color" /> <input class="cs-slide-background_type_color-manual" type="text" placeholder="<?php _e('Enter value', 'crelly-slider'); ?>" />
162
+ <?php endif; ?>
163
  </form>
164
+
165
  <br />
166
  <br />
167
+
168
  <?php _e('Background position-x:', 'crelly-slider'); ?> &nbsp;
169
+ <input type="text" value="<?php echo sanitize_text_field($slide->background_propriety_position_x); ?>" class="cs-slide-background_propriety_position_x" />
170
  <br />
171
  <?php _e('Background position-y:', 'crelly-slider'); ?> &nbsp;
172
+ <input type="text" value="<?php echo sanitize_text_field($slide->background_propriety_position_y); ?>" class="cs-slide-background_propriety_position_y" />
173
+
174
  <br />
175
  <br />
176
+
177
  <?php _e('Background repeat:', 'crelly-slider'); ?> &nbsp;
178
  <form>
179
  <?php if($slide->background_repeat == 'repeat'): ?>
184
  <input type="radio" value="0" name="cs-slide-background_repeat" checked /> <?php _e('No repeat', 'crelly-slider'); ?>
185
  <?php endif; ?>
186
  </form>
187
+
188
  <br />
189
  <br />
190
+
191
  <?php _e('Background size:', 'crelly-slider'); ?> &nbsp;
192
+ <input type="text" value="<?php echo sanitize_text_field($slide->background_propriety_size); ?>" class="cs-slide-background_propriety_size" />
193
  <?php endif; ?>
194
  </td>
195
  <td class="cs-description">
247
  <td class="cs-content">
248
  <?php
249
  if($void) echo '<input class="cs-slide-data_time" type="text" value="3000" />';
250
+ else echo '<input class="cs-slide-data_time" type="text" value="' . sanitize_text_field($slide->data_time) .'" />';
251
  ?>
252
  ms
253
  </td>
260
  <td class="cs-content">
261
  <?php
262
  if($void) echo '<input class="cs-slide-data_easeIn" type="text" value="300" />';
263
+ else echo '<input class="cs-slide-data_easeIn" type="text" value="' . sanitize_text_field($slide->data_easeIn) .'" />';
264
  ?>
265
  ms
266
  </td>
273
  <td class="cs-content">
274
  <?php
275
  if($void) echo '<input class="cs-slide-data_easeOut" type="text" value="300" />';
276
+ else echo '<input class="cs-slide-data_easeOut" type="text" value="' . sanitize_text_field($slide->data_easeOut) .'" />';
277
  ?>
278
  ms
279
  </td>
319
  </tr>
320
  </tbody>
321
  </table>
322
+
323
  <br />
324
  <br />
325
+
326
  <?php
327
+ // If the slide is not void, select its elements
328
  if(!$void) {
329
  global $wpdb;
330
+
331
+ $id = isset($_GET['id']) ? esc_sql($_GET['id']) : NULL;
332
+ if($id == NULL || ($id != NULL && !CrellySliderCommon::sliderExists($id))) {
333
+ die();
334
+ }
335
+
336
+ $slide_parent = esc_sql($slide->position);
337
+ $elements = $wpdb->get_results($wpdb->prepare('SELECT * FROM ' . $wpdb->prefix . 'crellyslider_elements WHERE slider_parent = %d AND slide_parent = %d', $id, $slide_parent));
338
  }
339
  else {
340
  $slide_id = NULL;
341
  $elements = NULL;
342
  }
343
+
344
  crellyslider_printElements($edit, $slider, $slide, $elements);
345
  }
346
+ ?>
wordpress/tables.php CHANGED
@@ -1,4 +1,5 @@
1
  <?php
 
2
 
3
  class CrellySliderTables {
4
 
@@ -21,7 +22,7 @@ class CrellySliderTables {
21
  public static function setSlidersTable() {
22
  global $wpdb;
23
  $table_name = $wpdb->prefix . 'crellyslider_sliders';
24
-
25
  $sql = "CREATE TABLE $table_name (
26
  id mediumint(9) NOT NULL AUTO_INCREMENT,
27
  name TEXT CHARACTER SET utf8,
@@ -39,7 +40,7 @@ class CrellySliderTables {
39
  callbacks TEXT CHARACTER SET utf8,
40
  UNIQUE KEY id (id)
41
  );";
42
-
43
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
44
  dbDelta($sql);
45
  }
@@ -48,7 +49,7 @@ class CrellySliderTables {
48
  public static function setSlidesTable() {
49
  global $wpdb;
50
  $table_name = $wpdb->prefix . 'crellyslider_slides';
51
-
52
  $sql = "CREATE TABLE $table_name (
53
  id mediumint(9) NOT NULL AUTO_INCREMENT,
54
  slider_parent mediumint(9),
@@ -65,12 +66,12 @@ class CrellySliderTables {
65
  data_time INT,
66
  data_easeIn INT,
67
  data_easeOut INT,
68
- link TEXT CHARACTER SET utf8 DEFAULT '',
69
  link_new_tab INT DEFAULT 0,
70
  custom_css TEXT CHARACTER SET utf8,
71
  UNIQUE KEY id (id)
72
  );";
73
-
74
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
75
  dbDelta($sql);
76
  }
@@ -78,7 +79,7 @@ class CrellySliderTables {
78
  public static function setElementsTable() {
79
  global $wpdb;
80
  $table_name = $wpdb->prefix . 'crellyslider_elements';
81
-
82
  $sql = "CREATE TABLE $table_name (
83
  id mediumint(9) NOT NULL AUTO_INCREMENT,
84
  slider_parent mediumint(9),
@@ -96,18 +97,18 @@ class CrellySliderTables {
96
  data_in TEXT CHARACTER SET utf8,
97
  data_out TEXT CHARACTER SET utf8,
98
  custom_css TEXT CHARACTER SET utf8,
99
- custom_css_classes TEXT CHARACTER SET utf8 DEFAULT '',
100
  inner_html TEXT CHARACTER SET utf8,
101
  image_src TEXT CHARACTER SET utf8,
102
  image_alt TEXT CHARACTER SET utf8,
103
- link TEXT CHARACTER SET utf8 DEFAULT '',
104
  link_new_tab INT DEFAULT 0,
105
  video_id TEXT CHARACTER SET utf8,
106
  video_loop INT,
107
  video_autoplay INT,
108
  UNIQUE KEY id (id)
109
  );";
110
-
111
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
112
  dbDelta($sql);
113
  }
@@ -115,7 +116,7 @@ class CrellySliderTables {
115
  // Drops all the slider tables
116
  public static function dropTables() {
117
  global $wpdb;
118
-
119
  self::dropTable($wpdb->prefix . 'crellyslider_sliders');
120
  self::dropTable($wpdb->prefix . 'crellyslider_slides');
121
  self::dropTable($wpdb->prefix . 'crellyslider_elements');
@@ -123,11 +124,11 @@ class CrellySliderTables {
123
 
124
  public static function dropTable($table_name) {
125
  global $wpdb;
126
-
127
  $sql = 'DROP TABLE ' . $table_name . ';';
128
  $wpdb->query($sql);
129
  }
130
 
131
  }
132
 
133
- ?>
1
  <?php
2
+ if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
3
 
4
  class CrellySliderTables {
5
 
22
  public static function setSlidersTable() {
23
  global $wpdb;
24
  $table_name = $wpdb->prefix . 'crellyslider_sliders';
25
+
26
  $sql = "CREATE TABLE $table_name (
27
  id mediumint(9) NOT NULL AUTO_INCREMENT,
28
  name TEXT CHARACTER SET utf8,
40
  callbacks TEXT CHARACTER SET utf8,
41
  UNIQUE KEY id (id)
42
  );";
43
+
44
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
45
  dbDelta($sql);
46
  }
49
  public static function setSlidesTable() {
50
  global $wpdb;
51
  $table_name = $wpdb->prefix . 'crellyslider_slides';
52
+
53
  $sql = "CREATE TABLE $table_name (
54
  id mediumint(9) NOT NULL AUTO_INCREMENT,
55
  slider_parent mediumint(9),
66
  data_time INT,
67
  data_easeIn INT,
68
  data_easeOut INT,
69
+ link TEXT CHARACTER SET utf8,
70
  link_new_tab INT DEFAULT 0,
71
  custom_css TEXT CHARACTER SET utf8,
72
  UNIQUE KEY id (id)
73
  );";
74
+
75
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
76
  dbDelta($sql);
77
  }
79
  public static function setElementsTable() {
80
  global $wpdb;
81
  $table_name = $wpdb->prefix . 'crellyslider_elements';
82
+
83
  $sql = "CREATE TABLE $table_name (
84
  id mediumint(9) NOT NULL AUTO_INCREMENT,
85
  slider_parent mediumint(9),
97
  data_in TEXT CHARACTER SET utf8,
98
  data_out TEXT CHARACTER SET utf8,
99
  custom_css TEXT CHARACTER SET utf8,
100
+ custom_css_classes TEXT CHARACTER SET utf8,
101
  inner_html TEXT CHARACTER SET utf8,
102
  image_src TEXT CHARACTER SET utf8,
103
  image_alt TEXT CHARACTER SET utf8,
104
+ link TEXT CHARACTER SET utf8,
105
  link_new_tab INT DEFAULT 0,
106
  video_id TEXT CHARACTER SET utf8,
107
  video_loop INT,
108
  video_autoplay INT,
109
  UNIQUE KEY id (id)
110
  );";
111
+
112
  require_once(ABSPATH . 'wp-admin/includes/upgrade.php');
113
  dbDelta($sql);
114
  }
116
  // Drops all the slider tables
117
  public static function dropTables() {
118
  global $wpdb;
119
+
120
  self::dropTable($wpdb->prefix . 'crellyslider_sliders');
121
  self::dropTable($wpdb->prefix . 'crellyslider_slides');
122
  self::dropTable($wpdb->prefix . 'crellyslider_elements');
124
 
125
  public static function dropTable($table_name) {
126
  global $wpdb;
127
+
128
  $sql = 'DROP TABLE ' . $table_name . ';';
129
  $wpdb->query($sql);
130
  }
131
 
132
  }
133
 
134
+ ?>
wordpress/temp/silence.php CHANGED
@@ -1 +1,2 @@
 
1
  <?php // If you can read this, you probably have never used the Import/Export function ?>
1
+ <?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly ?>
2
  <?php // If you can read this, you probably have never used the Import/Export function ?>