@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.common.js
CHANGED
|
@@ -1943,7 +1943,7 @@ exports = module.exports = __webpack_require__("2350")(false);
|
|
|
1943
1943
|
|
|
1944
1944
|
|
|
1945
1945
|
// module
|
|
1946
|
-
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}", ""]);
|
|
1946
|
+
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}", ""]);
|
|
1947
1947
|
|
|
1948
1948
|
// exports
|
|
1949
1949
|
|
|
@@ -91168,7 +91168,7 @@ module.exports = overArg;
|
|
|
91168
91168
|
/***/ "9224":
|
|
91169
91169
|
/***/ (function(module) {
|
|
91170
91170
|
|
|
91171
|
-
module.exports = JSON.parse("{\"name\":\"@papaemmelab/isabl-web\",\"version\":\"0.3.
|
|
91171
|
+
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\"}");
|
|
91172
91172
|
|
|
91173
91173
|
/***/ }),
|
|
91174
91174
|
|
|
@@ -222354,15 +222354,16 @@ var EditProfileModal_component = normalizeComponent(
|
|
|
222354
222354
|
)
|
|
222355
222355
|
|
|
222356
222356
|
/* harmony default export */ var EditProfileModal = (EditProfileModal_component.exports);
|
|
222357
|
-
// 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=
|
|
222358
|
-
var
|
|
222359
|
-
var
|
|
222357
|
+
// 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&
|
|
222358
|
+
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}])})}
|
|
222359
|
+
var NewProjectModalvue_type_template_id_58c607e8_staticRenderFns = []
|
|
222360
222360
|
|
|
222361
222361
|
|
|
222362
|
-
// CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=
|
|
222362
|
+
// CONCATENATED MODULE: ./src/components/projects/NewProjectModal.vue?vue&type=template&id=58c607e8&
|
|
222363
222363
|
|
|
222364
222364
|
// EXTERNAL MODULE: ./node_modules/lodash/has.js
|
|
222365
222365
|
var has = __webpack_require__("3852");
|
|
222366
|
+
var has_default = /*#__PURE__*/__webpack_require__.n(has);
|
|
222366
222367
|
|
|
222367
222368
|
// 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&
|
|
222368
222369
|
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){
|
|
@@ -224521,7 +224522,7 @@ var UserSearchInput_component = normalizeComponent(
|
|
|
224521
224522
|
// 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&
|
|
224522
224523
|
var cov_41uwsnrpn = function () {
|
|
224523
224524
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/projects/NewProjectModal.vue";
|
|
224524
|
-
var hash = "
|
|
224525
|
+
var hash = "880a7035d32da713e533258d2460ef2446ff3c8f";
|
|
224525
224526
|
var global = new Function("return this")();
|
|
224526
224527
|
var gcv = "__coverage__";
|
|
224527
224528
|
var coverageData = {
|
|
@@ -224553,247 +224554,367 @@ var cov_41uwsnrpn = function () {
|
|
|
224553
224554
|
column: 6
|
|
224554
224555
|
},
|
|
224555
224556
|
end: {
|
|
224556
|
-
line:
|
|
224557
|
+
line: 214,
|
|
224557
224558
|
column: 7
|
|
224558
224559
|
}
|
|
224559
224560
|
},
|
|
224560
224561
|
"3": {
|
|
224561
224562
|
start: {
|
|
224562
|
-
line:
|
|
224563
|
+
line: 209,
|
|
224563
224564
|
column: 8
|
|
224564
224565
|
},
|
|
224565
224566
|
end: {
|
|
224567
|
+
line: 211,
|
|
224568
|
+
column: 9
|
|
224569
|
+
}
|
|
224570
|
+
},
|
|
224571
|
+
"4": {
|
|
224572
|
+
start: {
|
|
224566
224573
|
line: 210,
|
|
224574
|
+
column: 10
|
|
224575
|
+
},
|
|
224576
|
+
end: {
|
|
224577
|
+
line: 210,
|
|
224578
|
+
column: 48
|
|
224579
|
+
}
|
|
224580
|
+
},
|
|
224581
|
+
"5": {
|
|
224582
|
+
start: {
|
|
224583
|
+
line: 212,
|
|
224584
|
+
column: 8
|
|
224585
|
+
},
|
|
224586
|
+
end: {
|
|
224587
|
+
line: 212,
|
|
224567
224588
|
column: 26
|
|
224568
224589
|
}
|
|
224569
224590
|
},
|
|
224570
|
-
"
|
|
224591
|
+
"6": {
|
|
224571
224592
|
start: {
|
|
224572
|
-
line:
|
|
224593
|
+
line: 213,
|
|
224573
224594
|
column: 8
|
|
224574
224595
|
},
|
|
224575
224596
|
end: {
|
|
224576
|
-
line:
|
|
224597
|
+
line: 213,
|
|
224577
224598
|
column: 24
|
|
224578
224599
|
}
|
|
224579
224600
|
},
|
|
224580
|
-
"
|
|
224601
|
+
"7": {
|
|
224581
224602
|
start: {
|
|
224582
|
-
line:
|
|
224603
|
+
line: 219,
|
|
224604
|
+
column: 4
|
|
224605
|
+
},
|
|
224606
|
+
end: {
|
|
224607
|
+
line: 227,
|
|
224608
|
+
column: 6
|
|
224609
|
+
}
|
|
224610
|
+
},
|
|
224611
|
+
"8": {
|
|
224612
|
+
start: {
|
|
224613
|
+
line: 220,
|
|
224583
224614
|
column: 6
|
|
224584
224615
|
},
|
|
224585
224616
|
end: {
|
|
224586
|
-
line:
|
|
224617
|
+
line: 226,
|
|
224587
224618
|
column: 7
|
|
224588
224619
|
}
|
|
224589
224620
|
},
|
|
224590
|
-
"
|
|
224621
|
+
"9": {
|
|
224591
224622
|
start: {
|
|
224592
|
-
line:
|
|
224623
|
+
line: 221,
|
|
224624
|
+
column: 8
|
|
224625
|
+
},
|
|
224626
|
+
end: {
|
|
224627
|
+
line: 221,
|
|
224628
|
+
column: 44
|
|
224629
|
+
}
|
|
224630
|
+
},
|
|
224631
|
+
"10": {
|
|
224632
|
+
start: {
|
|
224633
|
+
line: 222,
|
|
224634
|
+
column: 13
|
|
224635
|
+
},
|
|
224636
|
+
end: {
|
|
224637
|
+
line: 226,
|
|
224638
|
+
column: 7
|
|
224639
|
+
}
|
|
224640
|
+
},
|
|
224641
|
+
"11": {
|
|
224642
|
+
start: {
|
|
224643
|
+
line: 223,
|
|
224644
|
+
column: 8
|
|
224645
|
+
},
|
|
224646
|
+
end: {
|
|
224647
|
+
line: 223,
|
|
224648
|
+
column: 66
|
|
224649
|
+
}
|
|
224650
|
+
},
|
|
224651
|
+
"12": {
|
|
224652
|
+
start: {
|
|
224653
|
+
line: 224,
|
|
224654
|
+
column: 13
|
|
224655
|
+
},
|
|
224656
|
+
end: {
|
|
224657
|
+
line: 226,
|
|
224658
|
+
column: 7
|
|
224659
|
+
}
|
|
224660
|
+
},
|
|
224661
|
+
"13": {
|
|
224662
|
+
start: {
|
|
224663
|
+
line: 225,
|
|
224664
|
+
column: 8
|
|
224665
|
+
},
|
|
224666
|
+
end: {
|
|
224667
|
+
line: 225,
|
|
224668
|
+
column: 67
|
|
224669
|
+
}
|
|
224670
|
+
},
|
|
224671
|
+
"14": {
|
|
224672
|
+
start: {
|
|
224673
|
+
line: 231,
|
|
224674
|
+
column: 6
|
|
224675
|
+
},
|
|
224676
|
+
end: {
|
|
224677
|
+
line: 234,
|
|
224678
|
+
column: 7
|
|
224679
|
+
}
|
|
224680
|
+
},
|
|
224681
|
+
"15": {
|
|
224682
|
+
start: {
|
|
224683
|
+
line: 232,
|
|
224593
224684
|
column: 25
|
|
224594
224685
|
},
|
|
224595
224686
|
end: {
|
|
224596
|
-
line:
|
|
224687
|
+
line: 232,
|
|
224597
224688
|
column: 57
|
|
224598
224689
|
}
|
|
224599
224690
|
},
|
|
224600
|
-
"
|
|
224691
|
+
"16": {
|
|
224601
224692
|
start: {
|
|
224602
|
-
line:
|
|
224693
|
+
line: 233,
|
|
224603
224694
|
column: 8
|
|
224604
224695
|
},
|
|
224605
224696
|
end: {
|
|
224606
|
-
line:
|
|
224697
|
+
line: 233,
|
|
224607
224698
|
column: 38
|
|
224608
224699
|
}
|
|
224609
224700
|
},
|
|
224610
|
-
"
|
|
224701
|
+
"17": {
|
|
224611
224702
|
start: {
|
|
224612
|
-
line:
|
|
224703
|
+
line: 237,
|
|
224613
224704
|
column: 6
|
|
224614
224705
|
},
|
|
224615
224706
|
end: {
|
|
224616
|
-
line:
|
|
224707
|
+
line: 237,
|
|
224617
224708
|
column: 56
|
|
224618
224709
|
}
|
|
224619
224710
|
},
|
|
224620
|
-
"
|
|
224711
|
+
"18": {
|
|
224621
224712
|
start: {
|
|
224622
|
-
line:
|
|
224713
|
+
line: 238,
|
|
224623
224714
|
column: 6
|
|
224624
224715
|
},
|
|
224625
224716
|
end: {
|
|
224626
|
-
line:
|
|
224717
|
+
line: 238,
|
|
224627
224718
|
column: 44
|
|
224628
224719
|
}
|
|
224629
224720
|
},
|
|
224630
|
-
"
|
|
224721
|
+
"19": {
|
|
224631
224722
|
start: {
|
|
224632
|
-
line:
|
|
224723
|
+
line: 239,
|
|
224633
224724
|
column: 6
|
|
224634
224725
|
},
|
|
224635
224726
|
end: {
|
|
224636
|
-
line:
|
|
224727
|
+
line: 239,
|
|
224637
224728
|
column: 54
|
|
224638
224729
|
}
|
|
224639
224730
|
},
|
|
224640
|
-
"
|
|
224731
|
+
"20": {
|
|
224641
224732
|
start: {
|
|
224642
|
-
line:
|
|
224733
|
+
line: 242,
|
|
224734
|
+
column: 23
|
|
224735
|
+
},
|
|
224736
|
+
end: {
|
|
224737
|
+
line: 242,
|
|
224738
|
+
column: 27
|
|
224739
|
+
}
|
|
224740
|
+
},
|
|
224741
|
+
"21": {
|
|
224742
|
+
start: {
|
|
224743
|
+
line: 243,
|
|
224643
224744
|
column: 6
|
|
224644
224745
|
},
|
|
224645
224746
|
end: {
|
|
224646
|
-
line:
|
|
224747
|
+
line: 243,
|
|
224647
224748
|
column: 32
|
|
224648
224749
|
}
|
|
224649
224750
|
},
|
|
224650
|
-
"
|
|
224751
|
+
"22": {
|
|
224651
224752
|
start: {
|
|
224652
|
-
line:
|
|
224753
|
+
line: 244,
|
|
224653
224754
|
column: 6
|
|
224654
224755
|
},
|
|
224655
224756
|
end: {
|
|
224656
|
-
line:
|
|
224657
|
-
column:
|
|
224757
|
+
line: 244,
|
|
224758
|
+
column: 80
|
|
224658
224759
|
}
|
|
224659
224760
|
},
|
|
224660
|
-
"
|
|
224761
|
+
"23": {
|
|
224762
|
+
start: {
|
|
224763
|
+
line: 244,
|
|
224764
|
+
column: 45
|
|
224765
|
+
},
|
|
224766
|
+
end: {
|
|
224767
|
+
line: 244,
|
|
224768
|
+
column: 79
|
|
224769
|
+
}
|
|
224770
|
+
},
|
|
224771
|
+
"24": {
|
|
224661
224772
|
start: {
|
|
224662
224773
|
line: 247,
|
|
224663
224774
|
column: 6
|
|
224664
224775
|
},
|
|
224665
224776
|
end: {
|
|
224666
224777
|
line: 247,
|
|
224778
|
+
column: 22
|
|
224779
|
+
}
|
|
224780
|
+
},
|
|
224781
|
+
"25": {
|
|
224782
|
+
start: {
|
|
224783
|
+
line: 248,
|
|
224784
|
+
column: 6
|
|
224785
|
+
},
|
|
224786
|
+
end: {
|
|
224787
|
+
line: 248,
|
|
224667
224788
|
column: 31
|
|
224668
224789
|
}
|
|
224669
224790
|
},
|
|
224670
|
-
"
|
|
224791
|
+
"26": {
|
|
224671
224792
|
start: {
|
|
224672
|
-
line:
|
|
224793
|
+
line: 251,
|
|
224673
224794
|
column: 6
|
|
224674
224795
|
},
|
|
224675
224796
|
end: {
|
|
224676
|
-
line:
|
|
224797
|
+
line: 254,
|
|
224677
224798
|
column: 7
|
|
224678
224799
|
}
|
|
224679
224800
|
},
|
|
224680
|
-
"
|
|
224801
|
+
"27": {
|
|
224681
224802
|
start: {
|
|
224682
|
-
line:
|
|
224803
|
+
line: 257,
|
|
224683
224804
|
column: 6
|
|
224684
224805
|
},
|
|
224685
224806
|
end: {
|
|
224686
|
-
line:
|
|
224807
|
+
line: 257,
|
|
224687
224808
|
column: 32
|
|
224688
224809
|
}
|
|
224689
224810
|
},
|
|
224690
|
-
"
|
|
224811
|
+
"28": {
|
|
224691
224812
|
start: {
|
|
224692
|
-
line:
|
|
224813
|
+
line: 258,
|
|
224693
224814
|
column: 6
|
|
224694
224815
|
},
|
|
224695
224816
|
end: {
|
|
224696
|
-
line:
|
|
224817
|
+
line: 260,
|
|
224697
224818
|
column: 8
|
|
224698
224819
|
}
|
|
224699
224820
|
},
|
|
224700
|
-
"
|
|
224821
|
+
"29": {
|
|
224701
224822
|
start: {
|
|
224702
|
-
line:
|
|
224823
|
+
line: 259,
|
|
224703
224824
|
column: 8
|
|
224704
224825
|
},
|
|
224705
224826
|
end: {
|
|
224706
|
-
line:
|
|
224827
|
+
line: 259,
|
|
224707
224828
|
column: 39
|
|
224708
224829
|
}
|
|
224709
224830
|
},
|
|
224710
|
-
"
|
|
224831
|
+
"30": {
|
|
224711
224832
|
start: {
|
|
224712
|
-
line:
|
|
224833
|
+
line: 261,
|
|
224713
224834
|
column: 6
|
|
224714
224835
|
},
|
|
224715
224836
|
end: {
|
|
224716
|
-
line:
|
|
224837
|
+
line: 282,
|
|
224717
224838
|
column: 7
|
|
224718
224839
|
}
|
|
224719
224840
|
},
|
|
224720
|
-
"
|
|
224841
|
+
"31": {
|
|
224721
224842
|
start: {
|
|
224722
|
-
line:
|
|
224843
|
+
line: 262,
|
|
224723
224844
|
column: 8
|
|
224724
224845
|
},
|
|
224725
224846
|
end: {
|
|
224726
|
-
line:
|
|
224847
|
+
line: 281,
|
|
224727
224848
|
column: 12
|
|
224728
224849
|
}
|
|
224729
224850
|
},
|
|
224730
|
-
"
|
|
224851
|
+
"32": {
|
|
224731
224852
|
start: {
|
|
224732
|
-
line:
|
|
224853
|
+
line: 264,
|
|
224733
224854
|
column: 30
|
|
224734
224855
|
},
|
|
224735
224856
|
end: {
|
|
224736
|
-
line:
|
|
224857
|
+
line: 264,
|
|
224737
224858
|
column: 59
|
|
224738
224859
|
}
|
|
224739
224860
|
},
|
|
224740
|
-
"
|
|
224861
|
+
"33": {
|
|
224741
224862
|
start: {
|
|
224742
|
-
line:
|
|
224863
|
+
line: 265,
|
|
224743
224864
|
column: 12
|
|
224744
224865
|
},
|
|
224745
224866
|
end: {
|
|
224746
|
-
line:
|
|
224867
|
+
line: 267,
|
|
224747
224868
|
column: 14
|
|
224748
224869
|
}
|
|
224749
224870
|
},
|
|
224750
|
-
"
|
|
224871
|
+
"34": {
|
|
224751
224872
|
start: {
|
|
224752
|
-
line:
|
|
224873
|
+
line: 269,
|
|
224753
224874
|
column: 12
|
|
224754
224875
|
},
|
|
224755
224876
|
end: {
|
|
224756
|
-
line:
|
|
224877
|
+
line: 271,
|
|
224757
224878
|
column: 14
|
|
224758
224879
|
}
|
|
224759
224880
|
},
|
|
224760
|
-
"
|
|
224881
|
+
"35": {
|
|
224761
224882
|
start: {
|
|
224762
|
-
line:
|
|
224883
|
+
line: 272,
|
|
224763
224884
|
column: 12
|
|
224764
224885
|
},
|
|
224765
224886
|
end: {
|
|
224766
|
-
line:
|
|
224887
|
+
line: 272,
|
|
224767
224888
|
column: 29
|
|
224768
224889
|
}
|
|
224769
224890
|
},
|
|
224770
|
-
"
|
|
224891
|
+
"36": {
|
|
224771
224892
|
start: {
|
|
224772
|
-
line:
|
|
224893
|
+
line: 275,
|
|
224773
224894
|
column: 12
|
|
224774
224895
|
},
|
|
224775
224896
|
end: {
|
|
224776
|
-
line:
|
|
224897
|
+
line: 280,
|
|
224777
224898
|
column: 13
|
|
224778
224899
|
}
|
|
224779
224900
|
},
|
|
224780
|
-
"
|
|
224901
|
+
"37": {
|
|
224781
224902
|
start: {
|
|
224782
|
-
line:
|
|
224903
|
+
line: 276,
|
|
224783
224904
|
column: 14
|
|
224784
224905
|
},
|
|
224785
224906
|
end: {
|
|
224786
|
-
line:
|
|
224907
|
+
line: 276,
|
|
224787
224908
|
column: 54
|
|
224788
224909
|
}
|
|
224789
224910
|
},
|
|
224790
|
-
"
|
|
224911
|
+
"38": {
|
|
224791
224912
|
start: {
|
|
224792
|
-
line:
|
|
224913
|
+
line: 277,
|
|
224793
224914
|
column: 14
|
|
224794
224915
|
},
|
|
224795
224916
|
end: {
|
|
224796
|
-
line:
|
|
224917
|
+
line: 279,
|
|
224797
224918
|
column: 16
|
|
224798
224919
|
}
|
|
224799
224920
|
}
|
|
@@ -224865,7 +224986,7 @@ var cov_41uwsnrpn = function () {
|
|
|
224865
224986
|
column: 21
|
|
224866
224987
|
},
|
|
224867
224988
|
end: {
|
|
224868
|
-
line:
|
|
224989
|
+
line: 215,
|
|
224869
224990
|
column: 5
|
|
224870
224991
|
}
|
|
224871
224992
|
},
|
|
@@ -224875,241 +224996,289 @@ var cov_41uwsnrpn = function () {
|
|
|
224875
224996
|
name: "(anonymous_3)",
|
|
224876
224997
|
decl: {
|
|
224877
224998
|
start: {
|
|
224878
|
-
line:
|
|
224999
|
+
line: 217,
|
|
224879
225000
|
column: 2
|
|
224880
225001
|
},
|
|
224881
225002
|
end: {
|
|
224882
|
-
line:
|
|
225003
|
+
line: 217,
|
|
224883
225004
|
column: 3
|
|
224884
225005
|
}
|
|
224885
225006
|
},
|
|
224886
225007
|
loc: {
|
|
224887
225008
|
start: {
|
|
224888
|
-
line:
|
|
225009
|
+
line: 217,
|
|
224889
225010
|
column: 12
|
|
224890
225011
|
},
|
|
224891
225012
|
end: {
|
|
224892
|
-
line:
|
|
225013
|
+
line: 228,
|
|
224893
225014
|
column: 3
|
|
224894
225015
|
}
|
|
224895
225016
|
},
|
|
224896
|
-
line:
|
|
225017
|
+
line: 217
|
|
224897
225018
|
},
|
|
224898
225019
|
"4": {
|
|
224899
225020
|
name: "(anonymous_4)",
|
|
224900
225021
|
decl: {
|
|
224901
225022
|
start: {
|
|
224902
|
-
line:
|
|
224903
|
-
column:
|
|
225023
|
+
line: 219,
|
|
225024
|
+
column: 34
|
|
224904
225025
|
},
|
|
224905
225026
|
end: {
|
|
224906
|
-
line:
|
|
224907
|
-
column:
|
|
225027
|
+
line: 219,
|
|
225028
|
+
column: 35
|
|
224908
225029
|
}
|
|
224909
225030
|
},
|
|
224910
225031
|
loc: {
|
|
224911
225032
|
start: {
|
|
224912
|
-
line:
|
|
224913
|
-
column:
|
|
225033
|
+
line: 219,
|
|
225034
|
+
column: 43
|
|
224914
225035
|
},
|
|
224915
225036
|
end: {
|
|
224916
|
-
line:
|
|
225037
|
+
line: 227,
|
|
224917
225038
|
column: 5
|
|
224918
225039
|
}
|
|
224919
225040
|
},
|
|
224920
|
-
line:
|
|
225041
|
+
line: 219
|
|
224921
225042
|
},
|
|
224922
225043
|
"5": {
|
|
224923
225044
|
name: "(anonymous_5)",
|
|
224924
225045
|
decl: {
|
|
224925
225046
|
start: {
|
|
224926
|
-
line:
|
|
225047
|
+
line: 230,
|
|
224927
225048
|
column: 4
|
|
224928
225049
|
},
|
|
224929
225050
|
end: {
|
|
224930
|
-
line:
|
|
225051
|
+
line: 230,
|
|
224931
225052
|
column: 5
|
|
224932
225053
|
}
|
|
224933
225054
|
},
|
|
224934
225055
|
loc: {
|
|
224935
225056
|
start: {
|
|
224936
|
-
line:
|
|
224937
|
-
column:
|
|
225057
|
+
line: 230,
|
|
225058
|
+
column: 24
|
|
224938
225059
|
},
|
|
224939
225060
|
end: {
|
|
224940
|
-
line:
|
|
225061
|
+
line: 235,
|
|
224941
225062
|
column: 5
|
|
224942
225063
|
}
|
|
224943
225064
|
},
|
|
224944
|
-
line:
|
|
225065
|
+
line: 230
|
|
224945
225066
|
},
|
|
224946
225067
|
"6": {
|
|
224947
225068
|
name: "(anonymous_6)",
|
|
224948
225069
|
decl: {
|
|
224949
225070
|
start: {
|
|
224950
|
-
line:
|
|
225071
|
+
line: 236,
|
|
224951
225072
|
column: 4
|
|
224952
225073
|
},
|
|
224953
225074
|
end: {
|
|
224954
|
-
line:
|
|
225075
|
+
line: 236,
|
|
224955
225076
|
column: 5
|
|
224956
225077
|
}
|
|
224957
225078
|
},
|
|
224958
225079
|
loc: {
|
|
224959
225080
|
start: {
|
|
224960
|
-
line:
|
|
224961
|
-
column:
|
|
225081
|
+
line: 236,
|
|
225082
|
+
column: 27
|
|
224962
225083
|
},
|
|
224963
225084
|
end: {
|
|
224964
|
-
line:
|
|
225085
|
+
line: 240,
|
|
224965
225086
|
column: 5
|
|
224966
225087
|
}
|
|
224967
225088
|
},
|
|
224968
|
-
line:
|
|
225089
|
+
line: 236
|
|
224969
225090
|
},
|
|
224970
225091
|
"7": {
|
|
224971
225092
|
name: "(anonymous_7)",
|
|
224972
225093
|
decl: {
|
|
224973
225094
|
start: {
|
|
224974
|
-
line:
|
|
225095
|
+
line: 241,
|
|
224975
225096
|
column: 4
|
|
224976
225097
|
},
|
|
224977
225098
|
end: {
|
|
224978
|
-
line:
|
|
225099
|
+
line: 241,
|
|
224979
225100
|
column: 5
|
|
224980
225101
|
}
|
|
224981
225102
|
},
|
|
224982
225103
|
loc: {
|
|
224983
225104
|
start: {
|
|
224984
|
-
line:
|
|
224985
|
-
column:
|
|
225105
|
+
line: 241,
|
|
225106
|
+
column: 16
|
|
224986
225107
|
},
|
|
224987
225108
|
end: {
|
|
224988
|
-
line:
|
|
225109
|
+
line: 245,
|
|
224989
225110
|
column: 5
|
|
224990
225111
|
}
|
|
224991
225112
|
},
|
|
224992
|
-
line:
|
|
225113
|
+
line: 241
|
|
224993
225114
|
},
|
|
224994
225115
|
"8": {
|
|
224995
225116
|
name: "(anonymous_8)",
|
|
224996
225117
|
decl: {
|
|
224997
225118
|
start: {
|
|
224998
|
-
line:
|
|
225119
|
+
line: 244,
|
|
225120
|
+
column: 36
|
|
225121
|
+
},
|
|
225122
|
+
end: {
|
|
225123
|
+
line: 244,
|
|
225124
|
+
column: 37
|
|
225125
|
+
}
|
|
225126
|
+
},
|
|
225127
|
+
loc: {
|
|
225128
|
+
start: {
|
|
225129
|
+
line: 244,
|
|
225130
|
+
column: 45
|
|
225131
|
+
},
|
|
225132
|
+
end: {
|
|
225133
|
+
line: 244,
|
|
225134
|
+
column: 79
|
|
225135
|
+
}
|
|
225136
|
+
},
|
|
225137
|
+
line: 244
|
|
225138
|
+
},
|
|
225139
|
+
"9": {
|
|
225140
|
+
name: "(anonymous_9)",
|
|
225141
|
+
decl: {
|
|
225142
|
+
start: {
|
|
225143
|
+
line: 246,
|
|
224999
225144
|
column: 4
|
|
225000
225145
|
},
|
|
225001
225146
|
end: {
|
|
225002
|
-
line:
|
|
225147
|
+
line: 246,
|
|
225003
225148
|
column: 5
|
|
225004
225149
|
}
|
|
225005
225150
|
},
|
|
225006
225151
|
loc: {
|
|
225007
225152
|
start: {
|
|
225153
|
+
line: 246,
|
|
225154
|
+
column: 17
|
|
225155
|
+
},
|
|
225156
|
+
end: {
|
|
225008
225157
|
line: 249,
|
|
225158
|
+
column: 5
|
|
225159
|
+
}
|
|
225160
|
+
},
|
|
225161
|
+
line: 246
|
|
225162
|
+
},
|
|
225163
|
+
"10": {
|
|
225164
|
+
name: "(anonymous_10)",
|
|
225165
|
+
decl: {
|
|
225166
|
+
start: {
|
|
225167
|
+
line: 250,
|
|
225168
|
+
column: 4
|
|
225169
|
+
},
|
|
225170
|
+
end: {
|
|
225171
|
+
line: 250,
|
|
225172
|
+
column: 5
|
|
225173
|
+
}
|
|
225174
|
+
},
|
|
225175
|
+
loc: {
|
|
225176
|
+
start: {
|
|
225177
|
+
line: 250,
|
|
225009
225178
|
column: 22
|
|
225010
225179
|
},
|
|
225011
225180
|
end: {
|
|
225012
|
-
line:
|
|
225181
|
+
line: 255,
|
|
225013
225182
|
column: 5
|
|
225014
225183
|
}
|
|
225015
225184
|
},
|
|
225016
|
-
line:
|
|
225185
|
+
line: 250
|
|
225017
225186
|
},
|
|
225018
|
-
"
|
|
225019
|
-
name: "(
|
|
225187
|
+
"11": {
|
|
225188
|
+
name: "(anonymous_11)",
|
|
225020
225189
|
decl: {
|
|
225021
225190
|
start: {
|
|
225022
|
-
line:
|
|
225191
|
+
line: 256,
|
|
225023
225192
|
column: 4
|
|
225024
225193
|
},
|
|
225025
225194
|
end: {
|
|
225026
|
-
line:
|
|
225195
|
+
line: 256,
|
|
225027
225196
|
column: 5
|
|
225028
225197
|
}
|
|
225029
225198
|
},
|
|
225030
225199
|
loc: {
|
|
225031
225200
|
start: {
|
|
225032
|
-
line:
|
|
225201
|
+
line: 256,
|
|
225033
225202
|
column: 19
|
|
225034
225203
|
},
|
|
225035
225204
|
end: {
|
|
225036
|
-
line:
|
|
225205
|
+
line: 283,
|
|
225037
225206
|
column: 5
|
|
225038
225207
|
}
|
|
225039
225208
|
},
|
|
225040
|
-
line:
|
|
225209
|
+
line: 256
|
|
225041
225210
|
},
|
|
225042
|
-
"
|
|
225043
|
-
name: "(
|
|
225211
|
+
"12": {
|
|
225212
|
+
name: "(anonymous_12)",
|
|
225044
225213
|
decl: {
|
|
225045
225214
|
start: {
|
|
225046
|
-
line:
|
|
225215
|
+
line: 258,
|
|
225047
225216
|
column: 36
|
|
225048
225217
|
},
|
|
225049
225218
|
end: {
|
|
225050
|
-
line:
|
|
225219
|
+
line: 258,
|
|
225051
225220
|
column: 37
|
|
225052
225221
|
}
|
|
225053
225222
|
},
|
|
225054
225223
|
loc: {
|
|
225055
225224
|
start: {
|
|
225056
|
-
line:
|
|
225225
|
+
line: 258,
|
|
225057
225226
|
column: 45
|
|
225058
225227
|
},
|
|
225059
225228
|
end: {
|
|
225060
|
-
line:
|
|
225229
|
+
line: 260,
|
|
225061
225230
|
column: 7
|
|
225062
225231
|
}
|
|
225063
225232
|
},
|
|
225064
|
-
line:
|
|
225233
|
+
line: 258
|
|
225065
225234
|
},
|
|
225066
|
-
"
|
|
225067
|
-
name: "(
|
|
225235
|
+
"13": {
|
|
225236
|
+
name: "(anonymous_13)",
|
|
225068
225237
|
decl: {
|
|
225069
225238
|
start: {
|
|
225070
|
-
line:
|
|
225239
|
+
line: 263,
|
|
225071
225240
|
column: 16
|
|
225072
225241
|
},
|
|
225073
225242
|
end: {
|
|
225074
|
-
line:
|
|
225243
|
+
line: 263,
|
|
225075
225244
|
column: 17
|
|
225076
225245
|
}
|
|
225077
225246
|
},
|
|
225078
225247
|
loc: {
|
|
225079
225248
|
start: {
|
|
225080
|
-
line:
|
|
225249
|
+
line: 263,
|
|
225081
225250
|
column: 28
|
|
225082
225251
|
},
|
|
225083
225252
|
end: {
|
|
225084
|
-
line:
|
|
225253
|
+
line: 273,
|
|
225085
225254
|
column: 11
|
|
225086
225255
|
}
|
|
225087
225256
|
},
|
|
225088
|
-
line:
|
|
225257
|
+
line: 263
|
|
225089
225258
|
},
|
|
225090
|
-
"
|
|
225091
|
-
name: "(
|
|
225259
|
+
"14": {
|
|
225260
|
+
name: "(anonymous_14)",
|
|
225092
225261
|
decl: {
|
|
225093
225262
|
start: {
|
|
225094
|
-
line:
|
|
225263
|
+
line: 274,
|
|
225095
225264
|
column: 17
|
|
225096
225265
|
},
|
|
225097
225266
|
end: {
|
|
225098
|
-
line:
|
|
225267
|
+
line: 274,
|
|
225099
225268
|
column: 18
|
|
225100
225269
|
}
|
|
225101
225270
|
},
|
|
225102
225271
|
loc: {
|
|
225103
225272
|
start: {
|
|
225104
|
-
line:
|
|
225273
|
+
line: 274,
|
|
225105
225274
|
column: 26
|
|
225106
225275
|
},
|
|
225107
225276
|
end: {
|
|
225108
|
-
line:
|
|
225277
|
+
line: 281,
|
|
225109
225278
|
column: 11
|
|
225110
225279
|
}
|
|
225111
225280
|
},
|
|
225112
|
-
line:
|
|
225281
|
+
line: 274
|
|
225113
225282
|
}
|
|
225114
225283
|
},
|
|
225115
225284
|
branchMap: {
|
|
@@ -225120,7 +225289,7 @@ var cov_41uwsnrpn = function () {
|
|
|
225120
225289
|
column: 6
|
|
225121
225290
|
},
|
|
225122
225291
|
end: {
|
|
225123
|
-
line:
|
|
225292
|
+
line: 214,
|
|
225124
225293
|
column: 7
|
|
225125
225294
|
}
|
|
225126
225295
|
},
|
|
@@ -225131,7 +225300,7 @@ var cov_41uwsnrpn = function () {
|
|
|
225131
225300
|
column: 6
|
|
225132
225301
|
},
|
|
225133
225302
|
end: {
|
|
225134
|
-
line:
|
|
225303
|
+
line: 214,
|
|
225135
225304
|
column: 7
|
|
225136
225305
|
}
|
|
225137
225306
|
}, {
|
|
@@ -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,101 +225318,266 @@ var cov_41uwsnrpn = function () {
|
|
|
225149
225318
|
"1": {
|
|
225150
225319
|
loc: {
|
|
225151
225320
|
start: {
|
|
225152
|
-
line:
|
|
225321
|
+
line: 209,
|
|
225322
|
+
column: 8
|
|
225323
|
+
},
|
|
225324
|
+
end: {
|
|
225325
|
+
line: 211,
|
|
225326
|
+
column: 9
|
|
225327
|
+
}
|
|
225328
|
+
},
|
|
225329
|
+
type: "if",
|
|
225330
|
+
locations: [{
|
|
225331
|
+
start: {
|
|
225332
|
+
line: 209,
|
|
225333
|
+
column: 8
|
|
225334
|
+
},
|
|
225335
|
+
end: {
|
|
225336
|
+
line: 211,
|
|
225337
|
+
column: 9
|
|
225338
|
+
}
|
|
225339
|
+
}, {
|
|
225340
|
+
start: {
|
|
225341
|
+
line: 209,
|
|
225342
|
+
column: 8
|
|
225343
|
+
},
|
|
225344
|
+
end: {
|
|
225345
|
+
line: 211,
|
|
225346
|
+
column: 9
|
|
225347
|
+
}
|
|
225348
|
+
}],
|
|
225349
|
+
line: 209
|
|
225350
|
+
},
|
|
225351
|
+
"2": {
|
|
225352
|
+
loc: {
|
|
225353
|
+
start: {
|
|
225354
|
+
line: 220,
|
|
225153
225355
|
column: 6
|
|
225154
225356
|
},
|
|
225155
225357
|
end: {
|
|
225156
|
-
line:
|
|
225358
|
+
line: 226,
|
|
225157
225359
|
column: 7
|
|
225158
225360
|
}
|
|
225159
225361
|
},
|
|
225160
225362
|
type: "if",
|
|
225161
225363
|
locations: [{
|
|
225162
225364
|
start: {
|
|
225163
|
-
line:
|
|
225365
|
+
line: 220,
|
|
225164
225366
|
column: 6
|
|
225165
225367
|
},
|
|
225166
225368
|
end: {
|
|
225167
|
-
line:
|
|
225369
|
+
line: 226,
|
|
225168
225370
|
column: 7
|
|
225169
225371
|
}
|
|
225170
225372
|
}, {
|
|
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
|
-
line:
|
|
225382
|
+
line: 220
|
|
225181
225383
|
},
|
|
225182
|
-
"
|
|
225384
|
+
"3": {
|
|
225183
225385
|
loc: {
|
|
225184
225386
|
start: {
|
|
225185
|
-
line:
|
|
225387
|
+
line: 222,
|
|
225388
|
+
column: 13
|
|
225389
|
+
},
|
|
225390
|
+
end: {
|
|
225391
|
+
line: 226,
|
|
225392
|
+
column: 7
|
|
225393
|
+
}
|
|
225394
|
+
},
|
|
225395
|
+
type: "if",
|
|
225396
|
+
locations: [{
|
|
225397
|
+
start: {
|
|
225398
|
+
line: 222,
|
|
225399
|
+
column: 13
|
|
225400
|
+
},
|
|
225401
|
+
end: {
|
|
225402
|
+
line: 226,
|
|
225403
|
+
column: 7
|
|
225404
|
+
}
|
|
225405
|
+
}, {
|
|
225406
|
+
start: {
|
|
225407
|
+
line: 222,
|
|
225408
|
+
column: 13
|
|
225409
|
+
},
|
|
225410
|
+
end: {
|
|
225411
|
+
line: 226,
|
|
225412
|
+
column: 7
|
|
225413
|
+
}
|
|
225414
|
+
}],
|
|
225415
|
+
line: 222
|
|
225416
|
+
},
|
|
225417
|
+
"4": {
|
|
225418
|
+
loc: {
|
|
225419
|
+
start: {
|
|
225420
|
+
line: 224,
|
|
225421
|
+
column: 13
|
|
225422
|
+
},
|
|
225423
|
+
end: {
|
|
225424
|
+
line: 226,
|
|
225425
|
+
column: 7
|
|
225426
|
+
}
|
|
225427
|
+
},
|
|
225428
|
+
type: "if",
|
|
225429
|
+
locations: [{
|
|
225430
|
+
start: {
|
|
225431
|
+
line: 224,
|
|
225432
|
+
column: 13
|
|
225433
|
+
},
|
|
225434
|
+
end: {
|
|
225435
|
+
line: 226,
|
|
225436
|
+
column: 7
|
|
225437
|
+
}
|
|
225438
|
+
}, {
|
|
225439
|
+
start: {
|
|
225440
|
+
line: 224,
|
|
225441
|
+
column: 13
|
|
225442
|
+
},
|
|
225443
|
+
end: {
|
|
225444
|
+
line: 226,
|
|
225445
|
+
column: 7
|
|
225446
|
+
}
|
|
225447
|
+
}],
|
|
225448
|
+
line: 224
|
|
225449
|
+
},
|
|
225450
|
+
"5": {
|
|
225451
|
+
loc: {
|
|
225452
|
+
start: {
|
|
225453
|
+
line: 231,
|
|
225186
225454
|
column: 6
|
|
225187
225455
|
},
|
|
225188
225456
|
end: {
|
|
225189
|
-
line:
|
|
225457
|
+
line: 234,
|
|
225190
225458
|
column: 7
|
|
225191
225459
|
}
|
|
225192
225460
|
},
|
|
225193
225461
|
type: "if",
|
|
225194
225462
|
locations: [{
|
|
225195
225463
|
start: {
|
|
225196
|
-
line:
|
|
225464
|
+
line: 231,
|
|
225197
225465
|
column: 6
|
|
225198
225466
|
},
|
|
225199
225467
|
end: {
|
|
225200
|
-
line:
|
|
225468
|
+
line: 234,
|
|
225201
225469
|
column: 7
|
|
225202
225470
|
}
|
|
225203
225471
|
}, {
|
|
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
|
-
line:
|
|
225481
|
+
line: 231
|
|
225214
225482
|
},
|
|
225215
|
-
"
|
|
225483
|
+
"6": {
|
|
225216
225484
|
loc: {
|
|
225217
225485
|
start: {
|
|
225218
|
-
line:
|
|
225486
|
+
line: 244,
|
|
225487
|
+
column: 45
|
|
225488
|
+
},
|
|
225489
|
+
end: {
|
|
225490
|
+
line: 244,
|
|
225491
|
+
column: 79
|
|
225492
|
+
}
|
|
225493
|
+
},
|
|
225494
|
+
type: "binary-expr",
|
|
225495
|
+
locations: [{
|
|
225496
|
+
start: {
|
|
225497
|
+
line: 244,
|
|
225498
|
+
column: 45
|
|
225499
|
+
},
|
|
225500
|
+
end: {
|
|
225501
|
+
line: 244,
|
|
225502
|
+
column: 56
|
|
225503
|
+
}
|
|
225504
|
+
}, {
|
|
225505
|
+
start: {
|
|
225506
|
+
line: 244,
|
|
225507
|
+
column: 60
|
|
225508
|
+
},
|
|
225509
|
+
end: {
|
|
225510
|
+
line: 244,
|
|
225511
|
+
column: 79
|
|
225512
|
+
}
|
|
225513
|
+
}],
|
|
225514
|
+
line: 244
|
|
225515
|
+
},
|
|
225516
|
+
"7": {
|
|
225517
|
+
loc: {
|
|
225518
|
+
start: {
|
|
225519
|
+
line: 261,
|
|
225520
|
+
column: 6
|
|
225521
|
+
},
|
|
225522
|
+
end: {
|
|
225523
|
+
line: 282,
|
|
225524
|
+
column: 7
|
|
225525
|
+
}
|
|
225526
|
+
},
|
|
225527
|
+
type: "if",
|
|
225528
|
+
locations: [{
|
|
225529
|
+
start: {
|
|
225530
|
+
line: 261,
|
|
225531
|
+
column: 6
|
|
225532
|
+
},
|
|
225533
|
+
end: {
|
|
225534
|
+
line: 282,
|
|
225535
|
+
column: 7
|
|
225536
|
+
}
|
|
225537
|
+
}, {
|
|
225538
|
+
start: {
|
|
225539
|
+
line: 261,
|
|
225540
|
+
column: 6
|
|
225541
|
+
},
|
|
225542
|
+
end: {
|
|
225543
|
+
line: 282,
|
|
225544
|
+
column: 7
|
|
225545
|
+
}
|
|
225546
|
+
}],
|
|
225547
|
+
line: 261
|
|
225548
|
+
},
|
|
225549
|
+
"8": {
|
|
225550
|
+
loc: {
|
|
225551
|
+
start: {
|
|
225552
|
+
line: 275,
|
|
225219
225553
|
column: 12
|
|
225220
225554
|
},
|
|
225221
225555
|
end: {
|
|
225222
|
-
line:
|
|
225556
|
+
line: 280,
|
|
225223
225557
|
column: 13
|
|
225224
225558
|
}
|
|
225225
225559
|
},
|
|
225226
225560
|
type: "if",
|
|
225227
225561
|
locations: [{
|
|
225228
225562
|
start: {
|
|
225229
|
-
line:
|
|
225563
|
+
line: 275,
|
|
225230
225564
|
column: 12
|
|
225231
225565
|
},
|
|
225232
225566
|
end: {
|
|
225233
|
-
line:
|
|
225567
|
+
line: 280,
|
|
225234
225568
|
column: 13
|
|
225235
225569
|
}
|
|
225236
225570
|
}, {
|
|
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
|
-
line:
|
|
225580
|
+
line: 275
|
|
225247
225581
|
}
|
|
225248
225582
|
},
|
|
225249
225583
|
s: {
|
|
@@ -225273,7 +225607,19 @@ var cov_41uwsnrpn = function () {
|
|
|
225273
225607
|
"23": 0,
|
|
225274
225608
|
"24": 0,
|
|
225275
225609
|
"25": 0,
|
|
225276
|
-
"26": 0
|
|
225610
|
+
"26": 0,
|
|
225611
|
+
"27": 0,
|
|
225612
|
+
"28": 0,
|
|
225613
|
+
"29": 0,
|
|
225614
|
+
"30": 0,
|
|
225615
|
+
"31": 0,
|
|
225616
|
+
"32": 0,
|
|
225617
|
+
"33": 0,
|
|
225618
|
+
"34": 0,
|
|
225619
|
+
"35": 0,
|
|
225620
|
+
"36": 0,
|
|
225621
|
+
"37": 0,
|
|
225622
|
+
"38": 0
|
|
225277
225623
|
},
|
|
225278
225624
|
f: {
|
|
225279
225625
|
"0": 0,
|
|
@@ -225288,25 +225634,32 @@ var cov_41uwsnrpn = function () {
|
|
|
225288
225634
|
"9": 0,
|
|
225289
225635
|
"10": 0,
|
|
225290
225636
|
"11": 0,
|
|
225291
|
-
"12": 0
|
|
225637
|
+
"12": 0,
|
|
225638
|
+
"13": 0,
|
|
225639
|
+
"14": 0
|
|
225292
225640
|
},
|
|
225293
225641
|
b: {
|
|
225294
225642
|
"0": [0, 0],
|
|
225295
225643
|
"1": [0, 0],
|
|
225296
225644
|
"2": [0, 0],
|
|
225297
|
-
"3": [0, 0]
|
|
225645
|
+
"3": [0, 0],
|
|
225646
|
+
"4": [0, 0],
|
|
225647
|
+
"5": [0, 0],
|
|
225648
|
+
"6": [0, 0],
|
|
225649
|
+
"7": [0, 0],
|
|
225650
|
+
"8": [0, 0]
|
|
225298
225651
|
},
|
|
225299
225652
|
inputSourceMap: {
|
|
225300
225653
|
version: 3,
|
|
225301
225654
|
sources: ["NewProjectModal.vue"],
|
|
225302
225655
|
names: [],
|
|
225303
|
-
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",
|
|
225656
|
+
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",
|
|
225304
225657
|
file: "NewProjectModal.vue",
|
|
225305
225658
|
sourceRoot: "src/components/projects",
|
|
225306
|
-
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
|
|
225659
|
+
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"]
|
|
225307
225660
|
},
|
|
225308
225661
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
225309
|
-
hash: "
|
|
225662
|
+
hash: "880a7035d32da713e533258d2460ef2446ff3c8f"
|
|
225310
225663
|
};
|
|
225311
225664
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
225312
225665
|
|
|
@@ -225536,28 +225889,61 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225536
225889
|
if (value) {
|
|
225537
225890
|
cov_41uwsnrpn.b[0][0]++;
|
|
225538
225891
|
cov_41uwsnrpn.s[3]++;
|
|
225892
|
+
|
|
225539
225893
|
// ensure autofocus: https://github.com/vuetifyjs/vuetify/issues/1587
|
|
225540
|
-
|
|
225894
|
+
if (this.$refs.title) {
|
|
225895
|
+
cov_41uwsnrpn.b[1][0]++;
|
|
225896
|
+
cov_41uwsnrpn.s[4]++;
|
|
225897
|
+
this.$nextTick(this.$refs.title.focus);
|
|
225898
|
+
} else {
|
|
225899
|
+
cov_41uwsnrpn.b[1][1]++;
|
|
225900
|
+
}
|
|
225901
|
+
|
|
225902
|
+
cov_41uwsnrpn.s[5]++;
|
|
225541
225903
|
this.fetchGroups();
|
|
225542
|
-
cov_41uwsnrpn.s[
|
|
225904
|
+
cov_41uwsnrpn.s[6]++;
|
|
225543
225905
|
this.resetForm();
|
|
225544
225906
|
} else {
|
|
225545
225907
|
cov_41uwsnrpn.b[0][1]++;
|
|
225546
225908
|
}
|
|
225547
225909
|
}
|
|
225548
225910
|
},
|
|
225549
|
-
mounted: function mounted() {
|
|
225550
|
-
|
|
225551
|
-
// if (has(this.$refs[field], 'reset')) {
|
|
225552
|
-
// this.refs[field] = this.$refs[field]
|
|
225553
|
-
// } else if (has(this.$refs[field], '$refs.userSearchInput.reset')) {
|
|
225554
|
-
// this.refs[field] = this.$refs[field].$refs.userSearchInput
|
|
225555
|
-
// } else if (has(this.$refs[field], '$refs.groupSearchInput.reset')) {
|
|
225556
|
-
// this.refs[field] = this.$refs[field].$refs.groupSearchInput
|
|
225557
|
-
// }
|
|
225558
|
-
// })
|
|
225911
|
+
mounted: function mounted() {
|
|
225912
|
+
var _this = this;
|
|
225559
225913
|
|
|
225560
225914
|
cov_41uwsnrpn.f[3]++;
|
|
225915
|
+
cov_41uwsnrpn.s[7]++;
|
|
225916
|
+
// Map all local and nested inputs to local 'refs'
|
|
225917
|
+
this.fieldsToValidate.forEach(function (field) {
|
|
225918
|
+
cov_41uwsnrpn.f[4]++;
|
|
225919
|
+
cov_41uwsnrpn.s[8]++;
|
|
225920
|
+
|
|
225921
|
+
if (has_default()(_this.$refs[field], 'reset')) {
|
|
225922
|
+
cov_41uwsnrpn.b[2][0]++;
|
|
225923
|
+
cov_41uwsnrpn.s[9]++;
|
|
225924
|
+
_this.refs[field] = _this.$refs[field];
|
|
225925
|
+
} else {
|
|
225926
|
+
cov_41uwsnrpn.b[2][1]++;
|
|
225927
|
+
cov_41uwsnrpn.s[10]++;
|
|
225928
|
+
|
|
225929
|
+
if (has_default()(_this.$refs[field], '$refs.userSearchInput.reset')) {
|
|
225930
|
+
cov_41uwsnrpn.b[3][0]++;
|
|
225931
|
+
cov_41uwsnrpn.s[11]++;
|
|
225932
|
+
_this.refs[field] = _this.$refs[field].$refs.userSearchInput;
|
|
225933
|
+
} else {
|
|
225934
|
+
cov_41uwsnrpn.b[3][1]++;
|
|
225935
|
+
cov_41uwsnrpn.s[12]++;
|
|
225936
|
+
|
|
225937
|
+
if (has_default()(_this.$refs[field], '$refs.groupSearchInput.reset')) {
|
|
225938
|
+
cov_41uwsnrpn.b[4][0]++;
|
|
225939
|
+
cov_41uwsnrpn.s[13]++;
|
|
225940
|
+
_this.refs[field] = _this.$refs[field].$refs.groupSearchInput;
|
|
225941
|
+
} else {
|
|
225942
|
+
cov_41uwsnrpn.b[4][1]++;
|
|
225943
|
+
}
|
|
225944
|
+
}
|
|
225945
|
+
}
|
|
225946
|
+
});
|
|
225561
225947
|
},
|
|
225562
225948
|
methods: {
|
|
225563
225949
|
fetchGroups: function () {
|
|
@@ -225567,28 +225953,28 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225567
225953
|
while (1) {
|
|
225568
225954
|
switch (_context.prev = _context.next) {
|
|
225569
225955
|
case 0:
|
|
225570
|
-
cov_41uwsnrpn.f[
|
|
225571
|
-
cov_41uwsnrpn.s[
|
|
225956
|
+
cov_41uwsnrpn.f[5]++;
|
|
225957
|
+
cov_41uwsnrpn.s[14]++;
|
|
225572
225958
|
|
|
225573
225959
|
if (this.groups.length) {
|
|
225574
225960
|
_context.next = 12;
|
|
225575
225961
|
break;
|
|
225576
225962
|
}
|
|
225577
225963
|
|
|
225578
|
-
cov_41uwsnrpn.b[
|
|
225579
|
-
cov_41uwsnrpn.s[
|
|
225964
|
+
cov_41uwsnrpn.b[5][0]++;
|
|
225965
|
+
cov_41uwsnrpn.s[15]++;
|
|
225580
225966
|
_context.next = 7;
|
|
225581
225967
|
return fetchListRecords('groups');
|
|
225582
225968
|
|
|
225583
225969
|
case 7:
|
|
225584
225970
|
response = _context.sent;
|
|
225585
|
-
cov_41uwsnrpn.s[
|
|
225971
|
+
cov_41uwsnrpn.s[16]++;
|
|
225586
225972
|
this.groups = response.results;
|
|
225587
225973
|
_context.next = 13;
|
|
225588
225974
|
break;
|
|
225589
225975
|
|
|
225590
225976
|
case 12:
|
|
225591
|
-
cov_41uwsnrpn.b[
|
|
225977
|
+
cov_41uwsnrpn.b[5][1]++;
|
|
225592
225978
|
|
|
225593
225979
|
case 13:
|
|
225594
225980
|
case "end":
|
|
@@ -225605,93 +225991,101 @@ function NewProjectModalvue_type_script_lang_js_asyncToGenerator(fn) { return fu
|
|
|
225605
225991
|
return fetchGroups;
|
|
225606
225992
|
}(),
|
|
225607
225993
|
toggleOptionalFields: function toggleOptionalFields() {
|
|
225608
|
-
cov_41uwsnrpn.f[
|
|
225609
|
-
cov_41uwsnrpn.s[
|
|
225994
|
+
cov_41uwsnrpn.f[6]++;
|
|
225995
|
+
cov_41uwsnrpn.s[17]++;
|
|
225610
225996
|
this.showOptionalFields = !this.showOptionalFields;
|
|
225611
|
-
cov_41uwsnrpn.s[
|
|
225997
|
+
cov_41uwsnrpn.s[18]++;
|
|
225612
225998
|
this.$nextTick(this.$refs.title.focus);
|
|
225613
|
-
cov_41uwsnrpn.s[
|
|
225999
|
+
cov_41uwsnrpn.s[19]++;
|
|
225614
226000
|
this.$nextTick(this.$refs.title.resetValidation);
|
|
225615
226001
|
},
|
|
225616
226002
|
resetForm: function resetForm() {
|
|
225617
|
-
cov_41uwsnrpn.f[
|
|
225618
|
-
|
|
225619
|
-
|
|
225620
|
-
|
|
225621
|
-
|
|
226003
|
+
cov_41uwsnrpn.f[7]++;
|
|
226004
|
+
|
|
226005
|
+
var _ref = (cov_41uwsnrpn.s[20]++, this),
|
|
226006
|
+
refs = _ref.refs;
|
|
226007
|
+
|
|
226008
|
+
cov_41uwsnrpn.s[21]++;
|
|
226009
|
+
this.formHasErrors = false;
|
|
226010
|
+
cov_41uwsnrpn.s[22]++;
|
|
226011
|
+
this.fieldsToValidate.forEach(function (field) {
|
|
226012
|
+
cov_41uwsnrpn.f[8]++;
|
|
226013
|
+
cov_41uwsnrpn.s[23]++;
|
|
226014
|
+
return (cov_41uwsnrpn.b[6][0]++, refs[field]) && (cov_41uwsnrpn.b[6][1]++, refs[field].reset());
|
|
226015
|
+
});
|
|
225622
226016
|
},
|
|
225623
226017
|
closeModal: function closeModal() {
|
|
225624
|
-
cov_41uwsnrpn.f[
|
|
225625
|
-
cov_41uwsnrpn.s[
|
|
226018
|
+
cov_41uwsnrpn.f[9]++;
|
|
226019
|
+
cov_41uwsnrpn.s[24]++;
|
|
225626
226020
|
this.resetForm();
|
|
225627
|
-
cov_41uwsnrpn.s[
|
|
226021
|
+
cov_41uwsnrpn.s[25]++;
|
|
225628
226022
|
this.$emit('close-modal');
|
|
225629
226023
|
},
|
|
225630
226024
|
updateValue: function updateValue(data) {
|
|
225631
|
-
cov_41uwsnrpn.f[
|
|
225632
|
-
cov_41uwsnrpn.s[
|
|
226025
|
+
cov_41uwsnrpn.f[10]++;
|
|
226026
|
+
cov_41uwsnrpn.s[26]++;
|
|
225633
226027
|
this.project = NewProjectModalvue_type_script_lang_js_objectSpread(NewProjectModalvue_type_script_lang_js_objectSpread({}, this.project), data);
|
|
225634
226028
|
},
|
|
225635
226029
|
submit: function () {
|
|
225636
226030
|
var _submit = NewProjectModalvue_type_script_lang_js_asyncToGenerator( /*#__PURE__*/regenerator_default.a.mark(function _callee2() {
|
|
225637
|
-
var
|
|
226031
|
+
var _this2 = this;
|
|
225638
226032
|
|
|
225639
226033
|
return regenerator_default.a.wrap(function _callee2$(_context2) {
|
|
225640
226034
|
while (1) {
|
|
225641
226035
|
switch (_context2.prev = _context2.next) {
|
|
225642
226036
|
case 0:
|
|
225643
|
-
cov_41uwsnrpn.f[
|
|
225644
|
-
cov_41uwsnrpn.s[
|
|
226037
|
+
cov_41uwsnrpn.f[11]++;
|
|
226038
|
+
cov_41uwsnrpn.s[27]++;
|
|
225645
226039
|
this.formHasErrors = false;
|
|
225646
|
-
cov_41uwsnrpn.s[
|
|
226040
|
+
cov_41uwsnrpn.s[28]++;
|
|
225647
226041
|
this.fieldsToValidate.forEach(function (field) {
|
|
225648
|
-
cov_41uwsnrpn.f[
|
|
225649
|
-
cov_41uwsnrpn.s[
|
|
226042
|
+
cov_41uwsnrpn.f[12]++;
|
|
226043
|
+
cov_41uwsnrpn.s[29]++;
|
|
225650
226044
|
|
|
225651
|
-
|
|
226045
|
+
_this2.refs[field].validate(true);
|
|
225652
226046
|
});
|
|
225653
|
-
cov_41uwsnrpn.s[
|
|
226047
|
+
cov_41uwsnrpn.s[30]++;
|
|
225654
226048
|
|
|
225655
226049
|
if (!this.formHasErrors) {
|
|
225656
|
-
cov_41uwsnrpn.b[
|
|
225657
|
-
cov_41uwsnrpn.s[
|
|
226050
|
+
cov_41uwsnrpn.b[7][0]++;
|
|
226051
|
+
cov_41uwsnrpn.s[31]++;
|
|
225658
226052
|
createRecord('projects', this.project).then(function (response) {
|
|
225659
|
-
cov_41uwsnrpn.f[
|
|
225660
|
-
var projectId = (cov_41uwsnrpn.s[
|
|
225661
|
-
cov_41uwsnrpn.s[
|
|
226053
|
+
cov_41uwsnrpn.f[13]++;
|
|
226054
|
+
var projectId = (cov_41uwsnrpn.s[32]++, _this2.$get(response, 'pk', ''));
|
|
226055
|
+
cov_41uwsnrpn.s[33]++;
|
|
225662
226056
|
|
|
225663
|
-
|
|
226057
|
+
_this2.$store.dispatch(SHOW_ALERT, {
|
|
225664
226058
|
message: "Project ".concat(projectId, " was succesfully created.")
|
|
225665
226059
|
});
|
|
225666
226060
|
|
|
225667
|
-
cov_41uwsnrpn.s[
|
|
226061
|
+
cov_41uwsnrpn.s[34]++;
|
|
225668
226062
|
|
|
225669
|
-
|
|
226063
|
+
_this2.$store.dispatch(SHOW_PANEL, {
|
|
225670
226064
|
project: projectId
|
|
225671
226065
|
});
|
|
225672
226066
|
|
|
225673
|
-
cov_41uwsnrpn.s[
|
|
226067
|
+
cov_41uwsnrpn.s[35]++;
|
|
225674
226068
|
|
|
225675
|
-
|
|
226069
|
+
_this2.closeModal();
|
|
225676
226070
|
}).catch(function (error) {
|
|
225677
|
-
cov_41uwsnrpn.f[
|
|
225678
|
-
cov_41uwsnrpn.s[
|
|
226071
|
+
cov_41uwsnrpn.f[14]++;
|
|
226072
|
+
cov_41uwsnrpn.s[36]++;
|
|
225679
226073
|
|
|
225680
226074
|
if (error.response) {
|
|
225681
|
-
cov_41uwsnrpn.b[
|
|
225682
|
-
cov_41uwsnrpn.s[
|
|
225683
|
-
|
|
225684
|
-
cov_41uwsnrpn.s[
|
|
226075
|
+
cov_41uwsnrpn.b[8][0]++;
|
|
226076
|
+
cov_41uwsnrpn.s[37]++;
|
|
226077
|
+
_this2.errorMessages = error.response.data;
|
|
226078
|
+
cov_41uwsnrpn.s[38]++;
|
|
225685
226079
|
|
|
225686
|
-
|
|
226080
|
+
_this2.$store.dispatch(SHOW_ALERT, {
|
|
225687
226081
|
error: 'The project could not be created. Please try again.'
|
|
225688
226082
|
});
|
|
225689
226083
|
} else {
|
|
225690
|
-
cov_41uwsnrpn.b[
|
|
226084
|
+
cov_41uwsnrpn.b[8][1]++;
|
|
225691
226085
|
}
|
|
225692
226086
|
});
|
|
225693
226087
|
} else {
|
|
225694
|
-
cov_41uwsnrpn.b[
|
|
226088
|
+
cov_41uwsnrpn.b[7][1]++;
|
|
225695
226089
|
}
|
|
225696
226090
|
|
|
225697
226091
|
case 7:
|
|
@@ -225726,8 +226120,8 @@ var NewProjectModalvue_type_style_index_0_lang_scss_ = __webpack_require__("9434
|
|
|
225726
226120
|
|
|
225727
226121
|
var NewProjectModal_component = normalizeComponent(
|
|
225728
226122
|
projects_NewProjectModalvue_type_script_lang_js_,
|
|
225729
|
-
|
|
225730
|
-
|
|
226123
|
+
NewProjectModalvue_type_template_id_58c607e8_render,
|
|
226124
|
+
NewProjectModalvue_type_template_id_58c607e8_staticRenderFns,
|
|
225731
226125
|
false,
|
|
225732
226126
|
null,
|
|
225733
226127
|
null,
|
|
@@ -253214,8 +253608,8 @@ var RerunButton_component = normalizeComponent(
|
|
|
253214
253608
|
)
|
|
253215
253609
|
|
|
253216
253610
|
/* harmony default export */ var RerunButton = (RerunButton_component.exports);
|
|
253217
|
-
// 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=
|
|
253218
|
-
var
|
|
253611
|
+
// 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&
|
|
253612
|
+
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){
|
|
253219
253613
|
var on = ref.on;
|
|
253220
253614
|
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){
|
|
253221
253615
|
var on = ref.on;
|
|
@@ -253232,10 +253626,10 @@ var on = ref.on;
|
|
|
253232
253626
|
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){
|
|
253233
253627
|
var items = ref.items;
|
|
253234
253628
|
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()}
|
|
253235
|
-
var
|
|
253629
|
+
var ResultsGalleryvue_type_template_id_185780e8_staticRenderFns = []
|
|
253236
253630
|
|
|
253237
253631
|
|
|
253238
|
-
// CONCATENATED MODULE: ./src/components/analyses/ResultsGallery.vue?vue&type=template&id=
|
|
253632
|
+
// CONCATENATED MODULE: ./src/components/analyses/ResultsGallery.vue?vue&type=template&id=185780e8&
|
|
253239
253633
|
|
|
253240
253634
|
// EXTERNAL MODULE: ./node_modules/detect-csv/index.js
|
|
253241
253635
|
var detect_csv = __webpack_require__("0f34");
|
|
@@ -253244,7 +253638,7 @@ var detect_csv_default = /*#__PURE__*/__webpack_require__.n(detect_csv);
|
|
|
253244
253638
|
// 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&
|
|
253245
253639
|
var cov_d7x60homs = function () {
|
|
253246
253640
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/analyses/ResultsGallery.vue";
|
|
253247
|
-
var hash = "
|
|
253641
|
+
var hash = "fe09864f43de2d4dae5821f382f528b5c4317436";
|
|
253248
253642
|
var global = new Function("return this")();
|
|
253249
253643
|
var gcv = "__coverage__";
|
|
253250
253644
|
var coverageData = {
|
|
@@ -254027,7 +254421,7 @@ var cov_d7x60homs = function () {
|
|
|
254027
254421
|
},
|
|
254028
254422
|
end: {
|
|
254029
254423
|
line: 491,
|
|
254030
|
-
column:
|
|
254424
|
+
column: 41
|
|
254031
254425
|
}
|
|
254032
254426
|
},
|
|
254033
254427
|
"78": {
|
|
@@ -254037,7 +254431,7 @@ var cov_d7x60homs = function () {
|
|
|
254037
254431
|
},
|
|
254038
254432
|
end: {
|
|
254039
254433
|
line: 492,
|
|
254040
|
-
column:
|
|
254434
|
+
column: 77
|
|
254041
254435
|
}
|
|
254042
254436
|
},
|
|
254043
254437
|
"79": {
|
|
@@ -254959,7 +255353,7 @@ var cov_d7x60homs = function () {
|
|
|
254959
255353
|
},
|
|
254960
255354
|
end: {
|
|
254961
255355
|
line: 491,
|
|
254962
|
-
column:
|
|
255356
|
+
column: 41
|
|
254963
255357
|
}
|
|
254964
255358
|
},
|
|
254965
255359
|
line: 491
|
|
@@ -254983,7 +255377,7 @@ var cov_d7x60homs = function () {
|
|
|
254983
255377
|
},
|
|
254984
255378
|
end: {
|
|
254985
255379
|
line: 492,
|
|
254986
|
-
column:
|
|
255380
|
+
column: 77
|
|
254987
255381
|
}
|
|
254988
255382
|
},
|
|
254989
255383
|
line: 492
|
|
@@ -256233,7 +256627,7 @@ var cov_d7x60homs = function () {
|
|
|
256233
256627
|
},
|
|
256234
256628
|
end: {
|
|
256235
256629
|
line: 492,
|
|
256236
|
-
column:
|
|
256630
|
+
column: 78
|
|
256237
256631
|
}
|
|
256238
256632
|
}, {
|
|
256239
256633
|
start: {
|
|
@@ -256288,7 +256682,7 @@ var cov_d7x60homs = function () {
|
|
|
256288
256682
|
},
|
|
256289
256683
|
end: {
|
|
256290
256684
|
line: 492,
|
|
256291
|
-
column:
|
|
256685
|
+
column: 77
|
|
256292
256686
|
}
|
|
256293
256687
|
},
|
|
256294
256688
|
type: "binary-expr",
|
|
@@ -256299,16 +256693,16 @@ var cov_d7x60homs = function () {
|
|
|
256299
256693
|
},
|
|
256300
256694
|
end: {
|
|
256301
256695
|
line: 492,
|
|
256302
|
-
column:
|
|
256696
|
+
column: 48
|
|
256303
256697
|
}
|
|
256304
256698
|
}, {
|
|
256305
256699
|
start: {
|
|
256306
256700
|
line: 492,
|
|
256307
|
-
column:
|
|
256701
|
+
column: 52
|
|
256308
256702
|
},
|
|
256309
256703
|
end: {
|
|
256310
256704
|
line: 492,
|
|
256311
|
-
column:
|
|
256705
|
+
column: 77
|
|
256312
256706
|
}
|
|
256313
256707
|
}],
|
|
256314
256708
|
line: 492
|
|
@@ -256849,10 +257243,10 @@ var cov_d7x60homs = function () {
|
|
|
256849
257243
|
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",
|
|
256850
257244
|
file: "ResultsGallery.vue",
|
|
256851
257245
|
sourceRoot: "src/components/analyses",
|
|
256852
|
-
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"]
|
|
257246
|
+
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"]
|
|
256853
257247
|
},
|
|
256854
257248
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
256855
|
-
hash: "
|
|
257249
|
+
hash: "fe09864f43de2d4dae5821f382f528b5c4317436"
|
|
256856
257250
|
};
|
|
256857
257251
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
256858
257252
|
|
|
@@ -257585,11 +257979,11 @@ function ResultsGalleryvue_type_script_lang_js_defineProperty(obj, key, value) {
|
|
|
257585
257979
|
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) {
|
|
257586
257980
|
cov_d7x60homs.f[22]++;
|
|
257587
257981
|
cov_d7x60homs.s[77]++;
|
|
257588
|
-
return row;
|
|
257982
|
+
return row.length;
|
|
257589
257983
|
}).filter(function (row) {
|
|
257590
257984
|
cov_d7x60homs.f[23]++;
|
|
257591
257985
|
cov_d7x60homs.s[78]++;
|
|
257592
|
-
return (cov_d7x60homs.b[33][0]++, row[0] !== '#') || (cov_d7x60homs.b[33][1]++, row.includes('#CHROM'));
|
|
257986
|
+
return (cov_d7x60homs.b[33][0]++, row[0][0] !== '#') || (cov_d7x60homs.b[33][1]++, row[0].includes('#CHROM'));
|
|
257593
257987
|
})) : (cov_d7x60homs.b[31][1]++, [])); // Headers
|
|
257594
257988
|
|
|
257595
257989
|
cov_d7x60homs.s[79]++;
|
|
@@ -257743,8 +258137,8 @@ var ResultsGalleryvue_type_style_index_0_lang_scss_ = __webpack_require__("3942"
|
|
|
257743
258137
|
|
|
257744
258138
|
var ResultsGallery_component = normalizeComponent(
|
|
257745
258139
|
analyses_ResultsGalleryvue_type_script_lang_js_,
|
|
257746
|
-
|
|
257747
|
-
|
|
258140
|
+
ResultsGalleryvue_type_template_id_185780e8_render,
|
|
258141
|
+
ResultsGalleryvue_type_template_id_185780e8_staticRenderFns,
|
|
257748
258142
|
false,
|
|
257749
258143
|
null,
|
|
257750
258144
|
null,
|
|
@@ -264731,12 +265125,12 @@ var ProjectPanelvue_type_template_id_7c1bc440_staticRenderFns = []
|
|
|
264731
265125
|
|
|
264732
265126
|
// CONCATENATED MODULE: ./src/components/projects/ProjectPanel.vue?vue&type=template&id=7c1bc440&
|
|
264733
265127
|
|
|
264734
|
-
// 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=
|
|
264735
|
-
var
|
|
264736
|
-
var
|
|
265128
|
+
// 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&
|
|
265129
|
+
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)}
|
|
265130
|
+
var BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns = []
|
|
264737
265131
|
|
|
264738
265132
|
|
|
264739
|
-
// CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=
|
|
265133
|
+
// CONCATENATED MODULE: ./src/components/dashboard/BaseDashboard.vue?vue&type=template&id=2fd2fca6&
|
|
264740
265134
|
|
|
264741
265135
|
// 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&
|
|
264742
265136
|
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){
|
|
@@ -291366,7 +291760,7 @@ var DcGraph_component = normalizeComponent(
|
|
|
291366
291760
|
// 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&
|
|
291367
291761
|
var cov_21s3whnekh = function () {
|
|
291368
291762
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/dashboard/BaseDashboard.vue";
|
|
291369
|
-
var hash = "
|
|
291763
|
+
var hash = "80378eaf505b52746695623a345007e2d0c5f9ea";
|
|
291370
291764
|
var global = new Function("return this")();
|
|
291371
291765
|
var gcv = "__coverage__";
|
|
291372
291766
|
var coverageData = {
|
|
@@ -292258,10 +292652,10 @@ var cov_21s3whnekh = function () {
|
|
|
292258
292652
|
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",
|
|
292259
292653
|
file: "BaseDashboard.vue",
|
|
292260
292654
|
sourceRoot: "src/components/dashboard",
|
|
292261
|
-
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>\
|
|
292655
|
+
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"]
|
|
292262
292656
|
},
|
|
292263
292657
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
292264
|
-
hash: "
|
|
292658
|
+
hash: "80378eaf505b52746695623a345007e2d0c5f9ea"
|
|
292265
292659
|
};
|
|
292266
292660
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
292267
292661
|
|
|
@@ -292492,8 +292886,8 @@ var BaseDashboardvue_type_style_index_0_lang_scss_ = __webpack_require__("f624")
|
|
|
292492
292886
|
|
|
292493
292887
|
var BaseDashboard_component = normalizeComponent(
|
|
292494
292888
|
dashboard_BaseDashboardvue_type_script_lang_js_,
|
|
292495
|
-
|
|
292496
|
-
|
|
292889
|
+
BaseDashboardvue_type_template_id_2fd2fca6_render,
|
|
292890
|
+
BaseDashboardvue_type_template_id_2fd2fca6_staticRenderFns,
|
|
292497
292891
|
false,
|
|
292498
292892
|
null,
|
|
292499
292893
|
null,
|
|
@@ -298468,18 +298862,18 @@ var BioModelPanelvue_type_template_id_b52cff22_staticRenderFns = []
|
|
|
298468
298862
|
|
|
298469
298863
|
// CONCATENATED MODULE: ./src/components/bioModels/BioModelPanel.vue?vue&type=template&id=b52cff22&
|
|
298470
298864
|
|
|
298471
|
-
// 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=
|
|
298472
|
-
var
|
|
298865
|
+
// 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&
|
|
298866
|
+
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
|
|
298473
298867
|
_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)}
|
|
298474
|
-
var
|
|
298868
|
+
var BioModelTreevue_type_template_id_2b110930_staticRenderFns = []
|
|
298475
298869
|
|
|
298476
298870
|
|
|
298477
|
-
// CONCATENATED MODULE: ./src/components/bioModels/BioModelTree.vue?vue&type=template&id=
|
|
298871
|
+
// CONCATENATED MODULE: ./src/components/bioModels/BioModelTree.vue?vue&type=template&id=2b110930&
|
|
298478
298872
|
|
|
298479
298873
|
// 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&
|
|
298480
298874
|
var cov_2hmzqbstvs = function () {
|
|
298481
298875
|
var path = "/Users/juanes/papaemmelab/isabl_web/src/components/bioModels/BioModelTree.vue";
|
|
298482
|
-
var hash = "
|
|
298876
|
+
var hash = "1e089864fe6792f2d8555180af07f2e5d7f516a5";
|
|
298483
298877
|
var global = new Function("return this")();
|
|
298484
298878
|
var gcv = "__coverage__";
|
|
298485
298879
|
var coverageData = {
|
|
@@ -303764,10 +304158,10 @@ var cov_2hmzqbstvs = function () {
|
|
|
303764
304158
|
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",
|
|
303765
304159
|
file: "BioModelTree.vue",
|
|
303766
304160
|
sourceRoot: "src/components/bioModels",
|
|
303767
|
-
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"]
|
|
304161
|
+
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"]
|
|
303768
304162
|
},
|
|
303769
304163
|
_coverageSchema: "43e27e138ebf9cfc5966b082cf9a028302ed4184",
|
|
303770
|
-
hash: "
|
|
304164
|
+
hash: "1e089864fe6792f2d8555180af07f2e5d7f516a5"
|
|
303771
304165
|
};
|
|
303772
304166
|
var coverage = global[gcv] || (global[gcv] = {});
|
|
303773
304167
|
|
|
@@ -304613,11 +305007,11 @@ function BioModelTreevue_type_script_lang_js_defineProperty(obj, key, value) { i
|
|
|
304613
305007
|
cov_2hmzqbstvs.f[50]++;
|
|
304614
305008
|
var value = (cov_2hmzqbstvs.s[204]++, _this5.$get(d.data, key, null));
|
|
304615
305009
|
cov_2hmzqbstvs.s[205]++;
|
|
304616
|
-
return value === null ? (cov_2hmzqbstvs.b[49][0]++, '') : (cov_2hmzqbstvs.b[49][1]++, "\n <div class=\"layout row
|
|
305010
|
+
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 "));
|
|
304617
305011
|
};
|
|
304618
305012
|
|
|
304619
305013
|
cov_2hmzqbstvs.s[206]++;
|
|
304620
|
-
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 ");
|
|
305014
|
+
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 ");
|
|
304621
305015
|
}
|
|
304622
305016
|
}
|
|
304623
305017
|
});
|
|
@@ -304637,8 +305031,8 @@ var BioModelTreevue_type_style_index_0_lang_scss_ = __webpack_require__("34ec");
|
|
|
304637
305031
|
|
|
304638
305032
|
var BioModelTree_component = normalizeComponent(
|
|
304639
305033
|
bioModels_BioModelTreevue_type_script_lang_js_,
|
|
304640
|
-
|
|
304641
|
-
|
|
305034
|
+
BioModelTreevue_type_template_id_2b110930_render,
|
|
305035
|
+
BioModelTreevue_type_template_id_2b110930_staticRenderFns,
|
|
304642
305036
|
false,
|
|
304643
305037
|
null,
|
|
304644
305038
|
null,
|