mirror of
https://github.com/zulip/zulip.git
synced 2025-11-08 07:52:19 +00:00
There were some notable bug fixes between those versions. We are still far behind the current version (1.3.0). For the node stuff, I used npm update. Then for static/third/handlebars/handlebars.runtime.js, I copied the node version then added back the copyright. (imported from commit 59bcd2c52540ff88bba2f90cced809cfcb8cd92b)
84 lines
2.0 KiB
JavaScript
84 lines
2.0 KiB
JavaScript
exports.attach = function(Handlebars) {
|
|
|
|
var toString = Object.prototype.toString;
|
|
|
|
// BEGIN(BROWSER)
|
|
|
|
var errorProps = ['description', 'fileName', 'lineNumber', 'message', 'name', 'number', 'stack'];
|
|
|
|
Handlebars.Exception = function(message) {
|
|
var tmp = Error.prototype.constructor.apply(this, arguments);
|
|
|
|
// Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work.
|
|
for (var idx = 0; idx < errorProps.length; idx++) {
|
|
this[errorProps[idx]] = tmp[errorProps[idx]];
|
|
}
|
|
};
|
|
Handlebars.Exception.prototype = new Error();
|
|
|
|
// Build out our basic SafeString type
|
|
Handlebars.SafeString = function(string) {
|
|
this.string = string;
|
|
};
|
|
Handlebars.SafeString.prototype.toString = function() {
|
|
return this.string.toString();
|
|
};
|
|
|
|
var escape = {
|
|
"&": "&",
|
|
"<": "<",
|
|
">": ">",
|
|
'"': """,
|
|
"'": "'",
|
|
"`": "`"
|
|
};
|
|
|
|
var badChars = /[&<>"'`]/g;
|
|
var possible = /[&<>"'`]/;
|
|
|
|
var escapeChar = function(chr) {
|
|
return escape[chr] || "&";
|
|
};
|
|
|
|
Handlebars.Utils = {
|
|
extend: function(obj, value) {
|
|
for(var key in value) {
|
|
if(value.hasOwnProperty(key)) {
|
|
obj[key] = value[key];
|
|
}
|
|
}
|
|
},
|
|
|
|
escapeExpression: function(string) {
|
|
// don't escape SafeStrings, since they're already safe
|
|
if (string instanceof Handlebars.SafeString) {
|
|
return string.toString();
|
|
} else if (string == null || string === false) {
|
|
return "";
|
|
}
|
|
|
|
// Force a string conversion as this will be done by the append regardless and
|
|
// the regex test will do this transparently behind the scenes, causing issues if
|
|
// an object's to string has escaped characters in it.
|
|
string = string.toString();
|
|
|
|
if(!possible.test(string)) { return string; }
|
|
return string.replace(badChars, escapeChar);
|
|
},
|
|
|
|
isEmpty: function(value) {
|
|
if (!value && value !== 0) {
|
|
return true;
|
|
} else if(toString.call(value) === "[object Array]" && value.length === 0) {
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
};
|
|
|
|
// END(BROWSER)
|
|
|
|
return Handlebars;
|
|
};
|