javascript debugging
This commit is contained in:
parent
04684c5f65
commit
99131374cd
@ -52,6 +52,25 @@ def search_user():
|
|||||||
data = queries.do_user_search(searchword, terms)
|
data = queries.do_user_search(searchword, terms)
|
||||||
|
|
||||||
# filter sensitive stuff
|
# filter sensitive stuff
|
||||||
|
# we only need. objectID, full_name, username
|
||||||
|
hits = data.get('hits')
|
||||||
|
|
||||||
|
new_hits = []
|
||||||
|
|
||||||
|
for hit in hits.get('hits'):
|
||||||
|
source = hit['_source']
|
||||||
|
single_hit = {
|
||||||
|
'_source': {
|
||||||
|
'objectID': source.get('objectID'),
|
||||||
|
'username': source.get('username'),
|
||||||
|
'full_name': source.get('full_name'),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
new_hits.append(single_hit)
|
||||||
|
|
||||||
|
# replace search result with safe subset
|
||||||
|
data['hits']['hits'] = new_hits
|
||||||
|
|
||||||
return jsonify(data)
|
return jsonify(data)
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ $(document).ready(function() {
|
|||||||
var $hits = $('#hits');
|
var $hits = $('#hits');
|
||||||
var $stats = $('#stats');
|
var $stats = $('#stats');
|
||||||
var $facets = $('#facets');
|
var $facets = $('#facets');
|
||||||
//var facets = [];
|
//var facets = [];
|
||||||
var $pagination = $('#pagination');
|
var $pagination = $('#pagination');
|
||||||
var what = '';
|
var what = '';
|
||||||
|
|
||||||
@ -35,15 +35,15 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
// Input binding
|
// Input binding
|
||||||
$inputField.on('keyup change', function() {
|
$inputField.on('keyup change', function() {
|
||||||
var query = $inputField.val();
|
var query = $inputField.val();
|
||||||
|
|
||||||
if(query === undefined) { return; }
|
if(query === undefined) { return; }
|
||||||
|
|
||||||
toggleIconEmptyInput(!query.trim());
|
toggleIconEmptyInput(!query.trim());
|
||||||
// what could be like "/users"
|
// what could be like "/users"
|
||||||
search.setQuery(query, what);
|
search.setQuery(query, what);
|
||||||
//setURLParams(search);
|
// setURLParams(search);
|
||||||
search.execute();
|
search.execute();
|
||||||
}).focus();
|
}).focus();
|
||||||
|
|
||||||
search.on('results', function(content){
|
search.on('results', function(content){
|
||||||
@ -137,54 +137,54 @@ $(document).ready(function() {
|
|||||||
// If no results
|
// If no results
|
||||||
if (content.hits.length === 0) {
|
if (content.hits.length === 0) {
|
||||||
$facets.empty();
|
$facets.empty();
|
||||||
facets =[];
|
facets =[];
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
var storeValue = function (values, label){
|
var storeValue = function (values, label){
|
||||||
|
|
||||||
|
|
||||||
return function(item){
|
return function(item){
|
||||||
|
|
||||||
let refined = search.isRefined(label, item.key);
|
let refined = search.isRefined(label, item.key);
|
||||||
|
|
||||||
values.push({
|
values.push({
|
||||||
facet: label,
|
facet: label,
|
||||||
label: item.key,
|
label: item.key,
|
||||||
value: item.key,
|
value: item.key,
|
||||||
count: item.doc_count,
|
count: item.doc_count,
|
||||||
refined: refined,
|
refined: refined,
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
var facets =[];
|
var facets =[];
|
||||||
var aggs = content.aggs;
|
var aggs = content.aggs;
|
||||||
|
|
||||||
for (var label in aggs) {
|
for (var label in aggs) {
|
||||||
|
|
||||||
let values = [];
|
let values = [];
|
||||||
|
|
||||||
let buckets = aggs[label].buckets;
|
let buckets = aggs[label].buckets;
|
||||||
|
|
||||||
if (buckets.length === 0) { continue; }
|
if (buckets.length === 0) { continue; }
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
buckets.forEach(storeValue(values, label));
|
buckets.forEach(storeValue(values, label));
|
||||||
|
|
||||||
facets.push({
|
facets.push({
|
||||||
title: label,
|
title: label,
|
||||||
values: values.slice(0),
|
values: values.slice(0),
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// Display facets
|
// Display facets
|
||||||
var facetsHtml = '';
|
var facetsHtml = '';
|
||||||
|
|
||||||
for (var indexFacet = 0; indexFacet < facets.length; ++indexFacet) {
|
for (var indexFacet = 0; indexFacet < facets.length; ++indexFacet) {
|
||||||
var facet = facets[indexFacet];
|
var facet = facets[indexFacet];
|
||||||
//title, values[facet, value]
|
//title, values[facet, value]
|
||||||
facetsHtml += facetTemplate.render(facet);
|
facetsHtml += facetTemplate.render(facet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -199,7 +199,7 @@ $(document).ready(function() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var maxPages = 2;
|
var maxPages = 2;
|
||||||
var nbPages = content.count / HITS_PER_PAGE;
|
var nbPages = content.count / HITS_PER_PAGE;
|
||||||
|
|
||||||
// Process pagination
|
// Process pagination
|
||||||
var pages = [];
|
var pages = [];
|
||||||
@ -260,7 +260,7 @@ $(document).ready(function() {
|
|||||||
|
|
||||||
$(document).on('click', '.toggleRefine', function() {
|
$(document).on('click', '.toggleRefine', function() {
|
||||||
search.toggleTerm($(this).data('facet'), $(this).data('value'));
|
search.toggleTerm($(this).data('facet'), $(this).data('value'));
|
||||||
search.execute();
|
search.execute();
|
||||||
return false;
|
return false;
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -5,137 +5,139 @@
|
|||||||
|
|
||||||
var elasticSearcher = (function() {
|
var elasticSearcher = (function() {
|
||||||
|
|
||||||
var deze = {
|
var deze = {
|
||||||
|
|
||||||
query:"",
|
query:"",
|
||||||
url:"",
|
url:"",
|
||||||
newhits: [],
|
newhits: [],
|
||||||
terms: {},
|
terms: {},
|
||||||
page: 0,
|
page: 0,
|
||||||
|
|
||||||
setQuery: (function(q, _url){
|
setQuery: (function(q, _url){
|
||||||
console.log('setQuery!: ' + q + 'what :'+ _url);
|
console.log('setQuery!: ' + q + 'what :'+ _url);
|
||||||
deze.query=q;
|
deze.query=q;
|
||||||
if (_url !== undefined) {
|
if (_url !== undefined) {
|
||||||
deze.url=_url;
|
deze.url=_url;
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
setCurrentPage: (function(page){
|
setCurrentPage: (function(page){
|
||||||
if(page === undefined){
|
if(page === undefined){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
deze.page = page;
|
deze.page = page;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
//result callback
|
//result callback
|
||||||
results: (function(content){}),
|
results: (function(content){}),
|
||||||
|
|
||||||
//error callback
|
//error callback
|
||||||
error: (function(message){
|
error: (function(message){
|
||||||
console.log(message);
|
console.log(message);
|
||||||
}),
|
}),
|
||||||
|
|
||||||
on: (function(type, callback){
|
on: (function(type, callback){
|
||||||
deze[type] = callback;
|
deze[type] = callback;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
//parse the agg stuff
|
//parse the agg stuff
|
||||||
aggs: (function(data){
|
aggs: (function(data){
|
||||||
return deze.newhits.aggregations;
|
return deze.newhits.aggregations;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
toggleTerm: (function(term, value){
|
toggleTerm: (function(term, value){
|
||||||
if (deze.terms[term] !== undefined) {
|
if (deze.terms[term] !== undefined) {
|
||||||
delete deze.terms[term];
|
delete deze.terms[term];
|
||||||
} else {
|
} else {
|
||||||
deze.terms[term] = value;
|
deze.terms[term] = value;
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
|
||||||
isRefined: (function(term, value){
|
isRefined: (function(term, value){
|
||||||
if (deze.terms[term] === value) {
|
if (deze.terms[term] === value) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}),
|
}),
|
||||||
|
|
||||||
//get response from elastic and rebuild json
|
//get response from elastic and rebuild json
|
||||||
//so we can be a drop in of angolia
|
//so we can be a drop in of angolia
|
||||||
execute: (function(){
|
execute: (function(){
|
||||||
params = {
|
params = {
|
||||||
q: deze.query,
|
q: deze.query,
|
||||||
page: deze.page,
|
page: deze.page,
|
||||||
};
|
};
|
||||||
//add term filters
|
//add term filters
|
||||||
Object.assign(params, deze.terms);
|
Object.assign(params, deze.terms);
|
||||||
|
|
||||||
var pstr = jQuery.param( params );
|
var pstr = jQuery.param( params );
|
||||||
|
|
||||||
var jqxhr = $.getJSON("/api/newsearch" + deze.url + "?"+ pstr, function( data ) {
|
var jqxhr = $.getJSON("/api/newsearch" + deze.url + "?"+ pstr, function( data ) {
|
||||||
let hits = data.hits.hits;
|
let hits = data.hits.hits;
|
||||||
var newhits = hits.map(function(hit){
|
var newhits = hits.map(function(hit){
|
||||||
return hit._source;
|
return hit._source;
|
||||||
});
|
});
|
||||||
|
|
||||||
deze.newhits = newhits.slice(0);
|
deze.newhits = newhits.slice(0);
|
||||||
//cb(newhits.slice(0));
|
//cb(newhits.slice(0));
|
||||||
deze.results({
|
deze.results({
|
||||||
'count': data.hits.total,
|
'count': data.hits.total,
|
||||||
'hits': newhits.slice(0),
|
'hits': newhits.slice(0),
|
||||||
'took': data.took,
|
'took': data.took,
|
||||||
'page': deze.page,
|
'page': deze.page,
|
||||||
'aggs': data.aggregations,
|
'aggs': data.aggregations,
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
return {
|
return {
|
||||||
execute: deze.execute,
|
execute: deze.execute,
|
||||||
on: deze.on,
|
on: deze.on,
|
||||||
setQuery: deze.setQuery,
|
setQuery: deze.setQuery,
|
||||||
setCurrentPage: deze.setCurrentPage,
|
setCurrentPage: deze.setCurrentPage,
|
||||||
query: deze.query,
|
query: deze.query,
|
||||||
page: deze.page,
|
page: deze.page,
|
||||||
toggleTerm: deze.toggleTerm,
|
toggleTerm: deze.toggleTerm,
|
||||||
isRefined: deze.isRefined,
|
isRefined: deze.isRefined,
|
||||||
};
|
};
|
||||||
|
|
||||||
})();
|
})();
|
||||||
|
|
||||||
|
|
||||||
var elasticSearch = (function($, url) {
|
var elasticSearch = (function($, url) {
|
||||||
return function findMatches(q, cb, async){
|
return function findMatches(q, cb, async){
|
||||||
if (!cb) { return; }
|
if (!cb) { return; }
|
||||||
$.fn.getSearch(q, cb, async, url);
|
$.fn.getSearch(q, cb, async, url);
|
||||||
};
|
};
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
(function( $ ){
|
(function( $ ){
|
||||||
|
|
||||||
$.fn.getSearch = function(q, cb, async, url){
|
$.fn.getSearch = function(q, cb, async, url){
|
||||||
|
|
||||||
let newhits = [];
|
let newhits = [];
|
||||||
if(url === undefined){
|
if(url === undefined){
|
||||||
url = '';
|
url = '';
|
||||||
}
|
}
|
||||||
|
|
||||||
console.log('searching! '+ url + q);
|
console.log('searching! '+ url + ' q= ' + q);
|
||||||
|
|
||||||
$.getJSON("/api/newsearch" + url + "?q=" + q, function( data ) {
|
$.getJSON("/api/newsearch" + url + "?q=" + q, function( data ) {
|
||||||
let hits = data.hits.hits;
|
let hits = data.hits.hits;
|
||||||
newhits = hits.map(function(hit){
|
newhits = hits.map(function(hit){
|
||||||
return hit._source;
|
return hit._source;
|
||||||
});
|
});
|
||||||
//cb(newhits.slice(0));
|
cb(newhits.slice(0));
|
||||||
async(newhits.slice(0));
|
if(async !== undefined){
|
||||||
});
|
async(newhits.slice(0));
|
||||||
};
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
}(jQuery));
|
}(jQuery));
|
||||||
@ -143,100 +145,101 @@ var elasticSearch = (function($, url) {
|
|||||||
|
|
||||||
$(document).ready(function() {
|
$(document).ready(function() {
|
||||||
|
|
||||||
var searchInput = $('#cloud-search');
|
var searchInput = $('#cloud-search');
|
||||||
|
|
||||||
var tu = searchInput.typeahead({hint: true}, {
|
var tu = searchInput.typeahead({hint: true}, {
|
||||||
//source: algoliaIndex.ttAdapter(),
|
//source: algoliaIndex.ttAdapter(),
|
||||||
source: elasticSearch($),
|
source: elasticSearch($),
|
||||||
async: true,
|
async: true,
|
||||||
displayKey: 'name',
|
displayKey: 'name',
|
||||||
limit: 9, // Above 10 it stops working from
|
limit: 9, // Above 10 it stops working from
|
||||||
// some magic reason
|
// some magic reason
|
||||||
minLength: 0,
|
minLength: 0,
|
||||||
templates: {
|
templates: {
|
||||||
suggestion: function(hit) {
|
suggestion: function(hit) {
|
||||||
var hitMedia = (hit.media ? ' · <span class="media">'+hit.media+'</span>' : '');
|
console.log('hit!');
|
||||||
var hitFree = (hit.is_free ? '<div class="search-hit-ribbon"><span>free</span></div>' : '');
|
var hitMedia = (hit.media ? ' · <span class="media">'+hit.media+'</span>' : '');
|
||||||
var hitPicture;
|
var hitFree = (hit.is_free ? '<div class="search-hit-ribbon"><span>free</span></div>' : '');
|
||||||
|
var hitPicture;
|
||||||
|
|
||||||
if (hit.picture){
|
if (hit.picture){
|
||||||
hitPicture = '<img src="' + hit.picture + '"/>';
|
hitPicture = '<img src="' + hit.picture + '"/>';
|
||||||
} else {
|
} else {
|
||||||
hitPicture = '<div class="search-hit-thumbnail-icon">';
|
hitPicture = '<div class="search-hit-thumbnail-icon">';
|
||||||
hitPicture += (hit.media ? '<i class="pi-' + hit.media + '"></i>' : '<i class="dark pi-'+ hit.node_type + '"></i>');
|
hitPicture += (hit.media ? '<i class="pi-' + hit.media + '"></i>' : '<i class="dark pi-'+ hit.node_type + '"></i>');
|
||||||
hitPicture += '</div>';
|
hitPicture += '</div>';
|
||||||
}
|
}
|
||||||
var $span = $('<span>').addClass('project').text(hit.project.name);
|
var $span = $('<span>').addClass('project').text(hit.project.name);
|
||||||
var $searchHitName = $('<div>').addClass('search-hit-name')
|
var $searchHitName = $('<div>').addClass('search-hit-name')
|
||||||
.attr('title', hit.name)
|
.attr('title', hit.name)
|
||||||
.text(hit.name);
|
.text(hit.name);
|
||||||
|
|
||||||
return '' +
|
return '' +
|
||||||
'<a href="/nodes/'+ hit.objectID + '/redir" class="search-site-result" id="'+ hit.objectID + '">' +
|
'<a href="/nodes/'+ hit.objectID + '/redir" class="search-site-result" id="'+ hit.objectID + '">' +
|
||||||
'<div class="search-hit">' +
|
'<div class="search-hit">' +
|
||||||
'<div class="search-hit-thumbnail">' +
|
'<div class="search-hit-thumbnail">' +
|
||||||
hitPicture +
|
hitPicture +
|
||||||
hitFree +
|
hitFree +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
$searchHitName.html() +
|
$searchHitName.html() +
|
||||||
'<div class="search-hit-meta">' +
|
'<div class="search-hit-meta">' +
|
||||||
$span.html() + ' · ' +
|
$span.html() + ' · ' +
|
||||||
'<span class="node_type">' + hit.node_type + '</span>' +
|
'<span class="node_type">' + hit.node_type + '</span>' +
|
||||||
hitMedia +
|
hitMedia +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'</a>';
|
'</a>';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
$('.search-site-result.advanced, .search-icon').on('click', function(e){
|
$('.search-site-result.advanced, .search-icon').on('click', function(e){
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
window.location.href = '/search?q='+ $("#cloud-search").val() + '&page=1';
|
window.location.href = '/search?q='+ $("#cloud-search").val() + '&page=1';
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
||||||
searchInput.bind('typeahead:select', function(ev, hit) {
|
searchInput.bind('typeahead:select', function(ev, hit) {
|
||||||
$('.search-icon').removeClass('pi-search').addClass('pi-spin spin');
|
$('.search-icon').removeClass('pi-search').addClass('pi-spin spin');
|
||||||
|
|
||||||
window.location.href = '/nodes/'+ hit.objectID + '/redir';
|
window.location.href = '/nodes/'+ hit.objectID + '/redir';
|
||||||
});
|
});
|
||||||
|
|
||||||
searchInput.bind('typeahead:active', function() {
|
searchInput.bind('typeahead:active', function() {
|
||||||
$('#search-overlay').addClass('active');
|
$('#search-overlay').addClass('active');
|
||||||
$('.page-body').addClass('blur');
|
$('.page-body').addClass('blur');
|
||||||
});
|
});
|
||||||
|
|
||||||
searchInput.bind('typeahead:close', function() {
|
searchInput.bind('typeahead:close', function() {
|
||||||
$('#search-overlay').removeClass('active');
|
$('#search-overlay').removeClass('active');
|
||||||
$('.page-body').removeClass('blur');
|
$('.page-body').removeClass('blur');
|
||||||
});
|
});
|
||||||
|
|
||||||
searchInput.keyup(function(e) {
|
searchInput.keyup(function(e) {
|
||||||
if ( $('.tt-dataset').is(':empty') ){
|
if ( $('.tt-dataset').is(':empty') ){
|
||||||
if(e.keyCode == 13){
|
if(e.keyCode == 13){
|
||||||
window.location.href = '/search#q='+ $("#cloud-search").val() + '&page=1';
|
window.location.href = '/search#q='+ $("#cloud-search").val() + '&page=1';
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
searchInput.bind('typeahead:render', function(event, suggestions, async, dataset) {
|
searchInput.bind('typeahead:render', function(event, suggestions, async, dataset) {
|
||||||
if( suggestions != undefined && $('.tt-all-results').length <= 0){
|
if( suggestions != undefined && $('.tt-all-results').length <= 0){
|
||||||
$('.tt-dataset').append(
|
$('.tt-dataset').append(
|
||||||
'<a id="search-advanced" href="/search?q='+ $("#cloud-search").val() + '&page=1" class="search-site-result advanced tt-suggestion">' +
|
'<a id="search-advanced" href="/search?q='+ $("#cloud-search").val() + '&page=1" class="search-site-result advanced tt-suggestion">' +
|
||||||
'<div class="search-hit">' +
|
'<div class="search-hit">' +
|
||||||
'<div class="search-hit-thumbnail">' +
|
'<div class="search-hit-thumbnail">' +
|
||||||
'<div class="search-hit-thumbnail-icon">' +
|
'<div class="search-hit-thumbnail-icon">' +
|
||||||
'<i class="pi-search"></i>' +
|
'<i class="pi-search"></i>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'<div class="search-hit-name">' +
|
'<div class="search-hit-name">' +
|
||||||
'Use Advanced Search' +
|
'Use Advanced Search' +
|
||||||
'</div>' +
|
'</div>' +
|
||||||
'</div>'+
|
'</div>'+
|
||||||
'</a>');
|
'</a>');
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
});
|
});
|
||||||
|
@ -6,10 +6,10 @@
|
|||||||
this.autocomplete({hint: false}, [
|
this.autocomplete({hint: false}, [
|
||||||
{
|
{
|
||||||
source: elasticSearch($, '/user'),
|
source: elasticSearch($, '/user'),
|
||||||
displayKey: 'full_name',
|
displayKey: 'full_name',
|
||||||
async: true,
|
//async: true,
|
||||||
minLength: 1,
|
minLength: 1,
|
||||||
limit: 10,
|
limit: 9,
|
||||||
templates: {
|
templates: {
|
||||||
suggestion: function (hit) {
|
suggestion: function (hit) {
|
||||||
var suggestion = hit.full_name + ' (' + hit.username + ')';
|
var suggestion = hit.full_name + ' (' + hit.username + ')';
|
||||||
|
Loading…
x
Reference in New Issue
Block a user