diff --git a/client/src/components/Datatypes/model.ts b/client/src/components/Datatypes/model.ts index 45334ba8d25..797d0349e19 100644 --- a/client/src/components/Datatypes/model.ts +++ b/client/src/components/Datatypes/model.ts @@ -14,10 +14,18 @@ export class DatatypesMapperModel { this.datatypesMapping = typesAndMapping.datatypes_mapping; } + /** + * Checks if a given child datatype is a subtype of a parent datatype. + * @param child - The child datatype extension as registered in the datatypes registry. + * @param parent - The parent datatype, which can be an extension or explicit class name + * Can also be used with extensionless abstract datatypes (e.g. "galaxy.datatypes.images.Image") + * @returns A boolean indicating whether the child is a subtype of the parent. + */ isSubType(child: string, parent: string): boolean { const mapping = this.datatypesMapping; const childClassName = mapping.ext_to_class_name[child]; - const parentClassName = mapping.ext_to_class_name[parent]; + const parentClassName = mapping.ext_to_class_name[parent] || parent; + if (!childClassName || !parentClassName) { return false; } diff --git a/client/src/components/Markdown/Elements/HistoryDatasetDisplay.vue b/client/src/components/Markdown/Elements/HistoryDatasetDisplay.vue index 547f6bcc935..d44e22d74b4 100644 --- a/client/src/components/Markdown/Elements/HistoryDatasetDisplay.vue +++ b/client/src/components/Markdown/Elements/HistoryDatasetDisplay.vue @@ -65,6 +65,9 @@ type="iframe" aspect="16by9" :src="displayUrl" /> +
-                                    {{ itemContent.item_data }}
-                                
+ {{ itemContent.item_data }} +
No content found.
Show More... @@ -99,10 +102,13 @@ import LoadingSpan from "components/LoadingSpan"; import { UrlDataProvider } from "components/providers/UrlDataProvider"; import { getAppRoot } from "onload/loadConfig"; +import HistoryDatasetAsImage from "./HistoryDatasetAsImage.vue"; + export default { components: { LoadingSpan, UrlDataProvider, + HistoryDatasetAsImage, }, props: { args: { diff --git a/client/src/components/Notifications/NotificationActions.vue b/client/src/components/Notifications/NotificationActions.vue index ebcd9a46989..fe161b7ddba 100644 --- a/client/src/components/Notifications/NotificationActions.vue +++ b/client/src/components/Notifications/NotificationActions.vue @@ -37,7 +37,7 @@ function getNotificationExpirationTitle(notification: UserNotification) {
- + diff --git a/client/src/components/Workflow/services.js b/client/src/components/Workflow/services.js index d354fda8182..ab0f1f4acaf 100644 --- a/client/src/components/Workflow/services.js +++ b/client/src/components/Workflow/services.js @@ -32,7 +32,7 @@ export class Services { async createWorkflow(workflow) { const url = withPrefix("/api/workflows"); try { - const { data } = await axios.post(url, { workflow: toSimple(workflow.id, workflow) }); + const { data } = await axios.post(url, { workflow: toSimple(workflow.id, workflow), from_tool_form: true }); return data; } catch (e) { rethrowSimple(e); diff --git a/client/src/components/admin/Notifications/NotificationForm.vue b/client/src/components/admin/Notifications/NotificationForm.vue index 86e4c98efc2..027649bc067 100644 --- a/client/src/components/admin/Notifications/NotificationForm.vue +++ b/client/src/components/admin/Notifications/NotificationForm.vue @@ -153,7 +153,8 @@ async function sendNewNotification() { :optional="false" help="The message can be written in markdown." placeholder="Enter message" - required /> + required + area /> `__, -visit our community `Hub `__, and follow -`@galaxyproject@mstdn.science `__ on Mastodon or -`@galaxyproject `__ on Twitter. +To stay up to date with Galaxy's progress, watch our `screencasts `__; +visit our community `Hub `__; and follow us on `Bluesky `__, `Mastodon `__, and `LinkedIn `__. You can always chat with us on `Matrix `__. diff --git a/lib/galaxy/selenium/navigates_galaxy.py b/lib/galaxy/selenium/navigates_galaxy.py index 73f769723ff..de765d0375f 100644 --- a/lib/galaxy/selenium/navigates_galaxy.py +++ b/lib/galaxy/selenium/navigates_galaxy.py @@ -1558,7 +1558,7 @@ class NavigatesGalaxy(HasDriver): workflow_run.expand_form_link.wait_for_and_click() workflow_run.expanded_form.wait_for_visible() - def workflow_create_new(self, annotation=None, clear_placeholder=False): + def workflow_create_new(self, annotation=None, clear_placeholder=False, save_workflow=True): self.workflow_index_open() self.sleep_for(self.wait_types.UX_RENDER) self.click_button_new_workflow() @@ -1570,11 +1570,12 @@ class NavigatesGalaxy(HasDriver): name_component.wait_for_and_send_keys(name) annotation = annotation or self._get_random_name() self.components.workflow_editor.edit_annotation.wait_for_and_send_keys(annotation) - save_button = self.components.workflow_editor.save_button - save_button.wait_for_visible() - assert not save_button.has_class("disabled") - save_button.wait_for_and_click() - self.sleep_for(self.wait_types.UX_RENDER) + if save_workflow: + save_button = self.components.workflow_editor.save_button + save_button.wait_for_visible() + assert not save_button.has_class("disabled") + save_button.wait_for_and_click() + self.sleep_for(self.wait_types.UX_RENDER) return name def invocation_index_table_elements(self): diff --git a/lib/galaxy_test/selenium/test_workflow_editor.py b/lib/galaxy_test/selenium/test_workflow_editor.py index f5037759100..567b0997f44 100644 --- a/lib/galaxy_test/selenium/test_workflow_editor.py +++ b/lib/galaxy_test/selenium/test_workflow_editor.py @@ -224,7 +224,7 @@ steps: def test_integer_input(self): editor = self.components.workflow_editor - name = self.workflow_create_new() + name = self.workflow_create_new(save_workflow=False) self.workflow_editor_add_input(item_name="parameter_input") self.screenshot("workflow_editor_parameter_input_new") editor.label_input.wait_for_and_send_keys("input1")