From d177a6c109c858d9e8c2f0cb4462f8d686bc4386 Mon Sep 17 00:00:00 2001 From: Joao Ferreira Date: Wed, 27 Mar 2019 16:54:18 +0000 Subject: [PATCH] Clamp the string when there is no spaces. Solution only for letters based mode --- src/index.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/index.js b/src/index.js index 9ea123e..b6b8995 100644 --- a/src/index.js +++ b/src/index.js @@ -102,7 +102,7 @@ class LinesEllipsis extends React.Component { this.canvas.innerHTML = this.units.map((c) => { return `${c}` }).join('') - const ellipsisIndex = this.putEllipsis(this.calcIndexes()) + const ellipsisIndex = this.putEllipsis(this.calcIndexes(basedOn)) const clamped = ellipsisIndex > -1 const newState = { clamped, @@ -111,7 +111,7 @@ class LinesEllipsis extends React.Component { this.setState(newState, props.onReflow.bind(this, newState)) } - calcIndexes () { + calcIndexes (basedOn) { const indexes = [0] let elt = this.canvas.firstElementChild if (!elt) return indexes @@ -119,11 +119,20 @@ class LinesEllipsis extends React.Component { let index = 0 let line = 1 let offsetTop = elt.offsetTop + let canvasWidth = this.canvas.offsetWidth + let sumElementsWidth = 0 while ((elt = elt.nextElementSibling)) { + if (elt.offsetTop === offsetTop) { + sumElementsWidth += elt.offsetWidth + } if (elt.offsetTop > offsetTop) { line++ indexes.push(index) offsetTop = elt.offsetTop + sumElementsWidth = 0 + } else if (sumElementsWidth > canvasWidth && basedOn === 'letters') { + line++ + indexes.push(index) } index++ if (line > this.maxLine) {