💄 Improve shared link modal

This commit is contained in:
Eva 2022-06-16 12:56:22 +02:00 committed by Pablo Alba
parent f132651175
commit 0f04398e61
23 changed files with 453 additions and 521 deletions

View file

@ -229,6 +229,9 @@
{:name "0073-mod-file-media-object-constraints" {:name "0073-mod-file-media-object-constraints"
:fn (mg/resource "app/migrations/sql/0073-mod-file-media-object-constraints.sql")} :fn (mg/resource "app/migrations/sql/0073-mod-file-media-object-constraints.sql")}
{:name "0073-mod-share-link-table"
:fn (mg/resource "app/migrations/sql/0073-mod-share-link-table.sql")}
{:name "0074-mod-file-library-rel-constraints" {:name "0074-mod-file-library-rel-constraints"
:fn (mg/resource "app/migrations/sql/0074-mod-file-library-rel-constraints.sql")} :fn (mg/resource "app/migrations/sql/0074-mod-file-library-rel-constraints.sql")}

View file

@ -0,0 +1,4 @@
ALTER TABLE share_link
ADD COLUMN who_comment text NOT NULL DEFAULT('team'),
ADD COLUMN who_inspect text NOT NULL DEFAULT('team'),
DROP COLUMN flags;

View file

@ -19,7 +19,8 @@
(s/def ::id ::us/uuid) (s/def ::id ::us/uuid)
(s/def ::profile-id ::us/uuid) (s/def ::profile-id ::us/uuid)
(s/def ::file-id ::us/uuid) (s/def ::file-id ::us/uuid)
(s/def ::flags (s/every ::us/string :kind set?)) (s/def ::who-comment ::us/string)
(s/def ::who-inspect ::us/string)
(s/def ::pages (s/every ::us/uuid :kind set?)) (s/def ::pages (s/every ::us/uuid :kind set?))
;; --- Mutation: Create Share Link ;; --- Mutation: Create Share Link
@ -27,14 +28,13 @@
(declare create-share-link) (declare create-share-link)
(s/def ::create-share-link (s/def ::create-share-link
(s/keys :req-un [::profile-id ::file-id ::flags] (s/keys :req-un [::profile-id ::file-id ::who-comment ::who-inspect ::pages]))
:opt-un [::pages]))
(sv/defmethod ::create-share-link (sv/defmethod ::create-share-link
"Creates a share-link object. "Creates a share-link object.
Share links are resources that allows external users access to Share links are resources that allows external users access to specific
specific files with specific permissions (flags)." pages of a file with specific permissions (who-comment and who-inspect)."
[{:keys [pool] :as cfg} {:keys [profile-id file-id] :as params}] [{:keys [pool] :as cfg} {:keys [profile-id file-id] :as params}]
(db/with-atomic [conn pool] (db/with-atomic [conn pool]
@ -42,19 +42,17 @@
(create-share-link conn params))) (create-share-link conn params)))
(defn create-share-link (defn create-share-link
[conn {:keys [profile-id file-id pages flags]}] [conn {:keys [profile-id file-id pages who-comment who-inspect]}]
(let [pages (db/create-array conn "uuid" pages) (let [pages (db/create-array conn "uuid" pages)
flags (->> (map name flags)
(db/create-array conn "text"))
slink (db/insert! conn :share-link slink (db/insert! conn :share-link
{:id (uuid/next) {:id (uuid/next)
:file-id file-id :file-id file-id
:flags flags :who-comment who-comment
:who-inspect who-inspect
:pages pages :pages pages
:owner-id profile-id})] :owner-id profile-id})]
(-> slink (-> slink
(update :pages db/decode-pgarray #{}) (update :pages db/decode-pgarray #{}))))
(update :flags db/decode-pgarray #{}))))
;; --- Mutation: Delete Share Link ;; --- Mutation: Delete Share Link

View file

@ -11,7 +11,6 @@
(defn decode-share-link-row (defn decode-share-link-row
[row] [row]
(-> row (-> row
(update :flags db/decode-pgarray #{})
(update :pages db/decode-pgarray #{}))) (update :pages db/decode-pgarray #{})))
(defn retrieve-share-link (defn retrieve-share-link

View file

@ -1,139 +1,240 @@
.share-link-dialog { .share-modal {
width: 475px; display: block;
background-color: $color-white; top: 50px;
left: calc(100vw - 500px);
.modal-footer { .share-link-dialog {
display: flex; width: 480px;
align-items: center; background-color: $color-white;
justify-content: flex-end;
height: unset;
padding: 16px 26px;
.btn-primary, .modal-content {
.btn-secondary, padding: 16px 32px;
.btn-warning { &:first-child {
width: 126px; border-top: 0px;
margin-bottom: 0px; padding: 0;
height: 50px;
&:not(:last-child) {
margin-right: 10px;
}
}
.confirm-dialog {
display: flex;
flex-direction: column;
background-color: unset;
.description {
font-size: $fs14;
margin-bottom: 16px;
}
.actions {
display: flex; display: flex;
justify-content: flex-end; justify-content: center;
} }
}
}
.modal-content {
padding: 26px;
&:first-child {
border-top: 0px;
}
.title {
display: flex;
justify-content: space-between;
h2 {
font-size: $fs18;
color: $color-black;
}
.modal-close-button {
margin-right: 0px;
}
}
.share-link-section {
margin-top: 12px;
label {
font-size: $fs12;
color: $color-black;
}
.hint {
padding-top: 10px;
font-size: $fs14;
color: $color-gray-40;
}
.help-icon {
cursor: pointer;
}
}
.view-mode,
.access-mode {
display: flex;
flex-direction: column;
.title { .title {
color: $color-black; display: flex;
font-weight: 400; justify-content: space-between;
align-items: center;
height: 100%;
margin-left: 32px;
h2 {
font-size: $fs18;
color: $color-black;
}
.modal-close-button {
margin-right: 16px;
}
} }
.items { .share-link-section {
padding-left: 20px; .custom-input {
display: flex;
> .input-checkbox,
> .input-radio {
display: flex; display: flex;
user-select: none; flex-direction: row;
margin-bottom: 15px;
/* input { */ border: 1px solid $color-gray-20;
/* appearance: checkbox; */ input {
/* } */ padding: 0 0 0 15px;
border: none;
label { }
}
.hint-wrapper {
display: flex;
justify-content: space-between;
align-items: center;
.hint {
font-size: $fs12;
color: $color-gray-40;
}
.confirm-dialog {
display: flex; display: flex;
align-items: center; flex-direction: column;
color: $color-black; background-color: unset;
.actions {
display: flex;
justify-content: flex-end;
gap: 16px;
}
.description {
font-size: $fs12;
margin-bottom: 16px;
color: $color-black;
}
.btn-primary,
.btn-secondary,
.btn-warning {
width: 126px;
margin-bottom: 0px;
.hint { &:not(:last-child) {
margin-left: 5px; margin-right: 10px;
}
}
}
}
label {
font-size: $fs12;
color: $color-black;
}
.help-icon {
height: 40px;
width: 40px;
display: flex;
justify-content: center;
align-items: center;
cursor: pointer;
position: relative;
right: 0;
top: 0;
background-color: $color-gray-10;
border-left: 1px solid $color-gray-20;
svg {
fill: $color-gray-30;
}
&:hover {
background-color: $color-primary;
svg {
fill: $color-gray-60;
}
}
}
input {
margin: 0;
}
}
&.ops-section {
.manage-permissions {
display: flex;
color: $color-primary-dark;
font-size: $fs12;
cursor: pointer;
.icon {
svg {
height: 16px;
width: 16px;
fill: $color-primary-dark;
}
}
.title {
margin-left: 8px;
}
}
.view-mode {
min-height: 34px;
.subtitle {
height: 32px;
}
.row {
display: flex;
justify-content: space-between;
align-items: center;
.count-pages {
font-size: $fs12;
color: $color-gray-30; color: $color-gray-30;
} }
} }
.current-tag {
&.disabled { font-size: $fs12;
label { color: $color-gray-30;
color: $color-gray-30; }
label {
color: $color-black;
}
}
.access-mode,
.inspect-mode {
display: grid;
grid-template-columns: auto 1fr;
.items {
display: flex;
justify-content: flex-end;
align-items: center;
}
}
.view-mode,
.access-mode,
.inspect-mode {
margin: 8px 0;
.subtitle {
display: flex;
justify-content: flex-start;
align-items: center;
color: $color-black;
font-size: $fs16;
.icon {
display: flex;
justify-content: center;
align-items: center;
margin-right: 10px;
svg {
height: 16px;
width: 16px;
}
} }
} }
.items {
.input-select {
background-image: url("/images/icons/arrow-down.svg");
margin: 0;
padding-right: 28px;
border: 1px solid $color-gray-10;
max-width: 227px;
text-overflow: ellipsis;
overflow: hidden;
white-space: nowrap;
}
> .input-radio {
display: flex;
user-select: none;
margin-top: 0;
margin-bottom: 0;
label {
display: flex;
align-items: center;
color: $color-black;
max-width: 115px;
&::before {
height: 16px;
width: 16px;
}
.hint {
margin-left: 5px;
color: $color-gray-30;
}
}
&.disabled {
label {
color: $color-gray-30;
}
}
}
}
}
.pages-selection {
border-top: 1px solid $color-gray-10;
border-bottom: 1px solid $color-gray-10;
padding-left: 20px;
max-height: 200px;
overflow-y: scroll;
user-select: none;
label {
color: $color-black;
}
} }
} }
} }
.pages-selection {
padding-left: 20px;
max-height: 200px;
overflow-y: scroll;
user-select: none;
label {
color: $color-black;
}
}
.custom-input {
input {
padding: 0 40px 0 15px;
}
}
} }
} }

View file

@ -84,5 +84,6 @@
[] []
(let [modal (mf/deref modal-ref)] (let [modal (mf/deref modal-ref)]
(when modal (when modal
(.log js/console "modal"(clj->js modal))
[:& modal-wrapper {:data modal [:& modal-wrapper {:data modal
:key (:id modal)}]))) :key (:id modal)}])))

View file

@ -24,53 +24,68 @@
(log/set-level! :warn) (log/set-level! :warn)
(defn prepare-params (defn prepare-params
[{:keys [sections pages pages-mode]}] [{:keys [pages who-comment who-inspect]}]
{:pages pages
:flags (-> #{} {:pages pages
(into (map #(str "section-" %)) sections) :who-comment who-comment
(into (map #(str "pages-" %)) [pages-mode]))}) :who-inspect who-inspect})
(mf/defc share-link-dialog (mf/defc share-link-dialog
{::mf/register modal/components {::mf/register modal/components
::mf/register-as :share-link} ::mf/register-as :share-link}
[{:keys [file page]}] [{:keys [file page]}]
(let [slinks (mf/deref refs/share-links) (let [current-page page
router (mf/deref refs/router) slinks (mf/deref refs/share-links)
route (mf/deref refs/route) router (mf/deref refs/router)
route (mf/deref refs/route)
link (mf/use-state nil) link (mf/use-state nil)
confirm (mf/use-state false) confirm (mf/use-state false)
open-ops (mf/use-state false)
opts (mf/use-state
{:pages-mode "current"
:all-pages false
:pages #{(:id page)}
:who-comment "team"
:who-inspect "team"})
opts (mf/use-state
{:sections #{"viewer"}
:pages-mode "current"
:pages #{(:id page)}})
close close
(fn [event] (fn [event]
(dom/prevent-default event) (dom/prevent-default event)
(st/emit! (modal/hide))) (st/emit! (modal/hide))
(modal/disallow-click-outside!))
select-pages-mode toggle-all
(fn [mode] (fn []
(reset! confirm false) (reset! confirm false)
(swap! opts (swap! opts
(fn [state] (fn [state]
(-> state (if (= true (:all-pages state))
(assoc :pages-mode mode) (-> state
(cond-> (= mode "current") (assoc :pages #{(:id page)})) (assoc :all-pages false)
(cond-> (= mode "all") (assoc :pages (into #{} (get-in file [:data :pages])))))))) (assoc :pages #{(:id page)}))
(-> state
(assoc :all-pages true)
(assoc :pages (into #{} (get-in file [:data :pages]))))))))
mark-checked-page mark-checked-page
(fn [event id] (fn [event id]
(let [target (dom/get-target event) (let [target (dom/get-target event)
checked? (.-checked ^js target)] checked? (.-checked ^js target)
(reset! confirm false) dif-pages? (not= id (first (:pages @opts)))
(swap! opts update :pages no-one-page (< 1 (count (:pages @opts)))
(fn [pages] should-change (or no-one-page dif-pages?)]
(if checked? (when should-change
(conj pages id) (reset! confirm false)
(disj pages id)))))) (swap! opts update :pages
(fn [pages]
(if checked?
(conj pages id)
(disj pages id)))))))
create-link create-link
(fn [_] (fn [_]
@ -83,7 +98,7 @@
(wapi/write-to-clipboard @link) (wapi/write-to-clipboard @link)
(st/emit! (dm/show {:type :info (st/emit! (dm/show {:type :info
:content (tr "common.share-link.link-copied-success") :content (tr "common.share-link.link-copied-success")
:timeout 3000}))) :timeout 1000})))
try-delete-link try-delete-link
(fn [_] (fn [_]
@ -94,17 +109,27 @@
(let [params (prepare-params @opts) (let [params (prepare-params @opts)
slink (d/seek #(= (:flags %) (:flags params)) slinks)] slink (d/seek #(= (:flags %) (:flags params)) slinks)]
(reset! confirm false) (reset! confirm false)
(st/emit! (dc/delete-share-link slink) (st/emit! (dc/delete-share-link slink))))
(dm/show {:type :info
:content (tr "common.share-link.link-deleted-success") manage-open-ops
:timeout 3000})))) (fn [_]
] (swap! open-ops not))
on-who-change
(fn [type event]
(let [target (dom/get-target event)
value (dom/get-value target)
value (keyword value)]
(reset! confirm false)
(if (= type :comment)
(swap! opts assoc :who-comment (d/name value))
(swap! opts assoc :who-inspect (d/name value)))))]
(mf/use-effect (mf/use-effect
(mf/deps file slinks @opts) (mf/deps file slinks @opts)
(fn [] (fn []
(let [{:keys [flags pages] :as params} (prepare-params @opts) (let [{:keys [pages who-comment who-inspect] :as params} (prepare-params @opts)
slink (d/seek #(and (= (:flags %) flags) (= (:pages %) pages)) slinks) slink (d/seek #(and (= (:who-inspect %) who-inspect) (= (:who-comment %) who-comment) (= (:pages %) pages)) slinks)
href (when slink href (when slink
(let [pparams (:path-params route) (let [pparams (:path-params route)
qparams (-> (:query-params route) qparams (-> (:query-params route)
@ -114,123 +139,123 @@
(assoc cf/public-uri :fragment href)))] (assoc cf/public-uri :fragment href)))]
(reset! link (some-> href str))))) (reset! link (some-> href str)))))
[:div.modal-overlay [:div.modal-overlay.share-modal
[:div.modal-container.share-link-dialog [:div.modal-container.share-link-dialog
[:div.modal-content [:div.modal-content.initial
[:div.title [:div.title
[:h2 (tr "common.share-link.title")] [:h2 (tr "common.share-link.title")]
[:div.modal-close-button [:div.modal-close-button
{:on-click close {:on-click close
:title (tr "labels.close")} :title (tr "labels.close")}
i/close]] i/close]]]
[:div.share-link-section
[:label (tr "labels.link")]
[:div.custom-input.with-icon
[:input {:type "text"
:value (or @link "")
:placeholder (tr "common.share-link.placeholder")
:read-only true}]
(when (some? @link)
[:div.help-icon {:title (tr "labels.copy")
:on-click copy-link}
i/copy])]
[:div.hint (tr "common.share-link.permissions-hint")]]]
[:div.modal-content [:div.modal-content
(let [sections (:sections @opts)] [:div.share-link-section
[:div.access-mode (when (and (not @confirm) (some? @link))
[:div.title (tr "common.share-link.permissions-can-access")] [:div.custom-input.with-icon
[:div.items [:input {:type "text"
[:div.input-checkbox.check-primary.disabled :value (or @link "")
[:input.check-primary.input-checkbox {:type "checkbox" :disabled true}] :placeholder (tr "common.share-link.placeholder")
[:label (tr "labels.workspace")]] :read-only true}]
[:div.help-icon {:title (tr "viewer.header.share.copy-link")
:on-click copy-link}
i/copy]])
[:div.hint-wrapper
(when (not @confirm) [:div.hint (tr "common.share-link.permissions-hint")])
(cond
(true? @confirm)
[:div.confirm-dialog
[:div.description (tr "common.share-link.confirm-deletion-link-description")]
[:div.actions
[:input.btn-secondary
{:type "button"
:on-click #(reset! confirm false)
:value (tr "labels.cancel")}]
[:input.btn-warning
{:type "button"
:on-click delete-link
:value (tr "common.share-link.destroy-link")}]]]
[:div.input-checkbox.check-primary (some? @link)
[:input {:type "checkbox"
:default-checked (contains? sections "viewer")}]
[:label (tr "labels.viewer")
[:span.hint "(" (tr "labels.default") ")"]]]
;; [:div.input-checkbox.check-primary
;; [:input.check-primary.input-checkbox {:type "checkbox"}]
;; [:label "Handoff" ]]
]])
(let [mode (:pages-mode @opts)]
[:*
[:div.view-mode
[:div.title (tr "common.share-link.permissions-can-view")]
[:div.items
[:div.input-radio.radio-primary
[:input {:type "radio"
:id "view-all"
:checked (= "all" mode)
:name "pages-mode"
:on-change #(select-pages-mode "all")}]
[:label {:for "view-all"} (tr "common.share-link.view-all-pages")]]
[:div.input-radio.radio-primary
[:input {:type "radio"
:id "view-current"
:name "pages-mode"
:checked (= "current" mode)
:on-change #(select-pages-mode "current")}]
[:label {:for "view-current"} (tr "common.share-link.view-current-page")]]
[:div.input-radio.radio-primary
[:input {:type "radio"
:id "view-selected"
:name "pages-mode"
:checked (= "selected" mode)
:on-change #(select-pages-mode "selected")}]
[:label {:for "view-selected"} (tr "common.share-link.view-selected-pages")]]]]
(when (= "selected" mode)
(let [pages (->> (get-in file [:data :pages])
(map #(get-in file [:data :pages-index %])))
selected (:pages @opts)]
[:ul.pages-selection
(for [page pages]
[:li.input-checkbox.check-primary {:key (str (:id page))}
[:input {:type "checkbox"
:id (str "page-" (:id page))
:on-change #(mark-checked-page % (:id page))
:checked (contains? selected (:id page))}]
[:label {:for (str "page-" (:id page))} (:name page)]])]))])]
[:div.modal-footer
(cond
(true? @confirm)
[:div.confirm-dialog
[:div.description (tr "common.share-link.confirm-deletion-link-description")]
[:div.actions
[:input.btn-secondary [:input.btn-secondary
{:type "button" {:type "button"
:on-click #(reset! confirm false) :class "primary"
:value (tr "labels.cancel")}] :on-click try-delete-link
[:input.btn-warning :value (tr "common.share-link.destroy-link")}]
:else
[:input.btn-primary
{:type "button" {:type "button"
:on-click delete-link :class "primary"
:value (tr "common.share-link.remove-link") :on-click create-link
}]]] :value (tr "common.share-link.get-link")}])]]]
[:div.modal-content.ops-section
[:div.manage-permissions
{:on-click manage-open-ops}
[:span.icon i/picker-hsv]
[:div.title (tr "common.share-link.manage-ops")]]
(when @open-ops
[:*
(let [all-selected? (:all-pages @opts)
pages (->> (get-in file [:data :pages])
(map #(get-in file [:data :pages-index %])))
selected (:pages @opts)]
(some? @link) [:*
[:input.btn-secondary [:div.view-mode
{:type "button" [:div.subtitle
:class "primary" [:span.icon i/play]
:on-click try-delete-link (tr "common.share-link.permissions-pages")]
:value (tr "common.share-link.remove-link")}] [:div.items
(if (= 1 (count pages))
[:div.input-checkbox.check-primary
[:input {:type "checkbox"
:id (str "page-" (:id current-page))
:on-change #(mark-checked-page % (:id current-page))
:checked true}]
[:label {:for (str "page-" (:id current-page))} (:name current-page)]
[:span (str " " (tr "common.share-link.current-tag"))]]
:else [:*
[:input.btn-primary [:div.row
{:type "button" [:div.input-checkbox.check-primary
:class "primary" [:input {:type "checkbox"
:on-click create-link :id "view-all"
:value (tr "common.share-link.get-link")}])] :checked all-selected?
:name "pages-mode"
:on-change toggle-all}]
[:label {:for "view-all"} (tr "common.share-link.view-all")]]
[:span.count-pages (tr "common.share-link.page-shared" (i18n/c (count selected)))]]
]])) [:ul.pages-selection
(for [page pages]
[:li.input-checkbox.check-primary {:key (str (:id page))}
[:input {:type "checkbox"
:id (str "page-" (:id page))
:on-change #(mark-checked-page % (:id page))
:checked (contains? selected (:id page))}]
(if (= (:id current-page) (:id page))
[:*
[:label {:for (str "page-" (:id page))} (:name page)]
[:span.current-tag (str " " (tr "common.share-link.current-tag"))]]
[:label {:for (str "page-" (:id page))} (:name page)])])]])]]])
[:div.access-mode
[:div.subtitle
[:span.icon i/chat]
(tr "common.share-link.permissions-can-comment")]
[:div.items
[:select.input-select {:on-change (partial on-who-change :comment)
:value (:who-comment @opts)}
[:option {:value "team"} (tr "common.share-link.team-members")]
[:option {:value "all"} (tr "common.share-link.all-users")]]]]
[:div.inspect-mode
[:div.subtitle
[:span.icon i/code]
(tr "common.share-link.permissions-can-inspect")]
[:div.items
[:select.input-select {:on-change (partial on-who-change :inspect)
:value (:who-inspect @opts)}
[:option {:value "team"} (tr "common.share-link.team-members")]
[:option {:value "all"} (tr "common.share-link.all-users")]]]]])]]]))

View file

@ -77,7 +77,8 @@
(mf/use-callback (mf/use-callback
(mf/deps page) (mf/deps page)
(fn [] (fn []
(modal/show! :share-link {:page page :file file})))] (modal/show! :share-link {:page page :file file})
(modal/allow-click-outside!)))]
[:div.options-zone [:div.options-zone
(case section (case section

View file

@ -185,33 +185,15 @@ msgstr "S'ha copiat l'enllaç correctament"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "S'ha eliminat l'enllaç correctament" msgstr "S'ha eliminat l'enllaç correctament"
msgid "common.share-link.permissions-can-access"
msgstr "Pot accedir"
msgid "common.share-link.permissions-can-view"
msgstr "Lector"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Qualsevol persona amb l'enllaç hi tindrà accés" msgstr "Qualsevol persona amb l'enllaç hi tindrà accés"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "L'enllaç per a compartir apareixerà aquí" msgstr "L'enllaç per a compartir apareixerà aquí"
msgid "common.share-link.remove-link"
msgstr "Elimina l'enllaç"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Compartiu prototips" msgstr "Compartiu prototips"
msgid "common.share-link.view-all-pages"
msgstr "Totes les pàgines"
msgid "common.share-link.view-current-page"
msgstr "Només aquesta pàgina"
msgid "common.share-link.view-selected-pages"
msgstr "Pàgines seleccionades"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Afegeix a la biblioteca compartida" msgstr "Afegeix a la biblioteca compartida"

View file

@ -188,33 +188,15 @@ msgstr "Link wurde erfolgreich kopiert"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Link wurde erfolgreich gelöscht" msgstr "Link wurde erfolgreich gelöscht"
msgid "common.share-link.permissions-can-access"
msgstr "Freigabe für"
msgid "common.share-link.permissions-can-view"
msgstr "Sichtbar"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Jeder mit dem Link kann auf die Datei zugreifen" msgstr "Jeder mit dem Link kann auf die Datei zugreifen"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Link zum Teilen wird hier erscheinen" msgstr "Link zum Teilen wird hier erscheinen"
msgid "common.share-link.remove-link"
msgstr "Link entfernen"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Prototypen teilen" msgstr "Prototypen teilen"
msgid "common.share-link.view-all-pages"
msgstr "Alle Seiten"
msgid "common.share-link.view-current-page"
msgstr "Nur diese Seite"
msgid "common.share-link.view-selected-pages"
msgstr "Ausgewählte Seiten"
#: src/app/main/ui/workspace/header.cljs, #: src/app/main/ui/workspace/header.cljs,
#: src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -183,11 +183,14 @@ msgstr "Link copied successfully"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Link deleted successfully" msgstr "Link deleted successfully"
msgid "common.share-link.permissions-can-access" msgid "common.share-link.permissions-can-comment"
msgstr "Can access" msgstr "Can comment"
msgid "common.share-link.permissions-can-view" msgid "common.share-link.permissions-can-inspect"
msgstr "Can view" msgstr "Can inspect code"
msgid "common.share-link.permissions-pages"
msgstr "Pages shared"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Anyone with link will have access" msgstr "Anyone with link will have access"
@ -195,20 +198,31 @@ msgstr "Anyone with link will have access"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Shareable link will appear here" msgstr "Shareable link will appear here"
msgid "common.share-link.remove-link" msgid "common.share-link.destroy-link"
msgstr "Remove link" msgstr "Destroy link"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Share prototypes" msgstr "Share prototypes"
msgid "common.share-link.view-all-pages" msgid "common.share-link.view-all"
msgstr "All pages" msgstr "Select All"
msgid "common.share-link.view-current-page" msgid "common.share-link.current-tag"
msgstr "Only this page" msgstr "(current)"
msgid "common.share-link.view-selected-pages" msgid "common.share-link.manage-ops"
msgstr "Selected pages" msgstr "Manage permissions"
msgid "common.share-link.team-members"
msgstr "Only team members"
msgid "common.share-link.all-users"
msgstr "All Penpot users"
msgid "common.share-link.page-shared"
msgid_plural "common.share-link.page-shared"
msgstr[0] "1 page shared"
msgstr[1] "%s pages shared"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -188,11 +188,14 @@ msgstr "Enlace copiado satisfactoriamente"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Enlace eliminado correctamente" msgstr "Enlace eliminado correctamente"
msgid "common.share-link.permissions-can-access" msgid "common.share-link.permissions-can-comment"
msgstr "Puede acceder a" msgstr "Pueden comentar"
msgid "common.share-link.permissions-can-view" msgid "common.share-link.permissions-can-inspect"
msgstr "Puede ver" msgstr "Pueden ver código"
msgid "common.share-link.permissions-pages"
msgstr "Páginas compartidas"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Cualquiera con el enlace puede acceder" msgstr "Cualquiera con el enlace puede acceder"
@ -200,20 +203,31 @@ msgstr "Cualquiera con el enlace puede acceder"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "El enlace para compartir aparecerá aquí" msgstr "El enlace para compartir aparecerá aquí"
msgid "common.share-link.remove-link" msgid "common.share-link.destroy-link"
msgstr "Eliminar enlace" msgstr "Eliminar enlace"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Compartir prototipos" msgstr "Compartir prototipos"
msgid "common.share-link.view-all-pages" msgid "common.share-link.view-all"
msgstr "Todas las paginas" msgstr "Selecctionar todas"
msgid "common.share-link.view-current-page" msgid "common.share-link.current-tag"
msgstr "Solo esta pagina" msgstr "(actual)"
msgid "common.share-link.view-selected-pages" msgid "common.share-link.manage-ops"
msgstr "Paginas seleccionadas" msgstr "Gestionar permisos"
msgid "common.share-link.team-members"
msgstr "Sólo integrantes del equipo"
msgid "common.share-link.all-users"
msgstr "Todo usario de Penpot"
msgid "common.share-link.page-shared"
msgid_plural "common.share-link.page-shared"
msgstr[0] "1 página compartida"
msgstr[1] "%s páginas compartidas"
#: src/app/main/ui/workspace/header.cljs, #: src/app/main/ui/workspace/header.cljs,
#: src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/file_menu.cljs

View file

@ -189,30 +189,12 @@ msgstr "لینک با موفقیت کپی شد"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "لینک با موفقیت حذف شد" msgstr "لینک با موفقیت حذف شد"
msgid "common.share-link.permissions-can-access"
msgstr "می‌تواند دسترسی داشته باشد"
msgid "common.share-link.permissions-can-view"
msgstr "می‌تواند مشاهده کند"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "هر کسی که لینک داشته باشد دسترسی خواهد داشت" msgstr "هر کسی که لینک داشته باشد دسترسی خواهد داشت"
msgid "common.share-link.remove-link"
msgstr "حذف لینک"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "اشتراک‌گذاری پروتوتایپ‌ها" msgstr "اشتراک‌گذاری پروتوتایپ‌ها"
msgid "common.share-link.view-all-pages"
msgstr "تمام صفحات"
msgid "common.share-link.view-current-page"
msgstr "فقط این صفحه"
msgid "common.share-link.view-selected-pages"
msgstr "صفحات انتخاب‌شده"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "افزودن به‌عنوان کتابخانه مشترک" msgstr "افزودن به‌عنوان کتابخانه مشترک"

View file

@ -186,33 +186,15 @@ msgstr "Lien copié avec succès"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Lien supprimé avec succès" msgstr "Lien supprimé avec succès"
msgid "common.share-link.permissions-can-access"
msgstr "Peut y accéder"
msgid "common.share-link.permissions-can-view"
msgstr "Peut le visionner"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "N'importe qui possédant ce lien peut y accéder" msgstr "N'importe qui possédant ce lien peut y accéder"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Le lien à partager apparaîtra ici" msgstr "Le lien à partager apparaîtra ici"
msgid "common.share-link.remove-link"
msgstr "Supprimer le lien"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Partager les prototypes" msgstr "Partager les prototypes"
msgid "common.share-link.view-all-pages"
msgstr "Toutes les pages"
msgid "common.share-link.view-current-page"
msgstr "Seulement cette page"
msgid "common.share-link.view-selected-pages"
msgstr "Pages sélectionnées"
#: src/app/main/ui/workspace/header.cljs, #: src/app/main/ui/workspace/header.cljs,
#: src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -179,33 +179,15 @@ msgstr "הקישור הועתק בהצלחה"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "הקישור נמחק בהצלחה" msgstr "הקישור נמחק בהצלחה"
msgid "common.share-link.permissions-can-access"
msgstr "יש גישה"
msgid "common.share-link.permissions-can-view"
msgstr "אפשר לצפות"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "כל מי שיש לו את הקישור יכול לגשת" msgstr "כל מי שיש לו את הקישור יכול לגשת"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "הקישור לשיתוף יופיע כאן" msgstr "הקישור לשיתוף יופיע כאן"
msgid "common.share-link.remove-link"
msgstr "הסרת קישור"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "שיתוף אבות טיפוס" msgstr "שיתוף אבות טיפוס"
msgid "common.share-link.view-all-pages"
msgstr "כל העמודים"
msgid "common.share-link.view-current-page"
msgstr "רק העמוד הזה"
msgid "common.share-link.view-selected-pages"
msgstr "עמודים נבחרים"
#: src/app/main/ui/workspace/header.cljs, #: src/app/main/ui/workspace/header.cljs,
#: src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -189,20 +189,10 @@ msgstr "Tautan berhasil disalin"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Tautan berhasil dihapus" msgstr "Tautan berhasil dihapus"
msgid "common.share-link.permissions-can-access"
msgstr "Dapat mengakses"
msgid "common.share-link.permissions-can-view"
msgstr "Dapat melihat"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Siapapun yang memiliki tautan dapat mengakses" msgstr "Siapapun yang memiliki tautan dapat mengakses"
msgid "common.share-link.view-current-page"
msgstr "Hanya halaman ini"
msgid "common.share-link.view-selected-pages"
msgstr "Halaman yang dipilih"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -188,33 +188,15 @@ msgstr "Nuoroda sėkmingai nukopijuota"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Nuoroda sėkmingai ištrinta" msgstr "Nuoroda sėkmingai ištrinta"
msgid "common.share-link.permissions-can-access"
msgstr "Gali pasiekti"
msgid "common.share-link.permissions-can-view"
msgstr "Galima peržiūrėti"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Kiekvienas, turintis nuorodą, turės prieigą" msgstr "Kiekvienas, turintis nuorodą, turės prieigą"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Bendrinama nuoroda bus rodoma čia" msgstr "Bendrinama nuoroda bus rodoma čia"
msgid "common.share-link.remove-link"
msgstr "Pašalinti nuorodą"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Dalinkitės prototipais" msgstr "Dalinkitės prototipais"
msgid "common.share-link.view-all-pages"
msgstr "Visi puslapiai"
msgid "common.share-link.view-current-page"
msgstr "Tik šis puslapis"
msgid "common.share-link.view-selected-pages"
msgstr "Parinkti puslapiai"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Pridėti kaip bendrinamą biblioteką" msgstr "Pridėti kaip bendrinamą biblioteką"

View file

@ -189,33 +189,15 @@ msgstr "കണ്ണി വിജയകരമായി പകർത്തി"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "കണ്ണി വിജയകരമായി മായിച്ചു" msgstr "കണ്ണി വിജയകരമായി മായിച്ചു"
msgid "common.share-link.permissions-can-access"
msgstr "പ്രാപ്യമാണ്"
msgid "common.share-link.permissions-can-view"
msgstr "കാണാവുന്നതാണ്"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "കണ്ണിയുള്ള ആർക്കും പ്രാപ്യമാകും" msgstr "കണ്ണിയുള്ള ആർക്കും പ്രാപ്യമാകും"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "പങ്കുവെക്കാവുന്ന കണ്ണി ഇവിടെ ലഭ്യമാകും" msgstr "പങ്കുവെക്കാവുന്ന കണ്ണി ഇവിടെ ലഭ്യമാകും"
msgid "common.share-link.remove-link"
msgstr "കണ്ണി നീക്കുക"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "പ്രോട്ടോടൈപ്പുകൾ പങ്കുവെയ്ക്കുക" msgstr "പ്രോട്ടോടൈപ്പുകൾ പങ്കുവെയ്ക്കുക"
msgid "common.share-link.view-all-pages"
msgstr "എല്ലാ താളുകളും"
msgid "common.share-link.view-current-page"
msgstr "ഈ താൾ മാത്രം"
msgid "common.share-link.view-selected-pages"
msgstr "തിരഞ്ഞെടുത്ത താളുകൾ"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക" msgstr "പങ്കിട്ട ലൈബ്രറിയായി ചേർക്കുക"

View file

@ -186,33 +186,15 @@ msgstr "Link skopiowano pomyślnie"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Link usunięto pomyślnie" msgstr "Link usunięto pomyślnie"
msgid "common.share-link.permissions-can-access"
msgstr "Można uzyskać dostęp"
msgid "common.share-link.permissions-can-view"
msgstr "Można zobaczyć"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Każdy, kto ma link, będzie miał dostęp" msgstr "Każdy, kto ma link, będzie miał dostęp"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Tutaj pojawi się link do udostępniania" msgstr "Tutaj pojawi się link do udostępniania"
msgid "common.share-link.remove-link"
msgstr "Usuń link"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Udostępnij prototypy" msgstr "Udostępnij prototypy"
msgid "common.share-link.view-all-pages"
msgstr "Wszystkie strony"
msgid "common.share-link.view-current-page"
msgstr "Tylko ta strona"
msgid "common.share-link.view-selected-pages"
msgstr "Wybrane strony"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Dodaj jako Udostępnioną Bibliotekę" msgstr "Dodaj jako Udostępnioną Bibliotekę"

View file

@ -186,35 +186,16 @@ msgstr "Ссылка скопирована"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Ссылка удалена" msgstr "Ссылка удалена"
#, fuzzy
msgid "common.share-link.permissions-can-access"
msgstr "Могут зайти"
msgid "common.share-link.permissions-can-view"
msgstr "Могут видеть"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Доступ открыт для получателей ссылки" msgstr "Доступ открыт для получателей ссылки"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Ссылка появится здесь" msgstr "Ссылка появится здесь"
msgid "common.share-link.remove-link"
msgstr "Удалить ссылку"
#, fuzzy #, fuzzy
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Поделиться прототипами" msgstr "Поделиться прототипами"
msgid "common.share-link.view-all-pages"
msgstr "Все страницы"
msgid "common.share-link.view-current-page"
msgstr "Только эту страницу"
msgid "common.share-link.view-selected-pages"
msgstr "Выбранные страницы"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "Добавить как общую библиотеку" msgstr "Добавить как общую библиотеку"

View file

@ -186,33 +186,15 @@ msgstr "Bağlantı başarıyla kopyalandı"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "Bağlantı başarıyla silindi" msgstr "Bağlantı başarıyla silindi"
msgid "common.share-link.permissions-can-access"
msgstr "Erişebilir"
msgid "common.share-link.permissions-can-view"
msgstr "Görüntüleyebilir"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "Bağlantıya sahip olan herkes erişebilir" msgstr "Bağlantıya sahip olan herkes erişebilir"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "Paylaşılabilir bağlantı burada görünecek" msgstr "Paylaşılabilir bağlantı burada görünecek"
msgid "common.share-link.remove-link"
msgstr "Bağlantıyı kaldır"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "Prototipleri paylaş" msgstr "Prototipleri paylaş"
msgid "common.share-link.view-all-pages"
msgstr "Tüm sayfalar"
msgid "common.share-link.view-current-page"
msgstr "Yalnızca bu sayfa"
msgid "common.share-link.view-selected-pages"
msgstr "Seçili sayfalar"
#: src/app/main/ui/workspace/header.cljs, #: src/app/main/ui/workspace/header.cljs,
#: src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"

View file

@ -177,13 +177,6 @@ msgstr "链接已复制"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "链接已移除" msgstr "链接已移除"
#, fuzzy
msgid "common.share-link.permissions-can-access"
msgstr "可访问"
msgid "common.share-link.permissions-can-view"
msgstr "可浏览"
#, fuzzy #, fuzzy
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "任何人通过此链接都可访问" msgstr "任何人通过此链接都可访问"
@ -191,21 +184,9 @@ msgstr "任何人通过此链接都可访问"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "可分享的链接会在此处显示" msgstr "可分享的链接会在此处显示"
msgid "common.share-link.remove-link"
msgstr "移除链接"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "分享原型" msgstr "分享原型"
msgid "common.share-link.view-all-pages"
msgstr "全部页面"
msgid "common.share-link.view-current-page"
msgstr "仅此页面"
msgid "common.share-link.view-selected-pages"
msgstr "选中的页面"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
msgid "dashboard.add-shared" msgid "dashboard.add-shared"
msgstr "添加为共享库" msgstr "添加为共享库"

View file

@ -181,33 +181,15 @@ msgstr "成功複製連結"
msgid "common.share-link.link-deleted-success" msgid "common.share-link.link-deleted-success"
msgstr "成功刪除連結" msgstr "成功刪除連結"
msgid "common.share-link.permissions-can-access"
msgstr "能夠存取"
msgid "common.share-link.permissions-can-view"
msgstr "能夠檢視"
msgid "common.share-link.permissions-hint" msgid "common.share-link.permissions-hint"
msgstr "任何有連結的人皆能存取" msgstr "任何有連結的人皆能存取"
msgid "common.share-link.placeholder" msgid "common.share-link.placeholder"
msgstr "可分享的連結將會在此顯示" msgstr "可分享的連結將會在此顯示"
msgid "common.share-link.remove-link"
msgstr "移除連結"
msgid "common.share-link.title" msgid "common.share-link.title"
msgstr "分享原型" msgstr "分享原型"
msgid "common.share-link.view-all-pages"
msgstr "所有頁面"
msgid "common.share-link.view-current-page"
msgstr "僅此頁面"
msgid "common.share-link.view-selected-pages"
msgstr "選擇的頁面"
#: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs #: src/app/main/ui/workspace/header.cljs, src/app/main/ui/dashboard/file_menu.cljs
#, fuzzy #, fuzzy
msgid "dashboard.add-shared" msgid "dashboard.add-shared"