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

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