diff --git a/backend/.dockerignore b/backend/.dockerignore index d694f0d21..a0883bf4d 100644 --- a/backend/.dockerignore +++ b/backend/.dockerignore @@ -12,7 +12,6 @@ docker-compose*.yml ./*.log node_modules/ -scripts/ build/ maintenance-worker/ diff --git a/backend/Dockerfile b/backend/Dockerfile index fc15aca63..fc6c1f4b3 100644 --- a/backend/Dockerfile +++ b/backend/Dockerfile @@ -74,7 +74,7 @@ FROM code as build # yarn install RUN yarn install --production=false --frozen-lockfile --non-interactive # yarn build -RUN yarn run build +RUN /bin/sh -c "yarn run build" ################################################################################## # TEST ########################################################################### diff --git a/backend/package.json b/backend/package.json index 9e0e3b72e..eb8119a8f 100644 --- a/backend/package.json +++ b/backend/package.json @@ -11,7 +11,7 @@ "__migrate": "migrate --compiler 'js:@babel/register' --migrations-dir ./src/db/migrations", "prod:migrate": "migrate --migrations-dir ./build/db/migrations --store ./build/db/migrate/store.js", "start": "node build/", - "build": "tsc && mkdir -p build/middleware/helpers/email/templates/ && cp -r src/middleware/helpers/email/templates/*.html build/middleware/helpers/email/templates/ && mkdir -p build/middleware/helpers/email/templates/en/ && cp -r src/middleware/helpers/email/templates/en/*.html build/middleware/helpers/email/templates/en/ && mkdir -p build/middleware/helpers/email/templates/de/ && cp -r src/middleware/helpers/email/templates/de/*.html build/middleware/helpers/email/templates/de/ && mkdir -p build/schema/types/ && cp -r src/schema/types/*.gql build/schema/types/ && mkdir -p build/schema/types/enum/ && cp -r src/schema/types/enum/*.gql build/schema/types/enum/ && mkdir -p build/schema/types/scalar/ && cp -r src/schema/types/scalar/*.gql build/schema/types/scalar/ && mkdir -p build/schema/types/type/ && cp -r src/schema/types/type/*.gql build/schema/types/type/", + "build": "tsc && ./scripts/build.copy.files.sh", "dev": "nodemon --exec ts-node src/ -e js,ts,gql", "dev:debug": "nodemon --exec babel-node --inspect=0.0.0.0:9229 src/ -e js,gql", "lint": "eslint src --config .eslintrc.js", @@ -72,7 +72,7 @@ "metascraper-logo": "^5.33.5", "metascraper-publisher": "^5.33.5", "metascraper-soundcloud": "^5.34.4", - "metascraper-title": "^5.33.5", + "metascraper-title": "^5.34.7", "metascraper-url": "^5.34.2", "metascraper-video": "^5.33.5", "metascraper-youtube": "^5.33.5", diff --git a/backend/scripts/build.copy.files.sh b/backend/scripts/build.copy.files.sh new file mode 100755 index 000000000..85022ba9b --- /dev/null +++ b/backend/scripts/build.copy.files.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +# html files +mkdir -p build/middleware/helpers/email/templates/ +cp -r src/middleware/helpers/email/templates/*.html build/middleware/helpers/email/templates/ + +mkdir -p build/middleware/helpers/email/templates/en/ +cp -r src/middleware/helpers/email/templates/en/*.html build/middleware/helpers/email/templates/en/ + +mkdir -p build/middleware/helpers/email/templates/de/ +cp -r src/middleware/helpers/email/templates/de/*.html build/middleware/helpers/email/templates/de/ + +# gql files +mkdir -p build/schema/types/ +cp -r src/schema/types/*.gql build/schema/types/ + +mkdir -p build/schema/types/enum/ +cp -r src/schema/types/enum/*.gql build/schema/types/enum/ + +mkdir -p build/schema/types/scalar/ +cp -r src/schema/types/scalar/*.gql build/schema/types/scalar/ + +mkdir -p build/schema/types/type/ +cp -r src/schema/types/type/*.gql build/schema/types/type/ \ No newline at end of file diff --git a/backend/src/schema/resolvers/filter-posts.spec.js b/backend/src/schema/resolvers/filter-posts.spec.js index 0b96e001f..41fbd0ea7 100644 --- a/backend/src/schema/resolvers/filter-posts.spec.js +++ b/backend/src/schema/resolvers/filter-posts.spec.js @@ -158,7 +158,7 @@ describe('Filter Posts', () => { }) describe('order events by event start descending', () => { - it('finds the events orderd accordingly', async () => { + it('finds the events ordered accordingly', async () => { const { data: { Post: result }, } = await query({ @@ -180,7 +180,7 @@ describe('Filter Posts', () => { }) describe('order events by event start ascending', () => { - it('finds the events orderd accordingly', async () => { + it('finds the events ordered accordingly', async () => { const { data: { Post: result }, } = await query({ diff --git a/backend/yarn.lock b/backend/yarn.lock index b55842174..9cba61b21 100644 --- a/backend/yarn.lock +++ b/backend/yarn.lock @@ -1511,10 +1511,10 @@ url-regex "~4.1.1" video-extensions "~1.1.0" -"@metascraper/helpers@^5.33.5", "@metascraper/helpers@^5.34.2", "@metascraper/helpers@^5.34.4": - version "5.34.4" - resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.34.4.tgz#59faf01466938b26aa8df147f97c7f9f4d739d28" - integrity sha512-OZdXkfxJXH5dW+aoptLJzxN56Xj+ABzbqZ9NDuKn908zW4tvLBPD6go3qdd3GXXQZH7TxvWpETn9i1AxzoyKmQ== +"@metascraper/helpers@^5.33.5", "@metascraper/helpers@^5.34.2", "@metascraper/helpers@^5.34.4", "@metascraper/helpers@^5.34.7": + version "5.34.7" + resolved "https://registry.yarnpkg.com/@metascraper/helpers/-/helpers-5.34.7.tgz#749a288813e9f61938bb64d34bfb4e2c26689cbe" + integrity sha512-h3Kg9xFoVlr3rqxbhpR+o7nzYuThXtiDuk+kiaIWozAguUWT6xvwb3iHKuCdKC9/29PXeJ+UqM9WxBamxbzGmg== dependencies: audio-extensions "0.0.0" chrono-node "~2.6.2" @@ -1527,13 +1527,13 @@ is-uri "~1.2.4" iso-639-3 "~2.2.0" isostring "0.0.1" - jsdom "~22.0.0" + jsdom "~22.1.0" lodash "~4.17.21" memoize-one "~6.0.0" microsoft-capitalize "~1.0.5" mime "~3.0.0" normalize-url "~6.1.0" - re2 "~1.18.0" + re2 "~1.18.3" smartquotes "~2.3.2" tldts "~6.0.1" url-regex-safe "~3.0.0" @@ -5918,10 +5918,10 @@ insane@2.6.1: assignment "2.0.0" he "0.5.0" -install-artifact-from-github@^1.3.1: - version "1.3.2" - resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.3.2.tgz#1a16d9508e40330523a3017ae0d4713ccc64de82" - integrity sha512-yCFcLvqk0yQdxx0uJz4t9Z3adDMLAYrcGYv546uRXCSvxE+GqNYhhz/KmrGcUKGI/gVLR9n/e/zM9jX/+ASMJQ== +install-artifact-from-github@^1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/install-artifact-from-github/-/install-artifact-from-github-1.3.3.tgz#57d89bacfa0f47d7307fe41b6247cda9f9a8079c" + integrity sha512-x79SL0d8WOi1ZjXSTUqqs0GPQZ92YArJAN9O46wgU9wdH2U9ecyyhB9YGDbPe2OLV4ptmt6AZYRQZ2GydQZosQ== invariant@^2.2.2, invariant@^2.2.4: version "2.2.4" @@ -6807,10 +6807,10 @@ jsbn@~0.1.0: resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== -jsdom@~22.0.0: - version "22.0.0" - resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.0.0.tgz#3295c6992c70089c4b8f5cf060489fddf7ee9816" - integrity sha512-p5ZTEb5h+O+iU02t0GfEjAnkdYPrQSkfuTSMkMYyIoMvUNEHsbG0bHHbfXIcfTqD2UfvjQX7mmgiFsyRwGscVw== +jsdom@~22.1.0: + version "22.1.0" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-22.1.0.tgz#0fca6d1a37fbeb7f4aac93d1090d782c56b611c8" + integrity sha512-/9AVW7xNbsBv6GfWho4TTNjEo9fe6Zhf9O7s0Fhhr3u+awPwAJMKwAMXnkk5vBxflqLW9hTHX/0cs+P3gW+cQw== dependencies: abab "^2.0.6" cssstyle "^3.0.0" @@ -7385,12 +7385,12 @@ metascraper-soundcloud@^5.34.4: dependencies: "@metascraper/helpers" "^5.34.4" -metascraper-title@^5.33.5: - version "5.33.5" - resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.33.5.tgz#2efd6aae03211175fa2e27b4d827cade4c3e35f4" - integrity sha512-Vavt/2Yt4BZP+++xsV2ZnUqqQ4WHxRImZq6fZD6Eh8R8nt43kuQdgKrBKTD3Ybk6/qvlCTQ9XY57m/KTIiAMnA== +metascraper-title@^5.34.7: + version "5.34.7" + resolved "https://registry.yarnpkg.com/metascraper-title/-/metascraper-title-5.34.7.tgz#d53afa05eb4d5f2d7b8ec772ddfc335733f86a21" + integrity sha512-k+eDC12Y1m5n/RE3GhqmWRtNSKH9rDXvAzJ6k2T9+9PyaGeaSN9dWLnc3rK9TYmdFP02kTKhCAV8WerHw/7IqA== dependencies: - "@metascraper/helpers" "^5.33.5" + "@metascraper/helpers" "^5.34.7" metascraper-url@^5.34.2: version "5.34.2" @@ -7854,7 +7854,7 @@ node-fetch@^2.1.2, node-fetch@^2.2.0, node-fetch@^2.6.0, node-fetch@~2.6.1: resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== -node-gyp@^9.3.0: +node-gyp@^9.3.1: version "9.3.1" resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-9.3.1.tgz#1e19f5f290afcc9c46973d68700cbd21a96192e4" integrity sha512-4Q16ZCqq3g8awk6UplT7AuxQ35XN4R/yf/+wSAwcBUAjg7l58RTactWaP8fIDTi0FzI7YcVLujwExakZlfWkXg== @@ -8711,14 +8711,14 @@ rc@^1.0.1, rc@^1.1.6, rc@^1.2.7: minimist "^1.2.0" strip-json-comments "~2.0.1" -re2@~1.18.0: - version "1.18.0" - resolved "https://registry.yarnpkg.com/re2/-/re2-1.18.0.tgz#6d6f47c5aaa436eb7a7d68b260f8cf25d7948619" - integrity sha512-MoCYZlJ9YUgksND9asyNF2/x532daXU/ARp1UeJbQ5flMY6ryKNEhrWt85aw3YluzOJlC3vXpGgK2a1jb0b4GA== +re2@~1.18.3: + version "1.18.3" + resolved "https://registry.yarnpkg.com/re2/-/re2-1.18.3.tgz#64120f3990351e6d71207b095a92ebc41f123c7f" + integrity sha512-QAUSIl5znNR/GOXLIUWWao0pPQ2VZU/t9u+0j17x7lXXypPsil8iuYBsSuMDZ3TGx439332tYdh0d9Nt8XGbHg== dependencies: - install-artifact-from-github "^1.3.1" + install-artifact-from-github "^1.3.3" nan "^2.17.0" - node-gyp "^9.3.0" + node-gyp "^9.3.1" reachable-url@~1.7.1: version "1.7.1" diff --git a/package.json b/package.json index b15175710..5d27e155a 100644 --- a/package.json +++ b/package.json @@ -23,7 +23,7 @@ }, "devDependencies": { "@babel/core": "^7.21.8", - "@babel/preset-env": "^7.21.5", + "@babel/preset-env": "^7.22.4", "@babel/register": "^7.12.10", "@badeball/cypress-cucumber-preprocessor": "^15.1.4", "@cypress/browserify-preprocessor": "^3.0.2", diff --git a/webapp/assets/_new/styles/tokens.scss b/webapp/assets/_new/styles/tokens.scss index 863e0e0b7..22e0214ff 100644 --- a/webapp/assets/_new/styles/tokens.scss +++ b/webapp/assets/_new/styles/tokens.scss @@ -90,6 +90,9 @@ $background-color-primary-inverse: rgb(241, 253, 244); $background-color-secondary: rgb(0, 142, 230); $background-color-secondary-active: rgb(10, 161, 255); $background-color-secondary-inverse: rgb(240, 249, 255); +$background-color-third: rgb(126, 82, 204); +$background-color-third-active: rgb(160, 103, 255); +$background-color-third-inverse: rgb(239, 230, 255); $background-color-success: rgb(23, 181, 63); $background-color-success-active: rgb(26, 203, 71); $background-color-success-inverse: rgb(241, 253, 244); @@ -395,3 +398,12 @@ $color-toast-orange: $color-warning; $color-toast-yellow: $color-yellow; $color-toast-blue: $color-secondary; $color-toast-green: $color-success; + +/** + * @tokens Ribbon Color + */ + +$color-ribbon-event: $background-color-third; +$color-ribbon-event-active: $background-color-third-active; +$color-ribbon-article: $background-color-secondary; +$color-ribbon-article-active: $background-color-secondary-active; \ No newline at end of file diff --git a/webapp/components/FilterMenu/CategoriesFilter.vue b/webapp/components/FilterMenu/CategoriesFilter.vue index 8b96245fd..347994c9a 100644 --- a/webapp/components/FilterMenu/CategoriesFilter.vue +++ b/webapp/components/FilterMenu/CategoriesFilter.vue @@ -12,12 +12,12 @@
  • -
    - + + diff --git a/webapp/components/FilterMenu/FilterMenu.spec.js b/webapp/components/FilterMenu/FilterMenu.spec.js index c3a3ca113..30f970b62 100644 --- a/webapp/components/FilterMenu/FilterMenu.spec.js +++ b/webapp/components/FilterMenu/FilterMenu.spec.js @@ -15,6 +15,7 @@ describe('FilterMenu.vue', () => { const getters = { 'posts/isActive': () => false, + 'posts/filteredPostTypes': () => [], 'posts/orderBy': () => 'createdAt_desc', } diff --git a/webapp/components/FilterMenu/FilterMenuComponent.vue b/webapp/components/FilterMenu/FilterMenuComponent.vue index 708c3bc7c..9a52a9b98 100644 --- a/webapp/components/FilterMenu/FilterMenuComponent.vue +++ b/webapp/components/FilterMenu/FilterMenuComponent.vue @@ -6,6 +6,10 @@ +
    +

    {{ $t('filter-menu.eventsBy') }}

    + +

    {{ $t('filter-menu.order-by') }}

    @@ -14,6 +18,8 @@ diff --git a/webapp/components/FilterMenu/HeaderButton.vue b/webapp/components/FilterMenu/HeaderButton.vue index 780e29ade..dfacff43f 100644 --- a/webapp/components/FilterMenu/HeaderButton.vue +++ b/webapp/components/FilterMenu/HeaderButton.vue @@ -44,13 +44,12 @@ export default { diff --git a/webapp/locales/de.json b/webapp/locales/de.json index 82b7c7bd4..5f36d293b 100644 --- a/webapp/locales/de.json +++ b/webapp/locales/de.json @@ -272,7 +272,9 @@ "myFriends": "Nutzer denen ich folge", "myGroups": "Aus meinen Gruppen", "myTopics": "Meine Themen", - "noFilter": "Beiträge filtern" + "noFilter": "Inhalt filtern", + "onlyArticles": "Nur Beiträge", + "onlyEvents": "Nur Veranstaltungen" }, "filterMyGroups": "Beiträge in meinen Gruppen", "inappropriatePicture": "Dieses Bild kann für einige Menschen unangemessen sein.", @@ -378,31 +380,53 @@ }, "filter-menu": { "all": "Alle", - "article": "Artikel", + "article": "Beitrag", "categories": "Themen", + "creationDate": "Erstellungszeitpunkt", "deleteFilter": "Filter löschen", "emotions": "Emotionen", - "events": "Veranstaltungen", + "ended": { + "all": { + "hint": "Zeige alle, auch beendete", + "label": "Alle" + }, + "onlyEnded": { + "hint": "Zeige nur noch nicht beendete", + "label": "Nicht beendete" + } + }, + "event": "Veranstaltung", + "eventsBy": "Veranstaltungen – zeige ...", + "eventsEnded": "Beendet", "filter-by": "Filtern nach ...", "following": "Nutzer denen ich folge", "languages": "Sprachen", "my-groups": "Meinen Gruppen", "order": { + "last": { + "hint": "Sortiere die Letzten nach vorn", + "label": "Letzte zuerst" + }, "newest": { "hint": "Sortiere die Neuesten nach vorn", "label": "Neueste zuerst" }, + "next": { + "hint": "Sortiere die Nächsten nach vorn", + "label": "Nächste zuerst" + }, "oldest": { "hint": "Sortiere die Ältesten nach vorn", "label": "Älteste zuerst" } }, "order-by": "Sortieren nach ...", - "post-type": "Beitrags-Typ", + "post-type": "Inhaltstyp", "save": { "error": "Themen konnten nicht gespeichert werden!", "success": "Themen gespeichert!" - } + }, + "startDate": "Anfangszeitpunkt" }, "followButton": { "follow": "Folgen", diff --git a/webapp/locales/en.json b/webapp/locales/en.json index 45a241957..0719d8cbf 100644 --- a/webapp/locales/en.json +++ b/webapp/locales/en.json @@ -272,7 +272,9 @@ "myFriends": "Users I follow", "myGroups": "By my groups", "myTopics": "My topics", - "noFilter": "Filter posts" + "noFilter": "Filter content", + "onlyArticles": "Only articles", + "onlyEvents": "Only events" }, "filterMyGroups": "Contributions in my groups", "inappropriatePicture": "This image may be inappropriate for some people.", @@ -380,29 +382,51 @@ "all": "All", "article": "Article", "categories": "Topics", + "creationDate": "Creation date", "deleteFilter": "Delete filter", "emotions": "Emotions", - "events": "Events", + "ended": { + "all": { + "hint": "Show all, also ended", + "label": "All" + }, + "onlyEnded": { + "hint": "Show only not ended", + "label": "Not ended" + } + }, + "event": "Event", + "eventsBy": "Events – show ...", + "eventsEnded": "Ended", "filter-by": "Filter by ...", "following": "Users I follow", "languages": "Languages", "my-groups": "My groups", "order": { + "last": { + "hint": "Sort posts by the last first", + "label": "Last first" + }, "newest": { "hint": "Sort posts by the newest first", "label": "Newest first" }, + "next": { + "hint": "Sort posts by the next first", + "label": "Next first" + }, "oldest": { "hint": "Sort posts by the oldest first", "label": "Oldest first" } }, "order-by": "Order by ...", - "post-type": "Post type", + "post-type": "Content type", "save": { "error": "Failed saving topic settings!", "success": "Topics saved!" - } + }, + "startDate": "Start date" }, "followButton": { "follow": "Follow", @@ -716,7 +740,7 @@ "unpin": "Unpin post", "unpinnedSuccessfully": "Post unpinned successfully!" }, - "name": "Post", + "name": "Article", "pinned": "Announcement", "takeAction": { "name": "Take action" diff --git a/webapp/pages/index.spec.js b/webapp/pages/index.spec.js index 8e55fada1..c16560a84 100644 --- a/webapp/pages/index.spec.js +++ b/webapp/pages/index.spec.js @@ -28,6 +28,10 @@ describe('PostIndex', () => { store = new Vuex.Store({ getters: { 'posts/filter': () => ({}), + 'posts/filteredPostTypes': () => [], + 'posts/articleSetInPostTypeFilter': () => false, + 'posts/eventSetInPostTypeFilter': () => false, + 'posts/eventsEnded': () => '', 'posts/orderBy': () => 'createdAt_desc', 'auth/user': () => { return { id: 'u23' } diff --git a/webapp/pages/index.vue b/webapp/pages/index.vue index 591da3300..7b5c4a903 100644 --- a/webapp/pages/index.vue +++ b/webapp/pages/index.vue @@ -25,6 +25,7 @@ + + + +
    -
    +
    @@ -120,6 +137,7 @@