From 844d72716e2175dcd5e39b4d1eecb9e3560aa0b9 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Fri, 5 Jun 2015 15:50:36 -0400 Subject: Add Gitlab::Themes module; remove Gitlab::Theme Now we can simply loop through all themes, among other things. This also removes the `dark_theme` / `light_theme` classes and the `theme_type` helper, since they weren't used anywhere. --- lib/gitlab/themes.rb | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100644 lib/gitlab/themes.rb (limited to 'lib/gitlab/themes.rb') diff --git a/lib/gitlab/themes.rb b/lib/gitlab/themes.rb new file mode 100644 index 00000000000..5209df92795 --- /dev/null +++ b/lib/gitlab/themes.rb @@ -0,0 +1,67 @@ +module Gitlab + # Module containing GitLab's application theme definitions and helper methods + # for accessing them. + module Themes + # Theme ID used when no `default_theme` configuration setting is provided. + APPLICATION_DEFAULT = 2 + + # Struct class representing a single Theme + Theme = Struct.new(:id, :name, :css_class) + + # All available Themes + THEMES = [ + Theme.new(1, 'Graphite', 'ui_graphite'), + Theme.new(2, 'Charcoal', 'ui_charcoal'), + Theme.new(3, 'Green', 'ui_green'), + Theme.new(4, 'Gray', 'ui_gray'), + Theme.new(5, 'Violet', 'ui_violet'), + Theme.new(6, 'Blue', 'ui_blue') + ].freeze + + # Convenience method to get a space-separated String of all the theme + # classes that might be applied to the `body` element + # + # Returns a String + def self.body_classes + THEMES.collect(&:css_class).uniq.join(' ') + end + + # Get a Theme by its ID + # + # If the ID is invalid, returns the default Theme. + # + # id - Integer ID + # + # Returns a Theme + def self.by_id(id) + THEMES.detect { |t| t.id == id } || default + end + + # Get the default Theme + # + # Returns a Theme + def self.default + by_id(default_id) + end + + # Iterate through each Theme + # + # Yields the Theme object + def self.each(&block) + THEMES.each(&block) + end + + private + + def self.default_id + id = Gitlab.config.gitlab.default_theme.to_i + + # Prevent an invalid configuration setting from causing an infinite loop + if id < THEMES.first.id || id > THEMES.last.id + APPLICATION_DEFAULT + else + id + end + end + end +end -- cgit v1.2.3