From 47297127a224ca0bb37c6dc6668f3a869e257264 Mon Sep 17 00:00:00 2001 From: Thomas Citharel <tcit@tcit.fr> Date: Mon, 15 Jun 2020 16:20:58 +0200 Subject: [PATCH] Improve comment section Signed-off-by: Thomas Citharel <tcit@tcit.fr> --- js/package.json | 16 +- js/src/components/Comment/Comment.vue | 114 +++++-- js/src/components/Editor.vue | 10 +- js/src/components/Event/ShareEventModal.vue | 2 +- js/src/graphql/comment.ts | 5 +- js/src/variables.scss | 45 +-- js/src/views/Moderation/Report.vue | 6 +- js/yarn.lock | 329 ++++++++++---------- lib/federation/activity_pub/federator.ex | 1 - lib/graphql/resolvers/comment.ex | 6 +- lib/graphql/schema/conversations/comment.ex | 8 +- lib/service/metadata/actor.ex | 2 +- lib/service/metadata/comment.ex | 2 +- lib/service/metadata/event.ex | 14 +- lib/service/metadata/metadata.ex | 2 +- lib/service/metadata/tombstone.ex | 2 +- lib/web/views/error_view.ex | 4 +- lib/web/views/page_view.ex | 13 +- mix.lock | 16 +- 19 files changed, 325 insertions(+), 272 deletions(-) diff --git a/js/package.json b/js/package.json index a496eeb72..3d418dbde 100644 --- a/js/package.json +++ b/js/package.json @@ -66,14 +66,14 @@ "@types/vuedraggable": "^2.23.0", "@typescript-eslint/eslint-plugin": "^2.26.0", "@typescript-eslint/parser": "^2.26.0", - "@vue/cli-plugin-babel": "~4.4.1", - "@vue/cli-plugin-e2e-cypress": "~4.4.1", - "@vue/cli-plugin-eslint": "~4.4.1", - "@vue/cli-plugin-pwa": "~4.4.1", - "@vue/cli-plugin-router": "~4.4.1", - "@vue/cli-plugin-typescript": "~4.4.1", - "@vue/cli-plugin-unit-mocha": "~4.4.1", - "@vue/cli-service": "~4.4.1", + "@vue/cli-plugin-babel": "~4.4.4", + "@vue/cli-plugin-e2e-cypress": "~4.4.4", + "@vue/cli-plugin-eslint": "~4.4.4", + "@vue/cli-plugin-pwa": "~4.4.4", + "@vue/cli-plugin-router": "~4.4.4", + "@vue/cli-plugin-typescript": "~4.4.4", + "@vue/cli-plugin-unit-mocha": "~4.4.4", + "@vue/cli-service": "~4.4.4", "@vue/eslint-config-airbnb": "^5.0.2", "@vue/eslint-config-prettier": "^6.0.0", "@vue/eslint-config-typescript": "^5.0.2", diff --git a/js/src/components/Comment/Comment.vue b/js/src/components/Comment/Comment.vue index ca625137a..5872fd6dc 100644 --- a/js/src/components/Comment/Comment.vue +++ b/js/src/components/Comment/Comment.vue @@ -1,24 +1,27 @@ <template> <li :class="{ reply: comment.inReplyToComment }"> - <article - class="media" - :class="{ selected: commentSelected, organizer: commentFromOrganizer }" - :id="commentId" - > - <figure class="media-left" v-if="!comment.deletedAt && comment.actor.avatar"> - <p class="image is-48x48"> - <img :src="comment.actor.avatar.url" alt="" /> - </p> - </figure> - <b-icon class="media-left" v-else size="is-large" icon="account-circle" /> + <article class="media" :class="{ selected: commentSelected }" :id="commentId"> + <popover-actor-card :actor="comment.actor" :inline="true" v-if="comment.actor"> + <figure class="media-left" v-if="!comment.deletedAt && comment.actor.avatar"> + <p class="image is-48x48 is-rounded"> + <img :src="comment.actor.avatar.url" alt="" /> + </p> + </figure> + <b-icon class="media-left" v-else size="is-large" icon="account-circle" /> + </popover-actor-card> + <div v-else> + <figure class="media-left" v-if="!comment.deletedAt && comment.actor.avatar"> + <p class="image is-48x48 is-rounded"> + <img :src="comment.actor.avatar.url" alt="" /> + </p> + </figure> + <b-icon class="media-left" v-else size="is-large" icon="account-circle" /> + </div> <div class="media-content"> <div class="content"> <span class="first-line" v-if="!comment.deletedAt"> - <strong>{{ comment.actor.name }}</strong> - <small v-if="comment.actor.domain" - >@{{ comment.actor.preferredUsername }}@{{ comment.actor.domain }}</small - > - <small v-else>@{{ comment.actor.preferredUsername }}</small> + <strong :class="{ organizer: commentFromOrganizer }">{{ comment.actor.name }}</strong> + <small>@{{ usernameWithDomain(comment.actor) }}</small> <a class="comment-link has-text-grey" :href="commentURL"> <small>{{ timeago(new Date(comment.updatedAt)) }}</small> </a> @@ -55,7 +58,11 @@ </div> <nav class="reply-action level is-mobile" - v-if="currentActor.id && event.options.commentModeration !== CommentModeration.CLOSED" + v-if=" + currentActor.id && + event.options.commentModeration !== CommentModeration.CLOSED && + !comment.deletedAt + " > <div class="level-left"> <span @@ -100,17 +107,22 @@ </div> </article> </form> - <transition-group name="comment-replies" v-if="showReplies" class="comment-replies" tag="ul"> - <comment - class="reply" - v-for="reply in comment.replies" - :key="reply.id" - :comment="reply" - :event="event" - @create-comment="$emit('create-comment', $event)" - @delete-comment="$emit('delete-comment', $event)" - /> - </transition-group> + <div class="replies"> + <div class="left"> + <div class="vertical-border" @click="showReplies = false" /> + </div> + <transition-group name="comment-replies" v-if="showReplies" class="comment-replies" tag="ul"> + <comment + class="reply" + v-for="reply in comment.replies" + :key="reply.id" + :comment="reply" + :event="event" + @create-comment="$emit('create-comment', $event)" + @delete-comment="$emit('delete-comment', $event)" + /> + </transition-group> + </div> </li> </template> <script lang="ts"> @@ -119,12 +131,13 @@ import EditorComponent from "@/components/Editor.vue"; import TimeAgo from "javascript-time-ago"; import { CommentModel, IComment } from "../../types/comment.model"; import { CURRENT_ACTOR_CLIENT } from "../../graphql/actor"; -import { IPerson } from "../../types/actor"; +import { IPerson, usernameWithDomain } from "../../types/actor"; import { COMMENTS_THREADS, FETCH_THREAD_REPLIES } from "../../graphql/comment"; import { IEvent, CommentModeration } from "../../types/event.model"; import ReportModal from "../Report/ReportModal.vue"; import { IReport } from "../../types/report.model"; import { CREATE_REPORT } from "../../graphql/report"; +import PopoverActorCard from "../../components/Account/PopoverActorCard.vue"; @Component({ apollo: { @@ -135,6 +148,7 @@ import { CREATE_REPORT } from "../../graphql/report"; components: { editor: () => import(/* webpackChunkName: "editor" */ "@/components/Editor.vue"), comment: () => import(/* webpackChunkName: "comment" */ "./Comment.vue"), + PopoverActorCard, }, }) export default class Comment extends Vue { @@ -158,6 +172,8 @@ export default class Comment extends Vue { CommentModeration = CommentModeration; + usernameWithDomain = usernameWithDomain; + async mounted() { const localeName = this.$i18n.locale; const locale = await import(`javascript-time-ago/locale/${localeName}`); @@ -302,9 +318,22 @@ form.reply { } .first-line { + margin-bottom: 3px; + * { padding: 0 5px 0 0; } + + strong.organizer { + background: $primary; + border-radius: 12px; + color: white; + padding: 0 6px; + } + + & > small { + margin-left: 0.3rem; + } } .editor-line { @@ -322,8 +351,27 @@ form.reply { color: hsl(0, 0%, 21%); } -.root-comment .comment-replies > .reply { - padding-left: 3rem; +.root-comment .replies { + display: flex; + + .left { + display: flex; + flex-direction: column; + align-items: center; + margin-right: 10px; + + .vertical-border { + width: 3px; + height: 100%; + background-color: rgba(0, 0, 0, 0.05); + margin: 10px calc(1rem + 1px); + cursor: pointer; + + &:hover { + background-color: rgba(0, 0, 0, 0.1); + } + } + } } .media .media-content { @@ -353,13 +401,11 @@ form.reply { article { border-radius: 4px; + margin-bottom: 5px; &.selected { background-color: lighten($secondary, 30%); } - &.organizer:not(.selected) { - background-color: lighten($primary, 50%); - } } .comment-replies-enter-active, diff --git a/js/src/components/Editor.vue b/js/src/components/Editor.vue index 88fcf9434..a207a0fa9 100644 --- a/js/src/components/Editor.vue +++ b/js/src/components/Editor.vue @@ -443,7 +443,6 @@ export default class EditorComponent extends Vue { replyToComment(comment: IComment) { const actorModel = new Actor(comment.actor); if (!this.editor) return; - console.log(this.editor.commands); this.editor.commands.mention({ id: actorModel.id, label: actorModel.usernameWithDomain().substring(1), @@ -697,12 +696,19 @@ $color-white: #eee; font-size: 0.9rem; font-weight: bold; border-radius: 5px; - padding: 0.2rem 0.5rem; + padding: 0.2rem; white-space: nowrap; + margin-right: 0.2rem; } .mention-suggestion { color: rgba($color-black, 0.6); } + +.mention .mention { + background: initial; + margin-right: 0; +} + .suggestion-list { padding: 0.2rem; border: 2px solid rgba($color-black, 0.1); diff --git a/js/src/components/Event/ShareEventModal.vue b/js/src/components/Event/ShareEventModal.vue index 273589a25..9704b0ab7 100644 --- a/js/src/components/Event/ShareEventModal.vue +++ b/js/src/components/Event/ShareEventModal.vue @@ -40,7 +40,7 @@ import { Component, Prop, Vue } from "vue-property-decorator"; import { IEvent } from "../../types/event.model"; // @ts-ignore -import DiasporaLogo from "../../assets/diaspora-icon.svg"; +import DiasporaLogo from "../../assets/diaspora-icon.svg?inline"; @Component({ components: { diff --git a/js/src/graphql/comment.ts b/js/src/graphql/comment.ts index 6421edbd9..c00c28e5a 100644 --- a/js/src/graphql/comment.ts +++ b/js/src/graphql/comment.ts @@ -17,6 +17,7 @@ export const COMMENT_FIELDS_FRAGMENT = gql` domain preferredUsername name + summary } totalReplies updatedAt @@ -58,11 +59,11 @@ export const COMMENTS_THREADS = gql` id uuid comments { - ...CommentRecursive + ...CommentFields } } } - ${COMMENT_RECURSIVE_FRAGMENT} + ${COMMENT_FIELDS_FRAGMENT} `; export const CREATE_COMMENT_FROM_EVENT = gql` diff --git a/js/src/variables.scss b/js/src/variables.scss index 18b34b81a..dbb33e128 100644 --- a/js/src/variables.scss +++ b/js/src/variables.scss @@ -6,38 +6,30 @@ $primary-invert: findColorInvert($primary); $secondary: #ffd599; $secondary-invert: findColorInvert($secondary); -$success: #0eccaf; +$success: #1E7D97; $success-invert: findColorInvert($success); $info: #36bcd4; $info-invert: findColorInvert($info); $danger: #ff7061; $danger-invert: findColorInvert($danger); -$colors: map-merge( - $colors, - ( - "primary": ( - $primary, +$colors: map-merge($colors, + ("primary": ($primary, $primary-invert, ), - "secondary": ( - $secondary, + "secondary": ($secondary, $secondary-invert, ), - "success": ( - $success, + "success": ($success, $success-invert, ), - "info": ( - $info, + "info": ($info, $info-invert, ), - "danger": ( - $danger, + "danger": ($danger, $danger-invert, ), - ) -); + )); // Navbar $navbar-background-color: $secondary; @@ -52,25 +44,34 @@ $body-background-color: #efeef4; $fullhd-enabled: false; $hero-body-padding-medium: 6rem 1.5rem; -main > .container { +main>.container { background: $body-background-color; } $title-color: #3c376e; -$title-family: "Liberation Sans", "Helvetica Neue", Roboto, Helvetica, Arial, - serif; +$title-family: "Liberation Sans", +"Helvetica Neue", +Roboto, +Helvetica, +Arial, +serif; $title-weight: 700; $title-size: 40px; $title-sub-size: 45px; $title-sup-size: 30px; $subtitle-color: #3a384c; -$subtitle-family: "Liberation Sans", "Helvetica Neue", Roboto, Helvetica, Arial, - serif; +$subtitle-family: "Liberation Sans", +"Helvetica Neue", +Roboto, +Helvetica, +Arial, +serif; $subtitle-weight: 400; $subtitle-size: 32px; $subtitle-sub-size: 30px; $subtitle-sup-size: 15px; + .title { margin: 30px auto 45px; } @@ -80,4 +81,4 @@ $subtitle-sup-size: 15px; display: inline; padding: 3px 8px; margin: 15px auto 30px; -} +} \ No newline at end of file diff --git a/js/src/views/Moderation/Report.vue b/js/src/views/Moderation/Report.vue index bbb1dc298..01783d1db 100644 --- a/js/src/views/Moderation/Report.vue +++ b/js/src/views/Moderation/Report.vue @@ -40,6 +40,7 @@ v-if="report.reported.avatar" class="image" :src="report.reported.avatar.url" + alt="" /> @{{ report.reported.preferredUsername }} </router-link> @@ -61,6 +62,7 @@ v-if="report.reporter.avatar" class="image" :src="report.reporter.avatar.url" + alt="" /> @{{ report.reporter.preferredUsername }} </router-link> @@ -188,8 +190,8 @@ </div> <form @submit="addNote()"> - <b-field :label="$t('New note')"> - <b-input type="textarea" v-model="noteContent"></b-input> + <b-field :label="$t('New note')" label-for="newNoteInput"> + <b-input type="textarea" v-model="noteContent" id="newNoteInput"></b-input> </b-field> <b-button type="submit" @click="addNote">{{ $t("Add a note") }}</b-button> </form> diff --git a/js/yarn.lock b/js/yarn.lock index 2f094624e..445ed20c8 100644 --- a/js/yarn.lock +++ b/js/yarn.lock @@ -1115,9 +1115,9 @@ integrity sha512-6QWXsuqzfUMfsg1DTJan/MfUi80LGS1TOohSqxlgpBZEHH344xpl3LzgANTp7PPWf7Z/9S0l14RMQPF0vH7MIg== "@types/json-schema@^7.0.3", "@types/json-schema@^7.0.4": - version "7.0.4" - resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" - integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== + version "7.0.5" + resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.5.tgz#dcce4430e64b443ba8945f0290fb564ad5bac6dd" + integrity sha512-7+2BITlgjgDhH0vvwZU/HZJVyk+2XUlvxXe8dFMedNX/aMkaOq++rMAFXc0tM7ij15QaWlbdQASBR9dihi+bDQ== "@types/json5@^0.0.29": version "0.0.29" @@ -1159,9 +1159,9 @@ integrity sha512-6nlq2eEh75JegDGUXis9wGTYIJpUvbori4qx++PRKQsV3YRkaqUNPNykzphniqPSZADXCouBuAnyptjUkMkhvw== "@types/node@*", "@types/node@>=6": - version "14.0.12" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.12.tgz#9c1d8ffb8084e8936603a6122a7649e40e68e04b" - integrity sha512-/sjzehvjkkpvLpYtN6/2dv5kg41otMGuHQUt9T2aiAuIfleCQRQHXXzF1eAw/qkZTj5Kcf4JSTf7EIizHocy6Q== + version "14.0.13" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.0.13.tgz#ee1128e881b874c371374c1f72201893616417c9" + integrity sha512-rouEWBImiRaSJsVA+ITTFM6ZxibuAlTuNOCyxVbwreu6k6+ujs7DfnU9o+PShFhET78pMBl3eH+AGSI5eOTkPA== "@types/normalize-package-data@^2.4.0": version "2.4.0" @@ -1376,10 +1376,10 @@ lodash.kebabcase "^4.1.1" svg-tags "^1.0.0" -"@vue/babel-preset-app@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.1.tgz#97c6796183cd0abf96a17297dc335c4c702fd8c4" - integrity sha512-VHVROEBBiW0dnuNuzlFElkncXo+zxh5Px0MZ51Th5da8UPbQodf43mnpotMnFtmCPTXAFL58tzDttu1FgrgfpQ== +"@vue/babel-preset-app@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/babel-preset-app/-/babel-preset-app-4.4.4.tgz#e40929ca89ea3d547ea20cf0a15c222c9ad1ba38" + integrity sha512-9b74d/lz4GEc9zkF3C+vjgEXYqu9ITq1DimUT+IVRJDvhgnV+a3C+pQY4Kl4PZSOyqkTHM7jE6eG2K5DUwKpWg== dependencies: "@babel/core" "^7.9.6" "@babel/helper-compilation-targets" "^7.9.6" @@ -1444,68 +1444,68 @@ "@vue/babel-plugin-transform-vue-jsx" "^1.1.2" camelcase "^5.0.0" -"@vue/cli-overlay@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.1.tgz#f1f51f31f7a00d371e9a5b5a941525184475bf8b" - integrity sha512-EQqAVy7O/qqGOfSYIGL073FWlr/s6QFA0wA1wY8pHnTS5WPwAiHT+D+xe+fgXKZ3KeL7v7u/le7YFIEVXFVXOg== +"@vue/cli-overlay@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-overlay/-/cli-overlay-4.4.4.tgz#43268a8cdcd3ad741dfa51006b576064fbbe6e8e" + integrity sha512-cTvtifIpsSVF2dPF+ibUoAq+hMkEbg4EYTsf6dUuUrBKi1G2tyZ3Pnx54U2NpqXjJMykqMGX+i+BxpIG5tJCGw== -"@vue/cli-plugin-babel@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.1.tgz#2c6e969fe51f1b4b211bea84afb7cad18240f70f" - integrity sha512-dmhymfm2UnZDw13k/zKT6YIj7je53mE37Y+jEJxpRUlCKFmZUDuYkJ8i5HmO0SnaCnEGqNELaBkoIFnY3aE2Gw== +"@vue/cli-plugin-babel@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-babel/-/cli-plugin-babel-4.4.4.tgz#18904b5e38173291b37054c2f0393fb8c748f37b" + integrity sha512-VctlKy5oEYhI+AiPpzlorjDmuhbpoRQcKXpBdf2bXvq0+uuTQg7UXmPX0RKJejnFTKSJZvuPTihgfCWiyh9C3Q== dependencies: "@babel/core" "^7.9.6" - "@vue/babel-preset-app" "^4.4.1" - "@vue/cli-shared-utils" "^4.4.1" + "@vue/babel-preset-app" "^4.4.4" + "@vue/cli-shared-utils" "^4.4.4" babel-loader "^8.1.0" cache-loader "^4.1.0" thread-loader "^2.1.3" webpack "^4.0.0" -"@vue/cli-plugin-e2e-cypress@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.4.1.tgz#9f6cc0ed8243ad573a9f3319cf243b308ec5d3b0" - integrity sha512-s/lG5+fEZmyuomRy7ZVCUsswWsF5T9MXn/Ws59fxlvYthhRDxJTJs3NmjnX8oxp/MZgbUMBvIulnarvQZNEj4g== +"@vue/cli-plugin-e2e-cypress@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-e2e-cypress/-/cli-plugin-e2e-cypress-4.4.4.tgz#2118623e881d14c422cbaffd967ed5c39dd6e8a9" + integrity sha512-IYoI3gxO6kzaO8CdqSzFqdvFr649+oW3by3jTqenxu6q1w8YSs8RPPb3Q1E3CL6or4k9dMfGI9mmehF1pXB6eA== dependencies: - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" cypress "^3.8.3" eslint-plugin-cypress "^2.10.3" -"@vue/cli-plugin-eslint@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.1.tgz#e39d6517da6de231195d227f995f495e2958a74a" - integrity sha512-T+9+q44iajQEbe59z6Io3otFOsWnPOEVU+/hrDyC6aOToJbQo6P4VacByDDcuGYENAjAd8ENLSt18TaPNSIyRw== +"@vue/cli-plugin-eslint@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-eslint/-/cli-plugin-eslint-4.4.4.tgz#19fd1da1863a90584b78939cce1ce94c49ed4388" + integrity sha512-B+l3smq3Lyob9qiuywC/IymCCyV2Gm/l1ZtxRzQI98RDTKei1PrRriIi3Hrg/AkK59HirwR7P7wiNhF2Pqg3VA== dependencies: - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" eslint-loader "^2.2.1" globby "^9.2.0" inquirer "^7.1.0" webpack "^4.0.0" yorkie "^2.0.0" -"@vue/cli-plugin-pwa@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.4.1.tgz#e7bc010bc78cfaf74968c11fb332f3abc1ef298d" - integrity sha512-0LnJSsuD9GHQ5B9OoOejhHNnpkgy0ctLt1o0+S8vBtpl9+jIIBzKDT7kY3/2QT4vNwH9b0pWr9WdfmdCPPv2vQ== +"@vue/cli-plugin-pwa@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-pwa/-/cli-plugin-pwa-4.4.4.tgz#d29e1f8e2ff9acb4b6ffa82b6f765a0aa4a8d90a" + integrity sha512-V9MdKP5WPo0W/0eGmml93U2bdh4gyfaiZAWOD4BZQDBN/hk0Q32VaImVtYorLNU5uw66XbUHtsIseOSPOSR7PQ== dependencies: - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" webpack "^4.0.0" workbox-webpack-plugin "^4.3.1" -"@vue/cli-plugin-router@^4.4.1", "@vue/cli-plugin-router@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.1.tgz#07d09df0f4bea816e637da814f578b808f1f93b2" - integrity sha512-kCSsJG7pjDvCJDjGtcCI5l0UjmqwNigOR41RkeGSjSUvzV4ArSniXjFqrOmtpMp36S5xCtwtt9MFm/K4fCubkQ== +"@vue/cli-plugin-router@^4.4.4", "@vue/cli-plugin-router@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-router/-/cli-plugin-router-4.4.4.tgz#59e11dd55df854618616ad4f013b20c52e4a3a68" + integrity sha512-jZTupo+zFz1YHH3Q4WC5nJW5wlNEDqX//m+atwUISPahVEG6/EV8HwJnQDT7EQ9re4v78xI27eOtyNw+qSyiSA== dependencies: - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" -"@vue/cli-plugin-typescript@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.4.1.tgz#00f2e0af3a50e00074cb01dea53ebb75bb50f392" - integrity sha512-WfgaT5N/eUlGXWsucl8vPskB3QYZFw77P1e/0TEwekVsz8yyT5/MEnZaQSH9emufcAagjpWHHL3fNQdIVg70eQ== +"@vue/cli-plugin-typescript@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-typescript/-/cli-plugin-typescript-4.4.4.tgz#bac7a4d33bc40df48ef1e49310183de029976e64" + integrity sha512-7ds7JwrA10YnMAdIYE4PnFltiZzjMclaTl5J6Ibwh0tGwRqAIX+AJ3euX7KqYi2hcPGwFZPx8zhSQhrxtkdrZA== dependencies: "@types/webpack-env" "^1.15.2" - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" cache-loader "^4.1.0" fork-ts-checker-webpack-plugin "^3.1.1" globby "^9.2.0" @@ -1515,34 +1515,34 @@ webpack "^4.0.0" yorkie "^2.0.0" -"@vue/cli-plugin-unit-mocha@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-4.4.1.tgz#3417c2928a4e15c3d2140cde63ea1b58c6881ed0" - integrity sha512-LNX7a6zuFncJvopQFmikkGs5SAmx4iYsfBZNmQUx1iORyAW87IrOf69FJQ+bRTAen7NMi4USNaEwiCxcTha4xg== +"@vue/cli-plugin-unit-mocha@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-unit-mocha/-/cli-plugin-unit-mocha-4.4.4.tgz#d190caea51d8852554c344babd9e03b8fe5a9775" + integrity sha512-U+MZp0XYQUZcrkWE2g+CqPk6vA7qguCfCTr7bxhNMrhJSAdML4D3sTJN6+aoCNYs8+jNfyPfTkrKI4Ad6D/cRg== dependencies: - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-shared-utils" "^4.4.4" jsdom "^15.2.1" jsdom-global "^3.0.2" mocha "^6.2.2" mochapack "^1.1.15" -"@vue/cli-plugin-vuex@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.1.tgz#98d18fc5d36fa6e0d1fc2ecaeea37aa965564f19" - integrity sha512-FtOFsDP0qznwVaCz0BZmTzUm5vhHSJzX2/XD3L5dLTkrNxyDEbZmbKoX0n1OzBcQwZC7dkJZP2tdoCQx0mX//g== +"@vue/cli-plugin-vuex@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-plugin-vuex/-/cli-plugin-vuex-4.4.4.tgz#42328c161978823a1eac97a07832a7aa225cbb9b" + integrity sha512-A2SZD0B5yPz60W7go2ZYTIHooQse7bhhNUlinGQrdYeQCuURKUqqUbl/zF8u/8Qqo6nZ4F469fHNH6XWRN9Nnw== -"@vue/cli-service@~4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.1.tgz#b26a435d8c953bc7efaf7b784c9835c1415bcf1c" - integrity sha512-DVV0zr5Sw7pzdm3z3PRrfqihLgoJP/d9AgNFcSSQF/J9Gtvjf1t0PTJJFeLANHSL3kDWte+3kjc22sXayu0BJQ== +"@vue/cli-service@~4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-service/-/cli-service-4.4.4.tgz#256c990e49a2ff8dc533b773c504a65435c75c4c" + integrity sha512-AKWpBpBAB+LHJ8JpArM2BJ0I2REy9lG7xIkJn9k3Vw9gadejx+y74P0bJh/J8hY65kDTFltO1BW1Kv3URw/ifQ== dependencies: "@intervolga/optimize-cssnano-plugin" "^1.0.5" "@soda/friendly-errors-webpack-plugin" "^1.7.1" "@soda/get-current-script" "^1.0.0" - "@vue/cli-overlay" "^4.4.1" - "@vue/cli-plugin-router" "^4.4.1" - "@vue/cli-plugin-vuex" "^4.4.1" - "@vue/cli-shared-utils" "^4.4.1" + "@vue/cli-overlay" "^4.4.4" + "@vue/cli-plugin-router" "^4.4.4" + "@vue/cli-plugin-vuex" "^4.4.4" + "@vue/cli-shared-utils" "^4.4.4" "@vue/component-compiler-utils" "^3.1.2" "@vue/preload-webpack-plugin" "^1.1.0" "@vue/web-component-wrapper" "^1.2.0" @@ -1589,10 +1589,10 @@ webpack-dev-server "^3.11.0" webpack-merge "^4.2.2" -"@vue/cli-shared-utils@^4.4.1": - version "4.4.1" - resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.1.tgz#930304ade5a9f9bf0d2fd67d9305cad83d04aae1" - integrity sha512-teevHgI7XUsKVMOncx3M+6iLjO28woGfRwgUG4hR83moVBHQe5x2OCr2i5t/58bwpv269RD5RYXBQCGtIXuxZw== +"@vue/cli-shared-utils@^4.4.4": + version "4.4.4" + resolved "https://registry.yarnpkg.com/@vue/cli-shared-utils/-/cli-shared-utils-4.4.4.tgz#b9685b73a604c8a7ee82d6fc3319fe7bb2cdb274" + integrity sha512-ccMZtTMSutR35V5nrU/eyj+zRMomTRGBTLwJPmaJ2sRiW/93MTggQGXDWC8JRAA8yiU1N8xza8mjBxS0O2wIAA== dependencies: "@hapi/joi" "^15.0.1" chalk "^2.4.2" @@ -1913,9 +1913,9 @@ acorn@^6.0.1, acorn@^6.1.1, acorn@^6.4.1: integrity sha512-ZVA9k326Nwrj3Cj9jlh3wGFutC2ZornPNARZwsNYqQYgN0EsV2d53w5RN/co65Ohn4sUAUtb1rSUAOD6XN9idA== acorn@^7.1.0, acorn@^7.1.1, acorn@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.2.0.tgz#17ea7e40d7c8640ff54a694c889c26f31704effe" - integrity sha512-apwXVmYVpQ34m/i71vrApRrRKCWQnZZF1+npOD0WV5xZFfwWOmKGQ2RWlfdy9vWITsenisM8M0Qeq8agcFHNiQ== + version "7.3.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-7.3.1.tgz#85010754db53c3fbaf3b9ea3e083aa5c5d147ffd" + integrity sha512-tLc0wSnatxAQHVHUapaHdz72pi9KUyHjq5KyHjGg9Y8Ifdc79pTh2XvI6I1/chZbnM7QtNKzh66ooDogPZSleA== address@1.0.3: version "1.0.3" @@ -3182,9 +3182,9 @@ caniuse-api@^3.0.0: lodash.uniq "^4.5.0" caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000929, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001043, caniuse-lite@^1.0.30001061: - version "1.0.30001079" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001079.tgz#ed3e5225cd9a6850984fdd88bf24ce45d69b9c22" - integrity sha512-2KaYheg0iOY+CMmDuAB3DHehrXhhb4OZU4KBVGDr/YKyYAcpudaiUQ9PJ9rxrPlKEoJ3ATasQ5AN48MqpwS43Q== + version "1.0.30001083" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001083.tgz#52410c20c6f029f604f0d45eca0439a82e712442" + integrity sha512-CnYJ27awX4h7yj5glfK7r1TOI13LBytpLzEgfj0s4mY75/F8pnQcYjL+oVpmS38FB59+vU0gscQ9D8tc+lIXvA== capture-stack-trace@^1.0.0: version "1.0.1" @@ -4181,22 +4181,22 @@ css-loader@^2.1.1: schema-utils "^1.0.0" css-loader@^3.5.3: - version "3.5.3" - resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.5.3.tgz#95ac16468e1adcd95c844729e0bb167639eb0bcf" - integrity sha512-UEr9NH5Lmi7+dguAm+/JSPovNjYbm2k3TK58EiwQHzOHH5Jfq1Y+XoP2bQO6TMn7PptMd0opxxedAWcaSTRKHw== + version "3.6.0" + resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" + integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== dependencies: camelcase "^5.3.1" cssesc "^3.0.0" icss-utils "^4.1.1" loader-utils "^1.2.3" normalize-path "^3.0.0" - postcss "^7.0.27" + postcss "^7.0.32" postcss-modules-extract-imports "^2.0.0" postcss-modules-local-by-default "^3.0.2" postcss-modules-scope "^2.2.0" postcss-modules-values "^3.0.0" - postcss-value-parser "^4.0.3" - schema-utils "^2.6.6" + postcss-value-parser "^4.1.0" + schema-utils "^2.7.0" semver "^6.3.0" css-select-base-adapter@^0.1.1: @@ -4929,9 +4929,9 @@ ejs@^2.6.1: integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== electron-to-chromium@^1.3.103, electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.413: - version "1.3.465" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.465.tgz#d692e5c383317570c2bd82092a24a0308c6ccf29" - integrity sha512-K/lUeT3NLAsJ5SHRDhK3/zd0tw7OUllYD8w+fTOXm6ljCPsp2qq+vMzxpLo8u1M27ZjZAjRbsA6rirvne2nAMQ== + version "1.3.473" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.473.tgz#d0cd5fe391046fb70674ec98149f0f97609d29b8" + integrity sha512-smevlzzMNz3vMz6OLeeCq5HRWEj2AcgccNPYnAx4Usx0IOciq9DU36RJcICcS09hXoY7t7deRfVYKD14IrGb9A== elegant-spinner@^1.0.1: version "1.0.1" @@ -5054,21 +5054,21 @@ error-stack-parser@^2.0.0: stackframe "^1.1.1" es-abstract@^1.17.0, es-abstract@^1.17.0-next.1, es-abstract@^1.17.2, es-abstract@^1.17.5: - version "1.17.5" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.5.tgz#d8c9d1d66c8981fb9200e2251d799eee92774ae9" - integrity sha512-BR9auzDbySxOcfog0tLECW8l28eRGpDpU3Dm3Hp4q/N+VtLTmyj4EUN088XZWQDW/hzj6sYRDXeOFsaAODKvpg== + version "1.17.6" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.17.6.tgz#9142071707857b2cacc7b89ecb670316c3e2d52a" + integrity sha512-Fr89bON3WFyUi5EvAeI48QTWX0AyekGgLA8H+c+7fbfCkJwRWRMLd8CQedNEyJuoYYhmtEqY92pgte1FAhBlhw== dependencies: es-to-primitive "^1.2.1" function-bind "^1.1.1" has "^1.0.3" has-symbols "^1.0.1" - is-callable "^1.1.5" - is-regex "^1.0.5" + is-callable "^1.2.0" + is-regex "^1.1.0" object-inspect "^1.7.0" object-keys "^1.1.1" object.assign "^4.1.0" - string.prototype.trimleft "^2.1.1" - string.prototype.trimright "^2.1.1" + string.prototype.trimend "^1.0.1" + string.prototype.trimstart "^1.0.1" es-to-primitive@^1.2.1: version "1.2.1" @@ -5119,13 +5119,13 @@ escodegen@^1.11.1, escodegen@^1.12.0: source-map "~0.6.1" eslint-config-airbnb-base@^14.0.0: - version "14.1.0" - resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.1.0.tgz#2ba4592dd6843258221d9bff2b6831bd77c874e4" - integrity sha512-+XCcfGyCnbzOnktDVhwsCAx+9DmrzEmuwxyHUJpw+kqBVT744OUBrB09khgFKlK1lshVww6qXGsYPZpavoNjJw== + version "14.2.0" + resolved "https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-14.2.0.tgz#fe89c24b3f9dc8008c9c0d0d88c28f95ed65e9c4" + integrity sha512-Snswd5oC6nJaevs3nZoLSTvGJBvzTfnBqOIArkf3cbyTyq9UD79wOk8s+RiL6bhca0p/eRO6veczhf6A/7Jy8Q== dependencies: confusing-browser-globals "^1.0.9" object.assign "^4.1.0" - object.entries "^1.1.1" + object.entries "^1.1.2" eslint-config-prettier@^6.0.0, eslint-config-prettier@^6.11.0: version "6.11.0" @@ -5185,9 +5185,9 @@ eslint-plugin-cypress@^2.10.3: globals "^11.12.0" eslint-plugin-import@^2.18.2, eslint-plugin-import@^2.20.2: - version "2.21.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.1.tgz#3398318e5e4abbd23395c4964ce61538705154c8" - integrity sha512-qYOOsgUv63vHof7BqbzuD+Ud34bXHxFJxntuAC1ZappFZXYbRIek3aJ7jc9i2dHDGDyZ/0zlO0cpioES265Lsw== + version "2.21.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.21.2.tgz#8fef77475cc5510801bedc95f84b932f7f334a7c" + integrity sha512-FEmxeGI6yaz+SnEB6YgNHlQK1Bs2DKLM+YF+vuTk5H8J9CLbJLtlPvRFgZZ2+sXiKAlN5dpdlrWOjK8ZoZJpQA== dependencies: array-includes "^3.1.1" array.prototype.flat "^1.2.3" @@ -5204,9 +5204,9 @@ eslint-plugin-import@^2.18.2, eslint-plugin-import@^2.20.2: tsconfig-paths "^3.9.0" eslint-plugin-prettier@^3.1.3: - version "3.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.3.tgz#ae116a0fc0e598fdae48743a4430903de5b4e6ca" - integrity sha512-+HG5jmu/dN3ZV3T6eCD7a4BlAySdN7mLIbJYo0z1cFQuI+r2DiTJEFeF68ots93PsnrMxbzIZ2S/ieX+mkrBeQ== + version "3.1.4" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-3.1.4.tgz#168ab43154e2ea57db992a2cd097c828171f75c2" + integrity sha512-jZDa8z76klRqo+TdGDTFJSavwbnWK2ZpqGKNZ+VvweMW516pDUMmQ2koXvxEE4JhzNvTv+radye/bWGBmA6jmg== dependencies: prettier-linter-helpers "^1.0.0" @@ -5243,9 +5243,9 @@ eslint-utils@^1.4.3: eslint-visitor-keys "^1.1.0" eslint-utils@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.0.0.tgz#7be1cc70f27a72a76cd14aa698bcabed6890e1cd" - integrity sha512-0HCPuJv+7Wv1bACm8y5/ECVfYdfsAm9xmVb7saeFlxjPYALefjhbYoCkBjPdPzGH8wWyTpAez82Fh3VKYEZ8OA== + version "2.1.0" + resolved "https://registry.yarnpkg.com/eslint-utils/-/eslint-utils-2.1.0.tgz#d2de5e03424e707dc10c74068ddedae708741b27" + integrity sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg== dependencies: eslint-visitor-keys "^1.1.0" @@ -7242,9 +7242,9 @@ inquirer@6.5.0: through "^2.3.6" inquirer@^7.0.0, inquirer@^7.1.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.1.0.tgz#1298a01859883e17c7264b82870ae1034f92dd29" - integrity sha512-5fJMWEmikSYu0nv/flMc475MhGbB7TSPd/2IpFV4I4rMklboCH2rQjYY5kKiYGHqUF9gvaambupcJFFG9dvReg== + version "7.2.0" + resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.2.0.tgz#63ce99d823090de7eb420e4bb05e6f3449aa389a" + integrity sha512-E0c4rPwr9ByePfNlTIB8z51kK1s2n6jrHuJeEHENl/sbq2G/S1auvibgEwNR4uSyiU+PiYHqSwsgGiXjG8p5ZQ== dependencies: ansi-escapes "^4.2.1" chalk "^3.0.0" @@ -7401,7 +7401,7 @@ is-buffer@^2.0.0, is-buffer@~2.0.3: resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-2.0.4.tgz#3e572f23c8411a5cfd9557c849e3665e0b290623" integrity sha512-Kq1rokWXOPXWuaMAqZiJW4XxsmD9zGx9q4aePabbn3qCRGedtH7Cm+zV8WETitMfu1wdh+Rvd6w5egwSngUX2A== -is-callable@^1.1.4, is-callable@^1.1.5: +is-callable@^1.1.4, is-callable@^1.2.0: version "1.2.0" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.0.tgz#83336560b54a38e35e3a2df7afd0454d691468bb" integrity sha512-pyVD9AaGLxtg6srb2Ng6ynWJqkHU9bEM087AKck0w8QwDarTfNcpIYoU8x8Hv2Icm8u6kFJM18Dag8lyqGkviw== @@ -7660,7 +7660,7 @@ is-redirect@^1.0.0: resolved "https://registry.yarnpkg.com/is-redirect/-/is-redirect-1.0.0.tgz#1d03dded53bd8db0f30c26e4f95d36fc7c87dc24" integrity sha1-HQPd7VO9jbDzDCbk+V02/HyH3CQ= -is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.0.5: +is-regex@^1.0.3, is-regex@^1.0.4, is-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.0.tgz#ece38e389e490df0dc21caea2bd596f987f767ff" integrity sha512-iI97M8KTWID2la5uYXlkbSDQIg4F6o1sYboZKKTDpnDQMLtUL86zxhgDet3Q2SriaYsyGqZ6Mn2SjbRKeLHdqw== @@ -8092,61 +8092,61 @@ jsprim@^1.2.2: verror "1.10.0" jss-plugin-camel-case@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.2.0.tgz#ff60104a8b951a1faec12884bf7fd63a36946e4f" - integrity sha512-N5RF3TV+ejKfnq1I/wfp4uj8IVgJCRw4LZQyxW6XiYr6qX2CJsrVvF/lxYIkEL/C19Lgso5D7zy1uxlRWJWGjQ== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-camel-case/-/jss-plugin-camel-case-10.3.0.tgz#ae4da53b39a6e3ea94b70a20fc41c11f0b87386a" + integrity sha512-tadWRi/SLWqLK3EUZEdDNJL71F3ST93Zrl9JYMjV0QDqKPAl0Liue81q7m/nFUpnSTXczbKDy4wq8rI8o7WFqA== dependencies: "@babel/runtime" "^7.3.1" hyphenate-style-name "^1.0.3" - jss "10.2.0" + jss "^10.3.0" jss-plugin-compose@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-compose/-/jss-plugin-compose-10.2.0.tgz#37f1b1d5b006330f332eaa96fb5746e9ee9b7356" - integrity sha512-ARsHyOI+hJNR+UTDC+MX1+noacBmzDvPJJjxemSjtl5oRI34BATT7JCxWDDsUKIQUddo1CuqQZCvu8PHOsxOLw== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-compose/-/jss-plugin-compose-10.3.0.tgz#b37e28bf5555620ecd2a3668fe7229ed1101c9d2" + integrity sha512-ugJYobeN9mawx7Nv5BrSLhVgU1kJsNpLEfTPKjgMRH7MlHNinrF5O9h4rVTZZvJUZ298JbpPu2zGrwvsjgFwag== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "^10.3.0" tiny-warning "^1.0.2" jss-plugin-default-unit@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.2.0.tgz#d8defa4f04c33d4fa9e047709a28f058bdc7385a" - integrity sha512-uni8vfNiCUffm+C26+bhEVX9bWiI1f+bzdDJ3hsgRD1cLey5qZ8zVR6IVa2OVWTG7mMN2eOdG2GxpSCOEuG54Q== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-default-unit/-/jss-plugin-default-unit-10.3.0.tgz#cd74cf5088542620a82591f76c62c6b43a7e50a6" + integrity sha512-tT5KkIXAsZOSS9WDSe8m8lEHIjoEOj4Pr0WrG0WZZsMXZ1mVLFCSsD2jdWarQWDaRNyMj/I4d7czRRObhOxSuw== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "^10.3.0" jss-plugin-global@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.2.0.tgz#fda990bf9880c394eeb06969b3809a88ad5d0aa0" - integrity sha512-l2Y1sRXnhMgw7Hq0iH8loWaokIdmXSCD6BE9uporzt48K/cEAkiy1Qx7oeuBE5wHahlOeIASZRGQlm09u5ckrA== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-global/-/jss-plugin-global-10.3.0.tgz#6b883e74900bb71f65ac2b19bea78f7d1e85af3f" + integrity sha512-etYTG/y3qIR/vxZnKY+J3wXwObyBDNhBiB3l/EW9/pE3WHE//BZdK8LFvQcrCO48sZW1Z6paHo6klxUPP7WbzA== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "^10.3.0" jss-plugin-isolate@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-isolate/-/jss-plugin-isolate-10.2.0.tgz#2a0fff263b041ac4b259ac182a8aad86f73c9e27" - integrity sha512-sqYVwIsm1VAQOBUwJuc63pqtqku1LXo0yUnx6/9djfUcY2/zwCDML1ftoVa9juhJKjkMDdtjrEoZVY60c2rUKA== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-isolate/-/jss-plugin-isolate-10.3.0.tgz#835ba1e3f3df35a04d6b366d63ba051b8088d021" + integrity sha512-d+bPtBngcxZG+ZfSbLlH0epKNfv6ReRu4VggRrqyw9uoxFgRwKK1PQxC21uk8OykLYa5T+gGnxhYK5s99HVEsw== dependencies: "@babel/runtime" "^7.3.1" css-initials "^0.3.1" - jss "10.2.0" + jss "^10.3.0" jss-plugin-nested@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.2.0.tgz#834cbd1c22c3a87287022c4edc6566db021cc9fc" - integrity sha512-4pO6fiWMbtEp8eJlBUaS1vg1bFjCBZsN1Kl0mVqX5jdQJ/7hvKWsX2pIKGFIu9eOcyr30Nacy6NxGiAlYJjbFA== + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss-plugin-nested/-/jss-plugin-nested-10.3.0.tgz#ae8aceac95e09c3d40c991ea32403fb647d9e0a8" + integrity sha512-qWiEkoXNEkkZ+FZrWmUGpf+zBsnEOmKXhkjNX85/ZfWhH9dfGxUCKuJFuOWFM+rjQfxV4csfesq4hY0jk8Qt0w== dependencies: "@babel/runtime" "^7.3.1" - jss "10.2.0" + jss "^10.3.0" tiny-warning "^1.0.2" -jss@10.2.0, jss@^10.0.0: - version "10.2.0" - resolved "https://registry.yarnpkg.com/jss/-/jss-10.2.0.tgz#5f0b18dc506172ca0306f49d9222ee333800cf34" - integrity sha512-WyG2Jm8nEbYHIVx0UIitgS7R1SXwWpQ1p+SHeI2HNrNR/DSEBXR8l0XYqNdVOCvKnFDPwVWVW7EFlhPh0tYA2w== +jss@^10.0.0, jss@^10.3.0: + version "10.3.0" + resolved "https://registry.yarnpkg.com/jss/-/jss-10.3.0.tgz#2cf7be265f72b59c1764d816fdabff1c5dd18326" + integrity sha512-B5sTRW9B6uHaUVzSo9YiMEOEp3UX8lWevU0Fsv+xtRnsShmgCfIYX44bTH8bPJe6LQKqEXku3ulKuHLbxBS97Q== dependencies: "@babel/runtime" "^7.3.1" csstype "^2.6.5" @@ -9639,7 +9639,7 @@ object.assign@4.1.0, object.assign@^4.1.0: has-symbols "^1.0.0" object-keys "^1.0.11" -object.entries@^1.1.1: +object.entries@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/object.entries/-/object.entries-1.1.2.tgz#bc73f00acb6b6bb16c203434b10f9a7e797d3add" integrity sha512-BQdB9qKmb/HyNdMNWVr7O3+z5MUIx3aiegEIJqjMBbBf0YT9RRxTJSim4mzFqtyr7PDAHigq0N9dO0m0tRakQA== @@ -10676,7 +10676,7 @@ postcss-value-parser@^3.0.0, postcss-value-parser@^3.3.0, postcss-value-parser@^ resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-3.3.1.tgz#9ff822547e2893213cf1c30efa51ac5fd1ba8281" integrity sha512-pISE66AbVkp4fDQ7VHBwRNXzAAKJjw4Vw7nWI/+Q3vuly7SNfgYXvm6i5IgFylHGK5sP/xHAbB7N49OS4gWNyQ== -postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.0.3, postcss-value-parser@^4.1.0: +postcss-value-parser@^4.0.0, postcss-value-parser@^4.0.2, postcss-value-parser@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/postcss-value-parser/-/postcss-value-parser-4.1.0.tgz#443f6a20ced6481a2bda4fa8532a6e55d789a2cb" integrity sha512-97DXOFbQJhk71ne5/Mt6cOu6yxsSfM0QGQyl0L25Gca4yGWEGJaig7l7gbCX623VqTBNGLRLaVUCnNkcedlRSQ== @@ -10691,7 +10691,7 @@ postcss@^5.2.17: source-map "^0.5.6" supports-color "^3.2.3" -postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.5, postcss@^7.0.6: +postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.16, postcss@^7.0.27, postcss@^7.0.30, postcss@^7.0.32, postcss@^7.0.5, postcss@^7.0.6: version "7.0.32" resolved "https://registry.yarnpkg.com/postcss/-/postcss-7.0.32.tgz#4310d6ee347053da3433db2be492883d62cec59d" integrity sha512-03eXong5NLnNCD05xscnGKGDZ98CyzoqPSMjOe6SuoQY7Z2hIj0Ld1g/O/UQRuOle2aRtiIRDg9tDcTGAkLfKw== @@ -10997,13 +10997,20 @@ prosemirror-tables@1.0.0: prosemirror-transform "^1.2.1" prosemirror-view "^1.13.3" -prosemirror-transform@1.2.5, prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1: +prosemirror-transform@1.2.5: version "1.2.5" resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.2.5.tgz#7a3e2c61fcdbaf1d0844a2a3bc34fc3524e9809c" integrity sha512-eqeIaxWtUfOnpA1ERrXCuSIMzqIJtL9Qrs5uJMCjY5RMSaH5o4pc390SAjn/IDPeIlw6auh0hCCXs3wRvGnQug== dependencies: prosemirror-model "^1.0.0" +prosemirror-transform@^1.0.0, prosemirror-transform@^1.1.0, prosemirror-transform@^1.2.1: + version "1.2.6" + resolved "https://registry.yarnpkg.com/prosemirror-transform/-/prosemirror-transform-1.2.6.tgz#b3ad86e976c49f7dd541cc39e0d7215bcfe7b596" + integrity sha512-DyV6cRip8//GIHTrqBe2B7I8VjPFQZYuBuB4clpguq1SrS9lLponoBt/0XRWxETkCVsxYSvwE76X0zo6AZhwaw== + dependencies: + prosemirror-model "^1.0.0" + prosemirror-utils@0.9.6: version "0.9.6" resolved "https://registry.yarnpkg.com/prosemirror-utils/-/prosemirror-utils-0.9.6.tgz#3d97bd85897e3b535555867dc95a51399116a973" @@ -12246,7 +12253,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6: +schema-utils@^2.0.0, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0: version "2.7.0" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.0.tgz#17151f76d8eae67fbbf77960c33c676ad9f4efc7" integrity sha512-0ilKFI6QQF5nxDZLFn2dMjvc4hjg/Wkg7rHd3jK6/A4a1Hl9VFdQWvgB1UMGoU94pad1P/8N7fMcEnLnSiju8A== @@ -12874,7 +12881,7 @@ string-width@^4.1.0, string-width@^4.2.0: is-fullwidth-code-point "^3.0.0" strip-ansi "^6.0.0" -string.prototype.trimend@^1.0.0: +string.prototype.trimend@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.1.tgz#85812a6b847ac002270f5808146064c995fb6913" integrity sha512-LRPxFUaTtpqYsTeNKaFOw3R4bxIzWOnbQ837QfBylo8jIxtcbK/A/sMV7Q+OAV/vWo+7s25pOE10KYSjaSO06g== @@ -12882,25 +12889,7 @@ string.prototype.trimend@^1.0.0: define-properties "^1.1.3" es-abstract "^1.17.5" -string.prototype.trimleft@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimleft/-/string.prototype.trimleft-2.1.2.tgz#4408aa2e5d6ddd0c9a80739b087fbc067c03b3cc" - integrity sha512-gCA0tza1JBvqr3bfAIFJGqfdRTyPae82+KTnm3coDXkZN9wnuW3HjGgN386D7hfv5CHQYCI022/rJPVlqXyHSw== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimstart "^1.0.0" - -string.prototype.trimright@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/string.prototype.trimright/-/string.prototype.trimright-2.1.2.tgz#c76f1cef30f21bbad8afeb8db1511496cfb0f2a3" - integrity sha512-ZNRQ7sY3KroTaYjRS6EbNiiHrOkjihL9aQE/8gfQ4DtAC/aEBRHFJa44OmoWxGGqXuJlfKkZW4WcXErGr+9ZFg== - dependencies: - define-properties "^1.1.3" - es-abstract "^1.17.5" - string.prototype.trimend "^1.0.0" - -string.prototype.trimstart@^1.0.0: +string.prototype.trimstart@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.1.tgz#14af6d9f34b053f7cfc89b72f8f2ee14b9039a54" integrity sha512-XxZn+QpvrBI1FOcg6dIpxUPgWCPuNXvMD72aaRaUQv1eD4e/Qy8i/hFTe0BUmD60p/QA6bh1avmuPTfNjqVWRw== @@ -14244,7 +14233,7 @@ vue-apollo@^3.0.3: serialize-javascript "^2.1.0" throttle-debounce "^2.1.0" -vue-class-component@^7.1.0, vue-class-component@^7.2.3: +vue-class-component@^7.2.3: version "7.2.3" resolved "https://registry.yarnpkg.com/vue-class-component/-/vue-class-component-7.2.3.tgz#a5b1abd53513a72ad51098752e2dedd499807cca" integrity sha512-oEqYpXKaFN+TaXU+mRLEx8dX0ah85aAJEe61mpdoUrq0Bhe/6sWhyZX1JjMQLhVsHAkncyhedhmCdDVSasUtDw== @@ -14348,18 +14337,16 @@ vue-loader@^15.9.2: vue-style-loader "^4.1.0" vue-meta@^2.3.1: - version "2.3.4" - resolved "https://registry.yarnpkg.com/vue-meta/-/vue-meta-2.3.4.tgz#fe28af0721e9bc4003422bd4b401c0b628512d12" - integrity sha512-Mz/5ykeWlhyTDVSTFLBM5tmVU/C+fX6rmVAkLSxbYegJUhUZh3N4D0b7nC0/knG1esK2l6r8iW/N0KeU+38bEQ== + version "2.4.0" + resolved "https://registry.yarnpkg.com/vue-meta/-/vue-meta-2.4.0.tgz#a419fb4b4135ce965dab32ec641d1989c2ee4845" + integrity sha512-XEeZUmlVeODclAjCNpWDnjgw+t3WA6gdzs6ENoIAgwO1J1d5p1tezDhtteLUFwcaQaTtayRrsx7GL6oXp/m2Jw== dependencies: deepmerge "^4.2.2" vue-property-decorator@^8.4.1: - version "8.4.2" - resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.4.2.tgz#016e17f259f73bc547e77a50ce282ba18db4ee41" - integrity sha512-IqbARlvgPE2pzKfbecKxsu2yEH0Wv7hfHR6m4eZA3LTnNw9hveAX77vDfLFyTeMISS5N7Kucp/xRSHjcQ6bAfQ== - dependencies: - vue-class-component "^7.1.0" + version "8.5.0" + resolved "https://registry.yarnpkg.com/vue-property-decorator/-/vue-property-decorator-8.5.0.tgz#9af64c5301413f4732640cc0d046879417e64994" + integrity sha512-0RueJN/shPWf5gM8GLUD6bYiXr+q7bu+S1tgr7XwgBSng10H5DLQjVYfJ5XHAOPFo7fBfY1nxljBQ95qryAiWg== vue-resize@^0.4.5: version "0.4.5" @@ -14367,9 +14354,9 @@ vue-resize@^0.4.5: integrity sha512-bhP7MlgJQ8TIkZJXAfDf78uJO+mEI3CaLABLjv0WNzr4CcGRGPIAItyWYnP6LsPA4Oq0WE+suidNs6dgpO4RHg== vue-router@^3.1.6: - version "3.3.2" - resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.3.2.tgz#0099de402edb2fe92f9711053ab5a2156f239cad" - integrity sha512-5sEbcfb7MW8mY8lbUVbF4kgcipGXsagkM/X+pb6n0MhjP+RorWIUTPAPSqgPaiPOxVCXgAItBl8Vwz8vq78faA== + version "3.3.4" + resolved "https://registry.yarnpkg.com/vue-router/-/vue-router-3.3.4.tgz#4e38abc34a11c41b6c3d8244449a2e363ba6250b" + integrity sha512-SdKRBeoXUjaZ9R/8AyxsdTqkOfMcI5tWxPZOUX5Ie1BTL5rPSZ0O++pbiZCeYeythiZIdLEfkDiQPKIaWk5hDg== vue-scrollto@^2.17.1: version "2.18.1" diff --git a/lib/federation/activity_pub/federator.ex b/lib/federation/activity_pub/federator.ex index 2c2b03de7..a419834e8 100644 --- a/lib/federation/activity_pub/federator.ex +++ b/lib/federation/activity_pub/federator.ex @@ -10,7 +10,6 @@ defmodule Mobilizon.Federation.ActivityPub.Federator do use GenServer - alias Mobilizon.Actors alias Mobilizon.Actors.Actor alias Mobilizon.Federation.ActivityPub alias Mobilizon.Federation.ActivityPub.{Activity, Transmogrifier} diff --git a/lib/graphql/resolvers/comment.ex b/lib/graphql/resolvers/comment.ex index cbf75a69f..fa52dca7b 100644 --- a/lib/graphql/resolvers/comment.ex +++ b/lib/graphql/resolvers/comment.ex @@ -73,7 +73,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do ) do with {actor_id, ""} <- Integer.parse(actor_id), {:is_owned, %Actor{} = _organizer_actor} <- User.owns_actor(user, actor_id), - %CommentModel{} = comment <- Conversations.get_comment_with_preload(comment_id) do + %CommentModel{deleted_at: nil} = comment <- + Conversations.get_comment_with_preload(comment_id) do cond do {:comment_can_be_managed, true} == CommentModel.can_be_managed_by(comment, actor_id) -> do_delete_comment(comment) @@ -90,6 +91,9 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do {:error, "You cannot delete this comment"} end else + %CommentModel{deleted_at: deleted_at} when not is_nil(deleted_at) -> + {:error, "Comment is already deleted"} + {:is_owned, nil} -> {:error, "Actor id is not owned by authenticated user"} end diff --git a/lib/graphql/schema/conversations/comment.ex b/lib/graphql/schema/conversations/comment.ex index c1ed619e3..c6f7911ed 100644 --- a/lib/graphql/schema/conversations/comment.ex +++ b/lib/graphql/schema/conversations/comment.ex @@ -6,7 +6,7 @@ defmodule Mobilizon.GraphQL.Schema.Conversations.CommentType do import Absinthe.Resolution.Helpers, only: [dataloader: 1] - alias Mobilizon.{Actors, Events} + alias Mobilizon.{Actors, Conversations} alias Mobilizon.GraphQL.Resolvers.Comment @desc "A comment" @@ -21,13 +21,13 @@ defmodule Mobilizon.GraphQL.Schema.Conversations.CommentType do field(:primaryLanguage, :string) field(:replies, list_of(:comment)) do - resolve(dataloader(Events)) + resolve(dataloader(Conversations)) end field(:total_replies, :integer) - field(:in_reply_to_comment, :comment, resolve: dataloader(Events)) + field(:in_reply_to_comment, :comment, resolve: dataloader(Conversations)) field(:event, :event, resolve: dataloader(Events)) - field(:origin_comment, :comment, resolve: dataloader(Events)) + field(:origin_comment, :comment, resolve: dataloader(Conversations)) field(:threadLanguages, non_null(list_of(:string))) field(:actor, :person, resolve: dataloader(Actors)) field(:inserted_at, :datetime) diff --git a/lib/service/metadata/actor.ex b/lib/service/metadata/actor.ex index 2a9e30356..00b14415e 100644 --- a/lib/service/metadata/actor.ex +++ b/lib/service/metadata/actor.ex @@ -3,7 +3,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Actors.Actor do alias Mobilizon.Actors.Actor alias Mobilizon.Web.MediaProxy - def build_tags(%Actor{} = actor) do + def build_tags(%Actor{} = actor, _locale \\ "en") do tags = [ Tag.tag(:meta, property: "og:title", content: Actor.display_name_and_username(actor)), Tag.tag(:meta, property: "og:url", content: actor.url), diff --git a/lib/service/metadata/comment.ex b/lib/service/metadata/comment.ex index 48009a5a3..fb2df5e57 100644 --- a/lib/service/metadata/comment.ex +++ b/lib/service/metadata/comment.ex @@ -2,7 +2,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Conversations.Comment do alias Phoenix.HTML.Tag alias Mobilizon.Conversations.Comment - def build_tags(%Comment{} = comment) do + def build_tags(%Comment{} = comment, _locale \\ "en") do [ Tag.tag(:meta, property: "og:title", content: comment.actor.preferred_username), Tag.tag(:meta, property: "og:url", content: comment.url), diff --git a/lib/service/metadata/event.ex b/lib/service/metadata/event.ex index 51a8ca60c..ac4943579 100644 --- a/lib/service/metadata/event.ex +++ b/lib/service/metadata/event.ex @@ -4,9 +4,10 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do alias Mobilizon.Events.Event alias Mobilizon.Web.JsonLD.ObjectView alias Mobilizon.Web.MediaProxy + import Mobilizon.Web.Gettext - def build_tags(%Event{} = event) do - event = Map.put(event, :description, process_description(event.description)) + def build_tags(%Event{} = event, locale \\ "en") do + event = Map.put(event, :description, process_description(event.description, locale)) tags = [ Tag.content_tag(:title, event.title <> " - Mobilizon"), @@ -39,7 +40,14 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Events.Event do ] end - defp process_description(description) do + defp process_description(nil, locale), do: process_description("", locale) + + defp process_description("", locale) do + Gettext.put_locale(locale) + gettext("The event organizer didn't add any description.") + end + + defp process_description(description, _locale) do description |> HtmlSanitizeEx.strip_tags() |> String.slice(0..200) diff --git a/lib/service/metadata/metadata.ex b/lib/service/metadata/metadata.ex index c8642cfaf..eb58edb70 100644 --- a/lib/service/metadata/metadata.ex +++ b/lib/service/metadata/metadata.ex @@ -3,5 +3,5 @@ defprotocol Mobilizon.Service.Metadata do Build tags """ - def build_tags(entity) + def build_tags(entity, locale \\ "en") end diff --git a/lib/service/metadata/tombstone.ex b/lib/service/metadata/tombstone.ex index a3b850d98..ddc127259 100644 --- a/lib/service/metadata/tombstone.ex +++ b/lib/service/metadata/tombstone.ex @@ -1,7 +1,7 @@ defimpl Mobilizon.Service.Metadata, for: Mobilizon.Tombstone do alias Mobilizon.Tombstone - def build_tags(%Tombstone{}) do + def build_tags(%Tombstone{}, _locale \\ "en") do [] end end diff --git a/lib/web/views/error_view.ex b/lib/web/views/error_view.ex index 2eadfa4e0..d52d16fe3 100644 --- a/lib/web/views/error_view.ex +++ b/lib/web/views/error_view.ex @@ -6,9 +6,9 @@ defmodule Mobilizon.Web.ErrorView do alias Mobilizon.Service.Metadata.Instance alias Mobilizon.Web.PageView - def render("404.html", %{conn: conn}) do + def render("404.html", _assigns) do tags = Instance.build_tags() - PageView.inject_tags(conn, tags) + PageView.inject_tags(tags) end def render("404.json", _assigns) do diff --git a/lib/web/views/page_view.ex b/lib/web/views/page_view.ex index 4dd2b36dc..7bbd75f45 100644 --- a/lib/web/views/page_view.ex +++ b/lib/web/views/page_view.ex @@ -50,20 +50,19 @@ defmodule Mobilizon.Web.PageView do def render(page, %{object: object, conn: conn} = _assigns) when page in ["actor.html", "event.html", "comment.html"] do - tags = object |> Metadata.build_tags() - inject_tags(conn, tags) + locale = get_locale(conn) + tags = object |> Metadata.build_tags(locale) + inject_tags(tags, locale) end def render("index.html", %{conn: conn}) do tags = Instance.build_tags() - inject_tags(conn, tags) + inject_tags(tags, get_locale(conn)) end - @spec inject_tags(Conn.t(), List.t()) :: {:safe, String.t()} - def inject_tags(conn, tags) do + @spec inject_tags(List.t(), String.t()) :: {:safe, String.t()} + def inject_tags(tags, locale \\ "en") do with {:ok, index_content} <- File.read(index_file_path()) do - locale = get_locale(conn) - do_replacements(index_content, MetadataUtils.stringify_tags(tags), locale) end end diff --git a/mix.lock b/mix.lock index ed05cf772..b4f36b52b 100644 --- a/mix.lock +++ b/mix.lock @@ -24,7 +24,7 @@ "decimal": {:hex, :decimal, "1.8.1", "a4ef3f5f3428bdbc0d35374029ffcf4ede8533536fa79896dd450168d9acdf3c", [:mix], [], "hexpm", "3cb154b00225ac687f6cbd4acc4b7960027c757a5152b369923ead9ddbca7aec"}, "dialyxir": {:hex, :dialyxir, "1.0.0", "6a1fa629f7881a9f5aaf3a78f094b2a51a0357c843871b8bc98824e7342d00a5", [:mix], [{:erlex, ">= 0.2.6", [hex: :erlex, repo: "hexpm", optional: false]}], "hexpm", "aeb06588145fac14ca08d8061a142d52753dbc2cf7f0d00fc1013f53f8654654"}, "earmark": {:hex, :earmark, "1.4.5", "62ffd3bd7722fb7a7b1ecd2419ea0b458c356e7168c1f5d65caf09b4fbdd13c8", [:mix], [], "hexpm", "b7d0e6263d83dc27141a523467799a685965bf8b13b6743413f19a7079843f4f"}, - "ecto": {:hex, :ecto, "3.4.4", "a2c881e80dc756d648197ae0d936216c0308370332c5e77a2325a10293eef845", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cc4bd3ad62abc3b21fb629f0f7a3dab23a192fca837d257dd08449fba7373561"}, + "ecto": {:hex, :ecto, "3.4.5", "2bcd262f57b2c888b0bd7f7a28c8a48aa11dc1a2c6a858e45dd8f8426d504265", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8c6d1d4d524559e9b7a062f0498e2c206122552d63eacff0a6567ffe7a8e8691"}, "ecto_autoslug_field": {:hex, :ecto_autoslug_field, "2.0.1", "2177c1c253f6dd3efd4b56d1cb76104d0a6ef044c6b9a7a0ad6d32665c4111e5", [:mix], [{:ecto, ">= 2.1.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:slugger, ">= 0.2.0", [hex: :slugger, repo: "hexpm", optional: false]}], "hexpm", "a3cc73211f2e75b89a03332183812ebe1ac08be2e25a1df5aa3d1422f92c45c3"}, "ecto_enum": {:hex, :ecto_enum, "1.4.0", "d14b00e04b974afc69c251632d1e49594d899067ee2b376277efd8233027aec8", [:mix], [{:ecto, ">= 3.0.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:ecto_sql, "> 3.0.0", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:mariaex, ">= 0.0.0", [hex: :mariaex, repo: "hexpm", optional: true]}, {:postgrex, ">= 0.0.0", [hex: :postgrex, repo: "hexpm", optional: true]}], "hexpm", "8fb55c087181c2b15eee406519dc22578fa60dd82c088be376d0010172764ee4"}, "ecto_sql": {:hex, :ecto_sql, "3.4.4", "d28bac2d420f708993baed522054870086fd45016a9d09bb2cd521b9c48d32ea", [:mix], [{:db_connection, "~> 2.2", [hex: :db_connection, repo: "hexpm", optional: false]}, {:ecto, "~> 3.4.3", [hex: :ecto, repo: "hexpm", optional: false]}, {:myxql, "~> 0.3.0 or ~> 0.4.0", [hex: :myxql, repo: "hexpm", optional: true]}, {:postgrex, "~> 0.15.0", [hex: :postgrex, repo: "hexpm", optional: true]}, {:tds, "~> 2.1.0", [hex: :tds, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "edb49af715dd72f213b66adfd0f668a43c17ed510b5d9ac7528569b23af57fe8"}, @@ -35,8 +35,8 @@ "ex_cldr": {:hex, :ex_cldr, "2.16.1", "905b03c38b5fb51668a347f2e6b586bcb2c0816cd98f7d913104872c43cbc61f", [:mix], [{:castore, "~> 0.1", [hex: :castore, repo: "hexpm", optional: true]}, {:certifi, "~> 2.5", [hex: :certifi, repo: "hexpm", optional: true]}, {:cldr_utils, "~> 2.9", [hex: :cldr_utils, repo: "hexpm", optional: false]}, {:decimal, "~> 1.6", [hex: :decimal, repo: "hexpm", optional: false]}, {:gettext, "~> 0.13", [hex: :gettext, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:plug, "~> 1.9", [hex: :plug, repo: "hexpm", optional: true]}, {:telemetry, "~> 0.4.0", [hex: :telemetry, repo: "hexpm", optional: true]}], "hexpm", "006e500769982e57e6f3e32cbc4664345f78b014bb5ff48ddc394d67c86c1a8d"}, "ex_cldr_calendars": {:hex, :ex_cldr_calendars, "1.9.0", "ace1c57ba3850753c9ac6ddb89dc0c9a9e5e1c57ecad587e21c8925ad30a3838", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:earmark, "~> 1.0", [hex: :earmark, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.13", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:ex_cldr_units, "~> 3.0", [hex: :ex_cldr_units, repo: "hexpm", optional: true]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}], "hexpm", "a4b07773e2a326474f44a6bc51fffbec634859a1bad5cc6e6eb55eba45115541"}, "ex_cldr_currencies": {:hex, :ex_cldr_currencies, "2.5.0", "e369ae3c1cd5cd20aa20988b153fd2902b4ab08aec63ca8757d7104bdb79f867", [:mix], [{:ex_cldr, "~> 2.14", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "ba16b1df60bcec52c986481bbdfa7cfaec899b610f869d2b3c5a9a8149f67668"}, - "ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.4.0", "a2cdfdda820330d5c3899d4cc52adfd646d58aa9c47bcfb4702228632f7f9422", [:mix], [{:ex_cldr_calendars, "~> 1.8", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.13", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "e844103d90a0e1e3341462a3758bcb7c036dae0ce55f9d70a132c7ae3936736c"}, - "ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.14.0", "e250fe90922fbf9ce9dde9e7bcd0ccf8be5d012e4697c57a40d8697794da6d4a", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.15", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, "~> 2.5", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "0ac7d9a66194266f61b80daef5514750cdb3e389a064627b12ac7530502166f7"}, + "ex_cldr_dates_times": {:hex, :ex_cldr_dates_times, "2.5.0", "910b22d3daef3725300606bcda4eba814055ad73a9c8247240547178023ce188", [:mix], [{:calendar_interval, "~> 0.2", [hex: :calendar_interval, repo: "hexpm", optional: true]}, {:ex_cldr_calendars, "~> 1.8", [hex: :ex_cldr_calendars, repo: "hexpm", optional: false]}, {:ex_cldr_numbers, "~> 2.15", [hex: :ex_cldr_numbers, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "1ffce0b07949b507b2630ace55bd256779ed9ede8a2b88b7fe422f0ac8b5ea69"}, + "ex_cldr_numbers": {:hex, :ex_cldr_numbers, "2.15.0", "207843c6ddae802a2b5fd43eb95c4b65eae8a0a876ce23ae4413eb098b222977", [:mix], [{:decimal, "~> 1.6 or ~> 2.0", [hex: :decimal, repo: "hexpm", optional: false]}, {:ex_cldr, "~> 2.15", [hex: :ex_cldr, repo: "hexpm", optional: false]}, {:ex_cldr_currencies, "~> 2.5", [hex: :ex_cldr_currencies, repo: "hexpm", optional: false]}, {:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}], "hexpm", "3c6c220e03590f08e2f3cb4f3e0c2e1a78fe56a12229331edb952cbdc67935e1"}, "ex_crypto": {:hex, :ex_crypto, "0.10.0", "af600a89b784b36613a989da6e998c1b200ff1214c3cfbaf8deca4aa2f0a1739", [:mix], [{:poison, ">= 2.0.0", [hex: :poison, repo: "hexpm", optional: false]}], "hexpm", "ccc7472cfe8a0f4565f97dce7e9280119bf15a5ea51c6535e5b65f00660cde1c"}, "ex_doc": {:hex, :ex_doc, "0.22.1", "9bb6d51508778193a4ea90fa16eac47f8b67934f33f8271d5e1edec2dc0eee4c", [:mix], [{:earmark, "~> 1.4.0", [hex: :earmark, repo: "hexpm", optional: false]}, {:makeup_elixir, "~> 0.14", [hex: :makeup_elixir, repo: "hexpm", optional: false]}], "hexpm", "d957de1b75cb9f78d3ee17820733dc4460114d8b1e11f7ee4fd6546e69b1db60"}, "ex_ical": {:hex, :ex_ical, "0.2.0", "4b928b554614704016cc0c9ee226eb854da9327a1cc460457621ceacb1ac29a6", [:mix], [{:timex, "~> 3.1", [hex: :timex, repo: "hexpm", optional: false]}], "hexpm", "db76473b2ae0259e6633c6c479a5a4d8603f09497f55c88f9ef4d53d2b75befb"}, @@ -68,7 +68,7 @@ "html_sanitize_ex": {:hex, :html_sanitize_ex, "1.4.0", "0310d27d7bafb662f30bff22ec732a72414799c83eaf44239781fd23b96216c0", [:mix], [{:mochiweb, "~> 2.15", [hex: :mochiweb, repo: "hexpm", optional: false]}], "hexpm", "c5d79626be0b6e50c19ecdfb783ee26e85bd3a77436b488379ce6dc104ec4593"}, "http_sign": {:hex, :http_sign, "0.1.1", "b16edb83aa282892f3271f9a048c155e772bf36e15700ab93901484c55f8dd10", [:mix], [{:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "2d4b1c2579d85534035f12c9e1260abdf6d03a9ad4f515b2ee53b50e68c8b787"}, "http_signatures": {:git, "https://git.pleroma.social/pleroma/http_signatures.git", "293d77bb6f4a67ac8bde1428735c3b42f22cbb30", [ref: "293d77bb6f4a67ac8bde1428735c3b42f22cbb30"]}, - "httpoison": {:hex, :httpoison, "1.6.2", "ace7c8d3a361cebccbed19c283c349b3d26991eff73a1eaaa8abae2e3c8089b6", [:mix], [{:hackney, "~> 1.15 and >= 1.15.2", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "aa2c74bd271af34239a3948779612f87df2422c2fdcfdbcec28d9c105f0773fe"}, + "httpoison": {:hex, :httpoison, "1.7.0", "abba7d086233c2d8574726227b6c2c4f6e53c4deae7fe5f6de531162ce9929a0", [:mix], [{:hackney, "~> 1.16", [hex: :hackney, repo: "hexpm", optional: false]}], "hexpm", "975cc87c845a103d3d1ea1ccfd68a2700c211a434d8428b10c323dc95dc5b980"}, "icalendar": {:git, "https://github.com/tcitworld/icalendar.git", "bd08e872c125f70a87c3ac7d87ea2f22a5577059", []}, "idna": {:hex, :idna, "6.0.1", "1d038fb2e7668ce41fbf681d2c45902e52b3cb9e9c77b55334353b222c2ee50c", [:rebar3], [{:unicode_util_compat, "0.5.0", [hex: :unicode_util_compat, repo: "hexpm", optional: false]}], "hexpm", "a02c8a1c4fd601215bb0b0324c8a6986749f807ce35f25449ec9e69758708122"}, "inet_cidr": {:hex, :inet_cidr, "1.0.4", "a05744ab7c221ca8e395c926c3919a821eb512e8f36547c062f62c4ca0cf3d6e", [:mix], [], "hexpm", "64a2d30189704ae41ca7dbdd587f5291db5d1dda1414e0774c29ffc81088c1bc"}, @@ -88,17 +88,17 @@ "mmdb2_decoder": {:hex, :mmdb2_decoder, "3.0.0", "54828676a36e75e9a25bc9a0bb0598d4c7fcc767bf0b40674850b22e05b7b6cc", [:mix], [], "hexpm", "359dc9242915538d1dceb9f6d96c72201dca76ce62e49d22e2ed1e86f20bea8e"}, "mochiweb": {:hex, :mochiweb, "2.20.1", "e4dbd0ed716f076366ecf62ada5755a844e1d95c781e8c77df1d4114be868cdf", [:rebar3], [], "hexpm", "d1aeee7870470d2fa9eae0b3d5ab6c33801aa2d82b10e9dade885c5c921b36aa"}, "mock": {:hex, :mock, "0.3.4", "c5862eb3b8c64237f45f586cf00c9d892ba07bb48305a43319d428ce3c2897dd", [:mix], [{:meck, "~> 0.8.13", [hex: :meck, repo: "hexpm", optional: false]}], "hexpm", "e6d886252f1a41f4ba06ecf2b4c8d38760b34b1c08a11c28f7397b2e03995964"}, - "mogrify": {:hex, :mogrify, "0.7.3", "1494ee739f6e90de158dec4d4edee2d854d2f2d06a522e943f996ae176bca53d", [:mix], [], "hexpm", "b3e90a87171c23efa6b5910d735dd44f3fda15ba07a57cdb89cdb8ecaf83988d"}, + "mogrify": {:hex, :mogrify, "0.7.4", "9b2496dde44b1ce12676f85d7dc531900939e6367bc537c7243a1b089435b32d", [:mix], [], "hexpm", "50d79e337fba6bc95bfbef918058c90f50b17eed9537771e61d4619488f099c3"}, "nimble_parsec": {:hex, :nimble_parsec, "0.6.0", "32111b3bf39137144abd7ba1cce0914533b2d16ef35e8abc5ec8be6122944263", [:mix], [], "hexpm", "27eac315a94909d4dc68bc07a4a83e06c8379237c5ea528a9acff4ca1c873c52"}, "oban": {:hex, :oban, "1.2.0", "7cca94d341be43d220571e28f69131c4afc21095b25257397f50973d3fc59b07", [:mix], [{:ecto_sql, "~> 3.1", [hex: :ecto_sql, repo: "hexpm", optional: false]}, {:jason, "~> 1.1", [hex: :jason, repo: "hexpm", optional: false]}, {:postgrex, "~> 0.14", [hex: :postgrex, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "ba5f8b3f7d76967b3e23cf8014f6a13e4ccb33431e4808f036709a7f822362ee"}, "parse_trans": {:hex, :parse_trans, "3.3.0", "09765507a3c7590a784615cfd421d101aec25098d50b89d7aa1d66646bc571c1", [:rebar3], [], "hexpm", "17ef63abde837ad30680ea7f857dd9e7ced9476cdd7b0394432af4bfc241b960"}, "phoenix": {:hex, :phoenix, "1.5.3", "bfe0404e48ea03dfe17f141eff34e1e058a23f15f109885bbdcf62be303b49ff", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: true]}, {:phoenix_html, "~> 2.13", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:phoenix_pubsub, "~> 2.0", [hex: :phoenix_pubsub, repo: "hexpm", optional: false]}, {:plug, "~> 1.10", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 1.0 or ~> 2.2", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:plug_crypto, "~> 1.1.2 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "8e16febeb9640d8b33895a691a56481464b82836d338bb3a23125cd7b6157c25"}, "phoenix_ecto": {:hex, :phoenix_ecto, "4.1.0", "a044d0756d0464c5a541b4a0bf4bcaf89bffcaf92468862408290682c73ae50d", [:mix], [{:ecto, "~> 3.0", [hex: :ecto, repo: "hexpm", optional: false]}, {:phoenix_html, "~> 2.9", [hex: :phoenix_html, repo: "hexpm", optional: true]}, {:plug, "~> 1.0", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "c5e666a341ff104d0399d8f0e4ff094559b2fde13a5985d4cb5023b2c2ac558b"}, "phoenix_html": {:hex, :phoenix_html, "2.14.2", "b8a3899a72050f3f48a36430da507dd99caf0ac2d06c77529b1646964f3d563e", [:mix], [{:plug, "~> 1.5", [hex: :plug, repo: "hexpm", optional: false]}], "hexpm", "58061c8dfd25da5df1ea0ca47c972f161beb6c875cd293917045b92ffe1bf617"}, - "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.2.2", "38d94c30df5e2ef11000697a4fbe2b38d0fbf79239d492ff1be87bbc33bc3a84", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "a3dec3d28ddb5476c96a7c8a38ea8437923408bc88da43e5c45d97037b396280"}, + "phoenix_live_reload": {:hex, :phoenix_live_reload, "1.2.4", "940c0344b1d66a2e46eef02af3a70e0c5bb45a4db0bf47917add271b76cd3914", [:mix], [{:file_system, "~> 0.2.1 or ~> 0.3", [hex: :file_system, repo: "hexpm", optional: false]}, {:phoenix, "~> 1.4", [hex: :phoenix, repo: "hexpm", optional: false]}], "hexpm", "38f9308357dea4cc77f247e216da99fcb0224e05ada1469167520bed4cb8cccd"}, "phoenix_pubsub": {:hex, :phoenix_pubsub, "2.0.0", "a1ae76717bb168cdeb10ec9d92d1480fec99e3080f011402c0a2d68d47395ffb", [:mix], [], "hexpm", "c52d948c4f261577b9c6fa804be91884b381a7f8f18450c5045975435350f771"}, - "plug": {:hex, :plug, "1.10.2", "0079345cfdf9e17da3858b83eb46bc54beb91554c587b96438f55c1477af5a86", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "7898d0eb4767efb3b925fd7f9d1870d15e66e9c33b89c58d8d2ad89aa75ab3c1"}, - "plug_cowboy": {:hex, :plug_cowboy, "2.2.2", "7a09aa5d10e79b92d332a288f21cc49406b1b994cbda0fde76160e7f4cc890ea", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "e82364b29311dbad3753d588febd7e5ef05062cd6697d8c231e0e007adab3727"}, + "plug": {:hex, :plug, "1.10.3", "c9cebe917637d8db0e759039cc106adca069874e1a9034fd6e3fdd427fd3c283", [:mix], [{:mime, "~> 1.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "01f9037a2a1de1d633b5a881101e6a444bcabb1d386ca1e00bb273a1f1d9d939"}, + "plug_cowboy": {:hex, :plug_cowboy, "2.3.0", "149a50e05cb73c12aad6506a371cd75750c0b19a32f81866e1a323dda9e0e99d", [:mix], [{:cowboy, "~> 2.7", [hex: :cowboy, repo: "hexpm", optional: false]}, {:plug, "~> 1.7", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "bc595a1870cef13f9c1e03df56d96804db7f702175e4ccacdb8fc75c02a7b97e"}, "plug_crypto": {:hex, :plug_crypto, "1.1.2", "bdd187572cc26dbd95b87136290425f2b580a116d3fb1f564216918c9730d227", [:mix], [], "hexpm", "6b8b608f895b6ffcfad49c37c7883e8df98ae19c6a28113b02aa1e9c5b22d6b5"}, "poison": {:hex, :poison, "4.0.1", "bcb755a16fac91cad79bfe9fc3585bb07b9331e50cfe3420a24bcc2d735709ae", [:mix], [], "hexpm", "ba8836feea4b394bb718a161fc59a288fe0109b5006d6bdf97b6badfcf6f0f25"}, "poolboy": {:hex, :poolboy, "1.5.2", "392b007a1693a64540cead79830443abf5762f5d30cf50bc95cb2c1aaafa006b", [:rebar3], [], "hexpm", "dad79704ce5440f3d5a3681c8590b9dc25d1a561e8f5a9c995281012860901e3"},