rbbt-rest 1.6.2 → 1.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/rest/common/misc.rb +10 -0
  3. data/lib/rbbt/rest/workflow/jobs.rb +8 -7
  4. data/share/views/compass/app.sass +278 -3
  5. data/share/views/compass/base/color.sass +66 -0
  6. data/share/views/compass/blocks.sass +0 -0
  7. data/share/views/compass/mixins/_blocks.sass +76 -80
  8. data/share/views/compass/mixins/_compass.sass +0 -0
  9. data/share/views/compass/mixins/_hide.sass +76 -1
  10. data/share/views/compass/table.sass +142 -0
  11. data/share/views/compass/variables/colors.sass +7 -0
  12. data/share/views/compass/variables/sizes.sass +5 -0
  13. data/share/views/entity_partials/action_card.haml +5 -5
  14. data/share/views/entity_partials/action_controller.haml +31 -33
  15. data/share/views/entity_partials/entity_card.haml +28 -27
  16. data/share/views/entity_partials/entity_list_card.haml +30 -42
  17. data/share/views/entity_partials/entity_map_card.haml +35 -43
  18. data/share/views/entity_partials/list_container.haml +6 -6
  19. data/share/views/layout.haml +53 -59
  20. data/share/views/layout/coda.haml +1 -0
  21. data/share/views/layout/doctype.haml +8 -0
  22. data/share/views/layout/footer.haml +36 -10
  23. data/share/views/layout/header.haml +47 -0
  24. data/share/views/layout/top_menu.haml +27 -13
  25. data/share/views/partials/form.haml +4 -4
  26. data/share/views/partials/table.haml +2 -1
  27. data/share/views/partials/table/column.haml +8 -9
  28. data/share/views/partials/table/files.haml +2 -2
  29. data/share/views/partials/table/filters.haml +16 -16
  30. data/share/views/partials/table/page.haml +9 -15
  31. data/share/views/public/js/ng-favourites.js +13 -0
  32. data/share/views/public/js/rbbt.aesthetics.js +51 -0
  33. data/share/views/public/js/rbbt.entity.js +62 -0
  34. data/share/views/public/js/rbbt.entity_list.js +54 -0
  35. data/share/views/public/js/rbbt.entity_map.js +52 -0
  36. data/share/views/public/js/rbbt.favourites.js +286 -0
  37. data/share/views/public/js/rbbt.favourites.js.old +195 -0
  38. data/share/views/public/js/rbbt.js +40 -0
  39. data/share/views/public/js/rbbt.knowledge_base.js +24 -0
  40. data/share/views/public/js/rbbt.page.js +32 -0
  41. data/share/views/public/js/rbbt/actions.js +15 -14
  42. data/share/views/public/js/rbbt/table.js +6 -4
  43. data/share/views/tools/cytoscape.haml +310 -0
  44. data/share/views/tools/protein_tool.haml +383 -0
  45. data/share/views/tools/protein_tool/controls.haml +315 -0
  46. metadata +23 -2
@@ -15,6 +15,7 @@
15
15
 
16
16
  - footer = table_options[:footer] unless defined? footer and footer
17
17
  - footer = true if footer.nil?
18
+ - footer = false unless table_url
18
19
 
19
20
  - page = @page unless defined? page and not page.nil?
20
21
 
@@ -61,7 +62,7 @@
61
62
  = partial_render('partials/table/page', :page => page, :total_size => total_size)
62
63
 
63
64
  - if table_url
64
- %ul.table_actions
65
+ .table_actions.ui.buttons
65
66
 
66
67
  = partial_render('partials/table/filters', :table_url => table_url, :header => header, :id => "rbbt_reveal_" << Misc.digest(table_url))
67
68
 
@@ -1,10 +1,9 @@
1
1
  - table_columns_id = "rbbt_table_columns_" << (rand * 1000).to_i.to_s
