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"