histomicsui 1.7.3.dev16__tar.gz → 1.7.3.dev38__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 (187) hide show
  1. {histomicsui-1.7.3.dev16/histomicsui.egg-info → histomicsui-1.7.3.dev38}/PKG-INFO +1 -1
  2. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/saveAnnotation.js +28 -0
  3. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/AnnotationSelector.js +3 -1
  4. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/saveAnnotation.pug +1 -0
  5. histomicsui-1.7.3.dev38/histomicsui/web_client/vue/components/AnnotationHistoryBrowser.vue +104 -0
  6. histomicsui-1.7.3.dev38/histomicsui/web_client/vue/components/AnnotationHistoryBrowserContainer.vue +162 -0
  7. histomicsui-1.7.3.dev38/histomicsui/web_client/vue/components/AnnotationHistoryGroup.vue +128 -0
  8. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38/histomicsui.egg-info}/PKG-INFO +1 -1
  9. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/SOURCES.txt +3 -0
  10. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/.circleci/config.yml +0 -0
  11. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/.editorconfig +0 -0
  12. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/.git-blame-ignore-revs +0 -0
  13. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/.gitignore +0 -0
  14. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/.pre-commit-config.yaml +0 -0
  15. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/LICENSE +0 -0
  16. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/MANIFEST.in +0 -0
  17. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/NOTICE +0 -0
  18. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/README.rst +0 -0
  19. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/codecov.yml +0 -0
  20. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/config_options.rst +0 -0
  21. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/controls.rst +0 -0
  22. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/images/difference.gif +0 -0
  23. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/images/intersect.gif +0 -0
  24. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/images/union.gif +0 -0
  25. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/images/xor.gif +0 -0
  26. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/docs/slicer_cli_plugins.rst +0 -0
  27. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/__init__.py +0 -0
  28. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/constants.py +0 -0
  29. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/handlers.py +0 -0
  30. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/__init__.py +0 -0
  31. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/aperio.py +0 -0
  32. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/case.py +0 -0
  33. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/cohort.py +0 -0
  34. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/image.py +0 -0
  35. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/meta.py +0 -0
  36. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/pathology.py +0 -0
  37. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/models/slide.py +0 -0
  38. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/__init__.py +0 -0
  39. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/aperio.py +0 -0
  40. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/hui_resource.py +0 -0
  41. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/image_browse_resource.py +0 -0
  42. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/system.py +0 -0
  43. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/rest/tcga.py +0 -0
  44. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/app.js +0 -0
  45. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/collections/StyleCollection.js +0 -0
  46. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/collections/UserCollection.js +0 -0
  47. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/collections/index.js +0 -0
  48. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/confirmDialog.js +0 -0
  49. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/editElement.js +0 -0
  50. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/editRegionOfInterest.js +0 -0
  51. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/editStyleGroups.js +0 -0
  52. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/index.js +0 -0
  53. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/metadataPlot.js +0 -0
  54. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/openAnnotatedImage.js +0 -0
  55. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/dialogs/openImage.js +0 -0
  56. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/events.js +0 -0
  57. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/index.js +0 -0
  58. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/main.js +0 -0
  59. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/models/StyleModel.js +0 -0
  60. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/models/index.js +0 -0
  61. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/package.json +0 -0
  62. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/DrawWidget.js +0 -0
  63. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/FrameSelectorWidget.js +0 -0
  64. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/MetadataPlot.js +0 -0
  65. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/MetadataWidget.js +0 -0
  66. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/OverviewWidget.js +0 -0
  67. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/RegionSelector.js +0 -0
  68. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/ZoomWidget.js +0 -0
  69. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/panels/index.js +0 -0
  70. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/router.js +0 -0
  71. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/routes.js +0 -0
  72. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/static/favicon.png +0 -0
  73. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/body/configView.styl +0 -0
  74. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/body/image.styl +0 -0
  75. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/dialogs/editStyleGroups.styl +0 -0
  76. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/dialogs/metadataPlot.styl +0 -0
  77. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/dialogs/openAnnotatedImage.styl +0 -0
  78. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/dialogs/saveAnnotation.styl +0 -0
  79. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/layout/header.styl +0 -0
  80. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/layout/headerAnalyses.styl +0 -0
  81. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/layout/headerImage.styl +0 -0
  82. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/layout/layout.styl +0 -0
  83. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/annotationSelector.styl +0 -0
  84. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/drawWidget.styl +0 -0
  85. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/frameSelectorWidget.styl +0 -0
  86. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/metadataPlot.styl +0 -0
  87. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/metadataWidget.styl +0 -0
  88. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/overviewWidget.styl +0 -0
  89. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/regionSelector.styl +0 -0
  90. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/panels/zoomWidget.styl +0 -0
  91. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/popover/annotationContextMenu.styl +0 -0
  92. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/popover/annotationPopover.styl +0 -0
  93. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/views/itemList.styl +0 -0
  94. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/stylesheets/views/searchResultsView.styl +0 -0
  95. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/body/configView.pug +0 -0
  96. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/body/image.pug +0 -0
  97. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/annotatedImageList.pug +0 -0
  98. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/confirmDialog.pug +0 -0
  99. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/editElement.pug +0 -0
  100. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/editRegionOfInterest.pug +0 -0
  101. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/editStyleGroups.pug +0 -0
  102. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/metadataPlot.pug +0 -0
  103. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/openAnnotatedImage.pug +0 -0
  104. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/dialogs/openImage.pug +0 -0
  105. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/layout/header.pug +0 -0
  106. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/layout/headerAnalyses.pug +0 -0
  107. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/layout/headerImage.pug +0 -0
  108. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/layout/headerUser.pug +0 -0
  109. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/layout/layout.pug +0 -0
  110. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/annotationSelector.pug +0 -0
  111. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/drawWidget.pug +0 -0
  112. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/drawWidgetElement.pug +0 -0
  113. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/frameSelectorWidget.pug +0 -0
  114. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/metadataPlot.pug +0 -0
  115. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/metadataWidgetPanel.pug +0 -0
  116. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/overviewWidget.pug +0 -0
  117. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/panel.pug +0 -0
  118. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/regionSelector.pug +0 -0
  119. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/panels/zoomWidget.pug +0 -0
  120. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/popover/annotationContextMenu.pug +0 -0
  121. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/popover/annotationPopover.pug +0 -0
  122. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/popover/annotationPopoverMetadata.pug +0 -0
  123. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/templates/popover/pixelmapContextMenu.pug +0 -0
  124. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/HierarchyWidget.js +0 -0
  125. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/JobDetailsWidget.js +0 -0
  126. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/View.js +0 -0
  127. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/body/ConfigView.js +0 -0
  128. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/body/ImageView.js +0 -0
  129. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/body/index.js +0 -0
  130. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/index.js +0 -0
  131. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/itemList.js +0 -0
  132. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/itemPage.js +0 -0
  133. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/HeaderAnalysesView.js +0 -0
  134. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/HeaderImageView.js +0 -0
  135. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/HeaderUserView.js +0 -0
  136. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/HeaderView.js +0 -0
  137. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/LoginView.js +0 -0
  138. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/layout/index.js +0 -0
  139. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/popover/AnnotationContextMenu.js +0 -0
  140. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/popover/AnnotationPopover.js +0 -0
  141. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/popover/PixelmapContextMenu.js +0 -0
  142. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/popover/index.js +0 -0
  143. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/searchResultsView.js +0 -0
  144. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/views/utils.js +0 -0
  145. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/vue/components/ColorPickerInput.vue +0 -0
  146. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue +0 -0
  147. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue +0 -0
  148. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/web_client/webpack.helper.js +0 -0
  149. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui/webroot.mako +0 -0
  150. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/dependency_links.txt +0 -0
  151. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/entry_points.txt +0 -0
  152. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/not-zip-safe +0 -0
  153. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/requires.txt +0 -0
  154. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/histomicsui.egg-info/top_level.txt +0 -0
  155. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/pyproject.toml +0 -0
  156. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/requirements-dev.txt +0 -0
  157. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/ruff.toml +0 -0
  158. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/setup.cfg +0 -0
  159. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/setup.py +0 -0
  160. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/__init__.py +0 -0
  161. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/datastore.py +0 -0
  162. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/girder_utilities.py +0 -0
  163. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/.histomicsui_config.yaml +0 -0
  164. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/sample.anot +0 -0
  165. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/sample.meta +0 -0
  166. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/sample_girder_id.anot +0 -0
  167. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/test_analysis_detection.xml +0 -0
  168. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_files/test_analysis_features.xml +0 -0
  169. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_handlers.py +0 -0
  170. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_hui_rest.py +0 -0
  171. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_image_browse_endpoints.py +0 -0
  172. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_load.py +0 -0
  173. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_tcga.py +0 -0
  174. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/test_web_client.py +0 -0
  175. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/.eslintrc +0 -0
  176. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/analysisSpec.js +0 -0
  177. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/annotationSpec.js +0 -0
  178. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/girderUISpec.js +0 -0
  179. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/huiSpec.js +0 -0
  180. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/huiTest.js +0 -0
  181. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/itemSpec.js +0 -0
  182. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/metadataPanelSpec.js +0 -0
  183. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/metadataPlotSpec.js +0 -0
  184. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/overviewPanelSpec.js +0 -0
  185. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/panelLayoutSpec.js +0 -0
  186. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tests/web_client_specs/pixelmapCategorySpec.js +0 -0
  187. {histomicsui-1.7.3.dev16 → histomicsui-1.7.3.dev38}/tox.ini +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: histomicsui
