• Jump To … +
    search_facets.js search_query.js templates.js backbone_extensions.js hotkeys.js inflector.js jquery_extensions.js search_parser.js search_box.js search_facet.js search_input.js visualsearch.js
  • 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.app.searchQuery.

    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 + '"';
        }
      },
  • ¶

    If provided, use a custom label instead of the raw value.

      label : function() {
          return this.get('label') || this.get('value');
      }
    
    });
    
    })();