rbbt-rest 1.1.4 → 1.1.5

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 (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
@@ -3,7 +3,6 @@
3
3
  @import url(http://fonts.googleapis.com/css?family=Open+Sans)
4
4
 
5
5
  body, p, h1, h2, h3, h4, h5, h6
6
- //font-family: Arial, Liberation Sans,DejaVu Sans,sans-serif
7
6
  font-family: "Open Sans", "Trebuchet MS", "Noticia Text", Verdana, Arial, "Helvetica Neue", Helvetica, sans-serif
8
7
  line-height: 1.4em
9
8
 
@@ -86,3 +85,32 @@ footer
86
85
 
87
86
  ul.clean_list
88
87
  list-style: none
88
+
89
+ span.error_message
90
+ font-size: 1.2em
91
+ display: block
92
+ margin: 1em 0px
93
+
94
+ ul.error_backtrace, ul.step_messages
95
+ color: gray
96
+
97
+ select.favourite_entities
98
+ option:disabled
99
+ font-weight: bold
100
+
101
+ a.entity.highlighted
102
+ font-weight: bold
103
+
104
+ .help
105
+ margin: auto
106
+ ul
107
+ margin-left: 2em
108
+
109
+ p
110
+ max-width: 60em
111
+
112
+
113
+ a.help
114
+ display: block
115
+ font-size: 2em
116
+ line-height: 2em
@@ -10,7 +10,14 @@
10
10
  //border: solid 1px darken($white, 10%)
11
11
  @extend .panel
12
12
 
13
- .button-group-list
13
+ =normal_button()
14
+ @include button-base
15
+ @include button-size
16
+ @include button-style
17
+ @include radius
18
+ @include single-transition
19
+
20
+ =button-group-list()
14
21
  @include inline-list()
15
22
  @include button-group-container()
16
23
  margin: 0
@@ -20,11 +27,16 @@
20
27
  margin: 0 2px 0 0
21
28
 
22
29
  a
23
- @include button-base
24
- @include button-size
25
- @include button-style
26
- @include radius
27
- @include single-transition
30
+ +normal_button()
28
31
  margin-bottom: 2px
29
32
  font-size: 0.8em
30
33
 
34
+ .button-group-list
35
+ +button-group-list()
36
+
37
+ =ellipsis_text()
38
+ width: 100%
39
+ overflow: hidden
40
+ white-space: nowrap
41
+ text-overflow: ellipsis
42
+
@@ -1,5 +1,8 @@
1
1
  $triglecolor: rgba(0,0,0,0.15)
2
2
  table
3
+ //caption
4
+ width: 100%
5
+
3
6
  &.wide
4
7
  td
5
8
  max-width: 200px
@@ -18,12 +21,13 @@ table
18
21
  @include inline-list()
19
22
  @include button-group-container()
20
23
  margin-bottom: 0
21
- float: right
24
+ float: left
22
25
  li.filter
23
- .filter_controls
26
+ @media print
27
+ &
24
28
  display: none
25
29
 
26
-
30
+
27
31
  &.sorted
28
32
  thead
29
33
  tr
@@ -45,3 +49,15 @@ table
45
49
  &.headerSortUp:after
46
50
  margin-bottom: 5px
47
51
  @include css-triangle(5px, $triglecolor, bottom)
52
+
53
+ .table_column_selector
54
+ li
55
+ @include grid-row()
56
+
57
+ span
58
+ @include ellipsis_text()
59
+ @include grid-column(8)
60
+ a
61
+ @include grid-column(2, $last-column:false)
62
+
63
+
@@ -1,11 +1,17 @@
1
1
  #header
2
+ margin-bottom: 1em
2
3
  nav.top-bar
3
4
  margin-bottom: 0 !important
4
5
 
6
+ section.top-bar-section
7
+ ul
8
+ a#reload_page, a#toggle_favourite
9
+ line-height: 43px
10
+
5
11
  li#top-add-favourite
6
12
  cursor: pointer
7
13
  li.search
8
- width: auto
14
+ width: 300px
9
15
  //@include grid-row(nest-collapse)
10
16
  input, button
11
17
  display: inline-block
@@ -16,4 +22,4 @@
16
22
  left: -5px
17
23
  @media #{$not_small}
18
24
  top: 9
19
-
25
+
@@ -0,0 +1,5 @@
1
+ - entity_map_card = EntityMapCard.new map, map_id
2
+
3
+ - entity_map_card.action_controller = default_action_controller map, map_id
4
+
5
+ = entity_map_card_render entity_map_card
@@ -6,6 +6,8 @@
6
6
  = @entity.respond_to?(:name) ? @entity.name || @entity : @entity
7
7
  - when 'entity_list_action'
8
8
  = Misc.humanize page_entity_list
9
+ - when 'entity_map_action'
10
+ = Misc.humanize page_entity_map
9
11
  .long_name
10
12
  = Misc.humanize page_action if page_action
11
13
 
@@ -20,10 +20,17 @@
20
20
  - last_resource = nil
21
21
  - controller.actions.each do |action, text, resource, params|
22
22
  %li(class="#{last_resource and last_resource != resource ? "new_resource" : ""}" attr-resource="#{resource}")
23
- - if AnnotatedArray === entity
23
+ - case
24
+ - when AnnotatedArray === entity
24
25
  - id = params.delete :id if Hash === params
25
26
  - id = controller.id if id.nil?
26
27
  = entity.list_action_link action, text, id, params.merge(:reuse => true)
28
+ - when TSV === entity
29
+ - id = params.delete :id if Hash === params
30
+ - id = controller.id if id.nil?
31
+ - type = page_entity_type
32
+ - column = page_entity_map_column
33
+ %a.entity_map_action(href="#{Entity::REST.entity_map_action_url id, type, column, action}")= text
27
34
  - else
28
35
  = entity.action_link action, text, params
29
36
  - last_resource = resource
@@ -24,7 +24,7 @@
24
24
  - if list.respond_to? :ensembl
25
25
  %a.ensembl_list(href="#{request.path_info + "?_format=ensembl"}") Ensembl
26
26
  %a.download_list(href="#{request.path_info + "?_format=raw"}") Raw
27
- %a.edit_list(href="#" data-reveal-id='modal1') Edit
27
+ %a.edit_list(href="#") Edit
28
28
 
29
29
  .entity_info
30
30
  - info = list.info.dup
@@ -39,6 +39,7 @@
39
39
  = capture_haml &card.meta
40
40
 
41
41
  .entities
42
+ %p #{list.length} entities
42
43
  - if (defined? force and force) or list.length < 500
43
44
  %ul.entity_list
44
45
  - list = list.sort_by{|g| g.name || "Z" << g} if list.respond_to? :name
@@ -46,11 +47,12 @@
46
47
  %li= link
47
48
  - else
48
49
  %p
49
- = modal_fragment "Too many entities to list" do
50
- - list = list.sort_by{|g| g.name || "Z" << g} if list.respond_to? :name
51
- %ul.entity_list
52
- - list.link.each do |link|
53
- %li= link
50
+ = reveal "Too many entities to list (#{list.length})" do
51
+ = fragment do
52
+ - list = list.sort_by{|g| g.name || "Z" << g} if list.respond_to? :name
53
+ %ul.entity_list
54
+ - list.link.each do |link|
55
+ %li= link
54
56
 
55
57
  - if card.list_container
56
58
  .entity_lists
@@ -0,0 +1,63 @@
1
+ - map = card.map
2
+ - map_id = card.map_id
3
+ .entity_map_card(id="#{ map_id.gsub(/\s/,'_') }_card")
4
+
5
+ .title
6
+ .name
7
+ = map.key_field
8
+ Map
9
+ .long_name
10
+ = Misc.humanize map_id
11
+
12
+ .card
13
+ .sidebar.offcanvas
14
+ .meta
15
+ .map_management
16
+ %ul
17
+ %li
18
+ = reveal "Rename" do
19
+ %form.rename
20
+ %label New name
21
+ %input(name='rename' value=map_id)
22
+ %input(type='submit')
23
+
24
+ - if %w(pvalue p.value p-value pvalues p.values p-values).include? map.fields.first.downcase.gsub(/\s/,'')
25
+ %li
26
+ - url = add_GET_param(@fullpath, '_format', 'pvalue_score')
27
+ %a.ensembl(href=url) Pvalue score
28
+
29
+ - if Gene == Entity.formats[map.key_field]
30
+ - if map.key_field != "Ensembl Gene ID"
31
+ %li
32
+ - url = add_GET_param(@fullpath, '_format', 'ensembl')
33
+ %a.ensembl(href=url) Ensembl
34
+ - if map.key_field != "Associated Gene Name"
35
+ %li
36
+ - url = add_GET_param(@fullpath, '_format', 'name')
37
+ %a.name(href=url) Name
38
+ - if "Rank" == map.fields.first
39
+ %li
40
+ - url = add_GET_param(@fullpath, '_format', 'invert_ranks')
41
+ %a.invert_ranks(href=url) Invert ranks
42
+ - else
43
+ %li
44
+ - url = add_GET_param(@fullpath, '_format', 'ranks')
45
+ %a.ranks(href=url) Ranks
46
+ - if NumericValue == Entity.formats[map.fields.first] or (map.entity_templates[map.fields.first] and map.entity_templates[map.fields.first].annotation_types.include? NumericValue)
47
+ %li
48
+ - $page_entity_base_type = page_entity_base_type
49
+ - $page_entity_map_column = page_entity_map_column
50
+ = reveal :rank_products do
51
+ = action_parameters nil, :class => 'rank_products' do
52
+ - input :map, :select, "Select map to use", nil, :html_options => {:class => 'favourite_maps', :type => $page_entity_base_type, :column => $page_entity_map_column}
53
+
54
+
55
+
56
+ .content
57
+ .description
58
+ = table do
59
+ - map
60
+ - if card.action_controller
61
+ .actions
62
+ = action_controller_render(card.action_controller)
63
+
@@ -26,5 +26,6 @@
26
26
  - if (defined? force and force) or list.length < 500
27
27
  = list.link * ", "
28
28
  - else
29
- = modal_fragment "Too many entities to list" do
30
- = list.link * ", "
29
+ = reveal "Too many entities to list" do
30
+ = fragment do
31
+ = list.link * ", "
@@ -1,12 +1,16 @@
1
1
  .row
2
2
  .column.small-12
3
- %h5 Error processing #{File.basename(job.name)}
4
- - if job.messages and job.messages.any?
5
- %span.error_message= job.messages[-2]
6
- - backtrace = job.info[:backtrace]
7
- - if backtrace and backtrace.any?
8
- .row
9
- .column.twelve
10
- %ul.error_backtrace
11
- - backtrace.each do |line|
12
- %li= line
3
+ %h5 Error processing #{File.basename(job.name)}
4
+ - if job.messages and job.messages.any?
5
+ %span.error_message
6
+ %pre= job.messages[-2]
7
+ - backtrace = job.info[:backtrace]
8
+
9
+ %hr
10
+
11
+ - if backtrace and backtrace.any?
12
+ .row
13
+ .column.twelve
14
+ %ul.error_backtrace.clean_list
15
+ - backtrace.each do |line|
16
+ %li= line
@@ -0,0 +1,34 @@
1
+ .row.help
2
+ .column.small-12
3
+ :markdown
4
+
5
+ Overview
6
+ ========
7
+
8
+ The objective of this page is to offer a collection of functionalities in
9
+ a uniform interface. It has two operation modes: Centered on the
10
+ functionalities or centered on the data. The first operation mode is
11
+ based on *Workflows*, the second on *Entities*. The Entity subsystem is
12
+ probably the most interesting one, so let us begin there.
13
+
14
+ We will devote this document to describe the most general aspects of the
15
+ application. The information presented and the analysis available depend
16
+ on the configuration of the application and will be covered elsewhere.
17
+
18
+
19
+ #### A word on performance
20
+
21
+ This application is intended to allow interactive investigation. But be
22
+ aware, some analysis are slow and will not feel that much interactive.
23
+ Some process may require plenty of infrastructure: downloading of
24
+ datasets, building databases, computing preliminary results, etc. A lot
25
+ of this processing is reused system-wide. This means that the application
26
+ starts slow but get quicker. Unlike other applications with a more limited scope
27
+ this system cannot foresee what the user will be interested in, so not all
28
+ this infrastructure can be built before hand and must be built on demand.
29
+ We pay a price for flexibility by sacrificing responsiveness. But the system
30
+ has plenty of tricks to be as efficient as possible and to reuse as much
31
+ as possible.
32
+
33
+ %a(href='/help/entity' class="help") Entity subsystem
34
+ %a(href='/help/workflow' class="help") Workflow subsystem
@@ -0,0 +1,193 @@
1
+ .row.help
2
+ .column.small-12
3
+ :markdown
4
+
5
+ The Entity subsystem
6
+ =================
7
+
8
+ ### Introduction: Entities and Entity Lists
9
+
10
+ This is the operation mode that regular users most like use. Its
11
+ organized quite different than other applications you might know. The
12
+ objective is to provide a simple abstraction to organize and interconnect
13
+ functionalities and background information. Everything is built around
14
+ the idea of Entities. An Entity is anything that can be the subject of
15
+ investigation:
16
+
17
+ * genes
18
+ * proteins
19
+ * transcripts
20
+ * drugs
21
+ * SNPs
22
+ * samples
23
+ * studies
24
+ * pathways
25
+ * chromosomal ranges
26
+ * ...
27
+
28
+ Each type of entity has associated a number of reports. There is an
29
+ *Entity Report*, which displays information about an entity. If the
30
+ entity is a gene, then the report will contain the description of the
31
+ gene, its isoforms, functional information, and many other things. There
32
+ is also an *Entity List Report*, which covers not a single entity, but a
33
+ list of entities. For instance, the report for a list of genomic
34
+ mutations includes the types of mutations (transversions, transitions,
35
+ etc), the genes affected, damage predictions, etc.
36
+
37
+ Each report links to other reports. For instance, a gene report will
38
+ include links to reports for its isoforms, the pathways it is associated
39
+ with, etc. This offers a way to navigate the information and pursue
40
+ interesting leads.
41
+
42
+ In addition to reports, there are also *Actions* associated to Entities
43
+ and Entity Lists. These Actions are accessible from each report page.
44
+ The Actions allow the user to issue analysis jobs centered on the current
45
+ Entity or Entity List. For instance, when viewing the report for a gene
46
+ lists, which may contain for example all genes mutated recurrently in a
47
+ cohort, the Actions available include performing enrichment analysis,
48
+ examining the mutation frequencies of the genes in COSMIC or examining
49
+ the mutational status of these genes on other genotyping studies that you
50
+ may have access to.
51
+
52
+ Both Entities and Entity Lists can be marked as *Favourites*, this will
53
+ include a link in the menu on the top of the page. Favourite Lists have
54
+ some special features, they can be *flagged* any link that points to an
55
+ entity in the list will be highlighted. This provides a fast an easy way
56
+ to track a list of interest throughout your explorations. Additionally
57
+ some Actions may take Entity Lists as inputs, and will allow the user to
58
+ choose among her Favourite Lists.
59
+
60
+ There is a third type of report, the *Entity Map Report*. Its meant as
61
+ additional way to connect functionalities and is less important right
62
+ now. They will cover this on the section on *Tables* and ignore them until
63
+ then.
64
+
65
+ All reports are unambiguously identified from its URL, including Actions,
66
+ which allows to bookmark or share anything with your collaborators.
67
+
68
+ #### A simple example
69
+
70
+ A common place to start using the application is from a *Study Report*.
71
+ The Study entity represents a collection of datasets, for instance a
72
+ cohort of exome sequenced samples for the ICGC CLL study. The report
73
+ includes a link to all the genes that have mutations altering their
74
+ protein isoforms in at least two samples; clicking on that link takes as
75
+ to the *Gene List Report* for the list with name "Recurrently mutated
76
+ genes in CLL". From the Gene List Report we can access the Action
77
+ "Enrichment", where we are presented with the option of performing an
78
+ hypergeometric-based enrichment analysis for functional annotations that
79
+ include Kegg, The Gene Ontology, Pfam domains, Reactome, and several
80
+ other functional information databases.
81
+
82
+ #### A very important note
83
+
84
+ The system must be able to unambiguously and precisely identify the
85
+ entities. For instance the string "TP53" may seem to clearly identify a
86
+ gene, yet this is not entirely true. First we need to know the organism
87
+ it refers to, in this case Human. Consider now that we ask for the
88
+ genomic coordinates of the gene, this question cannot be answered until
89
+ we known the version of the build we need to use. By default the system
90
+ will try the most recent version of the genome in Ensembl, but other
91
+ builds can be specified. The complete way to specify the organism will be
92
+ "Hsa/may2009" for the hg18 build or "Hsa/jan2013" for the latest hg19
93
+ build. This system downloads all data consistently from Ensembl using the
94
+ builds. Using an explicit version of the build (Hsa/jan2013) instead of
95
+ just the organism (Hsa) will prevent problems with inconsistencies that
96
+ could result from downloading different files at different times, where
97
+ there may have being some updates. The organism codes follow the convention of Kegg, one
98
+ letter from the *genus*, two from the *species*; Examples: Homo sapiens
99
+ -- Hsa; Mus musculus -- Mmu. The dates that specify the builds represent
100
+ the different archives of Ensembl, which is the corner stone of all our
101
+ genomic data.
102
+
103
+ Additionally, there are several ways to refer to the same gene; for
104
+ instance "TP53" can also be expressed as "ENSG00000141510". So, when
105
+ asking the system for a gene, the information on the format of the
106
+ identifier must also be provided. Fortunately, the system will take care
107
+ of transparently translating identifiers between different formats to
108
+ match the formats in different resources. It will also propagate the
109
+ information about the organism across different reports.
110
+
111
+ Last but by all means not least: This system is *CASE-SENSITIVE* almost
112
+ all over the place. TP53 is a Human gene, Tp53 is a Mouse gene, no wiggle
113
+ room allowed! It might take a little getting used to, but
114
+ case-insensitive behaviour has been avoided almost all over the system
115
+ for performance issues. Again, the user should not have to worry about
116
+ this most of the time, as the system will take care of most details, but
117
+ its very important to know.
118
+
119
+ ### User Interface: Basics
120
+
121
+ Before we continue let us see how the user interface is organized. The
122
+ top bar contains the application title, which links to he main page,
123
+ the *Reload* button, the *Start* button, the *Favourite* menus, and
124
+ the *Search* box.
125
+
126
+ When a report is first requested the result is saved for further use,
127
+ even if there was an error producing it. This is true for entities,
128
+ lists, actions, and almost everything else. Clicking the reload button
129
+ on the browser will just render the saved result. To force regenerating
130
+ the report you need to use the Reload button on the top of the page.
131
+ An exception to this are Actions. These can be opened in separate windows,
132
+ in which case it works as usual, but are more often opened from the
133
+ *Action Section* of the report, which will be covered bellow. The Action
134
+ Section has its own Reload button.
135
+
136
+ To Star button toggles the favourite status of the current Entity or
137
+ Entity List. It only works for Entities, Entity Lists, and Entity. It
138
+ has no effect on Actions, for the time being. The Favourite Menus are
139
+ updated when the Star button is clicked. If a Favourite is made on a
140
+ different browser tab or window, the current Favourite Menus can be
141
+ updated by reloading the page using the browser button (the page should
142
+ already be saved), or by clicking on the Star button, which also updates
143
+ the current menus. Input forms and actions that have Entity Lists as
144
+ inputs will also be updated this way.
145
+
146
+ Some parts of the page will be loaded in the background. These include
147
+ portions of the report that are more costly to compute, or particular
148
+ processes that are issues by the user interacting with the page. To make
149
+ the user aware of these, the little number on the far right of the top
150
+ bar displays the number of processes communicating with the server on
151
+ background.
152
+
153
+ On small devices (tablets and phones), the top-bar will be collapsed and
154
+ some elements hidden. To display these elements, click on the "Menu"
155
+ button on the top right.
156
+
157
+
158
+ ### User Interface: Report template
159
+
160
+ Reports may have any type of content, however, they are usually based on
161
+ a common template. It has a title on the top row, a side bar on the left,
162
+ a description on the right, at the top, and the Actions Section bellow
163
+ it. Note that, depending on the particular report, the description may
164
+ be empty or there might not be any actions associated to it.
165
+
166
+ In general, the sidebar is used to display technical information about
167
+ the Entity at hand. For a Gene Report, for instance, the sidebar is used
168
+ to display the format used to specify the gene (such as Ensembl Gene ID),
169
+ and the organism it refers to. In the case of gene reports, the basic
170
+ identification information is followed with additional information about
171
+ isoforms, functional annotations, PubMed articles, etc. On small devices
172
+ (tablets and phones), the sidebar will hide on the right of the screen,
173
+ and will be displayed on clicking the blue button on the title section.
174
+
175
+
176
+ ### User Interface: Actions
177
+
178
+ Entities and Entity Lists may have associated Actions, depending on the
179
+ type of Entity. When Actions are available for a Report, they are displayed
180
+ in the Actions Section. This section is composed on an horizontal bar
181
+ with a button for each each action. When a button is clicked the action
182
+ is displayed bellow the bar. If the action takes some time, a 'Loading...'
183
+ message will appear. The bar includes a button to reload an action that
184
+ has already been computed. If the action accepts parameters, the user
185
+ will be required to set them. To set the parameters click on the button
186
+ with a gear; this will display the parameter section. Of course, if the
187
+ parameters of an action are changed, a new report will be generated;
188
+ Actions are saved separately for each combination of parameters.
189
+
190
+ For actions with large reports, it may be better to open them in a separate
191
+ window. You can do this using the mouse-right-click, just like any regular
192
+ link.
193
+