ported to Web SQL
[ReadingsJQM.git] / js / app / list.coffee
1
2 $.fn.Readings.list = (opts) ->
3   # category
4   # url
5   # mapper
6   # title
7   # filter
8   # mapper (rec) -> obj
9   #
10   this.each ->
11     $('[data-role=header] h1').text opts.title
12     list = $('[data-role=listview]', this)
13     console.log "lst1 #{list.length}"
14
15     # show filter search?
16     if !opts.filter
17       $(".ui-listview-filter").hide()
18
19     # display elements
20     render = (objs) =>
21       console.log("lst #{list.length}")
22       list.empty()
23       last_divider = null
24
25       for obj in objs
26         # throw a divider in for some categories
27         if opts.dividers
28           divider = obj.group()
29           if last_divider != divider
30             list.append "<li data-role=\"list-divider\">#{divider}</li>"
31             last_divider = divider
32
33         list.append obj.render()
34       list.listview 'refresh'
35
36     if opts.sql
37       Readings.catalogue.db.transaction (tx) ->
38         tx.executeSql opts.sql, opts.params,
39         (tx, rs) ->
40           objs = []
41           for i in [0...rs.rows.length]
42             objs.push opts.mapper rs.rows.item i
43           render(objs)
44         ,
45         (tx, err) ->
46           window.last_error = err
47           alert "SQL Error while fetching list contents: #{err.message}"
48
49     if opts.url
50       $.ajax
51         url: opts.url
52         contentType: "json"
53         success: (data) -> render($.map(data, opts.mapper))
54
55     if opts.fetch
56       opts.fetch(render)
57
58 $.fn.Readings.TagList = (category) ->
59   this.each ->
60     $('[data-role=header] h1').text Readings.config.get('categories')[category]
61     list = $('[data-role=listview]', this)
62     if Readings.config.get('show_filter').indexOf(category) < 0
63       $(".ui-listview-filter").hide()
64     $.ajax
65       url: Readings.config.get('wlurl') + "/api/#{category}"
66       contentType: "json"
67       success: (data) ->
68         tags = $.map data, (rec) -> new Readings.Tag(rec, category)
69         list.empty()
70         last_separator = null
71         show_separator = Readings.config.get('show_dividers').indexOf(category) >= 0
72         for t in tags
73           # throw a separator in for some categories
74           if show_separator
75             separator = t.group()
76             if last_separator != separator
77               list.append "<li data-role=\"list-divider\">#{separator}</li>"
78               last_separator = separator
79
80           list.append t.render()
81         list.listview 'refresh'