Skip to content
This repository has been archived by the owner on Jan 10, 2024. It is now read-only.

Commit

Permalink
feat: Add ability upload file to idnits view (#139)
Browse files Browse the repository at this point in the history
  • Loading branch information
kesara authored Dec 2, 2022
1 parent 2813ecc commit 5daea21
Show file tree
Hide file tree
Showing 2 changed files with 110 additions and 35 deletions.
26 changes: 21 additions & 5 deletions www/idnits.html
Original file line number Diff line number Diff line change
Expand Up @@ -75,11 +75,27 @@ <h1 class="text-center">IETF Author Tools - idnits</h1>
</ul>
</div>
<div>
<div>
<label class="form-label">URL</label>
<input class="form-control form-control-lg" id="formURL" type="url" placeholder="https://www.ietf.org/archive/id/draft-ietf-wg-example-01.txt" data-bs-toggle2="tooltip" data-bs-placement="bottom" title="Provide an Internet-Draft (ID) URL. See the About page for a list of allowed domains." required>
<div class="invalid-feedback">
Provide a valid URL. See the About page for <a href="/about.html#allowed-domains">a list of allowed domains</a>.
<ul class="nav nav-tabs" id="ulDraftTabs" role="tablist">
<li class="nav-item" role="presentation">
<button class="nav-link tab-link active" id="file-tab" data-bs-toggle="tab" data-bs-target="#file-div" type="button" role="tab" aria-controls="file-div" aria-selected="true" data-others="form-tab-url" data-bs-toggle2="tooltip" data-bs-placement="bottom">Upload File</button>
</li>
<li class="nav-item" role="presentation">
<button class="nav-link tab-link" id="url-tab" data-bs-toggle="tab" data-bs-target="#url" type="button" role="tab" aria-controls="url" aria-selected="false" data-others="form-tab-file" data-bs-toggle2="tooltip" data-bs-placement="bottom">URL</button>
</li>
</ul>
<div class="tab-content" id="ulDraftTabsContent">
<div class="tab-pane fade show active" id="file-div" role="tabpanel" aria-labelledby="file-tab">
<form id="form-tab-file">
<input class="form-control form-control-lg" id="file" name="file" type="file" accept=".xml,.md,.mkd,.txt" data-bs-toggle2="tooltip" data-bs-placement="bottom" title="Select input file. Input file can be XML, Markdown (kramdown-rfc or mmark) or text.">
</form>
</div>
<div class="tab-pane fade" id="url" role="tabpanel" aria-labelledby="url-tab">
<form id="form-tab-url">
<input class="form-control form-control-lg" id="formURL" type="url" placeholder="https://www.ietf.org/archive/id/draft-ietf-wg-example-01.txt" data-bs-toggle2="tooltip" data-bs-placement="bottom" title="Provide an Internet-Draft (ID) URL. See the About page for a list of allowed domains." required>
<div class="invalid-feedback">
Provide a valid URL. See the About page for <a href="/about.html#allowed-domains">a list of allowed domains</a>.
</div>
</form>
</div>
</div>
<div>
Expand Down
119 changes: 89 additions & 30 deletions www/scripts/idnits.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ const switchVerbose = document.getElementById('switchVerbose');
const switchVeryVerbose = document.getElementById('switchVeryVerbose');
const switchShowText = document.getElementById('switchShowText');
const switchSubmissionCheck = document.getElementById('switchSubmissionCheck');
const tabLinks = document.getElementsByClassName('tab-link');

reset();

Expand All @@ -17,6 +18,20 @@ var tooltipList = tooltipTriggerList.map(function (tooltipTriggerEl) {
formURL.addEventListener('keydown', submit);
buttonIdnits.addEventListener('click', idnits);
buttonSubmissionCheck.addEventListener('click', submissionCheck);
for (let tabLink of tabLinks) {
tabLink.addEventListener('click', resetOther);
}

function resetOther(event) {
const clickedItem = event.target || event.srcElement;
others = clickedItem.dataset.others.split(',');
others.forEach(resetForm);
}

function resetForm(form_id) {
const form = document.getElementById(form_id);
form.reset();
}

function submit(event) {
formURL.classList.remove('is-invalid');
Expand All @@ -43,46 +58,90 @@ function disableButtons() {
}

function idnits() {
if (formURL.checkValidity()) {
reset();
reset();

buttonIdnits.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>' + buttonIdnits.innerHTML;
disableButtons();
buttonIdnits.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>' + buttonIdnits.innerHTML;
disableButtons();

url = 'https://author-tools.ietf.org/api/idnits?url=' + formURL.value;
if (switchVeryVerbose.checked) {
url += '&verbose=2';
} else if (!switchVerbose.checked) {
url += '&verbose=0';
}
if (!switchShowText.checked) {
url += '&hidetext=True';
}
if (!switchSubmissionCheck.checked) {
url += '&submissioncheck=True';
}
if (formURL.value.length > 0) {
if (formURL.checkValidity()) {

window.location.href = url;
url = 'https://author-tools.ietf.org/api/idnits?url=' + formURL.value;
if (switchVeryVerbose.checked) {
url += '&verbose=2';
} else if (!switchVerbose.checked) {
url += '&verbose=0';
}
if (!switchShowText.checked) {
url += '&hidetext=True';
}
if (!switchSubmissionCheck.checked) {
url += '&submissioncheck=True';
}

window.location.href = url;
} else {
formURL.classList.add('is-invalid');
event.preventDefault();
event.stopPropagation();
}
} else {
formURL.classList.add('is-invalid');
event.preventDefault();
event.stopPropagation();
idnitsPost(submissionCheck=false);
}
}

function submissionCheck() {
if (formURL.checkValidity()) {
reset();
reset();

buttonSubmissionCheck.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>' + buttonSubmissionCheck.innerHTML;
disableButtons();
buttonSubmissionCheck.innerHTML = '<span class="spinner-border spinner-border-sm" role="status" aria-hidden="true"></span>' + buttonSubmissionCheck.innerHTML;
disableButtons();

url = 'https://author-tools.ietf.org/api/idnits?url=' + formURL.value;
url += '&submissioncheck=True&hidetext=True';
window.location.href = url;
if (formURL.value.length > 0) {
if (formURL.checkValidity()) {
url = 'https://author-tools.ietf.org/api/idnits?url=' + formURL.value;
url += '&submissioncheck=True&hidetext=True';
window.location.href = url;
} else {
formURL.classList.add('is-invalid');
event.preventDefault();
event.stopPropagation();
}
} else {
formURL.classList.add('is-invalid');
event.preventDefault();
event.stopPropagation();
idnitsPost(submissionCheck=true);
}
}

function idnitsPost(submissionCheck) {
const form = document.getElementById('form-tab-file');
const formData = new FormData();

if (submissionCheck) {
formData.append('submissioncheck', 'True');
} else {
if (switchVeryVerbose.checked) {
formData.append('verbose', '2');
} else if (!switchVerbose.checked) {
formData.append('verbose', '0');
}
if (!switchShowText.checked) {
formData.append('hidetext', 'True');
}
if (!switchSubmissionCheck.checked) {
formData.append('submissioncheck', 'True');
}
}

const apiCall = 'https://author-tools.ietf.org/api2/idnits';
form.method = 'POST';
form.action = apiCall;
form.enctype='multipart/form-data'
for (const [key, value] of formData) {
const hiddenField = document.createElement('input');
hiddenField.type = 'hidden';
hiddenField.id = key;
hiddenField.name = key;
hiddenField.value = value;
form.appendChild(hiddenField);
}
form.submit();
}

0 comments on commit 5daea21

Please sign in to comment.