mod interwiki;
use crate::layout::Layout;
use crate::next_index::Incrementer;
pub use self::interwiki::{DEFAULT_INTERWIKI, EMPTY_INTERWIKI, InterwikiSettings};
const DEFAULT_MINIFY_CSS: bool = true;
#[derive(Serialize, Deserialize, Debug, Clone, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub struct WikitextSettings {
pub mode: WikitextMode,
pub layout: Layout,
pub enable_page_syntax: bool,
pub use_true_ids: bool,
pub isolate_user_ids: bool,
pub minify_css: bool,
pub allow_local_paths: bool,
pub interwiki: InterwikiSettings,
}
impl WikitextSettings {
pub fn from_mode(mode: WikitextMode, layout: Layout) -> Self {
let interwiki = DEFAULT_INTERWIKI.clone();
match mode {
WikitextMode::Page => WikitextSettings {
mode,
layout,
enable_page_syntax: true,
use_true_ids: true,
isolate_user_ids: false,
minify_css: DEFAULT_MINIFY_CSS,
allow_local_paths: true,
interwiki,
},
WikitextMode::PageNav => WikitextSettings {
mode,
layout,
enable_page_syntax: true,
use_true_ids: false,
isolate_user_ids: false,
minify_css: DEFAULT_MINIFY_CSS,
allow_local_paths: true,
interwiki,
},
WikitextMode::Draft => WikitextSettings {
mode,
layout,
enable_page_syntax: true,
use_true_ids: false,
isolate_user_ids: false,
minify_css: DEFAULT_MINIFY_CSS,
allow_local_paths: true,
interwiki,
},
WikitextMode::ForumPost | WikitextMode::DirectMessage => WikitextSettings {
mode,
layout,
enable_page_syntax: false,
use_true_ids: false,
isolate_user_ids: false,
minify_css: DEFAULT_MINIFY_CSS,
allow_local_paths: false,
interwiki,
},
WikitextMode::List => WikitextSettings {
mode,
layout,
enable_page_syntax: true,
use_true_ids: false,
isolate_user_ids: false,
minify_css: DEFAULT_MINIFY_CSS,
allow_local_paths: true,
interwiki,
},
}
}
pub fn id_indexer(&self) -> Incrementer {
if self.use_true_ids {
Incrementer::default()
} else {
Incrementer::disabled()
}
}
}
#[derive(Serialize, Deserialize, Debug, Copy, Clone, Hash, PartialEq, Eq)]
#[serde(rename_all = "kebab-case")]
pub enum WikitextMode {
Page,
PageNav,
Draft,
ForumPost,
DirectMessage,
List,
}
impl WikitextMode {
pub fn is_nav_content(self) -> bool {
matches!(self, WikitextMode::PageNav)
}
}