Add logic to create loop label tooltip message

This commit is contained in:
Thibaud Colas 2016-07-31 17:46:11 +03:00
parent a67b1c6cfb
commit 26779038aa
2 changed files with 93 additions and 0 deletions

View File

@ -265,6 +265,74 @@ describe('parser/javascript/repeat.js', function() {
}); });
describe('tooltip property', function() {
beforeEach(function() {
this.node = new javascript.Parser('*').__consume__repeat();
});
_.each([
{
minimum: 1,
maximum: -1,
tooltip: undefined
},
{
minimum: 0,
maximum: 0,
tooltip: undefined
},
{
minimum: 2,
maximum: -1,
tooltip: 'repeats 2+ times in total'
},
{
minimum: 3,
maximum: -1,
tooltip: 'repeats 3+ times in total'
},
{
minimum: 0,
maximum: 2,
tooltip: 'repeats at most 2 times in total'
},
{
minimum: 0,
maximum: 3,
tooltip: 'repeats at most 3 times in total'
},
{
minimum: 2,
maximum: 2,
tooltip: 'repeats 2 times in total'
},
{
minimum: 3,
maximum: 3,
tooltip: 'repeats 3 times in total'
},
{
minimum: 2,
maximum: 3,
tooltip: 'repeats 2\u20263 times in total'
},
{
minimum: 3,
maximum: 4,
tooltip: 'repeats 3\u20264 times in total'
}
], t => {
it(`is "${t.tooltip}" when minimum=${t.minimum} and maximum=${t.maximum}`, function() {
this.node.minimum = t.minimum;
this.node.maximum = t.maximum;
expect(this.node.tooltip).toEqual(t.tooltip);
});
});
});
describe('#skipPath', function() { describe('#skipPath', function() {
beforeEach(function() { beforeEach(function() {

View File

@ -47,6 +47,31 @@ export default {
} }
} }
} }
},
// Tooltip to place of loop path label to provide further details.
tooltip: {
get: function() {
let repeatCount;
if (this.minimum === this.maximum) {
if (this.minimum === 0) {
repeatCount = undefined;
} else {
repeatCount = formatTimes(this.minimum);
}
} else if (this.minimum <= 1 && this.maximum >= 2) {
repeatCount = `at most ${formatTimes(this.maximum)}`;
} else if (this.minimum >= 2) {
if (this.maximum === -1) {
repeatCount = `${this.minimum}+ times`;
} else {
repeatCount = `${this.minimum}\u2026${formatTimes(this.maximum)}`;
}
}
console.log(repeatCount, this.minimum, this.maximum);
return repeatCount ? `repeats ${repeatCount} in total` : repeatCount;
}
} }
}, },