|
- require 'rake'
- require 'color'
- require_relative 'controls'
- require_relative 'page-color'
-
- module DHE
- SOURCE_DIR = '/panels'
- class PageWithoutAFile < Jekyll::Page
- def read_yaml(*)
- @data ||= {}
- end
- end
-
- class Generator < Jekyll::Generator
- include DHE::PageColor
-
- def generate(site)
- module_pages = site.pages.select {|page| page.url.start_with? SOURCE_DIR}
- module_pages.each do |module_page|
- site.pages += control_pages(module_page)
- site.pages << image_page(module_page)
- end
- end
-
- def control_page(module_page, control)
- page = PageWithoutAFile.new(module_page.site, __dir__, module_page.url.pathmap("%{^#{SOURCE_DIR},controls}X"), control.name.ext('svg'))
- page.data['layout'] = 'control'
- page.data['width'] = control.width
- page.data['height'] = control.height
- page.content = control.svg
- page
- end
-
- def control_pages(module_page)
- controls(module_page).map {|control| control_page(module_page, control)}
- end
-
- def controls(page)
- page.data['controls'].flat_map {|type, variants| send(type, page, variants)}
- end
-
- def image_page(module_page)
- page = PageWithoutAFile.new(module_page.site, __dir__, module_page.url.pathmap("%{^#{SOURCE_DIR},images}d"), module_page.name)
- page.data.merge!(module_page.data)
- page.data['draw_controls'] = true
- page.data['dark'] = dark(page)
- page.data['light'] = light(page)
- page.content = module_page.content
- page
- end
-
- def buttons(page, variants)
- variants.flat_map do |style|
- [:off, :on].map do |state|
- ButtonControl.new(style: style, state: state, dark: dark(page), light: light(page))
- end
- end
- end
-
- def ports(page, _)
- PortControl.new(metal_color: light(page), shadow_color: dark(page))
- end
-
- def knobs(page, _)
- KnobControl.new(knob_color: dark(page), pointer_color: light(page))
- end
-
- def switches(page, variants)
- variants.flat_map do |positions|
- states = [:high, :low]
- states << :mid if positions == 3
- states.map do |state|
- SwitchControl.new(positions: positions, state: state, dark: dark(page), light: light(page))
- end
- end
- end
- end
- end
|