report_html 0.3.8 → 0.4.6

Sign up to get free protection for your applications and to get access to all the features.
@@ -14,6 +14,7 @@ class Report_html
14
14
  @plots_data = []
15
15
  @count_objects = 0
16
16
  @dt_tables = [] #Tables to be styled with the DataTables js lib"
17
+ @bs_tables = [] #Tables to be styled with the bootstrap js lib"
17
18
  end
18
19
 
19
20
  def build(template)
@@ -57,7 +58,8 @@ class Report_html
57
58
  <meta charset=\"utf-8\">
58
59
  <meta http-equiv=\"CACHE-CONTROL\" CONTENT=\"NO-CACHE\">
59
60
  <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
60
- <meta http-equiv=\"Content-Language\" content=\"en-us\" />\n"
61
+ <meta http-equiv=\"Content-Language\" content=\"en-us\" />
62
+ <meta name=\"viewport\" content=\"width=device-width, initial-scale=1, shrink-to-fit=no\">\n"
61
63
 
62
64
  # ADD JS LIBRARIES AND CSS
63
65
  js_libraries = []
@@ -66,10 +68,18 @@ class Report_html
66
68
  js_libraries << 'canvasXpress.min.js'
67
69
  css_files << 'canvasXpress.css'
68
70
  end
71
+
72
+ if !@dt_tables.empty? || !@bs_tables.empty? #Bootstrap for datatables or only for static tables. Use bootstrap version needed by datatables to avoid incompatibility issues
73
+ @all_report << '<link rel="stylesheet" type="text/css" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"/>'+"\n"
74
+ end
75
+
69
76
  if !@dt_tables.empty? # CDN load, this library is difficult to embed in html file
70
- @all_report << '<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/v/dt/jq-3.3.1/dt-1.10.21/datatables.min.css"/>'+"\n"
71
- @all_report << '<script type="text/javascript" src="https://cdn.datatables.net/v/dt/jq-3.3.1/dt-1.10.21/datatables.min.js"></script>'+"\n"
72
- end
77
+ @all_report << '<link rel="stylesheet" type="text/css" href="https://cdn.datatables.net/1.10.21/css/dataTables.bootstrap.min.css"/>'+"\n"
78
+ @all_report << '<script type="text/javascript" src="https://code.jquery.com/jquery-3.5.1.js"></script>' + "\n"
79
+ @all_report << '<script type="text/javascript" src="https://cdn.datatables.net/1.10.21/js/jquery.dataTables.min.js"></script>' + "\n"
80
+ @all_report << '<script type="text/javascript" src="https://cdn.datatables.net/1.10.21/js/dataTables.bootstrap.min.js"></script>' + "\n"
81
+ end
82
+
73
83
  loaded_js_libraries = load_js_libraries(js_libraries)
74
84
  loaded_css = load_css(css_files)
75
85
  loaded_css.each do |css|
@@ -221,6 +231,7 @@ class Report_html
221
231
  rowspan, colspan = get_col_n_row_span(array_data)
222
232
  table_id = 'table_' + @count_objects.to_s
223
233
  @dt_tables << table_id if options[:styled] == 'dt'
234
+ @bs_tables << table_id if options[:styled] == 'bs'
224
235
  tbody_tag = false
225
236
  html = "
226
237
  <table id=\"#{table_id}\" border=\"#{options[:border]}\" #{table_attr}>
@@ -364,7 +375,7 @@ class Report_html
364
375
  }
365
376
  options.merge!(user_options)
366
377
  config = {
367
- 'toolbarPermanent' => true,
378
+ 'toolbarType' => 'under',
368
379
  'xAxisTitle' => options[:x_label],
369
380
  'title' => options[:title]
370
381
  }
@@ -389,7 +400,9 @@ class Report_html
389
400
  end
390
401
  values = data_array
391
402
 
392
- yield(options, config, samples, vars, values, object_id)
403
+ x = {}
404
+ z = {}
405
+ yield(options, config, samples, vars, values, object_id, x, z)
393
406
  # Build JSON objects and Javascript code
394
407
  #-----------------------------------------------
395
408
  @count_objects += 1
@@ -398,7 +411,9 @@ class Report_html
398
411
  'vars' => vars,
399
412
  'smps' => samples,
400
413
  'data' => values
401
- }
414
+ },
415
+ 'x' => x,
416
+ 'z' => z
402
417
  }
403
418
  events = false
404
419
  info = false
@@ -431,7 +446,7 @@ class Report_html
431
446
  default_options = {
432
447
  row_names: true
433
448
  }.merge!(user_options)
434
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
449
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
435
450
  config['graphType'] = 'Line'
436
451
  end
437
452
  return html_string
@@ -441,7 +456,7 @@ class Report_html
441
456
  default_options = {
442
457
  row_names: true,
443
458
  }.merge!(user_options)
444
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
459
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
445
460
  config['graphType'] = 'Stacked'
446
461
  end
447
462
  return html_string
@@ -451,17 +466,33 @@ class Report_html
451
466
  default_options = {
452
467
  row_names: true
453
468
  }.merge!(user_options)
454
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
469
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
455
470
  config['graphType'] = 'Bar'
456
471
  end
457
472
  return html_string
458
473
  end
459
474
 
475
+ def dotplot(user_options = {}, &block)
476
+ default_options = {
477
+ row_names: true,
478
+ connect: false
479
+ }.merge!(user_options)
480
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
481
+ config['graphType'] = 'Dotplot'
482
+ if default_options[:connect]
483
+ config['dotplotType'] = "stacked"
484
+ config['connectBy'] = "Connect"
485
+ z[:Connect] = Array.new(vars.length, 1)
486
+ end
487
+ end
488
+ return html_string
489
+ end
490
+
460
491
  def heatmap(user_options = {}, &block)
