mirror of
				https://github.com/flynx/ImageGrid.git
				synced 2025-11-03 04:40:10 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			108 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			JavaScript
		
	
	
		
			Executable File
		
	
	
	
	
/**********************************************************************
 | 
						|
* 
 | 
						|
*
 | 
						|
*
 | 
						|
**********************************************************************/
 | 
						|
((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')
 | 
						|
 | 
						|
var core = require('features/core')
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/*********************************************************************/
 | 
						|
 | 
						|
var DragAndDrop = 
 | 
						|
module.DragAndDrop = core.ImageGridFeatures.Feature({
 | 
						|
	title: '',
 | 
						|
	doc: '',
 | 
						|
 | 
						|
	tag: 'ui-drag-n-drop',
 | 
						|
	depends: [
 | 
						|
		'ui',
 | 
						|
	],
 | 
						|
 | 
						|
	handlers: [
 | 
						|
		// XXX add type/handler registry -- might be a good idea to add 
 | 
						|
		// 		an action attribute/handler...
 | 
						|
		// XXX would be nice to load a directory tree as ribbons...
 | 
						|
		// XXX HACK-ish...
 | 
						|
		['start', function(){
 | 
						|
			var that = this
 | 
						|
			function handleDrop(evt){
 | 
						|
				event.stopPropagation()
 | 
						|
				event.preventDefault()
 | 
						|
 | 
						|
				var files = event.dataTransfer.files
 | 
						|
				var lst = {}
 | 
						|
				var paths = []
 | 
						|
 | 
						|
				// files is a FileList of File objects. List some properties.
 | 
						|
				var output = []
 | 
						|
				for (var i = 0, f; f = files[i]; i++) {
 | 
						|
					// only images...
 | 
						|
					if (!f.type.match('image.*')) {
 | 
						|
						continue
 | 
						|
					}
 | 
						|
 | 
						|
					if(f.path){
 | 
						|
						paths.push(f.path)
 | 
						|
 | 
						|
					} else {
 | 
						|
						// XXX get the metadata...
 | 
						|
						lst[f.name] = {}
 | 
						|
 | 
						|
						var reader = new FileReader()
 | 
						|
 | 
						|
						reader.onload = (function(f){
 | 
						|
							return function(e){
 | 
						|
								// update the data and reload...
 | 
						|
								var gid = lst[f.name].gid
 | 
						|
								that.images[gid].path = e.target.result
 | 
						|
								that.ribbons.updateImage(gid)
 | 
						|
							} })(f)
 | 
						|
 | 
						|
						reader.readAsDataURL(f)
 | 
						|
					}
 | 
						|
				}
 | 
						|
 | 
						|
				if(paths.length > 0){
 | 
						|
					that.loadURLs(paths)
 | 
						|
 | 
						|
				} else {
 | 
						|
					that.loadURLs(Object.keys(lst))
 | 
						|
 | 
						|
					// add the generated stuff to the list -- this will help us id the 
 | 
						|
					// images when they are loaded later...
 | 
						|
					that.images.forEach(function(gid, img){
 | 
						|
						lst[img.path].gid = gid
 | 
						|
						img.name = img.path.split('.').slice(0, -1).join('.')
 | 
						|
					})
 | 
						|
				}
 | 
						|
			}
 | 
						|
			function handleDragOver(evt) {
 | 
						|
				evt.stopPropagation()
 | 
						|
				evt.preventDefault()
 | 
						|
				// Explicitly show this is a copy...
 | 
						|
				evt.dataTransfer.dropEffect = 'copy'
 | 
						|
			}
 | 
						|
 | 
						|
			// handle drop events...
 | 
						|
			this.ribbons.viewer[0]
 | 
						|
				.addEventListener('dragover', handleDragOver, false);
 | 
						|
			this.ribbons.viewer[0]
 | 
						|
				.addEventListener('drop', handleDrop, false)
 | 
						|
		}]
 | 
						|
	],
 | 
						|
})
 | 
						|
 | 
						|
 | 
						|
 | 
						|
 | 
						|
/**********************************************************************
 | 
						|
* vim:set ts=4 sw=4 :                               */ return module })
 |