diff --git a/.github/config/.finnishwords.txt b/.github/config/.finnishwords.txt index ec3599aef..932db0909 100644 --- a/.github/config/.finnishwords.txt +++ b/.github/config/.finnishwords.txt @@ -216,6 +216,7 @@ löydy löytää löytävät löytynyt +luettelo luku lukuoikeus luo @@ -496,6 +497,7 @@ tulisi tuloksia tunniste tunnisteet +tunnisteista tunnisteita tunnukselle tunnuksen diff --git a/CHANGELOG.md b/CHANGELOG.md index ef4df6f61..d538a2c2c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -59,6 +59,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - (GH #601) Implement new visual style using `csc-ui` in rest of the login and error pages - (GH #601) Add a language selector to login page menu bar, using `csc-ui` - (GH #920) Optimize docker builds, making them faster by leveraging more caching mechanisms and removing unnecessary package installation +- (GH #1007) Create new Taginput component to replace Buefy's taginput component ### Fixed diff --git a/swift_browser_ui_frontend/src/common/conv.js b/swift_browser_ui_frontend/src/common/conv.js index 796660f22..d1ec70780 100644 --- a/swift_browser_ui_frontend/src/common/conv.js +++ b/swift_browser_ui_frontend/src/common/conv.js @@ -227,7 +227,7 @@ export function makeGetObjectsMetaURL(project, container, objects) { ); } -export const taginputConfirmKeys = [",", ";", ":", ".", " ", "Tab", "Enter"]; +export const taginputConfirmKeys = ["Tab", "Enter", " ", ",", ";", ".", ":"]; export function truncate(value, length) { if (!value) { diff --git a/swift_browser_ui_frontend/src/common/globalFunctions.js b/swift_browser_ui_frontend/src/common/globalFunctions.js index 70eaa2b53..ca285b3a0 100644 --- a/swift_browser_ui_frontend/src/common/globalFunctions.js +++ b/swift_browser_ui_frontend/src/common/globalFunctions.js @@ -1,4 +1,5 @@ import store from "@/common/store"; +import { taginputConfirmKeys } from "@/common/conv"; export function toggleCreateFolderModal(folderName) { store.commit("toggleCreateFolderModal", true); @@ -69,5 +70,22 @@ export async function getAccessDetails ( : []; } +export function addNewTag (event, currentTags, onBlur) { + if (taginputConfirmKeys.includes(event.key) || onBlur) { + event.preventDefault(); + const newTag = event.target.value.trim(); + event.target.value = ""; + if (newTag !== "" && !currentTags.includes(newTag)) { + currentTags.push(newTag); + } + } + return currentTags; +} + +export function deleteTag (event, tag, currentTags) { + event.preventDefault(); + return currentTags.filter(el => el !== tag); +} + diff --git a/swift_browser_ui_frontend/src/common/lang.js b/swift_browser_ui_frontend/src/common/lang.js index f9389eae3..50de29100 100644 --- a/swift_browser_ui_frontend/src/common/lang.js +++ b/swift_browser_ui_frontend/src/common/lang.js @@ -487,7 +487,9 @@ let default_translations = { list_of_shareids: "list of share ids", folder_tabs: "different types of folder", searchbox: "search for folders", + tagsList: "list of tags", edit_tag: "modify current tags", + delete_tag: "delete tag", footer: "copyright information", }, }, @@ -962,7 +964,9 @@ let default_translations = { list_of_shareids: "lista jaa tunnuksista", folder_tabs: "erityyppisiä kansioita", searchbox: "etsi kansioita", + tagsList: "luettelo tunnisteista", edit_tag: "muokata nykyisiä tunnisteita", + delete_tag: "poista tunniste", footer: "tekijänoikeustiedot", }, }, diff --git a/swift_browser_ui_frontend/src/components/CopyFolderModal.vue b/swift_browser_ui_frontend/src/components/CopyFolderModal.vue index c16dc1e5b..880ead0e2 100644 --- a/swift_browser_ui_frontend/src/components/CopyFolderModal.vue +++ b/swift_browser_ui_frontend/src/components/CopyFolderModal.vue @@ -28,24 +28,18 @@ :loading="loadingFoldername" /> - - - + {{ $t('message.tagName') }} + + @@ -73,24 +67,28 @@ import { debounce, delay } from "lodash"; import { swiftCopyContainer, - taginputConfirmKeys, updateContainerMeta, } from "@/common/api"; -import { modifyBrowserPageStyles } from "@/common/globalFunctions"; +import { + addNewTag, + deleteTag, + modifyBrowserPageStyles, +} from "@/common/globalFunctions"; import escapeRegExp from "lodash/escapeRegExp"; import { useObservable } from "@vueuse/rxjs"; import { liveQuery } from "dexie"; +import TagInput from "@/components/TagInput.vue"; export default { name: "CopyFolderModal", + components: { TagInput }, data() { return { folderExists: false, folderName: "", loadingFoldername: true, tags: [], - taginputConfirmKeys, folders: [], }; }, @@ -256,6 +254,12 @@ export default { ); }); }, + addingTag: function (e, onBlur) { + this.tags = addNewTag(e, this.tags, onBlur); + }, + deletingTag: function (e, tag) { + this.tags = deleteTag(e, tag, this.tags); + }, }, }; @@ -303,4 +307,4 @@ c-card-actions { c-card-actions > c-button { margin: 0; } - + \ No newline at end of file diff --git a/swift_browser_ui_frontend/src/components/CreateFolderModal.vue b/swift_browser_ui_frontend/src/components/CreateFolderModal.vue index e136212a3..6f65dd451 100644 --- a/swift_browser_ui_frontend/src/components/CreateFolderModal.vue +++ b/swift_browser_ui_frontend/src/components/CreateFolderModal.vue @@ -24,26 +24,19 @@ data-testid="folder-name" /> - - - + {{ $t('message.tagName') }} + +

{{ $t("message.container_ops.createdFolder") }} {{ active.name }}. @@ -82,22 +75,24 @@ @@ -174,7 +175,7 @@ export default { } } -@media screen and (max-height: 580px) and (max-width: 773px), +@media screen and (max-height: 580px) and (max-width: 773px), (max-width: 533px) { .add-folder { top: -9rem; diff --git a/swift_browser_ui_frontend/src/components/EditTagsModal.vue b/swift_browser_ui_frontend/src/components/EditTagsModal.vue index cdecfa267..9cc3444dc 100644 --- a/swift_browser_ui_frontend/src/components/EditTagsModal.vue +++ b/swift_browser_ui_frontend/src/components/EditTagsModal.vue @@ -4,23 +4,11 @@ {{ $t('message.editTags') }} - - - + @@ -204,6 +204,7 @@ export default { max-height: 75vh; } +h2 { margin: 0 !important; } c-card-content { color: var(--csc-dark-grey); @@ -214,4 +215,5 @@ c-card-actions { padding: 0; } + diff --git a/swift_browser_ui_frontend/src/components/ShareModal.vue b/swift_browser_ui_frontend/src/components/ShareModal.vue index d0c70b37e..4ed7c2349 100644 --- a/swift_browser_ui_frontend/src/components/ShareModal.vue +++ b/swift_browser_ui_frontend/src/components/ShareModal.vue @@ -64,17 +64,13 @@ {{ $t("message.share.share_guide_step2") }} - - - + @@ -423,17 +430,13 @@ export default { } c-select { - color: var(--csc-dark-grey); + color: $csc-dark-grey; } c-link > span { font-size: 0.875rem; } - .field { - margin: 2rem 0 0 0; - } - c-flex, .shared-notification { display: flex; flex-direction: row; @@ -461,6 +464,4 @@ export default { margin-bottom: 1.5rem; box-shadow: 2px 4px 4px 0px var(--csc-light-grey); } - - diff --git a/swift_browser_ui_frontend/src/components/TagInput.vue b/swift_browser_ui_frontend/src/components/TagInput.vue new file mode 100644 index 000000000..ee5ecaad6 --- /dev/null +++ b/swift_browser_ui_frontend/src/components/TagInput.vue @@ -0,0 +1,84 @@ + + + + + \ No newline at end of file diff --git a/swift_browser_ui_frontend/src/components/UploadModal.vue b/swift_browser_ui_frontend/src/components/UploadModal.vue index f5bd502cc..c8cf77a8a 100644 --- a/swift_browser_ui_frontend/src/components/UploadModal.vue +++ b/swift_browser_ui_frontend/src/components/UploadModal.vue @@ -73,7 +73,7 @@ :value="$t('message.encrypt.advancedOptions')" > - @@ -96,7 +96,7 @@ - @@ -157,7 +157,6 @@ import EncryptedUploadSession from "@/common/upload"; import { getUploadEndpoint } from "@/common/api"; import { getHumanReadableSize, - taginputConfirmKeys, truncate, computeSHA256, } from "@/common/conv"; @@ -178,7 +177,6 @@ export default { return { inputFolder: "", selectedFolder: null, - taginputConfirmKeys, filteredItems: [], tooLarge: false, ownPrivateKey: false, diff --git a/swift_browser_ui_frontend/src/pages/BrowserPage.vue b/swift_browser_ui_frontend/src/pages/BrowserPage.vue index 889e4861d..4f27f9458 100644 --- a/swift_browser_ui_frontend/src/pages/BrowserPage.vue +++ b/swift_browser_ui_frontend/src/pages/BrowserPage.vue @@ -267,4 +267,8 @@ c-modal { padding: 1rem; } +.taginput-label { + font-weight: bold; + margin-bottom: -2rem; +} diff --git a/swift_browser_ui_frontend/src/views/DirectShare.vue b/swift_browser_ui_frontend/src/views/DirectShare.vue index 31e76e0de..c66b8f0db 100644 --- a/swift_browser_ui_frontend/src/views/DirectShare.vue +++ b/swift_browser_ui_frontend/src/views/DirectShare.vue @@ -40,22 +40,21 @@ - - - - - +