regexper-static/src/js/parser/javascript/repeat.js
2014-12-15 22:01:55 -05:00

61 lines
1.1 KiB
JavaScript

export default {
minimum() {
return this._spec.minimum();
},
maximum() {
return this._spec.maximum();
},
greedy() {
return (this._greedy.textValue === '');
},
hasSkip() {
return this.minimum() === 0;
},
hasLoop() {
return this.maximum() === -1 || this.maximum() > 1;
},
contentPosition() {
var x = 0, y = 0;
if (this.hasLoop()) {
x = 10;
}
if (this.hasSkip()) {
y = 10;
x = 15;
}
return Snap.matrix().translate(x, y);
},
label() {
var maximum = this.maximum(),
minimum = this.minimum(),
formatTimes = times => {
if (times === 1) {
return 'once';
} else {
return `${times} times`;
}
};
if (minimum >= 2 && maximum === -1) {
return `${minimum - 1}+ times`;
} else if (minimum <= 1 && maximum >= 2) {
return `at most ${formatTimes(maximum - 1)}`;
} else if (minimum >= 2 && maximum >= 2) {
if (minimum === maximum) {
return formatTimes(minimum - 1);
} else {
return `${minimum - 1}...${formatTimes(maximum - 1)}`;
}
}
}
}