diff --git a/app/assets/stylesheets/card-columns.css b/app/assets/stylesheets/card-columns.css index cc3a2f9ae..e78a6b7c0 100644 --- a/app/assets/stylesheets/card-columns.css +++ b/app/assets/stylesheets/card-columns.css @@ -68,6 +68,10 @@ transition: inline-size 200ms ease-out; will-change: inline-size; + .no-transitions & { + transition: none; + } + &:not(.is-collapsed) { padding-inline: var(--column-padding-expanded); } @@ -408,6 +412,14 @@ } } + .card--drafted { + --card-color: var(--color-ink-medium) !important; + + border-color: var(--card-color) !important; + border-style: dashed !important; + box-shadow: none !important; + } + .card:has(.card__background img:not([src=""])) { .card__content, .card__meta, @@ -558,14 +570,6 @@ padding-block: 0 var(--card-padding-block); } - .card--drafted { - --card-color: var(--color-ink-medium) !important; - - border-color: var(--card-color) !important; - border-style: dashed !important; - box-shadow: none !important; - } - .card__people-label { display: none; } diff --git a/app/assets/stylesheets/expander.css b/app/assets/stylesheets/expander.css deleted file mode 100644 index 0182f6497..000000000 --- a/app/assets/stylesheets/expander.css +++ /dev/null @@ -1,111 +0,0 @@ -/* https://nerdy.dev/open-and-close-transitions-for-the-details-element */ - -.expander { - --expander-height: calc(1em + 1lh); - --expander-width: 11ch; - --expander-radius: calc(var(--expander-height) / 2); - --expander-duration: 150ms; - - interpolate-size: allow-keywords; - position: relative; - z-index: 1; -} - -.expander__button { - --btn-border-radius: var(--expander-radius); - - align-items: center; - block-size: var(--expander-height); - cursor: pointer; - display: flex; - inline-size: var(--expander-width); - justify-content: flex-start; - padding-inline: 1.5ch; - position: relative; - white-space: nowrap; - z-index: 1; - - &::-webkit-details-marker { - display: none; - } - - [open] & { - filter: none; - } - - .icon { - font-size: 1ch; - } -} - -.expander__content { - --btn-border-radius: var(--expander-radius); - - align-items: stretch; - border-radius: var(--expander-radius); - flex-direction: column; - filter: none; - gap: 0; - padding-block-start: var(--expander-height); - - &:hover { - box-shadow: none; - } -} - -/* For browsers that support animation */ -@supports selector(details::details-content) { - .expander::details-content { - --btn-border-radius: var(--expander-radius); - - block-size: var(--expander-height); - border-radius: var(--expander-radius); - inset: 0 auto auto 0; - inline-size: var(--expander-width); - overflow: clip; - position: absolute; - transition: content-visibility var(--expander-duration) allow-discrete, block-size var(--expander-duration), inline-size var(--expander-duration); - } - - .expander[open]::details-content { - block-size: auto; - inline-size: auto; - } - - .expander__content { - min-inline-size: var(--expander-width); - } -} - -/* Fallback for browsers that don't support animation */ -@supports not selector(details::details-content) { - .expander__content { - border-radius: var(--expander-radius); - inset: 0 auto auto 0; - min-inline-size: var(--expander-width); - position: absolute; - - [open] & { - block-size: auto; - inline-size: auto; - } - } -} - -.expander__item { - --btn-background: var(--card-color); - --btn-border-radius: 0.3em; - --btn-border-size: 0; - --btn-font-weight: 500; - --btn-padding: var(--inline-space-half) var(--inline-space); - - inline-size: calc(100% + var(--inline-space-double)); - margin-inline-start: calc(-1 * var(--inline-space)); - justify-content: flex-start; - white-space: nowrap; - - /* &:hover, - &:focus-visible { - background-color: oklch(var(--lch-canvas) / 15%); - } */ -} diff --git a/app/controllers/cards/closures_controller.rb b/app/controllers/cards/closures_controller.rb index c2df13433..b89395cd5 100644 --- a/app/controllers/cards/closures_controller.rb +++ b/app/controllers/cards/closures_controller.rb @@ -2,7 +2,7 @@ class Cards::ClosuresController < ApplicationController include CardScoped def create - @card.close(user: Current.user, reason: params[:reason]) + @card.close(user: Current.user) render_card_replacement end diff --git a/app/helpers/events_helper.rb b/app/helpers/events_helper.rb index b037c63c4..031236b1c 100644 --- a/app/helpers/events_helper.rb +++ b/app/helpers/events_helper.rb @@ -84,7 +84,7 @@ module EventsHelper when "card_published" "#{h event_creator_name(event) } added #{h title }".html_safe when "card_closed" - "#{h event_creator_name(event) } closed #{h title }".html_safe + "#{h event_creator_name(event) } marked #{h title } as done".html_safe when "card_reopened" "#{h event_creator_name(event) } reopened #{h title }".html_safe when "card_due_date_added" diff --git a/app/helpers/notifications_helper.rb b/app/helpers/notifications_helper.rb index cd9e005a9..2f0456f78 100644 --- a/app/helpers/notifications_helper.rb +++ b/app/helpers/notifications_helper.rb @@ -10,12 +10,7 @@ module NotificationsHelper name = event.creator.name case event_notification_action(event) - when "card_closed" - if event.card.closure - "Closed as “#{event.card.closure.reason}” by #{name}" - else - "Closed by #{name}" - end + when "card_closed" then "Marked as “Done” by #{name}" when "card_reopened" then "Reopened by #{name}" when "card_published" then "Added by #{name}" when "comment_created" then comment_notification_body(event) diff --git a/app/helpers/webhooks_helper.rb b/app/helpers/webhooks_helper.rb index dfb61c922..42c12c404 100644 --- a/app/helpers/webhooks_helper.rb +++ b/app/helpers/webhooks_helper.rb @@ -1,7 +1,7 @@ module WebhooksHelper ACTION_LABELS = { card_assigned: "Card assigned", - card_closed: "Card closed", + card_closed: "Card marked as Done", card_collection_changed: "Card collection changed", card_due_date_added: "Card due date added", card_due_date_changed: "Card due date changed", diff --git a/app/javascript/controllers/collapsible_columns_controller.js b/app/javascript/controllers/collapsible_columns_controller.js index 136848b84..01289baf0 100644 --- a/app/javascript/controllers/collapsible_columns_controller.js +++ b/app/javascript/controllers/collapsible_columns_controller.js @@ -1,14 +1,19 @@ import { Controller } from "@hotwired/stimulus" +import { nextFrame } from "helpers/timing_helpers"; export default class extends Controller { - static classes = [ "collapsed" ] + static classes = [ "collapsed", "noTransitions" ] static targets = [ "column", "button" ] static values = { collection: String } - connect() { + async connect() { + this.#disableTransitions() this.#restoreColumns() + + await nextFrame() + this.#enableTransitions() } toggle({ target }) { @@ -22,6 +27,14 @@ export default class extends Controller { } } + #disableTransitions() { + this.element.classList.add(this.noTransitionsClass) + } + + #enableTransitions() { + this.element.classList.remove(this.noTransitionsClass) + } + #toggleColumn(column) { this.#collapseAllExcept(column) diff --git a/app/models/account.rb b/app/models/account.rb index 5e97480ce..c7c00f979 100644 --- a/app/models/account.rb +++ b/app/models/account.rb @@ -17,7 +17,6 @@ class Account < ApplicationRecord def setup_basic_template user = User.first - Closure::Reason.create_defaults Collection.create!(name: "Cards", creator: user, all_access: true) end end diff --git a/app/models/card/closeable.rb b/app/models/card/closeable.rb index f9b045239..51852c9a5 100644 --- a/app/models/card/closeable.rb +++ b/app/models/card/closeable.rb @@ -28,10 +28,10 @@ module Card::Closeable closure&.created_at end - def close(user: Current.user, reason: Closure::Reason.default) + def close(user: Current.user) unless closed? transaction do - create_closure! user: user, reason: reason + create_closure! user: user track_event :closed, creator: user end end diff --git a/app/models/card/eventable/system_commenter.rb b/app/models/card/eventable/system_commenter.rb index 65a6b8a36..29f981173 100644 --- a/app/models/card/eventable/system_commenter.rb +++ b/app/models/card/eventable/system_commenter.rb @@ -19,7 +19,7 @@ class Card::Eventable::SystemCommenter when "card_unassigned" "#{event.creator.name} unassigned from #{event.assignees.pluck(:name).to_sentence}." when "card_closed" - "Closed as ‘#{ card.closure.reason }’ by #{ event.creator.name }" + "Marked as “Done” by #{ event.creator.name }" when "card_reopened" "Reopened by #{ event.creator.name }" when "card_title_changed" diff --git a/app/models/closure/reason.rb b/app/models/closure/reason.rb deleted file mode 100644 index f071901c1..000000000 --- a/app/models/closure/reason.rb +++ /dev/null @@ -1,27 +0,0 @@ -class Closure::Reason < ApplicationRecord - DEFAULT_LABELS = [ - "Completed", - "Duplicate", - "Maybe later", - "Working as intended", - "Not now" - ] - - FALLBACK_LABEL = "Done" - - class << self - def labels - pluck(:label).presence || [ FALLBACK_LABEL ] - end - - def default - labels.first - end - - def create_defaults - DEFAULT_LABELS.each do |label| - create! label: label - end - end - end -end diff --git a/app/models/filter.rb b/app/models/filter.rb index e3ff45510..6218dbbaa 100644 --- a/app/models/filter.rb +++ b/app/models/filter.rb @@ -18,7 +18,7 @@ class Filter < ApplicationRecord def cards @cards ||= begin - result = creator.accessible_cards.published + result = creator.accessible_cards.published_or_drafted_by(creator) result = result.indexed_by(indexed_by) result = result.sorted_by(sorted_by) result = result.where(id: card_ids) if card_ids.present? diff --git a/app/models/notification_pusher.rb b/app/models/notification_pusher.rb index a5784cf2e..000a80fff 100644 --- a/app/models/notification_pusher.rb +++ b/app/models/notification_pusher.rb @@ -59,7 +59,7 @@ class NotificationPusher ) when "card_closed" base_payload.merge( - body: card.closure ? "Closed as \"#{card.closure.reason}\" by #{event.creator.name}" : "Closed by #{event.creator.name}" + body: card.closure ? "Marked as “Done” by #{event.creator.name}" : "Closed by #{event.creator.name}" ) when "card_reopened" base_payload.merge( diff --git a/app/views/account/settings/_entropy_configuration.html.erb b/app/views/account/settings/_entropy_configuration.html.erb index 910e10c5f..88dd539b2 100644 --- a/app/views/account/settings/_entropy_configuration.html.erb +++ b/app/views/account/settings/_entropy_configuration.html.erb @@ -1,6 +1,5 @@
This is the default setting for this account, you can override it in each collections.
-Cards automatically close as “Not now” if there is no activity for…
+Fizzy doesn’t let stale cards stick around forever. Cards automatically close as “Not now” without activity for specific period of time. This is the default, global setting — you can override it in each collection.
<%= render "entropy/auto_close", model: account.default_entropy_configuration, url: account_entropy_configuration_path %>Cards automatically close as “Not now” if there is no activity for…
+Fizzy doesn’t let stale cards stick around forever. Cards automatically close as “Not now” if no one updates, comments, or moves a card for…
<%= render "entropy/auto_close", model: collection, url: collection_entropy_configuration_path(collection) %>