PluginProbe
Photonic Gallery & Lightbox for Flickr, SmugMug & Others / 2.25
Photonic Gallery & Lightbox for Flickr, SmugMug & Others v2.25
3.36 3.35 3.34 3.33 2.19 2.20 2.21 2.22 2.23 2.24 2.25 2.26 2.27 2.28 2.29 2.30 2.31 2.32 2.33 2.34 2.40 2.41 2.42 2.43 2.44 All 141 releases
photonic / include / scripts / front-end / src / core / core.js

core.js in Photonic Gallery & Lightbox for Flickr, SmugMug & Others 2.25, at include/scripts/front-end/src/core/core.js

436 lines 16.8 KB
No matching file
Up and down to move Enter to open Esc to close
Raw Download Zip
1 /**
2 * photonic.js - Contains all custom JavaScript functions required by Photonic
3 */
4 var deep = location.hash, lastDeep, supportsSVG = !! document.createElementNS && !! document.createElementNS( 'http://www.w3.org/2000/svg', 'svg').createSVGRect;
5 var photonicLightbox;
6 var photonicLightboxList = {};
7 var photonicPrompterList = {};
8
9 if (!String.prototype.includes) {
10 String.prototype.includes = function(search, start) {
11 'use strict';
12 if (typeof start !== 'number') {
13 start = 0;
14 }
15
16 if (start + search.length > this.length) {
17 return false;
18 } else {
19 return this.indexOf(search, start) !== -1;
20 }
21 };
22 }
23
24 window.photonicHtmlDecode = function(value){
25 return $('<div/>').html(value).text();
26 };
27
28 window.photonicShowLoading = function() {
29 var loading = $('.photonic-loading');
30 if (loading.length > 0) {
31 loading = loading[0];
32 }
33 else {
34 loading = document.createElement('div');
35 }
36 loading.className = 'photonic-loading';
37 $(loading).appendTo($('body')).show();
38 };
39
40 window.photonicInitializePasswordPrompter = function(selector) {
41 var selectorNoHash = selector.replace(/^#+/g, '');
42 var prompter = new Modalise(selectorNoHash).attach();
43 photonicPrompterList[selector] = prompter;
44 prompter.show();
45 };
46
47 window.photonicDisplayLevel2 = function(provider, type, args) {
48 var identifier = args['panel_id'].substr(('photonic-' + provider + '-' + type + '-thumb-').length);
49 var panel = '#photonic-' + provider + '-panel-' + identifier;
50
51 if ($(panel).length === 0) {
52 if ($('#' + args['panel_id']).hasClass('photonic-' + provider + '-passworded')) {
53 var prompter = '#photonic-' + provider + '-' + type + '-prompter-' + identifier;
54 photonicInitializePasswordPrompter(prompter);
55 }
56 else {
57 photonicShowLoading();
58 photonicProcessRequest(provider, type, identifier, args);
59 }
60 }
61 else {
62 photonicShowLoading();
63 photonicRedisplayPopupContents(provider, identifier, panel, args);
64 }
65 };
66
67 window.photonicProcessRequest = function(provider, type, identifier, args) {
68 args['action'] = 'photonic_display_level_2_contents';
69 $.post(Photonic_JS.ajaxurl, args, function(data) {
70 if (data.substr(0, Photonic_JS.password_failed.length) === Photonic_JS.password_failed) {
71 $('.photonic-loading').hide();
72 var prompter = '#photonic-' + provider + '-' + type + '-prompter-' + identifier;
73 var prompterDialog = photonicPrompterList[prompter];
74 if (prompterDialog !== undefined && prompterDialog !== null) {
75 prompterDialog.show();
76 }
77 }
78 else {
79 if ('show' === args['popup']) {
80 photonicDisplayPopup(data, provider, type, identifier);
81 }
82 else {
83 if (data !== '') {
84 photonicBypassPopup(data);
85 }
86 else {
87 $('.photonic-loading').hide();
88 }
89 }
90 }
91 });
92 };
93
94 window.photonicProcessL3Request = function(clicked, container, args) {
95 args['action'] = 'photonic_display_level_3_contents';
96 photonicShowLoading();
97 $.post(Photonic_JS.ajaxurl, args, function(data){
98 var insert = $(data);
99 insert.insertAfter($(container));
100 var layout = insert.find('.photonic-level-2-container');
101 if (layout.hasClass('photonic-random-layout')) {
102 photonicJustifiedGridLayout(false);
103 }
104 else if (layout.hasClass('photonic-mosaic-layout')) {
105 photonicMosaicLayout(false);
106 }
107 else if (layout.hasClass('photonic-masonry-layout')) {
108 photonicMasonryLayout(false);
109 }
110 insert.find('.photonic-level-2').css({'display': 'inline-block'});
111 if (!$.fn.tooltip) {
112 photonicTooltip('[data-photonic-tooltip]', '.photonic-tooltip-container');
113 }
114 $('.photonic-loading').hide();
115 clicked.removeClass('photonic-level-3-expand-plus').addClass('photonic-level-3-expand-up').attr('title', Photonic_JS.minimize_panel === undefined ? 'Hide' : Photonic_JS.minimize_panel);
116 });
117 };
118
119 window.photonicMoveHTML5External = function() {
120 var $videos = $('#photonic-html5-external-videos');
121 $videos = $videos.length ? $videos : $('<div style="display:none;" id="photonic-html5-external-videos"></div>').appendTo(document.body);
122 $('.photonic-html5-external').each(function() {
123 $(this).removeClass('photonic-html5-external').appendTo($videos);
124 });
125 };
126 photonicMoveHTML5External();
127
128 if ($.fn.lightSlider !== undefined) {
129 $('ul.photonic-slideshow-content').each(function() {
130 var $slideshow = $(this);
131 var slideAdjustment = Photonic_JS.slide_adjustment === undefined ? 'adapt-height-width' : Photonic_JS.slide_adjustment;
132 var fadeMode = $slideshow.data('photonicFx') === 'fade' && ($slideshow.data('photonicLayout') === 'strip-below') &&
133 ($slideshow.data('photonicColumns') === 'auto' || $slideshow.data('photonicColumns') === '');
134
135 var itemCount = ($slideshow.data('photonicColumns') === 'auto' || $slideshow.data('photonicColumns') === '' || isNaN(parseInt($slideshow.data('photonicColumns')))) ? 1 : parseInt($slideshow.data('photonicColumns'));
136 $slideshow.waitForImages(function() {
137 $slideshow.lightSlider({
138 gallery: $slideshow.data('photonicLayout') !== 'no-strip' && $slideshow.data('photonicStripStyle') === 'thumbs',
139 pager: $slideshow.data('photonicLayout') !== 'no-strip',
140 vertical: $slideshow.data('photonicLayout') === 'strip-right' || $slideshow.data('photonicLayout') === 'strip-left',
141 item: itemCount,
142 auto: Photonic_JS.slideshow_autostart,
143 loop: true,
144 currentPagerPosition: 'middle',
145 mode: fadeMode ? 'fade' : 'slide',
146 speed: $slideshow.data('photonicSpeed'),
147 pauseOnHover: $slideshow.data('photonicPause'),
148 pause: $slideshow.data('photonicTimeout'),
149 adaptiveHeight: slideAdjustment === 'adapt-height' || slideAdjustment === 'adapt-height-width',
150 autoWidth: slideAdjustment === 'start-next',
151 controls: $slideshow.data('photonicControls') === 'show',
152 responsive : [
153 {
154 breakpoint:800,
155 settings: {
156 item: itemCount !== 1 ? 2 : 1,
157 slideMove: 1
158 }
159 },
160 {
161 breakpoint:480,
162 settings: {
163 item: 1,
164 slideMove: 1
165 }
166 }
167 ],
168 onSliderLoad: function(el) {
169 // photonicLightbox.initializeForSlideshow('#' + $slideshow.attr('id'), el);
170 }
171 });
172
173 var layout = $slideshow.attr('data-photonic-layout');
174 if (layout === 'strip-above') {
175 var gallery = $slideshow.parents('.lSSlideOuter');
176 gallery.find('.lSGallery').insertBefore(gallery.find('.lSSlideWrapper'));
177 }
178 });
179 });
180 }
181 else if (console !== undefined && $('ul.photonic-slideshow-content').length > 0) {
182 console.error('LightSlider not found! Please ensure that the LightSlider script is available and loaded before Photonic.');
183 }
184
185 $(document).on('click', '.photonic-level-2-thumb', function(e){
186 e.preventDefault();
187 var $clicked = $(this);
188 var provider = $clicked.data('photonicProvider');
189 var singular = $clicked.data('photonicSingular');
190 var args = {"panel_id": $clicked.attr('id'), "popup": $clicked.data('photonicPopup'), "photo_count": $clicked.data('photonicPhotoCount'), "photo_more": $clicked.data('photonicPhotoMore')};
191 if (provider === 'google' || provider === 'zenfolio') args.thumb_size = $clicked.data('photonicThumbSize');
192 if (provider === 'flickr' || provider === 'smug' || provider === 'google' || provider === 'zenfolio') {
193 args.overlay_size = $clicked.data('photonicOverlaySize');
194 args.overlay_video_size = $clicked.data('photonicOverlayVideoSize');
195 }
196 if (provider === 'google') { args.overlay_crop = $clicked.data('photonicOverlayCrop'); }
197 photonicDisplayLevel2(provider, singular, args);
198 });
199
200 $(document).on('click', '.photonic-password-submit', function(e) {
201 e.preventDefault();
202 var album_id = $(this).parents('.photonic-password-prompter').attr('id');
203 var components = album_id.split('-');
204 var provider = components[1];
205 var singular_type = components[2];
206 var album_key = components.slice(4).join('-');
207
208 var password = $(this).parent().parent().find('input[name="photonic-' + provider + '-password"]');
209 password = password[0].value;
210
211 var thumb_id = 'photonic-' + provider + '-' + singular_type + '-thumb-' + album_key;
212 var thumb = $('#' + thumb_id);
213
214 var prompter = photonicPrompterList['#photonic-' + provider + '-' + singular_type + '-prompter-' + album_key];
215 if (prompter !== undefined && prompter !== null) {
216 prompter.hide();
217 }
218
219 photonicShowLoading();
220 var args = {'panel_id': thumb_id, "popup": thumb.data('photonicPopup'), "photo_count": thumb.data('photonicPhotoCount'), "photo_more": thumb.data('photonicPhotoMore') };
221 if (provider === 'smug') {
222 args.password = password;
223 args.overlay_size = thumb.data('photonicOverlaySize');
224 }
225 else if (provider === 'zenfolio') {
226 args.password = password;
227 args.realm_id = thumb.data('photonicRealm');
228 args.thumb_size = thumb.data('photonicThumbSize');
229 args.overlay_size = thumb.data('photonicOverlaySize');
230 }
231 photonicProcessRequest(provider, singular_type, album_key, args);
232 });
233
234 $('.photonic-flickr-stream a, a.photonic-flickr-set-thumb, a.photonic-flickr-gallery-thumb, .photonic-google-stream a, .photonic-smug-stream a, .photonic-instagram-stream a, .photonic-zenfolio-stream a, a.photonic-zenfolio-set-thumb').each(function() {
235 if (!($(this).parent().hasClass('photonic-header-title'))) {
236 var title = $(this).attr('title');
237 $(this).attr('title', photonicHtmlDecode(title));
238 }
239 });
240
241 $('a.photonic-level-3-expand').on('click', function(e) {
242 e.preventDefault();
243 var current = $(this);
244 var header = current.parent().parent().parent();
245 if (current.hasClass('photonic-level-3-expand-plus')) {
246 photonicProcessL3Request(current, header, {'view': 'collections', 'node': current.data('photonicLevel-3'), 'layout': current.data('photonicLayout')});
247 }
248 else if (current.hasClass('photonic-level-3-expand-up')) {
249 header.next('.photonic-stream').slideUp();
250 current.removeClass('photonic-level-3-expand-up').addClass('photonic-level-3-expand-down').attr('title', Photonic_JS.maximize_panel === undefined ? 'Show' : Photonic_JS.maximize_panel);
251 }
252 else if (current.hasClass('photonic-level-3-expand-down')) {
253 header.next('.photonic-stream').slideDown();
254 current.removeClass('photonic-level-3-expand-down').addClass('photonic-level-3-expand-up').attr('title', Photonic_JS.minimize_panel === undefined ? 'Hide' : Photonic_JS.minimize_panel);
255 }
256 });
257
258 $(document).on('click', 'a.photonic-more-button.photonic-more-dynamic', function(e) {
259 e.preventDefault();
260 var clicked = $(this);
261 var container = clicked.parent().find('.photonic-level-1-container, .photonic-level-2-container');
262 var query = container.data('photonicStreamQuery');
263 var provider = container.data('photonicStreamProvider');
264 var level = container.hasClass('photonic-level-1-container') ? 'level-1' : 'level-2';
265 var containerId = container.attr('id');
266
267 photonicShowLoading();
268 $.post(Photonic_JS.ajaxurl, { 'action': 'photonic_load_more', 'provider': provider, 'query': query }, function(data) {
269 var ret = $(data);
270 var images = ret.find('.photonic-' + level);
271 var more_button = ret.find('.photonic-more-button');
272 var one_existing = container.find('a.photonic-launch-gallery')[0];
273
274 images.children().attr('rel', $(one_existing).attr('rel'));
275 if (Photonic_JS.slideshow_library === 'lightcase') images.children().attr('data-rel', 'lightcase:' + $(one_existing).attr('rel'));
276
277 images.appendTo(container);
278 photonicMoveHTML5External();
279
280 if (images.length === 0) {
281 $('.photonic-loading').hide();
282 clicked.fadeOut().remove();
283 }
284
285 var lightbox;
286 if (Photonic_JS.slideshow_library === 'imagelightbox') {
287 lightbox = photonicLightboxList['a[rel="' + $(one_existing).attr('rel') + '"]'];
288 if (level === 'level-1') {
289 lightbox.addToImageLightbox(images.find('a'));
290 }
291 }
292 else if (Photonic_JS.slideshow_library === 'lightcase') {
293 photonicLightbox.initialize('a[data-rel="' + $(one_existing).attr('data-rel') + '"]');
294 }
295 else if (Photonic_JS.slideshow_library === 'lightgallery') {
296 photonicLightbox.initialize(container);
297 }
298 else if (Photonic_JS.slideshow_library === 'featherlight') {
299 photonicLightbox.initialize(container);
300 }
301 else if (Photonic_JS.slideshow_library === 'fancybox3') {
302 photonicLightbox.initialize(null, $(one_existing).data('fancybox'));
303 }
304 else if (Photonic_JS.slideshow_library === 'photoswipe') {
305 photonicLightbox.initialize();
306 }
307 else if (Photonic_JS.slideshow_library === 'strip') {
308 images.children().attr('data-strip-group', $(one_existing).attr('rel'));
309 }
310
311 images.waitForImages(function() {
312 var new_query = ret.find('.photonic-random-layout,.photonic-standard-layout,.photonic-masonry-layout,.photonic-mosaic-layout,.slideshow-grid-panel').data('photonicStreamQuery');
313 container.data('photonicStreamQuery', new_query);
314
315 // If this is a masonry layout in <= IE9, we need to trigger the Masonry function for appended images
316 if (container.hasClass('photonic-masonry-layout') && Photonic_JS.is_old_IE === "1" && $.isFunction($.fn.masonry)) {
317 container.masonry('appended', images);
318 }
319
320 if (more_button.length === 0) {
321 clicked.fadeOut().remove();
322 }
323
324 if (container.hasClass('photonic-mosaic-layout')) {
325 photonicMosaicLayout(false, '#' + containerId);
326 }
327 else if (container.hasClass('photonic-random-layout')) {
328 photonicJustifiedGridLayout(false, '#' + containerId);
329 }
330 else if (container.hasClass('photonic-masonry-layout')) {
331 images.find('img').fadeIn().css({ "display": "block" });
332 $('.photonic-loading').hide();
333 }
334 else {
335 container.find('.photonic-' + level).css({'display': 'inline-block' });
336 $('.photonic-loading').hide();
337 }
338 if (!$.fn.tooltip) {
339 photonicTooltip('[data-photonic-tooltip]', '.photonic-tooltip-container');
340 }
341 });
342 });
343 });
344
345 /**
346 * Displays all photos in a popup. Invoked when the popup data is being fetched for the first time for display in a popup.
347 * Must be used by all providers for displaying photos in a popup.
348 *
349 * @param data The contents of the popup
350 * @param provider The data provider: flickr | picasa | smug | zenfolio
351 * @param popup The type of popup object: set | gallery | album
352 * @param panelId The trailing section of the thumbnail's id
353 */
354 window.photonicDisplayPopup = function(data, provider, popup, panelId) {
355 var unsafePanelId = panelId, // KEEP THIS FOR AJAX RESPONSE SELECTOR
356 safePanelId = panelId.replace('.', '\\.'); // FOR EXISTING ELEMENTS WHCICH NEED SANITIZED PANELID
357 //panelId = panelId.replace('.', ''); // REMOVE '.' FROM PANELID WHENEVER POSSIBLE
358 var div = $(data);
359 var grid = div.find('.slideshow-grid-panel');
360
361 $(grid).waitForImages(function() {
362 $(div).appendTo($('#photonic-' + provider + '-' + popup + '-' + safePanelId)).show();
363 div.photonicModal({
364 modalTarget: 'photonic-' + provider + '-panel-' + safePanelId,
365 color: '#000',
366 width: Photonic_JS.gallery_panel_width + '%',
367 closeFromRight: ((100 - Photonic_JS.gallery_panel_width) / 2) + '%'
368 });
369 photonicMoveHTML5External();
370 if (photonicLightbox !== undefined && photonicLightbox !== null) {
371 photonicLightbox.initializeForNewContainer('#' + div.attr('id'));
372 }
373
374 if (!$.fn.tooltip) {
375 photonicTooltip('[data-photonic-tooltip]', '.photonic-tooltip-container');
376 }
377 $('.photonic-loading').hide();
378 });
379 };
380
381 window.photonicRedisplayPopupContents = function(provider, panelId, panel, args) {
382 if ('show' === args['popup']) {
383 $('.photonic-loading').hide();
384 $(panel).photonicModal({
385 modalTarget: 'photonic-' + provider + '-panel-' + panelId,
386 color: '#000',
387 width: Photonic_JS.gallery_panel_width + '%',
388 closeFromRight: ((100 - Photonic_JS.gallery_panel_width) / 2) + '%'
389 });
390 }
391 else {
392 photonicBypassPopup($(panel));
393 }
394 };
395
396 window.photonicBypassPopup = function(data) {
397 $('.photonic-loading').hide();
398 var panel = $(data);
399 panel.hide().appendTo($('body'));
400 photonicMoveHTML5External();
401 if (photonicLightbox !== undefined && photonicLightbox !== null) {
402 photonicLightbox.initializeForNewContainer('#' + panel.attr('id'));
403 }
404
405 var thumbs = $(panel).find('.photonic-launch-gallery');
406 if (thumbs.length > 0) {
407 deep = '#' + $(thumbs[0]).data('photonicDeep');
408 $(thumbs[0]).click();
409 }
410 };
411
412 $(document).on('click', 'input[type="button"].photonic-helper-more', function() {
413 photonicShowLoading();
414 var $clicked = $(this);
415 var $table = $clicked.parents('table');
416
417 var nextToken = $clicked.data('photonicToken') === undefined ? '' : '&nextPageToken=' + $clicked.data('photonicToken');
418 var provider = $clicked.data('photonicProvider');
419 if (provider === 'google') {
420 $.post(Photonic_JS.ajaxurl, "action=photonic_helper_shortcode_more&provider=" + provider + nextToken, function(data) {
421 var ret = $('<div></div>').html(data);
422 ret = ret.find('tr');
423 if (ret.length > 0) {
424 ret = ret.slice(1, ret.length);
425 $($table.find('input[type="button"]')[0]).parents('tr').remove();
426 $table.append(ret);
427 }
428 if (!$.fn.tooltip) {
429 photonicTooltip('[data-photonic-tooltip]', '.photonic-tooltip-container');
430 }
431 $('.photonic-loading').hide();
432 });
433 }
434 });
435
436