diff --git a/client/src/components/Collections/CollectionCreatorModal.vue b/client/src/components/Collections/CollectionCreatorModal.vue
index 334f6586e0da..8db25d243c6d 100644
--- a/client/src/components/Collections/CollectionCreatorModal.vue
+++ b/client/src/components/Collections/CollectionCreatorModal.vue
@@ -113,22 +113,25 @@ watch(
}
);
+const extensionInTitle = computed(() => {
+ const extensions = props.extensions;
+ if (!extensions || extensions.length == 0 || extensions.indexOf("data") >= 0) {
+ return "";
+ } else {
+ return orList(extensions);
+ }
+});
+
const modalTitle = computed(() => {
if (props.collectionType === "list") {
- return localize(
- `Create a collection from a list of ${fromSelection.value ? "selected" : ""} ${
- props.extensions?.length ? orList(props.extensions) : ""
- } datasets`
- );
+ return localize(`Create a list of ${fromSelection.value ? "selected" : ""} ${extensionInTitle.value} datasets`);
} else if (props.collectionType === "list:paired") {
return localize(
- `Create a collection of ${fromSelection.value ? "selected" : ""} ${
- props.extensions?.length ? orList(props.extensions) : ""
- } dataset pairs`
+ `Create a list of ${fromSelection.value ? "selected" : ""} ${extensionInTitle.value} paired datasets`
);
} else if (props.collectionType === "paired") {
return localize(
- `Create a ${props.extensions?.length ? orList(props.extensions) : ""} dataset pair collection ${
+ `Create a ${extensionInTitle.value} paired dataset collection ${
fromSelection.value ? "from selected items" : ""
}`
);
diff --git a/client/src/components/Collections/ListCollectionCreator.vue b/client/src/components/Collections/ListCollectionCreator.vue
index 841a206a3635..ca9e25aec416 100644
--- a/client/src/components/Collections/ListCollectionCreator.vue
+++ b/client/src/components/Collections/ListCollectionCreator.vue
@@ -412,28 +412,38 @@ function renameElement(element: any, name: string) {
:history-id="props.historyId"
:hide-source-items="hideSourceItems"
:extensions="extensions"
+ collection-type="list"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@on-update-datatype-toggle="changeDatatypeFilter"
@onUpdateHideSourceItems="onUpdateHideSourceItems"
@clicked-create="clickedCreate">
-
{{
localize(
[
- "Collections of datasets are permanent, ordered lists of datasets that can be passed to tools ",
+ "This interface allows you to build a new Galaxy list of datasets. ",
+ "A list is a type of Galaxy dataset collection that is a permanent, ordered list of datasets that can be passed to tools ",
"and workflows in order to have analyses done on each member of the entire group. This interface allows ",
- "you to create a collection and re-order the final collection.",
+ "you to create and re-order a list of datasets. The datasets in a Galaxy collection have an identifier that is preserved accross ",
+ "tool executions and serves as a form of sample tracking - setting the name in this form will pick the identifier for that element ",
+ "of the list but will not change the dataset's actual name in Galaxy.",
].join("")
)
}}
+ -
+ Move datsets from the "Unselected" column to the "Selected" column below to compose the list
+ in the intended order and with the intended datasets.
+
+ -
+ The filter textbox can be used to rapidly find the datasets of interest by name.
+
-
- {{ localize("Rename elements in the list by clicking on") }}
+ {{ localize("Change the identifier of elements in the list by clicking on") }}
{{ localize("the existing name") }}
@@ -442,13 +452,16 @@ function renameElement(element: any, name: string) {
-
{{ localize("Discard elements from the final created list by clicking on the ") }}
-
- {{ localize("Discard") }}
+
+ {{ localize("Remove") }}
+
+
+ {{ localize("discard") }}
{{ localize("button.") }}
- -
+
-
{{
localize(
"Reorder the list by clicking and dragging elements. Select multiple elements by clicking on"
@@ -468,7 +481,7 @@ function renameElement(element: any, name: string) {
{{ localize("link.") }}
- -
+
-
{{ localize("Click ") }}
@@ -476,7 +489,7 @@ function renameElement(element: any, name: string) {
{{ localize("to begin again as if you had just opened the interface.") }}
- -
+
-
{{ localize("Click ") }}
diff --git a/client/src/components/Collections/PairCollectionCreator.vue b/client/src/components/Collections/PairCollectionCreator.vue
index 38ee98f530c9..1d3e5922f315 100644
--- a/client/src/components/Collections/PairCollectionCreator.vue
+++ b/client/src/components/Collections/PairCollectionCreator.vue
@@ -374,6 +374,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
:suggested-name="initialSuggestedName"
:extensions="props.extensions"
:extensions-toggle="removeExtensions"
+ collection-type="paired"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@onUpdateHideSourceItems="onUpdateHideSourceItems"
@@ -423,7 +424,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
{{ localize("name") }}
{{ localize("and click ") }}
- {{ localize("Create list") }}
+ {{ localize("Create dataset pair") }}
{{ localize(".") }}
diff --git a/client/src/components/Collections/PairedListCollectionCreator.vue b/client/src/components/Collections/PairedListCollectionCreator.vue
index ba46d2139934..e5b33c5b108e 100644
--- a/client/src/components/Collections/PairedListCollectionCreator.vue
+++ b/client/src/components/Collections/PairedListCollectionCreator.vue
@@ -864,6 +864,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
render-extensions-toggle
:extensions-toggle="removeExtensions"
:extensions="extensions"
+ collection-type="list:paired"
:no-items="props.initialElements.length == 0 && !props.fromSelection"
@add-uploaded-files="addUploadedFiles"
@onUpdateHideSourceItems="hideSourceItems = $event"
@@ -875,9 +876,10 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
{{
localize(
[
- "Collections of paired datasets are ordered lists of dataset pairs (often forward and reverse reads). ",
- "These collections can be passed to tools and workflows in order to have analyses done on each member of ",
- "the entire group. This interface allows you to create a collection, choose which datasets are paired, ",
+ "This interface allows you to build a new Galaxy list of pairs. List of pairs are an ordered list of ",
+ "individual dataset paired together in their own paired collection (often forward and reverse reads). ",
+ "These lists can be passed to tools and workflows in order to have analyses done on each member of ",
+ "the entire group. This interface allows you to create such a list of paired datasets, choose which datasets are paired, ",
"and re-order the final collection.",
].join("")
)
@@ -994,7 +996,7 @@ function _naiveStartingAndEndingLCS(s1: string, s2: string) {
{{ localize("and click ") }}
- {{ localize("Create list") }}
+ {{ localize("Create list or pairs") }}
{{ localize(". (Note: you do not have to pair all unpaired datasets to finish.)") }}
diff --git a/client/src/components/Collections/common/CollectionCreator.vue b/client/src/components/Collections/common/CollectionCreator.vue
index 7e2401d0bd7b..c60e80099fd2 100644
--- a/client/src/components/Collections/common/CollectionCreator.vue
+++ b/client/src/components/Collections/common/CollectionCreator.vue
@@ -39,6 +39,7 @@ interface Props {
extensions?: string[];
extensionsToggle?: boolean;
noItems?: boolean;
+ collectionType?: string;
}
const props = withDefaults(defineProps(), {
@@ -102,6 +103,19 @@ const defaultExtension = computed(() => {
}
});
+const shortWhatIsBeingCreated = computed(() => {
+ // plain language for what is being created
+ if (props.collectionType === "list") {
+ return "list";
+ } else if (props.collectionType === "list:paired") {
+ return "list of pairs";
+ } else if (props.collectionType == "paired") {
+ return "dataset pair";
+ } else {
+ return "collection";
+ }
+});
+
function addUploadedFiles(value: HDASummary[]) {
// TODO: We really need to wait for each of these items to get `state = 'ok'`
// before we can add them to the collection.
@@ -222,7 +236,7 @@ watch(
id="collection-name"
v-model="collectionName"
class="collection-name"
- :placeholder="localize('Enter a name for your new collection')"
+ :placeholder="localize('Enter a name for your new ' + shortWhatIsBeingCreated)"
size="sm"
required
:state="!collectionName ? false : null" />
@@ -240,7 +254,7 @@ watch(
variant="primary"
:disabled="!validInput"
@click="emit('clicked-create', collectionName)">
- {{ localize("Create collection") }}
+ {{ localize("Create " + shortWhatIsBeingCreated) }}
diff --git a/client/src/components/Form/Elements/FormData/FormData.vue b/client/src/components/Form/Elements/FormData/FormData.vue
index de820ccef641..0695af21369b 100644
--- a/client/src/components/Form/Elements/FormData/FormData.vue
+++ b/client/src/components/Form/Elements/FormData/FormData.vue
@@ -607,10 +607,20 @@ watch(
const formatsVisible = ref(false);
const formatsButtonId = useUid("form-data-formats-");
+function collectionTypeToText(collectionType: string): string {
+ if (collectionType == "list:paired") {
+ return "list of pairs";
+ } else {
+ return collectionType;
+ }
+}
+
const warningListAmount = 4;
const noOptionsWarningMessage = computed(() => {
const itemType = props.type === "data" ? "datasets" : "dataset collections";
- const collectionTypeLabel = props.collectionTypes?.length ? `${orList(props.collectionTypes)} ` : "";
+ const collectionTypeLabel = props.collectionTypes?.length
+ ? `${orList(props.collectionTypes.map(collectionTypeToText))} `
+ : "";
if (!props.extensions || props.extensions.length === 0 || props.extensions.includes("data")) {
return `No ${collectionTypeLabel}${itemType} available`;
} else if (props.extensions.length <= warningListAmount) {