blob: 1fb32879b82618abb9b0ab88a408bfc849cd888c [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
(function (callback) {
if (typeof define === 'function' && define.amd) {
define(['core/AbstractWidget'], callback);
}
else {
callback();
}
}(function () {
(function ($) {
AjaxSolr.ResultWidget = AjaxSolr.AbstractWidget.extend({
start: 0,
beforeRequest: function () {
$(this.target).html($('<img>').attr('src', 'images/ajax-loader.gif'));
},
facetLinks: function (facet_field, facet_values) {
var links = [];
if (facet_values) {
for (var i = 0, l = facet_values.length; i < l; i++) {
if (facet_values[i] !== undefined) {
links = links.concat([
facet_field + ':',
$('<a href="#"></a>')
.text(facet_values[i])
.click(this.facetHandler(facet_field, facet_values[i]))
]);
}
else {
links.push('no items found in current selection');
}
}
}
return links;
},
facetHandler: function (facet_field, facet_value) {
var self = this;
return function () {
self.manager.store.remove('fq');
self.manager.store.addByValue('fq', facet_field + ':' + AjaxSolr.Parameter.escapeValue(facet_value));
self.doRequest(0);
return false;
};
},
afterRequest: function () {
$(this.target).empty();
for (var i = 0, l = this.manager.response.response.docs.length; i < l; i++) {
var doc = this.manager.response.response.docs[i];
$(this.target).append(this.template(doc));
var items = [];
items = items.concat(this.facetLinks('topics', doc.type));
items = items.concat(this.facetLinks('sources', doc.source));
//items = items.concat(this.facetLinks('users', doc.users));
var $links = $('#links_' + doc.id);
$links.empty();
for (var j = 0, m = items.length; j < m; j++) {
$links.append($('<li></li>').append(items[j]));
}
}
},
template: function (doc) {
var snippet = '';
if (doc.data.length > 300) {
snippet += doc.source + ' ' + doc.data.substring(0, 300);
snippet += '<span style="display:none;">' + doc.data.substring(300);
snippet += '</span> <a href="#" class="more">more</a>';
}
else {
snippet += doc.source + ' ' + doc.data;
}
var output = '<div><h2>' + doc.type + '</h2>';
output += '<p id="links_' + doc.id + '" class="links"></p>';
output += '<p>' + snippet + '</p></div>';
return output;
},
init: function () {
$(document).on('click', 'a.more', function () {
var $this = $(this),
span = $this.parent().find('span');
if (span.is(':visible')) {
span.hide();
$this.text('more');
}
else {
span.show();
$this.text('less');
}
return false;
});
}
});
})(jQuery);
}));