UNPKG

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