rbbt-rest 1.1.4 → 1.1.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (73) hide show
  1. checksums.yaml +8 -8
  2. data/config.ru +3 -0
  3. data/lib/rbbt/rest/client.rb +9 -10
  4. data/lib/rbbt/rest/common/cache.rb +32 -7
  5. data/lib/rbbt/rest/common/forms.rb +33 -0
  6. data/lib/rbbt/rest/common/locate.rb +4 -0
  7. data/lib/rbbt/rest/common/misc.rb +24 -0
  8. data/lib/rbbt/rest/common/render.rb +26 -9
  9. data/lib/rbbt/rest/common/resources.rb +1 -1
  10. data/lib/rbbt/rest/common/table.rb +87 -26
  11. data/lib/rbbt/rest/common/users.rb +5 -1
  12. data/lib/rbbt/rest/entity.rb +300 -95
  13. data/lib/rbbt/rest/entity/action_controller.rb +6 -1
  14. data/lib/rbbt/rest/entity/entity_list_card.rb +1 -1
  15. data/lib/rbbt/rest/entity/entity_map_card.rb +15 -0
  16. data/lib/rbbt/rest/entity/favourites.rb +57 -1
  17. data/lib/rbbt/rest/entity/finder.rb +1 -1
  18. data/lib/rbbt/rest/entity/helpers.rb +40 -7
  19. data/lib/rbbt/rest/entity/list.rb +8 -0
  20. data/lib/rbbt/rest/entity/locate.rb +114 -0
  21. data/lib/rbbt/rest/entity/map.rb +99 -0
  22. data/lib/rbbt/rest/entity/render.rb +25 -0
  23. data/lib/rbbt/rest/entity/rest.rb +33 -4
  24. data/lib/rbbt/rest/main.rb +27 -4
  25. data/lib/rbbt/rest/workflow.rb +7 -1
  26. data/lib/rbbt/rest/workflow/jobs.rb +21 -1
  27. data/share/views/compass/app.sass +17 -9
  28. data/share/views/compass/entity_card.sass +16 -3
  29. data/share/views/compass/favourites.sass +44 -2
  30. data/share/views/compass/form.sass +11 -0
  31. data/share/views/compass/list_container.sass +1 -1
  32. data/share/views/compass/reveal.sass +31 -0
  33. data/share/views/compass/style.sass +29 -1
  34. data/share/views/compass/style_mixins.sass +18 -6
  35. data/share/views/compass/table.sass +19 -3
  36. data/share/views/compass/topbar.sass +8 -2
  37. data/share/views/entity_map/Default.haml +5 -0
  38. data/share/views/entity_partials/action_card.haml +2 -0
  39. data/share/views/entity_partials/action_controller.haml +8 -1
  40. data/share/views/entity_partials/entity_list_card.haml +8 -6
  41. data/share/views/entity_partials/entity_map_card.haml +63 -0
  42. data/share/views/entity_partials/list_container.haml +3 -2
  43. data/share/views/error.haml +14 -10
  44. data/share/views/help.haml +34 -0
  45. data/share/views/help/entity.haml +193 -0
  46. data/share/views/help/workflow.haml +77 -0
  47. data/share/views/job_result/tsv.haml +3 -2
  48. data/share/views/layout.haml +33 -3
  49. data/share/views/layout/favourites.haml +14 -4
  50. data/share/views/layout/header.haml +4 -0
  51. data/share/views/partials/form.haml +3 -1
  52. data/share/views/partials/table.haml +16 -52
  53. data/share/views/partials/table/column.haml +10 -0
  54. data/share/views/partials/table/files.haml +4 -0
  55. data/share/views/partials/table/filters.haml +11 -0
  56. data/share/views/partials/table/page.haml +37 -0
  57. data/share/views/public/favicon.gif +0 -0
  58. data/share/views/public/js/_ajax_replace.js +76 -4
  59. data/share/views/public/js/_fix_tablesorter_science.js +13 -0
  60. data/share/views/public/js/actions.js +8 -2
  61. data/share/views/public/js/base.js +12 -1
  62. data/share/views/public/js/entities.js +39 -7
  63. data/share/views/public/js/favourites.js +308 -77
  64. data/share/views/public/js/helpers.js +9 -5
  65. data/share/views/public/js/lists.js +12 -12
  66. data/share/views/public/js/maps.js +17 -0
  67. data/share/views/public/js/reveal.js +48 -0
  68. data/share/views/public/js/tables.js +110 -51
  69. data/share/views/public/js/workflow.js +4 -16
  70. data/share/views/public/plugins/underscore/js/underscore.js +1227 -0
  71. data/share/views/tasks.haml +12 -1
  72. data/share/views/wait.haml +7 -0
  73. metadata +17 -2