2
- %li.table_column
3
- = reveal :column do
4
- %ul.table_column_selector.clean_list
5
- - header.each do |field|
6
- %li
7
- %span.field= field
8
- %a.save_column_map(href="#") save map
9
- - if Entity.formats.include? field and Entity.formats[field].include? Entity::REST
10
- %a.save_column_list(href="#") save list
2
+ = reveal :column, table_columns_id, :class => 'ui compact button table_column' do
3
+ %ul.table_column_selector.clean_list
4
+ - header.each do |field|
5
+ %li.ui.basic.segment
6
+ %span.field= field
7
+ %a.save_column_map.ui.compact.button(href="#") save map
8
+ - if Entity.formats.include? field and Entity.formats[field].include? Entity::REST
9
+ %a.save_column_list.ui.compact.button(href="#") save list
@@ -1,4 +1,4 @@
1
- %li.tsv
1
+ .tsv.ui.wrap.compact.button
2
2
  %a(href="#{add_GET_param(table_url, "_format", "tsv")}") tsv
3
- %li.excel
3
+ .excel.ui.wrap.compact.button
4
4
  %a(href="#{add_GET_param(table_url, "_format", "excel")}") excel
@@ -1,20 +1,20 @@
1
- %li.filter
2
- = reveal :filter, id do
3
- - if @filter
4
- - filter_values = Hash[*@filter.split(";;").collect{|f| f.split("~")}.flatten]
5
- - else
6
- - filter_values = {}
1
+ -#.filter.ui.wrap.button
2
+ = reveal :filter, id, :class => 'ui compact button filter' do
3
+ - if @filter
4
+ - filter_values = Hash[*@filter.split(";;").collect{|f| f.split("~")}.flatten]
5
+ - else
6
+ - filter_values = {}
7
7
 
8
- .filters()
9
- = action_parameters nil, :class => 'filter_controls' do
10
- - header.each do |field|
11
- - input field, :string, "Filter for #{ field }", filter_values[field]
8
+ .filters()
9
+ = action_parameters nil, :class => 'filter_controls' do
10
+ - header.each do |field|
11
+ - input field, :string, "Filter for #{ field }", filter_values[field]
12
12
 
13
- :markdown
14
- Filters can be specified in several ways:
13
+ :markdown
14
+ Filters can be specified in several ways:
15
15
 
16
- - *String of text*: perfect match (e.g. `Cancer`)
17
- - *Regular expression*: flexible match (e.g. `/(bladder|breast)\s+cancer/i`)
18
- - *Numeric comparison*: lower of grater than (e.g. `< 0.1` or `>= 2`)
19
- - *Names: for entities* with names, such as genes or pathways; regular expression accepted (e.g. `:name:SF3B1` or `:name:/CDK\d/`)
16
+ - *String of text*: perfect match (e.g. `Cancer`)
17
+ - *Regular expression*: flexible match (e.g. `/(bladder|breast)\s+cancer/i`)
18
+ - *Numeric comparison*: lower of grater than (e.g. `< 0.1` or `>= 2`)
19
+ - *Names: for entities* with names, such as genes or pathways; regular expression accepted (e.g. `:name:SF3B1` or `:name:/CDK\d/`)
20
20
 
@@ -4,35 +4,29 @@
4
4
  - total_nums += 1 if total_size.to_i % size.to_i > 0
5
5
  - start = [1, num - 2].max
6
6
  - eend = [total_nums, num + 2].min
7
- %ul.table_pagination.pagination
8
- %li(class="arrow")
9
- %a.prev(href="#") &laquo;
7
+ .table_pagination.pagination.ui.buttons
8
+ %a.ui.compact.arrow.button.prev(href="#") &laquo;
10
9
 
11
- %li(class="arrow")
12
- %a.next(href="#") &raquo;
10
+ %a.ui.compact.arrow.button.next(href="#") &raquo;
13
11
 
14
- %li(class="all")
15
- %a.all(href="#") all
12
+ %a.ui.compact.all.button.all(href="#") all
16
13
 
17
14
  - if num - 2 > 1
18
- %li(class="num")
19
- %a(href="#") 1
15
+ %a.ui.compact.num.button(href="#") 1
20
16
 
21
17
  - if num - 2 > 2
22
- %li(class="inactive")
18
+ .ui.compact.disabled.button
23
19
  \...
24
20
 
25
21
  - (start..eend).each do |p|
