| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | ((typeof define)[0]=='u'?function(f){module.exports=f(require)}:define) | 
					
						
							|  |  |  | (function(require){ var module={} // make module AMD/node compatible...
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-28 16:18:08 +03:00
										 |  |  | // XXX should we guard against loading in node???
 | 
					
						
							|  |  |  | if(typeof(window) == 'undefined'){ | 
					
						
							|  |  |  | 	return | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // NOTE: this needs preact.js to be loaded by index.html
 | 
					
						
							|  |  |  | if(typeof(preact) == 'undefined'){ | 
					
						
							|  |  |  | 	console.error('Preact.js required but not present.') | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | var h = preact.h | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | var object = require('lib/object') | 
					
						
							|  |  |  | var actions = require('lib/actions') | 
					
						
							|  |  |  | var features = require('lib/features') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var core = require('features/core') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var ribbons = require('imagegrid/ribbons') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | // Preact Components...
 | 
					
						
							|  |  |  | // 
 | 
					
						
							|  |  |  | // XXX at this point this is an experiment...
 | 
					
						
							|  |  |  | // XXX Questions:
 | 
					
						
							|  |  |  | // 		- do we do align in the Preact render or outside?
 | 
					
						
							|  |  |  | // 		- do we update preview in Preact render or outside?
 | 
					
						
							|  |  |  | // 		
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | class IGRibbonSet extends preact.Component { | 
					
						
							|  |  |  | 	render(props, state){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		var data = props.data | 
					
						
							|  |  |  | 		var ribbons = data.ribbon_order.map(function(gid){ | 
					
						
							|  |  |  | 			return h(IGRibbon, { | 
					
						
							|  |  |  | 				gid: gid,  | 
					
						
							|  |  |  | 				current: data.current,  | 
					
						
							|  |  |  | 				base: data.base,  | 
					
						
							|  |  |  | 				data: data | 
					
						
							| 
									
										
										
										
											2017-07-26 21:10:28 +03:00
										 |  |  | 			}) }) | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		var s = props.scale || 1 | 
					
						
							| 
									
										
										
										
											2017-07-26 21:10:28 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		return h('div', | 
					
						
							| 
									
										
										
										
											2017-07-26 21:10:28 +03:00
										 |  |  | 			{ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				className: 'ribbon-set',  | 
					
						
							| 
									
										
										
										
											2017-07-26 21:10:28 +03:00
										 |  |  | 				style: { | 
					
						
							|  |  |  | 					transform: 'scale('+ s +', '+ s +')', | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, [ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				h('div', {className: 'current-marker'}), | 
					
						
							|  |  |  | 				h('div', {className: 'ribbon-locator'}, ribbons), | 
					
						
							| 
									
										
										
										
											2017-07-26 21:10:28 +03:00
										 |  |  | 			]) | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // render:
 | 
					
						
							|  |  |  | // 	- ribbon
 | 
					
						
							|  |  |  | // 	- images
 | 
					
						
							|  |  |  | // 	- image marks
 | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | //
 | 
					
						
							|  |  |  | // XXX needs horizontal align...
 | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | class IGRibbon extends preact.Component { | 
					
						
							|  |  |  | 	render(props, state){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		var data = props.data | 
					
						
							|  |  |  | 		var ribbon = props.gid | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var images = data.ribbons[ribbon] | 
					
						
							|  |  |  | 			.map(function(gid){ | 
					
						
							| 
									
										
										
										
											2018-11-08 21:10:58 +03:00
										 |  |  | 				var marks = data.tags.marked.indexOf(gid) >= 0 ? | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 					h(IGImageMark, { | 
					
						
							|  |  |  | 						gid: gid, | 
					
						
							|  |  |  | 						type: 'selected', | 
					
						
							|  |  |  | 						data: data, | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 					: [] | 
					
						
							|  |  |  | 				return [ | 
					
						
							|  |  |  | 					h(IGImage, {  | 
					
						
							|  |  |  | 						gid: gid,  | 
					
						
							|  |  |  | 						data: data,  | 
					
						
							|  |  |  | 					})].concat(marks) | 
					
						
							|  |  |  | 				}) | 
					
						
							|  |  |  | 			.reduce(function(a, b){ return a.concat(b) }) | 
					
						
							|  |  |  | 			.filter(function(a){ return !!a }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		var base = data.base == ribbon ? ['base'] : []  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return h('div', | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				classList: ['ribbon'].concat(base).join(' '), | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				gid: props.gid, | 
					
						
							|  |  |  | 				style: { | 
					
						
							|  |  |  | 					// XXX offset...
 | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 			}, images) | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // render:
 | 
					
						
							|  |  |  | // 	- image
 | 
					
						
							|  |  |  | class IGImage extends preact.Component { | 
					
						
							|  |  |  | 	render(props, state){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		var data = props.data || {} | 
					
						
							|  |  |  | 		var gid = props.gid | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return h('div', | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				classList: ['image'] | 
					
						
							|  |  |  | 					.concat(data.current == gid ? ['current'] : []) | 
					
						
							|  |  |  | 					.join(' '), | 
					
						
							|  |  |  | 				gid: gid || '', | 
					
						
							|  |  |  | 				style: { | 
					
						
							|  |  |  | 					// XXX background-image...
 | 
					
						
							|  |  |  | 				}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// XXX handle clicks???
 | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // render:
 | 
					
						
							|  |  |  | // 	- image mark
 | 
					
						
							|  |  |  | class IGImageMark extends preact.Component { | 
					
						
							|  |  |  | 	render(props, state){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		var gid = props.gid | 
					
						
							|  |  |  | 		var type = props.type | 
					
						
							|  |  |  | 		var data = props.data | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return h('div', | 
					
						
							|  |  |  | 			{ | 
					
						
							|  |  |  | 				classList: ['mark'].concat([type]).join(' '), | 
					
						
							|  |  |  | 				gid: gid, | 
					
						
							|  |  |  | 			}) | 
					
						
							| 
									
										
										
										
											2017-07-02 04:36:39 +03:00
										 |  |  | 	} | 
					
						
							|  |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //---------------------------------------------------------------------
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | var RibbonsClassPrototype = { | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 	// XXX this is almost exclusively needed for determining scale...
 | 
					
						
							|  |  |  | 	createImage: function(){ | 
					
						
							|  |  |  | 		return preact.render(h(IGImage)) }, | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | } | 
					
						
							|  |  |  | RibbonsClassPrototype.__proto__ = ribbons.BaseRibbons.prototype.__proto__ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var RibbonsPrototype = { | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 	viewer: null, | 
					
						
							|  |  |  | 	dom: null, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	createImage: RibbonsClassPrototype.createImage, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	update: function(data, full){ | 
					
						
							|  |  |  | 		if(!data){ | 
					
						
							|  |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		full | 
					
						
							|  |  |  | 			&& this.clear() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		this.dom = preact.render( | 
					
						
							|  |  |  | 			h(IGRibbonSet, { | 
					
						
							|  |  |  | 				data: data, | 
					
						
							|  |  |  | 				images: this.images || {}, | 
					
						
							|  |  |  | 				scale: this.scale() || 1, | 
					
						
							|  |  |  | 			}),  | 
					
						
							|  |  |  | 			this.viewer[0], | 
					
						
							|  |  |  | 			this.dom) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		return this | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 	clear: function(){ | 
					
						
							|  |  |  | 		if(this.dom){ | 
					
						
							|  |  |  | 			this.dom.remove() | 
					
						
							|  |  |  | 			delete this.dom | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 		return this | 
					
						
							|  |  |  | 	}, | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | } | 
					
						
							|  |  |  | RibbonsPrototype.__proto__ = ribbons.BaseRibbons.prototype | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var Ribbons = | 
					
						
							|  |  |  | module.Ribbons = | 
					
						
							| 
									
										
										
										
											2019-07-17 00:01:09 +03:00
										 |  |  | object.Constructor('Ribbons',  | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 	RibbonsClassPrototype, | 
					
						
							|  |  |  | 	RibbonsPrototype) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | // Checklist:
 | 
					
						
							|  |  |  | // 	- full ribbons:
 | 
					
						
							|  |  |  | // 		- build the initial DOM		- DONE
 | 
					
						
							|  |  |  | // 		- centering					- DONE
 | 
					
						
							|  |  |  | // 		- scaling					- DONE (save/restore does not work)
 | 
					
						
							|  |  |  | // 		- ribbon up/down navigation - XXX 
 | 
					
						
							|  |  |  | // 										XXX BUG: up does not hit limit on top ribbon,
 | 
					
						
							|  |  |  | // 											similar thing sometimes happened on down... 
 | 
					
						
							|  |  |  | // 										XXX see if we need to put .focusRibbon(..) in ui???
 | 
					
						
							|  |  |  | // 		- shifting images			- XXX
 | 
					
						
							|  |  |  | // 		- preview setting			- 
 | 
					
						
							|  |  |  | // 		- marks						- 
 | 
					
						
							|  |  |  | // 	- partial ribbons:
 | 
					
						
							|  |  |  | // 		- XXX
 | 
					
						
							|  |  |  | // 	
 | 
					
						
							|  |  |  | // 	
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | var RenderActions = actions.Actions({ | 
					
						
							|  |  |  | 	get dom(){ | 
					
						
							|  |  |  | 		return this.ribbons ? this.ribbons.viewer : undefined }, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	load: [ | 
					
						
							|  |  |  | 		function(data){ | 
					
						
							|  |  |  | 			return function(){ | 
					
						
							|  |  |  | 				// XXX setup .ribbons
 | 
					
						
							|  |  |  | 				var viewer = data.viewer | 
					
						
							|  |  |  | 				viewer = viewer == null && this.ribbons != null  | 
					
						
							|  |  |  | 					? this.dom  | 
					
						
							|  |  |  | 					: viewer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if(this.ribbons == null){ | 
					
						
							|  |  |  | 					this.ribbons = Ribbons(viewer, this.images) | 
					
						
							|  |  |  | 					// XXX is this correct???
 | 
					
						
							|  |  |  | 					//this.ribbons.__image_updaters = [this.updateImage.bind(this)]
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-06 02:37:32 +03:00
										 |  |  | 					this.dom.trigger('ig.attached') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 				} else { | 
					
						
							|  |  |  | 					//this.ribbons.clear()
 | 
					
						
							|  |  |  | 					this.ribbons.images = this.images | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				this.reload() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 	// XXX do a full reload...
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 	reload: [ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		function(force){ | 
					
						
							|  |  |  | 			// full reload...
 | 
					
						
							|  |  |  | 			if(force == 'full'){ | 
					
						
							|  |  |  | 				//this.stop()
 | 
					
						
							|  |  |  | 				/* | 
					
						
							|  |  |  | 				killAllWorkers() | 
					
						
							|  |  |  | 					.done(function(){ | 
					
						
							|  |  |  | 						reload()  | 
					
						
							|  |  |  | 					}) | 
					
						
							|  |  |  | 				*/ | 
					
						
							|  |  |  | 				return location.reload() | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// XXX is this correct here???
 | 
					
						
							|  |  |  | 			this.ribbons.preventTransitions() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if(!this.ribbons){ | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// XXX need to get the data...
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			// XXX
 | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			this.ribbons.update(this.data, force) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			this.ribbons.restoreTransitions() | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 	// XXX refresh the previews...
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 	refresh: [ | 
					
						
							|  |  |  | 		function(){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			if(!this.ribbons){ | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 			// XXX need to get the data...
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			// XXX
 | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 			this.ribbons.update(this.data) | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 		}], | 
					
						
							|  |  |  | 	clear: [ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		function(){ this.ribbons && this.ribbons.clear() }], | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	resizing: [ | 
					
						
							| 
									
										
										
										
											2018-02-13 01:14:35 +03:00
										 |  |  | 		core.Event(function(unit, size, overflow){ | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			// This is a resizing protocol root function.
 | 
					
						
							|  |  |  | 			//
 | 
					
						
							|  |  |  | 			// This will never be used directly, but will wrap protocol user
 | 
					
						
							|  |  |  | 			// functions.
 | 
					
						
							|  |  |  | 			//
 | 
					
						
							|  |  |  | 			// As an example see: .viewScale(..)
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// XXX stop current animation...
 | 
					
						
							|  |  |  | 			// XXX
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// XXX call .resizingDone(..) when animations done...
 | 
					
						
							|  |  |  | 			// XXX
 | 
					
						
							|  |  |  | 		})], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	viewScale: ['- Zoom/', | 
					
						
							|  |  |  | 		function(scale){  | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			if(!this.ribbons){ | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			if(scale == null || scale == '?'){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				return this.ribbons.scale() | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			this.resizing.chainCall(this, function(){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				this.ribbons.scale(scale) | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			}, 'scale', scale) | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 	fitImage: ['Zoom/Fit image', | 
					
						
							|  |  |  | 		function(count, overflow){  | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			if(!this.ribbons){ | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			if(count == '?'){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				return this.ribbons.getScreenWidthImages() | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			this.resizing.chainCall(this, function(){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				if(count != null){ | 
					
						
							|  |  |  | 					overflow = overflow == false ? 0 : overflow | 
					
						
							|  |  |  | 					var o = overflow != null ? overflow  | 
					
						
							|  |  |  | 						: count % 2 != 1 ? 0 | 
					
						
							|  |  |  | 						: (this.config['fit-overflow'] || 0) | 
					
						
							|  |  |  | 					count += o | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// set the scale...
 | 
					
						
							|  |  |  | 				this.ribbons.fitImage(count) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// XXX refresh image previews...
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			}, 'screenwidth', count, overflow) | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 	fitRibbon: ['Zoom/Fit ribbon vertically', | 
					
						
							|  |  |  | 		function(count, whole){  | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			if(!this.ribbons){ | 
					
						
							|  |  |  | 				return | 
					
						
							|  |  |  | 			} | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			if(count == '?'){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				return this.ribbons.getScreenHeightRibbons() | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			this.resizing.chainCall(this, function(){ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 				this.ribbons.fitRibbon(count, whole) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				// XXX refresh image previews...
 | 
					
						
							|  |  |  | 				 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 			}, 'screenheight', count, whole) | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX do we need updateImage here???
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	centerImage: ['- Interface/Center an image in ribbon horizontally', | 
					
						
							|  |  |  | 		function(target, align, offset, scale){  | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			this.ribbons && this.ribbons.centerImage(target, align, offset, scale) }], | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 	centerRibbon: ['- Interface/Center a ribbon vertically', | 
					
						
							|  |  |  | 		function(target){  | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 			this.ribbons && this.ribbons.centerRibbon(target) }], | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	ribbonRotation: ['- Interface|Ribbon/',  | 
					
						
							|  |  |  | 		function(angle){  | 
					
						
							|  |  |  | 			// XXX
 | 
					
						
							|  |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// XXX should these be here, in ui or in ribbons???
 | 
					
						
							|  |  |  | 	// XXX these are identical to features/ui-ribbons.js
 | 
					
						
							|  |  |  | 	focusRibbon: [ | 
					
						
							|  |  |  | 		function(target, mode){ | 
					
						
							|  |  |  | 			mode = mode || this.config['ribbon-focus-mode'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			var c = this.data.getRibbonOrder() | 
					
						
							|  |  |  | 			var i = this.data.getRibbonOrder(target) | 
					
						
							|  |  |  | 			// NOTE: we are not changing the direction here based on 
 | 
					
						
							|  |  |  | 			// 		this.direction as swap will confuse the user...
 | 
					
						
							|  |  |  | 			var direction = c < i ? 'before' : 'after' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			if(mode == 'visual'){ | 
					
						
							|  |  |  | 				var ribbons = this.ribbons | 
					
						
							|  |  |  | 				var r = this.data.getRibbon(target) | 
					
						
							|  |  |  | 				var t = ribbons.getImageByPosition('current', r) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if(t.length > 1){ | 
					
						
							|  |  |  | 					t = t.eq(direction == 'before' ? 0 : 1) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				t = ribbons.elemGID(t) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				this.focusImage(t, r) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		}], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var Render =  | 
					
						
							|  |  |  | module.Render = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-preact-render', | 
					
						
							|  |  |  | 	exclusive: ['ui-render'], | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		// XXX
 | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actions: RenderActions,  | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers: [ | 
					
						
							| 
									
										
										
										
											2017-07-29 21:39:47 +03:00
										 |  |  | 		[[ | 
					
						
							|  |  |  | 			'shiftImageTo', | 
					
						
							|  |  |  | 			'shiftImageUp', | 
					
						
							|  |  |  | 			'shiftImageDown', | 
					
						
							|  |  |  | 			'shiftImageLeft', | 
					
						
							|  |  |  | 			'shiftImageRight', | 
					
						
							|  |  |  | 		], function(){ | 
					
						
							|  |  |  | 			// XXX stub...
 | 
					
						
							|  |  |  | 			this.reload() | 
					
						
							|  |  |  | 		}], | 
					
						
							| 
									
										
										
										
											2017-06-28 03:51:50 +03:00
										 |  |  | 	], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                               */ return module }) |