3
- Version: 1.7.3.dev16
3
+ Version: 1.7.3.dev38
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.
@@ -8,6 +8,8 @@ import AccessWidget from '@girder/core/views/widgets/AccessWidget';
8
8
  // import MetadataWidget from '@girder/core/views/widgets/MetadataWidget';
9
9
  import View from '@girder/core/views/View';
10
10
 
11
+ import AnnotationHistoryBrowserContainer from '../vue/components/AnnotationHistoryBrowserContainer.vue';
12
+
11
13
  import MetadataWidget from '../panels/MetadataWidget';
12
14
  import '../stylesheets/dialogs/saveAnnotation.styl';
13
15
  import saveAnnotation from '../templates/dialogs/saveAnnotation.pug';
@@ -332,6 +334,23 @@ var SaveAnnotation = View.extend({
332
334
 
333
335
  this.$el.find('.modal-dialog').addClass('hui-save-annotation-dialog');
334
336
  this._updateFuncValues();
337
+
338
+ // Mount Vue component for annotation history if editing an existing annotation
339
+ const historyBrowserElement = this.$('.vue-component-annotation-history').get(0);
340
+ if (historyBrowserElement) {
341
+ const historyBrowser = new AnnotationHistoryBrowserContainer({
342
+ historyBrowserElement,
343
+ propsData: {
344
+ annotationId: this.annotation.id,
345
+ parentView: this,
346
+ defaultGroup: this.options.defaultGroup || 'default'
347
+ }
348
+ });
349
+ historyBrowser.$mount();
350
+ historyBrowserElement.appendChild(historyBrowser.$el);
351
+ this.historyBrowser = historyBrowser;
352
+ }
353
+
335
354
  return this;
336
355
  },
337
356
 
@@ -425,6 +444,15 @@ var SaveAnnotation = View.extend({
425
444
  return setValue;
426
445
  },
427
446
 
447
+ onRevert() {
448
+ if (this.annotation) {
449
+ delete this.annotation._meta;
450
+ delete this.annotation._styleFuncs;
451
+ }
452
+ this.annotation.trigger('h:revert:annotation', this.annotation, {});
453
+ this.$el.modal('hide');
454
+ },
455
+
428
456
  /**
429
457
  * Respond to form submission. Triggers a `g:save` event on the
430
458
  * AnnotationModel.
@@ -57,6 +57,7 @@ var AnnotationSelector = Panel.extend({
57
57
  this.listenTo(eventStream, 'g:eventStream.start', this._refreshAnnotations);
58
58
  this.listenTo(eventStream, 'g:event.large_image_annotation.create', this._refreshAnnotations);
59
59
  this.listenTo(eventStream, 'g:event.large_image_annotation.remove', this._refreshAnnotations);
60
+ this.listenTo(this.collection, 'h:revert:annotation', this._refreshAnnotations);
60
61
  this.listenTo(this.collection, 'change:annotation change:groups', this._saveAnnotation);
61
62
  this.listenTo(girderEvents, 'g:login', () => {
62
63
  this.collection.reset();
@@ -238,8 +239,9 @@ var AnnotationSelector = Panel.extend({
238
239
  editAnnotationMetadata(evt) {
239
240
  const id = $(evt.currentTarget).parents('.h-annotation').data('id');
240
241
  const model = this.collection.get(id);
242
+ const defaultGroup = this.parentView._defaultGroup;
241
243
  this.listenToOnce(
242
- showSaveAnnotationDialog(model, {title: 'Edit annotation', viewer: this.viewer}),
244
+ showSaveAnnotationDialog(model, {title: 'Edit annotation', viewer: this.viewer, defaultGroup}),
243
245
  'g:submit',
244
246
  () => {
245
247
  if (model.get('displayed')) {
@@ -91,6 +91,7 @@ mixin functional(name, key, title, color)
91
91
  = ' '
92
92
  i.icon-angle-circled-down
93
93
  | Global Version: #{model.get('_version')}
94
+ .vue-component-annotation-history
94
95
  .hui-annotation-metadata.hui-annotation-metadata-dialog
95
96
  if showStyleEditor
96
97
  hr
@@ -0,0 +1,104 @@
1
+ <script>
2
+ import AnnotationHistoryGroup from './AnnotationHistoryGroup.vue';
3
+ export default {
4
+ components: {
5
+ AnnotationHistoryGroup
6
+ },
7
+ props: ['annotationHistory', 'loading', 'userMap', 'defaultGroup'],
8
+ emits: ['revert'],
9
+ data() {
10
+ return {
11
+ collapsed: true
12
+ };
13
+ },
14
+ computed: {
15
+ annotationGroups() {
16
+ if (!this.annotationHistory.length) {
17
+ return [];
18
+ }
19
+ const annotationGroups = [];
20
+ let currentGroup = [this.annotationHistory[0]];
21
+ let lastTime = new Date(this.annotationHistory[0].updated);
22
+ this.annotationHistory.slice(1).forEach((annotation) => {
23
+ const updatedTime = new Date(annotation.updated);
24
+ const timeDiff = Math.abs(updatedTime - lastTime);
25
+ if (timeDiff >= 60 * 60 * 1000) {
26
+ // Start a new group
27
+ annotationGroups.push(currentGroup);
28
+ currentGroup = [annotation];
29
+ } else {
30
+ currentGroup.push(annotation);
31
+ }
32
+ lastTime = updatedTime;
33
+ });
34
+ annotationGroups.push(currentGroup);
35
+ return annotationGroups;
36
+ },
37
+ annotationHistoryEnabled() {
38
+ if (!this.annotationHistory || this.annotationHistory.length === 0) {
39
+ return undefined;
40
+ }
41
+ if (this.annotationHistory.length > 1) {
42
+ return true;
43
+ }
44
+ const firstVersion = this.annotationHistory[0];
45
+ return firstVersion.created === firstVersion.updated;
46
+ }
47
+ },
48
+ methods: {
49
+ handleRevert(version) {
50
+ this.$emit('revert', version);
51
+ }
52
+ }
53
+ };
54
+ </script>
55
+
56
+ <template>
57
+ <div>
58
+ <div class="history-header">
59
+ <span
60
+ class="history-container-toggle"
61
+ @click="collapsed = !collapsed"
62
+ >
63
+ <i :class="collapsed ? 'icon-right-open' : 'icon-down-open'" />
64
+ Annotation Edit History
65
+ </span>
66
+ </div>
67
+ <div v-if="!collapsed">
68
+ <div v-if="!annotationHistoryEnabled">
69
+ <span>Ensure annotation history is turned on to track previous versions.</span>
70
+ </div>
71
+ <div v-else>
72
+ <div
73
+ class="history-body"
74
+ >
75
+ <div v-if="!annotationHistory || loading">
76
+ <i class="icon-spin4 animate-spin" />
77
+ Loading...
78
+ </div>
79
+ <div v-else>
80
+ <annotation-history-group
81
+ v-for="(group, index) in annotationGroups"
82
+ :key="index"
83
+ :history-group="group"
84
+ :user-id-map="userMap"
85
+ :allow-revert-initial="index !== 0"
86
+ :default-group="defaultGroup"
87
+ @revertToAnnotation="handleRevert"
88
+ />
89
+ </div>
90
+ </div>
91
+ </div>
92
+ </div>
93
+ </div>
94
+ </template>
95
+
96
+ <style scoped>
97
+ .history-container-toggle:hover {
98
+ cursor: pointer;
99
+ }
100
+
101
+ .history-body {
102
+ margin-left: 20px;
103
+ }
104
+ </style>
@@ -0,0 +1,162 @@
1
+ <script>
2
+ import _ from 'underscore';
3
+ import Vue from 'vue';
4
+
5
+ import UserModel from '@girder/core/models/UserModel';
6
+ import {getCurrentUser} from '@girder/core/auth';
7
+ import {restRequest} from '@girder/core/rest';
8
+
9
+ import AnnotationHistoryBrowser from './AnnotationHistoryBrowser.vue';
10
+
11
+ const Promise = require('bluebird');
12
+
13
+ export default Vue.extend({
14
+ components: {
15
+ AnnotationHistoryBrowser
16
+ },
17
+ props: ['annotationId', 'parentView', 'defaultGroup'],
18
+ data() {
19
+ return {
20
+ annotationCopy: _.clone(this.annotation || {}),
21
+ history: null,
22
+ loading: false,
23
+ userIdToLogin: null,
24
+ waitingForRevert: false
25
+ };
26
+ },
27
+ mounted() {
28
+ this.positionShield();
29
+ this.updateAnnotationHistory();
30
+ },
31
+ methods: {
32
+ makeUserMap(shouldRefresh) {
33
+ this.loading = true;
34
+ const userMap = {};
35
+ // First, see if we can use the logged in user
36
+ const currentUser = getCurrentUser();
37
+ userMap[currentUser.id] = currentUser.get('login');
38
+ // Then, get all annotation editor IDs that aren't the logged in user
39
+ const userRequestPromises = [];
40
+ const uniqueUserIds = new Set([currentUser.id]);
41
+ this.history.forEach((annotation) => {
42
+ if (!uniqueUserIds.has(annotation.updatedId)) {
43
+ uniqueUserIds.add(annotation.updatedId);
44
+ const user = new UserModel();
45
+ user.id = annotation.updatedId;
46
+ userRequestPromises.push(user.fetch());
47
+ }
48
+ });
49
+ Promise.all(userRequestPromises).then((users) => {
50
+ users.forEach((user) => {
51
+ userMap[user._id] = user.login;
52
+ });
53
+ this.userIdToLogin = userMap;
54
+ this.loading = false;
55
+ this.waitingForRevert = false;
56
+ if (shouldRefresh) {
57
+ this.parentView.onRevert();
58
+ }
59
+ return true;
60
+ });
61
+ },
62
+ updateAnnotationHistory(shouldRefresh) {
63
+ if (!this.annotationId) {
64
+ return;
65
+ }
66
+ this.loading = true;
67
+ restRequest({
68
+ url: `annotation/${this.annotationId}/history`,
69
+ method: 'GET',
70
+ error: null
71
+ }).done((annotationHistory) => {
72
+ this.history = annotationHistory;
73
+ this.makeUserMap(shouldRefresh);
74
+ });
75
+ },
76
+ positionShield() {
77
+ const shield = this.$refs.shield;
78
+ if (shield && shield.parentNode !== document.body) {
79
+ document.body.appendChild(shield);
80
+ }
81
+ },
82
+ onRevert(version) {
83
+ this.loading = true;
84
+ // If an annotation takes > 1 second to be reverted, throw up a loading screen
85
+ setTimeout(() => {
86
+ if (this.loading) {
87
+ this.waitingForRevert = true;
88
+ this.$nextTick(() => {
89
+ this.positionShield();
90
+ });
91
+ }
92
+ }, 1000);
93
+ restRequest({
94
+ url: `annotation/${this.annotationId}/history/revert`,
95
+ method: 'PUT',
96
+ data: {version},
97
+ error: null
98
+ }).done(() => {
99
+ this.updateAnnotationHistory(true);
100
+ });
101
+ }
102
+ }
103
+ });
104
+ </script>
105
+
106
+ <template>
107
+ <div>
108
+ <div
109
+ v-if="waitingForRevert"
110
+ ref="shield"
111
+ class="loading-shield"
112
+ >
113
+ <div class="shield-content">
114
+ <i class="icon-spin3 animate-spin" />
115
+ Reverting to previous version. This may some time...
116
+ </div>
117
+ </div>
118
+ <annotation-history-browser
119
+ :annotation-history="history"
120
+ :loading="loading"
121
+ :user-map="userIdToLogin"
122
+ :default-group="defaultGroup"
123
+ @revert="onRevert"
124
+ />
125
+ </div>
126
+ </template>
127
+
128
+ <style scoped>
129
+ .loading-shield {
130
+ position: fixed;
131
+ top: 0;
132
+ left: 0;
133
+ width: 100vw;
134
+ height: 100vh;
135
+ background-color: rgba(0, 0, 0, 0.4);
136
+ z-index: 9999;
137
+ pointer-events: all;
138
+ cursor: wait;
139
+ display: flex;
140
+ align-items: center;
141
+ justify-content: center;
142
+
143
+ animation: fadeIn 0.3s ease-out;
144
+ }
145
+ .shield-content {
146
+ padding: 24px;
147
+ background-color: white;
148
+ }
149
+ .loading-shield > i, span {
150
+ font-size: 24px;
151
+ z-index: 9999;
152
+ }
153
+
154
+ @keyframes fadeIn {
155
+ from {
156
+ opacity: 0;
157
+ }
158
+ to {
159
+ opacity: 1;
160
+ }
161
+ }
162
+ </style>
@@ -0,0 +1,128 @@
1
+ <script>
2
+ import {formatDate, DATE_SECOND} from '@girder/core/misc';
3
+ export default {
4
+ props: ['historyGroup', 'userIdMap', 'allowRevertInitial', 'defaultGroup'],
5
+ emits: ['revertToAnnotation'],
6
+ data() {
7
+ return {
8
+ collapsed: this.allowRevertInitial
9
+ };
10
+ },
11
+ computed: {
12
+ startingAnnotation() {
13
+ return this.historyGroup[0];
14
+ },
15
+ hiddenAnnotations() {
16
+ return this.historyGroup.slice(1);
17
+ },
18
+ iconClass() {
19
+ const classes = ['hidden-version-toggle'];
20
+ if (this.collapsed) {
21
+ classes.push('icon-right-open');
22
+ } else {
23
+ classes.push('icon-down-open');
24
+ }
25
+ if (!this.hiddenAnnotations.length) {
26
+ classes.push('display-none');
27
+ }
28
+ return classes;
29
+ }
30
+ },
31
+ methods: {
32
+ displayDate(dateString) {
33
+ return formatDate(dateString, DATE_SECOND);
34
+ },
35
+ displayGroups(annotationVersion) {
36
+ return annotationVersion.groups.map((group) => (
37
+ group === null ? this.defaultGroup : group
38
+ )).join(', ');
39
+ },
40
+ getUser(userId) {
41
+ return (this.userIdMap && this.userIdMap[userId]) ? this.userIdMap[userId] : userId;
42
+ }
43
+ }
44
+ };
45
+ </script>
46
+
47
+ <template>
48
+ <div>
49
+ <span class="history-group-header attribute-block">
50
+ <i
51
+ v-if="hiddenAnnotations.length"
52
+ :class="iconClass"
53
+ @click="collapsed = !collapsed"
54
+ />
55
+ <span
56
+ v-else
57
+ class="hidden-version-toggle"
58
+ />
59
+ <span class="attribute-display">Edited: {{ displayDate(startingAnnotation.updated) }}</span>
60
+ <span class="attribute-display">Author: {{ getUser(startingAnnotation.updatedId) }}</span>
61
+ <span class="attribute-display">Version: {{ startingAnnotation._version }}</span>
62
+ <span
63
+ class="attribute-display"
64
+ :title="displayGroups(startingAnnotation)"
65
+ >
66
+ Groups: {{ displayGroups(startingAnnotation) }}
67
+ </span>
68
+ <i
69
+ v-if="allowRevertInitial"
70
+ class="revert-button icon-ccw"
71
+ @click="$emit('revertToAnnotation', startingAnnotation._version)"
72
+ />
73
+ </span>
74
+ <div
75
+ v-if="!collapsed && hiddenAnnotations.length"
76
+ class="hidden-version-container"
77
+ >
78
+ <div
79
+ v-for="entry in hiddenAnnotations"
80
+ :key="entry._version"
81
+ class="hidden-version-entry attribute-block"
82
+ >
83
+ <span class="hidden-version-toggle" />
84
+ <span class="attribute-display">Edited: {{ displayDate(entry.updated) }}</span>
85
+ <span class="attribute-display">Author: {{ getUser(entry.updatedId) }}</span>
86
+ <span class="attribute-display">Version: {{ entry._version }}</span>
87
+ <span
88
+ class="attribute-display"
89
+ :title="displayGroups(startingAnnotation)"
90
+ >
91
+ Groups: {{ displayGroups(entry) }}
92
+ </span>
93
+ <i
94
+ class="revert-button icon-ccw"
95
+ @click="$emit('revertToAnnotation', entry._version)"
96
+ />
97
+ </div>
98
+ </div>
99
+ </div>
100
+ </template>
101
+
102
+ <style scoped>
103
+ .hidden-version-toggle {
104
+ display: inline-block;
105
+ min-width: 20px;
106
+ }
107
+ .hidden-version-toggle:hover {
108
+ cursor: pointer;
109
+ }
110
+ .revert-button:hover {
111
+ cursor:pointer;
112
+ }
113
+ .attribute-block > span, i {
114
+ max-width: 250px;
115
+ overflow: hidden;
116
+ white-space: nowrap;
117
+ text-overflow: ellipses;
118
+ }
119
+ .attribute-block {
120
+ display: flex;
121
+ }
122
+ .attribute-block > span {
123
+ padding-right: 8px;
124
+ }
125
+ .display-none {
126
+ display: none;
127
+ }
128
+ </style>
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: histomicsui
3
- Version: 1.7.3.dev16
3
+ Version: 1.7.3.dev38
4
4
  Summary: Organize, visualize, and analyze histology images.
5
5
  Home-page: https://github.com/DigitalSlideArchive/histomicsui
6
6
  Author: Kitware, Inc.
@@ -151,6 +151,9 @@ histomicsui/web_client/views/popover/AnnotationContextMenu.js
151
151
  histomicsui/web_client/views/popover/AnnotationPopover.js
152
152
  histomicsui/web_client/views/popover/PixelmapContextMenu.js
153
153
  histomicsui/web_client/views/popover/index.js
154
+ histomicsui/web_client/vue/components/AnnotationHistoryBrowser.vue
155
+ histomicsui/web_client/vue/components/AnnotationHistoryBrowserContainer.vue
156
+ histomicsui/web_client/vue/components/AnnotationHistoryGroup.vue
154
157
  histomicsui/web_client/vue/components/ColorPickerInput.vue
155
158
  histomicsui/web_client/vue/components/EditHeatmapOrGridData.vue
156
159
  histomicsui/web_client/vue/components/EditHeatmapOrGridDataContainer.vue