mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-10-30 19:00:09 +00:00 
			
		
		
		
	added a basic drawer widget...
Signed-off-by: Alex A. Naanou <alex.nanou@gmail.com>
This commit is contained in:
		
							parent
							
								
									174fe34e13
								
							
						
					
					
						commit
						e29b2143ae
					
				
							
								
								
									
										54
									
								
								ui (gen4)/css/widget/drawer.css
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										54
									
								
								ui (gen4)/css/widget/drawer.css
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,54 @@ | |||||||
|  | 
 | ||||||
|  | .drawer-widget { | ||||||
|  | 	position: absolute; | ||||||
|  | 
 | ||||||
|  | 	width: 100%; | ||||||
|  | 	height: 100%; | ||||||
|  | 	top: 0px; | ||||||
|  | 	left: 0px; | ||||||
|  | 
 | ||||||
|  | 	overflow: auto; | ||||||
|  | 
 | ||||||
|  | 	background: rgba(0, 0, 0, 0.5); | ||||||
|  | 
 | ||||||
|  | 	-webkit-transform-style: preserve-3d; | ||||||
|  | 	-moz-transform-style: preserve-3d; | ||||||
|  | 	transform-style: preserve-3d; | ||||||
|  | } | ||||||
|  | .drawer-widget~.drawer-widget { | ||||||
|  | 	background: rgba(0, 0, 0, 0.1); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .drawer-widget .content { | ||||||
|  | 	position: relative; | ||||||
|  | 	display: inline-block; | ||||||
|  | 
 | ||||||
|  | 	top: 100%; | ||||||
|  | 	left: 0px; | ||||||
|  | 
 | ||||||
|  | 	width: 100%; | ||||||
|  | 	height: auto; | ||||||
|  | 
 | ||||||
|  | 	overflow: hidden; | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 	box-shadow: rgba(0, 0, 0, 0.1) 0.3em 0.3em 5em; | ||||||
|  | } | ||||||
|  | .drawer-widget~.drawer-widget .content { | ||||||
|  | 	box-shadow: rgba(0, 0, 0, 0.05) 0.1em 0.1em 3em; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* NOTE: this does not include text...  | ||||||
|  | 		...need a way to go around this... | ||||||
|  | */ | ||||||
|  | .blur>* { | ||||||
|  | 	-webkit-filter: blur(2px) saturate(0.3); | ||||||
|  | 	filter: blur(2px) saturate(0.3); | ||||||
|  | } | ||||||
|  | .blur>.drawer-widget { | ||||||
|  | 	-webkit-filter: none; | ||||||
|  | 	filter: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
							
								
								
									
										118
									
								
								ui (gen4)/lib/widget/drawer.html
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										118
									
								
								ui (gen4)/lib/widget/drawer.html
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,118 @@ | |||||||
|  | <!DOCTYPE html> | ||||||
|  | <html> | ||||||
|  | <link rel="stylesheet" href="../../css/widget/drawer.css"> | ||||||
|  | <style> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .container { | ||||||
|  | 	position: absolute; | ||||||
|  | 	box-sizing: border-box; | ||||||
|  | 
 | ||||||
|  | 	width: 50vw; | ||||||
|  | 	height: 50vh; | ||||||
|  | 	top: 10vh; | ||||||
|  | 	right: 10vw; | ||||||
|  | 
 | ||||||
|  | 	border: solid 1px black; | ||||||
|  | 
 | ||||||
|  | 	padding: 10px; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .drawer-content { | ||||||
|  | 	padding: 5px; | ||||||
|  | } | ||||||
|  | body>.drawer-content { | ||||||
|  | 	display: none; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | .drawer-widget .content { | ||||||
|  | 	background: white; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | /* theaming... */ | ||||||
|  | 
 | ||||||
|  | body.dark { | ||||||
|  | 	background: black; | ||||||
|  | 	color: white; | ||||||
|  | } | ||||||
|  | .dark ::-webkit-scrollbar-track-piece { | ||||||
|  | 	background: rgba(255, 255, 255, 0.05); | ||||||
|  | } | ||||||
|  | .dark ::-webkit-scrollbar-thumb { | ||||||
|  | 	background: rgba(255, 255, 255, 0.15); | ||||||
|  | } | ||||||
|  | .dark ::-webkit-scrollbar-thumb:hover { | ||||||
|  | 	background: rgba(255, 255, 255, 0.3); | ||||||
|  | } | ||||||
|  | .dark .container { | ||||||
|  | 	border: solid 1px rgba(255, 255, 255, 0.2); | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | </style> | ||||||
|  | 
 | ||||||
|  | <script src="../../ext-lib/jquery.js"></script> | ||||||
|  | <script src="../../ext-lib/jquery-ui.js"></script> | ||||||
|  | 
 | ||||||
|  | <script src="../jli.js"></script> | ||||||
|  | <script src="../toggler.js"></script> | ||||||
|  | 
 | ||||||
|  | <script src="../../ext-lib/require.js"></script> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <script> | ||||||
|  | 
 | ||||||
|  | requirejs(['../keyboard', '../../object', './drawer'], function(kbd, obj, d){ | ||||||
|  | 	keyboard = kbd | ||||||
|  | 	drawer = d | ||||||
|  | 	object = obj | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | $(function(){ | ||||||
|  | 
 | ||||||
|  | }) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | var themeToggler = CSSClassToggler('body', | ||||||
|  | 		[ | ||||||
|  | 			'none',  | ||||||
|  | 			'light', | ||||||
|  | 			'dark',  | ||||||
|  | 		], | ||||||
|  | 		function(state){ | ||||||
|  | 			$('#theme').text(state) | ||||||
|  | 		}) | ||||||
|  | 
 | ||||||
|  | </script> | ||||||
|  | 
 | ||||||
|  | <body> | ||||||
|  | 
 | ||||||
|  | Theme: <button id="theme" onclick="themeToggler()">none</button> | ||||||
|  | 
 | ||||||
|  | <br> | ||||||
|  | 
 | ||||||
|  | <button onclick="drawer.Overlay('body', $('body>.drawer-content').clone())">Global drawer (default)</button> | ||||||
|  | <button onclick="drawer.Overlay('.container', $('body>.drawer-content').clone())">Local drawer</button> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="container"> | ||||||
|  | 	<h4>A context for an drawer...<h4> | ||||||
|  | 	<button onclick="drawer.Overlay('.container', $('body>.drawer-content').clone())">Local drawer</button> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | <div class="drawer-content"> | ||||||
|  | 	<h3>Overlay</h3> | ||||||
|  | 	<button>Sub drawer</button> | ||||||
|  | </div> | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | </body> | ||||||
|  | </html> | ||||||
|  | <!-- vim:set ts=4 sw=4 : --> | ||||||
							
								
								
									
										171
									
								
								ui (gen4)/lib/widget/drawer.js
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										171
									
								
								ui (gen4)/lib/widget/drawer.js
									
									
									
									
									
										Executable file
									
								
							| @ -0,0 +1,171 @@ | |||||||
|  | /********************************************************************** | ||||||
|  | *  | ||||||
|  | * | ||||||
|  | * | ||||||
|  | **********************************************************************/ | ||||||
|  | 
 | ||||||
|  | define(function(require){ var module = {} | ||||||
|  | console.log('>>> overlay') | ||||||
|  | 
 | ||||||
|  | //var DEBUG = DEBUG != null ? DEBUG : true
 | ||||||
|  | 
 | ||||||
|  | var keyboard = require('../keyboard') | ||||||
|  | var object = require('../../object') | ||||||
|  | var widget = require('./widget') | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /*********************************************************************/ | ||||||
|  | 
 | ||||||
|  | var OverlayClassPrototype = { | ||||||
|  | 	make: function(client, options){ | ||||||
|  | 		var that = this | ||||||
|  | 		var overlay = $('<div>') | ||||||
|  | 			.addClass('drawer-widget') | ||||||
|  | 			.on(options.nonPropagatedEvents.join(' '), function(){ | ||||||
|  | 				event.stopPropagation() | ||||||
|  | 			}) | ||||||
|  | 			.append($('<div>') | ||||||
|  | 				.addClass('content') | ||||||
|  | 				.click(function(){ | ||||||
|  | 					event.stopPropagation() | ||||||
|  | 				}) | ||||||
|  | 				.append(client)) | ||||||
|  | 
 | ||||||
|  | 		return overlay | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | var OverlayPrototype = { | ||||||
|  | 	dom: null, | ||||||
|  | 	client: null, | ||||||
|  | 
 | ||||||
|  | 	options: { | ||||||
|  | 		nonPropagatedEvents: [ | ||||||
|  | 			'click', | ||||||
|  | 			'keydown', | ||||||
|  | 		], | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	keyboard: { | ||||||
|  | 		General: { | ||||||
|  | 			pattern: '.browse-widget', | ||||||
|  | 
 | ||||||
|  | 			Esc: 'close', | ||||||
|  | 		}, | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	// XXX triggering events from here and from jQuery/dom has a 
 | ||||||
|  | 	// 		different effect...
 | ||||||
|  | 	trigger: widget.triggerEventWithSource, | ||||||
|  | 
 | ||||||
|  | 	// proxy event api...
 | ||||||
|  | 	on: widget.proxyToDom('on'), | ||||||
|  | 	one: widget.proxyToDom('one'), | ||||||
|  | 	off: widget.proxyToDom('off'), | ||||||
|  | 	bind: widget.proxyToDom('bind'), | ||||||
|  | 	unbind: widget.proxyToDom('unbind'), | ||||||
|  | 	deligate: widget.proxyToDom('deligate'), | ||||||
|  | 	undeligate: widget.proxyToDom('undeligate'), | ||||||
|  | 
 | ||||||
|  | 	// custom events...
 | ||||||
|  | 	close: function(handler){ | ||||||
|  | 		// trigger the event...
 | ||||||
|  | 		if(handler == null){ | ||||||
|  | 			var that = this | ||||||
|  | 			this.dom.animate({ | ||||||
|  | 					scrollTop: 0, | ||||||
|  | 					opacity: 0, | ||||||
|  | 					filter: 'none', | ||||||
|  | 				},  | ||||||
|  | 				120, | ||||||
|  | 				function(){ | ||||||
|  | 					that.dom.detach() | ||||||
|  | 					if(that.parent.children('.overlay-widget').length == 0){ | ||||||
|  | 						that.parent.removeClass('blur') | ||||||
|  | 					} | ||||||
|  | 					that.trigger('close') | ||||||
|  | 				}) | ||||||
|  | 
 | ||||||
|  | 		// register a handler...
 | ||||||
|  | 		} else { | ||||||
|  | 			this.on('close', handler) | ||||||
|  | 		} | ||||||
|  | 	}, | ||||||
|  | 
 | ||||||
|  | 	__init__: function(parent, client, options){ | ||||||
|  | 		var that = this | ||||||
|  | 		parent = this.parent = $(parent || 'body') | ||||||
|  | 		options = options || {} | ||||||
|  | 
 | ||||||
|  | 		this.client = client | ||||||
|  | 		var client_dom = client.dom || client | ||||||
|  | 
 | ||||||
|  | 		// merge options...
 | ||||||
|  | 		var opts = Object.create(this.options) | ||||||
|  | 		Object.keys(options).forEach(function(n){ opts[n] = options[n] }) | ||||||
|  | 		options = this.options = opts | ||||||
|  | 
 | ||||||
|  | 		var dom = this.dom = this.constructor.make(client_dom, options) | ||||||
|  | 			.click(function(){ | ||||||
|  | 				that.close() | ||||||
|  | 			}) | ||||||
|  | 
 | ||||||
|  | 		parent | ||||||
|  | 			.addClass('blur') | ||||||
|  | 			.append(dom) | ||||||
|  | 
 | ||||||
|  | 		// add keyboard handler...
 | ||||||
|  | 		dom.keydown( | ||||||
|  | 			keyboard.makeKeyboardHandler( | ||||||
|  | 				this.keyboard, | ||||||
|  | 				options.logKeys, | ||||||
|  | 				this)) | ||||||
|  | 			.css({opacity: 0}) | ||||||
|  | 			.animate({ | ||||||
|  | 					scrollTop: Math.min( | ||||||
|  | 						client_dom.outerHeight(),  | ||||||
|  | 						// do not scroll more than the container height and
 | ||||||
|  | 						// keep a bit on top...
 | ||||||
|  | 						(parent.is('body') ? $(document) : parent).outerHeight()-100)+'px', | ||||||
|  | 					opacity: 1, | ||||||
|  | 				},  | ||||||
|  | 				120, | ||||||
|  | 				function(){ | ||||||
|  | 					dom.scroll(function(){ | ||||||
|  | 						var st = $(this).scrollTop() | ||||||
|  | 						var h = Math.min(100, client_dom.outerHeight()) | ||||||
|  | 						// start fading...
 | ||||||
|  | 						if(st < h){ | ||||||
|  | 							dom.css({ opacity: Math.min(1, st/h) }) | ||||||
|  | 						} else if(dom.css('opacity') < 1){ | ||||||
|  | 							dom.css('opacity', 1) | ||||||
|  | 						} | ||||||
|  | 						// close drawer when scrolling to the top...
 | ||||||
|  | 						if(st < 10){ | ||||||
|  | 							that.close() | ||||||
|  | 						} | ||||||
|  | 					}) | ||||||
|  | 				}) | ||||||
|  | 
 | ||||||
|  | 		// focus the client...
 | ||||||
|  | 		if(client.focus){ | ||||||
|  | 			client.focus() | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		return this | ||||||
|  | 	}, | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | var Overlay =  | ||||||
|  | module.Overlay =  | ||||||
|  | object.makeConstructor('Drawer',  | ||||||
|  | 		OverlayClassPrototype,  | ||||||
|  | 		OverlayPrototype) | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | /********************************************************************** | ||||||
|  | * vim:set ts=4 sw=4 :                                                */ | ||||||
|  | return module }) | ||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user