PluginProbe
Photonic Gallery & Lightbox for Flickr, SmugMug & Others / 2.21
Photonic Gallery & Lightbox for Flickr, SmugMug & Others v2.21
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.21, at include/scripts/front-end/src/core/core.js

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