@abi-software/map-side-bar 1.3.30 → 1.3.32

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.
@@ -1 +1 @@
1
- {"version":3,"sources":["webpack://map-side-bar/webpack/universalModuleDefinition","webpack://map-side-bar/webpack/bootstrap","webpack://map-side-bar/external \"element-ui/lib/pagination\"","webpack://map-side-bar/external \"core-js/modules/es.symbol.iterator\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/pagination.css\"","webpack://map-side-bar/external \"core-js/modules/es.parse-int\"","webpack://map-side-bar/external \"element-ui/lib/select\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/select.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.for-each\"","webpack://map-side-bar/external \"core-js/modules/es.array.concat\"","webpack://map-side-bar/external \"core-js/modules/web.dom-collections.iterator\"","webpack://map-side-bar/external \"marked\"","webpack://map-side-bar/external \"core-js/modules/es.object.keys\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/link.css\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/button.css\"","webpack://map-side-bar/external \"core-js/modules/web.url\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/loading.css\"","webpack://map-side-bar/external \"element-ui/lib/drawer\"","webpack://map-side-bar/external \"@abi-software/gallery\"","webpack://map-side-bar/external \"core-js/modules/es.array.join\"","webpack://map-side-bar/external \"@abi-software/svg-sprite\"","webpack://map-side-bar/./src/components/Tabs.vue?88de","webpack://map-side-bar/external \"core-js/modules/es.object.get-own-property-descriptors\"","webpack://map-side-bar/external \"core-js/modules/es.string.split\"","webpack://map-side-bar/external \"core-js/modules/es.set\"","webpack://map-side-bar/external \"core-js/modules/es.array.filter\"","webpack://map-side-bar/./src/components/ContextCard.vue?8d31","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/card.css\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/drawer.css\"","webpack://map-side-bar/external \"core-js/modules/es.symbol.description\"","webpack://map-side-bar/external \"core-js/modules/es.regexp.exec\"","webpack://map-side-bar/external \"@abi-software/gallery/dist/gallery.css\"","webpack://map-side-bar/external \"element-ui/lib/button\"","webpack://map-side-bar/external \"core-js/modules/es.regexp.to-string\"","webpack://map-side-bar/external \"core-js/modules/es.symbol\"","webpack://map-side-bar/external \"core-js/modules/es.array.slice\"","webpack://map-side-bar/external \"core-js/modules/es.object.get-own-property-descriptor\"","webpack://map-side-bar/external \"element-ui/lib/cascader\"","webpack://map-side-bar/external \"element-ui/lib/locale/lang/en\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/cascader.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.sort\"","webpack://map-side-bar/external \"core-js/modules/es.number.constructor\"","webpack://map-side-bar/external \"regenerator-runtime/runtime\"","webpack://map-side-bar/external \"core-js/modules/es.array.splice\"","webpack://map-side-bar/external \"element-ui/lib/link\"","webpack://map-side-bar/external \"element-ui/lib/locale\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/option.css\"","webpack://map-side-bar/external \"core-js/modules/es.promise\"","webpack://map-side-bar/external \"core-js/modules/es.object.to-string\"","webpack://map-side-bar/external \"algoliasearch\"","webpack://map-side-bar/external \"vue\"","webpack://map-side-bar/external \"core-js/modules/es.array.iterator\"","webpack://map-side-bar/./src/components/SideBar.vue?2904","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/icon.css\"","webpack://map-side-bar/external \"core-js/modules/es.string.iterator\"","webpack://map-side-bar/external \"element-ui/lib/popover\"","webpack://map-side-bar/external \"core-js/modules/es.map\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/base.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.flat\"","webpack://map-side-bar/./assets/missing-image.svg","webpack://map-side-bar/external \"@abi-software/gallery/src/mixins/GalleryHelpers\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/popover.css\"","webpack://map-side-bar/./src/components/SearchFilters.vue?d4f5","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/input.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.includes\"","webpack://map-side-bar/external \"element-ui/lib/loading\"","webpack://map-side-bar/external \"core-js/modules/es.array.find-index\"","webpack://map-side-bar/external \"element-ui/lib/card\"","webpack://map-side-bar/external \"element-ui/lib/icon\"","webpack://map-side-bar/./src/components/ImageGallery.vue?d71b","webpack://map-side-bar/external \"core-js/modules/es.object.assign\"","webpack://map-side-bar/external \"core-js/modules/es.function.name\"","webpack://map-side-bar/external \"core-js/modules/web.dom-collections.for-each\"","webpack://map-side-bar/./src/components/SidebarContent.vue?76ea","webpack://map-side-bar/external \"core-js/modules/es.string.search\"","webpack://map-side-bar/external \"core-js/modules/es.string.replace\"","webpack://map-side-bar/external \"element-ui/lib/option\"","webpack://map-side-bar/./src/components/DatasetCard.vue?b157","webpack://map-side-bar/external \"core-js/modules/es.array.last-index-of\"","webpack://map-side-bar/external \"current-script-polyfill\"","webpack://map-side-bar/external \"core-js/modules/es.array.from\"","webpack://map-side-bar/external \"element-ui/lib/input\"","webpack://map-side-bar/./src/components/BadgesGroup.vue?6780","webpack://map-side-bar/external \"core-js/modules/es.object.entries\"","webpack://map-side-bar/external \"core-js/modules/es.array.unscopables.flat\"","webpack://map-side-bar/external \"xss\"","webpack://map-side-bar/external \"core-js/modules/es.array.map\"","webpack://map-side-bar/external \"core-js/modules/es.promise.finally\"","webpack://map-side-bar/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://map-side-bar/./src/components/SideBar.vue?4bf1","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://map-side-bar/./src/components/SidebarContent.vue?42b3","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://map-side-bar/./src/components/SearchFilters.vue?b111","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/toArray.js","webpack://map-side-bar/./src/components/Cascader.vue","webpack://map-side-bar/src/components/Cascader.vue","webpack://map-side-bar/./src/components/Cascader.vue?9729","webpack://map-side-bar/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://map-side-bar/./src/components/species-map.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://map-side-bar/./src/algolia/algolia.js","webpack://map-side-bar/./src/algolia/utils.js","webpack://map-side-bar/src/components/SearchFilters.vue","webpack://map-side-bar/./src/components/SearchFilters.vue?8079","webpack://map-side-bar/./src/components/SearchFilters.vue","webpack://map-side-bar/./src/components/DatasetCard.vue?d969","webpack://map-side-bar/./src/components/BadgesGroup.vue?10b5","webpack://map-side-bar/src/components/BadgesGroup.vue","webpack://map-side-bar/./src/components/BadgesGroup.vue?6a7e","webpack://map-side-bar/./src/components/BadgesGroup.vue","webpack://map-side-bar/./src/components/EventBus.js","webpack://map-side-bar/./src/components/ImageGallery.vue?7c36","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://map-side-bar/src/components/ImageGallery.vue","webpack://map-side-bar/./src/components/ImageGallery.vue?b8b4","webpack://map-side-bar/./src/components/ImageGallery.vue","webpack://map-side-bar/src/components/DatasetCard.vue","webpack://map-side-bar/./src/components/DatasetCard.vue?d021","webpack://map-side-bar/./src/components/DatasetCard.vue","webpack://map-side-bar/./src/components/ContextCard.vue?b6ff","webpack://map-side-bar/./src/components/hardcoded-context-info.js","webpack://map-side-bar/src/components/ContextCard.vue","webpack://map-side-bar/./src/components/ContextCard.vue?667e","webpack://map-side-bar/./src/components/ContextCard.vue","webpack://map-side-bar/src/components/SidebarContent.vue","webpack://map-side-bar/./src/components/SidebarContent.vue?7e01","webpack://map-side-bar/./src/components/SidebarContent.vue","webpack://map-side-bar/./src/components/Tabs.vue?deee","webpack://map-side-bar/src/components/Tabs.vue","webpack://map-side-bar/./src/components/Tabs.vue?3d38","webpack://map-side-bar/./src/components/Tabs.vue","webpack://map-side-bar/src/components/SideBar.vue","webpack://map-side-bar/./src/components/SideBar.vue?b259","webpack://map-side-bar/./src/components/SideBar.vue","webpack://map-side-bar/external \"core-js/modules/es.string.includes\"","webpack://map-side-bar/external \"core-js/modules/es.array.find\""],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","window","document","currentScript","src","match","render","_vm","_h","$createElement","_c","_self","ref","drawerOpen","_e","staticClass","on","toggleDrawer","attrs","$event","close","tabs","length","activeId","tabClicked","_l","tab","directives","rawName","id","expression","refInFor","contextCard","envVars","searchChanged","staticRenderFns","_defineProperty","obj","configurable","writable","bodyStyle","slot","contextCardEntry","contextCardEnabled","clearSearchClicked","nativeOn","searchEvent","model","callback","$$v","searchInput","_v","filterEntry","filterUpdate","numberPerPageUpdate","filtersLoading","cascaderReady","results","loadingCards","result","doi","contextCardUpdate","page","numberPerPage","numberOfHits","pageChange","_arrayWithoutHoles","arr","Array","isArray","arr2","_iterableToArray","iter","iterator","toString","from","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","done","Promise","then","_asyncToGenerator","fn","args","arguments","apply","err","undefined","options","props","cascadeEvent","cascadeExpandChange","tagsChangedCallback","cascadeSelected","numberShownChanged","numberShown","item","_s","numberOfResultsText","_arrayWithHoles","_nonIterableRest","_toArray","arrayWithHoles","nonIterableRest","extends","methods","computePresentTags","customNodes","tags","push","genTag","first","restCount","collapseTags","text","closable","rest","forEach","checkedNodes","presentTags","$emit","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","concat","component","_classCallCheck","instance","Constructor","_defineProperties","target","descriptor","_createClass","protoProps","staticProps","AlgoliaClient","algoliaId","algoliaKey","PENNSIEVE_API_LOCATION","client","algoliasearch","ALGOLIA_INDEX","index","initIndex","propPathMapping","map","Map","entries","facetPropPaths","keys","facetData","facetId","search","sortFacetValuesBy","facets","response","facetPropPath","children","responseFacets","responseFacetChildren","facet","label","discoverId","fetch","json","dataset","version","discoverIds","promiseList","_discoverAllDois","all","values","flat","newResults","newResult","res","curie","split","description","updated","pennsieve","updatedAt","publishDate","datasetId","objectID","detailsReady","hits","foundKeyWords","uniqueKeywords","hit","keywords","keywordObj","keyword","toUpperCase","includes","_processUberonURL","anatomy","organ","Set","url","ub","pop","replace","filter","query","hitsperPage","hitsPerPage","filters","attributesToHighlight","attributesToRetrieve","searchData","items","_processResultsForCards","total","nbHits","identifier","dois","anatomyAsUberons","_processAnatomy","facetPropPathMapping","getFilters","selectedFacetArray","f","removeShowAllFacets","facetsToBool","orFilters","andFilters","AND","substring","lastIndexOf","join","facetArray","txt","charAt","slice","capitalise","components","CustomCascader","MapSvgIcon","MapSvgSpriteColor","entry","type","default","data","cascaderIsReady","previousShowAllChecked","species","gender","datasets","showFilters","showFiltersText","cascadeSelectedWithBoolean","numberDatasetsShown","computed","createCascaderItemValue","term","populateCascader","event","showAllEventModifier","propPath","fs","setCascader","filterKeys","makeCascadeLabelsClickable","hasShowAll","facetMaps","showAll","splice","modifiedEvent","sort","a","b","createDataTypeFacet","el","count","dataFacet","newChildren","__expandItem__","parseInt","updatePreviousShowAllChecked","element","toLowerCase","filterFacets","addFilter","validateFilter","initiateSearch","checkShowAllBoxes","$nextTick","getValidatedFilters","mounted","algoliaClient","loading","thumbnail","biolucidaData","currentCategory","galleryClicked","cardClicked","contributors","publishYear","samples","openRepository","categoryChanged","categories","size","class","active","categoryClicked","additionalLinks","datasetBiolucida","addToCategories","array","addSimulationsToCategories","watch","deep","immediate","handler","scaffolds","segmentation","plots","simulation","EventBus","Vue","bottomSpacer","galleryItems","maxWidth","imageStyle","imageContainerStyle","shadow","_iterableToArrayLimit","_arr","_n","_d","_i","next","_slicedToArray","iterableToArrayLimit","str","string","mixins","String","Number","datasetVersion","datasetThumbnail","category","currentIndex","ro","width","height","display","alignItems","justifyContent","resetIndex","payload","createSciCurnchItems","createDatasetItem","createScaffoldItems","createSimulationItems","createPlotItems","createSegmentationItems","title","link","hideType","hideTitle","createImageItems","images","baseName","filePath","linkUrl","thumbnailURL","file_path","path","mimetype","plotAnnotation","isDescribedBy","supplementalData","filePathPrefix","dataSource","metadata","resource","userData","action","apiLocation","banner","contextCardUrl","replaceAll","share_link","API_LOCATION","createVideoItems","videos","video","onResize","$el","clientWidth","getContextCardUrl","$refs","gallery","indicatorClicked","created","ResizeObserver","observe","destroyed","dataLocation","lastDoi","lastName","numberSamples","numberSubjects","organs","openDataset","propogateCardAction","open","xmlhttp","setRequestHeader","onreadystatechange","readyState","status","JSON","parse","responseText","uri","send","stringify","splitDOI","getBanner","fullName","getBiolucidaInfo","endpoint","showDetails","contextData","heading","domProps","parseMarkdown","samplesUnderViews","views","view","viewClicked","getFileFromPath","sampleDetails","samplesMatching","generateFileLink","openViewFile","staticStyle","sample","toggleSampleDetails","style","color","showContextCard","val","getContextFile","contextFileUrl","removeDoubleFilesPath","addDiscoverIdsToContextData","processPathForUrl","convertBackslashToForwardSlash","addFilesToPathIfMissing","encodeURI","splitDoiFromUrl","viewUrl","handleErrors","initial_state","lastSearch","pageModel","start","hasSearched","visible","Boolean","isDrawer","flex","resetSearch","_dois","openSearch","resetPageNavigation","filtersRef","searchAlgolia","keyCode","MouseEvent","anatomyInSearch","handleMissingData","perItemSearch","maxDownloads","callSciCrunch","scrollToTop","content","scroll","resultsProcessing","assign","sampleSize","subjectSize","timestamp","dataset_identifier","datasetRevision","dataset_revision","dataset_version","organisms","thumbnails","scaffoldViews","contextualInformation","createfilterParams","params","append","e","fullEndpoint","searchEndpoint","highlightText","titleClicked","tabTitles","openAtStart","openNeuronSearch","payLoad"],"mappings":"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","file":"map-side-bar.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"map-side-bar\"] = factory();\n\telse\n\t\troot[\"map-side-bar\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = require(\"element-ui/lib/pagination\");","module.exports = require(\"core-js/modules/es.symbol.iterator\");","module.exports = require(\"element-ui/lib/theme-chalk/pagination.css\");","module.exports = require(\"core-js/modules/es.parse-int\");","module.exports = require(\"element-ui/lib/select\");","module.exports = require(\"element-ui/lib/theme-chalk/select.css\");","module.exports = require(\"core-js/modules/es.array.for-each\");","module.exports = require(\"core-js/modules/es.array.concat\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator\");","module.exports = require(\"marked\");","module.exports = require(\"core-js/modules/es.object.keys\");","module.exports = require(\"element-ui/lib/theme-chalk/link.css\");","module.exports = require(\"element-ui/lib/theme-chalk/button.css\");","module.exports = require(\"core-js/modules/web.url\");","module.exports = require(\"element-ui/lib/theme-chalk/loading.css\");","module.exports = require(\"element-ui/lib/drawer\");","module.exports = require(\"@abi-software/gallery\");","module.exports = require(\"core-js/modules/es.array.join\");","module.exports = require(\"@abi-software/svg-sprite\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptors\");","module.exports = require(\"core-js/modules/es.string.split\");","module.exports = require(\"core-js/modules/es.set\");","module.exports = require(\"core-js/modules/es.array.filter\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/card.css\");","module.exports = require(\"element-ui/lib/theme-chalk/drawer.css\");","module.exports = require(\"core-js/modules/es.symbol.description\");","module.exports = require(\"core-js/modules/es.regexp.exec\");","module.exports = require(\"@abi-software/gallery/dist/gallery.css\");","module.exports = require(\"element-ui/lib/button\");","module.exports = require(\"core-js/modules/es.regexp.to-string\");","module.exports = require(\"core-js/modules/es.symbol\");","module.exports = require(\"core-js/modules/es.array.slice\");","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptor\");","module.exports = require(\"element-ui/lib/cascader\");","module.exports = require(\"element-ui/lib/locale/lang/en\");","module.exports = require(\"element-ui/lib/theme-chalk/cascader.css\");","module.exports = require(\"core-js/modules/es.array.sort\");","module.exports = require(\"core-js/modules/es.number.constructor\");","module.exports = require(\"regenerator-runtime/runtime\");","module.exports = require(\"core-js/modules/es.array.splice\");","module.exports = require(\"element-ui/lib/link\");","module.exports = require(\"element-ui/lib/locale\");","module.exports = require(\"element-ui/lib/theme-chalk/option.css\");","module.exports = require(\"core-js/modules/es.promise\");","module.exports = require(\"core-js/modules/es.object.to-string\");","module.exports = require(\"algoliasearch\");","module.exports = require(\"vue\");","module.exports = require(\"core-js/modules/es.array.iterator\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=style&index=0&id=313390a9&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=style&index=0&id=313390a9&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/icon.css\");","module.exports = require(\"core-js/modules/es.string.iterator\");","module.exports = require(\"element-ui/lib/popover\");","module.exports = require(\"core-js/modules/es.map\");","module.exports = require(\"element-ui/lib/theme-chalk/base.css\");","module.exports = require(\"core-js/modules/es.array.flat\");","module.exports = __webpack_public_path__ + \"img/missing-image.1878d8b8.svg\";","module.exports = require(\"@abi-software/gallery/src/mixins/GalleryHelpers\");","module.exports = require(\"element-ui/lib/theme-chalk/popover.css\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/input.css\");","module.exports = require(\"core-js/modules/es.array.includes\");","module.exports = require(\"element-ui/lib/loading\");","module.exports = require(\"core-js/modules/es.array.find-index\");","module.exports = require(\"element-ui/lib/card\");","module.exports = require(\"element-ui/lib/icon\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.assign\");","module.exports = require(\"core-js/modules/es.function.name\");","module.exports = require(\"core-js/modules/web.dom-collections.for-each\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.string.search\");","module.exports = require(\"core-js/modules/es.string.replace\");","module.exports = require(\"element-ui/lib/option\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.array.last-index-of\");","module.exports = require(\"current-script-polyfill\");","module.exports = require(\"core-js/modules/es.array.from\");","module.exports = require(\"element-ui/lib/input\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.entries\");","module.exports = require(\"core-js/modules/es.array.unscopables.flat\");","module.exports = require(\"xss\");","module.exports = require(\"core-js/modules/es.array.map\");","module.exports = require(\"core-js/modules/es.promise.finally\");","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n require('current-script-polyfill')\n }\n\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\"},[(!_vm.drawerOpen)?_c('div',{staticClass:\"open-tab\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})]):_vm._e(),_c('el-drawer',{staticClass:\"side-bar\",attrs:{\"custom-class\":\"my-drawer\",\"visible\":_vm.drawerOpen,\"appendToBody\":false,\"modal-append-to-body\":false,\"size\":\"550\",\"with-header\":false,\"wrapperClosable\":false,\"modal\":false},on:{\"update:visible\":function($event){_vm.drawerOpen=$event}}},[_c('div',{staticClass:\"box-card\"},[(_vm.drawerOpen)?_c('div',{staticClass:\"close-tab\",on:{\"click\":_vm.close}},[_c('i',{staticClass:\"el-icon-arrow-right\"})]):_vm._e(),_c('div',{staticClass:\"sidebar-container\"},[(_vm.tabs.length > 1)?_c('tabs',{attrs:{\"tabTitles\":_vm.tabs,\"activeId\":_vm.activeId},on:{\"titleClicked\":_vm.tabClicked}}):_vm._e(),_vm._l((_vm.tabs),function(tab){return [_c('sidebar-content',{directives:[{name:\"show\",rawName:\"v-show\",value:(tab.id===_vm.activeId),expression:\"tab.id===activeId\"}],key:tab.id,ref:tab.id,refInFor:true,staticClass:\"sidebar-content-container\",attrs:{\"contextCardEntry\":tab.contextCard,\"envVars\":_vm.envVars},on:{\"search-changed\":function($event){return _vm.searchChanged(tab.id, $event)}}})]})],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-card',{staticClass:\"content-card\",attrs:{\"body-style\":_vm.bodyStyle}},[_c('div',{staticClass:\"header\",attrs:{\"slot\":\"header\"},slot:\"header\"},[(_vm.contextCardEntry && _vm.contextCardEnabled)?_c('context-card',{attrs:{\"entry\":_vm.contextCardEntry,\"envVars\":_vm.envVars}}):_vm._e(),_c('el-input',{staticClass:\"search-input\",attrs:{\"placeholder\":\"Search\",\"clearable\":\"\"},on:{\"clear\":_vm.clearSearchClicked},nativeOn:{\"keyup\":function($event){return _vm.searchEvent($event)}},model:{value:(_vm.searchInput),callback:function ($$v) {_vm.searchInput=$$v},expression:\"searchInput\"}}),_c('el-button',{staticClass:\"button\",on:{\"click\":_vm.searchEvent}},[_vm._v(\"Search\")])],1),_c('SearchFilters',{ref:\"filtersRef\",staticClass:\"filters\",attrs:{\"entry\":_vm.filterEntry,\"envVars\":_vm.envVars},on:{\"filterResults\":_vm.filterUpdate,\"numberPerPage\":_vm.numberPerPageUpdate,\"loading\":_vm.filtersLoading,\"cascaderReady\":_vm.cascaderReady}}),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loadingCards),expression:\"loadingCards\"}],ref:\"content\",staticClass:\"content scrollbar\"},[(_vm.results.length === 0 && !_vm.loadingCards)?_c('div',{staticClass:\"error-feedback\"},[_vm._v(\"No results found - Please change your search / filter criteria.\")]):_vm._e(),_vm._l((_vm.results),function(result){return _c('div',{key:result.doi,staticClass:\"step-item\"},[_c('DatasetCard',{attrs:{\"entry\":result,\"envVars\":_vm.envVars},on:{\"contextUpdate\":_vm.contextCardUpdate}})],1)}),_c('el-pagination',{staticClass:\"pagination\",attrs:{\"current-page\":_vm.page,\"hide-on-single-page\":\"\",\"large\":\"\",\"layout\":\"prev, pager, next\",\"page-size\":_vm.numberPerPage,\"total\":_vm.numberOfHits},on:{\"update:currentPage\":function($event){_vm.page=$event},\"update:current-page\":function($event){_vm.page=$event},\"current-change\":_vm.pageChange}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"filters\"},[_c('map-svg-sprite-color'),_c('transition',{attrs:{\"name\":\"el-zoom-in-top\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showFilters),expression:\"showFilters\"}],staticClass:\"search-filters transition-box\"},[_c('custom-cascader',{ref:\"cascader\",staticClass:\"cascader\",attrs:{\"placeholder\":\"\",\"collapse-tags\":true,\"options\":_vm.options,\"props\":_vm.props,\"show-all-levels\":false,\"append-to-body\":false},on:{\"change\":function($event){return _vm.cascadeEvent($event)},\"expand-change\":_vm.cascadeExpandChange,\"tags-changed\":_vm.tagsChangedCallback},model:{value:(_vm.cascadeSelected),callback:function ($$v) {_vm.cascadeSelected=$$v},expression:\"cascadeSelected\"}}),(_vm.showFiltersText)?_c('div',{staticClass:\"filter-default-value\"},[_vm._v(\" Filters \")]):_vm._e(),_c('el-popover',{attrs:{\"title\":\"How do filters work?\",\"width\":\"250\",\"trigger\":\"hover\",\"append-to-body\":false,\"popper-class\":\"popover\"}},[_c('map-svg-icon',{staticClass:\"help\",attrs:{\"slot\":\"reference\",\"icon\":\"help\"},slot:\"reference\"}),_c('div',[_c('strong',[_vm._v(\"Within categories:\")]),_vm._v(\" OR \"),_c('br'),_vm._v(\" example: 'heart' OR 'colon' \"),_c('br'),_c('br'),_c('strong',[_vm._v(\"Between categories:\")]),_vm._v(\" AND \"),_c('br'),_vm._v(\" example: 'rat' AND 'lung' \")])],1)],1)]),_c('el-select',{staticClass:\"number-shown-select\",attrs:{\"placeholder\":\"10\"},on:{\"change\":function($event){return _vm.numberShownChanged($event)}},model:{value:(_vm.numberShown),callback:function ($$v) {_vm.numberShown=$$v},expression:\"numberShown\"}},_vm._l((_vm.numberDatasetsShown),function(item){return _c('el-option',{key:item,attrs:{\"label\":item,\"value\":item}})}),1),_c('span',{staticClass:\"dataset-results-feedback\"},[_vm._v(_vm._s(this.numberOfResultsText))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();\n}","var render, staticRenderFns\nimport script from \"./Cascader.vue?vue&type=script&lang=js&\"\nexport * from \"./Cascader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport { Cascader } from \"element-ui\";\r\n\r\nexport default {\r\n name: 'CustomCascader',\r\n extends: Cascader,\r\n methods:{\r\n //Modify this internal function to disable Show all tags\r\n computePresentTags() {\r\n const { isDisabled, leafOnly, showAllLevels, separator, collapseTags } = this;\r\n const checkedNodes = this.getCheckedNodes(leafOnly);\r\n const tags = [];\r\n const genTag = node => ({\r\n node,\r\n key: node.uid,\r\n text: node.getText(showAllLevels, separator),\r\n hitState: false,\r\n closable: !isDisabled && !node.isDisabled\r\n });\r\n let customNodes = checkedNodes.filter(node =>\r\n {\r\n return !(node.getText(showAllLevels, separator).includes(\"Show all\"));\r\n }\r\n );\r\n if (customNodes.length) {\r\n const [first, ...rest] = customNodes;\r\n const restCount = rest.length;\r\n tags.push(genTag(first));\r\n if (restCount) {\r\n if (collapseTags) {\r\n tags.push({\r\n key: -1,\r\n text: `+ ${restCount}`,\r\n closable: false\r\n });\r\n } else {\r\n rest.forEach(node => tags.push(genTag(node)));\r\n }\r\n }\r\n }\r\n this.checkedNodes = checkedNodes;\r\n this.presentTags = tags;\r\n this.$emit(\"tags-changed\", this.presentTags);\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cascader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cascader.vue?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","export default {\r\n 'homo sapiens': 'Human',\r\n 'rattus norvegicus': 'Rat',\r\n 'mus musculus': 'Mouse',\r\n 'sus scrofa domesticus': 'Pig',\r\n 'sus scrofa': 'Boar',\r\n 'felis catus': 'Cat'\r\n}\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/* eslint-disable no-alert, no-console */\r\nimport algoliasearch from 'algoliasearch'\r\n\r\n// export `createAlgoliaClient` to use it in page components\r\nexport class AlgoliaClient {\r\n constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n this.client = algoliasearch(\r\n algoliaId,\r\n algoliaKey\r\n )\r\n this.PENNSIEVE_API_LOCATION = PENNSIEVE_API_LOCATION\r\n }\r\n initIndex(ALGOLIA_INDEX) {\r\n this.index = this.client.initIndex(ALGOLIA_INDEX);\r\n }\r\n\r\n getAlgoliaFacets(propPathMapping) {\r\n const map = new Map(Object.entries(propPathMapping));\r\n const facetPropPaths = Array.from(map.keys());\r\n let facetData = []\r\n let facetId = 0\r\n return this.index\r\n .search('', {\r\n sortFacetValuesBy: 'alpha',\r\n facets: facetPropPaths\r\n })\r\n .then(response => {\r\n facetPropPaths.map((facetPropPath) => {\r\n var children = []\r\n const responseFacets = response.facets\r\n if (responseFacets === undefined) { return }\r\n const responseFacetChildren =\r\n responseFacets[facetPropPath] == undefined\r\n ? {}\r\n : responseFacets[facetPropPath]\r\n Object.keys(responseFacetChildren).map(facet => {\r\n children.push({\r\n label: facet,\r\n id: facetId++,\r\n facetPropPath: facetPropPath\r\n })\r\n })\r\n if (children.length > 0) {\r\n facetData.push({\r\n label: map.get(facetPropPath),\r\n id: facetId++,\r\n children: children,\r\n key: facetPropPath\r\n })\r\n }\r\n })\r\n return facetData\r\n })\r\n }\r\n\r\n // Returns all DOIs of all versions for a given discover dataset\r\n _discoverAllDois(discoverId, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n return new Promise(resolve => {\r\n fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r => r.json()).then(dataset => {\r\n resolve(dataset.map(version => version.doi))\r\n })\r\n })\r\n }\r\n\r\n // Get all dois given a list of discoverIds\r\n _expandDois(discoverIds, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n return new Promise(resolve => {\r\n let promiseList = discoverIds.map(discoverId => this._discoverAllDois(discoverId, PENNSIEVE_API_LOCATION))\r\n Promise.all(promiseList).then((values) => {\r\n resolve(values.flat())\r\n });\r\n })\r\n }\r\n\r\n _processResultsForCards(results) {\r\n let newResults = []\r\n let newResult = {}\r\n for (let res of results) {\r\n newResult = { ...res }\r\n newResult = {\r\n doi: res.item.curie.split(':')[1],\r\n name: res.item.name,\r\n description: res.item.description,\r\n updated: res.pennsieve.updatedAt,\r\n publishDate: res.pennsieve.publishDate,\r\n datasetId: res.objectID,\r\n detailsReady: false\r\n }\r\n newResults.push(newResult)\r\n }\r\n return newResults\r\n }\r\n\r\n _processAnatomy(hits) {\r\n let foundKeyWords = []\r\n let uniqueKeywords = []\r\n hits.forEach(hit => {\r\n if (hit.item && hit.item.keywords) {\r\n hit.item.keywords.forEach(keywordObj => {\r\n let keyword = keywordObj.keyword.toUpperCase()\r\n if (keyword.includes('UBERON') || keyword.includes('ILX')) {\r\n foundKeyWords.push(this._processUberonURL(keyword))\r\n }\r\n })\r\n }\r\n if (hit.anatomy && hit.anatomy.organ ) {\r\n hit.anatomy.organ.forEach(anatomy => {\r\n if (anatomy.curie) {\r\n foundKeyWords.push(anatomy.curie)\r\n }\r\n })\r\n }\r\n })\r\n uniqueKeywords = [...new Set(foundKeyWords)]\r\n return uniqueKeywords\r\n }\r\n\r\n _processUberonURL(url) {\r\n let ub = url.split('/').pop()\r\n return ub.replace('_', ':')\r\n }\r\n\r\n /**\r\n * Get Search results\r\n * This is using fetch from the Algolia API\r\n */\r\n search(filter, query = '', hitsperPage = 10, page = 1) {\r\n return new Promise(resolve => {\r\n this.index\r\n .search(query, {\r\n facets: ['*'],\r\n hitsPerPage: hitsperPage,\r\n page: page - 1,\r\n filters: filter,\r\n attributesToHighlight: [],\r\n attributesToRetrieve: [\r\n 'pennsieve.publishDate',\r\n 'pennsieve.updatedAt',\r\n 'item.curie',\r\n 'item.name',\r\n 'item.description',\r\n 'objectID',\r\n ],\r\n })\r\n .then(response => {\r\n let searchData = {\r\n items: this._processResultsForCards(response.hits),\r\n total: response.nbHits,\r\n discoverIds: response.hits.map(r => r.pennsieve.identifier),\r\n dois: response.hits.map(r => r.item.curie.split(':')[1])\r\n }\r\n resolve(searchData)\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Get key words\r\n * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out\r\n */\r\n anatomyInSearch(filter, query = '', hitsperPage = 999999, page = 1) {\r\n return new Promise(resolve => {\r\n this.index\r\n .search(query, {\r\n facets: ['*'],\r\n hitsPerPage: hitsperPage,\r\n page: page - 1,\r\n filters: filter,\r\n attributesToHighlight: [],\r\n attributesToRetrieve: [\r\n 'item.keywords.keyword',\r\n 'anatomy.organ.name',\r\n 'anatomy.organ.curie'\r\n ],\r\n })\r\n .then(response => {\r\n let anatomyAsUberons = this._processAnatomy(response.hits)\r\n resolve(anatomyAsUberons)\r\n })\r\n })\r\n }\r\n}\r\n","/* eslint-disable no-alert, no-console */\r\n\r\n// Mapping between display categories and their Algolia index property path\r\n// Used for populating the Dataset Search Results facet menu dynamically\r\nexport const facetPropPathMapping = {\r\n 'anatomy.organ.name' : 'Anatomical Structure',\r\n 'organisms.primary.species.name' : 'Species',\r\n 'item.modalities.keyword' : 'Experimental Approach',\r\n 'attributes.subject.sex.value' : 'Sex',\r\n 'attributes.subject.ageCategory.value' : 'Age Categories',\r\n 'item.keywords.keyword' : 'Keywords'\r\n}\r\n\r\n// Same as above, but these show on the sidebar filters\r\nexport const shownFilters = {\r\n 'anatomy.organ.name' : 'Anatomical Structure',\r\n 'organisms.primary.species.name' : 'Species',\r\n 'item.modalities.keyword' : 'Experimental Approach',\r\n 'attributes.subject.sex.value' : 'Sex',\r\n 'attributes.subject.ageCategory.value' : 'Age Categories',\r\n}\r\n\r\n/* Returns filter for searching algolia. All facets of the same category are joined with OR,\r\n * and each of those results is then joined with an AND.\r\n * i.e. (color:blue OR color:red) AND (shape:circle OR shape:red) */\r\nexport function getFilters(selectedFacetArray=undefined) {\r\n // return all datasets if no filter\r\n if (selectedFacetArray === undefined) {\r\n return 'NOT item.published.status:embargo'\r\n }\r\n\r\n // Switch the 'term' attribute to 'label' if 'label' does not exist \r\n selectedFacetArray.forEach(f=>f.label=f.facet)\r\n \r\n\r\n let facets = removeShowAllFacets(selectedFacetArray)\r\n\r\n let filters = \"NOT item.published.status:embargo\";\r\n filters = `(${filters}) AND `;\r\n\r\n const facetPropPaths = Object.keys(facetPropPathMapping);\r\n facetPropPaths.map((facetPropPath) => {\r\n const facetsToBool = facets.filter(\r\n (facet) => facet.facetPropPath == facetPropPath\r\n );\r\n let orFilters = \"\";\r\n let andFilters = \"\";\r\n facetsToBool.map((facet) => {\r\n if (facet.AND){\r\n andFilters += `AND \"${facetPropPath}\":\"${facet.label}\"`;\r\n } else {\r\n orFilters += `\"${facetPropPath}\":\"${facet.label}\" OR `;\r\n }\r\n });\r\n if (orFilters == \"\" && andFilters ==\"\") {\r\n return;\r\n }\r\n orFilters = `(${orFilters.substring(0, orFilters.lastIndexOf(\" OR \"))})` // remove last OR\r\n\r\n filters += `${orFilters + andFilters} AND `; // Put them together\r\n // (Note that we add an extra AND in case there are facets at a higher level)\r\n\r\n filters = filters.split('()AND ').join(''); // Handle case where there where no OR facets\r\n });\r\n return filters.substring(0, filters.lastIndexOf(\" AND \"));\r\n}\r\n\r\nfunction removeShowAllFacets(facetArray){\r\n return facetArray.filter( f => f.label !== 'Show all')\r\n}","<template>\r\n <div class=\"filters\">\r\n <map-svg-sprite-color />\r\n <transition name=\"el-zoom-in-top\">\r\n <span v-show=\"showFilters\" class=\"search-filters transition-box\">\r\n <custom-cascader\r\n class=\"cascader\"\r\n ref=\"cascader\"\r\n v-model=\"cascadeSelected\"\r\n placeholder\r\n :collapse-tags=\"true\"\r\n :options=\"options\"\r\n :props=\"props\"\r\n @change=\"cascadeEvent($event)\"\r\n @expand-change=\"cascadeExpandChange\"\r\n :show-all-levels=\"false\"\r\n :append-to-body=\"false\"\r\n @tags-changed=\"tagsChangedCallback\"\r\n ></custom-cascader>\r\n <div v-if=\"showFiltersText\" class=\"filter-default-value\">\r\n Filters\r\n </div>\r\n <el-popover\r\n title=\"How do filters work?\"\r\n width=\"250\"\r\n trigger=\"hover\"\r\n :append-to-body=false\r\n popper-class=\"popover\"\r\n >\r\n <map-svg-icon slot=\"reference\" icon=\"help\" class=\"help\"/>\r\n <div >\r\n <strong>Within categories:</strong> OR \r\n <br/>\r\n example: 'heart' OR 'colon'\r\n <br/>\r\n <br/>\r\n <strong>Between categories:</strong> AND\r\n <br/>\r\n example: 'rat' AND 'lung'\r\n </div>\r\n </el-popover>\r\n \r\n </span>\r\n </transition>\r\n\r\n <el-select\r\n class=\"number-shown-select\"\r\n v-model=\"numberShown\"\r\n placeholder=\"10\"\r\n @change=\"numberShownChanged($event)\"\r\n >\r\n <el-option\r\n v-for=\"item in numberDatasetsShown\"\r\n :key=\"item\"\r\n :label=\"item\"\r\n :value=\"item\"\r\n ></el-option>\r\n </el-select>\r\n <span class=\"dataset-results-feedback\">{{ this.numberOfResultsText }}</span>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Option, Select, Popover } from \"element-ui\";\r\nimport CustomCascader from \"./Cascader\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport speciesMap from \"./species-map\";\r\nimport { MapSvgIcon, MapSvgSpriteColor } from \"@abi-software/svg-sprite\";\r\n\r\nimport {AlgoliaClient} from \"../algolia/algolia.js\";\r\nimport {facetPropPathMapping} from \"../algolia/utils.js\";\r\n\r\nlocale.use(lang);\r\nVue.use(Option);\r\nVue.use(Select);\r\nVue.use(Popover)\r\n\r\nconst capitalise = function (txt) {\r\n return txt.charAt(0).toUpperCase() + txt.slice(1);\r\n};\r\n\r\nconst convertReadableLabel = function (original) {\r\n const name = original.toLowerCase();\r\n if (speciesMap[name]) {\r\n return capitalise(speciesMap[name]);\r\n } else {\r\n return capitalise(name);\r\n }\r\n};\r\n\r\nexport default {\r\n name: \"SearchFilters\",\r\n components: {\r\n CustomCascader,\r\n MapSvgIcon,\r\n MapSvgSpriteColor,\r\n },\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: Object,\r\n envVars: {\r\n type: Object,\r\n default: ()=>{}\r\n },\r\n },\r\n data: function () {\r\n return {\r\n cascaderIsReady: false,\r\n previousShowAllChecked: {\r\n species: false,\r\n gender: false,\r\n organ: false,\r\n datasets: false,\r\n },\r\n showFilters: true,\r\n showFiltersText: true,\r\n cascadeSelected: [],\r\n cascadeSelectedWithBoolean: [], \r\n numberShown: 10,\r\n filters: [],\r\n facets: [\"Species\", \"Gender\", \"Organ\", \"Datasets\"],\r\n numberDatasetsShown: [\"10\", \"20\", \"50\"],\r\n props: { multiple: true },\r\n options: [\r\n {\r\n value: \"Species\",\r\n label: \"Species\",\r\n children: [{}],\r\n },\r\n ],\r\n };\r\n },\r\n computed: {\r\n numberOfResultsText: function () {\r\n return `${this.entry.numberOfHits} results | Showing`;\r\n },\r\n },\r\n methods: {\r\n createCascaderItemValue: function (term, facet) {\r\n if (facet) return term + \">\" + facet;\r\n else return term;\r\n },\r\n populateCascader: function () {\r\n return new Promise((resolve) => {\r\n // Algolia facet serach\r\n this.algoliaClient.getAlgoliaFacets(facetPropPathMapping)\r\n .then((data) => {\r\n this.facets = data;\r\n this.options = data;\r\n\r\n // create top level of options in cascader\r\n this.options.forEach((facet, i) => {\r\n this.options[i].label = convertReadableLabel(facet.label);\r\n this.options[i].value = this.createCascaderItemValue(\r\n facet.key,\r\n undefined\r\n );\r\n\r\n // put \"Show all\" as first option\r\n this.options[i].children.unshift({\r\n value: this.createCascaderItemValue(\"Show all\"),\r\n label: \"Show all\",\r\n });\r\n\r\n // populate second level of options \r\n this.options[i].children.forEach((facetItem, j) => {\r\n this.options[i].children[j].label = convertReadableLabel(\r\n facetItem.label\r\n );\r\n this.options[i].children[j].value =\r\n this.createCascaderItemValue(facet.label, facetItem.label);\r\n });\r\n });\r\n this.createDataTypeFacet();\r\n })\r\n .finally(() => {\r\n resolve();\r\n });\r\n });\r\n },\r\n tagsChangedCallback: function (presentTags) {\r\n if (presentTags.length > 0) {\r\n this.showFiltersText = false;\r\n } else {\r\n this.showFiltersText = true;\r\n }\r\n },\r\n // cascadeEvent: initiate searches based off cascader changes\r\n cascadeEvent: function (event) {\r\n if (event) {\r\n // Check for show all in selected cascade options\r\n event = this.showAllEventModifier(event);\r\n\r\n // Create results for the filter update \r\n let filterKeys = event.filter( selection => selection !== undefined).map( fs => ({\r\n facetPropPath: fs[0], \r\n facet: fs[1].split(\">\")[1],\r\n term: fs[1].split(\">\")[0], \r\n AND: fs[2] // for setting the boolean\r\n }))\r\n\r\n // Move results from arrays to object for use on scicrunch (note that we remove 'duplicate' as that is only needed for filter keys)\r\n let filters = event.filter( selection => selection !== undefined).map( fs => {\r\n let propPath = fs[0].includes('duplicate') ? fs[0].split('duplicate')[0] : fs[0]\r\n return {\r\n facetPropPath: propPath, \r\n facet: fs[1].split(\">\")[1],\r\n term: fs[1].split(\">\")[0], \r\n AND: fs[2] // for setting the boolean\r\n }\r\n })\r\n\r\n\r\n this.$emit('loading', true) // let sidebarcontent wait for the requests\r\n\r\n this.$emit(\"filterResults\", filters); // emit filters for apps above sidebar\r\n this.setCascader(filterKeys); //update our cascader v-model if we modified the event\r\n this.makeCascadeLabelsClickable();\r\n }\r\n },\r\n // showAllEventModifier: Modifies a cascade event to unclick all selections in category if \"show all\" is clicked. Also unchecks \"Show all\" if any secection is clicked\r\n // *NOTE* Does NOT remove 'Show all' selections from showing in 'cascadeSelected'\r\n showAllEventModifier: function (event) {\r\n // check if show all is in the cascader checked option list\r\n let hasShowAll = event\r\n .map((ev) => (ev ? ev[1].toLowerCase().includes(\"show all\") : false))\r\n .includes(true);\r\n // remove all selected options below the show all if checked\r\n if (hasShowAll) {\r\n let modifiedEvent = [];\r\n let facetMaps = {};\r\n //catagorised different facet items\r\n for (const i in event) {\r\n if (facetMaps[event[i][0]] === undefined) facetMaps[event[i][0]] = [];\r\n facetMaps[event[i][0]].push(event[i]);\r\n }\r\n // go through each facets\r\n for (const facet in facetMaps) {\r\n let showAll = undefined;\r\n // Find the show all item if any\r\n for (let i = facetMaps[facet].length - 1; i >= 0; i--) {\r\n if (facetMaps[facet][i][1].toLowerCase().includes(\"show all\")) {\r\n //seperate the showAll item and the rest\r\n showAll = facetMaps[facet].splice(i, 1)[0];\r\n break;\r\n }\r\n }\r\n if (showAll) {\r\n if (this.previousShowAllChecked[facet]) {\r\n //Unset the show all if it was present previously\r\n //and there are other items\r\n if (facetMaps[facet].length > 0)\r\n modifiedEvent.push(...facetMaps[facet]);\r\n else modifiedEvent.push(showAll);\r\n } else {\r\n //showAll is turned on\r\n modifiedEvent.push(showAll);\r\n }\r\n } else {\r\n modifiedEvent.push(...facetMaps[facet]);\r\n }\r\n }\r\n //Make sure the expanded item are sorted first.\r\n return modifiedEvent.sort((a, b) => {\r\n if (this.__expandItem__) {\r\n if (a[0] == this.__expandItem__) {\r\n if (b[0] == this.__expandItem__) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n } else if (b[0] == this.__expandItem__) {\r\n if (a[0] == this.__expandItem__) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n } else return 0;\r\n });\r\n }\r\n return event;\r\n },\r\n createDataTypeFacet: function(){\r\n let dataFacet = {...this.facets[2]} // copy the 'Experiemental approach' facet\r\n let count = this.facets.at(-1).id // get the last id count\r\n\r\n // Step through the children that are valid data types, switch thier values \r\n let newChildren = dataFacet.children.filter( el=> {\r\n if (el.label === 'Scaffold' || el.label === 'Simulation' || el.label === 'Show all'){\r\n el.key = el.label\r\n el.id = count\r\n el.value = el.value.replace('Experimental approach', 'Data type')\r\n count++\r\n return el\r\n }\r\n })\r\n dataFacet.id = count\r\n dataFacet.key = 'Data type'\r\n // Add 'duplicate' so that the key is unique. This is removed in the cascade event for filtering\r\n dataFacet.value += 'duplicate' \r\n dataFacet.children = newChildren\r\n dataFacet.label = 'Data type'\r\n this.facets.push(dataFacet)\r\n },\r\n cascadeExpandChange: function (event) {\r\n //work around as the expand item may change on modifying the cascade props\r\n this.__expandItem__ = event;\r\n this.makeCascadeLabelsClickable();\r\n },\r\n numberShownChanged: function (event) {\r\n this.$emit(\"numberPerPage\", parseInt(event));\r\n },\r\n updatePreviousShowAllChecked: function (options) {\r\n //Reset the states\r\n for (const facet in this.previousShowAllChecked) {\r\n this.previousShowAllChecked[facet] = false;\r\n }\r\n options.forEach((element) => {\r\n if (element[1].toLowerCase().includes(\"show all\"))\r\n this.previousShowAllChecked[element[0]] = true;\r\n });\r\n },\r\n // setCascader: Clears previous selections and takes in an array of facets to select: filterFacets\r\n // facets are in the form:\r\n // {\r\n // facetPropPath: 'anatomy.organ.name',\r\n // term: 'Sex',\r\n // facet: 'Male'\r\n // AND: true // Optional value for setting the boolean within a facet\r\n // }\r\n setCascader: function (filterFacets) {\r\n //Do not set the value unless it is ready\r\n if (this.cascaderIsReady && filterFacets && filterFacets.length != 0) {\r\n this.cascadeSelected = filterFacets.map(e => {\r\n return [\r\n e.facetPropPath,\r\n this.createCascaderItemValue(capitalise(e.term), e.facet),\r\n ]\r\n });\r\n\r\n // Unforttunately the cascader is very particular about it's v-model\r\n // to get around this we create a clone of it and use this clone for adding our boolean information\r\n this.cascadeSelectedWithBoolean= filterFacets.map(e => {\r\n return [\r\n e.facetPropPath,\r\n this.createCascaderItemValue(capitalise(e.term), e.facet),\r\n e.AND\r\n ]\r\n });\r\n this.updatePreviousShowAllChecked(this.cascadeSelected);\r\n }\r\n },\r\n addFilter: function (filter) {\r\n //Do not set the value unless it is ready\r\n if (this.cascaderIsReady && filter) {\r\n if (this.validateFilter(filter)) {\r\n this.cascadeSelected.filter(f=>f.term != filter.term)\r\n this.cascadeSelected.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet), filter.AND])\r\n this.cascadeSelectedWithBoolean.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet), filter.AND])\r\n // The 'AND' her is to set the boolean value when we search on the filters. It can be undefined without breaking anything\r\n return true;\r\n }\r\n }\r\n },\r\n initiateSearch: function() {\r\n this.cascadeEvent(this.cascadeSelectedWithBoolean)\r\n },\r\n // checkShowAllBoxes: Checks each 'Show all' cascade option by using the setCascader function\r\n checkShowAllBoxes: function(){\r\n this.setCascader(\r\n this.options.map(option => {\r\n return {\r\n facetPropPath: option.value,\r\n term: option.label,\r\n facet: 'Show all'\r\n }\r\n })\r\n )\r\n },\r\n makeCascadeLabelsClickable: function () {\r\n // Next tick allows the cascader menu to change\r\n this.$nextTick(() => {\r\n this.$refs.cascader.$el\r\n .querySelectorAll(\".el-cascader-node__label\")\r\n .forEach((el) => {\r\n // step through each cascade label\r\n el.onclick = function () {\r\n const checkbox = this.previousElementSibling;\r\n if (checkbox) {\r\n if (!checkbox.parentElement.attributes[\"aria-owns\"]) {\r\n // check if we are at the lowest level of cascader\r\n this.previousElementSibling.click(); // Click the checkbox\r\n }\r\n }\r\n };\r\n });\r\n });\r\n },\r\n /**\r\n * Validate ther filter term to make sure the term is correct\r\n */\r\n validateFilter: function(filter) {\r\n if (filter && filter.facet && filter.term) {\r\n const item = this.createCascaderItemValue(filter.term, filter.facet);\r\n const facet = this.options.find(element => element.value === filter.facetPropPath);\r\n if (facet) {\r\n const filter = facet.children.find(element => element.value === item);\r\n if (filter)\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n /**\r\n * Return a list of valid filers given a list of filters, \r\n */\r\n getValidatedFilters: function (filters) {\r\n if (filters) {\r\n if (this.cascaderIsReady) {\r\n const result = [];\r\n filters.forEach(filter => {\r\n if (this.validateFilter(filter)) {\r\n result.push(filter);\r\n }\r\n });\r\n return result;\r\n } else return filters;\r\n }\r\n return [];\r\n },\r\n },\r\n mounted: function () {\r\n this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);\r\n this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);\r\n this.populateCascader().then(() => {\r\n this.cascaderIsReady = true;\r\n this.checkShowAllBoxes();\r\n this.setCascader(this.entry.filterFacets);\r\n this.makeCascadeLabelsClickable();\r\n this.$emit(\"cascaderReady\");\r\n });\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.filter-default-value {\r\n pointer-events: none;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n padding-top: 10px;\r\n padding-left: 16px;\r\n}\r\n\r\n.help {\r\n width: 24px !important;\r\n height: 24px;\r\n transform: scale(1.1);\r\n color: #8300bf;\r\n cursor: pointer;\r\n}\r\n\r\n.popover {\r\n color: rgb(48, 49, 51);\r\n font-family: Asap;\r\n margin: 12px;\r\n}\r\n\r\n.filter-icon-inside {\r\n width: 12px !important;\r\n height: 12px !important;\r\n color: #292b66;\r\n transform: scale(2) !important;\r\n margin-bottom: 0px !important;\r\n}\r\n\r\n.cascader {\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: 500;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: normal;\r\n letter-spacing: normal;\r\n color: #292b66;\r\n text-align: center;\r\n padding-bottom: 6px;\r\n}\r\n\r\n.cascader >>> .el-cascder-panel {\r\n max-height: 500px;\r\n}\r\n\r\n.cascader >>> .el-scrollbar__wrap {\r\n overflow-x: hidden;\r\n margin-bottom: 2px !important;\r\n}\r\n\r\n.cascader >>> li[aria-owns*=\"cascader\"] > .el-checkbox {\r\n display: none;\r\n}\r\n\r\n.dataset-results-feedback {\r\n float: right;\r\n text-align: right;\r\n color: rgb(48, 49, 51);\r\n font-family: Asap;\r\n font-size: 18px;\r\n font-weight: 500;\r\n padding-top: 8px;\r\n}\r\n\r\n.search-filters {\r\n position: relative;\r\n float: left;\r\n padding-right: 15px;\r\n padding-bottom: 12px;\r\n}\r\n\r\n.number-shown-select {\r\n float: right;\r\n}\r\n\r\n.number-shown-select >>> .el-input__inner {\r\n width: 68px;\r\n height: 40px;\r\n color: rgb(48, 49, 51);\r\n}\r\n\r\n.search-filters >>> .el-cascader-node.is-active {\r\n color: #8300bf;\r\n}\r\n\r\n.search-filters >>> .el-cascader-node.in-active-path {\r\n color: #8300bf;\r\n}\r\n\r\n.search-filters >>> .el-checkbox__input.is-checked > .el-checkbox__inner {\r\n background-color: #8300bf;\r\n border-color: #8300bf;\r\n}\r\n\r\n.cascader >>> .el-cascader-menu:nth-child(2) .el-cascader-node:first-child {\r\n border-bottom: 1px solid #e4e7ed;\r\n}\r\n\r\n.cascader >>> .el-cascader-node__label {\r\n text-align: left;\r\n}\r\n\r\n.filters >>> .el-popover {\r\n background: #f3ecf6 !important;\r\n border: 1px solid #8300BF;\r\n border-radius: 4px;\r\n color: #303133 !important;\r\n font-size: 12px;\r\n line-height: 18px;\r\n \r\n \r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"top\"] .popper__arrow {\r\n border-top-color: #8300BF;\r\n border-bottom-width: 0;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"top\"] .popper__arrow::after {\r\n border-top-color: #f3ecf6;\r\n border-bottom-width: 0;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"bottom\"] .popper__arrow {\r\n border-top-width: 0;\r\n border-bottom-color: #8300BF;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"bottom\"] .popper__arrow::after {\r\n border-top-width: 0;\r\n border-bottom-color: #f3ecf6;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"right\"] .popper__arrow {\r\n border-right-color: #8300BF;\r\n border-left-width: 0;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"right\"] .popper__arrow::after {\r\n border-right-color: #f3ecf6;\r\n border-left-width: 0;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"left\"] .popper__arrow {\r\n border-right-width: 0;\r\n border-left-color: #8300BF;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"left\"] .popper__arrow::after {\r\n border-right-width: 0;\r\n border-left-color: #f3ecf6;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SearchFilters.vue?vue&type=template&id=7f7ea160&scoped=true&\"\nimport script from \"./SearchFilters.vue?vue&type=script&lang=js&\"\nexport * from \"./SearchFilters.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7f7ea160\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"dataset-card-container\"},[_c('div',{ref:\"card\",staticClass:\"dataset-card\"},[_c('div',{staticClass:\"seperator-path\"}),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"card\"},[_c('span',{staticClass:\"card-left\"},[(!_vm.loading && _vm.discoverId)?_c('image-gallery',{attrs:{\"datasetId\":_vm.discoverId,\"datasetVersion\":_vm.version,\"entry\":_vm.entry,\"envVars\":_vm.envVars,\"label\":_vm.label,\"datasetThumbnail\":_vm.thumbnail,\"dataset-biolucida\":_vm.biolucidaData,\"category\":_vm.currentCategory},on:{\"card-clicked\":_vm.galleryClicked}}):_vm._e()],1),_c('div',{staticClass:\"card-right\"},[_c('div',{staticClass:\"title\",on:{\"click\":_vm.cardClicked}},[_vm._v(_vm._s(_vm.entry.name))]),_c('div',{staticClass:\"details\"},[_vm._v(_vm._s(_vm.contributors)+\" \"+_vm._s(_vm.entry.publishDate ? (\"(\" + _vm.publishYear + \")\") : ''))]),_c('div',{staticClass:\"details\"},[_vm._v(_vm._s(_vm.samples))]),(!_vm.entry.detailsReady)?_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(!_vm.entry.detailsReady),expression:\"!entry.detailsReady\"}],staticClass:\"details loading-icon\"}):_vm._e(),_c('div',[(_vm.entry.simulation)?_c('el-button',{staticClass:\"button\",attrs:{\"size\":\"mini\",\"icon\":\"el-icon-view\"},on:{\"click\":_vm.openRepository}},[_vm._v(\"View repository\")]):_vm._e()],1),_c('div',{staticClass:\"badges-container\"},[_c('badges-group',{attrs:{\"entry\":_vm.entry,\"dataset-biolucida\":_vm.biolucidaData},on:{\"categoryChanged\":_vm.categoryChanged}})],1)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.categories['All'].size > 1)?_c('div',{ref:\"container\",staticClass:\"container\"},[_c('div',[_vm._v(\" View data types: \")]),_vm._l((_vm.categories),function(item,key){return [(item.size > 0)?_c('el-button',{key:key,class:[{ 'active': key == _vm.active},'tag-button'],attrs:{\"size\":\"small\"},on:{\"click\":function($event){return _vm.categoryClicked(key)}}},[_vm._v(_vm._s(key + \" (\" + item.size + \")\")+\" \")]):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"categories['All'].size > 1\" class=\"container\" ref=\"container\">\r\n <div>\r\n View data types:\r\n </div>\r\n <template v-for=\"(item, key) in categories\" >\r\n <el-button\r\n v-if=\"item.size > 0\"\r\n :class=\"[{ 'active': key == active},'tag-button']\"\r\n @click=\"categoryClicked(key)\"\r\n size=\"small\" :key=\"key\">{{ key + \" (\" + item.size + \")\" }}\r\n </el-button>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Button } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\n\r\nexport default {\r\n name: \"BadgesGroup\",\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n additionalLinks: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n datasetBiolucida: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n },\r\n data: function () {\r\n return {\r\n categories: { \"All\": {size: 1} },\r\n active: \"All\"\r\n };\r\n },\r\n methods: {\r\n addToCategories: function (array, name) {\r\n if (array && array.length > 0) {\r\n this.categories[name] = { size: array.length };\r\n this.categories[\"All\"].size += array.length;\r\n }\r\n },\r\n addSimulationsToCategories: function (array) {\r\n if (array && array.length > 0) {\r\n const size = 1;\r\n this.categories[\"Simulations\"] = { size };\r\n this.categories[\"All\"].size += size;\r\n }\r\n },\r\n categoryClicked: function(name) {\r\n this.active = name;\r\n this.$emit(\"categoryChanged\", name);\r\n }\r\n },\r\n watch: {\r\n datasetBiolucida: {\r\n deep: true,\r\n immediate: true,\r\n handler: function (biolucidaData) {\r\n if (\"dataset_images\" in biolucidaData) {\r\n this.addToCategories(biolucidaData[\"dataset_images\"], \"Biolucida Images\");\r\n }\r\n }\r\n },\r\n entry: {\r\n deep: true,\r\n immediate: true,\r\n handler: function () {\r\n this.addToCategories(this.entry.scaffolds, 'Scaffolds');\r\n this.addToCategories(this.entry.segmentation, 'Segmentations');\r\n this.addToCategories(this.entry.plots, 'Plots');\r\n this.addSimulationsToCategories(this.entry.simulation);\r\n /** disable the following\r\n this.addToCategories(this.entry.images, 'Images');\r\n this.addToCategories(this.entry.videos, 'Videos');\r\n **/\r\n }\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.tag-button,\r\n.tag-button:hover,\r\n.tag-button:focus,\r\n.tag-button.active\r\n{\r\n border-radius: 4px;\r\n font-size: 0.75rem;\r\n padding: 0.2rem 0.2rem;\r\n margin: 0.5rem 0 0 0;\r\n margin-right: 0.75rem!important;\r\n}\r\n\r\n.tag-button,\r\n.tag-button:hover,\r\n.tag-button:focus\r\n{\r\n background: #f9f2fc;\r\n border: 1px solid #8300BF;\r\n color: #8300BF;\r\n}\r\n\r\n.tag-button.active\r\n{\r\n background: #8300BF;\r\n border: 1px solid #8300BF;\r\n color: #fff;\r\n}\r\n\r\n.tag-button+.tag-button\r\n{\r\n margin-left:0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BadgesGroup.vue?vue&type=template&id=712c1be9&scoped=true&\"\nimport script from \"./BadgesGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./BadgesGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"712c1be9\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\r\nconst EventBus = new Vue();\r\nexport default EventBus;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"full-size\"},[_c('gallery',{ref:\"gallery\",attrs:{\"bottomSpacer\":_vm.bottomSpacer,\"cardWidth\":10,\"items\":_vm.galleryItems,\"max-width\":_vm.maxWidth,\"show-indicator-bar\":false,\"show-card-details\":true,\"highlight-active\":false,\"image-style\":_vm.imageStyle,\"image-container-style\":_vm.imageContainerStyle,\"body-style\":_vm.bodyStyle,\"shadow\":_vm.shadow},on:{\"card-clicked\":_vm.cardClicked}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","<template>\r\n <div class=\"full-size\">\r\n <gallery\r\n :bottomSpacer=\"bottomSpacer\"\r\n :cardWidth=\"10\"\r\n :items=\"galleryItems\"\r\n :max-width=\"maxWidth\"\r\n :show-indicator-bar=\"false\"\r\n :show-card-details=\"true\"\r\n :highlight-active=\"false\"\r\n :image-style=\"imageStyle\"\r\n :image-container-style=\"imageContainerStyle\"\r\n :body-style=\"bodyStyle\"\r\n :shadow=\"shadow\"\r\n @card-clicked=\"cardClicked\"\r\n ref=\"gallery\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nconst baseName = (str) => {\r\n return str.split(\"\\\\\").pop().split(\"/\").pop();\r\n};\r\n\r\nconst capitalise = function (string) {\r\n return string.replace(/\\b\\w/g, (v) => v.toUpperCase());\r\n};\r\n\r\nimport GalleryHelper from \"@abi-software/gallery/src/mixins/GalleryHelpers\";\r\nimport Gallery from \"@abi-software/gallery\";\r\nimport \"@abi-software/gallery/dist/gallery.css\";\r\n\r\nexport default {\r\n name: \"ImageGallery\",\r\n components: { Gallery },\r\n mixins: [GalleryHelper],\r\n props: {\r\n datasetBiolucida: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n plots: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n datasetId: {\r\n type: Number,\r\n default: -1,\r\n },\r\n datasetVersion: {\r\n type: Number,\r\n default: -1,\r\n },\r\n datasetThumbnail: {\r\n type: String,\r\n default: \"\",\r\n },\r\n category: {\r\n type: String,\r\n default: \"All\",\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n },\r\n data() {\r\n return {\r\n currentIndex: 0,\r\n ro: null,\r\n maxWidth: 3,\r\n items: {\r\n \"Biolucida Images\": [],\r\n 'Dataset': [],\r\n 'Images': [],\r\n 'Scaffolds': [],\r\n 'Segmentations': [],\r\n 'Simulations': [],\r\n 'Videos': [],\r\n 'Plots': [],\r\n },\r\n bodyStyle: { padding: '0px', background: '#ffffff' },\r\n imageContainerStyle: {\r\n width: '160px',\r\n height: '160px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n imageStyle: { maxWidth: '160px', maxHeight: '160px'},\r\n shadow: \"never\",\r\n bottomSpacer: { minHeight: '0rem' },\r\n resetIndex: false\r\n };\r\n },\r\n methods: {\r\n cardClicked: function(payload) {\r\n this.$emit('card-clicked', payload);\r\n },\r\n createSciCurnchItems: function () {\r\n this.createDatasetItem();\r\n this.createScaffoldItems();\r\n this.createSimulationItems();\r\n this.createPlotItems();\r\n this.createSegmentationItems();\r\n /* Disable these two\r\n this.createImageItems();\r\n this.createVideoItems();\r\n */\r\n },\r\n createDatasetItem: function () {\r\n const link = `${this.envVars.ROOT_URL}/datasets/${this.datasetId}?type=dataset`\r\n if (this.datasetThumbnail) {\r\n this.items['Dataset'].push({\r\n id: -1,\r\n //Work around gallery requires a truthy string\r\n title: \" \",\r\n type: `Dataset ${this.datasetId}`,\r\n thumbnail: this.datasetThumbnail,\r\n link,\r\n hideType: true,\r\n hideTitle: true,\r\n });\r\n }\r\n },\r\n createImageItems: function () {\r\n if (this.entry.images) {\r\n this.entry.images.forEach((image) => {\r\n const filePath = image.dataset.path;\r\n const id = image.identifier;\r\n const linkUrl = `${this.envVars.ROOT_URL}/datasets/imageviewer?dataset_id=${this.datasetId}&dataset_version=${this.datasetVersion}&file_path=${filePath}&mimetype=${image.mimetype.name}`;\r\n this.items['Images'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Image\",\r\n link: linkUrl,\r\n hideType: true,\r\n });\r\n });\r\n }\r\n },\r\n createPlotItems: function () {\r\n if (this.entry.plots) {\r\n this.entry.plots.forEach((plot) => {\r\n const filePath = plot.dataset.path;\r\n const id = plot.identifier;\r\n const thumbnail = this.getThumbnailForPlot(plot, this.entry.thumbnails);\r\n let thumbnailURL = undefined;\r\n let mimetype = '';\r\n if (thumbnail) {\r\n thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n file_path: thumbnail.dataset.path,\r\n });\r\n mimetype = thumbnail.mimetype.name;\r\n }\r\n const plotAnnotation = plot.datacite;\r\n const filePathPrefix = `${this.envVars.API_LOCATION}/s3-resource/${this.datasetId}/${this.datasetVersion}/files/`;\r\n const sourceUrl = filePathPrefix + plot.dataset.path;\r\n\r\n const metadata = JSON.parse(\r\n plotAnnotation.supplemental_json_metadata.description\r\n );\r\n\r\n let supplementalData = [];\r\n if (plotAnnotation.isDescribedBy) {\r\n supplementalData.push({\r\n url: filePathPrefix + plotAnnotation.isDescribedBy.path\r\n });\r\n }\r\n\r\n const resource = {\r\n dataSource: {url: sourceUrl},\r\n metadata,\r\n supplementalData\r\n }\r\n\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n title: \"View plot\",\r\n type: \"Plot\",\r\n discoverId: this.discoverId,\r\n version: this.datasetVersion,\r\n };\r\n this.items['Plots'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Plot\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype\r\n });\r\n });\r\n }\r\n },\r\n createScaffoldItems: function () {\r\n if (this.entry.scaffolds) {\r\n window.entry = this.entry\r\n let index = 0;\r\n this.entry.scaffolds.forEach((scaffold, i) => {\r\n const filePath = scaffold.dataset.path;\r\n const id = scaffold.identifier;\r\n const thumbnail = this.getThumbnailForScaffold(\r\n scaffold,\r\n this.entry.scaffoldViews,\r\n this.entry.thumbnails,\r\n index\r\n );\r\n let mimetype = '';\r\n let thumbnailURL = undefined;\r\n if (thumbnail) {\r\n thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n file_path: thumbnail.dataset.path,\r\n });\r\n mimetype = thumbnail.mimetype.name;\r\n }\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${filePath}`,\r\n title: \"View 3D scaffold\",\r\n type: \"Scaffold\",\r\n discoverId: this.datasetId,\r\n apiLocation: this.envVars.API_LOCATION,\r\n version: this.datasetVersion,\r\n banner: this.datasetThumbnail,\r\n contextCardUrl: this.getContextCardUrl(i)\r\n };\r\n this.items['Scaffolds'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Scaffold\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype\r\n });\r\n });\r\n }\r\n },\r\n createSegmentationItems: function () {\r\n if (this.entry.segmentation) {\r\n this.entry.segmentation.forEach((segmentation) => {\r\n const id = segmentation.id;\r\n let filePath = segmentation.dataset.path;\r\n filePath = filePath.replaceAll(\" \", \"_\");\r\n filePath = filePath.replaceAll(\",\", \"_\");\r\n const prefix = this.envVars.NL_LINK_PREFIX;\r\n const resource = {\r\n share_link: `${prefix}/dataviewer?datasetId=${this.datasetId}&version=${this.datasetVersion}&path=files/${filePath}`,\r\n };\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n datasetId: this.datasetId,\r\n title: \"View segmentation\",\r\n type: \"Segmentation\",\r\n };\r\n const thumbnailURL = this.getSegmentationThumbnailURL(\r\n this.envVars.API_LOCATION,\r\n {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n segmentationFilePath: filePath,\r\n }\r\n );\r\n this.items['Segmentations'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Segmentation\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype: 'image/png',\r\n });\r\n });\r\n }\r\n },\r\n createSimulationItems: function () {\r\n if (this.entry.simulation && this.entry.simulation.length > 0) {\r\n let action = {\r\n label: undefined,\r\n apiLocation: this.envVars.API_LOCATION,\r\n version: this.datasetVersion,\r\n title: \"View simulation\",\r\n type: \"Simulation\",\r\n name: this.entry.name,\r\n description: this.entry.description,\r\n discoverId: this.datasetId,\r\n dataset: `${this.envVars.ROOT_URL}/datasets/${this.datasetId}?type=dataset`\r\n };\r\n this.items['Simulations'].push({\r\n id: \"simulation\",\r\n title: \" \",\r\n type: \"Simulation\",\r\n hideType: true,\r\n hideTitle: true,\r\n userData: action,\r\n });\r\n }\r\n },\r\n createVideoItems: function () {\r\n if (this.entry.videos) {\r\n this.entry.videos.forEach((video) => {\r\n const filePath = this.getS3FilePath(\r\n this.datasetId,\r\n this.datasetVersion,\r\n video.dataset.path\r\n );\r\n const linkUrl = `${this.envVars.ROOT_URL}/datasets/videoviewer?dataset_version=${this.datasetVersion}&dataset_id=${this.datasetId}&file_path=${filePath}&mimetype=${video.mimetype.name}`;\r\n this.items['Videos'].push({\r\n title: video.name,\r\n type: \"Video\",\r\n thumbnail: this.defaultVideoImg,\r\n hideType: true,\r\n link: linkUrl,\r\n });\r\n });\r\n }\r\n },\r\n onResize: function () {\r\n this.maxWidth = this.$el.clientWidth;\r\n // this.$emit('resize', this.$el.clientWidth)\r\n },\r\n getContextCardUrl(scaffoldIndex){\r\n if(!this.entry.contextualInformation || this.entry.contextualInformation.length == 0){\r\n return undefined\r\n } else {\r\n // The line below checks if there is a context file for each scaffold. If there is not, we use the first context card for each scaffold.\r\n let contextIndex = this.entry['abi-contextual-information'].length == this.entry.scaffolds.length ? scaffoldIndex : 0\r\n return `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${this.entry.contextualInformation[contextIndex]}`\r\n }\r\n }\r\n },\r\n computed: {\r\n galleryItems() {\r\n if (this.resetIndex) {\r\n this.$refs.gallery.indicatorClicked(0);\r\n }\r\n let items = [...this.items[\"Dataset\"]];\r\n if (this.category === \"All\") {\r\n for (const [key, value] of Object.entries(this.items)) {\r\n if (key !== \"Dataset\")\r\n items = items.concat(value);\r\n }\r\n return items;\r\n }\r\n else\r\n return this.items[this.category];\r\n },\r\n },\r\n created: function () {\r\n this.createSciCurnchItems();\r\n },\r\n watch: {\r\n category: function() {\r\n this.resetIndex = true;\r\n },\r\n galleryItems: function() {\r\n this.resetIndex = false;\r\n },\r\n datasetBiolucida: {\r\n deep: true,\r\n immediate: true,\r\n handler: function (biolucidaData) {\r\n let items = [];\r\n if (\"dataset_images\" in biolucidaData) {\r\n items.push(\r\n ...Array.from(biolucidaData.dataset_images, (dataset_image) => {\r\n const thumbnailURL = this.getThumbnailURLFromBiolucida(\r\n this.envVars.API_LOCATION,\r\n {\r\n id: dataset_image.image_id,\r\n }\r\n );\r\n const resource = {\r\n share_link: dataset_image.share_link,\r\n id: dataset_image.image_id,\r\n itemId: dataset_image.sourcepkg_id,\r\n };\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n datasetId: this.datasetId,\r\n title: \"View image\",\r\n name: capitalise(this.label),\r\n type: \"Biolucida\",\r\n };\r\n return {\r\n id: dataset_image.image_id,\r\n title: `Biolucida Image`,\r\n type: \"Image\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n mimetype: 'image/png',\r\n hideType: true,\r\n };\r\n })\r\n );\r\n }\r\n this.items['Biolucida Images'] = items;\r\n },\r\n },\r\n },\r\n mounted() {\r\n this.ro = new ResizeObserver(this.onResize).observe(this.$el);\r\n },\r\n destroyed() {\r\n delete this.ro;\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.full-size {\r\n height: 100%;\r\n width: 244px;\r\n}\r\n\r\n.key-image-span.active {\r\n transform: scale(1.16);\r\n border: 4px #8300bf solid;\r\n}\r\n\r\n.key-image-span {\r\n display: flex;\r\n position: relative;\r\n}\r\n\r\n.overlay {\r\n position: absolute;\r\n right: 5px;\r\n top: 5px;\r\n width: 1.61em;\r\n height: 1em;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n}\r\n\r\nimg {\r\n vertical-align: bottom;\r\n}\r\n\r\na.prev,\r\na.next {\r\n display: flex;\r\n font-size: 3em;\r\n}\r\n\r\na.prev:not(.underline),\r\na.next:not(.underline) {\r\n text-decoration: none;\r\n}\r\n\r\na.prev {\r\n justify-content: flex-start;\r\n}\r\n\r\na.next {\r\n justify-content: flex-end;\r\n}\r\n\r\n.standard-gallery {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n justify-content: space-around;\r\n align-items: center;\r\n}\r\n\r\n.image-line {\r\n display: flex;\r\n margin-top: 1%;\r\n margin-bottom: 1%;\r\n flex-grow: 1;\r\n justify-content: space-between;\r\n}\r\n.disabled {\r\n opacity: 0.2;\r\n cursor: default;\r\n}\r\n\r\n.rectangle {\r\n height: 1em;\r\n width: 2em;\r\n border-radius: 3px;\r\n background-color: #555;\r\n}\r\n\r\n.full-size >>> .el-card {\r\n border: 0px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageGallery.vue?vue&type=template&id=c336c3ca&scoped=true&\"\nimport script from \"./ImageGallery.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageGallery.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c336c3ca\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div class=\"dataset-card-container\" ref=\"container\">\r\n <div class=\"dataset-card\" ref=\"card\">\r\n <div class=\"seperator-path\"></div>\r\n <div v-loading=\"loading\" class=\"card\" >\r\n <span class=\"card-left\">\r\n <image-gallery v-if=\"!loading && discoverId\" \r\n :datasetId=\"discoverId\"\r\n :datasetVersion=\"version\"\r\n :entry=\"entry\"\r\n :envVars=\"envVars\"\r\n :label=\"label\"\r\n :datasetThumbnail=\"thumbnail\"\r\n :dataset-biolucida=\"biolucidaData\"\r\n :category=\"currentCategory\"\r\n @card-clicked=\"galleryClicked\"\r\n />\r\n </span>\r\n <div class=\"card-right\" >\r\n <div class=\"title\" @click=\"cardClicked\">{{entry.name}}</div>\r\n <div class=\"details\">{{contributors}} {{entry.publishDate ? `(${publishYear})` : ''}}</div>\r\n <div class=\"details\">{{samples}}</div>\r\n <div v-if=\"!entry.detailsReady\" class=\"details loading-icon\" v-loading=\"!entry.detailsReady\"></div>\r\n <div>\r\n <el-button v-if=\"entry.simulation\" @click=\"openRepository\" size=\"mini\" class=\"button\" icon=\"el-icon-view\">View repository</el-button>\r\n </div>\r\n <div class=\"badges-container\">\r\n <badges-group\r\n :entry=\"entry\"\r\n :dataset-biolucida=\"biolucidaData\"\r\n @categoryChanged=\"categoryChanged\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport BadgesGroup from \"./BadgesGroup.vue\";\r\nimport { Button, Icon } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport EventBus from \"./EventBus\"\r\nimport speciesMap from \"./species-map\";\r\nimport ImageGallery from \"./ImageGallery.vue\";\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\nVue.use(Icon);\r\n\r\nexport default {\r\n name: \"DatasetCard\",\r\n components: { BadgesGroup, ImageGallery },\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n },\r\n data: function () {\r\n return {\r\n thumbnail: require('@/../assets/missing-image.svg'),\r\n dataLocation: this.entry.doi,\r\n discoverId: undefined,\r\n loading: true,\r\n version: 1,\r\n lastDoi: undefined,\r\n biolucidaData: undefined,\r\n currentCategory: \"All\"\r\n };\r\n },\r\n computed: {\r\n contributors: function() {\r\n let text = \"\";\r\n if (this.entry.contributors) {\r\n if (this.entry.contributors.length === 1) {\r\n text = this.lastName(this.entry.contributors[0].name);\r\n } else if (this.entry.contributors.length === 2) {\r\n text = this.lastName(this.entry.contributors[0].name) + \" & \" + this.lastName(this.entry.contributors[1].name);\r\n } else if (this.entry.contributors.length > 2) {\r\n text = this.lastName(this.entry.contributors[0].name) + \" et al.\";\r\n }\r\n }\r\n return text;\r\n },\r\n samples: function() {\r\n let text = \"\";\r\n if (this.entry.species) {\r\n if (speciesMap[this.entry.species[0].toLowerCase()]){\r\n text = `${speciesMap[this.entry.species[0].toLowerCase()]}`;\r\n } else {\r\n text = `${this.entry.species}`;\r\n }\r\n }\r\n if (this.entry.numberSamples > 0) {\r\n text += \" (\";\r\n if (this.entry.numberSamples === 1) {\r\n text += `${this.entry.numberSamples} sample`;\r\n } else if (this.entry.numberSamples > 1) {\r\n text += `${this.entry.numberSamples} samples`;\r\n }\r\n if (this.entry.numberSubjects === 1) {\r\n text += ` from ${this.entry.numberSubjects} subject`;\r\n } else if (this.entry.numberSamples > 1) {\r\n text += ` from ${this.entry.numberSubjects} subjects`;\r\n }\r\n text += \")\";\r\n }\r\n\r\n return text;\r\n },\r\n label: function(){\r\n return this.entry.organs ? this.entry.organs[0] : this.entry.name\r\n },\r\n publishYear: function() {\r\n return this.entry.publishDate.split('-')[0]\r\n }\r\n },\r\n methods: {\r\n cardClicked: function(){\r\n this.openDataset()\r\n },\r\n categoryChanged: function(name) {\r\n this.currentCategory = name;\r\n },\r\n galleryClicked: function(payload) {\r\n this.propogateCardAction(payload)\r\n },\r\n openDataset: function(){\r\n window.open(this.dataLocation,'_blank');\r\n },\r\n openRepository: function() {\r\n let apiLocation = this.envVars.API_LOCATION;\r\n this.entry.additionalLinks.forEach(function(el) {\r\n if (el.description == \"Repository\") {\r\n let xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open(\"POST\", apiLocation + \"/pmr_latest_exposure\", true);\r\n xmlhttp.setRequestHeader(\"Content-type\", \"application/json\");\r\n xmlhttp.onreadystatechange = () => {\r\n if (xmlhttp.readyState === 4) {\r\n let url = \"\";\r\n if (xmlhttp.status === 200) {\r\n url = JSON.parse(xmlhttp.responseText)[\"url\"];\r\n }\r\n if (url === \"\") {\r\n url = el.uri;\r\n }\r\n window.open(url,'_blank');\r\n }\r\n };\r\n xmlhttp.send(JSON.stringify({workspace_url: el.uri}));\r\n }\r\n });\r\n },\r\n propogateCardAction: function(action){\r\n EventBus.$emit(\"PopoverActionClick\", action)\r\n this.$emit('contextUpdate', action)\r\n },\r\n splitDOI: function(doi){\r\n return [doi.split('/')[doi.split('/').length-2], doi.split('/')[doi.split('/').length-1]]\r\n },\r\n getBanner: function () {\r\n // Only load banner if card has changed\r\n if (this.lastDoi !== this.entry.doi) {\r\n this.lastDoi = this.entry.doi\r\n this.loading = true\r\n let doi = this.splitDOI(this.entry.doi)\r\n fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${doi[0]}/${doi[1]}`)\r\n .then((response) =>{\r\n if (!response.ok){\r\n throw Error(response.statusText)\r\n } else {\r\n return response.json()\r\n }\r\n })\r\n .then((data) => {\r\n this.thumbnail = data.banner\r\n this.discoverId = data.id\r\n this.version = data.version\r\n this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`\r\n this.getBiolucidaInfo(this.discoverId)\r\n this.loading = false\r\n })\r\n .catch(() => {\r\n //set defaults if we hit an error\r\n this.thumbnail = require('@/../assets/missing-image.svg')\r\n this.discoverId = Number(this.entry.datasetId)\r\n this.loading = false\r\n });\r\n }\r\n\r\n },\r\n lastName: function(fullName){\r\n return fullName.split(',')[0]\r\n },\r\n getBiolucidaInfo: function(id) {\r\n let apiLocation = this.envVars.API_LOCATION;\r\n let endpoint = apiLocation + \"image_search/\" + id;\r\n // Add parameters if we are sent them\r\n fetch(endpoint)\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data.status == \"success\")\r\n this.biolucidaData = data;\r\n });\r\n }\r\n },\r\n created: function() {\r\n this.getBanner()\r\n },\r\n watch: {\r\n // currently not using card overflow\r\n 'entry.description': function() { // watch it\r\n this.getBanner()\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.dataset-card {\r\n padding-left: 16px;\r\n position: relative;\r\n min-height:17rem;\r\n}\r\n\r\n.title {\r\n padding-bottom: 0.75rem;\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: bold;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: 1.5;\r\n letter-spacing: 1.05px;\r\n color: #484848;\r\n cursor: pointer;\r\n}\r\n.card {\r\n padding-top: 18px;\r\n position: relative;\r\n display: flex;\r\n}\r\n\r\n.card-left{\r\n flex: 1\r\n}\r\n\r\n.card-right {\r\n flex: 1.3;\r\n padding-left: 6px;\r\n}\r\n\r\n.button{\r\n z-index: 10;\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: normal;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: normal;\r\n letter-spacing: normal;\r\n background-color: #8300bf;\r\n border: #8300bf;\r\n color: white;\r\n cursor: pointer;\r\n margin-top: 8px;\r\n}\r\n\r\n.button:hover {\r\n background-color: #8300bf;\r\n color: white;\r\n}\r\n\r\n.banner-img {\r\n width: 128px;\r\n height: 128px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.25);\r\n background-color: #ffffff;\r\n cursor: pointer;\r\n}\r\n.details{\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: normal;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: 1.5;\r\n letter-spacing: 1.05px;\r\n color: #484848;\r\n}\r\n\r\n.badges-container {\r\n margin-top:0.75rem;\r\n}\r\n\r\n.loading-icon {\r\n z-index: 20;\r\n width: 40px;\r\n height: 40px;\r\n left: 80px;\r\n}\r\n\r\n.loading-icon >>> .el-loading-mask {\r\n background-color: rgba(117, 190, 218, 0.0) !important;\r\n}\r\n\r\n.loading-icon >>> .el-loading-spinner .path {\r\n stroke: #8300bf;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DatasetCard.vue?vue&type=template&id=bf193158&scoped=true&\"\nimport script from \"./DatasetCard.vue?vue&type=script&lang=js&\"\nexport * from \"./DatasetCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bf193158\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"context-card-container\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showContextCard),expression:\"showContextCard\"}]},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDetails),expression:\"showDetails\"}],staticClass:\"hide\",on:{\"click\":function($event){_vm.showDetails = !_vm.showDetails}}},[_vm._v(\"Hide information\"),_c('i',{staticClass:\"el-icon-arrow-up\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showDetails),expression:\"!showDetails\"}],staticClass:\"hide\",on:{\"click\":function($event){_vm.showDetails = !_vm.showDetails}}},[_vm._v(\"Show information\"),_c('i',{staticClass:\"el-icon-arrow-down\"})]),(_vm.showDetails && Object.keys(_vm.contextData).length !== 0)?_c('el-card',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"context-card\"},[_c('div',{staticClass:\"card-left\"},[_c('img',{staticClass:\"context-image\",attrs:{\"src\":_vm.banner}})]),_c('div',{staticClass:\"card-right scrollbar\"},[_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.contextData.heading))]),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.parseMarkdown(_vm.contextData.description))}}),_c('br'),(!_vm.samplesUnderViews)?[(_vm.contextData.views && _vm.contextData.views.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Scaffold Views\")]):_vm._e(),_vm._l((_vm.contextData.views),function(view,i){return [_c('div',{key:i+'_1',staticClass:\"context-card-view\",on:{\"click\":function($event){return _vm.openViewFile(view)}}},[_c('img',{staticClass:\"view-image\",attrs:{\"src\":_vm.getFileFromPath(view.thumbnail)}}),_c('div',{staticClass:\"view-description\"},[_vm._v(_vm._s(view.description))])]),_c('div',{key:i,staticClass:\"padding\"})]}),_c('div',{staticStyle:{\"margin-bottom\":\"16px\"}}),(_vm.contextData.samples && _vm.contextData.samples.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Samples on Scaffold\")]):_vm._e(),_vm._l((_vm.contextData.samples),function(sample,i){return [_c('span',{key:i+'_3',staticClass:\"context-card-item cursor-pointer\",on:{\"click\":function($event){return _vm.toggleSampleDetails(i)}}},[_c('div',{key:i+'_6',staticStyle:{\"display\":\"flex\"}},[(sample.color)?_c('div',{staticClass:\"color-box\",style:('background-color:'+ sample.color)}):(sample.thumbnail)?_c('img',{staticClass:\"key-image\",attrs:{\"src\":_vm.getFileFromPath(sample.thumbnail)}}):_vm._e(),_vm._v(\" \"+_vm._s(sample.heading)+\" \"),_c('i',{staticClass:\"el-icon-warning-outline info\"})])]),(_vm.sampleDetails[i])?_c('div',{key:i+'_4',domProps:{\"innerHTML\":_vm._s(sample.description)}}):_vm._e(),(_vm.sampleDetails[i] && sample.path)?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(sample),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i+'_2',staticClass:\"padding\"})]})]:[(_vm.contextData.views && _vm.contextData.views.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Scaffold Views\")]):_vm._e(),_vm._l((_vm.contextData.views),function(view,i){return [_c('span',{key:i+'_1',staticClass:\"context-card-view\",on:{\"click\":function($event){return _vm.viewClicked(view, i)}}},[_c('img',{staticClass:\"view-image\",attrs:{\"src\":_vm.getFileFromPath(view.thumbnail)}}),_c('div',{staticClass:\"view-description\"},[_vm._v(_vm._s(view.description)),_c('i',{staticClass:\"el-icon-warning-outline info\"})])]),(_vm.sampleDetails[i])?_c('div',{key:i+'_2',domProps:{\"innerHTML\":_vm._s(_vm.samplesMatching(view.id).description)}}):_vm._e(),(_vm.sampleDetails[i] && _vm.samplesMatching(view.id).path)?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(_vm.samplesMatching(view.id)),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i,staticClass:\"padding\"}),(_vm.sampleDetails[i])?_c('div',{key:i+'_6',staticClass:\"padding\"}):_vm._e()]})]],2)]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n\r\n}\r\n// //Uncomment the code below to add in hardcoded data\r\n// export default {\r\n// 77: {\r\n// \"description\": \"This dataset contains single cell scale anatomical map of the rat intrinsic cardiac nervous system (ICNS) across four male and three female hearts. These cell clusters can be seen by the yellow data points on the image as well as spherical markers on the 3D heart scaffold. The dataset provides an integrative framework to visualise the spatial distribution of ICNS across different hearts.\",\r\n// \"heading\": \"Mapped ICN samples\",\r\n// \"id\": \"sparc.science.context_data\",\r\n// \"samples\": [\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Spatial location of isolated ICNS mapped onto a generic heart scaffold\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"ICNS from subject M54-8\",\r\n// \"id\": \"Sample 1\",\r\n// \"path\": \"\",\r\n// \"view\": \"View 1\",\r\n// \"color\": \"#FFFF00\",\r\n// \"thumbnail\": \"https://raw.githubusercontent.com/ABI-Software/map-sidebar/main/assets/temp-pics/orange.png\"\r\n// },\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Spatial location of isolated ICNS mapped onto a generic heart scaffold\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"ICNS from subject M54-5\",\r\n// \"id\": \"Sample 2\",\r\n// \"path\": \"\",\r\n// \"view\": \"View 2\",\r\n// \"color\": \"#FFA500\",\r\n// \"thumbnail\": \"https://raw.githubusercontent.com/ABI-Software/map-sidebar/main/assets/temp-pics/teal.png\"\r\n// }\r\n// ],\r\n// \"version\": \"0.1.0\",\r\n// },\r\n// 221: {\r\n// \"description\": \"3D digital tracings of the enteric plexus obtained from seven subjects (M11, M16, M162, M163, M164, M168) are mapped randomly on mouse proximal colon. The data depicts individual neural wiring patterns in enteric microcircuits, and revealed both neuron and fiber units wired in a complex organization.\",\r\n// \"heading\": \"Digital tracings of enteric plexus\",\r\n// \"id\": \"sparc.science.context_data\",\r\n// \"samples\": [\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Neuronal soma and fibers in a myenteric ganglion in this subject are annotated into the following groups to highlight their interactions:\\n\\nNeuron1,2,3 Connex: Connections between 3 neurons and cross-ganglionic fibers\\n\\nNeuron4_Connex: A small neuron contacts fibers passing the ganglion\\n\\nNeuron5: Multiple projections of a neuron in an myenteric ganglion\\n\\nNeuron5,3,7 Connex: Connections between 3 neurons, nerve fibers, IGNEx (complex type of intraganglionic nerve endings) and fibers in the circular muscles.\\n\\nNeuron8,9,10 Connex: Connections of 3 neurons with each other and with long passing fibers. \\n\\nIntraganglionic Nerve Ending (IGNE): Digital traces of neurites consist of complex intraganglionic nerve endings. The blue fiber has branched terminals, more likely the afferent nerve endings; the violet and cyan terminals also interweave into the fiber nest; the orange, pink and peach fibers and one process of the neuron cross the IGNE to make 1-2 conjunctions. \\n\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"Digital tracing for subject M11\",\r\n// \"id\": \"Sample 1\",\r\n// \"path\": \"files/derivative/sub-M11/sam-pCm11/digital-traces/pC PHPS XFP M11 20XZ 180425_180713_2_NL_20.xml\",\r\n// \"view\": \"View 1\"\r\n// },\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"This digital trace demonstrates some types of wiring. A long process of the green neuron terminates in the intraganglionic nerve endings (IGNE) while in contact with a nerve fiber (cyan), soma of a neuron (peach) and processes of 3 neurons (magenta, yellow and red). Two neurons and one fiber are traced to an IGNE. \",\r\n// \"doi\": \"\",\r\n// \"heading\": \"Digital tracing for subject M16\",\r\n// \"id\": \"Sample 2\",\r\n// \"path\": \"files/derivative/sub-M16/sam-pCm16/digital-traces/pC PHPS XFP M16 20XZ 180425_180524.xml\",\r\n// \"view\": \"View 2\"\r\n// }\r\n// ],\r\n// \"version\": \"0.1.0\",\r\n// \"views\": [\r\n// {\r\n// \"annotation\": \"--\",\r\n// \"description\": \"Digital tracing of neurons for subject M11.\",\r\n// \"id\": \"View 1\",\r\n// \"path\": \"files/derivative/Scaffolds/M11_view.json\",\r\n// \"sample\": \"Sample 1\",\r\n// \"thumbnail\": \"https://api.sparc.science/s3-resource/221/2/files/derivative/Scaffolds/M11_thumbnail.jpeg\"\r\n// },\r\n// {\r\n// \"annotation\": \"--\",\r\n// \"description\": \"Digital tracing of neurons for subject M16.\",\r\n// \"id\": \"View 2\",\r\n// \"path\": \"files/derivative/Scaffolds/M16_view.json\",\r\n// \"sample\": \"Sample 2\",\r\n// \"thumbnail\": \"https://api.sparc.science/s3-resource/221/2/files/derivative/Scaffolds/M16_thumbnail.jpeg\"\r\n// }\r\n// ]\r\n// }\r\n// }","<template>\r\n <div class=\"context-card-container\" ref=\"container\">\r\n <div v-show=\"showContextCard\">\r\n <div v-show=\"showDetails\" class=\"hide\" @click=\"showDetails = !showDetails\">Hide information<i class=\"el-icon-arrow-up\"></i></div>\r\n <div v-show=\"!showDetails\" class=\"hide\" @click=\"showDetails = !showDetails\">Show information<i class=\"el-icon-arrow-down\"></i></div>\r\n <el-card v-if=\"showDetails && Object.keys(contextData).length !== 0\" v-loading=\"loading\" class=\"context-card\" >\r\n <div class=\"card-left\">\r\n <img :src=\"banner\" class=\"context-image\">\r\n </div>\r\n <div class=\"card-right scrollbar\">\r\n <div class=\"title\">{{contextData.heading}}</div>\r\n <div v-html=\"parseMarkdown(contextData.description)\"/>\r\n <br/>\r\n\r\n <!-- Show sampeles and views seperately if they do not match -->\r\n <template v-if=\"!samplesUnderViews\">\r\n <div v-if=\"contextData.views && contextData.views.length > 0\" class=\"subtitle\">Scaffold Views</div>\r\n <template v-for=\"(view, i) in contextData.views\">\r\n <div v-bind:key=\"i+'_1'\" @click=\"openViewFile(view)\" class=\"context-card-view\">\r\n <img class=\"view-image\" :src=\"getFileFromPath(view.thumbnail)\"> \r\n <div class=\"view-description\">{{view.description}}</div>\r\n </div>\r\n <div v-bind:key=\"i\" class=\"padding\"/>\r\n </template>\r\n <div style=\"margin-bottom: 16px;\"/>\r\n <div v-if=\"contextData.samples && contextData.samples.length > 0\" class=\"subtitle\">Samples on Scaffold</div>\r\n <template v-for=\"(sample, i) in contextData.samples\">\r\n <span v-bind:key=\"i+'_3'\" class=\"context-card-item cursor-pointer\" @click=\"toggleSampleDetails(i)\">\r\n <div v-bind:key=\"i+'_6'\" style=\"display: flex\">\r\n <div v-if=\"sample.color\" class=\"color-box\" :style=\"'background-color:'+ sample.color\"></div>\r\n <img class=\"key-image\" v-else-if=\"sample.thumbnail\" :src=\"getFileFromPath(sample.thumbnail)\">\r\n {{sample.heading}}\r\n <i class=\"el-icon-warning-outline info\"></i>\r\n </div>\r\n </span>\r\n <div v-bind:key=\"i+'_4'\" v-if=\"sampleDetails[i]\" v-html=\"sample.description\"/>\r\n <a v-bind:key=\"i+'_5'\" v-if=\"sampleDetails[i] && sample.path\" :href=\"generateFileLink(sample)\" target=\"_blank\">View Source</a>\r\n <div v-bind:key=\"i+'_2'\" class=\"padding\"/>\r\n </template>\r\n </template>\r\n\r\n <!-- Show samples under views if the ids match -->\r\n <template v-else>\r\n <div v-if=\"contextData.views && contextData.views.length > 0\" class=\"subtitle\">Scaffold Views</div>\r\n <template v-for=\"(view, i) in contextData.views\">\r\n <span :key=\"i+'_1'\" @click=\"viewClicked(view, i)\" class=\"context-card-view\">\r\n <img class=\"view-image\" :src=\"getFileFromPath(view.thumbnail)\"/> \r\n <div class=\"view-description\">{{view.description}}<i class=\"el-icon-warning-outline info\"></i> </div>\r\n </span>\r\n <div v-if=\"sampleDetails[i]\" v-html=\"samplesMatching(view.id).description\" :key=\"i+'_2'\"/>\r\n <a v-bind:key=\"i+'_5'\" v-if=\"sampleDetails[i] && samplesMatching(view.id).path\" :href=\"generateFileLink(samplesMatching(view.id))\" target=\"_blank\">View Source</a>\r\n <div :key=\"i\" class=\"padding\"/>\r\n\r\n <!-- Extra padding if sample details is open -->\r\n <div :key=\"i+'_6'\" v-if=\"sampleDetails[i]\" class=\"padding\"/>\r\n </template>\r\n </template>\r\n </div>\r\n </el-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Link, Icon, Card, Button, Select, Input } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport EventBus from \"./EventBus\"\r\nimport hardcoded_info from './hardcoded-context-info'\r\n\r\nimport { marked } from 'marked'\r\nimport xss from 'xss'\r\n\r\nlocale.use(lang);\r\nVue.use(Link);\r\nVue.use(Icon);\r\nVue.use(Card);\r\nVue.use(Button);\r\nVue.use(Select);\r\nVue.use(Input);\r\n\r\nconst addFilesToPathIfMissing = function(path){\r\n if (!path.includes('files')){\r\n return 'files/' + path\r\n } else {\r\n return path\r\n }\r\n}\r\n\r\nconst convertBackslashToForwardSlash = function(path){\r\n path = path.replaceAll('\\\\','/')\r\n path = path.replaceAll('\\\\\\\\', '/')\r\n return path\r\n}\r\n\r\n// const switchPathToDirectory = function(path){\r\n// let newPath = path.split('/')\r\n// newPath.pop()\r\n// return newPath.join('/')\r\n// }\r\n\r\n\r\nexport default {\r\n name: \"contextCard\",\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: Object,\r\n envVars: Object,\r\n },\r\n data: function () {\r\n return {\r\n contextData: {},\r\n showDetails: true,\r\n showContextCard: true,\r\n sampleDetails: {},\r\n loading: false\r\n };\r\n },\r\n watch: {\r\n 'entry.contextCardUrl': {\r\n handler(val){\r\n if (val) {\r\n // used for hardcoding data\r\n if (val === true){\r\n this.contextData = hardcoded_info[this.entry.discoverId]\r\n } else {\r\n this.getContextFile(val)\r\n this.showContextCard = true\r\n }\r\n } else {\r\n this.showContextCard = false\r\n }\r\n },\r\n immediate: true\r\n }\r\n },\r\n computed: {\r\n samplesUnderViews: function(){\r\n if (this.contextData){\r\n if (this.contextData.samplesUnderViews){\r\n return true\r\n } else {\r\n let viewId = this.contextData.views.map(v=>v.id)\r\n let samplesView = this.contextData.samples.map(s=>s.view)\r\n\r\n // get matching values\r\n let matching = viewId.filter(v=>samplesView.includes(v))\r\n\r\n // check all arrays have the same length (which means all values are in all three)\r\n if ( viewId.length === matching.length && matching.length === samplesView.length){\r\n return true\r\n }\r\n return false\r\n }\r\n }\r\n else return false\r\n },\r\n banner: function(){\r\n if (this.contextData.banner){\r\n return this.getFileFromPath(this.contextData.banner) \r\n } else if (this.contextData && this.contextData.views && this.contextData.views.length > 0) {\r\n if(this.contextData.views[0].thumbnail){\r\n return this.getFileFromPath(this.contextData.views[0].thumbnail)\r\n }\r\n } \r\n return this.entry.banner\r\n }\r\n },\r\n methods: {\r\n samplesMatching: function(viewId){\r\n if (this.contextData && this.contextData.samples){\r\n return this.contextData.samples.filter(s=>s.view == viewId)[0]\r\n }\r\n else return []\r\n },\r\n viewClicked: function(view, i){\r\n this.openViewFile(view) \r\n this.toggleSampleDetails(i)\r\n },\r\n getContextFile: function (contextFileUrl) {\r\n this.loading = true\r\n fetch(contextFileUrl)\r\n .then((response) =>{\r\n if (!response.ok){\r\n throw Error(response.statusText)\r\n } else {\r\n return response.json()\r\n }\r\n })\r\n .then((data) => {\r\n this.contextData = data\r\n this.loading = false\r\n this.addDiscoverIdsToContextData() \r\n })\r\n .catch((err) => {\r\n //set defaults if we hit an error\r\n console.error('caught error!', err)\r\n this.thumbnail = require('@/../assets/missing-image.svg')\r\n this.discoverId = undefined\r\n this.loading = false\r\n });\r\n },\r\n removeDoubleFilesPath: function(path){\r\n if (path.includes('files/')){\r\n return path.replace('files/', '')\r\n } else if (path.includes('files\\\\')) {\r\n return path.replace('files\\\\', '')\r\n } else {\r\n return path\r\n }\r\n },\r\n toggleSampleDetails: function(i){\r\n if (this.sampleDetails[i] === undefined){\r\n Vue.set(this.sampleDetails, i, true)\r\n } else {\r\n Vue.set(this.sampleDetails, i, !this.sampleDetails[i])\r\n }\r\n },\r\n getFileFromPath: function(path){\r\n // for hardcoded data\r\n if(this.entry.contextCardUrl === true){\r\n return path\r\n }\r\n path = this.removeDoubleFilesPath(path)\r\n return `${this.envVars.API_LOCATION}s3-resource/${this.entry.discoverId}/${this.entry.version}/files/${path}`\r\n },\r\n // This is used later when generateing links to the resource on sparc.science (see generateFileLink)\r\n addDiscoverIdsToContextData(){\r\n this.contextData.samples.forEach((sample, i)=>{\r\n if (sample && sample.doi && sample.doi !== \"\"){\r\n fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${this.splitDoiFromUrl(sample.doi)}`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n this.contextData.samples[i].discoverId = data.id\r\n this.contextData.samples[i].version = data.version\r\n })\r\n } else {\r\n this.contextData.samples[i].discoverId = this.entry.discoverId\r\n this.contextData.samples[i].version = this.entry.version\r\n }\r\n })\r\n },\r\n processPathForUrl(path){\r\n path = convertBackslashToForwardSlash(path)\r\n path = addFilesToPathIfMissing(path)\r\n return encodeURI(path)\r\n },\r\n splitDoiFromUrl(url){\r\n return url.split('https://doi.org/').pop()\r\n },\r\n generateFileLink(sample){\r\n return `${this.envVars.ROOT_URL}/file/${sample.discoverId}/${sample.version}?path=${this.processPathForUrl(sample.path)}`\r\n\r\n },\r\n parseMarkdown(markdown){\r\n return xss(marked.parse(markdown))\r\n },\r\n openViewFile: function(view){\r\n // note that we assume that the view file is in the same directory as the scaffold (viewUrls take relative paths)\r\n this.entry.viewUrl = `${this.envVars.API_LOCATION}s3-resource/${this.entry.discoverId}/${this.entry.version}/${view.path}`\r\n this.entry.type = 'Scaffold View'\r\n EventBus.$emit(\"PopoverActionClick\", this.entry)\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.hide{\r\n color: #e4e7ed;\r\n cursor: pointer;\r\n}\r\n\r\n.context-card{\r\n background-color: white;\r\n max-height: 10 50px;\r\n padding: 8px;\r\n font-size: 14px;\r\n margin-bottom: 18px;\r\n position: relative;\r\n border: solid 1px #e4e7ed;\r\n display: flex;\r\n width: 500px;\r\n max-height: 258px;\r\n}\r\n\r\n.context-card-view{\r\n cursor: pointer;\r\n padding-bottom: 8px;\r\n display: flex;\r\n}\r\n\r\n.view-image {\r\n width: 34px;\r\n height: 34px;\r\n flex: 1;\r\n margin-right: 4px;\r\n}\r\n\r\n.view-descriptions {\r\n flex: 8;\r\n}\r\n\r\n.context-card >>> .el-card__body {\r\n padding: 0px;\r\n display: flex;\r\n width: 516px;\r\n}\r\n\r\n.context-image{\r\n width: 250px;\r\n height: auto;\r\n}\r\n\r\n.color-box {\r\n width: 16px;\r\n height: 16px;\r\n border: solid 1px #8300bf;\r\n border-radius: 2px;\r\n margin-right: 8px;\r\n}\r\n\r\n.card-left{\r\n flex: 1\r\n}\r\n\r\n.card-right {\r\n flex: 1.3;\r\n padding-left: 6px;\r\n overflow-y: scroll;\r\n scrollbar-width: thin;\r\n}\r\n\r\n.cursor-pointer {\r\n cursor: pointer;\r\n}\r\n\r\n.info{\r\n transform: rotate(180deg);\r\n color: #8300bf;\r\n margin-left: 8px;\r\n}\r\n\r\n.padding {\r\n padding-bottom: 8px;\r\n}\r\n\r\n.title{\r\n font-weight: bold;\r\n}\r\n\r\n.subtitle{\r\n font-weight: bold;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-track {\r\n border-radius: 10px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar {\r\n width: 12px;\r\n right: -12px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-thumb {\r\n border-radius: 4px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);\r\n background-color: #979797;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextCard.vue?vue&type=template&id=2d699d90&scoped=true&\"\nimport script from \"./ContextCard.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d699d90\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <el-card :body-style=\"bodyStyle\" class=\"content-card\">\r\n <div slot=\"header\" class=\"header\">\r\n <context-card v-if=\"contextCardEntry && contextCardEnabled\" :entry=\"contextCardEntry\" :envVars=\"envVars\"/>\r\n <el-input\r\n class=\"search-input\"\r\n placeholder=\"Search\"\r\n v-model=\"searchInput\"\r\n @keyup.native=\"searchEvent\"\r\n clearable\r\n @clear=\"clearSearchClicked\"\r\n ></el-input>\r\n <el-button class=\"button\" @click=\"searchEvent\">Search</el-button>\r\n </div>\r\n <SearchFilters\r\n class=\"filters\"\r\n ref=\"filtersRef\"\r\n :entry=\"filterEntry\"\r\n :envVars=\"envVars\"\r\n @filterResults=\"filterUpdate\"\r\n @numberPerPage=\"numberPerPageUpdate\"\r\n @loading=\"filtersLoading\"\r\n @cascaderReady=\"cascaderReady\"\r\n ></SearchFilters>\r\n <div class=\"content scrollbar\" v-loading=\"loadingCards\" ref=\"content\">\r\n <div\r\n class=\"error-feedback\"\r\n v-if=\"results.length === 0 && !loadingCards\"\r\n >No results found - Please change your search / filter criteria.</div>\r\n <div v-for=\"result in results\" :key=\"result.doi\" class=\"step-item\">\r\n <DatasetCard :entry=\"result\" :envVars=\"envVars\" @contextUpdate=\"contextCardUpdate\"></DatasetCard>\r\n </div>\r\n <el-pagination\r\n class=\"pagination\"\r\n :current-page.sync=\"page\"\r\n hide-on-single-page\r\n large\r\n layout=\"prev, pager, next\"\r\n :page-size=\"numberPerPage\"\r\n :total=\"numberOfHits\"\r\n @current-change=\"pageChange\"\r\n ></el-pagination>\r\n </div>\r\n </el-card>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport {\r\n Button,\r\n Card,\r\n Drawer,\r\n Icon,\r\n Input,\r\n Loading,\r\n Pagination\r\n} from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport SearchFilters from \"./SearchFilters\";\r\nimport DatasetCard from \"./DatasetCard\";\r\nimport ContextCard from \"./ContextCard.vue\";\r\nimport EventBus from \"./EventBus\"\r\n\r\nimport {AlgoliaClient} from \"../algolia/algolia.js\";\r\nimport {getFilters} from \"../algolia/utils.js\"\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\nVue.use(Card);\r\nVue.use(Drawer);\r\nVue.use(Icon);\r\nVue.use(Input);\r\nVue.use(Loading);\r\nVue.use(Pagination);\r\n\r\n// handleErrors: A custom fetch error handler to recieve messages from the server\r\n// even when an error is found\r\nvar handleErrors = async function(response) {\r\n if (!response.ok) {\r\n let parse = await response.json();\r\n if (parse) {\r\n throw new Error(parse.message);\r\n } else {\r\n throw new Error(response);\r\n }\r\n }\r\n return response;\r\n};\r\n\r\nvar initial_state = {\r\n searchInput: \"\",\r\n lastSearch: \"\",\r\n results: [],\r\n numberOfHits: 0,\r\n filter: [],\r\n loadingCards: false,\r\n numberPerPage: 10,\r\n page: 1,\r\n pageModel: 1,\r\n start: 0,\r\n hasSearched: false,\r\n contextCardEntry: undefined,\r\n contextCardEnabled: true,\r\n};\r\n\r\nexport default {\r\n components: { SearchFilters, DatasetCard, ContextCard },\r\n name: \"SideBarContent\",\r\n props: {\r\n visible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n isDrawer: {\r\n type: Boolean,\r\n default: true\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => initial_state\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n },\r\n data: function() {\r\n return {\r\n ...this.entry,\r\n bodyStyle: {\r\n flex: \"1 1 auto\",\r\n \"flex-flow\": \"column\",\r\n display: \"flex\"\r\n },\r\n cascaderIsReady: false,\r\n };\r\n },\r\n computed: {\r\n // This computed property populates filter data's entry object with $data from this sidebar\r\n filterEntry: function() {\r\n return {\r\n numberOfHits: this.numberOfHits,\r\n filterFacets: this.filter\r\n };\r\n }\r\n },\r\n methods: {\r\n contextCardUpdate: function(val){\r\n this.contextCardEntry = val\r\n },\r\n resetSearch: function() {\r\n this.numberOfHits = 0\r\n this.discoverIds = []\r\n this._dois = []\r\n this.results = []\r\n this.loadingCards = false\r\n },\r\n openSearch: function(filter, search='') {\r\n this.searchInput = search;\r\n this.resetPageNavigation();\r\n //Proceed normally if cascader is ready\r\n if (this.cascaderIsReady) {\r\n this.filter = this.$refs.filtersRef.getValidatedFilters(filter);\r\n //Facets provided but cannot find at least one valid\r\n //facet. Tell the users the search is invalid and reset\r\n //facets check boxes.\r\n if ((filter && filter.length > 0) && \r\n (this.filter && this.filter.length === 0)) {\r\n this.$refs.filtersRef.checkShowAllBoxes();\r\n this.resetSearch();\r\n } else if (this.filter) {\r\n this.searchAlgolia(this.filter, search);\r\n this.$refs.filtersRef.setCascader(this.filter);\r\n }\r\n } else {\r\n //cascader is not ready, perform search if no filter is set,\r\n //otherwise waith for cascader to be ready\r\n this.filter = filter;\r\n if (!filter || filter.length == 0) {\r\n this.searchAlgolia(this.filter, search);\r\n }\r\n }\r\n },\r\n addFilter: function(filter) {\r\n if (this.cascaderIsReady) {\r\n this.resetPageNavigation();\r\n if (filter) {\r\n if (this.$refs.filtersRef.addFilter(filter))\r\n this.$refs.filtersRef.initiateSearch();\r\n }\r\n } else {\r\n if (Array.isArray(this.filter)) {\r\n this.filter.push(filter);\r\n } else {\r\n this.filter = [filter];\r\n }\r\n }\r\n },\r\n cascaderReady: function() {\r\n this.cascaderIsReady = true;\r\n this.openSearch(this.filter, this.searchInput);\r\n },\r\n clearSearchClicked: function() {\r\n this.searchInput = \"\";\r\n this.resetPageNavigation();\r\n this.searchAlgolia(this.filters, this.searchInput);\r\n },\r\n searchEvent: function(event = false) {\r\n if (event.keyCode === 13 || event instanceof MouseEvent) {\r\n this.resetPageNavigation();\r\n this.searchAlgolia(this.filters, this.searchInput);\r\n }\r\n },\r\n filterUpdate: function(filters) {\r\n this.filters = [...filters]\r\n this.resetPageNavigation()\r\n this.searchAlgolia(filters, this.searchInput)\r\n this.$emit(\"search-changed\", {\r\n value: filters,\r\n type: \"filter-update\"\r\n });\r\n },\r\n searchAlgolia(filters, query=''){\r\n // Algolia search\r\n this.loadingCards = true\r\n this.algoliaClient.anatomyInSearch(getFilters(filters), query).then(anatomy => {\r\n EventBus.$emit(\"anatomyFound\", anatomy) \r\n })\r\n this.algoliaClient.search(getFilters(filters), query, this.numberPerPage, this.page).then(searchData => {\r\n this.numberOfHits = searchData.total\r\n this.discoverIds = searchData.discoverIds\r\n this._dois = searchData.dois\r\n this.results = searchData.items\r\n this.loadingCards = false\r\n this.scrollToTop()\r\n this.$emit(\"search-changed\", { value: this.searchInput, type: \"query-update\" })\r\n if (this._abortController)\r\n this._abortController.abort()\r\n this._abortController = new AbortController()\r\n const signal = this._abortController.signal\r\n //Search ongoing, let the current flow progress\r\n this.perItemSearch(signal, { count: 0 })\r\n })\r\n },\r\n filtersLoading: function (val) {\r\n this.loadingCards = val;\r\n },\r\n numberPerPageUpdate: function(val) {\r\n this.numberPerPage = val;\r\n this.pageChange(1);\r\n },\r\n pageChange: function(page) {\r\n this.start = (page - 1) * this.numberPerPage;\r\n this.page = page\r\n this.searchAlgolia(this.filters, this.searchInput, this.numberPerPage, this.page)\r\n },\r\n handleMissingData: function(doi) {\r\n let i = this.results.findIndex(res=> res.doi === doi)\r\n if (this.results[i])\r\n this.results[i].detailsReady = true;\r\n },\r\n perItemSearch: function(signal, data) {\r\n //Maximum 10 downloads at once to prevent long waiting time\r\n //between unfinished search and new search\r\n const maxDownloads = 10;\r\n if (maxDownloads > data.count) {\r\n const doi = this._dois.shift();\r\n if (doi) {\r\n data.count++;\r\n this.callSciCrunch(this.envVars.API_LOCATION, {'dois': [doi]}, signal)\r\n .then(result => {\r\n if (result.numberOfHits === 0)\r\n this.handleMissingData(doi);\r\n else\r\n this.resultsProcessing(result);\r\n this.$refs.content.style[\"overflow-y\"] = \"scroll\";\r\n data.count--;\r\n //Async::Download finished, get the next one\r\n this.perItemSearch(signal, data);\r\n })\r\n .catch(result => {\r\n if (result.name !== 'AbortError') {\r\n this.handleMissingData(doi);\r\n data.count--;\r\n //Async::Download not aborted, get the next one\r\n this.perItemSearch(signal, data);\r\n }\r\n });\r\n //Check and make another request until it gets to max downloads\r\n this.perItemSearch(signal, data);\r\n }\r\n }\r\n },\r\n scrollToTop: function() {\r\n if (this.$refs.content) {\r\n this.$refs.content.scroll({ top: 0, behavior: \"smooth\" });\r\n }\r\n },\r\n resetPageNavigation: function() {\r\n this.start = 0;\r\n this.page = 1;\r\n },\r\n resultsProcessing: function(data) {\r\n this.lastSearch = this.searchInput;\r\n\r\n if (data.results.length === 0) {\r\n return;\r\n }\r\n data.results.forEach(element => {\r\n // match the scicrunch result with algolia result\r\n let i = this.results.findIndex(res => element.doi ? element.doi.includes(res.doi) : false )\r\n // Assign scicrunch results to the object\r\n Object.assign(this.results[i], element)\r\n // Assign the attributes that need some processing\r\n Object.assign(this.results[i],{\r\n numberSamples: element.sampleSize\r\n ? parseInt(element.sampleSize)\r\n : 0,\r\n numberSubjects: element.subjectSize\r\n ? parseInt(element.subjectSize)\r\n : 0,\r\n updated: (element.updated && element.updated.length) > 0 ? element.updated[0].timestamp.split(\"T\")[0] : \"\",\r\n url: element.uri[0],\r\n datasetId: element.dataset_identifier,\r\n datasetRevision: element.dataset_revision,\r\n datasetVersion: element.dataset_version,\r\n organs: (element.organs && element.organs.length > 0)\r\n ? [...new Set(element.organs.map(v => v.name))]\r\n : undefined,\r\n species: element.organisms\r\n ? element.organisms[0].species\r\n ? [...new Set(element.organisms.map((v) =>v.species ? v.species.name : null))]\r\n : undefined\r\n : undefined, // This processing only includes each gender once into 'sexes'\r\n scaffolds: element['abi-scaffold-metadata-file'],\r\n thumbnails: element['abi-thumbnail'] ? element['abi-thumbnail']: element['abi-scaffold-thumbnail'],\r\n scaffoldViews: element['abi-scaffold-view-file'],\r\n videos: element.video,\r\n plots: element['abi-plot'],\r\n images: element['common-images'],\r\n contextualInformation: element['abi-contextual-information'].length > 0 ? element['abi-contextual-information'] : undefined,\r\n segmentation: element['mbf-segmentation'],\r\n simulation: element['abi-simulation-file'],\r\n additionalLinks: element.additionalLinks,\r\n detailsReady: true,\r\n })\r\n Vue.set(this.results, i, this.results[i])\r\n });\r\n },\r\n createfilterParams: function(params) {\r\n let p = new URLSearchParams();\r\n //Check if field is array or value\r\n for (const key in params) {\r\n if (Array.isArray(params[key])) {\r\n params[key].forEach(e => {\r\n p.append(key, e);\r\n });\r\n } else {\r\n p.append(key, params[key]);\r\n }\r\n }\r\n return p.toString();\r\n },\r\n callSciCrunch: function(apiLocation, params = {}, signal) {\r\n return new Promise((resolve, reject) => {\r\n // Add parameters if we are sent them\r\n let fullEndpoint = this.envVars.API_LOCATION + this.searchEndpoint + \"?\" + this.createfilterParams(params);\r\n fetch(fullEndpoint, {signal})\r\n .then(handleErrors)\r\n .then(response => response.json())\r\n .then(data => resolve(data))\r\n .catch(data => reject(data));\r\n });\r\n },\r\n },\r\n mounted: function() {\r\n // initialise algolia\r\n this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);\r\n this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);\r\n this.openSearch(undefined, '');\r\n },\r\n created: function() {\r\n //Create non-reactive local variables\r\n this.searchEndpoint = \"dataset_info/using_multiple_dois/\";\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.content-card {\r\n height: 100%;\r\n flex-flow: column;\r\n display: flex;\r\n}\r\n\r\n.button {\r\n background-color: #8300bf;\r\n border: #8300bf;\r\n color: white;\r\n}\r\n\r\n.step-item {\r\n font-size: 14px;\r\n margin-bottom: 18px;\r\n text-align: left;\r\n}\r\n\r\n.search-input {\r\n width: 298px !important;\r\n height: 40px;\r\n padding-right: 14px;\r\n align-items: left;\r\n}\r\n\r\n.header {\r\n border: solid 1px #292b66;\r\n background-color: #292b66;\r\n text-align: left;\r\n}\r\n\r\n.pagination {\r\n padding-bottom: 16px;\r\n background-color: white;\r\n text-align: center;\r\n}\r\n\r\n.pagination >>> button {\r\n background-color: white !important;\r\n}\r\n.pagination >>> li {\r\n background-color: white !important;\r\n}\r\n.pagination >>> li.active {\r\n color: #8300bf;\r\n}\r\n\r\n.error-feedback {\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-style: italic;\r\n padding-top: 15px;\r\n}\r\n\r\n.content-card >>> .el-card__header {\r\n background-color: #292b66;\r\n border: solid 1px #292b66;\r\n}\r\n\r\n.content-card >>> .el-card__body {\r\n background-color: #f7faff;\r\n overflow-y: hidden;\r\n}\r\n\r\n.content {\r\n width: 518px;\r\n flex: 1 1 auto;\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #e4e7ed;\r\n background-color: #ffffff;\r\n overflow-y: scroll;\r\n scrollbar-width: thin;\r\n}\r\n\r\n.content >>> .el-loading-spinner .path {\r\n stroke: #8300bf;\r\n}\r\n\r\n.content >>> .step-item:first-child .seperator-path{\r\n display: none;\r\n}\r\n\r\n.content >>> .step-item:not(:first-child) .seperator-path{\r\n width: 486px;\r\n height: 0px;\r\n border: solid 1px #e4e7ed;\r\n background-color: #e4e7ed;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-track {\r\n border-radius: 10px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar {\r\n width: 12px;\r\n right: -12px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-thumb {\r\n border-radius: 4px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);\r\n background-color: #979797;\r\n}\r\n\r\n>>> .el-input__suffix {\r\n padding-right: 10px;\r\n}\r\n\r\n>>> .my-drawer {\r\n background: rgba(0, 0, 0, 0);\r\n box-shadow: none;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SidebarContent.vue?vue&type=template&id=13cf0a2e&scoped=true&\"\nimport script from \"./SidebarContent.vue?vue&type=script&lang=js&\"\nexport * from \"./SidebarContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13cf0a2e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab-container\"},_vm._l((_vm.tabTitles),function(title){return _c('div',{key:title.id,staticClass:\"title\"},[_c('div',{staticClass:\"title-text-table\",class:{ highlightText : (title.id==_vm.activeId) },on:{\"click\":function($event){return _vm.titleClicked(title.id)}}},[_c('div',{staticClass:\"title-text\"},[_vm._v(\" \"+_vm._s(title.title)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"tab-container\">\r\n <div class=\"title\" v-for=\"title in tabTitles\" :key=\"title.id\">\r\n <div class=\"title-text-table\" v-bind:class=\"{ highlightText : (title.id==activeId) }\" v-on:click=\"titleClicked(title.id)\">\r\n <div class=\"title-text\">\r\n {{title.title}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\n\r\nexport default {\r\n name: \"Tabs\",\r\n props: {\r\n tabTitles: {\r\n type: Array,\r\n default: () => []\r\n },\r\n activeId: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n methods: {\r\n titleClicked: function(id) {\r\n this.$emit(\"titleClicked\", id);\r\n },\r\n }\r\n\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.tab-container{\r\n height: 28px;\r\n}\r\n\r\n.title {\r\n width: 101px;\r\n height: 28px;\r\n border: solid 1px #dcdfe6;\r\n border-bottom: none;\r\n background-color: white;\r\n display:inline-block;\r\n}\r\n\r\n.title:hover {\r\n cursor: pointer;\r\n}\r\n\r\n.title-text {\r\n text-align:center;\r\n display: table-cell;\r\n vertical-align: middle;\r\n font-size: 14px;\r\n}\r\n\r\n.title-text-table {\r\n display:table;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n\r\n.parent-dialog:hover .title-text {\r\n color:#8300bf;\r\n}\r\n\r\n.highlightText {\r\n color:#8300bf;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Tabs.vue?vue&type=template&id=d68260c4&scoped=true&\"\nimport script from \"./Tabs.vue?vue&type=script&lang=js&\"\nexport * from \"./Tabs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d68260c4\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div ref=\"container\">\r\n <div v-if=\"!drawerOpen\" @click=\"toggleDrawer\" class=\"open-tab\">\r\n <i class=\"el-icon-arrow-left\"></i>\r\n </div>\r\n <el-drawer\r\n custom-class=\"my-drawer\"\r\n class=\"side-bar\"\r\n :visible.sync=\"drawerOpen\"\r\n :appendToBody=\"false\"\r\n :modal-append-to-body=\"false\"\r\n size=550\r\n :with-header=\"false\"\r\n :wrapperClosable=\"false\"\r\n :modal=\"false\"\r\n >\r\n <div class=\"box-card\">\r\n <div v-if=\"drawerOpen\" @click=\"close\" class=\"close-tab\">\r\n <i class=\"el-icon-arrow-right\"></i>\r\n </div>\r\n <div class=\"sidebar-container\">\r\n <tabs v-if=\"tabs.length > 1\" :tabTitles=\"tabs\" :activeId=\"activeId\"\r\n @titleClicked=\"tabClicked\"/>\r\n <template v-for=\"tab in tabs\">\r\n <sidebar-content class=\"sidebar-content-container\"\r\n v-show=\"tab.id===activeId\" :contextCardEntry=\"tab.contextCard\"\r\n :envVars=\"envVars\"\r\n v-bind:key=\"tab.id\" :ref=\"tab.id\"\r\n @search-changed=\"searchChanged(tab.id, $event)\"/>\r\n </template>\r\n </div>\r\n </div>\r\n </el-drawer>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport {\r\n Drawer,\r\n Icon,\r\n} from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport SidebarContent from './SidebarContent.vue';\r\nimport EventBus from './EventBus';\r\nimport Tabs from './Tabs'\r\n\r\nlocale.use(lang);\r\nVue.use(Drawer);\r\nVue.use(Icon);\r\n\r\nvar initial_state = {\r\n searchInput: \"\",\r\n lastSearch: \"\",\r\n results: [],\r\n drawerOpen: false,\r\n numberOfHits: 0,\r\n filter:{},\r\n filterFacet: undefined,\r\n loadingCards: false,\r\n numberPerPage: 10,\r\n page: 1,\r\n pageModel: 1,\r\n start: 0,\r\n hasSearched: false,\r\n sciCrunchError: false\r\n}\r\n\r\nexport default {\r\n components: {SidebarContent, Tabs },\r\n name: \"SideBar\",\r\n props: {\r\n visible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => (initial_state)\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n tabs: {\r\n type: Array,\r\n default: () => [{title:'flatmap', id:1}]\r\n },\r\n activeId: {\r\n type: Number,\r\n default: 1\r\n },\r\n openAtStart: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data: function () {\r\n return {\r\n ...this.entry,\r\n }\r\n },\r\n methods: {\r\n searchChanged: function (id, data) {\r\n this.$emit(\"search-changed\", {...data, id: id});\r\n },\r\n close: function () {\r\n this.drawerOpen = false;\r\n },\r\n toggleDrawer: function () {\r\n this.drawerOpen = !this.drawerOpen;\r\n },\r\n openSearch: function(facets, query){\r\n this.drawerOpen = true;\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].openSearch(facets, query)})\r\n },\r\n addFilter: function(filter){\r\n this.drawerOpen = true;\r\n filter.AND = true // When we add a filter external, it is currently only with an AND boolean\r\n\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].addFilter(filter)})\r\n },\r\n openNeuronSearch: function(neuron){\r\n this.drawerOpen = true;\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].openSearch('', undefined, 'scicrunch-query-string/', {'field': '*organ.curie', 'curie':neuron})})\r\n },\r\n tabClicked: function(id) {\r\n this.$emit(\"tabClicked\", id);\r\n },\r\n },\r\n created:function() {\r\n this.drawerOpen = this.openAtStart;\r\n },\r\n mounted: function(){\r\n EventBus.$on(\"PopoverActionClick\", (payLoad) => {\r\n this.$emit(\"actionClick\", payLoad);\r\n })\r\n EventBus.$on('anatomyFound', (payLoad)=> {\r\n this.$emit('search-changed', {\r\n type: 'keyword-update',\r\n value: payLoad\r\n })\r\n })\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.box-card {\r\n flex: 3;\r\n height: 100%;\r\n overflow: hidden;\r\n pointer-events: auto;\r\n}\r\n\r\n.side-bar{\r\n position: relative;\r\n height: 100%;\r\n pointer-events: none;\r\n}\r\n\r\n.side-bar >>> .el-drawer:focus{\r\n outline:none;\r\n}\r\n\r\n.sidebar-container {\r\n height: 100%;\r\n flex-flow: column;\r\n display: flex;\r\n}\r\n\r\n.open-tab{\r\n width: 20px;\r\n height: 40px;\r\n z-index: 8;\r\n position: absolute;\r\n top: calc(50vh - 80px);\r\n right: 0px;\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #e4e7ed;\r\n background-color: #F7FAFF;\r\n text-align: center;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n}\r\n\r\n.el-icon-arrow-left{\r\n font-size: 20px;\r\n padding-top: 8px;\r\n color: #292b66;\r\n}\r\n\r\n.el-icon-arrow-right{\r\n font-size: 20px;\r\n padding-top: 8px;\r\n color: #292b66;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n}\r\n\r\n.close-tab{\r\n float: left;\r\n flex: 1;\r\n width: 20px;\r\n height: 40px;\r\n z-index: 8;\r\n margin-top: calc(50vh - 80px);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #e4e7ed;\r\n border-right: 0;\r\n background-color: #F7FAFF;\r\n text-align: center;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n}\r\n\r\n.box-card {\r\n flex: 3;\r\n height: 100%;\r\n overflow: hidden;\r\n pointer-events: auto;\r\n}\r\n\r\n>>> .my-drawer {\r\n background: rgba(0,0,0,0);\r\n box-shadow: none;\r\n}\r\n\r\n>>> .my-drawer .el-drawer__body {\r\n height: 100%;\r\n}\r\n\r\n.sidebar-content-container {\r\n flex: 1 1 auto;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SideBar.vue?vue&type=template&id=313390a9&scoped=true&\"\nimport script from \"./SideBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SideBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SideBar.vue?vue&type=style&index=0&id=313390a9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"313390a9\",\n null\n \n)\n\nexport default component.exports","module.exports = require(\"core-js/modules/es.string.includes\");","module.exports = require(\"core-js/modules/es.array.find\");"],"sourceRoot":""}
1
+ {"version":3,"sources":["webpack://map-side-bar/webpack/universalModuleDefinition","webpack://map-side-bar/webpack/bootstrap","webpack://map-side-bar/external \"element-ui/lib/pagination\"","webpack://map-side-bar/external \"core-js/modules/es.symbol.iterator\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/pagination.css\"","webpack://map-side-bar/external \"core-js/modules/es.parse-int\"","webpack://map-side-bar/external \"element-ui/lib/select\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/select.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.for-each\"","webpack://map-side-bar/external \"core-js/modules/es.array.concat\"","webpack://map-side-bar/external \"core-js/modules/web.dom-collections.iterator\"","webpack://map-side-bar/external \"core-js/modules/es.object.keys\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/link.css\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/button.css\"","webpack://map-side-bar/external \"core-js/modules/web.url\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/loading.css\"","webpack://map-side-bar/external \"element-ui/lib/drawer\"","webpack://map-side-bar/external \"@abi-software/gallery\"","webpack://map-side-bar/external \"core-js/modules/es.array.join\"","webpack://map-side-bar/external \"@abi-software/svg-sprite\"","webpack://map-side-bar/./src/components/Tabs.vue?88de","webpack://map-side-bar/external \"core-js/modules/es.object.get-own-property-descriptors\"","webpack://map-side-bar/external \"core-js/modules/es.string.split\"","webpack://map-side-bar/external \"core-js/modules/es.set\"","webpack://map-side-bar/external \"core-js/modules/es.array.filter\"","webpack://map-side-bar/./src/components/ContextCard.vue?8d31","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/card.css\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/drawer.css\"","webpack://map-side-bar/external \"core-js/modules/es.symbol.description\"","webpack://map-side-bar/external \"core-js/modules/es.regexp.exec\"","webpack://map-side-bar/external \"@abi-software/gallery/dist/gallery.css\"","webpack://map-side-bar/external \"element-ui/lib/button\"","webpack://map-side-bar/external \"core-js/modules/es.regexp.to-string\"","webpack://map-side-bar/external \"core-js/modules/es.symbol\"","webpack://map-side-bar/external \"core-js/modules/es.array.slice\"","webpack://map-side-bar/external \"core-js/modules/es.object.get-own-property-descriptor\"","webpack://map-side-bar/external \"element-ui/lib/cascader\"","webpack://map-side-bar/external \"element-ui/lib/locale/lang/en\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/cascader.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.sort\"","webpack://map-side-bar/external \"core-js/modules/es.number.constructor\"","webpack://map-side-bar/external \"regenerator-runtime/runtime\"","webpack://map-side-bar/./node_modules/marked/lib/marked.umd.js","webpack://map-side-bar/external \"core-js/modules/es.array.splice\"","webpack://map-side-bar/external \"element-ui/lib/link\"","webpack://map-side-bar/external \"element-ui/lib/locale\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/option.css\"","webpack://map-side-bar/external \"core-js/modules/es.promise\"","webpack://map-side-bar/external \"core-js/modules/es.object.to-string\"","webpack://map-side-bar/external \"algoliasearch\"","webpack://map-side-bar/./src/components/SideBar.vue?5bd3","webpack://map-side-bar/external \"vue\"","webpack://map-side-bar/external \"core-js/modules/es.array.iterator\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/icon.css\"","webpack://map-side-bar/external \"core-js/modules/es.string.iterator\"","webpack://map-side-bar/external \"element-ui/lib/popover\"","webpack://map-side-bar/external \"core-js/modules/es.map\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/base.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.flat\"","webpack://map-side-bar/./assets/missing-image.svg","webpack://map-side-bar/external \"@abi-software/gallery/src/mixins/GalleryHelpers\"","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/popover.css\"","webpack://map-side-bar/./src/components/SearchFilters.vue?d4f5","webpack://map-side-bar/external \"element-ui/lib/theme-chalk/input.css\"","webpack://map-side-bar/external \"core-js/modules/es.array.includes\"","webpack://map-side-bar/external \"element-ui/lib/loading\"","webpack://map-side-bar/external \"core-js/modules/es.array.find-index\"","webpack://map-side-bar/external \"element-ui/lib/card\"","webpack://map-side-bar/external \"element-ui/lib/icon\"","webpack://map-side-bar/./src/components/ImageGallery.vue?d71b","webpack://map-side-bar/external \"core-js/modules/es.object.assign\"","webpack://map-side-bar/external \"core-js/modules/es.function.name\"","webpack://map-side-bar/external \"core-js/modules/web.dom-collections.for-each\"","webpack://map-side-bar/./src/components/SidebarContent.vue?76ea","webpack://map-side-bar/external \"core-js/modules/es.string.search\"","webpack://map-side-bar/external \"core-js/modules/es.string.replace\"","webpack://map-side-bar/external \"element-ui/lib/option\"","webpack://map-side-bar/./src/components/DatasetCard.vue?b157","webpack://map-side-bar/external \"core-js/modules/es.array.last-index-of\"","webpack://map-side-bar/external \"current-script-polyfill\"","webpack://map-side-bar/external \"core-js/modules/es.array.from\"","webpack://map-side-bar/external \"element-ui/lib/input\"","webpack://map-side-bar/./src/components/BadgesGroup.vue?6780","webpack://map-side-bar/external \"core-js/modules/es.object.entries\"","webpack://map-side-bar/external \"core-js/modules/es.array.unscopables.flat\"","webpack://map-side-bar/external \"xss\"","webpack://map-side-bar/external \"core-js/modules/es.array.map\"","webpack://map-side-bar/external \"core-js/modules/es.promise.finally\"","webpack://map-side-bar/./node_modules/@vue/cli-service/lib/commands/build/setPublicPath.js","webpack://map-side-bar/./src/components/SideBar.vue?4bf4","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://map-side-bar/./src/components/SidebarContent.vue?e498","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/arrayWithoutHoles.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/iterableToArray.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/nonIterableSpread.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/toConsumableArray.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/asyncToGenerator.js","webpack://map-side-bar/./src/components/SearchFilters.vue?3a1c","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/arrayWithHoles.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/nonIterableRest.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/toArray.js","webpack://map-side-bar/./src/components/Cascader.vue","webpack://map-side-bar/src/components/Cascader.vue","webpack://map-side-bar/./src/components/Cascader.vue?9729","webpack://map-side-bar/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://map-side-bar/./src/components/species-map.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/classCallCheck.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/createClass.js","webpack://map-side-bar/./src/algolia/algolia.js","webpack://map-side-bar/./src/algolia/utils.js","webpack://map-side-bar/src/components/SearchFilters.vue","webpack://map-side-bar/./src/components/SearchFilters.vue?8079","webpack://map-side-bar/./src/components/SearchFilters.vue","webpack://map-side-bar/./src/components/DatasetCard.vue?b6f5","webpack://map-side-bar/./src/components/BadgesGroup.vue?019b","webpack://map-side-bar/src/components/BadgesGroup.vue","webpack://map-side-bar/./src/components/BadgesGroup.vue?6a7e","webpack://map-side-bar/./src/components/BadgesGroup.vue","webpack://map-side-bar/./src/components/EventBus.js","webpack://map-side-bar/./src/components/ImageGallery.vue?2311","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/iterableToArrayLimit.js","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/slicedToArray.js","webpack://map-side-bar/src/components/ImageGallery.vue","webpack://map-side-bar/./src/components/ImageGallery.vue?b8b4","webpack://map-side-bar/./src/components/ImageGallery.vue","webpack://map-side-bar/src/components/DatasetCard.vue","webpack://map-side-bar/./src/components/DatasetCard.vue?d021","webpack://map-side-bar/./src/components/DatasetCard.vue","webpack://map-side-bar/./src/components/ContextCard.vue?ab1c","webpack://map-side-bar/./src/components/hardcoded-context-info.js","webpack://map-side-bar/src/components/ContextCard.vue","webpack://map-side-bar/./src/components/ContextCard.vue?667e","webpack://map-side-bar/./src/components/ContextCard.vue","webpack://map-side-bar/src/components/SidebarContent.vue","webpack://map-side-bar/./src/components/SidebarContent.vue?7e01","webpack://map-side-bar/./src/components/SidebarContent.vue","webpack://map-side-bar/./src/components/Tabs.vue?71f3","webpack://map-side-bar/src/components/Tabs.vue","webpack://map-side-bar/./src/components/Tabs.vue?3d38","webpack://map-side-bar/./src/components/Tabs.vue","webpack://map-side-bar/src/components/SideBar.vue","webpack://map-side-bar/./src/components/SideBar.vue?b259","webpack://map-side-bar/./src/components/SideBar.vue","webpack://map-side-bar/external \"core-js/modules/es.string.includes\"","webpack://map-side-bar/external \"core-js/modules/es.array.find\""],"names":["root","factory","exports","module","define","amd","self","this","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","require","global","_defineProperties","target","props","length","descriptor","configurable","writable","_createClass","Constructor","protoProps","staticProps","_unsupportedIterableToArray","minLen","_arrayLikeToArray","toString","slice","constructor","Array","from","test","arr","len","arr2","_createForOfIteratorHelperLoose","allowArrayLike","it","iterator","next","isArray","done","TypeError","getDefaults","async","baseUrl","breaks","extensions","gfm","headerIds","headerPrefix","highlight","langPrefix","mangle","pedantic","renderer","sanitize","sanitizer","silent","smartypants","tokenizer","walkTokens","xhtml","changeDefaults","newDefaults","defaults","escapeTest","escapeReplace","escapeTestNoEncode","escapeReplaceNoEncode","escapeReplacements","getEscapeReplacement","ch","escape","html","encode","replace","unescapeTest","unescape","_","toLowerCase","charAt","String","fromCharCode","parseInt","substring","caret","edit","regex","opt","source","obj","val","getRegex","RegExp","nonWordAndColonTest","originIndependentUrl","cleanUrl","base","href","prot","decodeURIComponent","e","indexOf","resolveUrl","encodeURI","baseUrls","justDomain","protocol","domain","rtrim","relativeBase","noopTest","exec","merge","arguments","splitCells","tableRow","count","row","match","offset","str","escaped","curr","cells","split","trim","shift","pop","splice","push","invert","suffLen","currChar","findClosingBracket","b","level","checkSanitizeDeprecation","console","warn","repeatString","pattern","result","outputLink","cap","link","raw","lexer","title","text","state","inLink","token","type","tokens","inlineTokens","indentCodeCompensation","matchIndentToCode","indentToCode","map","node","matchIndentInNode","indentInNode","join","Tokenizer","options","_proto","space","src","rules","block","newline","code","codeBlockStyle","fences","lang","heading","trimmed","depth","inline","hr","blockquote","blockTokens","list","istask","ischecked","indent","blankLine","endsWithBlankLine","line","nextLine","rawLine","itemContents","endEarly","bull","isordered","ordered","start","loose","items","itemRegex","trimLeft","search","nextBulletRegex","Math","min","hrRegex","fencesBeginRegex","headingBeginRegex","task","checked","trimRight","top","spacers","filter","hasMultipleLineBreaks","every","_step","chars","lineBreaks","_iterator","_char","pre","def","tag","table","item","header","align","rows","j","k","lheading","paragraph","inRawBlock","trimmedUrl","rtrimSlash","lastParenIndex","linkLen","_escapes","reflink","links","nolink","emStrong","maskedSrc","prevChar","lDelim","nextChar","punctuation","rDelim","rLength","lLength","delimTotal","midDelimTotal","endReg","rDelimAst","rDelimUnd","lastIndex","_text","index","codespan","hasNonSpaceChars","hasSpaceCharsOnBothEnds","br","del","autolink","url","prevCapZero","_backpedal","inlineText","_paragraph","_label","_title","bullet","listItemStart","_tag","_comment","normal","reflinkSearch","out","charCodeAt","random","_punctuation","blockSkip","escapedEmSt","_scheme","_email","_attribute","_href","strong","middle","endAst","endUnd","em","_extended_email","Lexer","inlineQueue","lex","lexInline","lastToken","cutSrc","lastParagraphClipped","_this","leading","tabs","repeat","some","extTokenizer","startBlock","startIndex","Infinity","tempSrc","tempStart","forEach","getStartIndex","errMsg","error","Error","_this2","keepPrevChar","keys","includes","lastIndexOf","startInline","Renderer","_code","infostring","quote","_html","slugger","id","slug","body","startatt","listitem","checkbox","tablerow","content","tablecell","flags","image","TextRenderer","Slugger","seen","serialize","getNextSafeSlug","originalSlug","isDryRun","occurenceAccumulator","dryrun","Parser","textRenderer","parse","parser","parseInline","l2","l3","cell","itemBody","ret","renderers","unshift","marked","callback","err","pending","setTimeout","onError","message","_tokens","Promise","all","then","setOptions","use","_len","args","_key","hasExtensions","opts","apply","concat","childTokens","pack","ext","prevRenderer","_len2","_key2","_loop","prop","_len3","_key3","_loop2","prevTokenizer","_len4","_key4","_walkTokens","values","_loop3","_step2","_iterator2","_step3","_iterator3","_step4","_iterator4","_cell","window","document","currentScript","render","_vm","_h","$createElement","_c","_self","ref","drawerOpen","_e","staticClass","on","toggleDrawer","attrs","$event","close","activeId","tabClicked","_l","tab","directives","rawName","expression","refInFor","contextCard","envVars","searchChanged","staticRenderFns","_defineProperty","bodyStyle","slot","contextCardEntry","contextCardEnabled","clearSearchClicked","nativeOn","searchEvent","model","$$v","searchInput","_v","filterEntry","filterUpdate","numberPerPageUpdate","filtersLoading","cascaderReady","results","loadingCards","doi","contextCardUpdate","page","numberPerPage","numberOfHits","pageChange","_arrayWithoutHoles","_iterableToArray","iter","_nonIterableSpread","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","_asyncToGenerator","fn","undefined","cascadeEvent","cascadeExpandChange","tagsChangedCallback","cascadeSelected","numberShownChanged","numberShown","_s","numberOfResultsText","_arrayWithHoles","_nonIterableRest","_toArray","arrayWithHoles","nonIterableRest","extends","methods","computePresentTags","customNodes","tags","genTag","first","restCount","collapseTags","closable","rest","checkedNodes","presentTags","$emit","normalizeComponent","scriptExports","functionalTemplate","injectStyles","scopeId","moduleIdentifier","shadowMode","hook","_compiled","functional","_scopeId","context","$vnode","ssrContext","parent","__VUE_SSR_CONTEXT__","_registeredComponents","add","_ssrRegister","$root","$options","shadowRoot","_injectStyles","originalRender","h","existing","beforeCreate","component","_classCallCheck","instance","AlgoliaClient","algoliaId","algoliaKey","PENNSIEVE_API_LOCATION","client","algoliasearch","ALGOLIA_INDEX","initIndex","propPathMapping","Map","entries","facetPropPaths","facetData","facetId","sortFacetValuesBy","facets","response","facetPropPath","children","responseFacets","responseFacetChildren","facet","label","discoverId","fetch","json","dataset","version","discoverIds","promiseList","_discoverAllDois","flat","newResults","newResult","res","curie","description","updated","pennsieve","updatedAt","publishDate","datasetId","objectID","detailsReady","hits","foundKeyWords","uniqueKeywords","hit","keywords","keywordObj","keyword","toUpperCase","_processUberonURL","anatomy","organ","Set","ub","query","hitsperPage","hitsPerPage","filters","attributesToHighlight","attributesToRetrieve","searchData","_processResultsForCards","total","nbHits","identifier","dois","anatomyAsUberons","_processAnatomy","facetPropPathMapping","getFilters","selectedFacetArray","f","removeShowAllFacets","facetsToBool","orFilters","andFilters","AND","facetArray","txt","capitalise","components","CustomCascader","MapSvgIcon","MapSvgSpriteColor","entry","default","data","cascaderIsReady","previousShowAllChecked","species","gender","datasets","showFilters","showFiltersText","cascadeSelectedWithBoolean","numberDatasetsShown","computed","createCascaderItemValue","term","populateCascader","event","showAllEventModifier","propPath","fs","setCascader","filterKeys","makeCascadeLabelsClickable","hasShowAll","facetMaps","showAll","modifiedEvent","sort","a","createDataTypeFacet","el","dataFacet","newChildren","__expandItem__","updatePreviousShowAllChecked","element","filterFacets","addFilter","validateFilter","initiateSearch","checkShowAllBoxes","$nextTick","getValidatedFilters","mounted","algoliaClient","loading","thumbnail","biolucidaData","currentCategory","galleryClicked","cardClicked","contributors","publishYear","samples","openRepository","categoryChanged","categories","size","class","active","categoryClicked","additionalLinks","datasetBiolucida","addToCategories","array","addSimulationsToCategories","watch","deep","immediate","handler","scaffolds","segmentation","plots","simulation","EventBus","Vue","bottomSpacer","galleryItems","maxWidth","imageStyle","imageContainerStyle","shadow","_iterableToArrayLimit","_arr","_n","_d","_i","_slicedToArray","iterableToArrayLimit","string","mixins","Number","datasetVersion","datasetThumbnail","category","currentIndex","ro","width","height","display","alignItems","justifyContent","resetIndex","payload","createSciCurnchItems","createDatasetItem","createScaffoldItems","createSimulationItems","createPlotItems","createSegmentationItems","hideType","hideTitle","createImageItems","images","baseName","filePath","linkUrl","thumbnailURL","file_path","path","mimetype","plotAnnotation","isDescribedBy","supplementalData","filePathPrefix","dataSource","metadata","resource","userData","action","apiLocation","banner","contextCardUrl","replaceAll","share_link","API_LOCATION","createVideoItems","videos","video","onResize","$el","clientWidth","getContextCardUrl","$refs","gallery","indicatorClicked","created","ResizeObserver","observe","destroyed","dataLocation","lastDoi","lastName","numberSamples","numberSubjects","organs","openDataset","propogateCardAction","open","xmlhttp","setRequestHeader","onreadystatechange","readyState","status","JSON","responseText","uri","send","stringify","splitDOI","getBanner","fullName","getBiolucidaInfo","endpoint","showDetails","contextData","domProps","parseMarkdown","samplesUnderViews","views","view","viewClicked","getFileFromPath","sampleDetails","samplesMatching","generateFileLink","openViewFile","staticStyle","sample","toggleSampleDetails","style","color","showContextCard","getContextFile","contextFileUrl","removeDoubleFilesPath","addDiscoverIdsToContextData","processPathForUrl","convertBackslashToForwardSlash","addFilesToPathIfMissing","splitDoiFromUrl","viewUrl","handleErrors","initial_state","lastSearch","pageModel","hasSearched","visible","Boolean","isDrawer","flex","resetSearch","_dois","openSearch","resetPageNavigation","filtersRef","searchAlgolia","keyCode","MouseEvent","anatomyInSearch","handleMissingData","perItemSearch","maxDownloads","callSciCrunch","scrollToTop","scroll","resultsProcessing","assign","sampleSize","subjectSize","timestamp","dataset_identifier","datasetRevision","dataset_revision","dataset_version","organisms","thumbnails","scaffoldViews","contextualInformation","createfilterParams","params","append","fullEndpoint","searchEndpoint","highlightText","titleClicked","tabTitles","openAtStart","openNeuronSearch","payLoad"],"mappings":"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","file":"map-side-bar.umd.min.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"map-side-bar\"] = factory();\n\telse\n\t\troot[\"map-side-bar\"] = factory();\n})((typeof self !== 'undefined' ? self : this), function() {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = \"fae3\");\n","module.exports = require(\"element-ui/lib/pagination\");","module.exports = require(\"core-js/modules/es.symbol.iterator\");","module.exports = require(\"element-ui/lib/theme-chalk/pagination.css\");","module.exports = require(\"core-js/modules/es.parse-int\");","module.exports = require(\"element-ui/lib/select\");","module.exports = require(\"element-ui/lib/theme-chalk/select.css\");","module.exports = require(\"core-js/modules/es.array.for-each\");","module.exports = require(\"core-js/modules/es.array.concat\");","module.exports = require(\"core-js/modules/web.dom-collections.iterator\");","module.exports = require(\"core-js/modules/es.object.keys\");","module.exports = require(\"element-ui/lib/theme-chalk/link.css\");","module.exports = require(\"element-ui/lib/theme-chalk/button.css\");","module.exports = require(\"core-js/modules/web.url\");","module.exports = require(\"element-ui/lib/theme-chalk/loading.css\");","module.exports = require(\"element-ui/lib/drawer\");","module.exports = require(\"@abi-software/gallery\");","module.exports = require(\"core-js/modules/es.array.join\");","module.exports = require(\"@abi-software/svg-sprite\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptors\");","module.exports = require(\"core-js/modules/es.string.split\");","module.exports = require(\"core-js/modules/es.set\");","module.exports = require(\"core-js/modules/es.array.filter\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/card.css\");","module.exports = require(\"element-ui/lib/theme-chalk/drawer.css\");","module.exports = require(\"core-js/modules/es.symbol.description\");","module.exports = require(\"core-js/modules/es.regexp.exec\");","module.exports = require(\"@abi-software/gallery/dist/gallery.css\");","module.exports = require(\"element-ui/lib/button\");","module.exports = require(\"core-js/modules/es.regexp.to-string\");","module.exports = require(\"core-js/modules/es.symbol\");","module.exports = require(\"core-js/modules/es.array.slice\");","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptor\");","module.exports = require(\"element-ui/lib/cascader\");","module.exports = require(\"element-ui/lib/locale/lang/en\");","module.exports = require(\"element-ui/lib/theme-chalk/cascader.css\");","module.exports = require(\"core-js/modules/es.array.sort\");","module.exports = require(\"core-js/modules/es.number.constructor\");","module.exports = require(\"regenerator-runtime/runtime\");","/**\n * marked - a markdown parser\n * Copyright (c) 2011-2022, Christopher Jeffrey. (MIT Licensed)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\n(function (global, factory) {\n typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :\n typeof define === 'function' && define.amd ? define(['exports'], factory) :\n (global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory(global.marked = {}));\n})(this, (function (exports) { 'use strict';\n\n function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n }\n\n function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n Object.defineProperty(Constructor, \"prototype\", {\n writable: false\n });\n return Constructor;\n }\n\n function _unsupportedIterableToArray(o, minLen) {\n if (!o) return;\n if (typeof o === \"string\") return _arrayLikeToArray(o, minLen);\n var n = Object.prototype.toString.call(o).slice(8, -1);\n if (n === \"Object\" && o.constructor) n = o.constructor.name;\n if (n === \"Map\" || n === \"Set\") return Array.from(o);\n if (n === \"Arguments\" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen);\n }\n\n function _arrayLikeToArray(arr, len) {\n if (len == null || len > arr.length) len = arr.length;\n\n for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i];\n\n return arr2;\n }\n\n function _createForOfIteratorHelperLoose(o, allowArrayLike) {\n var it = typeof Symbol !== \"undefined\" && o[Symbol.iterator] || o[\"@@iterator\"];\n if (it) return (it = it.call(o)).next.bind(it);\n\n if (Array.isArray(o) || (it = _unsupportedIterableToArray(o)) || allowArrayLike && o && typeof o.length === \"number\") {\n if (it) o = it;\n var i = 0;\n return function () {\n if (i >= o.length) return {\n done: true\n };\n return {\n done: false,\n value: o[i++]\n };\n };\n }\n\n throw new TypeError(\"Invalid attempt to iterate non-iterable instance.\\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.\");\n }\n\n function getDefaults() {\n return {\n async: false,\n baseUrl: null,\n breaks: false,\n extensions: null,\n gfm: true,\n headerIds: true,\n headerPrefix: '',\n highlight: null,\n langPrefix: 'language-',\n mangle: true,\n pedantic: false,\n renderer: null,\n sanitize: false,\n sanitizer: null,\n silent: false,\n smartypants: false,\n tokenizer: null,\n walkTokens: null,\n xhtml: false\n };\n }\n exports.defaults = getDefaults();\n function changeDefaults(newDefaults) {\n exports.defaults = newDefaults;\n }\n\n /**\n * Helpers\n */\n var escapeTest = /[&<>\"']/;\n var escapeReplace = /[&<>\"']/g;\n var escapeTestNoEncode = /[<>\"']|&(?!#?\\w+;)/;\n var escapeReplaceNoEncode = /[<>\"']|&(?!#?\\w+;)/g;\n var escapeReplacements = {\n '&': '&amp;',\n '<': '&lt;',\n '>': '&gt;',\n '\"': '&quot;',\n \"'\": '&#39;'\n };\n\n var getEscapeReplacement = function getEscapeReplacement(ch) {\n return escapeReplacements[ch];\n };\n\n function escape(html, encode) {\n if (encode) {\n if (escapeTest.test(html)) {\n return html.replace(escapeReplace, getEscapeReplacement);\n }\n } else {\n if (escapeTestNoEncode.test(html)) {\n return html.replace(escapeReplaceNoEncode, getEscapeReplacement);\n }\n }\n\n return html;\n }\n var unescapeTest = /&(#(?:\\d+)|(?:#x[0-9A-Fa-f]+)|(?:\\w+));?/ig;\n /**\n * @param {string} html\n */\n\n function unescape(html) {\n // explicitly match decimal, hex, and named HTML entities\n return html.replace(unescapeTest, function (_, n) {\n n = n.toLowerCase();\n if (n === 'colon') return ':';\n\n if (n.charAt(0) === '#') {\n return n.charAt(1) === 'x' ? String.fromCharCode(parseInt(n.substring(2), 16)) : String.fromCharCode(+n.substring(1));\n }\n\n return '';\n });\n }\n var caret = /(^|[^\\[])\\^/g;\n /**\n * @param {string | RegExp} regex\n * @param {string} opt\n */\n\n function edit(regex, opt) {\n regex = typeof regex === 'string' ? regex : regex.source;\n opt = opt || '';\n var obj = {\n replace: function replace(name, val) {\n val = val.source || val;\n val = val.replace(caret, '$1');\n regex = regex.replace(name, val);\n return obj;\n },\n getRegex: function getRegex() {\n return new RegExp(regex, opt);\n }\n };\n return obj;\n }\n var nonWordAndColonTest = /[^\\w:]/g;\n var originIndependentUrl = /^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;\n /**\n * @param {boolean} sanitize\n * @param {string} base\n * @param {string} href\n */\n\n function cleanUrl(sanitize, base, href) {\n if (sanitize) {\n var prot;\n\n try {\n prot = decodeURIComponent(unescape(href)).replace(nonWordAndColonTest, '').toLowerCase();\n } catch (e) {\n return null;\n }\n\n if (prot.indexOf('javascript:') === 0 || prot.indexOf('vbscript:') === 0 || prot.indexOf('data:') === 0) {\n return null;\n }\n }\n\n if (base && !originIndependentUrl.test(href)) {\n href = resolveUrl(base, href);\n }\n\n try {\n href = encodeURI(href).replace(/%25/g, '%');\n } catch (e) {\n return null;\n }\n\n return href;\n }\n var baseUrls = {};\n var justDomain = /^[^:]+:\\/*[^/]*$/;\n var protocol = /^([^:]+:)[\\s\\S]*$/;\n var domain = /^([^:]+:\\/*[^/]*)[\\s\\S]*$/;\n /**\n * @param {string} base\n * @param {string} href\n */\n\n function resolveUrl(base, href) {\n if (!baseUrls[' ' + base]) {\n // we can ignore everything in base after the last slash of its path component,\n // but we might need to add _that_\n // https://tools.ietf.org/html/rfc3986#section-3\n if (justDomain.test(base)) {\n baseUrls[' ' + base] = base + '/';\n } else {\n baseUrls[' ' + base] = rtrim(base, '/', true);\n }\n }\n\n base = baseUrls[' ' + base];\n var relativeBase = base.indexOf(':') === -1;\n\n if (href.substring(0, 2) === '//') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(protocol, '$1') + href;\n } else if (href.charAt(0) === '/') {\n if (relativeBase) {\n return href;\n }\n\n return base.replace(domain, '$1') + href;\n } else {\n return base + href;\n }\n }\n var noopTest = {\n exec: function noopTest() {}\n };\n function merge(obj) {\n var i = 1,\n target,\n key;\n\n for (; i < arguments.length; i++) {\n target = arguments[i];\n\n for (key in target) {\n if (Object.prototype.hasOwnProperty.call(target, key)) {\n obj[key] = target[key];\n }\n }\n }\n\n return obj;\n }\n function splitCells(tableRow, count) {\n // ensure that every cell-delimiting pipe has a space\n // before it to distinguish it from an escaped pipe\n var row = tableRow.replace(/\\|/g, function (match, offset, str) {\n var escaped = false,\n curr = offset;\n\n while (--curr >= 0 && str[curr] === '\\\\') {\n escaped = !escaped;\n }\n\n if (escaped) {\n // odd number of slashes means | is escaped\n // so we leave it alone\n return '|';\n } else {\n // add space before unescaped |\n return ' |';\n }\n }),\n cells = row.split(/ \\|/);\n var i = 0; // First/last cell in a row cannot be empty if it has no leading/trailing pipe\n\n if (!cells[0].trim()) {\n cells.shift();\n }\n\n if (cells.length > 0 && !cells[cells.length - 1].trim()) {\n cells.pop();\n }\n\n if (cells.length > count) {\n cells.splice(count);\n } else {\n while (cells.length < count) {\n cells.push('');\n }\n }\n\n for (; i < cells.length; i++) {\n // leading or trailing whitespace is ignored per the gfm spec\n cells[i] = cells[i].trim().replace(/\\\\\\|/g, '|');\n }\n\n return cells;\n }\n /**\n * Remove trailing 'c's. Equivalent to str.replace(/c*$/, '').\n * /c*$/ is vulnerable to REDOS.\n *\n * @param {string} str\n * @param {string} c\n * @param {boolean} invert Remove suffix of non-c chars instead. Default falsey.\n */\n\n function rtrim(str, c, invert) {\n var l = str.length;\n\n if (l === 0) {\n return '';\n } // Length of suffix matching the invert condition.\n\n\n var suffLen = 0; // Step left until we fail to match the invert condition.\n\n while (suffLen < l) {\n var currChar = str.charAt(l - suffLen - 1);\n\n if (currChar === c && !invert) {\n suffLen++;\n } else if (currChar !== c && invert) {\n suffLen++;\n } else {\n break;\n }\n }\n\n return str.slice(0, l - suffLen);\n }\n function findClosingBracket(str, b) {\n if (str.indexOf(b[1]) === -1) {\n return -1;\n }\n\n var l = str.length;\n var level = 0,\n i = 0;\n\n for (; i < l; i++) {\n if (str[i] === '\\\\') {\n i++;\n } else if (str[i] === b[0]) {\n level++;\n } else if (str[i] === b[1]) {\n level--;\n\n if (level < 0) {\n return i;\n }\n }\n }\n\n return -1;\n }\n function checkSanitizeDeprecation(opt) {\n if (opt && opt.sanitize && !opt.silent) {\n console.warn('marked(): sanitize and sanitizer parameters are deprecated since version 0.7.0, should not be used and will be removed in the future. Read more here: https://marked.js.org/#/USING_ADVANCED.md#options');\n }\n } // copied from https://stackoverflow.com/a/5450113/806777\n\n /**\n * @param {string} pattern\n * @param {number} count\n */\n\n function repeatString(pattern, count) {\n if (count < 1) {\n return '';\n }\n\n var result = '';\n\n while (count > 1) {\n if (count & 1) {\n result += pattern;\n }\n\n count >>= 1;\n pattern += pattern;\n }\n\n return result + pattern;\n }\n\n function outputLink(cap, link, raw, lexer) {\n var href = link.href;\n var title = link.title ? escape(link.title) : null;\n var text = cap[1].replace(/\\\\([\\[\\]])/g, '$1');\n\n if (cap[0].charAt(0) !== '!') {\n lexer.state.inLink = true;\n var token = {\n type: 'link',\n raw: raw,\n href: href,\n title: title,\n text: text,\n tokens: lexer.inlineTokens(text)\n };\n lexer.state.inLink = false;\n return token;\n }\n\n return {\n type: 'image',\n raw: raw,\n href: href,\n title: title,\n text: escape(text)\n };\n }\n\n function indentCodeCompensation(raw, text) {\n var matchIndentToCode = raw.match(/^(\\s+)(?:```)/);\n\n if (matchIndentToCode === null) {\n return text;\n }\n\n var indentToCode = matchIndentToCode[1];\n return text.split('\\n').map(function (node) {\n var matchIndentInNode = node.match(/^\\s+/);\n\n if (matchIndentInNode === null) {\n return node;\n }\n\n var indentInNode = matchIndentInNode[0];\n\n if (indentInNode.length >= indentToCode.length) {\n return node.slice(indentToCode.length);\n }\n\n return node;\n }).join('\\n');\n }\n /**\n * Tokenizer\n */\n\n\n var Tokenizer = /*#__PURE__*/function () {\n function Tokenizer(options) {\n this.options = options || exports.defaults;\n }\n\n var _proto = Tokenizer.prototype;\n\n _proto.space = function space(src) {\n var cap = this.rules.block.newline.exec(src);\n\n if (cap && cap[0].length > 0) {\n return {\n type: 'space',\n raw: cap[0]\n };\n }\n };\n\n _proto.code = function code(src) {\n var cap = this.rules.block.code.exec(src);\n\n if (cap) {\n var text = cap[0].replace(/^ {1,4}/gm, '');\n return {\n type: 'code',\n raw: cap[0],\n codeBlockStyle: 'indented',\n text: !this.options.pedantic ? rtrim(text, '\\n') : text\n };\n }\n };\n\n _proto.fences = function fences(src) {\n var cap = this.rules.block.fences.exec(src);\n\n if (cap) {\n var raw = cap[0];\n var text = indentCodeCompensation(raw, cap[3] || '');\n return {\n type: 'code',\n raw: raw,\n lang: cap[2] ? cap[2].trim() : cap[2],\n text: text\n };\n }\n };\n\n _proto.heading = function heading(src) {\n var cap = this.rules.block.heading.exec(src);\n\n if (cap) {\n var text = cap[2].trim(); // remove trailing #s\n\n if (/#$/.test(text)) {\n var trimmed = rtrim(text, '#');\n\n if (this.options.pedantic) {\n text = trimmed.trim();\n } else if (!trimmed || / $/.test(trimmed)) {\n // CommonMark requires space before trailing #s\n text = trimmed.trim();\n }\n }\n\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[1].length,\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n\n _proto.hr = function hr(src) {\n var cap = this.rules.block.hr.exec(src);\n\n if (cap) {\n return {\n type: 'hr',\n raw: cap[0]\n };\n }\n };\n\n _proto.blockquote = function blockquote(src) {\n var cap = this.rules.block.blockquote.exec(src);\n\n if (cap) {\n var text = cap[0].replace(/^ *>[ \\t]?/gm, '');\n return {\n type: 'blockquote',\n raw: cap[0],\n tokens: this.lexer.blockTokens(text, []),\n text: text\n };\n }\n };\n\n _proto.list = function list(src) {\n var cap = this.rules.block.list.exec(src);\n\n if (cap) {\n var raw, istask, ischecked, indent, i, blankLine, endsWithBlankLine, line, nextLine, rawLine, itemContents, endEarly;\n var bull = cap[1].trim();\n var isordered = bull.length > 1;\n var list = {\n type: 'list',\n raw: '',\n ordered: isordered,\n start: isordered ? +bull.slice(0, -1) : '',\n loose: false,\n items: []\n };\n bull = isordered ? \"\\\\d{1,9}\\\\\" + bull.slice(-1) : \"\\\\\" + bull;\n\n if (this.options.pedantic) {\n bull = isordered ? bull : '[*+-]';\n } // Get next list item\n\n\n var itemRegex = new RegExp(\"^( {0,3}\" + bull + \")((?:[\\t ][^\\\\n]*)?(?:\\\\n|$))\"); // Check if current bullet point can start a new List Item\n\n while (src) {\n endEarly = false;\n\n if (!(cap = itemRegex.exec(src))) {\n break;\n }\n\n if (this.rules.block.hr.test(src)) {\n // End list if bullet was actually HR (possibly move into itemRegex?)\n break;\n }\n\n raw = cap[0];\n src = src.substring(raw.length);\n line = cap[2].split('\\n', 1)[0];\n nextLine = src.split('\\n', 1)[0];\n\n if (this.options.pedantic) {\n indent = 2;\n itemContents = line.trimLeft();\n } else {\n indent = cap[2].search(/[^ ]/); // Find first non-space char\n\n indent = indent > 4 ? 1 : indent; // Treat indented code blocks (> 4 spaces) as having only 1 indent\n\n itemContents = line.slice(indent);\n indent += cap[1].length;\n }\n\n blankLine = false;\n\n if (!line && /^ *$/.test(nextLine)) {\n // Items begin with at most one blank line\n raw += nextLine + '\\n';\n src = src.substring(nextLine.length + 1);\n endEarly = true;\n }\n\n if (!endEarly) {\n var nextBulletRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:[*+-]|\\\\d{1,9}[.)])((?: [^\\\\n]*)?(?:\\\\n|$))\");\n var hrRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)\");\n var fencesBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}(?:```|~~~)\");\n var headingBeginRegex = new RegExp(\"^ {0,\" + Math.min(3, indent - 1) + \"}#\"); // Check if following lines should be included in List Item\n\n while (src) {\n rawLine = src.split('\\n', 1)[0];\n line = rawLine; // Re-align to follow commonmark nesting rules\n\n if (this.options.pedantic) {\n line = line.replace(/^ {1,4}(?=( {4})*[^ ])/g, ' ');\n } // End list item if found code fences\n\n\n if (fencesBeginRegex.test(line)) {\n break;\n } // End list item if found start of new heading\n\n\n if (headingBeginRegex.test(line)) {\n break;\n } // End list item if found start of new bullet\n\n\n if (nextBulletRegex.test(line)) {\n break;\n } // Horizontal rule found\n\n\n if (hrRegex.test(src)) {\n break;\n }\n\n if (line.search(/[^ ]/) >= indent || !line.trim()) {\n // Dedent if possible\n itemContents += '\\n' + line.slice(indent);\n } else if (!blankLine) {\n // Until blank line, item doesn't need indentation\n itemContents += '\\n' + line;\n } else {\n // Otherwise, improper indentation ends this item\n break;\n }\n\n if (!blankLine && !line.trim()) {\n // Check if current line is blank\n blankLine = true;\n }\n\n raw += rawLine + '\\n';\n src = src.substring(rawLine.length + 1);\n }\n }\n\n if (!list.loose) {\n // If the previous item ended with a blank line, the list is loose\n if (endsWithBlankLine) {\n list.loose = true;\n } else if (/\\n *\\n *$/.test(raw)) {\n endsWithBlankLine = true;\n }\n } // Check for task list items\n\n\n if (this.options.gfm) {\n istask = /^\\[[ xX]\\] /.exec(itemContents);\n\n if (istask) {\n ischecked = istask[0] !== '[ ] ';\n itemContents = itemContents.replace(/^\\[[ xX]\\] +/, '');\n }\n }\n\n list.items.push({\n type: 'list_item',\n raw: raw,\n task: !!istask,\n checked: ischecked,\n loose: false,\n text: itemContents\n });\n list.raw += raw;\n } // Do not consume newlines at end of final item. Alternatively, make itemRegex *start* with any newlines to simplify/speed up endsWithBlankLine logic\n\n\n list.items[list.items.length - 1].raw = raw.trimRight();\n list.items[list.items.length - 1].text = itemContents.trimRight();\n list.raw = list.raw.trimRight();\n var l = list.items.length; // Item child tokens handled here at end because we needed to have the final item to trim it first\n\n for (i = 0; i < l; i++) {\n this.lexer.state.top = false;\n list.items[i].tokens = this.lexer.blockTokens(list.items[i].text, []);\n var spacers = list.items[i].tokens.filter(function (t) {\n return t.type === 'space';\n });\n var hasMultipleLineBreaks = spacers.every(function (t) {\n var chars = t.raw.split('');\n var lineBreaks = 0;\n\n for (var _iterator = _createForOfIteratorHelperLoose(chars), _step; !(_step = _iterator()).done;) {\n var _char = _step.value;\n\n if (_char === '\\n') {\n lineBreaks += 1;\n }\n\n if (lineBreaks > 1) {\n return true;\n }\n }\n\n return false;\n });\n\n if (!list.loose && spacers.length && hasMultipleLineBreaks) {\n // Having a single line break doesn't mean a list is loose. A single line break is terminating the last list item\n list.loose = true;\n list.items[i].loose = true;\n }\n }\n\n return list;\n }\n };\n\n _proto.html = function html(src) {\n var cap = this.rules.block.html.exec(src);\n\n if (cap) {\n var token = {\n type: 'html',\n raw: cap[0],\n pre: !this.options.sanitizer && (cap[1] === 'pre' || cap[1] === 'script' || cap[1] === 'style'),\n text: cap[0]\n };\n\n if (this.options.sanitize) {\n var text = this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]);\n token.type = 'paragraph';\n token.text = text;\n token.tokens = this.lexer.inline(text);\n }\n\n return token;\n }\n };\n\n _proto.def = function def(src) {\n var cap = this.rules.block.def.exec(src);\n\n if (cap) {\n if (cap[3]) cap[3] = cap[3].substring(1, cap[3].length - 1);\n var tag = cap[1].toLowerCase().replace(/\\s+/g, ' ');\n return {\n type: 'def',\n tag: tag,\n raw: cap[0],\n href: cap[2],\n title: cap[3]\n };\n }\n };\n\n _proto.table = function table(src) {\n var cap = this.rules.block.table.exec(src);\n\n if (cap) {\n var item = {\n type: 'table',\n header: splitCells(cap[1]).map(function (c) {\n return {\n text: c\n };\n }),\n align: cap[2].replace(/^ *|\\| *$/g, '').split(/ *\\| */),\n rows: cap[3] && cap[3].trim() ? cap[3].replace(/\\n[ \\t]*$/, '').split('\\n') : []\n };\n\n if (item.header.length === item.align.length) {\n item.raw = cap[0];\n var l = item.align.length;\n var i, j, k, row;\n\n for (i = 0; i < l; i++) {\n if (/^ *-+: *$/.test(item.align[i])) {\n item.align[i] = 'right';\n } else if (/^ *:-+: *$/.test(item.align[i])) {\n item.align[i] = 'center';\n } else if (/^ *:-+ *$/.test(item.align[i])) {\n item.align[i] = 'left';\n } else {\n item.align[i] = null;\n }\n }\n\n l = item.rows.length;\n\n for (i = 0; i < l; i++) {\n item.rows[i] = splitCells(item.rows[i], item.header.length).map(function (c) {\n return {\n text: c\n };\n });\n } // parse child tokens inside headers and cells\n // header child tokens\n\n\n l = item.header.length;\n\n for (j = 0; j < l; j++) {\n item.header[j].tokens = this.lexer.inline(item.header[j].text);\n } // cell child tokens\n\n\n l = item.rows.length;\n\n for (j = 0; j < l; j++) {\n row = item.rows[j];\n\n for (k = 0; k < row.length; k++) {\n row[k].tokens = this.lexer.inline(row[k].text);\n }\n }\n\n return item;\n }\n }\n };\n\n _proto.lheading = function lheading(src) {\n var cap = this.rules.block.lheading.exec(src);\n\n if (cap) {\n return {\n type: 'heading',\n raw: cap[0],\n depth: cap[2].charAt(0) === '=' ? 1 : 2,\n text: cap[1],\n tokens: this.lexer.inline(cap[1])\n };\n }\n };\n\n _proto.paragraph = function paragraph(src) {\n var cap = this.rules.block.paragraph.exec(src);\n\n if (cap) {\n var text = cap[1].charAt(cap[1].length - 1) === '\\n' ? cap[1].slice(0, -1) : cap[1];\n return {\n type: 'paragraph',\n raw: cap[0],\n text: text,\n tokens: this.lexer.inline(text)\n };\n }\n };\n\n _proto.text = function text(src) {\n var cap = this.rules.block.text.exec(src);\n\n if (cap) {\n return {\n type: 'text',\n raw: cap[0],\n text: cap[0],\n tokens: this.lexer.inline(cap[0])\n };\n }\n };\n\n _proto.escape = function escape$1(src) {\n var cap = this.rules.inline.escape.exec(src);\n\n if (cap) {\n return {\n type: 'escape',\n raw: cap[0],\n text: escape(cap[1])\n };\n }\n };\n\n _proto.tag = function tag(src) {\n var cap = this.rules.inline.tag.exec(src);\n\n if (cap) {\n if (!this.lexer.state.inLink && /^<a /i.test(cap[0])) {\n this.lexer.state.inLink = true;\n } else if (this.lexer.state.inLink && /^<\\/a>/i.test(cap[0])) {\n this.lexer.state.inLink = false;\n }\n\n if (!this.lexer.state.inRawBlock && /^<(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = true;\n } else if (this.lexer.state.inRawBlock && /^<\\/(pre|code|kbd|script)(\\s|>)/i.test(cap[0])) {\n this.lexer.state.inRawBlock = false;\n }\n\n return {\n type: this.options.sanitize ? 'text' : 'html',\n raw: cap[0],\n inLink: this.lexer.state.inLink,\n inRawBlock: this.lexer.state.inRawBlock,\n text: this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0]\n };\n }\n };\n\n _proto.link = function link(src) {\n var cap = this.rules.inline.link.exec(src);\n\n if (cap) {\n var trimmedUrl = cap[2].trim();\n\n if (!this.options.pedantic && /^</.test(trimmedUrl)) {\n // commonmark requires matching angle brackets\n if (!/>$/.test(trimmedUrl)) {\n return;\n } // ending angle bracket cannot be escaped\n\n\n var rtrimSlash = rtrim(trimmedUrl.slice(0, -1), '\\\\');\n\n if ((trimmedUrl.length - rtrimSlash.length) % 2 === 0) {\n return;\n }\n } else {\n // find closing parenthesis\n var lastParenIndex = findClosingBracket(cap[2], '()');\n\n if (lastParenIndex > -1) {\n var start = cap[0].indexOf('!') === 0 ? 5 : 4;\n var linkLen = start + cap[1].length + lastParenIndex;\n cap[2] = cap[2].substring(0, lastParenIndex);\n cap[0] = cap[0].substring(0, linkLen).trim();\n cap[3] = '';\n }\n }\n\n var href = cap[2];\n var title = '';\n\n if (this.options.pedantic) {\n // split pedantic href and title\n var link = /^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/.exec(href);\n\n if (link) {\n href = link[1];\n title = link[3];\n }\n } else {\n title = cap[3] ? cap[3].slice(1, -1) : '';\n }\n\n href = href.trim();\n\n if (/^</.test(href)) {\n if (this.options.pedantic && !/>$/.test(trimmedUrl)) {\n // pedantic allows starting angle bracket without ending angle bracket\n href = href.slice(1);\n } else {\n href = href.slice(1, -1);\n }\n }\n\n return outputLink(cap, {\n href: href ? href.replace(this.rules.inline._escapes, '$1') : href,\n title: title ? title.replace(this.rules.inline._escapes, '$1') : title\n }, cap[0], this.lexer);\n }\n };\n\n _proto.reflink = function reflink(src, links) {\n var cap;\n\n if ((cap = this.rules.inline.reflink.exec(src)) || (cap = this.rules.inline.nolink.exec(src))) {\n var link = (cap[2] || cap[1]).replace(/\\s+/g, ' ');\n link = links[link.toLowerCase()];\n\n if (!link || !link.href) {\n var text = cap[0].charAt(0);\n return {\n type: 'text',\n raw: text,\n text: text\n };\n }\n\n return outputLink(cap, link, cap[0], this.lexer);\n }\n };\n\n _proto.emStrong = function emStrong(src, maskedSrc, prevChar) {\n if (prevChar === void 0) {\n prevChar = '';\n }\n\n var match = this.rules.inline.emStrong.lDelim.exec(src);\n if (!match) return; // _ can't be between two alphanumerics. \\p{L}\\p{N} includes non-english alphabet/numbers as well\n\n if (match[3] && prevChar.match(/(?:[0-9A-Za-z\\xAA\\xB2\\xB3\\xB5\\xB9\\xBA\\xBC-\\xBE\\xC0-\\xD6\\xD8-\\xF6\\xF8-\\u02C1\\u02C6-\\u02D1\\u02E0-\\u02E4\\u02EC\\u02EE\\u0370-\\u0374\\u0376\\u0377\\u037A-\\u037D\\u037F\\u0386\\u0388-\\u038A\\u038C\\u038E-\\u03A1\\u03A3-\\u03F5\\u03F7-\\u0481\\u048A-\\u052F\\u0531-\\u0556\\u0559\\u0560-\\u0588\\u05D0-\\u05EA\\u05EF-\\u05F2\\u0620-\\u064A\\u0660-\\u0669\\u066E\\u066F\\u0671-\\u06D3\\u06D5\\u06E5\\u06E6\\u06EE-\\u06FC\\u06FF\\u0710\\u0712-\\u072F\\u074D-\\u07A5\\u07B1\\u07C0-\\u07EA\\u07F4\\u07F5\\u07FA\\u0800-\\u0815\\u081A\\u0824\\u0828\\u0840-\\u0858\\u0860-\\u086A\\u0870-\\u0887\\u0889-\\u088E\\u08A0-\\u08C9\\u0904-\\u0939\\u093D\\u0950\\u0958-\\u0961\\u0966-\\u096F\\u0971-\\u0980\\u0985-\\u098C\\u098F\\u0990\\u0993-\\u09A8\\u09AA-\\u09B0\\u09B2\\u09B6-\\u09B9\\u09BD\\u09CE\\u09DC\\u09DD\\u09DF-\\u09E1\\u09E6-\\u09F1\\u09F4-\\u09F9\\u09FC\\u0A05-\\u0A0A\\u0A0F\\u0A10\\u0A13-\\u0A28\\u0A2A-\\u0A30\\u0A32\\u0A33\\u0A35\\u0A36\\u0A38\\u0A39\\u0A59-\\u0A5C\\u0A5E\\u0A66-\\u0A6F\\u0A72-\\u0A74\\u0A85-\\u0A8D\\u0A8F-\\u0A91\\u0A93-\\u0AA8\\u0AAA-\\u0AB0\\u0AB2\\u0AB3\\u0AB5-\\u0AB9\\u0ABD\\u0AD0\\u0AE0\\u0AE1\\u0AE6-\\u0AEF\\u0AF9\\u0B05-\\u0B0C\\u0B0F\\u0B10\\u0B13-\\u0B28\\u0B2A-\\u0B30\\u0B32\\u0B33\\u0B35-\\u0B39\\u0B3D\\u0B5C\\u0B5D\\u0B5F-\\u0B61\\u0B66-\\u0B6F\\u0B71-\\u0B77\\u0B83\\u0B85-\\u0B8A\\u0B8E-\\u0B90\\u0B92-\\u0B95\\u0B99\\u0B9A\\u0B9C\\u0B9E\\u0B9F\\u0BA3\\u0BA4\\u0BA8-\\u0BAA\\u0BAE-\\u0BB9\\u0BD0\\u0BE6-\\u0BF2\\u0C05-\\u0C0C\\u0C0E-\\u0C10\\u0C12-\\u0C28\\u0C2A-\\u0C39\\u0C3D\\u0C58-\\u0C5A\\u0C5D\\u0C60\\u0C61\\u0C66-\\u0C6F\\u0C78-\\u0C7E\\u0C80\\u0C85-\\u0C8C\\u0C8E-\\u0C90\\u0C92-\\u0CA8\\u0CAA-\\u0CB3\\u0CB5-\\u0CB9\\u0CBD\\u0CDD\\u0CDE\\u0CE0\\u0CE1\\u0CE6-\\u0CEF\\u0CF1\\u0CF2\\u0D04-\\u0D0C\\u0D0E-\\u0D10\\u0D12-\\u0D3A\\u0D3D\\u0D4E\\u0D54-\\u0D56\\u0D58-\\u0D61\\u0D66-\\u0D78\\u0D7A-\\u0D7F\\u0D85-\\u0D96\\u0D9A-\\u0DB1\\u0DB3-\\u0DBB\\u0DBD\\u0DC0-\\u0DC6\\u0DE6-\\u0DEF\\u0E01-\\u0E30\\u0E32\\u0E33\\u0E40-\\u0E46\\u0E50-\\u0E59\\u0E81\\u0E82\\u0E84\\u0E86-\\u0E8A\\u0E8C-\\u0EA3\\u0EA5\\u0EA7-\\u0EB0\\u0EB2\\u0EB3\\u0EBD\\u0EC0-\\u0EC4\\u0EC6\\u0ED0-\\u0ED9\\u0EDC-\\u0EDF\\u0F00\\u0F20-\\u0F33\\u0F40-\\u0F47\\u0F49-\\u0F6C\\u0F88-\\u0F8C\\u1000-\\u102A\\u103F-\\u1049\\u1050-\\u1055\\u105A-\\u105D\\u1061\\u1065\\u1066\\u106E-\\u1070\\u1075-\\u1081\\u108E\\u1090-\\u1099\\u10A0-\\u10C5\\u10C7\\u10CD\\u10D0-\\u10FA\\u10FC-\\u1248\\u124A-\\u124D\\u1250-\\u1256\\u1258\\u125A-\\u125D\\u1260-\\u1288\\u128A-\\u128D\\u1290-\\u12B0\\u12B2-\\u12B5\\u12B8-\\u12BE\\u12C0\\u12C2-\\u12C5\\u12C8-\\u12D6\\u12D8-\\u1310\\u1312-\\u1315\\u1318-\\u135A\\u1369-\\u137C\\u1380-\\u138F\\u13A0-\\u13F5\\u13F8-\\u13FD\\u1401-\\u166C\\u166F-\\u167F\\u1681-\\u169A\\u16A0-\\u16EA\\u16EE-\\u16F8\\u1700-\\u1711\\u171F-\\u1731\\u1740-\\u1751\\u1760-\\u176C\\u176E-\\u1770\\u1780-\\u17B3\\u17D7\\u17DC\\u17E0-\\u17E9\\u17F0-\\u17F9\\u1810-\\u1819\\u1820-\\u1878\\u1880-\\u1884\\u1887-\\u18A8\\u18AA\\u18B0-\\u18F5\\u1900-\\u191E\\u1946-\\u196D\\u1970-\\u1974\\u1980-\\u19AB\\u19B0-\\u19C9\\u19D0-\\u19DA\\u1A00-\\u1A16\\u1A20-\\u1A54\\u1A80-\\u1A89\\u1A90-\\u1A99\\u1AA7\\u1B05-\\u1B33\\u1B45-\\u1B4C\\u1B50-\\u1B59\\u1B83-\\u1BA0\\u1BAE-\\u1BE5\\u1C00-\\u1C23\\u1C40-\\u1C49\\u1C4D-\\u1C7D\\u1C80-\\u1C88\\u1C90-\\u1CBA\\u1CBD-\\u1CBF\\u1CE9-\\u1CEC\\u1CEE-\\u1CF3\\u1CF5\\u1CF6\\u1CFA\\u1D00-\\u1DBF\\u1E00-\\u1F15\\u1F18-\\u1F1D\\u1F20-\\u1F45\\u1F48-\\u1F4D\\u1F50-\\u1F57\\u1F59\\u1F5B\\u1F5D\\u1F5F-\\u1F7D\\u1F80-\\u1FB4\\u1FB6-\\u1FBC\\u1FBE\\u1FC2-\\u1FC4\\u1FC6-\\u1FCC\\u1FD0-\\u1FD3\\u1FD6-\\u1FDB\\u1FE0-\\u1FEC\\u1FF2-\\u1FF4\\u1FF6-\\u1FFC\\u2070\\u2071\\u2074-\\u2079\\u207F-\\u2089\\u2090-\\u209C\\u2102\\u2107\\u210A-\\u2113\\u2115\\u2119-\\u211D\\u2124\\u2126\\u2128\\u212A-\\u212D\\u212F-\\u2139\\u213C-\\u213F\\u2145-\\u2149\\u214E\\u2150-\\u2189\\u2460-\\u249B\\u24EA-\\u24FF\\u2776-\\u2793\\u2C00-\\u2CE4\\u2CEB-\\u2CEE\\u2CF2\\u2CF3\\u2CFD\\u2D00-\\u2D25\\u2D27\\u2D2D\\u2D30-\\u2D67\\u2D6F\\u2D80-\\u2D96\\u2DA0-\\u2DA6\\u2DA8-\\u2DAE\\u2DB0-\\u2DB6\\u2DB8-\\u2DBE\\u2DC0-\\u2DC6\\u2DC8-\\u2DCE\\u2DD0-\\u2DD6\\u2DD8-\\u2DDE\\u2E2F\\u3005-\\u3007\\u3021-\\u3029\\u3031-\\u3035\\u3038-\\u303C\\u3041-\\u3096\\u309D-\\u309F\\u30A1-\\u30FA\\u30FC-\\u30FF\\u3105-\\u312F\\u3131-\\u318E\\u3192-\\u3195\\u31A0-\\u31BF\\u31F0-\\u31FF\\u3220-\\u3229\\u3248-\\u324F\\u3251-\\u325F\\u3280-\\u3289\\u32B1-\\u32BF\\u3400-\\u4DBF\\u4E00-\\uA48C\\uA4D0-\\uA4FD\\uA500-\\uA60C\\uA610-\\uA62B\\uA640-\\uA66E\\uA67F-\\uA69D\\uA6A0-\\uA6EF\\uA717-\\uA71F\\uA722-\\uA788\\uA78B-\\uA7CA\\uA7D0\\uA7D1\\uA7D3\\uA7D5-\\uA7D9\\uA7F2-\\uA801\\uA803-\\uA805\\uA807-\\uA80A\\uA80C-\\uA822\\uA830-\\uA835\\uA840-\\uA873\\uA882-\\uA8B3\\uA8D0-\\uA8D9\\uA8F2-\\uA8F7\\uA8FB\\uA8FD\\uA8FE\\uA900-\\uA925\\uA930-\\uA946\\uA960-\\uA97C\\uA984-\\uA9B2\\uA9CF-\\uA9D9\\uA9E0-\\uA9E4\\uA9E6-\\uA9FE\\uAA00-\\uAA28\\uAA40-\\uAA42\\uAA44-\\uAA4B\\uAA50-\\uAA59\\uAA60-\\uAA76\\uAA7A\\uAA7E-\\uAAAF\\uAAB1\\uAAB5\\uAAB6\\uAAB9-\\uAABD\\uAAC0\\uAAC2\\uAADB-\\uAADD\\uAAE0-\\uAAEA\\uAAF2-\\uAAF4\\uAB01-\\uAB06\\uAB09-\\uAB0E\\uAB11-\\uAB16\\uAB20-\\uAB26\\uAB28-\\uAB2E\\uAB30-\\uAB5A\\uAB5C-\\uAB69\\uAB70-\\uABE2\\uABF0-\\uABF9\\uAC00-\\uD7A3\\uD7B0-\\uD7C6\\uD7CB-\\uD7FB\\uF900-\\uFA6D\\uFA70-\\uFAD9\\uFB00-\\uFB06\\uFB13-\\uFB17\\uFB1D\\uFB1F-\\uFB28\\uFB2A-\\uFB36\\uFB38-\\uFB3C\\uFB3E\\uFB40\\uFB41\\uFB43\\uFB44\\uFB46-\\uFBB1\\uFBD3-\\uFD3D\\uFD50-\\uFD8F\\uFD92-\\uFDC7\\uFDF0-\\uFDFB\\uFE70-\\uFE74\\uFE76-\\uFEFC\\uFF10-\\uFF19\\uFF21-\\uFF3A\\uFF41-\\uFF5A\\uFF66-\\uFFBE\\uFFC2-\\uFFC7\\uFFCA-\\uFFCF\\uFFD2-\\uFFD7\\uFFDA-\\uFFDC]|\\uD800[\\uDC00-\\uDC0B\\uDC0D-\\uDC26\\uDC28-\\uDC3A\\uDC3C\\uDC3D\\uDC3F-\\uDC4D\\uDC50-\\uDC5D\\uDC80-\\uDCFA\\uDD07-\\uDD33\\uDD40-\\uDD78\\uDD8A\\uDD8B\\uDE80-\\uDE9C\\uDEA0-\\uDED0\\uDEE1-\\uDEFB\\uDF00-\\uDF23\\uDF2D-\\uDF4A\\uDF50-\\uDF75\\uDF80-\\uDF9D\\uDFA0-\\uDFC3\\uDFC8-\\uDFCF\\uDFD1-\\uDFD5]|\\uD801[\\uDC00-\\uDC9D\\uDCA0-\\uDCA9\\uDCB0-\\uDCD3\\uDCD8-\\uDCFB\\uDD00-\\uDD27\\uDD30-\\uDD63\\uDD70-\\uDD7A\\uDD7C-\\uDD8A\\uDD8C-\\uDD92\\uDD94\\uDD95\\uDD97-\\uDDA1\\uDDA3-\\uDDB1\\uDDB3-\\uDDB9\\uDDBB\\uDDBC\\uDE00-\\uDF36\\uDF40-\\uDF55\\uDF60-\\uDF67\\uDF80-\\uDF85\\uDF87-\\uDFB0\\uDFB2-\\uDFBA]|\\uD802[\\uDC00-\\uDC05\\uDC08\\uDC0A-\\uDC35\\uDC37\\uDC38\\uDC3C\\uDC3F-\\uDC55\\uDC58-\\uDC76\\uDC79-\\uDC9E\\uDCA7-\\uDCAF\\uDCE0-\\uDCF2\\uDCF4\\uDCF5\\uDCFB-\\uDD1B\\uDD20-\\uDD39\\uDD80-\\uDDB7\\uDDBC-\\uDDCF\\uDDD2-\\uDE00\\uDE10-\\uDE13\\uDE15-\\uDE17\\uDE19-\\uDE35\\uDE40-\\uDE48\\uDE60-\\uDE7E\\uDE80-\\uDE9F\\uDEC0-\\uDEC7\\uDEC9-\\uDEE4\\uDEEB-\\uDEEF\\uDF00-\\uDF35\\uDF40-\\uDF55\\uDF58-\\uDF72\\uDF78-\\uDF91\\uDFA9-\\uDFAF]|\\uD803[\\uDC00-\\uDC48\\uDC80-\\uDCB2\\uDCC0-\\uDCF2\\uDCFA-\\uDD23\\uDD30-\\uDD39\\uDE60-\\uDE7E\\uDE80-\\uDEA9\\uDEB0\\uDEB1\\uDF00-\\uDF27\\uDF30-\\uDF45\\uDF51-\\uDF54\\uDF70-\\uDF81\\uDFB0-\\uDFCB\\uDFE0-\\uDFF6]|\\uD804[\\uDC03-\\uDC37\\uDC52-\\uDC6F\\uDC71\\uDC72\\uDC75\\uDC83-\\uDCAF\\uDCD0-\\uDCE8\\uDCF0-\\uDCF9\\uDD03-\\uDD26\\uDD36-\\uDD3F\\uDD44\\uDD47\\uDD50-\\uDD72\\uDD76\\uDD83-\\uDDB2\\uDDC1-\\uDDC4\\uDDD0-\\uDDDA\\uDDDC\\uDDE1-\\uDDF4\\uDE00-\\uDE11\\uDE13-\\uDE2B\\uDE80-\\uDE86\\uDE88\\uDE8A-\\uDE8D\\uDE8F-\\uDE9D\\uDE9F-\\uDEA8\\uDEB0-\\uDEDE\\uDEF0-\\uDEF9\\uDF05-\\uDF0C\\uDF0F\\uDF10\\uDF13-\\uDF28\\uDF2A-\\uDF30\\uDF32\\uDF33\\uDF35-\\uDF39\\uDF3D\\uDF50\\uDF5D-\\uDF61]|\\uD805[\\uDC00-\\uDC34\\uDC47-\\uDC4A\\uDC50-\\uDC59\\uDC5F-\\uDC61\\uDC80-\\uDCAF\\uDCC4\\uDCC5\\uDCC7\\uDCD0-\\uDCD9\\uDD80-\\uDDAE\\uDDD8-\\uDDDB\\uDE00-\\uDE2F\\uDE44\\uDE50-\\uDE59\\uDE80-\\uDEAA\\uDEB8\\uDEC0-\\uDEC9\\uDF00-\\uDF1A\\uDF30-\\uDF3B\\uDF40-\\uDF46]|\\uD806[\\uDC00-\\uDC2B\\uDCA0-\\uDCF2\\uDCFF-\\uDD06\\uDD09\\uDD0C-\\uDD13\\uDD15\\uDD16\\uDD18-\\uDD2F\\uDD3F\\uDD41\\uDD50-\\uDD59\\uDDA0-\\uDDA7\\uDDAA-\\uDDD0\\uDDE1\\uDDE3\\uDE00\\uDE0B-\\uDE32\\uDE3A\\uDE50\\uDE5C-\\uDE89\\uDE9D\\uDEB0-\\uDEF8]|\\uD807[\\uDC00-\\uDC08\\uDC0A-\\uDC2E\\uDC40\\uDC50-\\uDC6C\\uDC72-\\uDC8F\\uDD00-\\uDD06\\uDD08\\uDD09\\uDD0B-\\uDD30\\uDD46\\uDD50-\\uDD59\\uDD60-\\uDD65\\uDD67\\uDD68\\uDD6A-\\uDD89\\uDD98\\uDDA0-\\uDDA9\\uDEE0-\\uDEF2\\uDFB0\\uDFC0-\\uDFD4]|\\uD808[\\uDC00-\\uDF99]|\\uD809[\\uDC00-\\uDC6E\\uDC80-\\uDD43]|\\uD80B[\\uDF90-\\uDFF0]|[\\uD80C\\uD81C-\\uD820\\uD822\\uD840-\\uD868\\uD86A-\\uD86C\\uD86F-\\uD872\\uD874-\\uD879\\uD880-\\uD883][\\uDC00-\\uDFFF]|\\uD80D[\\uDC00-\\uDC2E]|\\uD811[\\uDC00-\\uDE46]|\\uD81A[\\uDC00-\\uDE38\\uDE40-\\uDE5E\\uDE60-\\uDE69\\uDE70-\\uDEBE\\uDEC0-\\uDEC9\\uDED0-\\uDEED\\uDF00-\\uDF2F\\uDF40-\\uDF43\\uDF50-\\uDF59\\uDF5B-\\uDF61\\uDF63-\\uDF77\\uDF7D-\\uDF8F]|\\uD81B[\\uDE40-\\uDE96\\uDF00-\\uDF4A\\uDF50\\uDF93-\\uDF9F\\uDFE0\\uDFE1\\uDFE3]|\\uD821[\\uDC00-\\uDFF7]|\\uD823[\\uDC00-\\uDCD5\\uDD00-\\uDD08]|\\uD82B[\\uDFF0-\\uDFF3\\uDFF5-\\uDFFB\\uDFFD\\uDFFE]|\\uD82C[\\uDC00-\\uDD22\\uDD50-\\uDD52\\uDD64-\\uDD67\\uDD70-\\uDEFB]|\\uD82F[\\uDC00-\\uDC6A\\uDC70-\\uDC7C\\uDC80-\\uDC88\\uDC90-\\uDC99]|\\uD834[\\uDEE0-\\uDEF3\\uDF60-\\uDF78]|\\uD835[\\uDC00-\\uDC54\\uDC56-\\uDC9C\\uDC9E\\uDC9F\\uDCA2\\uDCA5\\uDCA6\\uDCA9-\\uDCAC\\uDCAE-\\uDCB9\\uDCBB\\uDCBD-\\uDCC3\\uDCC5-\\uDD05\\uDD07-\\uDD0A\\uDD0D-\\uDD14\\uDD16-\\uDD1C\\uDD1E-\\uDD39\\uDD3B-\\uDD3E\\uDD40-\\uDD44\\uDD46\\uDD4A-\\uDD50\\uDD52-\\uDEA5\\uDEA8-\\uDEC0\\uDEC2-\\uDEDA\\uDEDC-\\uDEFA\\uDEFC-\\uDF14\\uDF16-\\uDF34\\uDF36-\\uDF4E\\uDF50-\\uDF6E\\uDF70-\\uDF88\\uDF8A-\\uDFA8\\uDFAA-\\uDFC2\\uDFC4-\\uDFCB\\uDFCE-\\uDFFF]|\\uD837[\\uDF00-\\uDF1E]|\\uD838[\\uDD00-\\uDD2C\\uDD37-\\uDD3D\\uDD40-\\uDD49\\uDD4E\\uDE90-\\uDEAD\\uDEC0-\\uDEEB\\uDEF0-\\uDEF9]|\\uD839[\\uDFE0-\\uDFE6\\uDFE8-\\uDFEB\\uDFED\\uDFEE\\uDFF0-\\uDFFE]|\\uD83A[\\uDC00-\\uDCC4\\uDCC7-\\uDCCF\\uDD00-\\uDD43\\uDD4B\\uDD50-\\uDD59]|\\uD83B[\\uDC71-\\uDCAB\\uDCAD-\\uDCAF\\uDCB1-\\uDCB4\\uDD01-\\uDD2D\\uDD2F-\\uDD3D\\uDE00-\\uDE03\\uDE05-\\uDE1F\\uDE21\\uDE22\\uDE24\\uDE27\\uDE29-\\uDE32\\uDE34-\\uDE37\\uDE39\\uDE3B\\uDE42\\uDE47\\uDE49\\uDE4B\\uDE4D-\\uDE4F\\uDE51\\uDE52\\uDE54\\uDE57\\uDE59\\uDE5B\\uDE5D\\uDE5F\\uDE61\\uDE62\\uDE64\\uDE67-\\uDE6A\\uDE6C-\\uDE72\\uDE74-\\uDE77\\uDE79-\\uDE7C\\uDE7E\\uDE80-\\uDE89\\uDE8B-\\uDE9B\\uDEA1-\\uDEA3\\uDEA5-\\uDEA9\\uDEAB-\\uDEBB]|\\uD83C[\\uDD00-\\uDD0C]|\\uD83E[\\uDFF0-\\uDFF9]|\\uD869[\\uDC00-\\uDEDF\\uDF00-\\uDFFF]|\\uD86D[\\uDC00-\\uDF38\\uDF40-\\uDFFF]|\\uD86E[\\uDC00-\\uDC1D\\uDC20-\\uDFFF]|\\uD873[\\uDC00-\\uDEA1\\uDEB0-\\uDFFF]|\\uD87A[\\uDC00-\\uDFE0]|\\uD87E[\\uDC00-\\uDE1D]|\\uD884[\\uDC00-\\uDF4A])/)) return;\n var nextChar = match[1] || match[2] || '';\n\n if (!nextChar || nextChar && (prevChar === '' || this.rules.inline.punctuation.exec(prevChar))) {\n var lLength = match[0].length - 1;\n var rDelim,\n rLength,\n delimTotal = lLength,\n midDelimTotal = 0;\n var endReg = match[0][0] === '*' ? this.rules.inline.emStrong.rDelimAst : this.rules.inline.emStrong.rDelimUnd;\n endReg.lastIndex = 0; // Clip maskedSrc to same section of string as src (move to lexer?)\n\n maskedSrc = maskedSrc.slice(-1 * src.length + lLength);\n\n while ((match = endReg.exec(maskedSrc)) != null) {\n rDelim = match[1] || match[2] || match[3] || match[4] || match[5] || match[6];\n if (!rDelim) continue; // skip single * in __abc*abc__\n\n rLength = rDelim.length;\n\n if (match[3] || match[4]) {\n // found another Left Delim\n delimTotal += rLength;\n continue;\n } else if (match[5] || match[6]) {\n // either Left or Right Delim\n if (lLength % 3 && !((lLength + rLength) % 3)) {\n midDelimTotal += rLength;\n continue; // CommonMark Emphasis Rules 9-10\n }\n }\n\n delimTotal -= rLength;\n if (delimTotal > 0) continue; // Haven't found enough closing delimiters\n // Remove extra characters. *a*** -> *a*\n\n rLength = Math.min(rLength, rLength + delimTotal + midDelimTotal); // Create `em` if smallest delimiter has odd char count. *a***\n\n if (Math.min(lLength, rLength) % 2) {\n var _text = src.slice(1, lLength + match.index + rLength);\n\n return {\n type: 'em',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: _text,\n tokens: this.lexer.inlineTokens(_text)\n };\n } // Create 'strong' if smallest delimiter has even char count. **a***\n\n\n var text = src.slice(2, lLength + match.index + rLength - 1);\n return {\n type: 'strong',\n raw: src.slice(0, lLength + match.index + rLength + 1),\n text: text,\n tokens: this.lexer.inlineTokens(text)\n };\n }\n }\n };\n\n _proto.codespan = function codespan(src) {\n var cap = this.rules.inline.code.exec(src);\n\n if (cap) {\n var text = cap[2].replace(/\\n/g, ' ');\n var hasNonSpaceChars = /[^ ]/.test(text);\n var hasSpaceCharsOnBothEnds = /^ /.test(text) && / $/.test(text);\n\n if (hasNonSpaceChars && hasSpaceCharsOnBothEnds) {\n text = text.substring(1, text.length - 1);\n }\n\n text = escape(text, true);\n return {\n type: 'codespan',\n raw: cap[0],\n text: text\n };\n }\n };\n\n _proto.br = function br(src) {\n var cap = this.rules.inline.br.exec(src);\n\n if (cap) {\n return {\n type: 'br',\n raw: cap[0]\n };\n }\n };\n\n _proto.del = function del(src) {\n var cap = this.rules.inline.del.exec(src);\n\n if (cap) {\n return {\n type: 'del',\n raw: cap[0],\n text: cap[2],\n tokens: this.lexer.inlineTokens(cap[2])\n };\n }\n };\n\n _proto.autolink = function autolink(src, mangle) {\n var cap = this.rules.inline.autolink.exec(src);\n\n if (cap) {\n var text, href;\n\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[1]) : cap[1]);\n href = 'mailto:' + text;\n } else {\n text = escape(cap[1]);\n href = text;\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.url = function url(src, mangle) {\n var cap;\n\n if (cap = this.rules.inline.url.exec(src)) {\n var text, href;\n\n if (cap[2] === '@') {\n text = escape(this.options.mangle ? mangle(cap[0]) : cap[0]);\n href = 'mailto:' + text;\n } else {\n // do extended autolink path validation\n var prevCapZero;\n\n do {\n prevCapZero = cap[0];\n cap[0] = this.rules.inline._backpedal.exec(cap[0])[0];\n } while (prevCapZero !== cap[0]);\n\n text = escape(cap[0]);\n\n if (cap[1] === 'www.') {\n href = 'http://' + text;\n } else {\n href = text;\n }\n }\n\n return {\n type: 'link',\n raw: cap[0],\n text: text,\n href: href,\n tokens: [{\n type: 'text',\n raw: text,\n text: text\n }]\n };\n }\n };\n\n _proto.inlineText = function inlineText(src, smartypants) {\n var cap = this.rules.inline.text.exec(src);\n\n if (cap) {\n var text;\n\n if (this.lexer.state.inRawBlock) {\n text = this.options.sanitize ? this.options.sanitizer ? this.options.sanitizer(cap[0]) : escape(cap[0]) : cap[0];\n } else {\n text = escape(this.options.smartypants ? smartypants(cap[0]) : cap[0]);\n }\n\n return {\n type: 'text',\n raw: cap[0],\n text: text\n };\n }\n };\n\n return Tokenizer;\n }();\n\n /**\n * Block-Level Grammar\n */\n\n var block = {\n newline: /^(?: *(?:\\n|$))+/,\n code: /^( {4}[^\\n]+(?:\\n(?: *(?:\\n|$))*)?)+/,\n fences: /^ {0,3}(`{3,}(?=[^`\\n]*\\n)|~{3,})([^\\n]*)\\n(?:|([\\s\\S]*?)\\n)(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,\n hr: /^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,\n heading: /^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,\n blockquote: /^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/,\n list: /^( {0,3}bull)([ \\t][^\\n]+?)?(?:\\n|$)/,\n html: '^ {0,3}(?:' // optional indentation\n + '<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)' // (1)\n + '|comment[^\\\\n]*(\\\\n+|$)' // (2)\n + '|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)' // (3)\n + '|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)' // (4)\n + '|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)' // (5)\n + '|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (6)\n + '|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) open tag\n + '|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n *)+\\\\n|$)' // (7) closing tag\n + ')',\n def: /^ {0,3}\\[(label)\\]: *(?:\\n *)?<?([^\\s>]+)>?(?:(?: +(?:\\n *)?| *\\n *)(title))? *(?:\\n+|$)/,\n table: noopTest,\n lheading: /^([^\\n]+)\\n {0,3}(=+|-+) *(?:\\n+|$)/,\n // regex template, placeholders will be replaced according to different paragraph\n // interruption rules of commonmark and the original markdown spec:\n _paragraph: /^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,\n text: /^[^\\n]+/\n };\n block._label = /(?!\\s*\\])(?:\\\\.|[^\\[\\]\\\\])+/;\n block._title = /(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/;\n block.def = edit(block.def).replace('label', block._label).replace('title', block._title).getRegex();\n block.bullet = /(?:[*+-]|\\d{1,9}[.)])/;\n block.listItemStart = edit(/^( *)(bull) */).replace('bull', block.bullet).getRegex();\n block.list = edit(block.list).replace(/bull/g, block.bullet).replace('hr', '\\\\n+(?=\\\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$))').replace('def', '\\\\n+(?=' + block.def.source + ')').getRegex();\n block._tag = 'address|article|aside|base|basefont|blockquote|body|caption' + '|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption' + '|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe' + '|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option' + '|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr' + '|track|ul';\n block._comment = /<!--(?!-?>)[\\s\\S]*?(?:-->|$)/;\n block.html = edit(block.html, 'i').replace('comment', block._comment).replace('tag', block._tag).replace('attribute', / +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex();\n block.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('|table', '').replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n block.blockquote = edit(block.blockquote).replace('paragraph', block.paragraph).getRegex();\n /**\n * Normal Block Grammar\n */\n\n block.normal = merge({}, block);\n /**\n * GFM Block Grammar\n */\n\n block.gfm = merge({}, block.normal, {\n table: '^ *([^\\\\n ].*\\\\|.*)\\\\n' // Header\n + ' {0,3}(?:\\\\| *)?(:?-+:? *(?:\\\\| *:?-+:? *)*)(?:\\\\| *)?' // Align\n + '(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)' // Cells\n\n });\n block.gfm.table = edit(block.gfm.table).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('blockquote', ' {0,3}>').replace('code', ' {4}[^\\\\n]').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // tables can be interrupted by type (6) html blocks\n .getRegex();\n block.gfm.paragraph = edit(block._paragraph).replace('hr', block.hr).replace('heading', ' {0,3}#{1,6} ').replace('|lheading', '') // setex headings don't interrupt commonmark paragraphs\n .replace('table', block.gfm.table) // interrupt paragraphs with table\n .replace('blockquote', ' {0,3}>').replace('fences', ' {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n').replace('list', ' {0,3}(?:[*+-]|1[.)]) ') // only lists starting from 1 can interrupt\n .replace('html', '</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)').replace('tag', block._tag) // pars can be interrupted by type (6) html blocks\n .getRegex();\n /**\n * Pedantic grammar (original John Gruber's loose markdown specification)\n */\n\n block.pedantic = merge({}, block.normal, {\n html: edit('^ *(?:comment *(?:\\\\n|\\\\s*$)' + '|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)' // closed tag\n + '|<tag(?:\"[^\"]*\"|\\'[^\\']*\\'|\\\\s[^\\'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))').replace('comment', block._comment).replace(/tag/g, '(?!(?:' + 'a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub' + '|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)' + '\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b').getRegex(),\n def: /^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,\n heading: /^(#{1,6})(.*)(?:\\n+|$)/,\n fences: noopTest,\n // fences not supported\n paragraph: edit(block.normal._paragraph).replace('hr', block.hr).replace('heading', ' *#{1,6} *[^\\n]').replace('lheading', block.lheading).replace('blockquote', ' {0,3}>').replace('|fences', '').replace('|list', '').replace('|html', '').getRegex()\n });\n /**\n * Inline-Level Grammar\n */\n\n var inline = {\n escape: /^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,\n autolink: /^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/,\n url: noopTest,\n tag: '^comment' + '|^</[a-zA-Z][\\\\w:-]*\\\\s*>' // self-closing tag\n + '|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>' // open tag\n + '|^<\\\\?[\\\\s\\\\S]*?\\\\?>' // processing instruction, e.g. <?php ?>\n + '|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>' // declaration, e.g. <!DOCTYPE html>\n + '|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>',\n // CDATA section\n link: /^!?\\[(label)\\]\\(\\s*(href)(?:\\s+(title))?\\s*\\)/,\n reflink: /^!?\\[(label)\\]\\[(ref)\\]/,\n nolink: /^!?\\[(ref)\\](?:\\[\\])?/,\n reflinkSearch: 'reflink|nolink(?!\\\\()',\n emStrong: {\n lDelim: /^(?:\\*+(?:([punct_])|[^\\s*]))|^_+(?:([punct*])|([^\\s_]))/,\n // (1) and (2) can only be a Right Delimiter. (3) and (4) can only be Left. (5) and (6) can be either Left or Right.\n // () Skip orphan inside strong () Consume to delim (1) #*** (2) a***#, a*** (3) #***a, ***a (4) ***# (5) #***# (6) a***a\n rDelimAst: /^[^_*]*?\\_\\_[^_*]*?\\*[^_*]*?(?=\\_\\_)|[^*]+(?=[^*])|[punct_](\\*+)(?=[\\s]|$)|[^punct*_\\s](\\*+)(?=[punct_\\s]|$)|[punct_\\s](\\*+)(?=[^punct*_\\s])|[\\s](\\*+)(?=[punct_])|[punct_](\\*+)(?=[punct_])|[^punct*_\\s](\\*+)(?=[^punct*_\\s])/,\n rDelimUnd: /^[^_*]*?\\*\\*[^_*]*?\\_[^_*]*?(?=\\*\\*)|[^_]+(?=[^_])|[punct*](\\_+)(?=[\\s]|$)|[^punct*_\\s](\\_+)(?=[punct*\\s]|$)|[punct*\\s](\\_+)(?=[^punct*_\\s])|[\\s](\\_+)(?=[punct*])|[punct*](\\_+)(?=[punct*])/ // ^- Not allowed for _\n\n },\n code: /^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,\n br: /^( {2,}|\\\\)\\n(?!\\s*$)/,\n del: noopTest,\n text: /^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,\n punctuation: /^([\\spunctuation])/\n }; // list of punctuation marks from CommonMark spec\n // without * and _ to handle the different emphasis markers * and _\n\n inline._punctuation = '!\"#$%&\\'()+\\\\-.,/:;<=>?@\\\\[\\\\]`^{|}~';\n inline.punctuation = edit(inline.punctuation).replace(/punctuation/g, inline._punctuation).getRegex(); // sequences em should skip over [title](link), `code`, <html>\n\n inline.blockSkip = /\\[[^\\]]*?\\]\\([^\\)]*?\\)|`[^`]*?`|<[^>]*?>/g;\n inline.escapedEmSt = /\\\\\\*|\\\\_/g;\n inline._comment = edit(block._comment).replace('(?:-->|$)', '-->').getRegex();\n inline.emStrong.lDelim = edit(inline.emStrong.lDelim).replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimAst = edit(inline.emStrong.rDelimAst, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline.emStrong.rDelimUnd = edit(inline.emStrong.rDelimUnd, 'g').replace(/punct/g, inline._punctuation).getRegex();\n inline._escapes = /\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/g;\n inline._scheme = /[a-zA-Z][a-zA-Z0-9+.-]{1,31}/;\n inline._email = /[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/;\n inline.autolink = edit(inline.autolink).replace('scheme', inline._scheme).replace('email', inline._email).getRegex();\n inline._attribute = /\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/;\n inline.tag = edit(inline.tag).replace('comment', inline._comment).replace('attribute', inline._attribute).getRegex();\n inline._label = /(?:\\[(?:\\\\.|[^\\[\\]\\\\])*\\]|\\\\.|`[^`]*`|[^\\[\\]\\\\`])*?/;\n inline._href = /<(?:\\\\.|[^\\n<>\\\\])+>|[^\\s\\x00-\\x1f]*/;\n inline._title = /\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/;\n inline.link = edit(inline.link).replace('label', inline._label).replace('href', inline._href).replace('title', inline._title).getRegex();\n inline.reflink = edit(inline.reflink).replace('label', inline._label).replace('ref', block._label).getRegex();\n inline.nolink = edit(inline.nolink).replace('ref', block._label).getRegex();\n inline.reflinkSearch = edit(inline.reflinkSearch, 'g').replace('reflink', inline.reflink).replace('nolink', inline.nolink).getRegex();\n /**\n * Normal Inline Grammar\n */\n\n inline.normal = merge({}, inline);\n /**\n * Pedantic Inline Grammar\n */\n\n inline.pedantic = merge({}, inline.normal, {\n strong: {\n start: /^__|\\*\\*/,\n middle: /^__(?=\\S)([\\s\\S]*?\\S)__(?!_)|^\\*\\*(?=\\S)([\\s\\S]*?\\S)\\*\\*(?!\\*)/,\n endAst: /\\*\\*(?!\\*)/g,\n endUnd: /__(?!_)/g\n },\n em: {\n start: /^_|\\*/,\n middle: /^()\\*(?=\\S)([\\s\\S]*?\\S)\\*(?!\\*)|^_(?=\\S)([\\s\\S]*?\\S)_(?!_)/,\n endAst: /\\*(?!\\*)/g,\n endUnd: /_(?!_)/g\n },\n link: edit(/^!?\\[(label)\\]\\((.*?)\\)/).replace('label', inline._label).getRegex(),\n reflink: edit(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace('label', inline._label).getRegex()\n });\n /**\n * GFM Inline Grammar\n */\n\n inline.gfm = merge({}, inline.normal, {\n escape: edit(inline.escape).replace('])', '~|])').getRegex(),\n _extended_email: /[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,\n url: /^((?:ftp|https?):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/,\n _backpedal: /(?:[^?!.,:;*_~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,\n del: /^(~~?)(?=[^\\s~])([\\s\\S]*?[^\\s~])\\1(?=[^~]|$)/,\n text: /^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|https?:\\/\\/|ftp:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/\n });\n inline.gfm.url = edit(inline.gfm.url, 'i').replace('email', inline.gfm._extended_email).getRegex();\n /**\n * GFM + Line Breaks Inline Grammar\n */\n\n inline.breaks = merge({}, inline.gfm, {\n br: edit(inline.br).replace('{2,}', '*').getRegex(),\n text: edit(inline.gfm.text).replace('\\\\b_', '\\\\b_| {2,}\\\\n').replace(/\\{2,\\}/g, '*').getRegex()\n });\n\n /**\n * smartypants text replacement\n * @param {string} text\n */\n\n function smartypants(text) {\n return text // em-dashes\n .replace(/---/g, \"\\u2014\") // en-dashes\n .replace(/--/g, \"\\u2013\") // opening singles\n .replace(/(^|[-\\u2014/(\\[{\"\\s])'/g, \"$1\\u2018\") // closing singles & apostrophes\n .replace(/'/g, \"\\u2019\") // opening doubles\n .replace(/(^|[-\\u2014/(\\[{\\u2018\\s])\"/g, \"$1\\u201C\") // closing doubles\n .replace(/\"/g, \"\\u201D\") // ellipses\n .replace(/\\.{3}/g, \"\\u2026\");\n }\n /**\n * mangle email addresses\n * @param {string} text\n */\n\n\n function mangle(text) {\n var out = '',\n i,\n ch;\n var l = text.length;\n\n for (i = 0; i < l; i++) {\n ch = text.charCodeAt(i);\n\n if (Math.random() > 0.5) {\n ch = 'x' + ch.toString(16);\n }\n\n out += '&#' + ch + ';';\n }\n\n return out;\n }\n /**\n * Block Lexer\n */\n\n\n var Lexer = /*#__PURE__*/function () {\n function Lexer(options) {\n this.tokens = [];\n this.tokens.links = Object.create(null);\n this.options = options || exports.defaults;\n this.options.tokenizer = this.options.tokenizer || new Tokenizer();\n this.tokenizer = this.options.tokenizer;\n this.tokenizer.options = this.options;\n this.tokenizer.lexer = this;\n this.inlineQueue = [];\n this.state = {\n inLink: false,\n inRawBlock: false,\n top: true\n };\n var rules = {\n block: block.normal,\n inline: inline.normal\n };\n\n if (this.options.pedantic) {\n rules.block = block.pedantic;\n rules.inline = inline.pedantic;\n } else if (this.options.gfm) {\n rules.block = block.gfm;\n\n if (this.options.breaks) {\n rules.inline = inline.breaks;\n } else {\n rules.inline = inline.gfm;\n }\n }\n\n this.tokenizer.rules = rules;\n }\n /**\n * Expose Rules\n */\n\n\n /**\n * Static Lex Method\n */\n Lexer.lex = function lex(src, options) {\n var lexer = new Lexer(options);\n return lexer.lex(src);\n }\n /**\n * Static Lex Inline Method\n */\n ;\n\n Lexer.lexInline = function lexInline(src, options) {\n var lexer = new Lexer(options);\n return lexer.inlineTokens(src);\n }\n /**\n * Preprocessing\n */\n ;\n\n var _proto = Lexer.prototype;\n\n _proto.lex = function lex(src) {\n src = src.replace(/\\r\\n|\\r/g, '\\n');\n this.blockTokens(src, this.tokens);\n var next;\n\n while (next = this.inlineQueue.shift()) {\n this.inlineTokens(next.src, next.tokens);\n }\n\n return this.tokens;\n }\n /**\n * Lexing\n */\n ;\n\n _proto.blockTokens = function blockTokens(src, tokens) {\n var _this = this;\n\n if (tokens === void 0) {\n tokens = [];\n }\n\n if (this.options.pedantic) {\n src = src.replace(/\\t/g, ' ').replace(/^ +$/gm, '');\n } else {\n src = src.replace(/^( *)(\\t+)/gm, function (_, leading, tabs) {\n return leading + ' '.repeat(tabs.length);\n });\n }\n\n var token, lastToken, cutSrc, lastParagraphClipped;\n\n while (src) {\n if (this.options.extensions && this.options.extensions.block && this.options.extensions.block.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n\n return false;\n })) {\n continue;\n } // newline\n\n\n if (token = this.tokenizer.space(src)) {\n src = src.substring(token.raw.length);\n\n if (token.raw.length === 1 && tokens.length > 0) {\n // if there's a single \\n as a spacer, it's terminating the last line,\n // so move it there so that we don't get unecessary paragraph tags\n tokens[tokens.length - 1].raw += '\\n';\n } else {\n tokens.push(token);\n }\n\n continue;\n } // code\n\n\n if (token = this.tokenizer.code(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1]; // An indented code block cannot interrupt a paragraph.\n\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // fences\n\n\n if (token = this.tokenizer.fences(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // heading\n\n\n if (token = this.tokenizer.heading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // hr\n\n\n if (token = this.tokenizer.hr(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // blockquote\n\n\n if (token = this.tokenizer.blockquote(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // list\n\n\n if (token = this.tokenizer.list(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // html\n\n\n if (token = this.tokenizer.html(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // def\n\n\n if (token = this.tokenizer.def(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && (lastToken.type === 'paragraph' || lastToken.type === 'text')) {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.raw;\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else if (!this.tokens.links[token.tag]) {\n this.tokens.links[token.tag] = {\n href: token.href,\n title: token.title\n };\n }\n\n continue;\n } // table (gfm)\n\n\n if (token = this.tokenizer.table(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // lheading\n\n\n if (token = this.tokenizer.lheading(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // top-level paragraph\n // prevent paragraph consuming extensions by clipping 'src' to extension start\n\n\n cutSrc = src;\n\n if (this.options.extensions && this.options.extensions.startBlock) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n\n _this.options.extensions.startBlock.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n\n if (this.state.top && (token = this.tokenizer.paragraph(cutSrc))) {\n lastToken = tokens[tokens.length - 1];\n\n if (lastParagraphClipped && lastToken.type === 'paragraph') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n\n lastParagraphClipped = cutSrc.length !== src.length;\n src = src.substring(token.raw.length);\n continue;\n } // text\n\n\n if (token = this.tokenizer.text(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += '\\n' + token.raw;\n lastToken.text += '\\n' + token.text;\n this.inlineQueue.pop();\n this.inlineQueue[this.inlineQueue.length - 1].src = lastToken.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n this.state.top = true;\n return tokens;\n };\n\n _proto.inline = function inline(src, tokens) {\n if (tokens === void 0) {\n tokens = [];\n }\n\n this.inlineQueue.push({\n src: src,\n tokens: tokens\n });\n return tokens;\n }\n /**\n * Lexing/Compiling\n */\n ;\n\n _proto.inlineTokens = function inlineTokens(src, tokens) {\n var _this2 = this;\n\n if (tokens === void 0) {\n tokens = [];\n }\n\n var token, lastToken, cutSrc; // String with links masked to avoid interference with em and strong\n\n var maskedSrc = src;\n var match;\n var keepPrevChar, prevChar; // Mask out reflinks\n\n if (this.tokens.links) {\n var links = Object.keys(this.tokens.links);\n\n if (links.length > 0) {\n while ((match = this.tokenizer.rules.inline.reflinkSearch.exec(maskedSrc)) != null) {\n if (links.includes(match[0].slice(match[0].lastIndexOf('[') + 1, -1))) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex);\n }\n }\n }\n } // Mask out other blocks\n\n\n while ((match = this.tokenizer.rules.inline.blockSkip.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '[' + repeatString('a', match[0].length - 2) + ']' + maskedSrc.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);\n } // Mask out escaped em & strong delimiters\n\n\n while ((match = this.tokenizer.rules.inline.escapedEmSt.exec(maskedSrc)) != null) {\n maskedSrc = maskedSrc.slice(0, match.index) + '++' + maskedSrc.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);\n }\n\n while (src) {\n if (!keepPrevChar) {\n prevChar = '';\n }\n\n keepPrevChar = false; // extensions\n\n if (this.options.extensions && this.options.extensions.inline && this.options.extensions.inline.some(function (extTokenizer) {\n if (token = extTokenizer.call({\n lexer: _this2\n }, src, tokens)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n return true;\n }\n\n return false;\n })) {\n continue;\n } // escape\n\n\n if (token = this.tokenizer.escape(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // tag\n\n\n if (token = this.tokenizer.tag(src)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // link\n\n\n if (token = this.tokenizer.link(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // reflink, nolink\n\n\n if (token = this.tokenizer.reflink(src, this.tokens.links)) {\n src = src.substring(token.raw.length);\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && token.type === 'text' && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n } // em & strong\n\n\n if (token = this.tokenizer.emStrong(src, maskedSrc, prevChar)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // code\n\n\n if (token = this.tokenizer.codespan(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // br\n\n\n if (token = this.tokenizer.br(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // del (gfm)\n\n\n if (token = this.tokenizer.del(src)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // autolink\n\n\n if (token = this.tokenizer.autolink(src, mangle)) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // url (gfm)\n\n\n if (!this.state.inLink && (token = this.tokenizer.url(src, mangle))) {\n src = src.substring(token.raw.length);\n tokens.push(token);\n continue;\n } // text\n // prevent inlineText consuming extensions by clipping 'src' to extension start\n\n\n cutSrc = src;\n\n if (this.options.extensions && this.options.extensions.startInline) {\n (function () {\n var startIndex = Infinity;\n var tempSrc = src.slice(1);\n var tempStart = void 0;\n\n _this2.options.extensions.startInline.forEach(function (getStartIndex) {\n tempStart = getStartIndex.call({\n lexer: this\n }, tempSrc);\n\n if (typeof tempStart === 'number' && tempStart >= 0) {\n startIndex = Math.min(startIndex, tempStart);\n }\n });\n\n if (startIndex < Infinity && startIndex >= 0) {\n cutSrc = src.substring(0, startIndex + 1);\n }\n })();\n }\n\n if (token = this.tokenizer.inlineText(cutSrc, smartypants)) {\n src = src.substring(token.raw.length);\n\n if (token.raw.slice(-1) !== '_') {\n // Track prevChar before string of ____ started\n prevChar = token.raw.slice(-1);\n }\n\n keepPrevChar = true;\n lastToken = tokens[tokens.length - 1];\n\n if (lastToken && lastToken.type === 'text') {\n lastToken.raw += token.raw;\n lastToken.text += token.text;\n } else {\n tokens.push(token);\n }\n\n continue;\n }\n\n if (src) {\n var errMsg = 'Infinite loop on byte: ' + src.charCodeAt(0);\n\n if (this.options.silent) {\n console.error(errMsg);\n break;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n\n return tokens;\n };\n\n _createClass(Lexer, null, [{\n key: \"rules\",\n get: function get() {\n return {\n block: block,\n inline: inline\n };\n }\n }]);\n\n return Lexer;\n }();\n\n /**\n * Renderer\n */\n\n var Renderer = /*#__PURE__*/function () {\n function Renderer(options) {\n this.options = options || exports.defaults;\n }\n\n var _proto = Renderer.prototype;\n\n _proto.code = function code(_code, infostring, escaped) {\n var lang = (infostring || '').match(/\\S*/)[0];\n\n if (this.options.highlight) {\n var out = this.options.highlight(_code, lang);\n\n if (out != null && out !== _code) {\n escaped = true;\n _code = out;\n }\n }\n\n _code = _code.replace(/\\n$/, '') + '\\n';\n\n if (!lang) {\n return '<pre><code>' + (escaped ? _code : escape(_code, true)) + '</code></pre>\\n';\n }\n\n return '<pre><code class=\"' + this.options.langPrefix + escape(lang, true) + '\">' + (escaped ? _code : escape(_code, true)) + '</code></pre>\\n';\n }\n /**\n * @param {string} quote\n */\n ;\n\n _proto.blockquote = function blockquote(quote) {\n return \"<blockquote>\\n\" + quote + \"</blockquote>\\n\";\n };\n\n _proto.html = function html(_html) {\n return _html;\n }\n /**\n * @param {string} text\n * @param {string} level\n * @param {string} raw\n * @param {any} slugger\n */\n ;\n\n _proto.heading = function heading(text, level, raw, slugger) {\n if (this.options.headerIds) {\n var id = this.options.headerPrefix + slugger.slug(raw);\n return \"<h\" + level + \" id=\\\"\" + id + \"\\\">\" + text + \"</h\" + level + \">\\n\";\n } // ignore IDs\n\n\n return \"<h\" + level + \">\" + text + \"</h\" + level + \">\\n\";\n };\n\n _proto.hr = function hr() {\n return this.options.xhtml ? '<hr/>\\n' : '<hr>\\n';\n };\n\n _proto.list = function list(body, ordered, start) {\n var type = ordered ? 'ol' : 'ul',\n startatt = ordered && start !== 1 ? ' start=\"' + start + '\"' : '';\n return '<' + type + startatt + '>\\n' + body + '</' + type + '>\\n';\n }\n /**\n * @param {string} text\n */\n ;\n\n _proto.listitem = function listitem(text) {\n return \"<li>\" + text + \"</li>\\n\";\n };\n\n _proto.checkbox = function checkbox(checked) {\n return '<input ' + (checked ? 'checked=\"\" ' : '') + 'disabled=\"\" type=\"checkbox\"' + (this.options.xhtml ? ' /' : '') + '> ';\n }\n /**\n * @param {string} text\n */\n ;\n\n _proto.paragraph = function paragraph(text) {\n return \"<p>\" + text + \"</p>\\n\";\n }\n /**\n * @param {string} header\n * @param {string} body\n */\n ;\n\n _proto.table = function table(header, body) {\n if (body) body = \"<tbody>\" + body + \"</tbody>\";\n return '<table>\\n' + '<thead>\\n' + header + '</thead>\\n' + body + '</table>\\n';\n }\n /**\n * @param {string} content\n */\n ;\n\n _proto.tablerow = function tablerow(content) {\n return \"<tr>\\n\" + content + \"</tr>\\n\";\n };\n\n _proto.tablecell = function tablecell(content, flags) {\n var type = flags.header ? 'th' : 'td';\n var tag = flags.align ? \"<\" + type + \" align=\\\"\" + flags.align + \"\\\">\" : \"<\" + type + \">\";\n return tag + content + (\"</\" + type + \">\\n\");\n }\n /**\n * span level renderer\n * @param {string} text\n */\n ;\n\n _proto.strong = function strong(text) {\n return \"<strong>\" + text + \"</strong>\";\n }\n /**\n * @param {string} text\n */\n ;\n\n _proto.em = function em(text) {\n return \"<em>\" + text + \"</em>\";\n }\n /**\n * @param {string} text\n */\n ;\n\n _proto.codespan = function codespan(text) {\n return \"<code>\" + text + \"</code>\";\n };\n\n _proto.br = function br() {\n return this.options.xhtml ? '<br/>' : '<br>';\n }\n /**\n * @param {string} text\n */\n ;\n\n _proto.del = function del(text) {\n return \"<del>\" + text + \"</del>\";\n }\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n ;\n\n _proto.link = function link(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = '<a href=\"' + escape(href) + '\"';\n\n if (title) {\n out += ' title=\"' + title + '\"';\n }\n\n out += '>' + text + '</a>';\n return out;\n }\n /**\n * @param {string} href\n * @param {string} title\n * @param {string} text\n */\n ;\n\n _proto.image = function image(href, title, text) {\n href = cleanUrl(this.options.sanitize, this.options.baseUrl, href);\n\n if (href === null) {\n return text;\n }\n\n var out = \"<img src=\\\"\" + href + \"\\\" alt=\\\"\" + text + \"\\\"\";\n\n if (title) {\n out += \" title=\\\"\" + title + \"\\\"\";\n }\n\n out += this.options.xhtml ? '/>' : '>';\n return out;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n return Renderer;\n }();\n\n /**\n * TextRenderer\n * returns only the textual part of the token\n */\n var TextRenderer = /*#__PURE__*/function () {\n function TextRenderer() {}\n\n var _proto = TextRenderer.prototype;\n\n // no need for block level renderers\n _proto.strong = function strong(text) {\n return text;\n };\n\n _proto.em = function em(text) {\n return text;\n };\n\n _proto.codespan = function codespan(text) {\n return text;\n };\n\n _proto.del = function del(text) {\n return text;\n };\n\n _proto.html = function html(text) {\n return text;\n };\n\n _proto.text = function text(_text) {\n return _text;\n };\n\n _proto.link = function link(href, title, text) {\n return '' + text;\n };\n\n _proto.image = function image(href, title, text) {\n return '' + text;\n };\n\n _proto.br = function br() {\n return '';\n };\n\n return TextRenderer;\n }();\n\n /**\n * Slugger generates header id\n */\n var Slugger = /*#__PURE__*/function () {\n function Slugger() {\n this.seen = {};\n }\n /**\n * @param {string} value\n */\n\n\n var _proto = Slugger.prototype;\n\n _proto.serialize = function serialize(value) {\n return value.toLowerCase().trim() // remove html tags\n .replace(/<[!\\/a-z].*?>/ig, '') // remove unwanted chars\n .replace(/[\\u2000-\\u206F\\u2E00-\\u2E7F\\\\'!\"#$%&()*+,./:;<=>?@[\\]^`{|}~]/g, '').replace(/\\s/g, '-');\n }\n /**\n * Finds the next safe (unique) slug to use\n * @param {string} originalSlug\n * @param {boolean} isDryRun\n */\n ;\n\n _proto.getNextSafeSlug = function getNextSafeSlug(originalSlug, isDryRun) {\n var slug = originalSlug;\n var occurenceAccumulator = 0;\n\n if (this.seen.hasOwnProperty(slug)) {\n occurenceAccumulator = this.seen[originalSlug];\n\n do {\n occurenceAccumulator++;\n slug = originalSlug + '-' + occurenceAccumulator;\n } while (this.seen.hasOwnProperty(slug));\n }\n\n if (!isDryRun) {\n this.seen[originalSlug] = occurenceAccumulator;\n this.seen[slug] = 0;\n }\n\n return slug;\n }\n /**\n * Convert string to unique id\n * @param {object} [options]\n * @param {boolean} [options.dryrun] Generates the next unique slug without\n * updating the internal accumulator.\n */\n ;\n\n _proto.slug = function slug(value, options) {\n if (options === void 0) {\n options = {};\n }\n\n var slug = this.serialize(value);\n return this.getNextSafeSlug(slug, options.dryrun);\n };\n\n return Slugger;\n }();\n\n /**\n * Parsing & Compiling\n */\n\n var Parser = /*#__PURE__*/function () {\n function Parser(options) {\n this.options = options || exports.defaults;\n this.options.renderer = this.options.renderer || new Renderer();\n this.renderer = this.options.renderer;\n this.renderer.options = this.options;\n this.textRenderer = new TextRenderer();\n this.slugger = new Slugger();\n }\n /**\n * Static Parse Method\n */\n\n\n Parser.parse = function parse(tokens, options) {\n var parser = new Parser(options);\n return parser.parse(tokens);\n }\n /**\n * Static Parse Inline Method\n */\n ;\n\n Parser.parseInline = function parseInline(tokens, options) {\n var parser = new Parser(options);\n return parser.parseInline(tokens);\n }\n /**\n * Parse Loop\n */\n ;\n\n var _proto = Parser.prototype;\n\n _proto.parse = function parse(tokens, top) {\n if (top === void 0) {\n top = true;\n }\n\n var out = '',\n i,\n j,\n k,\n l2,\n l3,\n row,\n cell,\n header,\n body,\n token,\n ordered,\n start,\n loose,\n itemBody,\n item,\n checked,\n task,\n checkbox,\n ret;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i]; // Run any renderer extensions\n\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n\n if (ret !== false || !['space', 'hr', 'heading', 'code', 'table', 'blockquote', 'list', 'html', 'paragraph', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'space':\n {\n continue;\n }\n\n case 'hr':\n {\n out += this.renderer.hr();\n continue;\n }\n\n case 'heading':\n {\n out += this.renderer.heading(this.parseInline(token.tokens), token.depth, unescape(this.parseInline(token.tokens, this.textRenderer)), this.slugger);\n continue;\n }\n\n case 'code':\n {\n out += this.renderer.code(token.text, token.lang, token.escaped);\n continue;\n }\n\n case 'table':\n {\n header = ''; // header\n\n cell = '';\n l2 = token.header.length;\n\n for (j = 0; j < l2; j++) {\n cell += this.renderer.tablecell(this.parseInline(token.header[j].tokens), {\n header: true,\n align: token.align[j]\n });\n }\n\n header += this.renderer.tablerow(cell);\n body = '';\n l2 = token.rows.length;\n\n for (j = 0; j < l2; j++) {\n row = token.rows[j];\n cell = '';\n l3 = row.length;\n\n for (k = 0; k < l3; k++) {\n cell += this.renderer.tablecell(this.parseInline(row[k].tokens), {\n header: false,\n align: token.align[k]\n });\n }\n\n body += this.renderer.tablerow(cell);\n }\n\n out += this.renderer.table(header, body);\n continue;\n }\n\n case 'blockquote':\n {\n body = this.parse(token.tokens);\n out += this.renderer.blockquote(body);\n continue;\n }\n\n case 'list':\n {\n ordered = token.ordered;\n start = token.start;\n loose = token.loose;\n l2 = token.items.length;\n body = '';\n\n for (j = 0; j < l2; j++) {\n item = token.items[j];\n checked = item.checked;\n task = item.task;\n itemBody = '';\n\n if (item.task) {\n checkbox = this.renderer.checkbox(checked);\n\n if (loose) {\n if (item.tokens.length > 0 && item.tokens[0].type === 'paragraph') {\n item.tokens[0].text = checkbox + ' ' + item.tokens[0].text;\n\n if (item.tokens[0].tokens && item.tokens[0].tokens.length > 0 && item.tokens[0].tokens[0].type === 'text') {\n item.tokens[0].tokens[0].text = checkbox + ' ' + item.tokens[0].tokens[0].text;\n }\n } else {\n item.tokens.unshift({\n type: 'text',\n text: checkbox\n });\n }\n } else {\n itemBody += checkbox;\n }\n }\n\n itemBody += this.parse(item.tokens, loose);\n body += this.renderer.listitem(itemBody, task, checked);\n }\n\n out += this.renderer.list(body, ordered, start);\n continue;\n }\n\n case 'html':\n {\n // TODO parse inline content if parameter markdown=1\n out += this.renderer.html(token.text);\n continue;\n }\n\n case 'paragraph':\n {\n out += this.renderer.paragraph(this.parseInline(token.tokens));\n continue;\n }\n\n case 'text':\n {\n body = token.tokens ? this.parseInline(token.tokens) : token.text;\n\n while (i + 1 < l && tokens[i + 1].type === 'text') {\n token = tokens[++i];\n body += '\\n' + (token.tokens ? this.parseInline(token.tokens) : token.text);\n }\n\n out += top ? this.renderer.paragraph(body) : body;\n continue;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n }\n /**\n * Parse Inline Tokens\n */\n ;\n\n _proto.parseInline = function parseInline(tokens, renderer) {\n renderer = renderer || this.renderer;\n var out = '',\n i,\n token,\n ret;\n var l = tokens.length;\n\n for (i = 0; i < l; i++) {\n token = tokens[i]; // Run any renderer extensions\n\n if (this.options.extensions && this.options.extensions.renderers && this.options.extensions.renderers[token.type]) {\n ret = this.options.extensions.renderers[token.type].call({\n parser: this\n }, token);\n\n if (ret !== false || !['escape', 'html', 'link', 'image', 'strong', 'em', 'codespan', 'br', 'del', 'text'].includes(token.type)) {\n out += ret || '';\n continue;\n }\n }\n\n switch (token.type) {\n case 'escape':\n {\n out += renderer.text(token.text);\n break;\n }\n\n case 'html':\n {\n out += renderer.html(token.text);\n break;\n }\n\n case 'link':\n {\n out += renderer.link(token.href, token.title, this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'image':\n {\n out += renderer.image(token.href, token.title, token.text);\n break;\n }\n\n case 'strong':\n {\n out += renderer.strong(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'em':\n {\n out += renderer.em(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'codespan':\n {\n out += renderer.codespan(token.text);\n break;\n }\n\n case 'br':\n {\n out += renderer.br();\n break;\n }\n\n case 'del':\n {\n out += renderer.del(this.parseInline(token.tokens, renderer));\n break;\n }\n\n case 'text':\n {\n out += renderer.text(token.text);\n break;\n }\n\n default:\n {\n var errMsg = 'Token with \"' + token.type + '\" type was not found.';\n\n if (this.options.silent) {\n console.error(errMsg);\n return;\n } else {\n throw new Error(errMsg);\n }\n }\n }\n }\n\n return out;\n };\n\n return Parser;\n }();\n\n /**\n * Marked\n */\n\n function marked(src, opt, callback) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n if (typeof opt === 'function') {\n callback = opt;\n opt = null;\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n if (callback) {\n var highlight = opt.highlight;\n var tokens;\n\n try {\n tokens = Lexer.lex(src, opt);\n } catch (e) {\n return callback(e);\n }\n\n var done = function done(err) {\n var out;\n\n if (!err) {\n try {\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n\n out = Parser.parse(tokens, opt);\n } catch (e) {\n err = e;\n }\n }\n\n opt.highlight = highlight;\n return err ? callback(err) : callback(null, out);\n };\n\n if (!highlight || highlight.length < 3) {\n return done();\n }\n\n delete opt.highlight;\n if (!tokens.length) return done();\n var pending = 0;\n marked.walkTokens(tokens, function (token) {\n if (token.type === 'code') {\n pending++;\n setTimeout(function () {\n highlight(token.text, token.lang, function (err, code) {\n if (err) {\n return done(err);\n }\n\n if (code != null && code !== token.text) {\n token.text = code;\n token.escaped = true;\n }\n\n pending--;\n\n if (pending === 0) {\n done();\n }\n });\n }, 0);\n }\n });\n\n if (pending === 0) {\n done();\n }\n\n return;\n }\n\n function onError(e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n\n try {\n var _tokens = Lexer.lex(src, opt);\n\n if (opt.walkTokens) {\n if (opt.async) {\n return Promise.all(marked.walkTokens(_tokens, opt.walkTokens)).then(function () {\n return Parser.parse(_tokens, opt);\n })[\"catch\"](onError);\n }\n\n marked.walkTokens(_tokens, opt.walkTokens);\n }\n\n return Parser.parse(_tokens, opt);\n } catch (e) {\n onError(e);\n }\n }\n /**\n * Options\n */\n\n marked.options = marked.setOptions = function (opt) {\n merge(marked.defaults, opt);\n changeDefaults(marked.defaults);\n return marked;\n };\n\n marked.getDefaults = getDefaults;\n marked.defaults = exports.defaults;\n /**\n * Use Extension\n */\n\n marked.use = function () {\n for (var _len = arguments.length, args = new Array(_len), _key = 0; _key < _len; _key++) {\n args[_key] = arguments[_key];\n }\n\n var opts = merge.apply(void 0, [{}].concat(args));\n var extensions = marked.defaults.extensions || {\n renderers: {},\n childTokens: {}\n };\n var hasExtensions;\n args.forEach(function (pack) {\n // ==-- Parse \"addon\" extensions --== //\n if (pack.extensions) {\n hasExtensions = true;\n pack.extensions.forEach(function (ext) {\n if (!ext.name) {\n throw new Error('extension name required');\n }\n\n if (ext.renderer) {\n // Renderer extensions\n var prevRenderer = extensions.renderers ? extensions.renderers[ext.name] : null;\n\n if (prevRenderer) {\n // Replace extension with func to run new extension but fall back if false\n extensions.renderers[ext.name] = function () {\n for (var _len2 = arguments.length, args = new Array(_len2), _key2 = 0; _key2 < _len2; _key2++) {\n args[_key2] = arguments[_key2];\n }\n\n var ret = ext.renderer.apply(this, args);\n\n if (ret === false) {\n ret = prevRenderer.apply(this, args);\n }\n\n return ret;\n };\n } else {\n extensions.renderers[ext.name] = ext.renderer;\n }\n }\n\n if (ext.tokenizer) {\n // Tokenizer Extensions\n if (!ext.level || ext.level !== 'block' && ext.level !== 'inline') {\n throw new Error(\"extension level must be 'block' or 'inline'\");\n }\n\n if (extensions[ext.level]) {\n extensions[ext.level].unshift(ext.tokenizer);\n } else {\n extensions[ext.level] = [ext.tokenizer];\n }\n\n if (ext.start) {\n // Function to check for start of token\n if (ext.level === 'block') {\n if (extensions.startBlock) {\n extensions.startBlock.push(ext.start);\n } else {\n extensions.startBlock = [ext.start];\n }\n } else if (ext.level === 'inline') {\n if (extensions.startInline) {\n extensions.startInline.push(ext.start);\n } else {\n extensions.startInline = [ext.start];\n }\n }\n }\n }\n\n if (ext.childTokens) {\n // Child tokens to be visited by walkTokens\n extensions.childTokens[ext.name] = ext.childTokens;\n }\n });\n } // ==-- Parse \"overwrite\" extensions --== //\n\n\n if (pack.renderer) {\n (function () {\n var renderer = marked.defaults.renderer || new Renderer();\n\n var _loop = function _loop(prop) {\n var prevRenderer = renderer[prop]; // Replace renderer with func to run extension, but fall back if false\n\n renderer[prop] = function () {\n for (var _len3 = arguments.length, args = new Array(_len3), _key3 = 0; _key3 < _len3; _key3++) {\n args[_key3] = arguments[_key3];\n }\n\n var ret = pack.renderer[prop].apply(renderer, args);\n\n if (ret === false) {\n ret = prevRenderer.apply(renderer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in pack.renderer) {\n _loop(prop);\n }\n\n opts.renderer = renderer;\n })();\n }\n\n if (pack.tokenizer) {\n (function () {\n var tokenizer = marked.defaults.tokenizer || new Tokenizer();\n\n var _loop2 = function _loop2(prop) {\n var prevTokenizer = tokenizer[prop]; // Replace tokenizer with func to run extension, but fall back if false\n\n tokenizer[prop] = function () {\n for (var _len4 = arguments.length, args = new Array(_len4), _key4 = 0; _key4 < _len4; _key4++) {\n args[_key4] = arguments[_key4];\n }\n\n var ret = pack.tokenizer[prop].apply(tokenizer, args);\n\n if (ret === false) {\n ret = prevTokenizer.apply(tokenizer, args);\n }\n\n return ret;\n };\n };\n\n for (var prop in pack.tokenizer) {\n _loop2(prop);\n }\n\n opts.tokenizer = tokenizer;\n })();\n } // ==-- Parse WalkTokens extensions --== //\n\n\n if (pack.walkTokens) {\n var _walkTokens = marked.defaults.walkTokens;\n\n opts.walkTokens = function (token) {\n var values = [];\n values.push(pack.walkTokens.call(this, token));\n\n if (_walkTokens) {\n values = values.concat(_walkTokens.call(this, token));\n }\n\n return values;\n };\n }\n\n if (hasExtensions) {\n opts.extensions = extensions;\n }\n\n marked.setOptions(opts);\n });\n };\n /**\n * Run callback for every token\n */\n\n\n marked.walkTokens = function (tokens, callback) {\n var values = [];\n\n var _loop3 = function _loop3() {\n var token = _step.value;\n values = values.concat(callback.call(marked, token));\n\n switch (token.type) {\n case 'table':\n {\n for (var _iterator2 = _createForOfIteratorHelperLoose(token.header), _step2; !(_step2 = _iterator2()).done;) {\n var cell = _step2.value;\n values = values.concat(marked.walkTokens(cell.tokens, callback));\n }\n\n for (var _iterator3 = _createForOfIteratorHelperLoose(token.rows), _step3; !(_step3 = _iterator3()).done;) {\n var row = _step3.value;\n\n for (var _iterator4 = _createForOfIteratorHelperLoose(row), _step4; !(_step4 = _iterator4()).done;) {\n var _cell = _step4.value;\n values = values.concat(marked.walkTokens(_cell.tokens, callback));\n }\n }\n\n break;\n }\n\n case 'list':\n {\n values = values.concat(marked.walkTokens(token.items, callback));\n break;\n }\n\n default:\n {\n if (marked.defaults.extensions && marked.defaults.extensions.childTokens && marked.defaults.extensions.childTokens[token.type]) {\n // Walk any extensions\n marked.defaults.extensions.childTokens[token.type].forEach(function (childTokens) {\n values = values.concat(marked.walkTokens(token[childTokens], callback));\n });\n } else if (token.tokens) {\n values = values.concat(marked.walkTokens(token.tokens, callback));\n }\n }\n }\n };\n\n for (var _iterator = _createForOfIteratorHelperLoose(tokens), _step; !(_step = _iterator()).done;) {\n _loop3();\n }\n\n return values;\n };\n /**\n * Parse Inline\n * @param {string} src\n */\n\n\n marked.parseInline = function (src, opt) {\n // throw error in case of non string input\n if (typeof src === 'undefined' || src === null) {\n throw new Error('marked.parseInline(): input parameter is undefined or null');\n }\n\n if (typeof src !== 'string') {\n throw new Error('marked.parseInline(): input parameter is of type ' + Object.prototype.toString.call(src) + ', string expected');\n }\n\n opt = merge({}, marked.defaults, opt || {});\n checkSanitizeDeprecation(opt);\n\n try {\n var tokens = Lexer.lexInline(src, opt);\n\n if (opt.walkTokens) {\n marked.walkTokens(tokens, opt.walkTokens);\n }\n\n return Parser.parseInline(tokens, opt);\n } catch (e) {\n e.message += '\\nPlease report this to https://github.com/markedjs/marked.';\n\n if (opt.silent) {\n return '<p>An error occurred:</p><pre>' + escape(e.message + '', true) + '</pre>';\n }\n\n throw e;\n }\n };\n /**\n * Expose\n */\n\n\n marked.Parser = Parser;\n marked.parser = Parser.parse;\n marked.Renderer = Renderer;\n marked.TextRenderer = TextRenderer;\n marked.Lexer = Lexer;\n marked.lexer = Lexer.lex;\n marked.Tokenizer = Tokenizer;\n marked.Slugger = Slugger;\n marked.parse = marked;\n var options = marked.options;\n var setOptions = marked.setOptions;\n var use = marked.use;\n var walkTokens = marked.walkTokens;\n var parseInline = marked.parseInline;\n var parse = marked;\n var parser = Parser.parse;\n var lexer = Lexer.lex;\n\n exports.Lexer = Lexer;\n exports.Parser = Parser;\n exports.Renderer = Renderer;\n exports.Slugger = Slugger;\n exports.TextRenderer = TextRenderer;\n exports.Tokenizer = Tokenizer;\n exports.getDefaults = getDefaults;\n exports.lexer = lexer;\n exports.marked = marked;\n exports.options = options;\n exports.parse = parse;\n exports.parseInline = parseInline;\n exports.parser = parser;\n exports.setOptions = setOptions;\n exports.use = use;\n exports.walkTokens = walkTokens;\n\n Object.defineProperty(exports, '__esModule', { value: true });\n\n}));\n","module.exports = require(\"core-js/modules/es.array.splice\");","module.exports = require(\"element-ui/lib/link\");","module.exports = require(\"element-ui/lib/locale\");","module.exports = require(\"element-ui/lib/theme-chalk/option.css\");","module.exports = require(\"core-js/modules/es.promise\");","module.exports = require(\"core-js/modules/es.object.to-string\");","module.exports = require(\"algoliasearch\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=style&index=0&id=9b3acd4c&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=style&index=0&id=9b3acd4c&scoped=true&lang=css&\"","module.exports = require(\"vue\");","module.exports = require(\"core-js/modules/es.array.iterator\");","module.exports = require(\"element-ui/lib/theme-chalk/icon.css\");","module.exports = require(\"core-js/modules/es.string.iterator\");","module.exports = require(\"element-ui/lib/popover\");","module.exports = require(\"core-js/modules/es.map\");","module.exports = require(\"element-ui/lib/theme-chalk/base.css\");","module.exports = require(\"core-js/modules/es.array.flat\");","module.exports = __webpack_public_path__ + \"img/missing-image.1878d8b8.svg\";","module.exports = require(\"@abi-software/gallery/src/mixins/GalleryHelpers\");","module.exports = require(\"element-ui/lib/theme-chalk/popover.css\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/theme-chalk/input.css\");","module.exports = require(\"core-js/modules/es.array.includes\");","module.exports = require(\"element-ui/lib/loading\");","module.exports = require(\"core-js/modules/es.array.find-index\");","module.exports = require(\"element-ui/lib/card\");","module.exports = require(\"element-ui/lib/icon\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.assign\");","module.exports = require(\"core-js/modules/es.function.name\");","module.exports = require(\"core-js/modules/web.dom-collections.for-each\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.string.search\");","module.exports = require(\"core-js/modules/es.string.replace\");","module.exports = require(\"element-ui/lib/option\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.array.last-index-of\");","module.exports = require(\"current-script-polyfill\");","module.exports = require(\"core-js/modules/es.array.from\");","module.exports = require(\"element-ui/lib/input\");","import mod from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"; export default mod; export * from \"-!../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../node_modules/@vue/cli-service/node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.object.entries\");","module.exports = require(\"core-js/modules/es.array.unscopables.flat\");","module.exports = require(\"xss\");","module.exports = require(\"core-js/modules/es.array.map\");","module.exports = require(\"core-js/modules/es.promise.finally\");","// This file is imported into lib/wc client bundles.\n\nif (typeof window !== 'undefined') {\n if (process.env.NEED_CURRENTSCRIPT_POLYFILL) {\n require('current-script-polyfill')\n }\n\n var i\n if ((i = window.document.currentScript) && (i = i.src.match(/(.+\\/)[^/]+\\.js(\\?.*)?$/))) {\n __webpack_public_path__ = i[1] // eslint-disable-line\n }\n}\n\n// Indicate to webpack that this file can be concatenated\nexport default null\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\"},[(!_vm.drawerOpen)?_c('div',{staticClass:\"open-tab\",on:{\"click\":_vm.toggleDrawer}},[_c('i',{staticClass:\"el-icon-arrow-left\"})]):_vm._e(),_c('el-drawer',{staticClass:\"side-bar\",attrs:{\"custom-class\":\"my-drawer\",\"visible\":_vm.drawerOpen,\"appendToBody\":false,\"modal-append-to-body\":false,\"size\":\"550\",\"with-header\":false,\"wrapperClosable\":false,\"modal\":false},on:{\"update:visible\":function($event){_vm.drawerOpen=$event}}},[_c('div',{staticClass:\"box-card\"},[(_vm.drawerOpen)?_c('div',{staticClass:\"close-tab\",on:{\"click\":_vm.close}},[_c('i',{staticClass:\"el-icon-arrow-right\"})]):_vm._e(),_c('div',{staticClass:\"sidebar-container\"},[(_vm.tabs.length > 1)?_c('tabs',{attrs:{\"tabTitles\":_vm.tabs,\"activeId\":_vm.activeId},on:{\"titleClicked\":_vm.tabClicked}}):_vm._e(),_vm._l((_vm.tabs),function(tab){return [_c('sidebar-content',{directives:[{name:\"show\",rawName:\"v-show\",value:(tab.id===_vm.activeId),expression:\"tab.id===activeId\"}],key:tab.id,ref:tab.id,refInFor:true,staticClass:\"sidebar-content-container\",attrs:{\"contextCardEntry\":tab.contextCard,\"envVars\":_vm.envVars},on:{\"search-changed\":function($event){return _vm.searchChanged(tab.id, $event)}}})]})],2)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _defineProperty(obj, key, value) {\n if (key in obj) {\n Object.defineProperty(obj, key, {\n value: value,\n enumerable: true,\n configurable: true,\n writable: true\n });\n } else {\n obj[key] = value;\n }\n\n return obj;\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('el-card',{staticClass:\"content-card\",attrs:{\"body-style\":_vm.bodyStyle}},[_c('div',{staticClass:\"header\",attrs:{\"slot\":\"header\"},slot:\"header\"},[(_vm.contextCardEntry && _vm.contextCardEnabled)?_c('context-card',{attrs:{\"entry\":_vm.contextCardEntry,\"envVars\":_vm.envVars}}):_vm._e(),_c('el-input',{staticClass:\"search-input\",attrs:{\"placeholder\":\"Search\",\"clearable\":\"\"},on:{\"clear\":_vm.clearSearchClicked},nativeOn:{\"keyup\":function($event){return _vm.searchEvent($event)}},model:{value:(_vm.searchInput),callback:function ($$v) {_vm.searchInput=$$v},expression:\"searchInput\"}}),_c('el-button',{staticClass:\"button\",on:{\"click\":_vm.searchEvent}},[_vm._v(\"Search\")])],1),_c('SearchFilters',{ref:\"filtersRef\",staticClass:\"filters\",attrs:{\"entry\":_vm.filterEntry,\"envVars\":_vm.envVars},on:{\"filterResults\":_vm.filterUpdate,\"numberPerPage\":_vm.numberPerPageUpdate,\"loading\":_vm.filtersLoading,\"cascaderReady\":_vm.cascaderReady}}),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loadingCards),expression:\"loadingCards\"}],ref:\"content\",staticClass:\"content scrollbar\"},[(_vm.results.length === 0 && !_vm.loadingCards)?_c('div',{staticClass:\"error-feedback\"},[_vm._v(\"No results found - Please change your search / filter criteria.\")]):_vm._e(),_vm._l((_vm.results),function(result){return _c('div',{key:result.doi,staticClass:\"step-item\"},[_c('DatasetCard',{attrs:{\"entry\":result,\"envVars\":_vm.envVars},on:{\"contextUpdate\":_vm.contextCardUpdate}})],1)}),_c('el-pagination',{staticClass:\"pagination\",attrs:{\"current-page\":_vm.page,\"hide-on-single-page\":\"\",\"large\":\"\",\"layout\":\"prev, pager, next\",\"page-size\":_vm.numberPerPage,\"total\":_vm.numberOfHits},on:{\"update:currentPage\":function($event){_vm.page=$event},\"update:current-page\":function($event){_vm.page=$event},\"current-change\":_vm.pageChange}})],2)],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayWithoutHoles(arr) {\n if (Array.isArray(arr)) {\n for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) {\n arr2[i] = arr[i];\n }\n\n return arr2;\n }\n}","export default function _iterableToArray(iter) {\n if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === \"[object Arguments]\") return Array.from(iter);\n}","export default function _nonIterableSpread() {\n throw new TypeError(\"Invalid attempt to spread non-iterable instance\");\n}","import arrayWithoutHoles from \"./arrayWithoutHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableSpread from \"./nonIterableSpread\";\nexport default function _toConsumableArray(arr) {\n return arrayWithoutHoles(arr) || iterableToArray(arr) || nonIterableSpread();\n}","function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {\n try {\n var info = gen[key](arg);\n var value = info.value;\n } catch (error) {\n reject(error);\n return;\n }\n\n if (info.done) {\n resolve(value);\n } else {\n Promise.resolve(value).then(_next, _throw);\n }\n}\n\nexport default function _asyncToGenerator(fn) {\n return function () {\n var self = this,\n args = arguments;\n return new Promise(function (resolve, reject) {\n var gen = fn.apply(self, args);\n\n function _next(value) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"next\", value);\n }\n\n function _throw(err) {\n asyncGeneratorStep(gen, resolve, reject, _next, _throw, \"throw\", err);\n }\n\n _next(undefined);\n });\n };\n}","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"filters\"},[_c('map-svg-sprite-color'),_c('transition',{attrs:{\"name\":\"el-zoom-in-top\"}},[_c('span',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showFilters),expression:\"showFilters\"}],staticClass:\"search-filters transition-box\"},[_c('custom-cascader',{ref:\"cascader\",staticClass:\"cascader\",attrs:{\"placeholder\":\"\",\"collapse-tags\":true,\"options\":_vm.options,\"props\":_vm.props,\"show-all-levels\":false,\"append-to-body\":false},on:{\"change\":function($event){return _vm.cascadeEvent($event)},\"expand-change\":_vm.cascadeExpandChange,\"tags-changed\":_vm.tagsChangedCallback},model:{value:(_vm.cascadeSelected),callback:function ($$v) {_vm.cascadeSelected=$$v},expression:\"cascadeSelected\"}}),(_vm.showFiltersText)?_c('div',{staticClass:\"filter-default-value\"},[_vm._v(\" Filters \")]):_vm._e(),_c('el-popover',{attrs:{\"title\":\"How do filters work?\",\"width\":\"250\",\"trigger\":\"hover\",\"append-to-body\":false,\"popper-class\":\"popover\"}},[_c('map-svg-icon',{staticClass:\"help\",attrs:{\"slot\":\"reference\",\"icon\":\"help\"},slot:\"reference\"}),_c('div',[_c('strong',[_vm._v(\"Within categories:\")]),_vm._v(\" OR \"),_c('br'),_vm._v(\" example: 'heart' OR 'colon' \"),_c('br'),_c('br'),_c('strong',[_vm._v(\"Between categories:\")]),_vm._v(\" AND \"),_c('br'),_vm._v(\" example: 'rat' AND 'lung' \")])],1)],1)]),_c('el-select',{staticClass:\"number-shown-select\",attrs:{\"placeholder\":\"10\"},on:{\"change\":function($event){return _vm.numberShownChanged($event)}},model:{value:(_vm.numberShown),callback:function ($$v) {_vm.numberShown=$$v},expression:\"numberShown\"}},_vm._l((_vm.numberDatasetsShown),function(item){return _c('el-option',{key:item,attrs:{\"label\":item,\"value\":item}})}),1),_c('span',{staticClass:\"dataset-results-feedback\"},[_vm._v(_vm._s(this.numberOfResultsText))])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _arrayWithHoles(arr) {\n if (Array.isArray(arr)) return arr;\n}","export default function _nonIterableRest() {\n throw new TypeError(\"Invalid attempt to destructure non-iterable instance\");\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArray from \"./iterableToArray\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _toArray(arr) {\n return arrayWithHoles(arr) || iterableToArray(arr) || nonIterableRest();\n}","var render, staticRenderFns\nimport script from \"./Cascader.vue?vue&type=script&lang=js&\"\nexport * from \"./Cascader.vue?vue&type=script&lang=js&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n null,\n null\n \n)\n\nexport default component.exports","<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport { Cascader } from \"element-ui\";\r\n\r\nexport default {\r\n name: 'CustomCascader',\r\n extends: Cascader,\r\n methods:{\r\n //Modify this internal function to disable Show all tags\r\n computePresentTags() {\r\n const { isDisabled, leafOnly, showAllLevels, separator, collapseTags } = this;\r\n const checkedNodes = this.getCheckedNodes(leafOnly);\r\n const tags = [];\r\n const genTag = node => ({\r\n node,\r\n key: node.uid,\r\n text: node.getText(showAllLevels, separator),\r\n hitState: false,\r\n closable: !isDisabled && !node.isDisabled\r\n });\r\n let customNodes = checkedNodes.filter(node =>\r\n {\r\n return !(node.getText(showAllLevels, separator).includes(\"Show all\"));\r\n }\r\n );\r\n if (customNodes.length) {\r\n const [first, ...rest] = customNodes;\r\n const restCount = rest.length;\r\n tags.push(genTag(first));\r\n if (restCount) {\r\n if (collapseTags) {\r\n tags.push({\r\n key: -1,\r\n text: `+ ${restCount}`,\r\n closable: false\r\n });\r\n } else {\r\n rest.forEach(node => tags.push(genTag(node)));\r\n }\r\n }\r\n }\r\n this.checkedNodes = checkedNodes;\r\n this.presentTags = tags;\r\n this.$emit(\"tags-changed\", this.presentTags);\r\n }\r\n }\r\n}\r\n\r\n</script>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cascader.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Cascader.vue?vue&type=script&lang=js&\"","/* globals __VUE_SSR_CONTEXT__ */\n\n// IMPORTANT: Do NOT use ES2015 features in this file (except for modules).\n// This module is a runtime utility for cleaner component module output and will\n// be included in the final webpack user bundle.\n\nexport default function normalizeComponent (\n scriptExports,\n render,\n staticRenderFns,\n functionalTemplate,\n injectStyles,\n scopeId,\n moduleIdentifier, /* server only */\n shadowMode /* vue-cli only */\n) {\n // Vue.extend constructor export interop\n var options = typeof scriptExports === 'function'\n ? scriptExports.options\n : scriptExports\n\n // render functions\n if (render) {\n options.render = render\n options.staticRenderFns = staticRenderFns\n options._compiled = true\n }\n\n // functional template\n if (functionalTemplate) {\n options.functional = true\n }\n\n // scopedId\n if (scopeId) {\n options._scopeId = 'data-v-' + scopeId\n }\n\n var hook\n if (moduleIdentifier) { // server build\n hook = function (context) {\n // 2.3 injection\n context =\n context || // cached call\n (this.$vnode && this.$vnode.ssrContext) || // stateful\n (this.parent && this.parent.$vnode && this.parent.$vnode.ssrContext) // functional\n // 2.2 with runInNewContext: true\n if (!context && typeof __VUE_SSR_CONTEXT__ !== 'undefined') {\n context = __VUE_SSR_CONTEXT__\n }\n // inject component styles\n if (injectStyles) {\n injectStyles.call(this, context)\n }\n // register component module identifier for async chunk inferrence\n if (context && context._registeredComponents) {\n context._registeredComponents.add(moduleIdentifier)\n }\n }\n // used by ssr in case component is cached and beforeCreate\n // never gets called\n options._ssrRegister = hook\n } else if (injectStyles) {\n hook = shadowMode\n ? function () { injectStyles.call(this, this.$root.$options.shadowRoot) }\n : injectStyles\n }\n\n if (hook) {\n if (options.functional) {\n // for template-only hot-reload because in that case the render fn doesn't\n // go through the normalizer\n options._injectStyles = hook\n // register for functioal component in vue file\n var originalRender = options.render\n options.render = function renderWithStyleInjection (h, context) {\n hook.call(context)\n return originalRender(h, context)\n }\n } else {\n // inject component registration as beforeCreate hook\n var existing = options.beforeCreate\n options.beforeCreate = existing\n ? [].concat(existing, hook)\n : [hook]\n }\n }\n\n return {\n exports: scriptExports,\n options: options\n }\n}\n","export default {\r\n 'homo sapiens': 'Human',\r\n 'rattus norvegicus': 'Rat',\r\n 'mus musculus': 'Mouse',\r\n 'sus scrofa domesticus': 'Pig',\r\n 'sus scrofa': 'Boar',\r\n 'felis catus': 'Cat'\r\n}\r\n","export default function _classCallCheck(instance, Constructor) {\n if (!(instance instanceof Constructor)) {\n throw new TypeError(\"Cannot call a class as a function\");\n }\n}","function _defineProperties(target, props) {\n for (var i = 0; i < props.length; i++) {\n var descriptor = props[i];\n descriptor.enumerable = descriptor.enumerable || false;\n descriptor.configurable = true;\n if (\"value\" in descriptor) descriptor.writable = true;\n Object.defineProperty(target, descriptor.key, descriptor);\n }\n}\n\nexport default function _createClass(Constructor, protoProps, staticProps) {\n if (protoProps) _defineProperties(Constructor.prototype, protoProps);\n if (staticProps) _defineProperties(Constructor, staticProps);\n return Constructor;\n}","/* eslint-disable no-alert, no-console */\r\nimport algoliasearch from 'algoliasearch'\r\n\r\n// export `createAlgoliaClient` to use it in page components\r\nexport class AlgoliaClient {\r\n constructor(algoliaId, algoliaKey, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n this.client = algoliasearch(\r\n algoliaId,\r\n algoliaKey\r\n )\r\n this.PENNSIEVE_API_LOCATION = PENNSIEVE_API_LOCATION\r\n }\r\n initIndex(ALGOLIA_INDEX) {\r\n this.index = this.client.initIndex(ALGOLIA_INDEX);\r\n }\r\n\r\n getAlgoliaFacets(propPathMapping) {\r\n const map = new Map(Object.entries(propPathMapping));\r\n const facetPropPaths = Array.from(map.keys());\r\n let facetData = []\r\n let facetId = 0\r\n return this.index\r\n .search('', {\r\n sortFacetValuesBy: 'alpha',\r\n facets: facetPropPaths\r\n })\r\n .then(response => {\r\n facetPropPaths.map((facetPropPath) => {\r\n var children = []\r\n const responseFacets = response.facets\r\n if (responseFacets === undefined) { return }\r\n const responseFacetChildren =\r\n responseFacets[facetPropPath] == undefined\r\n ? {}\r\n : responseFacets[facetPropPath]\r\n Object.keys(responseFacetChildren).map(facet => {\r\n children.push({\r\n label: facet,\r\n id: facetId++,\r\n facetPropPath: facetPropPath\r\n })\r\n })\r\n if (children.length > 0) {\r\n facetData.push({\r\n label: map.get(facetPropPath),\r\n id: facetId++,\r\n children: children,\r\n key: facetPropPath\r\n })\r\n }\r\n })\r\n return facetData\r\n })\r\n }\r\n\r\n // Returns all DOIs of all versions for a given discover dataset\r\n _discoverAllDois(discoverId, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n return new Promise(resolve => {\r\n fetch(`${PENNSIEVE_API_LOCATION}/discover/datasets/${discoverId}/versions`).then(r => r.json()).then(dataset => {\r\n resolve(dataset.map(version => version.doi))\r\n })\r\n })\r\n }\r\n\r\n // Get all dois given a list of discoverIds\r\n _expandDois(discoverIds, PENNSIEVE_API_LOCATION = 'https://api.pennsieve.io') {\r\n return new Promise(resolve => {\r\n let promiseList = discoverIds.map(discoverId => this._discoverAllDois(discoverId, PENNSIEVE_API_LOCATION))\r\n Promise.all(promiseList).then((values) => {\r\n resolve(values.flat())\r\n });\r\n })\r\n }\r\n\r\n _processResultsForCards(results) {\r\n let newResults = []\r\n let newResult = {}\r\n for (let res of results) {\r\n newResult = { ...res }\r\n newResult = {\r\n doi: res.item.curie.split(':')[1],\r\n name: res.item.name,\r\n description: res.item.description,\r\n updated: res.pennsieve.updatedAt,\r\n publishDate: res.pennsieve.publishDate,\r\n datasetId: res.objectID,\r\n detailsReady: false\r\n }\r\n newResults.push(newResult)\r\n }\r\n return newResults\r\n }\r\n\r\n _processAnatomy(hits) {\r\n let foundKeyWords = []\r\n let uniqueKeywords = []\r\n hits.forEach(hit => {\r\n if (hit.item && hit.item.keywords) {\r\n hit.item.keywords.forEach(keywordObj => {\r\n let keyword = keywordObj.keyword.toUpperCase()\r\n if (keyword.includes('UBERON') || keyword.includes('ILX')) {\r\n foundKeyWords.push(this._processUberonURL(keyword))\r\n }\r\n })\r\n }\r\n if (hit.anatomy && hit.anatomy.organ ) {\r\n hit.anatomy.organ.forEach(anatomy => {\r\n if (anatomy.curie) {\r\n foundKeyWords.push(anatomy.curie)\r\n }\r\n })\r\n }\r\n })\r\n uniqueKeywords = [...new Set(foundKeyWords)]\r\n return uniqueKeywords\r\n }\r\n\r\n _processUberonURL(url) {\r\n let ub = url.split('/').pop()\r\n return ub.replace('_', ':')\r\n }\r\n\r\n /**\r\n * Get Search results\r\n * This is using fetch from the Algolia API\r\n */\r\n search(filter, query = '', hitsperPage = 10, page = 1) {\r\n return new Promise(resolve => {\r\n this.index\r\n .search(query, {\r\n facets: ['*'],\r\n hitsPerPage: hitsperPage,\r\n page: page - 1,\r\n filters: filter,\r\n attributesToHighlight: [],\r\n attributesToRetrieve: [\r\n 'pennsieve.publishDate',\r\n 'pennsieve.updatedAt',\r\n 'item.curie',\r\n 'item.name',\r\n 'item.description',\r\n 'objectID',\r\n ],\r\n })\r\n .then(response => {\r\n let searchData = {\r\n items: this._processResultsForCards(response.hits),\r\n total: response.nbHits,\r\n discoverIds: response.hits.map(r => r.pennsieve.identifier),\r\n dois: response.hits.map(r => r.item.curie.split(':')[1])\r\n }\r\n resolve(searchData)\r\n })\r\n })\r\n }\r\n\r\n /**\r\n * Get key words\r\n * This is used to return all keywords for a given search. Note that you often want the hits per page to be maxed out\r\n */\r\n anatomyInSearch(filter, query = '', hitsperPage = 999999, page = 1) {\r\n return new Promise(resolve => {\r\n this.index\r\n .search(query, {\r\n facets: ['*'],\r\n hitsPerPage: hitsperPage,\r\n page: page - 1,\r\n filters: filter,\r\n attributesToHighlight: [],\r\n attributesToRetrieve: [\r\n 'item.keywords.keyword',\r\n 'anatomy.organ.name',\r\n 'anatomy.organ.curie'\r\n ],\r\n })\r\n .then(response => {\r\n let anatomyAsUberons = this._processAnatomy(response.hits)\r\n resolve(anatomyAsUberons)\r\n })\r\n })\r\n }\r\n}\r\n","/* eslint-disable no-alert, no-console */\r\n\r\n// Mapping between display categories and their Algolia index property path\r\n// Used for populating the Dataset Search Results facet menu dynamically\r\nexport const facetPropPathMapping = {\r\n 'anatomy.organ.name' : 'Anatomical Structure',\r\n 'organisms.primary.species.name' : 'Species',\r\n 'item.modalities.keyword' : 'Experimental Approach',\r\n 'attributes.subject.sex.value' : 'Sex',\r\n 'attributes.subject.ageCategory.value' : 'Age Categories',\r\n 'item.keywords.keyword' : 'Keywords'\r\n}\r\n\r\n// Same as above, but these show on the sidebar filters\r\nexport const shownFilters = {\r\n 'anatomy.organ.name' : 'Anatomical Structure',\r\n 'organisms.primary.species.name' : 'Species',\r\n 'item.modalities.keyword' : 'Experimental Approach',\r\n 'attributes.subject.sex.value' : 'Sex',\r\n 'attributes.subject.ageCategory.value' : 'Age Categories',\r\n}\r\n\r\n/* Returns filter for searching algolia. All facets of the same category are joined with OR,\r\n * and each of those results is then joined with an AND.\r\n * i.e. (color:blue OR color:red) AND (shape:circle OR shape:red) */\r\nexport function getFilters(selectedFacetArray=undefined) {\r\n // return all datasets if no filter\r\n if (selectedFacetArray === undefined) {\r\n return 'NOT item.published.status:embargo'\r\n }\r\n\r\n // Switch the 'term' attribute to 'label' if 'label' does not exist \r\n selectedFacetArray.forEach(f=>f.label=f.facet)\r\n \r\n\r\n let facets = removeShowAllFacets(selectedFacetArray)\r\n\r\n let filters = \"NOT item.published.status:embargo\";\r\n filters = `(${filters}) AND `;\r\n\r\n const facetPropPaths = Object.keys(facetPropPathMapping);\r\n facetPropPaths.map((facetPropPath) => {\r\n const facetsToBool = facets.filter(\r\n (facet) => facet.facetPropPath == facetPropPath\r\n );\r\n let orFilters = \"\";\r\n let andFilters = \"\";\r\n facetsToBool.map((facet) => {\r\n if (facet.AND){\r\n andFilters += `AND \"${facetPropPath}\":\"${facet.label}\"`;\r\n } else {\r\n orFilters += `\"${facetPropPath}\":\"${facet.label}\" OR `;\r\n }\r\n });\r\n if (orFilters == \"\" && andFilters ==\"\") {\r\n return;\r\n }\r\n orFilters = `(${orFilters.substring(0, orFilters.lastIndexOf(\" OR \"))})` // remove last OR\r\n\r\n filters += `${orFilters + andFilters} AND `; // Put them together\r\n // (Note that we add an extra AND in case there are facets at a higher level)\r\n\r\n filters = filters.split('()AND ').join(''); // Handle case where there where no OR facets\r\n });\r\n return filters.substring(0, filters.lastIndexOf(\" AND \"));\r\n}\r\n\r\nfunction removeShowAllFacets(facetArray){\r\n return facetArray.filter( f => f.label !== 'Show all')\r\n}","<template>\r\n <div class=\"filters\">\r\n <map-svg-sprite-color />\r\n <transition name=\"el-zoom-in-top\">\r\n <span v-show=\"showFilters\" class=\"search-filters transition-box\">\r\n <custom-cascader\r\n class=\"cascader\"\r\n ref=\"cascader\"\r\n v-model=\"cascadeSelected\"\r\n placeholder\r\n :collapse-tags=\"true\"\r\n :options=\"options\"\r\n :props=\"props\"\r\n @change=\"cascadeEvent($event)\"\r\n @expand-change=\"cascadeExpandChange\"\r\n :show-all-levels=\"false\"\r\n :append-to-body=\"false\"\r\n @tags-changed=\"tagsChangedCallback\"\r\n ></custom-cascader>\r\n <div v-if=\"showFiltersText\" class=\"filter-default-value\">\r\n Filters\r\n </div>\r\n <el-popover\r\n title=\"How do filters work?\"\r\n width=\"250\"\r\n trigger=\"hover\"\r\n :append-to-body=false\r\n popper-class=\"popover\"\r\n >\r\n <map-svg-icon slot=\"reference\" icon=\"help\" class=\"help\"/>\r\n <div >\r\n <strong>Within categories:</strong> OR \r\n <br/>\r\n example: 'heart' OR 'colon'\r\n <br/>\r\n <br/>\r\n <strong>Between categories:</strong> AND\r\n <br/>\r\n example: 'rat' AND 'lung'\r\n </div>\r\n </el-popover>\r\n \r\n </span>\r\n </transition>\r\n\r\n <el-select\r\n class=\"number-shown-select\"\r\n v-model=\"numberShown\"\r\n placeholder=\"10\"\r\n @change=\"numberShownChanged($event)\"\r\n >\r\n <el-option\r\n v-for=\"item in numberDatasetsShown\"\r\n :key=\"item\"\r\n :label=\"item\"\r\n :value=\"item\"\r\n ></el-option>\r\n </el-select>\r\n <span class=\"dataset-results-feedback\">{{ this.numberOfResultsText }}</span>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Option, Select, Popover } from \"element-ui\";\r\nimport CustomCascader from \"./Cascader\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport speciesMap from \"./species-map\";\r\nimport { MapSvgIcon, MapSvgSpriteColor } from \"@abi-software/svg-sprite\";\r\n\r\nimport {AlgoliaClient} from \"../algolia/algolia.js\";\r\nimport {facetPropPathMapping} from \"../algolia/utils.js\";\r\n\r\nlocale.use(lang);\r\nVue.use(Option);\r\nVue.use(Select);\r\nVue.use(Popover)\r\n\r\nconst capitalise = function (txt) {\r\n return txt.charAt(0).toUpperCase() + txt.slice(1);\r\n};\r\n\r\nconst convertReadableLabel = function (original) {\r\n const name = original.toLowerCase();\r\n if (speciesMap[name]) {\r\n return capitalise(speciesMap[name]);\r\n } else {\r\n return capitalise(name);\r\n }\r\n};\r\n\r\nexport default {\r\n name: \"SearchFilters\",\r\n components: {\r\n CustomCascader,\r\n MapSvgIcon,\r\n MapSvgSpriteColor,\r\n },\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: Object,\r\n envVars: {\r\n type: Object,\r\n default: ()=>{}\r\n },\r\n },\r\n data: function () {\r\n return {\r\n cascaderIsReady: false,\r\n previousShowAllChecked: {\r\n species: false,\r\n gender: false,\r\n organ: false,\r\n datasets: false,\r\n },\r\n showFilters: true,\r\n showFiltersText: true,\r\n cascadeSelected: [],\r\n cascadeSelectedWithBoolean: [], \r\n numberShown: 10,\r\n filters: [],\r\n facets: [\"Species\", \"Gender\", \"Organ\", \"Datasets\"],\r\n numberDatasetsShown: [\"10\", \"20\", \"50\"],\r\n props: { multiple: true },\r\n options: [\r\n {\r\n value: \"Species\",\r\n label: \"Species\",\r\n children: [{}],\r\n },\r\n ],\r\n };\r\n },\r\n computed: {\r\n numberOfResultsText: function () {\r\n return `${this.entry.numberOfHits} results | Showing`;\r\n },\r\n },\r\n methods: {\r\n createCascaderItemValue: function (term, facet) {\r\n if (facet) return term + \">\" + facet;\r\n else return term;\r\n },\r\n populateCascader: function () {\r\n return new Promise((resolve) => {\r\n // Algolia facet serach\r\n this.algoliaClient.getAlgoliaFacets(facetPropPathMapping)\r\n .then((data) => {\r\n this.facets = data;\r\n this.options = data;\r\n\r\n // create top level of options in cascader\r\n this.options.forEach((facet, i) => {\r\n this.options[i].label = convertReadableLabel(facet.label);\r\n this.options[i].value = this.createCascaderItemValue(\r\n facet.key,\r\n undefined\r\n );\r\n\r\n // put \"Show all\" as first option\r\n this.options[i].children.unshift({\r\n value: this.createCascaderItemValue(\"Show all\"),\r\n label: \"Show all\",\r\n });\r\n\r\n // populate second level of options \r\n this.options[i].children.forEach((facetItem, j) => {\r\n this.options[i].children[j].label = convertReadableLabel(\r\n facetItem.label\r\n );\r\n this.options[i].children[j].value =\r\n this.createCascaderItemValue(facet.label, facetItem.label);\r\n });\r\n });\r\n this.createDataTypeFacet();\r\n })\r\n .finally(() => {\r\n resolve();\r\n });\r\n });\r\n },\r\n tagsChangedCallback: function (presentTags) {\r\n if (presentTags.length > 0) {\r\n this.showFiltersText = false;\r\n } else {\r\n this.showFiltersText = true;\r\n }\r\n },\r\n // cascadeEvent: initiate searches based off cascader changes\r\n cascadeEvent: function (event) {\r\n if (event) {\r\n // Check for show all in selected cascade options\r\n event = this.showAllEventModifier(event);\r\n\r\n // Create results for the filter update \r\n let filterKeys = event.filter( selection => selection !== undefined).map( fs => ({\r\n facetPropPath: fs[0], \r\n facet: fs[1].split(\">\")[1],\r\n term: fs[1].split(\">\")[0], \r\n AND: fs[2] // for setting the boolean\r\n }))\r\n\r\n // Move results from arrays to object for use on scicrunch (note that we remove 'duplicate' as that is only needed for filter keys)\r\n let filters = event.filter( selection => selection !== undefined).map( fs => {\r\n let propPath = fs[0].includes('duplicate') ? fs[0].split('duplicate')[0] : fs[0]\r\n return {\r\n facetPropPath: propPath, \r\n facet: fs[1].split(\">\")[1],\r\n term: fs[1].split(\">\")[0], \r\n AND: fs[2] // for setting the boolean\r\n }\r\n })\r\n\r\n\r\n this.$emit('loading', true) // let sidebarcontent wait for the requests\r\n\r\n this.$emit(\"filterResults\", filters); // emit filters for apps above sidebar\r\n this.setCascader(filterKeys); //update our cascader v-model if we modified the event\r\n this.makeCascadeLabelsClickable();\r\n }\r\n },\r\n // showAllEventModifier: Modifies a cascade event to unclick all selections in category if \"show all\" is clicked. Also unchecks \"Show all\" if any secection is clicked\r\n // *NOTE* Does NOT remove 'Show all' selections from showing in 'cascadeSelected'\r\n showAllEventModifier: function (event) {\r\n // check if show all is in the cascader checked option list\r\n let hasShowAll = event\r\n .map((ev) => (ev ? ev[1].toLowerCase().includes(\"show all\") : false))\r\n .includes(true);\r\n // remove all selected options below the show all if checked\r\n if (hasShowAll) {\r\n let modifiedEvent = [];\r\n let facetMaps = {};\r\n //catagorised different facet items\r\n for (const i in event) {\r\n if (facetMaps[event[i][0]] === undefined) facetMaps[event[i][0]] = [];\r\n facetMaps[event[i][0]].push(event[i]);\r\n }\r\n // go through each facets\r\n for (const facet in facetMaps) {\r\n let showAll = undefined;\r\n // Find the show all item if any\r\n for (let i = facetMaps[facet].length - 1; i >= 0; i--) {\r\n if (facetMaps[facet][i][1].toLowerCase().includes(\"show all\")) {\r\n //seperate the showAll item and the rest\r\n showAll = facetMaps[facet].splice(i, 1)[0];\r\n break;\r\n }\r\n }\r\n if (showAll) {\r\n if (this.previousShowAllChecked[facet]) {\r\n //Unset the show all if it was present previously\r\n //and there are other items\r\n if (facetMaps[facet].length > 0)\r\n modifiedEvent.push(...facetMaps[facet]);\r\n else modifiedEvent.push(showAll);\r\n } else {\r\n //showAll is turned on\r\n modifiedEvent.push(showAll);\r\n }\r\n } else {\r\n modifiedEvent.push(...facetMaps[facet]);\r\n }\r\n }\r\n //Make sure the expanded item are sorted first.\r\n return modifiedEvent.sort((a, b) => {\r\n if (this.__expandItem__) {\r\n if (a[0] == this.__expandItem__) {\r\n if (b[0] == this.__expandItem__) {\r\n return 0;\r\n } else {\r\n return -1;\r\n }\r\n } else if (b[0] == this.__expandItem__) {\r\n if (a[0] == this.__expandItem__) {\r\n return 0;\r\n } else {\r\n return 1;\r\n }\r\n } else {\r\n return 0;\r\n }\r\n } else return 0;\r\n });\r\n }\r\n return event;\r\n },\r\n createDataTypeFacet: function(){\r\n let dataFacet = {...this.facets[2]} // copy the 'Experiemental approach' facet\r\n let count = this.facets.at(-1).id // get the last id count\r\n\r\n // Step through the children that are valid data types, switch thier values \r\n let newChildren = dataFacet.children.filter( el=> {\r\n if (el.label === 'Scaffold' || el.label === 'Simulation' || el.label === 'Show all'){\r\n el.key = el.label\r\n el.id = count\r\n el.value = el.value.replace('Experimental approach', 'Data type')\r\n count++\r\n return el\r\n }\r\n })\r\n dataFacet.id = count\r\n dataFacet.key = 'Data type'\r\n // Add 'duplicate' so that the key is unique. This is removed in the cascade event for filtering\r\n dataFacet.value += 'duplicate' \r\n dataFacet.children = newChildren\r\n dataFacet.label = 'Data type'\r\n this.facets.push(dataFacet)\r\n },\r\n cascadeExpandChange: function (event) {\r\n //work around as the expand item may change on modifying the cascade props\r\n this.__expandItem__ = event;\r\n this.makeCascadeLabelsClickable();\r\n },\r\n numberShownChanged: function (event) {\r\n this.$emit(\"numberPerPage\", parseInt(event));\r\n },\r\n updatePreviousShowAllChecked: function (options) {\r\n //Reset the states\r\n for (const facet in this.previousShowAllChecked) {\r\n this.previousShowAllChecked[facet] = false;\r\n }\r\n options.forEach((element) => {\r\n if (element[1].toLowerCase().includes(\"show all\"))\r\n this.previousShowAllChecked[element[0]] = true;\r\n });\r\n },\r\n // setCascader: Clears previous selections and takes in an array of facets to select: filterFacets\r\n // facets are in the form:\r\n // {\r\n // facetPropPath: 'anatomy.organ.name',\r\n // term: 'Sex',\r\n // facet: 'Male'\r\n // AND: true // Optional value for setting the boolean within a facet\r\n // }\r\n setCascader: function (filterFacets) {\r\n //Do not set the value unless it is ready\r\n if (this.cascaderIsReady && filterFacets && filterFacets.length != 0) {\r\n this.cascadeSelected = filterFacets.map(e => {\r\n return [\r\n e.facetPropPath,\r\n this.createCascaderItemValue(capitalise(e.term), e.facet),\r\n ]\r\n });\r\n\r\n // Unforttunately the cascader is very particular about it's v-model\r\n // to get around this we create a clone of it and use this clone for adding our boolean information\r\n this.cascadeSelectedWithBoolean= filterFacets.map(e => {\r\n return [\r\n e.facetPropPath,\r\n this.createCascaderItemValue(capitalise(e.term), e.facet),\r\n e.AND\r\n ]\r\n });\r\n this.updatePreviousShowAllChecked(this.cascadeSelected);\r\n }\r\n },\r\n addFilter: function (filter) {\r\n //Do not set the value unless it is ready\r\n if (this.cascaderIsReady && filter) {\r\n if (this.validateFilter(filter)) {\r\n this.cascadeSelected.filter(f=>f.term != filter.term)\r\n this.cascadeSelected.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet), filter.AND])\r\n this.cascadeSelectedWithBoolean.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet), filter.AND])\r\n // The 'AND' her is to set the boolean value when we search on the filters. It can be undefined without breaking anything\r\n return true;\r\n }\r\n }\r\n },\r\n initiateSearch: function() {\r\n this.cascadeEvent(this.cascadeSelectedWithBoolean)\r\n },\r\n // checkShowAllBoxes: Checks each 'Show all' cascade option by using the setCascader function\r\n checkShowAllBoxes: function(){\r\n this.setCascader(\r\n this.options.map(option => {\r\n return {\r\n facetPropPath: option.value,\r\n term: option.label,\r\n facet: 'Show all'\r\n }\r\n })\r\n )\r\n },\r\n makeCascadeLabelsClickable: function () {\r\n // Next tick allows the cascader menu to change\r\n this.$nextTick(() => {\r\n this.$refs.cascader.$el\r\n .querySelectorAll(\".el-cascader-node__label\")\r\n .forEach((el) => {\r\n // step through each cascade label\r\n el.onclick = function () {\r\n const checkbox = this.previousElementSibling;\r\n if (checkbox) {\r\n if (!checkbox.parentElement.attributes[\"aria-owns\"]) {\r\n // check if we are at the lowest level of cascader\r\n this.previousElementSibling.click(); // Click the checkbox\r\n }\r\n }\r\n };\r\n });\r\n });\r\n },\r\n /**\r\n * Validate ther filter term to make sure the term is correct\r\n */\r\n validateFilter: function(filter) {\r\n if (filter && filter.facet && filter.term) {\r\n const item = this.createCascaderItemValue(filter.term, filter.facet);\r\n const facet = this.options.find(element => element.value === filter.facetPropPath);\r\n if (facet) {\r\n const filter = facet.children.find(element => element.value === item);\r\n if (filter)\r\n return true;\r\n }\r\n }\r\n return false;\r\n },\r\n /**\r\n * Return a list of valid filers given a list of filters, \r\n */\r\n getValidatedFilters: function (filters) {\r\n if (filters) {\r\n if (this.cascaderIsReady) {\r\n const result = [];\r\n filters.forEach(filter => {\r\n if (this.validateFilter(filter)) {\r\n result.push(filter);\r\n }\r\n });\r\n return result;\r\n } else return filters;\r\n }\r\n return [];\r\n },\r\n },\r\n mounted: function () {\r\n this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);\r\n this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);\r\n this.populateCascader().then(() => {\r\n this.cascaderIsReady = true;\r\n this.checkShowAllBoxes();\r\n this.setCascader(this.entry.filterFacets);\r\n this.makeCascadeLabelsClickable();\r\n this.$emit(\"cascaderReady\");\r\n });\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.filter-default-value {\r\n pointer-events: none;\r\n position: absolute;\r\n top: 0;\r\n left: 0;\r\n padding-top: 10px;\r\n padding-left: 16px;\r\n}\r\n\r\n.help {\r\n width: 24px !important;\r\n height: 24px;\r\n transform: scale(1.1);\r\n color: #8300bf;\r\n cursor: pointer;\r\n}\r\n\r\n.popover {\r\n color: rgb(48, 49, 51);\r\n font-family: Asap;\r\n margin: 12px;\r\n}\r\n\r\n.filter-icon-inside {\r\n width: 12px !important;\r\n height: 12px !important;\r\n color: #292b66;\r\n transform: scale(2) !important;\r\n margin-bottom: 0px !important;\r\n}\r\n\r\n.cascader {\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: 500;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: normal;\r\n letter-spacing: normal;\r\n color: #292b66;\r\n text-align: center;\r\n padding-bottom: 6px;\r\n}\r\n\r\n.cascader >>> .el-cascder-panel {\r\n max-height: 500px;\r\n}\r\n\r\n.cascader >>> .el-scrollbar__wrap {\r\n overflow-x: hidden;\r\n margin-bottom: 2px !important;\r\n}\r\n\r\n.cascader >>> li[aria-owns*=\"cascader\"] > .el-checkbox {\r\n display: none;\r\n}\r\n\r\n.dataset-results-feedback {\r\n float: right;\r\n text-align: right;\r\n color: rgb(48, 49, 51);\r\n font-family: Asap;\r\n font-size: 18px;\r\n font-weight: 500;\r\n padding-top: 8px;\r\n}\r\n\r\n.search-filters {\r\n position: relative;\r\n float: left;\r\n padding-right: 15px;\r\n padding-bottom: 12px;\r\n}\r\n\r\n.number-shown-select {\r\n float: right;\r\n}\r\n\r\n.number-shown-select >>> .el-input__inner {\r\n width: 68px;\r\n height: 40px;\r\n color: rgb(48, 49, 51);\r\n}\r\n\r\n.search-filters >>> .el-cascader-node.is-active {\r\n color: #8300bf;\r\n}\r\n\r\n.search-filters >>> .el-cascader-node.in-active-path {\r\n color: #8300bf;\r\n}\r\n\r\n.search-filters >>> .el-checkbox__input.is-checked > .el-checkbox__inner {\r\n background-color: #8300bf;\r\n border-color: #8300bf;\r\n}\r\n\r\n.cascader >>> .el-cascader-menu:nth-child(2) .el-cascader-node:first-child {\r\n border-bottom: 1px solid #e4e7ed;\r\n}\r\n\r\n.cascader >>> .el-cascader-node__label {\r\n text-align: left;\r\n}\r\n\r\n.filters >>> .el-popover {\r\n background: #f3ecf6 !important;\r\n border: 1px solid #8300BF;\r\n border-radius: 4px;\r\n color: #303133 !important;\r\n font-size: 12px;\r\n line-height: 18px;\r\n \r\n \r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"top\"] .popper__arrow {\r\n border-top-color: #8300BF;\r\n border-bottom-width: 0;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"top\"] .popper__arrow::after {\r\n border-top-color: #f3ecf6;\r\n border-bottom-width: 0;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"bottom\"] .popper__arrow {\r\n border-top-width: 0;\r\n border-bottom-color: #8300BF;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"bottom\"] .popper__arrow::after {\r\n border-top-width: 0;\r\n border-bottom-color: #f3ecf6;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"right\"] .popper__arrow {\r\n border-right-color: #8300BF;\r\n border-left-width: 0;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"right\"] .popper__arrow::after {\r\n border-right-color: #f3ecf6;\r\n border-left-width: 0;\r\n}\r\n\r\n.filters >>> .el-popover[x-placement^=\"left\"] .popper__arrow {\r\n border-right-width: 0;\r\n border-left-color: #8300BF;\r\n}\r\n.filters >>> .el-popover[x-placement^=\"left\"] .popper__arrow::after {\r\n border-right-width: 0;\r\n border-left-color: #f3ecf6;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SearchFilters.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SearchFilters.vue?vue&type=template&id=7f7ea160&scoped=true&\"\nimport script from \"./SearchFilters.vue?vue&type=script&lang=js&\"\nexport * from \"./SearchFilters.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SearchFilters.vue?vue&type=style&index=0&id=7f7ea160&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"7f7ea160\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"dataset-card-container\"},[_c('div',{ref:\"card\",staticClass:\"dataset-card\"},[_c('div',{staticClass:\"seperator-path\"}),_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"card\"},[_c('span',{staticClass:\"card-left\"},[(!_vm.loading && _vm.discoverId)?_c('image-gallery',{attrs:{\"datasetId\":_vm.discoverId,\"datasetVersion\":_vm.version,\"entry\":_vm.entry,\"envVars\":_vm.envVars,\"label\":_vm.label,\"datasetThumbnail\":_vm.thumbnail,\"dataset-biolucida\":_vm.biolucidaData,\"category\":_vm.currentCategory},on:{\"card-clicked\":_vm.galleryClicked}}):_vm._e()],1),_c('div',{staticClass:\"card-right\"},[_c('div',{staticClass:\"title\",on:{\"click\":_vm.cardClicked}},[_vm._v(_vm._s(_vm.entry.name))]),_c('div',{staticClass:\"details\"},[_vm._v(_vm._s(_vm.contributors)+\" \"+_vm._s(_vm.entry.publishDate ? (\"(\" + _vm.publishYear + \")\") : ''))]),_c('div',{staticClass:\"details\"},[_vm._v(_vm._s(_vm.samples))]),(!_vm.entry.detailsReady)?_c('div',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(!_vm.entry.detailsReady),expression:\"!entry.detailsReady\"}],staticClass:\"details loading-icon\"}):_vm._e(),_c('div',[(_vm.entry.simulation)?_c('el-button',{staticClass:\"button\",attrs:{\"size\":\"mini\",\"icon\":\"el-icon-view\"},on:{\"click\":_vm.openRepository}},[_vm._v(\"View repository\")]):_vm._e()],1),_c('div',{staticClass:\"badges-container\"},[_c('badges-group',{attrs:{\"entry\":_vm.entry,\"dataset-biolucida\":_vm.biolucidaData},on:{\"categoryChanged\":_vm.categoryChanged}})],1)])])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return (_vm.categories['All'].size > 1)?_c('div',{ref:\"container\",staticClass:\"container\"},[_c('div',[_vm._v(\" View data types: \")]),_vm._l((_vm.categories),function(item,key){return [(item.size > 0)?_c('el-button',{key:key,class:[{ 'active': key == _vm.active},'tag-button'],attrs:{\"size\":\"small\"},on:{\"click\":function($event){return _vm.categoryClicked(key)}}},[_vm._v(_vm._s(key + \" (\" + item.size + \")\")+\" \")]):_vm._e()]})],2):_vm._e()}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div v-if=\"categories['All'].size > 1\" class=\"container\" ref=\"container\">\r\n <div>\r\n View data types:\r\n </div>\r\n <template v-for=\"(item, key) in categories\" >\r\n <el-button\r\n v-if=\"item.size > 0\"\r\n :class=\"[{ 'active': key == active},'tag-button']\"\r\n @click=\"categoryClicked(key)\"\r\n size=\"small\" :key=\"key\">{{ key + \" (\" + item.size + \")\" }}\r\n </el-button>\r\n </template>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Button } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\n\r\nexport default {\r\n name: \"BadgesGroup\",\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n additionalLinks: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n datasetBiolucida: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n },\r\n data: function () {\r\n return {\r\n categories: { \"All\": {size: 1} },\r\n active: \"All\"\r\n };\r\n },\r\n methods: {\r\n addToCategories: function (array, name) {\r\n if (array && array.length > 0) {\r\n this.categories[name] = { size: array.length };\r\n this.categories[\"All\"].size += array.length;\r\n }\r\n },\r\n addSimulationsToCategories: function (array) {\r\n if (array && array.length > 0) {\r\n const size = 1;\r\n this.categories[\"Simulations\"] = { size };\r\n this.categories[\"All\"].size += size;\r\n }\r\n },\r\n categoryClicked: function(name) {\r\n this.active = name;\r\n this.$emit(\"categoryChanged\", name);\r\n }\r\n },\r\n watch: {\r\n datasetBiolucida: {\r\n deep: true,\r\n immediate: true,\r\n handler: function (biolucidaData) {\r\n if (\"dataset_images\" in biolucidaData) {\r\n this.addToCategories(biolucidaData[\"dataset_images\"], \"Biolucida Images\");\r\n }\r\n }\r\n },\r\n entry: {\r\n deep: true,\r\n immediate: true,\r\n handler: function () {\r\n this.addToCategories(this.entry.scaffolds, 'Scaffolds');\r\n this.addToCategories(this.entry.segmentation, 'Segmentations');\r\n this.addToCategories(this.entry.plots, 'Plots');\r\n this.addSimulationsToCategories(this.entry.simulation);\r\n /** disable the following\r\n this.addToCategories(this.entry.images, 'Images');\r\n this.addToCategories(this.entry.videos, 'Videos');\r\n **/\r\n }\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.tag-button,\r\n.tag-button:hover,\r\n.tag-button:focus,\r\n.tag-button.active\r\n{\r\n border-radius: 4px;\r\n font-size: 0.75rem;\r\n padding: 0.2rem 0.2rem;\r\n margin: 0.5rem 0 0 0;\r\n margin-right: 0.75rem!important;\r\n}\r\n\r\n.tag-button,\r\n.tag-button:hover,\r\n.tag-button:focus\r\n{\r\n background: #f9f2fc;\r\n border: 1px solid #8300BF;\r\n color: #8300BF;\r\n}\r\n\r\n.tag-button.active\r\n{\r\n background: #8300BF;\r\n border: 1px solid #8300BF;\r\n color: #fff;\r\n}\r\n\r\n.tag-button+.tag-button\r\n{\r\n margin-left:0;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./BadgesGroup.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./BadgesGroup.vue?vue&type=template&id=712c1be9&scoped=true&\"\nimport script from \"./BadgesGroup.vue?vue&type=script&lang=js&\"\nexport * from \"./BadgesGroup.vue?vue&type=script&lang=js&\"\nimport style0 from \"./BadgesGroup.vue?vue&type=style&index=0&id=712c1be9&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"712c1be9\",\n null\n \n)\n\nexport default component.exports","import Vue from 'vue';\r\nconst EventBus = new Vue();\r\nexport default EventBus;\r\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"full-size\"},[_c('gallery',{ref:\"gallery\",attrs:{\"bottomSpacer\":_vm.bottomSpacer,\"cardWidth\":10,\"items\":_vm.galleryItems,\"max-width\":_vm.maxWidth,\"show-indicator-bar\":false,\"show-card-details\":true,\"highlight-active\":false,\"image-style\":_vm.imageStyle,\"image-container-style\":_vm.imageContainerStyle,\"body-style\":_vm.bodyStyle,\"shadow\":_vm.shadow},on:{\"card-clicked\":_vm.cardClicked}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default function _iterableToArrayLimit(arr, i) {\n if (!(Symbol.iterator in Object(arr) || Object.prototype.toString.call(arr) === \"[object Arguments]\")) {\n return;\n }\n\n var _arr = [];\n var _n = true;\n var _d = false;\n var _e = undefined;\n\n try {\n for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) {\n _arr.push(_s.value);\n\n if (i && _arr.length === i) break;\n }\n } catch (err) {\n _d = true;\n _e = err;\n } finally {\n try {\n if (!_n && _i[\"return\"] != null) _i[\"return\"]();\n } finally {\n if (_d) throw _e;\n }\n }\n\n return _arr;\n}","import arrayWithHoles from \"./arrayWithHoles\";\nimport iterableToArrayLimit from \"./iterableToArrayLimit\";\nimport nonIterableRest from \"./nonIterableRest\";\nexport default function _slicedToArray(arr, i) {\n return arrayWithHoles(arr) || iterableToArrayLimit(arr, i) || nonIterableRest();\n}","<template>\r\n <div class=\"full-size\">\r\n <gallery\r\n :bottomSpacer=\"bottomSpacer\"\r\n :cardWidth=\"10\"\r\n :items=\"galleryItems\"\r\n :max-width=\"maxWidth\"\r\n :show-indicator-bar=\"false\"\r\n :show-card-details=\"true\"\r\n :highlight-active=\"false\"\r\n :image-style=\"imageStyle\"\r\n :image-container-style=\"imageContainerStyle\"\r\n :body-style=\"bodyStyle\"\r\n :shadow=\"shadow\"\r\n @card-clicked=\"cardClicked\"\r\n ref=\"gallery\"\r\n />\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nconst baseName = (str) => {\r\n return str.split(\"\\\\\").pop().split(\"/\").pop();\r\n};\r\n\r\nconst capitalise = function (string) {\r\n return string.replace(/\\b\\w/g, (v) => v.toUpperCase());\r\n};\r\n\r\nimport GalleryHelper from \"@abi-software/gallery/src/mixins/GalleryHelpers\";\r\nimport Gallery from \"@abi-software/gallery\";\r\nimport \"@abi-software/gallery/dist/gallery.css\";\r\n\r\nexport default {\r\n name: \"ImageGallery\",\r\n components: { Gallery },\r\n mixins: [GalleryHelper],\r\n props: {\r\n datasetBiolucida: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {},\r\n },\r\n label: {\r\n type: String,\r\n default: \"\",\r\n },\r\n plots: {\r\n type: Array,\r\n default: () => {\r\n return [];\r\n },\r\n },\r\n datasetId: {\r\n type: Number,\r\n default: -1,\r\n },\r\n datasetVersion: {\r\n type: Number,\r\n default: -1,\r\n },\r\n datasetThumbnail: {\r\n type: String,\r\n default: \"\",\r\n },\r\n category: {\r\n type: String,\r\n default: \"All\",\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => {\r\n return {};\r\n },\r\n },\r\n },\r\n data() {\r\n return {\r\n currentIndex: 0,\r\n ro: null,\r\n maxWidth: 3,\r\n items: {\r\n \"Biolucida Images\": [],\r\n 'Dataset': [],\r\n 'Images': [],\r\n 'Scaffolds': [],\r\n 'Segmentations': [],\r\n 'Simulations': [],\r\n 'Videos': [],\r\n 'Plots': [],\r\n },\r\n bodyStyle: { padding: '0px', background: '#ffffff' },\r\n imageContainerStyle: {\r\n width: '160px',\r\n height: '160px',\r\n display: 'flex',\r\n alignItems: 'center',\r\n justifyContent: 'center',\r\n },\r\n imageStyle: { maxWidth: '160px', maxHeight: '160px'},\r\n shadow: \"never\",\r\n bottomSpacer: { minHeight: '0rem' },\r\n resetIndex: false\r\n };\r\n },\r\n methods: {\r\n cardClicked: function(payload) {\r\n this.$emit('card-clicked', payload);\r\n },\r\n createSciCurnchItems: function () {\r\n this.createDatasetItem();\r\n this.createScaffoldItems();\r\n this.createSimulationItems();\r\n this.createPlotItems();\r\n this.createSegmentationItems();\r\n /* Disable these two\r\n this.createImageItems();\r\n this.createVideoItems();\r\n */\r\n },\r\n createDatasetItem: function () {\r\n const link = `${this.envVars.ROOT_URL}/datasets/${this.datasetId}?type=dataset`\r\n if (this.datasetThumbnail) {\r\n this.items['Dataset'].push({\r\n id: -1,\r\n //Work around gallery requires a truthy string\r\n title: \" \",\r\n type: `Dataset ${this.datasetId}`,\r\n thumbnail: this.datasetThumbnail,\r\n link,\r\n hideType: true,\r\n hideTitle: true,\r\n });\r\n }\r\n },\r\n createImageItems: function () {\r\n if (this.entry.images) {\r\n this.entry.images.forEach((image) => {\r\n const filePath = image.dataset.path;\r\n const id = image.identifier;\r\n const linkUrl = `${this.envVars.ROOT_URL}/datasets/imageviewer?dataset_id=${this.datasetId}&dataset_version=${this.datasetVersion}&file_path=${filePath}&mimetype=${image.mimetype.name}`;\r\n this.items['Images'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Image\",\r\n link: linkUrl,\r\n hideType: true,\r\n });\r\n });\r\n }\r\n },\r\n createPlotItems: function () {\r\n if (this.entry.plots) {\r\n this.entry.plots.forEach((plot) => {\r\n const filePath = plot.dataset.path;\r\n const id = plot.identifier;\r\n const thumbnail = this.getThumbnailForPlot(plot, this.entry.thumbnails);\r\n let thumbnailURL = undefined;\r\n let mimetype = '';\r\n if (thumbnail) {\r\n thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n file_path: thumbnail.dataset.path,\r\n });\r\n mimetype = thumbnail.mimetype.name;\r\n }\r\n const plotAnnotation = plot.datacite;\r\n const filePathPrefix = `${this.envVars.API_LOCATION}/s3-resource/${this.datasetId}/${this.datasetVersion}/files/`;\r\n const sourceUrl = filePathPrefix + plot.dataset.path;\r\n\r\n const metadata = JSON.parse(\r\n plotAnnotation.supplemental_json_metadata.description\r\n );\r\n\r\n let supplementalData = [];\r\n if (plotAnnotation.isDescribedBy) {\r\n supplementalData.push({\r\n url: filePathPrefix + plotAnnotation.isDescribedBy.path\r\n });\r\n }\r\n\r\n const resource = {\r\n dataSource: {url: sourceUrl},\r\n metadata,\r\n supplementalData\r\n }\r\n\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n title: \"View plot\",\r\n type: \"Plot\",\r\n discoverId: this.discoverId,\r\n version: this.datasetVersion,\r\n };\r\n this.items['Plots'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Plot\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype\r\n });\r\n });\r\n }\r\n },\r\n createScaffoldItems: function () {\r\n if (this.entry.scaffolds) {\r\n window.entry = this.entry\r\n let index = 0;\r\n this.entry.scaffolds.forEach((scaffold, i) => {\r\n const filePath = scaffold.dataset.path;\r\n const id = scaffold.identifier;\r\n const thumbnail = this.getThumbnailForScaffold(\r\n scaffold,\r\n this.entry.scaffoldViews,\r\n this.entry.thumbnails,\r\n index\r\n );\r\n let mimetype = '';\r\n let thumbnailURL = undefined;\r\n if (thumbnail) {\r\n thumbnailURL = this.getImageURLFromS3(this.envVars.API_LOCATION, {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n file_path: thumbnail.dataset.path,\r\n });\r\n mimetype = thumbnail.mimetype.name;\r\n }\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${filePath}`,\r\n title: \"View 3D scaffold\",\r\n type: \"Scaffold\",\r\n discoverId: this.datasetId,\r\n apiLocation: this.envVars.API_LOCATION,\r\n version: this.datasetVersion,\r\n banner: this.datasetThumbnail,\r\n contextCardUrl: this.getContextCardUrl(i)\r\n };\r\n this.items['Scaffolds'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Scaffold\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype\r\n });\r\n });\r\n }\r\n },\r\n createSegmentationItems: function () {\r\n if (this.entry.segmentation) {\r\n this.entry.segmentation.forEach((segmentation) => {\r\n const id = segmentation.id;\r\n let filePath = segmentation.dataset.path;\r\n filePath = filePath.replaceAll(\" \", \"_\");\r\n filePath = filePath.replaceAll(\",\", \"_\");\r\n const prefix = this.envVars.NL_LINK_PREFIX;\r\n const resource = {\r\n share_link: `${prefix}/dataviewer?datasetId=${this.datasetId}&version=${this.datasetVersion}&path=files/${filePath}`,\r\n };\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n datasetId: this.datasetId,\r\n title: \"View segmentation\",\r\n type: \"Segmentation\",\r\n };\r\n const thumbnailURL = this.getSegmentationThumbnailURL(\r\n this.envVars.API_LOCATION,\r\n {\r\n id,\r\n datasetId: this.datasetId,\r\n datasetVersion: this.datasetVersion,\r\n segmentationFilePath: filePath,\r\n }\r\n );\r\n this.items['Segmentations'].push({\r\n id,\r\n title: baseName(filePath),\r\n type: \"Segmentation\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n hideType: true,\r\n mimetype: 'image/png',\r\n });\r\n });\r\n }\r\n },\r\n createSimulationItems: function () {\r\n if (this.entry.simulation && this.entry.simulation.length > 0) {\r\n let action = {\r\n label: undefined,\r\n apiLocation: this.envVars.API_LOCATION,\r\n version: this.datasetVersion,\r\n title: \"View simulation\",\r\n type: \"Simulation\",\r\n name: this.entry.name,\r\n description: this.entry.description,\r\n discoverId: this.datasetId,\r\n dataset: `${this.envVars.ROOT_URL}/datasets/${this.datasetId}?type=dataset`\r\n };\r\n this.items['Simulations'].push({\r\n id: \"simulation\",\r\n title: \" \",\r\n type: \"Simulation\",\r\n hideType: true,\r\n hideTitle: true,\r\n userData: action,\r\n });\r\n }\r\n },\r\n createVideoItems: function () {\r\n if (this.entry.videos) {\r\n this.entry.videos.forEach((video) => {\r\n const filePath = this.getS3FilePath(\r\n this.datasetId,\r\n this.datasetVersion,\r\n video.dataset.path\r\n );\r\n const linkUrl = `${this.envVars.ROOT_URL}/datasets/videoviewer?dataset_version=${this.datasetVersion}&dataset_id=${this.datasetId}&file_path=${filePath}&mimetype=${video.mimetype.name}`;\r\n this.items['Videos'].push({\r\n title: video.name,\r\n type: \"Video\",\r\n thumbnail: this.defaultVideoImg,\r\n hideType: true,\r\n link: linkUrl,\r\n });\r\n });\r\n }\r\n },\r\n onResize: function () {\r\n this.maxWidth = this.$el.clientWidth;\r\n // this.$emit('resize', this.$el.clientWidth)\r\n },\r\n getContextCardUrl(scaffoldIndex){\r\n if(!this.entry.contextualInformation || this.entry.contextualInformation.length == 0){\r\n return undefined\r\n } else {\r\n // The line below checks if there is a context file for each scaffold. If there is not, we use the first context card for each scaffold.\r\n let contextIndex = this.entry['abi-contextual-information'].length == this.entry.scaffolds.length ? scaffoldIndex : 0\r\n return `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${this.entry.contextualInformation[contextIndex]}`\r\n }\r\n }\r\n },\r\n computed: {\r\n galleryItems() {\r\n if (this.resetIndex) {\r\n this.$refs.gallery.indicatorClicked(0);\r\n }\r\n let items = [...this.items[\"Dataset\"]];\r\n if (this.category === \"All\") {\r\n for (const [key, value] of Object.entries(this.items)) {\r\n if (key !== \"Dataset\")\r\n items = items.concat(value);\r\n }\r\n return items;\r\n }\r\n else\r\n return this.items[this.category];\r\n },\r\n },\r\n created: function () {\r\n this.createSciCurnchItems();\r\n },\r\n watch: {\r\n category: function() {\r\n this.resetIndex = true;\r\n },\r\n galleryItems: function() {\r\n this.resetIndex = false;\r\n },\r\n datasetBiolucida: {\r\n deep: true,\r\n immediate: true,\r\n handler: function (biolucidaData) {\r\n let items = [];\r\n if (\"dataset_images\" in biolucidaData) {\r\n items.push(\r\n ...Array.from(biolucidaData.dataset_images, (dataset_image) => {\r\n const thumbnailURL = this.getThumbnailURLFromBiolucida(\r\n this.envVars.API_LOCATION,\r\n {\r\n id: dataset_image.image_id,\r\n }\r\n );\r\n const resource = {\r\n share_link: dataset_image.share_link,\r\n id: dataset_image.image_id,\r\n itemId: dataset_image.sourcepkg_id,\r\n };\r\n let action = {\r\n label: capitalise(this.label),\r\n resource: resource,\r\n datasetId: this.datasetId,\r\n title: \"View image\",\r\n name: capitalise(this.label),\r\n type: \"Biolucida\",\r\n };\r\n return {\r\n id: dataset_image.image_id,\r\n title: `Biolucida Image`,\r\n type: \"Image\",\r\n thumbnail: thumbnailURL,\r\n userData: action,\r\n mimetype: 'image/png',\r\n hideType: true,\r\n };\r\n })\r\n );\r\n }\r\n this.items['Biolucida Images'] = items;\r\n },\r\n },\r\n },\r\n mounted() {\r\n this.ro = new ResizeObserver(this.onResize).observe(this.$el);\r\n },\r\n destroyed() {\r\n delete this.ro;\r\n },\r\n};\r\n</script>\r\n\r\n<style scoped>\r\n.full-size {\r\n height: 100%;\r\n width: 244px;\r\n}\r\n\r\n.key-image-span.active {\r\n transform: scale(1.16);\r\n border: 4px #8300bf solid;\r\n}\r\n\r\n.key-image-span {\r\n display: flex;\r\n position: relative;\r\n}\r\n\r\n.overlay {\r\n position: absolute;\r\n right: 5px;\r\n top: 5px;\r\n width: 1.61em;\r\n height: 1em;\r\n border-radius: 3px;\r\n opacity: 0.8;\r\n}\r\n\r\nimg {\r\n vertical-align: bottom;\r\n}\r\n\r\na.prev,\r\na.next {\r\n display: flex;\r\n font-size: 3em;\r\n}\r\n\r\na.prev:not(.underline),\r\na.next:not(.underline) {\r\n text-decoration: none;\r\n}\r\n\r\na.prev {\r\n justify-content: flex-start;\r\n}\r\n\r\na.next {\r\n justify-content: flex-end;\r\n}\r\n\r\n.standard-gallery {\r\n display: flex;\r\n flex-wrap: nowrap;\r\n justify-content: space-around;\r\n align-items: center;\r\n}\r\n\r\n.image-line {\r\n display: flex;\r\n margin-top: 1%;\r\n margin-bottom: 1%;\r\n flex-grow: 1;\r\n justify-content: space-between;\r\n}\r\n.disabled {\r\n opacity: 0.2;\r\n cursor: default;\r\n}\r\n\r\n.rectangle {\r\n height: 1em;\r\n width: 2em;\r\n border-radius: 3px;\r\n background-color: #555;\r\n}\r\n\r\n.full-size >>> .el-card {\r\n border: 0px;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ImageGallery.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ImageGallery.vue?vue&type=template&id=c336c3ca&scoped=true&\"\nimport script from \"./ImageGallery.vue?vue&type=script&lang=js&\"\nexport * from \"./ImageGallery.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ImageGallery.vue?vue&type=style&index=0&id=c336c3ca&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"c336c3ca\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div class=\"dataset-card-container\" ref=\"container\">\r\n <div class=\"dataset-card\" ref=\"card\">\r\n <div class=\"seperator-path\"></div>\r\n <div v-loading=\"loading\" class=\"card\" >\r\n <span class=\"card-left\">\r\n <image-gallery v-if=\"!loading && discoverId\" \r\n :datasetId=\"discoverId\"\r\n :datasetVersion=\"version\"\r\n :entry=\"entry\"\r\n :envVars=\"envVars\"\r\n :label=\"label\"\r\n :datasetThumbnail=\"thumbnail\"\r\n :dataset-biolucida=\"biolucidaData\"\r\n :category=\"currentCategory\"\r\n @card-clicked=\"galleryClicked\"\r\n />\r\n </span>\r\n <div class=\"card-right\" >\r\n <div class=\"title\" @click=\"cardClicked\">{{entry.name}}</div>\r\n <div class=\"details\">{{contributors}} {{entry.publishDate ? `(${publishYear})` : ''}}</div>\r\n <div class=\"details\">{{samples}}</div>\r\n <div v-if=\"!entry.detailsReady\" class=\"details loading-icon\" v-loading=\"!entry.detailsReady\"></div>\r\n <div>\r\n <el-button v-if=\"entry.simulation\" @click=\"openRepository\" size=\"mini\" class=\"button\" icon=\"el-icon-view\">View repository</el-button>\r\n </div>\r\n <div class=\"badges-container\">\r\n <badges-group\r\n :entry=\"entry\"\r\n :dataset-biolucida=\"biolucidaData\"\r\n @categoryChanged=\"categoryChanged\"\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport BadgesGroup from \"./BadgesGroup.vue\";\r\nimport { Button, Icon } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport EventBus from \"./EventBus\"\r\nimport speciesMap from \"./species-map\";\r\nimport ImageGallery from \"./ImageGallery.vue\";\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\nVue.use(Icon);\r\n\r\nexport default {\r\n name: \"DatasetCard\",\r\n components: { BadgesGroup, ImageGallery },\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n },\r\n data: function () {\r\n return {\r\n thumbnail: require('@/../assets/missing-image.svg'),\r\n dataLocation: this.entry.doi,\r\n discoverId: undefined,\r\n loading: true,\r\n version: 1,\r\n lastDoi: undefined,\r\n biolucidaData: undefined,\r\n currentCategory: \"All\"\r\n };\r\n },\r\n computed: {\r\n contributors: function() {\r\n let text = \"\";\r\n if (this.entry.contributors) {\r\n if (this.entry.contributors.length === 1) {\r\n text = this.lastName(this.entry.contributors[0].name);\r\n } else if (this.entry.contributors.length === 2) {\r\n text = this.lastName(this.entry.contributors[0].name) + \" & \" + this.lastName(this.entry.contributors[1].name);\r\n } else if (this.entry.contributors.length > 2) {\r\n text = this.lastName(this.entry.contributors[0].name) + \" et al.\";\r\n }\r\n }\r\n return text;\r\n },\r\n samples: function() {\r\n let text = \"\";\r\n if (this.entry.species) {\r\n if (speciesMap[this.entry.species[0].toLowerCase()]){\r\n text = `${speciesMap[this.entry.species[0].toLowerCase()]}`;\r\n } else {\r\n text = `${this.entry.species}`;\r\n }\r\n }\r\n if (this.entry.numberSamples > 0) {\r\n text += \" (\";\r\n if (this.entry.numberSamples === 1) {\r\n text += `${this.entry.numberSamples} sample`;\r\n } else if (this.entry.numberSamples > 1) {\r\n text += `${this.entry.numberSamples} samples`;\r\n }\r\n if (this.entry.numberSubjects === 1) {\r\n text += ` from ${this.entry.numberSubjects} subject`;\r\n } else if (this.entry.numberSamples > 1) {\r\n text += ` from ${this.entry.numberSubjects} subjects`;\r\n }\r\n text += \")\";\r\n }\r\n\r\n return text;\r\n },\r\n label: function(){\r\n return this.entry.organs ? this.entry.organs[0] : this.entry.name\r\n },\r\n publishYear: function() {\r\n return this.entry.publishDate.split('-')[0]\r\n }\r\n },\r\n methods: {\r\n cardClicked: function(){\r\n this.openDataset()\r\n },\r\n categoryChanged: function(name) {\r\n this.currentCategory = name;\r\n },\r\n galleryClicked: function(payload) {\r\n this.propogateCardAction(payload)\r\n },\r\n openDataset: function(){\r\n window.open(this.dataLocation,'_blank');\r\n },\r\n openRepository: function() {\r\n let apiLocation = this.envVars.API_LOCATION;\r\n this.entry.additionalLinks.forEach(function(el) {\r\n if (el.description == \"Repository\") {\r\n let xmlhttp = new XMLHttpRequest();\r\n xmlhttp.open(\"POST\", apiLocation + \"/pmr_latest_exposure\", true);\r\n xmlhttp.setRequestHeader(\"Content-type\", \"application/json\");\r\n xmlhttp.onreadystatechange = () => {\r\n if (xmlhttp.readyState === 4) {\r\n let url = \"\";\r\n if (xmlhttp.status === 200) {\r\n url = JSON.parse(xmlhttp.responseText)[\"url\"];\r\n }\r\n if (url === \"\") {\r\n url = el.uri;\r\n }\r\n window.open(url,'_blank');\r\n }\r\n };\r\n xmlhttp.send(JSON.stringify({workspace_url: el.uri}));\r\n }\r\n });\r\n },\r\n propogateCardAction: function(action){\r\n EventBus.$emit(\"PopoverActionClick\", action)\r\n this.$emit('contextUpdate', action)\r\n },\r\n splitDOI: function(doi){\r\n return [doi.split('/')[doi.split('/').length-2], doi.split('/')[doi.split('/').length-1]]\r\n },\r\n getBanner: function () {\r\n // Only load banner if card has changed\r\n if (this.lastDoi !== this.entry.doi) {\r\n this.lastDoi = this.entry.doi\r\n this.loading = true\r\n let doi = this.splitDOI(this.entry.doi)\r\n fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${doi[0]}/${doi[1]}`)\r\n .then((response) =>{\r\n if (!response.ok){\r\n throw Error(response.statusText)\r\n } else {\r\n return response.json()\r\n }\r\n })\r\n .then((data) => {\r\n this.thumbnail = data.banner\r\n this.discoverId = data.id\r\n this.version = data.version\r\n this.dataLocation = `https://sparc.science/datasets/${data.id}?type=dataset`\r\n this.getBiolucidaInfo(this.discoverId)\r\n this.loading = false\r\n })\r\n .catch(() => {\r\n //set defaults if we hit an error\r\n this.thumbnail = require('@/../assets/missing-image.svg')\r\n this.discoverId = Number(this.entry.datasetId)\r\n this.loading = false\r\n });\r\n }\r\n\r\n },\r\n lastName: function(fullName){\r\n return fullName.split(',')[0]\r\n },\r\n getBiolucidaInfo: function(id) {\r\n let apiLocation = this.envVars.API_LOCATION;\r\n let endpoint = apiLocation + \"image_search/\" + id;\r\n // Add parameters if we are sent them\r\n fetch(endpoint)\r\n .then(response => response.json())\r\n .then(data => {\r\n if (data.status == \"success\")\r\n this.biolucidaData = data;\r\n });\r\n }\r\n },\r\n created: function() {\r\n this.getBanner()\r\n },\r\n watch: {\r\n // currently not using card overflow\r\n 'entry.description': function() { // watch it\r\n this.getBanner()\r\n }\r\n },\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.dataset-card {\r\n padding-left: 16px;\r\n position: relative;\r\n min-height:17rem;\r\n}\r\n\r\n.title {\r\n padding-bottom: 0.75rem;\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: bold;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: 1.5;\r\n letter-spacing: 1.05px;\r\n color: #484848;\r\n cursor: pointer;\r\n}\r\n.card {\r\n padding-top: 18px;\r\n position: relative;\r\n display: flex;\r\n}\r\n\r\n.card-left{\r\n flex: 1\r\n}\r\n\r\n.card-right {\r\n flex: 1.3;\r\n padding-left: 6px;\r\n}\r\n\r\n.button{\r\n z-index: 10;\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: normal;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: normal;\r\n letter-spacing: normal;\r\n background-color: #8300bf;\r\n border: #8300bf;\r\n color: white;\r\n cursor: pointer;\r\n margin-top: 8px;\r\n}\r\n\r\n.button:hover {\r\n background-color: #8300bf;\r\n color: white;\r\n}\r\n\r\n.banner-img {\r\n width: 128px;\r\n height: 128px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.25);\r\n background-color: #ffffff;\r\n cursor: pointer;\r\n}\r\n.details{\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-weight: normal;\r\n font-stretch: normal;\r\n font-style: normal;\r\n line-height: 1.5;\r\n letter-spacing: 1.05px;\r\n color: #484848;\r\n}\r\n\r\n.badges-container {\r\n margin-top:0.75rem;\r\n}\r\n\r\n.loading-icon {\r\n z-index: 20;\r\n width: 40px;\r\n height: 40px;\r\n left: 80px;\r\n}\r\n\r\n.loading-icon >>> .el-loading-mask {\r\n background-color: rgba(117, 190, 218, 0.0) !important;\r\n}\r\n\r\n.loading-icon >>> .el-loading-spinner .path {\r\n stroke: #8300bf;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DatasetCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./DatasetCard.vue?vue&type=template&id=bf193158&scoped=true&\"\nimport script from \"./DatasetCard.vue?vue&type=script&lang=js&\"\nexport * from \"./DatasetCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./DatasetCard.vue?vue&type=style&index=0&id=bf193158&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"bf193158\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{ref:\"container\",staticClass:\"context-card-container\"},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showContextCard),expression:\"showContextCard\"}]},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.showDetails),expression:\"showDetails\"}],staticClass:\"hide\",on:{\"click\":function($event){_vm.showDetails = !_vm.showDetails}}},[_vm._v(\"Hide information\"),_c('i',{staticClass:\"el-icon-arrow-up\"})]),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(!_vm.showDetails),expression:\"!showDetails\"}],staticClass:\"hide\",on:{\"click\":function($event){_vm.showDetails = !_vm.showDetails}}},[_vm._v(\"Show information\"),_c('i',{staticClass:\"el-icon-arrow-down\"})]),(_vm.showDetails && Object.keys(_vm.contextData).length !== 0)?_c('el-card',{directives:[{name:\"loading\",rawName:\"v-loading\",value:(_vm.loading),expression:\"loading\"}],staticClass:\"context-card\"},[_c('div',{staticClass:\"card-left\"},[_c('img',{staticClass:\"context-image\",attrs:{\"src\":_vm.banner}})]),_c('div',{staticClass:\"card-right scrollbar\"},[_c('div',{staticClass:\"title\"},[_vm._v(_vm._s(_vm.contextData.heading))]),_c('div',{domProps:{\"innerHTML\":_vm._s(_vm.parseMarkdown(_vm.contextData.description))}}),_c('br'),(!_vm.samplesUnderViews)?[(_vm.contextData.views && _vm.contextData.views.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Scaffold Views\")]):_vm._e(),_vm._l((_vm.contextData.views),function(view,i){return [_c('div',{key:i+'_1',staticClass:\"context-card-view\",on:{\"click\":function($event){return _vm.openViewFile(view)}}},[_c('img',{staticClass:\"view-image\",attrs:{\"src\":_vm.getFileFromPath(view.thumbnail)}}),_c('div',{staticClass:\"view-description\"},[_vm._v(_vm._s(view.description))])]),_c('div',{key:i,staticClass:\"padding\"})]}),_c('div',{staticStyle:{\"margin-bottom\":\"16px\"}}),(_vm.contextData.samples && _vm.contextData.samples.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Samples on Scaffold\")]):_vm._e(),_vm._l((_vm.contextData.samples),function(sample,i){return [_c('span',{key:i+'_3',staticClass:\"context-card-item cursor-pointer\",on:{\"click\":function($event){return _vm.toggleSampleDetails(i)}}},[_c('div',{key:i+'_6',staticStyle:{\"display\":\"flex\"}},[(sample.color)?_c('div',{staticClass:\"color-box\",style:('background-color:'+ sample.color)}):(sample.thumbnail)?_c('img',{staticClass:\"key-image\",attrs:{\"src\":_vm.getFileFromPath(sample.thumbnail)}}):_vm._e(),_vm._v(\" \"+_vm._s(sample.heading)+\" \"),_c('i',{staticClass:\"el-icon-warning-outline info\"})])]),(_vm.sampleDetails[i])?_c('div',{key:i+'_4',domProps:{\"innerHTML\":_vm._s(sample.description)}}):_vm._e(),(_vm.sampleDetails[i] && sample.path)?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(sample),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i+'_2',staticClass:\"padding\"})]})]:[(_vm.contextData.views && _vm.contextData.views.length > 0)?_c('div',{staticClass:\"subtitle\"},[_vm._v(\"Scaffold Views\")]):_vm._e(),_vm._l((_vm.contextData.views),function(view,i){return [_c('span',{key:i+'_1',staticClass:\"context-card-view\",on:{\"click\":function($event){return _vm.viewClicked(view, i)}}},[_c('img',{staticClass:\"view-image\",attrs:{\"src\":_vm.getFileFromPath(view.thumbnail)}}),_c('div',{staticClass:\"view-description\"},[_vm._v(_vm._s(view.description)),_c('i',{staticClass:\"el-icon-warning-outline info\"})])]),(_vm.sampleDetails[i])?_c('div',{key:i+'_2',domProps:{\"innerHTML\":_vm._s(_vm.samplesMatching(view.id).description)}}):_vm._e(),(_vm.sampleDetails[i] && _vm.samplesMatching(view.id).path)?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(_vm.samplesMatching(view.id)),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i,staticClass:\"padding\"}),(_vm.sampleDetails[i])?_c('div',{key:i+'_6',staticClass:\"padding\"}):_vm._e()]})]],2)]):_vm._e()],1)])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","export default {\r\n\r\n}\r\n// //Uncomment the code below to add in hardcoded data\r\n// export default {\r\n// 77: {\r\n// \"description\": \"This dataset contains single cell scale anatomical map of the rat intrinsic cardiac nervous system (ICNS) across four male and three female hearts. These cell clusters can be seen by the yellow data points on the image as well as spherical markers on the 3D heart scaffold. The dataset provides an integrative framework to visualise the spatial distribution of ICNS across different hearts.\",\r\n// \"heading\": \"Mapped ICN samples\",\r\n// \"id\": \"sparc.science.context_data\",\r\n// \"samples\": [\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Spatial location of isolated ICNS mapped onto a generic heart scaffold\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"ICNS from subject M54-8\",\r\n// \"id\": \"Sample 1\",\r\n// \"path\": \"\",\r\n// \"view\": \"View 1\",\r\n// \"color\": \"#FFFF00\",\r\n// \"thumbnail\": \"https://raw.githubusercontent.com/ABI-Software/map-sidebar/main/assets/temp-pics/orange.png\"\r\n// },\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Spatial location of isolated ICNS mapped onto a generic heart scaffold\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"ICNS from subject M54-5\",\r\n// \"id\": \"Sample 2\",\r\n// \"path\": \"\",\r\n// \"view\": \"View 2\",\r\n// \"color\": \"#FFA500\",\r\n// \"thumbnail\": \"https://raw.githubusercontent.com/ABI-Software/map-sidebar/main/assets/temp-pics/teal.png\"\r\n// }\r\n// ],\r\n// \"version\": \"0.1.0\",\r\n// },\r\n// 221: {\r\n// \"description\": \"3D digital tracings of the enteric plexus obtained from seven subjects (M11, M16, M162, M163, M164, M168) are mapped randomly on mouse proximal colon. The data depicts individual neural wiring patterns in enteric microcircuits, and revealed both neuron and fiber units wired in a complex organization.\",\r\n// \"heading\": \"Digital tracings of enteric plexus\",\r\n// \"id\": \"sparc.science.context_data\",\r\n// \"samples\": [\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"Neuronal soma and fibers in a myenteric ganglion in this subject are annotated into the following groups to highlight their interactions:\\n\\nNeuron1,2,3 Connex: Connections between 3 neurons and cross-ganglionic fibers\\n\\nNeuron4_Connex: A small neuron contacts fibers passing the ganglion\\n\\nNeuron5: Multiple projections of a neuron in an myenteric ganglion\\n\\nNeuron5,3,7 Connex: Connections between 3 neurons, nerve fibers, IGNEx (complex type of intraganglionic nerve endings) and fibers in the circular muscles.\\n\\nNeuron8,9,10 Connex: Connections of 3 neurons with each other and with long passing fibers. \\n\\nIntraganglionic Nerve Ending (IGNE): Digital traces of neurites consist of complex intraganglionic nerve endings. The blue fiber has branched terminals, more likely the afferent nerve endings; the violet and cyan terminals also interweave into the fiber nest; the orange, pink and peach fibers and one process of the neuron cross the IGNE to make 1-2 conjunctions. \\n\",\r\n// \"doi\": \"\",\r\n// \"heading\": \"Digital tracing for subject M11\",\r\n// \"id\": \"Sample 1\",\r\n// \"path\": \"files/derivative/sub-M11/sam-pCm11/digital-traces/pC PHPS XFP M11 20XZ 180425_180713_2_NL_20.xml\",\r\n// \"view\": \"View 1\"\r\n// },\r\n// {\r\n// \"annotation\": \"\",\r\n// \"description\": \"This digital trace demonstrates some types of wiring. A long process of the green neuron terminates in the intraganglionic nerve endings (IGNE) while in contact with a nerve fiber (cyan), soma of a neuron (peach) and processes of 3 neurons (magenta, yellow and red). Two neurons and one fiber are traced to an IGNE. \",\r\n// \"doi\": \"\",\r\n// \"heading\": \"Digital tracing for subject M16\",\r\n// \"id\": \"Sample 2\",\r\n// \"path\": \"files/derivative/sub-M16/sam-pCm16/digital-traces/pC PHPS XFP M16 20XZ 180425_180524.xml\",\r\n// \"view\": \"View 2\"\r\n// }\r\n// ],\r\n// \"version\": \"0.1.0\",\r\n// \"views\": [\r\n// {\r\n// \"annotation\": \"--\",\r\n// \"description\": \"Digital tracing of neurons for subject M11.\",\r\n// \"id\": \"View 1\",\r\n// \"path\": \"files/derivative/Scaffolds/M11_view.json\",\r\n// \"sample\": \"Sample 1\",\r\n// \"thumbnail\": \"https://api.sparc.science/s3-resource/221/2/files/derivative/Scaffolds/M11_thumbnail.jpeg\"\r\n// },\r\n// {\r\n// \"annotation\": \"--\",\r\n// \"description\": \"Digital tracing of neurons for subject M16.\",\r\n// \"id\": \"View 2\",\r\n// \"path\": \"files/derivative/Scaffolds/M16_view.json\",\r\n// \"sample\": \"Sample 2\",\r\n// \"thumbnail\": \"https://api.sparc.science/s3-resource/221/2/files/derivative/Scaffolds/M16_thumbnail.jpeg\"\r\n// }\r\n// ]\r\n// }\r\n// }","<template>\r\n <div class=\"context-card-container\" ref=\"container\">\r\n <div v-show=\"showContextCard\">\r\n <div v-show=\"showDetails\" class=\"hide\" @click=\"showDetails = !showDetails\">Hide information<i class=\"el-icon-arrow-up\"></i></div>\r\n <div v-show=\"!showDetails\" class=\"hide\" @click=\"showDetails = !showDetails\">Show information<i class=\"el-icon-arrow-down\"></i></div>\r\n <el-card v-if=\"showDetails && Object.keys(contextData).length !== 0\" v-loading=\"loading\" class=\"context-card\" >\r\n <div class=\"card-left\">\r\n <img :src=\"banner\" class=\"context-image\">\r\n </div>\r\n <div class=\"card-right scrollbar\">\r\n <div class=\"title\">{{contextData.heading}}</div>\r\n <div v-html=\"parseMarkdown(contextData.description)\"/>\r\n <br/>\r\n\r\n <!-- Show sampeles and views seperately if they do not match -->\r\n <template v-if=\"!samplesUnderViews\">\r\n <div v-if=\"contextData.views && contextData.views.length > 0\" class=\"subtitle\">Scaffold Views</div>\r\n <template v-for=\"(view, i) in contextData.views\">\r\n <div v-bind:key=\"i+'_1'\" @click=\"openViewFile(view)\" class=\"context-card-view\">\r\n <img class=\"view-image\" :src=\"getFileFromPath(view.thumbnail)\"> \r\n <div class=\"view-description\">{{view.description}}</div>\r\n </div>\r\n <div v-bind:key=\"i\" class=\"padding\"/>\r\n </template>\r\n <div style=\"margin-bottom: 16px;\"/>\r\n <div v-if=\"contextData.samples && contextData.samples.length > 0\" class=\"subtitle\">Samples on Scaffold</div>\r\n <template v-for=\"(sample, i) in contextData.samples\">\r\n <span v-bind:key=\"i+'_3'\" class=\"context-card-item cursor-pointer\" @click=\"toggleSampleDetails(i)\">\r\n <div v-bind:key=\"i+'_6'\" style=\"display: flex\">\r\n <div v-if=\"sample.color\" class=\"color-box\" :style=\"'background-color:'+ sample.color\"></div>\r\n <img class=\"key-image\" v-else-if=\"sample.thumbnail\" :src=\"getFileFromPath(sample.thumbnail)\">\r\n {{sample.heading}}\r\n <i class=\"el-icon-warning-outline info\"></i>\r\n </div>\r\n </span>\r\n <div v-bind:key=\"i+'_4'\" v-if=\"sampleDetails[i]\" v-html=\"sample.description\"/>\r\n <a v-bind:key=\"i+'_5'\" v-if=\"sampleDetails[i] && sample.path\" :href=\"generateFileLink(sample)\" target=\"_blank\">View Source</a>\r\n <div v-bind:key=\"i+'_2'\" class=\"padding\"/>\r\n </template>\r\n </template>\r\n\r\n <!-- Show samples under views if the ids match -->\r\n <template v-else>\r\n <div v-if=\"contextData.views && contextData.views.length > 0\" class=\"subtitle\">Scaffold Views</div>\r\n <template v-for=\"(view, i) in contextData.views\">\r\n <span :key=\"i+'_1'\" @click=\"viewClicked(view, i)\" class=\"context-card-view\">\r\n <img class=\"view-image\" :src=\"getFileFromPath(view.thumbnail)\"/> \r\n <div class=\"view-description\">{{view.description}}<i class=\"el-icon-warning-outline info\"></i> </div>\r\n </span>\r\n <div v-if=\"sampleDetails[i]\" v-html=\"samplesMatching(view.id).description\" :key=\"i+'_2'\"/>\r\n <a v-bind:key=\"i+'_5'\" v-if=\"sampleDetails[i] && samplesMatching(view.id).path\" :href=\"generateFileLink(samplesMatching(view.id))\" target=\"_blank\">View Source</a>\r\n <div :key=\"i\" class=\"padding\"/>\r\n\r\n <!-- Extra padding if sample details is open -->\r\n <div :key=\"i+'_6'\" v-if=\"sampleDetails[i]\" class=\"padding\"/>\r\n </template>\r\n </template>\r\n </div>\r\n </el-card>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport { Link, Icon, Card, Button, Select, Input } from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport EventBus from \"./EventBus\"\r\nimport hardcoded_info from './hardcoded-context-info'\r\n\r\nimport { marked } from 'marked'\r\nimport xss from 'xss'\r\n\r\nlocale.use(lang);\r\nVue.use(Link);\r\nVue.use(Icon);\r\nVue.use(Card);\r\nVue.use(Button);\r\nVue.use(Select);\r\nVue.use(Input);\r\n\r\nconst addFilesToPathIfMissing = function(path){\r\n if (!path.includes('files')){\r\n return 'files/' + path\r\n } else {\r\n return path\r\n }\r\n}\r\n\r\nconst convertBackslashToForwardSlash = function(path){\r\n path = path.replaceAll('\\\\','/')\r\n path = path.replaceAll('\\\\\\\\', '/')\r\n return path\r\n}\r\n\r\n// const switchPathToDirectory = function(path){\r\n// let newPath = path.split('/')\r\n// newPath.pop()\r\n// return newPath.join('/')\r\n// }\r\n\r\n\r\nexport default {\r\n name: \"contextCard\",\r\n props: {\r\n /**\r\n * Object containing information for\r\n * the required viewing.\r\n */\r\n entry: Object,\r\n envVars: Object,\r\n },\r\n data: function () {\r\n return {\r\n contextData: {},\r\n showDetails: true,\r\n showContextCard: true,\r\n sampleDetails: {},\r\n loading: false\r\n };\r\n },\r\n watch: {\r\n 'entry.contextCardUrl': {\r\n handler(val){\r\n if (val) {\r\n // used for hardcoding data\r\n if (val === true){\r\n this.contextData = hardcoded_info[this.entry.discoverId]\r\n } else {\r\n this.getContextFile(val)\r\n this.showContextCard = true\r\n }\r\n } else {\r\n this.showContextCard = false\r\n }\r\n },\r\n immediate: true\r\n }\r\n },\r\n computed: {\r\n samplesUnderViews: function(){\r\n if (this.contextData){\r\n if (this.contextData.samplesUnderViews){\r\n return true\r\n } else {\r\n let viewId = this.contextData.views.map(v=>v.id)\r\n let samplesView = this.contextData.samples.map(s=>s.view)\r\n\r\n // get matching values\r\n let matching = viewId.filter(v=>samplesView.includes(v))\r\n\r\n // check all arrays have the same length (which means all values are in all three)\r\n if ( viewId.length === matching.length && matching.length === samplesView.length){\r\n return true\r\n }\r\n return false\r\n }\r\n }\r\n else return false\r\n },\r\n banner: function(){\r\n if (this.contextData.banner){\r\n return this.getFileFromPath(this.contextData.banner) \r\n } else if (this.contextData && this.contextData.views && this.contextData.views.length > 0) {\r\n if(this.contextData.views[0].thumbnail){\r\n return this.getFileFromPath(this.contextData.views[0].thumbnail)\r\n }\r\n } \r\n return this.entry.banner\r\n }\r\n },\r\n methods: {\r\n samplesMatching: function(viewId){\r\n if (this.contextData && this.contextData.samples){\r\n return this.contextData.samples.filter(s=>s.view == viewId)[0]\r\n }\r\n else return []\r\n },\r\n viewClicked: function(view, i){\r\n this.openViewFile(view) \r\n this.toggleSampleDetails(i)\r\n },\r\n getContextFile: function (contextFileUrl) {\r\n this.loading = true\r\n fetch(contextFileUrl)\r\n .then((response) =>{\r\n if (!response.ok){\r\n throw Error(response.statusText)\r\n } else {\r\n return response.json()\r\n }\r\n })\r\n .then((data) => {\r\n this.contextData = data\r\n this.loading = false\r\n this.addDiscoverIdsToContextData() \r\n })\r\n .catch((err) => {\r\n //set defaults if we hit an error\r\n console.error('caught error!', err)\r\n this.thumbnail = require('@/../assets/missing-image.svg')\r\n this.discoverId = undefined\r\n this.loading = false\r\n });\r\n },\r\n removeDoubleFilesPath: function(path){\r\n if (path.includes('files/')){\r\n return path.replace('files/', '')\r\n } else if (path.includes('files\\\\')) {\r\n return path.replace('files\\\\', '')\r\n } else {\r\n return path\r\n }\r\n },\r\n toggleSampleDetails: function(i){\r\n if (this.sampleDetails[i] === undefined){\r\n Vue.set(this.sampleDetails, i, true)\r\n } else {\r\n Vue.set(this.sampleDetails, i, !this.sampleDetails[i])\r\n }\r\n },\r\n getFileFromPath: function(path){\r\n // for hardcoded data\r\n if(this.entry.contextCardUrl === true){\r\n return path\r\n }\r\n path = this.removeDoubleFilesPath(path)\r\n return `${this.envVars.API_LOCATION}s3-resource/${this.entry.discoverId}/${this.entry.version}/files/${path}`\r\n },\r\n // This is used later when generateing links to the resource on sparc.science (see generateFileLink)\r\n addDiscoverIdsToContextData(){\r\n this.contextData.samples.forEach((sample, i)=>{\r\n if (sample && sample.doi && sample.doi !== \"\"){\r\n fetch(`${this.envVars.PENNSIEVE_API_LOCATION}/discover/datasets/doi/${this.splitDoiFromUrl(sample.doi)}`)\r\n .then((response) => response.json())\r\n .then((data) => {\r\n this.contextData.samples[i].discoverId = data.id\r\n this.contextData.samples[i].version = data.version\r\n })\r\n } else {\r\n this.contextData.samples[i].discoverId = this.entry.discoverId\r\n this.contextData.samples[i].version = this.entry.version\r\n }\r\n })\r\n },\r\n processPathForUrl(path){\r\n path = convertBackslashToForwardSlash(path)\r\n path = addFilesToPathIfMissing(path)\r\n return encodeURI(path)\r\n },\r\n splitDoiFromUrl(url){\r\n return url.split('https://doi.org/').pop()\r\n },\r\n generateFileLink(sample){\r\n return `${this.envVars.ROOT_URL}/file/${sample.discoverId}/${sample.version}?path=${this.processPathForUrl(sample.path)}`\r\n\r\n },\r\n parseMarkdown(markdown){\r\n return xss(marked.parse(markdown))\r\n },\r\n openViewFile: function(view){\r\n // note that we assume that the view file is in the same directory as the scaffold (viewUrls take relative paths)\r\n this.entry.viewUrl = `${this.envVars.API_LOCATION}s3-resource/${this.entry.discoverId}/${this.entry.version}/${view.path}`\r\n this.entry.type = 'Scaffold View'\r\n EventBus.$emit(\"PopoverActionClick\", this.entry)\r\n }\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.hide{\r\n color: #e4e7ed;\r\n cursor: pointer;\r\n}\r\n\r\n.context-card{\r\n background-color: white;\r\n max-height: 10 50px;\r\n padding: 8px;\r\n font-size: 14px;\r\n margin-bottom: 18px;\r\n position: relative;\r\n border: solid 1px #e4e7ed;\r\n display: flex;\r\n width: 500px;\r\n max-height: 258px;\r\n}\r\n\r\n.context-card-view{\r\n cursor: pointer;\r\n padding-bottom: 8px;\r\n display: flex;\r\n}\r\n\r\n.view-image {\r\n width: 34px;\r\n height: 34px;\r\n flex: 1;\r\n margin-right: 4px;\r\n}\r\n\r\n.view-descriptions {\r\n flex: 8;\r\n}\r\n\r\n.context-card >>> .el-card__body {\r\n padding: 0px;\r\n display: flex;\r\n width: 516px;\r\n}\r\n\r\n.context-image{\r\n width: 250px;\r\n height: auto;\r\n}\r\n\r\n.color-box {\r\n width: 16px;\r\n height: 16px;\r\n border: solid 1px #8300bf;\r\n border-radius: 2px;\r\n margin-right: 8px;\r\n}\r\n\r\n.card-left{\r\n flex: 1\r\n}\r\n\r\n.card-right {\r\n flex: 1.3;\r\n padding-left: 6px;\r\n overflow-y: scroll;\r\n scrollbar-width: thin;\r\n}\r\n\r\n.cursor-pointer {\r\n cursor: pointer;\r\n}\r\n\r\n.info{\r\n transform: rotate(180deg);\r\n color: #8300bf;\r\n margin-left: 8px;\r\n}\r\n\r\n.padding {\r\n padding-bottom: 8px;\r\n}\r\n\r\n.title{\r\n font-weight: bold;\r\n}\r\n\r\n.subtitle{\r\n font-weight: bold;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-track {\r\n border-radius: 10px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar {\r\n width: 12px;\r\n right: -12px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-thumb {\r\n border-radius: 4px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);\r\n background-color: #979797;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContextCard.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./ContextCard.vue?vue&type=template&id=2d699d90&scoped=true&\"\nimport script from \"./ContextCard.vue?vue&type=script&lang=js&\"\nexport * from \"./ContextCard.vue?vue&type=script&lang=js&\"\nimport style0 from \"./ContextCard.vue?vue&type=style&index=0&id=2d699d90&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"2d699d90\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <el-card :body-style=\"bodyStyle\" class=\"content-card\">\r\n <div slot=\"header\" class=\"header\">\r\n <context-card v-if=\"contextCardEntry && contextCardEnabled\" :entry=\"contextCardEntry\" :envVars=\"envVars\"/>\r\n <el-input\r\n class=\"search-input\"\r\n placeholder=\"Search\"\r\n v-model=\"searchInput\"\r\n @keyup.native=\"searchEvent\"\r\n clearable\r\n @clear=\"clearSearchClicked\"\r\n ></el-input>\r\n <el-button class=\"button\" @click=\"searchEvent\">Search</el-button>\r\n </div>\r\n <SearchFilters\r\n class=\"filters\"\r\n ref=\"filtersRef\"\r\n :entry=\"filterEntry\"\r\n :envVars=\"envVars\"\r\n @filterResults=\"filterUpdate\"\r\n @numberPerPage=\"numberPerPageUpdate\"\r\n @loading=\"filtersLoading\"\r\n @cascaderReady=\"cascaderReady\"\r\n ></SearchFilters>\r\n <div class=\"content scrollbar\" v-loading=\"loadingCards\" ref=\"content\">\r\n <div\r\n class=\"error-feedback\"\r\n v-if=\"results.length === 0 && !loadingCards\"\r\n >No results found - Please change your search / filter criteria.</div>\r\n <div v-for=\"result in results\" :key=\"result.doi\" class=\"step-item\">\r\n <DatasetCard :entry=\"result\" :envVars=\"envVars\" @contextUpdate=\"contextCardUpdate\"></DatasetCard>\r\n </div>\r\n <el-pagination\r\n class=\"pagination\"\r\n :current-page.sync=\"page\"\r\n hide-on-single-page\r\n large\r\n layout=\"prev, pager, next\"\r\n :page-size=\"numberPerPage\"\r\n :total=\"numberOfHits\"\r\n @current-change=\"pageChange\"\r\n ></el-pagination>\r\n </div>\r\n </el-card>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport {\r\n Button,\r\n Card,\r\n Drawer,\r\n Icon,\r\n Input,\r\n Loading,\r\n Pagination\r\n} from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport SearchFilters from \"./SearchFilters\";\r\nimport DatasetCard from \"./DatasetCard\";\r\nimport ContextCard from \"./ContextCard.vue\";\r\nimport EventBus from \"./EventBus\"\r\n\r\nimport {AlgoliaClient} from \"../algolia/algolia.js\";\r\nimport {getFilters} from \"../algolia/utils.js\"\r\n\r\nlocale.use(lang);\r\nVue.use(Button);\r\nVue.use(Card);\r\nVue.use(Drawer);\r\nVue.use(Icon);\r\nVue.use(Input);\r\nVue.use(Loading);\r\nVue.use(Pagination);\r\n\r\n// handleErrors: A custom fetch error handler to recieve messages from the server\r\n// even when an error is found\r\nvar handleErrors = async function(response) {\r\n if (!response.ok) {\r\n let parse = await response.json();\r\n if (parse) {\r\n throw new Error(parse.message);\r\n } else {\r\n throw new Error(response);\r\n }\r\n }\r\n return response;\r\n};\r\n\r\nvar initial_state = {\r\n searchInput: \"\",\r\n lastSearch: \"\",\r\n results: [],\r\n numberOfHits: 0,\r\n filter: [],\r\n loadingCards: false,\r\n numberPerPage: 10,\r\n page: 1,\r\n pageModel: 1,\r\n start: 0,\r\n hasSearched: false,\r\n contextCardEntry: undefined,\r\n contextCardEnabled: true,\r\n};\r\n\r\nexport default {\r\n components: { SearchFilters, DatasetCard, ContextCard },\r\n name: \"SideBarContent\",\r\n props: {\r\n visible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n isDrawer: {\r\n type: Boolean,\r\n default: true\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => initial_state\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n },\r\n data: function() {\r\n return {\r\n ...this.entry,\r\n bodyStyle: {\r\n flex: \"1 1 auto\",\r\n \"flex-flow\": \"column\",\r\n display: \"flex\"\r\n },\r\n cascaderIsReady: false,\r\n };\r\n },\r\n computed: {\r\n // This computed property populates filter data's entry object with $data from this sidebar\r\n filterEntry: function() {\r\n return {\r\n numberOfHits: this.numberOfHits,\r\n filterFacets: this.filter\r\n };\r\n }\r\n },\r\n methods: {\r\n contextCardUpdate: function(val){\r\n this.contextCardEntry = val\r\n },\r\n resetSearch: function() {\r\n this.numberOfHits = 0\r\n this.discoverIds = []\r\n this._dois = []\r\n this.results = []\r\n this.loadingCards = false\r\n },\r\n openSearch: function(filter, search='') {\r\n this.searchInput = search;\r\n this.resetPageNavigation();\r\n //Proceed normally if cascader is ready\r\n if (this.cascaderIsReady) {\r\n this.filter = this.$refs.filtersRef.getValidatedFilters(filter);\r\n //Facets provided but cannot find at least one valid\r\n //facet. Tell the users the search is invalid and reset\r\n //facets check boxes.\r\n if ((filter && filter.length > 0) && \r\n (this.filter && this.filter.length === 0)) {\r\n this.$refs.filtersRef.checkShowAllBoxes();\r\n this.resetSearch();\r\n } else if (this.filter) {\r\n this.searchAlgolia(this.filter, search);\r\n this.$refs.filtersRef.setCascader(this.filter);\r\n }\r\n } else {\r\n //cascader is not ready, perform search if no filter is set,\r\n //otherwise waith for cascader to be ready\r\n this.filter = filter;\r\n if (!filter || filter.length == 0) {\r\n this.searchAlgolia(this.filter, search);\r\n }\r\n }\r\n },\r\n addFilter: function(filter) {\r\n if (this.cascaderIsReady) {\r\n this.resetPageNavigation();\r\n if (filter) {\r\n if (this.$refs.filtersRef.addFilter(filter))\r\n this.$refs.filtersRef.initiateSearch();\r\n }\r\n } else {\r\n if (Array.isArray(this.filter)) {\r\n this.filter.push(filter);\r\n } else {\r\n this.filter = [filter];\r\n }\r\n }\r\n },\r\n cascaderReady: function() {\r\n this.cascaderIsReady = true;\r\n this.openSearch(this.filter, this.searchInput);\r\n },\r\n clearSearchClicked: function() {\r\n this.searchInput = \"\";\r\n this.resetPageNavigation();\r\n this.searchAlgolia(this.filters, this.searchInput);\r\n },\r\n searchEvent: function(event = false) {\r\n if (event.keyCode === 13 || event instanceof MouseEvent) {\r\n this.resetPageNavigation();\r\n this.searchAlgolia(this.filters, this.searchInput);\r\n }\r\n },\r\n filterUpdate: function(filters) {\r\n this.filters = [...filters]\r\n this.resetPageNavigation()\r\n this.searchAlgolia(filters, this.searchInput)\r\n this.$emit(\"search-changed\", {\r\n value: filters,\r\n type: \"filter-update\"\r\n });\r\n },\r\n searchAlgolia(filters, query=''){\r\n // Algolia search\r\n this.loadingCards = true\r\n this.algoliaClient.anatomyInSearch(getFilters(filters), query).then(anatomy => {\r\n EventBus.$emit(\"anatomyFound\", anatomy) \r\n })\r\n this.algoliaClient.search(getFilters(filters), query, this.numberPerPage, this.page).then(searchData => {\r\n this.numberOfHits = searchData.total\r\n this.discoverIds = searchData.discoverIds\r\n this._dois = searchData.dois\r\n this.results = searchData.items\r\n this.loadingCards = false\r\n this.scrollToTop()\r\n this.$emit(\"search-changed\", { value: this.searchInput, type: \"query-update\" })\r\n if (this._abortController)\r\n this._abortController.abort()\r\n this._abortController = new AbortController()\r\n const signal = this._abortController.signal\r\n //Search ongoing, let the current flow progress\r\n this.perItemSearch(signal, { count: 0 })\r\n })\r\n },\r\n filtersLoading: function (val) {\r\n this.loadingCards = val;\r\n },\r\n numberPerPageUpdate: function(val) {\r\n this.numberPerPage = val;\r\n this.pageChange(1);\r\n },\r\n pageChange: function(page) {\r\n this.start = (page - 1) * this.numberPerPage;\r\n this.page = page\r\n this.searchAlgolia(this.filters, this.searchInput, this.numberPerPage, this.page)\r\n },\r\n handleMissingData: function(doi) {\r\n let i = this.results.findIndex(res=> res.doi === doi)\r\n if (this.results[i])\r\n this.results[i].detailsReady = true;\r\n },\r\n perItemSearch: function(signal, data) {\r\n //Maximum 10 downloads at once to prevent long waiting time\r\n //between unfinished search and new search\r\n const maxDownloads = 10;\r\n if (maxDownloads > data.count) {\r\n const doi = this._dois.shift();\r\n if (doi) {\r\n data.count++;\r\n this.callSciCrunch(this.envVars.API_LOCATION, {'dois': [doi]}, signal)\r\n .then(result => {\r\n if (result.numberOfHits === 0)\r\n this.handleMissingData(doi);\r\n else\r\n this.resultsProcessing(result);\r\n this.$refs.content.style[\"overflow-y\"] = \"scroll\";\r\n data.count--;\r\n //Async::Download finished, get the next one\r\n this.perItemSearch(signal, data);\r\n })\r\n .catch(result => {\r\n if (result.name !== 'AbortError') {\r\n this.handleMissingData(doi);\r\n data.count--;\r\n //Async::Download not aborted, get the next one\r\n this.perItemSearch(signal, data);\r\n }\r\n });\r\n //Check and make another request until it gets to max downloads\r\n this.perItemSearch(signal, data);\r\n }\r\n }\r\n },\r\n scrollToTop: function() {\r\n if (this.$refs.content) {\r\n this.$refs.content.scroll({ top: 0, behavior: \"smooth\" });\r\n }\r\n },\r\n resetPageNavigation: function() {\r\n this.start = 0;\r\n this.page = 1;\r\n },\r\n resultsProcessing: function(data) {\r\n this.lastSearch = this.searchInput;\r\n\r\n if (data.results.length === 0) {\r\n return;\r\n }\r\n data.results.forEach(element => {\r\n // match the scicrunch result with algolia result\r\n let i = this.results.findIndex(res => element.doi ? element.doi.includes(res.doi) : false )\r\n // Assign scicrunch results to the object\r\n Object.assign(this.results[i], element)\r\n // Assign the attributes that need some processing\r\n Object.assign(this.results[i],{\r\n numberSamples: element.sampleSize\r\n ? parseInt(element.sampleSize)\r\n : 0,\r\n numberSubjects: element.subjectSize\r\n ? parseInt(element.subjectSize)\r\n : 0,\r\n updated: (element.updated && element.updated.length) > 0 ? element.updated[0].timestamp.split(\"T\")[0] : \"\",\r\n url: element.uri[0],\r\n datasetId: element.dataset_identifier,\r\n datasetRevision: element.dataset_revision,\r\n datasetVersion: element.dataset_version,\r\n organs: (element.organs && element.organs.length > 0)\r\n ? [...new Set(element.organs.map(v => v.name))]\r\n : undefined,\r\n species: element.organisms\r\n ? element.organisms[0].species\r\n ? [...new Set(element.organisms.map((v) =>v.species ? v.species.name : null))]\r\n : undefined\r\n : undefined, // This processing only includes each gender once into 'sexes'\r\n scaffolds: element['abi-scaffold-metadata-file'],\r\n thumbnails: element['abi-thumbnail'] ? element['abi-thumbnail']: element['abi-scaffold-thumbnail'],\r\n scaffoldViews: element['abi-scaffold-view-file'],\r\n videos: element.video,\r\n plots: element['abi-plot'],\r\n images: element['common-images'],\r\n contextualInformation: element['abi-contextual-information'].length > 0 ? element['abi-contextual-information'] : undefined,\r\n segmentation: element['mbf-segmentation'],\r\n simulation: element['abi-simulation-file'],\r\n additionalLinks: element.additionalLinks,\r\n detailsReady: true,\r\n })\r\n Vue.set(this.results, i, this.results[i])\r\n });\r\n },\r\n createfilterParams: function(params) {\r\n let p = new URLSearchParams();\r\n //Check if field is array or value\r\n for (const key in params) {\r\n if (Array.isArray(params[key])) {\r\n params[key].forEach(e => {\r\n p.append(key, e);\r\n });\r\n } else {\r\n p.append(key, params[key]);\r\n }\r\n }\r\n return p.toString();\r\n },\r\n callSciCrunch: function(apiLocation, params = {}, signal) {\r\n return new Promise((resolve, reject) => {\r\n // Add parameters if we are sent them\r\n let fullEndpoint = this.envVars.API_LOCATION + this.searchEndpoint + \"?\" + this.createfilterParams(params);\r\n fetch(fullEndpoint, {signal})\r\n .then(handleErrors)\r\n .then(response => response.json())\r\n .then(data => resolve(data))\r\n .catch(data => reject(data));\r\n });\r\n },\r\n },\r\n mounted: function() {\r\n // initialise algolia\r\n this.algoliaClient = new AlgoliaClient(this.envVars.ALGOLIA_ID, this.envVars.ALGOLIA_KEY, this.envVars.PENNSIEVE_API_LOCATION);\r\n this.algoliaClient.initIndex(this.envVars.ALGOLIA_INDEX);\r\n this.openSearch(undefined, '');\r\n },\r\n created: function() {\r\n //Create non-reactive local variables\r\n this.searchEndpoint = \"dataset_info/using_multiple_dois/\";\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n.content-card {\r\n height: 100%;\r\n flex-flow: column;\r\n display: flex;\r\n}\r\n\r\n.button {\r\n background-color: #8300bf;\r\n border: #8300bf;\r\n color: white;\r\n}\r\n\r\n.step-item {\r\n font-size: 14px;\r\n margin-bottom: 18px;\r\n text-align: left;\r\n}\r\n\r\n.search-input {\r\n width: 298px !important;\r\n height: 40px;\r\n padding-right: 14px;\r\n align-items: left;\r\n}\r\n\r\n.header {\r\n border: solid 1px #292b66;\r\n background-color: #292b66;\r\n text-align: left;\r\n}\r\n\r\n.pagination {\r\n padding-bottom: 16px;\r\n background-color: white;\r\n text-align: center;\r\n}\r\n\r\n.pagination >>> button {\r\n background-color: white !important;\r\n}\r\n.pagination >>> li {\r\n background-color: white !important;\r\n}\r\n.pagination >>> li.active {\r\n color: #8300bf;\r\n}\r\n\r\n.error-feedback {\r\n font-family: Asap;\r\n font-size: 14px;\r\n font-style: italic;\r\n padding-top: 15px;\r\n}\r\n\r\n.content-card >>> .el-card__header {\r\n background-color: #292b66;\r\n border: solid 1px #292b66;\r\n}\r\n\r\n.content-card >>> .el-card__body {\r\n background-color: #f7faff;\r\n overflow-y: hidden;\r\n}\r\n\r\n.content {\r\n width: 518px;\r\n flex: 1 1 auto;\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #e4e7ed;\r\n background-color: #ffffff;\r\n overflow-y: scroll;\r\n scrollbar-width: thin;\r\n}\r\n\r\n.content >>> .el-loading-spinner .path {\r\n stroke: #8300bf;\r\n}\r\n\r\n.content >>> .step-item:first-child .seperator-path{\r\n display: none;\r\n}\r\n\r\n.content >>> .step-item:not(:first-child) .seperator-path{\r\n width: 486px;\r\n height: 0px;\r\n border: solid 1px #e4e7ed;\r\n background-color: #e4e7ed;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-track {\r\n border-radius: 10px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar {\r\n width: 12px;\r\n right: -12px;\r\n background-color: #f5f5f5;\r\n}\r\n\r\n.scrollbar::-webkit-scrollbar-thumb {\r\n border-radius: 4px;\r\n box-shadow: 0 2px 4px 0 rgba(0, 0, 0, 0.06);\r\n background-color: #979797;\r\n}\r\n\r\n>>> .el-input__suffix {\r\n padding-right: 10px;\r\n}\r\n\r\n>>> .my-drawer {\r\n background: rgba(0, 0, 0, 0);\r\n box-shadow: none;\r\n}\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SidebarContent.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SidebarContent.vue?vue&type=template&id=13cf0a2e&scoped=true&\"\nimport script from \"./SidebarContent.vue?vue&type=script&lang=js&\"\nexport * from \"./SidebarContent.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SidebarContent.vue?vue&type=style&index=0&id=13cf0a2e&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"13cf0a2e\",\n null\n \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"tab-container\"},_vm._l((_vm.tabTitles),function(title){return _c('div',{key:title.id,staticClass:\"title\"},[_c('div',{staticClass:\"title-text-table\",class:{ highlightText : (title.id==_vm.activeId) },on:{\"click\":function($event){return _vm.titleClicked(title.id)}}},[_c('div',{staticClass:\"title-text\"},[_vm._v(\" \"+_vm._s(title.title)+\" \")])])])}),0)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n <div class=\"tab-container\">\r\n <div class=\"title\" v-for=\"title in tabTitles\" :key=\"title.id\">\r\n <div class=\"title-text-table\" v-bind:class=\"{ highlightText : (title.id==activeId) }\" v-on:click=\"titleClicked(title.id)\">\r\n <div class=\"title-text\">\r\n {{title.title}}\r\n </div>\r\n </div>\r\n </div>\r\n </div>\r\n</template>\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\n\r\nexport default {\r\n name: \"Tabs\",\r\n props: {\r\n tabTitles: {\r\n type: Array,\r\n default: () => []\r\n },\r\n activeId: {\r\n type: Number,\r\n default: 1\r\n }\r\n },\r\n methods: {\r\n titleClicked: function(id) {\r\n this.$emit(\"titleClicked\", id);\r\n },\r\n }\r\n\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.tab-container{\r\n height: 28px;\r\n}\r\n\r\n.title {\r\n width: 101px;\r\n height: 28px;\r\n border: solid 1px #dcdfe6;\r\n border-bottom: none;\r\n background-color: white;\r\n display:inline-block;\r\n}\r\n\r\n.title:hover {\r\n cursor: pointer;\r\n}\r\n\r\n.title-text {\r\n text-align:center;\r\n display: table-cell;\r\n vertical-align: middle;\r\n font-size: 14px;\r\n}\r\n\r\n.title-text-table {\r\n display:table;\r\n height: 100%;\r\n width: 100%;\r\n}\r\n\r\n.parent-dialog:hover .title-text {\r\n color:#8300bf;\r\n}\r\n\r\n.highlightText {\r\n color:#8300bf;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./Tabs.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./Tabs.vue?vue&type=template&id=d68260c4&scoped=true&\"\nimport script from \"./Tabs.vue?vue&type=script&lang=js&\"\nexport * from \"./Tabs.vue?vue&type=script&lang=js&\"\nimport style0 from \"./Tabs.vue?vue&type=style&index=0&id=d68260c4&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"d68260c4\",\n null\n \n)\n\nexport default component.exports","<template>\r\n <div ref=\"container\">\r\n <div v-if=\"!drawerOpen\" @click=\"toggleDrawer\" class=\"open-tab\">\r\n <i class=\"el-icon-arrow-left\"></i>\r\n </div>\r\n <el-drawer\r\n custom-class=\"my-drawer\"\r\n class=\"side-bar\"\r\n :visible.sync=\"drawerOpen\"\r\n :appendToBody=\"false\"\r\n :modal-append-to-body=\"false\"\r\n size=550\r\n :with-header=\"false\"\r\n :wrapperClosable=\"false\"\r\n :modal=\"false\"\r\n >\r\n <div class=\"box-card\">\r\n <div v-if=\"drawerOpen\" @click=\"close\" class=\"close-tab\">\r\n <i class=\"el-icon-arrow-right\"></i>\r\n </div>\r\n <div class=\"sidebar-container\">\r\n <tabs v-if=\"tabs.length > 1\" :tabTitles=\"tabs\" :activeId=\"activeId\"\r\n @titleClicked=\"tabClicked\"/>\r\n <template v-for=\"tab in tabs\">\r\n <sidebar-content class=\"sidebar-content-container\"\r\n v-show=\"tab.id===activeId\" :contextCardEntry=\"tab.contextCard\"\r\n :envVars=\"envVars\"\r\n v-bind:key=\"tab.id\" :ref=\"tab.id\"\r\n @search-changed=\"searchChanged(tab.id, $event)\"/>\r\n </template>\r\n </div>\r\n </div>\r\n </el-drawer>\r\n </div>\r\n</template>\r\n\r\n\r\n<script>\r\n/* eslint-disable no-alert, no-console */\r\nimport Vue from \"vue\";\r\nimport {\r\n Drawer,\r\n Icon,\r\n} from \"element-ui\";\r\nimport lang from \"element-ui/lib/locale/lang/en\";\r\nimport locale from \"element-ui/lib/locale\";\r\nimport SidebarContent from './SidebarContent.vue';\r\nimport EventBus from './EventBus';\r\nimport Tabs from './Tabs'\r\n\r\nlocale.use(lang);\r\nVue.use(Drawer);\r\nVue.use(Icon);\r\n\r\nvar initial_state = {\r\n searchInput: \"\",\r\n lastSearch: \"\",\r\n results: [],\r\n drawerOpen: false,\r\n numberOfHits: 0,\r\n filter:{},\r\n filterFacet: undefined,\r\n loadingCards: false,\r\n numberPerPage: 10,\r\n page: 1,\r\n pageModel: 1,\r\n start: 0,\r\n hasSearched: false,\r\n sciCrunchError: false\r\n}\r\n\r\nexport default {\r\n components: {SidebarContent, Tabs },\r\n name: \"SideBar\",\r\n props: {\r\n visible: {\r\n type: Boolean,\r\n default: false\r\n },\r\n entry: {\r\n type: Object,\r\n default: () => (initial_state)\r\n },\r\n envVars: {\r\n type: Object,\r\n default: () => {}\r\n },\r\n tabs: {\r\n type: Array,\r\n default: () => [{title:'flatmap', id:1}]\r\n },\r\n activeId: {\r\n type: Number,\r\n default: 1\r\n },\r\n openAtStart: {\r\n type: Boolean,\r\n default: false\r\n }\r\n },\r\n data: function () {\r\n return {\r\n ...this.entry,\r\n }\r\n },\r\n methods: {\r\n searchChanged: function (id, data) {\r\n this.$emit(\"search-changed\", {...data, id: id});\r\n },\r\n close: function () {\r\n this.drawerOpen = false;\r\n },\r\n toggleDrawer: function () {\r\n this.drawerOpen = !this.drawerOpen;\r\n },\r\n openSearch: function(facets, query){\r\n this.drawerOpen = true;\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].openSearch(facets, query)})\r\n },\r\n addFilter: function(filter){\r\n this.drawerOpen = true;\r\n filter.AND = true // When we add a filter external, it is currently only with an AND boolean\r\n\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].addFilter(filter)})\r\n },\r\n openNeuronSearch: function(neuron){\r\n this.drawerOpen = true;\r\n // Because refs are in v-for, nextTick is needed here\r\n Vue.nextTick(()=>{this.$refs[this.activeId][0].openSearch('', undefined, 'scicrunch-query-string/', {'field': '*organ.curie', 'curie':neuron})})\r\n },\r\n tabClicked: function(id) {\r\n this.$emit(\"tabClicked\", id);\r\n },\r\n },\r\n created:function() {\r\n this.drawerOpen = this.openAtStart;\r\n },\r\n mounted: function(){\r\n EventBus.$on(\"PopoverActionClick\", (payLoad) => {\r\n this.$emit(\"actionClick\", payLoad);\r\n })\r\n EventBus.$on('anatomyFound', (payLoad)=> {\r\n this.$emit('search-changed', {\r\n type: 'keyword-update',\r\n value: payLoad\r\n })\r\n })\r\n }\r\n};\r\n</script>\r\n\r\n<!-- Add \"scoped\" attribute to limit CSS to this component only -->\r\n<style scoped>\r\n\r\n.box-card {\r\n flex: 3;\r\n height: 100%;\r\n overflow: hidden;\r\n pointer-events: auto;\r\n}\r\n\r\n.side-bar{\r\n position: relative;\r\n height: 100%;\r\n pointer-events: none;\r\n}\r\n\r\n.side-bar >>> .el-drawer:focus{\r\n outline:none;\r\n}\r\n\r\n.sidebar-container {\r\n height: 100%;\r\n flex-flow: column;\r\n display: flex;\r\n}\r\n\r\n.open-tab{\r\n width: 20px;\r\n height: 40px;\r\n z-index: 8;\r\n position: absolute;\r\n top: calc(50vh - 80px);\r\n right: 0px;\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #8300BF;\r\n background-color: #f9f2fc;\r\n text-align: center;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n}\r\n\r\n.el-icon-arrow-left,\r\n.el-icon-arrow-right\r\n{\r\n font-weight: 600;\r\n margin-top: 12px;\r\n color: #8300BF;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n transform: scaleY(2.0);\r\n text-align: center;\r\n vertical-align: middle;\r\n}\r\n\r\n.close-tab{\r\n float: left;\r\n flex: 1;\r\n width: 20px;\r\n height: 40px;\r\n z-index: 8;\r\n margin-top: calc(50vh - 80px);\r\n box-shadow: 0 2px 12px 0 rgba(0, 0, 0, 0.06);\r\n border: solid 1px #8300BF; \r\n background-color: #f9f2fc;\r\n text-align: center;\r\n vertical-align: middle;\r\n cursor: pointer;\r\n pointer-events: auto;\r\n}\r\n\r\n.box-card {\r\n flex: 3;\r\n height: 100%;\r\n overflow: hidden;\r\n pointer-events: auto;\r\n}\r\n\r\n>>> .my-drawer {\r\n background: rgba(0,0,0,0);\r\n box-shadow: none;\r\n}\r\n\r\n>>> .my-drawer .el-drawer__body {\r\n height: 100%;\r\n}\r\n\r\n.sidebar-content-container {\r\n flex: 1 1 auto;\r\n}\r\n\r\n</style>\r\n","import mod from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=script&lang=js&\"; export default mod; export * from \"-!../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../node_modules/thread-loader/dist/cjs.js!../../node_modules/babel-loader/lib/index.js!../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../node_modules/vue-loader/lib/index.js??vue-loader-options!./SideBar.vue?vue&type=script&lang=js&\"","import { render, staticRenderFns } from \"./SideBar.vue?vue&type=template&id=9b3acd4c&scoped=true&\"\nimport script from \"./SideBar.vue?vue&type=script&lang=js&\"\nexport * from \"./SideBar.vue?vue&type=script&lang=js&\"\nimport style0 from \"./SideBar.vue?vue&type=style&index=0&id=9b3acd4c&scoped=true&lang=css&\"\n\n\n/* normalize component */\nimport normalizer from \"!../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n script,\n render,\n staticRenderFns,\n false,\n null,\n \"9b3acd4c\",\n null\n \n)\n\nexport default component.exports","module.exports = require(\"core-js/modules/es.string.includes\");","module.exports = require(\"core-js/modules/es.array.find\");"],"sourceRoot":""}