rbbt-rest 1.4.10 → 1.4.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/lib/rbbt/rest/client/step.rb +1 -1
  3. data/lib/rbbt/rest/common/cache.rb +2 -1
  4. data/lib/rbbt/rest/common/forms.rb +6 -6
  5. data/lib/rbbt/rest/common/locate.rb +25 -2
  6. data/lib/rbbt/rest/common/misc.rb +23 -7
  7. data/lib/rbbt/rest/common/render.rb +1 -3
  8. data/lib/rbbt/rest/common/table.rb +52 -3
  9. data/lib/rbbt/rest/main.rb +21 -5
  10. data/lib/rbbt/rest/web_tool.rb +1 -0
  11. data/lib/rbbt/rest/workflow.rb +20 -1
  12. data/lib/rbbt/rest/workflow/jobs.rb +3 -1
  13. data/lib/rbbt/rest/workflow/render.rb +17 -3
  14. data/share/views/compass/_app.sass +17 -0
  15. data/share/views/compass/app.sass +1 -17
  16. data/share/views/compass/finder.sass +7 -7
  17. data/share/views/compass/grid_system.sass +1 -9
  18. data/share/views/compass/layout.sass +2 -2
  19. data/share/views/compass/rbbt/table.sass +1 -0
  20. data/share/views/compass/screen_sizes.sass +16 -0
  21. data/share/views/compass/top_menu.sass +1 -0
  22. data/share/views/entity_partials/action_card.haml +2 -2
  23. data/share/views/entity_partials/entity_card.haml +10 -4
  24. data/share/views/entity_partials/entity_list_card.haml +7 -2
  25. data/share/views/entity_partials/entity_map_card.haml +1 -1
  26. data/share/views/error.haml +16 -12
  27. data/share/views/form.haml +2 -2
  28. data/share/views/help.haml +3 -3
  29. data/share/views/help/UI.haml +156 -163
  30. data/share/views/help/entity.haml +3 -3
  31. data/share/views/help/workflow.haml +1 -1
  32. data/share/views/job_result/job_control.haml +3 -2
  33. data/share/views/job_result/tsv.haml +17 -12
  34. data/share/views/layout.haml +18 -43
  35. data/share/views/layout/coda.haml +40 -0
  36. data/share/views/layout/footer.haml +0 -0
  37. data/share/views/layout/top_menu/finder.haml +1 -1
  38. data/share/views/partials/form.haml +1 -1
  39. data/share/views/partials/table.haml +1 -1
  40. data/share/views/public/js/app.js +4 -4
  41. data/share/views/public/js/defer.js +26 -0
  42. data/share/views/public/js/helpers.js +8 -1
  43. data/share/views/public/js/rbbt/actions.js +2 -2
  44. data/share/views/public/js/rbbt/hide.js +12 -8
  45. data/share/views/public/js/rbbt/menu.js +2 -1
  46. data/share/views/public/js/rbbt/modal.js +5 -2
  47. data/share/views/public/js/rbbt/reveal.js +7 -5
  48. data/share/views/wait.haml +1 -1
  49. metadata +7 -3
  50. data/share/views/public/js/deffer.js +0 -26
@@ -128,7 +128,7 @@
128
128
  the report you need to use the Reload button on the top of the page.
129
129
  An exception to this are Actions. These can be opened in separate windows,
130
130
  in which case it works as usual, but are more often opened from the
131
- *Action Section* of the report, which will be covered bellow. The Action
131
+ *Action Section* of the report, which will be covered below. The Action
132
132
  Section has its own Reload button.
133
133
 
134
134
  To Star button toggles the favourite status of the current Entity or
@@ -157,7 +157,7 @@
157
157
 
158
158
  Reports may have any type of content, however, they are usually based on
159
159
  a common template. It has a title on the top row, a side bar on the left,
160
- a description on the right, at the top, and the Actions Section bellow
160
+ a description on the right, at the top, and the Actions Section below
161
161
  it. Note that, depending on the particular report, the description may
162
162
  be empty or there might not be any actions associated to it.
163
163
 
@@ -177,7 +177,7 @@
177
177
  type of Entity. When Actions are available for a Report, they are displayed
178
178
  in the Actions Section. This section is composed on an horizontal bar
179
179
  with a button for each each action. When a button is clicked the action
180
- is displayed bellow the bar. If the action takes some time, a 'Loading...'
180
+ is displayed below the bar. If the action takes some time, a 'Loading...'
181
181
  message will appear. The bar includes a button to reload an action that
