keystone_ui-preferences 0.6.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +163 -3
- data/app/controllers/concerns/keystone_ui/preferences/component_preferences.rb +36 -1
- data/app/javascript/keystone_ui/preferences/theme_settings_controller.js +84 -0
- data/app/models/keystone_ui/preferences/appearance_choice.rb +172 -0
- data/app/models/keystone_ui/preferences/checked_theme.rb +109 -0
- data/app/models/keystone_ui/preferences/chosen_colours.rb +44 -0
- data/app/models/keystone_ui/preferences/layout_choice.rb +6 -2
- data/app/models/keystone_ui/preferences/pick_account_appearance.rb +64 -0
- data/app/models/keystone_ui/preferences/pick_appearance.rb +90 -0
- data/app/models/keystone_ui/preferences/sent_theme.rb +49 -0
- data/app/models/keystone_ui/preferences/theme_css.rb +89 -0
- data/app/models/keystone_ui/preferences/theme_reader.rb +34 -0
- data/app/models/keystone_ui/preferences/theme_roles.rb +64 -0
- data/app/views/keystone_ui/preferences/settings/_account_appearance.html.erb +41 -0
- data/app/views/keystone_ui/preferences/settings/_appearance.html.erb +40 -0
- data/app/views/keystone_ui/preferences/settings/_colour_choices.html.erb +95 -0
- data/app/views/keystone_ui/preferences/settings/_look_choices.html.erb +8 -0
- data/app/views/keystone_ui/preferences/settings/_theme_settings.html.erb +17 -0
- data/lib/generators/keystone_ui/preferences/install/install_generator.rb +6 -1
- data/lib/generators/keystone_ui/preferences/update/templates/copy_keystone_ui_colors_theme_preferences.rb.erb +55 -0
- data/lib/generators/keystone_ui/preferences/update/update_generator.rb +15 -1
- data/lib/keystone_ui/preferences/colors_check.rb +22 -0
- data/lib/keystone_ui/preferences/configuration.rb +11 -1
- data/lib/keystone_ui/preferences/engine.rb +24 -0
- data/lib/keystone_ui/preferences/version.rb +1 -1
- data/lib/keystone_ui/preferences.rb +1 -0
- metadata +48 -3
|
@@ -11,7 +11,7 @@ module KeystoneUi
|
|
|
11
11
|
|
|
12
12
|
source_root File.expand_path("templates", __dir__)
|
|
13
13
|
|
|
14
|
-
desc "Installs KeystoneUi::Preferences: copies its migration."
|
|
14
|
+
desc "Installs KeystoneUi::Preferences: copies its migration and its template picker script."
|
|
15
15
|
|
|
16
16
|
def copy_migration
|
|
17
17
|
migration_template(
|
|
@@ -19,6 +19,11 @@ module KeystoneUi
|
|
|
19
19
|
"db/migrate/create_keystone_ui_preferences_component_preferences.rb"
|
|
20
20
|
)
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
def copy_template_picker_script
|
|
24
|
+
script = File.expand_path("../../../../../app/javascript/keystone_ui/preferences/theme_settings_controller.js", __dir__)
|
|
25
|
+
create_file "app/javascript/controllers/keystone_ui/preferences/theme_settings_controller.js", File.read(script)
|
|
26
|
+
end
|
|
22
27
|
end
|
|
23
28
|
end
|
|
24
29
|
end
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
class CopyKeystoneUiColorsThemePreferences < ActiveRecord::Migration[<%= ActiveRecord::Migration.current_version %>]
|
|
2
|
+
class ThemePreference < ActiveRecord::Base
|
|
3
|
+
self.table_name = "keystone_ui_colors_theme_preferences"
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
class ComponentPreference < ActiveRecord::Base
|
|
7
|
+
self.table_name = "keystone_ui_preferences_component_preferences"
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
def up
|
|
11
|
+
return unless table_exists?(:keystone_ui_colors_theme_preferences)
|
|
12
|
+
|
|
13
|
+
ThemePreference.find_in_batches do |theme_preferences|
|
|
14
|
+
rows = theme_preferences.flat_map { |theme_preference| [ colours(theme_preference), mode(theme_preference), look(theme_preference) ].compact }
|
|
15
|
+
saved = saved_keys(theme_preferences)
|
|
16
|
+
missing = rows.reject { |row| saved.include?(row.values_at(:owner_type, :owner_id, :component_key)) }
|
|
17
|
+
ComponentPreference.insert_all(missing) if missing.any?
|
|
18
|
+
missing.each { |row| Rails.cache.delete([ "keystone_ui_preferences", *row.values_at(:owner_type, :owner_id, :component_key) ].join("/")) }
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
private
|
|
23
|
+
|
|
24
|
+
def saved_keys(theme_preferences)
|
|
25
|
+
theme_preferences.group_by(&:owner_type).flat_map do |owner_type, owned|
|
|
26
|
+
ComponentPreference.where(owner_type: owner_type, owner_id: owned.map(&:owner_id), component_key: %w[colours mode look]).pluck(:owner_type, :owner_id, :component_key)
|
|
27
|
+
end.to_set
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def colours(theme_preference)
|
|
31
|
+
row(theme_preference, "colours", colours_value(theme_preference), members_choose: theme_preference.members_choose)
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
def mode(theme_preference)
|
|
35
|
+
return nil if theme_preference.mode.blank?
|
|
36
|
+
|
|
37
|
+
row(theme_preference, "mode", { "mode" => theme_preference.mode })
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
def look(theme_preference)
|
|
41
|
+
return nil if theme_preference.look.blank? && theme_preference.members_choose_look
|
|
42
|
+
|
|
43
|
+
row(theme_preference, "look", { "look" => theme_preference.look.presence }.compact, members_choose: theme_preference.members_choose_look)
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
def colours_value(theme_preference)
|
|
47
|
+
return { "template_name" => theme_preference.template_name } if theme_preference.template_name.present?
|
|
48
|
+
|
|
49
|
+
{ "accent" => theme_preference.accent, "surface" => theme_preference.surface, "text" => theme_preference.text }
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
def row(theme_preference, component_key, value, members_choose: true)
|
|
53
|
+
{ owner_type: theme_preference.owner_type, owner_id: theme_preference.owner_id, component_key: component_key, value: value, members_choose: members_choose }
|
|
54
|
+
end
|
|
55
|
+
end
|
|
@@ -11,7 +11,7 @@ module KeystoneUi
|
|
|
11
11
|
|
|
12
12
|
source_root File.expand_path("templates", __dir__)
|
|
13
13
|
|
|
14
|
-
desc "Updates KeystoneUi::Preferences: copies migrations added since it was installed."
|
|
14
|
+
desc "Updates KeystoneUi::Preferences: copies migrations added since it was installed and the template picker script when the app has none."
|
|
15
15
|
|
|
16
16
|
def copy_remove_extra_owner_index_migration
|
|
17
17
|
migration_template(
|
|
@@ -19,6 +19,20 @@ module KeystoneUi
|
|
|
19
19
|
"db/migrate/remove_extra_owner_index_from_keystone_ui_preferences_component_preferences.rb"
|
|
20
20
|
)
|
|
21
21
|
end
|
|
22
|
+
|
|
23
|
+
def copy_keystone_ui_colors_theme_preferences_migration
|
|
24
|
+
migration_template(
|
|
25
|
+
"copy_keystone_ui_colors_theme_preferences.rb.erb",
|
|
26
|
+
"db/migrate/copy_keystone_ui_colors_theme_preferences.rb"
|
|
27
|
+
)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def copy_template_picker_script
|
|
31
|
+
copy = "app/javascript/controllers/keystone_ui/preferences/theme_settings_controller.js"
|
|
32
|
+
return if File.exist?(File.join(destination_root, copy))
|
|
33
|
+
|
|
34
|
+
create_file copy, File.read(File.expand_path("../../../../../app/javascript/keystone_ui/preferences/theme_settings_controller.js", __dir__))
|
|
35
|
+
end
|
|
22
36
|
end
|
|
23
37
|
end
|
|
24
38
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module KeystoneUi
|
|
4
|
+
module Preferences
|
|
5
|
+
class ColorsCheck
|
|
6
|
+
class Error < StandardError; end
|
|
7
|
+
|
|
8
|
+
MESSAGE = "keystone_ui-preferences and keystone_ui-colors both save colours, modes and looks, so the app cannot load both. " \
|
|
9
|
+
"Remove keystone_ui-colors from the Gemfile and change every KeystoneUi::Colors name the app uses first, " \
|
|
10
|
+
"then run bin/rails generate keystone_ui:preferences:update, so the migration copying keystone_ui-colors' saved choices is in db/migrate, " \
|
|
11
|
+
"and then run bin/rails db:migrate."
|
|
12
|
+
|
|
13
|
+
def initialize(colors_loaded:)
|
|
14
|
+
@colors_loaded = colors_loaded
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def call
|
|
18
|
+
raise Error, MESSAGE if @colors_loaded
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -3,13 +3,23 @@
|
|
|
3
3
|
module KeystoneUi
|
|
4
4
|
module Preferences
|
|
5
5
|
class Configuration
|
|
6
|
-
attr_accessor :current_owner_method, :authentication_method, :current_account_method, :max_value_bytes
|
|
6
|
+
attr_accessor :current_owner_method, :authentication_method, :current_account_method, :max_value_bytes, :default_accent, :default_surface, :default_background, :default_text, :default_mode, :user_looks, :app_look_label, :account_colors, :account_looks, :theme_fonts
|
|
7
7
|
|
|
8
8
|
def initialize
|
|
9
9
|
@current_owner_method = :current_user
|
|
10
10
|
@authentication_method = :authenticate_user!
|
|
11
11
|
@component_names = {}
|
|
12
12
|
@max_value_bytes = 10_000
|
|
13
|
+
@default_accent = "blue"
|
|
14
|
+
@default_surface = "zinc"
|
|
15
|
+
@default_background = "#ffffff"
|
|
16
|
+
@default_text = "#18181b"
|
|
17
|
+
@default_mode = "light"
|
|
18
|
+
@user_looks = true
|
|
19
|
+
@app_look_label = "Classic"
|
|
20
|
+
@account_colors = true
|
|
21
|
+
@account_looks = true
|
|
22
|
+
@theme_fonts = []
|
|
13
23
|
end
|
|
14
24
|
|
|
15
25
|
def name_component(component_key, name)
|
|
@@ -1,10 +1,20 @@
|
|
|
1
1
|
# frozen_string_literal: true
|
|
2
2
|
|
|
3
|
+
require "keystone_ui/preferences/colors_check"
|
|
4
|
+
|
|
3
5
|
module KeystoneUi
|
|
4
6
|
module Preferences
|
|
5
7
|
class Engine < ::Rails::Engine
|
|
6
8
|
isolate_namespace KeystoneUi::Preferences
|
|
7
9
|
|
|
10
|
+
def self.check_colors
|
|
11
|
+
KeystoneUi::Preferences::ColorsCheck.new(colors_loaded: KeystoneUi.const_defined?(:Colors, false)).call
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
config.after_initialize do
|
|
15
|
+
KeystoneUi::Preferences::Engine.check_colors
|
|
16
|
+
end
|
|
17
|
+
|
|
8
18
|
initializer "keystone_ui.preferences.supplier" do
|
|
9
19
|
KeystoneUi.configure do |config|
|
|
10
20
|
config.preference_supplier = lambda do |view, component_key|
|
|
@@ -12,6 +22,20 @@ module KeystoneUi
|
|
|
12
22
|
end
|
|
13
23
|
end
|
|
14
24
|
end
|
|
25
|
+
|
|
26
|
+
initializer "keystone_ui.preferences.theme_mode" do
|
|
27
|
+
KeystoneUi.configure do |config|
|
|
28
|
+
config.theme_mode_supplier = lambda do |view|
|
|
29
|
+
view.respond_to?(:keystone_theme_mode) ? view.keystone_theme_mode : KeystoneUi::Preferences.configuration.default_mode
|
|
30
|
+
end
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
initializer "keystone_ui.preferences.look" do
|
|
35
|
+
KeystoneUi.configure do |config|
|
|
36
|
+
config.look_supplier = ->(view) { view.keystone_look if view.respond_to?(:keystone_look) }
|
|
37
|
+
end
|
|
38
|
+
end
|
|
15
39
|
end
|
|
16
40
|
end
|
|
17
41
|
end
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: keystone_ui-preferences
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.8.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Tyler Schneider
|
|
@@ -15,14 +15,42 @@ dependencies:
|
|
|
15
15
|
requirements:
|
|
16
16
|
- - ">="
|
|
17
17
|
- !ruby/object:Gem::Version
|
|
18
|
-
version: 0.
|
|
18
|
+
version: 0.43.0
|
|
19
19
|
type: :runtime
|
|
20
20
|
prerelease: false
|
|
21
21
|
version_requirements: !ruby/object:Gem::Requirement
|
|
22
22
|
requirements:
|
|
23
23
|
- - ">="
|
|
24
24
|
- !ruby/object:Gem::Version
|
|
25
|
-
version: 0.
|
|
25
|
+
version: 0.43.0
|
|
26
|
+
- !ruby/object:Gem::Dependency
|
|
27
|
+
name: keystone_ui-looks
|
|
28
|
+
requirement: !ruby/object:Gem::Requirement
|
|
29
|
+
requirements:
|
|
30
|
+
- - ">="
|
|
31
|
+
- !ruby/object:Gem::Version
|
|
32
|
+
version: 0.4.0
|
|
33
|
+
type: :runtime
|
|
34
|
+
prerelease: false
|
|
35
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
36
|
+
requirements:
|
|
37
|
+
- - ">="
|
|
38
|
+
- !ruby/object:Gem::Version
|
|
39
|
+
version: 0.4.0
|
|
40
|
+
- !ruby/object:Gem::Dependency
|
|
41
|
+
name: keystone_ui-styles
|
|
42
|
+
requirement: !ruby/object:Gem::Requirement
|
|
43
|
+
requirements:
|
|
44
|
+
- - ">="
|
|
45
|
+
- !ruby/object:Gem::Version
|
|
46
|
+
version: 0.18.0
|
|
47
|
+
type: :runtime
|
|
48
|
+
prerelease: false
|
|
49
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
50
|
+
requirements:
|
|
51
|
+
- - ">="
|
|
52
|
+
- !ruby/object:Gem::Version
|
|
53
|
+
version: 0.18.0
|
|
26
54
|
- !ruby/object:Gem::Dependency
|
|
27
55
|
name: railties
|
|
28
56
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -79,25 +107,42 @@ files:
|
|
|
79
107
|
- app/controllers/concerns/keystone_ui/preferences/component_preferences.rb
|
|
80
108
|
- app/controllers/keystone_ui/preferences/application_controller.rb
|
|
81
109
|
- app/controllers/keystone_ui/preferences/component_preferences_controller.rb
|
|
110
|
+
- app/javascript/keystone_ui/preferences/theme_settings_controller.js
|
|
111
|
+
- app/models/keystone_ui/preferences/appearance_choice.rb
|
|
82
112
|
- app/models/keystone_ui/preferences/application_record.rb
|
|
113
|
+
- app/models/keystone_ui/preferences/checked_theme.rb
|
|
114
|
+
- app/models/keystone_ui/preferences/chosen_colours.rb
|
|
83
115
|
- app/models/keystone_ui/preferences/component_preference.rb
|
|
84
116
|
- app/models/keystone_ui/preferences/kept.rb
|
|
85
117
|
- app/models/keystone_ui/preferences/layout_choice.rb
|
|
86
118
|
- app/models/keystone_ui/preferences/navigation_arrangement.rb
|
|
119
|
+
- app/models/keystone_ui/preferences/pick_account_appearance.rb
|
|
87
120
|
- app/models/keystone_ui/preferences/pick_account_layouts.rb
|
|
121
|
+
- app/models/keystone_ui/preferences/pick_appearance.rb
|
|
88
122
|
- app/models/keystone_ui/preferences/pick_navigation_order.rb
|
|
89
123
|
- app/models/keystone_ui/preferences/pick_navigation_placement.rb
|
|
90
124
|
- app/models/keystone_ui/preferences/refusal.rb
|
|
125
|
+
- app/models/keystone_ui/preferences/sent_theme.rb
|
|
126
|
+
- app/models/keystone_ui/preferences/theme_css.rb
|
|
127
|
+
- app/models/keystone_ui/preferences/theme_reader.rb
|
|
128
|
+
- app/models/keystone_ui/preferences/theme_roles.rb
|
|
129
|
+
- app/views/keystone_ui/preferences/settings/_account_appearance.html.erb
|
|
91
130
|
- app/views/keystone_ui/preferences/settings/_account_layouts.html.erb
|
|
131
|
+
- app/views/keystone_ui/preferences/settings/_appearance.html.erb
|
|
132
|
+
- app/views/keystone_ui/preferences/settings/_colour_choices.html.erb
|
|
133
|
+
- app/views/keystone_ui/preferences/settings/_look_choices.html.erb
|
|
92
134
|
- app/views/keystone_ui/preferences/settings/_navigation_order.html.erb
|
|
93
135
|
- app/views/keystone_ui/preferences/settings/_navigation_placement.html.erb
|
|
136
|
+
- app/views/keystone_ui/preferences/settings/_theme_settings.html.erb
|
|
94
137
|
- config/routes.rb
|
|
95
138
|
- lib/generators/keystone_ui/preferences/install/install_generator.rb
|
|
96
139
|
- lib/generators/keystone_ui/preferences/install/templates/create_keystone_ui_preferences_component_preferences.rb.erb
|
|
140
|
+
- lib/generators/keystone_ui/preferences/update/templates/copy_keystone_ui_colors_theme_preferences.rb.erb
|
|
97
141
|
- lib/generators/keystone_ui/preferences/update/templates/remove_extra_owner_index_from_keystone_ui_preferences_component_preferences.rb.erb
|
|
98
142
|
- lib/generators/keystone_ui/preferences/update/update_generator.rb
|
|
99
143
|
- lib/keystone_ui-preferences.rb
|
|
100
144
|
- lib/keystone_ui/preferences.rb
|
|
145
|
+
- lib/keystone_ui/preferences/colors_check.rb
|
|
101
146
|
- lib/keystone_ui/preferences/configuration.rb
|
|
102
147
|
- lib/keystone_ui/preferences/engine.rb
|
|
103
148
|
- lib/keystone_ui/preferences/version.rb
|