summaryrefslogtreecommitdiff
path: root/addons/web/static
diff options
context:
space:
mode:
authorYannick Tivisse <yti@odoo.com>2018-06-20 13:38:08 +0200
committerYannick Tivisse <yti@odoo.com>2018-06-27 14:42:04 +0200
commit15f3bbe5942eee23039d0b40d2bcc0eb274ba129 (patch)
treec6dc9215990841cb51aca8608cad373a4ce1d4d5 /addons/web/static
parenta46301419efe73804a3c0ec6967e7cf5808f86fb (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.js73
-rw-r--r--addons/web/static/src/js/fields/field_registry.js2
-rw-r--r--addons/web/static/src/scss/fields.scss22
-rw-r--r--addons/web/static/src/xml/base.xml10
-rw-r--r--addons/web/static/tests/fields/basic_fields_tests.js38
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');