use crate::defaults::{DEFAULT_NO_TEXT, PARAMS_ID, PARAMS_TYPE};
use crate::utils::defaults::{
DEFAULT_TEXT_ITEM, FORM_DATA_TYPE_HTML, FORM_DATA_TYPE_PDF, PARAMS_CONTENTS, PARAMS_CSS_CLASS,
};
use crate::utils::types::{HTMLResult, SharedAppState, URLParams, URLPath};
use crate::{
rumtk_web_get_config, rumtk_web_get_text_item, rumtk_web_render_html, RUMWebTemplate,
};
use rumtk_core::rumtk_generate_id;
#[derive(RUMWebTemplate, Debug)]
#[template(
source = "
{% if custom_css_enabled %}
<link href='/static/components/content_viewer.css' rel='stylesheet'>
{% endif %}
{% if typ == FORM_DATA_TYPE_PDF %}
<object data='{{contents}}' type='application/pdf' class='f18 contact-card-{{ css_class }}-container'>
<!-- Fallback content for browsers that cannot display the PDF inline -->
<p>It appears your browser doesn't have a PDF plugin. No problem, you can
<a href='{{contents}}'>click here to download the PDF file.</a></p>
</object>
{% else if typ == FORM_DATA_TYPE_HTML %}
<div id='div-{{id}}' class='f18 contact-card-{{ css_class }}-container'></div>
<script>
const contentDiv = document.getElementById('div-{{id}}');
// Set the innerHTML to a string containing HTML markup
contentDiv.innerHTML = '{{contents|safe}}';
</script>
{% else %}
<pre id='div-{{id}}' class='f18 contact-card-{{ css_class }}-container'>
{{contents}}
</pre>
{% endif %}
",
ext = "html"
)]
pub struct ContentViewer<'a> {
id: &'a str,
typ: &'a str,
contents: &'a str,
css_class: &'a str,
custom_css_enabled: bool,
}
pub fn content_viewer(
_path_components: URLPath,
params: URLParams,
state: SharedAppState,
) -> HTMLResult {
let default_id = rumtk_generate_id!();
let id = rumtk_web_get_text_item!(params, PARAMS_ID, default_id.as_str());
let typ = rumtk_web_get_text_item!(params, PARAMS_TYPE, DEFAULT_TEXT_ITEM);
let contents = rumtk_web_get_text_item!(params, PARAMS_CONTENTS, DEFAULT_NO_TEXT);
let css_class = rumtk_web_get_text_item!(params, PARAMS_CSS_CLASS, DEFAULT_TEXT_ITEM);
let custom_css_enabled = rumtk_web_get_config!(state).custom_css;
rumtk_web_render_html!(ContentViewer {
id,
typ,
contents,
css_class,
custom_css_enabled
})
}