fotoramajs 4.3.0.1 → 4.3.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- fotoramajs (4.3.0.1)
4
+ fotoramajs (4.3.3)
5
5
  jquery-rails (>= 2.1.0)
6
6
  sprockets (>= 2)
7
7
 
@@ -20,17 +20,17 @@ GEM
20
20
  multi_json (~> 1.3)
21
21
  thread_safe (~> 0.1)
22
22
  tzinfo (~> 0.3.37)
23
- atomic (1.1.12)
23
+ atomic (1.1.13)
24
24
  builder (3.1.4)
25
25
  erubis (2.7.0)
26
26
  hike (1.2.3)
27
27
  httpclient (2.3.4.1)
28
- i18n (0.6.4)
28
+ i18n (0.6.5)
29
29
  jquery-rails (3.0.4)
30
30
  railties (>= 3.0, < 5.0)
31
31
  thor (>= 0.14, < 2.0)
32
32
  minitest (4.7.5)
33
- multi_json (1.7.8)
33
+ multi_json (1.7.9)
34
34
  rack (1.5.2)
35
35
  rack-test (0.6.2)
36
36
  rack (>= 1.0)
data/Rakefile CHANGED
@@ -4,8 +4,75 @@ require "bundler/gem_tasks"
4
4
 
5
5
  desc "Update assets from Fotorama repo"
6
6
  task :update do
