diff --git a/ui/widgets/nuxeo-selectivity.js b/ui/widgets/nuxeo-selectivity.js
index 4f3f5ba693..6b849fc7d3 100644
--- a/ui/widgets/nuxeo-selectivity.js
+++ b/ui/widgets/nuxeo-selectivity.js
@@ -25,6 +25,8 @@ import { html } from '@polymer/polymer/lib/utils/html-tag.js';
import { mixinBehaviors } from '@polymer/polymer/lib/legacy/class.js';
import {I18nBehavior} from "../nuxeo-i18n-behavior";
import '@polymer/iron-icon/iron-icon.js';
+import { IronResizableBehavior } from '@polymer/iron-resizable-behavior/iron-resizable-behavior.js';
+import './nuxeo-tooltip.js';
/**
* @license
@@ -2439,7 +2441,7 @@ typedArrayTags[weakMapTag] = false;
resultsHtml = this.selectivity.template('tagExists');
} else if (!resultsHtml && !options.add) {
resultsHtml = this.selectivity.template('noResults', { term: options.term });
- }
+ }
if (resultsHtml) {
this.resultsContainer.innerHTML = '';
removeElement(this.$('.selectivity-loading'));
@@ -3428,10 +3430,35 @@ typedArrayTags[weakMapTag] = false;
item,
),
));
-
+
this.input.parentNode.insertBefore(el, this.input);
+ const textElement = el.querySelector('.selectivity-multiple-selected-item.selectivity-text-container')
+ const elementWidth = this._calculateElementWidth(textElement);
+ const containerElement = this._getHTMLRootNode(textElement)
+ const containerElementWidth = this._calculateElementWidth(containerElement)
+ if(elementWidth > 0 && elementWidth > containerElementWidth) {
+ textElement.setAttribute('style', `max-width:${containerElementWidth}px`);
+ }
+ },
+
+ _getHTMLRootNode(element){
+ let currentElement = element;
+ const parentElement = currentElement.closest(".selectivity-multiple-input-container")
+ return parentElement;
},
+
+
+ _calculateElementWidth(element){
+ const currrentElement = getComputedStyle(element);
+ const paddingX = parseFloat(currrentElement.paddingLeft) + parseFloat(currrentElement.paddingRight);
+ const borderX = parseFloat(currrentElement.borderLeftWidth) + parseFloat(currrentElement.borderRightWidth);
+ const scrollBarWidth = element.offsetWidth - element.clientWidth;
+ const elementWidth = (element .offsetWidth - paddingX - borderX - scrollBarWidth -2) ;
+ return elementWidth
+ },
+
+
/**
* @private
*/
@@ -6582,7 +6609,7 @@ typedArrayTags[weakMapTag] = false;
* @demo demo/nuxeo-selectivity/index.html
*/
class SelectivityElement
- extends mixinBehaviors([I18nBehavior, IronFormElementBehavior, IronValidatableBehavior], Nuxeo.Element) {
+ extends mixinBehaviors([I18nBehavior, IronFormElementBehavior, IronValidatableBehavior, IronResizableBehavior], Nuxeo.Element) {
static get is() {
return 'nuxeo-selectivity';
@@ -7107,6 +7134,14 @@ typedArrayTags[weakMapTag] = false;
height: 2px;
background-color: var(--nuxeo-primary-color, #0066ff);
}
+ .selectivity-text-container {
+ white-space: nowrap;
+ overflow: hidden;
+ text-overflow: ellipsis;
+ }
+ .multipleSelectedItemText {
+ display:inline-block;
+ }
@@ -7170,10 +7205,17 @@ typedArrayTags[weakMapTag] = false;
multipleSelectedItem: (opts) => {
const extraClass = opts.highlighted ? ' highlighted' : '';
- return `
+ `)
},
},
};
@@ -7187,6 +7229,9 @@ typedArrayTags[weakMapTag] = false;
options.placeholder = this.placeholder;
options.allowClear = !this.required && !this.multiple; // allowClear only works on single-value mode
}
+ else {
+ this.addEventListener('iron-resize', this._resize);
+ }
if (this.data) {
options.items = this._wrap(this.data);
@@ -7273,9 +7318,16 @@ typedArrayTags[weakMapTag] = false;
this._selectivity = null;
this._visibilityObserver.unobserve(this);
this._scrollParent.removeEventListener('scroll', this._updateDropdownPosition.bind(this));
+ this.removeEventListener('iron-resize', this._resize);
super.disconnectedCallback();
}
+ _resize() {
+ this._selectivity && this._selectivity.options.readOnly &&
+ this._selectivity._reset() &&
+ this._selectivity.rerenderSelection();
+ }
+
_updateDropdownPosition() {
if (this._selectivity) {
this._selectivity.positionDropdown();