about summary refs log tree commit diff
path: root/app/lib
diff options
context:
space:
mode:
Diffstat (limited to 'app/lib')
-rw-r--r--app/lib/activitypub/activity.rb4
-rw-r--r--app/lib/extractor.rb2
-rw-r--r--app/lib/formatter.rb2
-rw-r--r--app/lib/ostatus/activity/base.rb2
-rw-r--r--app/lib/ostatus/atom_serializer.rb2
-rw-r--r--app/lib/provider_discovery.rb2
-rw-r--r--app/lib/request.rb2
-rw-r--r--app/lib/themes.rb43
-rw-r--r--app/lib/user_settings_decorator.rb13
9 files changed, 57 insertions, 15 deletions
diff --git a/app/lib/activitypub/activity.rb b/app/lib/activitypub/activity.rb
index 01144f595..820189d29 100644
--- a/app/lib/activitypub/activity.rb
+++ b/app/lib/activitypub/activity.rb
@@ -3,7 +3,7 @@
 class ActivityPub::Activity
   include JsonLdHelper
 
-  def initialize(json, account, options = {})
+  def initialize(json, account, **options)
     @json    = json
     @account = account
     @object  = @json['object']
@@ -15,7 +15,7 @@ class ActivityPub::Activity
   end
 
   class << self
-    def factory(json, account, options = {})
+    def factory(json, account, **options)
       @json = json
       klass&.new(json, account, options)
     end
diff --git a/app/lib/extractor.rb b/app/lib/extractor.rb
index 738ec89a0..479689d60 100644
--- a/app/lib/extractor.rb
+++ b/app/lib/extractor.rb
@@ -32,7 +32,7 @@ module Extractor
     possible_entries
   end
 
-  def extract_hashtags_with_indices(text, _options = {})
+  def extract_hashtags_with_indices(text, **)
     return [] unless text =~ /#/
 
     tags = []
diff --git a/app/lib/formatter.rb b/app/lib/formatter.rb
index 9d8bc52db..f5bf64cc7 100644
--- a/app/lib/formatter.rb
+++ b/app/lib/formatter.rb
@@ -9,7 +9,7 @@ class Formatter
 
   include ActionView::Helpers::TextHelper
 
-  def format(status, options = {})
+  def format(status, **options)
     if status.reblog?
       prepend_reblog = status.reblog.account.acct
       status         = status.proper
diff --git a/app/lib/ostatus/activity/base.rb b/app/lib/ostatus/activity/base.rb
index 8b27b124f..c5933f3ad 100644
--- a/app/lib/ostatus/activity/base.rb
+++ b/app/lib/ostatus/activity/base.rb
@@ -1,7 +1,7 @@
 # frozen_string_literal: true
 
 class OStatus::Activity::Base
-  def initialize(xml, account = nil, options = {})
+  def initialize(xml, account = nil, **options)
     @xml     = xml
     @account = account
     @options = options
diff --git a/app/lib/ostatus/atom_serializer.rb b/app/lib/ostatus/atom_serializer.rb
index 3ca6c5943..656e45822 100644
--- a/app/lib/ostatus/atom_serializer.rb
+++ b/app/lib/ostatus/atom_serializer.rb
@@ -319,7 +319,7 @@ class OStatus::AtomSerializer
 
   private
 
-  def append_element(parent, name, content = nil, attributes = {})
+  def append_element(parent, name, content = nil, **attributes)
     element = Ox::Element.new(name)
     attributes.each { |k, v| element[k] = sanitize_str(v) }
     element << sanitize_str(content) unless content.nil?
diff --git a/app/lib/provider_discovery.rb b/app/lib/provider_discovery.rb
index 5e02e6806..bcc4ed500 100644
--- a/app/lib/provider_discovery.rb
+++ b/app/lib/provider_discovery.rb
@@ -2,7 +2,7 @@
 
 class ProviderDiscovery < OEmbed::ProviderDiscovery
   class << self
