| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | /********************************************************************** | 
					
						
							|  |  |  | *  | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | * | 
					
						
							|  |  |  | **********************************************************************/ | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | define(function(require){ var module = {} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //var DEBUG = DEBUG != null ? DEBUG : true
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var actions = require('lib/actions') | 
					
						
							|  |  |  | var features = require('lib/features') | 
					
						
							|  |  |  | var toggler = require('lib/toggler') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var core = require('features/core') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /*********************************************************************/ | 
					
						
							|  |  |  | // helper...
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | // Change image proportions depending on scale...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // A) Small image -- min(screenwidth, screenheight) > threshold
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | //
 | 
					
						
							|  |  |  | //       viewer
 | 
					
						
							|  |  |  | //      +---------------+
 | 
					
						
							|  |  |  | //      |     image     |   - small image
 | 
					
						
							|  |  |  | //      |     +---+     |   - square image block
 | 
					
						
							|  |  |  | //      |     |   |     |   - smaller than this the block is always square
 | 
					
						
							|  |  |  | //      |     +---+     |   - we just change scale
 | 
					
						
							|  |  |  | //      |               |
 | 
					
						
							|  |  |  | //      +---------------+
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | // B) min(screenwidth, screenheight) <= threshold
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | //       viewer
 | 
					
						
							|  |  |  | //      +---------------+
 | 
					
						
							|  |  |  | //      | +-----------+ |   - bigger image
 | 
					
						
							|  |  |  | //      | | image     | |   - block close to viewer proportion
 | 
					
						
							|  |  |  | //      | |    <-->   | |   - image block growing parallel to viewer
 | 
					
						
							|  |  |  | //      | |           | |     longer side
 | 
					
						
							|  |  |  | //      | +-----------+ |   - this stage is not affected specific by image
 | 
					
						
							|  |  |  | //      +---------------+     proportions and can be done in bulk
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | // C) fullscreen -- min(screenwidth, screenheight) == 1
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | //       viewer
 | 
					
						
							|  |  |  | //      +---------------+
 | 
					
						
							|  |  |  | //      | image         |   - image block same size as viewer
 | 
					
						
							|  |  |  | //      |               |   - need to account for chrome
 | 
					
						
							|  |  |  | //      |               |
 | 
					
						
							|  |  |  | //      |               |
 | 
					
						
							|  |  |  | //      |               |
 | 
					
						
							|  |  |  | //      +---------------+
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | // D) zoomed in -- min(screenwidth, screenheight) < 1 (blocked, no drag)
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | //     image
 | 
					
						
							|  |  |  | //    + - - - - - - - - - +
 | 
					
						
							|  |  |  | //    .                   .
 | 
					
						
							|  |  |  | //    . +---------------+ .
 | 
					
						
							|  |  |  | //    . | viewer        | . - image bigger than viewer 
 | 
					
						
							|  |  |  | //    . |               | . - image block same proportion as image
 | 
					
						
							|  |  |  | //    . |               | . - we just change scale
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | //    . |               | . - drag enabled (XXX not implemented)
 | 
					
						
							|  |  |  | //    . |               | . - next/prev image keeps drag position
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | //    . +---------------+ .
 | 
					
						
							|  |  |  | //    .                   .
 | 
					
						
							|  |  |  | //    + - - - - - - - - - +
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | //
 | 
					
						
							| 
									
										
										
										
											2016-04-26 02:49:06 +03:00
										 |  |  | // NOTE: this in part does the same job as .ribbons.correctImageProportionsForRotation(..)
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // XXX might be a good idea to use tiles for zoomed in images...
 | 
					
						
							| 
									
										
										
										
											2016-04-02 20:39:58 +03:00
										 |  |  | // XXX should this be an action???
 | 
					
						
							|  |  |  | function updateImageProportions(){ | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 	var that = this | 
					
						
							| 
									
										
										
										
											2016-04-25 02:37:57 +03:00
										 |  |  | 	var threshold = this.config['single-image-proportions-threshold'] | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	if(!threshold || threshold == -1){ | 
					
						
							|  |  |  | 		return | 
					
						
							|  |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 02:37:57 +03:00
										 |  |  | 	var viewer = this.ribbons.viewer | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 	var img = this.ribbons.getImage() | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 	var w = img.outerWidth() | 
					
						
							|  |  |  | 	var h = img.outerHeight() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 	// inner diameter
 | 
					
						
							|  |  |  | 	var di = Math.min(h, w) | 
					
						
							|  |  |  | 	// outer diameter -- (m)ax
 | 
					
						
							|  |  |  | 	var dm = Math.max(h, w) | 
					
						
							|  |  |  | 	 | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 	var c = Math.min(this.screenwidth, this.screenheight) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	// change proportions...
 | 
					
						
							|  |  |  | 	if(c < threshold){ | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		var images = viewer.find('.ribbon .image') | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 		var W = viewer.width() | 
					
						
							|  |  |  | 		var H = viewer.height() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		// inner diameter
 | 
					
						
							|  |  |  | 		var Di = Math.min(W, H) | 
					
						
							|  |  |  | 		// outer diameter -- (m)ax
 | 
					
						
							|  |  |  | 		var Dm = Math.max(W, H) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 14:46:43 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 		// get dimensional scale....
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		var s = Di / di  | 
					
						
							| 
									
										
										
										
											2016-04-24 14:46:43 +03:00
										 |  |  | 		// image dimension delta...
 | 
					
						
							|  |  |  | 		var d =  | 
					
						
							|  |  |  | 			// the maximum difference between image and screen proportions...
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 			(Dm / s - di)  | 
					
						
							|  |  |  | 				// coefficient: 0 : c == threshold  ->  1 : c == 1
 | 
					
						
							| 
									
										
										
										
											2016-04-24 14:46:43 +03:00
										 |  |  | 				* (threshold/c - 1) | 
					
						
							| 
									
										
										
										
											2016-04-24 17:35:33 +03:00
										 |  |  | 		// new size...
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		var n = di + d | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		if(n == dm){ | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 			return | 
					
						
							|  |  |  | 		} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		getAnimationFrame(function(){ | 
					
						
							|  |  |  | 			that.ribbons.preventTransitions() | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// horizontal viewer...
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 			if(Di == H){ | 
					
						
							|  |  |  | 				images | 
					
						
							|  |  |  | 					.each(function(_, img){ | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 						var o = img.getAttribute('orientation') | 
					
						
							|  |  |  | 						o = o == null ? 0 : o | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						// rotated images...
 | 
					
						
							|  |  |  | 						if(o == 90 || o == 270){ | 
					
						
							|  |  |  | 							img.style.width = '' | 
					
						
							|  |  |  | 							img.style.height = n + 'px' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							img.style.margin = -(n - di)/2 +'px '+ (n - di)/2 +'px' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							img.style.width = n + 'px' | 
					
						
							|  |  |  | 							img.style.height = '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							img.style.margin = '' | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 					}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 			// vertical viewer...
 | 
					
						
							|  |  |  | 			} else { | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 				images | 
					
						
							|  |  |  | 					.each(function(_, img){ | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 						var o = img.getAttribute('orientation') | 
					
						
							|  |  |  | 						o = o == null ? 0 : o | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						// rotated images...
 | 
					
						
							|  |  |  | 						if(o == 90 || o == 270){ | 
					
						
							|  |  |  | 							img.style.width = n + 'px' | 
					
						
							|  |  |  | 							img.style.height = '' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							img.style.margin = -(n - di)/2 +'px '+ (n - di)/2 +'px' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						} else { | 
					
						
							|  |  |  | 							img.style.width = '' | 
					
						
							|  |  |  | 							img.style.height = n + 'px' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 							img.style.margin = '' | 
					
						
							|  |  |  | 						} | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 					}) | 
					
						
							|  |  |  | 			} | 
					
						
							|  |  |  | 		 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | 			that.ribbons | 
					
						
							|  |  |  | 				.centerImage() | 
					
						
							|  |  |  | 				.restoreTransitions(true) | 
					
						
							| 
									
										
										
										
											2016-04-02 22:53:56 +03:00
										 |  |  | 		}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 	// reset proportions to square...
 | 
					
						
							|  |  |  | 	} else if(w != h) { | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 		var images = viewer.find('.ribbon .image') | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 		getAnimationFrame(function(){ | 
					
						
							|  |  |  | 			that.ribbons.preventTransitions() | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:24:21 +03:00
										 |  |  | 			images | 
					
						
							|  |  |  | 				.each(function(_, img){ | 
					
						
							|  |  |  | 					img.style.width = '' | 
					
						
							|  |  |  | 					img.style.height = '' | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 					img.style.margin = '' | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 				}) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | 			that.ribbons | 
					
						
							|  |  |  | 				.centerImage() | 
					
						
							|  |  |  | 				.restoreTransitions(true) | 
					
						
							| 
									
										
										
										
											2016-04-24 03:21:41 +03:00
										 |  |  | 		}) | 
					
						
							| 
									
										
										
										
											2016-04-02 22:53:56 +03:00
										 |  |  | 	} | 
					
						
							| 
									
										
										
										
											2016-04-02 20:39:58 +03:00
										 |  |  | } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-24 17:35:33 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-02 20:39:58 +03:00
										 |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var SingleImageActions = actions.Actions({ | 
					
						
							|  |  |  | 	config: { | 
					
						
							|  |  |  | 		// NOTE: these will get overwritten if/when the user changes the scale...
 | 
					
						
							|  |  |  | 		'single-image-scale': null, | 
					
						
							|  |  |  | 		'ribbon-scale': null, | 
					
						
							| 
									
										
										
										
											2016-04-24 14:46:43 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 02:37:57 +03:00
										 |  |  | 		// NOTE: setting this to null or to -1 will disable the feature...
 | 
					
						
							| 
									
										
										
										
											2016-04-24 14:46:43 +03:00
										 |  |  | 		'single-image-proportions-threshold': 2, | 
					
						
							| 
									
										
										
										
											2016-04-02 20:39:58 +03:00
										 |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	toggleSingleImage: ['Interface/Toggle single image view',  | 
					
						
							|  |  |  | 		toggler.CSSClassToggler( | 
					
						
							|  |  |  | 			function(){ return this.ribbons.viewer },  | 
					
						
							|  |  |  | 			'single-image-mode') ], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | var SingleImageView = | 
					
						
							|  |  |  | module.SingleImageView = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-single-image-view', | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'ui' | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	actions: SingleImageActions, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers:[ | 
					
						
							| 
									
										
										
										
											2016-04-25 14:34:32 +03:00
										 |  |  | 		// XXX HACK: force browser to redraw off-screen images...
 | 
					
						
							|  |  |  | 		// 		...it appears that chrome cheats by not resizing off-screen
 | 
					
						
							|  |  |  | 		// 		images properly after changing scale...
 | 
					
						
							|  |  |  | 		// 		XXX this is still not perfect...
 | 
					
						
							|  |  |  | 		// 			...if needed do a .reload() / ctrl-r
 | 
					
						
							|  |  |  | 		['focusImage', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				if(this.toggleSingleImage('?') == 'on'){ | 
					
						
							|  |  |  | 					this.scale = this.scale | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							| 
									
										
										
										
											2016-04-23 19:41:59 +03:00
										 |  |  | 		['fitImage.post setScale.post', | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 			function(){  | 
					
						
							|  |  |  | 				// singe image mode -- set image proportions...
 | 
					
						
							|  |  |  | 				if(this.toggleSingleImage('?') == 'on'){ | 
					
						
							|  |  |  | 					updateImageProportions.call(this) | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 					this.config['single-image-scale'] = this.scale | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 					this.config['ribbon-scale'] = this.scale | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							| 
									
										
										
										
											2016-04-25 02:37:57 +03:00
										 |  |  | 		// update new images...
 | 
					
						
							|  |  |  | 		['resizeRibbon', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				if(this.toggleSingleImage('?') == 'on'){ | 
					
						
							|  |  |  | 					updateImageProportions.call(this) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 		// NOTE: this is not part of the actual action above because we 
 | 
					
						
							|  |  |  | 		// 		need to see if the state has changed and doing this with 
 | 
					
						
							|  |  |  | 		// 		two separate pre/post callbacks (toggler callbacks) is 
 | 
					
						
							|  |  |  | 		// 		harder than with two nested callbacks (action callbacks)
 | 
					
						
							|  |  |  | 		['toggleSingleImage.pre',  | 
					
						
							|  |  |  | 			function(){  | 
					
						
							|  |  |  | 				var pre_state = this.toggleSingleImage('?') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				return function(){ | 
					
						
							|  |  |  | 					var state = this.toggleSingleImage('?') | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// singe image mode -- set image proportions...
 | 
					
						
							|  |  |  | 					if(state == 'on'){ | 
					
						
							|  |  |  | 						updateImageProportions.call(this) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						// update scale...
 | 
					
						
							|  |  |  | 						if(state != pre_state){ | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 							var s = this.scale | 
					
						
							|  |  |  | 							this.config['ribbon-scale'] = s | 
					
						
							|  |  |  | 							this.scale = this.config['single-image-scale'] || s | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 						} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 					// ribbon mode -- restore original image size...
 | 
					
						
							|  |  |  | 					} else { | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | 						this.ribbons.viewer.find('.image:not(.clone)') | 
					
						
							|  |  |  | 							.each(function(_, img){ | 
					
						
							|  |  |  | 								img.style.width = '' | 
					
						
							|  |  |  | 								img.style.height = '' | 
					
						
							| 
									
										
										
										
											2016-04-26 02:49:06 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 								img.style.margin = '' | 
					
						
							| 
									
										
										
										
											2016-04-25 04:40:10 +03:00
										 |  |  | 							}) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 						this.ribbons.centerImage() | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 						// update scale...
 | 
					
						
							|  |  |  | 						if(state != pre_state){ | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 							var s = this.scale | 
					
						
							|  |  |  | 							this.config['single-image-scale'] = s | 
					
						
							|  |  |  | 							this.scale = this.config['ribbon-scale'] || s | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 						} | 
					
						
							|  |  |  | 					} | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | var SingleImageViewLocalStorage = | 
					
						
							|  |  |  | module.SingleImageViewLocalStorage = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-single-image-view-local-storage', | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'ui-single-image-view', | 
					
						
							|  |  |  | 		'config-local-storage', | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers:[ | 
					
						
							|  |  |  | 		// set scale...
 | 
					
						
							|  |  |  | 		['load', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				// prevent this from doing anything while no viewer...
 | 
					
						
							|  |  |  | 				if(!this.ribbons || !this.ribbons.viewer || this.ribbons.viewer.length == 0){ | 
					
						
							|  |  |  | 					return | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				if(this.toggleSingleImage('?') == 'on'){ | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 					this.scale = this.config['single-image-scale'] || this.scale | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 
 | 
					
						
							|  |  |  | 				} else { | 
					
						
							| 
									
										
										
										
											2016-04-26 02:49:06 +03:00
										 |  |  | 					// XXX for some reason this stopped working...
 | 
					
						
							| 
									
										
										
										
											2016-04-25 23:41:59 +03:00
										 |  |  | 					this.scale = this.config['ribbon-scale'] || this.scale | 
					
						
							| 
									
										
										
										
											2016-04-02 19:30:48 +03:00
										 |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This will store/restore autohide state for single-image and ribbon 
 | 
					
						
							|  |  |  | // views...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // NOTE: chrome 49 + devtools open appears to prevent the cursor from being hidden...
 | 
					
						
							|  |  |  | //
 | 
					
						
							|  |  |  | // XXX hiding cursor on navigation for some reason does not work...
 | 
					
						
							|  |  |  | var SingleImageAutoHideCursor =  | 
					
						
							|  |  |  | module.SingleImageAutoHideCursor = core.ImageGridFeatures.Feature({ | 
					
						
							|  |  |  | 	title: '', | 
					
						
							|  |  |  | 	doc: '', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	tag: 'ui-single-image-view-autohide-cursor', | 
					
						
							|  |  |  | 	depends: [ | 
					
						
							|  |  |  | 		'ui-autohide-cursor', | 
					
						
							|  |  |  | 		'ui-single-image-view', | 
					
						
							|  |  |  | 	], | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	config: { | 
					
						
							|  |  |  | 		'cursor-autohide-single-image-view': 'on', | 
					
						
							|  |  |  | 		'cursor-autohide-ribbon-view': 'off', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 		//'cursor-autohide-on-navigate': true, 
 | 
					
						
							|  |  |  | 	}, | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	handlers: [ | 
					
						
							|  |  |  | 		// setup...
 | 
					
						
							|  |  |  | 		['load', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				var mode = this.toggleSingleImage('?') == 'on' ?  | 
					
						
							|  |  |  | 					'cursor-autohide-single-image-view' | 
					
						
							|  |  |  | 					: 'cursor-autohide-ribbon-view' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				this.toggleAutoHideCursor(this.config[mode] || 'off') | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 		// store state for each mode...
 | 
					
						
							|  |  |  | 		['toggleAutoHideCursor', | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				var mode = this.toggleSingleImage('?') == 'on' ?  | 
					
						
							|  |  |  | 					'cursor-autohide-single-image-view' | 
					
						
							|  |  |  | 					: 'cursor-autohide-ribbon-view' | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				this.config[mode] = this.toggleAutoHideCursor('?') | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 		// restore state per mode...
 | 
					
						
							|  |  |  | 		['toggleSingleImage',  | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				if(this.toggleSingleImage('?') == 'on'){ | 
					
						
							|  |  |  | 					this.toggleAutoHideCursor(this.config['cursor-autohide-single-image-view']) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 				} else { | 
					
						
							|  |  |  | 					this.toggleAutoHideCursor(this.config['cursor-autohide-ribbon-view']) | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 		/* XXX for some reason this does not work... | 
					
						
							|  |  |  | 		// autohide on navigation...
 | 
					
						
							|  |  |  | 		['focusImage',  | 
					
						
							|  |  |  | 			function(){ | 
					
						
							|  |  |  | 				//if(this.config['cursor-autohide-on-navigate'] 
 | 
					
						
							|  |  |  | 				//		&& this.toggleAutoHideCursor('?') == 'on'){
 | 
					
						
							|  |  |  | 				//	this.toggleAutoHideCursor('on')
 | 
					
						
							|  |  |  | 				//}
 | 
					
						
							|  |  |  | 				if(this.config['cursor-autohide-on-navigate']  | 
					
						
							|  |  |  | 						&& this.toggleAutoHideCursor('?') == 'on' | 
					
						
							|  |  |  | 						&& this.ribbons.viewer.prop('cursor-autohide')){ | 
					
						
							|  |  |  | 					this.ribbons.viewer | 
					
						
							|  |  |  | 						.addClass('cursor-hidden') | 
					
						
							|  |  |  | 				} | 
					
						
							|  |  |  | 			}], | 
					
						
							|  |  |  | 		*/ | 
					
						
							|  |  |  | 	] | 
					
						
							|  |  |  | }) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | //---------------------------------------------------------------------
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | core.ImageGridFeatures.Feature('ui-single-image', [ | 
					
						
							|  |  |  | 	'ui-single-image-view', | 
					
						
							|  |  |  | 	'ui-single-image-view-local-storage', | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	'ui-single-image-view-autohide-cursor', | 
					
						
							|  |  |  | ]) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | /********************************************************************** | 
					
						
							|  |  |  | * vim:set ts=4 sw=4 :                                                */ | 
					
						
							|  |  |  | return module }) |