diff --git a/addons/im_livechat/static/src/js/copy_clipboard.js b/addons/im_livechat/static/src/js/copy_clipboard.js deleted file mode 100644 index 0d35e6b35f3..00000000000 --- a/addons/im_livechat/static/src/js/copy_clipboard.js +++ /dev/null @@ -1,86 +0,0 @@ -odoo.define('im_livechat.copy_clipboard', function (require) { -"use strict"; - -var core = require('web.core'); -var field_registry = require('web.field_registry'); -var qweb = core.qweb; - -var _t = core._t; -var FieldText = field_registry.get('text'); -var FieldChar = field_registry.get('char'); - -var CopyClipboard = { - - /** - * @override - */ - destroy: function () { - this._super.apply(this, arguments); - this.clipboard.destroy(); - }, - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * Instatiates the Clipboad lib. - */ - _initClipboard: function () { - var self = this; - var $clipboardBtn = this.$('.o_clipboard_button'); - $clipboardBtn.tooltip({title: _t('Copied !'), trigger: 'manual', placement: 'right'}); - this.clipboard = new Clipboard($clipboardBtn.get(0), { - text: function () { - return self.value.trim(); - } - }); - this.clipboard.on('success', function () { - _.defer(function () { - $clipboardBtn.tooltip('show'); - _.delay(function () { - $clipboardBtn.tooltip('hide'); - }, 800); - }); - }); - }, -}; - -var TextCopyClipboard = FieldText.extend(CopyClipboard, { - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @override - */ - _render: function() { - this._super.apply(this, arguments); - this.$el.addClass('o_field_copy'); - this.$el.append($(qweb.render('CopyClipboardText'))); - this._initClipboard(); - } -}); - -var CharCopyClipboard = FieldChar.extend(CopyClipboard, { - - //-------------------------------------------------------------------------- - // Private - //-------------------------------------------------------------------------- - - /** - * @override - */ - _render: function() { - this._super.apply(this, arguments); - this.$el.addClass('o_field_copy'); - this.$el.append($(qweb.render('CopyClipboardChar'))); - this._initClipboard(); - } -}); - -field_registry - .add('CopyClipboardText', TextCopyClipboard) - .add('CopyClipboardChar', CharCopyClipboard); -}); diff --git a/addons/im_livechat/static/src/scss/copy_clipboard.scss b/addons/im_livechat/static/src/scss/copy_clipboard.scss deleted file mode 100644 index 13bbef7b256..00000000000 --- a/addons/im_livechat/static/src/scss/copy_clipboard.scss +++ /dev/null @@ -1,20 +0,0 @@ -// less properties for copy widget -.o_field_copy { - position: relative; - border-radius: 5px; - border: 1px solid $btn-primary-border; - font-size: $font-size-small; - color: $o-brand-optional; - font-weight: $badge-font-weight; - text-align: center; - .o_clipboard_button { - &.o_btn_text_copy { - position: absolute; - top: 0; - right: 0; - } - &.o_btn_char_copy { - padding-top: 2px; - } - } -} diff --git a/addons/im_livechat/static/src/xml/copy_clipboard.xml b/addons/im_livechat/static/src/xml/copy_clipboard.xml deleted file mode 100644 index 61c17cebb17..00000000000 --- a/addons/im_livechat/static/src/xml/copy_clipboard.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - - diff --git a/addons/im_livechat/static/tests/copy_clipboard_tests.js b/addons/im_livechat/static/tests/copy_clipboard_tests.js deleted file mode 100644 index d0320ce7690..00000000000 --- a/addons/im_livechat/static/tests/copy_clipboard_tests.js +++ /dev/null @@ -1,48 +0,0 @@ -odoo.define('im_livechat.copy_clipboard_tests', function (require) { -"use strict"; - -var FormView = require('web.FormView'); -var testUtils = require('web.test_utils'); - -var createView = testUtils.createView; - -QUnit.module('copy_clipboard', { - beforeEach: function () { - this.data = { - partner: { - fields: { - script_external: {string: "Script External", type: "text"}, - web_page: {string: "Web page link", type: "char"} - }, - records: [{ - id: 1, - script_external:'Random Text', - web_page: 'web page links' - },], - }, - }; - } -}); - -QUnit.test('im_livechat: Copy to clipboard button', function (assert) { - assert.expect(2); - - var form = createView({ - View: FormView, - model: 'partner', - data: this.data, - arch: '
' + - '' + - '
' + - '' + - '' + - '
' + - '
' + - '
', - }); - assert.strictEqual(form.$('.o_clipboard_button.o_btn_text_copy').length, 1,"Should have copy button on text type field"); - assert.strictEqual(form.$('.o_clipboard_button.o_btn_char_copy').length, 1,"Should have copy button on char type field"); - form.destroy(); -}); - -}); diff --git a/addons/im_livechat/views/im_livechat_channel_templates.xml b/addons/im_livechat/views/im_livechat_channel_templates.xml index e85293c943a..e48f87c0f86 100644 --- a/addons/im_livechat/views/im_livechat_channel_templates.xml +++ b/addons/im_livechat/views/im_livechat_channel_templates.xml @@ -8,14 +8,6 @@ - - diff --git a/addons/web/static/src/js/fields/basic_fields.js b/addons/web/static/src/js/fields/basic_fields.js index 0cf9271de9d..aa66439143d 100644 --- a/addons/web/static/src/js/fields/basic_fields.js +++ b/addons/web/static/src/js/fields/basic_fields.js @@ -1064,6 +1064,77 @@ var UrlWidget = InputField.extend({ } }); +var CopyClipboard = { + + /** + * @override + */ + destroy: function () { + this._super.apply(this, arguments); + this.clipboard.destroy(); + }, + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * Instatiates the Clipboad lib. + */ + _initClipboard: function () { + var self = this; + var $clipboardBtn = this.$('.o_clipboard_button'); + $clipboardBtn.tooltip({title: _t('Copied !'), trigger: 'manual', placement: 'right'}); + this.clipboard = new Clipboard($clipboardBtn.get(0), { + text: function () { + return self.value.trim(); + } + }); + this.clipboard.on('success', function () { + _.defer(function () { + $clipboardBtn.tooltip('show'); + _.delay(function () { + $clipboardBtn.tooltip('hide'); + }, 800); + }); + }); + }, +}; + +var TextCopyClipboard = FieldText.extend(CopyClipboard, { + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _render: function() { + this._super.apply(this, arguments); + this.$el.addClass('o_field_copy'); + this.$el.append($(qweb.render('CopyClipboardText'))); + this._initClipboard(); + } +}); + +var CharCopyClipboard = FieldChar.extend(CopyClipboard, { + + //-------------------------------------------------------------------------- + // Private + //-------------------------------------------------------------------------- + + /** + * @override + */ + _render: function() { + this._super.apply(this, arguments); + this.$el.addClass('o_field_copy'); + this.$el.append($(qweb.render('CopyClipboardChar'))); + this._initClipboard(); + } +}); + var AbstractFieldBinary = AbstractField.extend({ events: _.extend({}, AbstractField.prototype.events, { 'change .o_input_file': 'on_file_change', @@ -2673,6 +2744,8 @@ return { PriorityWidget: PriorityWidget, StatInfo: StatInfo, UrlWidget: UrlWidget, + TextCopyClipboard: TextCopyClipboard, + CharCopyClipboard: CharCopyClipboard, JournalDashboardGraph: JournalDashboardGraph, AceEditor: AceEditor, }; diff --git a/addons/web/static/src/js/fields/field_registry.js b/addons/web/static/src/js/fields/field_registry.js index 8ae7362b75f..20af2a01064 100644 --- a/addons/web/static/src/js/fields/field_registry.js +++ b/addons/web/static/src/js/fields/field_registry.js @@ -34,6 +34,8 @@ registry .add('email', basic_fields.FieldEmail) .add('phone', basic_fields.FieldPhone) .add('url', basic_fields.UrlWidget) + .add('CopyClipboardText', basic_fields.TextCopyClipboard) + .add('CopyClipboardChar', basic_fields.CharCopyClipboard) .add('image', basic_fields.FieldBinaryImage) .add('binary', basic_fields.FieldBinaryFile) .add('pdf_viewer', basic_fields.FieldPdfViewer) diff --git a/addons/web/static/src/scss/fields.scss b/addons/web/static/src/scss/fields.scss index 2a35c33005a..88197612f0b 100644 --- a/addons/web/static/src/scss/fields.scss +++ b/addons/web/static/src/scss/fields.scss @@ -406,4 +406,26 @@ } } } + + // Copy to clipboard + &.o_field_copy { + position: relative; + border-radius: 5px; + border: 1px solid $btn-primary-border; + font-size: $font-size-small; + color: $o-brand-optional; + font-weight: $badge-font-weight; + text-align: center; + .o_clipboard_button { + &.o_btn_text_copy { + position: absolute; + top: 0; + right: 0; + } + &.o_btn_char_copy { + padding-top: 2px; + } + } + } + } diff --git a/addons/web/static/src/xml/base.xml b/addons/web/static/src/xml/base.xml index 45bd3555d69..018dff37915 100644 --- a/addons/web/static/src/xml/base.xml +++ b/addons/web/static/src/xml/base.xml @@ -930,6 +930,16 @@ t-att-border="widget.readonly ? 0 : 1" t-att-name="widget.name"/> + + + + + + diff --git a/addons/web/static/tests/fields/basic_fields_tests.js b/addons/web/static/tests/fields/basic_fields_tests.js index e285626f763..d95d34431b3 100644 --- a/addons/web/static/tests/fields/basic_fields_tests.js +++ b/addons/web/static/tests/fields/basic_fields_tests.js @@ -1291,6 +1291,44 @@ QUnit.module('basic_fields', { list.destroy(); }); + QUnit.module('copy_clipboard', { + beforeEach: function () { + this.data = { + partner: { + fields: { + script_external: {string: "Script External", type: "text"}, + web_page: {string: "Web page link", type: "char"} + }, + records: [{ + id: 1, + script_external:'Random Text', + web_page: 'web page links' + },], + }, + }; + } + }); + + QUnit.test('im_livechat: Copy to clipboard button', function (assert) { + assert.expect(2); + + var form = createView({ + View: FormView, + model: 'partner', + data: this.data, + arch: '
' + + '' + + '
' + + '' + + '' + + '
' + + '
' + + '
', + }); + assert.strictEqual(form.$('.o_clipboard_button.o_btn_text_copy').length, 1,"Should have copy button on text type field"); + assert.strictEqual(form.$('.o_clipboard_button.o_btn_char_copy').length, 1,"Should have copy button on char type field"); + form.destroy(); + }); QUnit.module('FieldText');