summaryrefslogtreecommitdiffstats
path: root/web/js/labitrack.d/55-search.coffee
diff options
context:
space:
mode:
Diffstat (limited to 'web/js/labitrack.d/55-search.coffee')
-rw-r--r--web/js/labitrack.d/55-search.coffee81
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'