diff --git a/muk_web_utils/__manifest__.py b/muk_web_utils/__manifest__.py
index bf4cddb..bc83e1d 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.2",
+ "version": "12.0.2.4.3",
"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
index b3002cd..cc1caca 100644
--- a/muk_web_utils/static/src/js/core/dropzone.js
+++ b/muk_web_utils/static/src/js/core/dropzone.js
@@ -29,10 +29,10 @@ var DropzoneMixin = {
dropzoneData: {},
dropzoneClasses: 'mk_dropzone',
dropzoneEvents: {
- 'dragenter .o_form_sheet': '_dragenterDropzone',
- 'dragover .o_form_sheet': '_dragoverDropzone',
- 'dragleave .o_form_sheet': '_dragleaveDropzone',
- 'drop .o_form_sheet': '_dropDropzone',
+ 'dragenter .mk_dropzone': '_dragenterDropzone',
+ 'dragover .mk_dropzone': '_dragoverDropzone',
+ 'dragleave .mk_dropzone': '_dragleaveDropzone',
+ 'drop .mk_dropzone': '_dropDropzone',
},
_checkDropzoneEvent: function(event) {
return true;
@@ -97,8 +97,9 @@ var FileDropzoneMixin = _.extend({}, DropzoneMixin, {
'data-dropzone-text': _t("Drop files here to upload!"),
},
dropzoneClasses: DropzoneMixin.dropzoneClasses + ' mk_dropzone_file',
+ dropzoneCheck: window.File && window.FileReader && window.FileList && window.Blob,
_checkDropzoneEvent: function(event) {
- return window.File && window.FileReader && window.FileList && window.Blob;
+ return this.dropzoneCheck;
},
_handleDrag: function(event) {
if(event.originalEvent.dataTransfer) {
diff --git a/muk_web_utils/static/src/js/core/files.js b/muk_web_utils/static/src/js/core/files.js
new file mode 100644
index 0000000..526f3a3
--- /dev/null
+++ b/muk_web_utils/static/src/js/core/files.js
@@ -0,0 +1,174 @@
+/**********************************************************************************
+*
+* 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 .
+*
+**********************************************************************************/
+
+odoo.define('muk_web_utils.files', function (require) {
+"use strict";
+
+var core = require('web.core');
+var utils = require('web.utils');
+
+var QWeb = core.qweb;
+var _t = core._t;
+
+var traverseItems = function(items, tree) {
+ var def = $.Deferred();
+ var files = [];
+ var defs = [];
+ _.each(items, function(item, index) {
+ var entry = item.webkitGetAsEntry();
+ if(entry) {
+ var traverse = $.Deferred();
+ traverseEntry(entry, tree).then(function(result) {
+ if(tree) {
+ files = files.concat(result);
+ } else {
+ files = _.union(files, result);
+ }
+ traverse.resolve();
+ });
+ defs.push(traverse);
+ } else {
+ file = item.getAsFile();
+ if(file) {
+ if(file.size) {
+ files.push(_.extend({}, file, {isFileItem: true}));
+ }
+ } else {
+ console.warn("Your browser doesn't support Drag and Drop!");
+ }
+ }
+ });
+ $.when.apply($, defs).then(function () {
+ def.resolve(files);
+ });
+ return def;
+};
+
+var traverseEntries = function(entries, tree) {
+ var def = $.Deferred();
+ var files = [];
+ var defs = [];
+ _.each(entries, function(entry, index) {
+ var traverse = $.Deferred();
+ traverseEntry(entry, tree).then(function(result) {
+ if(tree) {
+ files = files.concat(result);
+ } else {
+ files = _.union(files, result);
+ }
+ traverse.resolve();
+ });
+ defs.push(traverse);
+ });
+ $.when.apply($, defs).then(function () {
+ def.resolve(files);
+ });
+ return def;
+}
+
+var traverseEntry = function(entry, tree) {
+ var def = $.Deferred();
+ if(entry.isFile) {
+ def.resolve([entry]);
+ } else if(entry.isDirectory) {
+ entry.createReader().readEntries(function (entries) {
+ traverseEntries(entries, tree).then(function (files) {
+ if(tree) {
+ def.resolve([{
+ name: entry.name,
+ files: files,
+ isFile: false,
+ isDirectory: true,
+ childCount: files.length,
+ fullPath: entry.fullPath,
+ fileCount: _.reduce(files, function(sum, item) {
+ return item.isFile ? sum + 1 : sum + item.fileCount || 0;
+ }, 0),
+ }]);
+ } else {
+ def.resolve(files);
+ }
+ });
+ });
+ } else {
+ def.resolve([]);
+ }
+ return def;
+};
+
+var getFileTree = function(items, count) {
+ var traverse = traverseItems(items, true);
+ if(count) {
+ var def = $.Deferred();
+ traverse.then(function(files) {
+ def.resolve({
+ files: files,
+ count: _.reduce(files, function(sum, item) {
+ return item.isFile ? sum + 1 : sum + item.fileCount || 0;
+ }, 0),
+ });
+ });
+ return def;
+ }
+ return traverse;
+};
+
+var getFileList = function(items, count) {
+ var traverse = traverseItems(items, false);
+ if(count) {
+ var def = $.Deferred();
+ traverse.then(function(files) {
+ def.resolve({
+ files: files,
+ count: files.length,
+ });
+
+ });
+ return def;
+ }
+ return traverse;
+};
+
+var loadFile = function(file, callback) {
+ var fileReader = new FileReader();
+ fileReader.readAsDataURL(file);
+ fileReader.onloadend = callback;
+};
+
+var readFile = function(file, callback) {
+ if(file.isFile) {
+ file.file(function(file) {
+ loadFile(file, callback);
+ });
+ } else {
+ loadFile(file, callback);
+ }
+};
+
+return {
+ traverseItems: traverseItems,
+ traverseEntries: traverseEntries,
+ traverseEntry: traverseEntry,
+ getFileTree: getFileTree,
+ getFileList: getFileList,
+ loadFile: loadFile,
+ readFile: readFile,
+};
+
+});
diff --git a/muk_web_utils/static/src/js/core/utils.js b/muk_web_utils/static/src/js/core/utils.js
index 80e94e5..376451b 100644
--- a/muk_web_utils/static/src/js/core/utils.js
+++ b/muk_web_utils/static/src/js/core/utils.js
@@ -25,7 +25,7 @@ var core = require('web.core');
var _t = core._t;
var QWeb = core.qweb;
-function isUrl(string) {
+var isUrl = function(string) {
var protocol = string.match(/^(?:\w+:)?\/\/(\S+)$/);
if (protocol && protocol[1]) {
var localHost = (/^localhost[\:?\d]*(?:[^\:?\d]\S*)?$/).test(protocol[1]);
@@ -35,7 +35,7 @@ function isUrl(string) {
return false;
}
-function parseText2Html(text) {
+var parseText2Html= function(text) {
return text
.replace(/((?:https?|ftp):\/\/[\S]+)/g,'$1 ')
.replace(/[\n\r]/g,'
');
diff --git a/muk_web_utils/template/assets.xml b/muk_web_utils/template/assets.xml
index 0223345..d1f0b28 100644
--- a/muk_web_utils/template/assets.xml
+++ b/muk_web_utils/template/assets.xml
@@ -41,6 +41,7 @@
+