lazar-gui 1.3.1 → 1.4.0.pre.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/FAQ.md +9 -6
- data/Gemfile +2 -2
- data/README.md +19 -8
- data/VERSION +1 -1
- data/api/api.json +1000 -0
- data/application.rb +269 -206
- data/config.ru +7 -2
- data/docker/Dockerfile +73 -0
- data/docker/start.sh +12 -0
- data/docker/swagger.html +107 -0
- data/helper.rb +46 -1
- data/lazar-gui.gemspec +6 -6
- data/lib/api.rb +29 -0
- data/lib/compound.rb +68 -0
- data/lib/dataset.rb +33 -0
- data/lib/endpoint.rb +23 -0
- data/lib/feature.rb +29 -0
- data/lib/model.rb +152 -0
- data/lib/report.rb +29 -0
- data/lib/substance.rb +34 -0
- data/lib/swagger.rb +3 -0
- data/lib/validation.rb +67 -0
- data/public/fonts/FontAwesome.otf +0 -0
- data/public/fonts/fontawesome-webfont.eot +0 -0
- data/public/fonts/fontawesome-webfont.svg +2671 -0
- data/public/fonts/fontawesome-webfont.ttf +0 -0
- data/public/fonts/fontawesome-webfont.woff +0 -0
- data/public/fonts/fontawesome-webfont.woff2 +0 -0
- data/public/images/orn-logo.jpg +0 -0
- data/public/javascripts/bootstrap.js +3944 -0
- data/public/javascripts/google_analytics_lazar.js +2 -2
- data/public/javascripts/jquery.min.js +2 -0
- data/public/javascripts/lazar-gui.js +313 -0
- data/public/javascripts/pagination.min.js +11 -0
- data/public/javascripts/popper.min.js +5 -0
- data/public/stylesheets/bootstrap.min.css +7 -0
- data/public/stylesheets/bootstrap.min.css.map +1 -0
- data/public/stylesheets/font-awesome.min.css +4 -0
- data/public/stylesheets/pagination.css +1 -0
- data/qmrf_report.rb +64 -14
- data/task.rb +68 -0
- data/unicorn.rb +0 -1
- data/views/batch.haml +48 -107
- data/views/details.haml +10 -2
- data/views/error.haml +4 -5
- data/views/faq.haml +6 -2
- data/views/help.haml +68 -0
- data/views/info.haml +3 -2
- data/views/layout.haml +68 -78
- data/views/model_details.haml +179 -144
- data/views/neighbors.haml +98 -80
- data/views/predict.haml +43 -178
- data/views/prediction.haml +109 -102
- data/views/style.scss +44 -37
- data/views/upload.haml +28 -0
- metadata +51 -105
- data/public/css/bootstrap-theme.min.css +0 -5
- data/public/css/bootstrap.min.css +0 -5
- data/public/css/bootstrap.vertical-tabs.min.css +0 -1
- data/public/css/images/black-asc.gif +0 -0
- data/public/css/images/black-desc.gif +0 -0
- data/public/css/images/black-unsorted.gif +0 -0
- data/public/css/images/bootstrap-black-unsorted.png +0 -0
- data/public/css/images/bootstrap-white-unsorted.png +0 -0
- data/public/css/images/dragtable-handle.png +0 -0
- data/public/css/images/dragtable-handle.svg +0 -7
- data/public/css/images/dropbox-asc-hovered.png +0 -0
- data/public/css/images/dropbox-asc.png +0 -0
- data/public/css/images/dropbox-desc-hovered.png +0 -0
- data/public/css/images/dropbox-desc.png +0 -0
- data/public/css/images/first.png +0 -0
- data/public/css/images/green-asc.gif +0 -0
- data/public/css/images/green-desc.gif +0 -0
- data/public/css/images/green-header.gif +0 -0
- data/public/css/images/green-unsorted.gif +0 -0
- data/public/css/images/ice-asc.gif +0 -0
- data/public/css/images/ice-desc.gif +0 -0
- data/public/css/images/ice-unsorted.gif +0 -0
- data/public/css/images/last.png +0 -0
- data/public/css/images/loading.gif +0 -0
- data/public/css/images/metro-black-asc.png +0 -0
- data/public/css/images/metro-black-desc.png +0 -0
- data/public/css/images/metro-loading.gif +0 -0
- data/public/css/images/metro-unsorted.png +0 -0
- data/public/css/images/metro-white-asc.png +0 -0
- data/public/css/images/metro-white-desc.png +0 -0
- data/public/css/images/next.png +0 -0
- data/public/css/images/prev.png +0 -0
- data/public/css/images/white-asc.gif +0 -0
- data/public/css/images/white-desc.gif +0 -0
- data/public/css/images/white-unsorted.gif +0 -0
- data/public/css/jquery-ui.css +0 -1225
- data/public/css/jquery-ui.theme.min.css +0 -5
- data/public/css/theme.bootstrap.css +0 -158
- data/public/css/theme.bootstrap.min.css +0 -1
- data/public/css/theme.default.min.css +0 -1
- data/public/fonts/glyphicons-halflings-regular.eot +0 -0
- data/public/fonts/glyphicons-halflings-regular.svg +0 -288
- data/public/fonts/glyphicons-halflings-regular.ttf +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff +0 -0
- data/public/fonts/glyphicons-halflings-regular.woff2 +0 -0
- data/public/images/Email.png +0 -0
- data/public/images/Facebook.png +0 -0
- data/public/images/Google+.png +0 -0
- data/public/images/LinkedIn.png +0 -0
- data/public/images/OpenToxEuro2013_small.png +0 -0
- data/public/images/Twitter.png +0 -0
- data/public/images/arrow_down_float.png +0 -0
- data/public/images/arrow_left_float.png +0 -0
- data/public/images/arrow_right_float.png +0 -0
- data/public/images/arrow_up_float.png +0 -0
- data/public/images/asc.gif +0 -0
- data/public/images/bg.gif +0 -0
- data/public/images/desc.gif +0 -0
- data/public/images/gray_jean.png +0 -0
- data/public/images/info_white.png +0 -0
- data/public/javascripts/bootstrap.min.js +0 -7
- data/public/javascripts/jquery-1.11.2.min.js +0 -4
- data/public/javascripts/jquery-1.8.3.min.js +0 -2
- data/public/javascripts/jquery-ui-1.10.3.custom.min.js +0 -6
- data/public/javascripts/jquery.bpopup.min.js +0 -7
- data/public/javascripts/jquery.tablesorter.min.js +0 -2
- data/public/javascripts/jquery.tablesorter.widgets.js +0 -2678
- data/public/javascripts/jquery.tools.min.js +0 -5
- data/public/rect.png +0 -0
- data/test/lazarweb.rb +0 -193
- data/test/setup.rb +0 -7
- data/views/significant_fragments.haml +0 -66
data/task.rb
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
DEFAULT_TASK_MAX_DURATION = 36000
|
2
|
+
|
3
|
+
module OpenTox
|
4
|
+
|
5
|
+
class Task
|
6
|
+
|
7
|
+
include OpenTox
|
8
|
+
include Mongoid::Document
|
9
|
+
include Mongoid::Timestamps
|
10
|
+
store_in collection: "tasks"
|
11
|
+
field :pid, type: Integer
|
12
|
+
field :percent, type: Float, default: 0
|
13
|
+
field :predictions, type: Hash, default:{}
|
14
|
+
field :csv, type: String
|
15
|
+
field :dataset_id, type: BSON::ObjectId
|
16
|
+
field :model_id, type: BSON::ObjectId
|
17
|
+
field :subTasks, type: Array, default:[]
|
18
|
+
|
19
|
+
attr_accessor :pid, :percent, :predictions, :csv, :dataset_id, :model_id, :subTasks
|
20
|
+
|
21
|
+
def pid
|
22
|
+
self[:pid]
|
23
|
+
end
|
24
|
+
|
25
|
+
def percent
|
26
|
+
self[:percent]
|
27
|
+
end
|
28
|
+
|
29
|
+
def predictions
|
30
|
+
self[:predictions]
|
31
|
+
end
|
32
|
+
|
33
|
+
def csv
|
34
|
+
self[:csv]
|
35
|
+
end
|
36
|
+
|
37
|
+
def dataset_id
|
38
|
+
self[:dataset_id]
|
39
|
+
end
|
40
|
+
|
41
|
+
def model_id
|
42
|
+
self[:model_id]
|
43
|
+
end
|
44
|
+
|
45
|
+
def subTasks
|
46
|
+
self[:subTasks]
|
47
|
+
end
|
48
|
+
|
49
|
+
def update_percent(percent)
|
50
|
+
self[:percent] = percent
|
51
|
+
save
|
52
|
+
end
|
53
|
+
|
54
|
+
def self.run
|
55
|
+
task = Task.new #uri
|
56
|
+
pid = fork do
|
57
|
+
yield
|
58
|
+
end
|
59
|
+
Process.detach(pid)
|
60
|
+
task[:pid] = pid
|
61
|
+
task.save
|
62
|
+
task
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
|
67
|
+
end
|
68
|
+
|
data/unicorn.rb
CHANGED
data/views/batch.haml
CHANGED
@@ -1,109 +1,50 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
:javascript
|
2
|
+
// kill task pid if page is reloaded, `false` makes the request synchronous
|
3
|
+
window.addEventListener('unload', ktpid, false);
|
4
|
+
function ktpid() {
|
5
|
+
var client = new XMLHttpRequest();
|
6
|
+
client.open("GET", '//#{$host_with_port}/prediction/task?ktpid=#{@pid}', false);
|
7
|
+
client.setRequestHeader("Content-Type", "application/json");
|
8
|
+
client.send(null);
|
9
|
+
};
|
10
|
+
%div.card
|
11
|
+
%a.btn.btn-outline-info{:href => "//#{$host_with_port}/predict?tpid=#{@pid}"}
|
12
|
+
%span.fa.fa-caret-left{:aria=>{:hidden=>"true"}}
|
4
13
|
New Prediction
|
5
|
-
|
6
|
-
|
7
|
-
|
14
|
+
%div.card.bg-light
|
15
|
+
%div.card-body
|
16
|
+
%h3.card-title="Batch prediction results for: #{@filename}"
|
17
|
+
|
18
|
+
// prepare variable values for javascript
|
19
|
+
// increase timer interval for large datasets
|
20
|
+
- timer = 10000#((@compounds_size/1000) == 0 ? 1000 : ((@compounds_size/1000)*1000))
|
21
|
+
// process batch predictions
|
22
|
+
- @models.each_with_index do |model,idx|
|
23
|
+
- m = Model::Validation.find model
|
24
|
+
- task = @tasks[idx].id
|
25
|
+
#result.card.bg-light{:id=>idx}
|
26
|
+
%div.card-body
|
27
|
+
%div.row
|
28
|
+
%div.col-6
|
29
|
+
%h5.card-title="#{m.endpoint} (#{m.species})"
|
30
|
+
#pager{:id=>idx}
|
31
|
+
%div.col-6
|
32
|
+
%a.btn.btn-outline-info.btn-sm.disabled{:id => "detailsbutton_#{idx}", :data=>{:toggle=>"collapse"}, :href=>"javascript:void(0)", :onclick=>"pagePredictions('//#{$host_with_port}/prediction/task/?predictions=#{task}','#{model}','#{idx}','#{@compounds_size}')"}
|
33
|
+
%span.fa.fa-caret-right
|
34
|
+
Details
|
35
|
+
%a.btn.btn-outline-info.btn-sm.disabled{:id => "downbutton_#{idx}", :href=>"//#{$host_with_port}/predict/batch/download?tid=#{task}", :title=>"download"}
|
36
|
+
%span.fa.fa-download
|
37
|
+
CSV
|
38
|
+
%p{:id=>"est_#{idx}"}
|
39
|
+
waiting ...
|
40
|
+
%img.h2{:src=>"/images/wait30trans.gif", :id=>"circle_#{idx}", :class=>"circle", :alt=>"wait", :style=>"display:none;"}
|
41
|
+
:javascript
|
42
|
+
$(document).ready(function() {
|
43
|
+
taskProgress('#{idx}','#{timer}','//#{$host_with_port}/prediction/task/?turi=#{task}');
|
44
|
+
});
|
45
|
+
#data-container.card.d-none.table-responsive{:id=>idx}
|
46
|
+
:javascript
|
47
|
+
%div.modal.fade{:id=>"details", :tabindex=>"-1", :role=>"dialog"}
|
48
|
+
%div.modal-dialog.modal-lg{:role=>"document"}
|
49
|
+
%div.modal-content
|
8
50
|
|
9
|
-
/ show file name
|
10
|
-
%topline
|
11
|
-
%div.row
|
12
|
-
%div.col-md-4
|
13
|
-
%h3 Batch Prediction Results:
|
14
|
-
%div.col-md-8
|
15
|
-
%h3= @filename
|
16
|
-
|
17
|
-
/ displays all prediction result in one table
|
18
|
-
%div.table-responsive
|
19
|
-
%table.table.table-bordered{:id=>"batch", :style=>"background-color:white;"}
|
20
|
-
%tbody
|
21
|
-
- if @warnings
|
22
|
-
- @warnings.each do |warning|
|
23
|
-
%tr
|
24
|
-
%td
|
25
|
-
%b Warning
|
26
|
-
%td
|
27
|
-
= warning.sub(/\b(tmp\/)\b/,"")
|
28
|
-
- @view.each do |compound, array|
|
29
|
-
%tr
|
30
|
-
%td{:style=>"vertical-align:top;"}
|
31
|
-
%p= compound.svg
|
32
|
-
%p= compound.smiles
|
33
|
-
- array.each do |model,prediction|
|
34
|
-
%td{:style=>"vertical-align:top;white-space:nowrap;"}
|
35
|
-
- model.model.class.to_s.match("Classification") ? type = "Classification" : type = "Regression"
|
36
|
-
- unit = model.unit
|
37
|
-
|
38
|
-
%b{:class => "title"}
|
39
|
-
= "#{model.endpoint.gsub('_', ' ')} (#{model.species})"
|
40
|
-
|
41
|
-
/ check for prediction
|
42
|
-
- if prediction[:value]
|
43
|
-
%p
|
44
|
-
/ show model type (classification|regression)
|
45
|
-
%b Type:
|
46
|
-
= type
|
47
|
-
%p
|
48
|
-
/ check for database hit
|
49
|
-
- if prediction[:info] =~ /\b(identical)\b/i
|
50
|
-
|
51
|
-
/ show message about dbhit and measurements
|
52
|
-
%p
|
53
|
-
%b Compound is part of the training dataset
|
54
|
-
%p
|
55
|
-
%b Measured activity:
|
56
|
-
%br
|
57
|
-
- if prediction[:measurements].is_a?(Array)
|
58
|
-
= (type == "Regression") ? prediction[:measurements].collect{|value| "#{value.delog10.signif(3)} (#{unit})</br>#{compound.mmol_to_mg(value.delog10).signif(3)} #{unit =~ /mmol\/L/ ? "(mg/L)" : "(mg/kg_bw/day)"}"}.join("</br>") : prediction[:measurements].join(", ")
|
59
|
-
- else
|
60
|
-
= (type == "Regression") ? "#{prediction[:measurements].delog10.signif(3)} (#{unit})</br>#{compound.mmol_to_mg(prediction[:measurements].delog10).signif(3)} #{(unit =~ /\b(mmol\/L)\b/) ? "(mg/L)" : "(mg/kg_bw/day)"}" : prediction[:measurements]
|
61
|
-
|
62
|
-
|
63
|
-
/ show prediction
|
64
|
-
%p
|
65
|
-
%b Prediction:
|
66
|
-
%br
|
67
|
-
= (type == "Regression") ? "#{prediction[:value].delog10.signif(3)} (#{unit})</br>#{compound.mmol_to_mg(prediction[:value].delog10).signif(3)} #{(unit =~ /\b(mmol\/L)\b/) ? "(mg/L)" : "(mg/kg_bw/day)"}" : prediction[:value]
|
68
|
-
|
69
|
-
/ show prediction interval or probability
|
70
|
-
%p
|
71
|
-
- if type == "Regression"
|
72
|
-
%b 95% Prediction interval:
|
73
|
-
- interval = (prediction[:prediction_interval].nil? ? nil : prediction[:prediction_interval])
|
74
|
-
%br
|
75
|
-
= interval.nil? ? "" : "#{interval[1].delog10.signif(3)} - #{interval[0].delog10.signif(3)} (#{unit})"
|
76
|
-
%br
|
77
|
-
= "#{compound.mmol_to_mg(interval[1].delog10).signif(3)} - #{compound.mmol_to_mg(interval[0].delog10).signif(3)} #{(unit =~ /\b(mmol\/L)\b/) ? "(mg/L)" : "(mg/kg_bw/day)"}" if !prediction[:prediction_interval].nil?
|
78
|
-
- else
|
79
|
-
%b Probability:
|
80
|
-
- unless prediction[:probabilities].nil?
|
81
|
-
- probabilities = ""
|
82
|
-
- prediction[:probabilities].each{|k,v| probabilities += "#{k}: #{v.signif(3)}<br>"}
|
83
|
-
%br
|
84
|
-
= probabilities
|
85
|
-
/ show warnings
|
86
|
-
%p
|
87
|
-
- if !prediction[:info].blank?
|
88
|
-
%b Info:
|
89
|
-
%br
|
90
|
-
%p=prediction[:info].sub(/\'.*\'/,"").sub(/,/, ",<br>")
|
91
|
-
- if !prediction[:warnings].blank?
|
92
|
-
%b Warnings:
|
93
|
-
- prediction[:warnings].uniq.each do |warning|
|
94
|
-
%br
|
95
|
-
%p=warning.sub(/substances/, "substances<br>").sub(/prediction\:/, "prediction\:<br>")
|
96
|
-
|
97
|
-
/ no prediction
|
98
|
-
- else
|
99
|
-
%br
|
100
|
-
- if !prediction[:info].blank?
|
101
|
-
%b Info:
|
102
|
-
%br
|
103
|
-
%p=prediction[:info].sub(/\'.*\'/,"").sub(/,/, ",<br>")
|
104
|
-
- if !prediction[:warnings].blank?
|
105
|
-
%b Warnings:
|
106
|
-
- prediction[:warnings].uniq.each do |warning|
|
107
|
-
%br
|
108
|
-
%p=warning.sub(/substances/, "substances<br>").sub(/prediction\:/, "prediction\:<br>")
|
109
|
-
%tr
|
data/views/details.haml
CHANGED
@@ -6,7 +6,7 @@
|
|
6
6
|
%button.close{ :type=>" button", data: { dismiss:"modal"}} ×
|
7
7
|
%h3
|
8
8
|
Names and synonyms:
|
9
|
-
%p= @compound.svg
|
9
|
+
%p= embedded_svg(@compound.svg, :title=>"x")
|
10
10
|
%p
|
11
11
|
%b="SMILES:"
|
12
12
|
%p= @smiles
|
@@ -14,6 +14,11 @@
|
|
14
14
|
%b="InChI:"
|
15
15
|
%p= @inchi
|
16
16
|
%br
|
17
|
+
- cid = @compound.cid
|
18
|
+
- if cid
|
19
|
+
%b="CID:"
|
20
|
+
%p= cid
|
21
|
+
%br
|
17
22
|
%b="Names:"
|
18
23
|
%p{:style=>"padding-left:0.5em;"}
|
19
24
|
- if @names !~ /^no names/i
|
@@ -23,6 +28,9 @@
|
|
23
28
|
%hr
|
24
29
|
%p{:style=>"padding-left:0.5em;"}
|
25
30
|
/ pubchem link
|
26
|
-
|
31
|
+
- if cid
|
32
|
+
%a.btn.btn-primary{:href=>"http://aop.in-silico.ch/cid/#{cid}", :title=>"Link opens in new window.", :alt=>"pubchem read across", :rel=>"external"} PubChem read across
|
33
|
+
- else
|
34
|
+
%a.btn.btn-primary{:href=>"http://aop.in-silico.ch/", :title=>"Link opens in new window.", :alt=>"pubchem read across", :rel=>"external"} PubChem read across
|
27
35
|
%i (experimental)
|
28
36
|
%br
|
data/views/error.haml
CHANGED
@@ -1,7 +1,6 @@
|
|
1
|
-
%div.
|
2
|
-
%a.btn.btn-warning{:href =>
|
3
|
-
%i.
|
1
|
+
%div.card
|
2
|
+
%a.btn.btn-warning{:href => "//#{$host_with_port}/predict"}
|
3
|
+
%i.fa.fa-caret-left
|
4
4
|
Back
|
5
|
-
%
|
6
|
-
%div.well{:style=>"width:100%;margin-bottom:2em;"}
|
5
|
+
%div.card-body
|
7
6
|
= @error
|
data/views/faq.haml
CHANGED
data/views/help.haml
ADDED
@@ -0,0 +1,68 @@
|
|
1
|
+
%div.card.bg-light
|
2
|
+
%div.card-body
|
3
|
+
%h3 How to use batch prediction
|
4
|
+
|
5
|
+
%p
|
6
|
+
You have two options to format your comma or tab sperated spreadsheet for batch predictions:
|
7
|
+
|
8
|
+
%br
|
9
|
+
%p
|
10
|
+
%div.row
|
11
|
+
%div.col-md-6
|
12
|
+
%strong Option 1:
|
13
|
+
%br
|
14
|
+
A spreadsheet with a single column and a header. The header should specify the input format (SMILES or InChI are accepted).
|
15
|
+
%div.col-md-6
|
16
|
+
%table.help
|
17
|
+
%tr.row
|
18
|
+
%th.col-md-12
|
19
|
+
SMILES
|
20
|
+
%tr.row
|
21
|
+
%td.col-md-12
|
22
|
+
C1ccccc1NN
|
23
|
+
%tr.row
|
24
|
+
%td.col-md-12
|
25
|
+
Cc1ccc(cc1\N=C=O)/N=C=O
|
26
|
+
%tr.row
|
27
|
+
%td.col-md-12
|
28
|
+
OC(=O)c1ccc(cc1)C(=O)O
|
29
|
+
%tr.row
|
30
|
+
%td.col-md-12
|
31
|
+
="..."
|
32
|
+
%br
|
33
|
+
%p
|
34
|
+
%div.row
|
35
|
+
%div.col-md-6
|
36
|
+
%strong Option 2:
|
37
|
+
%br
|
38
|
+
A spreadsheet with two columns and a header. The first column may contain an arbitrary ID,
|
39
|
+
the second column the compound structure (as SMILES or InChI).
|
40
|
+
The header consists of "ID" followed by the input format (SMILES or InChI).
|
41
|
+
%div.col-md-6
|
42
|
+
%table.help
|
43
|
+
%tr.row
|
44
|
+
%th.col-md-4
|
45
|
+
ID
|
46
|
+
%th.col-md-8
|
47
|
+
SMILES
|
48
|
+
%tr.row
|
49
|
+
%td.col-md-4
|
50
|
+
2735
|
51
|
+
%td.col-md-8
|
52
|
+
C1ccccc1NN
|
53
|
+
%tr.row
|
54
|
+
%td.col-md-4
|
55
|
+
A2
|
56
|
+
%td.col-md-8
|
57
|
+
O=C(OCCCC)C1=CC=CC=C1C(OCCCC)=O
|
58
|
+
%tr.row
|
59
|
+
%td.col-md-4
|
60
|
+
82 B-6 304663
|
61
|
+
%td.col-md-8
|
62
|
+
CC(C)(C)C1=CC2(C=C(C1=O)C(C)(C)C)CCC(=O)O2
|
63
|
+
%tr.row
|
64
|
+
%td.col-md-4
|
65
|
+
="..."
|
66
|
+
%td.col-md-8
|
67
|
+
="..."
|
68
|
+
%br
|
data/views/info.haml
CHANGED
@@ -1,2 +1,3 @@
|
|
1
|
-
%div.
|
2
|
-
|
1
|
+
%div.card.border-warning.mb-3
|
2
|
+
%div.card-body
|
3
|
+
We are rebuilding our models. It will take a while, please be patient and reload the page later.
|
data/views/layout.haml
CHANGED
@@ -6,77 +6,55 @@
|
|
6
6
|
%meta{'name'=>"viewport", :content=>"width=device-width, initial-scale=1"}
|
7
7
|
%title lazar Toxicity Predictions
|
8
8
|
%link{:rel=>'icon', :type=>'image/x-icon', :href=>'/images/favicon.ico'}
|
9
|
-
%link{:
|
10
|
-
%link{:
|
11
|
-
%link{:
|
12
|
-
%link{
|
13
|
-
%
|
14
|
-
%script{:src=>"/javascripts/
|
15
|
-
%script{:src=>"/javascripts/bootstrap.min.js"}
|
16
|
-
%script{:src=>"/javascripts/jquery.tablesorter.min.js"}
|
17
|
-
%script{:src=>"/javascripts/jquery.tablesorter.widgets.js"}
|
9
|
+
%link{:href=>"/stylesheets/bootstrap.min.css", :rel=>"stylesheet"}
|
10
|
+
%link{:href=>"/stylesheets/font-awesome.min.css", :rel=>"stylesheet"}
|
11
|
+
%link{:href=>"/stylesheets/pagination.css", :rel=>"stylesheet"}
|
12
|
+
%link{:href=>"/style.css", :rel=>"stylesheet"}
|
13
|
+
%script{ :src=>"/javascripts/jquery.min.js"}
|
14
|
+
%script{ :src=>"/javascripts/popper.min.js"}
|
18
15
|
%script{:src=>"/javascripts/lazar-gui.js"}
|
19
|
-
%script{:src=>"/javascripts/
|
16
|
+
%script{ :src=>"/javascripts/bootstrap.js"}
|
17
|
+
%script{:src=>"/javascripts/pagination.min.js"}
|
20
18
|
%body
|
21
19
|
%noscript
|
22
20
|
%div{ :style=>"width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif"}
|
23
21
|
Your web browser must have JavaScript enabled in order for this application to display correctly.
|
24
|
-
%header.page-header
|
25
|
-
%div.row
|
26
|
-
%div.col-
|
27
|
-
%a{:href=>
|
28
|
-
%img
|
29
|
-
%div.col-
|
30
|
-
%h1
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
%
|
36
|
-
nano-lazar
|
37
|
-
%span.glyphicon.glyphicon-new-window
|
38
|
-
|
22
|
+
%header.container-fluid.page-header
|
23
|
+
%div.row.align-items-center
|
24
|
+
%div.col-3
|
25
|
+
%a.card-link{:href=> "https://in-silico.ch/", :rel=>"external"}
|
26
|
+
%img{:src=>"/images/IST_logo_s.png", :alt=>"logo", :width=>"120px"}
|
27
|
+
%div.col-7
|
28
|
+
%h1 lazar toxicity predictions
|
29
|
+
%div.col-2
|
30
|
+
%h5
|
31
|
+
%a.text-right{:href=>"https://nano-lazar.in-silico.ch", :rel=>"external"}
|
32
|
+
nano-lazar
|
33
|
+
%span.fa.fa-xs.fa-external-link
|
39
34
|
%div.container-fluid
|
40
35
|
%topline.alert
|
41
|
-
%
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
%
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
%
|
59
|
-
|
60
|
-
|
61
|
-
%
|
62
|
-
|
63
|
-
%a{ :href=>"https://doi.org/10.3389/fphar.2013.00038", :rel=>"external"}
|
64
|
-
%img{ :src=>"https://zenodo.org/badge/DOI/10.3389/zenodo.10.3389.svg", :alt=>"DOI"}
|
65
|
-
in scientific publications.
|
66
|
-
|
67
|
-
:javascript
|
68
|
-
$(document).ready(function(){
|
69
|
-
$("#back-top").hide();
|
70
|
-
$(".blind").error(function(){
|
71
|
-
$(this).attr('src', '/images/blind.png');
|
72
|
-
});
|
73
|
-
});
|
74
|
-
$(document).ready(function(){
|
75
|
-
$('[data-toggle="popover"]').popover();
|
76
|
-
$('.modal').on('hidden.bs.modal', function () {
|
77
|
-
$(this).removeData('bs.modal');
|
78
|
-
});
|
79
|
-
});
|
36
|
+
%p
|
37
|
+
Problems, bugs, ideas for improvements ? Please report at our
|
38
|
+
%a{:href => 'https://github.com/opentox/lazar-gui/issues', :rel => "external"} issue tracker
|
39
|
+
, check out the
|
40
|
+
%a{:href=> "//#{$host_with_port}/predict/faq"} FAQ
|
41
|
+
page or send us an email.
|
42
|
+
%a{ :href=>"mailto:info@in-silico.ch?subject=[lazar v#{@version}]", :target=>"_top"}
|
43
|
+
%span.fa.fa-envelope
|
44
|
+
[version: #{@version}]
|
45
|
+
%p
|
46
|
+
A graphical overview of the service API can be found
|
47
|
+
%a{:href => "//#{$host_with_port}/api", :rel => "external"} here.
|
48
|
+
Please cite
|
49
|
+
%a{ :href=>"https://doi.org/10.3389/fphar.2013.00038", :rel=>"external"}
|
50
|
+
%img{ :src=>"https://zenodo.org/badge/DOI/10.3389/zenodo.10.3389.svg", :alt=>"DOI"}
|
51
|
+
in scientific publications.
|
52
|
+
%a{:href=>"https://twitter.com/intent/tweet?source=http%3A%2F%2Flazar.in-silico.ch&text=https%3A%2F%2Flazar.in-silico.ch", :rel=>"external", :title=>"Tweet"}
|
53
|
+
%span.fa.fa-twitter-square
|
54
|
+
%a{:href=>"http://www.linkedin.com/shareArticle?mini=true&url=https%3A%2F%2Flazar.in-silico.ch&title=&summary=&source=https%3A%2F%2Flazar.in-silico.ch", :rel=>"external", :title=>"Share on LinkedIn"}
|
55
|
+
%span.fa.fa-linkedin-square
|
56
|
+
%a{:href=>"https://www.facebook.com/sharer/sharer.php?u=https%3A%2F%2Flazar.in-silico.ch&title=&summary=&source=https%3A%2F%2Flazar.in-silico.ch", :rel=>"external", :title=>"Share on Facebook"}
|
57
|
+
%span.fa.fa-facebook-square
|
80
58
|
|
81
59
|
= yield
|
82
60
|
|
@@ -88,24 +66,24 @@
|
|
88
66
|
©
|
89
67
|
%a{:href => 'http://www.in-silico.ch', :rel => "external"} <i style="font-family: serife">in silico</i> toxicology gmbh 2004 - #{Time.now.year.to_s}
|
90
68
|
|
|
91
|
-
%a{:href =>
|
92
|
-
|
93
|
-
|
69
|
+
%a{:href => "//#{$host_with_port}/predict/license", :rel => "external"} GPL3 License
|
70
|
+
%supporters.row
|
71
|
+
%div.card-body.text-center
|
72
|
+
%div.card-title
|
94
73
|
Financial support by
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
74
|
+
%div.card-text
|
75
|
+
%a{:href=>"https://www.bfr.bund.de/de/start.html", :rel=>"external"}
|
76
|
+
%img{:src=>"/images/bfr_logo.gif"}
|
77
|
+
%a{:href=>"https://www.opentox.org/", :rel=>"external"}
|
78
|
+
%img{:src=>"/images/ot_logo.png"}
|
79
|
+
%a{:href=>"https://enanomapper.net/", :rel=>"external"}
|
80
|
+
%img{:src=>"/images/enm_logo.png"}
|
81
|
+
%a{:href=>"https://www.researchgate.net/institution/Nestle_SA/department/Nestle_Research_Center", :rel=>"external"}
|
82
|
+
%img{:src=>"/images/nestec.jpg"}
|
105
83
|
|
106
84
|
#back-top{:style => "z-index:100;position:fixed;bottom:1%;right:1%;"}
|
107
85
|
%a{:href => "", :style=>"text:decoration:none;color:#ccc;"}
|
108
|
-
%span.
|
86
|
+
%span.fa.fa-caret-up{:style => "font-size:3em;color:black;"}
|
109
87
|
:javascript
|
110
88
|
$("#back-top").hide();
|
111
89
|
$(function () {
|
@@ -124,3 +102,15 @@
|
|
124
102
|
return false;
|
125
103
|
});
|
126
104
|
});
|
105
|
+
$(document).ready(function(){
|
106
|
+
$("#back-top").hide();
|
107
|
+
$(".blind").on('error', function(){
|
108
|
+
$(this).attr('src', '/images/blind.png');
|
109
|
+
});
|
110
|
+
});
|
111
|
+
$(document).ready(function(){
|
112
|
+
//$('[data-toggle="popover"]').popover();
|
113
|
+
$('.modal').on('hidden.bs.modal', function () {
|
114
|
+
$(this).removeData('bs.modal');
|
115
|
+
});
|
116
|
+
});
|