more topic searching work (working example, needs UX tie-in)

v1.18.x
Julian Lam 11 years ago
parent cc930e4042
commit 5d22806ded

@ -445,16 +445,25 @@ var socket,
return false; return false;
}); });
require(['search'], function(search) {
$('#search-form').on('submit', function (e) { $('#search-form').on('submit', function (e) {
e.preventDefault(); e.preventDefault();
var input = $(this).find('input'), var input = $(this).find('input'),
term = input.val(); term = input.val();
require(['search'], function(search) {
search.query(term, function() { search.query(term, function() {
input.val(''); input.val('');
}); });
}); });
$('.topic-search')
.on('click', '.prev', function() {
search.topicDOM.prev();
})
.on('click', '.next', function() {
search.topicDOM.next();
});
}); });
} }

@ -2,7 +2,9 @@ define('search', ['navigator'], function(nav) {
"use strict"; "use strict";
/* globals socket, ajaxify */ /* globals socket, ajaxify */
var Search = {}; var Search = {
current: {}
};
Search.query = function(term, callback) { Search.query = function(term, callback) {
// Detect if a tid was specified // Detect if a tid was specified
@ -25,29 +27,61 @@ define('search', ['navigator'], function(nav) {
tid: tid, tid: tid,
term: term term: term
}, function(err, pids) { }, function(err, pids) {
var args = arguments; callback(err);
// Sort pids numerically & store // Sort pids numerically & store
Search.results = pids.sort(function(a, b) { Search.current = {
results: pids.sort(function(a, b) {
return a-b; return a-b;
}); }),
tid: tid,
term: term
};
if (!err && !ajaxify.currentPage.match(new RegExp('^topic/' + tid))) { Search.topicDOM.update(0);
ajaxify.go('topic/' + tid, function() {
if (callback) callback.apply(null, args);
Search.highlightResult(0);
}); });
};
Search.checkPagePresence = function(tid, callback) {
if (!ajaxify.currentPage.match(new RegExp('^topic/' + tid))) {
ajaxify.go('topic/' + tid, callback);
} else { } else {
if (callback) callback.apply(null, args); callback();
Search.highlightResult(0);
} }
};
Search.topicDOM = {};
Search.topicDOM.start = function() {
var topicSearchEl = $('.topic-search');
topicSearchEl.find('.count').html('1 / ' + Search.current.results.length);
topicSearchEl.removeClass('hidden');
Search.checkPagePresence(Search.current.tid, function() {
Search.highlightResult(0);
}); });
}; };
Search.highlightResult = function(index) { Search.topicDOM.prev = function() {
socket.emit('posts.getPidIndex', Search.results[index], function(err, postIndex) { Search.topicDOM.update((Search.current.index === 0) ? Search.current.results.length-1 : Search.current.index-1);
};
Search.topicDOM.next = function() {
Search.topicDOM.update((Search.current.index === Search.current.results.length-1) ? 0 : Search.current.index+1);
};
Search.topicDOM.update = function(index) {
var topicSearchEl = $('.topic-search');
Search.current.index = index;
topicSearchEl.find('.count').html((index+1) + ' / ' + Search.current.results.length);
topicSearchEl.removeClass('hidden');
Search.checkPagePresence(Search.current.tid, function() {
socket.emit('posts.getPidIndex', Search.current.results[index], function(err, postIndex) {
nav.scrollToPost(postIndex-1, true); // why -1? Ask @barisusakli nav.scrollToPost(postIndex-1, true); // why -1? Ask @barisusakli
}); });
});
}; };
return Search; return Search;

Loading…
Cancel
Save