| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define)( | 
					
						
							|  |  |  | function(require){ var module={} // makes module AMD/node compatible...
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var actions = require('lib/actions') | 
					
						
							|  |  |  | var features = require('lib/features') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var core = require('features/core') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ProgressActions = actions.Actions({ | 
					
						
							|  |  |  | 	config: { | 
					
						
							|  |  |  | 		'progress-fade-duration': 200, | 
					
						
							|  |  |  | 		'progress-done-delay': 1000, | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// Progress bar widget...
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// 	Create progress bar...
 | 
					
						
							| 
									
										
										
										
											2016-12-12 15:29:37 +03:00
										 |  |  | 	// 	.showProgress('text')
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	// 	Update progress bar (value, max, msg)...
 | 
					
						
							| 
									
										
										
										
											2016-12-12 15:29:37 +03:00
										 |  |  | 	// 	.showProgress('text', 0, 10)
 | 
					
						
							|  |  |  | 	// 	.showProgress('text', 10, 50, 'message')
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	// 	Update progress bar value (has no effect if max is not set)...
 | 
					
						
							| 
									
										
										
										
											2016-12-12 15:29:37 +03:00
										 |  |  | 	// 	.showProgress('text', 10)
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	// 	Close progress bar...
 | 
					
						
							| 
									
										
										
										
											2016-12-12 15:29:37 +03:00
										 |  |  | 	// 	.showProgress('text', 'close')
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	// 	Relative progress modification...
 | 
					
						
							| 
									
										
										
										
											2016-12-12 15:29:37 +03:00
										 |  |  | 	// 	.showProgress('text', '+1')
 | 
					
						
							|  |  |  | 	// 	.showProgress('text', '+0', '+1')
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	//
 | 
					
						
							|  |  |  | 	// XXX should we report errors and stoppages??? (error state??)
 | 
					
						
							|  |  |  | 	// XXX multiple containers...
 | 
					
						
							| 
									
										
										
										
											2016-11-06 01:58:32 +03:00
										 |  |  | 	// XXX shorten the nested css class names...
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 	// XXX revise styles...
 | 
					
						
							|  |  |  | 	showProgress: ['- Interface/Show progress bar...', | 
					
						
							|  |  |  | 		function(text, value, max){ | 
					
						
							| 
									
										
										
										
											2017-05-16 00:26:37 +03:00
										 |  |  | 			var viewer = this.dom | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 			var that = this | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var msg = text instanceof Array ? text.slice(1).join(': ') : null | 
					
						
							|  |  |  | 			text = text instanceof Array ? text[0] : text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// container...
 | 
					
						
							|  |  |  | 			var container = viewer.find('.progress-container') | 
					
						
							|  |  |  | 			container = container.length == 0 ? | 
					
						
							|  |  |  | 				$('<div/>') | 
					
						
							|  |  |  | 					.addClass('progress-container') | 
					
						
							|  |  |  | 					.appendTo(viewer) | 
					
						
							|  |  |  | 				: container | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// widget...
 | 
					
						
							|  |  |  | 			var widget = container.find('.progress-bar[name="'+text+'"]') | 
					
						
							|  |  |  | 			// close action...
 | 
					
						
							|  |  |  | 			if(value == 'close'){ | 
					
						
							|  |  |  | 				widget.trigger('progressClose') | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			widget = widget.length == 0 ? | 
					
						
							|  |  |  | 				$('<div/>') | 
					
						
							|  |  |  | 					.addClass('progress-bar') | 
					
						
							|  |  |  | 					.attr('name', text) | 
					
						
							|  |  |  | 					.text(text) | 
					
						
							|  |  |  | 					// close button...
 | 
					
						
							|  |  |  | 					.append($('<span class="close">×</span>') | 
					
						
							|  |  |  | 						.on('click', function(){ widget.trigger('progressClose') })) | 
					
						
							|  |  |  | 					// state...
 | 
					
						
							|  |  |  | 					.append($('<span/>') | 
					
						
							|  |  |  | 						.addClass('progress-details')) | 
					
						
							|  |  |  | 					// bar...
 | 
					
						
							|  |  |  | 					.append($('<progress/>')) | 
					
						
							|  |  |  | 					// events...
 | 
					
						
							|  |  |  | 					.on('progressClose', function(){  | 
					
						
							|  |  |  | 						widget | 
					
						
							|  |  |  | 							.fadeOut(that.config['progress-fade-duration'] || 200, function(){ | 
					
						
							|  |  |  | 								$(this).remove()  | 
					
						
							|  |  |  | 							}) | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 					.appendTo(container) | 
					
						
							|  |  |  | 				: widget | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// reset closing timeout...
 | 
					
						
							|  |  |  | 			var timeout = widget.attr('close-timeout') | 
					
						
							|  |  |  | 			timeout && clearTimeout(JSON.parse(timeout)) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// get the widget parts we are updating...
 | 
					
						
							|  |  |  | 			var bar = widget.find('progress') | 
					
						
							|  |  |  | 			var state = widget.find('.progress-details') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// XXX stub???
 | 
					
						
							|  |  |  | 			// normalize max and value...
 | 
					
						
							|  |  |  | 			max = max != null ?  | 
					
						
							|  |  |  | 					(typeof(max) == typeof('str') && /[+-][0-9]+/.test(max) ?  | 
					
						
							|  |  |  | 						parseInt(bar.attr('max') || 0) + parseInt(max) | 
					
						
							|  |  |  | 					: parseInt(max)) | 
					
						
							|  |  |  | 				: bar.attr('max') | 
					
						
							|  |  |  | 			value = value != null ?  | 
					
						
							|  |  |  | 					(typeof(value) == typeof('str') && /[+-][0-9]+/.test(value) ?  | 
					
						
							|  |  |  | 						parseInt(bar.attr('value') || 0) + parseInt(value) | 
					
						
							|  |  |  | 					: parseInt(value)) | 
					
						
							|  |  |  | 				: bar.attr('value') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// format the message...
 | 
					
						
							|  |  |  | 			msg = msg ? ': '+msg : '' | 
					
						
							|  |  |  | 			msg = ' '+ msg  | 
					
						
							|  |  |  | 				//+ (value && value >= (max || 0) ? ' ('+value+' done)' 
 | 
					
						
							|  |  |  | 				+ (value && value >= (max || 0) ? ' (done)'  | 
					
						
							|  |  |  | 					: value && max && value != max ? ' ('+ value +' of '+ max +')' | 
					
						
							|  |  |  | 					: '...') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// update widget...
 | 
					
						
							|  |  |  | 			bar.attr({ | 
					
						
							|  |  |  | 				value: value || '', | 
					
						
							|  |  |  | 				max: max || '', | 
					
						
							|  |  |  | 			}) | 
					
						
							|  |  |  | 			state.text(msg) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// auto-close...
 | 
					
						
							|  |  |  | 			// XXX make this optional... 
 | 
					
						
							|  |  |  | 			if(value && value >= (max || 0)){ | 
					
						
							|  |  |  | 				widget.attr('close-timeout',  | 
					
						
							|  |  |  | 					JSON.stringify(setTimeout(function(){  | 
					
						
							|  |  |  | 						widget.trigger('progressClose')  | 
					
						
							|  |  |  | 					}, this.config['progress-done-delay'] || 1000))) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2019-01-07 09:34:49 +03:00
										 |  |  | 			// XXX force the browser to render...
 | 
					
						
							|  |  |  | 			//bar.hide(0).show(0)
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-11-04 23:00:34 +03:00
										 |  |  | 			// XXX what should we return??? (state, self, controller?)
 | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var Progress =  | 
					
						
							|  |  |  | module.Progress = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-progress', | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'ui', | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actions: ProgressActions,  | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |