@abi-software/map-side-bar 1.3.3 → 1.3.4

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/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/./src/components/Tabs.vue?2fb3","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/./src/components/ContextCard.vue?310b","webpack://map-side-bar/./src/components/SideBar.vue?119f","webpack://map-side-bar/external \"element-ui/lib/drawer\"","webpack://map-side-bar/external \"@abi-software/gallery\"","webpack://map-side-bar/./src/components/DatasetCard.vue?4538","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/./src/components/SideBar.vue?c070","webpack://map-side-bar/external \"core-js/modules/es.array.filter\"","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/./src/components/SidebarContent.vue?bdd9","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/./src/components/ImageGallery.vue?8fc7","webpack://map-side-bar/./src/components/BadgesGroup.vue?9baf","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/./src/components/SearchFilters.vue?3f41","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/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/./src/components/SidebarContent.vue?2f68","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/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/SearchFilters.vue?d46c","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/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/./src/components/ContextCard.vue?39be","webpack://map-side-bar/./src/components/ImageGallery.vue?d2ac","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 \"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?ced1","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://map-side-bar/./src/components/SidebarContent.vue?693e","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?70ee","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?9729","webpack://map-side-bar/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://map-side-bar/./src/components/Cascader.vue","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?9d70","webpack://map-side-bar/./src/components/BadgesGroup.vue?4ae4","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?8146","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?1a36","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?ea1a","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/./src/components/index.js","webpack://map-side-bar/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js","webpack://map-side-bar/external \"core-js/modules/es.string.includes\""],"names":["_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_arrayWithoutHoles","arr","Array","isArray","i","arr2","length","_iterableToArray","iter","Symbol","iterator","prototype","toString","call","from","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_arrayWithHoles","_nonIterableRest","_toArray","arrayWithHoles","nonIterableRest","_classCallCheck","instance","Constructor","_defineProperties","target","props","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","push","label","id","get","discoverId","fetch","r","json","dataset","version","doi","discoverIds","promiseList","_discoverAllDois","all","values","flat","results","newResults","newResult","res","item","curie","split","name","description","updated","pennsieve","updatedAt","publishDate","datasetId","objectID","detailsReady","hits","foundKeyWords","uniqueKeywords","forEach","hit","keywords","keywordObj","keyword","includes","_splitUberonURL","Set","url","pop","filter","query","hitsperPage","page","hitsPerPage","filters","attributesToHighlight","attributesToRetrieve","searchData","items","_processResultsForCards","total","nbHits","identifier","dois","_processKeywords","console","log","facetPropPathMapping","shownFilters","getFilters","selectedFacetArray","f","removeShowAllFacets","facetsToOr","substring","lastIndexOf","facetArray","EventBus","Vue","_iterableToArrayLimit","_arr","_n","_d","_e","_i","_s","next","_slicedToArray","iterableToArrayLimit"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;AClFA,sD;;;;;;;ACAA,+D;;;;;;;ACAA,sE;;;;;;;ACAA,yD;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,uC;;;;;;;ACAA,8D;;;;;;;ACAA,4D;;;;;;;ACAA,yE;;;;;;;ACAA,2D;;;;;;;ACAA,gE;;;;;;;ACAA,kE;;;;;;;ACAA,oD;;;;;;;ACAA,mE;;;;;;;;ACAA;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;;ACA5gB;AAAA;AAAA;AAAof,CAAgB,iiBAAG,EAAC,C;;;;;;;ACAxgB,kD;;;;;;;ACAA,kD;;;;;;;ACAA,uC;;;;;;;ACAA,qD;;;;;;;;ACAA;AAAA;AAAA;AAAif,CAAgB,8hBAAG,EAAC,C;;;;;;;ACArgB,mF;;;;;;;ACAA,4D;;;;;;;ACAA,mD;;;;;;;ACAA,uC;;;;;;;ACAA,4D;;;;;;;ACAA,gE;;;;;;;ACAA,kE;;;;;;;ACAA,kE;;;;;;;ACAA,2D;;;;;;;;ACAA;AAAA;AAAA;AAA2f,CAAgB,wiBAAG,EAAC,C;;;;;;;ACA/gB,mE;;;;;;;ACAA,kD;;;;;;;ACAA,gE;;;;;;;ACAA,sD;;;;;;;ACAA,2D;;;;;;;ACAA,uC;;;;;;;ACAA,uC;;;;;;;ACAA,kF;;;;;;;ACAA,oD;;;;;;;ACAA,0D;;;;;;;ACAA,oE;;;;;;;ACAA,0D;;;;;;;ACAA,kE;;;;;;;ACAA,wD;;;;;;;ACAA,4D;;;;;;;ACAA,gD;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,uD;;;;;;;ACAA,gE;;;;;;;;ACAA;AAAA;AAAA;AAA0f,CAAgB,uiBAAG,EAAC,C;;;;;;;ACA9gB,0C;;;;;;;ACAA,gC;;;;;;;ACAA,8D;;;;;;;ACAA,gE;;;;;;;ACAA,+D;;;;;;;ACAA,mD;;;;;;;ACAA,mD;;;;;;;ACAA,gE;;;;;;;ACAA,0D;;;;;;;ACAA,iBAAiB,qBAAuB,oC;;;;;;;ACAxC,uC;;;;;;;ACAA,4E;;;;;;;ACAA,mE;;;;;;;ACAA,iE;;;;;;;ACAA,8D;;;;;;;ACAA,mD;;;;;;;ACAA,gE;;;;;;;ACAA,gD;;;;;;;ACAA,gD;;;;;;;ACAA,uC;;;;;;;ACAA,6D;;;;;;;ACAA,6D;;;;;;;ACAA,yE;;;;;;;ACAA,6D;;;;;;;ACAA,8D;;;;;;;ACAA,kD;;;;;;;;ACAA;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;ACA5gB,mE;;;;;;;ACAA,oD;;;;;;;ACAA,uC;;;;;;;;ACAA;AAAA;AAAA;AAAyf,CAAgB,siBAAG,EAAC,C;;;;;;;ACA7gB,0D;;;;;;;ACAA,iD;;;;;;;;ACAA;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;ACA5gB,8D;;;;;;;ACAA,sE;;;;;;;ACAA,yD;;;;;;;ACAA,+D;;;;;;;;;;;;;;;ACAA;;AAEA;AACA,MAAM,IAAuC;AAC7C,IAAI,mBAAO,CAAC,MAAyB;AACrC;;AAEA,MAAM,eAAC;AACP,OAAO,eAAC,sCAAsC,eAAC,GAAG,eAAC;AACnD,IAAI,qBAAuB,GAAG,eAAC;AAC/B;AACA;;AAEA;AACe,sDAAI;;;ACdnB,0BAA0B,aAAa,0BAA0B,wBAAwB,iBAAiB,gBAAgB,8BAA8B,2BAA2B,0BAA0B,UAAU,iCAAiC,6BAA6B,8BAA8B,6KAA6K,KAAK,kCAAkC,wBAAwB,YAAY,uBAAuB,6BAA6B,4BAA4B,mBAAmB,UAAU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;;;;ACJD;AAGA;AACA,wBADA;AAEA,6BAFA;AAGA;AACA;AACA,sBAFA,gCAEA;AAAA,UACA,UADA,GACA,IADA,CACA,UADA;AAAA,UACA,QADA,GACA,IADA,CACA,QADA;AAAA,UACA,aADA,GACA,IADA,CACA,aADA;AAAA,UACA,SADA,GACA,IADA,CACA,SADA;AAAA,UACA,YADA,GACA,IADA,CACA,YADA;AAEA;AACA;;AACA;AAAA;AACA,oBADA;AAEA,uBAFA;AAGA,sDAHA;AAIA,yBAJA;AAKA;AALA;AAAA;;AAOA,4DACA;AACA;AACA,OAHA;;AAKA;AAAA,oCACA,WADA;AAAA,YACA,KADA;AAAA,YACA,IADA;;AAEA;AACA;;AACA;AACA;AACA;AACA,qBADA;AAEA,0CAFA;AAGA;AAHA;AAKA,WANA,MAMA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AArCA;AAHA,G;;ACJkU,CAAgB,gHAAG,EAAC,C;;ACAtV;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC5FA,IAAI,eAAM,EAAE,wBAAe;AACiC;AACL;;;AAGvD;AAC0F;AAC1F,gBAAgB,kBAAU;AAC1B,EAAE,2CAAM;AACR,EAAE,eAAM;AACR,EAAE,wBAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,8D;;AClBA;AACX,kBAAgB,OA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,CACA;AACA;AACA,+BAFA,CAIA;;AACA;AACA;AACA,mEACA,SADA,EAEA,SAFA,EAFA,CAOA;;AACA;AACA,8DADA;AAEA;AAFA,eARA,CAaA;;;AACA;AACA,6GACA,eADA;AAGA,mDACA,2DADA;AAEA,aANA;AAOA,WArBA;;AAsBA;AACA,SA7BA,EA8BA,OA9BA,CA8BA;AACA;AACA,SAhCA;AAiCA,OAnCA;AAoCA,KA1CA;AA2CA;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KAjDA;AAkDA;AACA;AACA;AACA;AACA,iDAFA,CAIA;;AACA;AAAA;AAAA;AAAA;AACA,gCADA;AAEA,sCAFA;AAGA;AAHA;AAAA,WALA,CAWA;;AACA;AAAA;AAAA;AACA;AACA;AACA,mCADA;AAEA,sCAFA;AAGA;AAHA;AAKA,SAPA;AAUA,oCAtBA,CAsBA;;AAEA,6CAxBA,CAwBA;;AACA,qCAzBA,CAyBA;;AACA;AACA;AACA,KAhFA;AAiFA;AACA;AACA;AAAA;;AACA;AACA,6BACA,GADA,CACA;AAAA;AAAA,OADA,EAEA,QAFA,CAEA,IAFA,EAFA,CAKA;;AACA;AACA;AACA,2BAFA,CAGA;;AACA;AACA;AACA;AACA,SAPA,CAQA;;;AACA;AACA,kCADA,CAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,+CACA,8EADA,KAEA;AACA,aANA,MAMA;AACA;AACA;AACA;AACA,WAXA,MAWA;AACA;AACA;AACA,SAjCA,CAkCA;;;AACA;AACA;AACA;AACA;AACA;AACA,eAFA,MAEA;AACA;AACA;AACA,aANA,MAMA;AACA;AACA;AACA,eAFA,MAEA;AACA;AACA;AACA,aANA,MAMA;AACA;AACA;AACA,WAhBA,MAgBA;AACA,SAlBA;AAmBA;;AACA;AACA,KAjJA;AAkJA;AACA,4FADA,CACA;;;AACA,wCAFA,CAEA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OARA;AASA;AACA,kCAfA,CAgBA;;AACA;AACA;AACA;AACA;AACA,KAvKA;AAwKA;AACA;AACA;AACA;AACA,KA5KA;AA6KA;AACA;AACA,KA/KA;AAgLA;AAAA;;AACA;AACA;AACA;AACA;;AACA;AACA,2DACA;AACA,OAHA;AAIA,KAzLA;AA0LA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA;;AACA;AACA;AACA;AACA,kBACA,eADA,EAEA,2DAFA;AAIA,SALA;AAMA;AACA;AACA,KA5MA;AA6MA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA,KAnNA;AAoNA;AACA;AACA,KAtNA;AAuNA;AACA;AACA,uBACA;AACA;AACA,qCADA;AAEA,4BAFA;AAGA;AAHA;AAKA,OANA,CADA;AASA,KAlOA;AAmOA;AAAA;;AACA;AACA;AACA,kCACA,gBADA,CACA,0BADA,EAEA,OAFA,CAEA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA,oDAFA,CAEA;AACA;AACA;AACA,WARA;AASA,SAbA;AAcA,OAfA;AAgBA;AArPA,GAjDA;AAwSA;AAAA;;AACA;AACA;AACA;AACA;;AACA;;AACA;;AACA;AACA,KALA;AAMA;AAjTA,G;;AC9FuU,CAAgB,0HAAG,EAAC,C;;;;;ACAnP;AACvC;AACL;AACqC;;;AAGjG;AAC0F;AAC1F,IAAI,uBAAS,GAAG,kBAAU;AAC1B,EAAE,gDAAM;AACR,EAAE,6DAAM;AACR,EAAE,sEAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,yEAAS,Q;;ACnBxB,IAAI,2DAAM,gBAAgB,aAAa,0BAA0B,wBAAwB,iBAAiB,qDAAqD,YAAY,sCAAsC,YAAY,6BAA6B,YAAY,aAAa,4EAA4E,qBAAqB,aAAa,wBAAwB,uDAAuD,OAAO,wNAAwN,KAAK,mCAAmC,yBAAyB,yBAAyB,YAAY,wBAAwB,yBAAyB,6CAA6C,sBAAsB,sHAAsH,sBAAsB,oEAAoE,aAAa,oGAAoG,qCAAqC,4DAA4D,4BAA4B,oCAAoC,KAAK,4BAA4B,qDAAqD,+BAA+B,qBAAqB,OAAO,wDAAwD,KAAK,uCAAuC;AAChmD,IAAI,oEAAe;;;;;;ACDnB,IAAI,2DAAM,gBAAgB,aAAa,0BAA0B,wBAAwB,kDAAkD,wCAAwC,sFAAsF,wCAAwC,gBAAgB,6BAA6B,sBAAsB,eAAe,KAAK,yBAAyB,kCAAkC,+DAA+D;AAClgB,IAAI,oEAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;ACiBnB;AACA;AAEA;AACA;AAEA;AACA;AAEA;AACA,qBADA;AAEA;AACA;;;;AAIA;AACA,iBADA;AAEA;AACA;AACA;AAJA,KALA;AAWA;AACA,kBADA;AAEA;AACA;AACA;AAJA,KAXA;AAiBA;AACA,kBADA;AAEA;AACA;AACA;AAJA;AAjBA,GAFA;AA0BA;AACA;AACA;AAAA;AAAA;AAAA;AAAA,OADA;AAEA;AAFA;AAIA,GA/BA;AAgCA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA,KANA;AAOA;AACA;AACA;AACA;AAAA;AAAA;AACA;AACA;AACA,KAbA;AAcA;AACA;AACA;AACA;AAjBA,GAhCA;AAmDA;AACA;AACA,gBADA;AAEA,qBAFA;AAGA;AACA;AACA;AACA;AACA;AAPA,KADA;AAUA;AACA,gBADA;AAEA,qBAFA;AAGA;AACA;AACA;AACA;AACA;AACA;;;;AAIA;AAZA;AAVA;AAnDA,G;;AC3BqU,CAAgB,sHAAG,EAAC,C;;;;;ACAnP;AACvC;AACL;AACqC;;;AAG/F;AAC0F;AAC1F,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,8CAAM;AACR,EAAE,2DAAM;AACR,EAAE,oEAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,qEAAS,Q;;ACnBxB;AACA,IAAMyE,QAAQ,GAAG,IAAIC,sBAAJ,EAAjB;AACeD,gEAAf,E;;ACFA,IAAI,4DAAM,gBAAgB,aAAa,0BAA0B,wBAAwB,iBAAiB,wBAAwB,gBAAgB,qBAAqB,0SAA0S,KAAK,gCAAgC;AACtf,IAAI,qEAAe;;;;;;;;;;;;;;ACDJ,SAASE,qBAAT,CAA+B7J,GAA/B,EAAoCG,CAApC,EAAuC;AACpD,MAAI,EAAEK,MAAM,CAACC,QAAP,IAAmBf,MAAM,CAACM,GAAD,CAAzB,IAAkCN,MAAM,CAACgB,SAAP,CAAiBC,QAAjB,CAA0BC,IAA1B,CAA+BZ,GAA/B,MAAwC,oBAA5E,CAAJ,EAAuG;AACrG;AACD;;AAED,MAAI8J,IAAI,GAAG,EAAX;AACA,MAAIC,EAAE,GAAG,IAAT;AACA,MAAIC,EAAE,GAAG,KAAT;AACA,MAAIC,EAAE,GAAG1H,SAAT;;AAEA,MAAI;AACF,SAAK,IAAI2H,EAAE,GAAGlK,GAAG,CAACQ,MAAM,CAACC,QAAR,CAAH,EAAT,EAAiC0J,EAAtC,EAA0C,EAAEJ,EAAE,GAAG,CAACI,EAAE,GAAGD,EAAE,CAACE,IAAH,EAAN,EAAiBvI,IAAxB,CAA1C,EAAyEkI,EAAE,GAAG,IAA9E,EAAoF;AAClFD,UAAI,CAAC7E,IAAL,CAAUkF,EAAE,CAAC1K,KAAb;;AAEA,UAAIU,CAAC,IAAI2J,IAAI,CAACzJ,MAAL,KAAgBF,CAAzB,EAA4B;AAC7B;AACF,GAND,CAME,OAAOmC,GAAP,EAAY;AACZ0H,MAAE,GAAG,IAAL;AACAC,MAAE,GAAG3H,GAAL;AACD,GATD,SASU;AACR,QAAI;AACF,UAAI,CAACyH,EAAD,IAAOG,EAAE,CAAC,QAAD,CAAF,IAAgB,IAA3B,EAAiCA,EAAE,CAAC,QAAD,CAAF;AAClC,KAFD,SAEU;AACR,UAAIF,EAAJ,EAAQ,MAAMC,EAAN;AACT;AACF;;AAED,SAAOH,IAAP;AACD,C;;AC5BD;AACA;AACA;AACe,SAASO,cAAT,CAAwBrK,GAAxB,EAA6BG,CAA7B,EAAgC;AAC7C,SAAOwC,eAAc,CAAC3C,GAAD,CAAd,IAAuBsK,qBAAoB,CAACtK,GAAD,EAAMG,CAAN,CAA3C,IAAuDyC,gBAAe,EAA7E;AACD,C;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACgBD;AACA;AACA;AACA,CAFA;;AAIA;AACA;AAAA;AAAA;AACA,CAFA;;AAIA;AACA;AACA;AAEA;AACA,sBADA;AAEA;AAAA;AAAA,GAFA;AAGA,oCAHA;AAIA;AACA;AACA,kBADA;AAEA;AACA;AACA;AAJA,KADA;AAOA;AACA,kBADA;AAEA;AAFA,KAPA;AAWA;AACA,kBADA;AAEA;AAFA,KAXA;AAeA;AACA,iBADA;AAEA;AACA;AACA;AAJA,KAfA;AAqBA;AACA,kBADA;AAEA;AAFA,KArBA;AAyBA;AACA,kBADA;AAEA;AAFA,KAzBA;AA6BA;AACA,kBADA;AAEA;AAFA,KA7BA;AAiCA;AACA,kBADA;AAEA;AAFA,KAjCA;AAqCA;AACA,kBADA;AAEA;AACA;AACA;AAJA;AArCA,GAJA;AAgDA,MAhDA,kBAgDA;AACA;AACA,qBADA;AAEA,cAFA;AAGA,iBAHA;AAIA;AACA,8BADA;AAEA,qBAFA;AAGA,oBAHA;AAIA,uBAJA;AAKA,2BALA;AAMA,yBANA;AAOA,oBAPA;AAQA;AARA,OAJA;AAcA;AAAA;AAAA;AAAA,OAdA;AAeA;AACA,sBADA;AAEA,uBAFA;AAGA,uBAHA;AAIA,4BAJA;AAKA;AALA,OAfA;AAsBA;AAAA;AAAA;AAAA,OAtBA;AAuBA,qBAvBA;AAwBA;AAAA;AAAA,OAxBA;AAyBA;AAzBA;AA2BA,GA5EA;AA6EA;AACA;AACA;AACA,KAHA;AAIA;AACA;AACA;AACA;AACA;AACA;AACA;;;;AAIA,KAdA;AAeA;AACA;;AACA;AACA;AACA,gBADA;AAEA;AACA,oBAHA;AAIA,iDAJA;AAKA,0CALA;AAMA,oBANA;AAOA,wBAPA;AAQA;AARA;AAUA;AACA,KA7BA;AA8BA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AACA;AACA,kBADA;AAEA,qCAFA;AAGA,yBAHA;AAIA,yBAJA;AAKA;AALA;AAOA,SAXA;AAYA;AACA,KA7CA;AA8CA;AAAA;;AACA;AACA;AACA;AACA;;AACA;;AACA;AACA;;AACA;AACA;AACA,oBADA;AAEA,yCAFA;AAGA,mDAHA;AAIA;AAJA;AAMA;AACA;;AACA;AACA;AACA;AAEA,oCACA,qDADA;AAIA;;AACA;AACA;AACA;AADA;AAGA;;AAEA;AACA;AAAA;AAAA,aADA;AAEA,8BAFA;AAGA;AAHA;AAMA;AACA,+EADA;AAEA,8BAFA;AAGA,8BAHA;AAIA,wBAJA;AAKA,yCALA;AAMA;AANA;;AAQA;AACA,kBADA;AAEA,qCAFA;AAGA,wBAHA;AAIA,mCAJA;AAKA,4BALA;AAMA,0BANA;AAOA;AAPA;AASA,SArDA;AAsDA;AACA,KAvGA;AAwGA;AAAA;;AACA;AACA;AACA;AACA;AACA;;AACA,yDACA,QADA,EAEA,0BAFA,EAGA,uBAHA,EAIA,KAJA;;AAMA;AACA;;AACA;AACA;AACA,oBADA;AAEA,yCAFA;AAGA,mDAHA;AAIA;AAJA;AAMA;AACA;;AACA;AACA,+EADA;AAEA,oKAFA;AAGA,qCAHA;AAIA,4BAJA;AAKA,wCALA;AAMA,oDANA;AAOA,0CAPA;AAQA,2CARA;AASA;AATA;;AAWA;AACA,kBADA;AAEA,qCAFA;AAGA,4BAHA;AAIA,mCAJA;AAKA,4BALA;AAMA,0BANA;AAOA;AAPA;AASA,SAxCA;AAyCA;AACA,KArJA;AAsJA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AADA;AAGA;AACA,+EADA;AAEA,8BAFA;AAGA,uCAHA;AAIA,sCAJA;AAKA;AALA;;AAOA,gEACA,2BADA,EAEA;AACA,kBADA;AAEA,uCAFA;AAGA,iDAHA;AAIA;AAJA,WAFA;;AASA;AACA,kBADA;AAEA,qCAFA;AAGA,gCAHA;AAIA,mCAJA;AAKA,4BALA;AAMA,0BANA;AAOA;AAPA;AASA,SAlCA;AAmCA;AACA,KA5LA;AA6LA;AACA;AACA;AACA,0BADA;AAEA,gDAFA;AAGA,sCAHA;AAIA,kCAJA;AAKA,4BALA;AAMA,+BANA;AAOA,6CAPA;AAQA,oCARA;AASA;AATA;AAWA;AACA,0BADA;AAEA,oBAFA;AAGA,4BAHA;AAIA,wBAJA;AAKA,yBALA;AAMA;AANA;AAQA;AACA,KAnNA;AAoNA;AAAA;;AACA;AACA;AACA,8CACA,gBADA,EAEA,qBAFA,EAGA,kBAHA;;AAKA;;AACA;AACA,6BADA;AAEA,yBAFA;AAGA,6CAHA;AAIA,0BAJA;AAKA;AALA;AAOA,SAdA;AAeA;AACA,KAtOA;AAuOA;AACA,2CADA,CAEA;AACA;AA1OA,GA7EA;AAyTA;AACA,gBADA,0BACA;AACA;AACA;AACA;;AACA;;AACA;AACA;AAAA;AAAA;AAAA;;AACA,iCACA;AACA;;AACA;AACA,OANA,MAQA;AACA;AAfA,GAzTA;AA0UA;AACA;AACA,GA5UA;AA6UA;AACA;AACA;AACA,KAHA;AAIA;AACA;AACA,KANA;AAOA;AACA,gBADA;AAEA,qBAFA;AAGA;AAAA;;AACA;;AACA;AACA,qDACA;AACA,mEACA,2BADA,EAEA;AACA;AADA,aAFA;;AAMA;AACA,kDADA;AAEA,wCAFA;AAGA;AAHA;AAKA;AACA,iFADA;AAEA,gCAFA;AAGA,yCAHA;AAIA,iCAJA;AAKA,gFALA;AAMA;AANA;AAQA;AACA,wCADA;AAEA,sCAFA;AAGA,2BAHA;AAIA,qCAJA;AAKA,8BALA;AAMA,mCANA;AAOA;AAPA;AASA,WA7BA,CADA;AAgCA;;AACA;AACA;AAxCA;AAPA,GA7UA;AA+XA,SA/XA,qBA+XA;AACA;AACA,GAjYA;AAkYA,WAlYA,uBAkYA;AACA;AACA;AApYA,G;;AClCsU,CAAgB,wHAAG,EAAC,C;;;;;ACAnP;AACvC;AACL;AACqC;;;AAGhG;AAC0F;AAC1F,IAAI,sBAAS,GAAG,kBAAU;AAC1B,EAAE,+CAAM;AACR,EAAE,4DAAM;AACR,EAAE,qEAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,uEAAS,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACsBxB;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AAEA;AACA;AACA;AAEA;AACA,qBADA;AAEA;AAAA;AAAA;AAAA,GAFA;AAGA;AACA;;;;AAIA;AACA,kBADA;AAEA;AAFA,KALA;AASA;AACA,kBADA;AAEA;AAFA;AATA,GAHA;AAiBA;AACA;AACA,4CADA;AAEA,kCAFA;AAGA,2BAHA;AAIA,mBAJA;AAKA,gBALA;AAMA,wBANA;AAOA,8BAPA;AAQA;AARA;AAUA,GA5BA;AA6BA;AACA;AACA;;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA,SAFA,MAEA;AACA;AACA;AACA;;AACA;AACA,KAbA;AAcA;AACA;;AACA;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;;AACA;AACA;;AAEA;AACA,KAvCA;AAwCA;AACA;AACA,KA1CA;AA2CA;AACA;AACA;AA7CA,GA7BA;AA4EA;AACA;AACA;AACA,KAHA;AAIA;AACA;AACA,KANA;AAOA;AACA;AACA,KATA;AAUA;AACA;AACA,KAZA;AAaA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA;;AACA;AACA;AACA,WAXA;;AAYA;AAAA;AAAA;AACA;AACA,OAnBA;AAoBA,KAnCA;AAoCA;AACA;AACA;AACA,KAvCA;AAwCA;AACA;AACA,KA1CA;AA2CA;AAAA;;AACA;AACA;AACA;AACA;AACA;AACA,4HACA,IADA,CACA;AACA;AACA;AACA,WAFA,MAEA;AACA;AACA;AACA,SAPA,EAQA,IARA,CAQA;AACA;AACA;AACA;AACA;;AACA;;AACA;AACA,SAfA,EAgBA,KAhBA,CAgBA;AACA;AACA;AACA;AACA;AACA,SArBA;AAsBA;AAEA,KAzEA;AA0EA;AACA;AACA,KA5EA;AA6EA;AAAA;;AACA;AACA,wDAFA,CAGA;;AACA,sBACA,IADA,CACA;AAAA;AAAA,OADA,EAEA,IAFA,CAEA;AACA,sCACA;AACA,OALA;AAMA;AAvFA,GA5EA;AAqKA;AACA;AACA,GAvKA;AAwKA;AACA;AACA;AAAA;AACA;AACA;AAJA;AAxKA,G;;ACvDqU,CAAgB,sHAAG,EAAC,C;;;;;ACAnP;AACvC;AACL;AACqC;;;AAG/F;AAC0F;AAC1F,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,8CAAM;AACR,EAAE,2DAAM;AACR,EAAE,oEAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,qEAAS,Q;;ACnBxB,IAAI,2DAAM,gBAAgB,aAAa,0BAA0B,wBAAwB,iBAAiB,qDAAqD,YAAY,aAAa,sFAAsF,EAAE,YAAY,aAAa,8EAA8E,yBAAyB,yBAAyB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A;AAAA;AAAA;AAAA;;AAYA;AACA,iBADA;AAEA,gBAFA;AAGA,aAHA;AAIA,iBAJA;AAKA,YALA;AAMA,qBANA;AAOA,mBAPA;AAQA,SARA;AASA,cATA;AAUA,UAVA;AAWA,oBAXA;AAYA,6BAZA;AAaA;AAbA;AAgBA;AACA;AAAA;AAAA;AAAA;AAAA,GADA;AAEA,wBAFA;AAGA;AACA;AACA,mBADA;AAEA;AAFA,KADA;AAKA;AACA,mBADA;AAEA;AAFA,KALA;AASA;AACA,kBADA;AAEA;AAAA;AAAA;AAFA,KATA;AAaA;AACA,kBADA;AAEA;AAFA,KAbA;AAiBA;AACA,kBADA;AAEA;AAFA;AAjBA,GAHA;AAyBA;AACA,WAAW,uDACX,UADA;AAEA;AACA,wBADA;AAEA,6BAFA;AAGA;AAHA;AAFA;AAQA,GAlCA;AAmCA;AACA;AACA;AACA;AACA,uCADA;AAEA;AAFA;AAIA;AAPA,GAnCA;AA4CA;AACA;AACA;AACA,KAHA;AAIA;AAAA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,KAZA;AAaA;AACA;;AACA;AACA;AACA;AACA;AACA,KAnBA;AAoBA;AACA;AACA;AACA;AACA,KAxBA;AAyBA;AAAA;;AACA;AACA;AACA;AACA;AACA,KA9BA;AA+BA;AACA;AACA;AACA;AACA;AACA,sBADA;AAEA;AAFA;AAIA,KAvCA;AAwCA,iBAxCA,yBAwCA,OAxCA,EAwCA;AAAA;;AAAA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OAJA;AAKA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;AAAA;AAAA;AAAA;;AACA,oCACA;AACA;AACA,mDAXA,CAYA;;AACA;AAAA;AAAA;AACA,OAdA;AAeA,KA/DA;AAgEA;AACA;AACA,KAlEA;AAmEA;AACA;AACA;AACA,KAtEA;AAuEA;AACA;AACA;AACA;AACA,KA3EA;AA4EA;AACA;AAAA;AAAA;AACA,2BACA;AACA,KAhFA;AAiFA;AAAA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AAAA;AAAA,qBACA,IADA,CACA;AACA,2C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","file":"map-side-bar.common.js","sourcesContent":[" \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\");","// extracted by mini-css-extract-plugin","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\");","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=7a9cfc84&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=7a9cfc84&scoped=true&lang=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!./SideBar.vue?vue&type=style&index=0&id=72f5566c&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=72f5566c&scoped=true&lang=css&\"","module.exports = require(\"element-ui/lib/drawer\");","module.exports = require(\"@abi-software/gallery\");","// extracted by mini-css-extract-plugin","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\");","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.array.filter\");","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\");","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=4e5f480c&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=4e5f480c&scoped=true&lang=css&\"","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\");","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","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\");","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=7db0d736&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=7db0d736&scoped=true&lang=css&\"","module.exports = require(\"algoliasearch\");","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\";","// extracted by mini-css-extract-plugin","module.exports = require(\"@abi-software/gallery/src/mixins/GalleryHelpers\");","module.exports = require(\"element-ui/lib/theme-chalk/popover.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\");","// extracted by mini-css-extract-plugin","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\");","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\");","// extracted by mini-css-extract-plugin","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=6c8573ea&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=6c8573ea&scoped=true&lang=css&\"","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(\"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}}):_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}}),_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}","<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","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","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 _processKeywords(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\r\n if (keyword.includes('UBERON') || keyword.includes('ilxtr') || keyword.includes('ILX')) {\r\n foundKeyWords.push(this._splitUberonURL(keyword))\r\n uniqueKeywords = [...new Set(foundKeyWords)]\r\n }\r\n })\r\n }\r\n })\r\n return uniqueKeywords\r\n }\r\n\r\n _splitUberonURL(url){\r\n return url.split('/').pop()\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 keywordsInSearch (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 ],\r\n })\r\n .then(response => {\r\n let keywords = this._processKeywords(response.hits)\r\n console.log(response.hits)\r\n resolve(keywords)\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\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 console.log('calling getFilters!')\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 facetsToOr = facets.filter(\r\n (facet) => facet.facetPropPath == facetPropPath\r\n );\r\n var filter = \"\";\r\n facetsToOr.map((facet) => {\r\n filter += `\"${facetPropPath}\":\"${facet.label}\" OR `;\r\n });\r\n if (filter == \"\") {\r\n return;\r\n }\r\n filter = `(${filter.substring(0, filter.lastIndexOf(\" OR \"))})`;\r\n filters += `${filter} AND `;\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 { shownFilters } 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 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(shownFilters)\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 }))\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 }\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 unlick 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 // }\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 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 this.cascadeSelected.filter(f=>f.term != filter.term)\r\n this.cascadeSelected.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet)])\r\n }\r\n },\r\n initiateSearch: function() {\r\n this.cascadeEvent(this.cascadeSelected)\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 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 });\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=7db0d736&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=7db0d736&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 \"7db0d736\",\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 let index = 0;\r\n this.entry.scaffolds.forEach((scaffold) => {\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.entry.contextualInformation ? `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${this.entry.contextualInformation}` : undefined,\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 },\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=6c8573ea&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=6c8573ea&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 \"6c8573ea\",\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.entry.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.contextData.description)}}),_c('br'),(_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])?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(sample.path),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i+'_2',staticClass:\"padding\"})]})],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=\"entry.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=\"contextData.description\"/>\r\n <br/>\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]\" :href=\"generateFileLink(sample.path)\" target=\"_blank\">View Source</a>\r\n <div v-bind:key=\"i+'_2'\" class=\"padding\"/>\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\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\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 },\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 methods: {\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 console.log(data)\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 = 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.entry.apiLocation}s3-resource/${this.entry.discoverId}/${this.entry.version}/files/${path}`\r\n },\r\n generateFileLink(path){\r\n return `https://sparc.science/file/${this.entry.discoverId}/${this.entry.version}?path=${encodeURI(path)}`\r\n\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.entry.apiLocation}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: 25px;\r\n height: auto;\r\n flex: 1;\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=7a9cfc84&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=7a9cfc84&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 \"7a9cfc84\",\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\" />\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 ></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 firstSearch: {\r\n type: String,\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 };\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 openSearch: function(filter, search='') {\r\n this.searchInput = search;\r\n this.resetPageNavigation();\r\n this.searchAlgolia(filter, search);\r\n if (filter) {\r\n this.filter = [...filter];\r\n this.$refs.filtersRef.setCascader(this.filter);\r\n }\r\n },\r\n addFilter: function(filter) {\r\n this.resetPageNavigation();\r\n if (filter) {\r\n this.$refs.filtersRef.addFilter(filter);\r\n this.$refs.filtersRef.initiateSearch()\r\n }\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.keywordsInSearch(getFilters(filters), query).then(keywords => {\r\n console.log('key search complete!')\r\n console.log(keywords)\r\n EventBus.$emit(\"kewordsFound\", keywords) \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=> res.name === element.name)\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[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\r\n // temporarily disable flatmap search since there are no datasets\r\n if (this.firstSearch === \"Flatmap\" || this.firstSearch === \"flatmap\") {\r\n this.openSearch(undefined, '')\r\n } else {\r\n this.openSearch(undefined, '');\r\n }\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=4e5f480c&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=4e5f480c&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 \"4e5f480c\",\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 // 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('kewordsFound', (payLoad)=> {\r\n this.$emit('searchChanged', {\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=72f5566c&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=72f5566c&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 \"72f5566c\",\n null\n \n)\n\nexport default component.exports","import SideBar from \"./SideBar.vue\"\r\n\r\nexport {\r\n SideBar\r\n};\r\n\r\n\r\n\r\n","import './setPublicPath'\nexport * from '~entry'\n","module.exports = require(\"core-js/modules/es.string.includes\");"],"sourceRoot":""}
1
+ {"version":3,"sources":["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/./src/components/Tabs.vue?2fb3","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/./src/components/DatasetCard.vue?4538","webpack://map-side-bar/./src/components/ContextCard.vue?3af6","webpack://map-side-bar/external \"@abi-software/svg-sprite\"","webpack://map-side-bar/./src/components/SidebarContent.vue?6ec4","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/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/./src/components/ImageGallery.vue?8fc7","webpack://map-side-bar/./src/components/BadgesGroup.vue?9baf","webpack://map-side-bar/external \"core-js/modules/es.object.get-own-property-descriptor\"","webpack://map-side-bar/./src/components/SidebarContent.vue?9ef8","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/./src/components/SearchFilters.vue?3f41","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?4fee","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/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/SideBar.vue?2bed","webpack://map-side-bar/./src/components/SearchFilters.vue?d46c","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/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/./src/components/ContextCard.vue?2c41","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/./src/components/ImageGallery.vue?d2ac","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 \"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?74e9","webpack://map-side-bar/./node_modules/@babel/runtime/helpers/esm/defineProperty.js","webpack://map-side-bar/./src/components/SidebarContent.vue?9b8b","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?70ee","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?9729","webpack://map-side-bar/./node_modules/vue-loader/lib/runtime/componentNormalizer.js","webpack://map-side-bar/./src/components/Cascader.vue","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?9d70","webpack://map-side-bar/./src/components/BadgesGroup.vue?4ae4","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?8146","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?8625","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?ea1a","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/./src/components/index.js","webpack://map-side-bar/./node_modules/@vue/cli-service/lib/commands/build/entry-lib-no-default.js","webpack://map-side-bar/external \"core-js/modules/es.string.includes\""],"names":["_defineProperty","obj","key","value","Object","defineProperty","enumerable","configurable","writable","_arrayWithoutHoles","arr","Array","isArray","i","arr2","length","_iterableToArray","iter","Symbol","iterator","prototype","toString","call","from","_nonIterableSpread","TypeError","_toConsumableArray","arrayWithoutHoles","iterableToArray","nonIterableSpread","asyncGeneratorStep","gen","resolve","reject","_next","_throw","arg","info","error","done","Promise","then","_asyncToGenerator","fn","self","args","arguments","apply","err","undefined","_arrayWithHoles","_nonIterableRest","_toArray","arrayWithHoles","nonIterableRest","_classCallCheck","instance","Constructor","_defineProperties","target","props","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","push","label","id","get","discoverId","fetch","r","json","dataset","version","doi","discoverIds","promiseList","_discoverAllDois","all","values","flat","results","newResults","newResult","res","item","curie","split","name","description","updated","pennsieve","updatedAt","publishDate","datasetId","objectID","detailsReady","hits","foundKeyWords","uniqueKeywords","forEach","hit","keywords","keywordObj","keyword","includes","_splitUberonURL","Set","url","pop","filter","query","hitsperPage","page","hitsPerPage","filters","attributesToHighlight","attributesToRetrieve","searchData","items","_processResultsForCards","total","nbHits","identifier","dois","_processKeywords","facetPropPathMapping","shownFilters","getFilters","selectedFacetArray","f","removeShowAllFacets","facetsToOr","substring","lastIndexOf","facetArray","EventBus","Vue","_iterableToArrayLimit","_arr","_n","_d","_e","_i","_s","next","_slicedToArray","iterableToArrayLimit"],"mappings":";;QAAA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;;QAEA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;;;QAGA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;QACA,0CAA0C,gCAAgC;QAC1E;QACA;;QAEA;QACA;QACA;QACA,wDAAwD,kBAAkB;QAC1E;QACA,iDAAiD,cAAc;QAC/D;;QAEA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA,yCAAyC,iCAAiC;QAC1E,gHAAgH,mBAAmB,EAAE;QACrI;QACA;;QAEA;QACA;QACA;QACA,2BAA2B,0BAA0B,EAAE;QACvD,iCAAiC,eAAe;QAChD;QACA;QACA;;QAEA;QACA,sDAAsD,+DAA+D;;QAErH;QACA;;;QAGA;QACA;;;;;;;;AClFA,sD;;;;;;;ACAA,+D;;;;;;;ACAA,sE;;;;;;;ACAA,yD;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,uC;;;;;;;ACAA,8D;;;;;;;ACAA,4D;;;;;;;ACAA,yE;;;;;;;ACAA,2D;;;;;;;ACAA,gE;;;;;;;ACAA,kE;;;;;;;ACAA,oD;;;;;;;ACAA,mE;;;;;;;ACAA,kD;;;;;;;ACAA,kD;;;;;;;ACAA,uC;;;;;;;ACAA,uC;;;;;;;ACAA,qD;;;;;;;;ACAA;AAAA;AAAA;AAA2f,CAAgB,wiBAAG,EAAC,C;;;;;;;;ACA/gB;AAAA;AAAA;AAAif,CAAgB,8hBAAG,EAAC,C;;;;;;;ACArgB,mF;;;;;;;ACAA,4D;;;;;;;ACAA,mD;;;;;;;ACAA,4D;;;;;;;ACAA,gE;;;;;;;ACAA,kE;;;;;;;ACAA,kE;;;;;;;ACAA,2D;;;;;;;ACAA,mE;;;;;;;ACAA,kD;;;;;;;ACAA,gE;;;;;;;ACAA,sD;;;;;;;ACAA,2D;;;;;;;ACAA,uC;;;;;;;ACAA,uC;;;;;;;ACAA,kF;;;;;;;ACAA,uC;;;;;;;ACAA,oD;;;;;;;ACAA,0D;;;;;;;ACAA,oE;;;;;;;ACAA,0D;;;;;;;ACAA,kE;;;;;;;ACAA,wD;;;;;;;ACAA,4D;;;;;;;ACAA,gD;;;;;;;ACAA,kD;;;;;;;ACAA,kE;;;;;;;ACAA,uD;;;;;;;ACAA,gE;;;;;;;;ACAA;AAAA;AAAA;AAA0f,CAAgB,uiBAAG,EAAC,C;;;;;;;ACA9gB,0C;;;;;;;ACAA,gC;;;;;;;ACAA,8D;;;;;;;ACAA,uC;;;;;;;ACAA,gE;;;;;;;ACAA,+D;;;;;;;ACAA,mD;;;;;;;ACAA,mD;;;;;;;ACAA,gE;;;;;;;ACAA,0D;;;;;;;ACAA,iBAAiB,qBAAuB,oC;;;;;;;ACAxC,4E;;;;;;;ACAA,mE;;;;;;;ACAA,iE;;;;;;;ACAA,8D;;;;;;;ACAA,mD;;;;;;;ACAA,gE;;;;;;;ACAA,gD;;;;;;;ACAA,gD;;;;;;;;ACAA;AAAA;AAAA;AAAof,CAAgB,iiBAAG,EAAC,C;;;;;;;ACAxgB,uC;;;;;;;ACAA,6D;;;;;;;ACAA,6D;;;;;;;ACAA,yE;;;;;;;ACAA,6D;;;;;;;ACAA,8D;;;;;;;ACAA,kD;;;;;;;;ACAA;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;;ACA5gB;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;ACA5gB,mE;;;;;;;ACAA,oD;;;;;;;;ACAA;AAAA;AAAA;AAAyf,CAAgB,siBAAG,EAAC,C;;;;;;;ACA7gB,0D;;;;;;;ACAA,iD;;;;;;;;ACAA;AAAA;AAAA;AAAwf,CAAgB,qiBAAG,EAAC,C;;;;;;;ACA5gB,8D;;;;;;;ACAA,sE;;;;;;;ACAA,yD;;;;;;;ACAA,+D;;;;;;;;;;;;;;;ACAA;;AAEA;AACA,MAAM,IAAuC;AAC7C,IAAI,mBAAO,CAAC,MAAyB;AACrC;;AAEA,MAAM,eAAC;AACP,OAAO,eAAC,sCAAsC,eAAC,GAAG,eAAC;AACnD,IAAI,qBAAuB,GAAG,eAAC;AAC/B;AACA;;AAEA;AACe,sDAAI;;;ACdnB,0BAA0B,aAAa,0BAA0B,wBAAwB,iBAAiB,gBAAgB,8BAA8B,2BAA2B,0BAA0B,UAAU,iCAAiC,6BAA6B,8BAA8B,6KAA6K,KAAK,kCAAkC,wBAAwB,YAAY,uBAAuB,6BAA6B,4BAA4B,mBAAmB,UAAU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;;;;ACJD;AAGA;AACA,wBADA;AAEA,6BAFA;AAGA;AACA;AACA,sBAFA,gCAEA;AAAA,UACA,UADA,GACA,IADA,CACA,UADA;AAAA,UACA,QADA,GACA,IADA,CACA,QADA;AAAA,UACA,aADA,GACA,IADA,CACA,aADA;AAAA,UACA,SADA,GACA,IADA,CACA,SADA;AAAA,UACA,YADA,GACA,IADA,CACA,YADA;AAEA;AACA;;AACA;AAAA;AACA,oBADA;AAEA,uBAFA;AAGA,sDAHA;AAIA,yBAJA;AAKA;AALA;AAAA;;AAOA,4DACA;AACA;AACA,OAHA;;AAKA;AAAA,oCACA,WADA;AAAA,YACA,KADA;AAAA,YACA,IADA;;AAEA;AACA;;AACA;AACA;AACA;AACA,qBADA;AAEA,0CAFA;AAGA;AAHA;AAKA,WANA,MAMA;AACA;AAAA;AAAA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AArCA;AAHA,G;;ACJkU,CAAgB,gHAAG,EAAC,C;;ACAtV;;AAEA;AACA;AACA;;AAEe;AACf;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA,yBAAyB;AACzB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,GAAG;AACH;AACA,qBAAqB;AACrB;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,KAAK;AACL;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AC5FA,IAAI,eAAM,EAAE,wBAAe;AACiC;AACL;;;AAGvD;AAC0F;AAC1F,gBAAgB,kBAAU;AAC1B,EAAE,2CAAM;AACR,EAAE,eAAM;AACR,EAAE,wBAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,8D;;AClBA;AACX,kBAAgB,OA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AAEA;AAFA,eARA,CAaA;;;AACA;AACA,6GACA,eADA;AAGA,mDACA,2DADA;AAEA,aANA;AAOA,WArBA;;AAsBA;AACA,SA7BA,EA8BA,OA9BA,CA8BA;AACA;AACA,SAhCA;AAiCA,OAnCA;AAoCA,KA1CA;AA2CA;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KAjDA;AAkDA;AACA;AACA;AACA;AACA,iDAFA,CAIA;;AACA;AAAA;AAAA;AAAA;AACA,gCADA;AAEA,sCAFA;AAGA;AAHA;AAAA,WALA,CAWA;;AACA;AAAA;AAAA;AACA;AACA;AACA,mCADA;AAEA,sCAFA;AAGA;AAHA;AAKA,SAPA;AAUA,oCAtBA,CAsBA;;AAEA,6CAxBA,CAwBA;;AACA,qCAzBA,CAyBA;;AACA;AACA;AACA,KAhFA;AAiFA;AACA;AACA;AAAA;;AACA;AACA,6BACA,GADA,CACA;AAAA;AAAA,OADA,EAEA,QAFA,CAEA,IAFA,EAFA,CAKA;;AACA;AACA;AACA,2BAFA,CAGA;;AACA;AACA;AACA;AACA,SAPA,CAQA;;;AACA;AACA,kCADA,CAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,+CACA,8EADA,KAEA;AACA,aANA,MAMA;AACA;AACA;AACA;AACA,WAXA,MAWA;AACA;AACA;AACA,SAjCA,CAkCA;;;AACA;AACA;AACA;AACA;AACA;AACA,eAFA,MAEA;AACA;AACA;AACA,aANA,MAMA;AACA;AACA;AACA,eAFA,MAEA;AACA;AACA;AACA,aANA,MAMA;AACA;AACA;AACA,WAhBA,MAgBA;AACA,SAlBA;AAmBA;;AACA;AACA,KAjJA;AAkJA;AACA,4FADA,CACA;;;AACA,wCAFA,CAEA;AAEA;;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,OARA;AASA;AACA,kCAfA,CAgBA;;AACA;AACA;AACA;AACA;AACA,KAvKA;AAwKA;AACA;AACA;AACA;AACA,KA5KA;AA6KA;AACA;AACA,KA/KA;AAgLA;AAAA;;AACA;AACA;AACA;AACA;;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E,6BAA6B,YAAY,wBAAwB,YAAY,mCAAmC,wBAAwB,cAAc,mCAAmC,YAAY,oBAAoB,sDAAsD,UAAU,iDAAiD,iFAAiF,uBAAuB,sFAAsF,kBAAkB,+CAA+C,yBAAyB,gCAAgC,YAAY,gCAAgC,2CAA2C,YAAY,+BAA+B,iDAAiD,4BAA4B,GAAG,YAAY,aAAa,wBAAwB,4EAA4E,uBAAuB,+FAA+F,mBAAmB,8DAA8D,yBAAyB,oCAAoC,YAAY,wBAAwB,kBAAkB,2BAA2B,kEAAkE,+BAA+B,+BAA+B,6CAA6C,0DAA0D,2CAA2C,uCAAuC,qBAAqB,wCAAwC,0CAA0C,kBAAkB,4DAA4D,6CAA6C,iCAAiC,GAAG;AACzyF,IAAI,oEAAe;;;;;;;;;;;;;ACDJ,6DAAf,E,CAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,I;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;ACnCA;AACA;AAEA;AACA;AACA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA,qBADA;AAEA;AACA;;;;AAIA;AALA,GAFA;AASA;AACA;AACA,qBADA;AAEA,uBAFA;AAGA,2BAHA;AAIA,uBAJA;AAKA;AALA;AAOA,GAjBA;AAkBA;AACA;AACA,aADA,mBACA,GADA,EACA;AACA;AACA;AACA;AACA;AACA,WAFA,MAEA;AACA;AACA;AACA;AACA,SARA,MAQA;AACA;AACA;AACA,OAbA;AAcA;AAdA;AADA,GAlBA;AAoCA;AACA;AAAA;;AACA;AACA,4BACA,IADA,CACA;AACA;AACA;AACA,SAFA,MAEA;AACA;AACA;AACA,OAPA,EAQA,IARA,CAQA;AACA;AACA;AACA,OAXA,EAYA,KAZA,CAYA;AACA;AACA;AACA;AACA;AACA,OAjBA;AAkBA,KArBA;AAsBA;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KA9BA;AA+BA;AACA;AACA;AACA,OAFA,MAEA;AACA;AACA;AACA,KArCA;AAsCA;AACA;AACA;AACA;AACA;;AACA;AACA;AACA,KA7CA;AA8CA,oBA9CA,4BA8CA,IA9CA,EA8CA;AACA;AAEA,KAjDA;AAkDA;AACA;AACA;AACA;AACA;AACA;AAvDA;AApCA,G;;AC7DqU,CAAgB,sHAAG,EAAC,C;;;;;ACAnP;AACvC;AACL;AACqC;;;AAG/F;AAC0F;AAC1F,IAAI,qBAAS,GAAG,kBAAU;AAC1B,EAAE,8CAAM;AACR,EAAE,2DAAM;AACR,EAAE,oEAAe;AACjB;AACA;AACA;AACA;;AAEA;;AAEe,qEAAS,Q;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AC4BxB;AACA;AAUA;AACA;AACA;AACA;AACA;AACA;AAEA;AACA;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,iD,CAEA;AACA;;AACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBACA,WADA;AAAA;AAAA;AAAA;;AAAA;AAAA,mBAEA,eAFA;;AAAA;AAEA,iBAFA;;AAAA,iBAGA,KAHA;AAAA;AAAA;AAAA;;AAAA,kBAIA,wBAJA;;AAAA;AAAA,kBAMA,mBANA;;AAAA;AAAA,6CASA,QATA;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;AAAA;AAAA;AAAA;AAAA;;AAYA;AACA,iBADA;AAEA,gBAFA;AAGA,aAHA;AAIA,iBAJA;AAKA,YALA;AAMA,qBANA;AAOA,mBAPA;AAQA,SARA;AASA,cATA;AAUA,UAVA;AAWA,oBAXA;AAYA,6BAZA;AAaA;AAbA;AAgBA;AACA;AAAA;AAAA;AAAA;AAAA,GADA;AAEA,wBAFA;AAGA;AACA;AACA,mBADA;AAEA;AAFA,KADA;AAKA;AACA,mBADA;AAEA;AAFA,KALA;AASA;AACA,kBADA;AAEA;AAAA;AAAA;AAFA,KATA;AAaA;AACA,kBADA;AAEA;AAFA,KAbA;AAiBA;AACA,kBADA;AAEA;AAFA;AAjBA,GAHA;AAyBA;AACA,WAAW,uDACX,UADA;AAEA;AACA,wBADA;AAEA,6BAFA;AAGA;AAHA;AAFA;AAQA,GAlCA;AAmCA;AACA;AACA;AACA;AACA,uCADA;AAEA;AAFA;AAIA;AAPA,GAnCA;AA4CA;AACA;AACA;AACA,KAHA;AAIA;AAAA;AACA;AACA;AACA;;AACA;AACA;AACA;AACA;AACA,KAZA;AAaA;AACA;;AACA;AACA;AACA;AACA;AACA,KAnBA;AAoBA;AACA;AACA;AACA;AACA,KAxBA;AAyBA;AAAA;;AACA;AACA;AACA;AACA;AACA,KA9BA;AA+BA;AACA;AACA;AACA;AACA;AACA,sBADA;AAEA;AAFA;AAIA,KAvCA;AAwCA,iBAxCA,yBAwCA,OAxCA,EAwCA;AAAA;;AAAA;AACA;AACA;AACA;AACA;AACA,OAFA;AAGA;AACA;AACA;AACA;AACA;AACA;;AACA;;AACA;AAAA;AAAA;AAAA;;AACA,oCACA;AACA;AACA,mDAXA,CAYA;;AACA;AAAA;AAAA;AACA,OAdA;AAeA,KA7DA;AA8DA;AACA;AACA,KAhEA;AAiEA;AACA;AACA;AACA,KApEA;AAqEA;AACA;AACA;AACA;AACA,KAzEA;AA0EA;AACA;AAAA;AAAA;AACA,2BACA;AACA,KA9EA;AA+EA;AAAA;;AACA;AACA;AACA;;AACA;AACA;;AACA;AACA;AACA;AAAA;AAAA,qBACA,IADA,CACA;AACA,2CACA,8BADA,KAGA;AACA;AACA,yBANA,CAOA;;AACA;AACA,WAVA,EAWA,KAXA,CAWA;AACA;AACA;;AACA,2BAFA,CAGA;;AACA;AACA;A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","file":"map-side-bar.common.js","sourcesContent":[" \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\");","// extracted by mini-css-extract-plugin","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\");","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","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!./SidebarContent.vue?vue&type=style&index=0&id=01ae0fa8&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=01ae0fa8&scoped=true&lang=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!./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\");","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\");","// extracted by mini-css-extract-plugin","// extracted by mini-css-extract-plugin","module.exports = require(\"core-js/modules/es.object.get-own-property-descriptor\");","// extracted by mini-css-extract-plugin","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\");","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=7db0d736&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=7db0d736&scoped=true&lang=css&\"","module.exports = require(\"algoliasearch\");","module.exports = require(\"vue\");","module.exports = require(\"core-js/modules/es.array.iterator\");","// extracted by mini-css-extract-plugin","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\");","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!./SideBar.vue?vue&type=style&index=0&id=67f5b060&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=67f5b060&scoped=true&lang=css&\"","// extracted by mini-css-extract-plugin","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\");","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&\"","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=01251ea1&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=01251ea1&scoped=true&lang=css&\"","module.exports = require(\"core-js/modules/es.array.last-index-of\");","module.exports = require(\"current-script-polyfill\");","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=6c8573ea&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=6c8573ea&scoped=true&lang=css&\"","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(\"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}}):_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}}),_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}","<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","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","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 _processKeywords(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\r\n if (keyword.includes('UBERON') || keyword.includes('ilxtr') || keyword.includes('ILX')) {\r\n foundKeyWords.push(this._splitUberonURL(keyword))\r\n uniqueKeywords = [...new Set(foundKeyWords)]\r\n }\r\n })\r\n }\r\n })\r\n return uniqueKeywords\r\n }\r\n\r\n _splitUberonURL(url){\r\n return url.split('/').pop()\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 keywordsInSearch (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 ],\r\n })\r\n .then(response => {\r\n let keywords = this._processKeywords(response.hits)\r\n resolve(keywords)\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\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 facetsToOr = facets.filter(\r\n (facet) => facet.facetPropPath == facetPropPath\r\n );\r\n var filter = \"\";\r\n facetsToOr.map((facet) => {\r\n filter += `\"${facetPropPath}\":\"${facet.label}\" OR `;\r\n });\r\n if (filter == \"\") {\r\n return;\r\n }\r\n filter = `(${filter.substring(0, filter.lastIndexOf(\" OR \"))})`;\r\n filters += `${filter} AND `;\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 { shownFilters } 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 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(shownFilters)\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 }))\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 }\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 unlick 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 // }\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 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 this.cascadeSelected.filter(f=>f.term != filter.term)\r\n this.cascadeSelected.push([filter.facetPropPath, this.createCascaderItemValue(filter.term, filter.facet)])\r\n }\r\n },\r\n initiateSearch: function() {\r\n this.cascadeEvent(this.cascadeSelected)\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 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 });\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=7db0d736&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=7db0d736&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 \"7db0d736\",\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 let index = 0;\r\n this.entry.scaffolds.forEach((scaffold) => {\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.entry.contextualInformation ? `${this.envVars.API_LOCATION}s3-resource/${this.datasetId}/${this.datasetVersion}/files/${this.entry.contextualInformation}` : undefined,\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 },\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=6c8573ea&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=6c8573ea&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 \"6c8573ea\",\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.entry.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.contextData.description)}}),_c('br'),(_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])?_c('a',{key:i+'_5',attrs:{\"href\":_vm.generateFileLink(sample.path),\"target\":\"_blank\"}},[_vm._v(\"View Source\")]):_vm._e(),_c('div',{key:i+'_2',staticClass:\"padding\"})]})],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=\"entry.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=\"contextData.description\"/>\r\n <br/>\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]\" :href=\"generateFileLink(sample.path)\" target=\"_blank\">View Source</a>\r\n <div v-bind:key=\"i+'_2'\" class=\"padding\"/>\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\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\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 },\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 methods: {\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 })\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 = 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.entry.apiLocation}s3-resource/${this.entry.discoverId}/${this.entry.version}/files/${path}`\r\n },\r\n generateFileLink(path){\r\n return `https://sparc.science/file/${this.entry.discoverId}/${this.entry.version}?path=${encodeURI(path)}`\r\n\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.entry.apiLocation}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: 25px;\r\n height: auto;\r\n flex: 1;\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=01251ea1&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=01251ea1&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 \"01251ea1\",\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\" />\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 ></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 firstSearch: {\r\n type: String,\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 };\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 openSearch: function(filter, search='') {\r\n this.searchInput = search;\r\n this.resetPageNavigation();\r\n this.searchAlgolia(filter, search);\r\n if (filter) {\r\n this.filter = [...filter];\r\n this.$refs.filtersRef.setCascader(this.filter);\r\n }\r\n },\r\n addFilter: function(filter) {\r\n this.resetPageNavigation();\r\n if (filter) {\r\n this.$refs.filtersRef.addFilter(filter);\r\n this.$refs.filtersRef.initiateSearch()\r\n }\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.keywordsInSearch(getFilters(filters), query).then(keywords => {\r\n EventBus.$emit(\"keywordsFound\", keywords) \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=> res.name === element.name)\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[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\r\n // temporarily disable flatmap search since there are no datasets\r\n if (this.firstSearch === \"Flatmap\" || this.firstSearch === \"flatmap\") {\r\n this.openSearch(undefined, '')\r\n } else {\r\n this.openSearch(undefined, '');\r\n }\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=01ae0fa8&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=01ae0fa8&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 \"01ae0fa8\",\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 // 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('keywordsFound', (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=67f5b060&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=67f5b060&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 \"67f5b060\",\n null\n \n)\n\nexport default component.exports","import SideBar from \"./SideBar.vue\"\r\n\r\nexport {\r\n SideBar\r\n};\r\n\r\n\r\n\r\n","import './setPublicPath'\nexport * from '~entry'\n","module.exports = require(\"core-js/modules/es.string.includes\");"],"sourceRoot":""}