Gallery Carousel Without JetPack - Version 0.5

Version Description

  • Updated it to match original JetPack plugin updates from 2.1.2
Download this release

Release Info

Developer smub
Plugin Icon 128x128 Gallery Carousel Without JetPack
Version 0.5
Comparing to
See all releases

Code changes from version 0.4 to 0.5

images/carousel-sprite-2x.png CHANGED
Binary file
images/carousel-sprite.png CHANGED
Binary file
jetpack-carousel-ie8fix.css ADDED
@@ -0,0 +1,8 @@
 
 
 
 
 
 
 
 
1
+ .jp-carousel .jp-carousel-slide {
2
+ display: none !important;
3
+ }
4
+
5
+ .jp-carousel .selected {
6
+ margin: 0 auto;
7
+ display: block !important;
8
+ }
jetpack-carousel.css CHANGED
@@ -11,7 +11,7 @@ div.jp-carousel-fadeaway {
11
  background: -webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0)));
12
  position: fixed;
13
  bottom: 0;
14
- z-index: 99999;
15
  width: 100%;
16
  height: 15px;
17
  }
@@ -199,13 +199,11 @@ div.jp-carousel-buttons a:hover {
199
  .jp-carousel-close-hint {
200
  color: #999;
201
  cursor: default;
202
- font: 24px/1 "Helvetica Neue", sans-serif !important;
203
- font-weight: 600 !important;
204
  letter-spacing: 0 !important;
205
- padding:0.55em 0 0;
 
206
  text-align: left;
207
  width: 100%;
208
- position: absolute;
209
  -webkit-transition: color 200ms linear;
210
  -moz-transition: color 200ms linear;
211
  -o-transition: color 200ms linear;
@@ -213,16 +211,17 @@ div.jp-carousel-buttons a:hover {
213
  }
214
 
215
  .jp-carousel-close-hint span {
216
- cursor:pointer;
217
  background-color: black;
218
  background-color: rgba(0,0,0,0.8);
219
- height: 26px;
220
- width: 26px;
221
  display: block;
222
- text-align: center;
223
- vertical-align: middle;
224
  line-height: 22px;
225
  margin: 0 0 0 0.4em;
 
 
 
226
  -moz-border-radius: 4px;
227
  -webkit-border-radius: 4px;
228
  border-radius: 4px;
@@ -245,7 +244,7 @@ div.jp-carousel-buttons a.jp-carousel-like,
245
  div.jp-carousel-buttons a.jp-carousel-reblog,
246
  div.jp-carousel-buttons a.jp-carousel-commentlink,
247
  a.jp-carousel-image-download {
248
- background: url(./images/carousel-sprite.png) no-repeat;
249
  background-size: 16px 160px;
250
  }
251
 
@@ -310,7 +309,7 @@ only screen and (min-device-pixel-ratio: 1.5) {
310
  div.jp-carousel-buttons a.jp-carousel-reblog,
311
  div.jp-carousel-buttons a.jp-carousel-commentlink,
312
  a.jp-carousel-image-download {
313
- background-image: url(./images/carousel-sprite-2x.png);
314
  }
315
  }
316
 
11
  background: -webkit-gradient(linear, left bottom, left top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0)));
12
  position: fixed;
13
  bottom: 0;
14
+ z-index: 2147483647;
15
  width: 100%;
16
  height: 15px;
17
  }
199
  .jp-carousel-close-hint {
200
  color: #999;
201
  cursor: default;
 
 
202
  letter-spacing: 0 !important;
203
+ padding:0.35em 0 0;
204
+ position: absolute;
205
  text-align: left;
206
  width: 100%;
 
207
  -webkit-transition: color 200ms linear;
208
  -moz-transition: color 200ms linear;
209
  -o-transition: color 200ms linear;
211
  }
212
 
213
  .jp-carousel-close-hint span {
214
+ cursor: pointer;
215
  background-color: black;
216
  background-color: rgba(0,0,0,0.8);
 
 
217
  display: block;
218
+ height: 22px;
219
+ font: 400 24px/1 "Helvetica Neue", sans-serif !important;
220
  line-height: 22px;
221
  margin: 0 0 0 0.4em;
222
+ text-align: center;
223
+ vertical-align: middle;
224
+ width: 22px;
225
  -moz-border-radius: 4px;
226
  -webkit-border-radius: 4px;
227
  border-radius: 4px;
244
  div.jp-carousel-buttons a.jp-carousel-reblog,
245
  div.jp-carousel-buttons a.jp-carousel-commentlink,
246
  a.jp-carousel-image-download {
247
+ background: url(./images/carousel-sprite.png?4) no-repeat;
248
  background-size: 16px 160px;
249
  }
250
 
309
  div.jp-carousel-buttons a.jp-carousel-reblog,
310
  div.jp-carousel-buttons a.jp-carousel-commentlink,
311
  a.jp-carousel-image-download {
312
+ background-image: url(./images/carousel-sprite-2x.png?4);
313
  }
314
  }
315
 
