diff options
| author | Yannick Tivisse <yti@odoo.com> | 2018-06-20 13:38:08 +0200 |
|---|---|---|
| committer | Yannick Tivisse <yti@odoo.com> | 2018-06-27 14:42:04 +0200 |
| commit | 15f3bbe5942eee23039d0b40d2bcc0eb274ba129 (patch) | |
| tree | c6dc9215990841cb51aca8608cad373a4ce1d4d5 /addons/web/static | |
| parent | a46301419efe73804a3c0ec6967e7cf5808f86fb (diff) | |
[MOV] web,im_livechat: Move clipboard widget to web
Diffstat (limited to 'addons/web/static')
| -rw-r--r-- | addons/web/static/src/js/fields/basic_fields.js | 73 | ||||
| -rw-r--r-- | addons/web/static/src/js/fields/field_registry.js | 2 | ||||
| -rw-r--r-- | addons/web/static/src/scss/fields.scss | 22 | ||||
| -rw-r--r-- | addons/web/static/src/xml/base.xml | 10 | ||||
| -rw-r--r-- | addons/web/static/tests/fields/basic_fields_tests.js | 38 |
5 files changed, 145 insertions, 0 deletions
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"/> </t> +<t t-name="CopyClipboardText"> + <button class="btn btn-xs btn-primary o_clipboard_button o_btn_text_copy"> + <span class="fa fa-clipboard">Copy Text</span> + </button> +</t> +<t t-name="CopyClipboardChar"> + <button class="btn btn-xs btn-primary o_clipboard_button o_btn_char_copy"> + <span class="fa fa-clipboard">Copy Text</span> + </button> +</t> <t t-name="FieldBinaryFile"> <a t-if="widget.mode === 'readonly'" href="javascript:void(0)" class="o_form_uri"/> 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: '<form string="Partners">' + + '<sheet>' + + '<div>' + + '<field name="script_external" widget="CopyClipboardText"/>' + + '<field name="web_page" widget="CopyClipboardChar"/>' + + '</div>' + + '</sheet>' + + '</form>', + }); + 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'); |
