aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/guff/apis.cr23
-rw-r--r--src/guff/models/site.cr106
-rw-r--r--src/views/dialogs/admin/page-edit.ecr4
-rw-r--r--src/views/dialogs/admin/site-add.ecr42
4 files changed, 160 insertions, 15 deletions
diff --git a/src/guff/apis.cr b/src/guff/apis.cr
index 3754545..5449c72 100644
--- a/src/guff/apis.cr
+++ b/src/guff/apis.cr
@@ -200,6 +200,9 @@ module Guff::APIs
# get site_id
site_id = params["site_id"].to_i64
+ # get site assets
+ assets = @context.models.site.assets(site_id)
+
@context.models.site.get(site_id).reduce(
{} of String => String
) do |r, kv|
@@ -207,6 +210,8 @@ module Guff::APIs
r
end.merge({
"domains" => @context.models.site.domains(site_id),
+ "styles" => assets.styles,
+ "scripts" => assets.scripts,
} of String => Array(String))
end
@@ -217,9 +222,13 @@ module Guff::APIs
slug: params["slug"],
lang: params["lang"],
body: params["body"],
+
is_full_feed: (params["is_full_feed"] == "t"),
theme_id: params["theme_id"].to_i64,
+
domains: Array(String).from_json(params["domains"]),
+ styles: Array(String).from_json(params["styles"]),
+ scripts: Array(String).from_json(params["scripts"]),
)
}
end
@@ -227,22 +236,28 @@ module Guff::APIs
def do_site_set(params : HTTP::Params)
@context.models.site.set(
site_id: params["site_id"].to_i64,
+
name: params["name"]?,
slug: params["slug"]?,
lang: params["lang"]?,
body: params["body"]?,
is_full_feed: (params.includes?("is_full_key")) ? (params["is_full_feed"] == "t") : nil,
theme_id: params["theme_id"]? ? params["theme_id"].to_i64 : nil,
+
domains: params["domains"]? ? Array(String).from_json(params["domains"]) : nil,
+ styles: params["styles"]? ? Array(String).from_json(params["styles"]) : nil,
+ scripts: params["scripts"]? ? Array(String).from_json(params["scripts"]) : nil,
)
nil
end
- def do_site_set_default(params : HTTP::Params)
- @context.models.site.set(params["site_id"].to_i64)
- nil
- end
+#
+# def do_site_set_default(params : HTTP::Params)
+# @context.models.site.set(params["site_id"].to_i64)
+# nil
+# end
+#
end
module FileAPI
diff --git a/src/guff/models/site.cr b/src/guff/models/site.cr
index 4ea639e..9eaed1a 100644
--- a/src/guff/models/site.cr
+++ b/src/guff/models/site.cr
@@ -68,11 +68,27 @@ class Guff::Models::SiteModel < Guff::Models::Model
domains: "
SELECT domain
+
FROM site_domains
+
WHERE site_id = ?
+
ORDER BY sort_order
",
+ assets: "
+ SELECT b.name AS type_name,
+ a.path
+
+ FROM site_assets a
+ JOIN asset_types b
+ ON (b.type_id = a.type_id)
+
+ WHERE a.site_id = ?
+
+ ORDER BY a.sort_order
+ ",
+
get_name: "
SELECT name
@@ -105,10 +121,34 @@ class Guff::Models::SiteModel < Guff::Models::Model
INSERT INTO site_domains(site_id, domain, sort_order) VALUES (?, ?, ?)
",
- set_default: "
- UPDATE sites
- SET is_default = (site_id = ?)
+ set_assets_clear: "
+ DELETE FROM site_assets
+ WHERE site_id = ?
+ AND type_id = (SELECT type_id
+ FROM asset_types
+ WHERE name = ?)
+ ",
+
+ set_assets_add: "
+ INSERT INTO site_assets (
+ site_id,
+ type_id,
+ path,
+ sort_order
+ ) VALUES (
+ ?,
+ (SELECT type_id FROM asset_types WHERE name = ?),
+ ?,
+ ?
+ )
",
+
+#
+# set_default: "
+# UPDATE sites
+# SET is_default = (site_id = ?)
+# ",
+#
}
def get_id(host : String?) : Int64?
@@ -163,6 +203,8 @@ class Guff::Models::SiteModel < Guff::Models::Model
is_full_feed : Bool? = nil,
theme_id : Int64? = nil,
domains : Array(String)? = nil,
+ styles : Array(String)? = nil,
+ scripts : Array(String)? = nil,
) : Int64
db = @context.dbs.rw
site_id = -1_i64
@@ -177,6 +219,8 @@ class Guff::Models::SiteModel < Guff::Models::Model
lang: lang,
is_full_feed: is_full_feed,
domains: domains,
+ styles: styles,
+ scripts: scripts,
)
# create files directory
@@ -200,6 +244,8 @@ class Guff::Models::SiteModel < Guff::Models::Model
is_full_feed : Bool? = nil,
theme_id : Int64? = nil,
domains : Array(String)? = nil,
+ styles : Array(String)? = nil,
+ scripts : Array(String)? = nil,
)
sql = [] of String
args = [] of String
@@ -238,6 +284,8 @@ class Guff::Models::SiteModel < Guff::Models::Model
end
set_domains(site_id, domains)
+ set_assets(site_id, "style", styles)
+ set_assets(site_id, "script", scripts)
slug.try do |slug|
# rename files directory
@@ -276,14 +324,56 @@ class Guff::Models::SiteModel < Guff::Models::Model
nil
end
- def set_default(site_id : Int64)
- db = @context.dbs.rw
+ def assets(site_id : Int64) : Theme::Assets
+ r = Theme::Assets.new
+
+ @context.dbs.ro.all(SQL[:assets], [site_id.to_s]) do |row|
+ case row["type_name"].to_s
+ when "script"
+ r.scripts << row["path"].to_s
+ when "style"
+ r.styles << row["path"].to_s
+ else
+ # never reached
+ raise "unknown type: #{row["type_name"]}"
+ end
+ end
- db.transaction do
- db.query(SQL[:set_default], [site_id.to_s])
- get_default_id
+ # return result
+ r
+ end
+
+ private def set_assets(
+ site_id : Int64,
+ type : String,
+ paths : Array(String)? = nil,
+ )
+ paths.try do |paths|
+ db = @context.dbs.rw
+ id = site_id.to_s
+
+ db.transaction do
+ db.query(SQL[:set_assets_clear], [id, type])
+
+ paths.each_with_index do |path, i|
+ db.query(SQL[:set_assets_add], [id, type, path, i.to_s])
+ end
+ end
end
nil
end
+
+#
+# def set_default(site_id : Int64)
+# db = @context.dbs.rw
+#
+# db.transaction do
+# db.query(SQL[:set_default], [site_id.to_s])
+# get_default_id
+# end
+#
+# nil
+# end
+#
end
diff --git a/src/views/dialogs/admin/page-edit.ecr b/src/views/dialogs/admin/page-edit.ecr
index e44cf86..1eb609a 100644
--- a/src/views/dialogs/admin/page-edit.ecr
+++ b/src/views/dialogs/admin/page-edit.ecr
@@ -207,7 +207,7 @@
<textarea
id='page-edit-styles'
- class='form-control'
+ class='form-control asset-list'
title='Newline-delimited list of styles for this page.'
aria-describedby='page-edit-styles-help'
></textarea>
@@ -224,7 +224,7 @@
<textarea
id='page-edit-scripts'
- class='form-control'
+ class='form-control asset-list'
title='Newline-delimited list of scripts for this page.'
aria-describedby='page-edit-scripts-help'
></textarea>
diff --git a/src/views/dialogs/admin/site-add.ecr b/src/views/dialogs/admin/site-add.ecr
index 86fd7df..0f99364 100644
--- a/src/views/dialogs/admin/site-add.ecr
+++ b/src/views/dialogs/admin/site-add.ecr
@@ -129,7 +129,7 @@
role='tabpanel'
>
<div class='row'>
- <div class='col-md-6'>
+ <div class='col-md-12'>
<div class='form-group'>
<label for='site-add-theme_id'>
Theme
@@ -148,6 +148,46 @@
Site theme.
</p>
</div><!-- form-group -->
+ </div><!-- col-md-12 -->
+ </div><!-- row -->
+
+ <div class='row'>
+ <div class='col-md-6'>
+ <div class='form-group'>
+ <label for='site-add-styles'>
+ Styles
+ </label>
+
+ <textarea
+ id='site-add-styles'
+ class='form-control asset-list'
+ title='Newline-delimited site styles.'
+ aria-describedby='site-add-styles-help'
+ ></textarea>
+
+ <p id='site-add-styles-help' class='help-block'>
+ Newline-delimited site styles.
+ </p>
+ </div><!-- form-group -->
+ </div><!-- col-md-6 -->
+
+ <div class='col-md-6'>
+ <div class='form-group'>
+ <label for='site-add-scripts'>
+ Scripts
+ </label>
+
+ <textarea
+ id='site-add-scripts'
+ class='form-control asset-list'
+ title='Newline-delimited site scripts.'
+ aria-describedby='site-add-scripts-help'
+ ></textarea>
+
+ <p id='site-add-scripts-help' class='help-block'>
+ Newline-delimited site scripts.
+ </p>
+ </div><!-- form-group -->
</div><!-- col-md-6 -->
</div><!-- row -->
</div><!-- tab-pane -->