@@ -6,13 +6,19 @@ class ColorSchemes::ShowView < ApplicationView
6
6
include Phlex ::Rails ::Helpers ::ButtonTo
7
7
include Phlex ::Rails ::Helpers ::ContentFor
8
8
9
- def initialize ( settings :, fallback_color_scheme : nil , curated_color_schemes : [ ] , selected : false , saved : false )
9
+ def initialize (
10
+ settings :,
11
+ curated_color_schemes : [ ] ,
12
+ default_color_scheme : ColorScheme . cached_default ,
13
+ preview_color_scheme : nil ,
14
+ session_color_scheme : nil
15
+ )
10
16
@settings = settings
11
17
@color_scheme = settings . color_scheme
12
- @fallback_color_scheme = fallback_color_scheme
13
18
@curated_color_schemes = curated_color_schemes
14
- @selected = selected
15
- @saved = saved
19
+ @preview_color_scheme = preview_color_scheme
20
+ @session_color_scheme = session_color_scheme
21
+ @default_color_scheme = default_color_scheme
16
22
end
17
23
18
24
def view_template
@@ -21,9 +27,9 @@ def view_template
21
27
end
22
28
render Pages ::Header . new ( title : "Theme: Color" )
23
29
div ( class : "section-content container py-gap" ) do
24
- if @saved || @selected
30
+ if previewing? || preserving?
25
31
h3 do
26
- plain "You are now #{ @saved ? "using" : "previewing" } the"
32
+ plain "You are now #{ ( @color_scheme == @session_color_scheme ) ? "using" : "previewing" } the"
27
33
whitespace
28
34
span ( class : "emphasis" ) { @color_scheme . display_name }
29
35
whitespace
@@ -36,81 +42,102 @@ def view_template
36
42
p { "You can preview and save your desired color scheme for this site. We have curated some options for you below." }
37
43
38
44
div ( class : "flex items-center" ) do
39
- span ( class : "mr-2 text-small" ) { "Preview" }
40
-
41
- form_with ( model : @settings , url : url_for , method : :get ) do |f |
42
- fieldset do
43
- f . select (
44
- :color_scheme_id ,
45
- @curated_color_schemes . map { |cs | [ cs . display_name , cs . id ] } ,
46
- {
47
- prompt : "Pick one!" ,
48
- selected : @selected && @color_scheme . id
49
- } ,
50
- # requestSubmit and Turbo
51
- # https://stackoverflow.com/questions/68624668/how-can-i-submit-a-form-on-input-change-with-turbo-streams
52
- onchange : "this.form.requestSubmit()" ,
53
- class : "mr-2"
54
- )
55
- end
56
- end
45
+ preview_select
57
46
58
47
span ( class : "mr-2 text-small" ) { "OR" }
59
48
60
49
link_to "I feel lucky!" ,
61
50
settings_color_scheme_path ( settings : { color_scheme_id : @curated_color_schemes . sample . id } ) ,
62
51
class : "button secondary mr-2"
63
52
64
- if @selected && @color_scheme != @fallback_color_scheme
53
+ if previewing? && ( @color_scheme != ( @session_color_scheme || @default_color_scheme ) )
65
54
span ( class : "mr-2 text-small" ) { "OR" }
66
55
67
- button_to "Reset preview" ,
68
- settings_color_scheme_path ( settings : { color_scheme_id : @fallback_color_scheme . id } ) ,
69
- method : :patch ,
56
+ link_to "Reset preview" ,
57
+ settings_color_scheme_path ,
70
58
class : "button tertiary mr-2"
71
59
end
72
60
end
73
61
74
- if @selected
75
- div ( class : "flex items-center" ) do
76
- span ( class : "mr-2 text-small" ) { plain "Save" }
62
+ if previewing?
63
+ h3 { @preview_color_scheme . display_name }
64
+ p { "You are previewing #{ @preview_color_scheme . display_name } ." }
65
+ color_swatches ( @preview_color_scheme )
66
+ p do
67
+ plain "Click"
68
+ whitespace
69
+ span ( class : "emphasis" ) { "Save" }
70
+ whitespace
71
+ plain "to set #{ @preview_color_scheme . display_name } as your new color scheme."
72
+ end
73
+ save_preview_button
74
+ end
77
75
78
- button_to "Save this color scheme" ,
79
- settings_color_scheme_path ( settings : { color_scheme_id : @color_scheme . id } ) ,
80
- method : :patch ,
81
- class : "button primary mr-2"
76
+ if preserving?
77
+ h3 { @session_color_scheme . display_name }
78
+ p { "You have saved #{ @session_color_scheme . display_name } as your personal color scheme." }
79
+ color_swatches ( @session_color_scheme )
80
+ end
82
81
83
- span ( class : "mr-2 text-small" ) { unsafe_raw "•" }
82
+ h3 { @default_color_scheme . display_name }
83
+ p { "This is the default color scheme for this site." }
84
+ color_swatches ( @default_color_scheme )
85
+ if preserving?
86
+ p { "You can delete #{ @session_color_scheme . display_name } as your color scheme choice and go back to the default color scheme by clicking the Delete button below." }
87
+ unsave_button
88
+ end
89
+ end
90
+ end
84
91
85
- button_to "Reset to default" ,
86
- settings_color_scheme_path ( settings : { color_scheme_id : ColorScheme . cached_default . id } ) ,
87
- method : :patch ,
88
- class : "button tertiary mr-2"
89
- end
92
+ def preview_select
93
+ form_with ( model : @settings , url : url_for , method : :get ) do |f |
94
+ fieldset do
95
+ f . select (
96
+ :color_scheme_id ,
97
+ @curated_color_schemes . sort_by { |cs | cs . name } . map { |cs | [ cs . display_name , cs . id ] } ,
98
+ {
99
+ prompt : "Pick one!" ,
100
+ selected : previewing? && @color_scheme . id
101
+ } ,
102
+ # requestSubmit and Turbo
103
+ # https://stackoverflow.com/questions/68624668/how-can-i-submit-a-form-on-input-change-with-turbo-streams
104
+ onchange : "this.form.requestSubmit()" ,
105
+ class : "mr-2"
106
+ )
90
107
end
108
+ end
109
+ end
91
110
92
- h3 { display_name }
111
+ def save_preview_button
112
+ button_to "Save #{ @preview_color_scheme . display_name } " ,
113
+ settings_color_scheme_path ( settings : { color_scheme_id : @preview_color_scheme . id } ) ,
114
+ method : :patch ,
115
+ class : "button primary mr-2"
116
+ end
93
117
94
- div ( class : "color-scheme color-scheme__#{ @color_scheme . name . parameterize } " ) do
95
- @color_scheme . weights . each do |weight , color |
96
- div ( class : "color-swatch color-swatch__weight:#{ weight } " , style : "background-color: #{ color . hex } " ) do
97
- div ( class : "color-swatch__weight" ) { weight }
98
- div ( class : "color-swatch__color" ) { color . hex . delete ( "#" ) . upcase }
99
- end
118
+ def unsave_button
119
+ button_to "Delete my color scheme choice" ,
120
+ settings_color_scheme_path ( settings : { color_scheme_id : ColorScheme . cached_default . id } ) ,
121
+ method : :patch ,
122
+ class : "button warn mr-2"
123
+ end
124
+
125
+ def color_swatches ( color_scheme )
126
+ div ( class : "color-scheme color-scheme__#{ color_scheme . name . parameterize } " ) do
127
+ color_scheme . weights . each do |weight , color |
128
+ div ( class : "color-swatch color-swatch__weight:#{ weight } " , style : "background-color: #{ color . hex } " ) do
129
+ div ( class : "color-swatch__weight" ) { weight }
130
+ div ( class : "color-swatch__color" ) { color . hex . delete ( "#" ) . upcase }
100
131
end
101
132
end
102
133
end
103
134
end
104
135
105
136
private
106
137
107
- def default_color_scheme ? = @color_scheme . id == ColorScheme . cached_default . id
138
+ def previewing ? = @preview_color_scheme . present?
108
139
109
- def display_name
110
- if default_color_scheme?
111
- "#{ @color_scheme . display_name } (default)"
112
- else
113
- @color_scheme . display_name
114
- end
115
- end
140
+ def preserving? = @session_color_scheme . present?
141
+
142
+ def default_color_scheme? = @color_scheme . id == @default_color_scheme
116
143
end
0 commit comments