| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760176117621763176417651766176717681769177017711772177317741775177617771778177917801781178217831784178517861787178817891790179117921793179417951796179717981799180018011802180318041805180618071808180918101811181218131814181518161817181818191820182118221823182418251826182718281829183018311832183318341835183618371838183918401841 | 
							
- ;(function(){
 
-     /**
 
-      * Require the module at `name`.
 
-      *
 
-      * @param {String} name
 
-      * @return {Object} exports
 
-      * @api public
 
-      */
 
-     function require(name) {
 
-         var module = require.modules[name];
 
-         if (!module) throw new Error('failed to require "' + name + '"');
 
-         if (!('exports' in module) && typeof module.definition === 'function') {
 
-             module.client = module.component = true;
 
-             module.definition.call(this, module.exports = {}, module);
 
-             delete module.definition;
 
-         }
 
-         return module.exports;
 
-     }
 
-     /**
 
-      * Registered modules.
 
-      */
 
-     require.modules = {};
 
-     /**
 
-      * Register module at `name` with callback `definition`.
 
-      *
 
-      * @param {String} name
 
-      * @param {Function} definition
 
-      * @api private
 
-      */
 
-     require.register = function (name, definition) {
 
-         require.modules[name] = {
 
-             definition: definition
 
-         };
 
-     };
 
-     /**
 
-      * Define a module's exports immediately with `exports`.
 
-      *
 
-      * @param {String} name
 
-      * @param {Generic} exports
 
-      * @api private
 
-      */
 
-     require.define = function (name, exports) {
 
-         require.modules[name] = {
 
-             exports: exports
 
-         };
 
-     };
 
-     require.register("component~emitter@1.1.2", function (exports, module) {
 
-         /**
 
-          * Expose `Emitter`.
 
-          */
 
-         module.exports = Emitter;
 
-         /**
 
-          * Initialize a new `Emitter`.
 
-          *
 
-          * @api public
 
-          */
 
-         function Emitter(obj) {
 
-             if (obj) return mixin(obj);
 
-         };
 
-         /**
 
-          * Mixin the emitter properties.
 
-          *
 
-          * @param {Object} obj
 
-          * @return {Object}
 
-          * @api private
 
-          */
 
-         function mixin(obj) {
 
-             for (var key in Emitter.prototype) {
 
-                 obj[key] = Emitter.prototype[key];
 
-             }
 
-             return obj;
 
-         }
 
-         /**
 
-          * Listen on the given `event` with `fn`.
 
-          *
 
-          * @param {String} event
 
-          * @param {Function} fn
 
-          * @return {Emitter}
 
-          * @api public
 
-          */
 
-         Emitter.prototype.on =
 
-             Emitter.prototype.addEventListener = function(event, fn){
 
-                 this._callbacks = this._callbacks || {};
 
-                 (this._callbacks[event] = this._callbacks[event] || [])
 
-                     .push(fn);
 
-                 return this;
 
-             };
 
-         /**
 
-          * Adds an `event` listener that will be invoked a single
 
-          * time then automatically removed.
 
-          *
 
-          * @param {String} event
 
-          * @param {Function} fn
 
-          * @return {Emitter}
 
-          * @api public
 
-          */
 
-         Emitter.prototype.once = function(event, fn){
 
-             var self = this;
 
-             this._callbacks = this._callbacks || {};
 
-             function on() {
 
-                 self.off(event, on);
 
-                 fn.apply(this, arguments);
 
-             }
 
-             on.fn = fn;
 
-             this.on(event, on);
 
-             return this;
 
-         };
 
-         /**
 
-          * Remove the given callback for `event` or all
 
-          * registered callbacks.
 
-          *
 
-          * @param {String} event
 
-          * @param {Function} fn
 
-          * @return {Emitter}
 
-          * @api public
 
-          */
 
-         Emitter.prototype.off =
 
-             Emitter.prototype.removeListener =
 
-                 Emitter.prototype.removeAllListeners =
 
-                     Emitter.prototype.removeEventListener = function(event, fn){
 
-                         this._callbacks = this._callbacks || {};
 
-                         // all
 
-                         if (0 == arguments.length) {
 
-                             this._callbacks = {};
 
-                             return this;
 
-                         }
 
-                         // specific event
 
-                         var callbacks = this._callbacks[event];
 
-                         if (!callbacks) return this;
 
-                         // remove all handlers
 
-                         if (1 == arguments.length) {
 
-                             delete this._callbacks[event];
 
-                             return this;
 
-                         }
 
-                         // remove specific handler
 
-                         var cb;
 
-                         for (var i = 0; i < callbacks.length; i++) {
 
-                             cb = callbacks[i];
 
-                             if (cb === fn || cb.fn === fn) {
 
-                                 callbacks.splice(i, 1);
 
-                                 break;
 
-                             }
 
-                         }
 
-                         return this;
 
-                     };
 
-         /**
 
-          * Emit `event` with the given args.
 
-          *
 
-          * @param {String} event
 
-          * @param {Mixed} ...
 
-          * @return {Emitter}
 
-          */
 
-         Emitter.prototype.emit = function(event){
 
-             this._callbacks = this._callbacks || {};
 
-             var args = [].slice.call(arguments, 1)
 
-                 , callbacks = this._callbacks[event];
 
-             if (callbacks) {
 
-                 callbacks = callbacks.slice(0);
 
-                 for (var i = 0, len = callbacks.length; i < len; ++i) {
 
-                     callbacks[i].apply(this, args);
 
-                 }
 
-             }
 
-             return this;
 
-         };
 
-         /**
 
-          * Return array of callbacks for `event`.
 
-          *
 
-          * @param {String} event
 
-          * @return {Array}
 
-          * @api public
 
-          */
 
-         Emitter.prototype.listeners = function(event){
 
-             this._callbacks = this._callbacks || {};
 
-             return this._callbacks[event] || [];
 
-         };
 
-         /**
 
-          * Check if this emitter has `event` handlers.
 
-          *
 
-          * @param {String} event
 
-          * @return {Boolean}
 
-          * @api public
 
-          */
 
-         Emitter.prototype.hasListeners = function(event){
 
-             return !! this.listeners(event).length;
 
-         };
 
-     });
 
-     require.register("dropzone", function (exports, module) {
 
-         /**
 
-          * Exposing dropzone
 
-          */
 
-         module.exports = require("dropzone/lib/dropzone.js");
 
-     });
 
-     require.register("dropzone/lib/dropzone.js", function (exports, module) {
 
-         /*
 
-          *
 
-          * More info at [www.dropzonejs.com](http://www.dropzonejs.com)
 
-          *
 
-          * Copyright (c) 2012, Matias Meno
 
-          *
 
-          * Permission is hereby granted, free of charge, to any person obtaining a copy
 
-          * of this software and associated documentation files (the "Software"), to deal
 
-          * in the Software without restriction, including without limitation the rights
 
-          * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 
-          * copies of the Software, and to permit persons to whom the Software is
 
-          * furnished to do so, subject to the following conditions:
 
-          *
 
-          * The above copyright notice and this permission notice shall be included in
 
-          * all copies or substantial portions of the Software.
 
-          *
 
-          * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 
-          * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 
-          * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 
-          * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 
-          * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 
-          * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 
-          * THE SOFTWARE.
 
-          *
 
-          */
 
-         (function() {
 
-             var Dropzone, Em, camelize, contentLoaded, detectVerticalSquash, drawImageIOSFix, noop, without,
 
-                 __hasProp = {}.hasOwnProperty,
 
-                 __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
 
-                 __slice = [].slice;
 
-             Em = typeof Emitter !== "undefined" && Emitter !== null ? Emitter : require("component~emitter@1.1.2");
 
-             noop = function() {};
 
-             Dropzone = (function(_super) {
 
-                 var extend;
 
-                 __extends(Dropzone, _super);
 
-                 /*
 
-                  This is a list of all available events you can register on a dropzone object.
 
-                  You can register an event handler like this:
 
-                  dropzone.on("dragEnter", function() { });
 
-                  */
 
-                 Dropzone.prototype.events = ["drop", "dragstart", "dragend", "dragenter", "dragover", "dragleave", "addedfile", "removedfile", "thumbnail", "error", "errormultiple", "processing", "processingmultiple", "uploadprogress", "totaluploadprogress", "sending", "sendingmultiple", "success", "successmultiple", "canceled", "canceledmultiple", "complete", "completemultiple", "reset", "maxfilesexceeded", "maxfilesreached"];
 
-                 Dropzone.prototype.defaultOptions = {
 
-                     url: null,
 
-                     method: "post",
 
-                     withCredentials: false,
 
-                     parallelUploads: 2,
 
-                     uploadMultiple: false,
 
-                     maxFilesize: 256,
 
-                     paramName: "file",
 
-                     createImageThumbnails: true,
 
-                     maxThumbnailFilesize: 10,
 
-                     thumbnailWidth: 100,
 
-                     thumbnailHeight: 100,
 
-                     maxFiles: null,
 
-                     params: {},
 
-                     clickable: true,
 
-                     ignoreHiddenFiles: true,
 
-                     acceptedFiles: null,
 
-                     acceptedMimeTypes: null,
 
-                     autoProcessQueue: true,
 
-                     autoQueue: true,
 
-                     addRemoveLinks: false,
 
-                     previewsContainer: null,
 
-                     dictDefaultMessage: "Drop files here to upload",
 
-                     dictFallbackMessage: "Your browser does not support drag'n'drop file uploads.",
 
-                     dictFallbackText: "Please use the fallback form below to upload your files like in the olden days.",
 
-                     dictFileTooBig: "File is too big ({{filesize}}MiB). Max filesize: {{maxFilesize}}MiB.",
 
-                     dictInvalidFileType: "You can't upload files of this type.",
 
-                     dictResponseError: "Server responded with {{statusCode}} code.",
 
-                     dictCancelUpload: "Cancel upload",
 
-                     dictCancelUploadConfirmation: "Are you sure you want to cancel this upload?",
 
-                     dictRemoveFile: "Remove file",
 
-                     dictRemoveFileConfirmation: null,
 
-                     dictMaxFilesExceeded: "You can not upload any more files.",
 
-                     accept: function(file, done) {
 
-                         return done();
 
-                     },
 
-                     init: function() {
 
-                         return noop;
 
-                     },
 
-                     forceFallback: false,
 
-                     fallback: function() {
 
-                         var child, messageElement, span, _i, _len, _ref;
 
-                         this.element.className = "" + this.element.className + " dz-browser-not-supported";
 
-                         _ref = this.element.getElementsByTagName("div");
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             child = _ref[_i];
 
-                             if (/(^| )dz-message($| )/.test(child.className)) {
 
-                                 messageElement = child;
 
-                                 child.className = "dz-message";
 
-                                 continue;
 
-                             }
 
-                         }
 
-                         if (!messageElement) {
 
-                             messageElement = Dropzone.createElement("<div class=\"dz-message\"><span></span></div>");
 
-                             this.element.appendChild(messageElement);
 
-                         }
 
-                         span = messageElement.getElementsByTagName("span")[0];
 
-                         if (span) {
 
-                             span.textContent = this.options.dictFallbackMessage;
 
-                         }
 
-                         return this.element.appendChild(this.getFallbackForm());
 
-                     },
 
-                     resize: function(file) {
 
-                         var info, srcRatio, trgRatio;
 
-                         info = {
 
-                             srcX: 0,
 
-                             srcY: 0,
 
-                             srcWidth: file.width,
 
-                             srcHeight: file.height
 
-                         };
 
-                         srcRatio = file.width / file.height;
 
-                         trgRatio = this.options.thumbnailWidth / this.options.thumbnailHeight;
 
-                         if (file.height < this.options.thumbnailHeight || file.width < this.options.thumbnailWidth) {
 
-                             info.trgHeight = info.srcHeight;
 
-                             info.trgWidth = info.srcWidth;
 
-                         } else {
 
-                             if (srcRatio > trgRatio) {
 
-                                 info.srcHeight = file.height;
 
-                                 info.srcWidth = info.srcHeight * trgRatio;
 
-                             } else {
 
-                                 info.srcWidth = file.width;
 
-                                 info.srcHeight = info.srcWidth / trgRatio;
 
-                             }
 
-                         }
 
-                         info.srcX = (file.width - info.srcWidth) / 2;
 
-                         info.srcY = (file.height - info.srcHeight) / 2;
 
-                         return info;
 
-                     },
 
-                     /*
 
-                      Those functions register themselves to the events on init and handle all
 
-                      the user interface specific stuff. Overwriting them won't break the upload
 
-                      but can break the way it's displayed.
 
-                      You can overwrite them if you don't like the default behavior. If you just
 
-                      want to add an additional event handler, register it on the dropzone object
 
-                      and don't overwrite those options.
 
-                      */
 
-                     drop: function(e) {
 
-                         return this.element.classList.remove("dz-drag-hover");
 
-                     },
 
-                     dragstart: noop,
 
-                     dragend: function(e) {
 
-                         return this.element.classList.remove("dz-drag-hover");
 
-                     },
 
-                     dragenter: function(e) {
 
-                         return this.element.classList.add("dz-drag-hover");
 
-                     },
 
-                     dragover: function(e) {
 
-                         return this.element.classList.add("dz-drag-hover");
 
-                     },
 
-                     dragleave: function(e) {
 
-                         return this.element.classList.remove("dz-drag-hover");
 
-                     },
 
-                     paste: noop,
 
-                     reset: function() {
 
-                         return this.element.classList.remove("dz-started");
 
-                     },
 
-                     addedfile: function(file) {
 
-                         var node, removeFileEvent, removeLink, _i, _j, _k, _len, _len1, _len2, _ref, _ref1, _ref2, _results;
 
-                         if (this.element === this.previewsContainer) {
 
-                             this.element.classList.add("dz-started");
 
-                         }
 
-                         file.previewElement = Dropzone.createElement(this.options.previewTemplate.trim());
 
-                         file.previewTemplate = file.previewElement;
 
-                         this.previewsContainer.appendChild(file.previewElement);
 
-                         _ref = file.previewElement.querySelectorAll("[data-dz-name]");
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             node = _ref[_i];
 
-                             node.textContent = file.name;
 
-                         }
 
-                         _ref1 = file.previewElement.querySelectorAll("[data-dz-size]");
 
-                         for (_j = 0, _len1 = _ref1.length; _j < _len1; _j++) {
 
-                             node = _ref1[_j];
 
-                             node.innerHTML = this.filesize(file.size);
 
-                         }
 
-                         if (this.options.addRemoveLinks) {
 
-                             file._removeLink = Dropzone.createElement("<a class=\"dz-remove\" href=\"javascript:undefined;\" data-dz-remove>" + this.options.dictRemoveFile + "</a>");
 
-                             file.previewElement.appendChild(file._removeLink);
 
-                         }
 
-                         removeFileEvent = (function(_this) {
 
-                             return function(e) {
 
-                                 e.preventDefault();
 
-                                 e.stopPropagation();
 
-                                 if (file.status === Dropzone.UPLOADING) {
 
-                                     return Dropzone.confirm(_this.options.dictCancelUploadConfirmation, function() {
 
-                                         return _this.removeFile(file);
 
-                                     });
 
-                                 } else {
 
-                                     if (_this.options.dictRemoveFileConfirmation) {
 
-                                         return Dropzone.confirm(_this.options.dictRemoveFileConfirmation, function() {
 
-                                             return _this.removeFile(file);
 
-                                         });
 
-                                     } else {
 
-                                         return _this.removeFile(file);
 
-                                     }
 
-                                 }
 
-                             };
 
-                         })(this);
 
-                         _ref2 = file.previewElement.querySelectorAll("[data-dz-remove]");
 
-                         _results = [];
 
-                         for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
 
-                             removeLink = _ref2[_k];
 
-                             _results.push(removeLink.addEventListener("click", removeFileEvent));
 
-                         }
 
-                         return _results;
 
-                     },
 
-                     removedfile: function(file) {
 
-                         var _ref;
 
-                         if ((_ref = file.previewElement) != null) {
 
-                             _ref.parentNode.removeChild(file.previewElement);
 
-                         }
 
-                         return this._updateMaxFilesReachedClass();
 
-                     },
 
-                     thumbnail: function(file, dataUrl) {
 
-                         var thumbnailElement, _i, _len, _ref, _results;
 
-                         file.previewElement.classList.remove("dz-file-preview");
 
-                         file.previewElement.classList.add("dz-image-preview");
 
-                         _ref = file.previewElement.querySelectorAll("[data-dz-thumbnail]");
 
-                         _results = [];
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             thumbnailElement = _ref[_i];
 
-                             thumbnailElement.alt = file.name;
 
-                             _results.push(thumbnailElement.src = dataUrl);
 
-                         }
 
-                         return _results;
 
-                     },
 
-                     error: function(file, message) {
 
-                         var node, _i, _len, _ref, _results;
 
-                         file.previewElement.classList.add("dz-error");
 
-                         if (typeof message !== "String" && message.error) {
 
-                             message = message.error;
 
-                         }
 
-                         _ref = file.previewElement.querySelectorAll("[data-dz-errormessage]");
 
-                         _results = [];
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             node = _ref[_i];
 
-                             _results.push(node.textContent = message);
 
-                         }
 
-                         return _results;
 
-                     },
 
-                     errormultiple: noop,
 
-                     processing: function(file) {
 
-                         file.previewElement.classList.add("dz-processing");
 
-                         if (file._removeLink) {
 
-                             return file._removeLink.textContent = this.options.dictCancelUpload;
 
-                         }
 
-                     },
 
-                     processingmultiple: noop,
 
-                     uploadprogress: function(file, progress, bytesSent) {
 
-                         var node, _i, _len, _ref, _results;
 
-                         _ref = file.previewElement.querySelectorAll("[data-dz-uploadprogress]");
 
-                         _results = [];
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             node = _ref[_i];
 
-                             _results.push(node.style.width = "" + progress + "%");
 
-                         }
 
-                         return _results;
 
-                     },
 
-                     totaluploadprogress: noop,
 
-                     sending: noop,
 
-                     sendingmultiple: noop,
 
-                     success: function(file) {
 
-                         return file.previewElement.classList.add("dz-success");
 
-                     },
 
-                     successmultiple: noop,
 
-                     canceled: function(file) {
 
-                         return this.emit("error", file, "Upload canceled.");
 
-                     },
 
-                     canceledmultiple: noop,
 
-                     complete: function(file) {
 
-                         if (file._removeLink) {
 
-                             return file._removeLink.textContent = this.options.dictRemoveFile;
 
-                         }
 
-                     },
 
-                     completemultiple: noop,
 
-                     maxfilesexceeded: noop,
 
-                     maxfilesreached: noop,
 
-                     previewTemplate: "<div class=\"dz-preview dz-file-preview\">\n  <div class=\"dz-details\">\n    <div class=\"dz-filename\"><span data-dz-name></span></div>\n    <div class=\"dz-size\" data-dz-size></div>\n    <img data-dz-thumbnail />\n  </div>\n  <div class=\"dz-progress\"><span class=\"dz-upload\" data-dz-uploadprogress></span></div>\n  <div class=\"dz-success-mark\"><span>✔</span></div>\n  <div class=\"dz-error-mark\"><span>✘</span></div>\n  <div class=\"dz-error-message\"><span data-dz-errormessage></span></div>\n</div>"
 
-                 };
 
-                 extend = function() {
 
-                     var key, object, objects, target, val, _i, _len;
 
-                     target = arguments[0], objects = 2 <= arguments.length ? __slice.call(arguments, 1) : [];
 
-                     for (_i = 0, _len = objects.length; _i < _len; _i++) {
 
-                         object = objects[_i];
 
-                         for (key in object) {
 
-                             val = object[key];
 
-                             target[key] = val;
 
-                         }
 
-                     }
 
-                     return target;
 
-                 };
 
-                 function Dropzone(element, options) {
 
-                     var elementOptions, fallback, _ref;
 
-                     this.element = element;
 
-                     this.version = Dropzone.version;
 
-                     this.defaultOptions.previewTemplate = this.defaultOptions.previewTemplate.replace(/\n*/g, "");
 
-                     this.clickableElements = [];
 
-                     this.listeners = [];
 
-                     this.files = [];
 
-                     if (typeof this.element === "string") {
 
-                         this.element = document.querySelector(this.element);
 
-                     }
 
-                     if (!(this.element && (this.element.nodeType != null))) {
 
-                         throw new Error("Invalid dropzone element.");
 
-                     }
 
-                     if (this.element.dropzone) {
 
-                         throw new Error("Dropzone already attached.");
 
-                     }
 
-                     Dropzone.instances.push(this);
 
-                     this.element.dropzone = this;
 
-                     elementOptions = (_ref = Dropzone.optionsForElement(this.element)) != null ? _ref : {};
 
-                     this.options = extend({}, this.defaultOptions, elementOptions, options != null ? options : {});
 
-                     if (this.options.forceFallback || !Dropzone.isBrowserSupported()) {
 
-                         return this.options.fallback.call(this);
 
-                     }
 
-                     if (this.options.url == null) {
 
-                         this.options.url = this.element.getAttribute("action");
 
-                     }
 
-                     if (!this.options.url) {
 
-                         throw new Error("No URL provided.");
 
-                     }
 
-                     if (this.options.acceptedFiles && this.options.acceptedMimeTypes) {
 
-                         throw new Error("You can't provide both 'acceptedFiles' and 'acceptedMimeTypes'. 'acceptedMimeTypes' is deprecated.");
 
-                     }
 
-                     if (this.options.acceptedMimeTypes) {
 
-                         this.options.acceptedFiles = this.options.acceptedMimeTypes;
 
-                         delete this.options.acceptedMimeTypes;
 
-                     }
 
-                     this.options.method = this.options.method.toUpperCase();
 
-                     if ((fallback = this.getExistingFallback()) && fallback.parentNode) {
 
-                         fallback.parentNode.removeChild(fallback);
 
-                     }
 
-                     if (this.options.previewsContainer) {
 
-                         this.previewsContainer = Dropzone.getElement(this.options.previewsContainer, "previewsContainer");
 
-                     } else {
 
-                         this.previewsContainer = this.element;
 
-                     }
 
-                     if (this.options.clickable) {
 
-                         if (this.options.clickable === true) {
 
-                             this.clickableElements = [this.element];
 
-                         } else {
 
-                             this.clickableElements = Dropzone.getElements(this.options.clickable, "clickable");
 
-                         }
 
-                     }
 
-                     this.init();
 
-                 }
 
-                 Dropzone.prototype.getAcceptedFiles = function() {
 
-                     var file, _i, _len, _ref, _results;
 
-                     _ref = this.files;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         if (file.accepted) {
 
-                             _results.push(file);
 
-                         }
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.getRejectedFiles = function() {
 
-                     var file, _i, _len, _ref, _results;
 
-                     _ref = this.files;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         if (!file.accepted) {
 
-                             _results.push(file);
 
-                         }
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.getFilesWithStatus = function(status) {
 
-                     var file, _i, _len, _ref, _results;
 
-                     _ref = this.files;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         if (file.status === status) {
 
-                             _results.push(file);
 
-                         }
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.getQueuedFiles = function() {
 
-                     return this.getFilesWithStatus(Dropzone.QUEUED);
 
-                 };
 
-                 Dropzone.prototype.getUploadingFiles = function() {
 
-                     return this.getFilesWithStatus(Dropzone.UPLOADING);
 
-                 };
 
-                 Dropzone.prototype.getActiveFiles = function() {
 
-                     var file, _i, _len, _ref, _results;
 
-                     _ref = this.files;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         if (file.status === Dropzone.UPLOADING || file.status === Dropzone.QUEUED) {
 
-                             _results.push(file);
 
-                         }
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.init = function() {
 
-                     var eventName, noPropagation, setupHiddenFileInput, _i, _len, _ref, _ref1;
 
-                     if (this.element.tagName === "form") {
 
-                         this.element.setAttribute("enctype", "multipart/form-data");
 
-                     }
 
-                     if (this.element.classList.contains("dropzone") && !this.element.querySelector(".dz-message")) {
 
-                         this.element.appendChild(Dropzone.createElement("<div class=\"dz-default dz-message\"><span>" + this.options.dictDefaultMessage + "</span></div>"));
 
-                     }
 
-                     if (this.clickableElements.length) {
 
-                         setupHiddenFileInput = (function(_this) {
 
-                             return function() {
 
-                                 if (_this.hiddenFileInput) {
 
-                                     document.body.removeChild(_this.hiddenFileInput);
 
-                                 }
 
-                                 _this.hiddenFileInput = document.createElement("input");
 
-                                 _this.hiddenFileInput.setAttribute("type", "file");
 
-                                 if ((_this.options.maxFiles == null) || _this.options.maxFiles > 1) {
 
-                                     _this.hiddenFileInput.setAttribute("multiple", "multiple");
 
-                                 }
 
-                                 _this.hiddenFileInput.className = "dz-hidden-input";
 
-                                 if (_this.options.acceptedFiles != null) {
 
-                                     _this.hiddenFileInput.setAttribute("accept", _this.options.acceptedFiles);
 
-                                 }
 
-                                 _this.hiddenFileInput.style.visibility = "hidden";
 
-                                 _this.hiddenFileInput.style.position = "absolute";
 
-                                 _this.hiddenFileInput.style.top = "0";
 
-                                 _this.hiddenFileInput.style.left = "0";
 
-                                 _this.hiddenFileInput.style.height = "0";
 
-                                 _this.hiddenFileInput.style.width = "0";
 
-                                 document.body.appendChild(_this.hiddenFileInput);
 
-                                 return _this.hiddenFileInput.addEventListener("change", function() {
 
-                                     var file, files, _i, _len;
 
-                                     files = _this.hiddenFileInput.files;
 
-                                     if (files.length) {
 
-                                         for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                                             file = files[_i];
 
-                                             _this.addFile(file);
 
-                                         }
 
-                                     }
 
-                                     return setupHiddenFileInput();
 
-                                 });
 
-                             };
 
-                         })(this);
 
-                         setupHiddenFileInput();
 
-                     }
 
-                     this.URL = (_ref = window.URL) != null ? _ref : window.webkitURL;
 
-                     _ref1 = this.events;
 
-                     for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
 
-                         eventName = _ref1[_i];
 
-                         this.on(eventName, this.options[eventName]);
 
-                     }
 
-                     this.on("uploadprogress", (function(_this) {
 
-                         return function() {
 
-                             return _this.updateTotalUploadProgress();
 
-                         };
 
-                     })(this));
 
-                     this.on("removedfile", (function(_this) {
 
-                         return function() {
 
-                             return _this.updateTotalUploadProgress();
 
-                         };
 
-                     })(this));
 
-                     this.on("canceled", (function(_this) {
 
-                         return function(file) {
 
-                             return _this.emit("complete", file);
 
-                         };
 
-                     })(this));
 
-                     this.on("complete", (function(_this) {
 
-                         return function(file) {
 
-                             if (_this.getUploadingFiles().length === 0 && _this.getQueuedFiles().length === 0) {
 
-                                 return setTimeout((function() {
 
-                                     return _this.emit("queuecomplete");
 
-                                 }), 0);
 
-                             }
 
-                         };
 
-                     })(this));
 
-                     noPropagation = function(e) {
 
-                         e.stopPropagation();
 
-                         if (e.preventDefault) {
 
-                             return e.preventDefault();
 
-                         } else {
 
-                             return e.returnValue = false;
 
-                         }
 
-                     };
 
-                     this.listeners = [
 
-                         {
 
-                             element: this.element,
 
-                             events: {
 
-                                 "dragstart": (function(_this) {
 
-                                     return function(e) {
 
-                                         return _this.emit("dragstart", e);
 
-                                     };
 
-                                 })(this),
 
-                                 "dragenter": (function(_this) {
 
-                                     return function(e) {
 
-                                         noPropagation(e);
 
-                                         return _this.emit("dragenter", e);
 
-                                     };
 
-                                 })(this),
 
-                                 "dragover": (function(_this) {
 
-                                     return function(e) {
 
-                                         var efct;
 
-                                         try {
 
-                                             efct = e.dataTransfer.effectAllowed;
 
-                                         } catch (_error) {}
 
-                                         e.dataTransfer.dropEffect = 'move' === efct || 'linkMove' === efct ? 'move' : 'copy';
 
-                                         noPropagation(e);
 
-                                         return _this.emit("dragover", e);
 
-                                     };
 
-                                 })(this),
 
-                                 "dragleave": (function(_this) {
 
-                                     return function(e) {
 
-                                         return _this.emit("dragleave", e);
 
-                                     };
 
-                                 })(this),
 
-                                 "drop": (function(_this) {
 
-                                     return function(e) {
 
-                                         noPropagation(e);
 
-                                         return _this.drop(e);
 
-                                     };
 
-                                 })(this),
 
-                                 "dragend": (function(_this) {
 
-                                     return function(e) {
 
-                                         return _this.emit("dragend", e);
 
-                                     };
 
-                                 })(this)
 
-                             }
 
-                         }
 
-                     ];
 
-                     this.clickableElements.forEach((function(_this) {
 
-                         return function(clickableElement) {
 
-                             return _this.listeners.push({
 
-                                 element: clickableElement,
 
-                                 events: {
 
-                                     "click": function(evt) {
 
-                                         if ((clickableElement !== _this.element) || (evt.target === _this.element || Dropzone.elementInside(evt.target, _this.element.querySelector(".dz-message")))) {
 
-                                             return _this.hiddenFileInput.click();
 
-                                         }
 
-                                     }
 
-                                 }
 
-                             });
 
-                         };
 
-                     })(this));
 
-                     this.enable();
 
-                     return this.options.init.call(this);
 
-                 };
 
-                 Dropzone.prototype.destroy = function() {
 
-                     var _ref;
 
-                     this.disable();
 
-                     this.removeAllFiles(true);
 
-                     if ((_ref = this.hiddenFileInput) != null ? _ref.parentNode : void 0) {
 
-                         this.hiddenFileInput.parentNode.removeChild(this.hiddenFileInput);
 
-                         this.hiddenFileInput = null;
 
-                     }
 
-                     delete this.element.dropzone;
 
-                     return Dropzone.instances.splice(Dropzone.instances.indexOf(this), 1);
 
-                 };
 
-                 Dropzone.prototype.updateTotalUploadProgress = function() {
 
-                     var activeFiles, file, totalBytes, totalBytesSent, totalUploadProgress, _i, _len, _ref;
 
-                     totalBytesSent = 0;
 
-                     totalBytes = 0;
 
-                     activeFiles = this.getActiveFiles();
 
-                     if (activeFiles.length) {
 
-                         _ref = this.getActiveFiles();
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             file = _ref[_i];
 
-                             totalBytesSent += file.upload.bytesSent;
 
-                             totalBytes += file.upload.total;
 
-                         }
 
-                         totalUploadProgress = 100 * totalBytesSent / totalBytes;
 
-                     } else {
 
-                         totalUploadProgress = 100;
 
-                     }
 
-                     return this.emit("totaluploadprogress", totalUploadProgress, totalBytes, totalBytesSent);
 
-                 };
 
-                 Dropzone.prototype.getFallbackForm = function() {
 
-                     var existingFallback, fields, fieldsString, form;
 
-                     if (existingFallback = this.getExistingFallback()) {
 
-                         return existingFallback;
 
-                     }
 
-                     fieldsString = "<div class=\"dz-fallback\">";
 
-                     if (this.options.dictFallbackText) {
 
-                         fieldsString += "<p>" + this.options.dictFallbackText + "</p>";
 
-                     }
 
-                     fieldsString += "<input type=\"file\" name=\"" + this.options.paramName + (this.options.uploadMultiple ? "[]" : "") + "\" " + (this.options.uploadMultiple ? 'multiple="multiple"' : void 0) + " /><input type=\"submit\" value=\"Upload!\"></div>";
 
-                     fields = Dropzone.createElement(fieldsString);
 
-                     if (this.element.tagName !== "FORM") {
 
-                         form = Dropzone.createElement("<form action=\"" + this.options.url + "\" enctype=\"multipart/form-data\" method=\"" + this.options.method + "\"></form>");
 
-                         form.appendChild(fields);
 
-                     } else {
 
-                         this.element.setAttribute("enctype", "multipart/form-data");
 
-                         this.element.setAttribute("method", this.options.method);
 
-                     }
 
-                     return form != null ? form : fields;
 
-                 };
 
-                 Dropzone.prototype.getExistingFallback = function() {
 
-                     var fallback, getFallback, tagName, _i, _len, _ref;
 
-                     getFallback = function(elements) {
 
-                         var el, _i, _len;
 
-                         for (_i = 0, _len = elements.length; _i < _len; _i++) {
 
-                             el = elements[_i];
 
-                             if (/(^| )fallback($| )/.test(el.className)) {
 
-                                 return el;
 
-                             }
 
-                         }
 
-                     };
 
-                     _ref = ["div", "form"];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         tagName = _ref[_i];
 
-                         if (fallback = getFallback(this.element.getElementsByTagName(tagName))) {
 
-                             return fallback;
 
-                         }
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.setupEventListeners = function() {
 
-                     var elementListeners, event, listener, _i, _len, _ref, _results;
 
-                     _ref = this.listeners;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         elementListeners = _ref[_i];
 
-                         _results.push((function() {
 
-                             var _ref1, _results1;
 
-                             _ref1 = elementListeners.events;
 
-                             _results1 = [];
 
-                             for (event in _ref1) {
 
-                                 listener = _ref1[event];
 
-                                 _results1.push(elementListeners.element.addEventListener(event, listener, false));
 
-                             }
 
-                             return _results1;
 
-                         })());
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.removeEventListeners = function() {
 
-                     var elementListeners, event, listener, _i, _len, _ref, _results;
 
-                     _ref = this.listeners;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         elementListeners = _ref[_i];
 
-                         _results.push((function() {
 
-                             var _ref1, _results1;
 
-                             _ref1 = elementListeners.events;
 
-                             _results1 = [];
 
-                             for (event in _ref1) {
 
-                                 listener = _ref1[event];
 
-                                 _results1.push(elementListeners.element.removeEventListener(event, listener, false));
 
-                             }
 
-                             return _results1;
 
-                         })());
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.disable = function() {
 
-                     var file, _i, _len, _ref, _results;
 
-                     this.clickableElements.forEach(function(element) {
 
-                         return element.classList.remove("dz-clickable");
 
-                     });
 
-                     this.removeEventListeners();
 
-                     _ref = this.files;
 
-                     _results = [];
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         _results.push(this.cancelUpload(file));
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype.enable = function() {
 
-                     this.clickableElements.forEach(function(element) {
 
-                         return element.classList.add("dz-clickable");
 
-                     });
 
-                     return this.setupEventListeners();
 
-                 };
 
-                 Dropzone.prototype.filesize = function(size) {
 
-                     var string;
 
-                     if (size >= 1024 * 1024 * 1024 * 1024 / 10) {
 
-                         size = size / (1024 * 1024 * 1024 * 1024 / 10);
 
-                         string = "TiB";
 
-                     } else if (size >= 1024 * 1024 * 1024 / 10) {
 
-                         size = size / (1024 * 1024 * 1024 / 10);
 
-                         string = "GiB";
 
-                     } else if (size >= 1024 * 1024 / 10) {
 
-                         size = size / (1024 * 1024 / 10);
 
-                         string = "MiB";
 
-                     } else if (size >= 1024 / 10) {
 
-                         size = size / (1024 / 10);
 
-                         string = "KiB";
 
-                     } else {
 
-                         size = size * 10;
 
-                         string = "b";
 
-                     }
 
-                     return "<strong>" + (Math.round(size) / 10) + "</strong> " + string;
 
-                 };
 
-                 Dropzone.prototype._updateMaxFilesReachedClass = function() {
 
-                     if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
 
-                         if (this.getAcceptedFiles().length === this.options.maxFiles) {
 
-                             this.emit('maxfilesreached', this.files);
 
-                         }
 
-                         return this.element.classList.add("dz-max-files-reached");
 
-                     } else {
 
-                         return this.element.classList.remove("dz-max-files-reached");
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.drop = function(e) {
 
-                     var files, items;
 
-                     if (!e.dataTransfer) {
 
-                         return;
 
-                     }
 
-                     this.emit("drop", e);
 
-                     files = e.dataTransfer.files;
 
-                     if (files.length) {
 
-                         items = e.dataTransfer.items;
 
-                         if (items && items.length && (items[0].webkitGetAsEntry != null)) {
 
-                             this._addFilesFromItems(items);
 
-                         } else {
 
-                             this.handleFiles(files);
 
-                         }
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.paste = function(e) {
 
-                     var items, _ref;
 
-                     if ((e != null ? (_ref = e.clipboardData) != null ? _ref.items : void 0 : void 0) == null) {
 
-                         return;
 
-                     }
 
-                     this.emit("paste", e);
 
-                     items = e.clipboardData.items;
 
-                     if (items.length) {
 
-                         return this._addFilesFromItems(items);
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.handleFiles = function(files) {
 
-                     var file, _i, _len, _results;
 
-                     _results = [];
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         _results.push(this.addFile(file));
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype._addFilesFromItems = function(items) {
 
-                     var entry, item, _i, _len, _results;
 
-                     _results = [];
 
-                     for (_i = 0, _len = items.length; _i < _len; _i++) {
 
-                         item = items[_i];
 
-                         if ((item.webkitGetAsEntry != null) && (entry = item.webkitGetAsEntry())) {
 
-                             if (entry.isFile) {
 
-                                 _results.push(this.addFile(item.getAsFile()));
 
-                             } else if (entry.isDirectory) {
 
-                                 _results.push(this._addFilesFromDirectory(entry, entry.name));
 
-                             } else {
 
-                                 _results.push(void 0);
 
-                             }
 
-                         } else if (item.getAsFile != null) {
 
-                             if ((item.kind == null) || item.kind === "file") {
 
-                                 _results.push(this.addFile(item.getAsFile()));
 
-                             } else {
 
-                                 _results.push(void 0);
 
-                             }
 
-                         } else {
 
-                             _results.push(void 0);
 
-                         }
 
-                     }
 
-                     return _results;
 
-                 };
 
-                 Dropzone.prototype._addFilesFromDirectory = function(directory, path) {
 
-                     var dirReader, entriesReader;
 
-                     dirReader = directory.createReader();
 
-                     entriesReader = (function(_this) {
 
-                         return function(entries) {
 
-                             var entry, _i, _len;
 
-                             for (_i = 0, _len = entries.length; _i < _len; _i++) {
 
-                                 entry = entries[_i];
 
-                                 if (entry.isFile) {
 
-                                     entry.file(function(file) {
 
-                                         if (_this.options.ignoreHiddenFiles && file.name.substring(0, 1) === '.') {
 
-                                             return;
 
-                                         }
 
-                                         file.fullPath = "" + path + "/" + file.name;
 
-                                         return _this.addFile(file);
 
-                                     });
 
-                                 } else if (entry.isDirectory) {
 
-                                     _this._addFilesFromDirectory(entry, "" + path + "/" + entry.name);
 
-                                 }
 
-                             }
 
-                         };
 
-                     })(this);
 
-                     return dirReader.readEntries(entriesReader, function(error) {
 
-                         return typeof console !== "undefined" && console !== null ? typeof console.log === "function" ? console.log(error) : void 0 : void 0;
 
-                     });
 
-                 };
 
-                 Dropzone.prototype.accept = function(file, done) {
 
-                     if (file.size > this.options.maxFilesize * 1024 * 1024) {
 
-                         return done(this.options.dictFileTooBig.replace("{{filesize}}", Math.round(file.size / 1024 / 10.24) / 100).replace("{{maxFilesize}}", this.options.maxFilesize));
 
-                     } else if (!Dropzone.isValidFile(file, this.options.acceptedFiles)) {
 
-                         return done(this.options.dictInvalidFileType);
 
-                     } else if ((this.options.maxFiles != null) && this.getAcceptedFiles().length >= this.options.maxFiles) {
 
-                         done(this.options.dictMaxFilesExceeded.replace("{{maxFiles}}", this.options.maxFiles));
 
-                         return this.emit("maxfilesexceeded", file);
 
-                     } else {
 
-                         return this.options.accept.call(this, file, done);
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.addFile = function(file) {
 
-                     file.upload = {
 
-                         progress: 0,
 
-                         total: file.size,
 
-                         bytesSent: 0
 
-                     };
 
-                     this.files.push(file);
 
-                     file.status = Dropzone.ADDED;
 
-                     this.emit("addedfile", file);
 
-                     this._enqueueThumbnail(file);
 
-                     return this.accept(file, (function(_this) {
 
-                         return function(error) {
 
-                             if (error) {
 
-                                 file.accepted = false;
 
-                                 _this._errorProcessing([file], error);
 
-                             } else {
 
-                                 file.accepted = true;
 
-                                 if (_this.options.autoQueue) {
 
-                                     _this.enqueueFile(file);
 
-                                 }
 
-                             }
 
-                             return _this._updateMaxFilesReachedClass();
 
-                         };
 
-                     })(this));
 
-                 };
 
-                 Dropzone.prototype.enqueueFiles = function(files) {
 
-                     var file, _i, _len;
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         this.enqueueFile(file);
 
-                     }
 
-                     return null;
 
-                 };
 
-                 Dropzone.prototype.enqueueFile = function(file) {
 
-                     if (file.status === Dropzone.ADDED && file.accepted === true) {
 
-                         file.status = Dropzone.QUEUED;
 
-                         if (this.options.autoProcessQueue) {
 
-                             return setTimeout(((function(_this) {
 
-                                 return function() {
 
-                                     return _this.processQueue();
 
-                                 };
 
-                             })(this)), 0);
 
-                         }
 
-                     } else {
 
-                         throw new Error("This file can't be queued because it has already been processed or was rejected.");
 
-                     }
 
-                 };
 
-                 Dropzone.prototype._thumbnailQueue = [];
 
-                 Dropzone.prototype._processingThumbnail = false;
 
-                 Dropzone.prototype._enqueueThumbnail = function(file) {
 
-                     if (this.options.createImageThumbnails && file.type.match(/image.*/) && file.size <= this.options.maxThumbnailFilesize * 1024 * 1024) {
 
-                         this._thumbnailQueue.push(file);
 
-                         return setTimeout(((function(_this) {
 
-                             return function() {
 
-                                 return _this._processThumbnailQueue();
 
-                             };
 
-                         })(this)), 0);
 
-                     }
 
-                 };
 
-                 Dropzone.prototype._processThumbnailQueue = function() {
 
-                     if (this._processingThumbnail || this._thumbnailQueue.length === 0) {
 
-                         return;
 
-                     }
 
-                     this._processingThumbnail = true;
 
-                     return this.createThumbnail(this._thumbnailQueue.shift(), (function(_this) {
 
-                         return function() {
 
-                             _this._processingThumbnail = false;
 
-                             return _this._processThumbnailQueue();
 
-                         };
 
-                     })(this));
 
-                 };
 
-                 Dropzone.prototype.removeFile = function(file) {
 
-                     if (file.status === Dropzone.UPLOADING) {
 
-                         this.cancelUpload(file);
 
-                     }
 
-                     this.files = without(this.files, file);
 
-                     this.emit("removedfile", file);
 
-                     if (this.files.length === 0) {
 
-                         return this.emit("reset");
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.removeAllFiles = function(cancelIfNecessary) {
 
-                     var file, _i, _len, _ref;
 
-                     if (cancelIfNecessary == null) {
 
-                         cancelIfNecessary = false;
 
-                     }
 
-                     _ref = this.files.slice();
 
-                     for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                         file = _ref[_i];
 
-                         if (file.status !== Dropzone.UPLOADING || cancelIfNecessary) {
 
-                             this.removeFile(file);
 
-                         }
 
-                     }
 
-                     return null;
 
-                 };
 
-                 Dropzone.prototype.createThumbnail = function(file, callback) {
 
-                     var fileReader;
 
-                     fileReader = new FileReader;
 
-                     fileReader.onload = (function(_this) {
 
-                         return function() {
 
-                             var img;
 
-                             img = document.createElement("img");
 
-                             img.onload = function() {
 
-                                 var canvas, ctx, resizeInfo, thumbnail, _ref, _ref1, _ref2, _ref3;
 
-                                 file.width = img.width;
 
-                                 file.height = img.height;
 
-                                 resizeInfo = _this.options.resize.call(_this, file);
 
-                                 if (resizeInfo.trgWidth == null) {
 
-                                     resizeInfo.trgWidth = _this.options.thumbnailWidth;
 
-                                 }
 
-                                 if (resizeInfo.trgHeight == null) {
 
-                                     resizeInfo.trgHeight = _this.options.thumbnailHeight;
 
-                                 }
 
-                                 canvas = document.createElement("canvas");
 
-                                 ctx = canvas.getContext("2d");
 
-                                 canvas.width = resizeInfo.trgWidth;
 
-                                 canvas.height = resizeInfo.trgHeight;
 
-                                 drawImageIOSFix(ctx, img, (_ref = resizeInfo.srcX) != null ? _ref : 0, (_ref1 = resizeInfo.srcY) != null ? _ref1 : 0, resizeInfo.srcWidth, resizeInfo.srcHeight, (_ref2 = resizeInfo.trgX) != null ? _ref2 : 0, (_ref3 = resizeInfo.trgY) != null ? _ref3 : 0, resizeInfo.trgWidth, resizeInfo.trgHeight);
 
-                                 thumbnail = canvas.toDataURL("image/png");
 
-                                 _this.emit("thumbnail", file, thumbnail);
 
-                                 if (callback != null) {
 
-                                     return callback();
 
-                                 }
 
-                             };
 
-                             return img.src = fileReader.result;
 
-                         };
 
-                     })(this);
 
-                     return fileReader.readAsDataURL(file);
 
-                 };
 
-                 Dropzone.prototype.processQueue = function() {
 
-                     var i, parallelUploads, processingLength, queuedFiles;
 
-                     parallelUploads = this.options.parallelUploads;
 
-                     processingLength = this.getUploadingFiles().length;
 
-                     i = processingLength;
 
-                     if (processingLength >= parallelUploads) {
 
-                         return;
 
-                     }
 
-                     queuedFiles = this.getQueuedFiles();
 
-                     if (!(queuedFiles.length > 0)) {
 
-                         return;
 
-                     }
 
-                     if (this.options.uploadMultiple) {
 
-                         return this.processFiles(queuedFiles.slice(0, parallelUploads - processingLength));
 
-                     } else {
 
-                         while (i < parallelUploads) {
 
-                             if (!queuedFiles.length) {
 
-                                 return;
 
-                             }
 
-                             this.processFile(queuedFiles.shift());
 
-                             i++;
 
-                         }
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.processFile = function(file) {
 
-                     return this.processFiles([file]);
 
-                 };
 
-                 Dropzone.prototype.processFiles = function(files) {
 
-                     var file, _i, _len;
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         file.processing = true;
 
-                         file.status = Dropzone.UPLOADING;
 
-                         this.emit("processing", file);
 
-                     }
 
-                     if (this.options.uploadMultiple) {
 
-                         this.emit("processingmultiple", files);
 
-                     }
 
-                     return this.uploadFiles(files);
 
-                 };
 
-                 Dropzone.prototype._getFilesWithXhr = function(xhr) {
 
-                     var file, files;
 
-                     return files = (function() {
 
-                         var _i, _len, _ref, _results;
 
-                         _ref = this.files;
 
-                         _results = [];
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             file = _ref[_i];
 
-                             if (file.xhr === xhr) {
 
-                                 _results.push(file);
 
-                             }
 
-                         }
 
-                         return _results;
 
-                     }).call(this);
 
-                 };
 
-                 Dropzone.prototype.cancelUpload = function(file) {
 
-                     var groupedFile, groupedFiles, _i, _j, _len, _len1, _ref;
 
-                     if (file.status === Dropzone.UPLOADING) {
 
-                         groupedFiles = this._getFilesWithXhr(file.xhr);
 
-                         for (_i = 0, _len = groupedFiles.length; _i < _len; _i++) {
 
-                             groupedFile = groupedFiles[_i];
 
-                             groupedFile.status = Dropzone.CANCELED;
 
-                         }
 
-                         file.xhr.abort();
 
-                         for (_j = 0, _len1 = groupedFiles.length; _j < _len1; _j++) {
 
-                             groupedFile = groupedFiles[_j];
 
-                             this.emit("canceled", groupedFile);
 
-                         }
 
-                         if (this.options.uploadMultiple) {
 
-                             this.emit("canceledmultiple", groupedFiles);
 
-                         }
 
-                     } else if ((_ref = file.status) === Dropzone.ADDED || _ref === Dropzone.QUEUED) {
 
-                         file.status = Dropzone.CANCELED;
 
-                         this.emit("canceled", file);
 
-                         if (this.options.uploadMultiple) {
 
-                             this.emit("canceledmultiple", [file]);
 
-                         }
 
-                     }
 
-                     if (this.options.autoProcessQueue) {
 
-                         return this.processQueue();
 
-                     }
 
-                 };
 
-                 Dropzone.prototype.uploadFile = function(file) {
 
-                     return this.uploadFiles([file]);
 
-                 };
 
-                 Dropzone.prototype.uploadFiles = function(files) {
 
-                     var file, formData, handleError, headerName, headerValue, headers, input, inputName, inputType, key, option, progressObj, response, updateProgress, value, xhr, _i, _j, _k, _l, _len, _len1, _len2, _len3, _len4, _m, _ref, _ref1, _ref2, _ref3, _ref4;
 
-                     xhr = new XMLHttpRequest();
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         file.xhr = xhr;
 
-                     }
 
-                     xhr.open(this.options.method, this.options.url, true);
 
-                     xhr.withCredentials = !!this.options.withCredentials;
 
-                     response = null;
 
-                     handleError = (function(_this) {
 
-                         return function() {
 
-                             var _j, _len1, _results;
 
-                             _results = [];
 
-                             for (_j = 0, _len1 = files.length; _j < _len1; _j++) {
 
-                                 file = files[_j];
 
-                                 _results.push(_this._errorProcessing(files, response || _this.options.dictResponseError.replace("{{statusCode}}", xhr.status), xhr));
 
-                             }
 
-                             return _results;
 
-                         };
 
-                     })(this);
 
-                     updateProgress = (function(_this) {
 
-                         return function(e) {
 
-                             var allFilesFinished, progress, _j, _k, _l, _len1, _len2, _len3, _results;
 
-                             if (e != null) {
 
-                                 progress = 100 * e.loaded / e.total;
 
-                                 for (_j = 0, _len1 = files.length; _j < _len1; _j++) {
 
-                                     file = files[_j];
 
-                                     file.upload = {
 
-                                         progress: progress,
 
-                                         total: e.total,
 
-                                         bytesSent: e.loaded
 
-                                     };
 
-                                 }
 
-                             } else {
 
-                                 allFilesFinished = true;
 
-                                 progress = 100;
 
-                                 for (_k = 0, _len2 = files.length; _k < _len2; _k++) {
 
-                                     file = files[_k];
 
-                                     if (!(file.upload.progress === 100 && file.upload.bytesSent === file.upload.total)) {
 
-                                         allFilesFinished = false;
 
-                                     }
 
-                                     file.upload.progress = progress;
 
-                                     file.upload.bytesSent = file.upload.total;
 
-                                 }
 
-                                 if (allFilesFinished) {
 
-                                     return;
 
-                                 }
 
-                             }
 
-                             _results = [];
 
-                             for (_l = 0, _len3 = files.length; _l < _len3; _l++) {
 
-                                 file = files[_l];
 
-                                 _results.push(_this.emit("uploadprogress", file, progress, file.upload.bytesSent));
 
-                             }
 
-                             return _results;
 
-                         };
 
-                     })(this);
 
-                     xhr.onload = (function(_this) {
 
-                         return function(e) {
 
-                             var _ref;
 
-                             if (files[0].status === Dropzone.CANCELED) {
 
-                                 return;
 
-                             }
 
-                             if (xhr.readyState !== 4) {
 
-                                 return;
 
-                             }
 
-                             response = xhr.responseText;
 
-                             if (xhr.getResponseHeader("content-type") && ~xhr.getResponseHeader("content-type").indexOf("application/json")) {
 
-                                 try {
 
-                                     response = JSON.parse(response);
 
-                                 } catch (_error) {
 
-                                     e = _error;
 
-                                     response = "Invalid JSON response from server.";
 
-                                 }
 
-                             }
 
-                             updateProgress();
 
-                             if (!((200 <= (_ref = xhr.status) && _ref < 300))) {
 
-                                 return handleError();
 
-                             } else {
 
-                                 return _this._finished(files, response, e);
 
-                             }
 
-                         };
 
-                     })(this);
 
-                     xhr.onerror = (function(_this) {
 
-                         return function() {
 
-                             if (files[0].status === Dropzone.CANCELED) {
 
-                                 return;
 
-                             }
 
-                             return handleError();
 
-                         };
 
-                     })(this);
 
-                     progressObj = (_ref = xhr.upload) != null ? _ref : xhr;
 
-                     progressObj.onprogress = updateProgress;
 
-                     headers = {
 
-                         "Accept": "application/json",
 
-                         "Cache-Control": "no-cache",
 
-                         "X-Requested-With": "XMLHttpRequest"
 
-                     };
 
-                     if (this.options.headers) {
 
-                         extend(headers, this.options.headers);
 
-                     }
 
-                     for (headerName in headers) {
 
-                         headerValue = headers[headerName];
 
-                         xhr.setRequestHeader(headerName, headerValue);
 
-                     }
 
-                     formData = new FormData();
 
-                     if (this.options.params) {
 
-                         _ref1 = this.options.params;
 
-                         for (key in _ref1) {
 
-                             value = _ref1[key];
 
-                             formData.append(key, value);
 
-                         }
 
-                     }
 
-                     for (_j = 0, _len1 = files.length; _j < _len1; _j++) {
 
-                         file = files[_j];
 
-                         this.emit("sending", file, xhr, formData);
 
-                     }
 
-                     if (this.options.uploadMultiple) {
 
-                         this.emit("sendingmultiple", files, xhr, formData);
 
-                     }
 
-                     if (this.element.tagName === "FORM") {
 
-                         _ref2 = this.element.querySelectorAll("input, textarea, select, button");
 
-                         for (_k = 0, _len2 = _ref2.length; _k < _len2; _k++) {
 
-                             input = _ref2[_k];
 
-                             inputName = input.getAttribute("name");
 
-                             inputType = input.getAttribute("type");
 
-                             if (input.tagName === "SELECT" && input.hasAttribute("multiple")) {
 
-                                 _ref3 = input.options;
 
-                                 for (_l = 0, _len3 = _ref3.length; _l < _len3; _l++) {
 
-                                     option = _ref3[_l];
 
-                                     if (option.selected) {
 
-                                         formData.append(inputName, option.value);
 
-                                     }
 
-                                 }
 
-                             } else if (!inputType || ((_ref4 = inputType.toLowerCase()) !== "checkbox" && _ref4 !== "radio") || input.checked) {
 
-                                 formData.append(inputName, input.value);
 
-                             }
 
-                         }
 
-                     }
 
-                     for (_m = 0, _len4 = files.length; _m < _len4; _m++) {
 
-                         file = files[_m];
 
-                         formData.append("" + this.options.paramName + (this.options.uploadMultiple ? "[]" : ""), file, file.name);
 
-                     }
 
-                     return xhr.send(formData);
 
-                 };
 
-                 Dropzone.prototype._finished = function(files, responseText, e) {
 
-                     var file, _i, _len;
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         file.status = Dropzone.SUCCESS;
 
-                         this.emit("success", file, responseText, e);
 
-                         this.emit("complete", file);
 
-                     }
 
-                     if (this.options.uploadMultiple) {
 
-                         this.emit("successmultiple", files, responseText, e);
 
-                         this.emit("completemultiple", files);
 
-                     }
 
-                     if (this.options.autoProcessQueue) {
 
-                         return this.processQueue();
 
-                     }
 
-                 };
 
-                 Dropzone.prototype._errorProcessing = function(files, message, xhr) {
 
-                     var file, _i, _len;
 
-                     for (_i = 0, _len = files.length; _i < _len; _i++) {
 
-                         file = files[_i];
 
-                         file.status = Dropzone.ERROR;
 
-                         this.emit("error", file, message, xhr);
 
-                         this.emit("complete", file);
 
-                     }
 
-                     if (this.options.uploadMultiple) {
 
-                         this.emit("errormultiple", files, message, xhr);
 
-                         this.emit("completemultiple", files);
 
-                     }
 
-                     if (this.options.autoProcessQueue) {
 
-                         return this.processQueue();
 
-                     }
 
-                 };
 
-                 return Dropzone;
 
-             })(Em);
 
-             Dropzone.version = "3.8.7";
 
-             Dropzone.options = {};
 
-             Dropzone.optionsForElement = function(element) {
 
-                 if (element.getAttribute("id")) {
 
-                     return Dropzone.options[camelize(element.getAttribute("id"))];
 
-                 } else {
 
-                     return void 0;
 
-                 }
 
-             };
 
-             Dropzone.instances = [];
 
-             Dropzone.forElement = function(element) {
 
-                 if (typeof element === "string") {
 
-                     element = document.querySelector(element);
 
-                 }
 
-                 if ((element != null ? element.dropzone : void 0) == null) {
 
-                     throw new Error("No Dropzone found for given element. This is probably because you're trying to access it before Dropzone had the time to initialize. Use the `init` option to setup any additional observers on your Dropzone.");
 
-                 }
 
-                 return element.dropzone;
 
-             };
 
-             Dropzone.autoDiscover = true;
 
-             Dropzone.discover = function() {
 
-                 var checkElements, dropzone, dropzones, _i, _len, _results;
 
-                 if (document.querySelectorAll) {
 
-                     dropzones = document.querySelectorAll(".dropzone");
 
-                 } else {
 
-                     dropzones = [];
 
-                     checkElements = function(elements) {
 
-                         var el, _i, _len, _results;
 
-                         _results = [];
 
-                         for (_i = 0, _len = elements.length; _i < _len; _i++) {
 
-                             el = elements[_i];
 
-                             if (/(^| )dropzone($| )/.test(el.className)) {
 
-                                 _results.push(dropzones.push(el));
 
-                             } else {
 
-                                 _results.push(void 0);
 
-                             }
 
-                         }
 
-                         return _results;
 
-                     };
 
-                     checkElements(document.getElementsByTagName("div"));
 
-                     checkElements(document.getElementsByTagName("form"));
 
-                 }
 
-                 _results = [];
 
-                 for (_i = 0, _len = dropzones.length; _i < _len; _i++) {
 
-                     dropzone = dropzones[_i];
 
-                     if (Dropzone.optionsForElement(dropzone) !== false) {
 
-                         _results.push(new Dropzone(dropzone));
 
-                     } else {
 
-                         _results.push(void 0);
 
-                     }
 
-                 }
 
-                 return _results;
 
-             };
 
-             Dropzone.blacklistedBrowsers = [/opera.*Macintosh.*version\/12/i];
 
-             Dropzone.isBrowserSupported = function() {
 
-                 var capableBrowser, regex, _i, _len, _ref;
 
-                 capableBrowser = true;
 
-                 if (window.File && window.FileReader && window.FileList && window.Blob && window.FormData && document.querySelector) {
 
-                     if (!("classList" in document.createElement("a"))) {
 
-                         capableBrowser = false;
 
-                     } else {
 
-                         _ref = Dropzone.blacklistedBrowsers;
 
-                         for (_i = 0, _len = _ref.length; _i < _len; _i++) {
 
-                             regex = _ref[_i];
 
-                             if (regex.test(navigator.userAgent)) {
 
-                                 capableBrowser = false;
 
-                                 continue;
 
-                             }
 
-                         }
 
-                     }
 
-                 } else {
 
-                     capableBrowser = false;
 
-                 }
 
-                 return capableBrowser;
 
-             };
 
-             without = function(list, rejectedItem) {
 
-                 var item, _i, _len, _results;
 
-                 _results = [];
 
-                 for (_i = 0, _len = list.length; _i < _len; _i++) {
 
-                     item = list[_i];
 
-                     if (item !== rejectedItem) {
 
-                         _results.push(item);
 
-                     }
 
-                 }
 
-                 return _results;
 
-             };
 
-             camelize = function(str) {
 
-                 return str.replace(/[\-_](\w)/g, function(match) {
 
-                     return match.charAt(1).toUpperCase();
 
-                 });
 
-             };
 
-             Dropzone.createElement = function(string) {
 
-                 var div;
 
-                 div = document.createElement("div");
 
-                 div.innerHTML = string;
 
-                 return div.childNodes[0];
 
-             };
 
-             Dropzone.elementInside = function(element, container) {
 
-                 if (element === container) {
 
-                     return true;
 
-                 }
 
-                 while (element = element.parentNode) {
 
-                     if (element === container) {
 
-                         return true;
 
-                     }
 
-                 }
 
-                 return false;
 
-             };
 
-             Dropzone.getElement = function(el, name) {
 
-                 var element;
 
-                 if (typeof el === "string") {
 
-                     element = document.querySelector(el);
 
-                 } else if (el.nodeType != null) {
 
-                     element = el;
 
-                 }
 
-                 if (element == null) {
 
-                     throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector or a plain HTML element.");
 
-                 }
 
-                 return element;
 
-             };
 
-             Dropzone.getElements = function(els, name) {
 
-                 var e, el, elements, _i, _j, _len, _len1, _ref;
 
-                 if (els instanceof Array) {
 
-                     elements = [];
 
-                     try {
 
-                         for (_i = 0, _len = els.length; _i < _len; _i++) {
 
-                             el = els[_i];
 
-                             elements.push(this.getElement(el, name));
 
-                         }
 
-                     } catch (_error) {
 
-                         e = _error;
 
-                         elements = null;
 
-                     }
 
-                 } else if (typeof els === "string") {
 
-                     elements = [];
 
-                     _ref = document.querySelectorAll(els);
 
-                     for (_j = 0, _len1 = _ref.length; _j < _len1; _j++) {
 
-                         el = _ref[_j];
 
-                         elements.push(el);
 
-                     }
 
-                 } else if (els.nodeType != null) {
 
-                     elements = [els];
 
-                 }
 
-                 if (!((elements != null) && elements.length)) {
 
-                     throw new Error("Invalid `" + name + "` option provided. Please provide a CSS selector, a plain HTML element or a list of those.");
 
-                 }
 
-                 return elements;
 
-             };
 
-             Dropzone.confirm = function(question, accepted, rejected) {
 
-                 if (window.confirm(question)) {
 
-                     return accepted();
 
-                 } else if (rejected != null) {
 
-                     return rejected();
 
-                 }
 
-             };
 
-             Dropzone.isValidFile = function(file, acceptedFiles) {
 
-                 var baseMimeType, mimeType, validType, _i, _len;
 
-                 if (!acceptedFiles) {
 
-                     return true;
 
-                 }
 
-                 acceptedFiles = acceptedFiles.split(",");
 
-                 mimeType = file.type;
 
-                 baseMimeType = mimeType.replace(/\/.*$/, "");
 
-                 for (_i = 0, _len = acceptedFiles.length; _i < _len; _i++) {
 
-                     validType = acceptedFiles[_i];
 
-                     validType = validType.trim();
 
-                     if (validType.charAt(0) === ".") {
 
-                         if (file.name.toLowerCase().indexOf(validType.toLowerCase(), file.name.length - validType.length) !== -1) {
 
-                             return true;
 
-                         }
 
-                     } else if (/\/\*$/.test(validType)) {
 
-                         if (baseMimeType === validType.replace(/\/.*$/, "")) {
 
-                             return true;
 
-                         }
 
-                     } else {
 
-                         if (mimeType === validType) {
 
-                             return true;
 
-                         }
 
-                     }
 
-                 }
 
-                 return false;
 
-             };
 
-             if (typeof jQuery !== "undefined" && jQuery !== null) {
 
-                 jQuery.fn.dropzone = function(options) {
 
-                     return this.each(function() {
 
-                         return new Dropzone(this, options);
 
-                     });
 
-                 };
 
-             }
 
-             if (typeof module !== "undefined" && module !== null) {
 
-                 module.exports = Dropzone;
 
-             } else {
 
-                 window.Dropzone = Dropzone;
 
-             }
 
-             Dropzone.ADDED = "added";
 
-             Dropzone.QUEUED = "queued";
 
-             Dropzone.ACCEPTED = Dropzone.QUEUED;
 
-             Dropzone.UPLOADING = "uploading";
 
-             Dropzone.PROCESSING = Dropzone.UPLOADING;
 
-             Dropzone.CANCELED = "canceled";
 
-             Dropzone.ERROR = "error";
 
-             Dropzone.SUCCESS = "success";
 
-             /*
 
-              Bugfix for iOS 6 and 7
 
-              Source: http://stackoverflow.com/questions/11929099/html5-canvas-drawimage-ratio-bug-ios
 
-              based on the work of https://github.com/stomita/ios-imagefile-megapixel
 
-              */
 
-             detectVerticalSquash = function(img) {
 
-                 var alpha, canvas, ctx, data, ey, ih, iw, py, ratio, sy;
 
-                 iw = img.naturalWidth;
 
-                 ih = img.naturalHeight;
 
-                 canvas = document.createElement("canvas");
 
-                 canvas.width = 1;
 
-                 canvas.height = ih;
 
-                 ctx = canvas.getContext("2d");
 
-                 ctx.drawImage(img, 0, 0);
 
-                 data = ctx.getImageData(0, 0, 1, ih).data;
 
-                 sy = 0;
 
-                 ey = ih;
 
-                 py = ih;
 
-                 while (py > sy) {
 
-                     alpha = data[(py - 1) * 4 + 3];
 
-                     if (alpha === 0) {
 
-                         ey = py;
 
-                     } else {
 
-                         sy = py;
 
-                     }
 
-                     py = (ey + sy) >> 1;
 
-                 }
 
-                 ratio = py / ih;
 
-                 if (ratio === 0) {
 
-                     return 1;
 
-                 } else {
 
-                     return ratio;
 
-                 }
 
-             };
 
-             drawImageIOSFix = function(ctx, img, sx, sy, sw, sh, dx, dy, dw, dh) {
 
-                 var vertSquashRatio;
 
-                 vertSquashRatio = detectVerticalSquash(img);
 
-                 return ctx.drawImage(img, sx, sy, sw, sh, dx, dy, dw, dh / vertSquashRatio);
 
-             };
 
-             /*
 
-              * contentloaded.js
 
-              *
 
-              * Author: Diego Perini (diego.perini at gmail.com)
 
-              * Summary: cross-browser wrapper for DOMContentLoaded
 
-              * Updated: 20101020
 
-              * License: MIT
 
-              * Version: 1.2
 
-              *
 
-              * URL:
 
-              * http://javascript.nwbox.com/ContentLoaded/
 
-              * http://javascript.nwbox.com/ContentLoaded/MIT-LICENSE
 
-              */
 
-             contentLoaded = function(win, fn) {
 
-                 var add, doc, done, init, poll, pre, rem, root, top;
 
-                 done = false;
 
-                 top = true;
 
-                 doc = win.document;
 
-                 root = doc.documentElement;
 
-                 add = (doc.addEventListener ? "addEventListener" : "attachEvent");
 
-                 rem = (doc.addEventListener ? "removeEventListener" : "detachEvent");
 
-                 pre = (doc.addEventListener ? "" : "on");
 
-                 init = function(e) {
 
-                     if (e.type === "readystatechange" && doc.readyState !== "complete") {
 
-                         return;
 
-                     }
 
-                     (e.type === "load" ? win : doc)[rem](pre + e.type, init, false);
 
-                     if (!done && (done = true)) {
 
-                         return fn.call(win, e.type || e);
 
-                     }
 
-                 };
 
-                 poll = function() {
 
-                     var e;
 
-                     try {
 
-                         root.doScroll("left");
 
-                     } catch (_error) {
 
-                         e = _error;
 
-                         setTimeout(poll, 50);
 
-                         return;
 
-                     }
 
-                     return init("poll");
 
-                 };
 
-                 if (doc.readyState !== "complete") {
 
-                     if (doc.createEventObject && root.doScroll) {
 
-                         try {
 
-                             top = !win.frameElement;
 
-                         } catch (_error) {}
 
-                         if (top) {
 
-                             poll();
 
-                         }
 
-                     }
 
-                     doc[add](pre + "DOMContentLoaded", init, false);
 
-                     doc[add](pre + "readystatechange", init, false);
 
-                     return win[add](pre + "load", init, false);
 
-                 }
 
-             };
 
-             Dropzone._autoDiscoverFunction = function() {
 
-                 if (Dropzone.autoDiscover) {
 
-                     return Dropzone.discover();
 
-                 }
 
-             };
 
-             contentLoaded(window, Dropzone._autoDiscoverFunction);
 
-         }).call(this);
 
-     });
 
-     if (typeof exports == "object") {
 
-         module.exports = require("dropzone");
 
-     } else if (typeof define == "function" && define.amd) {
 
-         define([], function(){ return require("dropzone"); });
 
-     } else {
 
-         this["Dropzone"] = require("dropzone");
 
-     }
 
- })()
 
 
  |