diff --git a/src/Components/Accordion.js b/assets/js/Components/Accordion.jsx
similarity index 96%
rename from src/Components/Accordion.js
rename to assets/js/Components/Accordion.jsx
index a78eea198..a03b189be 100644
--- a/src/Components/Accordion.js
+++ b/assets/js/Components/Accordion.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
export default class Accordion extends Component {
diff --git a/src/Components/ActWidget.js b/assets/js/Components/ActWidget.jsx
similarity index 95%
rename from src/Components/ActWidget.js
rename to assets/js/Components/ActWidget.jsx
index 869e3c12b..d1e9c7eac 100644
--- a/src/Components/ActWidget.js
+++ b/assets/js/Components/ActWidget.jsx
@@ -1,6 +1,6 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
-import RequestGeneratorBuilder from './RequestGeneratorBuilder';
+import RequestGeneratorBuilder from './RequestGeneratorBuilder.jsx';
import { fakeEvt } from '../Utility/common';
import { VALID_REQUEST_TYPES } from '../Utility/requests';
diff --git a/src/Components/CommentsWidget.js b/assets/js/Components/CommentsWidget.jsx
similarity index 98%
rename from src/Components/CommentsWidget.js
rename to assets/js/Components/CommentsWidget.jsx
index 6f39660da..8aee368e6 100644
--- a/src/Components/CommentsWidget.js
+++ b/assets/js/Components/CommentsWidget.jsx
@@ -1,8 +1,8 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import { IntlProvider, Text, MarkupText } from 'preact-i18n';
-import t from 'Utility/i18n';
-import FlashMessage, { flash } from './FlashMessage';
-import StarWidget from './StarWidget';
+import t from '../Utility/i18n';
+import FlashMessage, { flash } from './FlashMessage.jsx';
+import StarWidget from './StarWidget.jsx';
import { rethrow, WarningException } from '../Utility/errors';
import PropTypes from 'prop-types';
diff --git a/src/Components/DonationWidget.js b/assets/js/Components/DonationWidget.jsx
similarity index 98%
rename from src/Components/DonationWidget.js
rename to assets/js/Components/DonationWidget.jsx
index 8eebc63fb..a71ef95af 100644
--- a/src/Components/DonationWidget.js
+++ b/assets/js/Components/DonationWidget.jsx
@@ -1,12 +1,12 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { IntlProvider, Text, MarkupText } from 'preact-i18n';
import { PARAMETERS, almostUniqueId, renderMoney } from '../Utility/common';
import { CriticalException, rethrow } from '../Utility/errors';
import t from '../Utility/i18n';
-import FlashMessage, { flash } from './FlashMessage';
-import Radio from './Radio';
+import FlashMessage, { flash } from './FlashMessage.jsx';
+import Radio from './Radio.jsx';
import { clientPost } from '../Utility/browser';
-import LoadingIndicator from './LoadingIndicator';
+import LoadingIndicator from './LoadingIndicator.jsx';
const DONATIONS_API = 'https://backend.datenanfragen.de/donation';
const SUGGESTED_AMOUNTS = [5, 10, 15, 25, 50, 75, 100, 150, 200, 250];
diff --git a/src/Components/FeatureDisabledWidget.js b/assets/js/Components/FeatureDisabledWidget.jsx
similarity index 93%
rename from src/Components/FeatureDisabledWidget.js
rename to assets/js/Components/FeatureDisabledWidget.jsx
index 260eb320d..19eee6deb 100644
--- a/src/Components/FeatureDisabledWidget.js
+++ b/assets/js/Components/FeatureDisabledWidget.jsx
@@ -1,5 +1,5 @@
-import { Component } from 'preact';
-import t from 'Utility/i18n';
+import { h, Component, Fragment } from 'preact';
+import t from '../Utility/i18n';
import PropTypes from 'prop-types';
export default class FeatureDisabledWidget extends Component {
diff --git a/src/Components/FlashMessage.js b/assets/js/Components/FlashMessage.jsx
similarity index 96%
rename from src/Components/FlashMessage.js
rename to assets/js/Components/FlashMessage.jsx
index 13eb1b3f3..ca34039bb 100644
--- a/src/Components/FlashMessage.js
+++ b/assets/js/Components/FlashMessage.jsx
@@ -1,4 +1,4 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
import t from '../Utility/i18n';
diff --git a/src/Components/Generator/ActionButton.js b/assets/js/Components/Generator/ActionButton.jsx
similarity index 96%
rename from src/Components/Generator/ActionButton.js
rename to assets/js/Components/Generator/ActionButton.jsx
index 3d1395aea..bafc43e9a 100644
--- a/src/Components/Generator/ActionButton.js
+++ b/assets/js/Components/Generator/ActionButton.jsx
@@ -1,7 +1,7 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
import { Text, IntlProvider } from 'preact-i18n';
-import MailtoDropdown from '../MailtoDropdown';
+import MailtoDropdown from '../MailtoDropdown.jsx';
export default class ActionButton extends Component {
render(props) {
diff --git a/src/Components/Generator/CompanyWidget.js b/assets/js/Components/Generator/CompanyWidget.jsx
similarity index 98%
rename from src/Components/Generator/CompanyWidget.js
rename to assets/js/Components/Generator/CompanyWidget.jsx
index a2b361d12..841b5ba65 100644
--- a/src/Components/Generator/CompanyWidget.js
+++ b/assets/js/Components/Generator/CompanyWidget.jsx
@@ -1,7 +1,7 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import t from '../../Utility/i18n';
import { Text, IntlProvider } from 'preact-i18n';
-import Accordion from '../Accordion';
+import Accordion from '../Accordion.jsx';
import PropTypes from 'prop-types';
export default class CompanyWidget extends Component {
diff --git a/src/Components/Generator/DynamicInput.js b/assets/js/Components/Generator/DynamicInput.jsx
similarity index 99%
rename from src/Components/Generator/DynamicInput.js
rename to assets/js/Components/Generator/DynamicInput.jsx
index 371d24582..f9b9e2272 100644
--- a/src/Components/Generator/DynamicInput.js
+++ b/assets/js/Components/Generator/DynamicInput.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import { Text, IntlProvider } from 'preact-i18n';
import t from '../../Utility/i18n';
import PropTypes from 'prop-types';
diff --git a/src/Components/Generator/DynamicInputContainer.js b/assets/js/Components/Generator/DynamicInputContainer.jsx
similarity index 99%
rename from src/Components/Generator/DynamicInputContainer.js
rename to assets/js/Components/Generator/DynamicInputContainer.jsx
index f1e817833..6539eeb3c 100644
--- a/src/Components/Generator/DynamicInputContainer.js
+++ b/assets/js/Components/Generator/DynamicInputContainer.jsx
@@ -1,5 +1,5 @@
-import { Component } from 'preact';
-import DynamicInput from './DynamicInput';
+import { h, Component, Fragment } from 'preact';
+import DynamicInput from './DynamicInput.jsx';
import { Text, IntlProvider } from 'preact-i18n';
import t from '../../Utility/i18n';
import PropTypes from 'prop-types';
diff --git a/src/Components/Generator/RecipientInput.js b/assets/js/Components/Generator/RecipientInput.jsx
similarity index 96%
rename from src/Components/Generator/RecipientInput.js
rename to assets/js/Components/Generator/RecipientInput.jsx
index debe331c5..efa6072c7 100644
--- a/src/Components/Generator/RecipientInput.js
+++ b/assets/js/Components/Generator/RecipientInput.jsx
@@ -1,5 +1,5 @@
-import { Component } from 'preact';
-import t from 'Utility/i18n';
+import { h, Component, Fragment } from 'preact';
+import t from '../../Utility/i18n';
import { Text, IntlProvider } from 'preact-i18n';
import PropTypes from 'prop-types';
diff --git a/src/Components/Generator/RequestForm.js b/assets/js/Components/Generator/RequestForm.jsx
similarity index 97%
rename from src/Components/Generator/RequestForm.js
rename to assets/js/Components/Generator/RequestForm.jsx
index 5c3717555..7435d53e2 100644
--- a/src/Components/Generator/RequestForm.js
+++ b/assets/js/Components/Generator/RequestForm.jsx
@@ -1,13 +1,13 @@
-import { Component } from 'preact';
-import DynamicInputContainer from './DynamicInputContainer';
-import SignatureInput from './SignatureInput';
+import { h, Component, Fragment } from 'preact';
+import DynamicInputContainer from './DynamicInputContainer.jsx';
+import SignatureInput from './SignatureInput.jsx';
import { MarkupText, Text, IntlProvider } from 'preact-i18n';
import t from '../../Utility/i18n';
-import { AddressControl } from './DynamicInput';
-import Accordion from '../Accordion';
-import RequestTypeChooser from './RequestTypeChooser';
-import RecipientInput from './RecipientInput';
-import TransportMediumChooser from './TransportMediumChooser';
+import { AddressControl } from './DynamicInput.jsx';
+import Accordion from '../Accordion.jsx';
+import RequestTypeChooser from './RequestTypeChooser.jsx';
+import RecipientInput from './RecipientInput.jsx';
+import TransportMediumChooser from './TransportMediumChooser.jsx';
import PropTypes from 'prop-types';
export default class RequestForm extends Component {
diff --git a/src/Components/Generator/RequestTypeChooser.js b/assets/js/Components/Generator/RequestTypeChooser.jsx
similarity index 92%
rename from src/Components/Generator/RequestTypeChooser.js
rename to assets/js/Components/Generator/RequestTypeChooser.jsx
index aed2ccbc0..090c9e803 100644
--- a/src/Components/Generator/RequestTypeChooser.js
+++ b/assets/js/Components/Generator/RequestTypeChooser.jsx
@@ -1,6 +1,6 @@
-import { Component } from 'preact';
-import t from 'Utility/i18n';
-import Radio from '../Radio';
+import { h, Component, Fragment } from 'preact';
+import t from '../../Utility/i18n';
+import Radio from '../Radio.jsx';
import { VALID_REQUEST_TYPES } from '../../Utility/requests';
import PropTypes from 'prop-types';
diff --git a/src/Components/Generator/SignatureInput.js b/assets/js/Components/Generator/SignatureInput.jsx
similarity index 99%
rename from src/Components/Generator/SignatureInput.js
rename to assets/js/Components/Generator/SignatureInput.jsx
index 7c4bb4487..dec1f03ef 100644
--- a/src/Components/Generator/SignatureInput.js
+++ b/assets/js/Components/Generator/SignatureInput.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import { Text, IntlProvider } from 'preact-i18n';
import { detectBlockedCanvasImageExtraction } from '../../Utility/browser';
import PropTypes from 'prop-types';
diff --git a/src/Components/Generator/TransportMediumChooser.js b/assets/js/Components/Generator/TransportMediumChooser.jsx
similarity index 94%
rename from src/Components/Generator/TransportMediumChooser.js
rename to assets/js/Components/Generator/TransportMediumChooser.jsx
index 015fa7a98..31bcce3bc 100644
--- a/src/Components/Generator/TransportMediumChooser.js
+++ b/assets/js/Components/Generator/TransportMediumChooser.jsx
@@ -1,8 +1,8 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
-import t from 'Utility/i18n';
+import t from '../../Utility/i18n';
import { Text, IntlProvider } from 'preact-i18n';
-import Radio from '../Radio';
+import Radio from '../Radio.jsx';
export default class TransportMediumChooser extends Component {
render() {
diff --git a/src/Components/I18nWidget.js b/assets/js/Components/I18nWidget.jsx
similarity index 95%
rename from src/Components/I18nWidget.js
rename to assets/js/Components/I18nWidget.jsx
index 7cedefd5c..34381c64f 100644
--- a/src/Components/I18nWidget.js
+++ b/assets/js/Components/I18nWidget.jsx
@@ -1,8 +1,11 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { IntlProvider, MarkupText, Text } from 'preact-i18n';
-import Modal from './Modal';
-import t from 'Utility/i18n';
+import Modal from './Modal.jsx';
+import t from '../Utility/i18n';
import PropTypes from 'prop-types';
+import * as params from '@params';
+const SUPPORTED_LANGUAGES = params['supported_languages'];
+const SUPPORTED_COUNTRIES = params['supported_countries'];
export default class I18nWidget extends Component {
constructor(props) {
diff --git a/src/Components/LoadingIndicator.js b/assets/js/Components/LoadingIndicator.jsx
similarity index 94%
rename from src/Components/LoadingIndicator.js
rename to assets/js/Components/LoadingIndicator.jsx
index 26c22fab3..aefef1f8f 100644
--- a/src/Components/LoadingIndicator.js
+++ b/assets/js/Components/LoadingIndicator.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
export default class LoadingIndicator extends Component {
diff --git a/src/Components/MailtoDropdown.js b/assets/js/Components/MailtoDropdown.jsx
similarity index 95%
rename from src/Components/MailtoDropdown.js
rename to assets/js/Components/MailtoDropdown.jsx
index 902b39940..e6e24258f 100644
--- a/src/Components/MailtoDropdown.js
+++ b/assets/js/Components/MailtoDropdown.jsx
@@ -1,8 +1,8 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { Text, IntlProvider } from 'preact-i18n';
import PropTypes from 'prop-types';
import t, { t_r } from '../Utility/i18n';
-import Modal from './Modal';
+import Modal from './Modal.jsx';
// We only want to select everything in the copymanually inputs if they aren't yet focused. That, the user can still
// an individual selection if they prefer.
@@ -119,14 +119,14 @@ export default class MailtoDropdown extends Component {
),
body: encodeURIComponent(props.letter.toEmailString()),
};
- const handler_buttons = handlers.map((h) => (
+ const handler_buttons = handlers.map((handler) => (
// eslint-disable-next-line jsx-a11y/anchor-is-valid
{
if (!props.letter) e.preventDefault();
else {
- if (MAILTO_HANDLERS[h].onClick) MAILTO_HANDLERS[h].onClick(data);
+ if (MAILTO_HANDLERS[handler].onClick) MAILTO_HANDLERS[handler].onClick(data);
props.onSuccess();
}
}}
@@ -134,7 +134,7 @@ export default class MailtoDropdown extends Component {
target="_blank"
rel="noreferrer noopener"
style="margin-top: 10px;">
- {t(h, 'mailto')}
+ {t(handler, 'mailto')}
));
diff --git a/src/Components/Modal.js b/assets/js/Components/Modal.jsx
similarity index 98%
rename from src/Components/Modal.js
rename to assets/js/Components/Modal.jsx
index 8f5430140..f99250f59 100644
--- a/src/Components/Modal.js
+++ b/assets/js/Components/Modal.jsx
@@ -1,4 +1,4 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { createPortal } from 'preact/compat';
import t from '../Utility/i18n';
import PropTypes from 'prop-types';
diff --git a/src/Components/Radio.js b/assets/js/Components/Radio.jsx
similarity index 95%
rename from src/Components/Radio.js
rename to assets/js/Components/Radio.jsx
index e5790e462..11ee38f19 100644
--- a/src/Components/Radio.js
+++ b/assets/js/Components/Radio.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
export default class Radio extends Component {
diff --git a/src/Components/RequestGeneratorBuilder.js b/assets/js/Components/RequestGeneratorBuilder.jsx
similarity index 98%
rename from src/Components/RequestGeneratorBuilder.js
rename to assets/js/Components/RequestGeneratorBuilder.jsx
index 4e303fac6..90ddbb507 100644
--- a/src/Components/RequestGeneratorBuilder.js
+++ b/assets/js/Components/RequestGeneratorBuilder.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import { IntlProvider, MarkupText } from 'preact-i18n';
import t, { t_r } from '../Utility/i18n';
import Request from '../DataType/Request';
@@ -13,15 +13,15 @@ import {
import RequestLetter from '../Utility/RequestLetter';
import { slugify, PARAMETERS } from '../Utility/common';
import SavedIdData, { ID_DATA_CHANGE_EVENT, ID_DATA_CLEAR_EVENT } from '../Utility/SavedIdData';
-import replacer_factory from '../Utility/request-generator-replacers';
+import replacer_factory from '../Utility/request-generator-replacers.jsx';
import { fetchCompanyDataBySlug } from '../Utility/companies';
import Privacy, { PRIVACY_ACTIONS } from '../Utility/Privacy';
-import Modal, { showModal, dismissModal } from './Modal';
-import SvaFinder from './SvaFinder';
+import Modal, { showModal, dismissModal } from './Modal.jsx';
+import SvaFinder from './SvaFinder.jsx';
import { clearUrlParameters } from '../Utility/browser';
import Template from 'letter-generator/Template';
-import UserRequests from '../my-requests';
-import ActionButton from './Generator/ActionButton';
+import UserRequests from '../my-requests.jsx';
+import ActionButton from './Generator/ActionButton.jsx';
import PropTypes from 'prop-types';
export default class RequestGeneratorBuilder extends Component {
diff --git a/src/Components/SearchBar.js b/assets/js/Components/SearchBar.jsx
similarity index 98%
rename from src/Components/SearchBar.js
rename to assets/js/Components/SearchBar.jsx
index 1d77f8005..dfa121217 100644
--- a/src/Components/SearchBar.js
+++ b/assets/js/Components/SearchBar.jsx
@@ -1,10 +1,10 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import { IntlProvider, MarkupText } from 'preact-i18n';
import t from '../Utility/i18n';
import Privacy, { PRIVACY_ACTIONS } from '../Utility/Privacy';
import * as Typesense from 'typesense';
import { rethrow } from '../Utility/errors';
-import FeatureDisabledWidget from './FeatureDisabledWidget';
+import FeatureDisabledWidget from './FeatureDisabledWidget.jsx';
import PropTypes from 'prop-types';
export let SearchBar;
diff --git a/src/Components/StarWidget.js b/assets/js/Components/StarWidget.jsx
similarity index 97%
rename from src/Components/StarWidget.js
rename to assets/js/Components/StarWidget.jsx
index d0842b07b..3cdf4bb58 100644
--- a/src/Components/StarWidget.js
+++ b/assets/js/Components/StarWidget.jsx
@@ -1,4 +1,4 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import PropTypes from 'prop-types';
// Adapted after https://jsfiddle.net/leaverou/CGP87/
diff --git a/src/Components/SvaFinder.js b/assets/js/Components/SvaFinder.jsx
similarity index 99%
rename from src/Components/SvaFinder.js
rename to assets/js/Components/SvaFinder.jsx
index ced18bc4c..ff96b5b1a 100644
--- a/src/Components/SvaFinder.js
+++ b/assets/js/Components/SvaFinder.jsx
@@ -1,5 +1,5 @@
-import { render, Component } from 'preact';
-import t from 'Utility/i18n';
+import { h, render, Component, Fragment } from 'preact';
+import t from '../Utility/i18n';
import { fetchSvaDataBySlug } from '../Utility/companies';
import PropTypes from 'prop-types';
diff --git a/src/Components/Wizard.js b/assets/js/Components/Wizard.jsx
similarity index 99%
rename from src/Components/Wizard.js
rename to assets/js/Components/Wizard.jsx
index d9f6b013e..bbe6bed6f 100644
--- a/src/Components/Wizard.js
+++ b/assets/js/Components/Wizard.jsx
@@ -1,7 +1,7 @@
-import { Component } from 'preact';
+import { h, Component, Fragment } from 'preact';
import t from '../Utility/i18n';
import { Text, MarkupText, IntlProvider } from 'preact-i18n';
-import { SearchBar } from './SearchBar';
+import { SearchBar } from './SearchBar.jsx';
import { rethrow } from '../Utility/errors';
import localforage from 'localforage';
import Cookie from 'js-cookie';
diff --git a/src/DataType/Request.js b/assets/js/DataType/Request.js
similarity index 99%
rename from src/DataType/Request.js
rename to assets/js/DataType/Request.js
index 3fabbdc97..876b863fc 100644
--- a/src/DataType/Request.js
+++ b/assets/js/DataType/Request.js
@@ -1,7 +1,7 @@
import { generateReference } from 'letter-generator/utility';
import { deepCopyObject } from '../Utility/common';
import { defaultFields, REQUEST_FALLBACK_LANGUAGE } from '../Utility/requests';
-import UserRequests from '../my-requests';
+import UserRequests from '../my-requests.jsx';
/**
* @typedef {"access" | "erasure" | "rectification" | "objection" | "custom"} RequestType
diff --git a/src/Utility/Privacy.js b/assets/js/Utility/Privacy.js
similarity index 100%
rename from src/Utility/Privacy.js
rename to assets/js/Utility/Privacy.js
diff --git a/src/Utility/RequestLetter.js b/assets/js/Utility/RequestLetter.js
similarity index 97%
rename from src/Utility/RequestLetter.js
rename to assets/js/Utility/RequestLetter.js
index 524897360..a0e9000b5 100644
--- a/src/Utility/RequestLetter.js
+++ b/assets/js/Utility/RequestLetter.js
@@ -3,8 +3,6 @@ import { formatAddress, stripTags } from 'letter-generator/utility';
import Letter from 'letter-generator/Letter';
import Template from 'letter-generator/Template';
import { rethrow } from './errors';
-// eslint-disable-next-line import/default
-import PdfWorker from './pdf.worker';
/**
* Callback with the generated PDF letter.
@@ -73,7 +71,9 @@ export default class RequestLetter {
*/
initiatePdfGeneration(filename) {
if (!this.pdfWorker) {
- this.pdfWorker = new PdfWorker();
+ // This is defined during the build with hugo.
+ // eslint-disable-next-line no-undef
+ this.pdfWorker = new Worker(PDF_WORKER_URL);
if (window.hugoDevMode) {
// copy the worker to window if we are in a dev env to enable easy testing
window.pdfWorker = this.pdfWorker;
diff --git a/src/Utility/SavedIdData.js b/assets/js/Utility/SavedIdData.js
similarity index 100%
rename from src/Utility/SavedIdData.js
rename to assets/js/Utility/SavedIdData.js
diff --git a/src/Utility/bank-transfer-codes.js b/assets/js/Utility/bank-transfer-codes.js
similarity index 100%
rename from src/Utility/bank-transfer-codes.js
rename to assets/js/Utility/bank-transfer-codes.js
diff --git a/src/Utility/browser.js b/assets/js/Utility/browser.js
similarity index 100%
rename from src/Utility/browser.js
rename to assets/js/Utility/browser.js
diff --git a/src/Utility/common.js b/assets/js/Utility/common.js
similarity index 100%
rename from src/Utility/common.js
rename to assets/js/Utility/common.js
diff --git a/src/Utility/companies.js b/assets/js/Utility/companies.js
similarity index 100%
rename from src/Utility/companies.js
rename to assets/js/Utility/companies.js
diff --git a/src/Utility/errors.js b/assets/js/Utility/errors.js
similarity index 100%
rename from src/Utility/errors.js
rename to assets/js/Utility/errors.js
diff --git a/src/Utility/i18n.js b/assets/js/Utility/i18n.js
similarity index 100%
rename from src/Utility/i18n.js
rename to assets/js/Utility/i18n.js
diff --git a/src/Utility/pdf.worker.js b/assets/js/Utility/pdf.worker.js
similarity index 100%
rename from src/Utility/pdf.worker.js
rename to assets/js/Utility/pdf.worker.js
diff --git a/src/Utility/request-generator-replacers.js b/assets/js/Utility/request-generator-replacers.jsx
similarity index 99%
rename from src/Utility/request-generator-replacers.js
rename to assets/js/Utility/request-generator-replacers.jsx
index cc56830f2..a977ed2c5 100644
--- a/src/Utility/request-generator-replacers.js
+++ b/assets/js/Utility/request-generator-replacers.jsx
@@ -1,4 +1,5 @@
// eslint-disable-next-line no-unused-vars
+import { h, Component, Fragment } from 'preact';
import { Text } from 'preact-i18n';
import t from '../Utility/i18n';
diff --git a/src/Utility/requests.js b/assets/js/Utility/requests.js
similarity index 100%
rename from src/Utility/requests.js
rename to assets/js/Utility/requests.js
diff --git a/src/Utility/vfs_fonts.js b/assets/js/Utility/vfs_fonts.js
similarity index 100%
rename from src/Utility/vfs_fonts.js
rename to assets/js/Utility/vfs_fonts.js
diff --git a/src/Utility/webpack-i18n-loader.js b/assets/js/Utility/webpack-i18n-loader.js
similarity index 100%
rename from src/Utility/webpack-i18n-loader.js
rename to assets/js/Utility/webpack-i18n-loader.js
diff --git a/src/company-list.js b/assets/js/company-list.jsx
similarity index 96%
rename from src/company-list.js
rename to assets/js/company-list.jsx
index 9d9d5b9ec..c7409d555 100644
--- a/src/company-list.js
+++ b/assets/js/company-list.jsx
@@ -1,10 +1,10 @@
-import { render, Component } from 'preact';
-import { SearchBar } from 'Components/SearchBar';
+import { h, render, Component, Fragment } from 'preact';
+import { SearchBar } from './Components/SearchBar.jsx';
import { IntlProvider, Text } from 'preact-i18n';
import PropTypes from 'prop-types';
-import t from 'Utility/i18n';
-import Privacy, { PRIVACY_ACTIONS } from 'Utility/Privacy';
+import t from './Utility/i18n';
+import Privacy, { PRIVACY_ACTIONS } from './Utility/Privacy';
import Scrollspy from 'react-scrollspy';
if (!Privacy.isAllowed(PRIVACY_ACTIONS.SEARCH) && document.getElementById('aa-search-input'))
diff --git a/src/error-handler.js b/assets/js/error-handler.js
similarity index 99%
rename from src/error-handler.js
rename to assets/js/error-handler.js
index 2badb9e69..fa072127a 100644
--- a/src/error-handler.js
+++ b/assets/js/error-handler.js
@@ -1,3 +1,5 @@
+const I18N_DEFINITION = require('./i18n/' + LOCALE + '.json');
+
// Our email hoster Uberspace has a spam filter that cannot be disabled and that doesn't like JSON. We have had problems
// in the past with error reports being marked as spam and not being delivered to us. Thus, we employ this function to
// make our JSON look as little like JSON as possible.
diff --git a/src/general.js b/assets/js/general.jsx
similarity index 88%
rename from src/general.js
rename to assets/js/general.jsx
index 28d350f23..e3b2cbd1e 100644
--- a/src/general.js
+++ b/assets/js/general.jsx
@@ -1,14 +1,17 @@
-import { render } from 'preact';
-import I18nWidget, { I18nButton } from './Components/I18nWidget';
-import CommentsWidget from './Components/CommentsWidget';
+import { h, render, Fragment } from 'preact';
+import I18nWidget, { I18nButton } from './Components/I18nWidget.jsx';
+import CommentsWidget from './Components/CommentsWidget.jsx';
import Cookie from 'js-cookie';
import { PARAMETERS } from './Utility/common';
+import * as params from '@params';
// has to run before any rendering, webpack will remove this if the condition is false
if (process.env.NODE_ENV === 'development') {
require('preact/debug');
}
+window.I18N_DEFINITION = require('./i18n/' + LOCALE + '.json');
+
window.PARAMETERS = PARAMETERS;
Object.defineProperty(globals, 'country', {
@@ -62,5 +65,5 @@ function guessUserCountry() {
if (!navigator_lang || !bcp47_country) return FALLBACK_COUNTRIES[LOCALE];
// If however we *can* guess the country but just don't support it, we show all companies.
- return SUPPORTED_COUNTRIES.includes(bcp47_country) ? bcp47_country : 'all';
+ return params['supported_countries'].includes(bcp47_country) ? bcp47_country : 'all';
}
diff --git a/src/generator.js b/assets/js/generator.jsx
similarity index 96%
rename from src/generator.js
rename to assets/js/generator.jsx
index fcb8205e9..0a3f27078 100644
--- a/src/generator.js
+++ b/assets/js/generator.jsx
@@ -1,15 +1,15 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { IntlProvider } from 'preact-i18n';
import { PARAMETERS } from './Utility/common';
import { clearUrlParameters } from './Utility/browser';
import t from './Utility/i18n';
import Joyride from 'react-joyride';
-import { tutorial_steps } from './wizard-tutorial.js';
+import { tutorial_steps } from './wizard-tutorial.jsx';
import Cookie from 'js-cookie';
-import RequestGeneratorBuilder from './Components/RequestGeneratorBuilder';
+import RequestGeneratorBuilder from './Components/RequestGeneratorBuilder.jsx';
import Privacy, { PRIVACY_ACTIONS } from './Utility/Privacy';
-import { SavedCompanies } from './Components/Wizard';
-import Modal, { showModal, dismissModal } from './Components/Modal';
+import { SavedCompanies } from './Components/Wizard.jsx';
+import Modal, { showModal, dismissModal } from './Components/Modal.jsx';
const HIDE_IN_WIZARD_MODE = [
'.search',
diff --git a/src/home.js b/assets/js/home.jsx
similarity index 91%
rename from src/home.js
rename to assets/js/home.jsx
index a82003e03..130b00733 100644
--- a/src/home.js
+++ b/assets/js/home.jsx
@@ -1,6 +1,6 @@
-import { render } from 'preact';
-import t from 'Utility/i18n';
-import Wizard from 'Components/Wizard';
+import { h, render, Fragment } from 'preact';
+import t from './Utility/i18n';
+import Wizard from './Components/Wizard.jsx';
/* modified after https://codepen.io/danielgroen/pen/VeRPOq */
const hero_rights = [
diff --git a/src/i18n/README.md b/assets/js/i18n/README.md
similarity index 100%
rename from src/i18n/README.md
rename to assets/js/i18n/README.md
diff --git a/src/i18n/bg.json b/assets/js/i18n/bg.json
similarity index 100%
rename from src/i18n/bg.json
rename to assets/js/i18n/bg.json
diff --git a/src/i18n/cs.json b/assets/js/i18n/cs.json
similarity index 100%
rename from src/i18n/cs.json
rename to assets/js/i18n/cs.json
diff --git a/src/i18n/da.json b/assets/js/i18n/da.json
similarity index 100%
rename from src/i18n/da.json
rename to assets/js/i18n/da.json
diff --git a/src/i18n/de.json b/assets/js/i18n/de.json
similarity index 100%
rename from src/i18n/de.json
rename to assets/js/i18n/de.json
diff --git a/src/i18n/el.json b/assets/js/i18n/el.json
similarity index 100%
rename from src/i18n/el.json
rename to assets/js/i18n/el.json
diff --git a/src/i18n/en.json b/assets/js/i18n/en.json
similarity index 100%
rename from src/i18n/en.json
rename to assets/js/i18n/en.json
diff --git a/src/i18n/es.json b/assets/js/i18n/es.json
similarity index 100%
rename from src/i18n/es.json
rename to assets/js/i18n/es.json
diff --git a/src/i18n/et.json b/assets/js/i18n/et.json
similarity index 100%
rename from src/i18n/et.json
rename to assets/js/i18n/et.json
diff --git a/src/i18n/fi.json b/assets/js/i18n/fi.json
similarity index 100%
rename from src/i18n/fi.json
rename to assets/js/i18n/fi.json
diff --git a/src/i18n/fr.json b/assets/js/i18n/fr.json
similarity index 100%
rename from src/i18n/fr.json
rename to assets/js/i18n/fr.json
diff --git a/src/i18n/hr.json b/assets/js/i18n/hr.json
similarity index 100%
rename from src/i18n/hr.json
rename to assets/js/i18n/hr.json
diff --git a/src/i18n/hu.json b/assets/js/i18n/hu.json
similarity index 100%
rename from src/i18n/hu.json
rename to assets/js/i18n/hu.json
diff --git a/src/i18n/it.json b/assets/js/i18n/it.json
similarity index 100%
rename from src/i18n/it.json
rename to assets/js/i18n/it.json
diff --git a/src/i18n/lt.json b/assets/js/i18n/lt.json
similarity index 100%
rename from src/i18n/lt.json
rename to assets/js/i18n/lt.json
diff --git a/src/i18n/lv.json b/assets/js/i18n/lv.json
similarity index 100%
rename from src/i18n/lv.json
rename to assets/js/i18n/lv.json
diff --git a/src/i18n/nl.json b/assets/js/i18n/nl.json
similarity index 100%
rename from src/i18n/nl.json
rename to assets/js/i18n/nl.json
diff --git a/src/i18n/pl.json b/assets/js/i18n/pl.json
similarity index 100%
rename from src/i18n/pl.json
rename to assets/js/i18n/pl.json
diff --git a/src/i18n/pt.json b/assets/js/i18n/pt.json
similarity index 100%
rename from src/i18n/pt.json
rename to assets/js/i18n/pt.json
diff --git a/src/i18n/ro.json b/assets/js/i18n/ro.json
similarity index 100%
rename from src/i18n/ro.json
rename to assets/js/i18n/ro.json
diff --git a/src/i18n/sk.json b/assets/js/i18n/sk.json
similarity index 100%
rename from src/i18n/sk.json
rename to assets/js/i18n/sk.json
diff --git a/src/i18n/sl.json b/assets/js/i18n/sl.json
similarity index 100%
rename from src/i18n/sl.json
rename to assets/js/i18n/sl.json
diff --git a/src/i18n/sv.json b/assets/js/i18n/sv.json
similarity index 100%
rename from src/i18n/sv.json
rename to assets/js/i18n/sv.json
diff --git a/src/id-data-controls.js b/assets/js/id-data-controls.jsx
similarity index 98%
rename from src/id-data-controls.js
rename to assets/js/id-data-controls.jsx
index c85c0d477..e887fb4a6 100644
--- a/src/id-data-controls.js
+++ b/assets/js/id-data-controls.jsx
@@ -1,12 +1,12 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import SavedIdData, { ID_DATA_CHANGE_EVENT, ID_DATA_CLEAR_EVENT } from './Utility/SavedIdData';
import Privacy, { PRIVACY_ACTIONS } from './Utility/Privacy';
-import t from 'Utility/i18n';
+import t from './Utility/i18n';
import { IntlProvider, MarkupText, Text } from 'preact-i18n';
-import DynamicInputContainer from './Components/Generator/DynamicInputContainer';
-import { AddressControl, DateControl, InputControl } from './Components/Generator/DynamicInput';
-import SignatureInput from './Components/Generator/SignatureInput';
-import FeatureDisabledWidget from 'Components/FeatureDisabledWidget';
+import DynamicInputContainer from './Components/Generator/DynamicInputContainer.jsx';
+import { AddressControl, DateControl, InputControl } from './Components/Generator/DynamicInput.jsx';
+import SignatureInput from './Components/Generator/SignatureInput.jsx';
+import FeatureDisabledWidget from './Components/FeatureDisabledWidget.jsx';
class IdDataControls extends Component {
constructor(props) {
diff --git a/src/my-requests.js b/assets/js/my-requests.jsx
similarity index 98%
rename from src/my-requests.js
rename to assets/js/my-requests.jsx
index c79f0c491..c08e337f5 100644
--- a/src/my-requests.js
+++ b/assets/js/my-requests.jsx
@@ -1,11 +1,11 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { IntlProvider, Text, MarkupText } from 'preact-i18n';
-import t from 'Utility/i18n';
+import t from './Utility/i18n';
import localforage from 'localforage';
-import Privacy, { PRIVACY_ACTIONS } from 'Utility/Privacy';
+import Privacy, { PRIVACY_ACTIONS } from './Utility/Privacy';
import { rethrow } from './Utility/errors';
import { hash } from './Utility/common';
-import FeatureDisabledWidget from 'Components/FeatureDisabledWidget';
+import FeatureDisabledWidget from './Components/FeatureDisabledWidget.jsx';
export default class UserRequests {
constructor() {
diff --git a/src/privacy-controls.js b/assets/js/privacy-controls.jsx
similarity index 95%
rename from src/privacy-controls.js
rename to assets/js/privacy-controls.jsx
index 6960ae836..6ecebc778 100644
--- a/src/privacy-controls.js
+++ b/assets/js/privacy-controls.jsx
@@ -1,12 +1,12 @@
-import { render, Component } from 'preact';
+import { h, render, Component, Fragment } from 'preact';
import { IntlProvider, Text, MarkupText } from 'preact-i18n';
-import t from 'Utility/i18n';
-import Privacy, { PRIVACY_ACTIONS } from 'Utility/Privacy';
-import UserRequests from './my-requests';
-import Modal from './Components/Modal';
+import t from './Utility/i18n';
+import Privacy, { PRIVACY_ACTIONS } from './Utility/Privacy';
+import UserRequests from './my-requests.jsx';
+import Modal from './Components/Modal.jsx';
import SavedIdData from './Utility/SavedIdData';
-import { SavedCompanies } from './Components/Wizard';
-import FlashMessage, { flash } from 'Components/FlashMessage';
+import { SavedCompanies } from './Components/Wizard.jsx';
+import FlashMessage, { flash } from './Components/FlashMessage.jsx';
import PropTypes from 'prop-types';
class PrivacyControl extends Component {
diff --git a/assets/js/react-shim.js b/assets/js/react-shim.js
new file mode 100644
index 000000000..95fe8e55d
--- /dev/null
+++ b/assets/js/react-shim.js
@@ -0,0 +1,3 @@
+import * as React from 'preact/compat';
+
+export { React };
diff --git a/src/suggest-edit.js b/assets/js/suggest-edit.jsx
similarity index 97%
rename from src/suggest-edit.js
rename to assets/js/suggest-edit.jsx
index 43978a6de..37f8effcf 100644
--- a/src/suggest-edit.js
+++ b/assets/js/suggest-edit.jsx
@@ -1,13 +1,13 @@
-import { render } from 'preact';
-import Modal from 'Components/Modal';
-import t from 'Utility/i18n';
+import { h, render, Fragment } from 'preact';
+import Modal from './Components/Modal.jsx';
+import t from './Utility/i18n';
import { fetchCompanyDataBySlug } from './Utility/companies';
import { slugify, domainWithoutTldFromUrl, PARAMETERS } from './Utility/common';
import { parsePhoneNumberFromString } from 'libphonenumber-js';
require('brutusin-json-forms');
/* global brutusin */
import { ErrorException, rethrow } from './Utility/errors';
-import FlashMessage, { flash } from 'Components/FlashMessage';
+import FlashMessage, { flash } from './Components/FlashMessage.jsx';
let bf;
let schema;
const SUBMIT_URL =
@@ -52,7 +52,7 @@ function renderForm(schema, company = undefined) {
'pgp-url',
'quality',
'facet-group',
- 'needs-id-document'
+ 'needs-id-document',
];
BrutusinForms.addDecorator((element, schema) => {
element.placeholder = '';
diff --git a/src/test-interface.js b/assets/js/test-interface.jsx
similarity index 89%
rename from src/test-interface.js
rename to assets/js/test-interface.jsx
index bd4ce4cec..6dbf16a4b 100644
--- a/src/test-interface.js
+++ b/assets/js/test-interface.jsx
@@ -1,6 +1,6 @@
// This file is necessary in order to be able to access interal methods from within the browser tests
-import FlashMessage, { flash } from 'Components/FlashMessage';
+import FlashMessage, { flash } from './Components/FlashMessage.jsx';
import localforage from 'localforage';
window.showFlash = function (type, text, duration) {
diff --git a/src/wizard-tutorial.js b/assets/js/wizard-tutorial.jsx
similarity index 96%
rename from src/wizard-tutorial.js
rename to assets/js/wizard-tutorial.jsx
index 46d01d351..7b9ff4574 100644
--- a/src/wizard-tutorial.js
+++ b/assets/js/wizard-tutorial.jsx
@@ -1,4 +1,4 @@
-import t from 'Utility/i18n';
+import t from './Utility/i18n';
export let tutorial_steps = [
{
diff --git a/assets/jsconfig.json b/assets/jsconfig.json
new file mode 100644
index 000000000..21ebafda8
--- /dev/null
+++ b/assets/jsconfig.json
@@ -0,0 +1,8 @@
+{
+ "compilerOptions": {
+ "baseUrl": ".",
+ "paths": {
+ "*": ["*"]
+ }
+ }
+}
diff --git a/layouts/partials/scripts.html b/layouts/partials/scripts.html
index 07e05a460..d6d76ff31 100644
--- a/layouts/partials/scripts.html
+++ b/layouts/partials/scripts.html
@@ -1,72 +1,80 @@
-{{ partialCached "supported-countries" . }}
+{{ $supported_countries := (partialCached "supported-countries" .) }}
+{{ $supported_languages := (partialCached "supported-languages" .) }}
+
-
-
-
+
-
-
-
+
+
+{{ $defines := dict "process.env.NODE_ENV" `"development"` "global" "window" "LOCALE" (printf `"%s"` .Site.Language.Lang) "COUNTRIES_WITH_SUGGESTED_COMPANIES" "['de', 'gb']" "BASE_URL" (printf `"%s"` ("/" | absURL)) }}
+{{ $params := (dict "supported_languages" $supported_languages "supported_countries" $supported_countries)}}
+{{ $opts := dict "target" "esnext" "JSXFactory" "h" "JSXFragment" "Fragment" "defines" $defines "sourceMap" "inline" "minify" true "params" $params}}
+
+{{ $general_js := resources.Get "js/general.jsx" | js.Build $opts | fingerprint}}
+
+
+{{ $error_handler_js := resources.Get "js/error-handler.js" | js.Build $opts | fingerprint}}
+
{{ if eq .Type "generator" }}
-
+{{ $pdf_worker_js := resources.Get "js/Utility/pdf.worker.js" | js.Build (dict "target" "esnext" "sourceMap" "inline" "minify" true) | fingerprint}}
+{{ $generator_js := resources.Get "js/generator.jsx" | js.Build (merge $opts (dict "defines" (dict "PDF_WORKER_URL" (printf `"%s"` $pdf_worker_js.RelPermalink)))) | fingerprint}}
+
{{ end }}
{{ if or (eq .Type "company") (eq .Type "categories") }}
-
+{{ $company_list_js := resources.Get "js/company-list.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "my-requests" }}
-
+{{ $my_requests_js := resources.Get "js/my-requests.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "privacy-controls" }}
-
+{{ $privacy_controls_js := resources.Get "js/privacy-controls.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "id-data-controls" }}
-
+{{ $id_data_controls_js := resources.Get "js/id-data-controls.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "suggest" }}
-
+{{ $suggest_edit_js := resources.Get "js/suggest-edit.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "supervisory-authorities" }}
-
+{{ $sva_finder_js := resources.Get "js/Components/SvaFinder.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "act" }}
-
+{{ $act_widget_js := resources.Get "js/Components/ActWidget.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if eq .Type "donate" }}
-
+{{ $donation_widget_js := resources.Get "js/Components/DonationWidget.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{ if .IsHome }}
-
+{{ $home_js := resources.Get "js/home.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
{{/* TODO: Do this in the js build via hugo pipes */}}
@@ -81,5 +89,6 @@
{{ if .Site.Params.devMode }}
-
+{{ $test_interface_js := resources.Get "js/test-interface.jsx" | js.Build $opts | fingerprint}}
+
{{ end }}
diff --git a/layouts/partials/supported-countries.html b/layouts/partials/supported-countries.html
index 7894121eb..8a9d3e8cb 100644
--- a/layouts/partials/supported-countries.html
+++ b/layouts/partials/supported-countries.html
@@ -1,21 +1,20 @@
{{ $.Scratch.Set "country_counts" (dict) }}
{{ range where $.Site.Pages "Type" "company" }}
-{{ range .Param "relevant-countries" }}
-{{ if not (isset ($.Scratch.Get "country_counts") .) }}
-{{ $.Scratch.SetInMap "country_counts" . 1 }}
-{{ else }}
-{{ $.Scratch.SetInMap "country_counts" . (add (index ($.Scratch.Get "country_counts") .) 1) }}
-{{ end }}
-{{ end }}
+ {{ range .Param "relevant-countries" }}
+ {{ if not (isset ($.Scratch.Get "country_counts") .) }}
+ {{ $.Scratch.SetInMap "country_counts" . 1 }}
+ {{ else }}
+ {{ $.Scratch.SetInMap "country_counts" . (add (index ($.Scratch.Get "country_counts") .) 1) }}
+ {{ end }}
+ {{ end }}
{{ end }}
-
+{{ end }}
+
+{{ return $.Scratch.GetSortedMapValues "countries" }}
diff --git a/layouts/partials/supported-languages.html b/layouts/partials/supported-languages.html
new file mode 100644
index 000000000..b2e80a809
--- /dev/null
+++ b/layouts/partials/supported-languages.html
@@ -0,0 +1,7 @@
+{{ $supported_languages := newScratch }}
+{{ if .IsTranslated }}
+ {{ range .Translations }}
+ {{ $supported_languages.Add .Lang .Permalink }}
+ {{ end }}
+{{ end }}
+{{ return $supported_languages.Values }}
diff --git a/package.json b/package.json
index 46c011310..1bfc98998 100644
--- a/package.json
+++ b/package.json
@@ -57,7 +57,9 @@
"qrcode": "^1.4.4",
"react-joyride": "^1.11.4",
"react-scrollspy": "^3.4.0",
- "typesense": "^0.3.0"
+ "typesense": "^0.3.0",
+ "react": "npm:@preact/compat",
+ "react-dom": "npm:@preact/compat"
},
"devDependencies": {
"@babel/core": "^7.5.5",
diff --git a/yarn.lock b/yarn.lock
index e4a3f6401..5096de595 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -9637,6 +9637,11 @@ raw-body@2.4.0:
iconv-lite "0.4.24"
unpipe "1.0.0"
+"react-dom@npm:@preact/compat", "react@npm:@preact/compat":
+ version "17.0.2"
+ resolved "https://registry.yarnpkg.com/@preact/compat/-/compat-17.0.2.tgz#c1b97a4d0add60fc07898a250448fa585479a920"
+ integrity sha512-svzrLCGU++qft7dPmP2hQuSfih73jge2ohoWCT+UQs7i9757p12xMTe3yefylW5t6zMkQEtQ6urPnGT3jh2VCg==
+
react-is@^16.8.1:
version "16.13.1"
resolved "https://registry.yarnpkg.com/react-is/-/react-is-16.13.1.tgz#789729a4dc36de2999dc156dd6c1d9c18cea56a4"