nsn-comp
Version:
NSN核心组件
81 lines (63 loc) • 1.8 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.bisection = void 0;
var _nsnUtil = require("nsn-util");
var bisection = function bisection(props) {
var targetHeight = props.targetHeight,
midIndex = props.midIndex,
beginIndex = props.beginIndex,
endIndex = props.endIndex,
text = props.text,
shadowNode = props.shadowNode,
tail = props.tail;
var suffix = tail || '...';
var begin = beginIndex;
var mid = midIndex;
var end = endIndex;
if (shadowNode) {
shadowNode.innerHTML = text.substring(0, mid) + suffix;
var shadowNodeHeight = shadowNode.offsetHeight; //
if (shadowNodeHeight <= targetHeight) {
shadowNode.innerHTML = text.substring(0, mid + 1) + suffix;
shadowNodeHeight = shadowNode.offsetHeight;
if (shadowNodeHeight > targetHeight || _nsnUtil.NStr.isEqual(mid, begin)) {
return mid;
} //
begin = mid;
if (end - begin === 1) {
mid = 1 + begin;
} else {
mid = Math.floor((end - begin) / 2) + begin;
}
return bisection({
targetHeight: targetHeight,
midIndex: mid,
beginIndex: begin,
endIndex: end,
text: text,
shadowNode: shadowNode
});
} //
if (mid - 1 < 0) {
return mid;
} //
shadowNode.innerHTML = text.substring(0, mid - 1) + suffix;
shadowNodeHeight = shadowNode.offsetHeight;
if (shadowNodeHeight <= targetHeight) {
return mid - 1;
}
} //
end = mid;
mid = Math.floor((end - begin) / 2) + begin;
return bisection({
targetHeight: targetHeight,
midIndex: mid,
beginIndex: begin,
endIndex: end,
text: text,
shadowNode: shadowNode
});
};
exports.bisection = bisection;