@papaemmelab/isabl-web 0.3.9 → 0.3.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/isabl-web.common.js +668 -274
- package/dist/isabl-web.umd.js +668 -274
- package/dist/isabl-web.umd.min.js +3 -3
- package/package.json +1 -1
package/dist/isabl-web.umd.js
CHANGED
|
@@ -1952,7 +1952,7 @@ exports = module.exports = __webpack_require__("2350")(false);
|
|
|
1952
1952
|
|
|
1953
1953
|
|
|
1954
1954
|
// module
|
|
1955
|
-
exports.push([module.i, ".node-tooltip{background:rgba(0,0,0,.8)}.individual-tree-div{overflow-x:scroll;margin:auto}.individual-tree-div .node{stroke-width:3px}.individual-tree-div .node text{font-size:14px;font-weight:300;fill:#000!important;cursor:pointer}.individual-tree-div .node text.collapse-text{font-size:20px;font-weight:200;cursor:default}.individual-tree-div .node.experiment text{cursor:default}.individual-tree-div .link{fill:none;stroke-width:1.5px;stroke:#aaa}", ""]);
|
|
1955
|
+
exports.push([module.i, ".tree-tooltip.v-tooltip__content{color:#fff;padding:20px;opacity:1;font-size:12px;overflow:hidden}.node-tooltip{background:rgba(0,0,0,.8)}.individual-tree-div{overflow-x:scroll;margin:auto}.individual-tree-div .node{stroke-width:3px}.individual-tree-div .node text{font-size:14px;font-weight:300;fill:#000!important;cursor:pointer}.individual-tree-div .node text.collapse-text{font-size:20px;font-weight:200;cursor:default}.individual-tree-div .node.experiment text{cursor:default}.individual-tree-div .link{fill:none;stroke-width:1.5px;stroke:#aaa}", ""]);
|
|
1956
1956
|
|
|
1957
1957
|
// exports
|
|
1958
1958
|
|
|
@@ -91177,7 +91177,7 @@ module.exports = overArg;
|
|
|
91177
91177
|
/***/ "9224":
|
|
91178
91178
|
/***/ (function(module) {
|
|
91179
91179
|
|
|
91180
|
-
module.exports = JSON.parse("{\"name\":\"@papaemmelab/isabl-web\",\"version\":\"0.3.
|
|
91180
|
+
module.exports = JSON.parse("{\"name\":\"@papaemmelab/isabl-web\",\"version\":\"0.3.12\",\"scripts\":{\"serve\":\"vue-cli-service serve\",\"lint\":\"vue-cli-service lint\",\"build-lib\":\"vue-cli-service build --target lib --name isabl-web ./src/main.js\",\"build-wc\":\"vue-cli-service build --target wc --name isabl-web ./src/components/*.vue\",\"build-wc-async\":\"vue-cli-service build --target wc-async --name isabl-web ./src/components/*.vue\",\"publish-app\":\"yarn version --patch && yarn build-lib && yarn publish --access public\",\"dev\":\"yarn build-lib --watch\",\"test:unit\":\"vue-cli-service test:unit\",\"test:e2e\":\"vue-cli-service test:e2e\",\"test:travis\":\"yarn test:e2e --headless\",\"test:submissions\":\"node tests/utils/create_test_submission.js\",\"test:report-coverage\":\"nyc report --reporter=text-lcov > coverage.lcov && codecov -t $CODECOV_TOKEN\",\"demo\":\"nodemon demo/demo-app.js\"},\"dependencies\":{\"@mdi/font\":\"^7.0.96\",\"ansi_up\":\"^5\",\"axios\":\"^0.21.1\",\"crossfilter\":\"^1.3.12\",\"crossfilter2\":\"^1.4.7\",\"d3-tip\":\"^0.9.1\",\"dc\":\"3.1.2\",\"detect-csv\":\"^1.1.0\",\"js-md5\":\"^0.7.3\",\"minify-css-string\":\"^1.0.0\",\"moment\":\"^2.22.2\",\"register-service-worker\":\"^1.5.2\",\"v-hotkey\":\"^0.6.0\",\"vue\":\"^2.5.16\",\"vue-clipboard2\":\"^0.2.1\",\"vue-gallery\":\"^1.4.0\",\"vue-highlightjs\":\"^1.3.3\",\"vue-json-excel\":\"^0.2.5\",\"vue-observe-visibility\":\"^0.4.6\",\"vue-router\":\"^3.0.1\",\"vue-upload-component\":\"^2.8.11\",\"vuetify\":\"2.6.10\",\"vuex\":\"^3.0.1\",\"vuex-router-sync\":\"^5.0.0\"},\"devDependencies\":{\"@cypress/code-coverage\":\"^1.10.1\",\"@vue/cli-plugin-babel\":\"^3.3.0\",\"@vue/cli-plugin-e2e-cypress\":\"^3.3.0\",\"@vue/cli-plugin-eslint\":\"^3.3.0\",\"@vue/cli-plugin-pwa\":\"^3.3.0\",\"@vue/cli-plugin-unit-jest\":\"^3.3.0\",\"@vue/cli-service\":\"^3.3.0\",\"@vue/eslint-config-prettier\":\"^3.0.5\",\"@vue/test-utils\":\"^1.0.0-beta.20\",\"axios-mock-adapter\":\"^1.15.0\",\"babel-core\":\"7.0.0-bridge.0\",\"babel-jest\":\"^23.0.1\",\"babel-plugin-istanbul\":\"^5.2.0\",\"codecov\":\"^3.6.1\",\"eslint-plugin-vuetify\":\"^1.1.0\",\"express\":\"^4.16.3\",\"html-webpack-plugin\":\"^3.2.0\",\"istanbul-lib-coverage\":\"^2.0.5\",\"mini-css-extract-plugin\":\"^0.4.2\",\"nyc\":\"^14.1.1\",\"sass\":\"^1.55.0\",\"sass-loader\":\"^7.0.1\",\"vue-template-compiler\":\"^2.5.16\",\"xlsx-populate\":\"^1.19.1\"},\"browserslist\":[\"> 1%\",\"last 2 versions\",\"not ie <= 8\"],\"main\":\"./dist/isabl-web.umd.min.js\",\"license\":\"MIT\",\"files\":[\"dist/isabl-web*.js\"],\"author\":\"Juan S. Medina - Juan E. Arango\",\"description\":\"Isabl Frontend of the MSK Academic License.\",\"bugs\":{\"url\":\"https://github.com/papaemmelab/isabl_web/issues\"},\"homepage\":\"https://github.com/papaemmelab/isabl_web#readme\"}");
|
|
91181
91181
|
|
|
91182
91182
|
/***/ }),
|
|
91183
91183
|
|
|
@@ -222363,15 +222363,16 @@ var EditProfileModal_component = normalizeComponent(
|
|
|
222363
222363
|
)
|
|
222364
222364
|
|
|
222365
222365
|
/* harmony default export */ var EditProfileModal = (EditProfileModal_component.exports);
|
|
222366
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=template&id=
|
|
222367
|
-
var
|
|
222368
|
-
var
|
|
222366
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=template&id=58c607e8&
|
|
222367
|
+
var NewProjectModalvue_type_template_id_58c607e8_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('base-modal',{attrs:{"show-modal":_vm.showModal,"max-width":"800px"},on:{"close-modal":_vm.closeModal},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("Create Project")]},proxy:true},{key:"content",fn:function(){return [_c('v-container',{staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"title",staticClass:"pt-6",attrs:{"v-show":_vm.showModal,"rules":[_vm.rules.required],"error-messages":_vm.errorMessages.title,"label":"Project Title","data-test":"new-project-title-input"},on:{"keyup":function($event){if(!$event.type.indexOf('key')&&_vm._k($event.keyCode,"enter",13,$event.key,"Enter")){ return null; }return _vm.submit.apply(null, arguments)}},model:{value:(_vm.project.title),callback:function ($$v) {_vm.$set(_vm.project, "title", $$v)},expression:"project.title"}})],1)],1),_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.showOptionalFields),expression:"showOptionalFields"}],staticClass:"pa-0"},[_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-text-field',{ref:"shortTitle",attrs:{"rules":[_vm.rules.unicode, _vm.rules.min10],"error-messages":_vm.errorMessages.short_title,"label":"Project Short Title","data-test":"new-project-short-input","counter":"","dense":"","maxlength":"30","hint":"Think of the objective of the project."},model:{value:(_vm.project.shortTitle),callback:function ($$v) {_vm.$set(_vm.project, "shortTitle", $$v)},expression:"project.shortTitle"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('v-select',{ref:"group",attrs:{"items":_vm.groups,"return-object":"","item-text":"slug","label":"Group","dense":"","data-test":"new-project-groups-input"},model:{value:(_vm.project.group),callback:function ($$v) {_vm.$set(_vm.project, "group", $$v)},expression:"project.group"}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"principalInvestigator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.principal_investigator,"field":"principalInvestigator","label":"Principal Investigator","data-test":"new-project-pi-input","hint":"Laboratory head or principal investigator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"owner",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.owner,"field":"owner","label":"Project Owner","data-test":"new-project-owner-input","hint":"Who deals with the nitty-gritty of the project","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"coordinator",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.coordinator,"field":"coordinator","label":"Coordinator","data-test":"new-project-coord-input","hint":"Project manager or coordinator","dense":""},on:{"update-value":_vm.updateValue}})],1)],1),_c('v-row',[_c('v-col',{attrs:{"cols":"16"}},[_c('user-search-input',{ref:"analyst",attrs:{"model":_vm.project,"rules":[_vm.rules.email],"error-messages":_vm.errorMessages.analyst,"field":"analyst","label":"Data Analyst","data-test":"new-project-analyst-input","hint":"Person responsible for the data analysis"},on:{"update-value":_vm.updateValue}})],1)],1)],1)],1)]},proxy:true},{key:"footer-actions",fn:function(){return [_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-optional-btn","text":""},on:{"click":_vm.toggleOptionalFields}},[_vm._v("Optional Fields")]),_c('v-btn',{attrs:{"color":"primary darken-1","data-test":"new-project-create-btn","text":""},on:{"click":_vm.submit}},[_vm._v("Create")])]},proxy:true}])})}
|
|
222368
|
+
var NewProjectModalvue_type_template_id_58c607e8_staticRenderFns = []
|
|
222369
222369
|
|
|
222370
222370
|
|
|
222371
|
-
// CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=
|
|
222371
|
+
// CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=58c607e8&
|
|
222372
222372
|
|
|
222373
222373
|
// EXTERNAL MODULE: ./node_modules/lodash/has.js
|
|
222374
222374
|
var has = __webpack_require__("3852");
|
|
222375
|
+
var has_default = /*#__PURE__*/__webpack_require__.n(has);
|
|
222375
222376
|
|
|
222376
222377
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/GroupSearchInput.vue?vue&type=template&id=9914fc16&
|
|
222377
222378
|
var GroupSearchInputvue_type_template_id_9914fc16_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-autocomplete',{ref:"groupSearchInput",attrs:{"value":_vm.value,"rules":_vm.rules,"items":_vm.groups,"loading":_vm.isLoading,"search-input":_vm.groupsQuery,"label":_vm.label,"hint":_vm.hint,"no-filter":"","return-object":"","item-text":"name","item-value":"name"},on:{"update:searchInput":function($event){_vm.groupsQuery=$event},"update:search-input":function($event){_vm.groupsQuery=$event},"input":_vm.updateValue},scopedSlots:_vm._u([{key:"selection",fn:function(ref){
|
|
@@ -224530,7 +224531,7 @@ var UserSearchInput_component = normalizeComponent(
|
|
|
224530
224531
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/projects/NewProjectModal.vue?vue&type=script&lang=js&
|
|
224531
224532
|
var cov_41uwsnrpn = function () {
|
|
224532
224533
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/projects/NewProjectModal.vue";
|
|
224533
|
-
var hash = "
|
|
224534
|
+
var hash = "880a7035d32da713e533258d2460ef2446ff3c8f";
|
|
224534
224535
|
var global = new Function("return this")();
|
|
224535
224536
|
var gcv = "__coverage__";
|
|
224536
224537
|
var coverageData = {
|
|
@@ -224562,247 +224563,367 @@ var cov_41uwsnrpn = function () {
|
|
|
224562
224563
|
column: 6
|
|
224563
224564
|
},
|
|
224564
224565
|
end: {
|
|
224565
|
-
line:
|
|
224566
|
+
line: 214,
|
|
224566
224567
|
column: 7
|
|
224567
224568
|
}
|
|
224568
224569
|
},
|
|
224569
224570
|
"3": {
|
|
224570
224571
|
start: {
|
|
224571
|
-
line:
|
|
224572
|
+
line: 209,
|
|
224572
224573
|
column: 8
|
|
224573
224574
|
},
|
|
224574
224575
|
end: {
|
|
224576
|
+
line: 211,
|
|
224577
|
+
column: 9
|
|
224578
|
+
}
|
|
224579
|
+
},
|
|
224580
|
+
"4": {
|
|
224581
|
+
start: {
|
|
224575
224582
|
line: 210,
|
|
224583
|
+
column: 10
|
|
224584
|
+
},
|
|
224585
|
+
end: {
|
|
224586
|
+
line: 210,
|
|
224587
|
+
column: 48
|
|
224588
|
+
}
|
|
224589
|
+
},
|
|
224590
|
+
"5": {
|
|
224591
|
+
start: {
|
|
224592
|
+
line: 212,
|
|
224593
|
+
column: 8
|
|
224594
|
+
},
|
|
224595
|
+
end: {
|
|
224596
|
+
line: 212,
|
|
224576
224597
|
column: 26
|
|
224577
224598
|
}
|
|
224578
224599
|
},
|
|
224579
|
-
"
|
|
224600
|
+
"6": {
|
|
224580
224601
|
start: {
|
|
224581
|
-
line:
|
|
224602
|
+
line: 213,
|
|
224582
224603
|
column: 8
|
|
224583
224604
|
},
|
|
224584
224605
|
end: {
|
|
224585
|
-
line:
|
|
224606
|
+
line: 213,
|
|
224586
224607
|
column: 24
|
|
224587
224608
|
}
|
|
224588
224609
|
},
|
|
224589
|
-
"
|
|
224610
|
+
"7": {
|
|
224590
224611
|
start: {
|
|
224591
|
-
line:
|
|
224612
|
+
line: 219,
|
|
224613
|
+
column: 4
|
|
224614
|
+
},
|
|
224615
|
+
end: {
|
|
224616
|
+
line: 227,
|
|
224617
|
+
column: 6
|
|
224618
|
+
}
|
|
224619
|
+
},
|
|
224620
|
+
"8": {
|
|
224621
|
+
start: {
|
|
224622
|
+
line: 220,
|
|
224592
224623
|
column: 6
|
|
224593
224624
|
},
|
|
224594
224625
|
end: {
|
|
224595
|
-
line:
|
|
224626
|
+
line: 226,
|
|
224596
224627
|
column: 7
|
|
224597
224628
|
}
|
|
224598
224629
|
},
|
|
224599
|
-
"
|
|
224630
|
+
"9": {
|
|
224600
224631
|
start: {
|
|
224601
|
-
line:
|
|
224632
|
+
line: 221,
|
|
224633
|
+
column: 8
|
|
224634
|
+
},
|
|
224635
|
+
end: {
|
|
224636
|
+
line: 221,
|
|
224637
|
+
column: 44
|
|
224638
|
+
}
|
|
224639
|
+
},
|
|
224640
|
+
"10": {
|
|
224641
|
+
start: {
|
|
224642
|
+
line: 222,
|
|
224643
|
+
column: 13
|
|
224644
|
+
},
|
|
224645
|
+
end: {
|
|
224646
|
+
line: 226,
|
|
224647
|
+
column: 7
|
|
224648
|
+
}
|
|
224649
|
+
},
|
|
224650
|
+
"11": {
|
|
224651
|
+
start: {
|
|
224652
|
+
line: 223,
|
|
224653
|
+
column: 8
|
|
224654
|
+
},
|
|
224655
|
+
end: {
|
|
224656
|
+
line: 223,
|
|
224657
|
+
column: 66
|
|
224658
|
+
}
|
|
224659
|
+
},
|
|
224660
|
+
"12": {
|
|
224661
|
+
start: {
|
|
224662
|
+
line: 224,
|
|
224663
|
+
column: 13
|
|
224664
|
+
},
|
|
224665
|
+
end: {
|
|
224666
|
+
line: 226,
|
|
224667
|
+
column: 7
|
|
224668
|
+
}
|
|
224669
|
+
},
|
|
224670
|
+
"13": {
|
|
224671
|
+
start: {
|
|
224672
|
+
line: 225,
|
|
224673
|
+
column: 8
|
|
224674
|
+
},
|
|
224675
|
+
end: {
|
|
224676
|
+
line: 225,
|
|
224677
|
+
column: 67
|
|
224678
|
+
}
|
|
224679
|
+
},
|
|
224680
|
+
"14": {
|
|
224681
|
+
start: {
|
|
224682
|
+
line: 231,
|
|
224683
|
+
column: 6
|
|
224684
|
+
},
|
|
224685
|
+
end: {
|
|
224686
|
+
line: 234,
|
|
224687
|
+
column: 7
|
|
224688
|
+
}
|
|
224689
|
+
},
|
|
224690
|
+
"15": {
|
|
224691
|
+
start: {
|
|
224692
|
+
line: 232,
|
|
224602
224693
|
column: 25
|
|
224603
224694
|
},
|
|
224604
224695
|
end: {
|
|
224605
|
-
line:
|
|
224696
|
+
line: 232,
|
|
224606
224697
|
column: 57
|
|
224607
224698
|
}
|
|
224608
224699
|
},
|
|
224609
|
-
"
|
|
224700
|
+
"16": {
|
|
224610
224701
|
start: {
|
|
224611
|
-
line:
|
|
224702
|
+
line: 233,
|
|
224612
224703
|
column: 8
|
|
224613
224704
|
},
|
|
224614
224705
|
end: {
|
|
224615
|
-
line:
|
|
224706
|
+
line: 233,
|
|
224616
224707
|
column: 38
|
|
224617
224708
|
}
|
|
224618
224709
|
},
|
|
224619
|
-
"
|
|
224710
|
+
"17": {
|
|
224620
224711
|
start: {
|
|
224621
|
-
line:
|
|
224712
|
+
line: 237,
|
|
224622
224713
|
column: 6
|
|
224623
224714
|
},
|
|
224624
224715
|
end: {
|
|
224625
|
-
line:
|
|
224716
|
+
line: 237,
|
|
224626
224717
|
column: 56
|
|
224627
224718
|
}
|
|
224628
224719
|
},
|
|
224629
|
-
"
|
|
224720
|
+
"18": {
|
|
224630
224721
|
start: {
|
|
224631
|
-
line:
|
|
224722
|
+
line: 238,
|
|
224632
224723
|
column: 6
|
|
224633
224724
|
},
|
|
224634
224725
|
end: {
|
|
224635
|
-
line:
|
|
224726
|
+
line: 238,
|
|
224636
224727
|
column: 44
|
|
224637
224728
|
}
|
|
224638
224729
|
},
|
|
224639
|
-
"
|
|
224730
|
+
"19": {
|
|
224640
224731
|
start: {
|
|
224641
|
-
line:
|
|
224732
|
+
line: 239,
|
|
224642
224733
|
column: 6
|
|
224643
224734
|
},
|
|
224644
224735
|
end: {
|
|
224645
|
-
line:
|
|
224736
|
+
line: 239,
|
|
224646
224737
|
column: 54
|
|
224647
224738
|
}
|
|
224648
224739
|
},
|
|
224649
|
-
"
|
|
224740
|
+
"20": {
|
|
224650
224741
|
start: {
|
|
224651
|
-
line:
|
|
224742
|
+
line: 242,
|
|
224743
|
+
column: 23
|
|
224744
|
+
},
|
|
224745
|
+
end: {
|
|
224746
|
+
line: 242,
|
|
224747
|
+
column: 27
|
|
224748
|
+
}
|
|
224749
|
+
},
|
|
224750
|
+
"21": {
|
|
224751
|
+
start: {
|
|
224752
|
+
line: 243,
|
|
224652
224753
|
column: 6
|
|
224653
224754
|
},
|
|
224654
224755
|
end: {
|
|
224655
|
-
line:
|
|
224756
|
+
line: 243,
|
|
224656
224757
|
column: 32
|
|
224657
224758
|
}
|
|
224658
224759
|
},
|
|
224659
|
-
"
|
|
224760
|
+
"22": {
|
|
224660
224761
|
start: {
|
|
224661
|
-
line:
|
|
224762
|
+
line: 244,
|
|
224662
224763
|
column: 6
|
|
224663
224764
|
},
|
|
224664
224765
|
end: {
|
|
224665
|
-
line:
|
|
224666
|
-
column:
|
|
224766
|
+
line: 244,
|
|
224767
|
+
column: 80
|
|
224667
224768
|
}
|
|
224668
224769
|
},
|
|
224669
|
-
"
|
|
224770
|
+
"23": {
|
|
224771
|
+
start: {
|
|
224772
|
+
line: 244,
|
|
224773
|
+
column: 45
|
|
224774
|
+
},
|
|
224775
|
+
end: {
|
|
224776
|
+
line: 244,
|
|
224777
|
+
column: 79
|
|
224778
|
+
}
|
|
224779
|
+
},
|
|
224780
|
+
"24": {
|
|
224670
224781
|
start: {
|
|
224671
224782
|
line: 247,
|
|
224672
224783
|
column: 6
|
|
224673
224784
|
},
|
|
224674
224785
|
end: {
|
|
224675
224786
|
line: 247,
|
|
224787
|
+
column: 22
|
|
224788
|
+
}
|
|
224789
|
+
},
|
|
224790
|
+
"25": {
|
|
224791
|
+
start: {
|
|
224792
|
+
line: 248,
|
|
224793
|
+
column: 6
|
|
224794
|
+
},
|
|
224795
|
+
end: {
|
|
224796
|
+
line: 248,
|
|
224676
224797
|
column: 31
|
|
224677
224798
|
}
|
|
224678
224799
|
},
|
|
224679
|
-
"
|
|
224800
|
+
"26": {
|
|
224680
224801
|
start: {
|
|
224681
|
-
line:
|
|
224802
|
+
line: 251,
|
|
224682
224803
|
column: 6
|
|
224683
224804
|
},
|
|
224684
224805
|
end: {
|
|
224685
|
-
line:
|
|
224806
|
+
line: 254,
|
|
224686
224807
|
column: 7
|
|
224687
224808
|
}
|
|
224688
224809
|
},
|
|
224689
|
-
"
|
|
224810
|
+
"27": {
|
|
224690
224811
|
start: {
|
|
224691
|
-
line:
|
|
224812
|
+
line: 257,
|
|
224692
224813
|
column: 6
|
|
224693
224814
|
},
|
|
224694
224815
|
end: {
|
|
224695
|
-
line:
|
|
224816
|
+
line: 257,
|
|
224696
224817
|
column: 32
|
|
224697
224818
|
}
|
|
224698
224819
|
},
|
|
224699
|
-
"
|
|
224820
|
+
"28": {
|
|
224700
224821
|
start: {
|
|
224701
|
-
line:
|
|
224822
|
+
line: 258,
|
|
224702
224823
|
column: 6
|
|
224703
224824
|
},
|
|
224704
224825
|
end: {
|
|
224705
|
-
line:
|
|
224826
|
+
line: 260,
|
|
224706
224827
|
column: 8
|
|
224707
224828
|
}
|
|
224708
224829
|
},
|
|
224709
|
-
"
|
|
224830
|
+
"29": {
|
|
224710
224831
|
start: {
|
|
224711
|
-
line:
|
|
224832
|
+
line: 259,
|
|
224712
224833
|
column: 8
|
|
224713
224834
|
},
|
|
224714
224835
|
end: {
|
|
224715
|
-
line:
|
|
224836
|
+
line: 259,
|
|
224716
224837
|
column: 39
|
|
224717
224838
|
}
|
|
224718
224839
|
},
|
|
224719
|
-
"
|
|
224840
|
+
"30": {
|
|
224720
224841
|
start: {
|
|
224721
|
-
line:
|
|
224842
|
+
line: 261,
|
|
224722
224843
|
column: 6
|
|
224723
224844
|
},
|
|
224724
224845
|
end: {
|
|
224725
|
-
line:
|
|
224846
|
+
line: 282,
|
|
224726
224847
|
column: 7
|
|
224727
224848
|
}
|
|
224728
224849
|
},
|
|
224729
|
-
"
|
|
224850
|
+
"31": {
|
|
224730
224851
|
start: {
|
|
224731
|
-
line:
|
|
224852
|
+
line: 262,
|
|
224732
224853
|
column: 8
|
|
224733
224854
|
},
|
|
224734
224855
|
end: {
|
|
224735
|
-
line:
|
|
224856
|
+
line: 281,
|
|
224736
224857
|
column: 12
|
|
224737
224858
|
}
|
|
224738
224859
|
},
|
|
224739
|
-
"
|
|
224860
|
+
"32": {
|
|
224740
224861
|
start: {
|
|
224741
|
-
line:
|
|
224862
|
+
line: 264,
|
|
224742
224863
|
column: 30
|
|
224743
224864
|
},
|
|
224744
224865
|
end: {
|
|
224745
|
-
line:
|
|
224866
|
+
line: 264,
|
|
224746
224867
|
column: 59
|
|
224747
224868
|
}
|
|
224748
224869
|
},
|
|
224749
|
-
"
|
|
224870
|
+
"33": {
|
|
224750
224871
|
start: {
|
|
224751
|
-
line:
|
|
224872
|
+
line: 265,
|
|
224752
224873
|
column: 12
|
|
224753
224874
|
},
|
|
224754
224875
|
end: {
|
|
224755
|
-
line:
|
|
224876
|
+
line: 267,
|
|
224756
224877
|
column: 14
|
|
224757
224878
|
}
|
|
224758
224879
|
},
|
|
224759
|
-
"
|
|
224880
|
+
"34": {
|
|
224760
224881
|
start: {
|
|
224761
|
-
line:
|
|
224882
|
+
line: 269,
|
|
224762
224883
|
column: 12
|
|
224763
224884
|
},
|
|
224764
224885
|
end: {
|
|
224765
|
-
line:
|
|
224886
|
+
line: 271,
|
|
224766
224887
|
column: 14
|
|
224767
224888
|
}
|
|
224768
224889
|
},
|
|
224769
|
-
"
|
|
224890
|
+
"35": {
|
|
224770
224891
|
start: {
|
|
224771
|
-
line:
|
|
224892
|
+
line: 272,
|
|
224772
224893
|
column: 12
|
|
224773
224894
|
},
|
|
224774
224895
|
end: {
|
|
224775
|
-
line:
|
|
224896
|
+
line: 272,
|
|
224776
224897
|
column: 29
|
|
224777
224898
|
}
|
|
224778
224899
|
},
|
|
224779
|
-
"
|
|
224900
|
+
"36": {
|
|
224780
224901
|
start: {
|
|
224781
|
-
line:
|
|
224902
|
+
line: 275,
|
|
224782
224903
|
column: 12
|
|
224783
224904
|
},
|
|
224784
224905
|
end: {
|
|
224785
|
-
line:
|
|
224906
|
+
line: 280,
|
|
224786
224907
|
column: 13
|
|
224787
224908
|
}
|
|
224788
224909
|
},
|
|
224789
|
-
"
|
|
224910
|
+
"37": {
|
|
224790
224911
|
start: {
|
|
224791
|
-
line:
|
|
224912
|
+
line: 276,
|
|
224792
224913
|
column: 14
|
|
224793
224914
|
},
|
|
224794
224915
|
end: {
|
|
224795
|
-
line:
|
|
224916
|
+
line: 276,
|
|
224796
224917
|
column: 54
|
|
224797
224918
|
}
|
|
224798
224919
|
},
|
|
224799
|
-
"
|
|
224920
|
+
"38": {
|
|
224800
224921
|
start: {
|
|
224801
|
-
line:
|
|
224922
|
+
line: 277,
|
|
224802
224923
|
column: 14
|
|
224803
224924
|
},
|
|
224804
224925
|
end: {
|
|
224805
|
-
line:
|
|
224926
|
+
line: 279,
|
|
224806
224927
|
column: 16
|
|
224807
224928
|
}
|
|
224808
224929
|
}
|
|
@@ -224874,7 +224995,7 @@ var cov_41uwsnrpn = function () {
|
|
|
224874
224995
|
column: 21
|
|
224875
224996
|
},
|
|
224876
224997
|
end: {
|
|
224877
|
-
line:
|
|
224998
|
+
line: 215,
|
|
224878
224999
|
column: 5
|
|
224879
225000
|
}
|
|
224880
225001
|
},
|
|
@@ -224884,241 +225005,289 @@ var cov_41uwsnrpn = function () {
|
|
|
224884
225005
|
name: "(anonymous_3)",
|
|
224885
225006
|
decl: {
|
|
224886
225007
|
start: {
|
|
224887
|
-
line:
|
|
225008
|
+
line: 217,
|
|
224888
225009
|
column: 2
|
|
224889
225010
|
},
|
|
224890
225011
|
end: {
|
|
224891
|
-
line:
|
|
225012
|
+
line: 217,
|
|
224892
225013
|
column: 3
|
|
224893
225014
|
}
|
|
224894
225015
|
},
|
|
224895
225016
|
loc: {
|
|
224896
225017
|
start: {
|
|
224897
|
-
line:
|
|
225018
|
+
line: 217,
|
|
224898
225019
|
column: 12
|
|
224899
225020
|
},
|
|
224900
225021
|
end: {
|
|
224901
|
-
line:
|
|
225022
|
+
line: 228,
|
|
224902
225023
|
column: 3
|
|
224903
225024
|
}
|
|
224904
225025
|
},
|
|
224905
|
-
line:
|
|
225026
|
+
line: 217
|
|
224906
225027
|
},
|
|
224907
225028
|
"4": {
|
|
224908
225029
|
name: "(anonymous_4)",
|
|
224909
225030
|
decl: {
|
|
224910
225031
|
start: {
|
|
224911
|
-
line:
|
|
224912
|
-
column:
|
|
225032
|
+
line: 219,
|
|
225033
|
+
column: 34
|
|
224913
225034
|
},
|
|
224914
225035
|
end: {
|
|
224915
|
-
line:
|
|
224916
|
-
column:
|
|
225036
|
+
line: 219,
|
|
225037
|
+
column: 35
|
|
224917
225038
|
}
|
|
224918
225039
|
},
|
|
224919
225040
|
loc: {
|
|
224920
225041
|
start: {
|
|
224921
|
-
line:
|
|
224922
|
-
column:
|
|
225042
|
+
line: 219,
|
|
225043
|
+
column: 43
|
|
224923
225044
|
},
|
|
224924
225045
|
end: {
|
|
224925
|
-
line:
|
|
225046
|
+
line: 227,
|
|
224926
225047
|
column: 5
|
|
224927
225048
|
}
|
|
224928
225049
|
},
|
|
224929
|
-
line:
|
|
225050
|
+
line: 219
|
|
224930
225051
|
},
|
|
224931
225052
|
"5": {
|
|
224932
225053
|
name: "(anonymous_5)",
|
|
224933
225054
|
decl: {
|
|
224934
225055
|
start: {
|
|
224935
|
-
line:
|
|
225056
|
+
line: 230,
|
|
224936
225057
|
column: 4
|
|
224937
225058
|
},
|
|
224938
225059
|
end: {
|
|
224939
|
-
line:
|
|
225060
|
+
line: 230,
|
|
224940
225061
|
column: 5
|
|
224941
225062
|
}
|
|
224942
225063
|
},
|
|
224943
225064
|
loc: {
|
|
224944
225065
|
start: {
|
|
224945
|
-
line:
|
|
224946
|
-
column:
|
|
225066
|
+
line: 230,
|
|
225067
|
+
column: 24
|
|
224947
225068
|
},
|
|
224948
225069
|
end: {
|
|
224949
|
-
line:
|
|
225070
|
+
line: 235,
|
|
224950
225071
|
column: 5
|
|
224951
225072
|
}
|
|
224952
225073
|
},
|
|
224953
|
-
line:
|
|
225074
|
+
line: 230
|
|
224954
225075
|
},
|
|
224955
225076
|
"6": {
|
|
224956
225077
|
name: "(anonymous_6)",
|
|
224957
225078
|
decl: {
|
|
224958
225079
|
start: {
|
|
224959
|
-
line:
|
|
225080
|
+
line: 236,
|
|
224960
225081
|
column: 4
|
|
224961
225082
|
},
|
|
224962
225083
|
end: {
|
|
224963
|
-
line:
|
|
225084
|
+
line: 236,
|
|
224964
225085
|
column: 5
|
|
224965
225086
|
}
|
|
224966
225087
|
},
|
|
224967
225088
|
loc: {
|
|
224968
225089
|
start: {
|
|
224969
|
-
line:
|
|
224970
|
-
column:
|
|
225090
|
+
line: 236,
|
|
225091
|
+
column: 27
|
|
224971
225092
|
},
|
|
224972
225093
|
end: {
|
|
224973
|
-
line:
|
|
225094
|
+
line: 240,
|
|
224974
225095
|
column: 5
|
|
224975
225096
|
}
|
|
224976
225097
|
},
|
|
224977
|
-
line:
|
|
225098
|
+
line: 236
|
|
224978
225099
|
},
|
|
224979
225100
|
"7": {
|
|
224980
225101
|
name: "(anonymous_7)",
|
|
224981
225102
|
decl: {
|
|
224982
225103
|
start: {
|
|
224983
|
-
line:
|
|
225104
|
+
line: 241,
|
|
224984
225105
|
column: 4
|
|
224985
225106
|
},
|
|
224986
225107
|
end: {
|
|
224987
|
-
line:
|
|
225108
|
+
line: 241,
|
|
224988
225109
|
column: 5
|
|
224989
225110
|
}
|
|
224990
225111
|
},
|
|
224991
225112
|
loc: {
|
|
224992
225113
|
start: {
|
|
224993
|
-
line:
|
|
224994
|
-
column:
|
|
225114
|
+
line: 241,
|
|
225115
|
+
column: 16
|
|
224995
225116
|
},
|
|
224996
225117
|
end: {
|
|
224997
|
-
line:
|
|
225118
|
+
line: 245,
|
|
224998
225119
|
column: 5
|
|
224999
225120
|
}
|
|
225000
225121
|
},
|
|
225001
|
-
line:
|
|
225122
|
+
line: 241
|
|
225002
225123
|
},
|
|
225003
225124
|
"8": {
|
|
225004
225125
|
name: "(anonymous_8)",
|
|
225005
225126
|
decl: {
|
|
225006
225127
|
start: {
|
|
225007
|
-
line:
|
|
225128
|
+
line: 244,
|
|
225129
|
+
column: 36
|
|
225130
|
+
},
|
|
225131
|
+
end: {
|
|
225132
|
+
line: 244,
|
|
225133
|
+
column: 37
|
|
225134
|
+
}
|
|
225135
|
+
},
|
|
225136
|
+
loc: {
|
|
225137
|
+
start: {
|
|
225138
|
+
line: 244,
|
|
225139
|
+
column: 45
|
|
225140
|
+
},
|
|
225141
|
+
end: {
|
|
225142
|
+
line: 244,
|
|
225143
|
+
column: 79
|
|
225144
|
+
}
|
|
225145
|
+
},
|
|
225146
|
+
line: 244
|
|
225147
|
+
},
|
|
225148
|
+
"9": {
|
|
225149
|
+
name: "(anonymous_9)",
|
|
225150
|
+
decl: {
|
|
225151
|
+
start: {
|
|
225152
|
+
line: 246,
|
|
225008
225153
|
column: 4
|
|
225009
225154
|
},
|
|
225010
225155
|
end: {
|
|
225011
|
-
line:
|
|
225156
|
+
line: 246,
|
|
225012
225157
|
column: 5
|
|
225013
225158
|
}
|
|
225014
225159
|
},
|
|
225015
225160
|
loc: {
|
|
225016
225161
|
start: {
|
|
225162
|
+
line: 246,
|
|
225163
|
+
column: 17
|
|
225164
|
+
},
|
|
225165
|
+
end: {
|
|
225017
225166
|
line: 249,
|
|
225167
|
+
column: 5
|
|
225168
|
+
}
|
|
225169
|
+
},
|
|
225170
|
+
line: 246
|
|
225171
|
+
},
|
|
225172
|
+
"10": {
|
|
225173
|
+
name: "(anonymous_10)",
|
|
225174
|
+
decl: {
|
|
225175
|
+
start: {
|
|
225176
|
+
line: 250,
|
|
225177
|
+
column: 4
|
|
225178
|
+
},
|
|
225179
|
+
end: {
|
|
225180
|
+
line: 250,
|
|
225181
|
+
column: 5
|
|
225182
|
+
}
|
|
225183
|
+
},
|
|
225184
|
+
loc: {
|
|
225185
|
+
start: {
|
|
225186
|
+
line: 250,
|
|
225018
225187
|
column: 22
|
|
225019
225188
|
},
|
|
225020
225189
|
end: {
|
|
225021
|
-
line:
|
|
225190
|
+
line: 255,
|
|
225022
225191
|
column: 5
|
|
225023
225192
|
}
|
|
225024
225193
|
},
|
|
225025
|
-
line:
|
|
225194
|
+
line: 250
|
|
225026
225195
|
},
|
|
225027
|
-
"
|
|
225028
|
-
name: "(
|
|
225196
|
+
"11": {
|
|
225197
|
+
name: "(anonymous_11)",
|
|
225029
225198
|
decl: {
|
|
225030
225199
|
start: {
|
|
225031
|
-
line:
|
|
225200
|
+
line: 256,
|
|
225032
225201
|
column: 4
|
|
225033
225202
|
},
|
|
225034
225203
|
end: {
|
|
225035
|
-
line:
|
|
225204
|
+
line: 256,
|
|
225036
225205
|
column: 5
|
|
225037
225206
|
}
|
|
225038
225207
|
},
|
|
225039
225208
|
loc: {
|
|
225040
225209
|
start: {
|
|
225041
|
-
line:
|
|
225210
|
+
line: 256,
|
|
225042
225211
|
column: 19
|
|
225043
225212
|
},
|
|
225044
225213
|
end: {
|
|
225045
|
-
line:
|
|
225214
|
+
line: 283,
|
|
225046
225215
|
column: 5
|
|
225047
225216
|
}
|
|
225048
225217
|
},
|
|
225049
|
-
line:
|
|
225218
|
+
line: 256
|
|
225050
225219
|
},
|
|
225051
|
-
"
|
|
225052
|
-
name: "(
|
|
225220
|
+
"12": {
|
|
225221
|
+
name: "(anonymous_12)",
|
|
225053
225222
|
decl: {
|
|
225054
225223
|
start: {
|
|
225055
|
-
line:
|
|
225224
|
+
line: 258,
|
|
225056
225225
|
column: 36
|
|
225057
225226
|
},
|
|
225058
225227
|
end: {
|
|
225059
|
-
line:
|
|
225228
|
+
line: 258,
|
|
225060
225229
|
column: 37
|
|
225061
225230
|
}
|
|
225062
225231
|
},
|
|
225063
225232
|
loc: {
|
|
225064
225233
|
start: {
|
|
225065
|
-
line:
|
|
225234
|
+
line: 258,
|
|
225066
225235
|
column: 45
|
|
225067
225236
|
},
|
|
225068
225237
|
end: {
|
|
225069
|
-
line:
|
|
225238
|
+
line: 260,
|
|
225070
225239
|
column: 7
|
|
225071
225240
|
}
|
|
225072
225241
|
},
|
|
225073
|
-
line:
|
|
225242
|
+
line: 258
|
|
225074
225243
|
},
|
|
225075
|
-
"
|
|
225076
|
-
name: "(
|
|
225244
|
+
"13": {
|
|
225245
|
+
name: "(anonymous_13)",
|
|
225077
225246
|
decl: {
|
|
225078
225247
|
start: {
|
|
225079
|
-
line:
|
|
225248
|
+
line: 263,
|
|
225080
225249
|
column: 16
|
|
225081
225250
|
},
|
|
225082
225251
|
end: {
|
|
225083
|
-
line:
|
|
225252
|
+
line: 263,
|
|
225084
225253
|
column: 17
|
|
225085
225254
|
}
|
|
225086
225255
|
},
|
|
225087
225256
|
loc: {
|
|
225088
225257
|
start: {
|
|
225089
|
-
line:
|
|
225258
|
+
line: 263,
|
|
225090
225259
|
column: 28
|
|
225091
225260
|
},
|
|
225092
225261
|
end: {
|
|
225093
|
-
line:
|
|
225262
|
+
line: 273,
|
|
225094
225263
|
column: 11
|
|
225095
225264
|
}
|
|
225096
225265
|
},
|
|
225097
|
-
line:
|
|
225266
|
+
line: 263
|
|
225098
225267
|
},
|
|
225099
|
-
"
|
|
225100
|
-
name: "(
|
|
225268
|
+
"14": {
|
|
225269
|
+
name: "(anonymous_14)",
|
|
225101
225270
|
decl: {
|
|
225102
225271
|
start: {
|
|
225103
|
-
line:
|
|
225272
|
+
line: 274,
|
|
225104
225273
|
column: 17
|
|
225105
225274
|
},
|
|
225106
225275
|
end: {
|
|
225107
|
-
line:
|
|
225276
|
+
line: 274,
|
|
225108
225277
|
column: 18
|
|
225109
225278
|
}
|
|
225110
225279
|
},
|
|
225111
225280
|
loc: {
|
|
225112
225281
|
start: {
|
|
225113
|
-
line:
|
|
225282
|
+
line: 274,
|
|
225114
225283
|
column: 26
|
|
225115
225284
|
},
|
|
225116
225285
|
end: {
|
|
225117
|
-
line:
|
|
225286
|
+
line: 281,
|
|
225118
225287
|
column: 11
|
|
225119
225288
|
}
|
|
225120
225289
|
},
|
|
225121
|
-
line:
|
|
225290
|
+
line: 274
|
|
225122
225291
|
}
|
|
225123
225292
|
},
|
|
225124
225293
|
branchMap: {
|
|
@@ -225129,7 +225298,7 @@ var cov_41uwsnrpn = function () {
|
|
|
225129
225298
|
column: 6
|
|
225130
225299
|
},
|
|
225131
225300
|
end: {
|
|
225132
|
-
line:
|
|
225301
|
+
line: 214,
|
|
225133
225302
|
column: 7
|
|
225134
225303
|
}
|
|
225135
225304
|
},
|
|
@@ -225140,7 +225309,7 @@ var cov_41uwsnrpn = function () {
|
|
|
225140
225309
|
column: 6
|
|
225141
225310
|
},
|
|
225142
225311
|
end: {
|
|
225143
|
-
line:
|
|
225312
|
+
line: 214,
|
|
225144
225313
|
column: 7
|
|
225145
225314
|
}
|
|
225146
225315
|
}, {
|
|
@@ -225149,7 +225318,7 @@ var cov_41uwsnrpn = function () {
|
|
|
225149
225318
|
column: 6
|
|
225150
225319
|
},
|
|
225151
225320
|
end: {
|
|
225152
|
-
line:
|
|
225321
|
+
line: 214,
|
|
225153
225322
|
column: 7
|
|
225154
225323
|
}
|
|
225155
225324
|
}],
|
|
@@ -225158,101 +225327,266 @@ var cov_41uwsnrpn = function () {
|
|
|
225158
225327
|
"1": {
|
|
225159
225328
|
loc: {
|
|
225160
225329
|
start: {
|
|
225161
|
-
line:
|
|
225330
|
+
line: 209,
|
|
225331
|
+
column: 8
|
|
225332
|
+
},
|
|
225333
|
+
end: {
|
|
225334
|
+
line: 211,
|
|
225335
|
+
column: 9
|
|
225336
|
+
}
|
|
225337
|
+
},
|
|
225338
|
+
type: "if",
|
|
225339
|
+
locations: [{
|
|
225340
|
+
start: {
|
|
225341
|
+
line: 209,
|
|
225342
|
+
column: 8
|
|
225343
|
+
},
|
|
225344
|
+
end: {
|
|
225345
|
+
line: 211,
|
|
225346
|
+
column: 9
|
|
225347
|
+
}
|
|
225348
|
+
}, {
|
|
225349
|
+
start: {
|
|
225350
|
+
line: 209,
|
|
225351
|
+
column: 8
|
|
225352
|
+
},
|
|
225353
|
+
end: {
|
|
225354
|
+
line: 211,
|
|
225355
|
+
column: 9
|
|
225356
|
+
}
|
|
225357
|
+
}],
|
|
225358
|
+
line: 209
|
|
225359
|
+
},
|
|
225360
|
+
"2": {
|
|
225361
|
+
loc: {
|
|
225362
|
+
start: {
|
|
225363
|
+
line: 220,
|
|
225162
225364
|
column: 6
|
|
225163
225365
|
},
|
|
225164
225366
|
end: {
|
|
225165
|
-
line:
|
|
225367
|
+
line: 226,
|
|
225166
225368
|
column: 7
|
|
225167
225369
|
}
|
|
225168
225370
|
},
|
|
225169
225371
|
type: "if",
|
|
225170
225372
|
locations: [{
|
|
225171
225373
|
start: {
|
|
225172
|
-
line:
|
|
225374
|
+
line: 220,
|
|
225173
225375
|
column: 6
|
|
225174
225376
|
},
|
|
225175
225377
|
end: {
|
|
225176
|
-
line:
|
|
225378
|
+
line: 226,
|
|
225177
225379
|
column: 7
|
|
225178
225380
|
}
|
|
225179
225381
|
}, {
|
|
225180
225382
|
start: {
|
|
225181
|
-
line:
|
|
225383
|
+
line: 220,
|
|
225182
225384
|
column: 6
|
|
225183
225385
|
},
|
|
225184
225386
|
end: {
|
|
225185
|
-
line:
|
|
225387
|
+
line: 226,
|
|
225186
225388
|
column: 7
|
|
225187
225389
|
}
|
|
225188
225390
|
}],
|
|
225189
|
-
line:
|
|
225391
|
+
line: 220
|
|
225190
225392
|
},
|
|
225191
|
-
"
|
|
225393
|
+
"3": {
|
|
225192
225394
|
loc: {
|
|
225193
225395
|
start: {
|
|
225194
|
-
line:
|
|
225396
|
+
line: 222,
|
|
225397
|
+
column: 13
|
|
225398
|
+
},
|
|
225399
|
+
end: {
|
|
225400
|
+
line: 226,
|
|
225401
|
+
column: 7
|
|
225402
|
+
}
|
|
225403
|
+
},
|
|
225404
|
+
type: "if",
|
|
225405
|
+
locations: [{
|
|
225406
|
+
start: {
|
|
225407
|
+
line: 222,
|
|
225408
|
+
column: 13
|
|
225409
|
+
},
|
|
225410
|
+
end: {
|
|
225411
|
+
line: 226,
|
|
225412
|
+
column: 7
|
|
225413
|
+
}
|
|
225414
|
+
}, {
|
|
225415
|
+
start: {
|
|
225416
|
+
line: 222,
|
|
225417
|
+
column: 13
|
|
225418
|
+
},
|
|
225419
|
+
end: {
|
|
225420
|
+
line: 226,
|
|
225421
|
+
column: 7
|
|
225422
|
+
}
|
|
225423
|
+
}],
|
|
225424
|
+
line: 222
|
|
225425
|
+
},
|
|
225426
|
+
"4": {
|
|
225427
|
+
loc: {
|
|
225428
|
+
start: {
|
|
225429
|
+
line: 224,
|
|
225430
|
+
column: 13
|
|
225431
|
+
},
|
|
225432
|
+
end: {
|
|
225433
|
+
line: 226,
|
|
225434
|
+
column: 7
|
|
225435
|
+
}
|
|
225436
|
+
},
|
|
225437
|
+
type: "if",
|
|
225438
|
+
locations: [{
|
|
225439
|
+
start: {
|
|
225440
|
+
line: 224,
|
|
225441
|
+
column: 13
|
|
225442
|
+
},
|
|
225443
|
+
end: {
|
|
225444
|
+
line: 226,
|
|
225445
|
+
column: 7
|
|
225446
|
+
}
|
|
225447
|
+
}, {
|
|
225448
|
+
start: {
|
|
225449
|
+
line: 224,
|
|
225450
|
+
column: 13
|
|
225451
|
+
},
|
|
225452
|
+
end: {
|
|
225453
|
+
line: 226,
|
|
225454
|
+
column: 7
|
|
225455
|
+
}
|
|
225456
|
+
}],
|
|
225457
|
+
line: 224
|
|
225458
|
+
},
|
|
225459
|
+
"5": {
|
|
225460
|
+
loc: {
|
|
225461
|
+
start: {
|
|
225462
|
+
line: 231,
|
|
225195
225463
|
column: 6
|
|
225196
225464
|
},
|
|
225197
225465
|
end: {
|
|
225198
|
-
line:
|
|
225466
|
+
line: 234,
|
|
225199
225467
|
column: 7
|
|
225200
225468
|
}
|
|
225201
225469
|
},
|
|
225202
225470
|
type: "if",
|
|
225203
225471
|
locations: [{
|
|
225204
225472
|
start: {
|
|
225205
|
-
line:
|
|
225473
|
+
line: 231,
|
|
225206
225474
|
column: 6
|
|
225207
225475
|
},
|
|
225208
225476
|
end: {
|
|
225209
|
-
line:
|
|
225477
|
+
line: 234,
|
|
225210
225478
|
column: 7
|
|
225211
225479
|
}
|
|
225212
225480
|
}, {
|
|
225213
225481
|
start: {
|
|
225214
|
-
line:
|
|
225482
|
+
line: 231,
|
|
225215
225483
|
column: 6
|
|
225216
225484
|
},
|
|
225217
225485
|
end: {
|
|
225218
|
-
line:
|
|
225486
|
+
line: 234,
|
|
225219
225487
|
column: 7
|
|
225220
225488
|
}
|
|
225221
225489
|
}],
|
|
225222
|
-
line:
|
|
225490
|
+
line: 231
|
|
225223
225491
|
},
|
|
225224
|
-
"
|
|
225492
|
+
"6": {
|
|
225225
225493
|
loc: {
|
|
225226
225494
|
start: {
|
|
225227
|
-
line:
|
|
225495
|
+
line: 244,
|
|
225496
|
+
column: 45
|
|
225497
|
+
},
|
|
225498
|
+
end: {
|
|
225499
|
+
line: 244,
|
|
225500
|
+
column: 79
|
|
225501
|
+
}
|
|
225502
|
+
},
|
|
225503
|
+
type: "binary-expr",
|
|
225504
|
+
locations: [{
|
|
225505
|
+
start: {
|
|
225506
|
+
line: 244,
|
|
225507
|
+
column: 45
|
|
225508
|
+
},
|
|
225509
|
+
end: {
|
|
225510
|
+
line: 244,
|
|
225511
|
+
column: 56
|
|
225512
|
+
}
|
|
225513
|
+
}, {
|
|
225514
|
+
start: {
|
|
225515
|
+
line: 244,
|
|
225516
|
+
column: 60
|
|
225517
|
+
},
|
|
225518
|
+
end: {
|
|
225519
|
+
line: 244,
|
|
225520
|
+
column: 79
|
|
225521
|
+
}
|
|
225522
|
+
}],
|
|
225523
|
+
line: 244
|
|
225524
|
+
},
|
|
225525
|
+
"7": {
|
|
225526
|
+
loc: {
|
|
225527
|
+
start: {
|
|
225528
|
+
line: 261,
|
|
225529
|
+
column: 6
|
|
225530
|
+
},
|
|
225531
|
+
end: {
|
|
225532
|
+
line: 282,
|
|
225533
|
+
column: 7
|
|
225534
|
+
}
|
|
225535
|
+
},
|
|
225536
|
+
type: "if",
|
|
225537
|
+
locations: [{
|
|
225538
|
+
start: {
|
|
225539
|
+
line: 261,
|
|
225540
|
+
column: 6
|
|
225541
|
+
},
|
|
225542
|
+
end: {
|
|
225543
|
+
line: 282,
|
|
225544
|
+
column: 7
|
|
225545
|
+
}
|
|
225546
|
+
}, {
|
|
225547
|
+
start: {
|
|
225548
|
+
line: 261,
|
|
225549
|
+
column: 6
|
|
225550
|
+
},
|
|
225551
|
+
end: {
|
|
225552
|
+
line: 282,
|
|
225553
|
+
column: 7
|
|
225554
|
+
}
|
|
225555
|
+
}],
|
|
225556
|
+
line: 261
|
|
225557
|
+
},
|
|
225558
|
+
"8": {
|
|
225559
|
+
loc: {
|
|
225560
|
+
start: {
|
|
225561
|
+
line: 275,
|
|
225228
225562
|
column: 12
|
|
225229
225563
|
},
|
|
225230
225564
|
end: {
|
|
225231
|
-
line:
|
|
225565
|
+
line: 280,
|
|
225232
225566
|
column: 13
|
|
225233
225567
|
}
|
|
225234
225568
|
},
|
|
225235
225569
|
type: "if",
|
|
225236
225570
|
locations: [{
|
|
225237
225571
|
start: {
|
|
225238
|
-
line:
|
|
225572
|
+
line: 275,
|
|
225239
225573
|
column: 12
|
|
225240
225574
|
},
|
|
225241
225575
|
end: {
|
|
225242
|
-
line:
|
|
225576
|
+
line: 280,
|
|
225243
225577
|
column: 13
|
|
225244
225578
|
}
|
|
225245
225579
|
}, {
|
|
225246
225580
|
start: {
|
|
225247
|
-
line:
|
|
225581
|
+
line: 275,
|
|
225248
225582
|
column: 12
|
|
225249
225583
|
},
|
|
225250
225584
|
end: {
|
|
225251
|
-
line:
|
|
225585
|
+
line: 280,
|
|
225252
225586
|
column: 13
|
|
225253
225587
|
}
|
|
225254
225588
|
}],
|
|
225255
|
-
line:
|
|
225589
|
+
line: 275
|
|
225256
225590
|
}
|
|
225257
225591
|
},
|
|
225258
225592
|
s: {
|
|
@@ -225282,7 +225616,19 @@ var cov_41uwsnrpn = function () {
|
|
|
225282
225616
|
"23": 0,
|
|
225283
225617
|
"24": 0,
|
|
225284
225618
|
"25": 0,
|
|
225285
|
-
"26": 0
|
|
225619
|
+
"26": 0,
|
|
225620
|
+
"27": 0,
|
|
225621
|
+
"28": 0,
|
|
225622
|
+
"29": 0,
|
|
225623
|
+
"30": 0,
|
|
225624
|
+
"31": 0,
|
|
225625
|
+
"32": 0,
|
|
225626
|
+
"33": 0,
|
|
225627
|
+
"34": 0,
|
|
225628
|
+
"35": 0,
|
|
225629
|
+
"36": 0,
|
|
225630
|
+
"37": 0,
|
|
225631
|
+
"38": 0
|
|
225286
225632
|
},
|
|
225287
225633
|
f: {
|
|
225288
225634
|
"0": 0,
|
|
@@ -225297,25 +225643,32 @@ var cov_41uwsnrpn = function () {
|
|
|
225297
225643
|
"9": 0,
|
|
225298
225644
|
"10": 0,
|
|
225299
225645
|
"11": 0,
|
|
225300
|
-
"12": 0
|
|
225646
|
+
"12": 0,
|
|
225647
|
+
"13": 0,
|
|
225648
|
+
"14": 0
|
|
225301
225649
|
},
|
|
225302
225650
|
b: {
|
|
225303
225651
|
"0": [0, 0],
|
|
225304
225652
|
"1": [0, 0],
|
|
225305
225653
|
"2": [0, 0],
|
|
225306
|
-
"3": [0, 0]
|
|
225654
|
+
"3": [0, 0],
|
|
225655
|
+
"4": [0, 0],
|
|
225656
|
+
"5": [0, 0],
|
|
225657
|
+
"6": [0, 0],
|
|
225658
|
+
"7": [0, 0],
|
|
225659
|
+
"8": [0, 0]
|
|
225307
225660
|
},
|
|
225308
225661
|
inputSourceMap: {
|
|
225309
225662
|
version: 3,
|
|
225310
225663
|
sources: ["NewProjectModal.vue"],
|
|
225311
225664
|
names: [],
|
|
225312
|
-
mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
|
|
225665
|
+
mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAyJA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
|
|
225313
225666
|
file: "NewProjectModal.vue",
|
|
225314
225667
|
sourceRoot: "src/components/projects",
|
|
225315
|
-
sourcesContent: ["<template>\n <base-modal\n :show-modal=\"showModal\"\n max-width=\"800px\"\n @close-modal=\"closeModal\"\n >\n <template v-slot:title>Create Project</template>\n\n <template v-slot:content>\n <v-container\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"title\"\n v-model=\"project.title\"\n :v-show=\"showModal\"\n :rules=\"[rules.required]\"\n :error-messages=\"errorMessages.title\"\n label=\"Project Title\"\n data-test=\"new-project-title-input\"\n class=\"pt-6\"\n @keyup.enter=\"submit\"\n />\n </v-col>\n </v-row>\n\n <div\n v-show=\"showOptionalFields\"\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"shortTitle\"\n v-model=\"project.shortTitle\"\n :rules=\"[rules.unicode, rules.min10]\"\n :error-messages=\"errorMessages.short_title\"\n label=\"Project Short Title\"\n data-test=\"new-project-short-input\"\n counter\n dense\n maxlength=\"30\"\n hint=\"Think of the objective of the project.\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <v-select\n ref=\"group\"\n v-model=\"project.group\"\n :items=\"groups\"\n return-object\n item-text=\"slug\"\n label=\"Group\"\n dense\n data-test=\"new-project-groups-input\"\n />\n </v-col>\n </v-row>\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"principalInvestigator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.principal_investigator\"\n field=\"principalInvestigator\"\n label=\"Principal Investigator\"\n data-test=\"new-project-pi-input\"\n hint=\"Laboratory head or principal investigator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"owner\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.owner\"\n field=\"owner\"\n label=\"Project Owner\"\n data-test=\"new-project-owner-input\"\n hint=\"Who deals with the nitty-gritty of the project\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"coordinator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.coordinator\"\n field=\"coordinator\"\n label=\"Coordinator\"\n data-test=\"new-project-coord-input\"\n hint=\"Project manager or coordinator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"analyst\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.analyst\"\n field=\"analyst\"\n label=\"Data Analyst\"\n data-test=\"new-project-analyst-input\"\n hint=\"Person responsible for the data analysis\"\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n </div>\n\n </v-container>\n </template>\n\n <template v-slot:footer-actions>\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-optional-btn\"\n text\n @click=\"toggleOptionalFields\"\n >Optional Fields</v-btn>\n\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-create-btn\"\n text\n @click=\"submit\"\n >Create</v-btn>\n </template>\n </base-modal>\n</template>\n\n<script>\nimport has from 'lodash/has'\n\nimport BaseModal from '@/components/base/BaseModal.vue'\nimport GroupSearchInput from '@/components/projects/GroupSearchInput'\nimport UserSearchInput from '@/components/projects/UserSearchInput'\nimport rules from '@/utils/rules'\nimport { createRecord, fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\n\nexport default {\n name: 'NewProjectModal',\n components: {\n BaseModal,\n GroupSearchInput,\n UserSearchInput\n },\n props: {\n showModal: {\n type: Boolean,\n default: false,\n required: true\n },\n projects: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n isLoading: false,\n errorMessages: {},\n formHasErrors: false,\n fieldsToValidate: [\n 'title',\n 'shortTitle',\n 'group',\n 'principalInvestigator',\n 'owner',\n 'coordinator',\n 'analyst'\n ],\n groups: [],\n project: {},\n refs: {},\n rules,\n showOptionalFields: false,\n users: [],\n usersQuery: ''\n }\n },\n watch: {\n showModal(value) {\n if (value) {\n // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587\n
|
|
225668
|
+
sourcesContent: ["<template>\n <base-modal\n :show-modal=\"showModal\"\n max-width=\"800px\"\n @close-modal=\"closeModal\"\n >\n <template v-slot:title>Create Project</template>\n\n <template v-slot:content>\n <v-container\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"title\"\n v-model=\"project.title\"\n :v-show=\"showModal\"\n :rules=\"[rules.required]\"\n :error-messages=\"errorMessages.title\"\n label=\"Project Title\"\n data-test=\"new-project-title-input\"\n class=\"pt-6\"\n @keyup.enter=\"submit\"\n />\n </v-col>\n </v-row>\n\n <div\n v-show=\"showOptionalFields\"\n class=\"pa-0\"\n >\n <v-row>\n <v-col cols=\"16\">\n <v-text-field\n ref=\"shortTitle\"\n v-model=\"project.shortTitle\"\n :rules=\"[rules.unicode, rules.min10]\"\n :error-messages=\"errorMessages.short_title\"\n label=\"Project Short Title\"\n data-test=\"new-project-short-input\"\n counter\n dense\n maxlength=\"30\"\n hint=\"Think of the objective of the project.\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <v-select\n ref=\"group\"\n v-model=\"project.group\"\n :items=\"groups\"\n return-object\n item-text=\"slug\"\n label=\"Group\"\n dense\n data-test=\"new-project-groups-input\"\n />\n </v-col>\n </v-row>\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"principalInvestigator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.principal_investigator\"\n field=\"principalInvestigator\"\n label=\"Principal Investigator\"\n data-test=\"new-project-pi-input\"\n hint=\"Laboratory head or principal investigator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"owner\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.owner\"\n field=\"owner\"\n label=\"Project Owner\"\n data-test=\"new-project-owner-input\"\n hint=\"Who deals with the nitty-gritty of the project\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"coordinator\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.coordinator\"\n field=\"coordinator\"\n label=\"Coordinator\"\n data-test=\"new-project-coord-input\"\n hint=\"Project manager or coordinator\"\n dense\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n\n <v-row>\n <v-col cols=\"16\">\n <user-search-input\n ref=\"analyst\"\n :model=\"project\"\n :rules=\"[rules.email]\"\n :error-messages=\"errorMessages.analyst\"\n field=\"analyst\"\n label=\"Data Analyst\"\n data-test=\"new-project-analyst-input\"\n hint=\"Person responsible for the data analysis\"\n @update-value=\"updateValue\"\n />\n </v-col>\n </v-row>\n </div>\n\n </v-container>\n </template>\n\n <template v-slot:footer-actions>\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-optional-btn\"\n text\n @click=\"toggleOptionalFields\"\n >Optional Fields</v-btn>\n\n <v-btn\n color=\"primary darken-1\"\n data-test=\"new-project-create-btn\"\n text\n @click=\"submit\"\n >Create</v-btn>\n </template>\n </base-modal>\n</template>\n\n<script>\nimport has from 'lodash/has'\n\nimport BaseModal from '@/components/base/BaseModal.vue'\nimport GroupSearchInput from '@/components/projects/GroupSearchInput'\nimport UserSearchInput from '@/components/projects/UserSearchInput'\nimport rules from '@/utils/rules'\nimport { createRecord, fetchListRecords } from '@/utils/api'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\n\nexport default {\n name: 'NewProjectModal',\n components: {\n BaseModal,\n GroupSearchInput,\n UserSearchInput\n },\n props: {\n showModal: {\n type: Boolean,\n default: false,\n required: true\n },\n projects: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n isLoading: false,\n errorMessages: {},\n formHasErrors: false,\n fieldsToValidate: [\n 'title',\n 'shortTitle',\n 'group',\n 'principalInvestigator',\n 'owner',\n 'coordinator',\n 'analyst'\n ],\n groups: [],\n project: {},\n refs: {},\n rules,\n showOptionalFields: false,\n users: [],\n usersQuery: ''\n }\n },\n watch: {\n showModal(value) {\n if (value) {\n // ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587\n if (this.$refs.title) {\n this.$nextTick(this.$refs.title.focus)\n }\n this.fetchGroups()\n this.resetForm()\n }\n }\n },\n mounted() {\n // Map all local and nested inputs to local 'refs'\n this.fieldsToValidate.forEach(field => {\n if (has(this.$refs[field], 'reset')) {\n this.refs[field] = this.$refs[field]\n } else if (has(this.$refs[field], '$refs.userSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.userSearchInput\n } else if (has(this.$refs[field], '$refs.groupSearchInput.reset')) {\n this.refs[field] = this.$refs[field].$refs.groupSearchInput\n }\n })\n },\n methods: {\n async fetchGroups() {\n if (!this.groups.length) {\n const response = await fetchListRecords('groups')\n this.groups = response.results\n }\n },\n toggleOptionalFields() {\n this.showOptionalFields = !this.showOptionalFields\n this.$nextTick(this.$refs.title.focus)\n this.$nextTick(this.$refs.title.resetValidation)\n },\n resetForm() {\n const { refs } = this\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => refs[field] && refs[field].reset())\n },\n closeModal() {\n this.resetForm()\n this.$emit('close-modal')\n },\n updateValue(data) {\n this.project = {\n ...this.project,\n ...data\n }\n },\n async submit() {\n this.formHasErrors = false\n this.fieldsToValidate.forEach(field => {\n this.refs[field].validate(true)\n })\n if (!this.formHasErrors) {\n createRecord('projects', this.project)\n .then(response => {\n const projectId = this.$get(response, 'pk', '')\n this.$store.dispatch(SHOW_ALERT, {\n message: `Project ${projectId} was succesfully created.`\n })\n\n this.$store.dispatch(SHOW_PANEL, {\n project: projectId\n })\n this.closeModal()\n })\n .catch(error => {\n if (error.response) {\n this.errorMessages = error.response.data\n this.$store.dispatch(SHOW_ALERT, {\n error: 'The project could not be created. Please try again.'\n })\n }\n })\n }\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.v-expansion-panel__header {\n padding: 5px !important;\n}\n</style>\n"]
|
|
225316
225669
|
},
|
|
225317
225670
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
225318
|
-
hash: "
|
|
225671
|
+
hash: "880a7035d32da713e533258d2460ef2446ff3c8f"
|
|
225319
225672
|
};
|
|
225320
225673
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
225321
225674
|
|
|
@@ -225545,28 +225898,61 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225545
225898
|
if (value) {
|
|
225546
225899
|
cov_41uwsnrpn.b[0][0]++;
|
|
225547
225900
|
cov_41uwsnrpn.s[3]++;
|
|
225901
|
+
|
|
225548
225902
|
// ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587
|
|
225549
|
-
|
|
225903
|
+
if (this.$refs.title) {
|
|
225904
|
+
cov_41uwsnrpn.b[1][0]++;
|
|
225905
|
+
cov_41uwsnrpn.s[4]++;
|
|
225906
|
+
this.$nextTick(this.$refs.title.focus);
|
|
225907
|
+
} else {
|
|
225908
|
+
cov_41uwsnrpn.b[1][1]++;
|
|
225909
|
+
}
|
|
225910
|
+
|
|
225911
|
+
cov_41uwsnrpn.s[5]++;
|
|
225550
225912
|
this.fetchGroups();
|
|
225551
|
-
cov_41uwsnrpn.s[
|
|
225913
|
+
cov_41uwsnrpn.s[6]++;
|
|
225552
225914
|
this.resetForm();
|
|
225553
225915
|
} else {
|
|
225554
225916
|
cov_41uwsnrpn.b[0][1]++;
|
|
225555
225917
|
}
|
|
225556
225918
|
}
|
|
225557
225919
|
},
|
|
225558
|
-
mounted: function mounted() {
|
|
225559
|
-
|
|
225560
|
-
// if (has(this.$refs[field], 'reset')) {
|
|
225561
|
-
// this.refs[field] = this.$refs[field]
|
|
225562
|
-
// } else if (has(this.$refs[field], '$refs.userSearchInput.reset')) {
|
|
225563
|
-
// this.refs[field] = this.$refs[field].$refs.userSearchInput
|
|
225564
|
-
// } else if (has(this.$refs[field], '$refs.groupSearchInput.reset')) {
|
|
225565
|
-
// this.refs[field] = this.$refs[field].$refs.groupSearchInput
|
|
225566
|
-
// }
|
|
225567
|
-
// })
|
|
225920
|
+
mounted: function mounted() {
|
|
225921
|
+
var _this = this;
|
|
225568
225922
|
|
|
225569
225923
|
cov_41uwsnrpn.f[3]++;
|
|
225924
|
+
cov_41uwsnrpn.s[7]++;
|
|
225925
|
+
// Map all local and nested inputs to local 'refs'
|
|
225926
|
+
this.fieldsToValidate.forEach(function (field) {
|
|
225927
|
+
cov_41uwsnrpn.f[4]++;
|
|
225928
|
+
cov_41uwsnrpn.s[8]++;
|
|
225929
|
+
|
|
225930
|
+
if (has_default()(_this.$refs[field], 'reset')) {
|
|
225931
|
+
cov_41uwsnrpn.b[2][0]++;
|
|
225932
|
+
cov_41uwsnrpn.s[9]++;
|
|
225933
|
+
_this.refs[field] = _this.$refs[field];
|
|
225934
|
+
} else {
|
|
225935
|
+
cov_41uwsnrpn.b[2][1]++;
|
|
225936
|
+
cov_41uwsnrpn.s[10]++;
|
|
225937
|
+
|
|
225938
|
+
if (has_default()(_this.$refs[field], '$refs.userSearchInput.reset')) {
|
|
225939
|
+
cov_41uwsnrpn.b[3][0]++;
|
|
225940
|
+
cov_41uwsnrpn.s[11]++;
|
|
225941
|
+
_this.refs[field] = _this.$refs[field].$refs.userSearchInput;
|
|
225942
|
+
} else {
|
|
225943
|
+
cov_41uwsnrpn.b[3][1]++;
|
|
225944
|
+
cov_41uwsnrpn.s[12]++;
|
|
225945
|
+
|
|
225946
|
+
if (has_default()(_this.$refs[field], '$refs.groupSearchInput.reset')) {
|
|
225947
|
+
cov_41uwsnrpn.b[4][0]++;
|
|
225948
|
+
cov_41uwsnrpn.s[13]++;
|
|
225949
|
+
_this.refs[field] = _this.$refs[field].$refs.groupSearchInput;
|
|
225950
|
+
} else {
|
|
225951
|
+
cov_41uwsnrpn.b[4][1]++;
|
|
225952
|
+
}
|
|
225953
|
+
}
|
|
225954
|
+
}
|
|
225955
|
+
});
|
|
225570
225956
|
},
|
|
225571
225957
|
methods: {
|
|
225572
225958
|
fetchGroups: function () {
|
|
@@ -225576,28 +225962,28 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225576
225962
|
while (1) {
|
|
225577
225963
|
switch (_context.prev = _context.next) {
|
|
225578
225964
|
case 0:
|
|
225579
|
-
cov_41uwsnrpn.f[
|
|
225580
|
-
cov_41uwsnrpn.s[
|
|
225965
|
+
cov_41uwsnrpn.f[5]++;
|
|
225966
|
+
cov_41uwsnrpn.s[14]++;
|
|
225581
225967
|
|
|
225582
225968
|
if (this.groups.length) {
|
|
225583
225969
|
_context.next = 12;
|
|
225584
225970
|
break;
|
|
225585
225971
|
}
|
|
225586
225972
|
|
|
225587
|
-
cov_41uwsnrpn.b[
|
|
225588
|
-
cov_41uwsnrpn.s[
|
|
225973
|
+
cov_41uwsnrpn.b[5][0]++;
|
|
225974
|
+
cov_41uwsnrpn.s[15]++;
|
|
225589
225975
|
_context.next = 7;
|
|
225590
225976
|
return fetchListRecords('groups');
|
|
225591
225977
|
|
|
225592
225978
|
case 7:
|
|
225593
225979
|
response = _context.sent;
|
|
225594
|
-
cov_41uwsnrpn.s[
|
|
225980
|
+
cov_41uwsnrpn.s[16]++;
|
|
225595
225981
|
this.groups = response.results;
|
|
225596
225982
|
_context.next = 13;
|
|
225597
225983
|
break;
|
|
225598
225984
|
|
|
225599
225985
|
case 12:
|
|
225600
|
-
cov_41uwsnrpn.b[
|
|
225986
|
+
cov_41uwsnrpn.b[5][1]++;
|
|
225601
225987
|
|
|
225602
225988
|
case 13:
|
|
225603
225989
|
case "end":
|
|
@@ -225614,93 +226000,101 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225614
226000
|
return fetchGroups;
|
|
225615
226001
|
}(),
|
|
225616
226002
|
toggleOptionalFields: function toggleOptionalFields() {
|
|
225617
|
-
cov_41uwsnrpn.f[
|
|
225618
|
-
cov_41uwsnrpn.s[
|
|
226003
|
+
cov_41uwsnrpn.f[6]++;
|
|
226004
|
+
cov_41uwsnrpn.s[17]++;
|
|
225619
226005
|
this.showOptionalFields = !this.showOptionalFields;
|
|
225620
|
-
cov_41uwsnrpn.s[
|
|
226006
|
+
cov_41uwsnrpn.s[18]++;
|
|
225621
226007
|
this.$nextTick(this.$refs.title.focus);
|
|
225622
|
-
cov_41uwsnrpn.s[
|
|
226008
|
+
cov_41uwsnrpn.s[19]++;
|
|
225623
226009
|
this.$nextTick(this.$refs.title.resetValidation);
|
|
225624
226010
|
},
|
|
225625
226011
|
resetForm: function resetForm() {
|
|
225626
|
-
cov_41uwsnrpn.f[
|
|
225627
|
-
|
|
225628
|
-
|
|
225629
|
-
|
|
225630
|
-
|
|
226012
|
+
cov_41uwsnrpn.f[7]++;
|
|
226013
|
+
|
|
226014
|
+
var _ref = (cov_41uwsnrpn.s[20]++, this),
|
|
226015
|
+
refs = _ref.refs;
|
|
226016
|
+
|
|
226017
|
+
cov_41uwsnrpn.s[21]++;
|
|
226018
|
+
this.formHasErrors = false;
|
|
226019
|
+
cov_41uwsnrpn.s[22]++;
|
|
226020
|
+
this.fieldsToValidate.forEach(function (field) {
|
|
226021
|
+
cov_41uwsnrpn.f[8]++;
|
|
226022
|
+
cov_41uwsnrpn.s[23]++;
|
|
226023
|
+
return (cov_41uwsnrpn.b[6][0]++, refs[field]) && (cov_41uwsnrpn.b[6][1]++, refs[field].reset());
|
|
226024
|
+
});
|
|
225631
226025
|
},
|
|
225632
226026
|
closeModal: function closeModal() {
|
|
225633
|
-
cov_41uwsnrpn.f[
|
|
225634
|
-
cov_41uwsnrpn.s[
|
|
226027
|
+
cov_41uwsnrpn.f[9]++;
|
|
226028
|
+
cov_41uwsnrpn.s[24]++;
|
|
225635
226029
|
this.resetForm();
|
|
225636
|
-
cov_41uwsnrpn.s[
|
|
226030
|
+
cov_41uwsnrpn.s[25]++;
|
|
225637
226031
|
this.$emit('close-modal');
|
|
225638
226032
|
},
|
|
225639
226033
|
updateValue: function updateValue(data) {
|
|
225640
|
-
cov_41uwsnrpn.f[
|
|
225641
|
-
cov_41uwsnrpn.s[
|
|
226034
|
+
cov_41uwsnrpn.f[10]++;
|
|
226035
|
+
cov_41uwsnrpn.s[26]++;
|
|
225642
226036
|
this.project = NewProjectModalvue_type_script_lang_js_objectSpread(NewProjectModalvue_type_script_lang_js_objectSpread({}, this.project), data);
|
|
225643
226037
|
},
|
|
225644
226038
|
submit: function () {
|
|
225645
226039
|
var _submit = NewProjectModalvue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/regenerator_default.a.mark(function _callee2() {
|
|
225646
|
-
var
|
|
226040
|
+
var _this2 = this;
|
|
225647
226041
|
|
|
225648
226042
|
return regenerator_default.a.wrap(function _callee2$(_context2) {
|
|
225649
226043
|
while (1) {
|
|
225650
226044
|
switch (_context2.prev = _context2.next) {
|
|
225651
226045
|
case 0:
|
|
225652
|
-
cov_41uwsnrpn.f[
|
|
225653
|
-
cov_41uwsnrpn.s[
|
|
226046
|
+
cov_41uwsnrpn.f[11]++;
|
|
226047
|
+
cov_41uwsnrpn.s[27]++;
|
|
225654
226048
|
this.formHasErrors = false;
|
|
225655
|
-
cov_41uwsnrpn.s[
|
|
226049
|
+
cov_41uwsnrpn.s[28]++;
|
|
225656
226050
|
this.fieldsToValidate.forEach(function (field) {
|
|
225657
|
-
cov_41uwsnrpn.f[
|
|
225658
|
-
cov_41uwsnrpn.s[
|
|
226051
|
+
cov_41uwsnrpn.f[12]++;
|
|
226052
|
+
cov_41uwsnrpn.s[29]++;
|
|
225659
226053
|
|
|
225660
|
-
|
|
226054
|
+
_this2.refs[field].validate(true);
|
|
225661
226055
|
});
|
|
225662
|
-
cov_41uwsnrpn.s[
|
|
226056
|
+
cov_41uwsnrpn.s[30]++;
|
|
225663
226057
|
|
|
225664
226058
|
if (!this.formHasErrors) {
|
|
225665
|
-
cov_41uwsnrpn.b[
|
|
225666
|
-
cov_41uwsnrpn.s[
|
|
226059
|
+
cov_41uwsnrpn.b[7][0]++;
|
|
226060
|
+
cov_41uwsnrpn.s[31]++;
|
|
225667
226061
|
createRecord('projects', this.project).then(function (response) {
|
|
225668
|
-
cov_41uwsnrpn.f[
|
|
225669
|
-
var projectId = (cov_41uwsnrpn.s[
|
|
225670
|
-
cov_41uwsnrpn.s[
|
|
226062
|
+
cov_41uwsnrpn.f[13]++;
|
|
226063
|
+
var projectId = (cov_41uwsnrpn.s[32]++, _this2.$get(response, 'pk', ''));
|
|
226064
|
+
cov_41uwsnrpn.s[33]++;
|
|
225671
226065
|
|
|
225672
|
-
|
|
226066
|
+
_this2.$store.dispatch(SHOW_ALERT, {
|
|
225673
226067
|
message: "Project ".concat(projectId, " was succesfully created.")
|
|
225674
226068
|
});
|
|
225675
226069
|
|
|
225676
|
-
cov_41uwsnrpn.s[
|
|
226070
|
+
cov_41uwsnrpn.s[34]++;
|
|
225677
226071
|
|
|
225678
|
-
|
|
226072
|
+
_this2.$store.dispatch(SHOW_PANEL, {
|
|
225679
226073
|
project: projectId
|
|
225680
226074
|
});
|
|
225681
226075
|
|
|
225682
|
-
cov_41uwsnrpn.s[
|
|
226076
|
+
cov_41uwsnrpn.s[35]++;
|
|
225683
226077
|
|
|
225684
|
-
|
|
226078
|
+
_this2.closeModal();
|
|
225685
226079
|
}).catch(function (error) {
|
|
225686
|
-
cov_41uwsnrpn.f[
|
|
225687
|
-
cov_41uwsnrpn.s[
|
|
226080
|
+
cov_41uwsnrpn.f[14]++;
|
|
226081
|
+
cov_41uwsnrpn.s[36]++;
|
|
225688
226082
|
|
|
225689
226083
|
if (error.response) {
|
|
225690
|
-
cov_41uwsnrpn.b[
|
|
225691
|
-
cov_41uwsnrpn.s[
|
|
225692
|
-
|
|
225693
|
-
cov_41uwsnrpn.s[
|
|
226084
|
+
cov_41uwsnrpn.b[8][0]++;
|
|
226085
|
+
cov_41uwsnrpn.s[37]++;
|
|
226086
|
+
_this2.errorMessages = error.response.data;
|
|
226087
|
+
cov_41uwsnrpn.s[38]++;
|
|
225694
226088
|
|
|
225695
|
-
|
|
226089
|
+
_this2.$store.dispatch(SHOW_ALERT, {
|
|
225696
226090
|
error: 'The project could not be created. Please try again.'
|
|
225697
226091
|
});
|
|
225698
226092
|
} else {
|
|
225699
|
-
cov_41uwsnrpn.b[
|
|
226093
|
+
cov_41uwsnrpn.b[8][1]++;
|
|
225700
226094
|
}
|
|
225701
226095
|
});
|
|
225702
226096
|
} else {
|
|
225703
|
-
cov_41uwsnrpn.b[
|
|
226097
|
+
cov_41uwsnrpn.b[7][1]++;
|
|
225704
226098
|
}
|
|
225705
226099
|
|
|
225706
226100
|
case 7:
|
|
@@ -225735,8 +226129,8 @@ var NewProjectModalvue_type_style_index_0_lang_scss_ = __webpack_require__("9434
|
|
|
225735
226129
|
|
|
225736
226130
|
var NewProjectModal_component = normalizeComponent(
|
|
225737
226131
|
projects_NewProjectModalvue_type_script_lang_js_,
|
|
225738
|
-
|
|
225739
|
-
|
|
226132
|
+
NewProjectModalvue_type_template_id_58c607e8_render,
|
|
226133
|
+
NewProjectModalvue_type_template_id_58c607e8_staticRenderFns,
|
|
225740
226134
|
false,
|
|
225741
226135
|
null,
|
|
225742
226136
|
null,
|
|
@@ -253223,8 +253617,8 @@ var RerunButton_component = normalizeComponent(
|
|
|
253223
253617
|
)
|
|
253224
253618
|
|
|
253225
253619
|
/* harmony default export */ var RerunButton = (RerunButton_component.exports);
|
|
253226
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/analyses/ResultsGallery.vue?vue&type=template&id=
|
|
253227
|
-
var
|
|
253620
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/analyses/ResultsGallery.vue?vue&type=template&id=185780e8&
|
|
253621
|
+
var ResultsGalleryvue_type_template_id_185780e8_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.showDialog)?_c('v-dialog',{directives:[{name:"hotkey",rawName:"v-hotkey",value:(_vm.keymap),expression:"keymap"}],staticClass:"gallery-dialog",attrs:{"fullscreen":_vm.isResultModalFullScreen,"scrollable":""},model:{value:(_vm.showDialog),callback:function ($$v) {_vm.showDialog=$$v},expression:"showDialog"}},[_c('v-card',{staticClass:"gallery-card",attrs:{"flat":""}},[_c('v-card-title',{staticClass:"pa-2"},[_c('v-row',[_c('v-col',{attrs:{"cols":"6"}},[_c('h3',{staticClass:"font-weight-thin primary--text"},[_vm._v("\n "+_vm._s(_vm.result.verboseName)+"\n ")])]),_c('v-col',{staticClass:"d-flex justify-end align-center panel-slot-actions",attrs:{"cols":"6"}},[(_vm.result.frontendType === 'tsv-file' && _vm.tsvHeaders.length)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
|
|
253228
253622
|
var on = ref.on;
|
|
253229
253623
|
return [_c('v-icon',_vm._g({staticClass:"primary--text ml-4",attrs:{"small":""},on:{"click":function($event){_vm.displayRawText = !_vm.displayRawText}}},on),[_vm._v("\n "+_vm._s(_vm.displayRawText ? 'table_chart' : 'text_fields')+"\n ")])]}}],null,false,578865119)},[_vm._v("\n "+_vm._s(_vm.displayRawText ? 'Display Tabulated Content' : 'Display Raw Content')+"\n ")]):_vm._e(),(_vm.result.download)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
|
|
253230
253624
|
var on = ref.on;
|
|
@@ -253241,10 +253635,10 @@ var on = ref.on;
|
|
|
253241
253635
|
return [_c('v-icon',_vm._g({staticClass:"primary--text ml-4",attrs:{"small":""},on:{"click":_vm.hideDialog}},on),[_vm._v("\n close\n ")])]}}],null,false,804201733)},[_vm._v("\n Close file\n ")])],1)],1)],1),_c('v-row',{staticClass:"pa-0 ma-0 gallery-content",staticStyle:{"height":"85vh"}},[(_vm.loading)?_c('v-progress-linear',{staticClass:"panel-loader",attrs:{"indeterminate":"","height":"2","color":"primary"}}):_vm._e(),(_vm.resultType === 'raw' && _vm.resultKey === 'command_script')?_c('pre',{directives:[{name:"highlightjs",rawName:"v-highlightjs",value:(_vm.content),expression:"content"}],ref:"raw",staticClass:"v-markup pre-wrap"},[_vm._v(" "),_c('code',{staticClass:"bash"}),_vm._v("\n ")]):(_vm.isAnsi)?_c('code',{ref:"raw",staticClass:"v-markup"},[_c('pre',{domProps:{"innerHTML":_vm._s(_vm.content)}})]):(_vm.resultType === 'raw')?_c('code',{ref:"raw",staticClass:"v-markup"},[_c('pre',[_vm._v(" "+_vm._s(_vm.content)+"\n "),(_vm.content && !_vm.streamOptions.end)?_c('span',{staticClass:"stream-message grey--text lighten-2"},[_vm._v("\n ... Loading more rows\n ")]):_vm._e(),_vm._v("\n "),(!_vm.loading && _vm.streamOptions.end)?_c('span',{staticClass:"stream-message grey--text"},[_vm._v("\n *** End of file. ***\n ")]):_vm._e(),_vm._v("\n ")])]):(_vm.resultType === 'table')?_c('div',{ref:"table",staticClass:"tsv-table"},[_c('v-data-table',{attrs:{"headers":_vm.tsvHeaders,"items":_vm.tsvItems,"items-per-page":_vm.tsvItems.length,"hide-default-footer":"","multi-sort":"","fixed-header":"","dense":""},scopedSlots:_vm._u([{key:"body",fn:function(ref){
|
|
253242
253636
|
var items = ref.items;
|
|
253243
253637
|
return [_c('tbody',_vm._l((items),function(item){return _c('tr',{key:item.name},_vm._l((_vm.tsvHeaders),function(header,index){return _c('td',{key:index + header.value,class:[header.value === 'index' ? 'line-column text' : ''],domProps:{"innerHTML":_vm._s(_vm.parseTsvCell(_vm.$get(item, header.value)))}})}),0)}),0)]}}],null,false,3434796515)}),_c('div',{staticClass:"text-center stream-message"},[(_vm.content && !_vm.streamOptions.end)?_c('span',[_vm._v("... Loading more rows")]):_vm._e(),(!_vm.loading && _vm.streamOptions.end)?_c('span',[_vm._v("End of file.")]):_vm._e()])],1):(_vm.resultType === 'image')?_c('img',{staticClass:"results-image",attrs:{"src":_vm.$store.getters.getBlobUrl(_vm.result.downloadUrl),"alt":_vm.result.verboseName}}):(['html', 'pdf'].includes(_vm.resultType))?_c('iframe',{staticClass:"results-iframe",staticStyle:{"width":"100%","height":"100%","min-height":"80vh"},attrs:{"src":_vm.$store.getters.getBlobUrl(_vm.result.downloadUrl, ''),"frameborder":"0"}}):(_vm.resultType === 'igv_bam')?_c('iframe',{staticClass:"results-iframe",staticStyle:{"width":"100%","height":"100%","min-height":"80vh"},attrs:{"src":_vm.result.downloadUrl,"frameborder":"0"}}):(_vm.resultType === 'number')?_c('code',{staticClass:"v-markup"},[_c('span',{attrs:{"size":"100px"}},[_vm._v(_vm._s(_vm._f("round")(_vm.result.value,3)))])]):(['string', 'url-link'].includes(_vm.resultType))?_c('code',{staticClass:"v-markup"},[_c('span',{attrs:{"size":"100px"}},[_vm._v(_vm._s(_vm.result.value))])]):_vm._e()],1)],1)],1):_vm._e()}
|
|
253244
|
-
var
|
|
253638
|
+
var ResultsGalleryvue_type_template_id_185780e8_staticRenderFns = []
|
|
253245
253639
|
|
|
253246
253640
|
|
|
253247
|
-
// CONCATENATED MODULE: ./src/components/analyses/ResultsGallery.vue?vue&type=template&id=
|
|
253641
|
+
// CONCATENATED MODULE: ./src/components/analyses/ResultsGallery.vue?vue&type=template&id=185780e8&
|
|
253248
253642
|
|
|
253249
253643
|
// EXTERNAL MODULE: ./node_modules/detect-csv/index.js
|
|
253250
253644
|
var detect_csv = __webpack_require__("0f34");
|
|
@@ -253253,7 +253647,7 @@ var detect_csv_default = /*#__PURE__*/__webpack_require__.n(detect_csv);
|
|
|
253253
253647
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/analyses/ResultsGallery.vue?vue&type=script&lang=js&
|
|
253254
253648
|
var cov_d7x60homs = function () {
|
|
253255
253649
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/analyses/ResultsGallery.vue";
|
|
253256
|
-
var hash = "
|
|
253650
|
+
var hash = "fe09864f43de2d4dae5821f382f528b5c4317436";
|
|
253257
253651
|
var global = new Function("return this")();
|
|
253258
253652
|
var gcv = "__coverage__";
|
|
253259
253653
|
var coverageData = {
|
|
@@ -254036,7 +254430,7 @@ var cov_d7x60homs = function () {
|
|
|
254036
254430
|
},
|
|
254037
254431
|
end: {
|
|
254038
254432
|
line: 491,
|
|
254039
|
-
column:
|
|
254433
|
+
column: 41
|
|
254040
254434
|
}
|
|
254041
254435
|
},
|
|
254042
254436
|
"78": {
|
|
@@ -254046,7 +254440,7 @@ var cov_d7x60homs = function () {
|
|
|
254046
254440
|
},
|
|
254047
254441
|
end: {
|
|
254048
254442
|
line: 492,
|
|
254049
|
-
column:
|
|
254443
|
+
column: 77
|
|
254050
254444
|
}
|
|
254051
254445
|
},
|
|
254052
254446
|
"79": {
|
|
@@ -254968,7 +255362,7 @@ var cov_d7x60homs = function () {
|
|
|
254968
255362
|
},
|
|
254969
255363
|
end: {
|
|
254970
255364
|
line: 491,
|
|
254971
|
-
column:
|
|
255365
|
+
column: 41
|
|
254972
255366
|
}
|
|
254973
255367
|
},
|
|
254974
255368
|
line: 491
|
|
@@ -254992,7 +255386,7 @@ var cov_d7x60homs = function () {
|
|
|
254992
255386
|
},
|
|
254993
255387
|
end: {
|
|
254994
255388
|
line: 492,
|
|
254995
|
-
column:
|
|
255389
|
+
column: 77
|
|
254996
255390
|
}
|
|
254997
255391
|
},
|
|
254998
255392
|
line: 492
|
|
@@ -256242,7 +256636,7 @@ var cov_d7x60homs = function () {
|
|
|
256242
256636
|
},
|
|
256243
256637
|
end: {
|
|
256244
256638
|
line: 492,
|
|
256245
|
-
column:
|
|
256639
|
+
column: 78
|
|
256246
256640
|
}
|
|
256247
256641
|
}, {
|
|
256248
256642
|
start: {
|
|
@@ -256297,7 +256691,7 @@ var cov_d7x60homs = function () {
|
|
|
256297
256691
|
},
|
|
256298
256692
|
end: {
|
|
256299
256693
|
line: 492,
|
|
256300
|
-
column:
|
|
256694
|
+
column: 77
|
|
256301
256695
|
}
|
|
256302
256696
|
},
|
|
256303
256697
|
type: "binary-expr",
|
|
@@ -256308,16 +256702,16 @@ var cov_d7x60homs = function () {
|
|
|
256308
256702
|
},
|
|
256309
256703
|
end: {
|
|
256310
256704
|
line: 492,
|
|
256311
|
-
column:
|
|
256705
|
+
column: 48
|
|
256312
256706
|
}
|
|
256313
256707
|
}, {
|
|
256314
256708
|
start: {
|
|
256315
256709
|
line: 492,
|
|
256316
|
-
column:
|
|
256710
|
+
column: 52
|
|
256317
256711
|
},
|
|
256318
256712
|
end: {
|
|
256319
256713
|
line: 492,
|
|
256320
|
-
column:
|
|
256714
|
+
column: 77
|
|
256321
256715
|
}
|
|
256322
256716
|
}],
|
|
256323
256717
|
line: 492
|
|
@@ -256858,10 +257252,10 @@ var cov_d7x60homs = function () {
|
|
|
256858
257252
|
mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAiRA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
|
|
256859
257253
|
file: "ResultsGallery.vue",
|
|
256860
257254
|
sourceRoot: "src/components/analyses",
|
|
256861
|
-
sourcesContent: ["<template>\n <v-dialog\n v-hotkey=\"keymap\"\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :fullscreen=\"isResultModalFullScreen\"\n scrollable\n class=\"gallery-dialog\"\n >\n <!-- style=\"transition: 0.3s\" -->\n <v-card flat class=\"gallery-card\">\n <v-card-title class=\"pa-2\">\n <v-row>\n <v-col cols=\"6\">\n <h3 class=\"font-weight-thin primary--text\">\n {{ result.verboseName }}\n </h3>\n </v-col>\n\n <v-col cols=\"6\" class=\"d-flex justify-end align-center panel-slot-actions\">\n\n <!-- toggle raw text -->\n <v-tooltip\n v-if=\"result.frontendType === 'tsv-file' && tsvHeaders.length\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"displayRawText = !displayRawText\"\n v-on=\"on\"\n >\n {{ displayRawText ? 'table_chart' : 'text_fields' }}\n </v-icon>\n </template>\n {{ displayRawText ? 'Display Tabulated Content' : 'Display Raw Content' }}\n </v-tooltip>\n\n <!-- download result -->\n <v-tooltip\n v-if=\"result.download\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.download\"\n v-on=\"on\"\n >\n {{ result.downloadIcon }}\n </v-icon>\n </template>\n {{ result.downloadIcon === 'open_in_new' ? 'Open in new tab' : 'Download Result' }}\n </v-tooltip>\n\n <!-- copy to clipboard -->\n <v-tooltip\n v-if=\"result.copyToClipBoard\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.copyToClipBoard\"\n v-on=\"on\"\n >\n file_copy\n </v-icon>\n </template>\n Copy to clipboard!\n </v-tooltip>\n\n <!-- external link -->\n <v-tooltip\n v-if=\"result.openExternalLink\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.openExternalLink\"\n v-on=\"on\"\n >\n info\n </v-icon>\n </template>\n Learn more!\n </v-tooltip>\n\n <!-- show from bottom -->\n <v-tooltip\n v-if=\"['raw'].includes(resultType)\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"reverseContent\"\n v-on=\"on\"\n >\n {{ streamOptions.reverse ? 'vertical_align_bottom' : 'vertical_align_top'}}\n </v-icon>\n </template>\n <span>\n Show content from {{ streamOptions.reverse ? 'top' : 'bottom' }}\n </span>\n </v-tooltip>\n\n <!-- show fullscreen -->\n <v-tooltip\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"toggleFullScreen\"\n v-on=\"on\"\n >\n <!-- @click=\"(isFullScreen = !isFullScreen)\" -->\n {{ isResultModalFullScreen ? 'fullscreen_exit' : 'fullscreen'}}\n </v-icon>\n </template>\n <span>\n Toggle Full Screen\n </span>\n </v-tooltip>\n\n <!-- close dialog -->\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"hideDialog\"\n v-on=\"on\"\n >\n close\n </v-icon>\n </template>\n Close file\n </v-tooltip>\n </v-col>\n </v-row>\n </v-card-title>\n\n <v-row class=\"pa-0 ma-0 gallery-content\" style=\"height: 85vh\">\n <v-progress-linear\n v-if=\"loading\"\n class=\"panel-loader\"\n indeterminate\n height=\"2\"\n color=\"primary\"\n />\n\n <pre\n v-highlightjs=\"content\"\n v-if=\"resultType === 'raw' && resultKey === 'command_script'\"\n ref=\"raw\"\n class=\"v-markup pre-wrap\"\n >\n <code class=\"bash\" />\n </pre>\n\n <code\n v-else-if=\"isAnsi\"\n ref=\"raw\"\n class=\"v-markup\"\n >\n <pre v-html=\"content\" />\n </code>\n\n <code\n v-else-if=\"resultType === 'raw'\"\n ref=\"raw\"\n class=\"v-markup\"\n >\n <pre>\n {{ content }}\n <span v-if=\"content && !streamOptions.end\" class=\"stream-message grey--text lighten-2\">\n ... Loading more rows\n </span>\n <span v-if=\"!loading && streamOptions.end\" class=\"stream-message grey--text\">\n *** End of file. ***\n </span>\n </pre>\n </code>\n\n <div\n v-else-if=\"resultType === 'table'\"\n ref=\"table\"\n class=\"tsv-table\"\n >\n <v-data-table\n :headers=\"tsvHeaders\"\n :items=\"tsvItems\"\n :items-per-page=\"tsvItems.length\"\n hide-default-footer\n multi-sort\n fixed-header\n dense\n >\n <template v-slot:body=\"{ items }\">\n <tbody>\n <tr\n v-for=\"item in items\"\n :key=\"item.name\"\n >\n <td\n v-for=\"(header, index) in tsvHeaders\"\n :key=\"index + header.value\"\n :class=\"[header.value === 'index' ? 'line-column text' : '']\"\n v-html=\"parseTsvCell($get(item, header.value))\"\n />\n </tr>\n </tbody>\n </template>\n </v-data-table>\n\n <div class=\"text-center stream-message\">\n <span v-if=\"content && !streamOptions.end\">... Loading more rows</span>\n <span v-if=\"!loading && streamOptions.end\">End of file.</span>\n </div>\n </div>\n\n <img\n v-else-if=\"resultType === 'image'\"\n :src=\"$store.getters.getBlobUrl(result.downloadUrl)\"\n :alt=\"result.verboseName\"\n class=\"results-image\"\n >\n\n <iframe\n v-else-if=\"['html', 'pdf'].includes(resultType)\"\n :src=\"$store.getters.getBlobUrl(result.downloadUrl, '')\"\n frameborder=\"0\"\n class=\"results-iframe\"\n style=\"width: 100%; height: 100%; min-height: 80vh;\"\n />\n\n <iframe\n v-else-if=\"resultType === 'igv_bam'\"\n :src=\"result.downloadUrl\"\n frameborder=\"0\"\n class=\"results-iframe\"\n style=\"width: 100%; height: 100%; min-height: 80vh;\"\n />\n\n <code\n v-else-if=\"resultType === 'number'\"\n class=\"v-markup\"\n >\n <span size=\"100px\">{{ result.value | round(3) }}</span>\n </code>\n\n <code\n v-else-if=\"['string', 'url-link'].includes(resultType)\"\n class=\"v-markup\"\n >\n <span size=\"100px\">{{ result.value }}</span>\n </code>\n </v-row>\n\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { loadResult } from '@/utils/api'\nimport { HIDE_PANEL, SHOW_PANEL } from '@/store/actions/panels'\nimport { TOGGLE_RESULT_FULLSCREEN } from '@/store/actions/user'\nimport { GET_FILE } from '@/store/actions/files'\nimport { mapGetters } from 'vuex'\nimport detect from 'detect-csv'\n\nexport default {\n name: 'ResultsGallery',\n props: {\n resultIndex: {\n type: Number,\n },\n results: {\n type: Array,\n },\n },\n data() {\n return {\n content: '',\n displayRawText: false,\n isBottomScrolled: false,\n loading: false,\n showDialog: false,\n tsvItems: [],\n tsvHeaders: [],\n streamOptions: {\n lines: 200,\n offset: 0,\n reverse: false,\n previous: '',\n end: false,\n },\n }\n },\n computed: {\n ...mapGetters(['resultKey', 'isResultModalFullScreen']),\n keymap() {\n return {\n right: this.increaseIndex,\n left: this.decreaseIndex,\n esc: this.hideDialog,\n }\n },\n result() {\n return this.results[this.resultIndex] || {}\n },\n isAnsi() {\n return this.result && this.result.frontendType === 'ansi'\n },\n resultType() {\n if (this.result.frontendType === 'ansi') {\n return 'raw'\n } else if (this.result.frontendType === 'text-file') {\n return 'raw'\n } else if (this.result.frontendType === 'tsv-file') {\n if (\n !this.displayRawText &&\n this.tsvItems.length &&\n this.tsvHeaders.length\n ) {\n return 'table'\n } else {\n return 'raw'\n }\n } else {\n return this.result.frontendType\n }\n },\n },\n watch: {\n showDialog(value) {\n if (!value) {\n this.$store.dispatch(HIDE_PANEL, 'result')\n this.$emit('display-result', null)\n }\n },\n resultIndex(value) {\n this.showDialog = Number.isInteger(value) && value < this.results.length\n if (this.showDialog && ['raw', 'table'].includes(this.resultType)) {\n this.resetStreamEvents()\n this.loadFileContents()\n }\n },\n resultKey: {\n handler() {\n this.updateResultIndex()\n },\n immediate: true,\n },\n result(value) {\n if (value && value.resultKey) {\n this.$store.dispatch(SHOW_PANEL, {\n result: value.resultKey,\n })\n if (['html', 'pdf'].includes(value.frontendType)) {\n this.$store.dispatch(GET_FILE, value.downloadUrl)\n }\n // Track result viewed\n window.analytics.track('Result Previewed', value.analytics)\n }\n this.updateResultIndex()\n },\n isBottomScrolled(value) {\n if (value) {\n this.loadFileContents()\n }\n },\n displayRawText() {\n this.addScrollListener()\n },\n },\n methods: {\n resetStreamEvents() {\n // Reset content\n this.content = ''\n this.streamOptions = {\n lines: 200,\n offset: 0,\n reverse: false,\n previous: '',\n end: false,\n }\n // Remove listeners\n this.$nextTick(() => {\n if (this.$refs.raw) {\n this.$refs.raw.removeEventListener('scroll', this.isBottomVisible)\n }\n if (this.$refs.table) {\n this.$refs.table.removeEventListener('scroll', this.isBottomVisible)\n }\n })\n },\n addScrollListener() {\n this.$nextTick(() => {\n this.isBottomVisible()\n if (!this.isBottomScrolled) {\n if (this.$refs.raw) {\n this.$refs.raw.addEventListener('scroll', this.isBottomVisible)\n }\n if (this.$refs.table) {\n this.$refs.table.addEventListener('scroll', this.isBottomVisible)\n }\n }\n })\n },\n updateResultIndex() {\n if (this.resultKey !== this.result.resultKey) {\n this.results.forEach((result, index) => {\n if (result.resultKey === this.resultKey) {\n this.showDialog = true\n this.$emit('display-result', index)\n }\n })\n }\n },\n hideDialog() {\n if (this.showDialog) {\n this.showDialog = false\n }\n },\n increaseIndex() {\n if (this.showDialog) {\n if (this.resultIndex < this.results.length - 1) {\n this.$emit('display-result', this.resultIndex + 1)\n this.content = ''\n } else {\n this.$emit('display-result', 0)\n this.content = ''\n }\n }\n },\n decreaseIndex() {\n if (this.showDialog) {\n if (this.resultIndex > 0) {\n this.$emit('display-result', this.resultIndex - 1)\n } else {\n this.$emit('display-result', this.results.length - 1)\n }\n }\n },\n async loadFileContents() {\n const { lines, offset, reverse, end, previous } = this.streamOptions\n if (!end) {\n this.loading = true\n let content = await loadResult(\n this.result.analysis.pk,\n this.result.resultKey,\n lines,\n offset,\n reverse\n )\n this.loading = false\n\n if (content && previous !== content) {\n this.streamOptions.previous = content\n this.streamOptions.offset += lines\n this.content += content\n this.setTsvItems(this.content)\n this.addScrollListener()\n } else {\n this.streamOptions.end = true\n this.setTsvItems(this.content)\n }\n\n }\n },\n setTsvItems(content) {\n const isTsv = this.result.frontendType === 'tsv-file'\n const detectHandler = (\n detect(content.slice(0, 1000)) || { newline: '\\n', delimiter: '\\t'}\n )\n\n // csv to list of lists\n const dataRows =\n content && isTsv\n ? this.csvToArray(content.trim(), detectHandler.delimiter)\n .filter((row) => row)\n .filter((row) => row[0] !== '#' || row.includes('#CHROM'))\n : []\n\n // Headers\n this.tsvHeaders = dataRows.length\n ? dataRows[0].map((header, index) => {\n return {\n text: header,\n value: `index${index}`,\n sortable: this.streamOptions.end,\n }\n })\n : []\n\n this.tsvHeaders.unshift({\n text: 1,\n value: 'index',\n sortable: false,\n align: 'end',\n class: 'line-column text'\n })\n\n // Content rows\n this.tsvItems = dataRows.length\n ? dataRows.slice(1)\n .map((row, index) => {\n let dictRow = { index: index + 2 }\n row.forEach((value, index) => {\n dictRow[`index${index}`] = value\n })\n return dictRow\n })\n : []\n\n if (!isTsv || (isTsv && !this.tsvHeaders.length)) {\n this.displayRawText = true\n }\n },\n reverseContent() {\n const reverse = this.streamOptions.reverse\n this.resetStreamEvents()\n this.streamOptions.reverse = !reverse\n this.loadFileContents()\n },\n isBottomVisible() {\n const divElement = this.$refs[this.resultType]\n const scrollTop = divElement.scrollTop\n const visible = divElement.clientHeight\n const pageHeight = divElement.scrollHeight\n const bottomOfPage = visible + scrollTop >= pageHeight\n this.isBottomScrolled = bottomOfPage || pageHeight < visible\n },\n toggleFullScreen() {\n this.$store.dispatch(TOGGLE_RESULT_FULLSCREEN, {\n value: !this.isResultModalFullScreen\n })\n },\n parseTsvCell(value) {\n let pattern = /^((http|https|ftp):\\/\\/)/\n if (pattern.test(value)) {\n return `<a href=\"${value}\" target=\"_blank\">Open link</a>`\n } else {\n return value\n }\n },\n\n csvToArray(strData, strDelimiter=\",\") {\n // See: https://stackoverflow.com/a/1293163/3949081\n const objPattern = new RegExp(\n (\n // Delimiters.\n \"(\\\\\" + strDelimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\n // Quoted fields.\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\n // Standard fields.\n \"([^\\\"\\\\\" + strDelimiter + \"\\\\r\\\\n]*))\"\n ),\n \"gi\"\n )\n const arrData = [[]]\n let arrMatches = null\n\n while (arrMatches = objPattern.exec(strData)) {\n // If not delimiter, an end of row has been reached\n const strMatchedDelimiter = arrMatches[1]\n if (\n strMatchedDelimiter.length &&\n strMatchedDelimiter !== strDelimiter\n ){\n arrData.push([])\n }\n\n let strMatchedValue\n if (arrMatches[2]){\n // Quoted value, Unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(\n new RegExp( \"\\\"\\\"\", \"g\" ),\n \"\\\"\"\n )\n } else {\n // Non-quoted value.\n strMatchedValue = arrMatches[3]\n }\n arrData[arrData.length - 1].push(strMatchedValue)\n }\n return arrData\n }\n },\n}\n</script>\n\n<style lang=\"scss\">\n.tsv-table {\n max-width: 100%;\n max-height: 100%;\n margin: 0px auto;\n overflow: auto;\n}\n.v-dialog {\n overflow-y: visible !important; // truly important for iframe performance, dont remove!\n &:not(.v-dialog--fullscreen) {\n max-height: 100% !important;\n max-width: calc(100% - 48px);\n }\n iframe.results-iframe {\n height: 100% !important;\n }\n &.gallery-dialog {\n height: calc(100vh - 60px);\n }\n}\n.results-image {\n max-width: 100%;\n max-height: 85vh;\n margin: auto;\n max-height: 100%;\n width: auto;\n}\n.gallery-card {\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n}\n.v-application .gallery-card {\n .gallery-content {\n background: var(--v-background-base);\n }\n\n pre {\n white-space: pre-line;\n &.pre-wrap {\n white-space: pre-wrap;\n }\n code {\n font-size: 12px;\n font-weight: 600;\n }\n }\n\n &.theme--dark code {\n background-color: rgba(0,0,0,.05);\n }\n\n code.v-markup,\n pre.v-markup {\n padding: 10px;\n width: 100%;\n height: 100%;\n text-align: start;\n box-shadow: none;\n text-shadow: none;\n display: flex;\n position: relative;\n overflow-x: auto;\n overflow-y: auto;\n margin: 0px;\n top: 0px;\n color: rgb(255, 255, 255);\n border-radius: 0px;\n background: rgb(0, 0, 0);\n font-size: 12px;\n font-weight: 600;\n\n code.hljs {\n font-size: 12px;\n padding: 0px;\n\n .hljs-string,\n .hljs-bullet,\n .hljs-subst,\n .hljs-title,\n .hljs-section,\n .hljs-emphasis,\n .hljs-type,\n .hljs-built_in,\n .hljs-builtin-name,\n .hljs-selector-attr,\n .hljs-selector-pseudo,\n .hljs-addition,\n .hljs-variable,\n .hljs-template-tag,\n .hljs-template-variable {\n color: var(--v-warning-base);\n }\n }\n }\n\n .tsv-table {\n border: thin solid rgba(0,0,0,.12);\n margin-left: 0;\n\n .theme--dark {\n thead tr th {\n background: var(--v-surface-darken1);\n span {\n color: #9e9e9e;\n }\n }\n tbody tr td {\n background: var(--v-background-base);\n span {\n color: #9e9e9e;\n }\n }\n }\n\n thead tr {\n th {\n background: var(--v-background-base);\n max-width: 250px;\n white-space: nowrap;\n span {\n font-size: 12px;\n font-family: Roboto;\n color: #333333;\n }\n }\n }\n tbody tr {\n td {\n font-size: 12px;\n font-family: Roboto;\n overflow-x: auto;\n white-space: nowrap;\n max-width: 250px;\n }\n }\n\n thead tr th, tbody tr td {\n &.line-column {\n background: var(--v-surface-darken1);\n width: 50px;\n text-align: right;\n font-weight: normal;\n // Make line-column sticky\n position: sticky !important;\n left: 0;\n z-index: 9998;\n }\n }\n\n thead tr th .line-column {\n z-index: 9999;\n }\n }\n\n\n .stream-message {\n font-size: 12px;\n font-style: italic;\n margin: 20px 0px;\n }\n}\n</style>\n"]
|
|
257255
|
+
sourcesContent: ["<template>\n <v-dialog\n v-hotkey=\"keymap\"\n v-if=\"showDialog\"\n v-model=\"showDialog\"\n :fullscreen=\"isResultModalFullScreen\"\n scrollable\n class=\"gallery-dialog\"\n >\n <!-- style=\"transition: 0.3s\" -->\n <v-card flat class=\"gallery-card\">\n <v-card-title class=\"pa-2\">\n <v-row>\n <v-col cols=\"6\">\n <h3 class=\"font-weight-thin primary--text\">\n {{ result.verboseName }}\n </h3>\n </v-col>\n\n <v-col cols=\"6\" class=\"d-flex justify-end align-center panel-slot-actions\">\n\n <!-- toggle raw text -->\n <v-tooltip\n v-if=\"result.frontendType === 'tsv-file' && tsvHeaders.length\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"displayRawText = !displayRawText\"\n v-on=\"on\"\n >\n {{ displayRawText ? 'table_chart' : 'text_fields' }}\n </v-icon>\n </template>\n {{ displayRawText ? 'Display Tabulated Content' : 'Display Raw Content' }}\n </v-tooltip>\n\n <!-- download result -->\n <v-tooltip\n v-if=\"result.download\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.download\"\n v-on=\"on\"\n >\n {{ result.downloadIcon }}\n </v-icon>\n </template>\n {{ result.downloadIcon === 'open_in_new' ? 'Open in new tab' : 'Download Result' }}\n </v-tooltip>\n\n <!-- copy to clipboard -->\n <v-tooltip\n v-if=\"result.copyToClipBoard\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.copyToClipBoard\"\n v-on=\"on\"\n >\n file_copy\n </v-icon>\n </template>\n Copy to clipboard!\n </v-tooltip>\n\n <!-- external link -->\n <v-tooltip\n v-if=\"result.openExternalLink\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"result.openExternalLink\"\n v-on=\"on\"\n >\n info\n </v-icon>\n </template>\n Learn more!\n </v-tooltip>\n\n <!-- show from bottom -->\n <v-tooltip\n v-if=\"['raw'].includes(resultType)\"\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"reverseContent\"\n v-on=\"on\"\n >\n {{ streamOptions.reverse ? 'vertical_align_bottom' : 'vertical_align_top'}}\n </v-icon>\n </template>\n <span>\n Show content from {{ streamOptions.reverse ? 'top' : 'bottom' }}\n </span>\n </v-tooltip>\n\n <!-- show fullscreen -->\n <v-tooltip\n top\n >\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"toggleFullScreen\"\n v-on=\"on\"\n >\n <!-- @click=\"(isFullScreen = !isFullScreen)\" -->\n {{ isResultModalFullScreen ? 'fullscreen_exit' : 'fullscreen'}}\n </v-icon>\n </template>\n <span>\n Toggle Full Screen\n </span>\n </v-tooltip>\n\n <!-- close dialog -->\n <v-tooltip top>\n <template v-slot:activator=\"{ on }\">\n <v-icon\n class=\"primary--text ml-4\"\n small\n @click=\"hideDialog\"\n v-on=\"on\"\n >\n close\n </v-icon>\n </template>\n Close file\n </v-tooltip>\n </v-col>\n </v-row>\n </v-card-title>\n\n <v-row class=\"pa-0 ma-0 gallery-content\" style=\"height: 85vh\">\n <v-progress-linear\n v-if=\"loading\"\n class=\"panel-loader\"\n indeterminate\n height=\"2\"\n color=\"primary\"\n />\n\n <pre\n v-highlightjs=\"content\"\n v-if=\"resultType === 'raw' && resultKey === 'command_script'\"\n ref=\"raw\"\n class=\"v-markup pre-wrap\"\n >\n <code class=\"bash\" />\n </pre>\n\n <code\n v-else-if=\"isAnsi\"\n ref=\"raw\"\n class=\"v-markup\"\n >\n <pre v-html=\"content\" />\n </code>\n\n <code\n v-else-if=\"resultType === 'raw'\"\n ref=\"raw\"\n class=\"v-markup\"\n >\n <pre>\n {{ content }}\n <span v-if=\"content && !streamOptions.end\" class=\"stream-message grey--text lighten-2\">\n ... Loading more rows\n </span>\n <span v-if=\"!loading && streamOptions.end\" class=\"stream-message grey--text\">\n *** End of file. ***\n </span>\n </pre>\n </code>\n\n <div\n v-else-if=\"resultType === 'table'\"\n ref=\"table\"\n class=\"tsv-table\"\n >\n <v-data-table\n :headers=\"tsvHeaders\"\n :items=\"tsvItems\"\n :items-per-page=\"tsvItems.length\"\n hide-default-footer\n multi-sort\n fixed-header\n dense\n >\n <template v-slot:body=\"{ items }\">\n <tbody>\n <tr\n v-for=\"item in items\"\n :key=\"item.name\"\n >\n <td\n v-for=\"(header, index) in tsvHeaders\"\n :key=\"index + header.value\"\n :class=\"[header.value === 'index' ? 'line-column text' : '']\"\n v-html=\"parseTsvCell($get(item, header.value))\"\n />\n </tr>\n </tbody>\n </template>\n </v-data-table>\n\n <div class=\"text-center stream-message\">\n <span v-if=\"content && !streamOptions.end\">... Loading more rows</span>\n <span v-if=\"!loading && streamOptions.end\">End of file.</span>\n </div>\n </div>\n\n <img\n v-else-if=\"resultType === 'image'\"\n :src=\"$store.getters.getBlobUrl(result.downloadUrl)\"\n :alt=\"result.verboseName\"\n class=\"results-image\"\n >\n\n <iframe\n v-else-if=\"['html', 'pdf'].includes(resultType)\"\n :src=\"$store.getters.getBlobUrl(result.downloadUrl, '')\"\n frameborder=\"0\"\n class=\"results-iframe\"\n style=\"width: 100%; height: 100%; min-height: 80vh;\"\n />\n\n <iframe\n v-else-if=\"resultType === 'igv_bam'\"\n :src=\"result.downloadUrl\"\n frameborder=\"0\"\n class=\"results-iframe\"\n style=\"width: 100%; height: 100%; min-height: 80vh;\"\n />\n\n <code\n v-else-if=\"resultType === 'number'\"\n class=\"v-markup\"\n >\n <span size=\"100px\">{{ result.value | round(3) }}</span>\n </code>\n\n <code\n v-else-if=\"['string', 'url-link'].includes(resultType)\"\n class=\"v-markup\"\n >\n <span size=\"100px\">{{ result.value }}</span>\n </code>\n </v-row>\n\n </v-card>\n </v-dialog>\n</template>\n\n<script>\nimport { loadResult } from '@/utils/api'\nimport { HIDE_PANEL, SHOW_PANEL } from '@/store/actions/panels'\nimport { TOGGLE_RESULT_FULLSCREEN } from '@/store/actions/user'\nimport { GET_FILE } from '@/store/actions/files'\nimport { mapGetters } from 'vuex'\nimport detect from 'detect-csv'\n\nexport default {\n name: 'ResultsGallery',\n props: {\n resultIndex: {\n type: Number,\n },\n results: {\n type: Array,\n },\n },\n data() {\n return {\n content: '',\n displayRawText: false,\n isBottomScrolled: false,\n loading: false,\n showDialog: false,\n tsvItems: [],\n tsvHeaders: [],\n streamOptions: {\n lines: 200,\n offset: 0,\n reverse: false,\n previous: '',\n end: false,\n },\n }\n },\n computed: {\n ...mapGetters(['resultKey', 'isResultModalFullScreen']),\n keymap() {\n return {\n right: this.increaseIndex,\n left: this.decreaseIndex,\n esc: this.hideDialog,\n }\n },\n result() {\n return this.results[this.resultIndex] || {}\n },\n isAnsi() {\n return this.result && this.result.frontendType === 'ansi'\n },\n resultType() {\n if (this.result.frontendType === 'ansi') {\n return 'raw'\n } else if (this.result.frontendType === 'text-file') {\n return 'raw'\n } else if (this.result.frontendType === 'tsv-file') {\n if (\n !this.displayRawText &&\n this.tsvItems.length &&\n this.tsvHeaders.length\n ) {\n return 'table'\n } else {\n return 'raw'\n }\n } else {\n return this.result.frontendType\n }\n },\n },\n watch: {\n showDialog(value) {\n if (!value) {\n this.$store.dispatch(HIDE_PANEL, 'result')\n this.$emit('display-result', null)\n }\n },\n resultIndex(value) {\n this.showDialog = Number.isInteger(value) && value < this.results.length\n if (this.showDialog && ['raw', 'table'].includes(this.resultType)) {\n this.resetStreamEvents()\n this.loadFileContents()\n }\n },\n resultKey: {\n handler() {\n this.updateResultIndex()\n },\n immediate: true,\n },\n result(value) {\n if (value && value.resultKey) {\n this.$store.dispatch(SHOW_PANEL, {\n result: value.resultKey,\n })\n if (['html', 'pdf'].includes(value.frontendType)) {\n this.$store.dispatch(GET_FILE, value.downloadUrl)\n }\n // Track result viewed\n window.analytics.track('Result Previewed', value.analytics)\n }\n this.updateResultIndex()\n },\n isBottomScrolled(value) {\n if (value) {\n this.loadFileContents()\n }\n },\n displayRawText() {\n this.addScrollListener()\n },\n },\n methods: {\n resetStreamEvents() {\n // Reset content\n this.content = ''\n this.streamOptions = {\n lines: 200,\n offset: 0,\n reverse: false,\n previous: '',\n end: false,\n }\n // Remove listeners\n this.$nextTick(() => {\n if (this.$refs.raw) {\n this.$refs.raw.removeEventListener('scroll', this.isBottomVisible)\n }\n if (this.$refs.table) {\n this.$refs.table.removeEventListener('scroll', this.isBottomVisible)\n }\n })\n },\n addScrollListener() {\n this.$nextTick(() => {\n this.isBottomVisible()\n if (!this.isBottomScrolled) {\n if (this.$refs.raw) {\n this.$refs.raw.addEventListener('scroll', this.isBottomVisible)\n }\n if (this.$refs.table) {\n this.$refs.table.addEventListener('scroll', this.isBottomVisible)\n }\n }\n })\n },\n updateResultIndex() {\n if (this.resultKey !== this.result.resultKey) {\n this.results.forEach((result, index) => {\n if (result.resultKey === this.resultKey) {\n this.showDialog = true\n this.$emit('display-result', index)\n }\n })\n }\n },\n hideDialog() {\n if (this.showDialog) {\n this.showDialog = false\n }\n },\n increaseIndex() {\n if (this.showDialog) {\n if (this.resultIndex < this.results.length - 1) {\n this.$emit('display-result', this.resultIndex + 1)\n this.content = ''\n } else {\n this.$emit('display-result', 0)\n this.content = ''\n }\n }\n },\n decreaseIndex() {\n if (this.showDialog) {\n if (this.resultIndex > 0) {\n this.$emit('display-result', this.resultIndex - 1)\n } else {\n this.$emit('display-result', this.results.length - 1)\n }\n }\n },\n async loadFileContents() {\n const { lines, offset, reverse, end, previous } = this.streamOptions\n if (!end) {\n this.loading = true\n let content = await loadResult(\n this.result.analysis.pk,\n this.result.resultKey,\n lines,\n offset,\n reverse\n )\n this.loading = false\n\n if (content && previous !== content) {\n this.streamOptions.previous = content\n this.streamOptions.offset += lines\n this.content += content\n this.setTsvItems(this.content)\n this.addScrollListener()\n } else {\n this.streamOptions.end = true\n this.setTsvItems(this.content)\n }\n\n }\n },\n setTsvItems(content) {\n const isTsv = this.result.frontendType === 'tsv-file'\n const detectHandler = (\n detect(content.slice(0, 1000)) || { newline: '\\n', delimiter: '\\t'}\n )\n\n // csv to list of lists\n const dataRows =\n content && isTsv\n ? this.csvToArray(content.trim(), detectHandler.delimiter)\n .filter((row) => row.length)\n .filter((row) => row[0][0] !== '#' || row[0].includes('#CHROM'))\n : []\n\n // Headers\n this.tsvHeaders = dataRows.length\n ? dataRows[0].map((header, index) => {\n return {\n text: header,\n value: `index${index}`,\n sortable: this.streamOptions.end,\n }\n })\n : []\n\n this.tsvHeaders.unshift({\n text: 1,\n value: 'index',\n sortable: false,\n align: 'end',\n class: 'line-column text'\n })\n\n // Content rows\n this.tsvItems = dataRows.length\n ? dataRows.slice(1)\n .map((row, index) => {\n let dictRow = { index: index + 2 }\n row.forEach((value, index) => {\n dictRow[`index${index}`] = value\n })\n return dictRow\n })\n : []\n\n if (!isTsv || (isTsv && !this.tsvHeaders.length)) {\n this.displayRawText = true\n }\n },\n reverseContent() {\n const reverse = this.streamOptions.reverse\n this.resetStreamEvents()\n this.streamOptions.reverse = !reverse\n this.loadFileContents()\n },\n isBottomVisible() {\n const divElement = this.$refs[this.resultType]\n const scrollTop = divElement.scrollTop\n const visible = divElement.clientHeight\n const pageHeight = divElement.scrollHeight\n const bottomOfPage = visible + scrollTop >= pageHeight\n this.isBottomScrolled = bottomOfPage || pageHeight < visible\n },\n toggleFullScreen() {\n this.$store.dispatch(TOGGLE_RESULT_FULLSCREEN, {\n value: !this.isResultModalFullScreen\n })\n },\n parseTsvCell(value) {\n let pattern = /^((http|https|ftp):\\/\\/)/\n if (pattern.test(value)) {\n return `<a href=\"${value}\" target=\"_blank\">Open link</a>`\n } else {\n return value\n }\n },\n\n csvToArray(strData, strDelimiter=\",\") {\n // See: https://stackoverflow.com/a/1293163/3949081\n const objPattern = new RegExp(\n (\n // Delimiters.\n \"(\\\\\" + strDelimiter + \"|\\\\r?\\\\n|\\\\r|^)\" +\n // Quoted fields.\n \"(?:\\\"([^\\\"]*(?:\\\"\\\"[^\\\"]*)*)\\\"|\" +\n // Standard fields.\n \"([^\\\"\\\\\" + strDelimiter + \"\\\\r\\\\n]*))\"\n ),\n \"gi\"\n )\n const arrData = [[]]\n let arrMatches = null\n\n while (arrMatches = objPattern.exec(strData)) {\n // If not delimiter, an end of row has been reached\n const strMatchedDelimiter = arrMatches[1]\n if (\n strMatchedDelimiter.length &&\n strMatchedDelimiter !== strDelimiter\n ){\n arrData.push([])\n }\n\n let strMatchedValue\n if (arrMatches[2]){\n // Quoted value, Unescape any double quotes.\n strMatchedValue = arrMatches[2].replace(\n new RegExp( \"\\\"\\\"\", \"g\" ),\n \"\\\"\"\n )\n } else {\n // Non-quoted value.\n strMatchedValue = arrMatches[3]\n }\n arrData[arrData.length - 1].push(strMatchedValue)\n }\n return arrData\n }\n },\n}\n</script>\n\n<style lang=\"scss\">\n.tsv-table {\n max-width: 100%;\n max-height: 100%;\n margin: 0px auto;\n overflow: auto;\n}\n.v-dialog {\n overflow-y: visible !important; // truly important for iframe performance, dont remove!\n &:not(.v-dialog--fullscreen) {\n max-height: 100% !important;\n max-width: calc(100% - 48px);\n }\n iframe.results-iframe {\n height: 100% !important;\n }\n &.gallery-dialog {\n height: calc(100vh - 60px);\n }\n}\n.results-image {\n max-width: 100%;\n max-height: 85vh;\n margin: auto;\n max-height: 100%;\n width: auto;\n}\n.gallery-card {\n ::-webkit-scrollbar {\n width: 0px;\n height: 0px;\n }\n}\n.v-application .gallery-card {\n .gallery-content {\n background: var(--v-background-base);\n }\n\n pre {\n white-space: pre-line;\n &.pre-wrap {\n white-space: pre-wrap;\n }\n code {\n font-size: 12px;\n font-weight: 600;\n }\n }\n\n &.theme--dark code {\n background-color: rgba(0,0,0,.05);\n }\n\n code.v-markup,\n pre.v-markup {\n padding: 10px;\n width: 100%;\n height: 100%;\n text-align: start;\n box-shadow: none;\n text-shadow: none;\n display: flex;\n position: relative;\n overflow-x: auto;\n overflow-y: auto;\n margin: 0px;\n top: 0px;\n color: rgb(255, 255, 255);\n border-radius: 0px;\n background: rgb(0, 0, 0);\n font-size: 12px;\n font-weight: 600;\n\n code.hljs {\n font-size: 12px;\n padding: 0px;\n\n .hljs-string,\n .hljs-bullet,\n .hljs-subst,\n .hljs-title,\n .hljs-section,\n .hljs-emphasis,\n .hljs-type,\n .hljs-built_in,\n .hljs-builtin-name,\n .hljs-selector-attr,\n .hljs-selector-pseudo,\n .hljs-addition,\n .hljs-variable,\n .hljs-template-tag,\n .hljs-template-variable {\n color: var(--v-warning-base);\n }\n }\n }\n\n .tsv-table {\n border: thin solid rgba(0,0,0,.12);\n margin-left: 0;\n\n .theme--dark {\n thead tr th {\n background: var(--v-surface-darken1);\n span {\n color: #9e9e9e;\n }\n }\n tbody tr td {\n background: var(--v-background-base);\n span {\n color: #9e9e9e;\n }\n }\n }\n\n thead tr {\n th {\n background: var(--v-background-base);\n max-width: 250px;\n white-space: nowrap;\n span {\n font-size: 12px;\n font-family: Roboto;\n color: #333333;\n }\n }\n }\n tbody tr {\n td {\n font-size: 12px;\n font-family: Roboto;\n overflow-x: auto;\n white-space: nowrap;\n max-width: 250px;\n }\n }\n\n thead tr th, tbody tr td {\n &.line-column {\n background: var(--v-surface-darken1);\n width: 50px;\n text-align: right;\n font-weight: normal;\n // Make line-column sticky\n position: sticky !important;\n left: 0;\n z-index: 9998;\n }\n }\n\n thead tr th .line-column {\n z-index: 9999;\n }\n }\n\n\n .stream-message {\n font-size: 12px;\n font-style: italic;\n margin: 20px 0px;\n }\n}\n</style>\n"]
|
|
256862
257256
|
},
|
|
256863
257257
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
256864
|
-
hash: "
|
|
257258
|
+
hash: "fe09864f43de2d4dae5821f382f528b5c4317436"
|
|
256865
257259
|
};
|
|
256866
257260
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
256867
257261
|
|
|
@@ -257594,11 +257988,11 @@ function ResultsGalleryvue_type_script_lang_js_defineProperty(obj, key, value) {
|
|
|
257594
257988
|
var dataRows = (cov_d7x60homs.s[76]++, (cov_d7x60homs.b[32][0]++, content) && (cov_d7x60homs.b[32][1]++, isTsv) ? (cov_d7x60homs.b[31][0]++, this.csvToArray(content.trim(), detectHandler.delimiter).filter(function (row) {
|
|
257595
257989
|
cov_d7x60homs.f[22]++;
|
|
257596
257990
|
cov_d7x60homs.s[77]++;
|
|
257597
|
-
return row;
|
|
257991
|
+
return row.length;
|
|
257598
257992
|
}).filter(function (row) {
|
|
257599
257993
|
cov_d7x60homs.f[23]++;
|
|
257600
257994
|
cov_d7x60homs.s[78]++;
|
|
257601
|
-
return (cov_d7x60homs.b[33][0]++, row[0] !== '#') || (cov_d7x60homs.b[33][1]++, row.includes('#CHROM'));
|
|
257995
|
+
return (cov_d7x60homs.b[33][0]++, row[0][0] !== '#') || (cov_d7x60homs.b[33][1]++, row[0].includes('#CHROM'));
|
|
257602
257996
|
})) : (cov_d7x60homs.b[31][1]++, [])); // Headers
|
|
257603
257997
|
|
|
257604
257998
|
cov_d7x60homs.s[79]++;
|
|
@@ -257752,8 +258146,8 @@ var ResultsGalleryvue_type_style_index_0_lang_scss_ = __webpack_require__("3942"
|
|
|
257752
258146
|
|
|
257753
258147
|
var ResultsGallery_component = normalizeComponent(
|
|
257754
258148
|
analyses_ResultsGalleryvue_type_script_lang_js_,
|
|
257755
|
-
|
|
257756
|
-
|
|
258149
|
+
ResultsGalleryvue_type_template_id_185780e8_render,
|
|
258150
|
+
ResultsGalleryvue_type_template_id_185780e8_staticRenderFns,
|
|
257757
258151
|
false,
|
|
257758
258152
|
null,
|
|
257759
258153
|
null,
|
|
@@ -264740,12 +265134,12 @@ var ProjectPanelvue_type_template_id_7c1bc440_staticRenderFns = []
|
|
|
264740
265134
|
|
|
264741
265135
|
// CONCATENATED MODULE: ./src/components/projects/ProjectPanel.vue?vue&type=template&id=7c1bc440&
|
|
264742
265136
|
|
|
264743
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=
|
|
264744
|
-
var
|
|
264745
|
-
var
|
|
265137
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=2fd2fca6&
|
|
265138
|
+
var BaseDashboardvue_type_template_id_2fd2fca6_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"dashboard"},[_c('v-card',{staticClass:"isabl-base-card",attrs:{"flat":""}},[_c('dc-graph',{attrs:{"model":_vm.model,"params":_vm.params,"items":_vm.items,"figures":_vm.figures,"loading":_vm.loading,"max-records":_vm.maxRecords,"total-items":_vm.totalItems,"is-embedded":_vm.isEmbedded},on:{"set-max-records":_vm.setMaxRecords,"set-options":_vm.setOptions}})],1)],1)}
|
|
265139
|
+
var BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns = []
|
|
264746
265140
|
|
|
264747
265141
|
|
|
264748
|
-
// CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=
|
|
265142
|
+
// CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=2fd2fca6&
|
|
264749
265143
|
|
|
264750
265144
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/DcGraph.vue?vue&type=template&id=7d68029b&
|
|
264751
265145
|
var DcGraphvue_type_template_id_7d68029b_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:"main",class:['main-dc', !_vm.isEmbedded ? 'px-2' : '']},[_c('div',{directives:[{name:"show",rawName:"v-show",value:(_vm.loading),expression:"loading"}],staticClass:"overlay"},[_c('v-progress-circular',{staticClass:"loading",attrs:{"width":4,"size":40,"indeterminate":"","color":"primary"}}),_c('div',{staticClass:"mt-6"},[_vm._v("loading records...")])],1),_c('transition',{attrs:{"name":"slide-fade"}},[_c('data-table',{directives:[{name:"show",rawName:"v-show",value:(_vm.showPrefilterTable),expression:"showPrefilterTable"}],attrs:{"model":_vm.model,"params":_vm.params,"open-records-in-new-tab":!_vm.isEmbedded,"title":"Import Into dashboard","info-text":"Search and filter the records you may want to import into the interactive dashboard.","card-classes":"elevation-0 pa-0 mb-12"},on:{"fetch-data":_vm.setOptions}})],1),_c('div',{directives:[{name:"observe-visibility",rawName:"v-observe-visibility",value:(_vm.onVisible),expression:"onVisible"}],staticClass:"dashboard-graphs dc-data-count",attrs:{"id":("dc-data-count-" + _vm.uuid)}},[_c('v-container',{attrs:{"fluid":""}},[_c('v-row',{staticClass:"pb-6 justify-space-between"},[_c('v-col',{staticClass:"pa-0",attrs:{"cols":"4"}},[_c('h2',{staticClass:"isabl-section-title text-left"},[_vm._v(_vm._s(_vm._f("capitalize")(_vm.title || 'Interactive Dashboard')))])]),_c('v-col',{staticClass:"text-center pa-0",attrs:{"cols":"4"}},[_c('span',{staticClass:"filter-count primary--text"}),_vm._v(" selected out of\n "),_c('span',{staticClass:"total-count primary--text"}),(_vm.totalItems && _vm.totalItems > _vm.maxRecords)?_c('span',{staticClass:"total-items"},[_vm._v("\n /\n "),_c('span',{staticClass:"primary--text"},[_c('b',[_vm._v(_vm._s(_vm._f("formatNumber")(_vm.totalItems)))])])]):_vm._e(),_vm._v("\n records\n\n "),(_vm.totalItems && _vm.totalItems > _vm.maxRecords)?_c('v-tooltip',{attrs:{"top":""},scopedSlots:_vm._u([{key:"activator",fn:function(ref){
|
|
@@ -291375,7 +291769,7 @@ var DcGraph_component = normalizeComponent(
|
|
|
291375
291769
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/dashboard/BaseDashboard.vue?vue&type=script&lang=js&
|
|
291376
291770
|
var cov_21s3whnekh = function () {
|
|
291377
291771
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/dashboard/BaseDashboard.vue";
|
|
291378
|
-
var hash = "
|
|
291772
|
+
var hash = "80378eaf505b52746695623a345007e2d0c5f9ea";
|
|
291379
291773
|
var global = new Function("return this")();
|
|
291380
291774
|
var gcv = "__coverage__";
|
|
291381
291775
|
var coverageData = {
|
|
@@ -292267,10 +292661,10 @@ var cov_21s3whnekh = function () {
|
|
|
292267
292661
|
mappings: ";;;;;;;;;;;;;;;;;;;;AAoBA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
|
|
292268
292662
|
file: "BaseDashboard.vue",
|
|
292269
292663
|
sourceRoot: "src/components/dashboard",
|
|
292270
|
-
sourcesContent: ["<template>\n <div ref=\"dashboard\">\n <v-card flat class=\"isabl-base-card\">\n <dc-graph\n :model=\"model\"\n :params=\"params\"\n :items=\"items\"\n :figures=\"figures\"\n :loading=\"loading\"\n :max-records=\"maxRecords\"\n :total-items=\"totalItems\"\n :is-embedded=\"isEmbedded\"\n @set-max-records=\"setMaxRecords\"\n @set-options=\"setOptions\"\n />\n </v-card>\n </div>\n</template>\n\n<script>\
|
|
292664
|
+
sourcesContent: ["<template>\n <div ref=\"dashboard\">\n <v-card flat class=\"isabl-base-card\">\n <dc-graph\n :model=\"model\"\n :params=\"params\"\n :items=\"items\"\n :figures=\"figures\"\n :loading=\"loading\"\n :max-records=\"maxRecords\"\n :total-items=\"totalItems\"\n :is-embedded=\"isEmbedded\"\n @set-max-records=\"setMaxRecords\"\n @set-options=\"setOptions\"\n />\n </v-card>\n </div>\n</template>\n\n<script>\n import BasePanel from '@/components/base/BasePanel.vue'\n import BaseSectionTitle from '@/components/base/BaseSectionTitle.vue'\n import DataTable from '@/components/table/DataTable.vue'\n import DcGraph from '@/components/dashboard/DcGraph.vue'\n import { fetchListRecords } from '@/utils/api'\n import { SHOW_ALERT } from '@/store/actions/alert'\n\n export default {\n name: 'BaseDashboard',\n components: {\n BasePanel,\n BaseSectionTitle,\n DataTable,\n DcGraph\n },\n props: {\n params: {\n type: Object,\n default: () => ({})\n },\n isEmbedded: {\n type: Boolean,\n default: true\n },\n model: {\n type: String,\n required: true\n },\n figures: {\n type: Array,\n required: true\n },\n requiredFields: {\n type: Array,\n default: () => []\n }\n },\n data() {\n return {\n items: [],\n loading: false,\n maxRecords: 500,\n options: {},\n totalItems: null\n }\n },\n computed: {\n queryFields() {\n const fields = this.figures.map(figure => figure.queryFields)\n // flat and remove duplicates\n return [...new Set(fields.flat())]\n },\n fields() {\n return [\n ...new Set([\n 'pk',\n 'created',\n 'modified',\n 'analytics',\n ...this.requiredFields,\n ...this.queryFields\n ])\n ]\n .filter(i => !!i)\n .map(i => i.replace(/\\./g, '__'))\n }\n },\n created() {\n this.loading = true\n },\n methods: {\n setOptions(options) {\n delete options.offset\n this.options = options\n this.fetchData()\n },\n setMaxRecords(value) {\n if (value !== this.maxRecords) {\n this.maxRecords = value\n this.fetchData()\n }\n },\n fetchData() {\n this.loading = true\n\n const fields = this.fields.map(i => i.replace(/\\./g, '__'))\n fetchListRecords(this.model, {\n ...this.options,\n ...this.params,\n limit: this.maxRecords,\n distinct: true,\n fields,\n 'fields!': ''\n })\n .then(response => {\n this.items = response.results.map(r => {\n const result = {\n ...r,\n ...r.analytics\n }\n delete result.analytics\n return result\n })\n this.totalItems = response.count\n })\n .catch(error => {\n let errorMessage = `Search failed: `\n if (error.response) {\n const errorMessages = Object.values(error.response.data).flat()\n errorMessage += errorMessages.length ? errorMessages[0] : '...'\n }\n this.$store.dispatch(SHOW_ALERT, {\n error: errorMessage\n })\n })\n .finally(() => (this.loading = false))\n }\n }\n }\n</script>\n<style lang=\"scss\">\n.dashboard .panels {\n max-width: 95%;\n max-width: 1800px;\n padding-bottom: 100px;\n}\n</style>\n"]
|
|
292271
292665
|
},
|
|
292272
292666
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
292273
|
-
hash: "
|
|
292667
|
+
hash: "80378eaf505b52746695623a345007e2d0c5f9ea"
|
|
292274
292668
|
};
|
|
292275
292669
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
292276
292670
|
|
|
@@ -292501,8 +292895,8 @@ var BaseDashboardvue_type_style_index_0_lang_scss_ = __webpack_require__("f624")
|
|
|
292501
292895
|
|
|
292502
292896
|
var BaseDashboard_component = normalizeComponent(
|
|
292503
292897
|
dashboard_BaseDashboardvue_type_script_lang_js_,
|
|
292504
|
-
|
|
292505
|
-
|
|
292898
|
+
BaseDashboardvue_type_template_id_2fd2fca6_render,
|
|
292899
|
+
BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns,
|
|
292506
292900
|
false,
|
|
292507
292901
|
null,
|
|
292508
292902
|
null,
|
|
@@ -298477,18 +298871,18 @@ var BioModelPanelvue_type_template_id_b52cff22_staticRenderFns = []
|
|
|
298477
298871
|
|
|
298478
298872
|
// CONCATENATED MODULE: ./src/components/bioModels/BioModelPanel.vue?vue&type=template&id=b52cff22&
|
|
298479
298873
|
|
|
298480
|
-
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/bioModels/BioModelTree.vue?vue&type=template&id=
|
|
298481
|
-
var
|
|
298874
|
+
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js?{"cacheDirectory":"node_modules/.cache/vue-loader","cacheIdentifier":"d220a428-vue-loader-template"}!./node_modules/vue-loader/lib/loaders/templateLoader.js??vue-loader-options!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/bioModels/BioModelTree.vue?vue&type=template&id=2b110930&
|
|
298875
|
+
var BioModelTreevue_type_template_id_2b110930_render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('v-card',{staticClass:"isabl-base-card",attrs:{"flat":"","data-test":"biomodel-tree"}},[_c('base-section-title',{attrs:{"show-more":_vm.showTree},on:{"toggle-show-more":function($event){_vm.showTree = !_vm.showTree}},scopedSlots:_vm._u([{key:"title",fn:function(){return [_vm._v("Samples Tree")]},proxy:true},{key:"actions",fn:function(){return [_c('div',[(_vm.isBigTree)?_c('v-btn',{staticClass:"table-action-btn pull-right ma-0",attrs:{"fab":"","outlined":"","color":"primary"},on:{"click":function($event){_vm.showFullHeight = !_vm.showFullHeight
|
|
298482
298876
|
_vm.scrollToCurrentNode()}}},[_c('v-icon',{attrs:{"color":"primary"}},[_vm._v(_vm._s(_vm.showFullHeight ? 'expand_less' : 'expand_more'))])],1):_vm._e()],1)]},proxy:true}])}),_c('v-row',{directives:[{name:"show",rawName:"v-show",value:(_vm.showTree),expression:"showTree"}],staticClass:"individual-tree-div ma-0",style:(_vm.showFullHeight ? '' : 'max-height: 300px;'),attrs:{"id":"tree-div"}},[_c('v-col',{staticClass:"individual-tree text-center pa-0 ma-0"})],1)],1)}
|
|
298483
|
-
var
|
|
298877
|
+
var BioModelTreevue_type_template_id_2b110930_staticRenderFns = []
|
|
298484
298878
|
|
|
298485
298879
|
|
|
298486
|
-
// CONCATENATED MODULE: ./src/components/bioModels/BioModelTree.vue?vue&type=template&id=
|
|
298880
|
+
// CONCATENATED MODULE: ./src/components/bioModels/BioModelTree.vue?vue&type=template&id=2b110930&
|
|
298487
298881
|
|
|
298488
298882
|
// CONCATENATED MODULE: ./node_modules/cache-loader/dist/cjs.js??ref--12-0!./node_modules/thread-loader/dist/cjs.js!./node_modules/@vue/cli-plugin-babel/node_modules/babel-loader/lib!./node_modules/cache-loader/dist/cjs.js??ref--0-0!./node_modules/vue-loader/lib??vue-loader-options!./src/components/bioModels/BioModelTree.vue?vue&type=script&lang=js&
|
|
298489
298883
|
var cov_2hmzqbstvs = function () {
|
|
298490
298884
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/bioModels/BioModelTree.vue";
|
|
298491
|
-
var hash = "
|
|
298885
|
+
var hash = "1e089864fe6792f2d8555180af07f2e5d7f516a5";
|
|
298492
298886
|
var global = new Function("return this")();
|
|
298493
298887
|
var gcv = "__coverage__";
|
|
298494
298888
|
var coverageData = {
|
|
@@ -303773,10 +304167,10 @@ var cov_2hmzqbstvs = function () {
|
|
|
303773
304167
|
mappings: ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA4CA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;;AAEA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA",
|
|
303774
304168
|
file: "BioModelTree.vue",
|
|
303775
304169
|
sourceRoot: "src/components/bioModels",
|
|
303776
|
-
sourcesContent: ["<template>\n <v-card\n flat\n class=\"isabl-base-card\"\n data-test=\"biomodel-tree\"\n >\n <base-section-title\n :show-more=\"showTree\"\n @toggle-show-more=\"showTree = !showTree\"\n >\n <template v-slot:title>Samples Tree</template>\n <template v-slot:actions>\n <div>\n <v-btn\n v-if=\"isBigTree\"\n class=\"table-action-btn pull-right ma-0\"\n fab\n outlined\n color=\"primary\"\n @click=\"\n showFullHeight = !showFullHeight\n scrollToCurrentNode()\n \"\n >\n <v-icon color=\"primary\">{{ showFullHeight ? 'expand_less' : 'expand_more' }}</v-icon>\n </v-btn>\n </div>\n </template>\n </base-section-title>\n\n <!-- Graph -->\n <v-row\n v-show=\"showTree\"\n id=\"tree-div\"\n :style=\"showFullHeight ? '' : 'max-height: 300px;'\"\n class=\"individual-tree-div ma-0\"\n >\n <v-col class=\"individual-tree text-center pa-0 ma-0\" />\n </v-row>\n\n </v-card>\n</template>\n\n<script>\n/*\n Vue implementation of D3 Tree from:\n https://beta.observablehq.com/@asktree/interactive-tree-diagram-d3v4-v5\n*/\n\nimport { fetchIndividualTree } from '@/utils/api'\nimport { mapGetters } from 'vuex'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\nimport BasePanel from '@/components/base/BasePanel.vue'\nimport BaseSectionTitle from '@/components/base/BaseSectionTitle'\nimport {\n tree as d3Tree,\n event as d3Event,\n select as d3Select,\n hierarchy as d3Hierarchy,\n linkHorizontal as d3linkHorizontal\n} from 'd3'\n\nexport default {\n name: 'BioModelTree',\n components: {\n BasePanel,\n BaseSectionTitle\n },\n data() {\n const { treeIcons } = this.$settings\n return {\n loading: false,\n duration: 0,\n data: null,\n root: null,\n tree: null,\n graph: null,\n species: null,\n dataNodes: null,\n showTree: true,\n isBigTree: false,\n showFullHeight: true,\n skipToScrollNode: false,\n currentNode: null,\n nodeSize: Object.keys(treeIcons).length ? 15 : 5,\n margin: { top: 20, bottom: 20, right: 0, left: 105 },\n diagonal: d3linkHorizontal()\n .x(d => d.y)\n .y(d => d.x),\n treeIcons\n }\n },\n computed: {\n ...mapGetters({\n currentModel: 'bioModelId',\n individual: 'individualId'\n })\n },\n watch: {\n individual(value, oldValue) {\n if (value !== oldValue) {\n this.fetchData()\n }\n },\n currentModel() {\n this.data && this.update(this.data)\n }\n },\n mounted() {\n this.fetchData()\n },\n methods: {\n buildTree() {\n let dx = Object.keys(this.treeIcons).length ? this.nodeSize + 4 : 18\n let dy = 0\n let iconSize = this.nodeSize\n\n // set width\n this.width = 540 - this.margin.right - this.margin.left\n this.tree = d3Tree()\n .nodeSize([dx, dy])\n .separation((a, b) => (a.parent == b.parent ? 1.75 : 2.5))\n\n // clear div\n let div = d3Select(this.$el).select('.individual-tree')\n div.selectAll('svg').remove()\n\n // create svg\n this.svg = div\n .append('svg')\n .attr('width', this.width)\n .attr('height', dx)\n .attr('viewBox', [-this.margin.left, -this.margin.top, this.width, dx])\n .style('font', '10px sans-serif')\n .style('user-select', 'none')\n\n // create filters\n this.svg\n .append('svg:filter')\n .attr('id', 'invertColor')\n .append('feColorMatrix')\n .attr('in', 'SourceGraphic')\n .attr('type', 'matrix')\n .attr('values', '-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0')\n\n // create image definitions\n const defs = this.svg.append('svg:defs')\n Object.keys(this.treeIcons).forEach(model => {\n const pattern = defs\n .append('svg:pattern')\n .attr('id', `icon-${model}`)\n .attr('width', iconSize)\n .attr('height', iconSize)\n .attr('patternUnits', 'objectBoundingBox')\n\n pattern\n .append('rect')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'var(--v-primary-base)')\n\n pattern\n .append('svg:image')\n .attr('xlink:href', this.treeIcons[model])\n .attr('width', iconSize)\n .attr('height', iconSize)\n .attr('x', iconSize / 2)\n .attr('y', iconSize / 2)\n .attr('filter', 'url(#invertColor)')\n })\n\n // create links\n this.gLink = this.svg\n .append('g')\n .attr('fill', 'none')\n .attr('stroke', '#555')\n .attr('stroke-opacity', 0.4)\n .attr('stroke-width', 1.5)\n\n // create tooltip\n this.tooltip = d3Select('body')\n .append('div')\n .style('position', 'absolute')\n .style('z-index', '9999')\n .style('visibility', 'hidden')\n\n // create nodes\n this.gNode = this.svg.append('g')\n\n // build root\n this.root = d3Hierarchy(this.data, d => d.children)\n this.root.x0 = dy\n this.root.y0 = 0\n this.root.descendants().forEach((d, i) => {\n d.id = i\n d.collapsed = false\n d._children = d.children\n\n // collapse samples with too many experiments\n if (d.depth !== 0 && d.children ? d.children.length > 10 : false) {\n d.children = null\n d.collapsed = true\n }\n\n // by default hide tree if too many samples\n if (d.depth === 0 && d.children && d.children.length > 10) {\n this.showFullHeight = false\n this.isBigTree = true\n }\n })\n\n this.update(this.root)\n },\n async fetchData() {\n if (this.individual) {\n this.loading = true\n let individual = await fetchIndividualTree(this.individual)\n this.species = individual.species\n\n // Format Individual Tree\n let individualNode = {}\n individualNode.id = individual.system_id\n individualNode.uuid = individual.uuid\n individualNode.name = individual.system_id\n individualNode.parent = null\n individualNode.individual = individual\n individualNode.class = 'individual'\n if (individual.species === 'MOUSE') {\n individualNode.img = 'mouse'\n } else if (individual.species === 'HUMAN') {\n if (individual.gender === 'FEMALE') {\n individualNode.img = 'female'\n } else {\n individualNode.img = 'male'\n }\n } else {\n individualNode.img = 'alien'\n }\n individualNode.children = individual.sample_set.map(sample => {\n // Samples Children\n let sampleNode = {}\n sampleNode.id = sample.system_id\n sampleNode.uuid = sample.uuid\n sampleNode.name = sample.system_id.split('_')\n sampleNode.name = sampleNode.name[sampleNode.name.length - 1]\n sampleNode.parent = individual.system_id\n sampleNode.sample = sample\n sampleNode.individual = individual\n sampleNode.class = 'sample'\n\n if (sample.category === 'TUMOR') {\n sampleNode.img = 'tumor'\n } else {\n sampleNode.img = 'normal'\n }\n\n let aliquots_ids = [\n ...new Set(sample.experiment_set.map(e => e.aliquot_id))\n ]\n\n sampleNode.children = aliquots_ids\n .map(aliquot_id => {\n // Aliquot children\n let aliquotNode = {}\n aliquotNode.aliquot_id = aliquot_id\n aliquotNode.name = ''\n aliquotNode.parent = sample.system_id\n aliquotNode.sample = sample\n aliquotNode.sampleNode = sampleNode\n aliquotNode.individual = individual\n aliquotNode.class = 'aliquot'\n aliquotNode.img = 'aliquot'\n aliquotNode.children = []\n\n sample.experiment_set.map(experiment => {\n // Experiment Children\n if (experiment.aliquot_id === aliquot_id) {\n let experimentNode = {}\n experimentNode.parent = sample.system_id\n experimentNode.sample = sample\n experimentNode.individual = individual\n experimentNode.aliquot_id = experiment.aliquot_id\n experimentNode.id = experiment.system_id\n experimentNode.uuid = experiment.uuid\n experimentNode.class = 'experiment'\n experimentNode.experiment = experiment\n\n let name = experiment.system_id.split('_')\n experimentNode.name = name[name.length - 1]\n\n if (experiment.custom_fields.is_pdx) {\n experimentNode.img = 'mouse'\n } else {\n if (experiment.technique.category === 'IMG') {\n experimentNode.img = 'image'\n } else if (experiment.technique.category === 'RNA') {\n experimentNode.img = 'rna'\n } else if (experiment.technique.category === 'DNA') {\n experimentNode.img = 'dna'\n } else {\n experimentNode.img = 'dna'\n }\n }\n\n // legacy leukgen ID\n if (experiment.system_id.split('-').length === 7) {\n aliquotNode.name = experiment.system_id.split('-')[4]\n experimentNode.name = experiment.system_id\n .split('-')\n .slice(5, 7)\n .join('-')\n } else {\n aliquotNode.name = experiment.system_id.split('_')\n aliquotNode.name = parseInt(\n aliquotNode.name[aliquotNode.name.length - 2]\n )\n }\n aliquotNode.children.push(experimentNode)\n }\n })\n return aliquotNode\n })\n .sort((a, b) => a.name - b.name)\n return sampleNode\n })\n\n this.data = individualNode\n this.dataNodes = individualNode.children.reduce(\n (totalNodes, nodeInChildren) => {\n return totalNodes + nodeInChildren.children.length\n },\n 0\n )\n\n this.buildTree()\n this.loading = false\n }\n },\n update(source) {\n const duration = d3Event && d3Event.altKey ? 2500 : 250\n const nodes = this.root.descendants().reverse()\n const links = this.root.links()\n\n // Compute the new tree layout.\n this.tree(this.root)\n\n let left = this.root\n let right = this.root\n this.root.eachBefore(node => {\n if (node.x < left.x) left = node\n if (node.x > right.x) right = node\n })\n\n const height = right.x - left.x + this.margin.top + this.margin.bottom\n\n this.svg\n .transition()\n .duration(duration)\n .attr('height', height)\n .attr('viewBox', [\n -this.margin.left,\n left.x - this.margin.top,\n this.width,\n height\n ])\n .tween(\n 'resize',\n window.ResizeObserver ? null : () => () => this.svg.dispatch('toggle')\n )\n\n // Normalize for fixed-depth.\n nodes.forEach(d => {\n d.y = {\n individual: 0,\n sample: 150,\n aliquot: 225,\n experiment: 300\n }[d.data.class]\n })\n\n // ****************** Nodes section ***************************\n\n // Update the nodes...\n let node = this.gNode.selectAll('g').data(nodes, d => d.id)\n\n // Enter any new modes at the parent's previous position.\n let nodeEnter = node\n .enter()\n .append('g')\n .attr('class', d => `node ${d.data.class}`)\n .attr('transform', () => `translate(${source.y0},${source.x0})`)\n\n const circles = nodeEnter\n .append('circle')\n .attr('cursor', d => (d.data.class !== 'aliquot' ? 'pointer' : null))\n .attr('class', 'node shades--text')\n\n circles.style('fill', d =>\n this.treeIcons[d.data.img] ? `url(#icon-${d.data.img})` : ''\n )\n\n nodeEnter\n .on('click', this.changeModel)\n // tooltip, see https://stackoverflow.com/questions/10805184\n .on('mouseover', d => {\n if (d.data.class === 'aliquot' && d.parent.children.length < 2) return\n\n let leftPaddings = { experiment: 300, individual: 120, sample: 200 }\n this.tooltip\n .html(this.getTooltip(d))\n .style('visibility', 'visible')\n .attr('transform', `translate(${d.y},${d.x})`)\n .style('top', `${d3Event.pageY + 20}px`)\n .style('left', `${d3Event.pageX - leftPaddings[d.data.class]}px`)\n })\n .on('mouseout', () => this.tooltip.style('visibility', 'hidden'))\n\n // Add labels for the nodes\n nodeEnter\n .append('text')\n .on('click', this.onTextClick)\n .attr('dy', '.35em')\n .attr('x', -13)\n .attr('text-anchor', d => (d.children || d._children ? 'end' : 'end'))\n .text(d =>\n d.data.class === 'aliquot' && d.parent.children.length < 2\n ? ''\n : d.data.name\n )\n\n // Add collapse text to indicate node can be opened\n nodeEnter\n .append('text')\n .attr('dy', 0)\n .attr('x', 26)\n .text('...')\n .attr('class', 'collapse-text')\n\n // UPDATE\n let nodeUpdate = nodeEnter.merge(node)\n\n // Transition to the proper position for the node\n nodeUpdate\n .transition()\n .duration(this.duration)\n .attr('transform', d => `translate(${d.y},${d.x})`)\n\n // Update the node attributes and style\n nodeUpdate\n .select('.node')\n .attr('r', d => (d.data.class !== 'aliquot' ? this.nodeSize : 5))\n .attr('cx', this.nodeSize / 2)\n .attr('cy', 0)\n .attr('data-intercom-target', d => `tree-node-circle-${d.data.id}`)\n .attr('fill', d =>\n d._children && !d.children ? 'gray' : 'var(--v-primary-base)'\n )\n .attr('opacity', d =>\n d.data.class === 'aliquot' && d.parent.children.length < 2 ? 0 : 1\n )\n .style('stroke', d => {\n if (\n d.data.id === this.currentModel ||\n d.data.uuid === this.currentModel\n ) {\n this.currentNode = d\n if (!this.skipToScrollNode) {\n this.scrollToCurrentNode()\n }\n this.skipToScrollNode = false\n return 'var(--v-secondary-base)'\n }\n return 'transparent'\n })\n\n // Only show dots for collapsed and collapsible nodes\n nodeUpdate\n .select('text.collapse-text')\n .attr('visibility', d =>\n d.collapsed && d._children ? 'visible' : 'hidden'\n )\n\n // Remove any exiting nodes\n let nodeExit = node\n .exit()\n .transition()\n .duration(this.duration)\n .attr('transform', `translate(${source.y},${source.x})`)\n .remove()\n\n // On exit reduce the node circles size to 0\n nodeExit.select('.node').attr('r', 1e-6)\n\n // On exit reduce the opacity of text labels\n nodeExit.select('text').style('fill-opacity', 1e-6)\n\n // ================ links section ================\n\n // Update the links\n let link = this.gLink.selectAll('path.link').data(links, d => d.id)\n\n // Enter any new links at the parent's previous position.\n let linkEnter = link\n .enter()\n .insert('path', 'g')\n .attr('class', 'link')\n\n // UPDATE\n let linkUpdate = linkEnter.merge(link)\n\n // Transition back to the parent element position\n linkUpdate\n .transition()\n .duration(this.duration)\n .attr('d', this.diagonal)\n\n // Remove any exiting links\n link\n .exit()\n .transition()\n .duration(this.duration)\n .remove()\n\n // Store the old positions for transition.\n nodes.forEach(d => {\n d.x0 = d.x\n d.y0 = d.y\n })\n\n this.$emit('update-size')\n },\n onTextClick(d) {\n this.collapseBranch(d)\n if (!d._children && d.data.id) {\n this.$copyText(d.data.id).then(\n () => {\n this.$store.dispatch(SHOW_ALERT, {\n message: 'Copied System ID to clipboard!'\n })\n },\n () => {\n this.$store.dispatch(SHOW_ALERT, {\n error: 'System ID could not be copied to clipboard'\n })\n }\n )\n }\n },\n collapseBranch(d) {\n d.children = d.children ? null : d._children\n d.collapsed = !d.collapsed\n this.update(d)\n },\n changeModel(d) {\n if (d.data.id) {\n this.skipToScrollNode = true // don't scroll to node when click\n\n // Track individual tree usage\n window.analytics.track('Browsed Individual Tree', {\n model: d.data.class,\n record: d.data.id\n })\n\n this.$store.dispatch(SHOW_PANEL, {\n bioModel: d.data.id\n })\n }\n },\n scrollToCurrentNode() {\n this.$nextTick(() => {\n if (!this.showFullHeight)\n setTimeout(() => {\n document.getElementById('tree-div').scrollTop =\n this.currentNode.x0 + 395 // 395 is a function of the max height\n }, 100) // this delay was determined kind of experimentally\n })\n },\n getTooltip(d) {\n const keyValue = (key, verboseName) => {\n let value = this.$get(d.data, key, null)\n return value === null\n ? ''\n : `\n <div class=\"layout row mb-1\" style=\"max-width: 100%\"\">\n <div class=\"flex xs5\" style=\"width: 100%\">${verboseName}</div>\n <div class=\"flex xs7\" style=\"width: 100%\"><b>${value}</b></div>\n </div>\n `\n }\n return `\n <div class=\"v-tooltip__content\" style=\"width: 350px;\">\n ${keyValue('experiment.system_id', 'System ID')}\n ${keyValue('experiment.identifier', 'Experiment ID')}\n ${keyValue('aliquot_id', 'Aliquot ID')}\n ${keyValue('sample.identifier', 'Sample ID')}\n ${keyValue('individual.identifier', 'Individual ID')}\n ${keyValue('experiment.technique.method', 'Method')}\n ${keyValue('experiment.technique.name', 'Technique Name')}\n ${keyValue('sample.disease.acronym', 'Disease')}\n ${keyValue('individual.species', 'Species')}\n ${keyValue('individual.center.acronym', 'Center')}\n </div>\n `\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.node-tooltip {\n background: rgba($color: #000000, $alpha: 0.8);\n}\n.individual-tree-div {\n overflow-x: scroll;\n margin: auto;\n .node {\n stroke-width: 3px;\n text {\n font-size: 14px;\n font-weight: 300;\n fill: black !important;\n cursor: pointer;\n &.collapse-text {\n font-size: 20px;\n font-weight: 200;\n cursor: default;\n }\n }\n &.experiment text {\n cursor: default;\n }\n }\n .link {\n fill: none;\n stroke-width: 1.5px;\n stroke: #aaa;\n }\n}\n</style>\n"]
|
|
304170
|
+
sourcesContent: ["<template>\n <v-card\n flat\n class=\"isabl-base-card\"\n data-test=\"biomodel-tree\"\n >\n <base-section-title\n :show-more=\"showTree\"\n @toggle-show-more=\"showTree = !showTree\"\n >\n <template v-slot:title>Samples Tree</template>\n <template v-slot:actions>\n <div>\n <v-btn\n v-if=\"isBigTree\"\n class=\"table-action-btn pull-right ma-0\"\n fab\n outlined\n color=\"primary\"\n @click=\"\n showFullHeight = !showFullHeight\n scrollToCurrentNode()\n \"\n >\n <v-icon color=\"primary\">{{ showFullHeight ? 'expand_less' : 'expand_more' }}</v-icon>\n </v-btn>\n </div>\n </template>\n </base-section-title>\n\n <!-- Graph -->\n <v-row\n v-show=\"showTree\"\n id=\"tree-div\"\n :style=\"showFullHeight ? '' : 'max-height: 300px;'\"\n class=\"individual-tree-div ma-0\"\n >\n <v-col class=\"individual-tree text-center pa-0 ma-0\" />\n </v-row>\n\n </v-card>\n</template>\n\n<script>\n/*\n Vue implementation of D3 Tree from:\n https://beta.observablehq.com/@asktree/interactive-tree-diagram-d3v4-v5\n*/\n\nimport { fetchIndividualTree } from '@/utils/api'\nimport { mapGetters } from 'vuex'\nimport { SHOW_ALERT } from '@/store/actions/alert'\nimport { SHOW_PANEL } from '@/store/actions/panels'\nimport BasePanel from '@/components/base/BasePanel.vue'\nimport BaseSectionTitle from '@/components/base/BaseSectionTitle'\nimport {\n tree as d3Tree,\n event as d3Event,\n select as d3Select,\n hierarchy as d3Hierarchy,\n linkHorizontal as d3linkHorizontal\n} from 'd3'\n\nexport default {\n name: 'BioModelTree',\n components: {\n BasePanel,\n BaseSectionTitle\n },\n data() {\n const { treeIcons } = this.$settings\n return {\n loading: false,\n duration: 0,\n data: null,\n root: null,\n tree: null,\n graph: null,\n species: null,\n dataNodes: null,\n showTree: true,\n isBigTree: false,\n showFullHeight: true,\n skipToScrollNode: false,\n currentNode: null,\n nodeSize: Object.keys(treeIcons).length ? 15 : 5,\n margin: { top: 20, bottom: 20, right: 0, left: 105 },\n diagonal: d3linkHorizontal()\n .x(d => d.y)\n .y(d => d.x),\n treeIcons\n }\n },\n computed: {\n ...mapGetters({\n currentModel: 'bioModelId',\n individual: 'individualId'\n })\n },\n watch: {\n individual(value, oldValue) {\n if (value !== oldValue) {\n this.fetchData()\n }\n },\n currentModel() {\n this.data && this.update(this.data)\n }\n },\n mounted() {\n this.fetchData()\n },\n methods: {\n buildTree() {\n let dx = Object.keys(this.treeIcons).length ? this.nodeSize + 4 : 18\n let dy = 0\n let iconSize = this.nodeSize\n\n // set width\n this.width = 540 - this.margin.right - this.margin.left\n this.tree = d3Tree()\n .nodeSize([dx, dy])\n .separation((a, b) => (a.parent == b.parent ? 1.75 : 2.5))\n\n // clear div\n let div = d3Select(this.$el).select('.individual-tree')\n div.selectAll('svg').remove()\n\n // create svg\n this.svg = div\n .append('svg')\n .attr('width', this.width)\n .attr('height', dx)\n .attr('viewBox', [-this.margin.left, -this.margin.top, this.width, dx])\n .style('font', '10px sans-serif')\n .style('user-select', 'none')\n\n // create filters\n this.svg\n .append('svg:filter')\n .attr('id', 'invertColor')\n .append('feColorMatrix')\n .attr('in', 'SourceGraphic')\n .attr('type', 'matrix')\n .attr('values', '-1 0 0 0 1 0 -1 0 0 1 0 0 -1 0 1 0 0 0 1 0')\n\n // create image definitions\n const defs = this.svg.append('svg:defs')\n Object.keys(this.treeIcons).forEach(model => {\n const pattern = defs\n .append('svg:pattern')\n .attr('id', `icon-${model}`)\n .attr('width', iconSize)\n .attr('height', iconSize)\n .attr('patternUnits', 'objectBoundingBox')\n\n pattern\n .append('rect')\n .attr('width', '100%')\n .attr('height', '100%')\n .attr('fill', 'var(--v-primary-base)')\n\n pattern\n .append('svg:image')\n .attr('xlink:href', this.treeIcons[model])\n .attr('width', iconSize)\n .attr('height', iconSize)\n .attr('x', iconSize / 2)\n .attr('y', iconSize / 2)\n .attr('filter', 'url(#invertColor)')\n })\n\n // create links\n this.gLink = this.svg\n .append('g')\n .attr('fill', 'none')\n .attr('stroke', '#555')\n .attr('stroke-opacity', 0.4)\n .attr('stroke-width', 1.5)\n\n // create tooltip\n this.tooltip = d3Select('body')\n .append('div')\n .style('position', 'absolute')\n .style('z-index', '9999')\n .style('visibility', 'hidden')\n\n // create nodes\n this.gNode = this.svg.append('g')\n\n // build root\n this.root = d3Hierarchy(this.data, d => d.children)\n this.root.x0 = dy\n this.root.y0 = 0\n this.root.descendants().forEach((d, i) => {\n d.id = i\n d.collapsed = false\n d._children = d.children\n\n // collapse samples with too many experiments\n if (d.depth !== 0 && d.children ? d.children.length > 10 : false) {\n d.children = null\n d.collapsed = true\n }\n\n // by default hide tree if too many samples\n if (d.depth === 0 && d.children && d.children.length > 10) {\n this.showFullHeight = false\n this.isBigTree = true\n }\n })\n\n this.update(this.root)\n },\n async fetchData() {\n if (this.individual) {\n this.loading = true\n let individual = await fetchIndividualTree(this.individual)\n this.species = individual.species\n\n // Format Individual Tree\n let individualNode = {}\n individualNode.id = individual.system_id\n individualNode.uuid = individual.uuid\n individualNode.name = individual.system_id\n individualNode.parent = null\n individualNode.individual = individual\n individualNode.class = 'individual'\n if (individual.species === 'MOUSE') {\n individualNode.img = 'mouse'\n } else if (individual.species === 'HUMAN') {\n if (individual.gender === 'FEMALE') {\n individualNode.img = 'female'\n } else {\n individualNode.img = 'male'\n }\n } else {\n individualNode.img = 'alien'\n }\n individualNode.children = individual.sample_set.map(sample => {\n // Samples Children\n let sampleNode = {}\n sampleNode.id = sample.system_id\n sampleNode.uuid = sample.uuid\n sampleNode.name = sample.system_id.split('_')\n sampleNode.name = sampleNode.name[sampleNode.name.length - 1]\n sampleNode.parent = individual.system_id\n sampleNode.sample = sample\n sampleNode.individual = individual\n sampleNode.class = 'sample'\n\n if (sample.category === 'TUMOR') {\n sampleNode.img = 'tumor'\n } else {\n sampleNode.img = 'normal'\n }\n\n let aliquots_ids = [\n ...new Set(sample.experiment_set.map(e => e.aliquot_id))\n ]\n\n sampleNode.children = aliquots_ids\n .map(aliquot_id => {\n // Aliquot children\n let aliquotNode = {}\n aliquotNode.aliquot_id = aliquot_id\n aliquotNode.name = ''\n aliquotNode.parent = sample.system_id\n aliquotNode.sample = sample\n aliquotNode.sampleNode = sampleNode\n aliquotNode.individual = individual\n aliquotNode.class = 'aliquot'\n aliquotNode.img = 'aliquot'\n aliquotNode.children = []\n\n sample.experiment_set.map(experiment => {\n // Experiment Children\n if (experiment.aliquot_id === aliquot_id) {\n let experimentNode = {}\n experimentNode.parent = sample.system_id\n experimentNode.sample = sample\n experimentNode.individual = individual\n experimentNode.aliquot_id = experiment.aliquot_id\n experimentNode.id = experiment.system_id\n experimentNode.uuid = experiment.uuid\n experimentNode.class = 'experiment'\n experimentNode.experiment = experiment\n\n let name = experiment.system_id.split('_')\n experimentNode.name = name[name.length - 1]\n\n if (experiment.custom_fields.is_pdx) {\n experimentNode.img = 'mouse'\n } else {\n if (experiment.technique.category === 'IMG') {\n experimentNode.img = 'image'\n } else if (experiment.technique.category === 'RNA') {\n experimentNode.img = 'rna'\n } else if (experiment.technique.category === 'DNA') {\n experimentNode.img = 'dna'\n } else {\n experimentNode.img = 'dna'\n }\n }\n\n // legacy leukgen ID\n if (experiment.system_id.split('-').length === 7) {\n aliquotNode.name = experiment.system_id.split('-')[4]\n experimentNode.name = experiment.system_id\n .split('-')\n .slice(5, 7)\n .join('-')\n } else {\n aliquotNode.name = experiment.system_id.split('_')\n aliquotNode.name = parseInt(\n aliquotNode.name[aliquotNode.name.length - 2]\n )\n }\n aliquotNode.children.push(experimentNode)\n }\n })\n return aliquotNode\n })\n .sort((a, b) => a.name - b.name)\n return sampleNode\n })\n\n this.data = individualNode\n this.dataNodes = individualNode.children.reduce(\n (totalNodes, nodeInChildren) => {\n return totalNodes + nodeInChildren.children.length\n },\n 0\n )\n\n this.buildTree()\n this.loading = false\n }\n },\n update(source) {\n const duration = d3Event && d3Event.altKey ? 2500 : 250\n const nodes = this.root.descendants().reverse()\n const links = this.root.links()\n\n // Compute the new tree layout.\n this.tree(this.root)\n\n let left = this.root\n let right = this.root\n this.root.eachBefore(node => {\n if (node.x < left.x) left = node\n if (node.x > right.x) right = node\n })\n\n const height = right.x - left.x + this.margin.top + this.margin.bottom\n\n this.svg\n .transition()\n .duration(duration)\n .attr('height', height)\n .attr('viewBox', [\n -this.margin.left,\n left.x - this.margin.top,\n this.width,\n height\n ])\n .tween(\n 'resize',\n window.ResizeObserver ? null : () => () => this.svg.dispatch('toggle')\n )\n\n // Normalize for fixed-depth.\n nodes.forEach(d => {\n d.y = {\n individual: 0,\n sample: 150,\n aliquot: 225,\n experiment: 300\n }[d.data.class]\n })\n\n // ****************** Nodes section ***************************\n\n // Update the nodes...\n let node = this.gNode.selectAll('g').data(nodes, d => d.id)\n\n // Enter any new modes at the parent's previous position.\n let nodeEnter = node\n .enter()\n .append('g')\n .attr('class', d => `node ${d.data.class}`)\n .attr('transform', () => `translate(${source.y0},${source.x0})`)\n\n const circles = nodeEnter\n .append('circle')\n .attr('cursor', d => (d.data.class !== 'aliquot' ? 'pointer' : null))\n .attr('class', 'node shades--text')\n\n circles.style('fill', d =>\n this.treeIcons[d.data.img] ? `url(#icon-${d.data.img})` : ''\n )\n\n nodeEnter\n .on('click', this.changeModel)\n // tooltip, see https://stackoverflow.com/questions/10805184\n .on('mouseover', d => {\n if (d.data.class === 'aliquot' && d.parent.children.length < 2) return\n\n let leftPaddings = { experiment: 300, individual: 120, sample: 200 }\n this.tooltip\n .html(this.getTooltip(d))\n .style('visibility', 'visible')\n .attr('transform', `translate(${d.y},${d.x})`)\n .style('top', `${d3Event.pageY + 20}px`)\n .style('left', `${d3Event.pageX - leftPaddings[d.data.class]}px`)\n })\n .on('mouseout', () => this.tooltip.style('visibility', 'hidden'))\n\n // Add labels for the nodes\n nodeEnter\n .append('text')\n .on('click', this.onTextClick)\n .attr('dy', '.35em')\n .attr('x', -13)\n .attr('text-anchor', d => (d.children || d._children ? 'end' : 'end'))\n .text(d =>\n d.data.class === 'aliquot' && d.parent.children.length < 2\n ? ''\n : d.data.name\n )\n\n // Add collapse text to indicate node can be opened\n nodeEnter\n .append('text')\n .attr('dy', 0)\n .attr('x', 26)\n .text('...')\n .attr('class', 'collapse-text')\n\n // UPDATE\n let nodeUpdate = nodeEnter.merge(node)\n\n // Transition to the proper position for the node\n nodeUpdate\n .transition()\n .duration(this.duration)\n .attr('transform', d => `translate(${d.y},${d.x})`)\n\n // Update the node attributes and style\n nodeUpdate\n .select('.node')\n .attr('r', d => (d.data.class !== 'aliquot' ? this.nodeSize : 5))\n .attr('cx', this.nodeSize / 2)\n .attr('cy', 0)\n .attr('data-intercom-target', d => `tree-node-circle-${d.data.id}`)\n .attr('fill', d =>\n d._children && !d.children ? 'gray' : 'var(--v-primary-base)'\n )\n .attr('opacity', d =>\n d.data.class === 'aliquot' && d.parent.children.length < 2 ? 0 : 1\n )\n .style('stroke', d => {\n if (\n d.data.id === this.currentModel ||\n d.data.uuid === this.currentModel\n ) {\n this.currentNode = d\n if (!this.skipToScrollNode) {\n this.scrollToCurrentNode()\n }\n this.skipToScrollNode = false\n return 'var(--v-secondary-base)'\n }\n return 'transparent'\n })\n\n // Only show dots for collapsed and collapsible nodes\n nodeUpdate\n .select('text.collapse-text')\n .attr('visibility', d =>\n d.collapsed && d._children ? 'visible' : 'hidden'\n )\n\n // Remove any exiting nodes\n let nodeExit = node\n .exit()\n .transition()\n .duration(this.duration)\n .attr('transform', `translate(${source.y},${source.x})`)\n .remove()\n\n // On exit reduce the node circles size to 0\n nodeExit.select('.node').attr('r', 1e-6)\n\n // On exit reduce the opacity of text labels\n nodeExit.select('text').style('fill-opacity', 1e-6)\n\n // ================ links section ================\n\n // Update the links\n let link = this.gLink.selectAll('path.link').data(links, d => d.id)\n\n // Enter any new links at the parent's previous position.\n let linkEnter = link\n .enter()\n .insert('path', 'g')\n .attr('class', 'link')\n\n // UPDATE\n let linkUpdate = linkEnter.merge(link)\n\n // Transition back to the parent element position\n linkUpdate\n .transition()\n .duration(this.duration)\n .attr('d', this.diagonal)\n\n // Remove any exiting links\n link\n .exit()\n .transition()\n .duration(this.duration)\n .remove()\n\n // Store the old positions for transition.\n nodes.forEach(d => {\n d.x0 = d.x\n d.y0 = d.y\n })\n\n this.$emit('update-size')\n },\n onTextClick(d) {\n this.collapseBranch(d)\n if (!d._children && d.data.id) {\n this.$copyText(d.data.id).then(\n () => {\n this.$store.dispatch(SHOW_ALERT, {\n message: 'Copied System ID to clipboard!'\n })\n },\n () => {\n this.$store.dispatch(SHOW_ALERT, {\n error: 'System ID could not be copied to clipboard'\n })\n }\n )\n }\n },\n collapseBranch(d) {\n d.children = d.children ? null : d._children\n d.collapsed = !d.collapsed\n this.update(d)\n },\n changeModel(d) {\n if (d.data.id) {\n this.skipToScrollNode = true // don't scroll to node when click\n\n // Track individual tree usage\n window.analytics.track('Browsed Individual Tree', {\n model: d.data.class,\n record: d.data.id\n })\n\n this.$store.dispatch(SHOW_PANEL, {\n bioModel: d.data.id\n })\n }\n },\n scrollToCurrentNode() {\n this.$nextTick(() => {\n if (!this.showFullHeight)\n setTimeout(() => {\n document.getElementById('tree-div').scrollTop =\n this.currentNode.x0 + 395 // 395 is a function of the max height\n }, 100) // this delay was determined kind of experimentally\n })\n },\n getTooltip(d) {\n const keyValue = (key, verboseName) => {\n let value = this.$get(d.data, key, null)\n return value === null\n ? ''\n : `\n <div class=\"layout row ma-3\" style=\"max-width: 100%\"\">\n <div class=\"flex xs5\" style=\"width: 100%\">${verboseName}</div>\n <div class=\"flex xs7\" style=\"width: 100%\"><b>${value}</b></div>\n </div>\n `\n }\n return `\n <div class=\"v-tooltip__content tree-tooltip\" style=\"min-width: 350px;\">\n ${keyValue('experiment.system_id', 'System ID')}\n ${keyValue('experiment.identifier', 'Experiment ID')}\n ${keyValue('aliquot_id', 'Aliquot ID')}\n ${keyValue('sample.identifier', 'Sample ID')}\n ${keyValue('individual.identifier', 'Individual ID')}\n ${keyValue('experiment.technique.method', 'Method')}\n ${keyValue('experiment.technique.name', 'Technique Name')}\n ${keyValue('sample.disease.acronym', 'Disease')}\n ${keyValue('individual.species', 'Species')}\n ${keyValue('individual.center.acronym', 'Center')}\n </div>\n `\n }\n }\n}\n</script>\n\n<style lang=\"scss\">\n.tree-tooltip.v-tooltip__content {\n color: white;\n padding: 20px;\n opacity: 1;\n font-size: 12px;\n overflow: hidden;\n}\n.node-tooltip {\n background: rgba($color: #000000, $alpha: 0.8);\n}\n.individual-tree-div {\n overflow-x: scroll;\n margin: auto;\n .node {\n stroke-width: 3px;\n text {\n font-size: 14px;\n font-weight: 300;\n fill: black !important;\n cursor: pointer;\n &.collapse-text {\n font-size: 20px;\n font-weight: 200;\n cursor: default;\n }\n }\n &.experiment text {\n cursor: default;\n }\n }\n .link {\n fill: none;\n stroke-width: 1.5px;\n stroke: #aaa;\n }\n}\n</style>\n"]
|
|
303777
304171
|
},
|
|
303778
304172
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
303779
|
-
hash: "
|
|
304173
|
+
hash: "1e089864fe6792f2d8555180af07f2e5d7f516a5"
|
|
303780
304174
|
};
|
|
303781
304175
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
303782
304176
|
|
|
@@ -304622,11 +305016,11 @@ function BioModelTreevue_type_script_lang_js_defineProperty(obj, key, value) { i
|
|
|
304622
305016
|
cov_2hmzqbstvs.f[50]++;
|
|
304623
305017
|
var value = (cov_2hmzqbstvs.s[204]++, _this5.$get(d.data, key, null));
|
|
304624
305018
|
cov_2hmzqbstvs.s[205]++;
|
|
304625
|
-
return value === null ? (cov_2hmzqbstvs.b[49][0]++, '') : (cov_2hmzqbstvs.b[49][1]++, "\n <div class=\"layout row
|
|
305019
|
+
return value === null ? (cov_2hmzqbstvs.b[49][0]++, '') : (cov_2hmzqbstvs.b[49][1]++, "\n <div class=\"layout row ma-3\" style=\"max-width: 100%\"\">\n <div class=\"flex xs5\" style=\"width: 100%\">".concat(verboseName, "</div>\n <div class=\"flex xs7\" style=\"width: 100%\"><b>").concat(value, "</b></div>\n </div>\n "));
|
|
304626
305020
|
};
|
|
304627
305021
|
|
|
304628
305022
|
cov_2hmzqbstvs.s[206]++;
|
|
304629
|
-
return "\n <div class=\"v-tooltip__content\" style=\"width: 350px;\">\n ".concat(keyValue('experiment.system_id', 'System ID'), "\n ").concat(keyValue('experiment.identifier', 'Experiment ID'), "\n ").concat(keyValue('aliquot_id', 'Aliquot ID'), "\n ").concat(keyValue('sample.identifier', 'Sample ID'), "\n ").concat(keyValue('individual.identifier', 'Individual ID'), "\n ").concat(keyValue('experiment.technique.method', 'Method'), "\n ").concat(keyValue('experiment.technique.name', 'Technique Name'), "\n ").concat(keyValue('sample.disease.acronym', 'Disease'), "\n ").concat(keyValue('individual.species', 'Species'), "\n ").concat(keyValue('individual.center.acronym', 'Center'), "\n </div>\n ");
|
|
305023
|
+
return "\n <div class=\"v-tooltip__content tree-tooltip\" style=\"min-width: 350px;\">\n ".concat(keyValue('experiment.system_id', 'System ID'), "\n ").concat(keyValue('experiment.identifier', 'Experiment ID'), "\n ").concat(keyValue('aliquot_id', 'Aliquot ID'), "\n ").concat(keyValue('sample.identifier', 'Sample ID'), "\n ").concat(keyValue('individual.identifier', 'Individual ID'), "\n ").concat(keyValue('experiment.technique.method', 'Method'), "\n ").concat(keyValue('experiment.technique.name', 'Technique Name'), "\n ").concat(keyValue('sample.disease.acronym', 'Disease'), "\n ").concat(keyValue('individual.species', 'Species'), "\n ").concat(keyValue('individual.center.acronym', 'Center'), "\n </div>\n ");
|
|
304630
305024
|
}
|
|
304631
305025
|
}
|
|
304632
305026
|
});
|
|
@@ -304646,8 +305040,8 @@ var BioModelTreevue_type_style_index_0_lang_scss_ = __webpack_require__("34ec");
|
|
|
304646
305040
|
|
|
304647
305041
|
var BioModelTree_component = normalizeComponent(
|
|
304648
305042
|
bioModels_BioModelTreevue_type_script_lang_js_,
|
|
304649
|
-
|
|
304650
|
-
|
|
305043
|
+
BioModelTreevue_type_template_id_2b110930_render,
|
|
305044
|
+
BioModelTreevue_type_template_id_2b110930_staticRenderFns,
|
|
304651
305045
|
false,
|
|
304652
305046
|
null,
|
|
304653
305047
|
null,
|