histomicsui 1.5.1.dev49__tar.gz → 1.5.1.dev51__tar.gz

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.
Files changed (181) hide show
  1. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/PKG-INFO +1 -1
  2. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/MetadataPlot.js +146 -12
  3. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/metadataPlot.pug +3 -2
  4. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/metadataPlot.pug +1 -1
  5. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/PKG-INFO +1 -1
  6. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/.circleci/config.yml +0 -0
  7. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/.editorconfig +0 -0
  8. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/.git-blame-ignore-revs +0 -0
  9. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/.gitignore +0 -0
  10. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/.pre-commit-config.yaml +0 -0
  11. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/LICENSE +0 -0
  12. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/MANIFEST.in +0 -0
  13. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/NOTICE +0 -0
  14. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/README.rst +0 -0
  15. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/codecov.yml +0 -0
  16. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/config_options.rst +0 -0
  17. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/controls.rst +0 -0
  18. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/images/difference.gif +0 -0
  19. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/images/intersect.gif +0 -0
  20. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/images/union.gif +0 -0
  21. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/docs/images/xor.gif +0 -0
  22. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/__init__.py +0 -0
  23. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/constants.py +0 -0
  24. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/handlers.py +0 -0
  25. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/__init__.py +0 -0
  26. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/aperio.py +0 -0
  27. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/case.py +0 -0
  28. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/cohort.py +0 -0
  29. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/image.py +0 -0
  30. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/meta.py +0 -0
  31. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/pathology.py +0 -0
  32. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/models/slide.py +0 -0
  33. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/__init__.py +0 -0
  34. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/aperio.py +0 -0
  35. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/hui_resource.py +0 -0
  36. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/image_browse_resource.py +0 -0
  37. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/system.py +0 -0
  38. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/rest/tcga.py +0 -0
  39. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/app.js +0 -0
  40. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/collections/StyleCollection.js +0 -0
  41. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/collections/UserCollection.js +0 -0
  42. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/collections/index.js +0 -0
  43. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/confirmDialog.js +0 -0
  44. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/editElement.js +0 -0
  45. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/editRegionOfInterest.js +0 -0
  46. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/editStyleGroups.js +0 -0
  47. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/index.js +0 -0
  48. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/metadataPlot.js +0 -0
  49. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/openAnnotatedImage.js +0 -0
  50. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/openImage.js +0 -0
  51. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/dialogs/saveAnnotation.js +0 -0
  52. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/events.js +0 -0
  53. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/index.js +0 -0
  54. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/main.js +0 -0
  55. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/models/StyleModel.js +0 -0
  56. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/models/index.js +0 -0
  57. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/package.json +0 -0
  58. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/AnnotationSelector.js +0 -0
  59. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/DrawWidget.js +0 -0
  60. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/FrameSelectorWidget.js +0 -0
  61. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/MetadataWidget.js +0 -0
  62. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/OverviewWidget.js +0 -0
  63. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/RegionSelector.js +0 -0
  64. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/ZoomWidget.js +0 -0
  65. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/panels/index.js +0 -0
  66. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/router.js +0 -0
  67. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/routes.js +0 -0
  68. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/static/favicon.png +0 -0
  69. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/body/configView.styl +0 -0
  70. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/body/image.styl +0 -0
  71. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/dialogs/editStyleGroups.styl +0 -0
  72. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/dialogs/openAnnotatedImage.styl +0 -0
  73. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/dialogs/saveAnnotation.styl +0 -0
  74. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/layout/header.styl +0 -0
  75. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/layout/headerAnalyses.styl +0 -0
  76. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/layout/headerImage.styl +0 -0
  77. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/layout/layout.styl +0 -0
  78. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/annotationSelector.styl +0 -0
  79. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/drawWidget.styl +0 -0
  80. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/frameSelectorWidget.styl +0 -0
  81. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/metadataPlot.styl +0 -0
  82. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/metadataWidget.styl +0 -0
  83. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/overviewWidget.styl +0 -0
  84. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/regionSelector.styl +0 -0
  85. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/panels/zoomWidget.styl +0 -0
  86. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/popover/annotationContextMenu.styl +0 -0
  87. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/popover/annotationPopover.styl +0 -0
  88. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/views/itemList.styl +0 -0
  89. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/stylesheets/views/searchResultsView.styl +0 -0
  90. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/body/configView.pug +0 -0
  91. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/body/image.pug +0 -0
  92. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/annotatedImageList.pug +0 -0
  93. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/confirmDialog.pug +0 -0
  94. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/editElement.pug +0 -0
  95. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/editRegionOfInterest.pug +0 -0
  96. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/editStyleGroups.pug +0 -0
  97. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/openAnnotatedImage.pug +0 -0
  98. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/openImage.pug +0 -0
  99. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/dialogs/saveAnnotation.pug +0 -0
  100. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/layout/header.pug +0 -0
  101. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/layout/headerAnalyses.pug +0 -0
  102. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/layout/headerImage.pug +0 -0
  103. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/layout/headerUser.pug +0 -0
  104. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/layout/layout.pug +0 -0
  105. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/annotationSelector.pug +0 -0
  106. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/drawWidget.pug +0 -0
  107. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/drawWidgetElement.pug +0 -0
  108. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/frameSelectorWidget.pug +0 -0
  109. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/metadataWidgetPanel.pug +0 -0
  110. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/overviewWidget.pug +0 -0
  111. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/panel.pug +0 -0
  112. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/regionSelector.pug +0 -0
  113. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/panels/zoomWidget.pug +0 -0
  114. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/popover/annotationContextMenu.pug +0 -0
  115. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/popover/annotationPopover.pug +0 -0
  116. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/popover/annotationPopoverMetadata.pug +0 -0
  117. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/templates/popover/pixelmapContextMenu.pug +0 -0
  118. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/HierarchyWidget.js +0 -0
  119. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/JobDetailsWidget.js +0 -0
  120. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/View.js +0 -0
  121. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/body/ConfigView.js +0 -0
  122. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/body/ImageView.js +0 -0
  123. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/body/index.js +0 -0
  124. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/index.js +0 -0
  125. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/itemList.js +0 -0
  126. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/itemPage.js +0 -0
  127. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/HeaderAnalysesView.js +0 -0
  128. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/HeaderImageView.js +0 -0
  129. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/HeaderUserView.js +0 -0
  130. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/HeaderView.js +0 -0
  131. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/LoginView.js +0 -0
  132. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/layout/index.js +0 -0
  133. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/popover/AnnotationContextMenu.js +0 -0
  134. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/popover/AnnotationPopover.js +0 -0
  135. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/popover/PixelmapContextMenu.js +0 -0
  136. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/popover/index.js +0 -0
  137. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/searchResultsView.js +0 -0
  138. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/views/utils.js +0 -0
  139. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/vue/components/ColorPickerInput.vue +0 -0
  140. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue +0 -0
  141. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue +0 -0
  142. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/web_client/webpack.helper.js +0 -0
  143. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui/webroot.mako +0 -0
  144. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/SOURCES.txt +0 -0
  145. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/dependency_links.txt +0 -0
  146. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/entry_points.txt +0 -0
  147. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/not-zip-safe +0 -0
  148. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/requires.txt +0 -0
  149. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/histomicsui.egg-info/top_level.txt +0 -0
  150. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/requirements-dev.txt +0 -0
  151. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/ruff.toml +0 -0
  152. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/setup.cfg +0 -0
  153. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/setup.py +0 -0
  154. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/__init__.py +0 -0
  155. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/datastore.py +0 -0
  156. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/girder_utilities.py +0 -0
  157. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/.histomicsui_config.yaml +0 -0
  158. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/sample.anot +0 -0
  159. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/sample.meta +0 -0
  160. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/sample_girder_id.anot +0 -0
  161. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/test_analysis_detection.xml +0 -0
  162. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_files/test_analysis_features.xml +0 -0
  163. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_handlers.py +0 -0
  164. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_hui_rest.py +0 -0
  165. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_image_browse_endpoints.py +0 -0
  166. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_load.py +0 -0
  167. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_tcga.py +0 -0
  168. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/test_web_client.py +0 -0
  169. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/.eslintrc +0 -0
  170. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/analysisSpec.js +0 -0
  171. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/annotationSpec.js +0 -0
  172. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/girderUISpec.js +0 -0
  173. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/huiSpec.js +0 -0
  174. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/huiTest.js +0 -0
  175. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/itemSpec.js +0 -0
  176. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/metadataPanelSpec.js +0 -0
  177. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/metadataPlotSpec.js +0 -0
  178. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/overviewPanelSpec.js +0 -0
  179. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/panelLayoutSpec.js +0 -0
  180. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tests/web_client_specs/pixelmapCategorySpec.js +0 -0
  181. {histomicsui-1.5.1.dev49 → histomicsui-1.5.1.dev51}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: histomicsui
