Skip to content
This repository was archived by the owner on Sep 5, 2024. It is now read-only.

Commit 1a81f0c

Browse files
committed
feat(select): truncate string to fit in single line
closes #1596
1 parent 23422f8 commit 1a81f0c

1 file changed

Lines changed: 24 additions & 2 deletions

File tree

src/components/select/select.js

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -164,12 +164,33 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming, $interpolate, $compile,
164164
syncLabelText();
165165
};
166166

167+
var lineHeight;
167168
mdSelectCtrl.setLabelText = function(text) {
168169
if (customLabel) return; // Assume that user is handling it on their own
169170
mdSelectCtrl.setIsPlaceholder(!text);
170171
var newText = text || attr.placeholder || '';
171172
var target = customLabel ? labelEl : labelEl.children().eq(0);
172-
target.text(newText);
173+
174+
if (lineHeight === undefined) {
175+
target.text('M');
176+
lineHeight = target[0].offsetHeight;
177+
}
178+
179+
var doneShrinking = false;
180+
var didShrink = false;
181+
do {
182+
target.text(newText);
183+
if (target[0].offsetHeight > lineHeight) {
184+
newText = newText.slice(0, -1);
185+
didShrink = true;
186+
} else {
187+
if (didShrink == true) {
188+
newText = newText.slice(0, -3) + '...';
189+
target.text(newText);
190+
}
191+
doneShrinking = true;
192+
}
193+
} while (!doneShrinking);
173194
};
174195

175196
mdSelectCtrl.setIsPlaceholder = function(val) {
@@ -178,9 +199,10 @@ function SelectDirective($mdSelect, $mdUtil, $mdTheming, $interpolate, $compile,
178199

179200
scope.$$postDigest(syncLabelText);
180201

202+
var selectMenuCtrl;
181203
function syncLabelText() {
182204
if (selectContainer) {
183-
var selectMenuCtrl = selectContainer.find('md-select-menu').controller('mdSelectMenu');
205+
selectMenuCtrl = selectMenuCtrl || selectContainer.find('md-select-menu').controller('mdSelectMenu');
184206
mdSelectCtrl.setLabelText(selectMenuCtrl.selectedLabels());
185207
}
186208
}

0 commit comments

Comments
 (0)