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" />
+
No content found.
-
+
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")