diff --git a/src/components/TraitHeading.vue b/src/components/TraitHeading.vue index 2eab206..0eeca48 100644 --- a/src/components/TraitHeading.vue +++ b/src/components/TraitHeading.vue @@ -2,14 +2,40 @@ {{ trait.name }} - {{ traitTypeText }} - + {{ traitTypeText }} + + + + + + + + + diff --git a/src/components/TraitInputSection.vue b/src/components/TraitInputSection.vue index f702c9d..9a2c3fe 100644 --- a/src/components/TraitInputSection.vue +++ b/src/components/TraitInputSection.vue @@ -4,34 +4,14 @@

- - - {{ trait.name }} - - - {{ getTraitTypeText(trait, true) }} - - - - - - {{ $n(trait.setSize || 1) }} - - - - - - + + + + + + + {{ $n(trait.setSize || 1) }} + @@ -57,16 +37,6 @@ - - - - @@ -76,6 +46,7 @@ import { coreStore } from '@/store' import TraitIcon from '@/components/icons/TraitIcon.vue' import TraitInput from '@/components/TraitInput.vue' +import TraitHeading from '@/components/TraitHeading.vue' import TraitDataHistoryModal from '@/components/modals/TraitDataHistoryModal.vue' import { getTraitTypeText } from '@/plugins/misc' @@ -120,29 +91,6 @@ export default { 'storeShowFullTraitDescription', 'storeServerUrl' ]), - serverUrl: function () { - if (this.trial) { - let baseUrl = this.trial.remoteUrl || this.storeServerUrl - - if (!baseUrl.endsWith('/')) { - baseUrl += '/' - } - if (!baseUrl.endsWith('api/')) { - baseUrl += 'api/' - } - - return baseUrl - } else { - return null - } - }, - priorityShareCode: function () { - if (this.trial && this.trial.shareStatus !== TRIAL_STATE_NOT_SHARED) { - return this.trial.shareCodes.ownerCode || this.trial.shareCodes.editorCode || this.trial.shareCodes.viewerCode - } else { - return null - } - }, hasHistoricData: function () { // Check if there's at least one measurement for the trait id return this.cell && this.trait && this.cell.measurements && this.cell.measurements[this.trait.id] && this.cell.measurements[this.trait.id].length > 0 diff --git a/src/components/TrialLayoutComponent.vue b/src/components/TrialLayoutComponent.vue index 41294b1..9986cf5 100644 --- a/src/components/TrialLayoutComponent.vue +++ b/src/components/TrialLayoutComponent.vue @@ -12,8 +12,6 @@ - -
{{ $t('pageTrialLayoutDimensionsFielDHubNotice') }}
diff --git a/src/components/TrialLayoutDimensionComponent.vue b/src/components/TrialLayoutDimensionComponent.vue index c4a3165..6d57370 100644 --- a/src/components/TrialLayoutDimensionComponent.vue +++ b/src/components/TrialLayoutDimensionComponent.vue @@ -1,7 +1,30 @@ @@ -129,10 +156,20 @@ export default { showRowLabels: false, showColumnLabels: false, editRowLabels: false, - editColumnLabels: false + editColumnLabels: false, + layoutType: 'grid' } }, methods: { + setLayoutType: function (type) { + this.layoutType = type + + if (type === 'list') { + this.internal.columns = 1 + this.internal.columnOrder = DISPLAY_ORDER_LEFT_TO_RIGHT + this.showColumnLabels = false + } + }, toggleRowOrder: function (order) { this.internal.rowOrder = order this.internal.rowLabels = this.internal.rowLabels.concat().reverse() @@ -143,6 +180,10 @@ export default { }, forceUpdate: function () { this.internal = JSON.parse(JSON.stringify(this.layout)) + + if (this.internal.rows > 1 && this.internal.columns === 1) { + this.layoutType = 'list' + } } }, mounted: function () { diff --git a/src/components/modals/TrialModificationModal.vue b/src/components/modals/TrialModificationModal.vue index c8cb20b..0ffa9b3 100644 --- a/src/components/modals/TrialModificationModal.vue +++ b/src/components/modals/TrialModificationModal.vue @@ -95,11 +95,7 @@

- - {{ trait.name }} - - - + @@ -170,7 +166,7 @@ import UploadTraitImageModal from '@/components/modals/UploadTraitImageModal.vue import TrialLayoutCorners from '@/components/TrialLayoutCorners.vue' import MarkerSetup from '@/components/MarkerSetup.vue' import LayoutFeedbackModal from '@/components/modals/LayoutFeedbackModal.vue' -import TraitIcon from '@/components/icons/TraitIcon.vue' +import TraitHeading from '@/components/TraitHeading.vue' import { isGeographyValid, isGeographyAllNull } from '@/plugins/location' import { updateTrialProperties, getTrialGroups } from '@/plugins/idb' @@ -186,7 +182,7 @@ export default { LayoutFeedbackModal, MarkerSetup, TrialLayoutCorners, - TraitIcon + TraitHeading }, data: function () { return { diff --git a/src/plugins/changelog/de_DE.json b/src/plugins/changelog/de_DE.json index 45c9b85..22a3a2b 100644 --- a/src/plugins/changelog/de_DE.json +++ b/src/plugins/changelog/de_DE.json @@ -584,6 +584,11 @@ "type": "bugfix", "title": "Führende/anhängende Leerzeichen", "text": "Behebt einen Fehler bei dem führende oder angängende Leerzeichen in Eingabefeldern automatisch entfernt werden." + }, + { + "type": "bugfix", + "title": "Sprachwechsler", + "text": "Behebt einen Fehler beim Wechseln der Sprache. GridScore behält jetzt wieder die ausgewählte Sprache zwischen Sitzungen." } ] } diff --git a/src/plugins/changelog/en_GB.json b/src/plugins/changelog/en_GB.json index 80da3e2..0bcb8cd 100644 --- a/src/plugins/changelog/en_GB.json +++ b/src/plugins/changelog/en_GB.json @@ -584,6 +584,11 @@ "type": "bugfix", "title": "Leading/trailing spaces", "text": "Fixed issues with the automatic removal of leading and trailing spaces in input fields." + }, + { + "type": "bugfix", + "title": "Language switching", + "text": "Fixed persistence of language switching. GridScore will now remember your language selection between sessions again." } ] } diff --git a/src/plugins/i18n/de_DE.json b/src/plugins/i18n/de_DE.json index 18d30b2..10e8571 100644 --- a/src/plugins/i18n/de_DE.json +++ b/src/plugins/i18n/de_DE.json @@ -585,8 +585,11 @@ "pageTrialSetupTitle": "Versuchsaufbau", "pageTrialSetupText": "Dies ist wo ein neuer Versuch erstellt werden kann. Die Abschnitte unten werden genutzt um generelle Informationen über den Versuch angzugeben, das Layout inklusive des genutzten Keimplasmas und der Spalten- und Reihenanzahl zu definieren, und schließlich die Merkmale die aufgezeichnet werden sollen anzugeben.", "pageTrialLayoutDimensionsTitle": "Aufbaudimensionen", - "pageTrialLayoutDimensionsText": "Nutze die Eingabefelder unten um die Anzahl an Spalten und Zeilen im Versuchsaufbau anzugeben.", + "pageTrialLayoutDimensionsTextGrid": "Nutze die Eingabefelder unten um die Anzahl an Spalten und Zeilen im Versuchsaufbau anzugeben.", + "pageTrialLayoutDimensionsTextList": "Nutze das Eingabefeld unten um die Anzahl der Elemente im Versuchsaufbau anzugeben.", "pageTrialLayoutDimensionsFielDHubNotice": "Falls ein Versuchsaufbau von FielDHub importiert wird, bitte 'Unten nach oben' auswählen bei der Zeilenordnung und 'Links nach rechts' für die Spaltenordnung.", + "pageTrialLayoutDimensionsGrid": "Gitter-Anordnung", + "pageTrialLayoutDimensionsList": "Listen-Anordnung", "pageTrialLayoutGermplasmTitle": "Keimplasma-/Rep-Informationen", "pageTrialLayoutGermplasmText": "Nutze die Tabelle unten um Keimplasmaidentifikatore und optionale Rep-Informationen pro Beet anzugeben. Das Dropdown-Menü kann genutzt werden um Daten aus anderen Tools wie FielDHub oder Excel zu importieren.", "pageTrialLayoutCornersTitle": "Geographische Versuchseckpunkte", diff --git a/src/plugins/i18n/en_GB.json b/src/plugins/i18n/en_GB.json index 64eceec..b07c79e 100644 --- a/src/plugins/i18n/en_GB.json +++ b/src/plugins/i18n/en_GB.json @@ -594,8 +594,11 @@ "pageTrialSetupTitle": "Trial setup", "pageTrialSetupText": "This is where you create a new trial. The sections below are used to provide general information about the trial, specify the layout including used germplasm, row and column count, and finally the traits you want to score need to be specified.", "pageTrialLayoutDimensionsTitle": "Layout dimensions", - "pageTrialLayoutDimensionsText": "Use the input fields to specify the row and column count of your trial layout.", + "pageTrialLayoutDimensionsTextGrid": "Use the input fields to specify the row and column count of your trial layout.", + "pageTrialLayoutDimensionsTextList": "Use the input field to specify the item count of your trial layout.", "pageTrialLayoutDimensionsFielDHubNotice": "If you're importing a trial design from FielDHub, please make sure to select 'bottom to top' for the row order and 'left to right' for the column order.", + "pageTrialLayoutDimensionsGrid": "Grid layout", + "pageTrialLayoutDimensionsList": "List layout", "pageTrialLayoutGermplasmTitle": "Germplasm/rep information", "pageTrialLayoutGermplasmText": "Use the table below to enter the germplasm identifier and optional rep information for each plot. You can use the dropdown menu above the table to import data from other tools like FielDHub or Excel.", "pageTrialLayoutCornersTitle": "Geographic trial corner points", diff --git a/src/plugins/i18n/vi_VN.json b/src/plugins/i18n/vi_VN.json index 6537a6d..c91b523 100644 --- a/src/plugins/i18n/vi_VN.json +++ b/src/plugins/i18n/vi_VN.json @@ -437,7 +437,7 @@ "pageTrialSetupTitle": "Thiết lập thí nghiệm", "pageTrialSetupText": "Đây là nơi bạn tạo một bản thí nghiệm mới. Các phần bên dưới được sử dụng để cung cấp thông tin chung về thí nghiệm, chỉ định cách bố trí bao gồm nguồn gen/giống đã sử dụng, số hàng và cột, và cuối cùng là các đặc tính bạn muốn cho điểm cần phải được chỉ định.", "pageTrialLayoutDimensionsTitle": "Kích thước bố cục", - "pageTrialLayoutDimensionsText": "Sử dụng các trường đầu vào để chỉ định số hàng và số cột của bố cục thí nghiệm của bạn.", + "pageTrialLayoutDimensionsTextGrid": "Sử dụng các trường đầu vào để chỉ định số hàng và số cột của bố cục thí nghiệm của bạn.", "pageTrialLayoutDimensionsFielDHubNotice": "Nếu bạn đang nhập một thiết kế thí nghiệm từ FielDHub, vui lòng đảm bảo chọn 'từ dưới lên trên' cho thứ tự hàng và 'từ trái sang phải' cho thứ tự cột.", "pageTrialLayoutGermplasmTitle": "Thông tin về nguồn gen/giống/lần lặp", "pageTrialLayoutGermplasmText": "Sử dụng bảng dưới đây để nhập mã định danh nguồn gen/giống và thông tin đại diện tùy chọn cho từng ô. Bạn có thể sử dụng menu thả xuống phía trên bảng để nhập dữ liệu từ các công cụ khác như FielDHub hoặc Excel.", diff --git a/src/plugins/misc.js b/src/plugins/misc.js index f72c998..53e70b8 100644 --- a/src/plugins/misc.js +++ b/src/plugins/misc.js @@ -2,6 +2,7 @@ import { i18n } from '@/plugins/i18n' import { getId } from '@/plugins/id' import { trialLayoutToPlots } from '@/plugins/location' import { coreStore } from '@/store' +import { TRIAL_STATE_NOT_SHARED } from '@/plugins/constants' import { saveAs } from 'file-saver' import { DISPLAY_ORDER_BOTTOM_TO_TOP, DISPLAY_ORDER_LEFT_TO_RIGHT, DISPLAY_ORDER_RIGHT_TO_LEFT, DISPLAY_ORDER_TOP_TO_BOTTOM } from '@/plugins/constants' @@ -697,6 +698,31 @@ const getRandomGivenName = () => { return givenNames[Math.floor(Math.random() * givenNames.length)] } +const getServerUrl = (trial) => { + if (trial) { + let baseUrl = trial.remoteUrl || getStore().storeServerUrl + + if (!baseUrl.endsWith('/')) { + baseUrl += '/' + } + if (!baseUrl.endsWith('api/')) { + baseUrl += 'api/' + } + + return baseUrl + } else { + return null + } +} + +const getPriorityShareCode = (trial) => { + if (trial && trial.shareStatus !== TRIAL_STATE_NOT_SHARED) { + return trial.shareCodes.ownerCode || trial.shareCodes.editorCode || trial.shareCodes.viewerCode + } else { + return null + } +} + export { trialsDataToLongFormat, trialsDataToMatrix, @@ -717,5 +743,7 @@ export { getColumnLabel, getRowIndex, getColumnIndex, - getRandomGivenName + getRandomGivenName, + getServerUrl, + getPriorityShareCode }