From 492b38a4dcba4cde7b3d974823483a0a6f47f0e8 Mon Sep 17 00:00:00 2001
From: Florian Spreckelsen <f.spreckelsen@indiscale.com>
Date: Fri, 18 Oct 2024 13:20:16 +0200
Subject: [PATCH] STY: Use unix formatting and web-beautified

---
 src/core/js/ext_cosmetics.js             | 349 +++++++++++------------
 test/core/js/modules/ext_cosmetics.js.js |  24 +-
 2 files changed, 186 insertions(+), 187 deletions(-)

diff --git a/src/core/js/ext_cosmetics.js b/src/core/js/ext_cosmetics.js
index 08c5e0e2..4eaac07e 100644
--- a/src/core/js/ext_cosmetics.js
+++ b/src/core/js/ext_cosmetics.js
@@ -1,175 +1,174 @@
-/*
- * This file is a part of the LinkAhead Project.
- *
- * Copyright (C) 2021-2024 IndiScale GmbH <info@indiscale.com>
- * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
- * Copyright (C) 2023 Florian Spreckelsen <f.spreckelsen@indiscale.com>
- * Copyright (C) 2023 Daniel Hornung <d.hornung@indiscale.com>
- * Copyright (C) 2024 Joscha Schmiedt <joscha@schmiedt.dev>
- *
- * This program is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as
- * published by the Free Software Foundation, either version 3 of the
- * License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with this program. If not, see <https://www.gnu.org/licenses/>.
- */
-
-"use strict";
-
-/**
- * Cosmetics module is a collection of small look-and-feel tweaks for the
- * LinkAhead webui.
- *
- * @author Timm Fitschen
- */
-var cosmetics = new function () {
-
-    /**
-     * Cut-off length of links. When linkify processes the links any href
-     * longer than this will be cut off at the end and "[...]" will be
-     * appended for the link text.
-     */
-    var _link_cut_off_length = 40;
-
-    var _custom_datetime = function () {
-        $('.caosdb-f-property-datetime-value').each(function (index) {
-            if (!($(this).hasClass("caosdb-v-property-datetime-customized"))) {
-                var result = this.innerText.replace(/T/, " ").replace(/\+.*/, "");
-                result = `<span class="caosdb-v-property-datetime-customized-newvalue">${result}</span>`;
-
-                // add class to highlight that this has been customized already
-                $(this).addClass("caosdb-v-property-datetime-customized")
-                $(this).hide();
-                $(this).after(result);
-            }
-        });
-    }
-
-    /**
-     * Remove all the custom datetime elements again, for example when entering the edit mode.
-     */
-    var _custom_datetime_clear = function () {
-        $('.caosdb-v-property-datetime-customized-newvalue').each(function () {
-            $(this).remove();
-        }
-        )
-    }
-
-    /**
-     * Return a string with all occurences of a http(s) url in a given string replaced by <a> elements
-     * @param {string} text - The text to be searched for URLs
-     * @returns {string} text with <a> elements instead of raw links
-     */
-    function linkify_string(text) {
-        // const match_url_regex = /https?:\/\/[^\s]*/g // original
-        // https://regexr.com helps you design regex
-        const match_url_regex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.?[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g
-
-        return text.replace(match_url_regex, function (href) {
-            var link_text = href;
-            if (_link_cut_off_length > 4 && link_text.length > _link_cut_off_length) {
-                link_text = link_text.substring(0, _link_cut_off_length - 5) + "[...]";
-            }
-
-            return `<a title="Open ${href} in a new tab." target="_blank" class="caosdb-v-property-href-value" href="${href}">${link_text} <i class="bi bi-box-arrow-up-right"></i></a>`;
-        });
-    }
-
-    /**
-     * Turn all URLs in .caosdb-f-property-text-value DOM elements into actual links
-     */
-    var _linkify_all_text_values = function () {
-        $('.caosdb-f-property-text-value').each(function (index) {
-            if (!($(this).hasClass("caosdb-v-property-linkified")) && (/https?:\/\//.test(this.innerText))) {
-                var linkified_text_value = linkify_string(this.innerText);
-                // add class to highlight that this has been linkified already
-                // (see https://gitlab.com/caosdb/caosdb-webui/-/issues/199).
-                $(this).addClass("caosdb-v-property-linkified")
-                $(this).hide();
-                $(this).after(linkified_text_value);
-            }
-        });
-    }
-
-    /**
-     * Convert any substring of a text-value beginning with 'http(s)://' into a
-     * link.
-     *
-     * A listener detects edit-mode changes and previews
-     */
-    var linkify = function () {
-        _linkify_all_text_values();
-
-        // edit-mode-listener
-        document.body.addEventListener(edit_mode.end_edit.type, _linkify_all_text_values, true);
-        // preview listener
-        document.body.addEventListener(preview.previewReadyEvent.type, _linkify_all_text_values, true);
-    }
-
-    /**
-     * Customize datetime formatting.
-     *
-     * A listener detects edit-mode changes and previews
-     */
-    var custom_datetime = function () {
-        _custom_datetime();
-
-        // edit-mode-listener to delete replacement
-        document.body.addEventListener(edit_mode.start_edit.type, _custom_datetime_clear, true);
-        // edit-mode-listener to recreate
-        document.body.addEventListener(edit_mode.end_edit.type, _custom_datetime, true);
-        // preview listener
-        document.body.addEventListener(preview.previewReadyEvent.type, _custom_datetime, true);
-    }
-
-    /**
-     * Prettify double values for display purposes.
-     */
-    const prettify_double_values = () => {
-        $('.caosdb-f-property-double-value').each(function (index) {
-            if (!$(this).hasClass("caosdb-v-property-double-prettified")) {
-                let value = parseFloat(this.innerText);
-                let prettified_value = "";
-
-                if (Math.abs(value) > 1e6 || Math.abs(value) < 1e-6) {
-                    // Use scientific notation for very large or very small values
-                    prettified_value = value.toExponential(1);
-                } else {
-                    // Otherwise, display with up to 12 significant digits
-                    prettified_value = value.toPrecision(12).replace(/\.?0+$/, '');
-                }
-
-                $(this).addClass("caosdb-v-property-double-prettified");
-                $(this).hide();
-                $(this).after(`<span class="caosdb-v-property-double-prettified-newvalue">${prettified_value}</span>`);
-            }
-        });
-    };
-
-    this.init = function () {
-        this.custom_datetime = custom_datetime;
-        if ("${BUILD_MODULE_EXT_COSMETICS_CUSTOMDATETIME}" == "ENABLED") {
-            custom_datetime();
-        }
-        this.linkify = linkify;
-        if ("${BUILD_MODULE_EXT_COSMETICS_LINKIFY}" == "ENABLED") {
-            linkify();
-        }
-        this.prettify_double_values = prettify_double_values;
-        if ("${BUILD_MODULE_EXT_COSMETICS_PRETTIFY_DOUBLES}" === "ENABLED") {
-            prettify_double_values();
-        }
-    }
-}
-
-
-$(document).ready(function () {
-    caosdb_modules.register(cosmetics);
-});
+/*
+ * This file is a part of the LinkAhead Project.
+ *
+ * Copyright (C) 2021-2024 IndiScale GmbH <info@indiscale.com>
+ * Copyright (C) 2021 Timm Fitschen <t.fitschen@indiscale.com>
+ * Copyright (C) 2023 Florian Spreckelsen <f.spreckelsen@indiscale.com>
+ * Copyright (C) 2023 Daniel Hornung <d.hornung@indiscale.com>
+ * Copyright (C) 2024 Joscha Schmiedt <joscha@schmiedt.dev>
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as
+ * published by the Free Software Foundation, either version 3 of the
+ * License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see <https://www.gnu.org/licenses/>.
+ */
+
+"use strict";
+
+/**
+ * Cosmetics module is a collection of small look-and-feel tweaks for the
+ * LinkAhead webui.
+ *
+ * @author Timm Fitschen
+ */
+var cosmetics = new function() {
+
+    /**
+     * Cut-off length of links. When linkify processes the links any href
+     * longer than this will be cut off at the end and "[...]" will be
+     * appended for the link text.
+     */
+    var _link_cut_off_length = 40;
+
+    var _custom_datetime = function() {
+        $('.caosdb-f-property-datetime-value').each(function(index) {
+            if (!($(this).hasClass("caosdb-v-property-datetime-customized"))) {
+                var result = this.innerText.replace(/T/, " ").replace(/\+.*/, "");
+                result = `<span class="caosdb-v-property-datetime-customized-newvalue">${result}</span>`;
+
+                // add class to highlight that this has been customized already
+                $(this).addClass("caosdb-v-property-datetime-customized")
+                $(this).hide();
+                $(this).after(result);
+            }
+        });
+    }
+
+    /**
+     * Remove all the custom datetime elements again, for example when entering the edit mode.
+     */
+    var _custom_datetime_clear = function() {
+        $('.caosdb-v-property-datetime-customized-newvalue').each(function() {
+            $(this).remove();
+        })
+    }
+
+    /**
+     * Return a string with all occurences of a http(s) url in a given string replaced by <a> elements
+     * @param {string} text - The text to be searched for URLs
+     * @returns {string} text with <a> elements instead of raw links
+     */
+    function linkify_string(text) {
+        // const match_url_regex = /https?:\/\/[^\s]*/g // original
+        // https://regexr.com helps you design regex
+        const match_url_regex = /https?:\/\/(www\.)?[-a-zA-Z0-9@:%._\+~#=]{1,256}\.?[a-zA-Z0-9()]{1,6}\b([-a-zA-Z0-9()@:%_\+.~#?&//=]*)/g
+
+        return text.replace(match_url_regex, function(href) {
+            var link_text = href;
+            if (_link_cut_off_length > 4 && link_text.length > _link_cut_off_length) {
+                link_text = link_text.substring(0, _link_cut_off_length - 5) + "[...]";
+            }
+
+            return `<a title="Open ${href} in a new tab." target="_blank" class="caosdb-v-property-href-value" href="${href}">${link_text} <i class="bi bi-box-arrow-up-right"></i></a>`;
+        });
+    }
+
+    /**
+     * Turn all URLs in .caosdb-f-property-text-value DOM elements into actual links
+     */
+    var _linkify_all_text_values = function() {
+        $('.caosdb-f-property-text-value').each(function(index) {
+            if (!($(this).hasClass("caosdb-v-property-linkified")) && (/https?:\/\//.test(this.innerText))) {
+                var linkified_text_value = linkify_string(this.innerText);
+                // add class to highlight that this has been linkified already
+                // (see https://gitlab.com/caosdb/caosdb-webui/-/issues/199).
+                $(this).addClass("caosdb-v-property-linkified")
+                $(this).hide();
+                $(this).after(linkified_text_value);
+            }
+        });
+    }
+
+    /**
+     * Convert any substring of a text-value beginning with 'http(s)://' into a
+     * link.
+     *
+     * A listener detects edit-mode changes and previews
+     */
+    var linkify = function() {
+        _linkify_all_text_values();
+
+        // edit-mode-listener
+        document.body.addEventListener(edit_mode.end_edit.type, _linkify_all_text_values, true);
+        // preview listener
+        document.body.addEventListener(preview.previewReadyEvent.type, _linkify_all_text_values, true);
+    }
+
+    /**
+     * Customize datetime formatting.
+     *
+     * A listener detects edit-mode changes and previews
+     */
+    var custom_datetime = function() {
+        _custom_datetime();
+
+        // edit-mode-listener to delete replacement
+        document.body.addEventListener(edit_mode.start_edit.type, _custom_datetime_clear, true);
+        // edit-mode-listener to recreate
+        document.body.addEventListener(edit_mode.end_edit.type, _custom_datetime, true);
+        // preview listener
+        document.body.addEventListener(preview.previewReadyEvent.type, _custom_datetime, true);
+    }
+
+    /**
+     * Prettify double values for display purposes.
+     */
+    const prettify_double_values = () => {
+        $('.caosdb-f-property-double-value').each(function(index) {
+            if (!$(this).hasClass("caosdb-v-property-double-prettified")) {
+                let value = parseFloat(this.innerText);
+                let prettified_value = "";
+
+                if (Math.abs(value) > 1e6 || Math.abs(value) < 1e-6) {
+                    // Use scientific notation for very large or very small values
+                    prettified_value = value.toExponential(1);
+                } else {
+                    // Otherwise, display with up to 12 significant digits
+                    prettified_value = value.toPrecision(12).replace(/\.?0+$/, '');
+                }
+
+                $(this).addClass("caosdb-v-property-double-prettified");
+                $(this).hide();
+                $(this).after(`<span class="caosdb-v-property-double-prettified-newvalue">${prettified_value}</span>`);
+            }
+        });
+    };
+
+    this.init = function() {
+        this.custom_datetime = custom_datetime;
+        if ("${BUILD_MODULE_EXT_COSMETICS_CUSTOMDATETIME}" == "ENABLED") {
+            custom_datetime();
+        }
+        this.linkify = linkify;
+        if ("${BUILD_MODULE_EXT_COSMETICS_LINKIFY}" == "ENABLED") {
+            linkify();
+        }
+        this.prettify_double_values = prettify_double_values;
+        if ("${BUILD_MODULE_EXT_COSMETICS_PRETTIFY_DOUBLES}" === "ENABLED") {
+            prettify_double_values();
+        }
+    }
+}
+
+
+$(document).ready(function() {
+    caosdb_modules.register(cosmetics);
+});
diff --git a/test/core/js/modules/ext_cosmetics.js.js b/test/core/js/modules/ext_cosmetics.js.js
index 7abf350a..54d06239 100644
--- a/test/core/js/modules/ext_cosmetics.js.js
+++ b/test/core/js/modules/ext_cosmetics.js.js
@@ -23,22 +23,22 @@
 'use strict';
 
 QUnit.module("ext_cosmetics.js", {
-    before: function (assert) {
+    before: function(assert) {
         cosmetics.init();
         // setup before module
     },
-    beforeEach: function (assert) {
+    beforeEach: function(assert) {
         // setup before each test
     },
-    afterEach: function (assert) {
+    afterEach: function(assert) {
         // teardown after each test
     },
-    after: function (assert) {
+    after: function(assert) {
         // teardown after module
     }
 });
 
-QUnit.test("custom datetime", function (assert) {
+QUnit.test("custom datetime", function(assert) {
     assert.ok(cosmetics.custom_datetime, "custom_datetime available");
     var test_cases = [
         ["1234-56-78", "1234-56-78"],
@@ -62,10 +62,10 @@ QUnit.test("custom datetime", function (assert) {
     }
 });
 
-QUnit.test("linkify - https", function (assert) {
+QUnit.test("linkify - https", function(assert) {
     assert.ok(cosmetics.linkify, "linkify available");
     var test_cases = [
-        ["https://link", 1, "https://link",],
+        ["https://link", 1, "https://link", ],
         ["this is other text https://link.com", 1, "https://link.com"],
         ["https://link; this is other text", 1, "https://link"],
         ["this is other text https://link.de and this as well", 1, "https://link.de"],
@@ -85,7 +85,7 @@ QUnit.test("linkify - https", function (assert) {
     }
 });
 
-QUnit.test("linkify - http", function (assert) {
+QUnit.test("linkify - http", function(assert) {
     var test_cases = [
         ["http://link", 1],
         ["this is other text http://link", 1],
@@ -106,7 +106,7 @@ QUnit.test("linkify - http", function (assert) {
     }
 });
 
-QUnit.test("linkify cut-off (40)", function (assert) {
+QUnit.test("linkify cut-off (40)", function(assert) {
     const container = $('<div></div>');
     $(document.body).append(container);
     const test_case = "here is some text https://this.is.a.link/with/more/than/40/characters/ this is more text";
@@ -117,10 +117,10 @@ QUnit.test("linkify cut-off (40)", function (assert) {
     assert.equal($(container).find("a").length, 1, "link is present");
     assert.equal($(container).find("a").text(), "https://this.is.a.link/with/more/th[...] ", "link text has been cut off");
     container.remove();
-    
+
 });
 
-QUnit.test("linkify - double values in URLs", function (assert) {
+QUnit.test("linkify - double values in URLs", function(assert) {
     var test_cases = [
         ["https://example.com/value=1.2345", 1],
         ["This is a URL with a double value: https://example.com/value=1.2345", 1],
@@ -140,7 +140,7 @@ QUnit.test("linkify - double values in URLs", function (assert) {
     }
 });
 
-QUnit.test("linkify - double values in URLs", function (assert) {
+QUnit.test("linkify - double values in URLs", function(assert) {
     var test_cases = [
         ["https://example.com/value=1.2345", 1],
         ["This is a URL with a double value: https://example.com/value=1.2345", 1],
-- 
GitLab