* add support for external assets * fix playwright tests * add more documentation to with_hash_suffix * restore external asset hashing tests * Update gtk workflow dependencies * fix doc test * multiple versions of libgtk * clear dx in playwright tests * fix fullstack caching test * try without apt cache * cache everything except libxdo-dev * revert ci changes * fix wasm asset options * fix merge conflict * recommend the used attribute instead * Move options to AssetOptionsBuilder * Don't deprecate non-canonical new asset options functions --------- Co-authored-by: Jonathan Kelley <jkelleyrtp@gmail.com>
103 lines
2.7 KiB
Rust
103 lines
2.7 KiB
Rust
use const_serialize::SerializeConst;
|
|
|
|
use crate::{AssetOptions, AssetOptionsBuilder, AssetVariant};
|
|
|
|
/// Options for a javascript asset
|
|
#[derive(
|
|
Debug,
|
|
Eq,
|
|
PartialEq,
|
|
PartialOrd,
|
|
Clone,
|
|
Copy,
|
|
Hash,
|
|
SerializeConst,
|
|
serde::Serialize,
|
|
serde::Deserialize,
|
|
)]
|
|
pub struct JsAssetOptions {
|
|
minify: bool,
|
|
preload: bool,
|
|
}
|
|
|
|
impl Default for JsAssetOptions {
|
|
fn default() -> Self {
|
|
Self::default()
|
|
}
|
|
}
|
|
|
|
impl JsAssetOptions {
|
|
/// Create a new js asset options builder
|
|
pub const fn new() -> AssetOptionsBuilder<JsAssetOptions> {
|
|
AssetOptions::js()
|
|
}
|
|
|
|
/// Create a default js asset options
|
|
pub const fn default() -> Self {
|
|
Self {
|
|
preload: false,
|
|
minify: true,
|
|
}
|
|
}
|
|
|
|
/// Check if the asset is preloaded
|
|
pub const fn preloaded(&self) -> bool {
|
|
self.preload
|
|
}
|
|
|
|
/// Check if the asset is minified
|
|
pub const fn minified(&self) -> bool {
|
|
self.minify
|
|
}
|
|
}
|
|
|
|
impl AssetOptions {
|
|
/// Create a new js asset builder
|
|
///
|
|
/// ```rust
|
|
/// # use manganis::{asset, Asset, JsAssetOptions};
|
|
/// const _: Asset = asset!("/assets/script.js", AssetOptions::js());
|
|
/// ```
|
|
pub const fn js() -> AssetOptionsBuilder<JsAssetOptions> {
|
|
AssetOptionsBuilder::variant(JsAssetOptions::default())
|
|
}
|
|
}
|
|
|
|
impl AssetOptionsBuilder<JsAssetOptions> {
|
|
/// Sets whether the js should be minified (default: true)
|
|
///
|
|
/// Minifying the js can make your site load faster by loading less data
|
|
///
|
|
/// ```rust
|
|
/// # use manganis::{asset, Asset, JsAssetOptions};
|
|
/// const _: Asset = asset!("/assets/script.js", AssetOptions::js().with_minify(false));
|
|
/// ```
|
|
#[allow(unused)]
|
|
pub const fn with_minify(mut self, minify: bool) -> Self {
|
|
self.variant.minify = minify;
|
|
self
|
|
}
|
|
|
|
/// Make the asset preloaded
|
|
///
|
|
/// Preloading the javascript will make the javascript start to load as soon as possible. This is useful for javascript that will be used soon after the page loads or javascript that may not be used immediately, but should start loading sooner
|
|
///
|
|
/// ```rust
|
|
/// # use manganis::{asset, Asset, JsAssetOptions};
|
|
/// const _: Asset = asset!("/assets/script.js", AssetOptions::js().with_preload(true));
|
|
/// ```
|
|
#[allow(unused)]
|
|
pub const fn with_preload(mut self, preload: bool) -> Self {
|
|
self.variant.preload = preload;
|
|
self
|
|
}
|
|
|
|
/// Convert the builder into asset options with the given variant
|
|
pub const fn into_asset_options(self) -> AssetOptions {
|
|
AssetOptions {
|
|
add_hash: self.add_hash,
|
|
variant: AssetVariant::Js(self.variant),
|
|
}
|
|
}
|
|
}
|