From 3259fdc85d19a4892f5e7cf2fa16ebc4422593a4 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:37:09 +0000
Subject: [PATCH 1/9] feat: transpose exportar em HTML
---
static/js/transpose.js | 42 ++++++++++++++++++++++++++++++++++++++++++
static/js/utils.js | 16 ++++++++++++++++
2 files changed, 58 insertions(+)
diff --git a/static/js/transpose.js b/static/js/transpose.js
index 7c068f7..d4be4e5 100644
--- a/static/js/transpose.js
+++ b/static/js/transpose.js
@@ -50,6 +50,20 @@ form.addEventListener('submit', async function(e) {
);
document.getElementById('result').appendChild(exportXMLBtn);
+
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportTransposeAsHTML(
+ payload.matrix,
+ result.result
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
+
} catch (error) {
showError(error.message);
}
@@ -96,5 +110,33 @@ ${prettyXML(transposedMatrix, 'result')}
a.download = 'matriz_transposta.xml';
a.click();
+ URL.revokeObjectURL(url);
+}
+
+function exportTransposeAsHTML(matrix, transposedMatrix) {
+ const html =
+`
+
+
+
+ Matriz Transposta
+
+
+ Operação: Transposta
+
+ ${prettyHTML(matrix, 'Matriz Original')}
+ ${prettyHTML(transposedMatrix, 'Matriz Transposta')}
+
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'matriz_transposta.html';
+ a.click();
+
URL.revokeObjectURL(url);
}
\ No newline at end of file
diff --git a/static/js/utils.js b/static/js/utils.js
index e0748b5..b075911 100644
--- a/static/js/utils.js
+++ b/static/js/utils.js
@@ -68,4 +68,20 @@ function prettyXML(matrix, tagName) {
xml += ` ${tagName}>\n`;
return xml;
+}
+
+function prettyHTML(matrix, title) {
+ let html = `${title}
`;
+ html += '';
+
+ matrix.forEach(row => {
+ html += '';
+ row.forEach(value => {
+ html += `| ${value} | `;
+ });
+ html += '
';
+ });
+
+ html += '
';
+ return html;
}
\ No newline at end of file
From b92b2d7e285b5b9b9d184d048ce012ac2c7291a8 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:40:15 +0000
Subject: [PATCH 2/9] feat: sum-sub exportar em HTML
---
static/js/sum-sub.js | 42 ++++++++++++++++++++++++++++++++++++++++++
1 file changed, 42 insertions(+)
diff --git a/static/js/sum-sub.js b/static/js/sum-sub.js
index 9178623..94b64a1 100644
--- a/static/js/sum-sub.js
+++ b/static/js/sum-sub.js
@@ -59,6 +59,20 @@ form.addEventListener('submit', async function(e) {
document.getElementById('result').appendChild(exportXMLBtn);
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportAsHTML(
+ payload.matrix_a,
+ payload.matrix_b,
+ result.result,
+ payload.operation
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -107,5 +121,33 @@ function exportAsXML(matrixA, matrixB, matrixResult, operation) {
a.download = 'matrizes.xml';
a.click();
+ URL.revokeObjectURL(url);
+}
+
+function exportAsHTML(matrixA, matrixB, matrixResult, operation) {
+ const html =
+`
+
+
+
+ Resultado da Operação
+
+
+ Operação: ${operation}
+
+ ${prettyHTML(matrixA, 'Matriz A')}
+ ${prettyHTML(matrixB, 'Matriz B')}
+ ${prettyHTML(matrixResult, 'Resultado')}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'matrizes.html';
+ a.click();
+
URL.revokeObjectURL(url);
}
\ No newline at end of file
From 677b25bd2051657914676ed7b07a61ec4ab35870 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:50:29 +0000
Subject: [PATCH 3/9] feat: decrypt exportar em HTML
---
static/js/decrypt.js | 48 ++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 48 insertions(+)
diff --git a/static/js/decrypt.js b/static/js/decrypt.js
index 9ed22ac..842ab40 100644
--- a/static/js/decrypt.js
+++ b/static/js/decrypt.js
@@ -63,6 +63,19 @@ form.addEventListener('submit', async function(e) {
resultDiv.appendChild(exportXMLBtn);
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportDecryptAsHTML(
+ payload.encoding_matrix,
+ payload.encrypted_matrix,
+ result.decrypted_message
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -111,5 +124,40 @@ function exportDecryptAsXML(encodingMatrix, encryptedMatrix, decryptedMessage) {
a.download = 'desencriptacao.xml';
a.click();
+ URL.revokeObjectURL(url);
+}
+
+function exportDecryptAsHTML(encodingMatrix, encryptedMatrix, decryptedMessage) {
+ const html =
+`
+
+
+
+ Desencriptação
+
+
+ Operação: Decrypt
+
+ Matriz de Codificação
+ ${prettyHTML(encodingMatrix, 'encodingMatrix')}
+
+ Matriz Encriptada
+ ${prettyHTML(encryptedMatrix, 'encryptedMatrix')}
+
+ Mensagem Desencriptada
+
+ ${decryptedMessage}
+
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'desencriptacao.html';
+ a.click();
+
URL.revokeObjectURL(url);
}
\ No newline at end of file
From cddba4479333522255076dc5fc6e02a30f7d999c Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:50:40 +0000
Subject: [PATCH 4/9] feat: determinant exportar em HTML
---
static/js/determinant.js | 41 ++++++++++++++++++++++++++++++++++++++++
1 file changed, 41 insertions(+)
diff --git a/static/js/determinant.js b/static/js/determinant.js
index 3aa20c6..b6b57c9 100644
--- a/static/js/determinant.js
+++ b/static/js/determinant.js
@@ -55,6 +55,18 @@ form.addEventListener('submit', async function(e) {
resultDiv.appendChild(exportXMLBtn);
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportDeterminantAsHTML(
+ payload.matrix,
+ result.result
+);
+
+ document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -103,3 +115,32 @@ function exportDeterminantAsXML(matrix, determinant) {
URL.revokeObjectURL(url);
}
+
+function exportDeterminantAsHTML(matrix, determinant) {
+ const html =
+`
+
+
+
+ Determinante
+
+
+ Operação: Determinante
+
+ ${prettyHTML(matrix, 'Matriz')}
+
+ Resultado
+ ${determinant}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'determinante.html';
+ a.click();
+
+ URL.revokeObjectURL(url);
+}
From 48e332740ba8e86827eeb898468fd421898f029f Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:50:56 +0000
Subject: [PATCH 5/9] feat: encrypt exportar em HTML
---
static/js/encrypt.js | 46 +++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/static/js/encrypt.js b/static/js/encrypt.js
index 9b3c8c4..1a3f0da 100644
--- a/static/js/encrypt.js
+++ b/static/js/encrypt.js
@@ -61,6 +61,20 @@ form.addEventListener('submit', async function(e) {
document.getElementById('result').appendChild(exportXMLBtn);
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportEncryptAsHTML(
+ payload.message,
+ payload.encoding_matrix,
+ result.encrypted_matrix
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
+
} catch (error) {
showError(error.message);
}
@@ -110,4 +124,34 @@ function exportEncryptAsXML(message, encodingMatrix, encryptedMatrix) {
a.click();
URL.revokeObjectURL(url);
-}
\ No newline at end of file
+}
+
+function exportEncryptAsHTML(message, encodingMatrix, encryptedMatrix) {
+ const html =
+`
+
+
+
+ Encriptação
+
+
+ Operação: Encriptação
+
+ Mensagem Original
+ ${message}
+
+ ${prettyHTML(encodingMatrix, 'Matriz de Codificação')}
+ ${prettyHTML(encryptedMatrix, 'Matriz Encriptada')}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'encriptacao.html';
+ a.click();
+
+ URL.revokeObjectURL(url);
+}
From 656f97b324027ee3688ea9e832180f9892f64051 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:51:08 +0000
Subject: [PATCH 6/9] feat: inverse exportar em HTML
---
static/js/inverse.js | 43 +++++++++++++++++++++++++++++++++++++++++--
1 file changed, 41 insertions(+), 2 deletions(-)
diff --git a/static/js/inverse.js b/static/js/inverse.js
index 9c7a1dd..3339a9f 100644
--- a/static/js/inverse.js
+++ b/static/js/inverse.js
@@ -50,7 +50,19 @@ form.addEventListener('submit', async function(e) {
);
document.getElementById('result').appendChild(exportXMLBtn);
-
+
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportInverseAsHTML(
+ payload.matrix,
+ decimalMatrix(result.result, 2)
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -99,4 +111,31 @@ ${prettyXML(inverseMatrix, 'inverseMatrix')}
a.click();
URL.revokeObjectURL(url);
-}
\ No newline at end of file
+}
+
+function exportInverseAsHTML(originalMatrix, inverseMatrix) {
+ const html =
+`
+
+
+
+ Matriz Inversa
+
+
+ Operação: Matriz Inversa
+
+ ${prettyHTML(originalMatrix, 'Matriz Original')}
+ ${prettyHTML(inverseMatrix, 'Matriz Inversa')}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'matriz_inversa.html';
+ a.click();
+
+ URL.revokeObjectURL(url);
+}
From 59f1977eccd460984c07b1517881f35f6540f875 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:51:18 +0000
Subject: [PATCH 7/9] feat: multiply exportar em HTML
---
static/js/multiply.js | 44 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 43 insertions(+), 1 deletion(-)
diff --git a/static/js/multiply.js b/static/js/multiply.js
index e360a65..29a9ced 100644
--- a/static/js/multiply.js
+++ b/static/js/multiply.js
@@ -65,6 +65,20 @@ form.addEventListener('submit', async function(e) {
);
document.getElementById('result').appendChild(exportXMLBtn);
+
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportMultiplyAsHTML(
+ payload.matrix_a,
+ payload.matrix_b,
+ result.result
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -114,4 +128,32 @@ ${prettyXML(resultMatrix, 'result')}
a.click();
URL.revokeObjectURL(url);
-}
\ No newline at end of file
+}
+
+function exportMultiplyAsHTML(matrixA, matrixB, resultMatrix) {
+ const html =
+`
+
+
+
+ Multiplicação de Matrizes
+
+
+ Operação: Multiplicação de Matrizes (A × B)
+
+ ${prettyHTML(matrixA, 'Matriz A')}
+ ${prettyHTML(matrixB, 'Matriz B')}
+ ${prettyHTML(resultMatrix, 'Resultado')}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'multiplicacao_matrizes.html';
+ a.click();
+
+ URL.revokeObjectURL(url);
+}
From a449507e15a51cf670166d363a3d71f00762bd44 Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:51:35 +0000
Subject: [PATCH 8/9] feat: scalar exportar em HTML
---
static/js/scalar.js | 43 ++++++++++++++++++++++++++++++++++++++++++-
1 file changed, 42 insertions(+), 1 deletion(-)
diff --git a/static/js/scalar.js b/static/js/scalar.js
index 4f74f4f..5c4db1d 100644
--- a/static/js/scalar.js
+++ b/static/js/scalar.js
@@ -55,6 +55,19 @@ form.addEventListener('submit', async function(e) {
document.getElementById('result').appendChild(exportXMLBtn);
+ const exportHTMLBtn = document.createElement('button');
+ exportHTMLBtn.textContent = 'Exportar como HTML';
+ exportHTMLBtn.className = 'btn-secondary';
+ exportHTMLBtn.style.marginTop = '0.5rem';
+
+ exportHTMLBtn.onclick = () => exportScalarAsHTML(
+ payload.scalar,
+ payload.matrix,
+ result.result
+);
+
+document.getElementById('result').appendChild(exportHTMLBtn);
+
} catch (error) {
showError(error.message);
}
@@ -104,4 +117,32 @@ ${prettyXML(resultMatrix, 'result')}
a.click();
URL.revokeObjectURL(url);
-}
\ No newline at end of file
+}
+
+function exportScalarAsHTML(scalar, matrix, resultMatrix) {
+ const html =
+`
+
+
+
+ Multiplicação por Escalar
+
+
+ Operação: Multiplicação por Escalar
+ Escalar: ${scalar}
+
+ ${prettyHTML(matrix, 'Matriz Original')}
+ ${prettyHTML(resultMatrix, 'Resultado')}
+
+`;
+
+ const blob = new Blob([html], { type: 'text/html' });
+ const url = URL.createObjectURL(blob);
+
+ const a = document.createElement('a');
+ a.href = url;
+ a.download = 'scalar_multiplication.html';
+ a.click();
+
+ URL.revokeObjectURL(url);
+}
From 2c22297f04b1593161f808719cf22c3732b1e9ca Mon Sep 17 00:00:00 2001
From: TocadoPorDeus <113973409+RicardoMaga@users.noreply.github.com>
Date: Sat, 24 Jan 2026 14:54:34 +0000
Subject: [PATCH 9/9] chore: remove useless const
---
static/js/decrypt.js | 4 ----
static/js/determinant.js | 6 +-----
static/js/encrypt.js | 4 ----
static/js/inverse.js | 2 --
static/js/multiply.js | 4 ----
static/js/scalar.js | 4 ----
static/js/sum-sub.js | 4 ----
static/js/transpose.js | 6 +-----
8 files changed, 2 insertions(+), 32 deletions(-)
diff --git a/static/js/decrypt.js b/static/js/decrypt.js
index 842ab40..5e0b164 100644
--- a/static/js/decrypt.js
+++ b/static/js/decrypt.js
@@ -83,8 +83,6 @@ document.getElementById('result').appendChild(exportHTMLBtn);
generateBtn.click();
-const json = prettyJson(matrixA, 4);
-
function exportDecryptAsJSON(encodingMatrix, encryptedMatrix, decryptedMessage) {
const json =
`{
@@ -105,8 +103,6 @@ function exportDecryptAsJSON(encodingMatrix, encryptedMatrix, decryptedMessage)
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportDecryptAsXML(encodingMatrix, encryptedMatrix, decryptedMessage) {
const xml =
`
diff --git a/static/js/determinant.js b/static/js/determinant.js
index b6b57c9..cb25ad4 100644
--- a/static/js/determinant.js
+++ b/static/js/determinant.js
@@ -66,7 +66,7 @@ form.addEventListener('submit', async function(e) {
);
document.getElementById('result').appendChild(exportHTMLBtn);
-
+
} catch (error) {
showError(error.message);
}
@@ -74,8 +74,6 @@ form.addEventListener('submit', async function(e) {
generateBtn.click();
-const json = prettyJson(matrixA, 4);
-
function exportDeterminantAsJSON(matrix, determinant) {
const json =
`{
@@ -95,8 +93,6 @@ function exportDeterminantAsJSON(matrix, determinant) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportDeterminantAsXML(matrix, determinant) {
const xml =
`
diff --git a/static/js/encrypt.js b/static/js/encrypt.js
index 1a3f0da..09c11cc 100644
--- a/static/js/encrypt.js
+++ b/static/js/encrypt.js
@@ -82,8 +82,6 @@ document.getElementById('result').appendChild(exportHTMLBtn);
generateBtn.click();
-const json = prettyJson(matrixA, 4);
-
function exportEncryptAsJSON(message, encodingMatrix, encryptedMatrix) {
const json =
`{
@@ -104,8 +102,6 @@ function exportEncryptAsJSON(message, encodingMatrix, encryptedMatrix) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportEncryptAsXML(message, encodingMatrix, encryptedMatrix) {
const xml =
`
diff --git a/static/js/inverse.js b/static/js/inverse.js
index 3339a9f..c4a775d 100644
--- a/static/js/inverse.js
+++ b/static/js/inverse.js
@@ -92,8 +92,6 @@ function exportInverseAsJSON(originalMatrix, inverseMatrix) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportInverseAsXML(originalMatrix, inverseMatrix) {
const xml =
`
diff --git a/static/js/multiply.js b/static/js/multiply.js
index 29a9ced..874eaa0 100644
--- a/static/js/multiply.js
+++ b/static/js/multiply.js
@@ -86,8 +86,6 @@ document.getElementById('result').appendChild(exportHTMLBtn);
generateBtn.click();
-const json = prettyJson(matrixA, 4);
-
function exportMultiplyAsJSON(matrixA, matrixB, resultMatrix) {
const json =
`{
@@ -108,8 +106,6 @@ function exportMultiplyAsJSON(matrixA, matrixB, resultMatrix) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportMultiplyAsXML(matrixA, matrixB, resultMatrix) {
const xml =
`
diff --git a/static/js/scalar.js b/static/js/scalar.js
index 5c4db1d..26bde4d 100644
--- a/static/js/scalar.js
+++ b/static/js/scalar.js
@@ -75,8 +75,6 @@ document.getElementById('result').appendChild(exportHTMLBtn);
generateBtn.click();
-const json = prettyJson(matrixA, 4);
-
function exportScalarAsJSON(scalar, matrix, resultMatrix) {
const json =
`{
@@ -97,8 +95,6 @@ function exportScalarAsJSON(scalar, matrix, resultMatrix) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportScalarAsXML(scalar, matrix, resultMatrix) {
const xml =
`
diff --git a/static/js/sum-sub.js b/static/js/sum-sub.js
index 94b64a1..2a8acbe 100644
--- a/static/js/sum-sub.js
+++ b/static/js/sum-sub.js
@@ -80,8 +80,6 @@ document.getElementById('result').appendChild(exportHTMLBtn);
generateBtn.click();
-const json = formatMatrix(matrixA, 4);
-
function exportAsJSON(matrixA, matrixB, matrixResult, operation) {
const json =
`{
@@ -102,8 +100,6 @@ function exportAsJSON(matrixA, matrixB, matrixResult, operation) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportAsXML(matrixA, matrixB, matrixResult, operation) {
const xml =
`
diff --git a/static/js/transpose.js b/static/js/transpose.js
index d4be4e5..1f6aab7 100644
--- a/static/js/transpose.js
+++ b/static/js/transpose.js
@@ -70,9 +70,7 @@ document.getElementById('result').appendChild(exportHTMLBtn);
});
generateBtn.click();
-
-const json = prettyJson(matrixA, 4);
-
+
function exportTransposeAsJSON(matrix, transposedMatrix) {
const json =
`{
@@ -92,8 +90,6 @@ function exportTransposeAsJSON(matrix, transposedMatrix) {
URL.revokeObjectURL(url);
}
-const xml = prettyXML(matrix, tagName);
-
function exportTransposeAsXML(matrix, transposedMatrix) {
const xml =
`