52 lines
No EOL
1.4 KiB
JavaScript
52 lines
No EOL
1.4 KiB
JavaScript
import { HIGHLIGHT_PRE_TAG, HIGHLIGHT_POST_TAG } from '../constants';
|
|
|
|
/**
|
|
* Creates a data structure that allows to concatenate similar highlighting
|
|
* parts in a single value.
|
|
*/
|
|
function createAttributeSet() {
|
|
var initialValue = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : [];
|
|
var value = initialValue;
|
|
return {
|
|
get: function get() {
|
|
return value;
|
|
},
|
|
add: function add(part) {
|
|
var lastPart = value[value.length - 1];
|
|
|
|
if ((lastPart === null || lastPart === void 0 ? void 0 : lastPart.isHighlighted) === part.isHighlighted) {
|
|
value[value.length - 1] = {
|
|
value: lastPart.value + part.value,
|
|
isHighlighted: lastPart.isHighlighted
|
|
};
|
|
} else {
|
|
value.push(part);
|
|
}
|
|
}
|
|
};
|
|
}
|
|
|
|
export function parseAttribute(_ref) {
|
|
var highlightedValue = _ref.highlightedValue;
|
|
var preTagParts = highlightedValue.split(HIGHLIGHT_PRE_TAG);
|
|
var firstValue = preTagParts.shift();
|
|
var parts = createAttributeSet(firstValue ? [{
|
|
value: firstValue,
|
|
isHighlighted: false
|
|
}] : []);
|
|
preTagParts.forEach(function (part) {
|
|
var postTagParts = part.split(HIGHLIGHT_POST_TAG);
|
|
parts.add({
|
|
value: postTagParts[0],
|
|
isHighlighted: true
|
|
});
|
|
|
|
if (postTagParts[1] !== '') {
|
|
parts.add({
|
|
value: postTagParts[1],
|
|
isHighlighted: false
|
|
});
|
|
}
|
|
});
|
|
return parts.get();
|
|
} |