Skip to content

Commit db2d7d2

Browse files
authored
Merge pull request #165 from joyofrails/feat/color-scheme
Ability to manage color scheme
2 parents 34e5b69 + 2d78b43 commit db2d7d2

35 files changed

+762
-84
lines changed

Gemfile

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ gem "sitepress-rails", group: [:default, :wasm] # Static site generator for Rail
3636
gem "phlex-rails", group: [:default, :wasm] # An object-oriented alternative to ActionView for Ruby on Rails. [https://github.com/phlex-ruby/phlex-rails]
3737
gem "commonmarker", require: false
3838
gem "invisible_captcha", group: [:default, :wasm] # Unobtrusive and flexible spam protection for Rails apps [https://github.com/markets/invisible_captcha]
39+
gem "color_conversion", group: [:default, :wasm] # A ruby gem to perform color conversions [https://github.com/devrieda/color_conversion]
3940

4041
gem "bootsnap", require: false # Reduces boot times through caching; required in config/boot.rb [https://github.com/Shopify/bootsnap]
4142

@@ -87,5 +88,3 @@ end
8788
group :browser do
8889
gem "js" # JavaScript bindings for ruby.wasm [https://github.com/ruby/ruby.wasm/blob/main/packages/gems/js]
8990
end
90-
91-
gem "color_conversion", "~> 0.1.1"

Gemfile.lock

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -551,7 +551,7 @@ DEPENDENCIES
551551
brakeman
552552
bundle-audit
553553
capybara
554-
color_conversion (~> 0.1.1)
554+
color_conversion
555555
commonmarker
556556
cuprite!
557557
debug

Procfile.litestream.dev

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,2 +1,2 @@
11
minio: docker run -p 9000:9000 -p 9001:9001 minio/minio server /data --console-address ":9001"
2-
litestrem: bin/rails litestream:custom_replicate
2+
litestrem: bin/litestream replicate --config=config/litestream/development.yml
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
class ApplicationController < ActionController::Base
22
include Erroring
33
include Authentication
4+
include ColorScheming
45
end
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
module ColorScheming
2+
extend ActiveSupport::Concern
3+
4+
included do
5+
helper_method :custom_color_scheme_params
6+
helper_method :custom_color_scheme?
7+
end
8+
9+
def custom_color_scheme_params = preview_color_scheme_id ? {settings: {color_scheme_id: preview_color_scheme_id}} : {}
10+
11+
def custom_color_scheme?
12+
preview_color_scheme_id.present? || session_color_scheme_id.present?
13+
end
14+
15+
def preview_color_scheme_id = params.dig(:settings, :color_scheme_id)
16+
17+
def session_color_scheme_id = session[:color_scheme_id]
18+
19+
def find_color_scheme
20+
preview_color_scheme || session_color_scheme || default_color_scheme
21+
end
22+
23+
def preview_color_scheme = preview_color_scheme_id && ColorScheme.find(preview_color_scheme_id)
24+
25+
def session_color_scheme = session_color_scheme_id && ColorScheme.find(session_color_scheme_id)
26+
27+
def default_color_scheme = @default_color_scheme ||= ColorScheme.cached_default
28+
end
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
class Settings::ColorSchemesController < ApplicationController
2+
def show
3+
@color_scheme = find_color_scheme
4+
5+
respond_to do |format|
6+
format.html {
7+
render ColorSchemes::ShowView.new(
8+
settings: Settings.new(color_scheme: @color_scheme),
9+
curated_color_schemes: ColorScheme.cached_curated,
10+
preview_color_scheme: preview_color_scheme,
11+
session_color_scheme: session_color_scheme,
12+
default_color_scheme: default_color_scheme
13+
)
14+
}
15+
format.css {
16+
render ColorSchemes::Css.new(color_scheme: @color_scheme), layout: false
17+
}
18+
end
19+
end
20+
21+
def update
22+
update_params = params[:settings] ? params.require(:settings).permit(:color_scheme_id) : {}
23+
color_scheme_id = update_params[:color_scheme_id]
24+
@color_scheme = ColorScheme.find(color_scheme_id)
25+
26+
redirect_to settings_color_scheme_path unless @color_scheme.present?
27+
28+
if @color_scheme == ColorScheme.cached_default
29+
session.delete(:color_scheme_id)
30+
else
31+
session[:color_scheme_id] = @color_scheme.id
32+
end
33+
34+
redirect_to settings_color_scheme_path, status: :see_other
35+
end
36+
end