7
- require File.expand_path('../lib/fotoramajs/updater', __FILE__)
8
- Updater.update
7
+ require "json"
8
+ require "httpclient"
9
+
10
+ def github_tags(repo)
11
+ http = HTTPClient.new
12
+ body = http.get("https://api.github.com/repos/#{repo}/tags").body
13
+ response = JSON.parse(body)
14
+ response.map { |tag| Gem::Version.new(tag['name']) }.sort
15
+ end
16
+
17
+ def get(url, to)
18
+ to.open('w') do |io|
19
+ http = HTTPClient.new
20
+ http.transparent_gzip_decompression = true
21
+ io << http.get(url).body
22
+ end
23
+ end
24
+
25
+ def asset(file)
26
+ assets = Pathname(__FILE__).dirname.join('vendor/assets')
27
+
28
+ if file.end_with? '.css' or file.end_with? '.scss'
29
+ assets.join('stylesheets', file)
30
+ elsif file.end_with? '.js'
31
+ assets.join('javascripts', file)
32
+ else
33
+ assets.join('images', file)
34
+ end
35
+ end
36
+
37
+ def fetch(tag)
38
+ cdn = "http://fotorama.s3.amazonaws.com/#{tag}"
39
+ %w(fotorama.js fotorama.css fotorama.png fotorama@2x.png).each do |file|
40
+ from = "#{cdn}/#{file}".sub(/(.css|.js)$/, '.uncompressed\\1')
41
+ get from, asset(file)
42
+ end
43
+ end
44
+
45
+ def convert
46
+ css = asset('fotorama.css')
47
+ scss = asset('fotorama.css.scss')
48
+
49
+ scss.open('w') do |io|
50
+ io << css.read.gsub(/url\(/, 'image-url(')
51
+ end
52
+
53
+ css.delete
54
+ end
55
+
56
+ def update_version(tag)
57
+ version_file = Pathname(__FILE__).dirname.join('lib/fotoramajs/version.rb')
58
+ version_file.open('w') do |io|
59
+ io << "module Fotoramajs\n VERSION = \"#{tag}\"\nend\n"
60
+ end
61
+ end
62
+
63
+ puts "Fetching tags"
64
+ tag = github_tags('artpolikarpov/fotorama').last
65
+
66
+ puts "Load Fotorama #{tag}"
67
+ fetch(tag)
68
+
69
+ puts "Convert CSS to SCSS"
70
+ convert
71
+
72
+ puts "Update gem version"
73
+ update_version(tag)
74
+
75
+ puts "Done"
9
76
  end
10
77
 
11
78
  desc 'Delete all generated files'
@@ -1,3 +1,3 @@
1
1
  module Fotoramajs
2
- VERSION = "4.3.0.1"
2
+ VERSION = "4.3.3"
3
3
  end
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Fotorama 4.3.0 | http://fotorama.io/license/
2
+ * Fotorama 4.3.3 | http://fotorama.io/license/
3
3
  */
4
4
  (function (window, document, $, undefined) {
5
5
  "use strict";
@@ -450,9 +450,10 @@ var $WINDOW = $(window),
450
450
  $HTML,
451
451
  $BODY,
452
452
 
453
- COMPAT = document.compatMode === 'CSS1Compat',
454
453
  QUIRKS_FORCE = location.hash.replace('#', '') === 'quirks',
455
- CSS3 = Modernizr.csstransforms3d && !QUIRKS_FORCE,
454
+ TRANSFORMS3D = Modernizr.csstransforms3d,
455
+ CSS3 = TRANSFORMS3D && !QUIRKS_FORCE,
456
+ COMPAT = TRANSFORMS3D || document.compatMode === 'CSS1Compat',
456
457
  FULLSCREEN = fullScreenApi.ok,
457
458
 
458
459
  MOBILE = navigator.userAgent.match(/Android|webOS|iPhone|iPad|iPod|BlackBerry|Windows Phone/i),
@@ -493,10 +494,10 @@ function readPosition ($el) {
493
494
  }
494
495
  }
495
496
 
496
- function getTranslate (pos) {
497
+ function getTranslate (pos, _001) {
497
498
  var obj = {};
498
499
  if (CSS3) {
499
- obj.transform = 'translate3d(' + pos + 'px,0,0)';
500
+ obj.transform = 'translate3d(' + (pos + (_001 ? 0.001 : 0)) + 'px,0,0)'; // 0.001 to remove Retina artifacts
500
501
  } else {
501
502
  obj.left = pos;
502
503
  }
@@ -508,7 +509,7 @@ function getDuration (time) {
508
509
  }
509
510
 
510
511
  function numberFromMeasure (value, measure) {
511
- return +String(value).replace(measure || 'px', '');
512
+ return +String(value).replace(measure || 'px', '') || undefined;
512
513
  }
513
514
 
514
515
  function numberFromPercent (value) {
@@ -570,7 +571,7 @@ function afterTransition ($el, property, fn, time) {
570
571
  }
571
572
 
572
573
 
573
- function stop ($el, left) {
574
+ function stop ($el, left, _001) {
574
575
  if ($el.length) {
575
576
  var elData = $el.data();
576
577
  if (CSS3) {
@@ -584,7 +585,7 @@ function stop ($el, left) {
584
585
  return readPosition($el);
585
586
  });
586
587
 
587
- $el.css(getTranslate(lockedLeft));//.width(); // `.width()` for reflow
588
+ $el.css(getTranslate(lockedLeft, _001));//.width(); // `.width()` for reflow
588
589
  return lockedLeft;
589
590
  }
590
591
  }
@@ -649,7 +650,7 @@ function findVideoId (href, forceVideo) {
649
650
  return id ? {id: id, type: type} : false;
650
651
  }
651
652
 
652
- function getVideoThumbs (dataFrame, data, api) {
653
+ function getVideoThumbs (dataFrame, data, fotorama) {
653
654
  var img, thumb, video = dataFrame.video;
654
655
  if (video.type === 'youtube') {
655
656
  thumb = getProtocol() + 'img.youtube.com/vi/' + video.id + '/default.jpg';
@@ -661,7 +662,7 @@ function getVideoThumbs (dataFrame, data, api) {
661
662
  dataType: 'jsonp',
662
663
  success: function (json) {
663
664
  dataFrame.thumbsReady = true;
664
- updateData(data, {img: json[0].thumbnail_large, thumb: json[0].thumbnail_small}, dataFrame.i, api);
665
+ updateData(data, {img: json[0].thumbnail_large, thumb: json[0].thumbnail_small}, dataFrame.i, fotorama);
665
666
  }
666
667
  });
667
668
  } else {
@@ -674,7 +675,7 @@ function getVideoThumbs (dataFrame, data, api) {
674
675
  }
675
676
  }
676
677
 
677
- function updateData (data, _dataFrame, i, api) {
678
+ function updateData (data, _dataFrame, i, fotorama) {
678
679
  for (var _i = 0, _l = data.length; _i < _l; _i++) {
679
680
  var dataFrame = data[_i];
680
681
 
@@ -682,7 +683,7 @@ function updateData (data, _dataFrame, i, api) {
682
683
  var clear = {videoReady: true};
683
684
  clear[STAGE_FRAME_KEY] = clear[NAV_THUMB_FRAME_KEY] = clear[NAV_DOT_FRAME_KEY] = false;
684
685
 
685
- api.splice(_i, 1, $.extend(
686
+ fotorama.splice(_i, 1, $.extend(
686
687
  {},
687
688
  dataFrame,
688
689
  clear,
@@ -697,9 +698,8 @@ function updateData (data, _dataFrame, i, api) {
697
698
  function getDataFromHtml ($el) {
698
699
  var data = [];
699
700
 
700
- function getDataFromImg ($img, checkVideo) {
701
- var imgData = $img.data(),
702
- $child = $img.children('img').eq(0),
701
+ function getDataFromImg ($img, imgData, checkVideo) {
702
+ var $child = $img.children('img').eq(0),
703
703
  _imgHref = $img.attr('href'),
704
704
  _imgSrc = $img.attr('src'),
705
705
  _thumbSrc = $child.attr('src'),
@@ -709,37 +709,40 @@ function getDataFromHtml ($el) {
709
709
  if (video) {
710
710
  _imgHref = false;
711
711
  } else {
712
- video = findVideoId(_video, _video);
712
+ video = _video;
713
713
  }
714
714
 
715
- var img = imgData.img || _imgHref || _imgSrc || _thumbSrc,
716
- thumb = imgData.thumb || _thumbSrc || _imgSrc || _imgHref,
717
- separateThumbFLAG = img !== thumb,
718
- width = numberFromMeasure(imgData.width || $img.attr('width')),
719
- height = numberFromMeasure(imgData.height || $img.attr('height')),
720
- thumbWidth = numberFromMeasure(imgData.thumbWidth || $child.attr('width') || separateThumbFLAG || width),
721
- thumbHeight = numberFromMeasure(imgData.thumbHeight || $child.attr('height') || separateThumbFLAG || height);
722
-
723
- return {
715
+ getDimensions($img, $child, $.extend(imgData, {
724
716
  video: video,
725
- img: img,
726
- width: width || undefined,
727
- height: height || undefined,
728
- thumb: thumb,
729
- thumbRatio: thumbWidth / thumbHeight || undefined
730
- }
717
+ img: imgData.img || _imgHref || _imgSrc || _thumbSrc,
718
+ thumb: imgData.thumb || _thumbSrc || _imgSrc || _imgHref
719
+ }));
731
720
  }
732
721
 
733
- $el.children().each(function (i) {
722
+ function getDimensions ($img, $child, imgData) {
723
+ var separateThumbFLAG = imgData.thumb && imgData.img !== imgData.thumb,
724
+ width = numberFromMeasure(imgData.width || $img.attr('width')),
725
+ height = numberFromMeasure(imgData.height || $img.attr('height'));
726
+
727
+ $.extend(imgData, {
728
+ width: width,
729
+ height: height,
730
+ thumbratio: getRatio(imgData.thumbratio
731
+ || (numberFromMeasure(imgData.thumbwidth || ($child && $child.attr('width')) || separateThumbFLAG || width)
732
+ / numberFromMeasure(imgData.thumbheight || ($child && $child.attr('height')) || separateThumbFLAG || height)))
733
+ });
734
+ }
735
+
736
+ $el.children().each(function () {
734
737
  var $this = $(this),
735
- dataFrame = $.extend($this.data(), {id: $this.attr('id')});
738
+ dataFrame = optionsToLowerCase($.extend($this.data(), {id: $this.attr('id')}));
736
739
  if ($this.is('a, img')) {
737
- $.extend(dataFrame, getDataFromImg($this, true));
740
+ getDataFromImg($this, dataFrame, true);
738
741
  } else if (!$this.is(':empty')) {
739
- $.extend(dataFrame, {
742
+ getDimensions($this, null, $.extend(dataFrame, {
740
743
  html: this,
741
744
  _html: $this.html() // Because of IE
742
- });
745
+ }));
743
746
  } else return;
744
747
 
745
748
  data.push(dataFrame);
@@ -790,7 +793,7 @@ function fit ($el, measuresToFit, method) {
790
793
  height = measures.height,
791
794
  ratio = measuresToFit.w / measuresToFit.h,
792
795
  biggerRatioFLAG = measures.ratio >= ratio,
793
- fitFLAG = method === 'scale-down',
796
+ fitFLAG = method === 'scaledown',
794
797
  containFLAG = method === 'contain',
795
798
  coverFLAG = method === 'cover';
796
799
 
@@ -914,6 +917,28 @@ function lockScroll (left, top) {
914
917
  .scrollLeft(left)
915
918
  .scrollTop(top);
916
919
  }
920
+
921
+ function optionsToLowerCase (options) {
922
+ if (options) {
923
+ var opts = {};
924
+ $.each(options, function (key, value) {
925
+ opts[key.toLowerCase()] = value;
926
+ });
927
+
928
+ return opts;
929
+ }
930
+ }
931
+
932
+ function getRatio (_ratio) {
933
+ if (!_ratio) return;
934
+ var ratio = +_ratio;
935
+ if (!isNaN(ratio)) {
936
+ return ratio;
937
+ } else {
938
+ ratio = _ratio.split('/');
939
+ return +ratio[0] / +ratio[1] || undefined;
940
+ }
941
+ }
917
942
  function slide ($el, options) {
918
943
  var elPos = Math.round(options.pos),
919
944
  onEndFn = options.onEnd || noop;
@@ -925,7 +950,7 @@ function slide ($el, options) {
925
950
  };
926
951
  }
927
952
 
928
- var translate = $.extend(getTranslate(elPos), {width: options.width});
953
+ var translate = $.extend(getTranslate(elPos, options._001), {width: options.width});
929
954
 
930
955
  if (CSS3) {
931
956
  $el.css($.extend(getDuration(options.time), translate));
@@ -939,55 +964,45 @@ function slide ($el, options) {
939
964
  }
940
965
  }
941
966
 
942
- function fade ($el1, $el2, $frames, options) {
967
+ function fade ($el1, $el2, $frames, options, fadeStack, chain) {
968
+ var chainedFLAG = typeof chain !== 'undefined';
969
+ if (!chainedFLAG) {
970
+ fadeStack.push(arguments);
971
+ Array.prototype.push.call(arguments, fadeStack.length);
972
+ if (fadeStack.length > 1) return;
973
+ }
974
+
943
975
  $el1 = $el1 || $($el1);
944
976
  $el2 = $el2 || $($el2);
977
+
945
978
  var _$el1 = $el1[0],
946
979
  _$el2 = $el2[0],
947
980
  crossfadeFLAG = options.method === 'crossfade',
948
981
  onEndFn = function () {
949
982
  if (!onEndFn.done) {
950
- (options.onEnd || noop)();
951
983
  onEndFn.done = true;
984
+ var args = (chainedFLAG || fadeStack.shift()) && fadeStack.shift();
985
+ args && fade.apply(this, args);
986
+ (options.onEnd || noop)(!!args);
952
987
  }
953
988
  },
954
- duration = getDuration(options.time),
955
- duration0 = getDuration(0),
956
- opacity0 = {opacity: 0},
957
- opacity1 = {opacity: 1};
989
+ time = options.time / (chain || 1);
958
990
 
959
- $frames.removeClass(fadeRearClass + ' ' + fadeFrontClass);
991
+ $frames
992
+ .not($el1.addClass(fadeRearClass).removeClass(fadeFrontClass))
993
+ .not($el2.addClass(fadeFrontClass).removeClass(fadeRearClass))
994
+ .removeClass(fadeRearClass + ' ' + fadeFrontClass);
960
995
 
961
- $el1.addClass(fadeRearClass);
962
- $el2.addClass(fadeFrontClass);
963
996
 
964
- if (CSS3) {
965
- stop($el1);
966
- stop($el2);
997
+ $el1.stop();
998
+ $el2.stop();
967
999
 
968
- crossfadeFLAG && _$el2 && $el1.css($.extend(duration0, opacity0)).width(); // .width() for immediate reflow
1000
+ crossfadeFLAG && _$el2 && $el1.fadeTo(0, 0);
969
1001
 
970
- $el1.css($.extend(crossfadeFLAG ? duration : duration0, opacity1));
971
- $el2.css($.extend(duration, opacity0));
1002
+ $el1.fadeTo(crossfadeFLAG ? time : 1, 1, crossfadeFLAG && onEndFn);
1003
+ $el2.fadeTo(time, 0, onEndFn);
972
1004
 
973
- if (options.time > 10 && (_$el1 || _$el2)) {
974
- afterTransition($el1, 'opacity', onEndFn, options.time);
975
- afterTransition($el2, 'opacity', onEndFn, options.time);
976
- } else {
977
- onEndFn();
978
- }
979
-
980
- } else {
981
- $el1.stop();
982
- $el2.stop();
983
-
984
- crossfadeFLAG && _$el2 && $el1.fadeTo(0, 0);
985
-
986
- $el1.fadeTo(crossfadeFLAG ? options.time : 1, 1, crossfadeFLAG && onEndFn);
987
- $el2.fadeTo(options.time, 0, onEndFn);
988
-
989
- (_$el1 && crossfadeFLAG) || _$el2 || onEndFn();
990
- }
1005
+ (_$el1 && crossfadeFLAG) || _$el2 || onEndFn();
991
1006
  }
992
1007
  var lastEvent,
993
1008
  moveEventType,
@@ -1056,7 +1071,7 @@ function touch ($el, options) {
1056
1071
  var xDiff = Math.abs(e._x - startEvent._x), // opt _x → _pageX
1057
1072
  yDiff = Math.abs(e._y - startEvent._y),
1058
1073
  xyDiff = xDiff - yDiff,
1059
- xWin = (tail.go || tail.x || xyDiff >= 0) && !tail.noSwipe,
1074
+ xWin = (tail.go || tail.x || xyDiff > 0) && !tail.noSwipe,
1060
1075
  yWin = xyDiff < 0;
1061
1076
 
1062
1077
  if (touchFLAG && !tail.checked) {
@@ -1160,7 +1175,7 @@ function moveOnTouch ($el, options) {
1160
1175
  [startTime, startCoo]
1161
1176
  ];
1162
1177
 
1163
- startElPos = moveElPos = stop($el, options.getPos && options.getPos());
1178
+ startElPos = moveElPos = tail.noMove ? 0 : stop($el, options.getPos && options.getPos(), options._001);
1164
1179
 
1165
1180
  // startTime - endTime < TOUCH_TIMEOUT * 3 && e.preventDefault(); // double tap
1166
1181
 
@@ -1324,7 +1339,6 @@ jQuery.Fotorama = function ($fotorama, opts) {
1324
1339
  $BODY = $BODY || $('body');
1325
1340
 
1326
1341
  var that = this,
1327
- index = _size,
1328
1342
  stamp = $.now(),
1329
1343
  stampClass = _fotoramaClass + stamp,
1330
1344
  fotorama = $fotorama[0],
@@ -1339,6 +1353,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
1339
1353
  $wrap = $(div(wrapClass)),
1340
1354
  $stage = $(div(stageClass)).appendTo($wrap),
1341
1355
  stage = $stage[0],
1356
+
1342
1357
  $stageShaft = $(div(stageShaftClass)).appendTo($stage),
1343
1358
  $stageFrame = $(),
1344
1359
  $arrPrev = $(div(arrClass + ' ' + arrPrevClass, div(arrArrClass))),
@@ -1410,7 +1425,9 @@ jQuery.Fotorama = function ($fotorama, opts) {
1410
1425
  hoverFLAG,
1411
1426
 
1412
1427
  navFrameKey,
1413
- stageLeft = 0;
1428
+ stageLeft = 0,
1429
+
1430
+ fadeStack = [];
1414
1431
 
1415
1432
  $wrap[STAGE_FRAME_KEY] = $(div(stageFrameClass));
1416
1433
  $wrap[NAV_THUMB_FRAME_KEY] = $(div(navFrameClass + ' ' + navFrameThumbClass, div(thumbClass)));
@@ -1421,13 +1438,13 @@ jQuery.Fotorama = function ($fotorama, opts) {
1421
1438
  toDeactivate[NAV_DOT_FRAME_KEY] = [];
1422
1439
  toDetach[STAGE_FRAME_KEY] = {};
1423
1440
 
1441
+ that.prevent = {};
1442
+
1424
1443
  if (CSS3) {
1425
1444
  $wrap.addClass(wrapCss3Class);
1426
1445
  }
1427
1446
 
1428
1447
  fotoramaData.fotorama = this;
1429
- that.options = opts;
1430
- _size++;
1431
1448
 
1432
1449
  function checkForVideo () {
1433
1450
  $.each(data, function (i, dataFrame) {
@@ -1448,6 +1465,46 @@ jQuery.Fotorama = function ($fotorama, opts) {
1448
1465
  });
1449
1466
  }
1450
1467
 
1468
+ function bindGlobalEvents (FLAG) {
1469
+ var keydownCommon = 'keydown.' + _fotoramaClass,
1470
+ keydownLocal = 'keydown.' + _fotoramaClass + stamp,
1471
+ resizeLocal = 'resize.' + _fotoramaClass + stamp;
1472
+
1473
+ if (FLAG) {
1474
+ $DOCUMENT
1475
+ .on(keydownLocal, function (e) {
1476
+ if ($videoPlaying && e.keyCode === 27) {
1477
+ e.preventDefault();
1478
+ unloadVideo($videoPlaying, true, true);
1479
+ } else if (that.fullScreen || (opts.keyboard && !that.index)) {
1480
+ if (e.keyCode === 27) {
1481
+ e.preventDefault();
1482
+ that.cancelFullScreen();
1483
+ } else if (e.keyCode === 39 || (e.keyCode === 40 && that.fullScreen)) {
1484
+ e.preventDefault();
1485
+ that.show({index: '>', slow: e.altKey, direct: true});
1486
+ } else if (e.keyCode === 37 || (e.keyCode === 38 && that.fullScreen)) {
1487
+ e.preventDefault();
1488
+ that.show({index: '<', slow: e.altKey, direct: true});
1489
+ }
1490
+ }
1491
+ });
1492
+
1493
+ if (!that.index) {
1494
+ $DOCUMENT
1495
+ .off(keydownCommon)
1496
+ .on(keydownCommon, 'textarea, input, select', function (e) {
1497
+ !$BODY.hasClass(_fullscreenClass) && e.stopPropagation();
1498
+ });
1499
+ }
1500
+
1501
+ $WINDOW.on(resizeLocal, that.resize);
1502
+ } else {
1503
+ $DOCUMENT.off(keydownLocal);
1504
+ $WINDOW.off(resizeLocal);
1505
+ }
1506
+ }
1507
+
1451
1508
  function appendElements (FLAG) {
1452
1509
  if (FLAG === appendElements.f) return;
1453
1510
 
@@ -1459,7 +1516,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
1459
1516
  .before($style)
1460
1517
  .before($anchor);
1461
1518
 
1462
- $.Fotorama.size++;
1519
+ addInstance(that);
1463
1520
  } else {
1464
1521
  $wrap.detach();
1465
1522
  $style.detach();
@@ -1468,9 +1525,10 @@ jQuery.Fotorama = function ($fotorama, opts) {
1468
1525
  .html(fotoramaData.urtext)
1469
1526
  .removeClass(stampClass);
1470
1527
 
1471
- $.Fotorama.size--;
1528
+ hideInstance(that);
1472
1529
  }
1473
1530
 
1531
+ bindGlobalEvents(FLAG);
1474
1532
  appendElements.f = FLAG;
1475
1533
  }
1476
1534
 
@@ -1509,17 +1567,19 @@ jQuery.Fotorama = function ($fotorama, opts) {
1509
1567
  * Options on the fly
1510
1568
  * */
1511
1569
  function setOptions () {
1570
+ that.options = opts = optionsToLowerCase(opts);
1571
+
1512
1572
  o_fade = opts.transition === 'crossfade' || opts.transition === 'dissolve';
1513
1573
 
1514
1574
  o_loop = opts.loop && (size > 2 || o_fade);
1515
1575
 
1516
- o_transitionDuration = +opts.transitionDuration || TRANSITION_DURATION;
1576
+ o_transitionDuration = +opts.transitionduration || TRANSITION_DURATION;
1517
1577
 
1518
1578
  var classes = {add: [], remove: []};
1519
1579
 
1520
1580
  if (size > 1) {
1521
1581
  o_nav = opts.nav;
1522
- o_navTop = opts.navPosition === 'top';
1582
+ o_navTop = opts.navposition === 'top';
1523
1583
  classes.remove.push(selectClass);
1524
1584
 
1525
1585
  $arrs.toggle(opts.arrows);
@@ -1532,8 +1592,8 @@ jQuery.Fotorama = function ($fotorama, opts) {
1532
1592
 
1533
1593
  if (opts.autoplay) setAutoplayInterval(opts.autoplay);
1534
1594
 
1535
- o_thumbSide = numberFromMeasure(opts.thumbWidth) || THUMB_SIZE;
1536
- o_thumbSide2 = numberFromMeasure(opts.thumbHeight) || THUMB_SIZE;
1595
+ o_thumbSide = numberFromMeasure(opts.thumbwidth) || THUMB_SIZE;
1596
+ o_thumbSide2 = numberFromMeasure(opts.thumbheight) || THUMB_SIZE;
1537
1597
 
1538
1598
  stageNoMove();
1539
1599
 
@@ -1576,7 +1636,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
1576
1636
  frameAppend($navFrame, $navShaft, 'nav');
1577
1637
  }
1578
1638
 
1579
- o_allowFullScreen = opts.allowFullScreen;
1639
+ o_allowFullScreen = opts.allowfullscreen;
1580
1640
 
1581
1641
  if (o_allowFullScreen) {
1582
1642
  $fullscreenIcon.appendTo($stage);
@@ -1630,10 +1690,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
1630
1690
  function setNavShaftMinmax () {
1631
1691
  navShaftData.min = Math.min(0, measures.w - $navShaft.width());
1632
1692
  navShaftData.max = 0;
1633
-
1634
- navShaftTouchTail.noMove = navShaftData.min === navShaftData.max;
1635
-
1636
- $navShaft.toggleClass(grabClass, !navShaftTouchTail.noMove);
1693
+ $navShaft.toggleClass(grabClass, !(navShaftTouchTail.noMove = navShaftData.min === navShaftData.max));
1637
1694
  }
1638
1695
 
1639
1696
  function eachIndex (indexes, type, fn) {
@@ -1643,12 +1700,15 @@ jQuery.Fotorama = function ($fotorama, opts) {
1643
1700
  }
1644
1701
  return $.each(indexes, function (i, index) {
1645
1702
  if (rangeFLAG) index = i;
1646
- if (typeof(index) === 'number') {
1647
- var dataFrame = data[normalizeIndex(index)],
1648
- key = '$' + type + 'Frame',
1649
- $frame = dataFrame[key];
1703
+ if (typeof index === 'number') {
1704
+ var dataFrame = data[normalizeIndex(index)];
1705
+
1706
+ if (dataFrame) {
1707
+ var key = '$' + type + 'Frame',
1708
+ $frame = dataFrame[key];
1650
1709
 
1651
- fn.call(this, i, index, dataFrame, $frame, key, $frame && $frame.data());
1710
+ fn.call(this, i, index, dataFrame, $frame, key, $frame && $frame.data());
1711
+ }
1652
1712
  }
1653
1713
  });
1654
1714
  }
@@ -1930,18 +1990,16 @@ jQuery.Fotorama = function ($fotorama, opts) {
1930
1990
 
1931
1991
  if (!thumbsFLAG) return;
1932
1992
 
1933
-
1934
-
1935
1993
  var $this = $(this),
1936
1994
  frameData = $this.data(),
1937
- thumbWidth = Math.round(o_thumbSide2 * frameData.data.thumbRatio) || o_thumbSide;
1995
+ thumbwidth = Math.round(o_thumbSide2 * frameData.data.thumbratio) || o_thumbSide;
1938
1996
 
1939
1997
  frameData.l = left;
1940
- frameData.w = thumbWidth;
1998
+ frameData.w = thumbwidth;
1941
1999
 
1942
- $this.css({width: thumbWidth});
2000
+ $this.css({width: thumbwidth});
1943
2001
 
1944
- left += thumbWidth + MARGIN;
2002
+ left += thumbwidth + MARGIN;
1945
2003
  })
1946
2004
  );
1947
2005
 
@@ -2032,7 +2090,6 @@ jQuery.Fotorama = function ($fotorama, opts) {
2032
2090
  }
2033
2091
  }
2034
2092
 
2035
-
2036
2093
  function detachFrames (key) {
2037
2094
  var _toDetach = toDetach[key];
2038
2095
 
@@ -2058,7 +2115,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
2058
2115
  toDeactivate[STAGE_FRAME_KEY].push($frame.addClass(activeClass));
2059
2116
 
2060
2117
  skipOnEnd || that.show.onEnd(true);
2061
- stop($stageShaft, 0);
2118
+ stop($stageShaft, 0, true);
2062
2119
 
2063
2120
  detachFrames(STAGE_FRAME_KEY);
2064
2121
  stageFramePosition(activeIndexes);
@@ -2071,41 +2128,37 @@ jQuery.Fotorama = function ($fotorama, opts) {
2071
2128
  options && $.extend(measures, {
2072
2129
  width: options.width || measures.width,
2073
2130
  height: options.height,
2074
- minWidth: options.minWidth,
2075
- maxWidth: options.maxWidth,
2076
- minHeight: options.minHeight,
2077
- maxHeight: options.maxHeight,
2078
- ratio: (function (_ratio) {
2079
- if (!_ratio) return;
2080
- var ratio = Number(_ratio);
2081
- if (!isNaN(ratio)) {
2082
- return ratio;
2083
- } else {
2084
- ratio = _ratio.split('/');
2085
- return Number(ratio[0] / ratio[1]) || undefined;
2086
- }
2087
- })(options.ratio)
2131
+ minwidth: options.minwidth,
2132
+ maxwidth: options.maxwidth,
2133
+ minheight: options.minheight,
2134
+ maxheight: options.maxheight,
2135
+ ratio: getRatio(options.ratio)
2088
2136
  })
2089
2137
  && !optsLeave && $.extend(opts, {
2090
2138
  width: measures.width,
2091
2139
  height: measures.height,
2092
- minWidth: measures.minWidth,
2093
- maxWidth: measures.maxWidth,
2094
- minHeight: measures.minHeight,
2095
- maxHeight: measures.maxHeight,
2140
+ minwidth: measures.minwidth,
2141
+ maxwidth: measures.maxwidth,
2142
+ minheight: measures.minheight,
2143
+ maxheight: measures.maxheight,
2096
2144
  ratio: measures.ratio
2097
2145
  });
2098
2146
  }
2099
2147
 
2100
- function triggerEvent (event, extra) {
2148
+ function triggerEvent (event, extra, fn) {
2101
2149
  $fotorama.trigger(_fotoramaClass + ':' + event, [that, extra]);
2150
+ if (!that.prevent[event]) {
2151
+ (fn || noop)();
2152
+ } else {
2153
+ delete that.prevent[event];
2154
+ }
2102
2155
  }
2103
2156
 
2104
2157
  function onTouchStart () {
2105
2158
  clearTimeout(onTouchEnd.t);
2106
2159
  touchedFLAG = 1;
2107
2160
 
2108
- if (opts.stopAutoplayOnTouch) {
2161
+ if (opts.stopautoplayontouch) {
2109
2162
  that.stopAutoplay();
2110
2163
  } else {
2111
2164
  pausedAutoplayFLAG = true;
@@ -2151,7 +2204,6 @@ jQuery.Fotorama = function ($fotorama, opts) {
2151
2204
  }, opts.autoplay);
2152
2205
  }
2153
2206
 
2154
-
2155
2207
  that.startAutoplay = function (interval) {
2156
2208
  if (that.autoplay) return this;
2157
2209
  pausedAutoplayFLAG = stoppedAutoplayFLAG = false;
@@ -2200,15 +2252,15 @@ jQuery.Fotorama = function ($fotorama, opts) {
2200
2252
 
2201
2253
  that.activeFrame = activeFrame = data[activeIndex];
2202
2254
 
2203
- unloadVideo(false, activeFrame.i !== data[normalizeIndex(repositionIndex)].i);
2255
+ unloadVideo($videoPlaying, activeFrame.i !== data[normalizeIndex(repositionIndex)].i);
2204
2256
 
2205
2257
  frameDraw(activeIndexes, 'stage');
2206
2258
  stageFramePosition([dirtyIndex, getPrevIndex(dirtyIndex), getNextIndex(dirtyIndex)]);
2207
2259
 
2208
- triggerEvent('show', options.direct);
2209
-
2210
2260
  updateTouchTails('go', true);
2211
2261
 
2262
+ triggerEvent('show', options.direct);
2263
+
2212
2264
  var onEnd = that.show.onEnd = function (skipReposition) {
2213
2265
  if (onEnd.ok) return;
2214
2266
  onEnd.ok = true;
@@ -2231,7 +2283,8 @@ jQuery.Fotorama = function ($fotorama, opts) {
2231
2283
  pos: -getPosByIndex(dirtyIndex, measures.w, MARGIN, repositionIndex),
2232
2284
  overPos: overPos,
2233
2285
  time: time,
2234
- onEnd: onEnd
2286
+ onEnd: onEnd,
2287
+ _001: true
2235
2288
  });
2236
2289
  } else {
2237
2290
  var $activeFrame = activeFrame[STAGE_FRAME_KEY],
@@ -2241,7 +2294,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
2241
2294
  time: time,
2242
2295
  method: opts.transition,
2243
2296
  onEnd: onEnd
2244
- });
2297
+ }, fadeStack);
2245
2298
  }
2246
2299
 
2247
2300
  arrsUpdate();
@@ -2339,42 +2392,16 @@ jQuery.Fotorama = function ($fotorama, opts) {
2339
2392
 
2340
2393
  if (document.addEventListener) {
2341
2394
  document.addEventListener(fullScreenApi.event, function () {
2342
- if (!fullScreenApi.is() && !$videoPlaying) {
2395
+ if (data && !fullScreenApi.is() && !$videoPlaying) {
2343
2396
  cancelFullScreen();
2344
2397
  }
2345
2398
  });
2346
2399
  }
2347
2400
 
2348
- $DOCUMENT.on('keydown', function (e) {
2349
- if ($videoPlaying && e.keyCode === 27) {
2350
- e.preventDefault();
2351
- unloadVideo($videoPlaying, true, true);
2352
- } else if (that.fullScreen || (opts.keyboard && !index)) {
2353
- if (e.keyCode === 27) {
2354
- e.preventDefault();
2355
- that.cancelFullScreen();
2356
- } else if (e.keyCode === 39 || (e.keyCode === 40 && that.fullScreen)) {
2357
- e.preventDefault();
2358
- that.show({index: '>', slow: e.altKey, direct: true});
2359
- } else if (e.keyCode === 37 || (e.keyCode === 38 && that.fullScreen)) {
2360
- e.preventDefault();
2361
- that.show({index: '<', slow: e.altKey, direct: true});
2362
- }
2363
- }
2364
- });
2365
-
2366
- if (!index) {
2367
- $DOCUMENT.on('keydown', 'textarea, input, select', function (e) {
2368
- if (!that.fullScreen) {
2369
- e.stopPropagation();
2370
- }
2371
- });
2372
- }
2373
-
2374
2401
  that.resize = function (options) {
2375
2402
  if (!data) return this;
2376
2403
 
2377
- extendMeasures(!that.fullScreen ? options : {width: '100%', maxWidth: null, minWidth: null, height: '100%', maxHeight: null, minHeight: null}, that.fullScreen);
2404
+ extendMeasures(!that.fullScreen ? optionsToLowerCase(options) : {width: '100%', maxwidth: null, minwidth: null, height: '100%', maxheight: null, minheight: null}, that.fullScreen);
2378
2405
 
2379
2406
  var time = arguments[1] || 0,
2380
2407
  setFLAG = arguments[2],
@@ -2384,7 +2411,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
2384
2411
  windowHeight = $WINDOW.height() - (o_nav ? $nav.height() : 0);
2385
2412
 
2386
2413
  if (measureIsValid(width)) {
2387
- $wrap.css({width: width, minWidth: measures.minWidth, maxWidth: measures.maxWidth});
2414
+ $wrap.css({width: width, minWidth: measures.minwidth, maxWidth: measures.maxwidth});
2388
2415
 
2389
2416
  width = measures.w = $wrap.width();
2390
2417
  height = numberFromPercent(height) / 100 * windowHeight || numberFromMeasure(height);
@@ -2393,7 +2420,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
2393
2420
 
2394
2421
  if (height) {
2395
2422
  width = Math.round(width);
2396
- height = measures.h = Math.round(minMaxLimit(height, numberFromPercent(measures.minHeight) / 100 * windowHeight || numberFromMeasure(measures.minHeight), numberFromPercent(measures.maxHeight) / 100 * windowHeight || numberFromMeasure(measures.maxHeight)));
2423
+ height = measures.h = Math.round(minMaxLimit(height, numberFromPercent(measures.minheight) / 100 * windowHeight || numberFromMeasure(measures.minheight), numberFromPercent(measures.maxheight) / 100 * windowHeight || numberFromMeasure(measures.maxheight)));
2397
2424
 
2398
2425
  stageShaftReposition();
2399
2426
 
@@ -2433,7 +2460,6 @@ jQuery.Fotorama = function ($fotorama, opts) {
2433
2460
  return this;
2434
2461
  };
2435
2462
 
2436
-
2437
2463
  function setShadow ($el, edge) {
2438
2464
  if (o_shadows) {
2439
2465
  $el.removeClass(shadowsLeftClass + ' ' + shadowsRightClass);
@@ -2488,7 +2514,6 @@ jQuery.Fotorama = function ($fotorama, opts) {
2488
2514
  return this;
2489
2515
  };
2490
2516
 
2491
-
2492
2517
  function unloadVideo ($video, unloadActiveFLAG, releaseAutoplayFLAG) {
2493
2518
  if (unloadActiveFLAG) {
2494
2519
  $wrap.removeClass(wrapVideoClass);
@@ -2539,11 +2564,13 @@ jQuery.Fotorama = function ($fotorama, opts) {
2539
2564
  } else if ($videoPlaying) {
2540
2565
  target === videoClose && unloadVideo($videoPlaying, true, true);
2541
2566
  } else {
2542
- if (toggleControlsFLAG) {
2543
- toggleControlsClass();
2544
- } else if (opts.click) {
2545
- that.show({index: e.shiftKey || !getDirection(e._x) ? '<' : '>', slow: e.altKey, direct: true});
2546
- }
2567
+ triggerEvent('stagetap', undefined, function () {
2568
+ if (toggleControlsFLAG) {
2569
+ toggleControlsClass();
2570
+ } else if (opts.click) {
2571
+ that.show({index: e.shiftKey || !getDirection(e._x) ? '<' : '>', slow: e.altKey, direct: true});
2572
+ }
2573
+ });
2547
2574
  }
2548
2575
  }
2549
2576
 
@@ -2576,8 +2603,9 @@ jQuery.Fotorama = function ($fotorama, opts) {
2576
2603
  }
2577
2604
  },
2578
2605
  getPos: function () {
2579
- return - getPosByIndex(dirtyIndex, measures.w, MARGIN, repositionIndex);
2606
+ return -getPosByIndex(dirtyIndex, measures.w, MARGIN, repositionIndex);
2580
2607
  },
2608
+ _001: true,
2581
2609
  timeLow: 1,
2582
2610
  timeHigh: 1,
2583
2611
  friction: 2,
@@ -2664,7 +2692,7 @@ jQuery.Fotorama = function ($fotorama, opts) {
2664
2692
  if (!ready.ok) {
2665
2693
  // Only first time
2666
2694
  if (opts.hash && location.hash) {
2667
- startIndex = getIndexFromHash(location.hash.replace(/^#/, ''), data, index === 0);
2695
+ startIndex = getIndexFromHash(location.hash.replace(/^#/, ''), data, that.index === 0);
2668
2696
  }
2669
2697
  activeIndex = repositionIndex = dirtyIndex = lastActiveIndex = startIndex = edgeIndex(startIndex) || 0;
2670
2698
  }
@@ -2704,14 +2732,10 @@ jQuery.Fotorama = function ($fotorama, opts) {
2704
2732
  }
2705
2733
  }
2706
2734
 
2707
-
2708
-
2709
- $WINDOW
2710
- .on('resize', that.resize);
2711
-
2712
2735
  reset();
2713
2736
  };
2714
2737
 
2738
+
2715
2739
  $.fn.fotorama = function (opts) {
2716
2740
  return this.each(function () {
2717
2741
  var that = this,
@@ -2734,36 +2758,36 @@ $.fn.fotorama = function (opts) {
2734
2758
  {
2735
2759
  // dimensions
2736
2760
  width: null, // 500 || '100%'
2737
- minWidth: null,
2738
- maxWidth: null, // '100%'
2761
+ minwidth: null,
2762
+ maxwidth: '100%', // '100%'
2739
2763
  height: null,
2740
- minHeight: null,
2741
- maxHeight: null,
2764
+ minheight: null,
2765
+ maxheight: null,
2742
2766
  ratio: null, // '16/9' || 500/333 || 1.5
2743
2767
 
2744
2768
  // navigation, thumbs
2745
2769
  nav: 'dots', // 'thumbs' || false
2746
- navPosition: 'bottom', // 'top'
2747
- thumbWidth: THUMB_SIZE,
2748
- thumbHeight: THUMB_SIZE,
2770
+ navposition: 'bottom', // 'top'
2771
+ thumbwidth: THUMB_SIZE,
2772
+ thumbheight: THUMB_SIZE,
2749
2773
 
2750
2774
  arrows: true,
2751
2775
  click: true,
2752
2776
  swipe: true,
2753
2777
 
2754
- allowFullScreen: false, // true || 'native'
2778
+ allowfullscreen: false, // true || 'native'
2755
2779
 
2756
- fit: 'contain', // 'cover' || 'scale-down' || 'none'
2780
+ fit: 'contain', // 'cover' || 'scaledown' || 'none'
2757
2781
 
2758
2782
  transition: 'slide', // 'crossfade' || 'dissolve'
2759
- transitionDuration: TRANSITION_DURATION,
2783
+ transitionduration: TRANSITION_DURATION,
2760
2784
 
2761
2785
  captions: true,
2762
2786
 
2763
2787
  hash: false,
2764
2788
 
2765
2789
  autoplay: false,
2766
- stopAutoplayOnTouch: true,
2790
+ stopautoplayontouch: true,
2767
2791
 
2768
2792
  keyboard: false,
2769
2793
 
@@ -2783,16 +2807,24 @@ $.fn.fotorama = function (opts) {
2783
2807
  }
2784
2808
  });
2785
2809
  };
2810
+ $.Fotorama.instances = [];
2786
2811
 
2787
- $.Fotorama.cache = {};
2788
-
2789
- var _size = 0;
2790
- $.Fotorama.size = 0;
2812
+ function calculateIndexes () {
2813
+ $.each($.Fotorama.instances, function (index, instance) {
2814
+ instance.index = index;
2815
+ });
2816
+ }
2791
2817
 
2792
- $(function () {
2793
- $('.' + _fotoramaClass + ':not([data-auto="false"])').fotorama();
2794
- });
2818
+ function addInstance (instance) {
2819
+ $.Fotorama.instances.push(instance);
2820
+ calculateIndexes();
2821
+ }
2795
2822
 
2823
+ function hideInstance (instance) {
2824
+ $.Fotorama.instances.splice(instance.index, 1);
2825
+ calculateIndexes();
2826
+ }
2827
+ $.Fotorama.cache = {};
2796
2828
  $ = $ || {};
2797
2829
  $.Fotorama = $.Fotorama || {};
2798
2830
  $.Fotorama.jst = $.Fotorama.jst || {};
@@ -2825,5 +2857,7 @@ __p += '<div class="fotorama__video"><iframe src="';
2825
2857
  __p += '" frameborder="0" allowfullscreen></iframe></div>';
2826
2858
  return __p
2827
2859
  };
2828
- })
2829
- (window, document, jQuery);
2860
+ $(function () {
2861
+ $('.' + _fotoramaClass + ':not([data-auto="false"])').fotorama();
2862
+ });
2863
+ })(window, document, jQuery);
@@ -1,5 +1,5 @@
1
1
  /*!
2
- * Fotorama 4.3.0 | http://fotorama.io/license/
2
+ * Fotorama 4.3.3 | http://fotorama.io/license/
3
3
  */
4
4
  .fotorama__stage__shaft,
5
5
  .fotorama__stage__frame,
@@ -14,6 +14,18 @@
14
14
  bottom: 0;
15
15
  }
16
16
 
17
+ .fotorama--fullscreen,
18
+ .fotorama__img {
19
+ max-width: 99999px !important;
20
+ max-height: 99999px !important;
21
+ min-width: 0 !important;
22
+ min-height: 0 !important;
23
+ border-radius: 0 !important;
24
+ box-shadow: none !important;
25
+ padding: 0;
26
+ margin: 0;
27
+ }
28
+
17
29
  .fotorama__wrap .fotorama__grab {
18
30
  cursor: move;
19
31
  cursor: -webkit-grab;
@@ -72,9 +84,9 @@
72
84
  .fotorama__wrap--css3 .fotorama__stage__shaft,
73
85
  .fotorama__wrap--css3 .fotorama__nav__shaft,
74
86
  .fotorama__wrap--css3 .fotorama__thumb-border {
75
- -webkit-transition-property: -webkit-transform;
76
- transition-property: -ms-transform;
77
- transition-property: transform;
87
+ -webkit-transition-property: -webkit-transform, width;
88
+ transition-property: -ms-transform, width;
89
+ transition-property: transform, width;
78
90
  -webkit-transition-timing-function: cubic-bezier(0.1, 0, 0.25, 1);
79
91
  transition-timing-function: cubic-bezier(0.1, 0, 0.25, 1);
80
92
  -webkit-transition-duration: 0ms;
@@ -190,24 +202,23 @@
190
202
  height: 100% !important;
191
203
  max-width: 100% !important;
192
204
  max-height: 100% !important;
193
- overflow: hidden !important;
194
205
  margin: 0 !important;
195
206
  padding: 0 !important;
207
+ overflow: hidden !important;
196
208
  background: #000;
197
209
  }
198
210
 
199
211
  .fotorama--fullscreen {
200
- position: absolute;
212
+ position: absolute !important;
201
213
  top: 0 !important;
202
214
  left: 0 !important;
203
215
  right: 0 !important;
204
216
  bottom: 0 !important;
205
- float: none;
206
- z-index: 2147483647;
217
+ float: none !important;
218
+ z-index: 2147483647 !important;
207
219
  background: #000;
208
- width: auto !important;
209
- height: auto !important;
210
- margin: 0 !important;
220
+ width: 100% !important;
221
+ height: 100% !important;
211
222
  }
212
223
 
213
224
  .fotorama--fullscreen .fotorama__stage,
@@ -243,10 +254,6 @@
243
254
  -webkit-filter: alpha(opacity=0);
244
255
  filter: alpha(opacity=0);
245
256
  opacity: 0;
246
- max-width: 99999px !important;
247
- max-height: 99999px !important;
248
- min-width: 0 !important;
249
- min-height: 0 !important;
250
257
  }
251
258
 
252
259
  .fotorama__loaded .fotorama__img,
@@ -395,6 +402,11 @@
395
402
  border: 1px solid;
396
403
  }
397
404
 
405
+ .fotorama__nav__frame.fotorama__active {
406
+ pointer-events: none;
407
+ cursor: default;
408
+ }
409
+
398
410
  .fotorama__nav__frame.fotorama__active .fotorama__dot {
399
411
  width: 6px;
400
412
  height: 6px;
@@ -454,6 +466,10 @@
454
466
  border-color: rgba(51, 51, 51, 0.5);
455
467
  }
456
468
 
469
+ .fotorama__wrap--video .fotorama__caption {
470
+ display: none;
471
+ }
472
+
457
473
  .fotorama__oooo {
458
474
  width: 6px;
459
475
  height: 6px;
@@ -489,6 +505,17 @@
489
505
  background-color: #7f7f7f;
490
506
  }
491
507
 
508
+ .fotorama__wrap--css3 .fotorama__stage__shaft,
509
+ .fotorama__wrap--css3 .fotorama__nav__shaft,
510
+ .fotorama__wrap--css3 .fotorama__thumb-border,
511
+ .fotorama__wrap--css3 .fotorama__stage__frame,
512
+ .fotorama__wrap--css3 .fotorama__nav__frame,
513
+ .fotorama__wrap--css3 .fotorama__img,
514
+ .fotorama__wrap--css3 .fotorama__html,
515
+ .fotorama__wrap--css3 .fotorama__caption {
516
+ -webkit-backface-visibility: hidden;
517
+ }
518
+
492
519
  .fotorama__wrap--css3 .fotorama__img,
493
520
  .fotorama__wrap--css3 .fotorama__html,
494
521
  .fotorama__wrap--css3.fotorama__wrap--fade .fotorama__stage__frame,
@@ -497,8 +524,8 @@
497
524
  transition-property: opacity;
498
525
  -webkit-transition-timing-function: linear;
499
526
  transition-timing-function: linear;
500
- -webkit-transition-duration: 300ms;
501
- transition-duration: 300ms;
527
+ -webkit-transition-duration: 0.3s;
528
+ transition-duration: 0.3s;
502
529
  }
503
530
 
504
531
  .fotorama__select {
@@ -566,6 +593,7 @@
566
593
  }
567
594
 
568
595
  .fotorama__arr--disabled {
596
+ pointer-events: none;
569
597
  cursor: default;
570
598
  *display: none;
571
599
  -webkit-filter: alpha(opacity=0);
@@ -675,8 +703,10 @@
675
703
  .fotorama__wrap--css3 .fotorama__fullscreen-icon,
676
704
  .fotorama__wrap--css3 .fotorama__video-play,
677
705
  .fotorama__wrap--css3 .fotorama__video-close {
678
- -webkit-transition: all 300ms;
679
- transition: all 300ms;
706
+ -webkit-transition-property: top, right, left, opacity;
707
+ transition-property: top, right, left, opacity;
708
+ -webkit-transition-duration: 0.3s;
709
+ transition-duration: 0.3s;
680
710
  }
681
711
 
682
712
  .fotorama__stage:before,
@@ -692,6 +722,7 @@
692
722
  width: 10px;
693
723
  height: auto;
694
724
  z-index: 10;
725
+ pointer-events: none;
695
726
  background-repeat: no-repeat;
696
727
  background-size: 1px 100%, 5px 100%;
697
728
  }
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fotoramajs
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.3.0.1
4
+ version: 4.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-08-10 00:00:00.000000000 Z
12
+ date: 2013-08-27 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: sprockets
@@ -59,7 +59,6 @@ files:
59
59
  - Rakefile
60
60
  - fotoramajs.gemspec
61
61
  - lib/fotoramajs.rb
62
- - lib/fotoramajs/updater.rb
63
62
  - lib/fotoramajs/version.rb
64
63
  - vendor/assets/images/fotorama.png
65
64
  - vendor/assets/images/fotorama@2x.png
@@ -80,7 +79,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
80
79
  version: '0'
81
80
  segments:
82
81
  - 0
83
- hash: -4232618440572528776
82
+ hash: -3717274209991928291
84
83
  required_rubygems_version: !ruby/object:Gem::Requirement
85
84
  none: false
86
85
  requirements:
@@ -89,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
89
88
  version: '0'
90
89
  segments:
91
90
  - 0
92
- hash: -4232618440572528776
91
+ hash: -3717274209991928291
93
92
  requirements: []
94
93
  rubyforge_project:
95
94
  rubygems_version: 1.8.23
@@ -1,78 +0,0 @@
1
- require "json"
2
- require "httpclient"
3
-
4
- class Updater
5
- def self.update
6
- instance = new
7
-
8
- puts "Fetching tags"
9
- tag = instance.github_tags('artpolikarpov/fotorama').last
10
-
11
- puts "Load Fotorama #{tag}"
12
- instance.fetch(tag)
13
-
14
- puts "Convert CSS to SCSS"
15
- instance.convert
16
-
17
- puts "Update gem version"
18
- instance.update_version(tag)
19
-
20
- puts "Done."
21
- end
22
-
23
- def fetch(tag)
24
- cdn = "http://fotorama.s3.amazonaws.com/#{tag}"
25
- %w(fotorama.js fotorama.css fotorama.png fotorama@2x.png).each do |file|
26
- from = "#{cdn}/#{file}".sub(/(.css|.js)$/, '.uncompressed\\1')
27
- get from, asset(file)
28
- end
29
- end
30
-
31
- def update_version(tag)
32
- version_file.open('w') do |io|
33
- io << "module Fotoramajs\n VERSION = \"#{tag}\"\nend\n"
34
- end
35
- end
36
-
37
- def convert
38
- css = asset('fotorama.css')
39
- scss = asset('fotorama.css.scss')
40
-
41
- scss.open('w') do |io|
42
- io << css.read.gsub(/url\(/, 'image-url(')
43
- end
44
-
45
- css.delete
46
- end
47
-
48
- def asset(file)
49
- @assets ||= Pathname(__FILE__).dirname.join('../../vendor/assets')
50
-
51
- if file.end_with? '.css' or file.end_with? '.scss'
52
- @assets.join('stylesheets', file)
53
- elsif file.end_with? '.js'
54
- @assets.join('javascripts', file)
55
- else
56
- @assets.join('images', file)
57
- end
58
- end
59
-
60
- def version_file
61
- @version ||= Pathname(__FILE__).dirname.join('version.rb')
62
- end
63
-
64
- def github_tags(repo)
65
- http = HTTPClient.new
66
- body = http.get("https://api.github.com/repos/#{repo}/tags").body
67
- response = JSON.parse(body)
68
- response.map { |tag| Gem::Version.new(tag['name']) }.sort
69
- end
70
-
71
- def get(url, to)
72
- to.open('w') do |io|
73
- http = HTTPClient.new
74
- http.transparent_gzip_decompression = true
75
- io << http.get(url).body
76
- end
77
- end
78
- end