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.
227 lines
8.1 KiB
227 lines
8.1 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.share', 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 utils = require('muk_web_utils.utils');
|
|
var copy = require('muk_web_utils.copy');
|
|
|
|
var _t = core._t;
|
|
var QWeb = core.qweb;
|
|
|
|
var ShareMixin = {
|
|
shareEvents: {
|
|
'click .mk_share_dropdown_message': '_onShareMessageClick',
|
|
'click .mk_share_dropdown_note': '_onShareNoteClick',
|
|
'click .mk_share_dropdown_mail': '_onShareMailClick',
|
|
'click .mk_share_dropdown_send': '_onShareSendClick',
|
|
},
|
|
getShareMessageValues: function(message) {
|
|
var values = {
|
|
name: session.partner_display_name,
|
|
record: this.recordData.display_name,
|
|
url: utils.isUrl(this.value) && this.value,
|
|
value: this.value,
|
|
};
|
|
return {
|
|
subject: _.template(this.shareOptions.subjectTemplate)(values),
|
|
body: QWeb.render(this.shareOptions.bodyTemplate, values),
|
|
text: _.template(this.shareOptions.textTemplate)(values),
|
|
url: utils.isUrl(this.value) && this.value,
|
|
}
|
|
},
|
|
openShareChat: function(note) {
|
|
var values = this.getShareMessageValues();
|
|
var context = {
|
|
default_is_log: note,
|
|
default_body: values.body,
|
|
default_subject: values.subject,
|
|
default_model: this.shareOptions.res_model,
|
|
default_res_id: this.shareOptions.res_id,
|
|
mail_post_autofollow: false,
|
|
};
|
|
this.do_action({
|
|
type: 'ir.actions.act_window',
|
|
res_model: 'mail.compose.message',
|
|
view_mode: 'form',
|
|
view_type: 'form',
|
|
views: [[false, 'form']],
|
|
target: 'new',
|
|
context: context,
|
|
});
|
|
},
|
|
_onShareMessageClick: function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
this.openShareChat(false);
|
|
},
|
|
_onShareNoteClick: function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
this.openShareChat(true);
|
|
},
|
|
_onShareMailClick: function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
var values = this.getShareMessageValues();
|
|
var subject = "subject=" + values.subject;
|
|
var body = "&body=" + encodeURIComponent(values.text);
|
|
window.location.href = "mailto:?" + subject + body;
|
|
},
|
|
_onShareSendClick: function(event) {
|
|
event.preventDefault();
|
|
event.stopPropagation();
|
|
var values = this.getShareMessageValues();
|
|
navigator.share({
|
|
title: values.subject,
|
|
text: values.text,
|
|
url: values.url,
|
|
});
|
|
},
|
|
};
|
|
|
|
var CharShare = fields.CharCopyClipboard.extend(ShareMixin, {
|
|
fieldDependencies: _.extend({}, fields.CharCopyClipboard.prototype.fieldDependencies, {
|
|
display_name: {type: 'char'},
|
|
}),
|
|
events: _.extend({}, fields.CharCopyClipboard.prototype.events, ShareMixin.shareEvents),
|
|
init: function(parent, name, record) {
|
|
this._super.apply(this, arguments);
|
|
this.navigator = window.navigator.share;
|
|
this.chatter = _.contains(odoo._modules, "mail");
|
|
this.shareOptions = _.defaults(this.nodeOptions, {
|
|
subjectTemplate: _t("<%= name %> shared a message!"),
|
|
textTemplate: _t("<%= value %>"),
|
|
bodyTemplate: 'muk_web_utils.ShareMessage',
|
|
});
|
|
this.shareOptions = _.extend({}, this.shareOptions, {
|
|
res_model: this.recordData[this.nodeOptions.res_model] || this.model,
|
|
res_id: this.recordData[this.nodeOptions.res_id] || this.res_id,
|
|
});
|
|
},
|
|
_render: function() {
|
|
this._super.apply(this, arguments);
|
|
this.$el.addClass('mk_field_share');
|
|
this.$el.prepend($(QWeb.render('muk_web_utils.CharShare', {
|
|
navigator: !!this.navigator,
|
|
chatter: !!this.chatter,
|
|
})));
|
|
},
|
|
});
|
|
|
|
var TextShare = fields.TextCopyClipboard.extend(ShareMixin, {
|
|
fieldDependencies: _.extend({}, fields.TextCopyClipboard.prototype.fieldDependencies, {
|
|
display_name: {type: 'char'},
|
|
}),
|
|
events: _.extend({}, fields.TextCopyClipboard.prototype.events, ShareMixin.shareEvents),
|
|
init: function(parent, name, record) {
|
|
this._super.apply(this, arguments);
|
|
this.navigator = window.navigator.share;
|
|
this.chatter = _.contains(odoo._modules, "mail");
|
|
this.shareOptions = _.defaults(this.nodeOptions, {
|
|
subjectTemplate: _t("<%= name %> shared a message!"),
|
|
textTemplate: _t("<%= value %>"),
|
|
bodyTemplate: 'muk_web_utils.ShareMessage',
|
|
});
|
|
this.shareOptions = _.extend({}, this.shareOptions, {
|
|
res_model: this.recordData[this.nodeOptions.res_model] || this.model,
|
|
res_id: this.recordData[this.nodeOptions.res_id] || this.res_id,
|
|
});
|
|
},
|
|
_render: function() {
|
|
this._super.apply(this, arguments);
|
|
this.$el.addClass('mk_field_share');
|
|
this.$el.prepend($(QWeb.render('muk_web_utils.TextShare', {
|
|
navigator: !!this.navigator,
|
|
chatter: !!this.chatter,
|
|
})));
|
|
}
|
|
});
|
|
|
|
var BinaryFileShare = copy.BinaryFileCopy.extend(ShareMixin, {
|
|
fieldDependencies: _.extend({}, fields.FieldBinaryFile.prototype.fieldDependencies, {
|
|
display_name: {type: 'char'},
|
|
}),
|
|
events: _.extend({}, copy.BinaryFileCopy.prototype.events, ShareMixin.shareEvents, {
|
|
'click .mk_share_button': '_onShareDropdownClick',
|
|
}),
|
|
init: function () {
|
|
this._super.apply(this, arguments);
|
|
this.navigator = window.navigator.share;
|
|
this.chatter = _.contains(odoo._modules, "mail");
|
|
this.shareOptions = _.defaults(this.nodeOptions, {
|
|
subjectTemplate: _t("<%= name %> shared a file!"),
|
|
textTemplate: _t("<%= value %>"),
|
|
bodyTemplate: 'muk_web_utils.ShareBinaryMessage',
|
|
});
|
|
this.shareOptions = _.extend({}, this.shareOptions, {
|
|
res_model: this.recordData[this.nodeOptions.res_model] || this.model,
|
|
res_id: this.recordData[this.nodeOptions.res_id] || this.res_id,
|
|
});
|
|
},
|
|
getShareMessageValues: function() {
|
|
var values = {
|
|
name: session.partner_display_name,
|
|
record: this.recordData.display_name,
|
|
url: this.shareUrl,
|
|
value: this.shareUrl,
|
|
};
|
|
return {
|
|
subject: _.template(this.shareOptions.subjectTemplate)(values),
|
|
body: QWeb.render(this.shareOptions.bodyTemplate, values),
|
|
text: _.template(this.shareOptions.textTemplate)(values),
|
|
url: this.shareUrl,
|
|
}
|
|
},
|
|
_renderReadonly: function () {
|
|
this._super.apply(this, arguments);
|
|
this.$el.addClass('mk_field_share');
|
|
this.$el.append($(QWeb.render('muk_web_utils.BinaryShare', {
|
|
navigator: !!this.navigator,
|
|
chatter: !!this.chatter,
|
|
share: !!this.shareUrl,
|
|
})));
|
|
},
|
|
_onShareDropdownClick: function(event) {
|
|
$(event.currentTarget).dropdown("toggle");
|
|
event.stopPropagation();
|
|
},
|
|
});
|
|
|
|
registry.add('share_char', CharShare);
|
|
registry.add('share_text', TextShare);
|
|
registry.add('share_binary', BinaryFileShare);
|
|
|
|
return {
|
|
ShareMixin: ShareMixin,
|
|
CharShare: CharShare,
|
|
TextShare: TextShare,
|
|
BinaryFileShare: BinaryFileShare,
|
|
};
|
|
|
|
});
|