| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var actions = require('lib/actions') | 
					
						
							|  |  |  | var features = require('lib/features') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-12 14:29:17 +03:00
										 |  |  | var browse = require('lib/widget/browse') | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-12 14:29:17 +03:00
										 |  |  | var core = require('features/core') | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | var widgets = require('features/ui-widgets') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var Alias =  | 
					
						
							|  |  |  | module.Alias = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'alias', | 
					
						
							| 
									
										
										
										
											2017-08-06 12:50:38 +03:00
										 |  |  | 	suggested: [ | 
					
						
							|  |  |  | 		'ui-alias', | 
					
						
							|  |  |  | 	], | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	config: { | 
					
						
							|  |  |  | 		//aliases: {
 | 
					
						
							|  |  |  | 		//},
 | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers: [ | 
					
						
							| 
									
										
										
										
											2017-08-04 09:52:45 +03:00
										 |  |  | 		// load aliases...
 | 
					
						
							|  |  |  | 		['start', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				var that = this | 
					
						
							|  |  |  | 				var aliases = this.config.aliases || {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				Object.keys(aliases) | 
					
						
							|  |  |  | 					.forEach(function(alias){ | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 						that.alias.apply(that, [alias].concat(aliases[alias])) }) | 
					
						
							| 
									
										
										
										
											2017-08-04 09:52:45 +03:00
										 |  |  | 			}], | 
					
						
							|  |  |  | 		// store aliases in .config.aliases
 | 
					
						
							| 
									
										
										
										
											2017-08-12 14:29:17 +03:00
										 |  |  | 		//
 | 
					
						
							|  |  |  | 		// NOTE: this does not guard from overriding anything...
 | 
					
						
							|  |  |  | 		// NOTE: there should not be any actions in the base action-set 
 | 
					
						
							|  |  |  | 		// 		other than the ones created by .alias(..).
 | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 		['alias', | 
					
						
							|  |  |  | 			function(_, alias, target){ | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 				var args = [].slice.call(arguments, 1) | 
					
						
							|  |  |  | 				var alias = args.shift() | 
					
						
							|  |  |  | 				var target = args[args.length-1] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 				// remove alias...
 | 
					
						
							| 
									
										
										
										
											2017-08-04 09:43:54 +03:00
										 |  |  | 				// XXX is this test enough??? ...see ActionSet.alias(..)
 | 
					
						
							|  |  |  | 				if(arguments.length == 3  | 
					
						
							|  |  |  | 						&& (target === null || target === false)){ | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 					var aliases = this.config.aliases || {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					delete aliases[alias] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					if(Object.keys(aliases).length == 0){ | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 						delete this.config.aliases | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// save alias...
 | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					var aliases = this.config.aliases = this.config.aliases || {} | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					aliases[alias] = args | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | 				} | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 			}], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		/*/ XXX not sure if this is the correct way to go... | 
					
						
							|  |  |  | 		['selfTest', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				var alias = [ | 
					
						
							|  |  |  | 					'testRuntimeAlias',  | 
					
						
							|  |  |  | 					'Test/', | 
					
						
							|  |  |  | 					core.doc`Rumtime-defined test alias.
 | 
					
						
							|  |  |  | 						 | 
					
						
							|  |  |  | 						NOTE: this will get overwritten on start.`,
 | 
					
						
							|  |  |  | 					'focusImage: "next"', | 
					
						
							|  |  |  | 				] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				this.alias.apply(this, alias) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if(!this.config.aliases | 
					
						
							|  |  |  | 						|| !(alias[0] in this.config.aliases) | 
					
						
							|  |  |  | 						|| this.config.aliases[alias[0]].length != alias.length-1 | 
					
						
							|  |  |  | 						|| this.config.aliases[alias[0]].filter(function(e, i){ return e != alias[i+1] }).length > 0){ | 
					
						
							|  |  |  | 					console.error('Alias save fail:', | 
					
						
							|  |  |  | 						'\n  written:', alias, | 
					
						
							|  |  |  | 						'\n  saved:', [alias[0]].concat((this.config.aliases || {})[alias[0]])) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 		//*/
 | 
					
						
							|  |  |  | 	], | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-06 12:50:38 +03:00
										 |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var UIAliasActions = actions.Actions({ | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | 	browseAliases: ['System/Aliases...', | 
					
						
							| 
									
										
										
										
											2017-08-17 16:41:56 +03:00
										 |  |  | 		core.doc`Action alias list
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			NOTE: this may affect the action menu, to see changes update the menu.`,
 | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | 		widgets.makeUIDialog(function(){ | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 			var that = this | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			// get keys for each action...
 | 
					
						
							|  |  |  | 			var keys = that.getKeysForAction ? that.getKeysForAction() : {} | 
					
						
							|  |  |  | 			// Get keys for action...
 | 
					
						
							|  |  |  | 			var getKeys = function(action){ | 
					
						
							|  |  |  | 				return (keys[action] || []).join(' / ') } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-16 14:40:17 +03:00
										 |  |  | 			var to_remove = [] | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 			return browse.makeLister(null,  | 
					
						
							|  |  |  | 				function(path, make){ | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					var dialog = this | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 					var aliases = that.config.aliases || {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					var names = Object.keys(aliases) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					names.length > 0 ? | 
					
						
							| 
									
										
										
										
											2017-08-16 14:40:17 +03:00
										 |  |  | 						make.EditableList(names,  | 
					
						
							|  |  |  | 							{ | 
					
						
							|  |  |  | 								new_item: false, | 
					
						
							|  |  |  | 								to_remove: to_remove, | 
					
						
							| 
									
										
										
										
											2017-12-12 03:50:42 +03:00
										 |  |  | 								editable_items: false, | 
					
						
							| 
									
										
										
										
											2017-08-16 14:40:17 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-16 18:11:07 +03:00
										 |  |  | 								update_merge: 'drop_changes', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								itemopen: function(_, name){ | 
					
						
							| 
									
										
										
										
											2017-08-16 14:40:17 +03:00
										 |  |  | 									that.editAlias(name)  | 
					
						
							|  |  |  | 										.on('close', function(){ dialog.update() }) | 
					
						
							|  |  |  | 								}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 								each: function(name, elem){ | 
					
						
							|  |  |  | 									$(elem) | 
					
						
							|  |  |  | 										.attr({ | 
					
						
							|  |  |  | 											keys: getKeys(name), | 
					
						
							|  |  |  | 											action: name, | 
					
						
							|  |  |  | 										}) | 
					
						
							| 
									
										
										
										
											2017-09-16 18:11:07 +03:00
										 |  |  | 								}, | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 							}) | 
					
						
							|  |  |  | 						: make.Empty() | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					make('---') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					make('$New...', { events: { | 
					
						
							| 
									
										
										
										
											2017-09-16 18:11:07 +03:00
										 |  |  | 						open: function(){  | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 							that.editAlias()  | 
					
						
							|  |  |  | 								.on('close', function(){ dialog.update() }) | 
					
						
							| 
									
										
										
										
											2017-09-16 18:11:07 +03:00
										 |  |  | 						}, | 
					
						
							|  |  |  | 					} }) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 				}, { | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 					cls: 'table-view show-keys', | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 				.run(function(){ | 
					
						
							|  |  |  | 					// XXX this is a copy from .browseActions(..)
 | 
					
						
							|  |  |  | 					this.showDoc = function(){ | 
					
						
							|  |  |  | 						var action = this.select('!').attr('action') | 
					
						
							|  |  |  | 						action  | 
					
						
							|  |  |  | 							&& that.showDoc(action) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					this.keyboard.handler('General', '?', 'showDoc') | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2017-08-16 14:40:17 +03:00
										 |  |  | 				.close(function(){ | 
					
						
							|  |  |  | 					to_remove.forEach(function(alias){ | 
					
						
							| 
									
										
										
										
											2017-08-16 14:47:30 +03:00
										 |  |  | 						that.alias(alias, null) }) }) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 		})], | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 	// NOTE: this does not include an attr editor by design...
 | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 	//
 | 
					
						
							|  |  |  | 	// XXX should we set white-space: pre on doc here or in css???
 | 
					
						
							|  |  |  | 	// XXX edit key bindings (???)
 | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | 	editAlias: ['- System/Edit alias...', | 
					
						
							|  |  |  | 		widgets.makeUIDialog(function(alias){ | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 			var that = this | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			var name = alias | 
					
						
							|  |  |  | 			var data = ((that.config.aliases || {})[alias] || ['']).slice() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 			return browse.makeLister(null,  | 
					
						
							|  |  |  | 				function(path, make){ | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					var item_opts = { | 
					
						
							|  |  |  | 						start_on: 'open', | 
					
						
							|  |  |  | 						edit_text: 'last', | 
					
						
							|  |  |  | 						clear_on_edit: false, | 
					
						
							|  |  |  | 						reset_on_commit: false, | 
					
						
							| 
									
										
										
										
											2018-03-29 14:48:30 +03:00
										 |  |  | 						abort_on_deselect: false,  | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// doc fields...
 | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					make.Editable(['$Path:', that.getActionAttr(alias, 'doc')], item_opts) | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						.on('edit-commit', function(evt, text){  | 
					
						
							|  |  |  | 							if(data.length > 1 && typeof(data[0]) == typeof('str')){ | 
					
						
							|  |  |  | 								data[0] = text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// no previous docs...
 | 
					
						
							|  |  |  | 							} else { | 
					
						
							|  |  |  | 								data.splice(0, 0, text) | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 						}) | 
					
						
							| 
									
										
										
										
											2017-08-11 02:50:18 +03:00
										 |  |  | 					var doc_opts = { | 
					
						
							|  |  |  | 						// XXX this does not work???
 | 
					
						
							|  |  |  | 						multiline: true, | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 					doc_opts.__proto__ = item_opts | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					make.Editable(['$Doc:', that.getActionAttr(alias, 'long_doc')], doc_opts) | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						.on('edit-commit', function(evt, text){  | 
					
						
							|  |  |  | 							// existing .doc and .long_doc -> replace .long_doc...
 | 
					
						
							|  |  |  | 							if(data.length > 2  | 
					
						
							|  |  |  | 									&& typeof(data[0]) == typeof('str') | 
					
						
							|  |  |  | 									&& typeof(data[1] == typeof('str'))){ | 
					
						
							|  |  |  | 								data[1] = text | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// existing .doc -> add .long_doc only...
 | 
					
						
							|  |  |  | 							} else if(data.length > 1 && typeof(data[0]) == typeof('str')){ | 
					
						
							|  |  |  | 								data.splice(1, 0, text) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							// no previous docs -> add empty .doc and set .long_doc...
 | 
					
						
							|  |  |  | 							} else { | 
					
						
							|  |  |  | 								data.splice(0, 0, '', text) | 
					
						
							|  |  |  | 							} | 
					
						
							|  |  |  | 						}) | 
					
						
							|  |  |  | 						// XXX HACK???
 | 
					
						
							|  |  |  | 						.find('.text').last() | 
					
						
							|  |  |  | 							.css({'white-space': 'pre'}) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					make('---') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// alias fields...
 | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					make.Editable(['$Alias:', alias || ''], item_opts) | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						.on('edit-commit', function(evt, text){  | 
					
						
							|  |  |  | 							name = text | 
					
						
							|  |  |  | 						}) | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					make.Editable(['$Code:', ((that.config.aliases || {})[alias] || ['']).slice(-1)[0]], item_opts) | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						.on('edit-commit', function(evt, text){  | 
					
						
							|  |  |  | 							data[data.length-1] = text | 
					
						
							|  |  |  | 						}) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					make('---') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 					// delete / cancel...
 | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					make.ConfirmAction('Delete', { | 
					
						
							|  |  |  | 						callback: function(){ | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 							data = [null] | 
					
						
							|  |  |  | 							make.dialog.close() | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 						}, | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						buttons: [ | 
					
						
							|  |  |  | 							['Cancel edit', function(){  | 
					
						
							|  |  |  | 								make.dialog.close('cancel') | 
					
						
							|  |  |  | 							}], | 
					
						
							|  |  |  | 						], | 
					
						
							| 
									
										
										
										
											2017-08-10 03:28:10 +03:00
										 |  |  | 					}) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 				}, { | 
					
						
							|  |  |  | 					cls: 'table-view', | 
					
						
							|  |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 				.on('close', function(_, mode){ | 
					
						
							|  |  |  | 					// do not save on cancel...
 | 
					
						
							| 
									
										
										
										
											2018-03-29 13:49:20 +03:00
										 |  |  | 					if(mode == 'cancel'  | 
					
						
							|  |  |  | 							|| ((name == '' || name == null) && !that[name])){ | 
					
						
							| 
									
										
										
										
											2017-08-10 14:09:01 +03:00
										 |  |  | 						return | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// renaming the alias -> clear the old value...
 | 
					
						
							|  |  |  | 					if(name != alias){ | 
					
						
							|  |  |  | 						that.alias(alias, null) | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// save the alias...
 | 
					
						
							|  |  |  | 					that.alias.apply(that, [name].concat(data)) | 
					
						
							|  |  |  | 				}) | 
					
						
							| 
									
										
										
										
											2017-08-09 15:36:03 +03:00
										 |  |  | 		})], | 
					
						
							| 
									
										
										
										
											2017-08-06 12:50:38 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var UIAlias =  | 
					
						
							|  |  |  | module.UIAlias = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-alias', | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'alias', | 
					
						
							|  |  |  | 		'ui', | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actions: UIAliasActions,  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers: [], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-08 18:41:38 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-08-04 04:28:29 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |