h2ocube_rails_assets 0.0.25 → 0.0.26

Sign up to get free protection for your applications and to get access to all the features.
@@ -38,13 +38,8 @@
38
38
  try {
39
39
  // Replace server-side written pluses with spaces.
40
40
  // If we can't decode the cookie, ignore it, it's unusable.
41
- s = decodeURIComponent(s.replace(pluses, ' '));
42
- } catch(e) {
43
- return;
44
- }
45
-
46
- try {
47
41
  // If we can't parse the cookie, ignore it, it's unusable.
42
+ s = decodeURIComponent(s.replace(pluses, ' '));
48
43
  return config.json ? JSON.parse(s) : s;
49
44
  } catch(e) {}
50
45
  }
@@ -106,12 +101,13 @@
106
101
  config.defaults = {};
107
102
 
108
103
  $.removeCookie = function (key, options) {
109
- if ($.cookie(key) !== undefined) {
110
- // Must not alter options, thus extending a fresh object...
111
- $.cookie(key, '', $.extend({}, options, { expires: -1 }));
112
- return true;
104
+ if ($.cookie(key) === undefined) {
105
+ return false;
113
106
  }
114
- return false;
107
+
108
+ // Must not alter options, thus extending a fresh object...
109
+ $.cookie(key, '', $.extend({}, options, { expires: -1 }));
110
+ return !$.cookie(key);
115
111
  };
116
112
 
117
113
  }));
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery File Upload Plugin 5.32.0
2
+ * jQuery File Upload Plugin 5.39.0
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2010, Sebastian Tschan
@@ -32,7 +32,7 @@
32
32
  $.support.fileInput = !(new RegExp(
33
33
  // Handle devices which give false positives for the feature detection:
34
34
  '(Android (1\\.[0156]|2\\.[01]))' +
35
- '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)' +
35
+ '|(Windows Phone (OS 7|8\\.0))|(XBLWP)|(ZuneWP)|(WPDesktop)' +
36
36
  '|(w(eb)?OSBrowser)|(webOS)' +
37
37
  '|(Kindle/(1\\.0|2\\.[05]|3\\.0))'
38
38
  ).test(window.navigator.userAgent) ||
@@ -40,9 +40,11 @@
40
40
  $('<input type="file">').prop('disabled'));
41
41
 
42
42
  // The FileReader API is not actually used, but works as feature detection,
43
- // as e.g. Safari supports XHR file uploads via the FormData API,
44
- // but not non-multipart XHR file uploads:
45
- $.support.xhrFileUpload = !!(window.XMLHttpRequestUpload && window.FileReader);
43
+ // as some Safari versions (5?) support XHR file uploads via the FormData API,
44
+ // but not non-multipart XHR file uploads.
45
+ // window.XMLHttpRequestUpload is not available on IE10, so we check for
46
+ // window.ProgressEvent instead to detect XHR2 file upload capability:
47
+ $.support.xhrFileUpload = !!(window.ProgressEvent && window.FileReader);
46
48
  $.support.xhrFormDataFileUpload = !!window.FormData;
47
49
 
48
50
  // Detect support for Blob slicing (required for chunked uploads):
@@ -88,6 +90,14 @@
88
90
  // To limit the number of files uploaded with one XHR request,
89
91
  // set the following option to an integer greater than 0:
90
92
  limitMultiFileUploads: undefined,
93
+ // The following option limits the number of files uploaded with one
94
+ // XHR request to keep the request size under or equal to the defined
95
+ // limit in bytes:
96
+ limitMultiFileUploadSize: undefined,
97
+ // Multipart file uploads add a number of bytes to each uploaded file,
98
+ // therefore the following option adds an overhead for each file used
99
+ // in the limitMultiFileUploadSize configuration:
100
+ limitMultiFileUploadSizeOverhead: 512,
91
101
  // Set the following option to true to issue all file upload requests
92
102
  // in a sequential order:
93
103
  sequentialUploads: false,
@@ -174,6 +184,9 @@
174
184
  // handlers using jQuery's Deferred callbacks:
175
185
  // data.submit().done(func).fail(func).always(func);
176
186
  add: function (e, data) {
187
+ if (e.isDefaultPrevented()) {
188
+ return false;
189
+ }
177
190
  if (data.autoUpload || (data.autoUpload !== false &&
178
191
  $(this).fileupload('option', 'autoUpload'))) {
179
192
  data.process().done(function () {
@@ -280,7 +293,7 @@
280
293
 
281
294
  _getFormData: function (options) {
282
295
  var formData;
283
- if (typeof options.formData === 'function') {
296
+ if ($.type(options.formData) === 'function') {
284
297
  return options.formData(options.form);
285
298
  }
286
299
  if ($.isArray(options.formData)) {
@@ -360,10 +373,18 @@
360
373
  // Trigger a custom progress event with a total data property set
361
374
  // to the file size(s) of the current upload and a loaded data
362
375
  // property calculated accordingly:
363
- this._trigger('progress', e, data);
376
+ this._trigger(
377
+ 'progress',
378
+ $.Event('progress', {delegatedEvent: e}),
379
+ data
380
+ );
364
381
  // Trigger a global progress event for all current file uploads,
365
382
  // including ajax calls queued for sequential file uploads:
366
- this._trigger('progressall', e, this._progress);
383
+ this._trigger(
384
+ 'progressall',
385
+ $.Event('progressall', {delegatedEvent: e}),
386
+ this._progress
387
+ );
367
388
  }
368
389
  },
369
390
 
@@ -399,7 +420,7 @@
399
420
  // Ignore non-multipart setting if not supported:
400
421
  multipart = options.multipart || !$.support.xhrFileUpload,
401
422
  paramName = options.paramName[0];
402
- options.headers = options.headers || {};
423
+ options.headers = $.extend({}, options.headers);
403
424
  if (options.contentRange) {
404
425
  options.headers['Content-Range'] = options.contentRange;
405
426
  }
@@ -450,7 +471,7 @@
450
471
  formData.append(
451
472
  options.paramName[index] || paramName,
452
473
  file,
453
- file.name
474
+ file.uploadName || file.name
454
475
  );
455
476
  }
456
477
  });
@@ -534,8 +555,10 @@
534
555
  options.url = options.form.prop('action') || location.href;
535
556
  }
536
557
  // The HTTP request method must be "POST" or "PUT":
537
- options.type = (options.type || options.form.prop('method') || '')
538
- .toUpperCase();
558
+ options.type = (options.type ||
559
+ ($.type(options.form.prop('method')) === 'string' &&
560
+ options.form.prop('method')) || ''
561
+ ).toUpperCase();
539
562
  if (options.type !== 'POST' && options.type !== 'PUT' &&
540
563
  options.type !== 'PATCH') {
541
564
  options.type = 'POST';
@@ -594,22 +617,32 @@
594
617
  // Adds convenience methods to the data callback argument:
595
618
  _addConvenienceMethods: function (e, data) {
596
619
  var that = this,
597
- getPromise = function (data) {
598
- return $.Deferred().resolveWith(that, [data]).promise();
620
+ getPromise = function (args) {
621
+ return $.Deferred().resolveWith(that, args).promise();
599
622
  };
600
623
  data.process = function (resolveFunc, rejectFunc) {
601
624
  if (resolveFunc || rejectFunc) {
602
625
  data._processQueue = this._processQueue =
603
- (this._processQueue || getPromise(this))
604
- .pipe(resolveFunc, rejectFunc);
626
+ (this._processQueue || getPromise([this])).pipe(
627
+ function () {
628
+ if (data.errorThrown) {
629
+ return $.Deferred()
630
+ .rejectWith(that, [data]).promise();
631
+ }
632
+ return getPromise(arguments);
633
+ }
634
+ ).pipe(resolveFunc, rejectFunc);
605
635
  }
606
- return this._processQueue || getPromise(this);
636
+ return this._processQueue || getPromise([this]);
607
637
  };
608
638
  data.submit = function () {
609
639
  if (this.state() !== 'pending') {
610
640
  data.jqXHR = this.jqXHR =
611
- (that._trigger('submit', e, this) !== false) &&
612
- that._onSend(e, this);
641
+ (that._trigger(
642
+ 'submit',
643
+ $.Event('submit', {delegatedEvent: e}),
644
+ this
645
+ ) !== false) && that._onSend(e, this);
613
646
  }
614
647
  return this.jqXHR || that._getXHRPromise();
615
648
  };
@@ -617,7 +650,9 @@
617
650
  if (this.jqXHR) {
618
651
  return this.jqXHR.abort();
619
652
  }
620
- return that._getXHRPromise();
653
+ this.errorThrown = 'abort';
654
+ that._trigger('fail', null, this);
655
+ return that._getXHRPromise(false);
621
656
  };
622
657
  data.state = function () {
623
658
  if (this.jqXHR) {
@@ -627,6 +662,10 @@
627
662
  return that._getDeferredState(this._processQueue);
628
663
  }
629
664
  };
665
+ data.processing = function () {
666
+ return !this.jqXHR && this._processQueue && that
667
+ ._getDeferredState(this._processQueue) === 'pending';
668
+ };
630
669
  data.progress = function () {
631
670
  return this._progress;
632
671
  };
@@ -829,7 +868,11 @@
829
868
  // Set timer for bitrate progress calculation:
830
869
  options._bitrateTimer = new that._BitrateTimer();
831
870
  jqXHR = jqXHR || (
832
- ((aborted || that._trigger('send', e, options) === false) &&
871
+ ((aborted || that._trigger(
872
+ 'send',
873
+ $.Event('send', {delegatedEvent: e}),
874
+ options
875
+ ) === false) &&
833
876
  that._getXHRPromise(false, options.context, aborted)) ||
834
877
  that._chunkedUpload(options) || $.ajax(options)
835
878
  ).done(function (result, textStatus, jqXHR) {
@@ -900,39 +943,70 @@
900
943
  var that = this,
901
944
  result = true,
902
945
  options = $.extend({}, this.options, data),
946
+ files = data.files,
947
+ filesLength = files.length,
903
948
  limit = options.limitMultiFileUploads,
949
+ limitSize = options.limitMultiFileUploadSize,
950
+ overhead = options.limitMultiFileUploadSizeOverhead,
951
+ batchSize = 0,
904
952
  paramName = this._getParamName(options),
905
953
  paramNameSet,
906
954
  paramNameSlice,
907
955
  fileSet,
908
- i;
909
- if (!(options.singleFileUploads || limit) ||
956
+ i,
957
+ j = 0;
958
+ if (limitSize && (!filesLength || files[0].size === undefined)) {
959
+ limitSize = undefined;
960
+ }
961
+ if (!(options.singleFileUploads || limit || limitSize) ||
910
962
  !this._isXHRUpload(options)) {
911
- fileSet = [data.files];
963
+ fileSet = [files];
912
964
  paramNameSet = [paramName];
913
- } else if (!options.singleFileUploads && limit) {
965
+ } else if (!(options.singleFileUploads || limitSize) && limit) {
914
966
  fileSet = [];
915
967
  paramNameSet = [];
916
- for (i = 0; i < data.files.length; i += limit) {
917
- fileSet.push(data.files.slice(i, i + limit));
968
+ for (i = 0; i < filesLength; i += limit) {
969
+ fileSet.push(files.slice(i, i + limit));
918
970
  paramNameSlice = paramName.slice(i, i + limit);
919
971
  if (!paramNameSlice.length) {
920
972
  paramNameSlice = paramName;
921
973
  }
922
974
  paramNameSet.push(paramNameSlice);
923
975
  }
976
+ } else if (!options.singleFileUploads && limitSize) {
977
+ fileSet = [];
978
+ paramNameSet = [];
979
+ for (i = 0; i < filesLength; i = i + 1) {
980
+ batchSize += files[i].size + overhead;
981
+ if (i + 1 === filesLength ||
982
+ (batchSize + files[i + 1].size + overhead) >
983
+ limitSize) {
984
+ fileSet.push(files.slice(j, i + 1));
985
+ paramNameSlice = paramName.slice(j, i + 1);
986
+ if (!paramNameSlice.length) {
987
+ paramNameSlice = paramName;
988
+ }
989
+ paramNameSet.push(paramNameSlice);
990
+ j = i + 1;
991
+ batchSize = 0;
992
+ }
993
+ }
924
994
  } else {
925
995
  paramNameSet = paramName;
926
996
  }
927
- data.originalFiles = data.files;
928
- $.each(fileSet || data.files, function (index, element) {
997
+ data.originalFiles = files;
998
+ $.each(fileSet || files, function (index, element) {
929
999
  var newData = $.extend({}, data);
930
1000
  newData.files = fileSet ? element : [element];
931
1001
  newData.paramName = paramNameSet[index];
932
1002
  that._initResponseObject(newData);
933
1003
  that._initProgressObject(newData);
934
1004
  that._addConvenienceMethods(e, newData);
935
- result = that._trigger('add', e, newData);
1005
+ result = that._trigger(
1006
+ 'add',
1007
+ $.Event('add', {delegatedEvent: e}),
1008
+ newData
1009
+ );
936
1010
  return result;
937
1011
  });
938
1012
  return result;
@@ -1101,7 +1175,11 @@
1101
1175
  if (that.options.replaceFileInput) {
1102
1176
  that._replaceFileInput(data.fileInput);
1103
1177
  }
1104
- if (that._trigger('change', e, data) !== false) {
1178
+ if (that._trigger(
1179
+ 'change',
1180
+ $.Event('change', {delegatedEvent: e}),
1181
+ data
1182
+ ) !== false) {
1105
1183
  that._onAdd(e, data);
1106
1184
  }
1107
1185
  });
@@ -1118,9 +1196,12 @@
1118
1196
  data.files.push(file);
1119
1197
  }
1120
1198
  });
1121
- if (this._trigger('paste', e, data) === false ||
1122
- this._onAdd(e, data) === false) {
1123
- return false;
1199
+ if (this._trigger(
1200
+ 'paste',
1201
+ $.Event('paste', {delegatedEvent: e}),
1202
+ data
1203
+ ) !== false) {
1204
+ this._onAdd(e, data);
1124
1205
  }
1125
1206
  }
1126
1207
  },
@@ -1134,7 +1215,11 @@
1134
1215
  e.preventDefault();
1135
1216
  this._getDroppedFiles(dataTransfer).always(function (files) {
1136
1217
  data.files = files;
1137
- if (that._trigger('drop', e, data) !== false) {
1218
+ if (that._trigger(
1219
+ 'drop',
1220
+ $.Event('drop', {delegatedEvent: e}),
1221
+ data
1222
+ ) !== false) {
1138
1223
  that._onAdd(e, data);
1139
1224
  }
1140
1225
  });
@@ -1144,14 +1229,13 @@
1144
1229
  _onDragOver: function (e) {
1145
1230
  e.dataTransfer = e.originalEvent && e.originalEvent.dataTransfer;
1146
1231
  var dataTransfer = e.dataTransfer;
1147
- if (dataTransfer) {
1148
- if (this._trigger('dragover', e) === false) {
1149
- return false;
1150
- }
1151
- if ($.inArray('Files', dataTransfer.types) !== -1) {
1152
- dataTransfer.dropEffect = 'copy';
1153
- e.preventDefault();
1154
- }
1232
+ if (dataTransfer && $.inArray('Files', dataTransfer.types) !== -1 &&
1233
+ this._trigger(
1234
+ 'dragover',
1235
+ $.Event('dragover', {delegatedEvent: e})
1236
+ ) !== false) {
1237
+ e.preventDefault();
1238
+ dataTransfer.dropEffect = 'copy';
1155
1239
  }
1156
1240
  },
1157
1241
 
@@ -1303,6 +1387,10 @@
1303
1387
  if (aborted) {
1304
1388
  return;
1305
1389
  }
1390
+ if (!files.length) {
1391
+ dfd.reject();
1392
+ return;
1393
+ }
1306
1394
  data.files = files;
1307
1395
  jqXHR = that._onSend(null, data).then(
1308
1396
  function (result, textStatus, jqXHR) {
@@ -1,5 +1,5 @@
1
1
  /*
2
- * jQuery Iframe Transport Plugin 1.7
2
+ * jQuery Iframe Transport Plugin 1.8.1
3
3
  * https://github.com/blueimp/jQuery-File-Upload
4
4
  *
5
5
  * Copyright 2011, Sebastian Tschan
@@ -27,7 +27,7 @@
27
27
  // Helper variable to create unique names for the transport iframes:
28
28
  var counter = 0;
29
29
 
30
- // The iframe transport accepts three additional options:
30
+ // The iframe transport accepts four additional options:
31
31
  // options.fileInput: a jQuery collection of file input fields
32
32
  // options.paramName: the parameter name for the file form data,
33
33
  // overrides the name property of the file input field(s),
@@ -35,9 +35,16 @@
35
35
  // options.formData: an array of objects with name and value properties,
36
36
  // equivalent to the return data of .serializeArray(), e.g.:
37
37
  // [{name: 'a', value: 1}, {name: 'b', value: 2}]
38
+ // options.initialIframeSrc: the URL of the initial iframe src,
39
+ // by default set to "javascript:false;"
38
40
  $.ajaxTransport('iframe', function (options) {
39
41
  if (options.async) {
40
- var form,
42
+ // javascript:false as initial iframe src
43
+ // prevents warning popups on HTTPS in IE6:
44
+ /*jshint scripturl: true */
45
+ var initialIframeSrc = options.initialIframeSrc || 'javascript:false;',
46
+ /*jshint scripturl: false */
47
+ form,
41
48
  iframe,
42
49
  addParamChar;
43
50
  return {
@@ -56,15 +63,13 @@
56
63
  options.url = options.url + addParamChar + '_method=PATCH';
57
64
  options.type = 'POST';
58
65
  }
59
- // javascript:false as initial iframe src
60
- // prevents warning popups on HTTPS in IE6.
61
66
  // IE versions below IE8 cannot set the name property of
62
67
  // elements that have already been added to the DOM,
63
68
  // so we set the name along with the iframe HTML markup:
64
69
  counter += 1;
65
70
  iframe = $(
66
- '<iframe src="javascript:false;" name="iframe-transport-' +
67
- counter + '"></iframe>'
71
+ '<iframe src="' + initialIframeSrc +
72
+ '" name="iframe-transport-' + counter + '"></iframe>'
68
73
  ).bind('load', function () {
69
74
  var fileInputClones,
70
75
  paramNames = $.isArray(options.paramName) ?
@@ -95,7 +100,7 @@
95
100
  );
96
101
  // Fix for IE endless progress bar activity bug
97
102
  // (happens on form submits to iframe targets):
98
- $('<iframe src="javascript:false;"></iframe>')
103
+ $('<iframe src="' + initialIframeSrc + '"></iframe>')
99
104
  .appendTo(form);
100
105
  window.setTimeout(function () {
101
106
  // Removing the form in a setTimeout call
@@ -159,7 +164,7 @@
159
164
  // concat is used to avoid the "Script URL" JSLint error:
160
165
  iframe
161
166
  .unbind('load')
162
- .prop('src', 'javascript'.concat(':false;'));
167
+ .prop('src', initialIframeSrc);
163
168
  }
164
169
  if (form) {
165
170
  form.remove();
@@ -1,15 +1,2 @@
1
- /*
2
- * Lazy Load - jQuery plugin for lazy loading images
3
- *
4
- * Copyright (c) 2007-2013 Mika Tuupola
5
- *
6
- * Licensed under the MIT license:
7
- * http://www.opensource.org/licenses/mit-license.php
8
- *
9
- * Project home:
10
- * http://www.appelsiini.net/projects/lazyload
11
- *
12
- * Version: 1.9.0
13
- *
14
- */
15
- !function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.data(j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.data(j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/iphone|ipod|ipad.*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document);
1
+ /*! Lazy Load 1.9.1 - MIT license - Copyright 2010-2013 Mika Tuupola */
2
+ !function(a,b,c,d){var e=a(b);a.fn.lazyload=function(f){function g(){var b=0;i.each(function(){var c=a(this);if(!j.skip_invisible||c.is(":visible"))if(a.abovethetop(this,j)||a.leftofbegin(this,j));else if(a.belowthefold(this,j)||a.rightoffold(this,j)){if(++b>j.failure_limit)return!1}else c.trigger("appear"),b=0})}var h,i=this,j={threshold:0,failure_limit:0,event:"scroll",effect:"show",container:b,data_attribute:"original",skip_invisible:!0,appear:null,load:null,placeholder:"data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAAAXNSR0IArs4c6QAAAARnQU1BAACxjwv8YQUAAAAJcEhZcwAADsQAAA7EAZUrDhsAAAANSURBVBhXYzh8+PB/AAffA0nNPuCLAAAAAElFTkSuQmCC"};return f&&(d!==f.failurelimit&&(f.failure_limit=f.failurelimit,delete f.failurelimit),d!==f.effectspeed&&(f.effect_speed=f.effectspeed,delete f.effectspeed),a.extend(j,f)),h=j.container===d||j.container===b?e:a(j.container),0===j.event.indexOf("scroll")&&h.bind(j.event,function(){return g()}),this.each(function(){var b=this,c=a(b);b.loaded=!1,(c.attr("src")===d||c.attr("src")===!1)&&c.is("img")&&c.attr("src",j.placeholder),c.one("appear",function(){if(!this.loaded){if(j.appear){var d=i.length;j.appear.call(b,d,j)}a("<img />").bind("load",function(){var d=c.attr("data-"+j.data_attribute);c.hide(),c.is("img")?c.attr("src",d):c.css("background-image","url('"+d+"')"),c[j.effect](j.effect_speed),b.loaded=!0;var e=a.grep(i,function(a){return!a.loaded});if(i=a(e),j.load){var f=i.length;j.load.call(b,f,j)}}).attr("src",c.attr("data-"+j.data_attribute))}}),0!==j.event.indexOf("scroll")&&c.bind(j.event,function(){b.loaded||c.trigger("appear")})}),e.bind("resize",function(){g()}),/(?:iphone|ipod|ipad).*os 5/gi.test(navigator.appVersion)&&e.bind("pageshow",function(b){b.originalEvent&&b.originalEvent.persisted&&i.each(function(){a(this).trigger("appear")})}),a(c).ready(function(){g()}),this},a.belowthefold=function(c,f){var g;return g=f.container===d||f.container===b?(b.innerHeight?b.innerHeight:e.height())+e.scrollTop():a(f.container).offset().top+a(f.container).height(),g<=a(c).offset().top-f.threshold},a.rightoffold=function(c,f){var g;return g=f.container===d||f.container===b?e.width()+e.scrollLeft():a(f.container).offset().left+a(f.container).width(),g<=a(c).offset().left-f.threshold},a.abovethetop=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollTop():a(f.container).offset().top,g>=a(c).offset().top+f.threshold+a(c).height()},a.leftofbegin=function(c,f){var g;return g=f.container===d||f.container===b?e.scrollLeft():a(f.container).offset().left,g>=a(c).offset().left+f.threshold+a(c).width()},a.inviewport=function(b,c){return!(a.rightoffold(b,c)||a.leftofbegin(b,c)||a.belowthefold(b,c)||a.abovethetop(b,c))},a.extend(a.expr[":"],{"below-the-fold":function(b){return a.belowthefold(b,{threshold:0})},"above-the-top":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-screen":function(b){return a.rightoffold(b,{threshold:0})},"left-of-screen":function(b){return!a.rightoffold(b,{threshold:0})},"in-viewport":function(b){return a.inviewport(b,{threshold:0})},"above-the-fold":function(b){return!a.belowthefold(b,{threshold:0})},"right-of-fold":function(b){return a.rightoffold(b,{threshold:0})},"left-of-fold":function(b){return!a.rightoffold(b,{threshold:0})}})}(jQuery,window,document);