182
182
  has already been computed. If the action accepts parameters, the user
183
183
  will be required to set them. To set the parameters click on the button
@@ -31,7 +31,7 @@
31
31
  optional for workflow development and may be missing). Each task has its
32
32
  own page, which contains the input form. Submitting the form takes you to
33
33
  the results page. Form and result pages follow a general template, which
34
- we shall review bellow.
34
+ we shall review below.
35
35
 
36
36
  Workflow and task pages, like any other page in this system, are subject
37
37
  to being redefined; in this case by the workflow author. This makes it
@@ -9,10 +9,11 @@
9
9
  %li
10
10
  %a(href="/#{[workflow.to_s, task, jobname] * "/"}?_format=raw") raw
11
11
 
12
- - if job.files.any?
12
+ - files = job.files - ["html", "html.info"]
13
+ - if files.any?
13
14
  %dt Files
14
15
  %dd.job_files
15
16
  %ul
16
- - job.files.each do |file|
17
+ - files.sort.each do |file|
17
18
  %li
18
19
  %a(href="/#{[workflow.to_s, task, jobname, "file", file] * "/"}")= file
@@ -1,12 +1,17 @@
1
- - table_id = [workflow.to_s, task, jobname] * "_"
2
- - table_class = 'workflow_tsv_result'
3
- - begin
4
- - page = result.size > 50 ? "1" : nil
5
- - rescue
6
- - page = "1"
7
-
8
- - rows, total_size = tsv_rows(result, page)
9
- - header = result.all_fields
10
-
11
- = workflow_partial('partials/table', workflow, task,
12
- locals.merge(:table_id => table_id, :page => page, :table_class => table_class, :rows => rows, :total_size => total_size, :header => result.all_fields, :row_ids => :use, :table_url => jobname ? File.join('/', workflow.to_s, task, jobname) : nil))
1
+ - if result.any?
2
+ - table_id = [workflow.to_s, task, jobname] * "_"
3
+ - table_class = 'workflow_tsv_result'
4
+ - begin
5
+ - page = result.size > 50 ? "1" : nil
6
+ - rescue
7
+ - page = "1"
8
+
9
+ - rows, total_size = tsv_rows(result, page)
10
+ - header = result.all_fields
11
+
12
+ = workflow_partial('partials/table', workflow, task,
13
+ locals.merge(:table_id => table_id, :page => page, :table_class => table_class, :rows => rows, :total_size => total_size, :header => result.all_fields, :row_ids => :use, :table_url => jobname ? File.join('/', workflow.to_s, task, jobname) : nil))
14
+
15
+ - else
16
+
17
+ Empty result
@@ -23,7 +23,7 @@
23
23
  = serve_css
24
24
 
25
25
 
26
- - record_js '/js/deffer'
26
+ - record_js '/js/defer'
27
27
 
28
28
  // Third party frameworks
29
29
 
@@ -54,52 +54,27 @@
54
54
 
55
55
  %body
56
56
 
