diff --git a/app/assets/stylesheets/_global.css b/app/assets/stylesheets/_global.css index b417b31d7..6e535a767 100644 --- a/app/assets/stylesheets/_global.css +++ b/app/assets/stylesheets/_global.css @@ -209,6 +209,14 @@ /* Colors: Cards */ --color-card-default: oklch(var(--lch-blue-dark)); --color-card-complete: var(--color-ink-darker); + --color-card-1: oklch(var(--lch-ink-medium)); + --color-card-2: oklch(var(--lch-uncolor-medium)); + --color-card-3: oklch(var(--lch-yellow-medium)); + --color-card-4: oklch(var(--lch-lime-medium)); + --color-card-5: oklch(var(--lch-aqua-medium)); + --color-card-6: oklch(var(--lch-violet-medium)); + --color-card-7: oklch(var(--lch-purple-medium)); + --color-card-8: oklch(var(--lch-pink-medium)); /* Colors: Syntax highlighting */ --color-code-token__att: oklch(var(--lch-blue-dark)); diff --git a/app/models/card/colored.rb b/app/models/card/colored.rb index 30b6fa066..78152bab8 100644 --- a/app/models/card/colored.rb +++ b/app/models/card/colored.rb @@ -1,7 +1,24 @@ module Card::Colored extend ActiveSupport::Concern + COLORS = %w[ + var(--color-card-1) + var(--color-card-2) + var(--color-card-3) + var(--color-card-4) + var(--color-card-5) + var(--color-card-6) + var(--color-card-7) + var(--color-card-8) + ] + DEFAULT_COLOR = "var(--color-card-default)" + def color - column&.color || Column::Colored::DEFAULT_COLOR + color_from_column || DEFAULT_COLOR end + + private + def color_from_column + column&.color&.presence + end end diff --git a/app/models/color.rb b/app/models/color.rb deleted file mode 100644 index 59c14774e..000000000 --- a/app/models/color.rb +++ /dev/null @@ -1,25 +0,0 @@ -Color = Struct.new(:name, :value) - -class Color - class << self - def for_value(value) - COLORS.find { |it| it.value == value } - end - end - - def to_s - value - end - - COLORS = { - "Blue" => "var(--color-card-default)", - "Gray" => "oklch(var(--lch-ink-dark))", - "Tan" => "oklch(var(--lch-uncolor-medium))", - "Yellow" => "oklch(var(--lch-yellow-medium))", - "Lime" => "oklch(var(--lch-lime-medium))", - "Aqua" => "oklch(var(--lch-aqua-medium))", - "Violet" => "oklch(var(--lch-violet-medium))", - "Purple" => "oklch(var(--lch-purple-medium))", - "Pink" => "oklch(var(--lch-pink-medium))" - }.collect { |name, value| new(name, value) }.freeze -end diff --git a/app/models/column.rb b/app/models/column.rb index bf136969c..ec5fd6217 100644 --- a/app/models/column.rb +++ b/app/models/column.rb @@ -1,9 +1,10 @@ class Column < ApplicationRecord - include Colored, Positioned + include Positioned belongs_to :board, touch: true has_many :cards, dependent: :nullify + before_validation -> { self.color ||= Card::DEFAULT_COLOR } after_save_commit -> { cards.touch_all }, if: -> { saved_change_to_name? || saved_change_to_color? } after_destroy_commit -> { board.cards.touch_all } end diff --git a/app/models/column/colored.rb b/app/models/column/colored.rb deleted file mode 100644 index 176a28ac8..000000000 --- a/app/models/column/colored.rb +++ /dev/null @@ -1,13 +0,0 @@ -module Column::Colored - extend ActiveSupport::Concern - - DEFAULT_COLOR = Color::COLORS.first - - included do - before_validation -> { self[:color] ||= DEFAULT_COLOR.value } - end - - def color - Color.for_value(super) || DEFAULT_COLOR - end -end diff --git a/app/views/boards/show/menu/_column_form.html.erb b/app/views/boards/show/menu/_column_form.html.erb index f9eab1c16..b42549d3c 100644 --- a/app/views/boards/show/menu/_column_form.html.erb +++ b/app/views/boards/show/menu/_column_form.html.erb @@ -3,11 +3,11 @@ required: true, autocomplete: "off", pattern: ".*\\S.*", title: "Column name cannot be blank", data: { action: "focus->form#select" } %>
- <% Color::COLORS.each do |color| %> -
diff --git a/app/views/public/cards/show.html.erb b/app/views/public/cards/show.html.erb index a0663416e..a3fc7ffcc 100644 --- a/app/views/public/cards/show.html.erb +++ b/app/views/public/cards/show.html.erb @@ -19,7 +19,7 @@ <% end %>
+ class="card-perma card-perma--public" data-controller="lightbox" style="--card-color: <%= @card.color %>;">
<%= card_article_tag @card, class: "card" do %>
diff --git a/test/models/card/colored_test.rb b/test/models/card/colored_test.rb index dc83c00f5..e85718f85 100644 --- a/test/models/card/colored_test.rb +++ b/test/models/card/colored_test.rb @@ -3,7 +3,7 @@ require "test_helper" class Card::ColoredTest < ActiveSupport::TestCase test "use default color if no column" do cards(:logo).update! column: nil - assert_equal Column::Colored::DEFAULT_COLOR, cards(:logo).color + assert_equal Card::DEFAULT_COLOR, cards(:logo).color end test "infer color from column" do diff --git a/test/models/column/colored_test.rb b/test/models/column/colored_test.rb deleted file mode 100644 index d74a850b0..000000000 --- a/test/models/column/colored_test.rb +++ /dev/null @@ -1,16 +0,0 @@ -require "test_helper" - -class Column::ColoredTest < ActiveSupport::TestCase - test "creates column with default color when color not provided" do - column = boards(:writebook).columns.create!(name: "New Column") - - assert_equal Column::Colored::DEFAULT_COLOR, column.color - end - - test "update the column color" do - columns(:writebook_triage).update!(color: "oklch(var(--lch-yellow-medium))") - - assert_not_nil columns(:writebook_triage).color - assert_equal Color.for_value("oklch(var(--lch-yellow-medium))"), columns(:writebook_triage).color - end -end diff --git a/test/models/column_test.rb b/test/models/column_test.rb index 2b02d022e..6bc9e5210 100644 --- a/test/models/column_test.rb +++ b/test/models/column_test.rb @@ -1,6 +1,12 @@ require "test_helper" class ColumnTest < ActiveSupport::TestCase + test "creates column with default color when color not provided" do + column = boards(:writebook).columns.create!(name: "New Column") + + assert_equal Card::DEFAULT_COLOR, column.color + end + test "touch all the cards when the name or color changes" do column = columns(:writebook_triage)