diff --git a/.gitignore b/.gitignore index 5f336148..984bf434 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,39 @@ -config/ -node_modules/ -exposedfiles/ !/exposedfiles/**/.gitkeep -/application/backend/static/stylesheets -/application/backend/static/upload -/application/backend/static/vue/ -*.log -workspace.xml -jazzclubmongo.dump/jazzclub -mongodump_jc.sh -dump.zip -mongorestore_jc.sh -jazzclubmongo* *.gz -/application/backend/sass/out/jc-backoffice.css -/application/backend/**/*.js -/application/shared/**/*.js -/application/batchjobs/**/*.js +*.log *.map +.idea/dataSources +.idea/dataSources.* .tscache/ -/frontendtests/output/ -/mongocollections -mongoimport_jc.sh -/application/backend/static/rider/ -/pdfs/* /*.tgz +/application/backend/**/*.js +/application/backend/sass/out/jc-backoffice.css +/application/backend/static/assets/ +/application/backend/static/img/ +/application/backend/static/rider/ +/application/backend/static/stylesheets +/application/backend/static/upload +/application/backend/static/index.html +/application/backend/static/manifest.webmanifest +/application/backend/static/sw.js +/application/backend/static/workbox-* +/application/batchjobs/**/*.js +/application/shared/**/*.js /application/test-globals.js /application/vitest.config.js +/frontendtests/output/ +/mongocollections /pdfs and more/* +/pdfs/* +config/ +dump.zip +exposedfiles/ +jazzclubmongo* +jazzclubmongo.dump/jazzclub +mongodump_jc.sh +mongoimport_jc.sh +mongorestore_jc.sh +node_modules/ vite.config.d.ts vite.config.js -.idea/dataSources -.idea/dataSources.* +workspace.xml diff --git a/application/backend/batches/sendMailsKasseFehlt.ts b/application/backend/batches/sendMailsKasseFehlt.ts index ccc1c7ac..0e908243 100644 --- a/application/backend/batches/sendMailsKasseFehlt.ts +++ b/application/backend/batches/sendMailsKasseFehlt.ts @@ -22,7 +22,7 @@ function toFullQualifiedUrl(prefix: string, localUrl: string): string { return string.replace(/(^\/)|(\/$)/g, ""); } - return conf.publicUrlPrefix + "/vue/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); + return conf.publicUrlPrefix + "/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); } function kasseFehlt(konzert: Konzert): boolean { diff --git a/application/backend/batches/sendMailsMasterFehlt.ts b/application/backend/batches/sendMailsMasterFehlt.ts index c117c278..bfb9b4ea 100644 --- a/application/backend/batches/sendMailsMasterFehlt.ts +++ b/application/backend/batches/sendMailsMasterFehlt.ts @@ -22,7 +22,7 @@ function toFullQualifiedUrl(prefix: string, localUrl: string): string { return string.replace(/(^\/)|(\/$)/g, ""); } - return conf.publicUrlPrefix + "/vue/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); + return conf.publicUrlPrefix + "/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); } function masterFehlt(konzert: Konzert): boolean { diff --git a/application/backend/batches/sendMailsPressetextFehlt.ts b/application/backend/batches/sendMailsPressetextFehlt.ts index 3271c360..fbdd854e 100644 --- a/application/backend/batches/sendMailsPressetextFehlt.ts +++ b/application/backend/batches/sendMailsPressetextFehlt.ts @@ -20,7 +20,7 @@ async function sendMail(kaputte: Veranstaltung[]) { const prefix = conf.publicUrlPrefix; function presseTemplateInternal(ver: Veranstaltung): string { // für interne Mails - return `### [${ver.kopf.titelMitPrefix}](${prefix}/vue${ver.fullyQualifiedUrl}?page=presse) + return `### [${ver.kopf.titelMitPrefix}](${prefix}${ver.fullyQualifiedUrl}?page=presse) #### ${ver.startDatumUhrzeit.fuerPresse} ${ver.kopf.presseInEcht} `; diff --git a/application/backend/batches/sendMailsStaffReminder.ts b/application/backend/batches/sendMailsStaffReminder.ts index 901d09af..90a8de1b 100644 --- a/application/backend/batches/sendMailsStaffReminder.ts +++ b/application/backend/batches/sendMailsStaffReminder.ts @@ -16,7 +16,7 @@ function toFullQualifiedUrl(prefix: string, localUrl: string): string { return string.replace(/(^\/)|(\/$)/g, ""); } - return conf.publicUrlPrefix + "/vue/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); + return conf.publicUrlPrefix + "/" + trimLeadingAndTrailingSlash(prefix) + "/" + trimLeadingAndTrailingSlash(localUrl); } async function sendMail(verMitUser: VerMitUser) { @@ -26,7 +26,7 @@ async function sendMail(verMitUser: VerMitUser) { const markdownToSend = `## Hallo ${user.name}! Bei folgender Veranstaltung bist Du im Staff eingetragen!: -[${veranstaltung.kopf.titelMitPrefix} am ${veranstaltung.datumForDisplayShort} ${veranstaltung.kopf.presseInEcht}](${prefix}/vue${ +[${veranstaltung.kopf.titelMitPrefix} am ${veranstaltung.datumForDisplayShort} ${veranstaltung.kopf.presseInEcht}](${prefix}${ veranstaltung.fullyQualifiedUrl }?page=allgemeines) diff --git a/application/backend/configureApp.ts b/application/backend/configureApp.ts index 06c62ff9..7935ea52 100644 --- a/application/backend/configureApp.ts +++ b/application/backend/configureApp.ts @@ -14,6 +14,7 @@ import passportInitializer from "./lib/middleware/passportInitializer.js"; import passportApiKeyInitializer from "./lib/middleware/passportApiKeyInitializer.js"; import { fileURLToPath } from "url"; import conf from "./simpleConfigure.js"; +import { ServeStaticOptions } from "serve-static"; const __dirname = dirname(fileURLToPath(import.meta.url)); @@ -45,7 +46,8 @@ export default function (app: express.Express, forDev?: boolean): void { app.use(express.json()); app.use(compress()); if (!forDev) { - app.use("/vue", history()); + app.use("/", history()); + //app.use("/vue", history()); app.use("/rider", history()); } app.use( @@ -56,7 +58,7 @@ export default function (app: express.Express, forDev?: boolean): void { res.setHeader("Cache-Control", "public, max-age=0"); } }, - }), + } as ServeStaticOptions), ); app.use(express.static(conf.additionalstatic, { maxAge: "10h" })); diff --git a/application/backend/lib/site/index.ts b/application/backend/lib/site/index.ts index ffefdae0..f7173c35 100644 --- a/application/backend/lib/site/index.ts +++ b/application/backend/lib/site/index.ts @@ -38,7 +38,7 @@ const refreshTTL = conf.refreshTTL || 7 * 24 * 60 * 60 * 1000; // days*hours*min const jwtTTL = conf.jwtTTL || 15 * 60; // 15 minutes app.get("/", (req, res) => { - return res.redirect("/vue/veranstaltungen"); + return res.redirect("/veranstaltungen"); }); function createToken(req: Request, res: Response, name: string) { diff --git a/application/backend/static/fonts/fonts.css b/application/backend/static/fonts/fonts.css index dcaa376e..681f2428 100644 --- a/application/backend/static/fonts/fonts.css +++ b/application/backend/static/fonts/fonts.css @@ -5,7 +5,7 @@ font-weight: 400; src: url("../fonts/montserrat-v14-latin-regular.eot"); /* IE9 Compat Modes */ src: local("Montserrat Regular"), local("Montserrat-Regular"), - url("../fonts/montserrat-v14-latin-regular.eot?#iefix") format("embedded-opentype"), + url("../fonts/montserrat-v14-latin-regular.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ url("../fonts/montserrat-v14-latin-regular.woff2") format("woff2"), /* Super Modern Browsers */ url("../fonts/montserrat-v14-latin-regular.woff") format("woff"), /* Modern Browsers */ url("../fonts/montserrat-v14-latin-regular.ttf") format("truetype"), @@ -18,7 +18,7 @@ font-weight: 400; src: url("../fonts/montserrat-v14-latin-italic.eot"); /* IE9 Compat Modes */ src: local("Montserrat Italic"), local("Montserrat-Italic"), - url("../fonts/montserrat-v14-latin-italic.eot?#iefix") format("embedded-opentype"), + url("../fonts/montserrat-v14-latin-italic.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ url("../fonts/montserrat-v14-latin-italic.woff2") format("woff2"), /* Super Modern Browsers */ url("../fonts/montserrat-v14-latin-italic.woff") format("woff"), /* Modern Browsers */ url("../fonts/montserrat-v14-latin-italic.ttf") format("truetype"), @@ -31,7 +31,7 @@ font-weight: 600; src: url("../fonts/montserrat-v14-latin-600.eot"); /* IE9 Compat Modes */ src: local("Montserrat SemiBold"), local("Montserrat-SemiBold"), - url("../fonts/montserrat-v14-latin-600.eot?#iefix") format("embedded-opentype"), + url("../fonts/montserrat-v14-latin-600.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ url("../fonts/montserrat-v14-latin-600.woff2") format("woff2"), /* Super Modern Browsers */ url("../fonts/montserrat-v14-latin-600.woff") format("woff"), /* Modern Browsers */ url("../fonts/montserrat-v14-latin-600.ttf") format("truetype"), @@ -44,7 +44,7 @@ font-weight: 600; src: url("../fonts/montserrat-v14-latin-600italic.eot"); /* IE9 Compat Modes */ src: local("Montserrat SemiBold Italic"), local("Montserrat-SemiBoldItalic"), - url("../fonts/montserrat-v14-latin-600italic.eot?#iefix") format("embedded-opentype"), + url("../fonts/montserrat-v14-latin-600italic.eot?#iefix") format("embedded-opentype"), /* IE6-IE8 */ url("../fonts/montserrat-v14-latin-600italic.woff2") format("woff2"), /* Super Modern Browsers */ url("../fonts/montserrat-v14-latin-600italic.woff") format("woff"), /* Modern Browsers */ url("../fonts/montserrat-v14-latin-600italic.ttf") format("truetype"), diff --git a/application/backend/test/mailsender/sendKasseFehlt.test.ts b/application/backend/test/mailsender/sendKasseFehlt.test.ts index 44591005..ee9cb199 100644 --- a/application/backend/test/mailsender/sendKasseFehlt.test.ts +++ b/application/backend/test/mailsender/sendKasseFehlt.test.ts @@ -40,10 +40,10 @@ describe("Check Kasse Mailsender", () => { ]); expect(message.body).to.include("## Bei folgenden Veranstaltungen der nächsten 8 Tage fehlt noch jemand an der Kasse:"); expect(message.body).to.include( - 'Konzert 1 am Mo., 29. Apr. 2019 22:00 im Jazzclub Karlsruhe', + 'Konzert 1 am Mo., 29. Apr. 2019 22:00 im Jazzclub Karlsruhe', ); expect(message.body).to.include( - 'Konzert 2 am Mi., 29. Mai 2019 22:00 im Jazzclub Karlsruhe', + 'Konzert 2 am Mi., 29. Mai 2019 22:00 im Jazzclub Karlsruhe', ); }); }); diff --git a/application/backend/test/mailsender/sendMasterFehlt.test.ts b/application/backend/test/mailsender/sendMasterFehlt.test.ts index e9a7bd5b..7793add4 100644 --- a/application/backend/test/mailsender/sendMasterFehlt.test.ts +++ b/application/backend/test/mailsender/sendMasterFehlt.test.ts @@ -40,7 +40,7 @@ describe("Check Kasse Mailsender", () => { ]); expect(message.body).to.include("## Bei folgenden Veranstaltungen der nächsten 14 Tage fehlt ein Abendverantwortlicher:"); expect(message.body).to.include( - 'Konzert 1 am Mo., 29. Apr. 2019 22:00 im Jazzclub Karlsruhe', + 'Konzert 1 am Mo., 29. Apr. 2019 22:00 im Jazzclub Karlsruhe', ); }); }); diff --git a/application/backend/test/mailsender/sendPresseFehlt.test.ts b/application/backend/test/mailsender/sendPresseFehlt.test.ts index 41296f57..61ec58f7 100644 --- a/application/backend/test/mailsender/sendPresseFehlt.test.ts +++ b/application/backend/test/mailsender/sendPresseFehlt.test.ts @@ -54,13 +54,13 @@ describe("Rules Mailsender", () => { "## Folgende Veranstaltungen oder Vermietungen haben noch keinen Pressetext und werden im Laufe der nächsten Woche der Presse angekündigt:", ); - expect(message.body).to.include(`### [Vermietung 2](http://localhost:1970/vue/vermietung/?page=presse) + expect(message.body).to.include(`### [Vermietung 2](http://localhost:1970/vermietung/?page=presse) #### Dienstag, 28. Mai 2019 um 22:00 im Jazzclub Karlsruhe`); - expect(message.body).to.include(`### [Konzert 2](http://localhost:1970/vue/konzert/konzert2?page=presse) + expect(message.body).to.include(`### [Konzert 2](http://localhost:1970/konzert/konzert2?page=presse) #### Mittwoch, 29. Mai 2019 um 22:00 im Jazzclub Karlsruhe`); - expect(message.body).to.include(`### [Konzert 3](http://localhost:1970/vue/konzert/?page=presse) + expect(message.body).to.include(`### [Konzert 3](http://localhost:1970/konzert/?page=presse) #### Samstag, 29. Juni 2019 um 22:00 im Jazzclub Karlsruhe`); expect(message.body, "Konzert 4 braucht keine Presse").to.not.include(`### [Konzert 4]`); diff --git a/application/vue/src/components/content/menu/JazzHeader.tsx b/application/vue/src/components/content/menu/JazzHeader.tsx index 4917b962..f2a8740e 100644 --- a/application/vue/src/components/content/menu/JazzHeader.tsx +++ b/application/vue/src/components/content/menu/JazzHeader.tsx @@ -115,7 +115,7 @@ export function JazzHeader({ activeElement }: { readonly activeElement: string } }} to="/" > - Jazzclub Logo + Jazzclub Logo
diff --git a/application/vue/src/rest/loader.ts b/application/vue/src/rest/loader.ts index c707de11..90638f82 100644 --- a/application/vue/src/rest/loader.ts +++ b/application/vue/src/rest/loader.ts @@ -387,14 +387,14 @@ export async function openAngebotRechnung(vermietung: Vermietung) { } export async function imgFullsize(url: string) { - const img = await get({ contentType: "other", url: `/upload/${url}`, resType: new Blob() }); + const img = await get({ contentType: "other", url: `/${url}`, urlPrefix: "/upload", resType: new Blob() }); if (img) { showFile(img, url); } } export async function imgzipForVeranstaltung(konzert: Konzert) { - const zip = await get({ contentType: "zip", url: `/imgzipForVeranstaltung/${konzert.url}`, resType: new Blob() }); + const zip = await get({ contentType: "zip", url: `/${konzert.url}`, urlPrefix: "/imgzipForVeranstaltung", resType: new Blob() }); if (zip) { showFile(zip, `JazzClub_Bilder_${konzert.kopf.titel}.zip`); } diff --git a/application/vue/src/router/JazzRouter.tsx b/application/vue/src/router/JazzRouter.tsx index e945e4f6..25de276d 100644 --- a/application/vue/src/router/JazzRouter.tsx +++ b/application/vue/src/router/JazzRouter.tsx @@ -71,6 +71,6 @@ const routes = [ ]; export function JazzRouter() { - const router = useMemo(() => createBrowserRouter(routes, { basename: "/vue" }), []); + const router = useMemo(() => createBrowserRouter(routes), []); return ; } diff --git a/application/vue/test/PlayAround.test.tsx b/application/vue/test/PlayAround.test.tsx index d991f48b..c63c47e9 100644 --- a/application/vue/test/PlayAround.test.tsx +++ b/application/vue/test/PlayAround.test.tsx @@ -24,7 +24,7 @@ describe("Playing Around", () => { it("should first", async () => { //const user = userEvent.setup(); - window.history.pushState({}, "Test page", "/vue"); + //window.history.pushState({}, "Test page", "/vue"); const { getByText } = render(, { wrapper: JazzRouter }); await waitFor(() => { @@ -34,7 +34,7 @@ describe("Playing Around", () => { it("should second", async () => { //const user = userEvent.setup(); - window.history.pushState({}, "Test page", "/vue/konzert/new"); + window.history.pushState({}, "Test page", "/konzert/new"); const { getByText } = render(, { wrapper: JazzRouter }); await waitFor(() => { diff --git a/application/vue/vite.config.ts b/application/vue/vite.config.ts index 6cf857fe..b071d00e 100644 --- a/application/vue/vite.config.ts +++ b/application/vue/vite.config.ts @@ -9,9 +9,9 @@ import express from "express"; export default defineConfig(() => { return { root: __dirname, - base: "/vue/", + base: "/", build: { - outDir: "../backend/static/vue", + outDir: "../backend/static/", emptyOutDir: false, sourcemap: false, chunkSizeWarningLimit: 5000, @@ -59,12 +59,12 @@ export default defineConfig(() => { theme_color: "#000000", icons: [ { - src: "/vue/img/logo-square-192.png", + src: "/img/logo-square-192.png", sizes: "192x192", type: "image/png", }, { - src: "/vue/img/logo-square-512.png", + src: "/img/logo-square-512.png", sizes: "512x512", type: "image/png", }, diff --git a/frontendtests/tests/01_optionen_anlegen_test.ts b/frontendtests/tests/01_optionen_anlegen_test.ts index 53794ebe..45836d09 100644 --- a/frontendtests/tests/01_optionen_anlegen_test.ts +++ b/frontendtests/tests/01_optionen_anlegen_test.ts @@ -7,11 +7,11 @@ Before(({ login }) => { Scenario("Erzeuge Typen und Orte", ({ I }) => { I.deleteObjectInCollection("optionenstore", "instance"); I.deleteObjectInCollection("optionenstore", "orte"); - I.amOnPage("/vue/optionen"); + I.amOnPage("/optionen"); I.fillField("Kooperationen", "UI Test\n"); I.click("Speichern"); - I.amOnPage("/vue/orte"); + I.amOnPage("/orte"); I.click(`(//button[@data-testid="add-in-table"])`); I.click('div[data-testid="name0"]'); I.fillField("#name", "Jazzclub"); diff --git a/frontendtests/tests/02_konzert_anlegen_test.ts b/frontendtests/tests/02_konzert_anlegen_test.ts index 777a6fbb..721bfd58 100644 --- a/frontendtests/tests/02_konzert_anlegen_test.ts +++ b/frontendtests/tests/02_konzert_anlegen_test.ts @@ -7,7 +7,7 @@ Before(({ I, login }) => { }); Scenario("Erzeuge neues Konzert", async ({ I }) => { - I.amOnPage("/vue/konzert/new"); + I.amOnPage("/konzert/new"); I.wait(0.5); I.see("Typ"); I.fillField('//input[@placeholder="Startdatum"]', "200320 18:30\t"); @@ -42,7 +42,7 @@ Scenario("Erzeuge neues Konzert", async ({ I }) => { I.assertDeepEqual(res.startDate, "2020-03-20T17:30:00.000Z"); I.assertDeepEqual(res.endDate, "2020-03-20T19:00:00.000Z"); - I.amOnPage("/vue/veranstaltungen"); + I.amOnPage("/veranstaltungen"); I.wait(0.5); I.see("Konzert #1"); }); diff --git a/frontendtests/tests/03_vermietung_anlegen_test.ts b/frontendtests/tests/03_vermietung_anlegen_test.ts index 38f85d13..54effd80 100644 --- a/frontendtests/tests/03_vermietung_anlegen_test.ts +++ b/frontendtests/tests/03_vermietung_anlegen_test.ts @@ -7,7 +7,7 @@ Before(({ I, login }) => { }); Scenario("Erzeuge neue Vermietung", async ({ I }) => { - I.amOnPage("/vue/vermietung/new"); + I.amOnPage("/vermietung/new"); I.fillField("Saalmiete", "100"); I.fillField('//input[@placeholder="Startdatum"]', "200320 18:30\t"); I.click("OK"); @@ -40,7 +40,7 @@ Scenario("Erzeuge neue Vermietung", async ({ I }) => { I.assertEqual(res.startDate, "2020-03-20T17:30:00.000Z"); I.assertEqual(res.endDate, "2020-03-20T19:00:00.000Z"); - I.amOnPage("/vue/veranstaltungen"); + I.amOnPage("/veranstaltungen"); I.wait(0.5); I.see("Vermietung #1"); }); diff --git a/frontendtests/tests/04_konzert_kopieren_test.ts b/frontendtests/tests/04_konzert_kopieren_test.ts index ff0a7180..e48d7d55 100644 --- a/frontendtests/tests/04_konzert_kopieren_test.ts +++ b/frontendtests/tests/04_konzert_kopieren_test.ts @@ -8,7 +8,7 @@ Before(({ I, login }) => { }); Scenario("Kopiere Konzert", async ({ I }) => { - I.amOnPage("/vue/konzert/copy-of-Kopiervorlage?page=allgemeines"); + I.amOnPage("/konzert/copy-of-Kopiervorlage?page=allgemeines"); I.wait(0.5); I.click("Weiter"); I.fillField("Titel", "Kopiertes Konzert");