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
@@ -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
+