diff --git a/muk_web_utils/__manifest__.py b/muk_web_utils/__manifest__.py
index 4cd8a25..bf4cddb 100644
--- a/muk_web_utils/__manifest__.py
+++ b/muk_web_utils/__manifest__.py
@@ -20,7 +20,7 @@
{
"name": "MuK Web Utils",
"summary": """Utility Features""",
- "version": "12.0.2.4.1",
+ "version": "12.0.2.4.2",
"category": "Extra Tools",
"license": "AGPL-3",
"author": "MuK IT",
diff --git a/muk_web_utils/static/src/js/core/dropzone.js b/muk_web_utils/static/src/js/core/dropzone.js
new file mode 100644
index 0000000..d3876ef
--- /dev/null
+++ b/muk_web_utils/static/src/js/core/dropzone.js
@@ -0,0 +1,99 @@
+/**********************************************************************************
+*
+* Copyright (C) 2017 MuK IT GmbH
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see .
+*
+**********************************************************************************/
+
+odoo.define('muk_web_utils.dropzone', function (require) {
+"use strict";
+
+var core = require('web.core');
+
+var _t = core._t;
+var QWeb = core.qweb;
+
+var DropzoneMixin = {
+ _checkDropzoneEvent: function(event) {
+ return true;
+ },
+ _renderDropzone: function($dropzone) {
+ this.$dropzone = $dropzone;
+ this.$dropzone.dndHover().on({
+ 'dndHoverStart': this._hoverDropzoneEnter.bind(this),
+ 'dndHoverEnd': this._hoverDropzoneLeave.bind(this),
+ });
+
+ },
+ _toggleDropzone: function(state) {
+ this.$dropzone.toggleClass('mk_dropzone', state);
+ },
+ _hoverDropzoneEnter: function(event) {
+ if(this._checkDropzoneEvent(event)) {
+ this._toggleDropzone(true);
+ event.preventDefault();
+ return false;
+ }
+ },
+ _hoverDropzoneLeave: function(event) {
+ this._toggleDropzone(false);
+ event.stopPropagation();
+ event.preventDefault();
+ return false;
+ },
+ _handleDrag: function(event) {
+ },
+ _handleDrop: function(event) {
+ },
+ _dragenterDropzone: function(event) {
+ if(this._checkDropzoneEvent(event)) {
+ event.preventDefault();
+ }
+ },
+ _dragoverDropzone: function(event) {
+ if(this._checkDropzoneEvent(event)) {
+ event.preventDefault();
+ this._handleDrag();
+ }
+ },
+ _dragleaveDropzone: function(event) {
+ if(this._checkDropzoneEvent(event)) {
+ event.preventDefault();
+ }
+ },
+ _dropDropzone: function(event) {
+ if(this._checkDropzoneEvent(event)) {
+ event.preventDefault();
+ event.stopPropagation();
+ this._handleDrop();
+ }
+ }
+};
+
+var FileDropzoneMixin = {
+ _checkDropzoneEvent: function(event) {
+ return window.File && window.FileReader && window.FileList && window.Blob;
+ },
+ _handleDrag: function(event) {
+ event.originalEvent.dataTransfer.dropEffect = 'copy';
+ },
+};
+
+return {
+ DropzoneMixin: DropzoneMixin,
+ FileDropzoneMixin: FileDropzoneMixin,
+};
+
+});
\ No newline at end of file
diff --git a/muk_web_utils/static/src/js/libs/jquery.js b/muk_web_utils/static/src/js/libs/jquery.js
new file mode 100644
index 0000000..8069ef0
--- /dev/null
+++ b/muk_web_utils/static/src/js/libs/jquery.js
@@ -0,0 +1,51 @@
+/**********************************************************************************
+*
+* Copyright (C) 2018 MuK IT GmbH
+*
+* This program is free software: you can redistribute it and/or modify
+* it under the terms of the GNU Affero General Public License as
+* published by the Free Software Foundation, either version 3 of the
+* License, or (at your option) any later version.
+*
+* This program is distributed in the hope that it will be useful,
+* but WITHOUT ANY WARRANTY; without even the implied warranty of
+* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+* GNU Affero General Public License for more details.
+*
+* You should have received a copy of the GNU Affero General Public License
+* along with this program. If not, see .
+*
+**********************************************************************************/
+
+$.fn.textWidth = function(text, font) {
+ if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('').hide().appendTo(document.body);
+ $.fn.textWidth.fakeEl.text(text || this.val() || this.text()).css('font', font || this.css('font'));
+ return $.fn.textWidth.fakeEl.width();
+};
+
+$.fn.dndHover = function(options) {
+ return this.each(function() {
+ var self = $(this);
+ var collection = $();
+ self.on('dragenter', function(event) {
+ if (collection.size() === 0) {
+ self.trigger('dndHoverStart');
+ }
+ collection = collection.add(event.target);
+ });
+ self.on('dragleave', function(event) {
+ setTimeout(function() {
+ collection = collection.not(event.target);
+ if (collection.size() === 0) {
+ self.trigger('dndHoverEnd');
+ }
+ }, 1);
+ });
+ self.on('drop', function(event) {
+ setTimeout(function() {
+ collection = $();
+ self.trigger('dndHoverEnd');
+ }, 1);
+ });
+ });
+};
diff --git a/muk_web_utils/template/assets.xml b/muk_web_utils/template/assets.xml
index 9325b4e..cfd0a63 100644
--- a/muk_web_utils/template/assets.xml
+++ b/muk_web_utils/template/assets.xml
@@ -38,7 +38,9 @@
+
+