| 
									
										
										
										
											2016-05-24 17:19:48 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-08-21 02:19:24 +03:00
										 |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2016-05-24 17:19:48 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | try{ | 
					
						
							|  |  |  | 	var sharp = requirejs('sharp') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | } catch(err){ | 
					
						
							|  |  |  | 	var sharp = null | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | if(typeof(process) != 'undefined'){ | 
					
						
							|  |  |  | 	var fse = requirejs('fs-extra') | 
					
						
							|  |  |  | 	var pathlib = requirejs('path') | 
					
						
							| 
									
										
										
										
											2016-06-01 16:12:10 +03:00
										 |  |  | 	var file = requirejs('imagegrid/file') | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-24 17:19:48 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | if(typeof(process) != 'undefined'){ | 
					
						
							|  |  |  | 	var ensureDir = file.denodeify(fse.ensureDir) | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // images format:
 | 
					
						
							|  |  |  | // 	[
 | 
					
						
							|  |  |  | // 		{
 | 
					
						
							|  |  |  | // 			source: <source>,
 | 
					
						
							|  |  |  | // 			gid: <gid>,
 | 
					
						
							|  |  |  | // 		},
 | 
					
						
							|  |  |  | // 		...
 | 
					
						
							|  |  |  | // 	]
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2020-04-07 17:50:22 +03:00
										 |  |  | // XXX add a callback call when a gid is done...
 | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | var makePreviews =  | 
					
						
							|  |  |  | module.makePreviews = | 
					
						
							|  |  |  | function(images, sizes, base_path, target_tpl, callback){ | 
					
						
							|  |  |  | 	var that = this | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	var target_path = (target_tpl | 
					
						
							|  |  |  | 			|| 'preview/${RESOLUTION}px/${NAME}.jpg') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// iterate images...
 | 
					
						
							|  |  |  | 	return Promise.all(images.map(function(data){ | 
					
						
							|  |  |  | 		var gid = data.gid || '' | 
					
						
							|  |  |  | 		var source = data.source | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2020-04-07 17:50:22 +03:00
										 |  |  | 		callback && callback(null, { | 
					
						
							|  |  |  | 			status: 'queued',  | 
					
						
							|  |  |  | 			gid: gid,  | 
					
						
							|  |  |  | 			res: 'all',  | 
					
						
							|  |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | 		var ext = pathlib.extname(source) | 
					
						
							|  |  |  | 		var name = pathlib.basename(source) | 
					
						
							|  |  |  | 			.replace(RegExp(ext + '$'), '') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var target = target_path | 
					
						
							|  |  |  | 			.replace(/\$NAME|\$\{NAME\}/g, name) | 
					
						
							|  |  |  | 			.replace(/\$GID|\$\{GID\}/g, gid) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var img = sharp(source) | 
					
						
							|  |  |  | 		// get metadata....
 | 
					
						
							|  |  |  | 		return img.metadata().then(function(metadata){ | 
					
						
							|  |  |  | 			var orig_res = Math.max(metadata.width, metadata.height) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// process previews...
 | 
					
						
							| 
									
										
										
										
											2020-04-07 17:50:22 +03:00
										 |  |  | 			return Promise | 
					
						
							|  |  |  | 				.all(sizes | 
					
						
							|  |  |  | 					.map(function(res){ | 
					
						
							|  |  |  | 						// skip if image is smaller than res...
 | 
					
						
							|  |  |  | 						if(res >= orig_res){ | 
					
						
							|  |  |  | 							return  | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | 						} | 
					
						
							| 
									
										
										
										
											2020-04-07 17:50:22 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						var rel = target  | 
					
						
							|  |  |  | 							.replace(/\$RESOLUTION|\$\{RESOLUTION\}/g, res) | 
					
						
							|  |  |  | 						var full = pathlib.join(base_path || '', rel) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						callback && callback(null, { | 
					
						
							|  |  |  | 							status: 'queued',  | 
					
						
							|  |  |  | 							gid: gid,  | 
					
						
							|  |  |  | 							res: res,  | 
					
						
							|  |  |  | 							path: rel | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						// make the dir...
 | 
					
						
							|  |  |  | 						return ensureDir(pathlib.dirname(full)) | 
					
						
							|  |  |  | 							.then(function(){ | 
					
						
							|  |  |  | 								// check if image exists...
 | 
					
						
							|  |  |  | 								if(fse.existsSync(full)){ | 
					
						
							|  |  |  | 									callback && callback(null, { | 
					
						
							|  |  |  | 										status: 'skipped',  | 
					
						
							|  |  |  | 										gid: gid,  | 
					
						
							|  |  |  | 										res: res,  | 
					
						
							|  |  |  | 										path: rel, | 
					
						
							|  |  |  | 										orientation: metadata.orientation, | 
					
						
							|  |  |  | 									}) | 
					
						
							|  |  |  | 									return } | 
					
						
							|  |  |  | 							 | 
					
						
							|  |  |  | 								// make the actual previews...
 | 
					
						
							|  |  |  | 								return img.clone() | 
					
						
							|  |  |  | 									.resize({ | 
					
						
							|  |  |  | 										width: res, | 
					
						
							|  |  |  | 										height: res, | 
					
						
							|  |  |  | 										fit: 'inside', | 
					
						
							|  |  |  | 									}) | 
					
						
							|  |  |  | 									.withMetadata() | 
					
						
							|  |  |  | 									.toFile(full) | 
					
						
							|  |  |  | 										.then(function(){ | 
					
						
							|  |  |  | 											callback  | 
					
						
							|  |  |  | 												&& callback(null, { | 
					
						
							|  |  |  | 													status: 'done',  | 
					
						
							|  |  |  | 													gid: gid,  | 
					
						
							|  |  |  | 													res: res,  | 
					
						
							|  |  |  | 													path: rel, | 
					
						
							|  |  |  | 													orientation: metadata.orientation, }) }) | 
					
						
							| 
									
										
										
										
											2019-11-03 18:32:49 +03:00
										 |  |  | 							}) | 
					
						
							| 
									
										
										
										
											2020-04-07 17:50:22 +03:00
										 |  |  | 					})) | 
					
						
							|  |  |  | 				// report a gid is done...
 | 
					
						
							|  |  |  | 				.then(function(){ | 
					
						
							|  |  |  | 					callback  | 
					
						
							|  |  |  | 						&& callback(null, { | 
					
						
							|  |  |  | 							status: 'done',  | 
					
						
							|  |  |  | 							gid: gid,  | 
					
						
							|  |  |  | 							res: 'all',  | 
					
						
							|  |  |  | 						}) }) }) | 
					
						
							| 
									
										
										
										
											2016-05-25 22:09:03 +03:00
										 |  |  | 	})) | 
					
						
							|  |  |  | } | 
					
						
							| 
									
										
										
										
											2016-05-24 17:19:48 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							| 
									
										
										
										
											2016-08-20 22:49:36 +03:00
										 |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |