mirror of
/repos/Prototyper.git
synced 2025-12-30 06:31:32 +01:00
69 lines
1.5 KiB
JavaScript
69 lines
1.5 KiB
JavaScript
var when = require('when');
|
|
var _ = require('underscore');
|
|
|
|
var marker_prefix = '<!--\\s*@@';
|
|
var marker_postfix = '\\s*-->';
|
|
|
|
function replace(text, marker, getReplacement, once) {
|
|
var deferred = when.defer();
|
|
var regExp = new RegExp(marker_prefix + marker + marker_postfix, 'gmi');
|
|
var matches = text.match(regExp);
|
|
if (matches) {
|
|
if (once) {
|
|
matches = [matches[0]];
|
|
}
|
|
var match_promises = [];
|
|
_.forEach(matches, function (result) {
|
|
var deferred2 = when.defer();
|
|
match_promises.push(deferred2.promise);
|
|
getReplacement(result, function (err, replacement) {
|
|
if (err) {
|
|
deferred2.reject(err);
|
|
} else {
|
|
var replace_result ={
|
|
regExp: replacement.regExp || regExp,
|
|
replacement: replacement.value
|
|
};
|
|
deferred2.resolve(replace_result)
|
|
}
|
|
})
|
|
});
|
|
when.all(
|
|
match_promises,
|
|
function onSuccess(results) {
|
|
deferred.resolve(results);
|
|
},
|
|
function onFailure(err) {
|
|
deferred.reject(err);
|
|
}
|
|
);
|
|
} else {
|
|
deferred.resolve({});
|
|
}
|
|
return deferred.promise;
|
|
}
|
|
|
|
function handTextManipulation(text, promises, handler, callback) {
|
|
when.all(
|
|
promises,
|
|
function onSuccess(all_results) {
|
|
_.forEach(all_results, function (results) {
|
|
_.forEach(results, function (result) {
|
|
text = handler( text, result);
|
|
});
|
|
});
|
|
return callback(null, text);
|
|
},
|
|
function onFailure(err) {
|
|
return callback(err);
|
|
}
|
|
)
|
|
}
|
|
|
|
module.exports = {
|
|
marker_prefix: marker_prefix,
|
|
marker_postfix: marker_postfix,
|
|
replace: replace,
|
|
handTextManipulation: handTextManipulation
|
|
};
|