require([ '/example/jquery.js', '/example/mustache.js', '../lunr.js', 'text!templates/question_view.mustache', 'text!templates/question_list.mustache', 'text!example_data.json', 'text!example_index.json' ], function (_, Mustache, lunr, questionView, questionList, data, indexDump) { var renderQuestionList = function (qs) { $("#question-list-container") .empty() .append(Mustache.to_html(questionList, {questions: qs})) } var renderQuestionView = function (question) { $("#question-view-container") .empty() .append(Mustache.to_html(questionView, question)) } window.profile = function (term) { console.profile('search') idx.search(term) console.profileEnd('search') } window.search = function (term) { console.time('search') idx.search(term) console.timeEnd('search') } var indexDump = JSON.parse(indexDump) console.time('load') window.idx = lunr.Index.load(indexDump) console.timeEnd('load') var questions = JSON.parse(data).questions.map(function (raw) { return { id: raw.question_id, title: raw.title, body: raw.body, tags: raw.tags.join(' ') } }) renderQuestionList(questions) renderQuestionView(questions[0]) $('a.all').bind('click', function () { renderQuestionList(questions) $('input').val('') }) var debounce = function (fn) { var timeout return function () { var args = Array.prototype.slice.call(arguments), ctx = this clearTimeout(timeout) timeout = setTimeout(function () { fn.apply(ctx, args) }, 100) } } $('input').bind('keyup', debounce(function () { if ($(this).val() < 2) return var query = $(this).val() var results = idx.search(query).map(function (result) { return questions.filter(function (q) { return q.id === parseInt(result.ref, 10) })[0] }) renderQuestionList(results) })) $("#question-list-container").delegate('li', 'click', function () { var li = $(this) var id = li.data('question-id') renderQuestionView(questions.filter(function (question) { return (question.id == id) })[0]) }) })