mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-04 13:20:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			143 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/**********************************************************************
 | 
						|
* 
 | 
						|
* Core features that setup the life-cycle and the base interfaces for 
 | 
						|
* features to use...
 | 
						|
*
 | 
						|
*
 | 
						|
**********************************************************************/
 | 
						|
 | 
						|
define(function(require){ var module = {}
 | 
						|
 | 
						|
//var DEBUG = DEBUG != null ? DEBUG : true
 | 
						|
 | 
						|
var actions = require('lib/actions')
 | 
						|
var features = require('lib/features')
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
var ImageGridFeatures =
 | 
						|
module.ImageGridFeatures = Object.create(features.FeatureSet)
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
// XXX should this be a generic library thing???
 | 
						|
// XXX should his have state???
 | 
						|
// 		...if so, should this be a toggler???
 | 
						|
var LifeCycleActions = actions.Actions({
 | 
						|
	start: ['- System/', 
 | 
						|
		function(){
 | 
						|
			var that = this
 | 
						|
			this.logger && this.logger.emit('start')
 | 
						|
 | 
						|
			// NOTE: jQuery currently provides no way to check if an event
 | 
						|
			// 		is bound so we'll need to keep track manually...
 | 
						|
			if(this.__stop_handler == null){
 | 
						|
				var stop = this.__stop_handler = function(){ that.stop() }
 | 
						|
 | 
						|
			} else {
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			// setup exit...
 | 
						|
			if(typeof(process) != 'undefined'){
 | 
						|
				// nw.js...
 | 
						|
				try{
 | 
						|
					this.runtime = 'nw'
 | 
						|
 | 
						|
					// this will fail if we're not in nw.js...
 | 
						|
					var gui = requirejs('nw.gui')
 | 
						|
 | 
						|
					// this handles both reload and close...
 | 
						|
					$(window).on('beforeunload', stop)
 | 
						|
 | 
						|
					// NOTE: we are using both events as some of them do not
 | 
						|
					// 		get triggered in specific conditions and some do,
 | 
						|
					// 		for example, this gets triggered when the window's
 | 
						|
					// 		'X' is clicked while does not on reload...
 | 
						|
					this.__nw_stop_handler = function(){
 | 
						|
						var w = this
 | 
						|
						try{
 | 
						|
							that
 | 
						|
								// wait till ALL the handlers finish before 
 | 
						|
								// exiting...
 | 
						|
								.on('stop.post', function(){
 | 
						|
									w.close(true)
 | 
						|
								})
 | 
						|
								.stop()
 | 
						|
 | 
						|
						// in case something breaks exit...
 | 
						|
						// XXX not sure if this is correct...
 | 
						|
						} catch(e){
 | 
						|
							this.close(true)
 | 
						|
						}
 | 
						|
					}
 | 
						|
					gui.Window.get().on('close', this.__nw_stop_handler)
 | 
						|
 | 
						|
 | 
						|
				// pure node.js...
 | 
						|
				} catch(e) {
 | 
						|
					this.runtime = 'node'
 | 
						|
 | 
						|
					process.on('exit', stop)
 | 
						|
				}
 | 
						|
 | 
						|
			// browser...
 | 
						|
			} else if(typeof('window') != 'undefined'){
 | 
						|
				this.runtime = 'browser'
 | 
						|
 | 
						|
				$(window).on('beforeunload', stop)
 | 
						|
 | 
						|
			// unknown...
 | 
						|
			} else {
 | 
						|
				this.runtime = 'unknown'
 | 
						|
			}
 | 
						|
 | 
						|
		}],
 | 
						|
	// unbind events...
 | 
						|
	stop: ['- System/', 
 | 
						|
		function(){
 | 
						|
			// browser & nw...
 | 
						|
			if(this.__stop_handler 
 | 
						|
					&& (this.runtime == 'browser' || this.runtime == 'nw')){
 | 
						|
				$(window).off('beforeunload', this.__stop_handler)
 | 
						|
			}
 | 
						|
 | 
						|
			// nw...
 | 
						|
			if(this.__nw_stop_handler && this.runtime == 'nw'){
 | 
						|
				var gui = requirejs('nw.gui')
 | 
						|
				gui.Window.get().off('close', this.__nw_stop_handler)
 | 
						|
				delete this.__nw_stop_handler
 | 
						|
			}
 | 
						|
 | 
						|
			// node...
 | 
						|
			if(this.__stop_handler && this.runtime == 'node'){
 | 
						|
				process.off('exit', this.__stop_handler)
 | 
						|
			}
 | 
						|
 | 
						|
			delete this.__stop_handler
 | 
						|
 | 
						|
			this.logger && this.logger.emit('stop')
 | 
						|
		}],
 | 
						|
})
 | 
						|
 | 
						|
var LifeCycle = 
 | 
						|
module.LifeCycle = ImageGridFeatures.Feature({
 | 
						|
	title: '',
 | 
						|
	doc: '',
 | 
						|
 | 
						|
	tag: 'lifecycle',
 | 
						|
 | 
						|
	actions: LifeCycleActions,
 | 
						|
})
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**********************************************************************
 | 
						|
* vim:set ts=4 sw=4 :                                                */
 | 
						|
return module })
 |