Fix all the styling issues in all the files

This commit is contained in:
JP1998 2018-12-09 23:46:21 +01:00
parent 5aa97e162d
commit 9124edc3f2
20 changed files with 798 additions and 815 deletions

View File

@ -16,6 +16,8 @@
} }
}, },
"rules": { "rules": {
"react/jsx-uses-react": "error",
"react/jsx-uses-vars": "error",
"indent": [ "indent": [
"error", "error",
4 4

View File

@ -11,11 +11,11 @@ import {
NavLink NavLink
} from 'reactstrap'; } from 'reactstrap';
import { connect } from 'react-redux' import { connect } from 'react-redux';
import React from "react"; import React from 'react';
import { logout } from './api' import { logout } from './api';
export function BigImage(props) { export function BigImage(props) {
return ( return (
@ -77,7 +77,7 @@ function Betabadge() {
class InvisibleLoginLogoutButtons extends React.Component { class InvisibleLoginLogoutButtons extends React.Component {
render() { render() {
const { isSignedIn, username } = this.props const { isSignedIn, username } = this.props;
if(isSignedIn) { if(isSignedIn) {
return ( return (
@ -100,12 +100,12 @@ class InvisibleLoginLogoutButtons extends React.Component {
const mapStateToLoginLogoutButtonProperties = (state) => { const mapStateToLoginLogoutButtonProperties = (state) => {
const { isSignedIn, username } = state.userinfo; const { isSignedIn, username } = state.userinfo;
return { isSignedIn, username } return { isSignedIn, username };
} };
const LoginLogoutButtons = connect( const LoginLogoutButtons = connect(
mapStateToLoginLogoutButtonProperties mapStateToLoginLogoutButtonProperties
)(InvisibleLoginLogoutButtons) )(InvisibleLoginLogoutButtons);
export function Footer() { export function Footer() {
return ( return (

View File

@ -1,5 +1,5 @@
import React from "react"; import React from 'react';
import {Alert, Button, Input, InputGroup, InputGroupAddon} from "reactstrap"; import { Alert, Button, Input, InputGroup, InputGroupAddon } from 'reactstrap';
export default class EditableStringList extends React.Component { export default class EditableStringList extends React.Component {
constructor(props) { constructor(props) {
@ -31,17 +31,14 @@ export default class EditableStringList extends React.Component {
if ((typeof this.state.entries !== 'undefined') && this.state.entries.length > 0) { if ((typeof this.state.entries !== 'undefined') && this.state.entries.length > 0) {
return ( return (
<div className="bg-light p-3 text-secondary font-italic"> <div className="bg-light p-3 text-secondary font-italic">
<StringInput submit={this.add} placeholder={this.props.inputPlaceholder} <StringInput submit={this.add} placeholder={this.props.inputPlaceholder} addButtonText={this.props.addButtonText}/>
addButtonText={this.props.addButtonText}/> {this.state.entries.map((text) => <Item text={text} key={text} removeItem={this.remove}/>)}
{this.state.entries.map((text) => <Item text={text} key={text}
removeItem={this.remove}/>)}
</div> </div>
); );
} else { } else {
return ( return (
<div className="bg-light p-3 text-secondary text-center font-italic"> <div className="bg-light p-3 text-secondary text-center font-italic">
<StringInput submit={this.add} placeholder={this.props.inputPlaceholder} <StringInput submit={this.add} placeholder={this.props.inputPlaceholder} addButtonText={this.props.addButtonText}/>
addButtonText={this.props.addButtonText}/>
{this.props.placeholder} {this.props.placeholder}
</div> </div>
); );
@ -64,8 +61,7 @@ class StringInput extends React.Component {
render() { render() {
return ( return (
<InputGroup className="mb-3"> <InputGroup className="mb-3">
<Input placeholder={this.props.placeholder} type="text" size="255" value={this.state.value} required <Input placeholder={this.props.placeholder} type="text" size="255" value={this.state.value} required onChange={this.handleChange} onKeyPress={(e) => {
onChange={this.handleChange} onKeyPress={(e) => {
if (e.key === 'Enter') { if (e.key === 'Enter') {
this.submit(); this.submit();
return false; return false;
@ -73,10 +69,10 @@ class StringInput extends React.Component {
}}/> }}/>
<InputGroupAddon addonType="append"> <InputGroupAddon addonType="append">
<Button color="success" outline={true} <Button color="success" outline={true}
onClick={(e) => this.submit()}>{this.props.addButtonText}</Button> onClick={() => this.submit()}>{this.props.addButtonText}</Button>
</InputGroupAddon> </InputGroupAddon>
</InputGroup> </InputGroup>
) );
} }
submit() { submit() {

View File

@ -1,4 +1,4 @@
import React from "react"; import React from 'react';
export function BigImage(props) { export function BigImage(props) {
return ( return (

View File

@ -7,5 +7,5 @@ export const errorMessages = {
login_errorunknown : { login_errorunknown : {
en : 'An unknown error prevented a successful login.' en : 'An unknown error prevented a successful login.'
} }
} };

View File

@ -1,20 +1,20 @@
import React from 'react' import React from 'react';
import { initializeStore } from '../api' import { initializeStore } from '../api';
const isServer = typeof window === 'undefined' const isServer = typeof window === 'undefined';
const __NEXT_REDUX_STORE__ = '__NEXT_REDUX_STORE__' const __NEXT_REDUX_STORE__ = '__NEXT_REDUX_STORE__';
function getOrCreateStore (initialState) { function getOrCreateStore (initialState) {
// Always make a new store if server, otherwise state is shared between requests // Always make a new store if server, otherwise state is shared between requests
if (isServer) { if (isServer) {
return initializeStore(initialState) return initializeStore(initialState);
} }
// Create store if unavailable on the client and set it on the window object // Create store if unavailable on the client and set it on the window object
if (!window[__NEXT_REDUX_STORE__]) { if (!window[__NEXT_REDUX_STORE__]) {
window[__NEXT_REDUX_STORE__] = initializeStore(initialState) window[__NEXT_REDUX_STORE__] = initializeStore(initialState);
} }
return window[__NEXT_REDUX_STORE__] return window[__NEXT_REDUX_STORE__];
} }
export default (App) => { export default (App) => {
@ -22,29 +22,29 @@ export default (App) => {
static async getInitialProps (appContext) { static async getInitialProps (appContext) {
// Get or Create the store with `undefined` as initialState // Get or Create the store with `undefined` as initialState
// This allows you to set a custom default initialState // This allows you to set a custom default initialState
const reduxStore = getOrCreateStore() const reduxStore = getOrCreateStore();
// Provide the store to getInitialProps of pages // Provide the store to getInitialProps of pages
appContext.ctx.reduxStore = reduxStore appContext.ctx.reduxStore = reduxStore;
let appProps = {} let appProps = {};
if (typeof App.getInitialProps === 'function') { if (typeof App.getInitialProps === 'function') {
appProps = await App.getInitialProps(appContext) appProps = await App.getInitialProps(appContext);
} }
return { return {
...appProps, ...appProps,
initialReduxState: reduxStore.getState() initialReduxState: reduxStore.getState()
} };
} }
constructor (props) { constructor (props) {
super(props) super(props);
this.reduxStore = getOrCreateStore(props.initialReduxState) this.reduxStore = getOrCreateStore(props.initialReduxState);
} }
render () { render () {
return <App {...this.props} reduxStore={this.reduxStore} /> return <App {...this.props} reduxStore={this.reduxStore} />;
} }
} };
} };

View File

@ -1,3 +1,3 @@
const withCSS = require('@zeit/next-css') const withCSS = require('@zeit/next-css');
module.exports = withCSS() module.exports = withCSS();

View File

@ -1,8 +1,8 @@
import App, {Container} from 'next/app' import App, {Container} from 'next/app';
import React from 'react' import React from 'react';
import { Provider } from 'react-redux' import { Provider } from 'react-redux';
import withReduxStore from '../js/redux/reduxStoreBinder' import withReduxStore from '../js/redux/reduxStoreBinder';
import { verifyCredentials } from '../js/api' import { verifyCredentials } from '../js/api';
class TurniereApp extends App { class TurniereApp extends App {
@ -11,15 +11,15 @@ class TurniereApp extends App {
} }
render () { render () {
const {Component, pageProps, reduxStore} = this.props const {Component, pageProps, reduxStore} = this.props;
return ( return (
<Container> <Container>
<Provider store={reduxStore}> <Provider store={reduxStore}>
<Component {...pageProps} /> <Component {...pageProps} />
</Provider> </Provider>
</Container> </Container>
) );
} }
} }
export default withReduxStore(TurniereApp) export default withReduxStore(TurniereApp);

View File

@ -1,15 +1,15 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {Container} from "reactstrap"; import {Container} from 'reactstrap';
import '../static/everypage.css' import '../static/everypage.css';
import '../static/css/error.css' import '../static/css/error.css';
export default class Error extends React.Component { export default class Error extends React.Component {
static getInitialProps({ res, err }) { static getInitialProps({ res, err }) {
const statusCode = res ? res.statusCode : err ? err.statusCode : 400; const statusCode = res ? res.statusCode : err ? err.statusCode : 400;
return { statusCode } return { statusCode };
} }
render() { render() {
@ -22,7 +22,7 @@ export default class Error extends React.Component {
<ErrorPage statusCode={this.props.statusCode}/> <ErrorPage statusCode={this.props.statusCode}/>
<Footer/> <Footer/>
</div> </div>
) );
} }
} }

View File

@ -1,9 +1,22 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import { Footer, TurniereNavigation } from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, CustomInput, Fade, Form, FormGroup, Input, Label} from "reactstrap";
import EditableStringList from "../js/EditableStringList"; import {
Button,
Card,
CardBody,
Container,
CustomInput,
Fade,
Form,
FormGroup,
Input,
Label
} from 'reactstrap';
import EditableStringList from '../js/EditableStringList';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -16,7 +29,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function CreateTournamentCard() { function CreateTournamentCard() {
return ( return (

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Col, Container, Row} from 'reactstrap'; import {Col, Container, Row} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -33,19 +33,22 @@ function GeneralFaq() {
mit allen Leuten teilen kannst, ohne dir Gedanken machen zu müssen, wer gegen wen spielen mit allen Leuten teilen kannst, ohne dir Gedanken machen zu müssen, wer gegen wen spielen
muss. Du trägst ein, wer gewonnen hat, und turnie.re sagt, wer als nächstes spielt. muss. Du trägst ein, wer gewonnen hat, und turnie.re sagt, wer als nächstes spielt.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Für welche Sportarten ist turnie.re geeignet?</h4> <h4>Für welche Sportarten ist turnie.re geeignet?</h4>
<p> <p>
turnie.re ist prinzipiell für jede Sportart geeignet. Die einzige Vor&shy;aus&shy;setzung ist, dass turnie.re ist prinzipiell für jede Sportart geeignet. Die einzige Vor&shy;aus&shy;setzung ist, dass
in jedem Spiel zwei Mannschaften oder Spieler gegeinander antreten und dass derjenige mit in jedem Spiel zwei Mannschaften oder Spieler gegeinander antreten und dass derjenige mit
den meisten Punkten gewinnt. den meisten Punkten gewinnt.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Für welche Anzahl an Teams ist turnie.re geeignet?</h4> <h4>Für welche Anzahl an Teams ist turnie.re geeignet?</h4>
<p> <p>
turnie.re ist unabhängig von der Anzahl der Teams nutzbar. turnie.re ist unabhängig von der Anzahl der Teams nutzbar.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Fallen für die Nutzung von turnie.re Kosten an?</h4> <h4>Fallen für die Nutzung von turnie.re Kosten an?</h4>
<p> <p>
turnie.re ist ein kostenloser Service! Wir erheben keine Kosten und sind nur darauf aus, turnie.re ist ein kostenloser Service! Wir erheben keine Kosten und sind nur darauf aus,
@ -69,34 +72,40 @@ function AccountFaq() {
dich als berechtigt verifizieren können, benötigst du einen Acoount, sodass wir dir die dich als berechtigt verifizieren können, benötigst du einen Acoount, sodass wir dir die
entsprechenden Bearbeitungsrechte zuteilen können. entsprechenden Bearbeitungsrechte zuteilen können.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Welche Daten muss ich bei der Accounterstellung angeben?</h4> <h4>Welche Daten muss ich bei der Accounterstellung angeben?</h4>
<p> <p>
Um einen Account anzulegen musst du einen Nutzernamen, eine gültige E-Mailadresse sowie ein Um einen Account anzulegen musst du einen Nutzernamen, eine gültige E-Mailadresse sowie ein
Passwort angeben. Passwort angeben.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie werden meine Daten verarbeitet?</h4> <h4>Wie werden meine Daten verarbeitet?</h4>
<p> <p>
Deine Daten werden in unserer Datenbank gespeichert. Eine Weitergabe dieser Daten an Dritte Deine Daten werden in unserer Datenbank gespeichert. Eine Weitergabe dieser Daten an Dritte
erfolgt nicht!</p> erfolgt nicht!
</p>
<p> <p>
Zusätlich wird dein Passwort verschlüsselt gespeichert, das bedeutet auch wir kennen dein Zusätlich wird dein Passwort verschlüsselt gespeichert, das bedeutet auch wir kennen dein
Passwort nicht und dein Account wird zuverlässig geschützt. Passwort nicht und dein Account wird zuverlässig geschützt.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie kann ich meinen Nutzernamen ändern?</h4> <h4>Wie kann ich meinen Nutzernamen ändern?</h4>
<p> <p>
Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine
Profilseite. Hier kannst du deinen Nutzernamen ändern. Profilseite. Hier kannst du deinen Nutzernamen ändern.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie kann ich meine E-Mailadresse ändern?</h4> <h4>Wie kann ich meine E-Mailadresse ändern?</h4>
<p> <p>
Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine Über deinen Nutzernamen, der in der Kopfzeile angezeigt wird, gelangst du auf deine
Profilseite. Hier kannst du deine E-Mailadresse ändern ändern. Profilseite. Hier kannst du deine E-Mailadresse ändern ändern.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie kann ich mein Passwort ändern?</h4> <h4>Wie kann ich mein Passwort ändern?</h4>
<p> <p>
Auf deiner Profilseite findest du einen "Passwort ändern" Button. Auf der sich dann Auf deiner Profilseite findest du einen "Passwort ändern" Button. Auf der sich dann
@ -121,15 +130,16 @@ function TournamentFaq() {
Über "Turnier erstellen" gelangst du auf die "Turnier erstellen" Seite. Auf dieser kannst du Über "Turnier erstellen" gelangst du auf die "Turnier erstellen" Seite. Auf dieser kannst du
deinem Turnier einen Namen geben und eine (optionale) Beschreibung hinzufügen. Dann kannst deinem Turnier einen Namen geben und eine (optionale) Beschreibung hinzufügen. Dann kannst
du dein Turnier <a href="#public-tournament">öffentlich oder privat</a> erstellen, die Teams du dein Turnier <a href="#public-tournament">öffentlich oder privat</a> erstellen, die Teams
für die Spielpaarungen <a href="#randomize-teams">mischen</a> lassen und eine <a für die Spielpaarungen <a href="#randomize-teams">mischen</a> lassen und eine <a href="#groupstage">Gruppenphase</a>
href="#groupstage">Gruppenphase</a> hinzufügen. Im Feld "Teams" kannst du die hinzufügen. Im Feld "Teams" kannst du die
teilnehmenden <a href="#add-teams">Teams teilnehmenden <a href="#add-teams">Teams
eintragen</a> und hinzufügen. </p> eintragen</a> und hinzufügen. </p>
<p> <p>
Wenn du die Option Gruppenphase aktiviert hast, kannst du zusätzlich noch die Größe der Wenn du die Option Gruppenphase aktiviert hast, kannst du zusätzlich noch die Größe der
Gruppen angeben. Gruppen angeben.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="public-tournament">Was ist der Unterschied zwischen einem öffentlichen und einem <h4 id="public-tournament">Was ist der Unterschied zwischen einem öffentlichen und einem
privaten Turnier?</h4> privaten Turnier?</h4>
<p> <p>
@ -147,7 +157,8 @@ function TournamentFaq() {
Trotzdem bleibt der Turnierersteller der Einzige, der die Turnierinformationen bearbeiten Trotzdem bleibt der Turnierersteller der Einzige, der die Turnierinformationen bearbeiten
und Spielstände eintragen kann. und Spielstände eintragen kann.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="randomize-teams">Was bedeutet "Teams mischen"?</h4> <h4 id="randomize-teams">Was bedeutet "Teams mischen"?</h4>
<p> <p>
Die Spielpaarungen werden anhand der Eingabereihenfolge der Teams erstellt. So spielt z.B. Die Spielpaarungen werden anhand der Eingabereihenfolge der Teams erstellt. So spielt z.B.
@ -157,7 +168,8 @@ function TournamentFaq() {
Wenn du das nicht möchtest kannst du die Option "Teams mischen" aktivieren und die Wenn du das nicht möchtest kannst du die Option "Teams mischen" aktivieren und die
Spielpaarungen werden in einer zufälligen Reihenfolge erstellt. Spielpaarungen werden in einer zufälligen Reihenfolge erstellt.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="groupstage">Was passiert wenn ich die Gruppenphase aktiviere?</h4> <h4 id="groupstage">Was passiert wenn ich die Gruppenphase aktiviere?</h4>
<p> <p>
Grundsätzlich erstellt turnie.re dir einen Spielplan für ein Turnier <strong>ohne</strong> Grundsätzlich erstellt turnie.re dir einen Spielplan für ein Turnier <strong>ohne</strong>
@ -168,7 +180,8 @@ function TournamentFaq() {
<p> <p>
Bitte beachte, dass die Anzahl der Teams durch die Gruppengröße teilbar sein muss. Bitte beachte, dass die Anzahl der Teams durch die Gruppengröße teilbar sein muss.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4 id="add-teams">Wie kann ich Teams hinzufügen?</h4> <h4 id="add-teams">Wie kann ich Teams hinzufügen?</h4>
<p> <p>
Auf der "Turnier erstellen" Seite kannst du im Feld "Teams" deine Teams eintragen. </p> Auf der "Turnier erstellen" Seite kannst du im Feld "Teams" deine Teams eintragen. </p>
@ -177,14 +190,15 @@ function TournamentFaq() {
Button "Team hinzufügen" das Team deinem Turnier hinzufügen. Du kannst aber auch deine Teams Button "Team hinzufügen" das Team deinem Turnier hinzufügen. Du kannst aber auch deine Teams
als eine mit Kommas getrennte Liste eingeben und dann hinzufügen. als eine mit Kommas getrennte Liste eingeben und dann hinzufügen.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie starte ich ein Spiel?</h4> <h4>Wie starte ich ein Spiel?</h4>
<p> <p>
Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spiel starten" Button. Über Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spiel starten" Button. Über
diesen kannst du einfach das jeweilige Spiel starten. diesen kannst du einfach das jeweilige Spiel starten.
</p> </p>
</Col><Col sm="4"> </Col>
<Col sm="4">
<h4>Wie trage ich einen Spielstand für eine Partie ein?</h4> <h4>Wie trage ich einen Spielstand für eine Partie ein?</h4>
<p> <p>
Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spielstand ändern" Button. Auf der Turnierübersicht Seite gibt es für jede Partie einen "Spielstand ändern" Button.

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Container} from 'reactstrap'; import {Container} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -14,7 +14,8 @@ function Main() {
} }
function ImprintText(){ function ImprintText(){
return (<Container> return (
<Container>
<h3> <h3>
Angaben gemäß §5 TMG: Angaben gemäß §5 TMG:
</h3> </h3>
@ -24,22 +25,16 @@ function ImprintText(){
76133 Karlsruhe<br/> 76133 Karlsruhe<br/>
Germany<br/> Germany<br/>
</p> </p>
<p> <p>
<strong>Vertreten durch</strong><br/> <strong>Vertreten durch</strong><br/>
Jonas Seydel Jonas Seydel
</p> </p>
<p> <p>
<strong>Kontakt</strong><br/> <strong>Kontakt</strong><br/>
jon@s-seydel.de jon@s-seydel.de
</p> </p>
<h3>Haftungsausschluss</h3> <h3>Haftungsausschluss</h3>
<h4>Haftung für Inhalte</h4> <h4>Haftung für Inhalte</h4>
<p> <p>
Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität
der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene
@ -50,9 +45,7 @@ function ImprintText(){
jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von
entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen. entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.
</p> </p>
<h4>Haftung für Links</h4> <h4>Haftung für Links</h4>
<p> <p>
Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können
wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der
@ -61,9 +54,7 @@ function ImprintText(){
permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung
nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen. nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.
</p> </p>
<h4>Urheberrecht</h4> <h4>Urheberrecht</h4>
<p> <p>
Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht.
Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes
@ -73,9 +64,8 @@ function ImprintText(){
gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen
entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen. entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.
</p> </p>
</Container>
);
</Container>);
} }

View File

@ -1,16 +1,16 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Alert, Button, Card, CardBody} from 'reactstrap'; import { Alert, Button, Card, CardBody } from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
import '../static/css/index.css' import '../static/css/index.css';
import { connect } from 'react-redux' import { connect } from 'react-redux';
function Main() { function Main() {
return ( return (
@ -26,7 +26,6 @@ function Marketing() {
return ( return (
<div className="container marketing my-5"> <div className="container marketing my-5">
<div className="row"> <div className="row">
<div className="col-lg-4"> <div className="col-lg-4">
<h2>Für jede Sportart</h2> <h2>Für jede Sportart</h2>
<p> <p>
@ -88,12 +87,10 @@ function MainBottomSummary() {
<div className="col-lg-6"> <div className="col-lg-6">
<h2>Ich habe einen Turniercode bekommen. Was nun?</h2> <h2>Ich habe einen Turniercode bekommen. Was nun?</h2>
<p> <p>
Der Turniercode führt dich direkt zu einem Turnier. Gebe dafür den Code <a className="text-success" Der Turniercode führt dich direkt zu einem Turnier. Gebe dafür den Code
href="#turniercode-form">oben </a> <a className="text-success" href="#turniercode-form">oben</a> ein, dann wirst du sofort weitergeleitet.
ein, dann wirst du sofort weitergeleitet.
</p> </p>
</div> </div>
</div> </div>
<div className="my-5 text-center"> <div className="my-5 text-center">
<p> <p>

View File

@ -1,4 +1,4 @@
import Head from 'next/head' import Head from 'next/head';
export default () => ( export default () => (
<div> <div>
@ -7,4 +7,4 @@ export default () => (
</Head> </Head>
<p>Turnierliste</p> <p>Turnierliste</p>
</div> </div>
) );

View File

@ -1,10 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, Form, FormGroup, Input, Label} from "reactstrap"; import { Button, Card, CardBody, Container, Form, FormGroup, Input, Label } from 'reactstrap';
import { login } from '../js/api' import { login } from '../js/api';
import { connect } from 'react-redux' import { connect } from 'react-redux';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -17,7 +17,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function Login() { function Login() {
return ( return (
@ -37,7 +37,6 @@ function Login() {
} }
class LoginErrorList extends React.Component { class LoginErrorList extends React.Component {
render() { render() {
const { error, errorMessages } = this.props; const { error, errorMessages } = this.props;
if(error) { if(error) {
@ -64,7 +63,7 @@ class LoginErrorList extends React.Component {
const mapStateToErrorMessages = (state) => { const mapStateToErrorMessages = (state) => {
const { errorMessages, error } = state.userinfo; const { errorMessages, error } = state.userinfo;
return { errorMessages, error } return { errorMessages, error };
}; };
const VisibleLoginErrorList = connect( const VisibleLoginErrorList = connect(

View File

@ -1,9 +1,9 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react' import React from 'react';
import {Container} from 'reactstrap'; import {Container} from 'reactstrap';
import 'bootstrap/dist/css/bootstrap.min.css'; import 'bootstrap/dist/css/bootstrap.min.css';
import {BigImage, Footer, TurniereNavigation} from '../js/CommonComponents.js' import { BigImage, Footer, TurniereNavigation } from '../js/CommonComponents.js';
import '../static/everypage.css' import '../static/everypage.css';
function Main() { function Main() {
return ( return (
@ -14,7 +14,8 @@ function Main() {
} }
function PrivacyText(){ function PrivacyText(){
return (<Container> return (
<Container>
<p> <p>
Die nachfolgende Datenschutzerklärung gilt für die Nutzung unseres Online-Angebots turnie.re (nachfolgend Die nachfolgende Datenschutzerklärung gilt für die Nutzung unseres Online-Angebots turnie.re (nachfolgend
Website).<br/> Website).<br/>
@ -24,8 +25,6 @@ function PrivacyText(){
Datenschutzgrundverordnung Datenschutzgrundverordnung
(DSGVO). (DSGVO).
</p> </p>
<h3>1 Verantwortlicher</h3> <h3>1 Verantwortlicher</h3>
<p> <p>
Verantwortlicher für die Erhebung, Verarbeitung und Nutzung Ihrer personenbezogenen Daten im Sinne von Art. Verantwortlicher für die Erhebung, Verarbeitung und Nutzung Ihrer personenbezogenen Daten im Sinne von Art.
@ -47,16 +46,11 @@ function PrivacyText(){
richten.<br/> richten.<br/>
Sie können diese Datenschutzerklärung jederzeit speichern und ausdrucken. Sie können diese Datenschutzerklärung jederzeit speichern und ausdrucken.
</p> </p>
<h3>2 Allgemeine Zwecke der Verarbeitung</h3> <h3>2 Allgemeine Zwecke der Verarbeitung</h3>
<p> <p>
Wir verwenden personenbezogene Daten zum Zweck des Betriebs der Website. Wir verwenden personenbezogene Daten zum Zweck des Betriebs der Website.
</p> </p>
<h3>3 Welche Daten wir verwenden und warum</h3> <h3>3 Welche Daten wir verwenden und warum</h3>
<h4>3.1 Hosting</h4> <h4>3.1 Hosting</h4>
<p> <p>
Die von uns in Anspruch genommenen Hosting-Leistungen dienen der Zurverfügungstellung der folgenden Die von uns in Anspruch genommenen Hosting-Leistungen dienen der Zurverfügungstellung der folgenden
@ -72,7 +66,6 @@ function PrivacyText(){
Art. 6 Art. 6
Abs. 1 S. 1 f) DSGVO i.V.m. Art. 28 DSGVO. Abs. 1 S. 1 f) DSGVO i.V.m. Art. 28 DSGVO.
</p> </p>
<h4>3.2 Zugriffsdaten</h4> <h4>3.2 Zugriffsdaten</h4>
<p> <p>
Wir sammeln Informationen über Sie, wenn Sie diese Website nutzen. Wir erfassen automatisch Informationen Wir sammeln Informationen über Sie, wenn Sie diese Website nutzen. Wir erfassen automatisch Informationen
@ -124,7 +117,6 @@ function PrivacyText(){
Registrierung, Registrierung,
Login, Klicken von Links etc.). Login, Klicken von Links etc.).
</p> </p>
<h4>3.3 Cookies</h4> <h4>3.3 Cookies</h4>
<p> <p>
Wir verwenden sogenannte Session-Cookies, um unsere Website zu optimieren. Ein Session-Cookie ist eine Wir verwenden sogenannte Session-Cookies, um unsere Website zu optimieren. Ein Session-Cookie ist eine
@ -177,7 +169,6 @@ function PrivacyText(){
Cookies Cookies
komplett verhindert werden. Dadurch kann die Funktionalität der Website eingeschränkt werden. komplett verhindert werden. Dadurch kann die Funktionalität der Website eingeschränkt werden.
</p> </p>
<h4>3.4 Nutzerkonto</h4> <h4>3.4 Nutzerkonto</h4>
<p>Sie können auf unserer Website ein Nutzerkonto anlegen. Wünschen Sie dies, so benötigen wir die beim Login <p>Sie können auf unserer Website ein Nutzerkonto anlegen. Wünschen Sie dies, so benötigen wir die beim Login
abgefragten abgefragten
@ -199,7 +190,6 @@ function PrivacyText(){
Rechtgrundlage für die Verarbeitung dieser Daten ist Ihre Einwilligung gemäß Art. 6 Abs. 1 S. 1 a) Rechtgrundlage für die Verarbeitung dieser Daten ist Ihre Einwilligung gemäß Art. 6 Abs. 1 S. 1 a)
DSGVO. DSGVO.
</p> </p>
<h4>3.5 E-Mail Kontakt</h4> <h4>3.5 E-Mail Kontakt</h4>
<p> <p>
Wenn Sie mit uns in Kontakt treten (z. B. per Kontaktformular oder E-Mail), verarbeiten wir Ihre Angaben zur Wenn Sie mit uns in Kontakt treten (z. B. per Kontaktformular oder E-Mail), verarbeiten wir Ihre Angaben zur
@ -215,8 +205,6 @@ function PrivacyText(){
berechtigtes berechtigtes
Interesse liegt z. B. darin, auf Ihre E-Mail zu antworten. Interesse liegt z. B. darin, auf Ihre E-Mail zu antworten.
</p> </p>
<h3>4 Speicherdauer</h3> <h3>4 Speicherdauer</h3>
<p> <p>
Sofern nicht spezifisch angegeben speichern wir personenbezogene Daten nur so lange, wie dies zur Erfüllung Sofern nicht spezifisch angegeben speichern wir personenbezogene Daten nur so lange, wie dies zur Erfüllung
@ -228,8 +216,6 @@ function PrivacyText(){
gespeichert, gespeichert,
aber nicht anderweitig verarbeitet und nach Ablauf der gesetzlichen Aufbewahrungsfrist gelöscht. aber nicht anderweitig verarbeitet und nach Ablauf der gesetzlichen Aufbewahrungsfrist gelöscht.
</p> </p>
<h3>5 Ihre Rechte als von der Datenverarbeitung Betroffener</h3> <h3>5 Ihre Rechte als von der Datenverarbeitung Betroffener</h3>
<p> <p>
Nach den anwendbaren Gesetzen haben Sie verschiedene Rechte bezüglich Ihrer personenbezogenen Daten. Möchten Nach den anwendbaren Gesetzen haben Sie verschiedene Rechte bezüglich Ihrer personenbezogenen Daten. Möchten
@ -283,14 +269,12 @@ function PrivacyText(){
und die angestrebten Auswirkungen einer derartigen Verarbeitung für Sie. und die angestrebten Auswirkungen einer derartigen Verarbeitung für Sie.
</li> </li>
</ol> </ol>
<p> <p>
Werden personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt, so Werden personenbezogene Daten an ein Drittland oder an eine internationale Organisation übermittelt, so
haben Sie das haben Sie das
Recht, über die geeigneten Garantien gemäß Art. 46 DSGVO im Zusammenhang mit der Übermittlung unterrichtet Recht, über die geeigneten Garantien gemäß Art. 46 DSGVO im Zusammenhang mit der Übermittlung unterrichtet
zu werden. zu werden.
</p> </p>
<h4>5.2 Recht auf Berichtigung</h4> <h4>5.2 Recht auf Berichtigung</h4>
<p> <p>
Sie haben das Recht, von uns die Berichtigung und ggf. auch Vervollständigung Sie betreffender Sie haben das Recht, von uns die Berichtigung und ggf. auch Vervollständigung Sie betreffender
@ -349,7 +333,6 @@ function PrivacyText(){
personenbezogenen personenbezogenen
Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben. Daten oder von Kopien oder Replikationen dieser personenbezogenen Daten verlangt haben.
</p> </p>
<h4>5.4 Recht auf Einschränkung der Verarbeitung</h4> <h4>5.4 Recht auf Einschränkung der Verarbeitung</h4>
<p> <p>
In einer Reihe von Fällen sind Sie berechtigt, von uns eine Einschränkung der Verarbeitung Ihrer In einer Reihe von Fällen sind Sie berechtigt, von uns eine Einschränkung der Verarbeitung Ihrer
@ -378,7 +361,6 @@ function PrivacyText(){
ob die berechtigten Gründe unseres Unternehmens gegenüber den Ihren überwiegen. ob die berechtigten Gründe unseres Unternehmens gegenüber den Ihren überwiegen.
</li> </li>
</ol> </ol>
<h4>5.5 Recht auf Datenübertragbarkeit</h4> <h4>5.5 Recht auf Datenübertragbarkeit</h4>
<p> <p>
Sie haben das Recht, Sie betreffende personenbezogene Daten maschinenlesbar zu erhalten, zu übermitteln, Sie haben das Recht, Sie betreffende personenbezogene Daten maschinenlesbar zu erhalten, zu übermitteln,
@ -405,7 +387,6 @@ function PrivacyText(){
technisch technisch
machbar ist. machbar ist.
</p> </p>
<h4>5.6 Widerspruchsrecht</h4> <h4>5.6 Widerspruchsrecht</h4>
<p> <p>
Sie haben das Recht, auch einer rechtmäßigen Verarbeitung Ihrer personenbezogenen Daten durch uns zu Sie haben das Recht, auch einer rechtmäßigen Verarbeitung Ihrer personenbezogenen Daten durch uns zu
@ -434,7 +415,6 @@ function PrivacyText(){
oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DSGVO erfolgt, Widerspruch einzulegen, es sei denn, die oder zu statistischen Zwecken gemäß Art. 89 Abs. 1 DSGVO erfolgt, Widerspruch einzulegen, es sei denn, die
Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.<br/> Verarbeitung ist zur Erfüllung einer im öffentlichen Interesse liegenden Aufgabe erforderlich.<br/>
</p> </p>
<h4>5.7 Automatisierte Entscheidungen einschließlich Profiling</h4> <h4>5.7 Automatisierte Entscheidungen einschließlich Profiling</h4>
<p> <p>
Sie haben das Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung einschließlich Sie haben das Recht, nicht einer ausschließlich auf einer automatisierten Verarbeitung einschließlich
@ -445,7 +425,6 @@ function PrivacyText(){
Eine automatisierte Entscheidungsfindung auf der Grundlage der erhobenen personenbezogenen Daten findet Eine automatisierte Entscheidungsfindung auf der Grundlage der erhobenen personenbezogenen Daten findet
nicht statt. nicht statt.
</p> </p>
<h4>5.8 Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</h4> <h4>5.8 Recht auf Widerruf einer datenschutzrechtlichen Einwilligung</h4>
<p> <p>
Sie haben das Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen. Sie haben das Recht, eine Einwilligung zur Verarbeitung personenbezogener Daten jederzeit zu widerrufen.
@ -458,8 +437,6 @@ function PrivacyText(){
dass die dass die
Verarbeitung der Sie betreffenden personenbezogenen Daten rechtswidrig ist. Verarbeitung der Sie betreffenden personenbezogenen Daten rechtswidrig ist.
</p> </p>
<h3>6 Datensicherheit</h3> <h3>6 Datensicherheit</h3>
<p> <p>
Wir sind um die Sicherheit Ihrer Daten im Rahmen der geltenden Datenschutzgesetze und technischen Wir sind um die Sicherheit Ihrer Daten im Rahmen der geltenden Datenschutzgesetze und technischen
@ -479,8 +456,6 @@ function PrivacyText(){
regelmäßig regelmäßig
sorgfältig gesichert. sorgfältig gesichert.
</p> </p>
<h3>7 Weitergabe von Daten an Dritte, keine Datenübertragung ins Nicht-EU-Ausland</h3> <h3>7 Weitergabe von Daten an Dritte, keine Datenübertragung ins Nicht-EU-Ausland</h3>
<p> <p>
Grundsätzlich verwenden wir Ihre personenbezogenen Daten nur innerhalb unseres Unternehmens.<br/> Grundsätzlich verwenden wir Ihre personenbezogenen Daten nur innerhalb unseres Unternehmens.<br/>
@ -496,8 +471,6 @@ function PrivacyText(){
4 4
genannten Falls findet nicht statt und ist nicht geplant. genannten Falls findet nicht statt und ist nicht geplant.
</p> </p>
<h3>8 Datenschutzbeauftragter</h3> <h3>8 Datenschutzbeauftragter</h3>
<p> <p>
Sollten Sie noch Fragen oder Bedenken zum Datenschutz haben, so wenden Sie sich bitte an unseren Sollten Sie noch Fragen oder Bedenken zum Datenschutz haben, so wenden Sie sich bitte an unseren
@ -510,8 +483,8 @@ function PrivacyText(){
Germany<br/> Germany<br/>
jon@s-seydel.de jon@s-seydel.de
</p> </p>
</Container>
</Container>); );
} }

View File

@ -1,10 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import '../static/everypage.css' import '../static/everypage.css';
import {Footer, TurniereNavigation} from "../js/CommonComponents"; import {Footer, TurniereNavigation} from '../js/CommonComponents';
import React from "react"; import React from 'react';
import {Button, Card, CardBody, Container, Form, FormGroup, FormText, Input, Label} from "reactstrap"; import { Button, Card, CardBody, Container, Form, FormGroup, FormText, Input, Label } from 'reactstrap';
import { register } from '../js/api' import { register } from '../js/api';
import { connect } from 'react-redux' import { connect } from 'react-redux';
export default () => ( export default () => (
<div className="main generic-fullpage-bg"> <div className="main generic-fullpage-bg">
@ -18,7 +18,7 @@ export default () => (
</div> </div>
<Footer/> <Footer/>
</div> </div>
) );
function Register() { function Register() {
return ( return (
@ -37,7 +37,6 @@ function Register() {
} }
class RegisterErrorList extends React.Component { class RegisterErrorList extends React.Component {
render() { render() {
const { error, errorMessages } = this.props; const { error, errorMessages } = this.props;
if(error) { if(error) {
@ -64,7 +63,7 @@ class RegisterErrorList extends React.Component {
const mapStateToErrorMessages = (state) => { const mapStateToErrorMessages = (state) => {
const { errorMessages, error } = state.userinfo; const { errorMessages, error } = state.userinfo;
return { errorMessages, error } return { errorMessages, error };
}; };
const VisibleRegisterErrorList = connect( const VisibleRegisterErrorList = connect(

View File

@ -1,9 +1,10 @@
import Head from 'next/head' import Head from 'next/head';
import React from 'react';
class FullscreenTournamentPage extends React.Component { class FullscreenTournamentPage extends React.Component {
static async getInitialProps({query}) { static async getInitialProps({query}) {
return {query} return {query};
} }
render() { render() {
@ -19,4 +20,4 @@ class FullscreenTournamentPage extends React.Component {
} }
} }
export default FullscreenTournamentPage export default FullscreenTournamentPage;

View File

@ -1,10 +1,11 @@
import Head from 'next/head' import Head from 'next/head';
import "../style.css" import React from 'react';
import '../style.css';
class TournamentPage extends React.Component { class TournamentPage extends React.Component {
static async getInitialProps({query}) { static async getInitialProps({query}) {
return {query} return {query};
} }
render() { render() {
@ -20,4 +21,4 @@ class TournamentPage extends React.Component {
} }
} }
export default TournamentPage export default TournamentPage;

View File

@ -1,36 +1,34 @@
const express = require('express') const express = require('express');
const next = require('next') const next = require('next');
const dev = process.env.NODE_ENV !== 'production' const dev = process.env.NODE_ENV !== 'production';
const app = next({ dev }) const app = next({ dev });
const handle = app.getRequestHandler() const handle = app.getRequestHandler();
app.prepare() app.prepare()
.then(() => { .then(() => {
const server = express() const server = express();
server.get('/t/:code', (req, res) => { server.get('/t/:code', (req, res) => {
const actualPage = '/tournament' const actualPage = '/tournament';
const queryParam = { code: req.params.code } const queryParam = { code: req.params.code };
app.render(req, res, actualPage, queryParam) app.render(req, res, actualPage, queryParam);
}) });
server.get('/t/:code/fullscreen', (req, res) => { server.get('/t/:code/fullscreen', (req, res) => {
const actualPage = '/tournament-fullscreen' const actualPage = '/tournament-fullscreen';
const queryParam = { code: req.params.code } const queryParam = { code: req.params.code };
app.render(req, res, actualPage, queryParam) app.render(req, res, actualPage, queryParam);
}) });
server.get('*', (req, res) => { server.get('*', (req, res) => {
return handle(req, res) return handle(req, res);
}) });
server.listen(3000, (err) => { server.listen(3000, (err) => {
if (err) throw err if (err) throw err;
console.log('> Ready on http://localhost:3000') });
}) })
}) .catch(() => {
.catch((ex) => { process.exit(1);
console.error(ex.stack) });
process.exit(1)
})