diff --git a/ajax/libs/clientside-haml-js/5.4/haml.js b/ajax/libs/clientside-haml-js/5.4/haml.js
new file mode 100644
index 000000000..87dab975e
--- /dev/null
+++ b/ajax/libs/clientside-haml-js/5.4/haml.js
@@ -0,0 +1,2302 @@
+// Generated by CoffeeScript 1.6.2
+/*
+ clientside HAML compiler for Javascript and Coffeescript (Version 5)
+
+ Copyright 2011-12, Ronald Holshausen (https://github.com/uglyog)
+ Released under the MIT License (http://www.opensource.org/licenses/MIT)
+*/
+
+
+(function() {
+ var Buffer, CodeGenerator, CoffeeCodeGenerator, HamlRuntime, JsCodeGenerator, ProductionJsCodeGenerator, Tokeniser, filters, haml, root, _ref,
+ __hasProp = {}.hasOwnProperty,
+ __extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; };
+
+ root = this;
+
+ /*
+ Haml runtime functions. These are used both by the compiler and the generated template functions
+ */
+
+
+ HamlRuntime = {
+ /*
+ Taken from underscore.string.js escapeHTML, and replace the apos entity with character 39 so that it renders
+ correctly in IE7
+ */
+
+ escapeHTML: function(str) {
+ return String(str || '').replace(/&/g, '&').replace(//g, '>').replace(/"/g, '"').replace(/'/g, "'");
+ },
+ /*
+ Provides the implementation to preserve the whitespace as per the HAML reference
+ */
+
+ perserveWhitespace: function(str) {
+ var i, out, re, result;
+
+ re = /<[a-zA-Z]+>[^<]*<\/[a-zA-Z]+>/g;
+ out = '';
+ i = 0;
+ result = re.exec(str);
+ if (result) {
+ while (result) {
+ out += str.substring(i, result.index);
+ out += result[0].replace(/\n/g, '
');
+ i = result.index + result[0].length;
+ result = re.exec(str);
+ }
+ out += str.substring(i);
+ } else {
+ out = str;
+ }
+ return out;
+ },
+ /*
+ Generates a error message including the current line in the source where the error occurred
+ */
+
+ templateError: function(lineNumber, characterNumber, currentLine, error) {
+ var i, message;
+
+ message = error + " at line " + lineNumber + " and character " + characterNumber + ":\n" + currentLine + '\n';
+ i = 0;
+ while (i < characterNumber - 1) {
+ message += '-';
+ i++;
+ }
+ message += '^';
+ return message;
+ },
+ /*
+ Generates the attributes for the element by combining all the various sources together
+ */
+
+ generateElementAttributes: function(context, id, classes, objRefFn, attrList, attrFunction, lineNumber, characterNumber, currentLine, handleError) {
+ var attr, attributes, className, e, ex, hash, html, object, objectId, value;
+
+ if (handleError == null) {
+ handleError = this._raiseError;
+ }
+ attributes = {};
+ attributes = this.combineAttributes(attributes, 'id', id);
+ if (classes.length > 0 && classes[0].length > 0) {
+ attributes = this.combineAttributes(attributes, 'class', classes);
+ }
+ if (attrList != null) {
+ for (attr in attrList) {
+ if (!__hasProp.call(attrList, attr)) continue;
+ value = attrList[attr];
+ attributes = this.combineAttributes(attributes, attr, value);
+ }
+ }
+ if (objRefFn != null) {
+ try {
+ object = objRefFn.call(context, context);
+ if (object != null) {
+ objectId = null;
+ if (object.id != null) {
+ objectId = object.id;
+ } else if (object.get) {
+ objectId = object.get('id');
+ }
+ attributes = this.combineAttributes(attributes, 'id', objectId);
+ className = null;
+ if (object['class']) {
+ className = object['class'];
+ } else if (object.get) {
+ className = object.get('class');
+ }
+ attributes = this.combineAttributes(attributes, 'class', className);
+ }
+ } catch (_error) {
+ e = _error;
+ handleError(haml.HamlRuntime.templateError(lineNumber, characterNumber, currentLine, "Error evaluating object reference - " + e));
+ }
+ }
+ if (attrFunction != null) {
+ try {
+ hash = attrFunction.call(context, context);
+ if (hash != null) {
+ hash = this._flattenHash(null, hash);
+ for (attr in hash) {
+ if (!__hasProp.call(hash, attr)) continue;
+ value = hash[attr];
+ attributes = this.combineAttributes(attributes, attr, value);
+ }
+ }
+ } catch (_error) {
+ ex = _error;
+ handleError(haml.HamlRuntime.templateError(lineNumber, characterNumber, currentLine, "Error evaluating attribute hash - " + ex));
+ }
+ }
+ html = '';
+ if (attributes) {
+ for (attr in attributes) {
+ if (!__hasProp.call(attributes, attr)) continue;
+ if (haml.hasValue(attributes[attr])) {
+ if ((attr === 'id' || attr === 'for') && attributes[attr] instanceof Array) {
+ html += ' ' + attr + '="' + _(attributes[attr]).flatten().join('-') + '"';
+ } else if (attr === 'class' && attributes[attr] instanceof Array) {
+ html += ' ' + attr + '="' + _(attributes[attr]).flatten().join(' ') + '"';
+ } else {
+ html += ' ' + attr + '="' + haml.attrValue(attr, attributes[attr]) + '"';
+ }
+ }
+ }
+ }
+ return html;
+ },
+ /*
+ Returns a white space string with a length of indent * 2
+ */
+
+ indentText: function(indent) {
+ var i, text;
+
+ text = '';
+ i = 0;
+ while (i < indent) {
+ text += ' ';
+ i++;
+ }
+ return text;
+ },
+ /*
+ Combines the attributes in the attributres hash with the given attribute and value
+ ID, FOR and CLASS attributes will expand to arrays when multiple values are provided
+ */
+
+ combineAttributes: function(attributes, attrName, attrValue) {
+ var classes;
+
+ if (haml.hasValue(attrValue)) {
+ if (attrName === 'id' && attrValue.toString().length > 0) {
+ if (attributes && attributes.id instanceof Array) {
+ attributes.id.unshift(attrValue);
+ } else if (attributes && attributes.id) {
+ attributes.id = [attributes.id, attrValue];
+ } else if (attributes) {
+ attributes.id = attrValue;
+ } else {
+ attributes = {
+ id: attrValue
+ };
+ }
+ } else if (attrName === 'for' && attrValue.toString().length > 0) {
+ if (attributes && attributes['for'] instanceof Array) {
+ attributes['for'].unshift(attrValue);
+ } else if (attributes && attributes['for']) {
+ attributes['for'] = [attributes['for'], attrValue];
+ } else if (attributes) {
+ attributes['for'] = attrValue;
+ } else {
+ attributes = {
+ 'for': attrValue
+ };
+ }
+ } else if (attrName === 'class') {
+ classes = [];
+ if (attrValue instanceof Array) {
+ classes = classes.concat(attrValue);
+ } else {
+ classes.push(attrValue);
+ }
+ if (attributes && attributes['class']) {
+ attributes['class'] = attributes['class'].concat(classes);
+ } else if (attributes) {
+ attributes['class'] = classes;
+ } else {
+ attributes = {
+ 'class': classes
+ };
+ }
+ } else if (attrName !== 'id') {
+ attributes || (attributes = {});
+ attributes[attrName] = attrValue;
+ }
+ }
+ return attributes;
+ },
+ /*
+ Flattens a deeply nested hash into a single hash by combining the keys with a minus
+ */
+
+ _flattenHash: function(rootKey, object) {
+ var attr, flattenedValue, key, keys, newKey, newValue, result, value;
+
+ result = {};
+ if (this._isHash(object)) {
+ for (attr in object) {
+ if (!__hasProp.call(object, attr)) continue;
+ value = object[attr];
+ keys = [];
+ if (rootKey != null) {
+ keys.push(rootKey);
+ }
+ keys.push(attr);
+ key = keys.join('-');
+ flattenedValue = this._flattenHash(key, value);
+ if (this._isHash(flattenedValue)) {
+ for (newKey in flattenedValue) {
+ if (!__hasProp.call(flattenedValue, newKey)) continue;
+ newValue = flattenedValue[newKey];
+ result[newKey] = newValue;
+ }
+ } else {
+ result[key] = flattenedValue;
+ }
+ }
+ } else if (rootKey != null) {
+ result[rootKey] = object;
+ } else {
+ result = object;
+ }
+ return result;
+ },
+ _isHash: function(object) {
+ return (object != null) && typeof object === 'object' && !(object instanceof Array || object instanceof Date);
+ },
+ _logError: function(message) {
+ return typeof console !== "undefined" && console !== null ? console.log(message) : void 0;
+ },
+ _raiseError: function(message) {
+ throw new Error(message);
+ },
+ /*
+ trims the first number of characters from a string
+ */
+
+ trim: function(str, chars) {
+ return str.substring(chars);
+ }
+ };
+
+ /*
+ HAML Tokiniser: This class is responsible for parsing the haml source into tokens
+ */
+
+
+ Tokeniser = (function() {
+ Tokeniser.prototype.currentLineMatcher = /[^\n]*/g;
+
+ Tokeniser.prototype.tokenMatchers = {
+ whitespace: /[ \t]+/g,
+ element: /%[a-zA-Z][a-zA-Z0-9]*/g,
+ idSelector: /#[a-zA-Z_\-][a-zA-Z0-9_\-]*/g,
+ classSelector: /\.[a-zA-Z0-9_\-]+/g,
+ identifier: /[a-zA-Z][a-zA-Z0-9\-]*/g,
+ quotedString: /[\'][^\'\n]*[\']/g,
+ quotedString2: /[\"][^\"\n]*[\"]/g,
+ comment: /\-#/g,
+ escapeHtml: /\&=/g,
+ unescapeHtml: /\!=/g,
+ objectReference: /\[[a-zA-Z_@][a-zA-Z0-9_]*\]/g,
+ doctype: /!!!/g,
+ continueLine: /\|\s*\n/g,
+ filter: /:\w+/g
+ };
+
+ function Tokeniser(options) {
+ var errorFn, successFn, template,
+ _this = this;
+
+ this.buffer = null;
+ this.bufferIndex = null;
+ this.prevToken = null;
+ this.token = null;
+ if (options.templateId != null) {
+ template = document.getElementById(options.templateId);
+ if (template) {
+ this.buffer = template.text;
+ this.bufferIndex = 0;
+ } else {
+ throw "Did not find a template with ID '" + options.templateId + "'";
+ }
+ } else if (options.template != null) {
+ this.buffer = options.template;
+ this.bufferIndex = 0;
+ } else if (options.templateUrl != null) {
+ errorFn = function(jqXHR, textStatus, errorThrown) {
+ throw "Failed to fetch haml template at URL " + options.templateUrl + ": " + textStatus + " " + errorThrown;
+ };
+ successFn = function(data) {
+ _this.buffer = data;
+ return _this.bufferIndex = 0;
+ };
+ jQuery.ajax({
+ url: options.templateUrl,
+ success: successFn,
+ error: errorFn,
+ dataType: 'text',
+ async: false,
+ beforeSend: function(xhr) {
+ return xhr.withCredentials = true;
+ }
+ });
+ }
+ }
+
+ /*
+ Try to match a token with the given regexp
+ */
+
+
+ Tokeniser.prototype.matchToken = function(matcher) {
+ var result;
+
+ matcher.lastIndex = this.bufferIndex;
+ result = matcher.exec(this.buffer);
+ if ((result != null ? result.index : void 0) === this.bufferIndex) {
+ return result[0];
+ }
+ };
+
+ /*
+ Match a multi-character token
+ */
+
+
+ Tokeniser.prototype.matchMultiCharToken = function(matcher, token, tokenStr) {
+ var matched, _ref;
+
+ if (!this.token) {
+ matched = this.matchToken(matcher);
+ if (matched) {
+ this.token = token;
+ this.token.tokenString = (_ref = typeof tokenStr === "function" ? tokenStr(matched) : void 0) != null ? _ref : matched;
+ this.token.matched = matched;
+ return this.advanceCharsInBuffer(matched.length);
+ }
+ }
+ };
+
+ /*
+ Match a single character token
+ */
+
+
+ Tokeniser.prototype.matchSingleCharToken = function(ch, token) {
+ if (!this.token && this.buffer.charAt(this.bufferIndex) === ch) {
+ this.token = token;
+ this.token.tokenString = ch;
+ this.token.matched = ch;
+ return this.advanceCharsInBuffer(1);
+ }
+ };
+
+ /*
+ Match and return the next token in the input buffer
+ */
+
+
+ Tokeniser.prototype.getNextToken = function() {
+ var ch, ch1, str;
+
+ if (isNaN(this.bufferIndex)) {
+ throw haml.HamlRuntime.templateError(this.lineNumber, this.characterNumber, this.currentLine, "An internal parser error has occurred in the HAML parser");
+ }
+ this.prevToken = this.token;
+ this.token = null;
+ if (this.buffer === null || this.buffer.length === this.bufferIndex) {
+ this.token = {
+ eof: true,
+ token: 'EOF'
+ };
+ } else {
+ this.initLine();
+ if (!this.token) {
+ ch = this.buffer.charCodeAt(this.bufferIndex);
+ ch1 = this.buffer.charCodeAt(this.bufferIndex + 1);
+ if (ch === 10 || (ch === 13 && ch1 === 10)) {
+ this.token = {
+ eol: true,
+ token: 'EOL'
+ };
+ if (ch === 13 && ch1 === 10) {
+ this.advanceCharsInBuffer(2);
+ this.token.matched = String.fromCharCode(ch) + String.fromCharCode(ch1);
+ } else {
+ this.advanceCharsInBuffer(1);
+ this.token.matched = String.fromCharCode(ch);
+ }
+ this.characterNumber = 0;
+ this.currentLine = this.getCurrentLine();
+ }
+ }
+ this.matchMultiCharToken(this.tokenMatchers.whitespace, {
+ ws: true,
+ token: 'WS'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.continueLine, {
+ continueLine: true,
+ token: 'CONTINUELINE'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.element, {
+ element: true,
+ token: 'ELEMENT'
+ }, function(matched) {
+ return matched.substring(1);
+ });
+ this.matchMultiCharToken(this.tokenMatchers.idSelector, {
+ idSelector: true,
+ token: 'ID'
+ }, function(matched) {
+ return matched.substring(1);
+ });
+ this.matchMultiCharToken(this.tokenMatchers.classSelector, {
+ classSelector: true,
+ token: 'CLASS'
+ }, function(matched) {
+ return matched.substring(1);
+ });
+ this.matchMultiCharToken(this.tokenMatchers.identifier, {
+ identifier: true,
+ token: 'IDENTIFIER'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.doctype, {
+ doctype: true,
+ token: 'DOCTYPE'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.filter, {
+ filter: true,
+ token: 'FILTER'
+ }, function(matched) {
+ return matched.substring(1);
+ });
+ if (!this.token) {
+ str = this.matchToken(this.tokenMatchers.quotedString);
+ if (!str) {
+ str = this.matchToken(this.tokenMatchers.quotedString2);
+ }
+ if (str) {
+ this.token = {
+ string: true,
+ token: 'STRING',
+ tokenString: str.substring(1, str.length - 1),
+ matched: str
+ };
+ this.advanceCharsInBuffer(str.length);
+ }
+ }
+ this.matchMultiCharToken(this.tokenMatchers.comment, {
+ comment: true,
+ token: 'COMMENT'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.escapeHtml, {
+ escapeHtml: true,
+ token: 'ESCAPEHTML'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.unescapeHtml, {
+ unescapeHtml: true,
+ token: 'UNESCAPEHTML'
+ });
+ this.matchMultiCharToken(this.tokenMatchers.objectReference, {
+ objectReference: true,
+ token: 'OBJECTREFERENCE'
+ }, function(matched) {
+ return matched.substring(1, matched.length - 1);
+ });
+ if (!this.token && this.buffer && this.buffer.charAt(this.bufferIndex) === '{') {
+ this.matchJavascriptHash();
+ }
+ this.matchSingleCharToken('(', {
+ openBracket: true,
+ token: 'OPENBRACKET'
+ });
+ this.matchSingleCharToken(')', {
+ closeBracket: true,
+ token: 'CLOSEBRACKET'
+ });
+ this.matchSingleCharToken('=', {
+ equal: true,
+ token: 'EQUAL'
+ });
+ this.matchSingleCharToken('/', {
+ slash: true,
+ token: 'SLASH'
+ });
+ this.matchSingleCharToken('!', {
+ exclamation: true,
+ token: 'EXCLAMATION'
+ });
+ this.matchSingleCharToken('-', {
+ minus: true,
+ token: 'MINUS'
+ });
+ this.matchSingleCharToken('&', {
+ amp: true,
+ token: 'AMP'
+ });
+ this.matchSingleCharToken('<', {
+ lt: true,
+ token: 'LT'
+ });
+ this.matchSingleCharToken('>', {
+ gt: true,
+ token: 'GT'
+ });
+ this.matchSingleCharToken('~', {
+ tilde: true,
+ token: 'TILDE'
+ });
+ if (this.token === null) {
+ this.token = {
+ unknown: true,
+ token: 'UNKNOWN',
+ matched: this.buffer.charAt(this.bufferIndex)
+ };
+ this.advanceCharsInBuffer(1);
+ }
+ }
+ return this.token;
+ };
+
+ /*
+ Look ahead a number of tokens and return the token found
+ */
+
+
+ Tokeniser.prototype.lookAhead = function(numberOfTokens) {
+ var bufferIndex, characterNumber, currentLine, currentToken, i, lineNumber, prevToken, token;
+
+ token = null;
+ if (numberOfTokens > 0) {
+ currentToken = this.token;
+ prevToken = this.prevToken;
+ currentLine = this.currentLine;
+ lineNumber = this.lineNumber;
+ characterNumber = this.characterNumber;
+ bufferIndex = this.bufferIndex;
+ i = 0;
+ while (i++ < numberOfTokens) {
+ token = this.getNextToken();
+ }
+ this.token = currentToken;
+ this.prevToken = prevToken;
+ this.currentLine = currentLine;
+ this.lineNumber = lineNumber;
+ this.characterNumber = characterNumber;
+ this.bufferIndex = bufferIndex;
+ }
+ return token;
+ };
+
+ /*
+ Initilise the line and character counters
+ */
+
+
+ Tokeniser.prototype.initLine = function() {
+ if (!this.currentLine && this.currentLine !== "") {
+ this.currentLine = this.getCurrentLine();
+ this.lineNumber = 1;
+ return this.characterNumber = 0;
+ }
+ };
+
+ /*
+ Returns the current line in the input buffer
+ */
+
+
+ Tokeniser.prototype.getCurrentLine = function(index) {
+ var line;
+
+ this.currentLineMatcher.lastIndex = this.bufferIndex + (index != null ? index : 0);
+ line = this.currentLineMatcher.exec(this.buffer);
+ if (line) {
+ return line[0];
+ } else {
+ return '';
+ }
+ };
+
+ /*
+ Returns an error string filled out with the line and character counters
+ */
+
+
+ Tokeniser.prototype.parseError = function(error) {
+ return haml.HamlRuntime.templateError(this.lineNumber, this.characterNumber, this.currentLine, error);
+ };
+
+ /*
+ Skips to the end of the line and returns the string that was skipped
+ */
+
+
+ Tokeniser.prototype.skipToEOLorEOF = function() {
+ var contents, line, text;
+
+ text = '';
+ if (!(this.token.eof || this.token.eol)) {
+ if (this.token.matched != null) {
+ text += this.token.matched;
+ }
+ this.currentLineMatcher.lastIndex = this.bufferIndex;
+ line = this.currentLineMatcher.exec(this.buffer);
+ if (line && line.index === this.bufferIndex) {
+ contents = (_.str || _).rtrim(line[0]);
+ if ((_.str || _).endsWith(contents, '|')) {
+ text += contents.substring(0, contents.length - 1);
+ this.advanceCharsInBuffer(contents.length - 1);
+ this.getNextToken();
+ text += this.parseMultiLine();
+ } else {
+ text += line[0];
+ this.advanceCharsInBuffer(line[0].length);
+ this.getNextToken();
+ }
+ }
+ }
+ return text;
+ };
+
+ /*
+ Parses a multiline code block and returns the parsed text
+ */
+
+
+ Tokeniser.prototype.parseMultiLine = function() {
+ var contents, line, text;
+
+ text = '';
+ while (this.token.continueLine) {
+ this.currentLineMatcher.lastIndex = this.bufferIndex;
+ line = this.currentLineMatcher.exec(this.buffer);
+ if (line && line.index === this.bufferIndex) {
+ contents = (_.str || _).rtrim(line[0]);
+ if ((_.str || _).endsWith(contents, '|')) {
+ text += contents.substring(0, contents.length - 1);
+ this.advanceCharsInBuffer(contents.length - 1);
+ }
+ this.getNextToken();
+ }
+ }
+ return text;
+ };
+
+ /*
+ Advances the input buffer pointer by a number of characters, updating the line and character counters
+ */
+
+
+ Tokeniser.prototype.advanceCharsInBuffer = function(numChars) {
+ var ch, ch1, i;
+
+ i = 0;
+ while (i < numChars) {
+ ch = this.buffer.charCodeAt(this.bufferIndex + i);
+ ch1 = this.buffer.charCodeAt(this.bufferIndex + i + 1);
+ if (ch === 13 && ch1 === 10) {
+ this.lineNumber++;
+ this.characterNumber = 0;
+ this.currentLine = this.getCurrentLine(i);
+ i++;
+ } else if (ch === 10) {
+ this.lineNumber++;
+ this.characterNumber = 0;
+ this.currentLine = this.getCurrentLine(i);
+ } else {
+ this.characterNumber++;
+ }
+ i++;
+ }
+ return this.bufferIndex += numChars;
+ };
+
+ /*
+ Returns the current line and character counters
+ */
+
+
+ Tokeniser.prototype.currentParsePoint = function() {
+ return {
+ lineNumber: this.lineNumber,
+ characterNumber: this.characterNumber,
+ currentLine: this.currentLine
+ };
+ };
+
+ /*
+ Pushes back the current token onto the front of the input buffer
+ */
+
+
+ Tokeniser.prototype.pushBackToken = function() {
+ if (!this.token.eof) {
+ this.bufferIndex -= this.token.matched.length;
+ return this.token = this.prevToken;
+ }
+ };
+
+ /*
+ Is the current token an end of line or end of input buffer
+ */
+
+
+ Tokeniser.prototype.isEolOrEof = function() {
+ return this.token.eol || this.token.eof;
+ };
+
+ /*
+ Match a Javascript Hash {...}
+ */
+
+
+ Tokeniser.prototype.matchJavascriptHash = function() {
+ var braceCount, ch, chCode, characterNumberStart, currentIndent, i, lineNumberStart;
+
+ currentIndent = this.calculateCurrentIndent();
+ i = this.bufferIndex + 1;
+ characterNumberStart = this.characterNumber;
+ lineNumberStart = this.lineNumber;
+ braceCount = 1;
+ while (i < this.buffer.length && (braceCount > 1 || this.buffer.charAt(i) !== '}')) {
+ ch = this.buffer.charAt(i);
+ chCode = this.buffer.charCodeAt(i);
+ if (ch === '{') {
+ braceCount++;
+ i++;
+ } else if (ch === '}') {
+ braceCount--;
+ i++;
+ } else if (chCode === 10 || chCode === 13) {
+ i++;
+ } else {
+ i++;
+ }
+ }
+ if (i === this.buffer.length) {
+ this.characterNumber = characterNumberStart + 1;
+ this.lineNumber = lineNumberStart;
+ throw this.parseError('Error parsing attribute hash - Did not find a terminating "}"');
+ } else {
+ this.token = {
+ attributeHash: true,
+ token: 'ATTRHASH',
+ tokenString: this.buffer.substring(this.bufferIndex, i + 1),
+ matched: this.buffer.substring(this.bufferIndex, i + 1)
+ };
+ return this.advanceCharsInBuffer(i - this.bufferIndex + 1);
+ }
+ };
+
+ /*
+ Calculate the indent value of the current line
+ */
+
+
+ Tokeniser.prototype.calculateCurrentIndent = function() {
+ var result;
+
+ this.tokenMatchers.whitespace.lastIndex = 0;
+ result = this.tokenMatchers.whitespace.exec(this.currentLine);
+ if ((result != null ? result.index : void 0) === 0) {
+ return this.calculateIndent(result[0]);
+ } else {
+ return 0;
+ }
+ };
+
+ /*
+ Calculate the indent level of the provided whitespace
+ */
+
+
+ Tokeniser.prototype.calculateIndent = function(whitespace) {
+ var i, indent;
+
+ indent = 0;
+ i = 0;
+ while (i < whitespace.length) {
+ if (whitespace.charCodeAt(i) === 9) {
+ indent += 2;
+ } else {
+ indent++;
+ }
+ i++;
+ }
+ return Math.floor((indent + 1) / 2);
+ };
+
+ return Tokeniser;
+
+ })();
+
+ /*
+ Provides buffering between the generated javascript and html contents
+ */
+
+
+ Buffer = (function() {
+ function Buffer(generator) {
+ this.generator = generator;
+ this.buffer = '';
+ this.outputBuffer = '';
+ }
+
+ Buffer.prototype.append = function(str) {
+ if ((this.generator != null) && this.buffer.length === 0) {
+ this.generator.mark();
+ }
+ if ((str != null ? str.length : void 0) > 0) {
+ return this.buffer += str;
+ }
+ };
+
+ Buffer.prototype.appendToOutputBuffer = function(str) {
+ if ((str != null ? str.length : void 0) > 0) {
+ this.flush();
+ return this.outputBuffer += str;
+ }
+ };
+
+ Buffer.prototype.flush = function() {
+ var _ref;
+
+ if (((_ref = this.buffer) != null ? _ref.length : void 0) > 0) {
+ this.outputBuffer += this.generator.generateFlush(this.buffer);
+ }
+ return this.buffer = '';
+ };
+
+ Buffer.prototype.output = function() {
+ return this.outputBuffer;
+ };
+
+ Buffer.prototype.trimWhitespace = function() {
+ var ch, i;
+
+ if (this.buffer.length > 0) {
+ i = this.buffer.length - 1;
+ while (i > 0) {
+ ch = this.buffer.charAt(i);
+ if (this._isWhitespace(ch)) {
+ i--;
+ } else if (i > 1 && (ch === 'n' || ch === 't') && (this.buffer.charAt(i - 1) === '\\')) {
+ i -= 2;
+ } else {
+ break;
+ }
+ }
+ if (i > 0 && i < this.buffer.length - 1) {
+ return this.buffer = this.buffer.substring(0, i + 1);
+ } else if (i === 0 && this._isWhitespace(this.buffer.charAt(0))) {
+ return this.buffer = '';
+ }
+ }
+ };
+
+ Buffer.prototype._isWhitespace = function(ch) {
+ return ch === ' ' || ch === '\t' || ch === '\n';
+ };
+
+ return Buffer;
+
+ })();
+
+ /*
+ Common code shared across all code generators
+ */
+
+
+ CodeGenerator = (function() {
+ function CodeGenerator() {}
+
+ CodeGenerator.prototype.embeddedCodeBlockMatcher = /#{([^}]*)}/g;
+
+ return CodeGenerator;
+
+ })();
+
+ /*
+ Code generator that generates a Javascript function body
+ */
+
+
+ JsCodeGenerator = (function(_super) {
+ __extends(JsCodeGenerator, _super);
+
+ function JsCodeGenerator(options) {
+ this.options = options;
+ this.outputBuffer = new haml.Buffer(this);
+ }
+
+ /*
+ Append a line with embedded javascript code
+ */
+
+
+ JsCodeGenerator.prototype.appendEmbeddedCode = function(indentText, expression, escapeContents, perserveWhitespace, currentParsePoint) {
+ this.outputBuffer.flush();
+ this.outputBuffer.appendToOutputBuffer(indentText + 'try {\n');
+ this.outputBuffer.appendToOutputBuffer(indentText + ' var value = eval("' + (_.str || _).trim(expression).replace(/"/g, '\\"').replace(/\\n/g, '\\\\n') + '");\n');
+ this.outputBuffer.appendToOutputBuffer(indentText + ' value = value === null ? "" : value;');
+ if (escapeContents) {
+ this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(haml.HamlRuntime.escapeHTML(String(value)));\n');
+ } else if (perserveWhitespace) {
+ this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(haml.HamlRuntime.perserveWhitespace(String(value)));\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(String(value));\n');
+ }
+ this.outputBuffer.appendToOutputBuffer(indentText + '} catch (e) {\n');
+ this.outputBuffer.appendToOutputBuffer(indentText + ' handleError(haml.HamlRuntime.templateError(' + currentParsePoint.lineNumber + ', ' + currentParsePoint.characterNumber + ', "' + this.escapeCode(currentParsePoint.currentLine) + '",\n');
+ this.outputBuffer.appendToOutputBuffer(indentText + ' "Error evaluating expression - " + e));\n');
+ return this.outputBuffer.appendToOutputBuffer(indentText + '}\n');
+ };
+
+ /*
+ Initilising the output buffer with any variables or code
+ */
+
+
+ JsCodeGenerator.prototype.initOutput = function() {
+ var _ref;
+
+ if ((_ref = this.options) != null ? _ref.tolerateFaults : void 0) {
+ this.outputBuffer.appendToOutputBuffer(' var handleError = haml.HamlRuntime._logError;');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(' var handleError = haml.HamlRuntime._raiseError;');
+ }
+ return this.outputBuffer.appendToOutputBuffer('var html = [];\nvar hashFunction = null, hashObject = null, objRef = null, objRefFn = null;\nwith (context || {}) {');
+ };
+
+ /*
+ Flush and close the output buffer and return the contents
+ */
+
+
+ JsCodeGenerator.prototype.closeAndReturnOutput = function() {
+ this.outputBuffer.flush();
+ return this.outputBuffer.output() + ' }\n return html.join("");\n';
+ };
+
+ /*
+ Append a line of code to the output buffer
+ */
+
+
+ JsCodeGenerator.prototype.appendCodeLine = function(line, eol) {
+ this.outputBuffer.flush();
+ this.outputBuffer.appendToOutputBuffer(HamlRuntime.indentText(this.indent));
+ this.outputBuffer.appendToOutputBuffer(line);
+ return this.outputBuffer.appendToOutputBuffer(eol);
+ };
+
+ /*
+ Does the current line end with a function declaration?
+ */
+
+
+ JsCodeGenerator.prototype.lineMatchesStartFunctionBlock = function(line) {
+ return line.match(/function\s*\((,?\s*\w+)*\)\s*\{\s*$/);
+ };
+
+ /*
+ Does the current line end with a starting code block
+ */
+
+
+ JsCodeGenerator.prototype.lineMatchesStartBlock = function(line) {
+ return line.match(/\{\s*$/);
+ };
+
+ /*
+ Generate the code to close off a code block
+ */
+
+
+ JsCodeGenerator.prototype.closeOffCodeBlock = function(tokeniser) {
+ if (!(tokeniser.token.minus && tokeniser.matchToken(/\s*\}/g))) {
+ this.outputBuffer.flush();
+ return this.outputBuffer.appendToOutputBuffer(HamlRuntime.indentText(this.indent) + '}\n');
+ }
+ };
+
+ /*
+ Generate the code to close off a function parameter
+ */
+
+
+ JsCodeGenerator.prototype.closeOffFunctionBlock = function(tokeniser) {
+ if (!(tokeniser.token.minus && tokeniser.matchToken(/\s*\}/g))) {
+ this.outputBuffer.flush();
+ return this.outputBuffer.appendToOutputBuffer(HamlRuntime.indentText(this.indent) + '});\n');
+ }
+ };
+
+ /*
+ Generate the code for dynamic attributes ({} form)
+ */
+
+
+ JsCodeGenerator.prototype.generateCodeForDynamicAttributes = function(id, classes, attributeList, attributeHash, objectRef, currentParsePoint) {
+ this.outputBuffer.flush();
+ if (attributeHash.length > 0) {
+ attributeHash = this.replaceReservedWordsInHash(attributeHash);
+ this.outputBuffer.appendToOutputBuffer(' hashFunction = function () { return eval("hashObject = ' + attributeHash.replace(/"/g, '\\"').replace(/\n/g, '\\n') + '"); };\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(' hashFunction = null;\n');
+ }
+ if (objectRef.length > 0) {
+ this.outputBuffer.appendToOutputBuffer(' objRefFn = function () { return eval("objRef = ' + objectRef.replace(/"/g, '\\"') + '"); };\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(' objRefFn = null;\n');
+ }
+ return this.outputBuffer.appendToOutputBuffer(' html.push(haml.HamlRuntime.generateElementAttributes(context, "' + id + '", ["' + classes.join('","') + '"], objRefFn, ' + JSON.stringify(attributeList) + ', hashFunction, ' + currentParsePoint.lineNumber + ', ' + currentParsePoint.characterNumber + ', "' + this.escapeCode(currentParsePoint.currentLine) + '", handleError));\n');
+ };
+
+ /*
+ Clean any reserved words in the given hash
+ */
+
+
+ JsCodeGenerator.prototype.replaceReservedWordsInHash = function(hash) {
+ var reservedWord, resultHash, _i, _len, _ref;
+
+ resultHash = hash;
+ _ref = ['class', 'for'];
+ for (_i = 0, _len = _ref.length; _i < _len; _i++) {
+ reservedWord = _ref[_i];
+ resultHash = resultHash.replace(reservedWord + ':', '"' + reservedWord + '":');
+ }
+ return resultHash;
+ };
+
+ /*
+ Escape the line so it is safe to put into a javascript string
+ */
+
+
+ JsCodeGenerator.prototype.escapeCode = function(jsStr) {
+ return jsStr.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '\\n').replace(/\r/g, '\\r');
+ };
+
+ /*
+ Generate a function from the function body
+ */
+
+
+ JsCodeGenerator.prototype.generateJsFunction = function(functionBody) {
+ var e;
+
+ try {
+ return new Function('context', functionBody);
+ } catch (_error) {
+ e = _error;
+ throw "Incorrect embedded code has resulted in an invalid Haml function - " + e + "\nGenerated Function:\n" + functionBody;
+ }
+ };
+
+ /*
+ Generate the code required to support a buffer flush
+ */
+
+
+ JsCodeGenerator.prototype.generateFlush = function(bufferStr) {
+ return ' html.push("' + this.escapeCode(bufferStr) + '");\n';
+ };
+
+ /*
+ Set the current indent level
+ */
+
+
+ JsCodeGenerator.prototype.setIndent = function(indent) {
+ return this.indent = indent;
+ };
+
+ /*
+ Save the current indent level if required
+ */
+
+
+ JsCodeGenerator.prototype.mark = function() {};
+
+ /*
+ Append the text contents to the buffer, expanding any embedded code
+ */
+
+
+ JsCodeGenerator.prototype.appendTextContents = function(text, shouldInterpolate, currentParsePoint, options) {
+ if (options == null) {
+ options = {};
+ }
+ if (shouldInterpolate && text.match(/#{[^}]*}/)) {
+ return this.interpolateString(text, currentParsePoint, options);
+ } else {
+ return this.outputBuffer.append(this.processText(text, options));
+ }
+ };
+
+ /*
+ Interpolate any embedded code in the text
+ */
+
+
+ JsCodeGenerator.prototype.interpolateString = function(text, currentParsePoint, options) {
+ var index, precheedingChar, precheedingChar2, result;
+
+ index = 0;
+ result = this.embeddedCodeBlockMatcher.exec(text);
+ while (result) {
+ if (result.index > 0) {
+ precheedingChar = text.charAt(result.index - 1);
+ }
+ if (result.index > 1) {
+ precheedingChar2 = text.charAt(result.index - 2);
+ }
+ if (precheedingChar === '\\' && precheedingChar2 !== '\\') {
+ if (result.index !== 0) {
+ this.outputBuffer.append(this.processText(text.substring(index, result.index - 1), options));
+ }
+ this.outputBuffer.append(this.processText(result[0]), options);
+ } else {
+ this.outputBuffer.append(this.processText(text.substring(index, result.index)), options);
+ this.appendEmbeddedCode(HamlRuntime.indentText(this.indent + 1), result[1], options.escapeHTML, options.perserveWhitespace, currentParsePoint);
+ }
+ index = this.embeddedCodeBlockMatcher.lastIndex;
+ result = this.embeddedCodeBlockMatcher.exec(text);
+ }
+ if (index < text.length) {
+ return this.outputBuffer.append(this.processText(text.substring(index), options));
+ }
+ };
+
+ /*
+ process text based on escape and preserve flags
+ */
+
+
+ JsCodeGenerator.prototype.processText = function(text, options) {
+ if (options != null ? options.escapeHTML : void 0) {
+ return haml.HamlRuntime.escapeHTML(text);
+ } else if (options != null ? options.perserveWhitespace : void 0) {
+ return haml.HamlRuntime.perserveWhitespace(text);
+ } else {
+ return text;
+ }
+ };
+
+ return JsCodeGenerator;
+
+ })(CodeGenerator);
+
+ /*
+ Code generator that generates javascript code without runtime evaluation
+ */
+
+
+ ProductionJsCodeGenerator = (function(_super) {
+ __extends(ProductionJsCodeGenerator, _super);
+
+ function ProductionJsCodeGenerator() {
+ _ref = ProductionJsCodeGenerator.__super__.constructor.apply(this, arguments);
+ return _ref;
+ }
+
+ /*
+ Append a line with embedded javascript code
+ */
+
+
+ ProductionJsCodeGenerator.prototype.appendEmbeddedCode = function(indentText, expression, escapeContents, perserveWhitespace, currentParsePoint) {
+ this.outputBuffer.flush();
+ this.outputBuffer.appendToOutputBuffer(indentText + ' value = ' + (_.str || _).trim(expression) + ';\n');
+ this.outputBuffer.appendToOutputBuffer(indentText + ' value = value === null ? "" : value;');
+ if (escapeContents) {
+ return this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(haml.HamlRuntime.escapeHTML(String(value)));\n');
+ } else if (perserveWhitespace) {
+ return this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(haml.HamlRuntime.perserveWhitespace(String(value)));\n');
+ } else {
+ return this.outputBuffer.appendToOutputBuffer(indentText + ' html.push(String(value));\n');
+ }
+ };
+
+ /*
+ Generate the code for dynamic attributes ({} form)
+ */
+
+
+ ProductionJsCodeGenerator.prototype.generateCodeForDynamicAttributes = function(id, classes, attributeList, attributeHash, objectRef, currentParsePoint) {
+ this.outputBuffer.flush();
+ if (attributeHash.length > 0) {
+ attributeHash = this.replaceReservedWordsInHash(attributeHash);
+ this.outputBuffer.appendToOutputBuffer(' hashFunction = function () { return ' + attributeHash + '; };\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(' hashFunction = null;\n');
+ }
+ if (objectRef.length > 0) {
+ this.outputBuffer.appendToOutputBuffer(' objRefFn = function () { return ' + objectRef + '; };\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer(' objRefFn = null;\n');
+ }
+ return this.outputBuffer.appendToOutputBuffer(' html.push(haml.HamlRuntime.generateElementAttributes(context, "' + id + '", ["' + classes.join('","') + '"], objRefFn, ' + JSON.stringify(attributeList) + ', hashFunction, ' + currentParsePoint.lineNumber + ', ' + currentParsePoint.characterNumber + ', "' + this.escapeCode(currentParsePoint.currentLine) + '"));\n');
+ };
+
+ /*
+ Initilising the output buffer with any variables or code
+ */
+
+
+ ProductionJsCodeGenerator.prototype.initOutput = function() {
+ return this.outputBuffer.appendToOutputBuffer(' var html = [];\n' + ' var hashFunction = null, hashObject = null, objRef = null, objRefFn = null, value= null;\n with (context || {}) {\n');
+ };
+
+ return ProductionJsCodeGenerator;
+
+ })(JsCodeGenerator);
+
+ /*
+ Code generator that generates a coffeescript function body
+ */
+
+
+ CoffeeCodeGenerator = (function(_super) {
+ __extends(CoffeeCodeGenerator, _super);
+
+ function CoffeeCodeGenerator(options) {
+ this.options = options;
+ this.outputBuffer = new haml.Buffer(this);
+ }
+
+ CoffeeCodeGenerator.prototype.appendEmbeddedCode = function(indentText, expression, escapeContents, perserveWhitespace, currentParsePoint) {
+ var indent;
+
+ this.outputBuffer.flush();
+ indent = this.calcCodeIndent();
+ this.outputBuffer.appendToOutputBuffer(indent + "try\n");
+ this.outputBuffer.appendToOutputBuffer(indent + " exp = CoffeeScript.compile('" + expression.replace(/'/g, "\\'").replace(/\\n/g, '\\\\n') + "', bare: true)\n");
+ this.outputBuffer.appendToOutputBuffer(indent + " value = eval(exp)\n");
+ this.outputBuffer.appendToOutputBuffer(indent + " value ?= ''\n");
+ if (escapeContents) {
+ this.outputBuffer.appendToOutputBuffer(indent + " html.push(haml.HamlRuntime.escapeHTML(String(value)))\n");
+ } else if (perserveWhitespace) {
+ this.outputBuffer.appendToOutputBuffer(indent + " html.push(haml.HamlRuntime.perserveWhitespace(String(value)))\n");
+ } else {
+ this.outputBuffer.appendToOutputBuffer(indent + " html.push(String(value))\n");
+ }
+ this.outputBuffer.appendToOutputBuffer(indent + "catch e \n");
+ this.outputBuffer.appendToOutputBuffer(indent + " handleError new Error(haml.HamlRuntime.templateError(" + currentParsePoint.lineNumber + ", " + currentParsePoint.characterNumber + ", '" + this.escapeCode(currentParsePoint.currentLine) + "',\n");
+ return this.outputBuffer.appendToOutputBuffer(indent + " 'Error evaluating expression - ' + e))\n");
+ };
+
+ CoffeeCodeGenerator.prototype.initOutput = function() {
+ var _ref1;
+
+ if ((_ref1 = this.options) != null ? _ref1.tolerateFaults : void 0) {
+ this.outputBuffer.appendToOutputBuffer('handleError = haml.HamlRuntime._logError\n');
+ } else {
+ this.outputBuffer.appendToOutputBuffer('handleError = haml.HamlRuntime._raiseError\n');
+ }
+ return this.outputBuffer.appendToOutputBuffer('html = []\n');
+ };
+
+ CoffeeCodeGenerator.prototype.closeAndReturnOutput = function() {
+ this.outputBuffer.flush();
+ return this.outputBuffer.output() + 'return html.join("")\n';
+ };
+
+ CoffeeCodeGenerator.prototype.appendCodeLine = function(line, eol) {
+ this.outputBuffer.flush();
+ this.outputBuffer.appendToOutputBuffer(this.calcCodeIndent());
+ this.outputBuffer.appendToOutputBuffer((_.str || _).trim(line));
+ this.outputBuffer.appendToOutputBuffer(eol);
+ return this.prevCodeIndent = this.indent;
+ };
+
+ CoffeeCodeGenerator.prototype.lineMatchesStartFunctionBlock = function(line) {
+ return line.match(/\) [\-=]>\s*$/);
+ };
+
+ CoffeeCodeGenerator.prototype.lineMatchesStartBlock = function(line) {
+ return true;
+ };
+
+ CoffeeCodeGenerator.prototype.closeOffCodeBlock = function(tokeniser) {
+ return this.outputBuffer.flush();
+ };
+
+ CoffeeCodeGenerator.prototype.closeOffFunctionBlock = function(tokeniser) {
+ return this.outputBuffer.flush();
+ };
+
+ CoffeeCodeGenerator.prototype.generateCodeForDynamicAttributes = function(id, classes, attributeList, attributeHash, objectRef, currentParsePoint) {
+ var indent;
+
+ this.outputBuffer.flush();
+ indent = this.calcCodeIndent();
+ if (attributeHash.length > 0) {
+ attributeHash = this.replaceReservedWordsInHash(attributeHash);
+ this.outputBuffer.appendToOutputBuffer(indent + "hashFunction = () -> s = CoffeeScript.compile('" + attributeHash.replace(/'/g, "\\'").replace(/\n/g, '\\n') + "', bare: true); eval 'hashObject = ' + s\n");
+ } else {
+ this.outputBuffer.appendToOutputBuffer(indent + "hashFunction = null\n");
+ }
+ if (objectRef.length > 0) {
+ this.outputBuffer.appendToOutputBuffer(indent + "objRefFn = () -> s = CoffeeScript.compile('" + objectRef.replace(/'/g, "\\'") + "', bare: true); eval 'objRef = ' + s\n");
+ } else {
+ this.outputBuffer.appendToOutputBuffer(indent + "objRefFn = null\n");
+ }
+ return this.outputBuffer.appendToOutputBuffer(indent + "html.push(haml.HamlRuntime.generateElementAttributes(this, '" + id + "', ['" + classes.join("','") + "'], objRefFn ? null, " + JSON.stringify(attributeList) + ", hashFunction ? null, " + currentParsePoint.lineNumber + ", " + currentParsePoint.characterNumber + ", '" + this.escapeCode(currentParsePoint.currentLine) + "', handleError))\n");
+ };
+
+ CoffeeCodeGenerator.prototype.replaceReservedWordsInHash = function(hash) {
+ var reservedWord, resultHash, _i, _len, _ref1;
+
+ resultHash = hash;
+ _ref1 = ['class', 'for'];
+ for (_i = 0, _len = _ref1.length; _i < _len; _i++) {
+ reservedWord = _ref1[_i];
+ resultHash = resultHash.replace(reservedWord + ':', "'" + reservedWord + "':");
+ }
+ return resultHash;
+ };
+
+ /*
+ Escapes the string for insertion into the generated code. Embedded code blocks in strings must not be escaped
+ */
+
+
+ CoffeeCodeGenerator.prototype.escapeCode = function(str) {
+ var index, outString, precheedingChar, precheedingChar2, result;
+
+ outString = '';
+ index = 0;
+ result = this.embeddedCodeBlockMatcher.exec(str);
+ while (result) {
+ if (result.index > 0) {
+ precheedingChar = str.charAt(result.index - 1);
+ }
+ if (result.index > 1) {
+ precheedingChar2 = str.charAt(result.index - 2);
+ }
+ if (precheedingChar === '\\' && precheedingChar2 !== '\\') {
+ if (result.index !== 0) {
+ outString += this._escapeText(str.substring(index, result.index - 1));
+ }
+ outString += this._escapeText('\\' + result[0]);
+ } else {
+ outString += this._escapeText(str.substring(index, result.index));
+ outString += result[0];
+ }
+ index = this.embeddedCodeBlockMatcher.lastIndex;
+ result = this.embeddedCodeBlockMatcher.exec(str);
+ }
+ if (index < str.length) {
+ outString += this._escapeText(str.substring(index));
+ }
+ return outString;
+ };
+
+ CoffeeCodeGenerator.prototype._escapeText = function(text) {
+ return text.replace(/\\/g, '\\\\').replace(/'/g, '\\\'').replace(/"/g, '\\\"').replace(/\n/g, '\\n').replace(/(^|[^\\]{2})\\\\#{/g, '$1\\#{');
+ };
+
+ /*
+ Generates the javascript function by compiling the given code with coffeescript compiler
+ */
+
+
+ CoffeeCodeGenerator.prototype.generateJsFunction = function(functionBody) {
+ var e, fn;
+
+ try {
+ fn = CoffeeScript.compile(functionBody, {
+ bare: true
+ });
+ return new Function(fn);
+ } catch (_error) {
+ e = _error;
+ throw "Incorrect embedded code has resulted in an invalid Haml function - " + e + "\nGenerated Function:\n" + fn;
+ }
+ };
+
+ CoffeeCodeGenerator.prototype.generateFlush = function(bufferStr) {
+ return this.calcCodeIndent() + "html.push('" + this.escapeCode(bufferStr) + "')\n";
+ };
+
+ CoffeeCodeGenerator.prototype.setIndent = function(indent) {
+ return this.indent = indent;
+ };
+
+ CoffeeCodeGenerator.prototype.mark = function() {
+ return this.prevIndent = this.indent;
+ };
+
+ CoffeeCodeGenerator.prototype.calcCodeIndent = function() {
+ var codeIndent, i, _i, _ref1, _ref2, _ref3;
+
+ codeIndent = 0;
+ for (i = _i = 0, _ref1 = this.indent; 0 <= _ref1 ? _i <= _ref1 : _i >= _ref1; i = 0 <= _ref1 ? ++_i : --_i) {
+ if (((_ref2 = this.elementStack[i]) != null ? _ref2.block : void 0) || ((_ref3 = this.elementStack[i]) != null ? _ref3.fnBlock : void 0)) {
+ codeIndent += 1;
+ }
+ }
+ return HamlRuntime.indentText(codeIndent);
+ };
+
+ /*
+ Append the text contents to the buffer (interpolating embedded code not required for coffeescript)
+ */
+
+
+ CoffeeCodeGenerator.prototype.appendTextContents = function(text, shouldInterpolate, currentParsePoint, options) {
+ var prefix, suffix;
+
+ if (shouldInterpolate && text.match(/#{[^}]*}/)) {
+ this.outputBuffer.flush();
+ prefix = suffix = '';
+ if (options != null ? options.escapeHTML : void 0) {
+ prefix = 'haml.HamlRuntime.escapeHTML(';
+ suffix = ')';
+ } else if (options != null ? options.perserveWhitespace : void 0) {
+ prefix = 'haml.HamlRuntime.perserveWhitespace(';
+ suffix = ')';
+ }
+ return this.outputBuffer.appendToOutputBuffer(this.calcCodeIndent() + 'html.push(' + prefix + '"' + this.escapeCode(text) + '"' + suffix + ')\n');
+ } else {
+ if (options != null ? options.escapeHTML : void 0) {
+ text = haml.HamlRuntime.escapeHTML(text);
+ }
+ if (options != null ? options.perserveWhitespace : void 0) {
+ text = haml.HamlRuntime.perserveWhitespace(text);
+ }
+ return this.outputBuffer.append(text);
+ }
+ };
+
+ return CoffeeCodeGenerator;
+
+ })(CodeGenerator);
+
+ /*
+ HAML filters are functions that take 3 parameters
+ contents: The contents block for the filter an array of lines of text
+ generator: The current generator for the compiled function
+ indent: The current indent level
+ currentParsePoint: line and character counters for the current parse point in the input buffer
+ */
+
+
+ filters = {
+ /*
+ Plain filter, just renders the text in the block
+ */
+
+ plain: function(contents, generator, indent, currentParsePoint) {
+ var line, _i, _len;
+
+ for (_i = 0, _len = contents.length; _i < _len; _i++) {
+ line = contents[_i];
+ generator.appendTextContents(haml.HamlRuntime.indentText(indent - 1) + line + '\n', true, currentParsePoint);
+ }
+ return true;
+ },
+ /*
+ Wraps the filter block in a javascript tag
+ */
+
+ javascript: function(contents, generator, indent, currentParsePoint) {
+ var line, _i, _len;
+
+ generator.outputBuffer.append(haml.HamlRuntime.indentText(indent) + "\n");
+ },
+ /*
+ Wraps the filter block in a style tag
+ */
+
+ css: function(contents, generator, indent, currentParsePoint) {
+ var line, _i, _len;
+
+ generator.outputBuffer.append(haml.HamlRuntime.indentText(indent) + "\n");
+ },
+ /*
+ Wraps the filter block in a CDATA tag
+ */
+
+ cdata: function(contents, generator, indent, currentParsePoint) {
+ var line, _i, _len;
+
+ generator.outputBuffer.append(haml.HamlRuntime.indentText(indent) + "\n");
+ },
+ /*
+ Preserve filter, preserved blocks of text aren't indented, and newlines are replaced with the HTML escape code for newlines
+ */
+
+ preserve: function(contents, generator, indent, currentParsePoint) {
+ var line;
+
+ generator.appendTextContents(haml.HamlRuntime.indentText(indent), false, currentParsePoint);
+ return generator.appendTextContents(((function() {
+ var _i, _len, _results;
+
+ _results = [];
+ for (_i = 0, _len = contents.length; _i < _len; _i++) {
+ line = contents[_i];
+ _results.push(haml.HamlRuntime.trim(line, 2));
+ }
+ return _results;
+ })()).join('
') + '\n', true, currentParsePoint);
+ },
+ /*
+ Escape filter, renders the text in the block with html escaped
+ */
+
+ escaped: function(contents, generator, indent, currentParsePoint) {
+ var line, _i, _len;
+
+ for (_i = 0, _len = contents.length; _i < _len; _i++) {
+ line = contents[_i];
+ generator.appendTextContents(haml.HamlRuntime.indentText(indent - 1) + line + '\n', true, currentParsePoint, {
+ escapeHTML: true
+ });
+ }
+ return true;
+ }
+ };
+
+ /*
+ Main haml compiler implemtation
+ */
+
+
+ haml = {
+ /*
+ Compiles the haml provided in the parameters to a Javascipt function
+
+ Parameter:
+ String: Looks for a haml template in dom with this ID
+ Option Hash: The following options determines how haml sources and compiles the template
+ source - This contains the template in string form
+ sourceId - This contains the element ID in the dom which contains the haml source
+ sourceUrl - This contains the URL where the template can be fetched from
+ outputFormat - This determines what is returned, and has the following values:
+ string - The javascript source code
+ function - A javascript function (default)
+ generator - Which code generator to use
+ javascript (default)
+ coffeescript
+ productionjavascript
+ tolerateErrors - switch the compiler into fault tolerant mode (defaults to false)
+
+ Returns a javascript function
+ */
+
+ compileHaml: function(options) {
+ var codeGenerator, result, tokinser;
+
+ if (typeof options === 'string') {
+ return this._compileHamlTemplate(options, new haml.JsCodeGenerator());
+ } else {
+ codeGenerator = (function() {
+ switch (options.generator) {
+ case 'coffeescript':
+ return new haml.CoffeeCodeGenerator(options);
+ case 'productionjavascript':
+ return new haml.ProductionJsCodeGenerator(options);
+ default:
+ return new haml.JsCodeGenerator(options);
+ }
+ })();
+ if (options.source != null) {
+ tokinser = new haml.Tokeniser({
+ template: options.source
+ });
+ } else if (options.sourceId != null) {
+ tokinser = new haml.Tokeniser({
+ templateId: options.sourceId
+ });
+ } else if (options.sourceUrl != null) {
+ tokinser = new haml.Tokeniser({
+ templateUrl: options.sourceUrl
+ });
+ } else {
+ throw "No template source specified for compileHaml. You need to provide a source, sourceId or sourceUrl option";
+ }
+ result = this._compileHamlToJs(tokinser, codeGenerator, options);
+ if (options.outputFormat !== 'string') {
+ return codeGenerator.generateJsFunction(result);
+ } else {
+ return "function (context) {\n" + result + "}\n";
+ }
+ }
+ },
+ /*
+ Compiles the haml in the script block with ID templateId using the coffeescript generator
+ Returns a javascript function
+ */
+
+ compileCoffeeHaml: function(templateId) {
+ return this._compileHamlTemplate(templateId, new haml.CoffeeCodeGenerator());
+ },
+ /*
+ Compiles the haml in the passed in string
+ Returns a javascript function
+ */
+
+ compileStringToJs: function(string) {
+ var codeGenerator, result;
+
+ codeGenerator = new haml.JsCodeGenerator();
+ result = this._compileHamlToJs(new haml.Tokeniser({
+ template: string
+ }), codeGenerator);
+ return codeGenerator.generateJsFunction(result);
+ },
+ /*
+ Compiles the haml in the passed in string using the coffeescript generator
+ Returns a javascript function
+ */
+
+ compileCoffeeHamlFromString: function(string) {
+ var codeGenerator, result;
+
+ codeGenerator = new haml.CoffeeCodeGenerator();
+ result = this._compileHamlToJs(new haml.Tokeniser({
+ template: string
+ }), codeGenerator);
+ return codeGenerator.generateJsFunction(result);
+ },
+ /*
+ Compiles the haml in the passed in string
+ Returns the javascript function source
+
+ This is mainly used for precompiling the haml templates so they can be packaged.
+ */
+
+ compileHamlToJsString: function(string) {
+ var result;
+
+ result = 'function (context) {\n';
+ result += this._compileHamlToJs(new haml.Tokeniser({
+ template: string
+ }), new haml.JsCodeGenerator());
+ return result += '}\n';
+ },
+ _compileHamlTemplate: function(templateId, codeGenerator) {
+ var fn, result;
+
+ haml.cache || (haml.cache = {});
+ if (haml.cache[templateId]) {
+ return haml.cache[templateId];
+ }
+ result = this._compileHamlToJs(new haml.Tokeniser({
+ templateId: templateId
+ }), codeGenerator);
+ fn = codeGenerator.generateJsFunction(result);
+ haml.cache[templateId] = fn;
+ return fn;
+ },
+ _compileHamlToJs: function(tokeniser, generator, options) {
+ var e, indent;
+
+ if (options == null) {
+ options = {};
+ }
+ generator.elementStack = [];
+ generator.initOutput();
+ tokeniser.getNextToken();
+ while (!tokeniser.token.eof) {
+ if (!tokeniser.token.eol) {
+ try {
+ indent = this._whitespace(tokeniser);
+ generator.setIndent(indent);
+ if (tokeniser.token.eol) {
+ generator.outputBuffer.append(HamlRuntime.indentText(indent) + tokeniser.token.matched);
+ tokeniser.getNextToken();
+ } else if (tokeniser.token.doctype) {
+ this._doctype(tokeniser, indent, generator);
+ } else if (tokeniser.token.exclamation) {
+ this._ignoredLine(tokeniser, indent, generator.elementStack, generator);
+ } else if (tokeniser.token.equal || tokeniser.token.escapeHtml || tokeniser.token.unescapeHtml || tokeniser.token.tilde) {
+ this._embeddedJs(tokeniser, indent, generator.elementStack, {
+ innerWhitespace: true
+ }, generator);
+ } else if (tokeniser.token.minus) {
+ this._jsLine(tokeniser, indent, generator.elementStack, generator);
+ } else if (tokeniser.token.comment || tokeniser.token.slash) {
+ this._commentLine(tokeniser, indent, generator.elementStack, generator);
+ } else if (tokeniser.token.amp) {
+ this._escapedLine(tokeniser, indent, generator.elementStack, generator);
+ } else if (tokeniser.token.filter) {
+ this._filter(tokeniser, indent, generator, options);
+ } else {
+ this._templateLine(tokeniser, generator.elementStack, indent, generator, options);
+ }
+ } catch (_error) {
+ e = _error;
+ this._handleError(options, {
+ skipTo: true
+ }, tokeniser, e);
+ }
+ } else {
+ generator.outputBuffer.append(tokeniser.token.matched);
+ tokeniser.getNextToken();
+ }
+ }
+ this._closeElements(0, generator.elementStack, tokeniser, generator);
+ return generator.closeAndReturnOutput();
+ },
+ _doctype: function(tokeniser, indent, generator) {
+ var contents, params;
+
+ if (tokeniser.token.doctype) {
+ generator.outputBuffer.append(HamlRuntime.indentText(indent));
+ tokeniser.getNextToken();
+ if (tokeniser.token.ws) {
+ tokeniser.getNextToken();
+ }
+ contents = tokeniser.skipToEOLorEOF();
+ if (contents && contents.length > 0) {
+ params = contents.split(/\s+/);
+ switch (params[0]) {
+ case 'XML':
+ if (params.length > 1) {
+ generator.outputBuffer.append("");
+ } else {
+ generator.outputBuffer.append("");
+ }
+ break;
+ case 'Strict':
+ generator.outputBuffer.append('');
+ break;
+ case 'Frameset':
+ generator.outputBuffer.append('');
+ break;
+ case '5':
+ generator.outputBuffer.append('');
+ break;
+ case '1.1':
+ generator.outputBuffer.append('');
+ break;
+ case 'Basic':
+ generator.outputBuffer.append('');
+ break;
+ case 'Mobile':
+ generator.outputBuffer.append('');
+ break;
+ case 'RDFa':
+ generator.outputBuffer.append('');
+ }
+ } else {
+ generator.outputBuffer.append('');
+ }
+ generator.outputBuffer.append(this._newline(tokeniser));
+ return tokeniser.getNextToken();
+ }
+ },
+ _filter: function(tokeniser, indent, generator, options) {
+ var filter, filterBlock, i, line;
+
+ if (tokeniser.token.filter) {
+ filter = tokeniser.token.tokenString;
+ if (!haml.filters[filter]) {
+ this._handleError(options, {
+ skipTo: indent
+ }, tokeniser, tokeniser.parseError("Filter '" + filter + "' not registered. Filter functions need to be added to 'haml.filters'."));
+ return;
+ }
+ tokeniser.skipToEOLorEOF();
+ tokeniser.getNextToken();
+ i = haml._whitespace(tokeniser);
+ filterBlock = [];
+ while (!tokeniser.token.eof && i > indent) {
+ tokeniser.pushBackToken();
+ line = tokeniser.skipToEOLorEOF();
+ filterBlock.push(HamlRuntime.trim(line, 2 * indent));
+ tokeniser.getNextToken();
+ i = haml._whitespace(tokeniser);
+ }
+ haml.filters[filter](filterBlock, generator, indent, tokeniser.currentParsePoint());
+ return tokeniser.pushBackToken();
+ }
+ },
+ _commentLine: function(tokeniser, indent, elementStack, generator) {
+ var contents, i;
+
+ if (tokeniser.token.comment) {
+ tokeniser.skipToEOLorEOF();
+ tokeniser.getNextToken();
+ i = this._whitespace(tokeniser);
+ while (!tokeniser.token.eof && i > indent) {
+ tokeniser.skipToEOLorEOF();
+ tokeniser.getNextToken();
+ i = this._whitespace(tokeniser);
+ }
+ if (i > 0) {
+ return tokeniser.pushBackToken();
+ }
+ } else if (tokeniser.token.slash) {
+ haml._closeElements(indent, elementStack, tokeniser, generator);
+ generator.outputBuffer.append(HamlRuntime.indentText(indent));
+ generator.outputBuffer.append("' + elementStack[indent].eol);
+ } else if (elementStack[indent].htmlConditionalComment) {
+ generator.outputBuffer.append(HamlRuntime.indentText(indent) + '' + elementStack[indent].eol);
+ } else if (elementStack[indent].block) {
+ generator.closeOffCodeBlock(tokeniser);
+ } else if (elementStack[indent].fnBlock) {
+ generator.closeOffFunctionBlock(tokeniser);
+ } else {
+ innerWhitespace = !elementStack[indent].tagOptions || elementStack[indent].tagOptions.innerWhitespace;
+ if (innerWhitespace) {
+ generator.outputBuffer.append(HamlRuntime.indentText(indent));
+ } else {
+ generator.outputBuffer.trimWhitespace();
+ }
+ generator.outputBuffer.append('' + elementStack[indent].tag + '>');
+ outerWhitespace = !elementStack[indent].tagOptions || elementStack[indent].tagOptions.outerWhitespace;
+ if (haml._parentInnerWhitespace(elementStack, indent) && outerWhitespace) {
+ generator.outputBuffer.append('\n');
+ }
+ }
+ elementStack[indent] = null;
+ return generator.mark();
+ }
+ },
+ _closeElements: function(indent, elementStack, tokeniser, generator) {
+ var i, _results;
+
+ i = elementStack.length - 1;
+ _results = [];
+ while (i >= indent) {
+ _results.push(this._closeElement(i--, elementStack, tokeniser, generator));
+ }
+ return _results;
+ },
+ _openElement: function(currentParsePoint, indent, identifier, id, classes, objectRef, attributeList, attributeHash, elementStack, tagOptions, generator) {
+ var element, parentInnerWhitespace, tagOuterWhitespace;
+
+ element = identifier.length === 0 ? "div" : identifier;
+ parentInnerWhitespace = this._parentInnerWhitespace(elementStack, indent);
+ tagOuterWhitespace = !tagOptions || tagOptions.outerWhitespace;
+ if (!tagOuterWhitespace) {
+ generator.outputBuffer.trimWhitespace();
+ }
+ if (indent > 0 && parentInnerWhitespace && tagOuterWhitespace) {
+ generator.outputBuffer.append(HamlRuntime.indentText(indent));
+ }
+ generator.outputBuffer.append('<' + element);
+ if (attributeHash.length > 0 || objectRef.length > 0) {
+ generator.generateCodeForDynamicAttributes(id, classes, attributeList, attributeHash, objectRef, currentParsePoint);
+ } else {
+ generator.outputBuffer.append(HamlRuntime.generateElementAttributes(null, id, classes, null, attributeList, null, currentParsePoint.lineNumber, currentParsePoint.characterNumber, currentParsePoint.currentLine));
+ }
+ if (tagOptions.selfClosingTag) {
+ generator.outputBuffer.append("/>");
+ if (tagOptions.outerWhitespace) {
+ return generator.outputBuffer.append("\n");
+ }
+ } else {
+ generator.outputBuffer.append(">");
+ elementStack[indent] = {
+ tag: element,
+ tagOptions: tagOptions
+ };
+ if (tagOptions.innerWhitespace) {
+ return generator.outputBuffer.append("\n");
+ }
+ }
+ },
+ _isSelfClosingTag: function(tag) {
+ return tag === 'meta' || tag === 'img' || tag === 'link' || tag === 'script' || tag === 'br' || tag === 'hr';
+ },
+ _tagHasContents: function(indent, tokeniser) {
+ var nextToken;
+
+ if (!tokeniser.isEolOrEof()) {
+ return true;
+ } else {
+ nextToken = tokeniser.lookAhead(1);
+ return nextToken.ws && nextToken.tokenString.length / 2 > indent;
+ }
+ },
+ _parentInnerWhitespace: function(elementStack, indent) {
+ return indent === 0 || (!elementStack[indent - 1] || !elementStack[indent - 1].tagOptions || elementStack[indent - 1].tagOptions.innerWhitespace);
+ },
+ _lineHasElement: function(identifier, id, classes) {
+ return identifier.length > 0 || id.length > 0 || classes.length > 0;
+ },
+ hasValue: function(value) {
+ return (value != null) && value !== false;
+ },
+ attrValue: function(attr, value) {
+ if (attr === 'selected' || attr === 'checked' || attr === 'disabled') {
+ return attr;
+ } else {
+ return value;
+ }
+ },
+ _whitespace: function(tokeniser) {
+ var indent;
+
+ indent = 0;
+ if (tokeniser.token.ws) {
+ indent = tokeniser.calculateIndent(tokeniser.token.tokenString);
+ tokeniser.getNextToken();
+ }
+ return indent;
+ },
+ _element: function(tokeniser) {
+ var identifier;
+
+ identifier = '';
+ if (tokeniser.token.element) {
+ identifier = tokeniser.token.tokenString;
+ tokeniser.getNextToken();
+ }
+ return identifier;
+ },
+ _eolOrEof: function(tokeniser) {
+ if (tokeniser.token.eol || tokeniser.token.continueLine) {
+ return tokeniser.getNextToken();
+ } else if (!tokeniser.token.eof) {
+ throw tokeniser.parseError("Expected EOL or EOF");
+ }
+ },
+ _idSelector: function(tokeniser) {
+ var id;
+
+ id = '';
+ if (tokeniser.token.idSelector) {
+ id = tokeniser.token.tokenString;
+ tokeniser.getNextToken();
+ }
+ return id;
+ },
+ _classSelector: function(tokeniser) {
+ var classes;
+
+ classes = [];
+ while (tokeniser.token.classSelector) {
+ classes.push(tokeniser.token.tokenString);
+ tokeniser.getNextToken();
+ }
+ return classes;
+ },
+ _newline: function(tokeniser) {
+ if (tokeniser.token.eol) {
+ return tokeniser.token.matched;
+ } else if (tokeniser.token.continueLine) {
+ return tokeniser.token.matched.substring(1);
+ } else {
+ return "\n";
+ }
+ },
+ _handleError: function(options, action, tokeniser, error) {
+ if (options != null ? options.tolerateFaults : void 0) {
+ console.log(error);
+ if (action != null ? action.skipTo : void 0) {
+ return this._skipToNextLineWithIndent(tokeniser, action.skipTo);
+ }
+ } else {
+ throw error;
+ }
+ },
+ _skipToNextLineWithIndent: function(tokeniser, indent) {
+ var lineIndent;
+
+ tokeniser.skipToEOLorEOF();
+ tokeniser.getNextToken();
+ lineIndent = this._whitespace(tokeniser);
+ while (lineIndent > indent) {
+ tokeniser.skipToEOLorEOF();
+ tokeniser.getNextToken();
+ lineIndent = this._whitespace(tokeniser);
+ }
+ return tokeniser.pushBackToken();
+ }
+ };
+
+ haml.Tokeniser = Tokeniser;
+
+ haml.Buffer = Buffer;
+
+ haml.JsCodeGenerator = JsCodeGenerator;
+
+ haml.ProductionJsCodeGenerator = ProductionJsCodeGenerator;
+
+ haml.CoffeeCodeGenerator = CoffeeCodeGenerator;
+
+ haml.HamlRuntime = HamlRuntime;
+
+ haml.filters = filters;
+
+ if ((typeof module !== "undefined" && module !== null ? module.exports : void 0) != null) {
+ module.exports = haml;
+ } else {
+ root.haml = haml;
+ }
+
+}).call(this);
+
+/*
+//@ sourceMappingURL=haml.map
+*/
diff --git a/ajax/libs/clientside-haml-js/5.4/haml.map b/ajax/libs/clientside-haml-js/5.4/haml.map
new file mode 100644
index 000000000..5543196c7
--- /dev/null
+++ b/ajax/libs/clientside-haml-js/5.4/haml.map
@@ -0,0 +1,10 @@
+{
+ "version": 3,
+ "file": "haml.js",
+ "sourceRoot": "..",
+ "sources": [
+ "lib/haml.js"
+ ],
+ "names": [],
+ "mappings": "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"
+}
\ No newline at end of file
diff --git a/ajax/libs/clientside-haml-js/5.4/haml.min.js b/ajax/libs/clientside-haml-js/5.4/haml.min.js
new file mode 100644
index 000000000..43610f0f8
--- /dev/null
+++ b/ajax/libs/clientside-haml-js/5.4/haml.min.js
@@ -0,0 +1,8 @@
+// Generated by CoffeeScript 1.6.2
+/*
+ clientside HAML compiler for Javascript and Coffeescript (Version 5)
+
+ Copyright 2011-12, Ronald Holshausen (https://github.com/uglyog)
+ Released under the MIT License (http://www.opensource.org/licenses/MIT)
+*/(function(){var e,t,n,r,i,s,o,u,a,f,l,c={}.hasOwnProperty,h=function(e,t){function r(){this.constructor=e}for(var n in t)c.call(t,n)&&(e[n]=t[n]);return r.prototype=t.prototype,e.prototype=new r,e.__super__=t.prototype,e};f=this,r={escapeHTML:function(e){return String(e||"").replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},perserveWhitespace:function(e){var t,n,r,i;r=/<[a-zA-Z]+>[^<]*<\/[a-zA-Z]+>/g,n="",t=0,i=r.exec(e);if(i){while(i)n+=e.substring(t,i.index),n+=i[0].replace(/\n/g,"
"),t=i.index+i[0].length,i=r.exec(e);n+=e.substring(t)}else n=e;return n},templateError:function(e,t,n,r){var i,s;s=r+" at line "+e+" and character "+t+":\n"+n+"\n",i=0;while(i0&&n[0].length>0&&(p=this.combineAttributes(p,"class",n));if(i!=null)for(h in i){if(!c.call(i,h))continue;E=i[h],p=this.combineAttributes(p,h,E)}if(r!=null)try{b=r.call(e,e),b!=null&&(w=null,b.id!=null?w=b.id:b.get&&(w=b.get("id")),p=this.combineAttributes(p,"id",w),d=null,b["class"]?d=b["class"]:b.get&&(d=b.get("class")),p=this.combineAttributes(p,"class",d))}catch(S){v=S,l(a.HamlRuntime.templateError(o,u,f,"Error evaluating object reference - "+v))}if(s!=null)try{g=s.call(e,e);if(g!=null){g=this._flattenHash(null,g);for(h in g){if(!c.call(g,h))continue;E=g[h],p=this.combineAttributes(p,h,E)}}}catch(S){m=S,l(a.HamlRuntime.templateError(o,u,f,"Error evaluating attribute hash - "+m))}y="";if(p)for(h in p){if(!c.call(p,h))continue;a.hasValue(p[h])&&((h==="id"||h==="for")&&p[h]instanceof Array?y+=" "+h+'="'+_(p[h]).flatten().join("-")+'"':h==="class"&&p[h]instanceof Array?y+=" "+h+'="'+_(p[h]).flatten().join(" ")+'"':y+=" "+h+'="'+a.attrValue(h,p[h])+'"')}return y},indentText:function(e){var t,n;n="",t=0;while(t0?e&&e.id instanceof Array?e.id.unshift(n):e&&e.id?e.id=[e.id,n]:e?e.id=n:e={id:n}:t==="for"&&n.toString().length>0?e&&e["for"]instanceof Array?e["for"].unshift(n):e&&e["for"]?e["for"]=[e["for"],n]:e?e["for"]=n:e={"for":n}:t==="class"?(r=[],n instanceof Array?r=r.concat(n):r.push(n),e&&e["class"]?e["class"]=e["class"].concat(r):e?e["class"]=r:e={"class":r}):t!=="id"&&(e||(e={}),e[t]=n)),e},_flattenHash:function(e,t){var n,r,i,s,o,u,a,f;a={};if(this._isHash(t))for(n in t){if(!c.call(t,n))continue;f=t[n],s=[],e!=null&&s.push(e),s.push(n),i=s.join("-"),r=this._flattenHash(i,f);if(this._isHash(r))for(o in r){if(!c.call(r,o))continue;u=r[o],a[o]=u}else a[i]=r}else e!=null?a[e]=t:a=t;return a},_isHash:function(e){return e!=null&&typeof e=="object"&&!(e instanceof Array||e instanceof Date)},_logError:function(e){return typeof console!="undefined"&&console!==null?console.log(e):void 0},_raiseError:function(e){throw new Error(e)},trim:function(e,t){return e.substring(t)}},o=function(){function e(e){var t,n,r,i=this;this.buffer=null,this.bufferIndex=null,this.prevToken=null,this.token=null;if(e.templateId!=null){r=document.getElementById(e.templateId);if(!r)throw"Did not find a template with ID '"+e.templateId+"'";this.buffer=r.text,this.bufferIndex=0}else e.template!=null?(this.buffer=e.template,this.bufferIndex=0):e.templateUrl!=null&&(t=function(t,n,r){throw"Failed to fetch haml template at URL "+e.templateUrl+": "+n+" "+r},n=function(e){return i.buffer=e,i.bufferIndex=0},jQuery.ajax({url:e.templateUrl,success:n,error:t,dataType:"text",async:!1,beforeSend:function(e){return e.withCredentials=!0}}))}return e.prototype.currentLineMatcher=/[^\n]*/g,e.prototype.tokenMatchers={whitespace:/[ \t]+/g,element:/%[a-zA-Z][a-zA-Z0-9]*/g,idSelector:/#[a-zA-Z_\-][a-zA-Z0-9_\-]*/g,classSelector:/\.[a-zA-Z0-9_\-]+/g,identifier:/[a-zA-Z][a-zA-Z0-9\-]*/g,quotedString:/[\'][^\'\n]*[\']/g,quotedString2:/[\"][^\"\n]*[\"]/g,comment:/\-#/g,escapeHtml:/\&=/g,unescapeHtml:/\!=/g,objectReference:/\[[a-zA-Z_@][a-zA-Z0-9_]*\]/g,doctype:/!!!/g,continueLine:/\|\s*\n/g,filter:/:\w+/g},e.prototype.matchToken=function(e){var t;e.lastIndex=this.bufferIndex,t=e.exec(this.buffer);if((t!=null?t.index:void 0)===this.bufferIndex)return t[0]},e.prototype.matchMultiCharToken=function(e,t,n){var r,i;if(!this.token){r=this.matchToken(e);if(r)return this.token=t,this.token.tokenString=(i=typeof n==="function"?n(r):void 0)!=null?i:r,this.token.matched=r,this.advanceCharsInBuffer(r.length)}},e.prototype.matchSingleCharToken=function(e,t){if(!this.token&&this.buffer.charAt(this.bufferIndex)===e)return this.token=t,this.token.tokenString=e,this.token.matched=e,this.advanceCharsInBuffer(1)},e.prototype.getNextToken=function(){var e,t,n;if(isNaN(this.bufferIndex))throw a.HamlRuntime.templateError(this.lineNumber,this.characterNumber,this.currentLine,"An internal parser error has occurred in the HAML parser");this.prevToken=this.token,this.token=null;if(this.buffer===null||this.buffer.length===this.bufferIndex)this.token={eof:!0,token:"EOF"};else{this.initLine();if(!this.token){e=this.buffer.charCodeAt(this.bufferIndex),t=this.buffer.charCodeAt(this.bufferIndex+1);if(e===10||e===13&&t===10)this.token={eol:!0,token:"EOL"},e===13&&t===10?(this.advanceCharsInBuffer(2),this.token.matched=String.fromCharCode(e)+String.fromCharCode(t)):(this.advanceCharsInBuffer(1),this.token.matched=String.fromCharCode(e)),this.characterNumber=0,this.currentLine=this.getCurrentLine()}this.matchMultiCharToken(this.tokenMatchers.whitespace,{ws:!0,token:"WS"}),this.matchMultiCharToken(this.tokenMatchers.continueLine,{continueLine:!0,token:"CONTINUELINE"}),this.matchMultiCharToken(this.tokenMatchers.element,{element:!0,token:"ELEMENT"},function(e){return e.substring(1)}),this.matchMultiCharToken(this.tokenMatchers.idSelector,{idSelector:!0,token:"ID"},function(e){return e.substring(1)}),this.matchMultiCharToken(this.tokenMatchers.classSelector,{classSelector:!0,token:"CLASS"},function(e){return e.substring(1)}),this.matchMultiCharToken(this.tokenMatchers.identifier,{identifier:!0,token:"IDENTIFIER"}),this.matchMultiCharToken(this.tokenMatchers.doctype,{doctype:!0,token:"DOCTYPE"}),this.matchMultiCharToken(this.tokenMatchers.filter,{filter:!0,token:"FILTER"},function(e){return e.substring(1)}),this.token||(n=this.matchToken(this.tokenMatchers.quotedString),n||(n=this.matchToken(this.tokenMatchers.quotedString2)),n&&(this.token={string:!0,token:"STRING",tokenString:n.substring(1,n.length-1),matched:n},this.advanceCharsInBuffer(n.length))),this.matchMultiCharToken(this.tokenMatchers.comment,{comment:!0,token:"COMMENT"}),this.matchMultiCharToken(this.tokenMatchers.escapeHtml,{escapeHtml:!0,token:"ESCAPEHTML"}),this.matchMultiCharToken(this.tokenMatchers.unescapeHtml,{unescapeHtml:!0,token:"UNESCAPEHTML"}),this.matchMultiCharToken(this.tokenMatchers.objectReference,{objectReference:!0,token:"OBJECTREFERENCE"},function(e){return e.substring(1,e.length-1)}),!this.token&&this.buffer&&this.buffer.charAt(this.bufferIndex)==="{"&&this.matchJavascriptHash(),this.matchSingleCharToken("(",{openBracket:!0,token:"OPENBRACKET"}),this.matchSingleCharToken(")",{closeBracket:!0,token:"CLOSEBRACKET"}),this.matchSingleCharToken("=",{equal:!0,token:"EQUAL"}),this.matchSingleCharToken("/",{slash:!0,token:"SLASH"}),this.matchSingleCharToken("!",{exclamation:!0,token:"EXCLAMATION"}),this.matchSingleCharToken("-",{minus:!0,token:"MINUS"}),this.matchSingleCharToken("&",{amp:!0,token:"AMP"}),this.matchSingleCharToken("<",{lt:!0,token:"LT"}),this.matchSingleCharToken(">",{gt:!0,token:"GT"}),this.matchSingleCharToken("~",{tilde:!0,token:"TILDE"}),this.token===null&&(this.token={unknown:!0,token:"UNKNOWN",matched:this.buffer.charAt(this.bufferIndex)},this.advanceCharsInBuffer(1))}return this.token},e.prototype.lookAhead=function(e){var t,n,r,i,s,o,u,a;a=null;if(e>0){i=this.token,u=this.prevToken,r=this.currentLine,o=this.lineNumber,n=this.characterNumber,t=this.bufferIndex,s=0;while(s++1||this.buffer.charAt(s)!=="}"))t=this.buffer.charAt(s),n=this.buffer.charCodeAt(s),t==="{"?(e++,s++):t==="}"?(e--,s++):n===10||n===13?s++:s++;if(s===this.buffer.length)throw this.characterNumber=r+1,this.lineNumber=o,this.parseError('Error parsing attribute hash - Did not find a terminating "}"');return this.token={attributeHash:!0,token:"ATTRHASH",tokenString:this.buffer.substring(this.bufferIndex,s+1),matched:this.buffer.substring(this.bufferIndex,s+1)},this.advanceCharsInBuffer(s-this.bufferIndex+1)},e.prototype.calculateCurrentIndent=function(){var e;return this.tokenMatchers.whitespace.lastIndex=0,e=this.tokenMatchers.whitespace.exec(this.currentLine),(e!=null?e.index:void 0)===0?this.calculateIndent(e[0]):0},e.prototype.calculateIndent=function(e){var t,n;n=0,t=0;while(t0)return this.buffer+=e},e.prototype.appendToOutputBuffer=function(e){if((e!=null?e.length:void 0)>0)return this.flush(),this.outputBuffer+=e},e.prototype.flush=function(){var e;return((e=this.buffer)!=null?e.length:void 0)>0&&(this.outputBuffer+=this.generator.generateFlush(this.buffer)),this.buffer=""},e.prototype.output=function(){return this.outputBuffer},e.prototype.trimWhitespace=function(){var e,t;if(this.buffer.length>0){t=this.buffer.length-1;while(t>0){e=this.buffer.charAt(t);if(this._isWhitespace(e))t--;else{if(!(t>1)||e!=="n"&&e!=="t"||this.buffer.charAt(t-1)!=="\\")break;t-=2}}if(t>0&&t0?(r=this.replaceReservedWordsInHash(r),this.outputBuffer.appendToOutputBuffer(' hashFunction = function () { return eval("hashObject = '+r.replace(/"/g,'\\"').replace(/\n/g,"\\n")+'"); };\n')):this.outputBuffer.appendToOutputBuffer(" hashFunction = null;\n"),i.length>0?this.outputBuffer.appendToOutputBuffer(' objRefFn = function () { return eval("objRef = '+i.replace(/"/g,'\\"')+'"); };\n'):this.outputBuffer.appendToOutputBuffer(" objRefFn = null;\n"),this.outputBuffer.appendToOutputBuffer(' html.push(haml.HamlRuntime.generateElementAttributes(context, "'+e+'", ["'+t.join('","')+'"], objRefFn, '+JSON.stringify(n)+", hashFunction, "+s.lineNumber+", "+s.characterNumber+', "'+this.escapeCode(s.currentLine)+'", handleError));\n')},t.prototype.replaceReservedWordsInHash=function(e){var t,n,r,i,s;n=e,s=["class","for"];for(r=0,i=s.length;r0&&(s=e.charAt(u.index-1)),u.index>1&&(o=e.charAt(u.index-2)),s==="\\"&&o!=="\\"?(u.index!==0&&this.outputBuffer.append(this.processText(e.substring(i,u.index-1),n)),this.outputBuffer.append(this.processText(u[0]),n)):(this.outputBuffer.append(this.processText(e.substring(i,u.index)),n),this.appendEmbeddedCode(r.indentText(this.indent+1),u[1],n.escapeHTML,n.perserveWhitespace,t)),i=this.embeddedCodeBlockMatcher.lastIndex,u=this.embeddedCodeBlockMatcher.exec(e);if(i0?(r=this.replaceReservedWordsInHash(r),this.outputBuffer.appendToOutputBuffer(" hashFunction = function () { return "+r+"; };\n")):this.outputBuffer.appendToOutputBuffer(" hashFunction = null;\n"),i.length>0?this.outputBuffer.appendToOutputBuffer(" objRefFn = function () { return "+i+"; };\n"):this.outputBuffer.appendToOutputBuffer(" objRefFn = null;\n"),this.outputBuffer.appendToOutputBuffer(' html.push(haml.HamlRuntime.generateElementAttributes(context, "'+e+'", ["'+t.join('","')+'"], objRefFn, '+JSON.stringify(n)+", hashFunction, "+s.lineNumber+", "+s.characterNumber+', "'+this.escapeCode(s.currentLine)+'"));\n')},t.prototype.initOutput=function(){return this.outputBuffer.appendToOutputBuffer(" var html = [];\n var hashFunction = null, hashObject = null, objRef = null, objRefFn = null, value= null;\n with (context || {}) {\n")},t}(i),n=function(e){function t(e){this.options=e,this.outputBuffer=new a.Buffer(this)}return h(t,e),t.prototype.appendEmbeddedCode=function(e,t,n,r,i){var s;return this.outputBuffer.flush(),s=this.calcCodeIndent(),this.outputBuffer.appendToOutputBuffer(s+"try\n"),this.outputBuffer.appendToOutputBuffer(s+" exp = CoffeeScript.compile('"+t.replace(/'/g,"\\'").replace(/\\n/g,"\\\\n")+"', bare: true)\n"),this.outputBuffer.appendToOutputBuffer(s+" value = eval(exp)\n"),this.outputBuffer.appendToOutputBuffer(s+" value ?= ''\n"),n?this.outputBuffer.appendToOutputBuffer(s+" html.push(haml.HamlRuntime.escapeHTML(String(value)))\n"):r?this.outputBuffer.appendToOutputBuffer(s+" html.push(haml.HamlRuntime.perserveWhitespace(String(value)))\n"):this.outputBuffer.appendToOutputBuffer(s+" html.push(String(value))\n"),this.outputBuffer.appendToOutputBuffer(s+"catch e \n"),this.outputBuffer.appendToOutputBuffer(s+" handleError new Error(haml.HamlRuntime.templateError("+i.lineNumber+", "+i.characterNumber+", '"+this.escapeCode(i.currentLine)+"',\n"),this.outputBuffer.appendToOutputBuffer(s+" 'Error evaluating expression - ' + e))\n")},t.prototype.initOutput=function(){var e;return((e=this.options)!=null?e.tolerateFaults:void 0)?this.outputBuffer.appendToOutputBuffer("handleError = haml.HamlRuntime._logError\n"):this.outputBuffer.appendToOutputBuffer("handleError = haml.HamlRuntime._raiseError\n"),this.outputBuffer.appendToOutputBuffer("html = []\n")},t.prototype.closeAndReturnOutput=function(){return this.outputBuffer.flush(),this.outputBuffer.output()+'return html.join("")\n'},t.prototype.appendCodeLine=function(e,t){return this.outputBuffer.flush(),this.outputBuffer.appendToOutputBuffer(this.calcCodeIndent()),this.outputBuffer.appendToOutputBuffer((_.str||_).trim(e)),this.outputBuffer.appendToOutputBuffer(t),this.prevCodeIndent=this.indent},t.prototype.lineMatchesStartFunctionBlock=function(e){return e.match(/\) [\-=]>\s*$/)},t.prototype.lineMatchesStartBlock=function(e){return!0},t.prototype.closeOffCodeBlock=function(e){return this.outputBuffer.flush()},t.prototype.closeOffFunctionBlock=function(e){return this.outputBuffer.flush()},t.prototype.generateCodeForDynamicAttributes=function(e,t,n,r,i,s){var o;return this.outputBuffer.flush(),o=this.calcCodeIndent(),r.length>0?(r=this.replaceReservedWordsInHash(r),this.outputBuffer.appendToOutputBuffer(o+"hashFunction = () -> s = CoffeeScript.compile('"+r.replace(/'/g,"\\'").replace(/\n/g,"\\n")+"', bare: true); eval 'hashObject = ' + s\n")):this.outputBuffer.appendToOutputBuffer(o+"hashFunction = null\n"),i.length>0?this.outputBuffer.appendToOutputBuffer(o+"objRefFn = () -> s = CoffeeScript.compile('"+i.replace(/'/g,"\\'")+"', bare: true); eval 'objRef = ' + s\n"):this.outputBuffer.appendToOutputBuffer(o+"objRefFn = null\n"),this.outputBuffer.appendToOutputBuffer(o+"html.push(haml.HamlRuntime.generateElementAttributes(this, '"+e+"', ['"+t.join("','")+"'], objRefFn ? null, "+JSON.stringify(n)+", hashFunction ? null, "+s.lineNumber+", "+s.characterNumber+", '"+this.escapeCode(s.currentLine)+"', handleError))\n")},t.prototype.replaceReservedWordsInHash=function(e){var t,n,r,i,s;n=e,s=["class","for"];for(r=0,i=s.length;r0&&(r=e.charAt(s.index-1)),s.index>1&&(i=e.charAt(s.index-2)),r==="\\"&&i!=="\\"?(s.index!==0&&(n+=this._escapeText(e.substring(t,s.index-1))),n+=this._escapeText("\\"+s[0])):(n+=this._escapeText(e.substring(t,s.index)),n+=s[0]),t=this.embeddedCodeBlockMatcher.lastIndex,s=this.embeddedCodeBlockMatcher.exec(e);return t=i;t=0<=i?++n:--n)if(((s=this.elementStack[t])!=null?s.block:void 0)||((o=this.elementStack[t])!=null?o.fnBlock:void 0))e+=1;return r.indentText(e)},t.prototype.appendTextContents=function(e,t,n,r){var i,s;if(t&&e.match(/#{[^}]*}/)){this.outputBuffer.flush(),i=s="";if(r!=null?r.escapeHTML:void 0)i="haml.HamlRuntime.escapeHTML(",s=")";else if(r!=null?r.perserveWhitespace:void 0)i="haml.HamlRuntime.perserveWhitespace(",s=")";return this.outputBuffer.appendToOutputBuffer(this.calcCodeIndent()+"html.push("+i+'"'+this.escapeCode(e)+'"'+s+")\n")}if(r!=null?r.escapeHTML:void 0)e=a.HamlRuntime.escapeHTML(e);if(r!=null?r.perserveWhitespace:void 0)e=a.HamlRuntime.perserveWhitespace(e);return this.outputBuffer.append(e)},t}(t),u={plain:function(e,t,n,r){var i,s,o;for(s=0,o=e.length;s\n'),t.outputBuffer.append(a.HamlRuntime.indentText(n+1)+"//\n"),t.outputBuffer.append(a.HamlRuntime.indentText(n)+"\n")},css:function(e,t,n,r){var i,s,o;t.outputBuffer.append(a.HamlRuntime.indentText(n)+'\n")},cdata:function(e,t,n,r){var i,s,o;t.outputBuffer.append(a.HamlRuntime.indentText(n)+"\n")},preserve:function(e,t,n,r){var i;return t.appendTextContents(a.HamlRuntime.indentText(n),!1,r),t.appendTextContents(function(){var t,n,r;r=[];for(t=0,n=e.length;t0){s=i.split(/\s+/);switch(s[0]){case"XML":s.length>1?n.outputBuffer.append(""):n.outputBuffer.append("");break;case"Strict":n.outputBuffer.append('');break;case"Frameset":n.outputBuffer.append('');break;case"5":n.outputBuffer.append("");break;case"1.1":n.outputBuffer.append('');break;case"Basic":n.outputBuffer.append('');break;case"Mobile":n.outputBuffer.append('');break;case"RDFa":n.outputBuffer.append('')}}else n.outputBuffer.append("");return n.outputBuffer.append(this._newline(e)),e.getNextToken()}},_filter:function(e,t,n,i){var s,o,u,f;if(e.token.filter){s=e.token.tokenString;if(!a.filters[s]){this._handleError(i,{skipTo:t},e,e.parseError("Filter '"+s+"' not registered. Filter functions need to be added to 'haml.filters'."));return}e.skipToEOLorEOF(),e.getNextToken(),u=a._whitespace(e),o=[];while(!e.token.eof&&u>t)e.pushBackToken(),f=e.skipToEOLorEOF(),o.push(r.trim(f,2*t)),e.getNextToken(),u=a._whitespace(e);return a.filters[s](o,n,t,e.currentParsePoint()),e.pushBackToken()}},_commentLine:function(e,t,n,i){var s,o;if(e.token.comment){e.skipToEOLorEOF(),e.getNextToken(),o=this._whitespace(e);while(!e.token.eof&&o>t)e.skipToEOLorEOF(),e.getNextToken(),o=this._whitespace(e);if(o>0)return e.pushBackToken()}else if(e.token.slash)return a._closeElements(t,n,e,i),i.outputBuffer.append(r.indentText(t)),i.outputBuffer.append(""+t[e].eol):t[e].htmlConditionalComment?i.outputBuffer.append(r.indentText(e)+""+t[e].eol):t[e].block?i.closeOffCodeBlock(n):t[e].fnBlock?i.closeOffFunctionBlock(n):(s=!t[e].tagOptions||t[e].tagOptions.innerWhitespace,s?i.outputBuffer.append(r.indentText(e)):i.outputBuffer.trimWhitespace(),i.outputBuffer.append(""+t[e].tag+">"),o=!t[e].tagOptions||t[e].tagOptions.outerWhitespace,a._parentInnerWhitespace(t,e)&&o&&i.outputBuffer.append("\n")),t[e]=null,i.mark()},_closeElements:function(e,t,n,r){var i,s;i=t.length-1,s=[];while(i>=e)s.push(this._closeElement(i--,t,n,r));return s},_openElement:function(e,t,n,i,s,o,u,a,f,l,c){var h,p,d;h=n.length===0?"div":n,p=this._parentInnerWhitespace(f,t),d=!l||l.outerWhitespace,d||c.outputBuffer.trimWhitespace(),t>0&&p&&d&&c.outputBuffer.append(r.indentText(t)),c.outputBuffer.append("<"+h),a.length>0||o.length>0?c.generateCodeForDynamicAttributes(i,s,u,a,o,e):c.outputBuffer.append(r.generateElementAttributes(null,i,s,null,u,null,e.lineNumber,e.characterNumber,e.currentLine));if(l.selfClosingTag){c.outputBuffer.append("/>");if(l.outerWhitespace)return c.outputBuffer.append("\n")}else{c.outputBuffer.append(">"),f[t]={tag:h,tagOptions:l};if(l.innerWhitespace)return c.outputBuffer.append("\n")}},_isSelfClosingTag:function(e){return e==="meta"||e==="img"||e==="link"||e==="script"||e==="br"||e==="hr"},_tagHasContents:function(e,t){var n;return t.isEolOrEof()?(n=t.lookAhead(1),n.ws&&n.tokenString.length/2>e):!0},_parentInnerWhitespace:function(e,t){return t===0||!e[t-1]||!e[t-1].tagOptions||e[t-1].tagOptions.innerWhitespace},_lineHasElement:function(e,t,n){return e.length>0||t.length>0||n.length>0},hasValue:function(e){return e!=null&&e!==!1},attrValue:function(e,t){return e==="selected"||e==="checked"||e==="disabled"?e:t},_whitespace:function(e){var t;return t=0,e.token.ws&&(t=e.calculateIndent(e.token.tokenString),e.getNextToken()),t},_element:function(e){var t;return t="",e.token.element&&(t=e.token.tokenString,e.getNextToken()),t},_eolOrEof:function(e){if(e.token.eol||e.token.continueLine)return e.getNextToken();if(!e.token.eof)throw e.parseError("Expected EOL or EOF")},_idSelector:function(e){var t;return t="",e.token.idSelector&&(t=e.token.tokenString,e.getNextToken()),t},_classSelector:function(e){var t;t=[];while(e.token.classSelector)t.push(e.token.tokenString),e.getNextToken();return t},_newline:function(e){return e.token.eol?e.token.matched:e.token.continueLine?e.token.matched.substring(1):"\n"},_handleError:function(e,t,n,r){if(e!=null?!e.tolerateFaults:!void 0)throw r;console.log(r);if(t!=null?t.skipTo:void 0)return this._skipToNextLineWithIndent(n,t.skipTo)},_skipToNextLineWithIndent:function(e,t){var n;e.skipToEOLorEOF(),e.getNextToken(),n=this._whitespace(e);while(n>t)e.skipToEOLorEOF(),e.getNextToken(),n=this._whitespace(e);return e.pushBackToken()}},a.Tokeniser=o,a.Buffer=e,a.JsCodeGenerator=i,a.ProductionJsCodeGenerator=s,a.CoffeeCodeGenerator=n,a.HamlRuntime=r,a.filters=u,(typeof module!=="undefined"&&module!==null?module.exports:void 0)!=null?module.exports=a:f.haml=a}).call(this);
\ No newline at end of file
diff --git a/ajax/libs/clientside-haml-js/package.json b/ajax/libs/clientside-haml-js/package.json
index 5866cd11c..2c2428dfd 100644
--- a/ajax/libs/clientside-haml-js/package.json
+++ b/ajax/libs/clientside-haml-js/package.json
@@ -1,7 +1,7 @@
{
"name": "clientside-haml-js",
"filename": "haml.min.js",
- "version": "5.1",
+ "version": "5.4",
"description": "Haml compiler for client side javascript and coffeescript view templates",
"homepage": "https://github.com/uglyog/clientside-haml-js",
"keywords": [