1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889 |
- 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])
- })
- })
|