@@ -23,3 +23,16 @@ $.tablesorter.addParser({
23
23
  type: 'text'
24
24
  });
25
25
 
26
+ $.tablesorter.addParser({
27
+ // set a unique id
28
+ id: 'percentage',
29
+ is: function(s) {
30
+ return /\d+\s*%/.test(s);
31
+ },
32
+ format: function(s) {
33
+ var num = $.tablesorter.formatFloat(s);
34
+ return num;
35
+ },
36
+ type: 'numeric'
37
+ });
38
+
@@ -10,8 +10,13 @@ function load_action(link){
10
10
  if (jqXHR.status == 202){
11
11
  action_controller.removeClass('active');
12
12
 
13
- if (action_div.html() == ""){
14
- action_div.html("<span class='loading'>Loading ...</span>");
13
+ var response = $(jqXHR.responseText)
14
+ var stat = response.find('span.status').html()
15
+ var message = response.find('ul.step_messages li:first').html()
16
+ if (undefined === message){
17
+ action_div.html("<span class='loading'>Loading [" + stat + "] ...</span>");
18
+ }else{
19
+ action_div.html("<span class='loading'>Loading [" + stat + ": " + message + "] ...</span>");
15
20
  }
16
21
  }else{
17
22
  action_controller.addClass('active');
@@ -92,6 +97,7 @@ function setup_action(){
92
97
 
93
98
  var body = $('body');
94
99
 
100
+ body.on('click', '.action_controller > ul.actions li > a.entity_map_action', activate_action)
95
101
  body.on('click', '.action_controller > ul.actions li > a.entity_list_action', activate_action)
96
102
  body.on('click', '.action_controller > ul.actions li > a.entity_action', activate_action)
97
103
  body.on('click', '.action_controller > ul.actions > li.select > a', show_actions)
@@ -34,6 +34,7 @@ function setup_page_reload(){
34
34
  var body = $('body');
35
35
  body.on('click', 'a#reload_page', function(){
36
36
  var url = window.location.toString();
37
+ url = url.replace(/#$/, '');
37
38
 
38
39
  url = remove_parameter(url, '_update');
39
40
  url = add_parameters(url, '_update=reload');
@@ -47,9 +48,11 @@ function setup_page_reload(){
47
48
  }
48
49
 
49
50
  function setup_fragments(){
51
+
50
52
  register_dom_update(('a.fragment'), function(link){
51
53
  link.each(function(){replace_link($(this))});
52
54
  })
55
+
53
56
  register_dom_update(('a.modal_fragment'), function(link){
54
57
  link.click(function(){
55
58
  var modal = $('#modal1')
@@ -66,6 +69,13 @@ function deactivate_off_links(){
66
69
  body.on('click', 'a.off', function(){return false})
67
70
  }
68
71
 
72
+ $('body').on('click', 'a#permalink', function(){
73
+ var url = window.location.toString()
74
+ url = add_parameter(url, '_permalink', 'true')
75
+ window.location = url
76
+ return false
77
+ })
78
+
69
79
  function setup_finder(){
70
80
  //register_dom_update("#header li.search input", function(elem){
71
81
  // elem.autocomplete({
@@ -92,14 +102,15 @@ function fit_content(){
92
102
  function update_rbbt(){
93
103
  update_dom();
94
104
  start_defferred();
105
+ apply_highlights();
95
106
  }
96
107
 
97
108
  function setup_rbbt(){
98
109
  setup_fragments();
99
110
  setup_action();
100
111
  setup_page_reload();
101
- setup_favourites();
102
112
  deactivate_off_links();
113
+ update_favourite_entities_star();
103
114
  setup_finder();
104
115
  setup_offcanvas();
105
116
  setup_list_management();
@@ -5,6 +5,7 @@ function page_type(path){
5
5
 
6
6
  if (path.match(/^\/entity\//)){ return "entity"; }
7
7
  if (path.match(/^\/entity_action\//)){ return "entity_action"; }
8
+ if (path.match(/^\/entity_map\//)){ return "entity_map"; }
8
9
  if (path.match(/^\/entity_list\//)){ return "entity_list"; }
9
10
  if (path.match(/^\/entity_list_action\//)){ return "entity_list_action"; }
10
11
  return undefined;
@@ -24,7 +25,7 @@ function page_entity(path){
24
25
  function page_entity_list(path){
25
26
  if (undefined === path){ path = window.location.pathname; }
26
27
 
27
- switch(page_type()){
28
+ switch(page_type(path)){
28
29
  case "entity_list":
29
30
  return restore_element(path.split("/")[3]);
30
31
  default:
@@ -32,28 +33,50 @@ function page_entity_list(path){
32
33
  }
33
34
  }
34
35
 
36
+ function page_entity_map(path){
37
+ if (undefined === path){ path = window.location.pathname; }
38
+
39
+ switch(page_type(path)){
40
+ case "entity_map":
41
+ return restore_element(path.split("/")[4]);
42
+ default:
43
+ return undefined
44
+ }
45
+ }
46
+
47
+ function page_entity_map_column(path){
48
+ if (undefined === path){ path = window.location.pathname; }
49
+
50
+ switch(page_type(path)){
51
+ case "entity_map":
52
+ return restore_element(path.split("/")[3]);
53
+ default:
54
+ return undefined
55
+ }
56
+ }
57
+
35
58
  function page_entity_type(path){
36
59
  if (undefined === path){ path = window.location.pathname; }
37
60
  var entity_type;
38
61
 
39
- switch(page_type()){
62
+ switch(page_type(path)){
40
63
  case "entity":
41
64
  case "entity_list":
42
65
  case "entity_action":
43
66
  case "entity_list_action":
67
+ case "entity_map":
44
68
  return restore_element(path.split("/")[2]);
45
69
  break;
46
70
  }
47
71
  return undefined;
48
72
  }
49
73
 
50
- function page_entity_base_type(){
51
- return page_entity_type().split(":")[0]
74
+ function page_entity_base_type(path){
75
+ return page_entity_type(path).split(":")[0]
52
76
  }
53
77
 
54
-
55
- function page_entity_format(){
56
- return page_entity_type().split(":")[1]
78
+ function page_entity_format(path){
79
+ return page_entity_type(path).split(":")[1]
57
80
  }
58
81
 
59
82
  function page_entity_info(params){
@@ -72,4 +95,13 @@ function list_link(type, id){
72
95
  return a
73
96
  }
74
97
 
98
+ function map_link(type, column, id){
99
+ var a = $('<a>' + id +'</a>');
100
+ var url = "/entity_map/" + clean_element(type) + "/" + clean_element(column) + "/" + clean_element(id)
101
+ var base_type = type.split(":")[0]
102
+
103
+ a.addClass('entity_map').addClass(type).addClass(base_type).attr('href', url).attr('title', id)
104
+ return a
105
+ }
106
+
75
107
 
@@ -1,91 +1,144 @@
1
- function setup_favourites(){
1
+ // HELPERS
2
2
 
3
- register_dom_update('a#toggle_favourite', function(link){
4
- link.click(function(){
5
- var link = $(this);
3
+ function get_favourite_entities(){
4
+ //return JSON.parse($.ajax({url: '/favourite_entities', async: false, cache: false}).responseText)
5
+ return JSON.parse(get_ajax({url: '/favourite_entities', async: false, cache: false}))
6
+ }
6
7
 
7
- var type = page_type();
8
- switch(type){
9
- case "entity":
10
- var entity = page_entity();
11
- var entity_type = page_entity_type();
12
- var entity_info = page_entity_info();
8
+ function get_favourite_entity_lists(){
9
+ //return JSON.parse($.ajax({url: '/favourite_entity_lists', async: false, cache: false}).responseText)
10
+ return JSON.parse(get_ajax({url: '/favourite_entity_lists', async: false, cache: false}))
11
+ }
13
12
 
14
- if (link.hasClass('active')){
15
- method = "/remove_favourite_entity/";
16
- }else{
17
- method = "/add_favourite_entity/";
18
- }
19
- var url = method + clean_element(entity_type) + "/" + entity;
13
+ function get_favourite_entity_maps(){
14
+ //return JSON.parse($.ajax({url: '/favourite_entity_maps', async: false, cache: false}).responseText)
15
+ return JSON.parse(get_ajax({url: '/favourite_entity_maps', async: false, cache: false}))
16
+ }
20
17
 
21
- $.ajax({url: url, type: 'POST', data: entity_info, success: function (){ update_favourite_entities() }})
18
+ function toggle_favourite(link){
19
+ var link = $(link);
20
+ var path;
22
21
 
23
- return false
24
- case "entity_list":
25
- var entity_list = page_entity_list();
26
- var entity_type = page_entity_type();
22
+ if (link.parents('.reveal-modal').length == 0){
23
+ path = undefined;
24
+ }else{
25
+ path = link.closest('.reveal-modal').find('.embedded').first().attr('target-href');
26
+ }
27
27
 
28
- if (link.hasClass('active')){
29
- method = "/remove_favourite_entity_list/";
30
- }else{
31
- method = "/add_favourite_entity_list/";
32
- }
33
- var url = method + clean_element(entity_type) + "/" + entity_list;
28
+ var type = page_type(path);
29
+ switch(type){
30
+ case "entity":
31
+ var entity = page_entity(path);
32
+ var entity_type = page_entity_type(path);
33
+ var entity_info = page_entity_info(path);
34
34
 
35
- $.ajax({url: url, type: 'POST', success: function (){ update_favourite_entity_lists() }})
35
+ if (link.hasClass('active')){
36
+ method = "/remove_favourite_entity/";
37
+ }else{
38
+ method = "/add_favourite_entity/";
39
+ }
40
+ var url = method + clean_element(entity_type) + "/" + entity;
36
41
 
37
- return false
38
- }
39
- })
40
- })
42
+ $.ajax({url: url, type: 'POST', data: entity_info, success: function (){ update_favourite_entities() }})
41
43
 
42
- update_favourite_entities_star();
43
- }
44
+ return false
45
+ case "entity_list":
46
+ var entity_list = page_entity_list(path);
47
+ var entity_type = page_entity_type(path);
44
48
 
45
- function get_favourite_entities(){
46
- return JSON.parse($.ajax({url: '/favourite_entities', async: false, cache: false}).responseText)
47
- }
49
+ if (link.hasClass('active')){
50
+ method = "/remove_favourite_entity_list/";
51
+ }else{
52
+ method = "/add_favourite_entity_list/";
53
+ }
54
+ var url = method + clean_element(entity_type) + "/" + clean_element(entity_list);
48
55
 
49
- function get_favourite_entity_lists(){
50
- return JSON.parse($.ajax({url: '/favourite_entity_lists', async: false, cache: false}).responseText)
56
+ $.ajax({url: url, type: 'POST', success: function (){ update_favourite_entity_lists() }})
57
+
58
+ return false
59
+ case "entity_map":
60
+ var entity_map = page_entity_map(path);
61
+ var entity_type = page_entity_type(path);
62
+ var entity_column = page_entity_map_column(path);
63
+
64
+ if (link.hasClass('active')){
65
+ method = "/remove_favourite_entity_map/";
66
+ }else{
67
+ method = "/add_favourite_entity_map/";
68
+ }
69
+ var url = method + clean_element(entity_type) + "/" + clean_element(entity_column) + "/" + clean_element(entity_map);
70
+
71
+ $.ajax({url: url, type: 'POST', success: function (){ update_favourite_entity_maps() }})
72
+ }
51
73
  }
52
74
 
53
- function update_favourite_entities_star(favourites){
75
+ // TOGGLE START
76
+
77
+ $('body').on('click', 'a#toggle_favourite, .reveal-modal a.toggle_favourite',function(link){
78
+ var link = $(this)
79
+ toggle_favourite(link)
80
+ update_favourite_entities_star(undefined, link);
81
+ return false
82
+ })
83
+
54
84
 
55
- var type = page_type();
85
+ function update_favourite_entities_star(favourites, link){
86
+ if (undefined === link){link = $('a#toggle_favourite')}
87
+
88
+ var path
89
+ if (link.parents('.reveal-modal').length == 0){
90
+ path = undefined;
91
+ }else{
92
+ path = link.closest('.reveal-modal').find('.embedded').first().attr('target-href');
93
+ }
94
+
95
+ var type = page_type(path);
56
96
  switch(type){
57
97
  case "entity":
98
+ if (undefined === favourites){ favourites = get_favourite_entities(path); }
58
99
 
59
- if (undefined === favourites){ favourites = get_favourite_entities(); }
60
-
61
- var entity = page_entity();
62
- var type = page_entity_base_type();
100
+ var entity = page_entity(path);
101
+ var type = page_entity_base_type(path);
63
102
 
64
103
  if ((favourites[type] != undefined) && (favourites[type][entity] != undefined)){
65
- $('a#toggle_favourite').addClass('active').removeClass('inactive');
104
+ link.addClass('active').removeClass('inactive');
66
105
  }else{
67
- $('a#toggle_favourite').removeClass('active').addClass('inactive');
106
+ link.removeClass('active').addClass('inactive');
68
107
  }
69
-
70
108
  break
71
- case "entity_list":
72
109
 
73
- if (undefined === favourites){ favourites = get_favourite_entity_lists(); }
110
+ case "entity_list":
111
+ if (undefined === favourites){ favourites = get_favourite_entity_lists(path); }
74
112
 
75
- var entity_list = page_entity_list();
76
- var type = page_entity_base_type();
113
+ var entity_list = page_entity_list(path);
114
+ var type = page_entity_base_type(path);
77
115
 
78
116
  if ((favourites[type] != undefined) && ($.inArray(entity_list, favourites[type]) != -1 )){
79
- $('a#toggle_favourite').addClass('active').removeClass('inactive');
117
+ link.addClass('active').removeClass('inactive');
80
118
  }else{
81
- $('a#toggle_favourite').removeClass('active').addClass('inactive');
119
+ link.removeClass('active').addClass('inactive');
82
120
  }
121
+ break
83
122
 
123
+ case "entity_map":
124
+ if (undefined === favourites){ favourites = get_favourite_entity_maps(path); }
125
+
126
+ var entity_list = page_entity_map(path);
127
+ var type = page_entity_base_type(path);
128
+ var column = page_entity_map_column(path);
129
+
130
+ if ((favourites[type] != undefined) && (favourites[type][column] != undefined) && ($.inArray(entity_list, favourites[type][column]) != -1 )){
131
+ link.addClass('active').removeClass('inactive');
132
+ }else{
133
+ link.removeClass('active').addClass('inactive');
134
+ }
84
135
 
85
136
  break
86
137
  }
87
138
  }
88
139
 
140
+ //{{{{ FAVOURITE MENUS
141
+
89
142
  function favourite_type_ul(entities){
90
143
  var type_ul = $('<ul>')
91
144
  for (var entity in entities){
@@ -110,6 +163,18 @@ function favourite_list_type_ul(type, lists){
110
163
  return type_ul
111
164
  }
112
165
 
166
+ function favourite_map_type_ul(type, column, maps){
167
+ var type_ul = $('<ul>')
168
+ for (var map in maps){
169
+ var map = maps[map];
170
+ var link = map_link(type, column, map)
171
+ var entity_li = $('<li>');
172
+ entity_li.html(link);
173
+ type_ul.append(entity_li);
174
+ }
175
+ return type_ul
176
+ }
177
+
113
178
  function update_favourite_entities(favourites){
114
179
  if (undefined === favourites){ favourites = get_favourite_entities(); }
115
180
 
@@ -119,15 +184,15 @@ function update_favourite_entities(favourites){
119
184
 
120
185
  for (var type in favourites){
121
186
 
122
- var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">' + type + '</a></h5></li>');
123
- var entities = favourites[type];
124
- var type_ul = favourite_type_ul(entities);
125
- type_ul.addClass("dropdown").prepend(title_li);
187
+ var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">' + type + '</a></h5></li>');
188
+ var entities = favourites[type];
189
+ var type_ul = favourite_type_ul(entities);
190
+ type_ul.addClass("dropdown").prepend(title_li);
126
191
 
127
- var type_li = $('<li class="has-dropdown">')
128
- type_li.append($('<a href="#">' + type + '</a>')).append(type_ul);
192
+ var type_li = $('<li class="has-dropdown">')
193
+ type_li.append($('<a href="#">' + type + '</a>')).append(type_ul);
129
194
 
130
- favourites_ul.append(type_li);
195
+ favourites_ul.append(type_li);
131
196
  }
132
197
 
133
198
  var current_favourites = $('li#top-favourites ul.favourite_entities')
@@ -143,28 +208,56 @@ function update_favourite_entity_lists(favourites){
143
208
  favourites_ul.append(title_li);
144
209
 
145
210
  for (var type in favourites){
211
+ var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">' + type + '</a></h5></li>');
212
+ var lists = favourites[type];
213
+ var type_ul = favourite_list_type_ul(type, lists);
214
+
215
+ type_ul.addClass("dropdown").prepend(title_li);
216
+
217
+ var type_li = $('<li class="has-dropdown">')
218
+ type_li.append($('<a href="#">' + type + '</a>')).append(type_ul);
219
+
220
+ favourites_ul.append(type_li);
221
+ }
222
+
223
+ var current_favourites = $('li#top-favourite_lists ul.favourite_entity_lists')
224
+ current_favourites.replaceWith(favourites_ul);
225
+ update_favourite_entities_star(favourites);
226
+ update_list_selects(favourites);
227
+ }
146
228
 
147
- var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">' + type + '</a></h5></li>');
148
- var lists = favourites[type];
149
- var type_ul = favourite_list_type_ul(type, lists);
229
+ function update_favourite_entity_maps(favourites){
230
+ if (undefined === favourites){ favourites = get_favourite_entity_maps(); }
231
+
232
+ var favourites_ul = $('<ul class="dropdown favourite_entity_maps" >');
233
+ var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">Favourite Entities Lists</a></h5></li>');
234
+ favourites_ul.append(title_li);
235
+
236
+ for (var type in favourites){
237
+ for (var column in favourites[type]){
238
+ var title_li = $('<li class="title back js-generated rbbt-generated"><h5><a href="#">' + type + ' - ' + column + '</a></h5></li>');
239
+ var lists = favourites[type][column];
240
+ var type_ul = favourite_map_type_ul(type, column, lists);
150
241
 
151
242
  type_ul.addClass("dropdown").prepend(title_li);
152
243
 
153
244
  var type_li = $('<li class="has-dropdown">')
154
- type_li.append($('<a href="#">' + type + '</a>')).append(type_ul);
245
+ type_li.append($('<a href="#">' + type + ' - ' + column + '</a>')).append(type_ul);
155
246
 
156
247
  favourites_ul.append(type_li);
248
+ }
249
+
157
250
  }
158
251
 
159
- var current_favourites = $('li#top-favourite_lists ul.favourite_entity_lists')
252
+ var current_favourites = $('li#top-favourite_maps ul.favourite_entity_maps')
160
253
  current_favourites.replaceWith(favourites_ul);
161
254
  update_favourite_entities_star(favourites);
162
- update_selects(favourites);
255
+ update_map_selects(favourites);
163
256
  }
164
257
 
165
- function update_select(select, lists){
166
- select.find('option[class*=automatic_load]').remove();
258
+ //{{{{ LIST SELECTS
167
259
 
260
+ function update_list_select(select, type, lists){
168
261
  if (select.attr('attr-allow-empty') == 'true'){
169
262
  var option = $('<option value="none" class="loaded">none</option>')
170
263
  select.append(option);
@@ -180,31 +273,169 @@ function update_select(select, lists){
180
273
  var option = null;
181
274
  var name = elems
182
275
  if (selected == null || name != selected){
183
- option = $('<option class="automatic_load" value="' + name + '">' + name + '</option>');
276
+ option = $('<option attr-entity_type="' + type + '" class="automatic_load" value="' + name + '">' + name + '</option>');
184
277
  }else{
185
- option = $('<option class="automatic_load" selected=selected value="' + name + '">' + name + '</option>');
278
+ option = $('<option attr-entity_type="' + type + '" class="automatic_load" selected=selected value="' + name + '">' + name + '</option>');
186
279
  }
187
280
  select.append(option);
188
281
  return true
189
282
  })
190
-
191
283
  }
192
284
 
193
- function update_selects(favourites){
285
+ function update_list_selects(favourites){
194
286
  if (undefined === favourites){ favourites = get_favourite_entity_lists(); }
195
287
 
288
+ $('select.favourite_lists').find('option.automatic_load').remove()
289
+
196
290
  $.each(favourites, function(type, lists){
197
291
  $('select.favourite_lists[type=' + type + ']').each(function(){
198
292
  var select = $(this);
199
- update_select(select, lists);
293
+ update_list_select(select, type, lists);
294
+ })
295
+ $('select.favourite_lists[type=All]').each(function(){
296
+ var select = $(this);
297
+ select.append($('<option class="automatic_load" disabled>'+ type +'</option>'));
298
+ update_list_select(select, type, lists);
200
299
  })
201
300
  });
301
+
202
302
  }
203
303
 
204
304
  register_dom_update('select.favourite_lists', function(select){
305
+ $.each(select, function(){
306
+ var select = $(this);
205
307
  var type = select.attr('type');
206
- var lists = get_favourite_entity_lists()[type];
207
- if (undefined !== lists){
208
- update_select(select, lists);
308
+ console.log(type)
309
+ if (type == 'All'){
310
+ update_list_selects();
311
+ }else{
312
+ var lists = get_favourite_entity_lists()[type];
313
+ if (undefined !== lists){
314
+ update_list_select(select, type, lists);
315
+ }
316
+ }
317
+ })
318
+ })
319
+
320
+ //{{{{ MAP SELECTS
321
+
322
+ function update_map_select(select, type, map_lists){
323
+ if (select.attr('attr-allow-empty') == 'true'){
324
+ var option = $('<option value="none" class="loaded">none</option>')
325
+ select.append(option);
326
+ }
327
+
328
+ var selected = null;
329
+
330
+ if (select.attr('attr-selected') != undefined ){
331
+ selected = select.attr('attr-selected');
332
+ }
333
+
334
+ for (column in map_lists){
335
+ var maps = map_lists[column]
336
+ if (undefined === select.attr('column') || select.attr('column') == column){
337
+ $.each(maps, function(name, elems){
338
+ var option = null;
339
+ var name = elems
340
+ if (selected == null || name != selected){
341
+ option = $('<option class="automatic_load" attr-entity_type="' + type + '" attr-column="'+ column + '" value="' + name + '">' + name + '</option>');
342
+ }else{
343
+ option = $('<option class="automatic_load" attr-entity_type="' + type + '" attr-column="'+ column + '" selected=selected value="' + name + '">' + name + '</option>');
344
+ }
345
+ select.append(option);
346
+ return true
347
+ })
348
+ }
349
+ }
350
+ }
351
+
352
+ function update_map_selects(favourites){
353
+ if (undefined === favourites){ favourites = get_favourite_entity_maps(); }
354
+
355
+ $('select.favourite_maps').find('option.automatic_load').remove()
356
+
357
+ $.each(favourites, function(type, maps){
358
+ $('select.favourite_maps[type=' + type + ']').each(function(){
359
+ var select = $(this);
360
+ update_map_select(select, type, maps);
361
+ })
362
+ $('select.favourite_maps[type=All]').each(function(){
363
+ var select = $(this);
364
+ select.append($('<option class="automatic_load" disabled>'+ type +'</option>'));
365
+ update_map_select(select, type, maps);
366
+ })
367
+
368
+ });
369
+ }
370
+
371
+ register_dom_update('select.favourite_maps', function(select){
372
+ var type = select.attr('type');
373
+ if (type == "All"){
374
+ update_map_selects();
375
+ }else{
376
+ var map_lists = get_favourite_entity_maps()[type];
377
+ if (undefined !== map_lists){
378
+ update_map_select(select, type, map_lists);
379
+ }
380
+ }
381
+ })
382
+
383
+ // HIGHLIGHT
384
+
385
+ if (undefined === localStorage["highlights"]){
386
+ localStorage["highlights"] = '{}'
387
+ }
388
+
389
+ register_dom_update('ul.favourite_entity_lists > li > ul.dropdown > li > a:not(.highlight)', function(list_link){
390
+ list_link.before($('<a class="highlight"><i class="foundicon-flag"/></a>'))
391
+ })
392
+
393
+ function add_highlight(type, list){
394
+ highlights = JSON.parse(localStorage["highlights"])
395
+ if (undefined === highlights[type]){
396
+ highlights[type] = [];
397
+ }
398
+ highlights[type].push(list)
399
+ highlights[type] = $.unique(highlights[type]);
400
+ localStorage["highlights"] = JSON.stringify(highlights)
401
+ }
402
+
403
+ function remove_highlight(type, list){
404
+ highlights = JSON.parse(localStorage["highlights"])
405
+ if (undefined === highlights[type]){ return }
406
+ highlights[type] = remove_from_array(highlights[type], list)
407
+ $('ul.favourite_entity_lists li[entity_type=' + type + '] ul li a[href*="' + list + '"]').parent().find('a.highlight').removeClass('active')
408
+ localStorage["highlights"] = JSON.stringify(highlights)
409
+ }
410
+
411
+ function apply_highlights(){
412
+ $('a.entity').removeClass('highlighted')
413
+ highlights = JSON.parse(localStorage["highlights"])
414
+ var entities = []
415
+ for (type in highlights){
416
+ for (i in highlights[type]){
417
+ var list = highlights[type][i]
418
+ var entities = list_entities(type, list)
419
+ $('ul.favourite_entity_lists li[entity_type=' + type + '] ul li a[href*="' + list + '"]').parent().find('a.highlight').addClass('active')
420
+ var type_entities = $('a.entity.' + type)
421
+ for (j in entities){
422
+ var entity_id = entities[j];
423
+ type_entities.filter('[attr-entity_id=' + entity_id + ']').addClass('highlighted')
424
+ }
425
+ }
426
+ }
427
+ }
428
+
429
+ $('body').on('click', 'ul.favourite_entity_lists a.highlight', function(){
430
+ var link = $(this)
431
+ var list_link = link.parent().children().last()
432
+ var list = list_link.attr('href').split("/")[3]
433
+ var type = link.closest('li.type').find('a').html()
434
+ highlights = JSON.parse(localStorage["highlights"])
435
+ if (undefined === highlights[type] || ! $.inArray(highlights[type], list)){
436
+ add_highlight(type, list)
437
+ }else{
438
+ remove_highlight(type, list)
209
439
  }
440
+ apply_highlights()
210
441
  })