diff --git a/lib/tasks/icons.rake b/lib/tasks/icons.rake index 7ab747fa56..92306e9561 100644 --- a/lib/tasks/icons.rake +++ b/lib/tasks/icons.rake @@ -18,29 +18,39 @@ def download_material_icon(icon, weight: 400, filled: false, size: 20) end def find_used_icons - icons = Set.new + icons_by_weight_and_size = {} - Dir[Rails.root.join('app', 'javascript', '**', '*.*sx')].map do |path| + Dir[Rails.root.join('app', 'javascript', '**', '*.*s*')].map do |path| File.open(path, 'r') do |file| - pattern = %r{\Aimport .* from '@material-symbols/svg-600/outlined/(?[^-]*)(?-fill)?.svg';} + pattern = %r{\Aimport .* from 'mastodon/../material-icons/(?[0-9]+)-(?[0-9]+)px/(?[^-]*)(?-fill)?.svg';} file.each_line do |line| match = pattern.match(line) next if match.blank? - icons << match['icon'] + weight = match['weight'].to_i + size = match['size'].to_i + + icons_by_weight_and_size[weight] ||= {} + icons_by_weight_and_size[weight][size] ||= Set.new + + icons_by_weight_and_size[weight][size] << match['icon'] end end end - icons + icons_by_weight_and_size end namespace :icons do desc 'Download used Material Symbols icons' task download: :environment do - find_used_icons.each do |icon| - download_material_icon(icon) - download_material_icon(icon, filled: true) + find_used_icons.each do |weight, icons_by_size| + icons_by_size.each do |size, icons| + icons.each do |icon| + download_material_icon(icon, weight: weight, size: size) + download_material_icon(icon, weight: weight, size: size, filled: true) + end + end end end end