@@ -327,7 +327,7 @@ var pedigreejs = (function (exports) {
327
327
} ) ;
328
328
}
329
329
} catch ( err ) {
330
- showDialog ( title , msg , onConfirm , opts ) ;
330
+ showDialog ( title , msg , onConfirm , opts , dataset ) ;
331
331
}
332
332
}
333
333
@@ -1069,37 +1069,40 @@ var pedigreejs = (function (exports) {
1069
1069
btn_target : 'pedigree_history'
1070
1070
} , options ) ;
1071
1071
let btns = [ {
1072
- "fa" : "fa-undo pull-left" ,
1072
+ "fa" : "fa-file-image" ,
1073
+ "title" : "download PNG image"
1074
+ } , {
1075
+ "fa" : "fa-undo" ,
1073
1076
"title" : "undo"
1074
1077
} , {
1075
- "fa" : "fa-redo pull-left " ,
1078
+ "fa" : "fa-redo" ,
1076
1079
"title" : "redo"
1077
1080
} , {
1078
- "fa" : "fa-refresh pull-left " ,
1081
+ "fa" : "fa-refresh" ,
1079
1082
"title" : "reset"
1080
1083
} ] ;
1081
1084
btns . push ( {
1082
- "fa" : "fa-crosshairs pull-right " ,
1085
+ "fa" : "fa-crosshairs" ,
1083
1086
"title" : "scale-to-fit"
1084
1087
} ) ;
1085
1088
if ( opts . zoomSrc && opts . zoomSrc . indexOf ( 'button' ) > - 1 ) {
1086
1089
if ( opts . zoomOut !== 1 ) btns . push ( {
1087
- "fa" : "fa-minus-circle pull-right " ,
1090
+ "fa" : "fa-minus-circle" ,
1088
1091
"title" : "zoom-out"
1089
1092
} ) ;
1090
1093
if ( opts . zoomIn !== 1 ) btns . push ( {
1091
- "fa" : "fa-plus-circle pull-right " ,
1094
+ "fa" : "fa-plus-circle" ,
1092
1095
"title" : "zoom-in"
1093
1096
} ) ;
1094
1097
}
1095
1098
btns . push ( {
1096
- "fa" : "fa-arrows-alt pull-right " ,
1099
+ "fa" : "fa-arrows-alt" ,
1097
1100
"title" : "fullscreen"
1098
1101
} ) ;
1099
1102
let lis = "" ;
1100
1103
for ( let i = 0 ; i < btns . length ; i ++ ) {
1101
1104
lis += '<span>' ;
1102
- lis += ' <i class="fa fa-lg ' + btns [ i ] . fa + '" ' + ( btns [ i ] . fa === "fa-arrows-alt pull-right " ? 'id="fullscreen" ' : '' ) + ' aria-hidden="true" title="' + btns [ i ] . title + '" ></i>';
1105
+ lis += '<i class="fa fa-lg ' + btns [ i ] . fa + ' pe-2" aria-hidden="true" title=" ' + btns [ i ] . title + '"' + ( btns [ i ] . fa === "fa-arrows-alt" ? 'id="fullscreen" ' : '' ) + '></i>' ;
1103
1106
lis += '</span>' ;
1104
1107
}
1105
1108
$ ( "#" + opts . btn_target ) . append ( lis ) ;
@@ -1173,7 +1176,10 @@ var pedigreejs = (function (exports) {
1173
1176
messages ( "Pedigree Reset" , "This may result in loss of some data. Reset now?" , reset , opts ) ;
1174
1177
} else if ( $ ( e . target ) . hasClass ( 'fa-crosshairs' ) ) {
1175
1178
scale_to_fit ( opts ) ;
1179
+ } else if ( $ ( e . target ) . hasClass ( 'fa-file-image' ) ) {
1180
+ return ;
1176
1181
}
1182
+
1177
1183
// trigger fhChange event
1178
1184
$ ( document ) . trigger ( 'fhChange' , [ opts ] ) ;
1179
1185
} ) ;
@@ -1406,6 +1412,7 @@ var pedigreejs = (function (exports) {
1406
1412
} ;
1407
1413
let genetic_test1 = [ 'brca1' , 'brca2' , 'palb2' , 'atm' , 'chek2' , 'rad51d' , 'rad51c' , 'brip1' ] ;
1408
1414
let genetic_test2 = [ 'brca1' , 'brca2' , 'palb2' , 'atm' , 'chek2' , 'bard1' , 'rad51d' , 'rad51c' , 'brip1' ] ;
1415
+ let genetic_test4 = [ 'brca1' , 'brca2' , 'palb2' , 'atm' , 'chek2' , 'bard1' , 'rad51d' , 'rad51c' , 'brip1' , 'hoxb13' ] ;
1409
1416
let pathology_tests = [ 'er' , 'pr' , 'her2' , 'ck14' , 'ck56' ] ;
1410
1417
1411
1418
// risk factor to storage
@@ -1423,6 +1430,9 @@ var pedigreejs = (function (exports) {
1423
1430
if ( prs . ovarian_cancer_prs && prs . ovarian_cancer_prs . alpha !== 0 && prs . ovarian_cancer_prs . zscore !== 0 ) {
1424
1431
meta += "\n##PRS_OC=alpha=" + prs . ovarian_cancer_prs . alpha + ",zscore=" + prs . ovarian_cancer_prs . zscore ;
1425
1432
}
1433
+ if ( prs . prostate_cancer_prs && prs . prostate_cancer_prs . alpha !== 0 && prs . prostate_cancer_prs . zscore !== 0 ) {
1434
+ meta += "\n##PRS_PC=alpha=" + prs . prostate_cancer_prs . alpha + ",zscore=" + prs . prostate_cancer_prs . zscore ;
1435
+ }
1426
1436
} catch ( err ) {
1427
1437
console . warn ( "PRS" , prs ) ;
1428
1438
}
@@ -1468,6 +1478,13 @@ var pedigreejs = (function (exports) {
1468
1478
'percent' : parseFloat ( $ ( '#ovarian_prs_percent' ) . val ( ) )
1469
1479
} ;
1470
1480
}
1481
+ if ( hasInput ( "prostate_prs_a" ) && hasInput ( "prostate_prs_z" ) ) {
1482
+ prs [ 'prostate_cancer_prs' ] = {
1483
+ 'alpha' : parseFloat ( $ ( '#prostate_prs_a' ) . val ( ) ) ,
1484
+ 'zscore' : parseFloat ( $ ( '#prostate_prs_z' ) . val ( ) ) ,
1485
+ 'percent' : parseFloat ( $ ( '#prostate_prs_percent' ) . val ( ) )
1486
+ } ;
1487
+ }
1471
1488
console . log ( prs ) ;
1472
1489
return isEmpty ( prs ) ? 0 : prs ;
1473
1490
}
@@ -1481,22 +1498,31 @@ var pedigreejs = (function (exports) {
1481
1498
}
1482
1499
return meta ;
1483
1500
}
1501
+
1502
+ /**
1503
+ * Get genetic test genes based on CanRisk version
1504
+ */
1505
+ function getGeneticTest ( version ) {
1506
+ version = parseInt ( version ) ;
1507
+ if ( version === 1 ) return genetic_test1 ; else if ( version === 2 ) return genetic_test2 ; else if ( version === 3 ) return genetic_test2 ;
1508
+ return genetic_test4 ;
1509
+ }
1484
1510
function readCanRisk ( boadicea_lines ) {
1485
1511
let lines = boadicea_lines . trim ( ) . split ( '\n' ) ;
1486
1512
let ped = [ ] ;
1487
1513
let hdr = [ ] ; // collect risk factor header lines
1488
1514
const regexp = / ( [ 0 - 9 ] ) / ;
1489
- let version = 2 ;
1490
- let gt = version === 1 ? genetic_test1 : genetic_test2 ;
1491
- let ncol = [ 26 , 27 , 27 ] ; // number of columns - v1, v2, v3
1515
+ let version = 3 ;
1516
+ let gt = getGeneticTest ( version ) ;
1517
+ let ncol = [ 26 , 27 , 27 , 28 ] ; // number of columns - v1, v2, v3, v4
1492
1518
// assumes two line header
1493
1519
for ( let i = 0 ; i < lines . length ; i ++ ) {
1494
1520
let ln = lines [ i ] . trim ( ) ;
1495
1521
if ( ln . indexOf ( "##" ) === 0 ) {
1496
1522
if ( ln . indexOf ( "##CanRisk" ) === 0 ) {
1497
1523
const match = ln . match ( regexp ) ;
1498
1524
version = parseInt ( match [ 1 ] ) ;
1499
- gt = version === 1 ? genetic_test1 : genetic_test2 ;
1525
+ gt = getGeneticTest ( version ) ;
1500
1526
console . log ( "CanRisk File Format version " + version ) ;
1501
1527
if ( ln . indexOf ( ";" ) > - 1 ) {
1502
1528
// contains surgical op data
@@ -1601,7 +1627,7 @@ var pedigreejs = (function (exports) {
1601
1627
* Get CanRisk formated pedigree.
1602
1628
*/
1603
1629
function get_pedigree ( dataset , famid , meta , isanon ) {
1604
- let version = arguments . length > 4 && arguments [ 4 ] !== undefined ? arguments [ 4 ] : 2 ;
1630
+ let version = arguments . length > 4 && arguments [ 4 ] !== undefined ? arguments [ 4 ] : 3 ;
1605
1631
let ethnicity = arguments . length > 5 && arguments [ 5 ] !== undefined ? arguments [ 5 ] : undefined ;
1606
1632
let v = Number . isInteger ( version ) ? version + ".0" : version . toString ( ) ;
1607
1633
let msg = "##CanRisk " + v ;
@@ -1655,7 +1681,7 @@ var pedigreejs = (function (exports) {
1655
1681
msg += "\n##ethnicity=" + ethnicity ;
1656
1682
}
1657
1683
msg += "\n##FamID\tName\tTarget\tIndivID\tFathID\tMothID\tSex\tMZtwin\tDead\tAge\tYob\tBC1\tBC2\tOC\tPRO\tPAN\tAshkn" ;
1658
- let gt = version === 1 ? genetic_test1 : genetic_test2 ;
1684
+ let gt = getGeneticTest ( version ) ;
1659
1685
for ( let i = 0 ; i < gt . length ; i ++ ) {
1660
1686
msg += "\t" + gt [ i ] . toUpperCase ( ) ;
1661
1687
}
@@ -1745,6 +1771,7 @@ var pedigreejs = (function (exports) {
1745
1771
cancers : cancers ,
1746
1772
genetic_test1 : genetic_test1 ,
1747
1773
genetic_test2 : genetic_test2 ,
1774
+ genetic_test4 : genetic_test4 ,
1748
1775
get_mdensity : get_mdensity ,
1749
1776
get_meta : get_meta ,
1750
1777
get_non_anon_pedigree : get_non_anon_pedigree ,
@@ -1779,24 +1806,9 @@ var pedigreejs = (function (exports) {
1779
1806
$ ( '#svg_download' ) . click ( function ( _e ) {
1780
1807
svg_download ( get_printable_svg ( opts ) ) ;
1781
1808
} ) ;
1782
- $ ( '#png_download' ) . click ( function ( _e ) {
1783
- let deferred = svg2img ( $ ( 'svg' ) , "pedigree" ) ;
1784
- $ . when . apply ( $ , [ deferred ] ) . done ( function ( ) {
1785
- let obj = getByName ( arguments , "pedigree" ) ;
1786
- if ( isEdge ( ) || isIE ( ) ) {
1787
- let html = "<img src='" + obj . img + "' alt='canvas image'/>" ;
1788
- let newTab = window . open ( ) ; // pop-ups need to be enabled
1789
- newTab . document . write ( html ) ;
1790
- } else {
1791
- let a = document . createElement ( 'a' ) ;
1792
- a . href = obj . img ;
1793
- a . download = 'plot.png' ;
1794
- a . target = '_blank' ;
1795
- document . body . appendChild ( a ) ;
1796
- a . click ( ) ;
1797
- document . body . removeChild ( a ) ;
1798
- }
1799
- } ) ;
1809
+ $ ( '#png_download, .fa-file-image' ) . click ( function ( _e ) {
1810
+ let resolution = 1 ;
1811
+ img_download ( opts , resolution , "image/png" ) ;
1800
1812
} ) ;
1801
1813
}
1802
1814
@@ -1832,6 +1844,32 @@ var pedigreejs = (function (exports) {
1832
1844
}
1833
1845
}
1834
1846
1847
+ /**
1848
+ * Export pedigree as image, e.g. PNG
1849
+ */
1850
+ function img_download ( opts , resolution , img_type ) {
1851
+ let deferred = svg2img ( $ ( '#' + opts . targetDiv ) . find ( 'svg' ) , "pedigree" , {
1852
+ resolution : resolution ,
1853
+ img_type : img_type
1854
+ } ) ;
1855
+ $ . when . apply ( $ , [ deferred ] ) . done ( function ( ) {
1856
+ let obj = getByName ( arguments , "pedigree" ) ;
1857
+ if ( isEdge ( ) || isIE ( ) ) {
1858
+ let html = "<img src='" + obj . img + "' alt='canvas image'/>" ;
1859
+ let newTab = window . open ( ) ; // pop-ups need to be enabled
1860
+ newTab . document . write ( html ) ;
1861
+ } else {
1862
+ let a = document . createElement ( 'a' ) ;
1863
+ a . href = obj . img ;
1864
+ a . download = 'plot.png' ;
1865
+ a . target = '_blank' ;
1866
+ document . body . appendChild ( a ) ;
1867
+ a . click ( ) ;
1868
+ document . body . removeChild ( a ) ;
1869
+ }
1870
+ } ) ;
1871
+ }
1872
+
1835
1873
/**
1836
1874
* Given a SVG document element convert to image (e.g. jpeg, png - default png).
1837
1875
*/
@@ -2431,6 +2469,7 @@ var pedigreejs = (function (exports) {
2431
2469
__proto__ : null ,
2432
2470
addIO : addIO ,
2433
2471
copy_svg : copy_svg ,
2472
+ img_download : img_download ,
2434
2473
load_data : load_data ,
2435
2474
print : print ,
2436
2475
readBoadiceaV4 : readBoadiceaV4 ,
@@ -3586,7 +3625,7 @@ var pedigreejs = (function (exports) {
3586
3625
'type' : 'prostate_cancer' ,
3587
3626
'colour' : '#D5494A'
3588
3627
} ] ,
3589
- labels : [ 'stillbirth' , [ 'age' , 'yob' ] , 'alleles' , [ 'brca1_gene_test' , 'brca2_gene_test' , 'palb2_gene_test' , 'chek2_gene_test' , 'atm_gene_test' ] , [ 'rad51d_gene_test' , 'rad51c_gene_test' , 'brip1_gene_test' ] , [ 'er_bc_pathology' , 'pr_bc_pathology' , 'her2_bc_pathology' , 'ck14_bc_pathology' , 'ck56_bc_pathology' ] ] ,
3628
+ labels : [ 'stillbirth' , [ 'age' , 'yob' ] , 'alleles' , [ 'brca1_gene_test' , 'brca2_gene_test' , 'palb2_gene_test' , 'chek2_gene_test' , 'atm_gene_test' ] , [ 'rad51d_gene_test' , 'rad51c_gene_test' , 'brip1_gene_test' , 'hoxb13_gene_test' ] , [ 'er_bc_pathology' , 'pr_bc_pathology' , 'her2_bc_pathology' , 'ck14_bc_pathology' , 'ck56_bc_pathology' ] ] ,
3590
3629
keep_proband_on_reset : false ,
3591
3630
font_size : '.75em' ,
3592
3631
font_family : 'Helvetica' ,
0 commit comments