MuK IT GmbH
6 years ago
3 changed files with 84 additions and 1 deletions
-
2muk_web_utils/__manifest__.py
-
82muk_web_utils/static/src/js/core/async.js
-
1muk_web_utils/template/assets.xml
@ -0,0 +1,82 @@ |
|||||
|
/********************************************************************************** |
||||
|
* |
||||
|
* 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.async', function (require) { |
||||
|
"use strict"; |
||||
|
|
||||
|
var core = require('web.core'); |
||||
|
|
||||
|
var _t = core._t; |
||||
|
var QWeb = core.qweb; |
||||
|
|
||||
|
var syncLoop = function(items, func, callback) { |
||||
|
items.reduce(function(promise, item) { |
||||
|
return promise.then(func); |
||||
|
}, $.Deferred().resolve()).then(callback); |
||||
|
}; |
||||
|
|
||||
|
var syncProgress = function(items, func, callback, update) { |
||||
|
var progress = 0; |
||||
|
items.reduce(function(promise, item) { |
||||
|
return promise.then(function() { |
||||
|
update(++progress / items.length); |
||||
|
return func(item); |
||||
|
}); |
||||
|
}, $.Deferred().resolve()).then(callback); |
||||
|
}; |
||||
|
|
||||
|
var createNotification = function(widget, title) { |
||||
|
return widget.call('notification', 'notify', { |
||||
|
title: title || _t('Upload'), |
||||
|
message: _t('Uploading...'), |
||||
|
icon: 'fa-upload', |
||||
|
sticky: true, |
||||
|
progress: { |
||||
|
text: "0%", |
||||
|
state: 0.0, |
||||
|
}, |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
var updateNotification = function(widget, notification, progress) { |
||||
|
widget.call('notification', 'progress', notification, { |
||||
|
text: (progress * 100).toFixed(2) + "%", |
||||
|
state: (progress * 100).toFixed(2), |
||||
|
}); |
||||
|
}; |
||||
|
|
||||
|
var closeNotification = function(widget, notification) { |
||||
|
widget.call('notification', 'close', notification); |
||||
|
}; |
||||
|
|
||||
|
var syncNotification = function(widget, title, items, func, callback) { |
||||
|
var notification = createNotification(widget, title); |
||||
|
var update = _.partial(updateNotification, widget, notification); |
||||
|
syncProgress(items, func, function() { |
||||
|
$.when(closeNotification(widget, notification)).then(callback); |
||||
|
}, update); |
||||
|
}; |
||||
|
|
||||
|
return { |
||||
|
syncLoop: syncLoop, |
||||
|
syncProgress: syncProgress, |
||||
|
syncNotification: syncNotification, |
||||
|
}; |
||||
|
|
||||
|
}); |
Write
Preview
Loading…
Cancel
Save
Reference in new issue