/static/js/models/websearchmodel.js
JavaScript | 82 lines | 66 code | 10 blank | 6 comment | 6 complexity | 3639b3f5c1f8b8c4badcea5b9db7bd95 MD5 | raw file
Possible License(s): Apache-2.0
- define([
- 'config',
- 'config/searchProviders',
- 'underscore',
- 'backbone',
- 'models/stackmodel',
- 'lib/template',
- 'lib/urlhelper',
- 'logger'
- ], function (config, searchProviders, util, Backbone, StackModel, template, URLHelper, logger) {
- var WebSearchModel = Backbone.Model.extend({
-
- urlTemplate: '',
-
- initialize: function (attributes, options) {
- options = options || {};
- if (!this.get('search_provider')) this.set(
- { search_provider: searchProviders['default']},
- { silent: true }
- );
-
- if (!this.urlHelper) this.urlHelper = new URLHelper({
- template: '{ base }search/{ provider }{ query }',
- tokens: {
- base: config.applicationRoot,
- provider: this.get('search_provider')
- },
- query: {
- q: this.get('search_terms')
- }
- });
- this.urlTemplate = template(options.template || this.urlTemplate);
- },
- url: function() {
- // Make sure URL is up-to-date with current variables on model.
- var provider = { provider: this.get('search_provider') };
- var query = { q: this.get('search_terms') };
- return this.urlHelper.url(provider, query);
- },
- getResultModelFromElement: function(el) {
- var terms = this.get('search_terms');
- var model = new StackModel({
- 'place_title': el.getAttribute('data-title') || "Missing title",
- 'place_url': el.getAttribute('data-url') || el.href,
- 'search_terms': terms,
- // TODO: GB: hard-coded. This should be pulled from a list of registered
- // search providers -- probably from an API somewhere. The client should
- // be dumb.
- 'search_provider': 'bing',
- search_url: template(config.searchResults)({
- query: terms,
- provider: 'bing'
- })
- });
- // Set URL root on this model -- it's an orphan (doesn't belong)
- // to a collection, so we need to tell Backbone what to hit.
- this.urlHelper = new URLHelper({
- template: config.latticeUrl + '{ query }',
- tokens: {
- latticeRoot: config.latticeRoot,
- username: config.username,
- service: 'stack',
- method: 'search'
- },
- query: {
- v: 2,
- q: terms
- }
- });
- model.urlRoot = this.urlHelper.url();
- return model;
- }
- });
-
- return WebSearchModel;
- });