@@ -13,32 +13,42 @@ class SpritesCLI < Thor
1313 desc 'generate [--verbose]' , 'Generate the documentation icon spritesheets'
1414 option :verbose , type : :boolean
1515 def generate
16- icons = get_icons
17- icons_per_row = Math . sqrt ( icons . length ) . ceil
16+ items = get_items
17+ items_with_icons = items . select { |item | item [ :has_icons ] }
18+ items_without_icons = items . select { |item | !item [ :has_icons ] }
19+ icons_per_row = Math . sqrt ( items_with_icons . length ) . ceil
1820
1921 bg_color = get_sidebar_background
2022
21- icons . each_with_index do |icon , index |
22- icon [ :row ] = ( index / icons_per_row ) . floor
23- icon [ :col ] = index - icon [ :row ] * icons_per_row
23+ items_with_icons . each_with_index do |item , index |
24+ if item [ :has_icons ]
25+ item [ :row ] = ( index / icons_per_row ) . floor
26+ item [ :col ] = index - item [ :row ] * icons_per_row
2427
25- icon [ :icon_16 ] = get_icon ( icon [ :path_16 ] , 16 )
26- icon [ :icon_32 ] = get_icon ( icon [ :path_32 ] , 32 )
28+ item [ :icon_16 ] = get_icon ( item [ :path_16 ] , 16 )
29+ item [ :icon_32 ] = get_icon ( item [ :path_32 ] , 32 )
2730
28- icon [ :dark_icon_fix ] = needs_dark_icon_fix ( icon [ :icon_32 ] , bg_color )
31+ item [ :dark_icon_fix ] = needs_dark_icon_fix ( item [ :icon_32 ] , bg_color )
32+ end
2933 end
3034
31- log_details ( icons , icons_per_row )
35+ generate_spritesheet ( 16 , items_with_icons , 'assets/images/sprites/docs.png' ) { |item | item [ :icon_16 ] }
36+ generate_spritesheet ( 32 , items_with_icons , 'assets/images/sprites/docs@2x.png' ) { |item | item [ :icon_32 ] }
3237
33- generate_spritesheet ( 16 , icons , 'assets/images/sprites/docs.png' ) { |icon | icon [ :icon_16 ] }
34- generate_spritesheet ( 32 , icons , 'assets/images/sprites/docs@2x.png' ) { |icon | icon [ :icon_32 ] }
38+ # Add Mongoose's icon details to docs without custom icons
39+ template_item = items_with_icons . find { |item | item [ :type ] == 'mongoose' }
40+ items_without_icons . each do |item |
41+ item [ :row ] = template_item [ :row ]
42+ item [ :col ] = template_item [ :col ]
43+ item [ :dark_icon_fix ] = template_item [ :dark_icon_fix ]
44+ end
3545
36- save_manifest ( icons , icons_per_row , 'assets/images/sprites/docs.json' )
46+ save_manifest ( items , icons_per_row , 'assets/images/sprites/docs.json' )
3747 end
3848
3949 private
4050
41- def get_icons
51+ def get_items
4252 items = Docs . all . map do |doc |
4353 base_path = "public/icons/docs/#{ doc . slug } "
4454 {
@@ -50,7 +60,10 @@ class SpritesCLI < Thor
5060
5161 # Checking paths against an array of possible paths is faster than 200+ File.exist? calls
5262 files = Dir . glob ( 'public/icons/docs/**/*.png' )
53- items . select { |item | files . include? ( item [ :path_16 ] ) && files . include? ( item [ :path_32 ] ) }
63+ items . map do |item |
64+ item [ :has_icons ] = files . include? ( item [ :path_16 ] ) && files . include? ( item [ :path_32 ] )
65+ item
66+ end
5467 end
5568
5669 def get_icon ( path , max_size )
0 commit comments