3
- Version: 1.5.1.dev49
3
+ Version: 1.5.1.dev51
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.
@@ -65,6 +65,7 @@ var MetadataPlot = Panel.extend({
65
65
  });
66
66
  if (!this._listeningForAnnotations) {
67
67
  this.listenTo(this.parentView.annotationSelector.collection, 'sync remove update reset change:displayed h:refreshed', this._refetchPlottable);
68
+ this.listenTo(this.parentView, 'h:selectedElementsByRegion', this.onElementSelect);
68
69
  this._listeningForAnnotations = true;
69
70
  }
70
71
  }
@@ -155,6 +156,12 @@ var MetadataPlot = Panel.extend({
155
156
  }
156
157
  });
157
158
  keys = keys.concat(['_0_item.name', '_2_item.id', '_bbox.x0', '_bbox.y0', '_bbox.x1', '_bbox.y1']);
159
+ if (this._currentAnnotations && this._currentAnnotations.length > 1) {
160
+ keys = keys.concat(['_1_annotation.name']);
161
+ }
162
+ if (this._currentAnnotations && this._currentAnnotations.length >= 1) {
163
+ keys = keys.concat(['_3_annotation.id', '_5_annotationelement.id']);
164
+ }
158
165
  this.plottableDataPromise = restRequest({
159
166
  url: `annotation/item/${this.item.id}/plot/data`,
160
167
  method: 'POST',
@@ -186,7 +193,8 @@ var MetadataPlot = Panel.extend({
186
193
  data: this.plottableData.data,
187
194
  colDict: {},
188
195
  series: {},
189
- format: plotConfig.format || 'scatter'
196
+ format: plotConfig.format || 'scatter',
197
+ adjacentItems: !!plotConfig.folder
190
198
  };
191
199
  plotData.columns.forEach((col) => {
192
200
  plotData.colDict[col.key] = col;
@@ -198,12 +206,142 @@ var MetadataPlot = Panel.extend({
198
206
  },
199
207
 
200
208
  onHover: function (evt) {
201
- // this is a stub for wrapping.
209
+ if (!evt || !evt.points || evt.points.length < 1 || evt.points[0].pointIndex === undefined || !$('svg g.hoverlayer').length) {
210
+ return;
211
+ }
212
+ const idx = evt.points[0].pointIndex;
213
+ const image = this.lastPlotData.data[idx].image;
214
+ const maxw = 100, maxh = 100;
215
+ const imgw = Math.min(Math.ceil(image.right - image.left) * 2, maxw);
216
+ const imgh = Math.min(Math.ceil(image.bottom - image.top) * 2, maxh);
217
+ const regionUrl = `api/v1/item/${image.id}/tiles/region?width=${imgw}&height=${imgh}&left=${image.left}&top=${image.top}&right=${image.right}&bottom=${image.bottom}`;
218
+ let x = parseFloat($('svg g.hoverlayer g.hovertext text[x]').attr('x'));
219
+ let y = parseFloat($('svg g.hoverlayer g.hovertext text[y]').attr('y'));
220
+ x = x === 0 ? -maxw / 2 + (maxw - imgw) / 2 : x < 0 ? x - maxw + (maxw - imgw) : x;
221
+ const d = $('svg g.hoverlayer g.hovertext path[d]').attr('d');
222
+ if (d && (d.split('L6,').length >= 2 || d.split('L-6,').length >= 2)) {
223
+ const y2 = parseFloat(d.split('v')[2]);
224
+ y += Math.abs(y2) - maxh - 13 + (maxh - imgh) / 2;
225
+ } else if (d && d.split('v').length === 2) {
226
+ const y2 = parseFloat(d.split('v')[1]);
227
+ y += Math.abs(y2) - maxh - 13 + (maxh - imgh) / 2;
228
+ } else {
229
+ y = -3;
230
+ }
231
+ $('svg g.hoverlayer g.hovertext image.hoverthumbnail').remove();
232
+ $('svg g.hoverlayer g.hovertext').html($('svg g.hoverlayer g.hovertext').html() + `<image class="hoverthumbnail" href="${regionUrl}" x="${x}px" y="${y}px" width="${imgw}px" height="${imgh}px"/>`);
202
233
  },
203
234
 
204
235
  adjustHoverText: function (d, parts, plotData) {
205
236
  },
206
237
 
238
+ onSelect: function (evt, plotData) {
239
+ if (plotData.colDict['_3_annotation.id'] === undefined || plotData.colDict['_5_annotationelement.id'] === undefined) {
240
+ return;
241
+ }
242
+ // evt is undefined when selection is cleared
243
+ if (evt === undefined) {
244
+ this.parentView._resetSelection();
245
+ return;
246
+ }
247
+ // evt.points is an array with data, fullData, pointNumber, and pointIndex
248
+ const annots = {};
249
+ const elements = [];
250
+ evt.points.forEach((pt) => {
251
+ const row = plotData.data[pt.pointIndex];
252
+ const annotid = row[plotData.colDict['_3_annotation.id'].index];
253
+ const elid = row[plotData.colDict['_5_annotationelement.id'].index];
254
+ if (annotid === undefined || elid === undefined) {
255
+ return;
256
+ }
257
+ if (annots[annotid] === undefined) {
258
+ annots[annotid] = this.parentView.annotationSelector.collection.get(annotid) || null;
259
+ }
260
+ if (annots[annotid] === null || !annots[annotid]._elements || !annots[annotid]._elements._byId || !annots[annotid]._elements._byId[elid]) {
261
+ return;
262
+ }
263
+ elements.push(annots[annotid]._elements._byId[elid]);
264
+ });
265
+ if (!elements.length) {
266
+ return;
267
+ }
268
+ this.parentView._resetSelection();
269
+ elements.forEach((element, idx) => {
270
+ this.parentView._selectElement(element, {silent: idx !== elements.length - 1});
271
+ });
272
+ },
273
+
274
+ onElementSelect: function (elements) {
275
+ if (!this.lastPlotData || !this.lastPlotData.colDict['_5_annotationelement.id'] || !elements.models) {
276
+ return;
277
+ }
278
+ const ids = {};
279
+ elements.models.forEach((el) => {
280
+ ids[el.id] = true;
281
+ });
282
+ const colidx = this.lastPlotData.colDict['_5_annotationelement.id'].index;
283
+ const points = this.lastPlotData.data.map((row, idx) => ids[row[colidx]] ? idx : null).filter((idx) => idx !== null);
284
+ if (!points.length) {
285
+ return;
286
+ }
287
+ window.Plotly.restyle(this._plotlyNode[0], {selectedpoints: [points]});
288
+ },
289
+
290
+ _formatNumber: function (val, significant) {
291
+ if (isNaN(parseFloat(val))) {
292
+ return val;
293
+ }
294
+ if (!significant || significant < 1) {
295
+ significant = 3;
296
+ }
297
+ const digits = Math.min(significant, Math.max(0, significant - Math.floor(Math.log10(Math.abs(val)))));
298
+ return val.toFixed(digits);
299
+ },
300
+
301
+ _hoverText: function (d, plotData) {
302
+ const used = {};
303
+ let parts = [];
304
+ let key = '_0_item.name';
305
+ if (plotData.adjacentItems && plotData.colDict[key] && d[plotData.colDict[key].index] !== undefined && plotData.colDict[key].distinctcount !== 1) {
306
+ used[key] = true;
307
+ parts.push(plotData.colDict[key]);
308
+ }
309
+ key = '_1_annotation.name';
310
+ if (plotData.colDict[key] && d[plotData.colDict[key].index] !== undefined) {
311
+ used[key] = true;
312
+ parts.push(plotData.colDict[key]);
313
+ }
314
+ ['x', 'y', 'r', 'c', 's'].forEach((series) => {
315
+ if (plotData.series[series] && d[plotData.series[series].index] !== undefined && used[plotData.series[series].key] === undefined) {
316
+ used[plotData.series[series].key] = true;
317
+ parts.push(plotData.series[series]);
318
+ }
319
+ });
320
+ parts = parts.map((col) => `${col.title}: ${col.type === 'number' ? this._formatNumber(d[col.index]) : d[col.index]}`);
321
+
322
+ const imageDict = {
323
+ id: '_2_item.id',
324
+ left: '_bbox.x0',
325
+ top: '_bbox.y0',
326
+ right: '_bbox.x1',
327
+ bottom: '_bbox.y1'
328
+ };
329
+ if (Object.values(imageDict).every((v) => plotData.colDict[v] && d[plotData.colDict[v].index] !== undefined)) {
330
+ d.image = {};
331
+ Object.entries(imageDict).forEach(([k, v]) => {
332
+ d.image[k] = d[plotData.colDict[v].index];
333
+ });
334
+ /* Plotly adds hovertext rows in its own way, so add several rows
335
+ * that are blank and of some width that we can dynamically
336
+ * replace. */
337
+ for (let i = 0; i < 8; i += 1) {
338
+ parts.push('<span class="hui-plotly-hover-thumbnail">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>');
339
+ }
340
+ }
341
+ this.adjustHoverText(d, parts, plotData);
342
+ return '<span class="hui-plotly-hover">' + parts.join('<br>') + '</span>';
343
+ },
344
+
207
345
  plotDataToPlotly: function (plotData) {
208
346
  const colorBrewerPaired12 = ['#a6cee3', '#1f78b4', '#b2df8a', '#33a02c', '#fb9a99', '#e31a1c', '#fdbf6f', '#ff7f00', '#cab2d6', '#6a3d9a', '#ffff99', '#b15928'];
209
347
  const viridis = ['#440154', '#482172', '#423d84', '#38578c', '#2d6f8e', '#24858d', '#1e9a89', '#2ab07e', '#51c468', '#86d449', '#c2df22', '#fde724'];
@@ -214,17 +352,11 @@ var MetadataPlot = Panel.extend({
214
352
  const plotlyData = {
215
353
  x: plotData.data.map((d) => d[plotData.series.x.index]),
216
354
  y: plotData.data.map((d) => d[plotData.series.y.index]),
217
- hovertext: plotData.data.map((d) => {
218
- const parts = [];
219
- ['x', 'y', 'r', 'c', 's'].forEach((series) => {
220
- if (plotData.series[series] && d[plotData.series[series].index] !== undefined) {
221
- parts.push(`${plotData.series[series].title}: ${d[plotData.series[series].index]}`);
222
- }
223
- });
224
- this.adjustHoverText(d, parts, plotData);
225
- return '<span class="hui-plotly-hover" style="font-size: 9px">' + parts.join('<br>') + '</span>';
226
- }),
355
+ hovertext: plotData.data.map((d) => this._hoverText(d, plotData)),
227
356
  hoverinfo: 'text',
357
+ hoverlabel: {
358
+ font: {size: 10}
359
+ },
228
360
  marker: {
229
361
  symbol: plotData.series.s && plotData.series.s.distinct ? plotData.data.map((d) => plotData.series.s.distinct.indexOf(d[plotData.series.s.index])) : 0,
230
362
  size: plotData.series.r && (plotData.series.r.type === 'number' || plotData.series.r.distinctcount)
@@ -312,8 +444,10 @@ var MetadataPlot = Panel.extend({
312
444
  plotOptions.xaxis = {title: {text: plotData.format !== 'violin' ? `${plotData.series.x.title}` : `${plotData.series.s.title}`}};
313
445
  plotOptions.yaxis = {title: {text: `${plotData.series.y.title}`}};
314
446
  }
447
+ this._plotlyNode = elem;
315
448
  window.Plotly.newPlot(elem[0], this.plotDataToPlotly(plotData), plotOptions);
316
449
  elem[0].on('plotly_hover', (evt) => this.onHover(evt));
450
+ elem[0].on('plotly_selected', (evt) => this.onSelect(evt, plotData));
317
451
  });
318
452
  }
319
453
  return this;
@@ -22,7 +22,7 @@
22
22
  {key: 'r', label: 'Radius'},
23
23
  {key: 'c', label: 'Color'},
24
24
  {key: 's', label: 'Symbol', string: true, comment: 'Grouping for violin plots'}]
25
- for series in seriesList
25
+ for series, seriesidx in seriesList
26
26
  .form-group
27
27
  label(for='h-plot-series-' + series.key) #{series.label}
28
28
  if series.comment
@@ -30,9 +30,10 @@
30
30
  select.form-control(id='h-plot-series-' + series.key)
31
31
  if !series.number
32
32
  option(value='_none_', selected=plotConfig[series.key] === undefined) None
33
- each opt in plotOptions
33
+ each opt, optidx in plotOptions
34
34
  if (!series.number || opt.type === 'number') && (!series.string || opt.type === 'string' || opt.distinct)
35
35
  - var selected = plotConfig[series.key] === opt.key
36
+ - if (plotConfig[series.key] === undefined && series.number === true && optidx === seriesidx) { selected = true; }
36
37
  option(value=opt.key, selected=selected) #{opt.title}
37
38
  .form-group
38
39
  label(for='h-plot-folder')
@@ -10,4 +10,4 @@ block controls
10
10
  i.icon-resize-full(title="Maximize")
11
11
 
12
12
  block content
13
- .h-metadata-plot-area
13
+ #h-metadata-plot.h-metadata-plot-area
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: histomicsui
3
- Version: 1.5.1.dev49
3
+ Version: 1.5.1.dev51
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.