UNPKG

9.8 kBJavaScriptView Raw
1/**!
2 * @preserve nanogallery2 - NANOPHOTOSPROVIDER2 data provider
3 * Homepage: http://nanogallery2.nanostudio.org
4 * Sources: https://github.com/nanostudio-org/nanogallery2
5 *
6 * License: GPLv3 and commercial licence
7 *
8*/
9
10// ########################################################
11// ##### nanogallery2 - module NANOPHOTOSPROVIDER2 #####
12// ########################################################
13
14
15(function (factory) {
16 "use strict";
17 if (typeof define === 'function' && define.amd) {
18 // AMD. Register as an anonymous module.
19 define(['jquery', 'nanogallery2'], factory);
20 } else if (typeof exports === 'object' && typeof require === 'function') {
21 // Browserify
22 factory(require(['jquery', 'nanogallery2']));
23 } else {
24 // Browser globals
25 factory(jQuery);
26 }
27}(function ($) {
28// ;(function ($) {
29
30 jQuery.nanogallery2.data_nano_photos_provider2 = function (instance, fnName){
31 var G = instance; // current nanogallery2 instance
32
33 /** @function AlbumGetContent */
34 var AlbumGetContent = function(albumID, fnToCall, fnParam1, fnParam2) {
35
36 var albumIdx = NGY2Item.GetIdx(G, albumID);
37
38 // title is identical to ID (only for albums)
39 if( instance.I[albumIdx].title == '' ) {
40 instance.I[albumIdx].title = JsonConvertCharset(albumID);
41 }
42
43 // Build the URL
44 var url = G.O.dataProvider + '?albumID='+albumID; // which album
45
46 // all thumbnails sizes (for responsive display)
47 url += '&hxs=' + G.tn.settings.getH(G.GOM.curNavLevel, 'xs');
48 url += '&wxs=' + G.tn.settings.getW(G.GOM.curNavLevel, 'xs');
49 url += '&hsm=' + G.tn.settings.getH(G.GOM.curNavLevel, 'sm');
50 url += '&wsm=' + G.tn.settings.getW(G.GOM.curNavLevel, 'sm');
51 url += '&hme=' + G.tn.settings.getH(G.GOM.curNavLevel, 'me');
52 url += '&wme=' + G.tn.settings.getW(G.GOM.curNavLevel, 'me');
53 url += '&hla=' + G.tn.settings.getH(G.GOM.curNavLevel, 'la');
54 url += '&wla=' + G.tn.settings.getW(G.GOM.curNavLevel, 'la');
55 url += '&hxl=' + G.tn.settings.getH(G.GOM.curNavLevel, 'xl');
56 url += '&wxl=' + G.tn.settings.getW(G.GOM.curNavLevel, 'xl');
57 // url += '&wxs=' + G.tn.settings.width[G.GOM.curNavLevel].xs;
58 // url += '&hxs=' + G.tn.settings.height[G.GOM.curNavLevel].xs;
59 // url += '&wsm=' + G.tn.settings.width[G.GOM.curNavLevel].sm;
60 // url += '&hsm=' + G.tn.settings.height[G.GOM.curNavLevel].sm;
61 // url += '&wme=' + G.tn.settings.width[G.GOM.curNavLevel].me;
62 // url += '&hme=' + G.tn.settings.height[G.GOM.curNavLevel].me;
63 // url += '&wla=' + G.tn.settings.width[G.GOM.curNavLevel].la;
64 // url += '&hla=' + G.tn.settings.height[G.GOM.curNavLevel].la;
65 // url += '&wxl=' + G.tn.settings.width[G.GOM.curNavLevel].xl;
66 // url += '&hxl=' + G.tn.settings.height[G.GOM.curNavLevel].xl;
67
68 PreloaderDisplay( true );
69
70 jQuery.ajaxSetup({ cache: false });
71 jQuery.support.cors = true;
72 try {
73
74 var tId = setTimeout( function() {
75 // workaround to handle JSONP (cross-domain) errors
76 PreloaderDisplay(false);
77 NanoAlert(G, 'Could not retrieve nanoPhotosProvider2 data (timeout).');
78 }, 60000 );
79
80 if( G.O.debugMode ) { console.log('nanoPhotosProvider2 URL: ' + url); }
81
82 jQuery.getJSON(url, function(data, status, xhr) {
83 clearTimeout( tId );
84 PreloaderDisplay( false );
85 JsonParseData(albumIdx, data);
86
87 if( data.nano_status == 'ok' ) {
88 AlbumPostProcess( albumID );
89 if( fnToCall !== null && fnToCall !== undefined) {
90 fnToCall( fnParam1, fnParam2, null );
91 }
92 }
93 else {
94 NanoAlert(G, 'Could not retrieve nanoPhotosProvider2 data. Error: ' + data.nano_status + ' - ' + data.nano_message);
95 }
96 })
97 .fail( function(jqxhr, textStatus, error) {
98 clearTimeout( tId );
99 PreloaderDisplay( false );
100
101 var k=''
102 for(var key in jqxhr) {
103 k+= key + '=' + jqxhr[key] +'<br>';
104 }
105 var err = textStatus + ', ' + error + ' ' + k + '<br><br>URL:'+url;
106 NanoAlert(G, 'Could not retrieve nanoPhotosProvider2 data. Error: ' + err);
107
108 });
109
110 }
111 catch(e) {
112 NanoAlert(G, 'Could not retrieve nanoPhotosProvider2 data. Error: ' + e);
113 }
114 }
115
116
117 function JsonConvertCharset( str ) {
118
119 return decodeURIComponent(str);
120
121
122 // Pb %C3%A9 --> %E9
123 // in UTF-8: \u00e9=\xe9 (e9 = hex value)
124 // switch( G.O.dataCharset.toUpperCase() ) {
125 // case 'UTF-8': // Apache Windows
126 // return decodeURI(str); // do not use decodeURIComponent (would convert slash also)
127 // break;
128 // case 'Latin': // Apache Linux
129 // default :
130 // return escape(str);
131 // break;
132 // }
133 }
134
135 function JsonParseData(albumIdx, data) {
136 if( G.O.debugMode ) {
137 console.log('nanoPhotosProvider2 parse data:');
138 console.dir(data);
139 }
140
141
142 var foundAlbumID = false;
143 var nb = 0;
144
145 // loop each item
146 jQuery.each( data.album_content, function( i, item ){
147
148 // base URL where the images are stored
149 var baseURL = G.O.dataProvider.substring(0, G.O.dataProvider.indexOf('nano_photos_provider2.php'));
150
151 // image URL
152 var src = baseURL + JsonConvertCharset( item.src );
153
154 // item title
155 var title = item.title;
156
157 // item description ( '_' are replaced with ' ' )
158 var description = item.description.split('_').join(' ');
159
160 // item kind ('album' or 'image')
161 var kind = 'image';
162 if( item.kind !== undefined && item.kind.length > 0 ) {
163 kind = item.kind;
164 }
165
166 // item ID
167 var ID=item.ID;
168
169 var filterAlbum = false;
170 if( kind == 'album' ) {
171 // check if album name is filtered
172 if( !FilterAlbumName(title, ID) ) { filterAlbum = true; }
173 // on gallery initialization : if an album is defined, do not display sub-albums (not supported)
174 if( G.O.album != '' || G.O.photoset != '' ) { filterAlbum = true; }
175 }
176
177 // if( kind == 'image' || (kind == 'album' && FilterAlbumName(title, ID)) ) {
178 if( kind == 'image' || !filterAlbum ) {
179
180 var albumID = 0;
181 if( item.albumID !== undefined ) {
182 albumID = item.albumID;
183 foundAlbumID = true;
184 }
185
186 var tags = (item.tags === undefined) ? '' : item.tags;
187 var newItem = NGY2Item.New( G, title.split('_').join(' ') , description, ID, albumID, kind, tags );
188 newItem.setMediaURL( src, 'img');
189
190 // dominant colorS as a gif
191 if( item.dcGIF !== undefined ) {
192 newItem.imageDominantColors = 'data:image/gif;base64,' + item.dcGIF;
193 }
194 // dominant color as hex rgb value
195 if( item.dc !== undefined && item.dc !== '' ) {
196 newItem.imageDominantColor = item.dc;
197 }
198
199 if( kind == 'album' ) {
200 // number of items in album
201 newItem.numberItems = item.cnt;
202 }
203 else {
204 // image size
205 newItem.imageWidth = item.imgWidth;
206 newItem.imageHeight = item.imgHeight;
207 }
208
209 // item download URL
210 if( item.originalURL != '' ) {
211 newItem.downloadURL = baseURL+JsonConvertCharset(item.originalURL);
212 }
213
214 // retrieve responsive thumbnails urls and sizes
215 var cnl = G.GOM.curNavLevel; // current navigation level ('L1' or 'LN');
216 var l=['xs', 'sm', 'me', 'la', 'xl'];
217 for( var n = 0; n < l.length; n++ ) {
218 newItem.thumbs.url[cnl][l[n]] = baseURL + JsonConvertCharset(item.t_url[n]);
219 newItem.thumbs.width[cnl][l[n]] = parseInt(item.t_width[n]);
220 newItem.thumbs.height[cnl][l[n]] = parseInt(item.t_height[n]);
221 }
222
223 // post-process callback
224 var fu = G.O.fnProcessData;
225 if( fu !== null ) {
226 typeof fu == 'function' ? fu(newItem, G.O.dataProvider, data) : window[fu](newItem, G.O.dataProvider, data);
227 }
228
229 }
230 });
231
232 G.I[albumIdx].contentIsLoaded = true; // album's content is ready
233 }
234
235
236 // -----------
237 // Initialize
238 function Init() {
239
240 }
241
242
243 // shortcuts to NGY2Tools functions (with context)
244 var PreloaderDisplay = NGY2Tools.PreloaderDisplay.bind(G);
245 // var NanoAlert = NGY2Tools.NanoAlert.bind(G);
246 var NanoAlert = NGY2Tools.NanoAlert;
247 // var GetImageTitleFromURL = NGY2Tools.GetImageTitleFromURL.bind(G);
248 var FilterAlbumName = NGY2Tools.FilterAlbumName.bind(G);
249 var AlbumPostProcess = NGY2Tools.AlbumPostProcess.bind(G);
250
251 switch( fnName ){
252 case 'GetHiddenAlbums':
253 break;
254 case 'AlbumGetContent':
255 var albumID = arguments[2],
256 callback = arguments[3],
257 cbParam1 = arguments[4],
258 cbParam2 = arguments[5];
259 AlbumGetContent(albumID, callback, cbParam1, cbParam2);
260 break;
261 case 'Init':
262 Init();
263 break;
264 case '':
265 break;
266 }
267
268 };
269
270// END NANOPHOTOSPROVIDER DATA SOURCE FOR NANOGALLERY2
271// }( jQuery ));
272}));
273
274
275
276
\No newline at end of file