search_facets.js | |
---|---|
(function() {
var $ = jQuery; // Handle namespaced jQuery | |
The model that holds individual search facets and their categories.
Held in a collection by | VS.model.SearchFacet = Backbone.Model.extend({ |
Extract the category and value and serialize it in preparation for turning the entire searchBox into a search query that can be sent to the server for parsing and searching. | serialize : function() {
var category = this.quoteCategory(this.get('category'));
var value = VS.utils.inflector.trim(this.get('value'));
var remainder = this.get("app").options.remainder;
if (!value) return '';
if (!_.contains(this.get("app").options.unquotable || [], category) && category != remainder) {
value = this.quoteValue(value);
}
if (category != remainder) {
category = category + ': ';
} else {
category = "";
}
return category + value;
},
|
Wrap categories that have spaces or any kind of quote with opposite matching quotes to preserve the complex category during serialization. | quoteCategory : function(category) {
var hasDoubleQuote = (/"/).test(category);
var hasSingleQuote = (/'/).test(category);
var hasSpace = (/\s/).test(category);
if (hasDoubleQuote && !hasSingleQuote) {
return "'" + category + "'";
} else if (hasSpace || (hasSingleQuote && !hasDoubleQuote)) {
return '"' + category + '"';
} else {
return category;
}
},
|
Wrap values that have quotes in opposite matching quotes. If a value has both single and double quotes, just use the double quotes. | quoteValue : function(value) {
var hasDoubleQuote = (/"/).test(value);
var hasSingleQuote = (/'/).test(value);
if (hasDoubleQuote && !hasSingleQuote) {
return "'" + value + "'";
} else {
return '"' + value + '"';
}
}
});
})();
|