diff options
Diffstat (limited to 'web/js/labitrack.d/55-search.coffee')
-rw-r--r-- | web/js/labitrack.d/55-search.coffee | 81 |
1 files changed, 81 insertions, 0 deletions
diff --git a/web/js/labitrack.d/55-search.coffee b/web/js/labitrack.d/55-search.coffee new file mode 100644 index 0000000..38569af --- /dev/null +++ b/web/js/labitrack.d/55-search.coffee @@ -0,0 +1,81 @@ +hdl_add = -> + console.log 'add' + +hdl_remove = -> + console.log 'remove' + +hdl_reset = -> + console.log 'reset' + @render() + +$ -> + form = $('.navbar-search') + q = form.find('input')[0] + form.bind 'submit', (e) -> + e.preventDefault() + url = '/search/' + encodeURIComponent q.value + Backbone.history.navigate(url, true) + return false + +collection = Backbone.Collection.extend { + model: λ.o, + url: -> '/search.json?offset='+(10*((@nextpage++)-1))+'&q='+encodeURIComponent(@q) + comparator: (object) -> object.id + fetchpage: (@q, page) -> + if page + @nextpage = page + @fetch() + parse: (data) -> + @meta = {count: data.count, query: data.query} + console.log data + return data.objects +} + +search = Backbone.View.extend { + initialize: () -> + messages = @collection + messages.bind "reset", hdl_reset, @ + messages.bind "add", hdl_add, @ + messages.bind "remove", hdl_remove, @ + render: (q, page) -> + if page then @page = page + if q then @q = q + page = @page + q = @q + meta = @collection.meta + pages = [] + if meta != undefined + pgcnt = Math.ceil(meta.count / 10) + pages = λ.pagination '/search/'+q, page, pgcnt + + data = { + rows: @collection.toJSON(), + pages + meta + } + console.log data, meta + $(@el).html λ.template 'searchtable', data +} + +collection = new collection() + +view = λ.routableview.extend { + initialize: () -> + λ.routableview.prototype.initialize.call(@) + @search = new search({collection: collection}) + render: (q, page) -> + console.log 'render', q, page + q = decodeURIComponent q + page || (page = 1) + page = parseInt page, 10 + console.log 'page', page + λ.setcontent 'search', {page} + @search.el = $(@el).find('#objecttable_ph')[0] + console.log @search.render + @search.render q, page + @search.collection.fetchpage q, page +} + +view.route 'search' +view.route 'search/:q' +view.route 'search/:q/page/:page' |