]> cat aescling's git repositories - mastodon.git/blob - app/lib/themes.rb
Merge branch 'master' into glitch-soc/merge-upstream
[mastodon.git] / app / lib / themes.rb
1 # frozen_string_literal: true
2
3 require 'singleton'
4 require 'yaml'
5
6 class Themes
7 include Singleton
8
9 def initialize
10
11 core = YAML.load_file(Rails.root.join('app', 'javascript', 'core', 'theme.yml'))
12 core['pack'] = Hash.new unless core['pack']
13
14 result = Hash.new
15 Dir.glob(Rails.root.join('app', 'javascript', 'flavours', '*', 'theme.yml')) do |path|
16 data = YAML.load_file(path)
17 dir = File.dirname(path)
18 name = File.basename(dir)
19 locales = []
20 screenshots = []
21 if data['locales']
22 Dir.glob(File.join(dir, data['locales'], '*.{js,json}')) do |locale|
23 localeName = File.basename(locale, File.extname(locale))
24 locales.push(localeName) unless localeName.match(/defaultMessages|whitelist|index/)
25 end
26 end
27 if data['screenshot']
28 if data['screenshot'].is_a? Array
29 screenshots = data['screenshot']
30 else
31 screenshots.push(data['screenshot'])
32 end
33 end
34 if data['pack']
35 data['name'] = name
36 data['locales'] = locales
37 data['screenshot'] = screenshots
38 data['skin'] = { 'default' => [] }
39 result[name] = data
40 end
41 end
42
43 Dir.glob(Rails.root.join('app', 'javascript', 'skins', '*', '*')) do |path|
44 ext = File.extname(path)
45 skin = File.basename(path)
46 name = File.basename(File.dirname(path))
47 if result[name]
48 if File.directory?(path)
49 pack = []
50 Dir.glob(File.join(path, '*.{css,scss}')) do |sheet|
51 pack.push(File.basename(sheet, File.extname(sheet)))
52 end
53 elsif ext.match(/^\.s?css$/i)
54 skin = File.basename(path, ext)
55 pack = ['common']
56 end
57 if skin != 'default'
58 result[name]['skin'][skin] = pack
59 end
60 end
61 end
62
63 @core = core
64 @conf = result
65
66 end
67
68 def core
69 @core
70 end
71
72 def flavour(name)
73 @conf[name]
74 end
75
76 def flavours
77 @conf.keys
78 end
79
80 def skins_for(name)
81 @conf[name]['skin'].keys
82 end
83
84 def flavours_and_skins
85 flavours.map do |flavour|
86 [flavour, skins_for(flavour).map{ |skin| [flavour, skin] }]
87 end
88 end
89 end
This page took 0.127057 seconds and 4 git commands to generate.