Refactor handling of generated unique names for resources
This commit is contained in:
parent
77210a9692
commit
0b5bff6356
8 changed files with 35 additions and 28 deletions
|
@ -49,6 +49,14 @@ pub fn static_resource(input: TokenStream) -> TokenStream {
|
|||
|
||||
let checksum = calculate_checksum(&abs_filename);
|
||||
|
||||
let path: &Path = filename.as_ref();
|
||||
let resource_name =
|
||||
format!("{}-{}.{}",
|
||||
path.file_stem().unwrap().to_str().unwrap(),
|
||||
checksum,
|
||||
path.extension().unwrap().to_str().unwrap()
|
||||
);
|
||||
|
||||
let mime = find_attr(&ast.attrs, "mime")
|
||||
.expect("The `mime` attribute must be specified");
|
||||
|
||||
|
@ -90,12 +98,12 @@ pub fn static_resource(input: TokenStream) -> TokenStream {
|
|||
}
|
||||
|
||||
impl #impl_generics #name #ty_generics #where_clause {
|
||||
pub fn checksum() -> &'static str {
|
||||
#checksum
|
||||
pub fn resource_name() -> &'static str {
|
||||
#resource_name
|
||||
}
|
||||
|
||||
pub fn etag() -> ::hyper::header::EntityTag {
|
||||
::hyper::header::EntityTag::new(false, Self::checksum().to_owned())
|
||||
::hyper::header::EntityTag::new(false, #checksum.to_owned())
|
||||
}
|
||||
}
|
||||
};
|
||||
|
|
|
@ -29,8 +29,8 @@ struct Template<'a> {
|
|||
}
|
||||
|
||||
impl<'a> Template<'a> {
|
||||
fn script_js_checksum(&self) -> &'static str {
|
||||
ScriptJs::checksum()
|
||||
fn script_js(&self) -> &'static str {
|
||||
ScriptJs::resource_name()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -69,8 +69,8 @@ impl Resource for NewArticleResource {
|
|||
rendered: &'a str,
|
||||
}
|
||||
impl<'a> Template<'a> {
|
||||
fn script_js_checksum(&self) -> &'static str {
|
||||
ScriptJs::checksum()
|
||||
fn script_js(&self) -> &'static str {
|
||||
ScriptJs::resource_name()
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -9,7 +9,7 @@ use hyper::mime;
|
|||
use hyper::server::*;
|
||||
use hyper;
|
||||
|
||||
use assets::{StyleCss, SearchJs};
|
||||
use assets::{ThemesCss, StyleCss, SearchJs};
|
||||
use build_config;
|
||||
use web::Lookup;
|
||||
use wiki_lookup::WikiLookup;
|
||||
|
@ -41,8 +41,9 @@ impl<'a, T: 'a + fmt::Display> Layout<'a, T> {
|
|||
THEMES[choice]
|
||||
}
|
||||
|
||||
pub fn style_css_checksum(&self) -> &str { StyleCss::checksum() }
|
||||
pub fn search_js_checksum(&self) -> &str { SearchJs::checksum() }
|
||||
pub fn themes_css(&self) -> &str { ThemesCss::resource_name() }
|
||||
pub fn style_css(&self) -> &str { StyleCss::resource_name() }
|
||||
pub fn search_js(&self) -> &str { SearchJs::resource_name() }
|
||||
|
||||
pub fn project_name(&self) -> &str { build_config::PROJECT_NAME }
|
||||
pub fn version(&self) -> &str { build_config::VERSION.as_str() }
|
||||
|
|
|
@ -16,38 +16,35 @@ type BoxResource = Box<Resource + Sync + Send>;
|
|||
type ResourceFn = Box<Fn() -> BoxResource + Sync + Send>;
|
||||
|
||||
lazy_static! {
|
||||
static ref ASSETS_MAP: HashMap<String, ResourceFn> = hashmap!{
|
||||
static ref ASSETS_MAP: HashMap<&'static str, ResourceFn> = hashmap!{
|
||||
// The CSS should be built to a single CSS file at compile time
|
||||
"themes.css".into() =>
|
||||
ThemesCss::resource_name() =>
|
||||
Box::new(|| Box::new(ThemesCss) as BoxResource) as ResourceFn,
|
||||
|
||||
format!("style-{}.css", StyleCss::checksum()) =>
|
||||
StyleCss::resource_name() =>
|
||||
Box::new(|| Box::new(StyleCss) as BoxResource) as ResourceFn,
|
||||
|
||||
format!("script-{}.js", ScriptJs::checksum()) =>
|
||||
ScriptJs::resource_name() =>
|
||||
Box::new(|| Box::new(ScriptJs) as BoxResource) as ResourceFn,
|
||||
|
||||
format!("search-{}.js", SearchJs::checksum()) =>
|
||||
SearchJs::resource_name() =>
|
||||
Box::new(|| Box::new(SearchJs) as BoxResource) as ResourceFn,
|
||||
|
||||
format!("amatic-sc-v9-latin-regular.woff") =>
|
||||
Box::new(|| Box::new(AmaticFont) as BoxResource) as ResourceFn,
|
||||
};
|
||||
|
||||
static ref LICENSES_MAP: HashMap<String, ResourceFn> = hashmap!{
|
||||
"bsd-3-clause".to_owned() => Box::new(|| Box::new(
|
||||
static ref LICENSES_MAP: HashMap<&'static str, ResourceFn> = hashmap!{
|
||||
"bsd-3-clause" => Box::new(|| Box::new(
|
||||
HtmlResource::new(Some("../"), "The 3-Clause BSD License", include_str!("licenses/bsd-3-clause.html"))
|
||||
) as BoxResource) as ResourceFn,
|
||||
"gpl3".to_owned() => Box::new(|| Box::new(
|
||||
"gpl3" => Box::new(|| Box::new(
|
||||
HtmlResource::new(Some("../"), "GNU General Public License", include_str!("licenses/gpl3.html"))
|
||||
) as BoxResource) as ResourceFn,
|
||||
"mit".to_owned() => Box::new(|| Box::new(
|
||||
"mit" => Box::new(|| Box::new(
|
||||
HtmlResource::new(Some("../"), "The MIT License", include_str!("licenses/mit.html"))
|
||||
) as BoxResource) as ResourceFn,
|
||||
"mpl2".to_owned() => Box::new(|| Box::new(
|
||||
"mpl2" => Box::new(|| Box::new(
|
||||
HtmlResource::new(Some("../"), "Mozilla Public License Version 2.0", include_str!("licenses/mpl2.html"))
|
||||
) as BoxResource) as ResourceFn,
|
||||
"sil-ofl-1.1".to_owned() => Box::new(|| Box::new(
|
||||
"sil-ofl-1.1" => Box::new(|| Box::new(
|
||||
HtmlResource::new(Some("../"), "SIL Open Font License", include_str!("licenses/sil-ofl-1.1.html"))
|
||||
) as BoxResource) as ResourceFn,
|
||||
};
|
||||
|
@ -70,7 +67,7 @@ fn split_one(path: &str) -> Result<(Cow<str>, Option<&str>), Utf8Error> {
|
|||
Ok((head, tail))
|
||||
}
|
||||
|
||||
fn map_lookup(map: &HashMap<String, ResourceFn>, path: &str) ->
|
||||
fn map_lookup(map: &HashMap<&str, ResourceFn>, path: &str) ->
|
||||
FutureResult<Option<BoxResource>, Box<::std::error::Error + Send + Sync>>
|
||||
{
|
||||
let (head, tail) = match split_one(path) {
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
<script src="_assets/script-{{script_js_checksum()}}.js" defer></script>
|
||||
<script src="_assets/{{script_js()}}" defer></script>
|
||||
|
||||
<div class="container {{#edit?}}edit{{/edit}}">
|
||||
<div class="rendered">
|
||||
|
|
|
@ -5,7 +5,8 @@
|
|||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||||
<meta charset="utf-8">
|
||||
{{#base}}<base href="{{.}}">{{/base}}
|
||||
<link href="_assets/style-{{style_css_checksum()}}.css" rel="stylesheet">
|
||||
<link href="_assets/{{themes_css()}}" rel="stylesheet">
|
||||
<link href="_assets/{{style_css()}}" rel="stylesheet">
|
||||
<meta name="generator" content="{{project_name()}} {{version()}}" />
|
||||
</head>
|
||||
<body class="theme-{{theme()}}">
|
||||
|
|
|
@ -7,5 +7,5 @@
|
|||
</div>
|
||||
</form>
|
||||
<ul id="search-result-prototype" class="prototype"><li class="search-result"><a tabindex="0" class="link" href=""><span class="title"></span> – <span class="snippet"></span></a></li></ul>
|
||||
<script src="_assets/search-{{search_js_checksum()}}.js" defer></script>
|
||||
<script src="_assets/{{search_js()}}" defer></script>
|
||||
</div>
|
||||
|
|
Loading…
Reference in a new issue