var placeholderToData = {};
var dataToPlaceholder = {};
var count = 0;
- var nextPlaceholder = function() {
- return '__' + placeholderRoot + (count++) + '__';
+ var nextPlaceholder = function(metadata) {
+ return '__' + placeholderRoot + (count++) + metadata + '__';
};
- var pattern = '(__' + placeholderRoot + '\\d{1,}__)';
+ var pattern = '(__' + placeholderRoot + '\\d{1,}\\(?[^_\\)]*\\)?__)';
return {
placeholderPattern: pattern,
placeholderRegExp: new RegExp(pattern, 'g'),
- store: function(data) {
- var placeholder = dataToPlaceholder[data];
- if (!placeholder) {
- placeholder = nextPlaceholder();
- placeholderToData[placeholder] = data;
- dataToPlaceholder[data] = placeholder;
- }
+ store: function(data, metadata) {
+ var encodedMetadata = metadata ?
+ '(' + metadata.join(',') + ')' :
+ '';
+
+ var placeholder = nextPlaceholder(encodedMetadata);
+ placeholderToData[placeholder] = data;
+ dataToPlaceholder[data] = placeholder;
return placeholder;
},
vows.describe('escape-store')
.addBatch({
- 'data': {
+ 'no metadata': {
topic: new EscapeStore('TEST'),
store: function (escapeStore) {
var placeholder = escapeStore.store('data');
var data = escapeStore.restore('__ESCAPED_TEST_CLEAN_CSS0__');
assert.equal(data, 'data');
}
+ },
+ 'with metadata': {
+ topic: new EscapeStore('TEST'),
+ store: function (escapeStore) {
+ var placeholder = escapeStore.store('data', ['brown', 'fox', 'jumped', 'over']);
+ assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__');
+ },
+ restore: function (escapeStore) {
+ var data = escapeStore.restore('__ESCAPED_TEST_CLEAN_CSS0(brown,fox,jumped,over)__');
+ assert.equal(data, 'data');
+ }
+ },
+ 'same data with different metadata': {
+ topic: new EscapeStore('TEST'),
+ 'store first': function (escapeStore) {
+ escapeStore.store('data1', [0, 1, 2]);
+ var placeholder = escapeStore.store('data1', [1, 2, 3]);
+
+ assert.equal(placeholder, '__ESCAPED_TEST_CLEAN_CSS1(1,2,3)__');
+ }
}
})
.export(module);