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 += ` \n`; return xml; +} + +function prettyHTML(matrix, title) { + let html = `

${title}

`; + html += ''; + + matrix.forEach(row => { + html += ''; + row.forEach(value => { + html += ``; + }); + html += ''; + }); + + html += '
${value}
'; + 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 = `