/********************************************************************** * * * **********************************************************************/ ((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 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 }) } } 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 })