diff --git a/src/js/utilsDOM.js b/src/js/utilsDOM.js
index 875aac331e539f2485694334662649616279eccf..e087b7c3730b08681221f1ee14bd496366acd918 100644
--- a/src/js/utilsDOM.js
+++ b/src/js/utilsDOM.js
@@ -259,6 +259,34 @@ App.UI.DOM.includeDOM = function(node, uniqueID, tag = "span") {
 	return `<${tag} id='inclDOM${uniqueID}'></${tag}>`;
 };
 
+/**
+ * Concats an array of DOM nodes or strings into a human readable list.
+ *
+ * @param {Array<Node|string>} content
+ * @param {string} [delimiter]
+ * @param {string} [lastDelimiter]
+ * @returns {Node|string}
+ */
+App.UI.DOM.arrayToList = function(content, delimiter = ", ", lastDelimiter = " and ") {
+	if (content.length === 0) {
+		return "none";
+	}
+	if (this.length === 1) {
+		return content[0];
+	}
+	const fragment = document.createDocumentFragment();
+	const last = content.pop();
+	for (let i = 0; i < content.length; i++) {
+		fragment.append(content[i]);
+		if (i < content.length - 1) {
+			fragment.append(delimiter);
+		}
+	}
+	content.push(last); // don't leave the array modified
+	fragment.append(lastDelimiter, last);
+	return fragment;
+};
+
 /**
  * @param {string} text
  * @returns {HTMLElement}