class Spina::Theme

Attributes

config[RW]
custom_pages[RW]
layout_parts[RW]
name[RW]
navigations[RW]
page_parts[RW]
parts[RW]
plugins[RW]
public_theme[RW]
resources[RW]
structures[RW]
title[RW]
view_templates[RW]

Public Class Methods

all() click to toggle source
# File lib/spina/theme.rb, line 8
def all
  ::Spina::THEMES
end
find_by_name(name) click to toggle source
# File lib/spina/theme.rb, line 12
def find_by_name(name)
  all.find { |theme| theme.name == name }
end
new() click to toggle source
# File lib/spina/theme.rb, line 28
def initialize
  @page_parts       = []
  @structures       = []
  @layout_parts     = []
  @view_templates   = []
  @custom_pages     = []
  @navigations      = []
  @resources        = []
  @public_theme = false
end
register() { |theme| ... } click to toggle source
# File lib/spina/theme.rb, line 16
def register
  theme = ::Spina::Theme.new
  yield theme
  raise 'Missing theme name' if theme.name.nil?
  if theme.plugins.nil?
    theme.plugins = ::Spina::Plugin.all.map { |plugin| plugin.name }
  end
  all << theme
end

Public Instance Methods

is_custom_undeletable_page?(view_template_name) click to toggle source

Check if view_template is defined as a custom undeletable page

# File lib/spina/theme.rb, line 57
def is_custom_undeletable_page?(view_template_name)
  @custom_pages.any? { |page| page[:view_template] == view_template_name && !page[:deletable] }
end
new_page_templates(resource: nil) click to toggle source
# File lib/spina/theme.rb, line 39
def new_page_templates(resource: nil)
  page_collection = resource&.name || "main"
  @view_templates.map do |view_template|
    next if is_custom_undeletable_page?(view_template[:name])
    next if view_template[:exclude_from]&.include?(page_collection)
    
    OpenStruct.new({
      name: view_template[:name],
      title: view_template[:title],
      description: view_template[:description],
      recommended: view_template[:name] == resource&.view_template
    })
  end.compact.sort_by do |page_template|
    [page_template.recommended ? 0 : 1]
  end
end