javascript debugging

This commit is contained in:
2017-12-29 14:52:39 +01:00
parent 04684c5f65
commit 99131374cd
4 changed files with 245 additions and 223 deletions

View File

@@ -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)

View File

@@ -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;
}); });

View File

@@ -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>');
} }
}); });
}); });

View File

@@ -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 + ')';