jetpack-carousel.js CHANGED
@@ -5,9 +5,9 @@ jQuery(document).ready(function($) {
5
  var overlay, comments, gallery, container, nextButton, previousButton, info, title,
6
  caption, resizeTimeout, mouseTimeout, photo_info, close_hint, commentInterval, buttons,
7
  screenPadding = 110, originalOverflow = $('body').css('overflow'), proportion = 85, isMobile;
8
-
9
  isMobile = /Android|iPhone|iPod/i.test(navigator.userAgent);
10
-
11
  if (isMobile)
12
  screenPadding = 0;
13
 
@@ -69,7 +69,7 @@ jQuery(document).ready(function($) {
69
 
70
  buttons = '<a class="jp-carousel-commentlink" href="#">' + jetpackCarouselStrings.comment + '</a>';
71
  buttons = $('<div class="jp-carousel-buttons">' + buttons + '</div>');
72
-
73
  caption = $('<h2></h2>');
74
  photo_info = $('<div class="jp-carousel-photo-info"></div>').append(caption);
75
 
@@ -132,14 +132,14 @@ jQuery(document).ready(function($) {
132
  'bottom' : '10px',
133
  'margin-top' : '20px'
134
  });
135
-
136
  leftWidth = ( $(window).width() - ( screenPadding * 2 ) ) - (imageMeta.width() + 40);
137
  if ( $.browser.mozilla )
138
  leftWidth -= 55;
139
  else if ( $.browser.msie )
140
  leftWidth -= 20;
141
  leftWidth += 'px';
142
-
143
  if (isMobile)
144
  leftWidth = '100%';
145
 
@@ -155,7 +155,7 @@ jQuery(document).ready(function($) {
155
 
156
  fadeaway = $('<div></div>')
157
  .addClass('jp-carousel-fadeaway');
158
-
159
  info = $('<div></div>')
160
  .addClass('jp-carousel-info')
161
  .css({
@@ -166,7 +166,7 @@ jQuery(document).ready(function($) {
166
  .append(photo_info)
167
  .append(imageMeta)
168
  .append(leftColWrapper);
169
-
170
  if (isMobile)
171
  info.prepend(leftColWrapper);
172
  else
@@ -188,7 +188,7 @@ jQuery(document).ready(function($) {
188
  'top' : '40px',
189
  'bottom' : targetBottomPos
190
  });
191
-
192
  previousButton = $("<div><span></span></div>")
193
  .addClass('jp-carousel-previous-button')
194
  .css({
@@ -203,7 +203,7 @@ jQuery(document).ready(function($) {
203
  'top' : '40px',
204
  'bottom' : targetBottomPos
205
  });
206
-
207
  gallery = $('<div></div>')
208
  .addClass('jp-carousel')
209
  .css({
@@ -218,20 +218,20 @@ jQuery(document).ready(function($) {
218
  .css({
219
  position : 'fixed'
220
  });
221
-
222
  container = $("<div></div>")
223
  .addClass('jp-carousel-wrap');
224
-
225
  if ( 'white' == jetpackCarouselStrings.background_color )
226
  container.addClass('jp-carousel-light');
227
-
228
  container.css({
229
  'position' : 'fixed',
230
  'top' : 0,
231
  'right' : 0,
232
  'bottom' : 0,
233
  'left' : 0,
234
- 'z-index' : 999999,
235
  'overflow-x' : 'hidden',
236
  'overflow-y' : 'auto',
237
  'direction' : 'ltr'
@@ -328,7 +328,7 @@ jQuery(document).ready(function($) {
328
  return;
329
  }
330
  }
331
-
332
  $.ajax({
333
  type: 'POST',
334
  url: jetpackCarouselStrings.ajaxurl,
@@ -362,6 +362,7 @@ jQuery(document).ready(function($) {
362
  .bind('jp_carousel.afterOpen', function(){
363
  $(window).bind('keydown', keyListener);
364
  $(window).bind('resize', resizeListener);
 
365
  })
366
  .bind('jp_carousel.beforeClose', function(){
367
  var scroll = $(window).scrollTop();
@@ -370,8 +371,9 @@ jQuery(document).ready(function($) {
370
  $(window).unbind('resize', resizeListener);
371
  document.location.hash = '';
372
  $(window).scrollTop(scroll);
 
373
  });
374
-
375
  $('.jp-carousel').touchwipe({
376
  wipeLeft: function() { gallery.jp_carousel('next'); },
377
  wipeRight: function() { gallery.jp_carousel('previous'); },
@@ -393,6 +395,19 @@ jQuery(document).ready(function($) {
393
  };
394
 
395
  var methods = {
 
 
 
 
 
 
 
 
 
 
 
 
 
396
  open: function(options) {
397
  var settings = {
398
  'items_selector' : ".gallery-item [data-attachment-id], .tiled-gallery-item [data-attachment-id]",
@@ -403,12 +418,16 @@ jQuery(document).ready(function($) {
403
  if ( !data )
404
  return; // don't run if the default gallery functions weren't used
405
 
 
 
 
 
 
406
  // make sure to stop the page from scrolling behind the carousel overlay, so we don't trigger
407
  // infiniscroll for it when enabled (Reader, theme infiniscroll, etc).
408
  originalOverflow = $('body').css('overflow');
409
  $('body').css('overflow', 'hidden');
410
-
411
- prepareGallery();
412
  container.data('carousel-extra', data);
413
 
414
  return this.each(function() {
@@ -436,7 +455,7 @@ jQuery(document).ready(function($) {
436
 
437
  if ( 0 === selected.length )
438
  selected = slides.eq(0);
439
-
440
  gallery.jp_carousel('selectSlide', selected, false);
441
  return this;
442
  },
@@ -519,7 +538,7 @@ jQuery(document).ready(function($) {
519
  selectedSlide : function(){
520
  return this.find('.selected');
521
  },
522
-
523
  setSlidePosition : function(x) {
524
  return this.css({
525
  '-webkit-transform':'translate3d(' + x + 'px,0,0)',
@@ -544,7 +563,7 @@ jQuery(document).ready(function($) {
544
  animated,
545
  info_min;
546
  // center the main image
547
-
548
  caption.hide();
549
 
550
  method = 'css';
@@ -572,7 +591,7 @@ jQuery(document).ready(function($) {
572
  previous.jp_carousel('setSlidePosition', -previous.width() - current.width()).show();
573
  next_next.jp_carousel('setSlidePosition', gallery.width() + current.width()).show();
574
  }
575
-
576
  // if advancing prepare the slide that will enter the screen
577
  previous.jp_carousel('setSlidePosition', -previous.width() + (screenPadding * 0.75)).show();
578
  next.jp_carousel('setSlidePosition', gallery.width() - (screenPadding * 0.75)).show();
@@ -582,7 +601,7 @@ jQuery(document).ready(function($) {
582
  container.trigger('jp_carousel.selectSlide', [current]);
583
 
584
  $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' ).html('');
585
-
586
  gallery.jp_carousel('getTitleDesc', { title: current.data('title'), desc: current.data('desc') } );
587
  gallery.jp_carousel('getMeta', current.data('image-meta'));
588
  gallery.jp_carousel('getFullSizeLink', current);
@@ -591,7 +610,7 @@ jQuery(document).ready(function($) {
591
  gallery.jp_carousel('getComments', {'attachment_id': current.data('attachment-id'), 'offset': 0, 'clear': true});
592
 
593
  $('#jp-carousel-comment-post-results').slideUp();
594
-
595
  // $('<div />').html(sometext).text() is a trick to go to HTML to plain text (including HTML emntities decode, etc)
596
  if ( current.data('caption') ) {
597
  if ( $('<div />').html(current.data('caption')).text() == $('<div />').html(current.data('title')).text() )
@@ -665,19 +684,19 @@ jQuery(document).ready(function($) {
665
  'left' : (info.width() - size.width) * 0.5,
666
  'width' : size.width
667
  });
668
-
669
  if (isMobile){
670
  photo_info.css('left', '0px');
671
  photo_info.css('top', '-20px');
672
  }
673
-
674
  return this;
675
  },
676
 
677
  fitMeta : function(animated){
678
  var newInfoTop = { top: ( $(window).height() / 100 * proportion + 5 ) + 'px' };
679
  var newLeftWidth = { width: ( info.width() - (imageMeta.width() + 80) ) + 'px' };
680
-
681
  if (animated) {
682
  info.animate(newInfoTop);
683
  leftColWrapper.animate(newLeftWidth);
@@ -702,6 +721,7 @@ jQuery(document).ready(function($) {
702
  },
703
 
704
  texturize : function(text) {
 
705
  text = text.replace(/'/g, '&#8217;').replace(/&#039;/g, '&#8217;').replace(/[\u2019]/g, '&#8217;');
706
  text = text.replace(/"/g, '&#8221;').replace(/&#034;/g, '&#8221;').replace(/&quot;/g, '&#8221;').replace(/[\u201D]/g, '&#8221;');
707
  text = text.replace(/([\w]+)=&#[\d]+;(.+?)&#[\d]+;/g, '$1="$2"'); // untexturize allowed HTML tags params double-quotes
@@ -715,7 +735,7 @@ jQuery(document).ready(function($) {
715
  // Calculate the new src.
716
  items.each(function(i){
717
  var src_item = $(this),
718
- orig_size = src_item.data('orig-size') || 0,
719
  max = gallery.jp_carousel('slideDimensions'),
720
  parts = orig_size.split(',');
721
  orig_size = {width: parseInt(parts[0], 10), height: parseInt(parts[1], 10)},
@@ -723,7 +743,7 @@ jQuery(document).ready(function($) {
723
  large_file = src_item.data('large-file') || '';
724
 
725
  src = src_item.data('orig-file');
726
-
727
  src = gallery.jp_carousel('selectBestImageSize', {
728
  orig_file : src,
729
  orig_width : orig_size.width,
@@ -733,7 +753,7 @@ jQuery(document).ready(function($) {
733
  medium_file : medium_file,
734
  large_file : large_file
735
  });
736
-
737
  // Set the final src
738
  $(this).data( 'gallery-src', src );
739
  });
@@ -748,8 +768,8 @@ jQuery(document).ready(function($) {
748
  attachment_id = src_item.data('attachment-id') || 0,
749
  comments_opened = src_item.data('comments-opened') || 0,
750
  image_meta = src_item.data('image-meta') || {},
751
- orig_size = src_item.data('orig-size') || 0,
752
- title = src_item.attr('title') || '',
753
  description = src_item.data('image-description') || '',
754
  caption = src_item.parents('dl').find('dd.gallery-caption').html() || '',
755
  src = src_item.data('gallery-src') || '',
@@ -761,38 +781,36 @@ jQuery(document).ready(function($) {
761
  if ( tiledCaption )
762
  caption = tiledCaption;
763
 
764
- if ( !attachment_id || !orig_size )
765
- return false; // break the loop if we are missing the data-* attributes
766
-
767
- title = gallery.jp_carousel('texturize', title);
768
- description = gallery.jp_carousel('texturize', description);
769
- caption = gallery.jp_carousel('texturize', caption);
770
-
771
- var slide = $('<div class="jp-carousel-slide"></div>')
772
- .hide()
773
- .css({
774
- 'position' : 'fixed',
775
- 'left' : i < start_index ? -1000 : gallery.width()
776
- })
777
- .append($('<img>'))
778
- .appendTo(gallery)
779
- .data('src', src )
780
- .data('title', title)
781
- .data('desc', description)
782
- .data('caption', caption)
783
- .data('attachment-id', attachment_id)
784
- .data('permalink', src_item.parents('a').attr('href'))
785
- .data('orig-size', orig_size)
786
- .data('comments-opened', comments_opened)
787
- .data('image-meta', image_meta)
788
- .data('medium-file', medium_file)
789
- .data('large-file', large_file)
790
- .data('orig-file', orig_file)
791
- .jp_carousel('fitSlide', false);
792
-
793
-
794
- // Preloading all images
795
- slide.find('img').first().attr('src', src );
796
  });
797
  return this;
798
  },
@@ -800,13 +818,13 @@ jQuery(document).ready(function($) {
800
  selectBestImageSize: function(args) {
801
  if ( 'object' != typeof args )
802
  args = {};
803
-
804
  if ( 'undefined' == typeof args.orig_file )
805
  return '';
806
-
807
  if ( 'undefined' == typeof args.orig_width || 'undefined' == typeof args.max_width )
808
  return args.orig_file;
809
-
810
  if ( 'undefined' == typeof args.medium_file || 'undefined' == typeof args.large_file )
811
  return args.orig_file;
812
 
@@ -818,19 +836,19 @@ jQuery(document).ready(function($) {
818
  large_size_parts = (large_size != args.large_file) ? large_size.split('x') : [args.orig_width, 0],
819
  large_width = parseInt( large_size_parts[0], 10 ),
820
  large_height = parseInt( large_size_parts[1], 10 );
821
-
822
  // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
823
  if ('undefined' != typeof window.devicePixelRatio && window.devicePixelRatio > 1) {
824
  args.max_width = args.max_width * window.devicePixelRatio;
825
  args.max_height = args.max_height * window.devicePixelRatio;
826
  }
827
 
828
- if ( medium_width >= args.max_width || medium_height >= args.max_height )
829
- return args.medium_file;
830
-
831
  if ( large_width >= args.max_width || large_height >= args.max_height )
832
  return args.large_file;
833
 
 
 
 
834
  return args.orig_file;
835
  },
836
 
@@ -847,14 +865,14 @@ jQuery(document).ready(function($) {
847
  return;
848
  if ( ! args.replacements || 'undefined' == typeof args.replacements )
849
  return args.text;
850
- return args.text.replace(/{(\d+)}/g, function(match, number) {
851
  return typeof args.replacements[number] != 'undefined' ? args.replacements[number] : match;
852
  });
853
  },
854
 
855
  shutterSpeed: function(d) {
856
  if (d >= 1)
857
- Math.round(d) + 's';
858
  var df = 1, top = 1, bot = 1;
859
  var limit = 1e5; //Increase for greater precision.
860
  while (df != d && limit-- > 0) {
@@ -908,16 +926,16 @@ jQuery(document).ready(function($) {
908
  });
909
  return value;
910
  },
911
-
912
  getTitleDesc: function( data ) {
913
  var title ='', desc = '', markup = '', target, commentWrappere;
914
-
915
  target = $( 'div.jp-carousel-titleanddesc', 'div.jp-carousel-wrap' );
916
  target.hide();
917
-
918
  title = gallery.jp_carousel('parseTitleDesc', data.title) || '';
919
  desc = gallery.jp_carousel('parseTitleDesc', data.desc) || '';
920
-
921
  if ( title.length || desc.length ) {
922
  // $('<div />').html(sometext).text() is a trick to go to HTML to plain text (including HTML emntities decode, etc)
923
  if ( $('<div />').html(title).text() == $('<div />').html(desc).text() )
@@ -932,16 +950,16 @@ jQuery(document).ready(function($) {
932
  $( 'div#jp-carousel-comment-form-container' ).css('margin-top', '20px');
933
  $( 'div#jp-carousel-comments-loading' ).css('margin-top', '20px');
934
  },
935
-
936
  getMeta: function( meta ) {
937
  if ( !meta || 1 != jetpackCarouselStrings.display_exif )
938
  return false;
939
-
940
  var $ul = $( '<ul></ul>' );
941
  $.each( meta, function( key, val ) {
942
  if ( 0 === parseFloat(val) || !val.length || -1 === $.inArray( key, [ 'camera', 'aperture', 'shutter_speed', 'focal_length' ] ) )
943
  return;
944
-
945
  switch( key ) {
946
  case 'focal_length':
947
  val = val + 'mm';
@@ -956,7 +974,7 @@ jQuery(document).ready(function($) {
956
  // making jslint happy
957
  break;
958
  }
959
-
960
  $ul.append( '<li><h5>' + jetpackCarouselStrings[key] + '</h5>' + val + '</li>' );
961
  });
962
 
@@ -976,17 +994,17 @@ jQuery(document).ready(function($) {
976
  .addClass( 'jp-carousel-image-download' )
977
  .attr( 'href', original )
978
  .attr( 'target', '_blank' );
979
-
980
  $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' )
981
  .append( permalink );
982
  },
983
-
984
  getMap: function( meta ) {
985
  if ( !meta.latitude || !meta.longitude || 1 != jetpackCarouselStrings.display_geo )
986
  return;
987
-
988
- var latitude = meta.latitude,
989
- longitude = meta.longitude,
990
  $metabox = $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' ),
991
  $mapbox = $( '<div></div>' ),
992
  style = '&scale=2&style=feature:all|element:all|invert_lightness:true|hue:0x0077FF|saturation:-50|lightness:-5|gamma:0.91';
@@ -1024,23 +1042,23 @@ jQuery(document).ready(function($) {
1024
  getComments: function( args ) {
1025
  if ( 'object' != typeof args )
1026
  args = {};
1027
-
1028
  if ( ! args.attachment_id || 'undefined' == typeof args.attachment_id )
1029
  return;
1030
-
1031
  if ( ! args.offset || 'undefined' == typeof args.offset || args.offset < 1 )
1032
  args.offset = 0;
1033
-
1034
  var comments = $('.jp-carousel-comments'),
1035
  commentsLoading = $('#jp-carousel-comments-loading');
1036
-
1037
  commentsLoading.show();
1038
-
1039
  if ( args.clear ) {
1040
  comments.hide();
1041
  comments.empty();
1042
  }
1043
-
1044
  $.ajax({
1045
  type: 'GET',
1046
  url: jetpackCarouselStrings.ajaxurl,
@@ -1077,7 +1095,7 @@ jQuery(document).ready(function($) {
1077
  + '</div>'
1078
  );
1079
  comments.append(comment);
1080
-
1081
  // Set the interval to check for a new page of comments.
1082
  clearInterval( commentInterval );
1083
  commentInterval = setInterval( function() {
@@ -1087,7 +1105,7 @@ jQuery(document).ready(function($) {
1087
  }
1088
  }, 150 );
1089
  });
1090
-
1091
  // Verify (late) that the user didn't repeatldy click the arrows really fast, in which case the requested
1092
  // attachment id might no longer match the current attachment id by the time we get the data back or a now
1093
  // registered infiniscroll event kicks in, so we don't ever display comments for the wrong image by mistake.
@@ -1100,7 +1118,7 @@ jQuery(document).ready(function($) {
1100
 
1101
  // Increase the height of the background, semi-transparent overlay to match the new length of the comments list.
1102
  $('.jp-carousel-overlay').height( $(window).height() + titleAndDescription.height() + commentForm.height() + ( (comments.height() > 0) ? comments.height() : imageMeta.height() ) + 200 );
1103
-
1104
  comments.show();
1105
  commentsLoading.hide();
1106
  },
@@ -1151,19 +1169,29 @@ jQuery(document).ready(function($) {
1151
 
1152
  };
1153
 
1154
- // register the event listener for staring the gallery
1155
  $( document.body ).on( 'click', 'div.gallery,div.tiled-gallery', function(e) {
 
 
1156
  if ( $(e.target).parent().hasClass('gallery-caption') )
1157
  return;
1158
  e.preventDefault();
1159
  $(this).jp_carousel('open', {start_index: $(this).find('.gallery-item, .tiled-gallery-item').index($(e.target).parents('.gallery-item, .tiled-gallery-item'))});
1160
  });
1161
 
1162
- // start on page load if hash exists
1163
- if ( document.location.hash && document.location.hash.match(/jp-carousel-(\d+)/) ) {
1164
- $(document).ready(function(){
 
 
 
 
 
1165
  var gallery = $('div.gallery, div.tiled-gallery'), index = -1, n = document.location.hash.match(/jp-carousel-(\d+)/);
1166
 
 
 
 
1167
  n = parseInt(n[1], 10);
1168
 
1169
  gallery.find('img').each(function(num, el){
@@ -1174,11 +1202,10 @@ jQuery(document).ready(function($) {
1174
  });
1175
 
1176
  if ( index != -1 )
1177
- gallery.jp_carousel('open', {start_index: index});
1178
- });
1179
- }
1180
  });
1181
 
1182
  // Swipe gesture detection
1183
  (function($){$.fn.touchwipe=function(settings){var config={min_move_x:20,min_move_y:20,wipeLeft:function(){},wipeRight:function(){},wipeUp:function(){},wipeDown:function(){},preventDefaultEvents:true};if(settings)$.extend(config,settings);this.each(function(){var startX;var startY;var isMoving=false;function cancelTouch(){this.removeEventListener('touchmove',onTouchMove);startX=null;isMoving=false}function onTouchMove(e){if(config.preventDefaultEvents){e.preventDefault()}if(isMoving){var x=e.touches[0].pageX;var y=e.touches[0].pageY;var dx=startX-x;var dy=startY-y;if(Math.abs(dx)>=config.min_move_x){cancelTouch();if(dx>0){config.wipeLeft()}else{config.wipeRight()}}else if(Math.abs(dy)>=config.min_move_y){cancelTouch();if(dy>0){config.wipeDown()}else{config.wipeUp()}}}}function onTouchStart(e){if(e.touches.length==1){startX=e.touches[0].pageX;startY=e.touches[0].pageY;isMoving=true;this.addEventListener('touchmove',onTouchMove,false)}}if('ontouchstart'in document.documentElement){this.addEventListener('touchstart',onTouchStart,false)}});return this}})(jQuery);
1184
-
5
  var overlay, comments, gallery, container, nextButton, previousButton, info, title,
6
  caption, resizeTimeout, mouseTimeout, photo_info, close_hint, commentInterval, buttons,
7
  screenPadding = 110, originalOverflow = $('body').css('overflow'), proportion = 85, isMobile;
8
+
9
  isMobile = /Android|iPhone|iPod/i.test(navigator.userAgent);
10
+
11
  if (isMobile)
12
  screenPadding = 0;
13
 
69
 
70
  buttons = '<a class="jp-carousel-commentlink" href="#">' + jetpackCarouselStrings.comment + '</a>';
71
  buttons = $('<div class="jp-carousel-buttons">' + buttons + '</div>');
72
+
73
  caption = $('<h2></h2>');
74
  photo_info = $('<div class="jp-carousel-photo-info"></div>').append(caption);
75
 
132
  'bottom' : '10px',
133
  'margin-top' : '20px'
134
  });
135
+
136
  leftWidth = ( $(window).width() - ( screenPadding * 2 ) ) - (imageMeta.width() + 40);
137
  if ( $.browser.mozilla )
138
  leftWidth -= 55;
139
  else if ( $.browser.msie )
140
  leftWidth -= 20;
141
  leftWidth += 'px';
142
+
143
  if (isMobile)
144
  leftWidth = '100%';
145
 
155
 
156
  fadeaway = $('<div></div>')
157
  .addClass('jp-carousel-fadeaway');
158
+
159
  info = $('<div></div>')
160
  .addClass('jp-carousel-info')
161
  .css({
166
  .append(photo_info)
167
  .append(imageMeta)
168
  .append(leftColWrapper);
169
+
170
  if (isMobile)
171
  info.prepend(leftColWrapper);
172
  else
188
  'top' : '40px',
189
  'bottom' : targetBottomPos
190
  });
191
+
192
  previousButton = $("<div><span></span></div>")
193
  .addClass('jp-carousel-previous-button')
194
  .css({
203
  'top' : '40px',
204
  'bottom' : targetBottomPos
205
  });
206
+
207
  gallery = $('<div></div>')
208
  .addClass('jp-carousel')
209
  .css({
218
  .css({
219
  position : 'fixed'
220
  });
221
+
222
  container = $("<div></div>")
223
  .addClass('jp-carousel-wrap');
224
+
225
  if ( 'white' == jetpackCarouselStrings.background_color )
226
  container.addClass('jp-carousel-light');
227
+
228
  container.css({
229
  'position' : 'fixed',
230
  'top' : 0,
231
  'right' : 0,
232
  'bottom' : 0,
233
  'left' : 0,
234
+ 'z-index' : 2147483647,
235
  'overflow-x' : 'hidden',
236
  'overflow-y' : 'auto',
237
  'direction' : 'ltr'
328
  return;
329
  }
330
  }
331
+
332
  $.ajax({
333
  type: 'POST',
334
  url: jetpackCarouselStrings.ajaxurl,
362
  .bind('jp_carousel.afterOpen', function(){
363
  $(window).bind('keydown', keyListener);
364
  $(window).bind('resize', resizeListener);
365
+ gallery.opened = true;
366
  })
367
  .bind('jp_carousel.beforeClose', function(){
368
  var scroll = $(window).scrollTop();
371
  $(window).unbind('resize', resizeListener);
372
  document.location.hash = '';
373
  $(window).scrollTop(scroll);
374
+ gallery.opened = false;
375
  });
376
+
377
  $('.jp-carousel').touchwipe({
378
  wipeLeft: function() { gallery.jp_carousel('next'); },
379
  wipeRight: function() { gallery.jp_carousel('previous'); },
395
  };
396
 
397
  var methods = {
398
+ testForData: function(gallery) {
399
+ gallery = $( gallery ); // make sure we have it as a jQuery object.
400
+ if ( ! gallery.length || undefined == gallery.data( 'carousel-extra' ) )
401
+ return false;
402
+ return true;
403
+ },
404
+
405
+ testIfOpened: function() {
406
+ if ( 'undefined' != typeof(gallery) && 'undefined' != typeof(gallery.opened) && true == gallery.opened )
407
+ return true;
408
+ return false;
409
+ },
410
+
411
  open: function(options) {
412
  var settings = {
413
  'items_selector' : ".gallery-item [data-attachment-id], .tiled-gallery-item [data-attachment-id]",
418
  if ( !data )
419
  return; // don't run if the default gallery functions weren't used
420
 
421
+ prepareGallery();
422
+
423
+ if ( gallery.jp_carousel( 'testIfOpened' ) )
424
+ return; // don't open if already opened
425
+
426
  // make sure to stop the page from scrolling behind the carousel overlay, so we don't trigger
427
  // infiniscroll for it when enabled (Reader, theme infiniscroll, etc).
428
  originalOverflow = $('body').css('overflow');
429
  $('body').css('overflow', 'hidden');
430
+
 
431
  container.data('carousel-extra', data);
432
 
433
  return this.each(function() {
455
 
456
  if ( 0 === selected.length )
457
  selected = slides.eq(0);
458
+
459
  gallery.jp_carousel('selectSlide', selected, false);
460
  return this;
461
  },
538
  selectedSlide : function(){
539
  return this.find('.selected');
540
  },
541
+
542
  setSlidePosition : function(x) {
543
  return this.css({
544
  '-webkit-transform':'translate3d(' + x + 'px,0,0)',
563
  animated,
564
  info_min;
565
  // center the main image
566
+
567
  caption.hide();
568
 
569
  method = 'css';
591
  previous.jp_carousel('setSlidePosition', -previous.width() - current.width()).show();
592
  next_next.jp_carousel('setSlidePosition', gallery.width() + current.width()).show();
593
  }
594
+
595
  // if advancing prepare the slide that will enter the screen
596
  previous.jp_carousel('setSlidePosition', -previous.width() + (screenPadding * 0.75)).show();
597
  next.jp_carousel('setSlidePosition', gallery.width() - (screenPadding * 0.75)).show();
601
  container.trigger('jp_carousel.selectSlide', [current]);
602
 
603
  $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' ).html('');
604
+
605
  gallery.jp_carousel('getTitleDesc', { title: current.data('title'), desc: current.data('desc') } );
606
  gallery.jp_carousel('getMeta', current.data('image-meta'));
607
  gallery.jp_carousel('getFullSizeLink', current);
610
  gallery.jp_carousel('getComments', {'attachment_id': current.data('attachment-id'), 'offset': 0, 'clear': true});
611
 
612
  $('#jp-carousel-comment-post-results').slideUp();
613
+
614
  // $('<div />').html(sometext).text() is a trick to go to HTML to plain text (including HTML emntities decode, etc)
615
  if ( current.data('caption') ) {
616
  if ( $('<div />').html(current.data('caption')).text() == $('<div />').html(current.data('title')).text() )
684
  'left' : (info.width() - size.width) * 0.5,
685
  'width' : size.width
686
  });
687
+
688
  if (isMobile){
689
  photo_info.css('left', '0px');
690
  photo_info.css('top', '-20px');
691
  }
692
+
693
  return this;
694
  },
695
 
696
  fitMeta : function(animated){
697
  var newInfoTop = { top: ( $(window).height() / 100 * proportion + 5 ) + 'px' };
698
  var newLeftWidth = { width: ( info.width() - (imageMeta.width() + 80) ) + 'px' };
699
+
700
  if (animated) {
701
  info.animate(newInfoTop);
702
  leftColWrapper.animate(newLeftWidth);
721
  },
722
 
723
  texturize : function(text) {
724
+ text = new String(text); // make sure we get a string. Title "1" came in as int 1, for example, which did not support .replace().
725
  text = text.replace(/'/g, '&#8217;').replace(/&#039;/g, '&#8217;').replace(/[\u2019]/g, '&#8217;');
726
  text = text.replace(/"/g, '&#8221;').replace(/&#034;/g, '&#8221;').replace(/&quot;/g, '&#8221;').replace(/[\u201D]/g, '&#8221;');
727
  text = text.replace(/([\w]+)=&#[\d]+;(.+?)&#[\d]+;/g, '$1="$2"'); // untexturize allowed HTML tags params double-quotes
735
  // Calculate the new src.
736
  items.each(function(i){
737
  var src_item = $(this),
738
+ orig_size = src_item.data('orig-size') || '',
739
  max = gallery.jp_carousel('slideDimensions'),
740
  parts = orig_size.split(',');
741
  orig_size = {width: parseInt(parts[0], 10), height: parseInt(parts[1], 10)},
743
  large_file = src_item.data('large-file') || '';
744
 
745
  src = src_item.data('orig-file');
746
+
747
  src = gallery.jp_carousel('selectBestImageSize', {
748
  orig_file : src,
749
  orig_width : orig_size.width,
753
  medium_file : medium_file,
754
  large_file : large_file
755
  });
756
+
757
  // Set the final src
758
  $(this).data( 'gallery-src', src );
759
  });
768
  attachment_id = src_item.data('attachment-id') || 0,
769
  comments_opened = src_item.data('comments-opened') || 0,
770
  image_meta = src_item.data('image-meta') || {},
771
+ orig_size = src_item.data('orig-size') || '',
772
+ title = src_item.data('image-title') || '',
773
  description = src_item.data('image-description') || '',
774
  caption = src_item.parents('dl').find('dd.gallery-caption').html() || '',
775
  src = src_item.data('gallery-src') || '',
781
  if ( tiledCaption )
782
  caption = tiledCaption;
783
 
784
+ if ( attachment_id && orig_size.length ) {
785
+ title = gallery.jp_carousel('texturize', title);
786
+ description = gallery.jp_carousel('texturize', description);
787
+ caption = gallery.jp_carousel('texturize', caption);
788
+
789
+ var slide = $('<div class="jp-carousel-slide"></div>')
790
+ .hide()
791
+ .css({
792
+ 'position' : 'fixed',
793
+ 'left' : i < start_index ? -1000 : gallery.width()
794
+ })
795
+ .append($('<img>'))
796
+ .appendTo(gallery)
797
+ .data('src', src )
798
+ .data('title', title)
799
+ .data('desc', description)
800
+ .data('caption', caption)
801
+ .data('attachment-id', attachment_id)
802
+ .data('permalink', src_item.parents('a').attr('href'))
803
+ .data('orig-size', orig_size)
804
+ .data('comments-opened', comments_opened)
805
+ .data('image-meta', image_meta)
806
+ .data('medium-file', medium_file)
807
+ .data('large-file', large_file)
808
+ .data('orig-file', orig_file)
809
+ .jp_carousel('fitSlide', false);
810
+
811
+ // Preloading all images
812
+ slide.find('img').first().attr('src', src );
813
+ }
 
 
814
  });
815
  return this;
816
  },
818
  selectBestImageSize: function(args) {
819
  if ( 'object' != typeof args )
820
  args = {};
821
+
822
  if ( 'undefined' == typeof args.orig_file )
823
  return '';
824
+
825
  if ( 'undefined' == typeof args.orig_width || 'undefined' == typeof args.max_width )
826
  return args.orig_file;
827
+
828
  if ( 'undefined' == typeof args.medium_file || 'undefined' == typeof args.large_file )
829
  return args.orig_file;
830
 
836
  large_size_parts = (large_size != args.large_file) ? large_size.split('x') : [args.orig_width, 0],
837
  large_width = parseInt( large_size_parts[0], 10 ),
838
  large_height = parseInt( large_size_parts[1], 10 );
839
+
840
  // Give devices with a higher devicePixelRatio higher-res images (Retina display = 2, Android phones = 1.5, etc)
841
  if ('undefined' != typeof window.devicePixelRatio && window.devicePixelRatio > 1) {
842
  args.max_width = args.max_width * window.devicePixelRatio;
843
  args.max_height = args.max_height * window.devicePixelRatio;
844
  }
845
 
 
 
 
846
  if ( large_width >= args.max_width || large_height >= args.max_height )
847
  return args.large_file;
848
 
849
+ if ( medium_width >= args.max_width || medium_height >= args.max_height )
850
+ return args.medium_file;
851
+
852
  return args.orig_file;
853
  },
854
 
865
  return;
866
  if ( ! args.replacements || 'undefined' == typeof args.replacements )
867
  return args.text;
868
+ return args.text.replace(/{(\d+)}/g, function(match, number) {
869
  return typeof args.replacements[number] != 'undefined' ? args.replacements[number] : match;
870
  });
871
  },
872
 
873
  shutterSpeed: function(d) {
874
  if (d >= 1)
875
+ return Math.round(d) + 's';
876
  var df = 1, top = 1, bot = 1;
877
  var limit = 1e5; //Increase for greater precision.
878
  while (df != d && limit-- > 0) {
926
  });
927
  return value;
928
  },
929
+
930
  getTitleDesc: function( data ) {
931
  var title ='', desc = '', markup = '', target, commentWrappere;
932
+
933
  target = $( 'div.jp-carousel-titleanddesc', 'div.jp-carousel-wrap' );
934
  target.hide();
935
+
936
  title = gallery.jp_carousel('parseTitleDesc', data.title) || '';
937
  desc = gallery.jp_carousel('parseTitleDesc', data.desc) || '';
938
+
939
  if ( title.length || desc.length ) {
940
  // $('<div />').html(sometext).text() is a trick to go to HTML to plain text (including HTML emntities decode, etc)
941
  if ( $('<div />').html(title).text() == $('<div />').html(desc).text() )
950
  $( 'div#jp-carousel-comment-form-container' ).css('margin-top', '20px');
951
  $( 'div#jp-carousel-comments-loading' ).css('margin-top', '20px');
952
  },
953
+
954
  getMeta: function( meta ) {
955
  if ( !meta || 1 != jetpackCarouselStrings.display_exif )
956
  return false;
957
+
958
  var $ul = $( '<ul></ul>' );
959
  $.each( meta, function( key, val ) {
960
  if ( 0 === parseFloat(val) || !val.length || -1 === $.inArray( key, [ 'camera', 'aperture', 'shutter_speed', 'focal_length' ] ) )
961
  return;
962
+
963
  switch( key ) {
964
  case 'focal_length':
965
  val = val + 'mm';
974
  // making jslint happy
975
  break;
976
  }
977
+
978
  $ul.append( '<li><h5>' + jetpackCarouselStrings[key] + '</h5>' + val + '</li>' );
979
  });
980
 
994
  .addClass( 'jp-carousel-image-download' )
995
  .attr( 'href', original )
996
  .attr( 'target', '_blank' );
997
+
998
  $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' )
999
  .append( permalink );
1000
  },
1001
+
1002
  getMap: function( meta ) {
1003
  if ( !meta.latitude || !meta.longitude || 1 != jetpackCarouselStrings.display_geo )
1004
  return;
1005
+
1006
+ var latitude = meta.latitude,
1007
+ longitude = meta.longitude,
1008
  $metabox = $( 'div.jp-carousel-image-meta', 'div.jp-carousel-wrap' ),
1009
  $mapbox = $( '<div></div>' ),
1010
  style = '&scale=2&style=feature:all|element:all|invert_lightness:true|hue:0x0077FF|saturation:-50|lightness:-5|gamma:0.91';
1042
  getComments: function( args ) {
1043
  if ( 'object' != typeof args )
1044
  args = {};
1045
+
1046
  if ( ! args.attachment_id || 'undefined' == typeof args.attachment_id )
1047
  return;
1048
+
1049
  if ( ! args.offset || 'undefined' == typeof args.offset || args.offset < 1 )
1050
  args.offset = 0;
1051
+
1052
  var comments = $('.jp-carousel-comments'),
1053
  commentsLoading = $('#jp-carousel-comments-loading');
1054
+
1055
  commentsLoading.show();
1056
+
1057
  if ( args.clear ) {
1058
  comments.hide();
1059
  comments.empty();
1060
  }
1061
+
1062
  $.ajax({
1063
  type: 'GET',
1064
  url: jetpackCarouselStrings.ajaxurl,
1095
  + '</div>'
1096
  );
1097
  comments.append(comment);
1098
+
1099
  // Set the interval to check for a new page of comments.
1100
  clearInterval( commentInterval );
1101
  commentInterval = setInterval( function() {
1105
  }
1106
  }, 150 );
1107
  });
1108
+
1109
  // Verify (late) that the user didn't repeatldy click the arrows really fast, in which case the requested
1110
  // attachment id might no longer match the current attachment id by the time we get the data back or a now
1111
  // registered infiniscroll event kicks in, so we don't ever display comments for the wrong image by mistake.
1118
 
1119
  // Increase the height of the background, semi-transparent overlay to match the new length of the comments list.
1120
  $('.jp-carousel-overlay').height( $(window).height() + titleAndDescription.height() + commentForm.height() + ( (comments.height() > 0) ? comments.height() : imageMeta.height() ) + 200 );
1121
+
1122
  comments.show();
1123
  commentsLoading.hide();
1124
  },
1169
 
1170
  };
1171
 
1172
+ // register the event listener for starting the gallery
1173
  $( document.body ).on( 'click', 'div.gallery,div.tiled-gallery', function(e) {
1174
+ if ( ! $(this).jp_carousel( 'testForData', e.currentTarget ) )
1175
+ return;
1176
  if ( $(e.target).parent().hasClass('gallery-caption') )
1177
  return;
1178
  e.preventDefault();
1179
  $(this).jp_carousel('open', {start_index: $(this).find('.gallery-item, .tiled-gallery-item').index($(e.target).parents('.gallery-item, .tiled-gallery-item'))});
1180
  });
1181
 
1182
+ // Set an interval on page load to load the carousel if hash exists and not already opened.
1183
+ // Makes carousel work on page load and when back button leads to same URL with carousel hash (ie: no actual document.ready trigger)
1184
+ $(document).ready(function(){
1185
+ var jp_carousel_open_interval = window.setInterval(function(){
1186
+ // We should have a URL hash by now.
1187
+ if ( ! document.location.hash || ! document.location.hash.match(/jp-carousel-(\d+)/) )
1188
+ return;
1189
+
1190
  var gallery = $('div.gallery, div.tiled-gallery'), index = -1, n = document.location.hash.match(/jp-carousel-(\d+)/);
1191
 
1192
+ if ( ! $(this).jp_carousel( 'testForData', gallery ) )
1193
+ return;
1194
+
1195
  n = parseInt(n[1], 10);
1196
 
1197
  gallery.find('img').each(function(num, el){
1202
  });
1203
 
1204
  if ( index != -1 )
1205
+ gallery.jp_carousel('open', {start_index: index}); // open method checks if already opened
1206
+ }, 1000);
1207
+ });
1208
  });
1209
 
1210
  // Swipe gesture detection
1211
  (function($){$.fn.touchwipe=function(settings){var config={min_move_x:20,min_move_y:20,wipeLeft:function(){},wipeRight:function(){},wipeUp:function(){},wipeDown:function(){},preventDefaultEvents:true};if(settings)$.extend(config,settings);this.each(function(){var startX;var startY;var isMoving=false;function cancelTouch(){this.removeEventListener('touchmove',onTouchMove);startX=null;isMoving=false}function onTouchMove(e){if(config.preventDefaultEvents){e.preventDefault()}if(isMoving){var x=e.touches[0].pageX;var y=e.touches[0].pageY;var dx=startX-x;var dy=startY-y;if(Math.abs(dx)>=config.min_move_x){cancelTouch();if(dx>0){config.wipeLeft()}else{config.wipeRight()}}else if(Math.abs(dy)>=config.min_move_y){cancelTouch();if(dy>0){config.wipeDown()}else{config.wipeUp()}}}}function onTouchStart(e){if(e.touches.length==1){startX=e.touches[0].pageX;startY=e.touches[0].pageY;isMoving=true;this.addEventListener('touchmove',onTouchMove,false)}}if('ontouchstart'in document.documentElement){this.addEventListener('touchstart',onTouchStart,false)}});return this}})(jQuery);
 
jetpack-carousel.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: Gallery Carousel Without JetPack
4
  Plugin URI: http://www.wpbeginner.com/
5
  Description: Transform your standard galleries into an immersive full-screen experience without requiring you to connect to WordPress.com
6
- Version: 0.4
7
  Author: Syed Balkhi
8
  Author URI: http://www.wpbeginner.com
9
  License: GPLv2 or later
@@ -13,8 +13,8 @@ License URI: http://www.gnu.org/licenses/gpl-2.0.html
13
  Note: This is a fork of Carousel Module from JetPack. I just wanted the Carousel to work
14
  without logging into WordPress.com because I shouldn't be forced to (that's evil). So I'm releasing
15
  this little plugin which is exactly the copy of JetPack module. I will update this plugin everytime that JetPack updates.
16
-
17
  */
 
18
  load_plugin_textdomain('carousel', false, basename( dirname( __FILE__ ) ) . '/languages' );
19
 
20
  class No_Jetpack_Carousel {
@@ -33,7 +33,7 @@ class No_Jetpack_Carousel {
33
  if ( $this->maybe_disable_jp_carousel() )
34
  return;
35
 
36
- $this->in_jetpack = ( class_exists( 'carousel' ) && method_exists( 'carousel', 'enable_module_configurable' ) ) ? true : false;
37
 
38
  if ( is_admin() ) {
39
  // Register the Carousel-related related settings
@@ -59,7 +59,7 @@ class No_Jetpack_Carousel {
59
  add_filter( 'wp_get_attachment_link', array( $this, 'add_data_to_images' ), 10, 2 );
60
  }
61
 
62
- if ( $this->in_jetpack && method_exists( 'carousel', 'module_configuration_load' ) ) {
63
  Jetpack::enable_module_configurable( dirname( dirname( __FILE__ ) ) . '/carousel.php' );
64
  Jetpack::module_configuration_load( dirname( dirname( __FILE__ ) ) . '/carousel.php', array( $this, 'jetpack_configuration_load' ) );
65
  }
@@ -79,7 +79,7 @@ class No_Jetpack_Carousel {
79
  }
80
 
81
  function enqueue_assets( $output ) {
82
- if ( ! empty( $output ) ) {
83
  // Bail because someone is overriding the [gallery] shortcode.
84
  remove_filter( 'gallery_style', array( $this, 'add_data_to_container' ) );
85
  remove_filter( 'wp_get_attachment_link', array( $this, 'add_data_to_images' ) );
@@ -89,14 +89,7 @@ class No_Jetpack_Carousel {
89
  do_action( 'jp_carousel_thumbnails_shown' );
90
 
91
  if ( $this->first_run ) {
92
- if ( !wp_script_is( 'spin', 'registered' ) ) {
93
- wp_register_script( 'spin', plugins_url( 'spin.js', __FILE__ ), false, '1.2.4' );
94
- }
95
- if ( !wp_script_is( 'jquery.spin', 'registered' ) ) {
96
- wp_register_script( 'jquery.spin', plugins_url( 'jquery.spin.js', __FILE__ ) , array( 'jquery', 'spin' ) );
97
- }
98
-
99
- wp_enqueue_script( 'jetpack-carousel', plugins_url( 'jetpack-carousel.js', __FILE__ ), array( 'jquery.spin' ), $this->asset_version( '20120926' ), true );
100
 
101
  // Note: using home_url() instead of admin_url() for ajaxurl to be sure to get same domain on wpcom when using mapped domains (also works on self-hosted)
102
  // Also: not hardcoding path since there is no guarantee site is running on site root in self-hosted context.
@@ -110,34 +103,34 @@ class No_Jetpack_Carousel {
110
  'display_exif' => $this->test_1or0_option( get_option( 'carousel_display_exif' ), true ),
111
  'display_geo' => $this->test_1or0_option( get_option( 'carousel_display_geo' ), true ),
112
  'background_color' => $this->carousel_background_color_sanitize( get_option( 'carousel_background_color' ) ),
113
- 'comment' => __( 'Comment', 'carousel' ),
114
- 'post_comment' => __( 'Post Comment', 'carousel' ),
115
- 'loading_comments' => __( 'Loading Comments...', 'carousel' ),
116
- 'download_original' => sprintf( __( 'View full size <span class="photo-size">%1$s<span class="photo-size-times">&times;</span>%2$s</span>', 'carousel' ), '{0}', '{1}' ),
117
- 'no_comment_text' => __( 'Please be sure to submit some text with your comment.', 'carousel' ),
118
- 'no_comment_email' => __( 'Please provide an email address to comment.', 'carousel' ),
119
- 'no_comment_author' => __( 'Please provide your name to comment.', 'carousel' ),
120
- 'comment_post_error' => __( 'Sorry, but there was an error posting your comment. Please try again later.', 'carousel' ),
121
- 'comment_approved' => __( 'Your comment was approved.', 'carousel' ),
122
- 'comment_unapproved' => __( 'Your comment is in moderation.', 'carousel' ),
123
- 'camera' => __( 'Camera', 'carousel' ),
124
- 'aperture' => __( 'Aperture', 'carousel' ),
125
- 'shutter_speed' => __( 'Shutter Speed', 'carousel' ),
126
- 'focal_length' => __( 'Focal Length', 'carousel' ),
127
  );
128
 
129
  if ( ! isset( $localize_strings['jetpack_comments_iframe_src'] ) || empty( $localize_strings['jetpack_comments_iframe_src'] ) ) {
130
  // We're not using Jetpack comments after all, so fallback to standard local comments.
131
 
132
  if ( $is_logged_in ) {
133
- $localize_strings['local_comments_commenting_as'] = '<p id="jp-carousel-commenting-as">' . sprintf( __( 'Commenting as %s', 'carousel' ), $current_user->data->display_name ) . '</p>';
134
  } else {
135
  $localize_strings['local_comments_commenting_as'] = ''
136
- . '<fieldset><label for="email">' . __( 'Email (Required)', 'carousel' ) . '</label> '
137
  . '<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /></fieldset>'
138
- . '<fieldset><label for="author">' . __( 'Name (Required)', 'carousel' ) . '</label> '
139
  . '<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /></fieldset>'
140
- . '<fieldset><label for="url">' . __( 'Website', 'carousel' ) . '</label> '
141
  . '<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /></fieldset>';
142
  }
143
  }
@@ -145,7 +138,14 @@ class No_Jetpack_Carousel {
145
  $localize_strings = apply_filters( 'jp_carousel_localize_strings', $localize_strings );
146
  wp_localize_script( 'jetpack-carousel', 'jetpackCarouselStrings', $localize_strings );
147
  wp_enqueue_style( 'jetpack-carousel', plugins_url( 'jetpack-carousel.css', __FILE__ ), array(), $this->asset_version( '20120629' ) );
148
-
 
 
 
 
 
 
 
149
  do_action( 'jp_carousel_enqueue_assets', $this->first_run, $localize_strings );
150
 
151
  $this->first_run = false;
@@ -159,10 +159,11 @@ class No_Jetpack_Carousel {
159
  return $html;
160
 
161
  $attachment_id = intval( $attachment_id );
162
- $orig_file = wp_get_attachment_url( $attachment_id );
 
163
  $meta = wp_get_attachment_metadata( $attachment_id );
164
  $size = isset( $meta['width'] ) ? intval( $meta['width'] ) . ',' . intval( $meta['height'] ) : '';
165
- $img_meta = $meta['image_meta'];
166
  $comments_opened = intval( comments_open( $attachment_id ) );
167
 
168
  /*
@@ -172,10 +173,10 @@ class No_Jetpack_Carousel {
172
  * $content_width has no filter we could temporarily de-register, run wp_get_attachment_image_src(), then
173
  * re-register. So using returned file URL instead, which we can define the sizes from through filename
174
  * parsing in the JS, as this is a failsafe file reference.
175
- *
176
  * EG with Twenty Eleven activated:
177
  * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(584) [2]=> int(435) [3]=> bool(true) }
178
- *
179
  * EG with Twenty Ten activated:
180
  * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(640) [2]=> int(477) [3]=> bool(true) }
181
  */
@@ -183,11 +184,12 @@ class No_Jetpack_Carousel {
183
  $medium_file_info = wp_get_attachment_image_src( $attachment_id, 'medium' );
184
  $medium_file = isset( $medium_file_info[0] ) ? $medium_file_info[0] : '';
185
 
186
- $large_file_info = wp_get_attachment_image_src( $attachment_id, 'large' );
187
- $large_file = isset( $large_file_info[0] ) ? $large_file_info[0] : '';
188
 
189
- $attachment = get_post( $attachment_id );
190
- $attachment_desc = wpautop( wptexturize( $attachment->post_content ) );
 
191
 
192
  // Not yet providing geo-data, need to "fuzzify" for privacy
193
  if ( ! empty( $img_meta ) ) {
@@ -197,17 +199,18 @@ class No_Jetpack_Carousel {
197
  }
198
  }
199
 
200
- $img_meta = json_encode( $img_meta );
201
 
202
  $html = str_replace(
203
  '<img ',
204
  sprintf(
205
- '<img data-attachment-id="%1$d" data-orig-file="%2$s" data-orig-size="%3$s" data-comments-opened="%4$s" data-image-meta="%5$s" data-image-description="%6$s" data-medium-file="%7$s" data-large-file="%8$s" ',
206
  $attachment_id,
207
  esc_attr( $orig_file ),
208
  $size,
209
  $comments_opened,
210
  esc_attr( $img_meta ),
 
211
  esc_attr( $attachment_desc ),
212
  esc_attr( $medium_file ),
213
  esc_attr( $large_file )
@@ -235,24 +238,24 @@ class No_Jetpack_Carousel {
235
 
236
  return $html;
237
  }
238
-
239
  function get_attachment_comments() {
240
  if ( ! headers_sent() )
241
  header('Content-type: text/javascript');
242
-
243
  do_action('jp_carousel_check_blog_user_privileges');
244
-
245
  $attachment_id = ( isset( $_REQUEST['id'] ) ) ? (int) $_REQUEST['id'] : 0;
246
  $offset = ( isset( $_REQUEST['offset'] ) ) ? (int) $_REQUEST['offset'] : 0;
247
-
248
  if ( ! $attachment_id ) {
249
- echo json_encode( __( 'Missing attachment ID.', 'carousel' ) );
250
  die();
251
  }
252
-
253
  if ( $offset < 1 )
254
  $offset = 0;
255
-
256
  $comments = get_comments( array(
257
  'status' => 'approve',
258
  'order' => ( 'asc' == get_option('comment_order') ) ? 'ASC' : 'DESC',
@@ -260,9 +263,9 @@ class No_Jetpack_Carousel {
260
  'offset' => $offset,
261
  'post_id' => $attachment_id,
262
  ) );
263
-
264
  $out = array();
265
-
266
  // Can't just send the results, they contain the commenter's email address.
267
  foreach ( $comments as $comment ) {
268
  $author_markup = '<a href="' . esc_url( $comment->comment_author_url ) . '">' . esc_html( $comment->comment_author ) . '</a>';
@@ -275,42 +278,42 @@ class No_Jetpack_Carousel {
275
  'content' => wpautop($comment->comment_content),
276
  );
277
  }
278
-
279
  die( json_encode( $out ) );
280
  }
281
 
282
  function post_attachment_comment() {
283
  if ( ! headers_sent() )
284
  header('Content-type: text/javascript');
285
-
286
  if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce($_POST['nonce'], 'carousel_nonce') )
287
- die( json_encode( array( 'error' => __( 'Nonce verification failed.', 'carousel' ) ) ) );
288
-
289
  $_blog_id = (int) $_POST['blog_id'];
290
  $_post_id = (int) $_POST['id'];
291
  $comment = $_POST['comment'];
292
-
293
  if ( empty( $_blog_id ) )
294
- die( json_encode( array( 'error' => __( 'Missing target blog ID.', 'carousel' ) ) ) );
295
-
296
  if ( empty( $_post_id ) )
297
- die( json_encode( array( 'error' => __( 'Missing target post ID.', 'carousel' ) ) ) );
298
-
299
  if ( empty( $comment ) )
300
- die( json_encode( array( 'error' => __( 'No comment text was submitted.', 'carousel' ) ) ) );
301
 
302
  // Used in context like NewDash
303
  $switched = false;
304
- if ( $_blog_id != get_current_blog_id() ) {
305
  switch_to_blog( $_blog_id );
306
  $switched = true;
307
  }
308
-
309
  do_action('jp_carousel_check_blog_user_privileges');
310
 
311
  if ( ! comments_open( $_post_id ) )
312
- die( json_encode( array( 'error' => __( 'Comments on this post are closed.', 'carousel' ) ) ) );
313
-
314
  if ( is_user_logged_in() ) {
315
  $user = wp_get_current_user();
316
  $user_id = $user->ID;
@@ -319,7 +322,7 @@ class No_Jetpack_Carousel {
319
  $url = $user->user_url;
320
 
321
  if ( empty( $user_id ) )
322
- die( json_encode( array( 'error' => __( 'Sorry, but we could not authenticate your request.', 'carousel' ) ) ) );
323
  } else {
324
  $user_id = 0;
325
  $display_name = $_POST['author'];
@@ -327,13 +330,13 @@ class No_Jetpack_Carousel {
327
  $url = $_POST['url'];
328
 
329
  if ( empty( $display_name ) )
330
- die( json_encode( array( 'error' => __( 'Please provide your name.', 'carousel' ) ) ) );
331
 
332
  if ( empty( $email ) )
333
- die( json_encode( array( 'error' => __( 'Please provide an email address.', 'carousel' ) ) ) );
334
 
335
  if ( ! is_email( $email ) )
336
- die( json_encode( array( 'error' => __( 'Please provide a valid email address.', 'carousel' ) ) ) );
337
  }
338
 
339
  $comment_data = array(
@@ -358,23 +361,23 @@ class No_Jetpack_Carousel {
358
 
359
  die( json_encode( array( 'comment_id' => $comment_id, 'comment_status' => $comment_status ) ) );
360
  }
361
-
362
  function register_settings() {
363
- add_settings_section('carousel_section', __( 'Image Gallery Carousel', 'carousel' ), array( $this, 'carousel_section_callback' ), 'media');
364
-
365
  if ( ! $this->in_jetpack ) {
366
- add_settings_field('carousel_enable_it', __( 'Enable carousel', 'carousel' ), array( $this, 'carousel_enable_it_callback' ), 'media', 'carousel_section' );
367
  register_setting( 'media', 'carousel_enable_it', array( $this, 'carousel_enable_it_sanitize' ) );
368
  }
369
 
370
- add_settings_field('carousel_background_color', __( 'Background color', 'carousel' ), array( $this, 'carousel_background_color_callback' ), 'media', 'carousel_section' );
371
  register_setting( 'media', 'carousel_background_color', array( $this, 'carousel_background_color_sanitize' ) );
372
-
373
- add_settings_field('carousel_display_exif', __( 'Metadata', 'carousel'), array( $this, 'carousel_display_exif_callback' ), 'media', 'carousel_section' );
374
  register_setting( 'media', 'carousel_display_exif', array( $this, 'carousel_display_exif_sanitize' ) );
375
 
376
  // No geo setting yet, need to "fuzzify" data first, for privacy
377
- // add_settings_field('carousel_display_geo', __( 'Geolocation', 'carousel' ), array( $this, 'carousel_display_geo_callback' ), 'media', 'carousel_section' );
378
  // register_setting( 'media', 'carousel_display_geo', array( $this, 'carousel_display_geo_sanitize' ) );
379
  }
380
 
@@ -391,7 +394,7 @@ class No_Jetpack_Carousel {
391
  }
392
  return ( 1 == $value ) ? 1 : 0;
393
  }
394
-
395
  function sanitize_1or0_option( $value ) {
396
  return ( 1 == $value ) ? 1 : 0;
397
  }
@@ -427,7 +430,7 @@ class No_Jetpack_Carousel {
427
  }
428
 
429
  function carousel_display_exif_callback() {
430
- $this->settings_checkbox( 'carousel_display_exif', __( 'Show photo metadata (<a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format" target="_blank">Exif</a>) in carousel, when available.', 'carousel' ) );
431
  }
432
 
433
  function carousel_display_exif_sanitize( $value ) {
@@ -435,15 +438,15 @@ class No_Jetpack_Carousel {
435
  }
436
 
437
  function carousel_display_geo_callback() {
438
- $this->settings_checkbox( 'carousel_display_geo', __( 'Show map of photo location in carousel, when available.', 'carousel' ) );
439
  }
440
 
441
  function carousel_display_geo_sanitize( $value ) {
442
  return $this->sanitize_1or0_option( $value );
443
- }
444
 
445
  function carousel_background_color_callback() {
446
- $this->settings_select( 'carousel_background_color', array( 'black' => __( 'Black', 'carousel' ), 'white' => __( 'White', 'carousel', 'carousel' ) ) );
447
  }
448
 
449
  function carousel_background_color_sanitize( $value ) {
@@ -451,7 +454,7 @@ class No_Jetpack_Carousel {
451
  }
452
 
453
  function carousel_enable_it_callback() {
454
- $this->settings_checkbox( 'carousel_enable_it', __( 'Display images in full-size carousel slideshow.', 'carousel' ) );
455
  }
456
 
457
  function carousel_enable_it_sanitize( $value ) {
3
  Plugin Name: Gallery Carousel Without JetPack
4
  Plugin URI: http://www.wpbeginner.com/
5
  Description: Transform your standard galleries into an immersive full-screen experience without requiring you to connect to WordPress.com
6
+ Version: 0.5
7
  Author: Syed Balkhi
8
  Author URI: http://www.wpbeginner.com
9
  License: GPLv2 or later
13
  Note: This is a fork of Carousel Module from JetPack. I just wanted the Carousel to work
14
  without logging into WordPress.com because I shouldn't be forced to (that's evil). So I'm releasing
15
  this little plugin which is exactly the copy of JetPack module. I will update this plugin everytime that JetPack updates.
 
16
  */
17
+
18
  load_plugin_textdomain('carousel', false, basename( dirname( __FILE__ ) ) . '/languages' );
19
 
20
  class No_Jetpack_Carousel {
33
  if ( $this->maybe_disable_jp_carousel() )
34
  return;
35
 
36
+ $this->in_jetpack = ( class_exists( 'Jetpack' ) && method_exists( 'Jetpack', 'enable_module_configurable' ) ) ? true : false;
37
 
38
  if ( is_admin() ) {
39
  // Register the Carousel-related related settings
59
  add_filter( 'wp_get_attachment_link', array( $this, 'add_data_to_images' ), 10, 2 );
60
  }
61
 
62
+ if ( $this->in_jetpack && method_exists( 'Jetpack', 'module_configuration_load' ) ) {
63
  Jetpack::enable_module_configurable( dirname( dirname( __FILE__ ) ) . '/carousel.php' );
64
  Jetpack::module_configuration_load( dirname( dirname( __FILE__ ) ) . '/carousel.php', array( $this, 'jetpack_configuration_load' ) );
65
  }
79
  }
80
 
81
  function enqueue_assets( $output ) {
82
+ if ( ! empty( $output ) && ! apply_filters( 'jp_carousel_force_enable', false ) ) {
83
  // Bail because someone is overriding the [gallery] shortcode.
84
  remove_filter( 'gallery_style', array( $this, 'add_data_to_container' ) );
85
  remove_filter( 'wp_get_attachment_link', array( $this, 'add_data_to_images' ) );
89
  do_action( 'jp_carousel_thumbnails_shown' );
90
 
91
  if ( $this->first_run ) {
92
+ wp_enqueue_script( 'jetpack-carousel', plugins_url( 'jetpack-carousel.js', __FILE__ ), array( 'jquery' ), $this->asset_version( '20130109' ), true );
 
 
 
 
 
 
 
93
 
94
  // Note: using home_url() instead of admin_url() for ajaxurl to be sure to get same domain on wpcom when using mapped domains (also works on self-hosted)
95
  // Also: not hardcoding path since there is no guarantee site is running on site root in self-hosted context.
103
  'display_exif' => $this->test_1or0_option( get_option( 'carousel_display_exif' ), true ),
104
  'display_geo' => $this->test_1or0_option( get_option( 'carousel_display_geo' ), true ),
105
  'background_color' => $this->carousel_background_color_sanitize( get_option( 'carousel_background_color' ) ),
106
+ 'comment' => __( 'Comment', 'jetpack' ),
107
+ 'post_comment' => __( 'Post Comment', 'jetpack' ),
108
+ 'loading_comments' => __( 'Loading Comments...', 'jetpack' ),
109
+ 'download_original' => sprintf( __( 'View full size <span class="photo-size">%1$s<span class="photo-size-times">&times;</span>%2$s</span>', 'jetpack' ), '{0}', '{1}' ),
110
+ 'no_comment_text' => __( 'Please be sure to submit some text with your comment.', 'jetpack' ),
111
+ 'no_comment_email' => __( 'Please provide an email address to comment.', 'jetpack' ),
112
+ 'no_comment_author' => __( 'Please provide your name to comment.', 'jetpack' ),
113
+ 'comment_post_error' => __( 'Sorry, but there was an error posting your comment. Please try again later.', 'jetpack' ),
114
+ 'comment_approved' => __( 'Your comment was approved.', 'jetpack' ),
115
+ 'comment_unapproved' => __( 'Your comment is in moderation.', 'jetpack' ),
116
+ 'camera' => __( 'Camera', 'jetpack' ),
117
+ 'aperture' => __( 'Aperture', 'jetpack' ),
118
+ 'shutter_speed' => __( 'Shutter Speed', 'jetpack' ),
119
+ 'focal_length' => __( 'Focal Length', 'jetpack' ),
120
  );
121
 
122
  if ( ! isset( $localize_strings['jetpack_comments_iframe_src'] ) || empty( $localize_strings['jetpack_comments_iframe_src'] ) ) {
123
  // We're not using Jetpack comments after all, so fallback to standard local comments.
124
 
125
  if ( $is_logged_in ) {
126
+ $localize_strings['local_comments_commenting_as'] = '<p id="jp-carousel-commenting-as">' . sprintf( __( 'Commenting as %s', 'jetpack' ), $current_user->data->display_name ) . '</p>';
127
  } else {
128
  $localize_strings['local_comments_commenting_as'] = ''
129
+ . '<fieldset><label for="email">' . __( 'Email (Required)', 'jetpack' ) . '</label> '
130
  . '<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" /></fieldset>'
131
+ . '<fieldset><label for="author">' . __( 'Name (Required)', 'jetpack' ) . '</label> '
132
  . '<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" /></fieldset>'
133
+ . '<fieldset><label for="url">' . __( 'Website', 'jetpack' ) . '</label> '
134
  . '<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" /></fieldset>';
135
  }
136
  }
138
  $localize_strings = apply_filters( 'jp_carousel_localize_strings', $localize_strings );
139
  wp_localize_script( 'jetpack-carousel', 'jetpackCarouselStrings', $localize_strings );
140
  wp_enqueue_style( 'jetpack-carousel', plugins_url( 'jetpack-carousel.css', __FILE__ ), array(), $this->asset_version( '20120629' ) );
141
+ global $is_IE;
142
+ if( $is_IE )
143
+ {
144
+ $msie = strpos( $_SERVER['HTTP_USER_AGENT'], 'MSIE' ) + 4;
145
+ $version = (float) substr( $_SERVER['HTTP_USER_AGENT'], $msie, strpos( $_SERVER['HTTP_USER_AGENT'], ';', $msie ) - $msie );
146
+ if( $version < 9 )
147
+ wp_enqueue_style( 'jetpack-carousel-ie8fix', plugins_url( 'jetpack-carousel-ie8fix.css', __FILE__ ), array(), $this->asset_version( '20121024' ) );
148
+ }
149
  do_action( 'jp_carousel_enqueue_assets', $this->first_run, $localize_strings );
150
 
151
  $this->first_run = false;
159
  return $html;
160
 
161
  $attachment_id = intval( $attachment_id );
162
+ $orig_file = wp_get_attachment_image_src( $attachment_id, 'full' );
163
+ $orig_file = isset( $orig_file[0] ) ? $orig_file[0] : wp_get_attachment_url( $attachment_id );
164
  $meta = wp_get_attachment_metadata( $attachment_id );
165
  $size = isset( $meta['width'] ) ? intval( $meta['width'] ) . ',' . intval( $meta['height'] ) : '';
166
+ $img_meta = ( ! empty( $meta['image_meta'] ) ) ? (array) $meta['image_meta'] : array();
167
  $comments_opened = intval( comments_open( $attachment_id ) );
168
 
169
  /*
173
  * $content_width has no filter we could temporarily de-register, run wp_get_attachment_image_src(), then
174
  * re-register. So using returned file URL instead, which we can define the sizes from through filename
175
  * parsing in the JS, as this is a failsafe file reference.
176
+ *
177
  * EG with Twenty Eleven activated:
178
  * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(584) [2]=> int(435) [3]=> bool(true) }
179
+ *
180
  * EG with Twenty Ten activated:
181
  * array(4) { [0]=> string(82) "http://vanillawpinstall.blah/wp-content/uploads/2012/06/IMG_3534-1024x764.jpg" [1]=> int(640) [2]=> int(477) [3]=> bool(true) }
182
  */
184
  $medium_file_info = wp_get_attachment_image_src( $attachment_id, 'medium' );
185
  $medium_file = isset( $medium_file_info[0] ) ? $medium_file_info[0] : '';
186
 
187
+ $large_file_info = wp_get_attachment_image_src( $attachment_id, 'large' );
188
+ $large_file = isset( $large_file_info[0] ) ? $large_file_info[0] : '';
189
 
190
+ $attachment = get_post( $attachment_id );
191
+ $attachment_title = wptexturize( $attachment->post_title );
192
+ $attachment_desc = wpautop( wptexturize( $attachment->post_content ) );
193
 
194
  // Not yet providing geo-data, need to "fuzzify" for privacy
195
  if ( ! empty( $img_meta ) ) {
199
  }
200
  }
201
 
202
+ $img_meta = json_encode( array_map( 'strval', $img_meta ) );
203
 
204
  $html = str_replace(
205
  '<img ',
206
  sprintf(
207
+ '<img data-attachment-id="%1$d" data-orig-file="%2$s" data-orig-size="%3$s" data-comments-opened="%4$s" data-image-meta="%5$s" data-image-title="%6$s" data-image-description="%7$s" data-medium-file="%8$s" data-large-file="%9$s" ',
208
  $attachment_id,
209
  esc_attr( $orig_file ),
210
  $size,
211
  $comments_opened,
212
  esc_attr( $img_meta ),
213
+ esc_attr( $attachment_title ),
214
  esc_attr( $attachment_desc ),
215
  esc_attr( $medium_file ),
216
  esc_attr( $large_file )
238
 
239
  return $html;
240
  }
241
+
242
  function get_attachment_comments() {
243
  if ( ! headers_sent() )
244
  header('Content-type: text/javascript');
245
+
246
  do_action('jp_carousel_check_blog_user_privileges');
247
+
248
  $attachment_id = ( isset( $_REQUEST['id'] ) ) ? (int) $_REQUEST['id'] : 0;
249
  $offset = ( isset( $_REQUEST['offset'] ) ) ? (int) $_REQUEST['offset'] : 0;
250
+
251
  if ( ! $attachment_id ) {
252
+ echo json_encode( __( 'Missing attachment ID.', 'jetpack' ) );
253
  die();
254
  }
255
+
256
  if ( $offset < 1 )
257
  $offset = 0;
258
+
259
  $comments = get_comments( array(
260
  'status' => 'approve',
261
  'order' => ( 'asc' == get_option('comment_order') ) ? 'ASC' : 'DESC',
263
  'offset' => $offset,
264
  'post_id' => $attachment_id,
265
  ) );
266
+
267
  $out = array();
268
+
269
  // Can't just send the results, they contain the commenter's email address.
270
  foreach ( $comments as $comment ) {
271
  $author_markup = '<a href="' . esc_url( $comment->comment_author_url ) . '">' . esc_html( $comment->comment_author ) . '</a>';
278
  'content' => wpautop($comment->comment_content),
279
  );
280
  }
281
+
282
  die( json_encode( $out ) );
283
  }
284
 
285
  function post_attachment_comment() {
286
  if ( ! headers_sent() )
287
  header('Content-type: text/javascript');
288
+
289
  if ( empty( $_POST['nonce'] ) || ! wp_verify_nonce($_POST['nonce'], 'carousel_nonce') )
290
+ die( json_encode( array( 'error' => __( 'Nonce verification failed.', 'jetpack' ) ) ) );
291
+
292
  $_blog_id = (int) $_POST['blog_id'];
293
  $_post_id = (int) $_POST['id'];
294
  $comment = $_POST['comment'];
295
+
296
  if ( empty( $_blog_id ) )
297
+ die( json_encode( array( 'error' => __( 'Missing target blog ID.', 'jetpack' ) ) ) );
298
+
299
  if ( empty( $_post_id ) )
300
+ die( json_encode( array( 'error' => __( 'Missing target post ID.', 'jetpack' ) ) ) );
301
+
302
  if ( empty( $comment ) )
303
+ die( json_encode( array( 'error' => __( 'No comment text was submitted.', 'jetpack' ) ) ) );
304
 
305
  // Used in context like NewDash
306
  $switched = false;
307
+ if ( is_multisite() && $_blog_id != get_current_blog_id() ) {
308
  switch_to_blog( $_blog_id );
309
  $switched = true;
310
  }
311
+
312
  do_action('jp_carousel_check_blog_user_privileges');
313
 
314
  if ( ! comments_open( $_post_id ) )
315
+ die( json_encode( array( 'error' => __( 'Comments on this post are closed.', 'jetpack' ) ) ) );
316
+
317
  if ( is_user_logged_in() ) {
318
  $user = wp_get_current_user();
319
  $user_id = $user->ID;
322
  $url = $user->user_url;
323
 
324
  if ( empty( $user_id ) )
325
+ die( json_encode( array( 'error' => __( 'Sorry, but we could not authenticate your request.', 'jetpack' ) ) ) );
326
  } else {
327
  $user_id = 0;
328
  $display_name = $_POST['author'];
330
  $url = $_POST['url'];
331
 
332
  if ( empty( $display_name ) )
333
+ die( json_encode( array( 'error' => __( 'Please provide your name.', 'jetpack' ) ) ) );
334
 
335
  if ( empty( $email ) )
336
+ die( json_encode( array( 'error' => __( 'Please provide an email address.', 'jetpack' ) ) ) );
337
 
338
  if ( ! is_email( $email ) )
339
+ die( json_encode( array( 'error' => __( 'Please provide a valid email address.', 'jetpack' ) ) ) );
340
  }
341
 
342
  $comment_data = array(
361
 
362
  die( json_encode( array( 'comment_id' => $comment_id, 'comment_status' => $comment_status ) ) );
363
  }
364
+
365
  function register_settings() {
366
+ add_settings_section('carousel_section', __( 'Image Gallery Carousel', 'jetpack' ), array( $this, 'carousel_section_callback' ), 'media');
367
+
368
  if ( ! $this->in_jetpack ) {
369
+ add_settings_field('carousel_enable_it', __( 'Enable carousel', 'jetpack' ), array( $this, 'carousel_enable_it_callback' ), 'media', 'carousel_section' );
370
  register_setting( 'media', 'carousel_enable_it', array( $this, 'carousel_enable_it_sanitize' ) );
371
  }
372
 
373
+ add_settings_field('carousel_background_color', __( 'Background color', 'jetpack' ), array( $this, 'carousel_background_color_callback' ), 'media', 'carousel_section' );
374
  register_setting( 'media', 'carousel_background_color', array( $this, 'carousel_background_color_sanitize' ) );
375
+
376
+ add_settings_field('carousel_display_exif', __( 'Metadata', 'jetpack'), array( $this, 'carousel_display_exif_callback' ), 'media', 'carousel_section' );
377
  register_setting( 'media', 'carousel_display_exif', array( $this, 'carousel_display_exif_sanitize' ) );
378
 
379
  // No geo setting yet, need to "fuzzify" data first, for privacy
380
+ // add_settings_field('carousel_display_geo', __( 'Geolocation', 'jetpack' ), array( $this, 'carousel_display_geo_callback' ), 'media', 'carousel_section' );
381
  // register_setting( 'media', 'carousel_display_geo', array( $this, 'carousel_display_geo_sanitize' ) );
382
  }
383
 
394
  }
395
  return ( 1 == $value ) ? 1 : 0;
396
  }
397
+
398
  function sanitize_1or0_option( $value ) {
399
  return ( 1 == $value ) ? 1 : 0;
400
  }
430
  }
431
 
432
  function carousel_display_exif_callback() {
433
+ $this->settings_checkbox( 'carousel_display_exif', __( 'Show photo metadata (<a href="http://en.wikipedia.org/wiki/Exchangeable_image_file_format" target="_blank">Exif</a>) in carousel, when available.', 'jetpack' ) );
434
  }
435
 
436
  function carousel_display_exif_sanitize( $value ) {
438
  }
439
 
440
  function carousel_display_geo_callback() {
441
+ $this->settings_checkbox( 'carousel_display_geo', __( 'Show map of photo location in carousel, when available.', 'jetpack' ) );
442
  }
443
 
444
  function carousel_display_geo_sanitize( $value ) {
445
  return $this->sanitize_1or0_option( $value );
446
+ }
447
 
448
  function carousel_background_color_callback() {
449
+ $this->settings_select( 'carousel_background_color', array( 'black' => __( 'Black', 'jetpack' ), 'white' => __( 'White', 'jetpack', 'jetpack' ) ) );
450
  }
451
 
452
  function carousel_background_color_sanitize( $value ) {
454
  }
455
 
456
  function carousel_enable_it_callback() {
457
+ $this->settings_checkbox( 'carousel_enable_it', __( 'Display images in full-size carousel slideshow.', 'jetpack' ) );
458
  }
459
 
460
  function carousel_enable_it_sanitize( $value ) {
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: smub, iamdpegg
3
  Donate link:http://www.wpbeginner.com/wpbeginner-needs-your-help/
4
  Tags: gallery, lightbox, carousel, gallery carousel, jetpack
5
  Requires at least: 3.4.1
6
- Tested up to: 3.5 beta
7
- Stable tag: 0.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -54,6 +54,9 @@ However, if you want to turn off comments on Media attachments, you can follow t
54
 
55
  == Changelog ==
56
 
 
 
 
57
  = 0.4 =
58
  * Updated it to match with the original JetPack plugin updates.
59
  * Added support for mobile and touchscreen devices.
3
  Donate link:http://www.wpbeginner.com/wpbeginner-needs-your-help/
4
  Tags: gallery, lightbox, carousel, gallery carousel, jetpack
5
  Requires at least: 3.4.1
6
+ Tested up to: 3.5.1
7
+ Stable tag: 0.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
54
 
55
  == Changelog ==
56
 
57
+ = 0.5 =
58
+ * Updated it to match original JetPack plugin updates from 2.1.2
59
+
60
  = 0.4 =
61
  * Updated it to match with the original JetPack plugin updates.
62
  * Added support for mobile and touchscreen devices.
rtl/jetpack-carousel-rtl.css ADDED
@@ -0,0 +1,1106 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ /* This file was automatically generated on Jan 10 2013 16:06:46 */
2
+
3
+ * {
4
+ line-height:inherit; /* prevent declarations of line-height in the universal selector */
5
+ }
6
+
7
+ .jp-carousel-overlay {
8
+ background: #000;
9
+ }
10
+
11
+ div.jp-carousel-fadeaway {
12
+ background: -moz-linear-gradient(bottom, rgba(0,0,0,0.5), rgba(0,0,0,0));
13
+ background: -webkit-gradient(linear, right bottom, right top, from(rgba(0,0,0,0.5)), to(rgba(0,0,0,0)));
14
+ position: fixed;
15
+ bottom: 0;
16
+ z-index: 2147483647;
17
+ width: 100%;
18
+ height: 15px;
19
+ }
20
+
21
+ .jp-carousel-next-button span,
22
+ .jp-carousel-previous-button span {
23
+ background: url(.././images/arrows.png) no-repeat center center;
24
+ background-size: 200px 126px;
25
+ }
26
+
27
+ @media
28
+ only screen and (-webkit-min-device-pixel-ratio: 1.5),
29
+ only screen and (-o-min-device-pixel-ratio: 3/2),
30
+ only screen and (min--moz-device-pixel-ratio: 1.5),
31
+ only screen and (min-device-pixel-ratio: 1.5) {
32
+ .jp-carousel-next-button span,
33
+ .jp-carousel-previous-button span {
34
+ background-image: url(.././images/arrows-2x.png);
35
+ }
36
+ }
37
+
38
+ .jp-carousel-wrap {
39
+ font-family: "Helvetica Neue", sans-serif !important;
40
+ }
41
+
42
+ .jp-carousel-info {
43
+ position: absolute;
44
+ bottom: 0;
45
+ text-align: right !important;
46
+ -webkit-font-smoothing: subpixel-antialiased !important;
47
+ }
48
+
49
+ .jp-carousel-info ::selection {
50
+ background: #68c9e8; /* Safari */
51
+ color: #fff;
52
+ }
53
+
54
+ .jp-carousel-info ::-moz-selection {
55
+ background: #68c9e8; /* Firefox */
56
+ color: #fff;
57
+ }
58
+
59
+ .jp-carousel-photo-info {
60
+ position: relative;
61
+ -webkit-transition: 400ms ease-out;
62
+ -moz-transition: 400ms ease-out;
63
+ -o-transition: 400ms ease-out;
64
+ transition: 400ms ease-out;
65
+ right: 25%;
66
+ width: 50%;
67
+ }
68
+
69
+ .jp-carousel-info h2 {
70
+ background: none !important;
71
+ border: none !important;
72
+ color: #999;
73
+ display: block !important;
74
+ font: normal 13px/1.25em "Helvetica Neue", sans-serif !important;
75
+ letter-spacing: 0 !important;
76
+ margin: 7px 0 0 0 !important;
77
+ padding: 10px 0 0 !important;
78
+ overflow: hidden;
79
+ text-align: right;
80
+ text-shadow: none !important;
81
+ text-transform: none !important;
82
+ -webkit-font-smoothing: subpixel-antialiased;
83
+ }
84
+
85
+ .jp-carousel-next-button,
86
+ .jp-carousel-previous-button {
87
+ text-indent: -9999px;
88
+ overflow: hidden;
89
+ cursor: pointer;
90
+ }
91
+
92
+ .jp-carousel-next-button span,
93
+ .jp-carousel-previous-button span {
94
+ position: absolute;
95
+ top: 0;
96
+ bottom: 0;
97
+ width: 82px;
98
+ zoom: 1;
99
+ filter: alpha(opacity=20);
100
+ opacity: 0.2;
101
+ -webkit-transition: 500ms opacity ease-out;
102
+ -moz-transition: 500ms opacity ease-out;
103
+ -o-transition: 500ms opacity ease-out;
104
+ transition: 500ms opacity ease-out;
105
+ }
106
+
107
+ .jp-carousel-next-button:hover span,
108
+ .jp-carousel-previous-button:hover span {
109
+ filter: alpha(opacity=60);
110
+ opacity: 0.6;
111
+ }
112
+ .jp-carousel-next-button span {
113
+ background-position: -110px center;
114
+ left: 0;
115
+ }
116
+
117
+ .jp-carousel-previous-button span {
118
+ background-position: -10px center;
119
+ right:0;
120
+ }
121
+
122
+ .jp-carousel-buttons {
123
+ margin:-18px -20px 15px;
124
+ padding:8px 10px;
125
+ border-bottom:1px solid #222;
126
+ background: #222;
127
+ text-align: center;
128
+ }
129
+
130
+ div.jp-carousel-buttons a {
131
+ border: none !important;
132
+ color: #999;
133
+ font: normal 11px/1.2em "Helvetica Neue", sans-serif !important;
134
+ letter-spacing: 0 !important;
135
+ padding: 5px 0 5px 2px;
136
+ text-decoration: none !important;
137
+ text-shadow: none !important;
138
+ vertical-align: baseline !important;
139
+ -webkit-font-smoothing: subpixel-antialiased;
140
+ }
141
+
142
+ div.jp-carousel-buttons a:hover {
143
+ color: #68c9e8;
144
+ border: none !important;
145
+ -webkit-transition: none !important;
146
+ -moz-transition: none !important;
147
+ -o-transition: none !important;
148
+ transition: none !important;
149
+ }
150
+
151
+ .jp-carousel-slide, .jp-carousel-slide img, .jp-carousel-next-button,
152
+ .jp-carousel-previous-button {
153
+ -webkit-transform:translate3d(0, 0, 0);
154
+ -moz-transform:translate3d(0, 0, 0);
155
+ -o-transform:translate3d(0, 0, 0);
156
+ -ms-transform:translate3d(0, 0, 0);
157
+ }
158
+
159
+ .jp-carousel-slide {
160
+ position:absolute;
161
+ width:0;
162
+ bottom:0;
163
+ background-color:#000;
164
+ border-radius:2px;
165
+ -webkit-border-radius:2px;
166
+ -moz-border-radius:2px;
167
+ -ms-border-radius:2px;
168
+ -o-border-radius:2px;
169
+ -webkit-transition: 400ms ease-out;
170
+ -moz-transition: 400ms ease-out;
171
+ -o-transition: 400ms ease-out;
172
+ transition: 400ms ease-out;
173
+ }
174
+
175
+ .jp-carousel-slide img {
176
+ display: block;
177
+ width: 100% !important;
178
+ height: 100% !important;
179
+ max-width: 100% !important;
180
+ max-height: 100% !important;
181
+ background: none !important;
182
+ border: none !important;
183
+ padding: 0 !important;
184
+ -webkit-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
185
+ -moz-box-shadow: 0 2px 8px rgba(0,0,0,0.1);
186
+ box-shadow: 0 2px 8px rgba(0,0,0,0.1);
187
+ zoom: 1;
188
+ filter: alpha(opacity=25);
189
+ opacity: 0.25;
190
+ -webkit-transition: opacity 400ms linear;
191
+ -moz-transition: opacity 400ms linear;
192
+ -o-transition: opacity 400ms linear;
193
+ transition: opacity 400ms linear;
194
+ }
195
+
196
+ .jp-carousel-slide.selected img {
197
+ filter: alpha(opacity=100);
198
+ opacity: 1;
199
+ }
200
+
201
+ .jp-carousel-close-hint {
202
+ color: #999;
203
+ cursor: default;
204
+ letter-spacing: 0 !important;
205
+ padding:0.35em 0 0;
206
+ position: absolute;
207
+ text-align: right;
208
+ width: 100%;
209
+ -webkit-transition: color 200ms linear;
210
+ -moz-transition: color 200ms linear;
211
+ -o-transition: color 200ms linear;
212
+ transition: color 200ms linear;
213
+ }
214
+
215
+ .jp-carousel-close-hint span {
216
+ cursor: pointer;
217
+ background-color: black;
218
+ background-color: rgba(0,0,0,0.8);
219
+ display: block;
220
+ height: 22px;
221
+ font: 400 24px/1 "Helvetica Neue", sans-serif !important;
222
+ line-height: 22px;
223
+ margin: 0 0.4em 0 0;
224
+ text-align: center;
225
+ vertical-align: middle;
226
+ width: 22px;
227
+ -moz-border-radius: 4px;
228
+ -webkit-border-radius: 4px;
229
+ border-radius: 4px;
230
+ -webkit-transition: border-color 200ms linear;
231
+ -moz-transition: border-color 200ms linear;
232
+ -o-transition: border-color 200ms linear;
233
+ transition: border-color 200ms linear;
234
+ }
235
+
236
+ .jp-carousel-close-hint:hover {
237
+ cursor: default;
238
+ color: #fff;
239
+ }
240
+
241
+ .jp-carousel-close-hint:hover span {
242
+ border-color: #fff;
243
+ }
244
+
245
+ div.jp-carousel-buttons a.jp-carousel-like,
246
+ div.jp-carousel-buttons a.jp-carousel-reblog,
247
+ div.jp-carousel-buttons a.jp-carousel-commentlink,
248
+ a.jp-carousel-image-download {
249
+ background: url(.././images/carousel-sprite.png?4) no-repeat;
250
+ background-size: 16px 160px;
251
+ }
252
+
253
+ div.jp-carousel-buttons a.jp-carousel-reblog,
254
+ div.jp-carousel-buttons a.jp-carousel-commentlink {
255
+ margin:0 0 0 14px !important;
256
+ }
257
+
258
+ div.jp-carousel-buttons a.jp-carousel-reblog.reblogged,
259
+ div.jp-carousel-buttons a.jp-carousel-like.liked {
260
+ background-color: #303030;
261
+ padding-left: 8px !important;
262
+ border-radius: 2px;
263
+ border-radius:2px;
264
+ -webkit-border-radius:2px;
265
+ -moz-border-radius:2px;
266
+ -ms-border-radius:2px;
267
+ -o-border-radius:2px;
268
+ }
269
+
270
+ div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
271
+ margin:0 -12px 0 2px !important;
272
+ }
273
+
274
+
275
+ div.jp-carousel-buttons a.jp-carousel-reblog,
276
+ div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
277
+ background-position: 6px -36px;
278
+ padding-right: 26px !important;
279
+ color: #999;
280
+ }
281
+
282
+ div.jp-carousel-buttons a.jp-carousel-commentlink {
283
+ background-position: 0px -116px;
284
+ padding-right: 19px !important;
285
+ }
286
+
287
+ div.jp-carousel-buttons a.jp-carousel-reblog.reblogged:hover {
288
+ cursor: default;
289
+ }
290
+
291
+ div.jp-carousel-buttons a.jp-carousel-reblog:hover {
292
+ background-position: 6px -56px;
293
+ color: #68c9e8;
294
+ }
295
+
296
+ div.jp-carousel-buttons a.jp-carousel-like {
297
+ background-position: 5px 5px;
298
+ padding-right: 24px !important;
299
+ }
300
+
301
+ div.jp-carousel-buttons a.jp-carousel-like:hover {
302
+ background-position: 5px -15px;
303
+ }
304
+
305
+ @media
306
+ only screen and (-webkit-min-device-pixel-ratio: 1.5),
307
+ only screen and (-o-min-device-pixel-ratio: 3/2),
308
+ only screen and (min--moz-device-pixel-ratio: 1.5),
309
+ only screen and (min-device-pixel-ratio: 1.5) {
310
+ div.jp-carousel-buttons a.jp-carousel-like,
311
+ div.jp-carousel-buttons a.jp-carousel-reblog,
312
+ div.jp-carousel-buttons a.jp-carousel-commentlink,
313
+ a.jp-carousel-image-download {
314
+ background-image: url(.././images/carousel-sprite-2x.png?4);
315
+ }
316
+ }
317
+
318
+ /* reblog */
319
+ div#carousel-reblog-box {
320
+ background: #222;
321
+ background: -moz-linear-gradient(bottom, #222, #333);
322
+ background: -webkit-gradient(linear, right bottom, right top, from(#222), to(#333));
323
+ padding: 3px 0 0;
324
+ display: none;
325
+ margin: 5px auto 0;
326
+ -moz-border-radius: 2px;
327
+ -webkit-border-radius: 2px;
328
+ border-radius: 2px;
329
+ -webkit-box-shadow: 0 0 20px rgba(0,0,0,0.9);
330
+ -moz-box-shadow: 0 0 20px rgba(0,0,0,0.9);
331
+ box-shadow: 0 0 20px rgba(0,0,0,0.9);
332
+ height: 74px;
333
+ width: 565px;
334
+ }
335
+
336
+ #carousel-reblog-box textarea {
337
+ background: #999;
338
+ font: 13px/1.4 "Helvetica Neue", sans-serif !important;
339
+ color: #444;
340
+ padding: 3px 6px;
341
+ width: 370px;
342
+ height: 48px;
343
+ float: right;
344
+ margin: 6px 9px 0 9px;
345
+ border: 1px solid #666;
346
+ -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
347
+ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
348
+ -moz-border-radius: 2px;
349
+ -webkit-border-radius: 2px;
350
+ border-radius: 2px;
351
+ }
352
+
353
+ #carousel-reblog-box textarea:focus {
354
+ background: #ccc;
355
+ color: #222;
356
+ }
357
+
358
+ #carousel-reblog-box label {
359
+ color: #aaa;
360
+ font-size: 11px;
361
+ padding-left: 2px;
362
+ padding-right: 2px;
363
+ display: inline;
364
+ font-weight: normal;
365
+ }
366
+
367
+ #carousel-reblog-box select {
368
+ width: 110px;
369
+ padding: 0;
370
+ font-size: 12px;
371
+ font-family: "Helvetica Neue", sans-serif !important;
372
+ background: #333;
373
+ color: #eee;
374
+ border: 1px solid #444;
375
+ margin-top:5px;
376
+ }
377
+
378
+ #carousel-reblog-box .submit,
379
+ #wrapper #carousel-reblog-box p.response {
380
+ float: right;
381
+ width: 154px;
382
+ padding-top: 0;
383
+ padding-right: 1px;
384
+ overflow: hidden;
385
+ height: 34px;
386
+ margin:3px 2px 0 0 !important;
387
+ }
388
+
389
+ #wrapper #carousel-reblog-box p.response {
390
+ font-size: 13px;
391
+ clear: none;
392
+ padding-right: 2px;
393
+ height: 34px;
394
+ color: #aaa;
395
+ }
396
+
397
+ #carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
398
+ font: 13px/24px "Helvetica Neue", sans-serif !important;
399
+ margin-top: 8px;
400
+ padding: 0 10px !important;
401
+ border-radius: 1em;
402
+ height: 24px;
403
+ color: #333;
404
+ cursor:pointer;
405
+ font-weight: normal;
406
+ background: #aaa;
407
+ background: -moz-linear-gradient(bottom, #aaa, #ccc);
408
+ background: -webkit-gradient(linear, right bottom, right top, from(#aaa), to(#ccc));
409
+ border: 1px solid #444;
410
+ }
411
+
412
+ #carousel-reblog-box input#carousel-reblog-submit:hover, #jp-carousel-comment-form-button-submit:hover {
413
+ background: #ccc;
414
+ background: -moz-linear-gradient(bottom, #ccc, #eee);
415
+ background: -webkit-gradient(linear, right bottom, right top, from(#ccc), to(#eee));
416
+ }
417
+
418
+ #carousel-reblog-box .canceltext {
419
+ color: #aaa;
420
+ font-size: 11px;
421
+ line-height: 24px;
422
+ }
423
+
424
+ #carousel-reblog-box .canceltext a {
425
+ color: #fff;
426
+ }
427
+ /* reblog end */
428
+
429
+
430
+ /** Title and Desc Start **/
431
+ .jp-carousel-titleanddesc {
432
+ border-top: 1px solid #222;
433
+ color: #999;
434
+ font-size: 15px;
435
+ padding-top: 24px;
436
+ margin-bottom: 20px;
437
+ font-weight:400;
438
+ }
439
+ .jp-carousel-titleanddesc-title {
440
+ font: 300 1.5em/1.1 "Helvetica Neue", sans-serif !important;
441
+ text-transform: none !important; /* prevents uppercase from leaking through */
442
+ color: #fff;
443
+ margin: 0 0 15px;
444
+ padding:0;
445
+ }
446
+
447
+ .jp-carousel-titleanddesc-desc p {
448
+ color: #999;
449
+ line-height:1.4;
450
+ margin-bottom: 0.75em;
451
+ }
452
+
453
+ .jp-carousel-titleanddesc p a,
454
+ .jp-carousel-comments p a,
455
+ .jp-carousel-info h2 a {
456
+ color: #fff !important;
457
+ border: none !important;
458
+ text-decoration: underline !important;
459
+ font-weight: normal !important;
460
+ font-style: normal !important;
461
+ }
462
+
463
+ .jp-carousel-titleanddesc p strong,
464
+ .jp-carousel-titleanddesc p b {
465
+ font-weight: bold;
466
+ color: #999;
467
+ }
468
+
469
+ .jp-carousel-titleanddesc p em,
470
+ .jp-carousel-titleanddesc p i {
471
+ font-style: italic;
472
+ color: #999;
473
+ }
474
+
475
+
476
+ .jp-carousel-titleanddesc p a:hover,
477
+ .jp-carousel-comments p a:hover,
478
+ .jp-carousel-info h2 a:hover {
479
+ color: #68c9e8 !important;
480
+ }
481
+
482
+ .jp-carousel-titleanddesc p:empty {
483
+ display: none;
484
+ }
485
+
486
+ .jp-carousel-photo-info h1:before,
487
+ .jp-carousel-photo-info h1:after,
488
+ .jp-carousel-left-column-wrapper h1:before,
489
+ .jp-carousel-left-column-wrapper h1:after {
490
+ content:none !important;
491
+ }
492
+ /** Title and Desc End **/
493
+
494
+ /** Meta Box Start **/
495
+ .jp-carousel-image-meta {
496
+ background: #111;
497
+ border: 1px solid #222;
498
+ color: #fff;
499
+ font-size: 13px;
500
+ font: 12px/1.4 "Helvetica Neue", sans-serif !important;
501
+ overflow: hidden;
502
+ padding: 18px 20px;
503
+ width: 209px !important;
504
+ }
505
+
506
+ .jp-carousel-image-meta li,
507
+ .jp-carousel-image-meta h5 {
508
+ font-family: "Helvetica Neue", sans-serif !important;
509
+ position: inherit !important;
510
+ top: auto !important;
511
+ left: auto !important;
512
+ right: auto !important;
513
+ bottom: auto !important;
514
+ background: none !important;
515
+ border: none !important;
516
+ font-weight: 400 !important;
517
+ line-height: 1.3em !important;
518
+ }
519
+
520
+ .jp-carousel-image-meta ul {
521
+ margin: 0 !important;
522
+ padding: 0 !important;
523
+ list-style: none !important;
524
+ }
525
+
526
+ .jp-carousel-image-meta li {
527
+ width: 48% !important;
528
+ float: right !important;
529
+ margin: 0 0 15px 2% !important;
530
+ color: #fff !important;
531
+ font-size:13px !important;
532
+ }
533
+
534
+ .jp-carousel-image-meta h5 {
535
+ color: #999 !important;
536
+ text-transform: uppercase !important;
537
+ font-size:10px !important;
538
+ margin:0 0 2px !important;
539
+ letter-spacing: 0.1em !important;
540
+ }
541
+
542
+ a.jp-carousel-image-download {
543
+ padding-right: 23px;
544
+ display: inline-block;
545
+ clear: both;
546
+ color: #999;
547
+ line-height: 1;
548
+ font-weight: 400;
549
+ font-size: 13px;
550
+ text-decoration: none;
551
+ background-position: 0 -82px;
552
+ }
553
+
554
+ a.jp-carousel-image-download span.photo-size {
555
+ font-size: 11px;
556
+ border-radius: 1em;
557
+ margin-right: 2px;
558
+ display: inline-block;
559
+ }
560
+
561
+ a.jp-carousel-image-download span.photo-size-times {
562
+ padding: 0 2px 0 1px;
563
+ }
564
+
565
+ a.jp-carousel-image-download:hover {
566
+ background-position: 0 -102px;
567
+ color: #68c9e8;
568
+ border: none !important;
569
+ }
570
+
571
+ /** Meta Box End **/
572
+
573
+ /** GPS Map Start **/
574
+ .jp-carousel-image-map {
575
+ position: relative;
576
+ margin: -20px -20px 20px;
577
+ border-bottom: 1px solid rgba( 255, 255, 255, 0.17 );
578
+ height: 154px;
579
+ }
580
+
581
+ .jp-carousel-image-map img.gmap-main {
582
+ -moz-border-radius-topleft: 6px;
583
+ border-top-right-radius: 6px;
584
+ border-left: 1px solid rgba( 255, 255, 255, 0.17 );
585
+ }
586
+ .jp-carousel-image-map div.gmap-topright {
587
+ width: 94px;
588
+ height: 154px;
589
+ position: absolute;
590
+ top: 0;
591
+ left: 0;
592
+ }
593
+ .jp-carousel-image-map div.imgclip {
594
+ overflow: hidden;
595
+ -moz-border-radius-topright: 6px;
596
+ border-top-left-radius: 6px;
597
+ }
598
+ .jp-carousel-image-map div.gmap-topright img {
599
+ margin-right: -40px;
600
+ }
601
+ .jp-carousel-image-map img.gmap-bottomright {
602
+ position: absolute;
603
+ top: 96px;
604
+ left: 0;
605
+ }
606
+
607
+ /** Comments Start **/
608
+ .jp-carousel-comments {
609
+ font: 15px/1.7 "Helvetica Neue", sans-serif !important;
610
+ font-weight: 400;
611
+ background:none transparent;
612
+ }
613
+
614
+ .jp-carousel-comments p a:hover, .jp-carousel-comments p a:focus, .jp-carousel-comments p a:active {
615
+ color: #68c9e8 !important;
616
+ }
617
+
618
+ .jp-carousel-comment {
619
+ background:none transparent;
620
+ color: #999;
621
+ margin-bottom: 20px;
622
+ clear:right;
623
+ overflow: auto;
624
+ width: 100%
625
+ }
626
+
627
+ .jp-carousel-comment p {
628
+ color: #999 !important;
629
+ }
630
+
631
+ .jp-carousel-comment .comment-author {
632
+ font-size: 13px;
633
+ font-weight:400;
634
+ padding:0;
635
+ width:auto;
636
+ display: inline;
637
+ float:none;
638
+ border:none;
639
+ margin:0;
640
+ }
641
+
642
+ .jp-carousel-comment .comment-author a {
643
+ color: #fff;
644
+ }
645
+
646
+ .jp-carousel-comment .comment-gravatar {
647
+ float:right;
648
+ }
649
+
650
+ .jp-carousel-comment .comment-content {
651
+ border:none;
652
+ margin-right:85px;
653
+ padding: 0;
654
+ }
655
+
656
+ .jp-carousel-comment .avatar {
657
+ margin:0 0 0 20px;
658
+ -moz-border-radius: 4px;
659
+ -webkit-border-radius: 4px;
660
+ border-radius: 4px;
661
+ border: none !important;
662
+ padding: 0 !important;
663
+ background-color: transparent !important;
664
+ }
665
+
666
+ .jp-carousel-comment .comment-date {
667
+ color:#999;
668
+ margin-top: 4px;
669
+ font-size:11px;
670
+ display: inline;
671
+ float: left;
672
+ /*clear: right;*/
673
+ }
674
+
675
+ #jp-carousel-comment-form {
676
+ margin:0 0 10px !important;
677
+ float: right;
678
+ width: 100%;
679
+ }
680
+
681
+ textarea#jp-carousel-comment-form-comment-field {
682
+ background: rgba(34,34,34,0.9);
683
+ border: 1px solid #3a3a3a;
684
+ color: #aaa;
685
+ font: 15px/1.4 "Helvetica Neue", sans-serif !important;
686
+ width: 100%;
687
+ padding: 10px 10px 5px;
688
+ margin: 0;
689
+ float: none;
690
+ height: 147px;
691
+ -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
692
+ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
693
+ -moz-border-radius: 3px;
694
+ -webkit-border-radius: 3px;
695
+ border-radius: 3px;
696
+ overflow: hidden;
697
+ -webkit-box-sizing: border-box;
698
+ -moz-box-sizing: border-box;
699
+ box-sizing: border-box;
700
+ }
701
+
702
+ textarea#jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
703
+ color: #555;
704
+ }
705
+
706
+ textarea#jp-carousel-comment-form-comment-field:focus {
707
+ background: #ccc;
708
+ color: #222;
709
+ }
710
+
711
+ textarea#jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
712
+ color: #aaa;
713
+ }
714
+
715
+ #jp-carousel-comment-form-spinner {
716
+ color: #fff;
717
+ margin:22px 10px 0 0;
718
+ display: block;
719
+ width: 20px;
720
+ height: 20px;
721
+ float: right;
722
+ }
723
+
724
+ #jp-carousel-comment-form-submit-and-info-wrapper {
725
+ display: none;
726
+ /*margin-bottom:15px;*/
727
+ overflow: hidden;
728
+ width: 100%
729
+ }
730
+
731
+ #jp-carousel-comment-form-commenting-as {
732
+ }
733
+
734
+ #jp-carousel-comment-form-commenting-as input {
735
+ background: rgba(34,34,34,0.9);
736
+ border: 1px solid #3a3a3a;
737
+ color: #aaa;
738
+ font: 13px/1.4 "Helvetica Neue", sans-serif !important;
739
+ padding: 3px 6px;
740
+ float: right;
741
+ -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
742
+ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.2);
743
+ -moz-border-radius: 2px;
744
+ -webkit-border-radius: 2px;
745
+ border-radius: 2px;
746
+ width:285px;
747
+ }
748
+
749
+ #jp-carousel-comment-form-commenting-as input:focus {
750
+ background: #ccc;
751
+ color: #222;
752
+ }
753
+
754
+ #jp-carousel-comment-form-commenting-as p {
755
+ font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
756
+ margin:22px 0 0;
757
+ float: right;
758
+ }
759
+
760
+ #jp-carousel-comment-form-commenting-as fieldset {
761
+ float:right;
762
+ border:none;
763
+ margin:20px 0 0 0;
764
+ padding:0;
765
+ }
766
+
767
+ #jp-carousel-comment-form-commenting-as fieldset {
768
+ clear: both;
769
+ }
770
+
771
+ #jp-carousel-comment-form-commenting-as label {
772
+ font: 400 13px/1.7 "Helvetica Neue", sans-serif !important;
773
+ margin:0 0 3px 20px;
774
+ float:right;
775
+ width:100px;
776
+ }
777
+
778
+ #jp-carousel-comment-form-button-submit {
779
+ margin-top: 20px;
780
+ float:left;
781
+ }
782
+
783
+ #js-carousel-comment-form-container {
784
+ margin-bottom:15px;
785
+ overflow: auto;
786
+ width: 100%;
787
+ }
788
+
789
+ #jp-carousel-comment-form-container {
790
+ margin-bottom:15px;
791
+ overflow: auto;
792
+ width: 100%;
793
+ }
794
+
795
+ #jp-carousel-comment-post-results {
796
+ display: none;
797
+ overflow:auto;
798
+ width:100%;
799
+ }
800
+
801
+ #jp-carousel-comment-post-results span {
802
+ display:block;
803
+ text-align: center;
804
+ margin-top:20px;
805
+ width: 100%;
806
+ overflow: auto;
807
+ padding: 1em 0;
808
+ box-sizing: border-box;
809
+ background: rgba( 0, 0, 0, 0.7 );
810
+ border-radius: 2px;
811
+ font: 13px/1.4 "Helvetica Neue", sans-serif !important;
812
+ border: 1px solid rgba( 255, 255, 255, 0.17 );
813
+ -webkit-box-shadow: inset 0px 5px 5px 0px rgba(0, 0, 0, 1);
814
+ box-shadow: inset 0px 5px 5px 0px rgba(0, 0, 0, 1);
815
+ }
816
+
817
+ .jp-carousel-comment-post-error {
818
+ color:#DF4926;
819
+ }
820
+
821
+ .jp-carousel-comment-post-success {
822
+ /*color:#21759B;*/
823
+ }
824
+
825
+ #jp-carousel-comments-closed {
826
+ display: none;
827
+ color: #999;
828
+ }
829
+
830
+ #jp-carousel-comments-loading {
831
+ font: 444 15px/1.7 "Helvetica Neue", sans-serif !important;
832
+ display: none;
833
+ color: #999;
834
+ text-align: right;
835
+ margin-bottom: 20px;
836
+ }
837
+
838
+
839
+ /* ----- Light variant ----- */
840
+
841
+ .jp-carousel-light .jp-carousel-overlay {
842
+ background: #fff;
843
+ }
844
+
845
+ .jp-carousel-light .jp-carousel-next-button:hover span,
846
+ .jp-carousel-light .jp-carousel-previous-button:hover span {
847
+ opacity: 0.8;
848
+ }
849
+
850
+ .jp-carousel-light .jp-carousel-close-hint:hover,
851
+ .jp-carousel-light .jp-carousel-titleanddesc div {
852
+ color: #000 !important;
853
+ }
854
+
855
+ .jp-carousel-light .jp-carousel-comments p a,
856
+ .jp-carousel-light .jp-carousel-comment .comment-author a,
857
+ .jp-carousel-light .jp-carousel-titleanddesc p a,
858
+ .jp-carousel-light .jp-carousel-titleanddesc p a,
859
+ .jp-carousel-light .jp-carousel-comments p a,
860
+ .jp-carousel-light .jp-carousel-info h2 a {
861
+ color: #1e8cbe !important;
862
+ }
863
+
864
+ .jp-carousel-light .jp-carousel-comments p a:hover,
865
+ .jp-carousel-light .jp-carousel-comment .comment-author a:hover,
866
+ .jp-carousel-light .jp-carousel-titleanddesc p a:hover,
867
+ .jp-carousel-light .jp-carousel-titleanddesc p a:hover,
868
+ .jp-carousel-light .jp-carousel-comments p a:hover,
869
+ .jp-carousel-light .jp-carousel-info h2 a:hover {
870
+ color: #f1831e !important;
871
+ }
872
+
873
+ .jp-carousel-light .jp-carousel-info h2,
874
+ .jp-carousel-light .jp-carousel-titleanddesc,
875
+ .jp-carousel-light .jp-carousel-titleanddesc p,
876
+ .jp-carousel-light .jp-carousel-comment,
877
+ .jp-carousel-light .jp-carousel-comment p,
878
+ .jp-carousel-light div.jp-carousel-buttons a,
879
+ .jp-carousel-light .jp-carousel-titleanddesc p strong,
880
+ .jp-carousel-light .jp-carousel-titleanddesc p b,
881
+ .jp-carousel-light .jp-carousel-titleanddesc p em,
882
+ .jp-carousel-light .jp-carousel-titleanddesc p i {
883
+ color: #666;
884
+ }
885
+
886
+ .jp-carousel-light .jp-carousel-buttons {
887
+ border-bottom-color: #f0f0f0;
888
+ background: #f5f5f5;
889
+ }
890
+
891
+ .jp-carousel-light div.jp-carousel-buttons a:hover {
892
+ text-decoration: none;
893
+ color: #f1831e;
894
+ }
895
+
896
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog,
897
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog:hover {
898
+ background-position: 4px -56px;
899
+ padding-right: 24px !important;
900
+ }
901
+
902
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged,
903
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked {
904
+ background-color: #2ea2cc;
905
+ color: #fff;
906
+ }
907
+
908
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-commentlink {
909
+ background-position: 0px -136px;
910
+ }
911
+
912
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like,
913
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like:hover {
914
+ background-position: 5px -15px;
915
+ padding-right: 23px !important;
916
+ }
917
+
918
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-reblog.reblogged {
919
+ background-position: 5px -36px;
920
+ }
921
+
922
+ .jp-carousel-light div.jp-carousel-buttons a.jp-carousel-like.liked {
923
+ background-position: 5px 5px;
924
+ }
925
+
926
+ .jp-carousel-light div#carousel-reblog-box {
927
+ background: #eee;
928
+ background: -moz-linear-gradient(bottom, #ececec, #f7f7f7);
929
+ background: -webkit-gradient(linear, right bottom, right top, from(#ececec), to(#f7f7f7));
930
+ -webkit-box-shadow: 0 2px 6px rgba(0,0,0,0.1);
931
+ -moz-box-shadow: 0 2px 10px rgba(0,0,0,0.1);
932
+ box-shadow: 0 2px 10px rgba(0,0,0,0.1);
933
+ border:1px solid #ddd;
934
+ }
935
+
936
+ .jp-carousel-light #carousel-reblog-box textarea {
937
+ border: 1px inset #ccc;
938
+ color: #666;
939
+ border: 1px solid #cfcfcf;
940
+ background: #fff;
941
+ }
942
+
943
+ .jp-carousel-light #carousel-reblog-box .canceltext {
944
+ color: #888;
945
+ }
946
+
947
+ .jp-carousel-light #carousel-reblog-box .canceltext a {
948
+ color: #666;
949
+ }
950
+
951
+ .jp-carousel-light #carousel-reblog-box select {
952
+ background: #eee;
953
+ color: #333;
954
+ border: 1px solid #aaa;
955
+ }
956
+
957
+ .jp-carousel-light #carousel-reblog-box input#carousel-reblog-submit, #jp-carousel-comment-form-button-submit {
958
+ color: #333;
959
+ background: #fff;
960
+ background: -moz-linear-gradient(bottom, #ddd, #fff);
961
+ background: -webkit-gradient(linear, right bottom, right top, from(#ddd), to(#fff));
962
+ border: 1px solid #aaa;
963
+ }
964
+
965
+ .jp-carousel-light .jp-carousel-image-meta {
966
+ background: #fafafa;
967
+ border: 1px solid #eee;
968
+ border-top-color: #f5f5f5;
969
+ border-right-color: #f5f5f5;
970
+ color: #333;
971
+ }
972
+
973
+ .jp-carousel-light .jp-carousel-image-meta li {
974
+ color: #000 !important;
975
+ }
976
+
977
+ .jp-carousel-light .jp-carousel-close-hint {
978
+ color: #ccc;
979
+ }
980
+
981
+ .jp-carousel-light .jp-carousel-close-hint span {
982
+ background-color: white;
983
+ border-color: #ccc;
984
+ }
985
+
986
+ .jp-carousel-light #jp-carousel-comment-form-comment-field::-webkit-input-placeholder {
987
+ color: #aaa;
988
+ }
989
+
990
+ .jp-carousel-light #jp-carousel-comment-form-comment-field:focus {
991
+ color: #333;
992
+ }
993
+
994
+ .jp-carousel-light #jp-carousel-comment-form-comment-field:focus::-webkit-input-placeholder {
995
+ color: #ddd;
996
+ }
997
+
998
+ .jp-carousel-light a.jp-carousel-image-download {
999
+ background-position: 0 -102px;
1000
+ }
1001
+
1002
+ .jp-carousel-light a.jp-carousel-image-download:hover {
1003
+ background-position: 0 -102px;
1004
+ color: #f1831e;
1005
+ }
1006
+
1007
+ .jp-carousel-light textarea#jp-carousel-comment-form-comment-field {
1008
+ background: #fbfbfb;
1009
+ color: #333;
1010
+ border: 1px solid #dfdfdf;
1011
+ -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
1012
+ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
1013
+ }
1014
+
1015
+ .jp-carousel-light #jp-carousel-comment-form-commenting-as input {
1016
+ background: #fbfbfb;
1017
+ border: 1px solid #dfdfdf;
1018
+ color: #333;
1019
+ -webkit-box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
1020
+ box-shadow: inset 2px 2px 2px rgba(0,0,0,0.1);
1021
+ }
1022
+
1023
+ .jp-carousel-light #jp-carousel-comment-form-commenting-as input:focus {
1024
+ background: #fbfbfb;
1025
+ color: #333;
1026
+ }
1027
+
1028
+ .jp-carousel-light #jp-carousel-comment-post-results span {
1029
+ background: #f7f7f7;
1030
+ border:1px solid #dfdfdf;
1031
+ -webkit-box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
1032
+ box-shadow: inset 0px 0px 5px rgba(0, 0, 0, 0.05);
1033
+ }
1034
+
1035
+ .jp-carousel-light .jp-carousel-slide {
1036
+ background-color:#fff;
1037
+ }
1038
+
1039
+ .jp-carousel-light .jp-carousel-titleanddesc {
1040
+ border-top: 1px solid #eee;
1041
+ }
1042
+
1043
+ .jp-carousel-light .jp-carousel-fadeaway {
1044
+ background: -moz-linear-gradient(bottom, rgba(255,255,255,0.75), rgba(255,255,255,0));
1045
+ background: -webkit-gradient(linear, right bottom, right top, from(rgba(255,255,255,0.75)), to(rgba(255,255,255,0)));
1046
+ }
1047
+
1048
+ /* Small screens */
1049
+ @media only screen and (max-width: 760px) {
1050
+
1051
+ .jp-carousel-info {
1052
+ margin: 0 10px !important;
1053
+ }
1054
+
1055
+ .jp-carousel-next-button, .jp-carousel-previous-button {
1056
+ display: none !important;
1057
+ }
1058
+
1059
+ .jp-carousel-buttons {
1060
+ display: none !important;
1061
+ }
1062
+
1063
+ .jp-carousel-image-meta {
1064
+ float: none !important;
1065
+ width: 100% !important;
1066
+ -moz-box-sizing:border-box;
1067
+ -webkit-box-sizing:border-box;
1068
+ box-sizing: border-box;
1069
+ }
1070
+
1071
+ .jp-carousel-close-hint {
1072
+ font-weight: 800 !important;
1073
+ font-size: 26px !important;
1074
+ position: fixed !important;
1075
+ top: -10px;
1076
+ }
1077
+
1078
+ .jp-carousel-slide img {
1079
+ filter: alpha(opacity=100);
1080
+ opacity: 1;
1081
+ }
1082
+
1083
+ .jp-carousel-wrap {
1084
+ background-color: #000;
1085
+ }
1086
+
1087
+ .jp-carousel-fadeaway {
1088
+ display: none;
1089
+ }
1090
+
1091
+ #jp-carousel-comment-form-container {
1092
+ display: none !important;
1093
+ }
1094
+
1095
+ .jp-carousel-titleanddesc {
1096
+ padding-top: 0 !important;
1097
+ border: none !important;
1098
+ }
1099
+ .jp-carousel-titleanddesc-title {
1100
+ font-size: 1em !important;
1101
+ }
1102
+
1103
+ .jp-carousel-left-column-wrapper {
1104
+ padding: 0;
1105
+ }
1106
+ }