461
492
  default_options = {
462
493
  row_names: true
463
494
  }.merge!(user_options)
464
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
495
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
465
496
  config['graphType'] = 'Heatmap'
466
497
  end
467
498
  return html_string
@@ -472,7 +503,7 @@ class Report_html
472
503
  row_names: true,
473
504
  header: true
474
505
  }.merge!(user_options)
475
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
506
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
476
507
  config['graphType'] = 'Boxplot'
477
508
  options[:mod_data_structure] = 'boxplot'
478
509
  if options[:extracode].nil?
@@ -486,7 +517,7 @@ class Report_html
486
517
  default_options = {
487
518
  transpose: false
488
519
  }.merge!(user_options)
489
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
520
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
490
521
  config['graphType'] = 'Pie'
491
522
  if samples.length > 1
492
523
  config['showPieGrid'] = true
@@ -498,12 +529,24 @@ class Report_html
498
529
  return html_string
499
530
  end
500
531
 
532
+ def corplot(user_options = {}, &block)
533
+ default_options = {
534
+ transpose: false,
535
+ correlationAxis: 'samples'
536
+ }.merge!(user_options)
537
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
538
+ config['graphType'] = 'Correlation'
539
+ config['correlationAxis'] = default_options[:correlationAxis]
540
+ end
541
+ return html_string
542
+ end
543
+
501
544
  def sccater2D(user_options = {}, &block)
502
545
  default_options = {
503
546
  row_names: false,
504
547
  transpose: false
505
548
  }.merge!(user_options)
506
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
549
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
507
550
  config['graphType'] = 'Scatter2D'
508
551
  config['xAxis'] = [samples.first] if config['xAxis'].nil?
509
552
  config['yAxis'] = samples[1..samples.length-1] if config['yAxis'].nil?
@@ -519,12 +562,14 @@ class Report_html
519
562
  return html_string
520
563
  end
521
564
 
565
+ alias scatter2D sccater2D # Fix for wrong name method
566
+
522
567
  def scatterbubble2D(user_options = {}, &block)
523
568
  default_options = {
524
569
  row_names: true,
525
570
  transpose: false
526
571
  }.merge!(user_options)
527
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
572
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
528
573
  config['graphType'] = 'ScatterBubble2D'
529
574
  if options[:xAxis].nil?
530
575
  config['xAxis'] = [samples[0]]
@@ -566,7 +611,7 @@ class Report_html
566
611
  ringsType: [],
567
612
  ringsWeight: []
568
613
  }.merge!(user_options)
569
- html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id|
614
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
570
615
  options[:mod_data_structure] = 'circular'
571
616
  config['graphType'] = 'Circular'
572
617
  config['segregateVariablesBy'] = ['Ring']
@@ -618,6 +663,39 @@ class Report_html
618
663
  end
619
664
  end
620
665
 
666
+ def circular_genome(user_options = {}, &block)
667
+ default_options = {}.merge!(user_options)
668
+ coordinates = user_options[:genomic_coordinates]
669
+ html_string = canvasXpress_main(default_options, block) do |options, config, samples, vars, values, object_id, x, z|
670
+ config['graphType'] = 'Circular'
671
+ config["arcSegmentsSeparation"] = 3
672
+ config["colorScheme"] = "Tableau"
673
+ config["colors"] = ["#332288","#6699CC","#88CCEE","#44AA99","#117733","#999933","#DDCC77","#661100","#CC6677","#AA4466","#882255","#AA4499"]
674
+ config["showIdeogram"] = true
675
+ chr = []
676
+ pos = []
677
+ tags2remove = []
678
+ vars.each_with_index do |var, i|
679
+ coord = coordinates[var]
680
+ if !coord.nil?
681
+ tag = coord.first.gsub(/[^\dXY]/,'')
682
+ if tag == 'X' || tag == 'Y' || (tag.to_i > 0 && tag.to_i <= 22)
683
+ chr << coord.first.gsub(/[^\dXY]/,'')
684
+ pos << coord.last - 1
685
+ else
686
+ tags2remove << i
687
+ end
688
+ else
689
+ tags2remove << i
690
+ end
691
+ end
692
+ tags2remove.reverse_each{|i| ent = vars.delete_at(i); warn("Feature #{ent} has not valid coordinates")} # Remove entities with invalid coordinates
693
+ z['chr'] = chr
694
+ z['pos'] = pos
695
+ end
696
+ return html_string
697
+ end
698
+
621
699
  # EMBED FILES
622
700
  ###################################################################################
623
701
 
@@ -1,3 +1,3 @@
1
1
  module ReportHtml
2
- VERSION = "0.3.8"
2
+ VERSION = "0.4.6"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: report_html
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.8
4
+ version: 0.4.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - seoanezonjic
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-06-02 00:00:00.000000000 Z
11
+ date: 2021-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -72,7 +72,7 @@ homepage: ''
72
72
  licenses:
73
73
  - MIT
74
74
  metadata: {}
75
- post_install_message:
75
+ post_install_message:
76
76
  rdoc_options: []
77
77
  require_paths:
78
78
  - lib
@@ -87,9 +87,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
87
87
  - !ruby/object:Gem::Version
88
88
  version: '0'
89
89
  requirements: []
90
- rubyforge_project:
91
- rubygems_version: 2.6.14
92
- signing_key:
90
+ rubygems_version: 3.2.15
91
+ signing_key:
93
92
  specification_version: 4
94
93
  summary: Gem to build html interactive reports.
95
94
  test_files: []