diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/guff/models/page.cr | 37 | ||||
-rw-r--r-- | src/guff/models/theme.cr | 6 | ||||
-rw-r--r-- | src/guff/views/page.cr | 26 |
3 files changed, 56 insertions, 13 deletions
diff --git a/src/guff/models/page.cr b/src/guff/models/page.cr index 0ce8d5b..e85c484 100644 --- a/src/guff/models/page.cr +++ b/src/guff/models/page.cr @@ -97,6 +97,19 @@ class Guff::Models::PageModel < Guff::Models::Model WHERE a.post_id = ? ", + + assets: " + SELECT b.name AS type_name, + a.path + + FROM page_assets a + JOIN asset_types b + ON (b.type_id = a.type_id) + + WHERE a.post_id = ? + + ORDER BY b.name, a.sort_order + ", } LIMIT = 50 @@ -210,4 +223,28 @@ class Guff::Models::PageModel < Guff::Models::Model def get(post_id : Int64) @context.dbs.ro.row(SQL[:get], [post_id.to_s]).not_nil! end + + def assets(post_id : Int64) : Theme::Assets + r = Theme::Assets.new + r.styles = [] of String + r.scripts = [] of String + + # get theme assets + @context.dbs.ro.all(SQL[:assets], [post_id.to_s]) do |row| + key, val = %w{type_name path}.map { |k| row[k].to_s } + + case key + when "style" + r.styles << val + when "script" + r.scripts << val + else + # never reached + raise "Unknown asset type: #{key}" + end + end + + # return results + r + end end diff --git a/src/guff/models/theme.cr b/src/guff/models/theme.cr index 9639adf..275ddff 100644 --- a/src/guff/models/theme.cr +++ b/src/guff/models/theme.cr @@ -93,7 +93,7 @@ class Guff::Models::ThemeModel < Guff::Models::Model sort_order ) VALUES ( (SELECT file_id FROM theme_files WHERE theme_id = ? AND file_path = ?), - (SELECT type_id FROM theme_asset_types WHERE name = ?), + (SELECT type_id FROM asset_types WHERE name = ?), ? ) ", @@ -116,8 +116,8 @@ class Guff::Models::ThemeModel < Guff::Models::Model FROM theme_files a JOIN theme_assets b ON (b.file_id = a.file_id) - JOIN theme_asset_types c - ON (b.type_id = a.type_id) + JOIN asset_types c + ON (c.type_id = b.type_id) WHERE a.theme_id = ? diff --git a/src/guff/views/page.cr b/src/guff/views/page.cr index 262f30c..95f91bd 100644 --- a/src/guff/views/page.cr +++ b/src/guff/views/page.cr @@ -9,24 +9,30 @@ class Guff::Views::PageView < Guff::Views::HTMLView # get theme slug @theme_slug = @context.models.theme.get(@theme_id)["theme_slug"] as String + + # get theme assets + @theme_assets = @context.models.theme.assets(@theme_id) as Theme::Assets + + # get page assets + @page_assets = @context.models.page.assets(@item["post_id"].to_i64) as Theme::Assets end private def scripts - super(theme_assets.scripts.map { |val| - "/guff/themes/%s/%s" % [@theme_slug, val] - }) - # TODO: allow page-specific scripts + super(@theme_assets.scripts.map { |val| + theme_asset_path(val) + } + @page_assets.scripts) end private def styles - super(theme_assets.styles.map { |val| - "/guff/themes/%s/%s" % [@theme_slug, val] - }) - # TODO: allow page-specific styles + super(@theme_assets.styles.map { |val| + theme_asset_path(val) + } + @page_assets.styles) end - private def theme_assets - @context.models.theme.assets(@theme_id) + THEME_ASSET_PATH = "/guff/themes/%s/%s" + + private def theme_asset_path(asset_path : String) + THEME_ASSET_PATH % [@theme_slug, asset_path] end ECR.def_to_s("src/views/page.ecr") |