You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 

93 lines
3.4 KiB

// Generated by CoffeeScript 1.4.0
(function() {
var balUtilFlow, balUtilHTML,
__slice = [].slice;
balUtilFlow = (typeof require === "function" ? require(__dirname + '/flow') : void 0) || this.balUtilFlow;
balUtilHTML = {
getAttribute: function(attributes, attribute) {
var match, regex, value;
regex = new RegExp("(" + attribute + ")\\s*=\\s*('[^']+'|\\\"[^\\\"]+\\\"|[^'\\\"\\s]\\S*)", 'ig');
value = null;
while (match = regex.exec(attributes)) {
value = match[2].trim().replace(/(^['"]\s*|\s*['"]$)/g, '');
}
return value;
},
detectIndentation: function(source) {
var indentation, result;
result = /\n([ \t]*)\S/m.exec(source);
indentation = (result != null ? result[1] : void 0) || '';
return indentation;
},
removeIndentation: function(source) {
var indentation, regex, regexString, result;
indentation = balUtilHTML.detectIndentation(source);
regexString = indentation.replace(/\t/g, '\\t');
regex = new RegExp("^" + regexString, 'gm');
result = source.replace(regex, '').trim();
return result;
},
replaceElement: function() {
var args, element, html, regex, removeIndentation, replace, result, _ref;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (args.length === 1) {
_ref = args[0], html = _ref.html, element = _ref.element, removeIndentation = _ref.removeIndentation, replace = _ref.replace;
} else {
html = args[0], element = args[1], replace = args[2];
}
regex = new RegExp("<(" + element + "(?:\\:[-:_a-z0-9]+)?)(\\s+[^>]+)?>([\\s\\S]+?)<\\/\\1>", 'ig');
result = html.replace(regex, function(outerHTML, element, attributes, innerHTML) {
if (removeIndentation !== false) {
innerHTML = balUtilHTML.removeIndentation(innerHTML);
}
return replace(outerHTML, element, attributes, innerHTML);
});
return result;
},
replaceElementAsync: function() {
var args, element, html, next, removeIndentation, replace, result, tasks, _ref;
args = 1 <= arguments.length ? __slice.call(arguments, 0) : [];
if (args.length === 1) {
_ref = args[0], html = _ref.html, element = _ref.element, removeIndentation = _ref.removeIndentation, replace = _ref.replace, next = _ref.next;
} else {
html = args[0], element = args[1], replace = args[2], next = args[3];
}
tasks = new balUtilFlow.Group(function(err) {
if (err) {
return next(err);
}
return next(null, result);
});
result = balUtilHTML.replaceElement({
html: html,
element: element,
removeIndentation: removeIndentation,
replace: function(outerHTML, element, attributes, innerHTML) {
var random;
random = Math.random();
tasks.push(function(complete) {
return replace(outerHTML, element, attributes, innerHTML, function(err, replaceElementResult) {
if (err) {
return complete(err);
}
result = result.replace(random, replaceElementResult);
return complete();
});
});
return random;
}
});
tasks.sync();
return this;
}
};
if (typeof module !== "undefined" && module !== null) {
module.exports = balUtilHTML;
} else {
this.balUtilHTML = balUtilHTML;
}
}).call(this);