57
- /{{{ CONTENT
58
- /-----------
59
- #content
60
- - $wait = false
61
- = yield
62
-
63
-
64
57
  /{{{ TOP MENU
65
58
  /------------
66
59
  #top_menu
67
60
  = partial_render('layout/top_menu')
68
61
 
69
-
62
+ /{{{ MODAL
63
+ /---------
70
64
  #modal
71
- #coda
72
- = serve_js
73
- :javascript
74
- var production = #{production? ? "true" : "false"};
75
- start_defferred()
76
-
77
- - if $wait
78
- :javascript
79
- var url = window.location.toString();
80
- var wait_timeout = 2000;
81
-
82
- function reload(){
83
-
84
- $.ajax({url: add_parameters(url, '_layout=false'), cache:false,
85
- success: function(data, stat, req){
86
- if (req.status == 202){
87
- $('#content').html(data)
88
- window.setTimeout(reload, wait_timeout);
89
- }else{
90
- window.location = url;
91
- }
92
- },
93
-
94
- error:function(jqXHR, status, thrownError){
95
- if (undefined === jqXHR.responseText || jqXHR.responseText == ''){
96
- $('#content').html('No response. Server down?')
97
- }else{
98
- $('#content').html(jqXHR.responseText)
99
- }
100
- }})
101
- }
102
-
103
- window.setTimeout(reload, wait_timeout);
104
-
105
65
 
66
+ /{{{ CONTENT
67
+ /-----------
68
+ #content
69
+ - @reload_page = false
70
+ = yield
71
+
72
+ /{{{ FOOTER
73
+ /----------
74
+ #footer
75
+ =partial_render('layout/footer')
76
+
77
+ /{{{ CODA
78
+ /--------
79
+ #coda
80
+ =partial_render('layout/coda')
@@ -0,0 +1,40 @@
1
+ = serve_js
2
+ :javascript
3
+ var production = #{production? ? "true" : "false"};
4
+ $('.offcanvas').click(function(e){
5
+ if( e.target !== this )
6
+ return;
7
+ $(this).toggleClass('show')
8
+ })
9
+
10
+ start_deferred()
11
+
12
+ - if @reload_page
13
+ :javascript
14
+ var url = window.location.toString();
15
+ var wait_timeout = 2000;
16
+
17
+ function reload(){
18
+
19
+ $.ajax({url: add_parameters(url, '_layout=false'), cache:false,
20
+ success: function(data, stat, req){
21
+ if (req.status == 202){
22
+ $('#content').html(data)
23
+ window.setTimeout(reload, wait_timeout);
24
+ }else{
25
+ window.location = url;
26
+ }
27
+ },
28
+
29
+ error:function(jqXHR, status, thrownError){
30
+ if (undefined === jqXHR.responseText || jqXHR.responseText == ''){
31
+ $('#content').html('No response. Server down?')
32
+ }else{
33
+ $('#content').html(jqXHR.responseText)
34
+ }
35
+ }})
36
+ }
37
+
38
+ window.setTimeout(reload, wait_timeout);
39
+
40
+
File without changes
@@ -1,4 +1,4 @@
1
1
  %form.collapse(action='/find' method="POST")
2
- %input(type="text" name="term")
2
+ %input(type="search" name="term")
3
3
  %button.secondary.radius.button(type="submit") Find
4
4
 
@@ -31,9 +31,9 @@
31
31
 
32
32
 
33
33
  .input.submit
34
+ %input(type="submit")
34
35
  - if klass =~ /workflow_task/
35
36
  %input.jobname(type='text' name='jobname' placeholder='optional job name')
36
37
  %select.format(name="_format")
37
38
  - [:html, :json, :raw, :binary].each do |format|
38
39
  %option(value=format)= format.to_s
39
- %input(type="submit")
@@ -32,7 +32,7 @@
32
32
  - header.each do |header|
33
33
  %th= header
34
34
 
35
- %tbody
35
+ %tbody<
36
36
  - rows.each do |row|
37
37
  - case row_ids
38
38
  - when :consume
@@ -12,15 +12,15 @@ function update_rbbt(){
12
12
  //$('table.tablesorter').tablesorter()
13
13
  $('body > #modal').modal()
14
14
  $('.action_controller').action_controller()
15
- $('#top_menu li.favourites').favourites('update_list_selects').favourites('update_map_selects')
15
+ $('#top_menu .favourites').favourites('update_list_selects').favourites('update_map_selects')
16
16
 
17
- start_defferred()
17
+ start_deferred()
18
18
  fit_content()
19
19
  }
20
20
 
21
21
  $(function(){
22
22
 
23
- register_dom_update('#top_menu > ul > li.reload', function(item){
23
+ register_dom_update('#top_menu > .reload', function(item){
24
24
  item.click(function(){
25
25
  var url = window.location.toString();
26
26
  url = url.replace(/#$/, '');
@@ -43,7 +43,7 @@ $(function(){
43
43
  })
44
44
  })
45
45
 
46
- $('#top_menu li.favourites').favourites()
46
+ $('#top_menu .favourites').favourites()
47
47
 
48
48
  update_rbbt()
49
49
  })
@@ -0,0 +1,26 @@
1
+ var deferred_execution = [];
2
+
3
+ function defer(deps, func){
4
+ if (undefined === func){
5
+ func = deps;
6
+ deps = undefined;
7
+ }
8
+ if (undefined !== deps){
9
+ deferred_execution.push([deps, func]);
10
+ }else{
11
+ deferred_execution.push(func)
12
+ }
13
+ }
14
+
15
+ function start_deferred(){
16
+ $(deferred_execution).each(function(pos,func){
17
+ if (typeof(func) == 'object'){
18
+ require_js(func[0], func[1]);
19
+ }else{
20
+ func.call();
21
+ }
22
+ })
23
+ deferred_execution = [];
24
+ }
25
+
26
+
@@ -56,6 +56,7 @@ function parse_parameters(params){
56
56
  return ret
57
57
  }
58
58
 
59
+ var required_js = [];
59
60
  function require_js(url, success){
60
61
  if (typeof url == 'object'){
61
62
  if (url.length > 1){
@@ -78,7 +79,13 @@ function require_js(url, success){
78
79
  }
79
80
 
80
81
  url = url.replace('/js/', '/js-find/')
81
- $.ajax({url: url, cache:cache, dataType:'script', async: async, success: success} ).fail(function(jqxhr, settings, exception){ })
82
+
83
+ if ($.inArray(url, required_js) >= 0){
84
+ if (typeof success == 'function'){ success.call() }
85
+ }else{
86
+ var _success = function(){ if (typeof success == 'function'){ success.call() }; required_js.push(url); }
87
+ $.ajax({url: url, cache:cache, dataType:'script', async: async, success: _success} ).fail(function(jqxhr, settings, exception){ console.log('Failed to load ' + url) })
88
+ }
82
89
  }
83
90
  }
84
91
 
@@ -36,7 +36,7 @@ $.widget("rbbt.action_controller", {
36
36
  },
37
37
 
38
38
  _update_jobs: function(){
39
- var job_list = $('#top_menu .user ul.jobs')
39
+ var job_list = $('#top_menu .user .jobs')
40
40
  job_list.html("")
41
41
  for(i in this.options.bookmarked){
42
42
  var url = this.options.bookmarked[i];
@@ -77,7 +77,7 @@ $.widget("rbbt.action_controller", {
77
77
  controller.on('click', '> ul.controls > li.description', function(e){ tool._display_description(this); return false});
78
78
  controller.on('click', '> ul.controls > li.pin', function(e){ tool._toggle_pin(this); return false});
79
79
  controller.on('click', '> ul.controls > li.url', function(e){ tool._toogle_track(this); return false});
80
- $('#top_menu li.user ul.jobs').on('click', 'a.remove_element', function(){
80
+ $('#top_menu .user ul.jobs').on('click', 'a.remove_element', function(){
81
81
  var link = $(this).next('a')
82
82
  tool._untrack(link.attr('href'))
83
83
  })
@@ -8,13 +8,13 @@ $.widget("rbbt.hide_toggle", {
8
8
  if (this.options.title === undefined){ this.options.title = element.attr('hide-title') }
9
9
  if (this.options.title === undefined){ this.options.title = "toggle" }
10
10
 
11
- var button = this.options.button = $('<a>').addClass('hide_toggle').html(this.options.title)
11
+ var button = this.options.button = $('<a>').addClass('hide_toggle').html(this.options.title).attr('data-title', this.options.title)
12
12
 
13
13
  button.click(function(){ tool.toggle(); update_rbbt(); return false })
14
14
  if (this.options.container !== undefined){
15
15
  $(this.options.container).first().append(button)
16
16
  }
17
- this.hide()
17
+ //this.hide()
18
18
  },
19
19
 
20
20
  _swap: function(){
@@ -29,8 +29,8 @@ $.widget("rbbt.hide_toggle", {
29
29
 
30
30
  hide: function(){
31
31
  var tool = this;
32
- this.element.addClass('hidden').removeClass('shown')
33
- this.options.button.addClass('hidden').removeClass('shown')
32
+ this.element.addClass('hidden').removeClass('shown').removeClass('show')
33
+ this.options.button.addClass('hidden').removeClass('shown').removeClass('show')
34
34
 
35
35
  if (this.options.container === undefined){ this._swap(); }
36
36
  },
@@ -41,8 +41,8 @@ $.widget("rbbt.hide_toggle", {
41
41
  }else{
42
42
  $(this.options.container).find('.hide_toggle.shown').trigger('click')
43
43
  }
44
- this.element.addClass('shown').removeClass('hidden')
45
- this.options.button.addClass('shown').removeClass('hidden')
44
+ this.element.addClass('shown').addClass('show').removeClass('hidden')
45
+ this.options.button.addClass('shown').addClass('show').removeClass('hidden')
46
46
  },
47
47
 
48
48
  toggle: function(){
@@ -55,6 +55,10 @@ $.widget("rbbt.hide_toggle", {
55
55
 
56
56
  })
57
57
 
58
- $('#top_menu > ul > li.hide').hide_toggle({container: '#top_menu li.container'})
58
+ $('#top_menu .hide').hide_toggle({container: '#top_menu .container'})
59
59
 
60
- $('.sidebar').hide_toggle({container: '#top_menu li.container', title: 'Side'})
60
+ $('.sidebar').hide_toggle({container: '#top_menu .container', title: 'Side'})
61
+
62
+ $('.actions.togglable_hide .action_controller').parents('.togglable_hide').first().hide_toggle({container: '#top_menu .container'})
63
+
64
+ register_dom_update('.fixable', function(elem){ elem.hide_toggle({container: '#top_menu .container', title: "Fixed"}) })
@@ -1,4 +1,4 @@
1
- register_dom_update('dl.tabs > dt, dl.rbbt_tabs > dt.next, dl.rbbt_menu > .next, dl.rbbt_vertical_menu > .next, dl.rbbt_accordion > .next', function(title){
1
+ register_dom_update('dl.dropdown_menu > .next, dl.menu > .next, dl.tabs > dt, dl.rbbt_tabs > dt.next, dl.rbbt_menu > .next, dl.rbbt_vertical_menu > .next, dl.rbbt_accordion > .next', function(title){
2
2
  title.click(function(){
3
3
  var option = $(this)
4
4
  var content = option.next()
@@ -17,6 +17,7 @@ register_dom_update('dl.tabs > dt, dl.rbbt_tabs > dt.next, dl.rbbt_menu > .next,
17
17
  option.addClass('show');
18
18
  menu.addClass('show')
19
19
  }
20
+ return false;
20
21
  })
21
22
  })
22
23
 
@@ -26,7 +26,7 @@ $.widget("rbbt.modal", {
26
26
  modal.on('click', 'a.toggle_favourite', function(){
27
27
  var url = $(tool.element).find('> .content').attr('target-href')
28
28
  if (url !== undefined){
29
- $('#top_menu li.favourites').favourites('toggle_page', url)
29
+ $('#top_menu .favourites').favourites('toggle_page', url)
30
30
  }
31
31
  return false
32
32
  })
@@ -45,7 +45,7 @@ $.widget("rbbt.modal", {
45
45
 
46
46
  update_star: function(){
47
47
  var url = this._shown_url()
48
- if ($('#top_menu li.favourites').favourites('is_favourite', url)){
48
+ if ($('#top_menu .favourites').favourites('is_favourite', url)){
49
49
  $(this.element).find('a.toggle_favourite').addClass('active');
50
50
  }else{
51
51
  $(this.element).find('a.toggle_favourite').removeClass('active');
@@ -58,6 +58,7 @@ $.widget("rbbt.modal", {
58
58
 
59
59
  modal.find('> .content').html(content)
60
60
  this.element.show()
61
+ this.element.addClass('show');
61
62
  update_rbbt()
62
63
  },
63
64
 
@@ -86,12 +87,14 @@ $.widget("rbbt.modal", {
86
87
  }
87
88
 
88
89
  tool.element.show()
90
+ this.element.addClass('show');
89
91
  if (undefined !== complete){ complete()}
90
92
  update_rbbt()
91
93
  })
92
94
  },
93
95
 
94
96
  close: function(){
97
+ this.element.removeClass('show');
95
98
  this.element.hide()
96
99
  }
97
100
  })
@@ -1,21 +1,23 @@
1
1
  $.widget("rbbt.reveal", {
2
2
  options: {
3
- modal: $('body > #modal')
3
+ modal: $('#modal').first()
4
4
  },
5
5
 
6
6
  _create: function() {
7
7
  var tool = this;
8
- var modal = this.options.modal
8
+ var modal = this.options.modal;
9
+
9
10
  tool.element.click(function(){
11
+ var modal = $('#modal').first();
10
12
  var link = $(this);
11
13
  var source_id = link.attr('attr-reveal_id');
12
14
  var title = link.attr('attr-reveal_title');
13
15
  var content = $('#' + source_id);
14
16
 
15
- var height = window.innerHeight - $('#top_menu').outerHeight(true) - 50 ;
16
- var width = window.innerWidth - 100;
17
+ var height = window.innerHeight - $('#top_menu').outerHeight(true);
17
18
  modal.css('height',height)
18
- modal.css('width', width)
19
+ //var width = window.innerWidth;
20
+ //modal.css('width', width)
19
21
 
20
22
  modal.modal('show', content.html(), title, source_id);
21
23
  return false