aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorPaul Duncan <pabs@pablotron.org>2016-07-27 09:28:50 -0400
committerPaul Duncan <pabs@pablotron.org>2016-07-27 09:28:50 -0400
commit8ffde2e23c21ccae81f34c34ef115993719d34eb (patch)
tree1def5a3535ae031d7488ac7beed7e70a67e46ea8 /src
parent34395459bbc90809c459ea348775f66fb20d3604 (diff)
downloadguff-8ffde2e23c21ccae81f34c34ef115993719d34eb.tar.bz2
guff-8ffde2e23c21ccae81f34c34ef115993719d34eb.zip
add page assets
Diffstat (limited to 'src')
-rw-r--r--src/guff/models/page.cr37
-rw-r--r--src/guff/models/theme.cr6
-rw-r--r--src/guff/views/page.cr26
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")