mirror of
https://github.com/mfontanini/presenterm.git
synced 2025-05-05 23:42:59 +00:00
feat: make the temporary html generated usable
This commit is contained in:
parent
54bddaf017
commit
d0ea46ce85
@ -40,7 +40,12 @@ impl HtmlSlide {
|
|||||||
fn new(grid: TerminalGrid, content_manager: &mut ContentManager) -> Result<Self, ExportError> {
|
fn new(grid: TerminalGrid, content_manager: &mut ContentManager) -> Result<Self, ExportError> {
|
||||||
let mut rows = Vec::new();
|
let mut rows = Vec::new();
|
||||||
for (y, row) in grid.rows.into_iter().enumerate() {
|
for (y, row) in grid.rows.into_iter().enumerate() {
|
||||||
let mut finalized_row = "<div class=\"content-line\"><pre>".to_string();
|
let mut finalized_row = if y == 0 {
|
||||||
|
"<div class=\"content-line force-page-break\"><pre>"
|
||||||
|
} else {
|
||||||
|
"<div class=\"content-line\"><pre>"
|
||||||
|
}
|
||||||
|
.to_string();
|
||||||
let mut current_style = row.first().map(|c| c.style).unwrap_or_default();
|
let mut current_style = row.first().map(|c| c.style).unwrap_or_default();
|
||||||
let mut current_string = String::new();
|
let mut current_string = String::new();
|
||||||
let mut x = 0;
|
let mut x = 0;
|
||||||
@ -154,12 +159,20 @@ impl PdfRender {
|
|||||||
|
|
||||||
pub(crate) fn generate(self, pdf_path: &Path) -> Result<(), ExportError> {
|
pub(crate) fn generate(self, pdf_path: &Path) -> Result<(), ExportError> {
|
||||||
let html_body = &self.html_body;
|
let html_body = &self.html_body;
|
||||||
|
let script = include_str!("script.js");
|
||||||
let html = format!(
|
let html = format!(
|
||||||
r#"<html>
|
r#"
|
||||||
|
<html>
|
||||||
<head>
|
<head>
|
||||||
|
<link rel="stylesheet" href="styles.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
{html_body}</body>
|
{html_body}
|
||||||
|
<script>
|
||||||
|
{script}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
</body>
|
||||||
</html>"#
|
</html>"#
|
||||||
);
|
);
|
||||||
let width = (self.dimensions.columns as f64 * FONT_SIZE as f64 * FONT_SIZE_WIDTH).ceil();
|
let width = (self.dimensions.columns as f64 * FONT_SIZE as f64 * FONT_SIZE_WIDTH).ceil();
|
||||||
@ -167,6 +180,9 @@ impl PdfRender {
|
|||||||
let background_color = self.background_color.unwrap_or_else(|| "black".into());
|
let background_color = self.background_color.unwrap_or_else(|| "black".into());
|
||||||
let css = format!(
|
let css = format!(
|
||||||
r"
|
r"
|
||||||
|
.force-page-break {{
|
||||||
|
page-break-before: always
|
||||||
|
}}
|
||||||
pre {{
|
pre {{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
padding: 0;
|
padding: 0;
|
||||||
@ -191,6 +207,10 @@ impl PdfRender {
|
|||||||
width: {width}px;
|
width: {width}px;
|
||||||
}}
|
}}
|
||||||
|
|
||||||
|
.hidden {{
|
||||||
|
display: none;
|
||||||
|
}}
|
||||||
|
|
||||||
@page {{
|
@page {{
|
||||||
margin: 0;
|
margin: 0;
|
||||||
height: {height}px;
|
height: {height}px;
|
||||||
|
41
src/export/script.js
Normal file
41
src/export/script.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
document.addEventListener('DOMContentLoaded', function() {
|
||||||
|
const allLines = document.querySelectorAll('body > div');
|
||||||
|
const pageBreakMarkers = document.querySelectorAll('.force-page-break');
|
||||||
|
let currentPageIndex = 0;
|
||||||
|
|
||||||
|
function showCurrentPage() {
|
||||||
|
const startIndexOfCurrentPage = Array.from(allLines).indexOf(pageBreakMarkers[currentPageIndex]);
|
||||||
|
let endIndexOfCurrentPage = allLines.length;
|
||||||
|
|
||||||
|
if (currentPageIndex < pageBreakMarkers.length - 1) {
|
||||||
|
endIndexOfCurrentPage = Array.from(allLines).indexOf(pageBreakMarkers[currentPageIndex + 1]);
|
||||||
|
}
|
||||||
|
|
||||||
|
allLines.forEach((line, index) => {
|
||||||
|
if (startIndexOfCurrentPage <= index && index < endIndexOfCurrentPage) {
|
||||||
|
line.classList.remove('hidden');
|
||||||
|
} else {
|
||||||
|
line.classList.add('hidden');
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
function handleKeyPress(event) {
|
||||||
|
if (event.key === 'ArrowLeft') {
|
||||||
|
if (currentPageIndex > 0) {
|
||||||
|
currentPageIndex--;
|
||||||
|
showCurrentPage();
|
||||||
|
}
|
||||||
|
} else if (event.key === 'ArrowRight') {
|
||||||
|
if (currentPageIndex < pageBreakMarkers.length - 1) {
|
||||||
|
currentPageIndex++;
|
||||||
|
showCurrentPage();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
document.addEventListener('keydown', handleKeyPress);
|
||||||
|
|
||||||
|
showCurrentPage();
|
||||||
|
});
|
||||||
|
|
Loading…
x
Reference in New Issue
Block a user