4 changed files with 153 additions and 1 deletions
-
2muk_web_utils/__manifest__.py
-
99muk_web_utils/static/src/js/core/dropzone.js
-
51muk_web_utils/static/src/js/libs/jquery.js
-
2muk_web_utils/template/assets.xml
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
* |
||||
|
**********************************************************************************/ |
||||
|
|
||||
|
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, |
||||
|
}; |
||||
|
|
||||
|
}); |
@ -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 <http://www.gnu.org/licenses/>.
|
||||
|
* |
||||
|
**********************************************************************************/ |
||||
|
|
||||
|
$.fn.textWidth = function(text, font) { |
||||
|
if (!$.fn.textWidth.fakeEl) $.fn.textWidth.fakeEl = $('<span>').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); |
||||
|
}); |
||||
|
}); |
||||
|
}; |
Write
Preview
Loading…
Cancel
Save
Reference in new issue