26
- %li(class="num#{p.to_s == num.to_s ? " active" : "" }")
27
- %a(href="#")= p
22
+ %a.ui.compact.num.button(class="#{p.to_s == num.to_s ? "active" : "" }" href="#")= p
28
23
 
29
24
  - if num + 3 < total_nums
30
- %li(class="inactive")
25
+ .ui.compact.disabled.button
31
26
  \...
32
27
 
33
28
  - if num + 2 < total_nums
34
- %li(class="num")
35
- %a(href="#")= total_nums
29
+ %a.ui.compact.num.button(href="#")= total_nums
36
30
 
37
31
 
38
32
 
@@ -0,0 +1,13 @@
1
+ var rbbt_angular = angular.module('rbbt', [])
2
+
3
+ rbbt_angular.controller('FavourtiesController', ['$scope', function($scope){
4
+ $scope.favourite = 'not_favourite';
5
+ $scope.toggle = function(){
6
+ if ($scope.favourite == 'favourite'){
7
+ $scope.favourite = 'not_favourite'
8
+ }else{
9
+ $scope.favourite = 'favourite'
10
+ }
11
+ }
12
+ }]);
13
+
@@ -0,0 +1,51 @@
1
+ rbbt.aesthetics = {LS_key: "rbbt.aesthetics"}
2
+
3
+ var aes_module = rbbt.aesthetics
4
+
5
+ aes_module.load = function(){
6
+ this.aesthetics = rbbt.LS.load(this.LS_key)
7
+ if (undefined === this.aesthetics)
8
+ this.aesthetics = []
9
+ }
10
+
11
+ aes_module.store = function(){
12
+ rbbt.LS.store(this.LS_key, this.aesthetics)
13
+ }
14
+
15
+ aes_module.add = function(selector, aes, value){
16
+ this.aesthetics.push({selector: selector, aes: aes, value: value})
17
+ }
18
+
19
+ aes_module.clear_aesthetic = function(aes){
20
+ var data_key = 'data-aes-' + aesthetic.aes
21
+
22
+ $('[' + data_key + ']').attr(data_key, 'none')
23
+ }
24
+
25
+ aes_module.apply_aesthetic = function(aesthetic){
26
+
27
+ if (typeof aesthetic.selector == "string"){
28
+ targets = $(aesthetic.selector)
29
+ }else{
30
+ var items = aesthetic.selector
31
+ targets = $('.entity').filter(function(index){
32
+ var id = $(this).attr('data-entity-id')
33
+ return items.indexOf(id) >= 0
34
+ })
35
+ }
36
+
37
+ var data_key = 'data-aes-' + aesthetic.aes
38
+ targets.attr(data_key, aesthetic.value)
39
+ }
40
+
41
+ aes_module.apply = function(aesthetic){
42
+ if (undefined === aesthetic)
43
+ this.aesthetics.map(aes_module.apply_aesthetic)
44
+ else
45
+ aes_module.apply_aesthetic(aesthetic)
46
+ }
47
+
48
+ aes_module.load()
49
+ //aes_module.add(Object.keys(fav_module.entities.types()["Gene"]), 'color', 'red')
50
+ //aes_module.store()
51
+ //aes_module.apply()
@@ -0,0 +1,62 @@
1
+ rbbt.entity = {}
2
+
3
+ var Entity = function(data){
4
+ this.id = data.id
5
+ this.code = data.code
6
+
7
+ if (data.name !== undefined)
8
+ this.name = data.name
9
+ else
10
+ this.name = data.code
11
+
12
+ this.type = data.type
13
+ this.format = data.format
14
+ this.info = data.info
15
+ if (this.format === undefined && this.info !== undefined) this.format = this.info['format']
16
+
17
+ this.full_type = function(){
18
+ var full_type
19
+ if (this.format){ full_type = this.type + ":" + this.format }
20
+ else { full_type = this.type }
21
+ return full_type
22
+ }
23
+
24
+ this.link_info = function(){
25
+ var link_info = this.info
26
+ delete link_info['format']
27
+ return link_info
28
+ }
29
+
30
+ this.url = function(){
31
+ var url = "/entity/" + this.full_type() + "/" + this.code
32
+ url = add_parameters(url, this.link_info())
33
+ return url
34
+ }
35
+ }
36
+
37
+ var FavouriteEntities = function(by_type){
38
+ for (type in by_type){
39
+ this[type] = by_type[type]
40
+ }
41
+ }
42
+
43
+ FavouriteEntities.deserialize = function(data){
44
+ data = JSON.parse(data)
45
+ favourite_entities = {}
46
+ for (type in data){
47
+ var type_data = data[type]
48
+ favourite_entities[type] = {}
49
+ for (code in type_data){
50
+ var info = type_data[code]
51
+ info.code = code
52
+ info.type = type
53
+ favourite_entities[type][code] = new Entity(info)
54
+ }
55
+ }
56
+ return favourite_entities
57
+ }
58
+
59
+ FavouriteEntities.get = function(){
60
+ return m.request({method: 'GET', url: '/favourite_entities', type: FavouriteEntities, deserialize: FavouriteEntities.deserialize})
61
+ }
62
+
@@ -0,0 +1,54 @@
1
+
2
+ var EntityList = function(data){
3
+ this.id = data.id
4
+ this.name = data.id
5
+ this.type = data.type
6
+
7
+ this.full_type = function(){
8
+ return this.type
9
+ }
10
+
11
+ this.url = function(){
12
+ var url = "/entity_list/" + this.full_type() + "/" + this.id
13
+ return url
14
+ }
15
+
16
+ this.get = function(){
17
+ var url = this.url()
18
+ url = add_parameter(url, '_format', 'json')
19
+ return m.request({url: url, method: 'GET'})
20
+ }
21
+
22
+ this.highlight = function(color){
23
+ this.get().then(function(list){
24
+ rbbt.aesthetics.apply_aesthetic({selector: list.entities, aes: 'color', value: color})
25
+ })
26
+ }
27
+ }
28
+
29
+ var FavouriteLists = function(by_type){
30
+ for (type in by_type){
31
+ this[type] = by_type[type]
32
+ }
33
+ }
34
+
35
+ FavouriteLists.get = function(){
36
+ return m.request({method: 'GET', url: '/favourite_entity_lists', type: FavouriteLists, deserialize: FavouriteLists.deserialize})
37
+ }
38
+
39
+ FavouriteLists.deserialize = function(data){
40
+ data = JSON.parse(data)
41
+ favourite_lists = {}
42
+ for (type in data){
43
+ var type_data = data[type]
44
+ favourite_lists[type] = {}
45
+ for (i in type_data){
46
+ var info = {}
47
+ id = type_data[i]
48
+ info.id = id
49
+ info.type = type
50
+ favourite_lists[type][id] = new EntityList(info)
51
+ }
52
+ }
53
+ return favourite_lists
54
+ }
@@ -0,0 +1,52 @@
1
+ var EntityMap = function(data){
2
+ this.id = data.id
3
+ this.name = data.id
4
+ this.type = data.type
5
+ this.column = data.column
6
+
7
+ this.full_type = function(){
8
+ return this.type
9
+ }
10
+
11
+ this.url = function(){
12
+ var url = "/entity_map/" + this.full_type() + "/" + this.column + "/" + this.id
13
+ return url
14
+ }
15
+
16
+ this.get = function(){
17
+ var url = this.url()
18
+ url = add_parameter(url, '_format', 'json')
19
+ return m.request({url: url, method: 'GET'})
20
+ }
21
+ }
22
+
23
+ var FavouriteMaps = function(by_type){
24
+ for (type in by_type){
25
+ this[type] = by_type[type]
26
+ }
27
+ }
28
+
29
+ FavouriteMaps.get = function(){
30
+ return m.request({method: 'GET', url: '/favourite_entity_maps', type: FavouriteMaps, deserialize: FavouriteMaps.deserialize})
31
+ }
32
+
33
+ FavouriteMaps.deserialize = function(data){
34
+ data = JSON.parse(data)
35
+ favourite_maps = {}
36
+ for (type in data){
37
+ var type_data = data[type]
38
+ favourite_maps[type] = {}
39
+ for (column in type_data){
40
+ var column_data = type_data[column]
41
+ for (i in column_data){
42
+ var info = {}
43
+ id = column_data[i]
44
+ info.id = id
45
+ info.column = column
46
+ info.type = type
47
+ favourite_maps[type][id] = new EntityMap(info)
48
+ }
49
+ }
50
+ }
51
+ return favourite_maps
52
+ }
@@ -0,0 +1,286 @@
1
+
2
+ rbbt.favourites = {};
3
+ var fav_module = rbbt.favourites;
4
+
5
+ fav_module.entities = {types: m.prop({})}
6
+ fav_module.entities.init = function(){
7
+ return FavouriteEntities.get().then(fav_module.entities.types)
8
+ }
9
+
10
+ fav_module.lists = {types: m.prop({})}
11
+ fav_module.lists.init = function(){
12
+ return FavouriteLists.get().then(fav_module.lists.types)
13
+ }
14
+
15
+ fav_module.maps = {types: m.prop({})}
16
+ fav_module.maps.init = function(){
17
+ return FavouriteMaps.get().then(fav_module.maps.types)
18
+ }
19
+
20
+ fav_module.update_favourites = function(){
21
+ return m.sync([fav_module.lists.init(), fav_module.entities.init(), fav_module.maps.init()])
22
+ }
23
+
24
+ fav_module.isFavourite_entity = function(entity){
25
+ return fav_module.entities.types()[entity.type] !== undefined && fav_module.entities.types()[entity.type][entity.code] !== undefined
26
+ }
27
+
28
+ fav_module.isFavourite_list = function(list){
29
+ return fav_module.lists.types()[list.type] !== undefined && fav_module.lists.types()[list.type][list.id] !== undefined
30
+ }
31
+
32
+ fav_module.isFavourite_map = function(map){
33
+ return fav_module.maps.types()[map.type] !== undefined && fav_module.maps.types()[map.type][map.id] !== undefined
34
+ }
35
+
36
+ //{{{ TOGGLE
37
+
38
+ fav_module.toggleFavourite_entity = function(){
39
+ var entity = rbbt.page.entity();
40
+
41
+ if (fav_module.isFavourite_entity(entity)){
42
+ rbbt.post({url: '/remove_favourite_entity/' + entity.type + '/' + entity.code}).then(fav_module.update)
43
+ }else{
44
+ rbbt.post({url: '/add_favourite_entity/' + entity.type + '/' + entity.code, data: entity.info}).then(fav_module.update)
45
+ }
46
+ }
47
+
48
+ fav_module.toggleFavourite_list = function(){
49
+ var list = rbbt.page.list();
50
+
51
+ if (fav_module.isFavourite_list(list)){
52
+ rbbt.post({url: '/remove_favourite_entity_list/' + list.type + '/' + list.id}).then(fav_module.update)
53
+ }else{
54
+ rbbt.post({url: '/add_favourite_entity_list/' + list.type + '/' + list.id}).then(fav_module.update)
55
+ }
56
+ }
57
+
58
+ fav_module.toggleFavourite_map = function(){
59
+ var map = rbbt.page.map();
60
+
61
+ if (fav_module.isFavourite_map(map)){
62
+ rbbt.post({url: '/remove_favourite_entity_map/' + map.type + '/' + map.column + '/' + map.id}).then(fav_module.update)
63
+ }else{
64
+ rbbt.post({url: '/add_favourite_entity_map/' + map.type + '/' + map.column + '/' + map.id}).then(fav_module.update)
65
+ }
66
+ }
67
+
68
+ fav_module.toggleFavourite = function(){
69
+ if (! rbbt.page.entity())
70
+ if (! rbbt.page.list())
71
+ if (! rbbt.page.map())
72
+ return
73
+ else
74
+ fav_module.toggleFavourite_map()
75
+ else
76
+ fav_module.toggleFavourite_list()
77
+ else
78
+ fav_module.toggleFavourite_entity()
79
+ }
80
+
81
+ //{{{ VIEWS
82
+
83
+ fav_module.star_view = function(){
84
+ if (! rbbt.page.entity())
85
+ if (! rbbt.page.list())
86
+ if (! rbbt.page.map())
87
+ return
88
+ else
89
+ return m('i.icon.star', {class: (fav_module.isFavourite_map(rbbt.page.map()) ? 'favourite' : 'not_favourite')})
90
+ else
91
+ return m('i.icon.star', {class: (fav_module.isFavourite_list(rbbt.page.list()) ? 'favourite' : 'not_favourite')})
92
+ else
93
+ return m('i.icon.star', {class: (fav_module.isFavourite_entity(rbbt.page.entity()) ? 'favourite' : 'not_favourite')})
94
+ }
95
+
96
+ fav_module.draw_favourite_menu = function(){
97
+ var favourites = fav_module.entities.types()
98
+ var types = Object.keys(favourites)
99
+
100
+ return m('.ui.menu',
101
+ m('.ui.dropdown.item', [
102
+ m('i.icon.dropdown'),
103
+ 'Entities',
104
+ m('.menu', [m('a.item',{onclick: fav_module.highlight}, 'highlight')].concat(types.map(function(type, index){
105
+ var _type = favourites[type]
106
+ var entities = Object.keys(_type)
107
+
108
+ return m('.ui.dropdown.item', [
109
+ m('i.icon.dropdown'),
110
+ type,
111
+ m('.menu', entities.map(function(entity, index){ url = _type[entity].url(); return m('a.item', {href: url}, _type[entity].name) }))
112
+ ]);
113
+ })))
114
+ ])
115
+ )
116
+ }
117
+
118
+ fav_module.draw_favourite_list_menu = function(){
119
+ var favourites = fav_module.lists.types()
120
+ var types = Object.keys(favourites)
121
+
122
+ return m('.ui.menu',
123
+ m('.ui.dropdown.item', [
124
+ m('i.icon.dropdown'),
125
+ 'Lists',
126
+ m('.menu', types.map(function(type, index){
127
+ var _type = favourites[type]
128
+ var lists = Object.keys(_type)
129
+
130
+ return m('.ui.dropdown.item', [
131
+ m('i.icon.dropdown'),
132
+ type,
133
+ m('.menu', lists.map(function(list, index){
134
+ url = _type[list].url()
135
+ var link = m('a.item', {href: url, style: 'display: inline-block; width: 100%'}, _type[list].name)
136
+ //return [link, m('span.bullet.green', {onclick: function(){_type[list].highlight('green'); return false}},''),m('br')]
137
+ return [link, m('span.bullet.green', {onclick: function(){_type[list].highlight('green'); return false}},''),m('br')]
138
+ }))
139
+ ]);
140
+ }))
141
+ ])
142
+ )
143
+ }
144
+
145
+ fav_module.draw_favourite_map_menu = function(){
146
+ var favourites = fav_module.maps.types()
147
+ var types = Object.keys(favourites)
148
+
149
+ return m('.ui.menu',
150
+ m('.ui.dropdown.item', [
151
+ m('i.icon.dropdown'),
152
+ 'Maps',
153
+ m('.menu', types.map(function(type, index){
154
+ var _type = favourites[type]
155
+ var maps = Object.keys(_type)
156
+
157
+ return m('.ui.dropdown.item', [
158
+ m('i.icon.dropdown'),
159
+ type,
160
+ m('.menu', maps.map(function(map, index){
161
+ url = _type[map].url()
162
+ var link = m('a.item', {href: url, _style: 'display: inline-block;width:100%'}, _type[map].name)
163
+ //return [link, m('span.bullet.green', {onclick: function(){_type[map].highlight('green'); return false}},''),m('br')]
164
+ return link
165
+ }))
166
+ ]);
167
+ }))
168
+ ])
169
+ )
170
+ }
171
+
172
+ fav_module.view = function(){
173
+ m.render($('#top_menu > .favourite')[0], [
174
+ m('.item.pointer', {onclick: fav_module.toggleFavourite}, fav_module.star_view()),
175
+ m('.item', {style: 'padding: 0px'}, fav_module.draw_favourite_menu()),
176
+ m('.item', {style: 'padding: 0px'}, fav_module.draw_favourite_list_menu()),
177
+ m('.item', {style: 'padding: 0px'}, fav_module.draw_favourite_map_menu())
178
+ ])
179
+ }
180
+
181
+ //{{{ HOOKS
182
+
183
+ fav_module._update_list_select= function(select, type, lists){
184
+ if (select.attr('attr-allow-empty') == 'true'){
185
+ var option = $('<option value="none" class="loaded">none</option>')
186
+ select.append(option);
187
+ }
188
+
189
+ var selected = null;
190
+
191
+ if (select.attr('attr-selected') != undefined ){
192
+ selected = select.attr('attr-selected');
193
+ }
194
+
195
+ $.each(lists, function(name, elems){
196
+ var option = null;
197
+ var name = elems
198
+ if (selected == null || name != selected){
199
+ option = $('<option attr-entity_type="' + type + '" class="automatic_load" value="' + name.id + '">' + name.id + '</option>');
200
+ }else{
201
+ option = $('<option attr-entity_type="' + type + '" class="automatic_load" selected=selected value="' + name.id + '">' + name.id + '</option>');
202
+ }
203
+ select.append(option);
204
+ return true
205
+ })
206
+ },
207
+
208
+ fav_module.update_list_selects= function(){
209
+ $('select.favourite_lists').find('option.automatic_load').remove()
210
+
211
+ $.each(fav_module.lists.types(), function(type, lists){
212
+ $('select.favourite_lists[type=' + type + ']').each(function(){
213
+ var select = $(this);
214
+ fav_module._update_list_select(select, type, lists);
215
+ })
216
+ $('select.favourite_lists[type=All]').each(function(){
217
+ var select = $(this);
218
+ select.append($('<option class="automatic_load ui" disabled>'+ type +'</option>'));
219
+ fav_module._update_list_select(select, type, lists);
220
+ })
221
+ });
222
+ }
223
+
224
+ fav_module._update_map_select= function(select, type, maps){
225
+ if (select.attr('attr-allow-empty') == 'true'){
226
+ var option = $('<option value="none" class="loaded">none</option>')
227
+ select.append(option);
228
+ }
229
+
230
+ var selected = null;
231
+
232
+ if (select.attr('attr-selected') != undefined ){
233
+ selected = select.attr('attr-selected');
234
+ }
235
+
236
+ console.log(maps)
237
+ $.each(maps, function(name, elems){
238
+ var option = null;
239
+ var name = elems
240
+ if (selected == null || name != selected){
241
+ option = $('<option attr-column="' + name.column + '" attr-entity_type="' + name.type + '" class="automatic_load" value="' + name.id + '">' + name.id + '</option>');
242
+ }else{
243
+ option = $('<option attr-column="' + name.column + '" attr-entity_type="' + name.type + '" class="automatic_load" selected=selected value="' + name.id + '">' + name.id + '</option>');
244
+ }
245
+ select.append(option);
246
+ return true
247
+ })
248
+ },
249
+
250
+ fav_module.update_map_selects= function(){
251
+ $('select.favourite_maps').find('option.automatic_load').remove()
252
+
253
+ $.each(fav_module.maps.types(), function(type, maps){
254
+ $('select.favourite_maps[type=' + type + ']').each(function(){
255
+ var select = $(this);
256
+ fav_module._update_map_select(select, type, maps);
257
+ })
258
+ $('select.favourite_maps[type=All]').each(function(){
259
+ var select = $(this);
260
+ select.append($('<option class="automatic_load ui" disabled>'+ type +'</option>'));
261
+ fav_module._update_map_select(select, type, maps);
262
+ })
263
+ });
264
+ }
265
+
266
+ fav_module.highlight = function(){
267
+ var targets = []
268
+ for (type in fav_module.entities.types()){
269
+ var _type = fav_module.entities.types()[type]
270
+ var n = Object.keys(_type)
271
+ var nt = n.map(function(e){ return _type[e].id})
272
+ targets = targets.concat(nt)
273
+ }
274
+ rbbt.aesthetics.apply_aesthetic({selector: targets, aes: 'color', value: 'gold'})
275
+ }
276
+
277
+ fav_module.hooks = function(){
278
+ fav_module.update_list_selects()
279
+ fav_module.update_map_selects()
280
+ }
281
+
282
+ fav_module.update = function(){
283
+ fav_module.update_favourites().then(fav_module.view).then(function(){ $('.dropdown:not([tabindex])').dropdown()}).then(fav_module.hooks)
284
+ }
285
+
286
+ fav_module.update()