Widget tutorial
Writing a Web Result Viewer Widget
To make a web result viewer widget, two kinds of files are required: .js and .yml.
The naming convention for web result viewer widgets is to have wg
prefix in front of the annotator the data of which the widget uses.
Thus, the name of a widget for clinvar annotator is recommended to
be wgclinvar. If such a name has already been claimed, you can use
another name but keep the wg prefix.
The .yml file is a module config file. See the below example
(wgclinvar.yml).
title: ClinVar
version: 1.0.0
type: webviewerwidget
required_annotator: clinvar
description: Clinvar webviewer widget
developer:
name: 'Rick Kim'
organization: 'In Silico Solutions'
email: 'rkim@insilico.us.com'
website: 'http://www.insilico.us.com'
citation: ''
All keys except required_annotator is the same as in the module
config file for an annotator. required_annotator specifies which
annotator’s result is needed to feed the data to this widget.
When the web result viewer draws each widget, it passes three parameters
to a widget: div: div element which wraps the widget content
row: array of annotation values for the clicked/selected row in the
variant- or gene-level result table tabName: variant or
gene, showing which level result is being passed as row
See the below example code from wgclinvar.js.
widgetGenerators['clinvar'] = {
'variant': {
'width': 280,
'height': 80,
'function': function (div, row, tabName) {
addInfoLine(div, row, 'Significance', 'clinvar__sig', tabName);
addInfoLine(div, row, 'Diseases', 'clinvar__diseases', tabName);
addInfoLine(div, row, 'Ref. Nums', 'clinvar__refs', tabName);
}
}
}
widgetGenerators['widget_name'] should be used to wrap widget
construction codes. If the name of a widget is sample_widget, the
code should have widgetGenerators['sample_widget']. The javascript
code of all widgets will be stored in widgetGenerators object, with
each widget’s name as a key. widgetGenerators['sample_widget'] has
annotation levels as the first level keys. In the above example, it has
only variant key. This means that only the variant tab’s detail
panel will call function part of variant part of
widgetGenerators['clinvar'].
For each level, three key-value pairs are required: width,
height, and function. For width, use 280 as the smallest and
an increment of 300. For height, use 80 as the smallest and an
increment of 100. These two will define the size of the widget.
function builds the content of the widget. addInfoLine is a
convenience function you can use. It puts a div with the value of a
column from the given row with a title of your choice. The syntax of
this function is addInfoLine(div, row, title, db_column_name,
tabName) and change title and db_column_name. db_column_name
is the name of a column in the result sqlite3 file’s variant or
gene table, which is specified by tabName variable. The
convention for db_column_name is
an annotator name + '__' + column name defined in the annotator's yml file.
If an external script/library is needed, use $.getScript jQuery
function, as shown in the below example. Put this function at the top of
the code.
$.getScript('/result/widgetfile/wgndex/cytoscape.js', function () {});
Widgets will appear automatically on the tabs defined as top-level keys
of widgetGenerators[widgetName].
In the ClinVar widget code above, variant top-level key indicates that
this widget has content for the variant tab of the interactive result viewer,
and thus will appear in the widget area of the variant tab of the interactive
result viewer. The same applies to gene and summary levels, also. Thus,
to make a summary widget for example, the widget code should have
summary top-level key under widgetGenerators[widgetName] object,
function key under the summary key, and the actual function to make content
as the value for the function key. With this in mind, the ClinVar widget code
above will make more sense.
To test your new widget, make a job result file. For example,
oc new example-input .
oc run example_input -l hg38
oc gui example_input.sqlite
Then, check the variant, gene, or summary tab depending on which level you implemented in your widget.