-    def discover_provider(url, options = {})
+    def discover_provider(url, **options)
       res    = Request.new(:get, url).perform
       format = options[:format]
 
diff --git a/app/lib/request.rb b/app/lib/request.rb
index 30ea0e7ee..7671f4ffc 100644
--- a/app/lib/request.rb
+++ b/app/lib/request.rb
@@ -5,7 +5,7 @@ class Request
 
   include RoutingHelper
 
-  def initialize(verb, url, options = {})
+  def initialize(verb, url, **options)
     @verb    = verb
     @url     = Addressable::URI.parse(url).normalize
     @options = options
diff --git a/app/lib/themes.rb b/app/lib/themes.rb
index f7ec22fd2..863326e2d 100644
--- a/app/lib/themes.rb
+++ b/app/lib/themes.rb
@@ -7,22 +7,59 @@ class Themes
   include Singleton
 
   def initialize
+
+    core = YAML.load_file(Rails.root.join('app', 'javascript', 'core', 'theme.yml'))
+    core['pack'] = Hash.new unless core['pack']
+
     result = Hash.new
-    Dir.glob(Rails.root.join('app', 'javascript', 'themes', '*', 'theme.yml')) do |path|
+    Dir.glob(Rails.root.join('app', 'javascript', 'flavours', '*', 'theme.yml')) do |path|
       data = YAML.load_file(path)
       name = File.basename(File.dirname(path))
       if data['pack']
+        data['name'] = name
+        data['skin'] = { 'default' => [] }
         result[name] = data
       end
     end
+
+    Dir.glob(Rails.root.join('app', 'javascript', 'skins', '*', '*')) do |path|
+      ext = File.extname(path)
+      skin = File.basename(path)
+      name = File.basename(File.dirname(path))
+      if result[name]
+        if File.directory?(path)
+          pack = []
+          Dir.glob(File.join(path, '*.{css,scss}')) do |sheet|
+            pack.push(File.basename(sheet, File.extname(sheet)))
+          end
+        elsif ext.match(/^\.s?css$/i)
+          skin = File.basename(path, ext)
+          pack = ['common']
+        end
+        if skin != 'default'
+          result[name]['skin'][skin] = pack
+        end
+      end
+    end
+
+    @core = core
     @conf = result
+
+  end
+
+  def core
+    @core
   end
 
-  def get(name)
+  def flavour(name)
     @conf[name]
   end
 
-  def names
+  def flavours
     @conf.keys
   end
+
+  def skins_for(name)
+    @conf[name]['skin'].keys
+  end
 end
diff --git a/app/lib/user_settings_decorator.rb b/app/lib/user_settings_decorator.rb
index d86959c0b..8af384a2d 100644
--- a/app/lib/user_settings_decorator.rb
+++ b/app/lib/user_settings_decorator.rb
@@ -26,7 +26,8 @@ class UserSettingsDecorator
     user.settings['reduce_motion']       = reduce_motion_preference if change?('setting_reduce_motion')
     user.settings['system_font_ui']      = system_font_ui_preference if change?('setting_system_font_ui')
     user.settings['noindex']             = noindex_preference if change?('setting_noindex')
-    user.settings['theme']               = theme_preference if change?('setting_theme')
+    user.settings['flavour']             = flavour_preference if change?('setting_flavour')
+    user.settings['skin']                = skin_preference if change?('setting_skin')
   end
 
   def merged_notification_emails
@@ -73,10 +74,14 @@ class UserSettingsDecorator
     boolean_cast_setting 'setting_noindex'
   end
 
-  def theme_preference
-    settings['setting_theme']
+  def flavour_preference
+    settings['setting_flavour']
   end
-  
+
+  def skin_preference
+    settings['setting_skin']
+  end
+
   def boolean_cast_setting(key)
     settings[key] == '1'
   end