Spaces:
Runtime error
Runtime error
<html lang="en" class="js"> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no, maximum-scale=1"> | |
<meta name="description" content="summary is a small web application that help users summarizing long documents."> | |
<title>summary</title> | |
<link href="/embed/datien228/text-summarizer/static/assets/favicon.png" rel="icon" type="image/png" sizes="16x16"> | |
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-0evHe/X+R7YkIZDRvuzKMRqM+OrBnVFBL6DOitfPri4tjfHxaWutUpFmBp4vmVor" crossorigin="anonymous"> | |
<link rel="stylesheet" href="/embed/datien228/text-summarizer/static/css/style.css"> | |
<link rel="stylesheet" href="/embed/datien228/text-summarizer/static/assets/css/all.css"> | |
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> | |
<script src="https://cdnjs.cloudflare.com/ajax/libs/iframe-resizer/4.3.2/iframeResizer.contentWindow.min.js"></script> | |
</head> | |
<body class="d-flex flex-column min-vh-100"> | |
<ul class="nav nav-tabs"> | |
<li><a href="#" class="link link--io">creator</a></li> | |
<li><a href="#" class="link link--io">development</a></li> | |
<li><a href="#" class="link link--io">feedback</a></li> | |
</ul> | |
<div class="container-fluid"> | |
<div class="row"> | |
<div class="col-md-12 my-4"> | |
<a href="{{ url_for('home') }}" class="link-title"> | |
<h1 class="text-center page-title"> | |
summary | |
</h1> | |
</a> | |
</div> | |
</div> | |
<div class="row mt-4"> | |
<div class="col-md-1"></div> | |
<div class="col-md-4 input-field"> | |
<div class="row mb-4 flex-col-50"> | |
<div class="col-md-8"> | |
<h2 class="main-heading"> | |
put your text here | |
</h2> | |
<p>You can change document's language</p> | |
</div> | |
<div class="col-md-4 switch-format"> | |
<div class="toggle"> | |
<input type="radio" name="langSel" value="eng" id="engLang" checked="checked" /> | |
<label for="engLang">eng</label> | |
<input type="radio" name="langSel" value="vie" id="vieLang" /> | |
<label for="vieLang">vie</label> | |
</div> | |
</div> | |
</div> | |
<div class="row mb-4"> | |
<div class="col-md-12"> | |
<form id="input_form" class="form-horizontal requires-validation" method="post" novalidate> | |
<textarea type="text" class="input-nlp-text form-control shadow-none" id="input_text" name="input_text" | |
placeholder="Enter the documents here >" aria-label="Input Document" required value="@Request["inputText"]"></textarea> | |
<!-- <div class="valid-feedback"> | |
Text looks good! | |
</div> | |
<div class="invalid-feedback"> | |
Text is required! | |
</div>--> | |
</form> | |
</div> | |
</div> | |
<div class="row text-white" id="metadata"> | |
<div class="col-md-3 bg-black text-center flex-col" id="cnt-paras"> | |
<p>0 par</p> | |
</div> | |
<div class="col-md-3 bg-black text-center flex-col" id="cnt-words"> | |
<p>0 word</p> | |
</div> | |
<div class="col-md-3 bg-black text-center flex-col" id="cnt-chars"> | |
<p>0 char</p> | |
</div> | |
<div class="col-md-3 bg-black text-center flex-col"> | |
<p>english</p> | |
</div> | |
</div> | |
</div> | |
<div class="spacer"></div> | |
<div class="col-md-2 text-center my-auto"> | |
<div class="d-flex flex-column justify-content-center"> | |
<!-- <i class="fa-2x fa-solid fa-circle-check progress-icon" hidden></i> --> | |
<input class="toggle-load-icon" type="checkbox" id="check" disabled> | |
<label class="progress-icon" for="check" style="display:none"> | |
<div class="check-icon"></div> | |
</label> | |
<button class="button summarize-button" type="submit" form="input_form"> | |
summarize | |
<div class="button__horizontal"></div> | |
<div class="button__vertical"></div> | |
</button> | |
</div> | |
<h2 class="mt-2 pt-2" id="load-noti" style="display:none">Generating</h2> | |
</div> | |
<div class="spacer"></div> | |
<div class="col-md-4 output-field"> | |
<div class="row mb-4 flex-col-50"> | |
<div class="col-md-8"> | |
<h2 class="main-heading"> | |
summary here | |
</h2> | |
<p>You can change summary's length</p> | |
</div> | |
<div class="col-md-4 switch-format"> | |
<div class="toggle"> | |
<input type="radio" name="lengSel" value="short" id="shortSum" checked="checked" /> | |
<label for="shortSum">short</label> | |
<input type="radio" name="lengSel" value="long" id="longSum" /> | |
<label for="longSum">long</label> | |
</div> | |
<!-- <button type="button" class="floated btn btn-outline-dark btn-sm btn-block" id="short_button">short</button> | |
<button type="button" class="floated btn btn-outline-dark btn-sm btn-block" id="long_button">long</button> --> | |
<!-- <button class="btn btn-outline-dark btn-sm"><i class="fa-solid fa-2xs">Expand</i></button> --> | |
</div> | |
</div> | |
<div class="row mb-4"> | |
<div class="col-md-12"> | |
<textarea type="text" class="output-nlp-text no-border shadow-none" id="output_text" | |
placeholder="Output will be shown here >" aria-label="Output Document" disabled></textarea> | |
</div> | |
</div> | |
</div> | |
<div class="col-md-1"></div> | |
</div> | |
</div> | |
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.2.0-beta1/dist/js/bootstrap.bundle.min.js" integrity="sha384-pprn3073KE6tl6bjs2QrFaJGz5/SUsLqktiwsUTF55Jfv3qYSDhgCecCxMW52nD2" crossorigin="anonymous"></script> | |
<script> | |
// ======= INPUT FIELD (FORM CONTROL) VALIDATION ======= | |
var runOnce = false; | |
var short_summary = ''; | |
var long_summary = ''; | |
(function () { | |
'use strict' | |
const forms = document.querySelectorAll('.requires-validation') | |
Array.from(forms) | |
.forEach(function (form) { | |
form.addEventListener('submit', function (event) { | |
if (!form.checkValidity()) { | |
event.preventDefault() | |
event.stopPropagation() | |
} | |
form.classList.add('was-validated') | |
}, false) | |
}) | |
})() | |
// ======= RESET INPUT FIELD WHEN USER CLICKED AT IT (HAS RAN ONCE) ======= | |
$(function () { | |
$('#input_text').on("input", function () { | |
if (runOnce == true) { | |
$(".progress-icon").hide(); | |
$("#load-noti").hide(); | |
$(".summarize-button").fadeIn(); | |
$("#load-noti").text("Generating"); | |
} | |
}); | |
}); | |
$('#shortSum').on("click", function () { | |
var outputField = document.getElementById("output_text"); | |
outputField.innerHTML = short_summary; | |
}); | |
$('#longSum').on("click", function () { | |
var outputField = document.getElementById("output_text"); | |
outputField.innerHTML = long_summary; | |
}); | |
setInterval(function (e) { | |
var strText = jQuery.trim($('#input_text').val()); | |
var cntChar = strText.replace( /[\r\n]+/gm, "" ).length; | |
var cntWord = strText.split(/[\s\.\?]+/).length; | |
var cntPara = strText.split("\n\n").length; | |
var cntPara2 = strText.split("/\n\s/g").length; | |
var postFix = ''; | |
if (strText == '') { | |
cntWord = 0; | |
cntLine = 0; | |
cntPara = 0; | |
} | |
$('#cnt-paras').children('p').text(cntPara + (cntPara > 1 ? " pars" : " par")); | |
$('#cnt-words').children('p').text(cntWord + (cntWord > 1 ? " words" : " word")); | |
$('#cnt-chars').children('p').text(cntChar + (cntChar > 1 ? " chars" : " char")); | |
}, 100); | |
// ======= COMMUNICATE WITH FLSAK BACK END TO RUN ML TASK ======= | |
$(document).on('submit', '#input_form', function (e) { | |
var outputField = document.getElementById("output_text"); | |
var data = { "input_text": $("#input_text").val() }; | |
e.preventDefault(); | |
$.ajax({ | |
type: 'POST', | |
url: '/summarize', | |
data: JSON.stringify(data), | |
contentType: "application/json", | |
dataType: 'json', | |
beforeSend: function () { | |
$("#check").attr('checked', false); | |
$("#input_text").attr("readonly", true); | |
$(".summarize-button").hide(); | |
$(".progress-icon").fadeIn(); | |
$("#load-noti").fadeIn(); | |
}, | |
success: function (response) { | |
short_summary = response.short; | |
long_summary = response.long; | |
outputField.innerHTML = short_summary; | |
}, | |
complete: function (response) { | |
$("#check").attr('checked', true); | |
$("#input_text").attr("readonly", false); | |
$("#load-noti").text("Completed") | |
runOnce = true; | |
}, | |
}) | |
}); | |
</script> | |
</body> | |
<footer class="bg-light text-center text-dark mt-auto"> | |
<div class="container mt-3 pb-0"> | |
<section class="mb-3"> | |
<h4>Processing speed depends on the document's length</h4> | |
<!-- Linkedin --> | |
<!-- <a class="btn btn-sm btn-outline-light btn-floating m-1" href="#!" role="button" | |
><i class="fab fa-linkedin-in small"></i | |
></a> --> | |
<!-- Github --> | |
<!-- <a class="btn btn-sm btn-light btn-floating m-1 small" href="#!" role="button" | |
><i class="fab fa-github small"></i | |
></a> --> | |
</section> | |
</div> | |
<!-- Copyright --> | |
<div class="text-center p-2 bg-dark"> | |
<p class="text-white"> | |
Created by | |
<a class="link-light" href="https://github.com/anhtien228" style="font-weight: 600;">Anh-Tien Doan</a> | |
in 2022 | |
</p> | |
<a class="link-secondary" href="https://flask.palletsprojects.com/en/2.1.x/" style="transition: 0.2s ease-in-out;"> | |
<p>built with Flask</p> | |
</a> | |
</div> | |
<!-- Copyright --> | |
</footer> | |
</html> |