docs: function Dropify(element, options) {
      if (!(window.File && window.FileReader && window.FileList && window.Blob)) {
          return;
      }
  
      var defaults = {
          defaultFile: '',
          maxFileSize: 0,
          minWidth: 0,
          maxWidth: 0,
          minHeight: 0,
          maxHeight: 0,
          showRemove: true,
          showLoader: true,
          showErrors: true,
          errorTimeout: 3000,
          errorsPosition: 'overlay',
          imgFileExtensions: ['png', 'jpg', 'jpeg', 'gif', 'bmp'],
          maxFileSizePreview: "5M",
          allowedFormats: ['portrait', 'square', 'landscape'],
          allowedFileExtensions: ['*'],
          messages: {
              'default': 'Drag and drop a file here or click',
              'replace': 'Drag and drop or click to replace',
              'remove':  'Remove',
              'error':   'Ooops, something wrong happended.'
          },
          error: {
              'fileSize': 'The file size is too big ({{ value }} max).',
              'minWidth': 'The image width is too small ({{ value }}}px min).',
              'maxWidth': 'The image width is too big ({{ value }}}px max).',
              'minHeight': 'The image height is too small ({{ value }}}px min).',
              'maxHeight': 'The image height is too big ({{ value }}px max).',
              'imageFormat': 'The image format is not allowed ({{ value }} only).',
              'fileExtension': 'The file is not allowed ({{ value }} only).'
          },
          tpl: {
              wrap:            '<div class="dropify-wrapper"></div>',
              loader:          '<div class="dropify-loader"></div>',
              message:         '<div class="dropify-message"><span class="file-icon" /> <p>{{ default }}</p></div>',
              preview:         '<div class="dropify-preview"><span class="dropify-render"></span><div class="dropify-infos"><div class="dropify-infos-inner"><p class="dropify-infos-message">{{ replace }}</p></div></div></div>',
              filename:        '<p class="dropify-filename"><span class="dropify-filename-inner"></span></p>',
              clearButton:     '<button type="button" class="dropify-clear">{{ remove }}</button>',
              errorLine:       '<p class="dropify-error">{{ error }}</p>',
              errorsContainer: '<div class="dropify-errors-container"><ul></ul></div>'
          }
      };
  
      this.element            = element;
      this.input              = $(this.element);
      this.wrapper            = null;
      this.preview            = null;
      this.filenameWrapper    = null;
      this.settings           = $.extend(true, defaults, options, this.input.data());
      this.errorsEvent        = $.Event('dropify.errors');
      this.isDisabled         = false;
      this.isInit             = false;
      this.file               = {
          object: null,
          name: null,
          size: null,
          width: null,
          height: null,
          type: null
      };
  
      if (!Array.isArray(this.settings.allowedFormats)) {
          this.settings.allowedFormats = this.settings.allowedFormats.split(' ');
      }
  
      if (!Array.isArray(this.settings.allowedFileExtensions)) {
          this.settings.allowedFileExtensions = this.settings.allowedFileExtensions.split(' ');
      }
  
      this.onChange     = this.onChange.bind(this);
      this.clearElement = this.clearElement.bind(this);
      this.onFileReady  = this.onFileReady.bind(this);
  
      this.translateMessages();
      this.createElements();
      this.setContainerSize();
  
      this.errorsEvent.errors = [];
  
      this.input.on('change', this.onChange);
  }