You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 

135 lines
4.2 KiB

/**********************************************************************************
*
* Copyright (c) 2017-2019 MuK IT GmbH.
*
* This file is part of MuK Web Utils
* (see https://mukit.at).
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Lesser 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 Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
**********************************************************************************/
odoo.define('muk_web_utils.copy', function (require) {
"use strict";
var core = require('web.core');
var session = require('web.session');
var fields = require('web.basic_fields');
var registry = require('web.field_registry');
var _t = core._t;
var QWeb = core.qweb;
var BinaryFileCopy = fields.FieldBinaryFile.extend({
init: function () {
this._super.apply(this, arguments);
if (!this.field.attachment) {
throw _.str.sprintf(_t(
"The field '%s' must be a binary field with an set " +
"attachment flag for the share widget to work."
), this.field.string);
}
this.accessToken = !!this.nodeOptions.token;
},
willStart: function() {
var def = this.value && this.res_id ? this._fetchShareUrl() : $.when();
return $.when(this._super.apply(this, arguments), def);
},
_fetchShareUrl: function() {
var self = this;
var def = $.Deferred();
if (this.accessToken) {
this._rpc({
model: 'ir.attachment',
method: 'search',
args: [[
['res_id', '=', this.res_id],
['res_field', '=', this.name],
['res_model', '=', this.model],
]],
kwargs: {
context: session.user_context,
},
}).then(function(attchments) {
self._rpc({
model: 'ir.attachment',
method: 'generate_access_token',
args: attchments
}).then(function(access_token) {
self.shareUrl = session.url('/web/content', {
model: self.model,
field: self.name,
id: self.res_id,
access_token: access_token.shift(),
});
def.resolve();
});
});
} else {
this.shareUrl = session.url('/web/content', {
model: self.model,
field: self.name,
id: self.res_id,
});
def.resolve();
}
return def;
},
_setUpClipboad: function() {
var self = this;
var $clipboardBtn = this.$('.mk_copy_binary');
this.clipboard = new ClipboardJS($clipboardBtn[0], {
text: function (trigger) {
return self.shareUrl;
},
container: self.$el[0]
});
this.clipboard.on('success', function (event) {
_.defer(function () {
$clipboardBtn.tooltip('show');
_.delay(function () {
$clipboardBtn.tooltip('hide');
}, 800);
});
});
$clipboardBtn.click(function(event) {
event.stopPropagation();
});
$clipboardBtn.tooltip({
title: _t('Link Copied!'),
trigger: 'manual',
placement: 'bottom'
});
},
_renderReadonly: function () {
this._super.apply(this, arguments);
this.$el.addClass('mk_field_copy');
this.$el.append($(QWeb.render('muk_web_utils.BinaryFieldCopy')));
this._setUpClipboad();
},
destroy: function () {
this._super.apply(this, arguments);
if (this.clipboard) {
this.clipboard.destroy();
}
},
});
registry.add('copy_binary', BinaryFileCopy);
return {
BinaryFileCopy: BinaryFileCopy,
};
});