2014-11-30 22:54:12 +00:00
|
|
|
import _ from 'lodash';
|
2014-12-13 14:09:58 +00:00
|
|
|
import Q from 'q';
|
2014-11-30 22:54:12 +00:00
|
|
|
import Base from './base.js';
|
|
|
|
|
|
|
|
export default _.extend({}, Base, {
|
2014-12-03 01:10:56 +00:00
|
|
|
type: 'match',
|
2014-12-03 02:02:48 +00:00
|
|
|
|
2014-12-11 00:01:57 +00:00
|
|
|
_render() {
|
2014-12-13 17:28:16 +00:00
|
|
|
var start, end,
|
|
|
|
parts = this.parts(),
|
|
|
|
partPromises;
|
2014-12-03 02:02:48 +00:00
|
|
|
|
2014-12-11 00:58:36 +00:00
|
|
|
if (this.anchorStart()) {
|
2014-12-13 17:28:16 +00:00
|
|
|
start = this.renderLabel('Start of line').then(label => {
|
|
|
|
return label.addClass('anchor');
|
|
|
|
});
|
2014-12-11 00:58:36 +00:00
|
|
|
}
|
2014-12-10 21:52:57 +00:00
|
|
|
|
2014-12-11 00:58:36 +00:00
|
|
|
if (this.anchorEnd()) {
|
2014-12-13 17:28:16 +00:00
|
|
|
end = this.renderLabel('End of line').then(label => {
|
|
|
|
return label.addClass('anchor');
|
|
|
|
});
|
2014-12-11 00:58:36 +00:00
|
|
|
}
|
2014-12-03 02:02:48 +00:00
|
|
|
|
2014-12-13 17:28:16 +00:00
|
|
|
if (start || end || parts.length !== 1) {
|
|
|
|
partPromises = _.map(parts, (function(part) {
|
2014-12-13 14:09:58 +00:00
|
|
|
return part.render(this.container.group());
|
2014-12-13 17:28:16 +00:00
|
|
|
}).bind(this));
|
|
|
|
|
2014-12-13 17:55:03 +00:00
|
|
|
return Q.all(_([start, partPromises, end]).flatten().compact().value())
|
|
|
|
.then(((items) => {
|
|
|
|
this.spaceHorizontally(items, {
|
|
|
|
padding: 10
|
|
|
|
});
|
|
|
|
}).bind(this));
|
2014-12-10 21:52:57 +00:00
|
|
|
} else {
|
2014-12-13 17:28:16 +00:00
|
|
|
return this.proxy(parts[0]);
|
2014-12-03 02:02:48 +00:00
|
|
|
}
|
|
|
|
},
|
|
|
|
|
2014-12-09 23:08:40 +00:00
|
|
|
anchorStart() {
|
2014-12-03 02:02:48 +00:00
|
|
|
return this._anchor_start.textValue !== '';
|
|
|
|
},
|
|
|
|
|
2014-12-09 23:08:40 +00:00
|
|
|
anchorEnd() {
|
2014-12-03 02:02:48 +00:00
|
|
|
return this._anchor_end.textValue !== '';
|
|
|
|
},
|
|
|
|
|
|
|
|
parts() {
|
|
|
|
return _.reduce(this._parts.elements, function(result, node) {
|
2014-12-11 01:11:51 +00:00
|
|
|
var last = _.last(result);
|
|
|
|
|
|
|
|
if (last && node.elements[0].type === 'literal' && node.elements[1].textValue === '' && last.elements[0].type === 'literal' && last.elements[1].textValue === '') {
|
|
|
|
last.textValue += node.textValue;
|
|
|
|
last.elements[0].textValue += node.elements[0].textValue;
|
|
|
|
last.elements[0].literal.textValue += node.elements[0].literal.textValue;
|
|
|
|
} else {
|
|
|
|
result.push(node);
|
2014-12-03 02:02:48 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
return result;
|
|
|
|
}, []);
|
|
|
|
}
|
2014-11-30 22:54:12 +00:00
|
|
|
});
|