Retoca la disposición de los elementos de contexto
This commit is contained in:
parent
9485179257
commit
aab74546ed
4 changed files with 159 additions and 165 deletions
|
|
@ -1,16 +1,168 @@
|
||||||
use crate::{Lazy, base, concat_string, util};
|
use crate::{Lazy, base, concat_string, util};
|
||||||
use crate::config::SETTINGS;
|
use crate::config::SETTINGS;
|
||||||
use crate::html::{Markup, html};
|
use crate::html::{Markup, PreEscaped, html};
|
||||||
use crate::core::theme::*;
|
use crate::core::theme::*;
|
||||||
|
|
||||||
mod favicon;
|
// Favicon.
|
||||||
pub use favicon::Favicon;
|
|
||||||
|
|
||||||
mod javascript;
|
pub struct Favicon(Vec<String>);
|
||||||
pub use javascript::{JavaScript, JSMode};
|
|
||||||
|
|
||||||
mod stylesheet;
|
impl Favicon {
|
||||||
pub use stylesheet::StyleSheet;
|
pub fn new() -> Self {
|
||||||
|
Favicon(Vec::new())
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_icon(self, image: &str) -> Self {
|
||||||
|
self.add_item("icon", image, "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_icon_for_sizes(self, image: &str, sizes: &str) -> Self {
|
||||||
|
self.add_item("icon", image, sizes, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_apple_touch_icon(self, image: &str, sizes: &str) -> Self {
|
||||||
|
self.add_item("apple-touch-icon", image, sizes, "")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_mask_icon(self, image: &str, color: &str) -> Self {
|
||||||
|
self.add_item("mask-icon", image, "", color)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_manifest(self, file: &str) -> Self {
|
||||||
|
self.add_item("manifest", file, "", "")
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_theme_color(mut self, color: &str) -> Self {
|
||||||
|
self.0.push(format!(
|
||||||
|
"<meta name=\"theme-color\" content=\"{}\">", color
|
||||||
|
));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_ms_tile_color(mut self, color: &str) -> Self {
|
||||||
|
self.0.push(format!(
|
||||||
|
"<meta name=\"msapplication-TileColor\" content=\"{}\">", color
|
||||||
|
));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_ms_tile_image(mut self, image: &str) -> Self {
|
||||||
|
self.0.push(format!(
|
||||||
|
"<meta name=\"msapplication-TileImage\" content=\"{}\">", image
|
||||||
|
));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
fn add_item(
|
||||||
|
mut self,
|
||||||
|
rel : &str,
|
||||||
|
source: &str,
|
||||||
|
sizes : &str,
|
||||||
|
color : &str
|
||||||
|
) -> Self {
|
||||||
|
let mut link: String = format!("<link rel=\"{}\"", rel);
|
||||||
|
if let Some(i) = source.rfind('.') {
|
||||||
|
link = match source[i..].to_owned().to_lowercase().as_str() {
|
||||||
|
".gif" => format!("{} type=\"image/gif\"", link),
|
||||||
|
".ico" => format!("{} type=\"image/x-icon\"", link),
|
||||||
|
".jpg" => format!("{} type=\"image/jpg\"", link),
|
||||||
|
".png" => format!("{} type=\"image/png\"", link),
|
||||||
|
".svg" => format!("{} type=\"image/svg+xml\"", link),
|
||||||
|
_ => link
|
||||||
|
};
|
||||||
|
}
|
||||||
|
if !sizes.is_empty() {
|
||||||
|
link = format!("{} sizes=\"{}\"", link, sizes);
|
||||||
|
}
|
||||||
|
if !color.is_empty() {
|
||||||
|
link = format!("{} color=\"{}\"", link, color);
|
||||||
|
}
|
||||||
|
self.0.push(format!("{} href=\"{}\">", link, source));
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
fn render(&self) -> Markup {
|
||||||
|
html! {
|
||||||
|
@for item in &self.0 {
|
||||||
|
(PreEscaped(item))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// JavaScript.
|
||||||
|
|
||||||
|
#[derive(PartialEq)]
|
||||||
|
pub enum JSMode { Async, Defer, Normal }
|
||||||
|
|
||||||
|
pub struct JavaScript {
|
||||||
|
source: &'static str,
|
||||||
|
weight: isize,
|
||||||
|
mode : JSMode,
|
||||||
|
}
|
||||||
|
impl JavaScript {
|
||||||
|
pub fn source(s: &'static str) -> Self {
|
||||||
|
JavaScript {
|
||||||
|
source: s,
|
||||||
|
weight: 0,
|
||||||
|
mode : JSMode::Defer,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||||
|
self.weight = weight;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_mode(mut self, mode: JSMode) -> Self {
|
||||||
|
self.mode = mode;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn weight(self) -> isize {
|
||||||
|
self.weight
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn render(&self) -> Markup {
|
||||||
|
html! {
|
||||||
|
script type="text/javascript"
|
||||||
|
src=(self.source)
|
||||||
|
async[self.mode == JSMode::Async]
|
||||||
|
defer[self.mode == JSMode::Defer]
|
||||||
|
{};
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// StyleSheet.
|
||||||
|
|
||||||
|
pub struct StyleSheet {
|
||||||
|
source: &'static str,
|
||||||
|
weight: isize,
|
||||||
|
}
|
||||||
|
impl StyleSheet {
|
||||||
|
pub fn source(s: &'static str) -> Self {
|
||||||
|
StyleSheet {
|
||||||
|
source: s,
|
||||||
|
weight: 0,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn with_weight(mut self, weight: isize) -> Self {
|
||||||
|
self.weight = weight;
|
||||||
|
self
|
||||||
|
}
|
||||||
|
|
||||||
|
pub fn weight(self) -> isize {
|
||||||
|
self.weight
|
||||||
|
}
|
||||||
|
|
||||||
|
fn render(&self) -> Markup {
|
||||||
|
html! {
|
||||||
|
link rel="stylesheet" href=(self.source);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static DEFAULT_THEME: Lazy<&dyn ThemeTrait> = Lazy::new(|| {
|
static DEFAULT_THEME: Lazy<&dyn ThemeTrait> = Lazy::new(|| {
|
||||||
match all::theme_by_single_name(&SETTINGS.app.theme) {
|
match all::theme_by_single_name(&SETTINGS.app.theme) {
|
||||||
|
|
|
||||||
|
|
@ -1,86 +0,0 @@
|
||||||
use crate::html::{Markup, PreEscaped, html};
|
|
||||||
|
|
||||||
pub struct Favicon(Vec<String>);
|
|
||||||
|
|
||||||
impl Favicon {
|
|
||||||
pub fn new() -> Self {
|
|
||||||
Favicon(Vec::new())
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_icon(self, image: &str) -> Self {
|
|
||||||
self.add_item("icon", image, "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_icon_for_sizes(self, image: &str, sizes: &str) -> Self {
|
|
||||||
self.add_item("icon", image, sizes, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_apple_touch_icon(self, image: &str, sizes: &str) -> Self {
|
|
||||||
self.add_item("apple-touch-icon", image, sizes, "")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_mask_icon(self, image: &str, color: &str) -> Self {
|
|
||||||
self.add_item("mask-icon", image, "", color)
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_manifest(self, file: &str) -> Self {
|
|
||||||
self.add_item("manifest", file, "", "")
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_theme_color(mut self, color: &str) -> Self {
|
|
||||||
self.0.push(format!(
|
|
||||||
"<meta name=\"theme-color\" content=\"{}\">", color
|
|
||||||
));
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_ms_tile_color(mut self, color: &str) -> Self {
|
|
||||||
self.0.push(format!(
|
|
||||||
"<meta name=\"msapplication-TileColor\" content=\"{}\">", color
|
|
||||||
));
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_ms_tile_image(mut self, image: &str) -> Self {
|
|
||||||
self.0.push(format!(
|
|
||||||
"<meta name=\"msapplication-TileImage\" content=\"{}\">", image
|
|
||||||
));
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
fn add_item(
|
|
||||||
mut self,
|
|
||||||
rel : &str,
|
|
||||||
source: &str,
|
|
||||||
sizes : &str,
|
|
||||||
color : &str
|
|
||||||
) -> Self {
|
|
||||||
let mut link: String = format!("<link rel=\"{}\"", rel);
|
|
||||||
if let Some(i) = source.rfind('.') {
|
|
||||||
link = match source[i..].to_owned().to_lowercase().as_str() {
|
|
||||||
".gif" => format!("{} type=\"image/gif\"", link),
|
|
||||||
".ico" => format!("{} type=\"image/x-icon\"", link),
|
|
||||||
".jpg" => format!("{} type=\"image/jpg\"", link),
|
|
||||||
".png" => format!("{} type=\"image/png\"", link),
|
|
||||||
".svg" => format!("{} type=\"image/svg+xml\"", link),
|
|
||||||
_ => link
|
|
||||||
};
|
|
||||||
}
|
|
||||||
if !sizes.is_empty() {
|
|
||||||
link = format!("{} sizes=\"{}\"", link, sizes);
|
|
||||||
}
|
|
||||||
if !color.is_empty() {
|
|
||||||
link = format!("{} color=\"{}\"", link, color);
|
|
||||||
}
|
|
||||||
self.0.push(format!("{} href=\"{}\">", link, source));
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn render(&self) -> Markup {
|
|
||||||
html! {
|
|
||||||
@for item in &self.0 {
|
|
||||||
(PreEscaped(item))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,43 +0,0 @@
|
||||||
use crate::html::{Markup, html};
|
|
||||||
|
|
||||||
#[derive(PartialEq)]
|
|
||||||
pub enum JSMode { Async, Defer, Normal }
|
|
||||||
|
|
||||||
pub struct JavaScript {
|
|
||||||
pub(super) source: &'static str,
|
|
||||||
pub(super) weight: isize,
|
|
||||||
pub(super) mode : JSMode,
|
|
||||||
}
|
|
||||||
impl JavaScript {
|
|
||||||
pub fn source(s: &'static str) -> Self {
|
|
||||||
JavaScript {
|
|
||||||
source: s,
|
|
||||||
weight: 0,
|
|
||||||
mode : JSMode::Defer,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
|
||||||
self.weight = weight;
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_mode(mut self, mode: JSMode) -> Self {
|
|
||||||
self.mode = mode;
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn weight(self) -> isize {
|
|
||||||
self.weight
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn render(&self) -> Markup {
|
|
||||||
html! {
|
|
||||||
script type="text/javascript"
|
|
||||||
src=(self.source)
|
|
||||||
async[self.mode == JSMode::Async]
|
|
||||||
defer[self.mode == JSMode::Defer]
|
|
||||||
{};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
@ -1,29 +0,0 @@
|
||||||
use crate::html::{Markup, html};
|
|
||||||
|
|
||||||
pub struct StyleSheet {
|
|
||||||
pub(super) source: &'static str,
|
|
||||||
pub(super) weight: isize,
|
|
||||||
}
|
|
||||||
impl StyleSheet {
|
|
||||||
pub fn source(s: &'static str) -> Self {
|
|
||||||
StyleSheet {
|
|
||||||
source: s,
|
|
||||||
weight: 0,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn with_weight(mut self, weight: isize) -> Self {
|
|
||||||
self.weight = weight;
|
|
||||||
self
|
|
||||||
}
|
|
||||||
|
|
||||||
pub fn weight(self) -> isize {
|
|
||||||
self.weight
|
|
||||||
}
|
|
||||||
|
|
||||||
pub(super) fn render(&self) -> Markup {
|
|
||||||
html! {
|
|
||||||
link rel="stylesheet" href=(self.source);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue