diff --git a/dynamic_form.js b/dynamic_form.js index de87762..fd8e25e 100644 --- a/dynamic_form.js +++ b/dynamic_form.js @@ -1,88 +1,110 @@ /** * Copyright (C) 2019 The Software Heritage developers * See the AUTHORS file at the top-level directory of this distribution * License: GNU Affero General Public License version 3, or any later version * See top-level LICENSE file for more information */ "use strict"; function createPersonFieldset(personPrefix, legend) { // Creates a fieldset containing inputs for informations about a person var fieldset = document.createElement("fieldset") fieldset.classList.add("person"); fieldset.id = personPrefix; fieldset.innerHTML = ` ${legend}

`; return fieldset; } function addPersonWithId(container, legend, prefix, id) { var fieldset = createPersonFieldset(`${prefix}_${id}`, `${legend} #${id}`); container.appendChild(fieldset); } function addPerson(legend, prefix) { var container = document.querySelector(`#${prefix}_container`); var personId = getNbPersons(prefix) + 1; addPersonWithId(container, legend, prefix, personId); - var nbPersonsField = container.querySelector(`#${prefix}_nb`); - nbPersonsField.value = personId; + setNbPersons(prefix, personId); } function removePerson(prefix) { var personId = getNbPersons(prefix); document.querySelector(`#${prefix}_${personId}`).remove(); - var nbPersonsField = document.querySelector(`#${prefix}_nb`); - nbPersonsField.value = personId-1; + setNbPersons(prefix, personId-1); } // Initialize a group of persons (authors, contributors) on page load. // Useful if the page is reloaded. function initPersons(prefix, legend) { - var nbAuthors = getNbPersons(prefix); + var nbPersons = getNbPersons(prefix); var personContainer = document.querySelector(`#${prefix}_container`) - for (let personId = 1; personId <= nbAuthors; personId++) { + for (let personId = 1; personId <= nbPersons; personId++) { addPersonWithId(personContainer, legend, prefix, personId); } } +function removePersons(prefix) { + var nbPersons = getNbPersons(prefix); + var personContainer = document.querySelector(`#${prefix}_container`) + + for (let personId = 1; personId <= nbPersons; personId++) { + removePerson(prefix) + } +} + +function resetForm() { + removePersons('author'); + removePersons('contributor'); + + // Reset the form after deleting elements, so nbPersons doesn't get + // reset before it's read. + document.querySelector('#inputForm').reset(); +} + function initCallbacks() { document.querySelector('#generateCodemeta') .addEventListener('click', generateCodemeta); + document.querySelector('#resetForm') + .addEventListener('click', resetForm); + + document.querySelector('#importCodemeta') + .addEventListener('click', importCodemeta); + document.querySelector('#inputForm') .addEventListener('change', generateCodemeta); initPersons('author', 'Author'); initPersons('contributor', 'Contributor'); } diff --git a/index.html b/index.html index c980e5a..857080f 100644 --- a/index.html +++ b/index.html @@ -1,134 +1,135 @@ CodeMeta generator

CodeMeta generator

Most fields are optional. Mandatory fields will be highlighted when generating Codemeta.

The software itself

Development community / tools

Current version of the software

Authors

Order of authors does not matter.

Contributors

Order of contributors does not matter.

+

 
     
 
 
diff --git a/utils.js b/utils.js
index 7e1e0ff..2d56bc9 100644
--- a/utils.js
+++ b/utils.js
@@ -1,13 +1,18 @@
 /**
  * Copyright (C) 2019  The Software Heritage developers
  * See the AUTHORS file at the top-level directory of this distribution
  * License: GNU Affero General Public License version 3, or any later version
  * See top-level LICENSE file for more information
  */
 
 "use strict";
 
 function getNbPersons(prefix) {
     var nbField = document.querySelector(`#${prefix}_nb`);
     return parseInt(nbField.value, 10);
 }
+
+function setNbPersons(prefix, nb) {
+    var nbField = document.querySelector(`#${prefix}_nb`);
+    nbField.value = nb;
+}