Removing history, search works again
This commit is contained in:
parent
4f4713ec46
commit
2a41b75ae5
@ -55,12 +55,6 @@
|
||||
<div class="checkbox">
|
||||
<label><input type="checkbox" id="useRelativeScale" checked="checked">Use relative scale</label>
|
||||
</div>
|
||||
<div id="history" class="form-group" style="display: none;">
|
||||
<label for="historyIndex">History</label>
|
||||
<div class="text-center">
|
||||
<input id="historyIndex" style="width: 90%;" type="text" data-slider-reversed="true" data-slider-max="0">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
@ -22,10 +22,11 @@
|
||||
(function(hscd) {
|
||||
'use strict';
|
||||
|
||||
var _ctx = { };
|
||||
var _ctx = {};
|
||||
|
||||
function onAdjust(name, value) {
|
||||
_ctx.query.features[name] = value;
|
||||
|
||||
$.getJSON('/search', _ctx.query, function(results) {
|
||||
saveSnapshot(results);
|
||||
outputSnapshot(results, true);
|
||||
@ -35,36 +36,18 @@
|
||||
function onReady(geo) {
|
||||
_ctx = {
|
||||
log: [],
|
||||
geo: geo
|
||||
geo: geo,
|
||||
query: {}
|
||||
};
|
||||
|
||||
$('#historyIndex').slider({
|
||||
formatter: function(value) {
|
||||
var delta = _ctx.log.length - (value + 1);
|
||||
switch (delta) {
|
||||
case 0:
|
||||
return 'Most recent query';
|
||||
case 1:
|
||||
return 'Previous query';
|
||||
default:
|
||||
return String(delta) + ' queries back';
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$.getJSON('/get_parameters', function(parameters) {
|
||||
_ctx.parameters = parameters;
|
||||
$('#minScore,#hintSteps,#walkingDist,#maxResults').change(onSearch);
|
||||
|
||||
onSearch();
|
||||
|
||||
$('#minScore,#hintSteps,#walkingDist,#maxResults').change(function() { onSearch(getFeaturesGrapher); });
|
||||
$('#historyIndex').on('slideStop', onSelectSnapshot);
|
||||
});
|
||||
}
|
||||
|
||||
function onSearch(provider) {
|
||||
function onSearch() {
|
||||
_ctx.query = {
|
||||
features: _clone(_ctx.query.features),
|
||||
features: _ctx.query.features || {},
|
||||
range: { min: -1.0, max: 1.0 },
|
||||
walkingDist: parseFloat($('#walkingDist').val()),
|
||||
minScore: parseFloat($('#minScore').val()),
|
||||
@ -79,6 +62,7 @@
|
||||
};
|
||||
}
|
||||
|
||||
$.getJSON('/search', _ctx.query, function(results) {
|
||||
if (!_.has(_ctx, 'grapher')) {
|
||||
_ctx.grapher = new grapher.Grapher({
|
||||
canvas: new Snap('#svg'),
|
||||
@ -93,44 +77,32 @@
|
||||
var useLocalScale = $('#useLocalScale').is(':checked');
|
||||
_ctx.grapher.setUseLocalScale(useLocalScale);
|
||||
});
|
||||
|
||||
$('#useRelativeScale').click(function() {
|
||||
var useRelativeScale = $('#useRelativeScale').is(':checked');
|
||||
_ctx.grapher.setUseRelativeScale(useRelativeScale);
|
||||
});
|
||||
|
||||
var columns = {};
|
||||
for (var feature in _ctx.query.features) {
|
||||
for (var feature in results.columns) {
|
||||
var column = results.columns[feature];
|
||||
_ctx.query.features[feature] = column.value;
|
||||
columns[feature] = {
|
||||
value: 0.0,
|
||||
hints: []
|
||||
value: column.value,
|
||||
hints: column.hints
|
||||
};
|
||||
}
|
||||
|
||||
_ctx.grapher.setColumns(columns);
|
||||
}
|
||||
|
||||
$.getJSON('/search', _ctx.query, function(results) {
|
||||
saveSnapshot(results);
|
||||
outputSnapshot(results, false);
|
||||
});
|
||||
}
|
||||
|
||||
function onSelectSnapshot() {
|
||||
var index = $('#historyIndex').slider('getValue');
|
||||
outputSnapshot(_ctx.log[index], false);
|
||||
}
|
||||
|
||||
function saveSnapshot(results) {
|
||||
_ctx.log.push(results);
|
||||
|
||||
var count = _ctx.log.length;
|
||||
var history = $('#historyIndex').slider();
|
||||
history.slider('setAttribute', 'max', count - 1);
|
||||
history.slider('setValue', count - 1);
|
||||
|
||||
if (count > 1) {
|
||||
$('#history').show();
|
||||
}
|
||||
}
|
||||
|
||||
function outputSnapshot(results, omitValues) {
|
||||
@ -150,24 +122,29 @@
|
||||
if (results.length < count) {
|
||||
searchResultCnt += ' of ' + count;
|
||||
}
|
||||
|
||||
$('#resultCount').text(searchResultCnt);
|
||||
$('#resultPanel').slideDown();
|
||||
|
||||
var template = Handlebars.compile($('#template').html());
|
||||
$('#results').empty();
|
||||
$('#results').append(template({results: results}));
|
||||
$('#results').append(
|
||||
template({ results: results })
|
||||
);
|
||||
|
||||
if (results.length === 0) {
|
||||
$('#resultPanel').slideUp();
|
||||
}
|
||||
else {
|
||||
$('#resultPanel').slideDown();
|
||||
}
|
||||
}
|
||||
|
||||
$(document).on({
|
||||
ajaxStart: function() {
|
||||
$('#spinner').show();
|
||||
},
|
||||
|
||||
ajaxStop: function() {
|
||||
$('#spinner').hide();
|
||||
},
|
||||
|
||||
ready: function() {
|
||||
if (navigator.geolocation) {
|
||||
navigator.geolocation.getCurrentPosition(
|
||||
|
@ -32,17 +32,18 @@ var pool = null;
|
||||
function innerProduct(values1, values2) {
|
||||
var result = 0.0;
|
||||
|
||||
console.assert(_.keys(values1).length == _.keys(values2).length);
|
||||
for (var feature in values1) {
|
||||
if (feature in values2) {
|
||||
result += values1[feature] * values2[feature];
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
function walkMatches(data, features, minScore, callback) {
|
||||
for (var i = 0, count = data.records.length; i < count; ++i) {
|
||||
var record = data.records[i];
|
||||
for (var i = 0, count = data.length; i < count; ++i) {
|
||||
var record = data[i];
|
||||
var score = innerProduct(features, record.features);
|
||||
|
||||
if (score >= minScore) {
|
||||
@ -62,6 +63,7 @@ function countRecords(data, features, minScore) {
|
||||
|
||||
function findRecords(data, features, minScore) {
|
||||
var results = [];
|
||||
|
||||
walkMatches(data, features, minScore, function(record, score) {
|
||||
results.push({
|
||||
name: record.name,
|
||||
@ -189,7 +191,27 @@ function computeRecordGeo(records, context) {
|
||||
});
|
||||
}
|
||||
|
||||
function sanitizeQuery(query) {
|
||||
var keys = [
|
||||
'delicious',
|
||||
'accomodating',
|
||||
'affordable',
|
||||
'atmospheric',
|
||||
'nearby',
|
||||
'accessible'
|
||||
];
|
||||
|
||||
var features = {};
|
||||
_.each(keys, function(key) {
|
||||
features[key] = _.has(query.features, key) ? query.features[key] : 0.0;
|
||||
});
|
||||
|
||||
query.features = features;
|
||||
}
|
||||
|
||||
function execQuery(query, callback) {
|
||||
sanitizeQuery(query);
|
||||
|
||||
var context = {
|
||||
geo: query.geo,
|
||||
walkingDist: query.walkingDist * 1000.0
|
||||
|
Loading…
Reference in New Issue
Block a user