1
0
mirror of /repos/Prototyper.git synced 2025-12-30 06:31:32 +01:00
Prototyper/helpers.js
Aiko Mastboom 96f2c2cb46 bugfix
2013-04-20 17:58:59 +02:00

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
};