app/controllers/site_controller.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,11 +29,15 @@ def process_rendition(rendition)
2929
# @param rendition [Sitepress::Rendition] Rendered representatio of current_resource
3030
#
3131
def post_render(rendition)
32-
if current_path?(root_path) || stale?(rendition.source, last_modified: current_resource.asset.updated_at.utc, public: true)
32+
if skip_http_cache? || stale?(rendition.source, last_modified: current_resource.asset.updated_at.utc, public: true)
3333
render body: rendition.output, content_type: rendition.mime_type
3434
end
3535
end
3636

37+
def skip_http_cache?
38+
current_path?(root_path) || custom_color_scheme?
39+
end
40+
3741
def current_path?(path)
3842
request.path == path
3943
end

app/javascript/css/application.css

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
@import './reset.css' layer(reset);
44

55
@import './config/colors-tailwind.css' layer(theme);
6-
@import './config/colors-uicolors.css' layer(theme);
6+
/* @import './config/colors-uicolors.css' layer(theme); */
77
@import './config/colors.css' layer(theme);
88
@import './config/dracula.css' layer(theme);
99
@import './config/theme.css' layer(theme);
@@ -22,6 +22,7 @@
2222

2323
@import './components/logo.css';
2424
@import './components/button.css';
25+
@import './components/select.css';
2526
@import './components/code.scss';
2627
@import './components/page-header.css';
2728
@import './components/skip-to-content.css';
@@ -32,3 +33,4 @@
3233
@import './components/newsletter-banner.css';
3334
@import './components/anchors.scss';
3435
@import './components/callout.css';
36+
@import './components/color-scheme.scss';

app/javascript/css/baseline.css

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -621,7 +621,11 @@ svg {
621621

622622
button,
623623
input,
624+
select,
624625
textarea {
625626
background-color: var(--joy-dark);
626627
}
628+
select {
629+
color: var(--joy-text);
630+
}
627631
}

app/javascript/css/components/button.css

Lines changed: 35 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,38 +1,67 @@
11
.button {
2+
border: 1px solid var(--joy-border-subtle);
23
border-radius: 0.375rem;
3-
padding: 0.5rem 0.75rem;
4+
padding: 0.75rem;
45
display: inline-flex;
56
align-items: center;
67
font-size: 0.875rem;
78
font-family: var(--sans-serif);
89
line-height: 1.5715;
910
font-weight: 600;
10-
--tw-text-opacity: 1;
11-
color: rgb(255 255 255 / var(--tw-text-opacity));
12-
line-height: inherit;
11+
color: var(--joy-light);
12+
line-height: 1rem;
1313

1414
&:is(a) {
1515
text-decoration: none;
1616
}
1717

1818
&:hover {
1919
cursor: pointer;
20-
--tw-text-opacity: 1;
21-
color: rgb(255 255 255 / var(--tw-text-opacity));
2220
text-decoration-line: none;
2321
}
2422

2523
&.hidden {
2624
display: none;
2725
}
2826
&.primary {
27+
border: 1px solid var(--joy-button-primary);
2928
background-color: var(--joy-button-primary);
29+
30+
&:hover {
31+
background-color: var(--joy-button-primary-hover);
32+
}
33+
&:active {
34+
background-color: var(--joy-button-primary-active);
35+
}
3036
}
3137
&.secondary {
3238
background-color: var(--joy-button-secondary);
39+
color: var(--joy-text);
40+
&:hover {
41+
background-color: var(--joy-button-secondary-hover);
42+
}
43+
&:active {
44+
background-color: var(--joy-button-secondary-active);
45+
}
46+
}
47+
&.tertiary {
48+
border: 1px solid var(--joy-button-tertiary);
49+
background-color: var(--joy-button-tertiary);
50+
&:hover {
51+
background-color: var(--joy-button-tertiary-hover);
52+
}
53+
&:active {
54+
background-color: var(--joy-button-tertiary-active);
55+
}
3356
}
3457
&.warn {
3558
background-color: var(--joy-button-warn);
59+
&:hover {
60+
background-color: var(--joy-button-warn-hover);
61+
}
62+
&:active {
63+
background-color: var(--joy-button-warn);
64+
}
3665
}
3766
&.danger {
3867
background-color: var(--joy-button-warn);

0 commit comments

Comments
 (0)