Skip to content

Commit 6861e2f

Browse files
committed
Handle docs without custom icons properly
1 parent 90123a3 commit 6861e2f

1 file changed

Lines changed: 27 additions & 14 deletions

File tree

lib/tasks/sprites.thor

Lines changed: 27 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)