86 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
			
		
		
	
	
			86 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Ruby
		
	
	
	
| 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
 | |
| 
 | |
|     # Returns the number of defined Themes
 | |
|     def self.count
 | |
|       THEMES.size
 | |
|     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
 | |
| 
 | |
|     # Get the Theme for the specified user, or the default
 | |
|     #
 | |
|     # user - User record
 | |
|     #
 | |
|     # Returns a Theme
 | |
|     def self.for_user(user)
 | |
|       if user
 | |
|         by_id(user.theme_id)
 | |
|       else
 | |
|         default
 | |
|       end
 | |
|     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
 |