revised trims

This commit is contained in:
zino
2021-05-17 16:17:27 +02:00
parent 96dd6dcfc0
commit 6786d5f8f6
3 changed files with 58 additions and 46 deletions

View File

@@ -18,22 +18,6 @@ export function addSeatToState(inSelectedSeat: I.JSCSelectedSeat): void {
console.warn(`Cannot find corresponding venueXML pricescaleObj for pricescale with ID ${pricescaleID}`); console.warn(`Cannot find corresponding venueXML pricescaleObj for pricescale with ID ${pricescaleID}`);
} }
function addSeatsItemToState(inItem: (string | undefined)[]): void {
if (inItem.every(v => v !== ("" || undefined || null))) {
config.state.selectedSeatsArr.push(<string[]>inItem);
config.state.cartChanged = true;
}
}
function addSeatObjToState(inSelectedSeat: I.JSCSelectedSeat): void {
const seatID: string = inSelectedSeat.id;
const seatObj: I.StateJSCSelectedSeats = {
[seatID]: inSelectedSeat
}
config.state.selectedSeatsObj = { ...config.state.selectedSeatsObj, ...seatObj }
}
export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void { export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void {
delete config.state.selectedSeatsObj[inSelectedSeat.id]; delete config.state.selectedSeatsObj[inSelectedSeat.id];
@@ -48,7 +32,7 @@ export function removeSeatFromState(inSelectedSeat: I.JSCSelectedSeat): void {
export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boolean { export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boolean {
const seatmap: any = config.state.seatmap; const seatmap: any = config.state.seatmap;
if (config.state.selectedSeatsArr.length >= config.maxSelectedSeats) { if (config.state.selectedSeatsArr.length >= config.maxSelectedSeats) {
UI.showJBoxNotice(`Sie können maximal ${config.maxSelectedSeats} Plätze auswählen.`); UI.showJBoxNotice(`Sie können maximal ${config.maxSelectedSeats} Plätze auswählen.`);
seatmap.status(inSeatObj.id, "available"); seatmap.status(inSeatObj.id, "available");
@@ -56,4 +40,20 @@ export function maximumSelectedSeatsReached(inSeatObj: I.JSCSelectedSeat): boole
} }
return false; return false;
}
function addSeatsItemToState(inItem: (string | undefined)[]): void {
if (inItem.every(v => v !== ("" || undefined || null))) {
config.state.selectedSeatsArr.push(<string[]>inItem);
config.state.cartChanged = true;
}
}
function addSeatObjToState(inSelectedSeat: I.JSCSelectedSeat): void {
const seatID: string = inSelectedSeat.id;
const seatObj: I.StateJSCSelectedSeats = {
[seatID]: inSelectedSeat
}
config.state.selectedSeatsObj = { ...config.state.selectedSeatsObj, ...seatObj }
} }

View File

@@ -1,24 +1,22 @@
import { config } from "./config"; import { config } from "./config";
import * as I from "../types/types"; import * as I from "../types/types";
export function addTrims() { export function addTrims(): void {
const seatmapXML = config.state.seatmapXML; const seatmapXML: any = config.state.seatmapXML;
const trimArr: I.Trim[] = seatmapXML.seatmap[0].trims[0].trim; const trimArr: I.Trim[] = seatmapXML.seatmap[0].trims[0].trim;
trimArr.forEach(arr => { trimArr.forEach(arr => {
const [xTrim, yTrim] = arr.coord[0].split(",").map(Number); const [xTrim, yTrim] = arr.coord[0].split(",").map(Number);
const textArr: string[] = arr.text[0].split(";").filter(Boolean); const textArr: string[] = arr.text[0].split(";").filter(Boolean);
const x = xTrim / 20; const x: number = xTrim / 20;
const y = Math.round(yTrim / 21.25); const y: number = Math.round(yTrim / 21.25);
console.log(`xTrim: ${xTrim} yTrim: ${yTrim} -> x: ${x} y: ${y}`); decodeTrim(textArr, x, y);
decodeAddTrims(textArr, x, y);
}); });
} }
function decodeAddTrims(textArr: string[], x: number, y: number) { function decodeTrim(textArr: string[], x: number, y: number): void {
let i = 0; const specialChar: Map<string, string> = new Map([
const specialChar = new Map([
["&#x8e", "Ä"], ["&#x8e", "Ä"],
["&#x99", "Ö"], ["&#x99", "Ö"],
["&#x9a", "Ü"], ["&#x9a", "Ü"],
@@ -28,28 +26,35 @@ function decodeAddTrims(textArr: string[], x: number, y: number) {
["&#xe1", "ß"] ["&#xe1", "ß"]
]); ]);
textArr.forEach(element => { textArr.map((element, index) => {
let character; const character: string | undefined = specialChar.has(element) ? specialChar.get(element) : decodeNormalTrim(element);
if (specialChar.has(element)) if (character) {
character = specialChar.get(element); const trimPos: I.TrimPos = getJSCTrimPos(x, y, index);
else { applyTrim(character, trimPos);
const charCode = element.replace(/^\&\#/, "0"); }
character = String.fromCharCode(parseInt(charCode, 16));
}
if (character)
applyTrim(x, y, i, character);
i++;
}); });
} }
function applyTrim(x: number, y: number, i: number, character: string) { function decodeNormalTrim(element: string): string {
if (!/[^a-zA-Z0-9äöüÄÖÜß$]/.test(character)) { const charCode: string = element.replace(/^\&\#/, "0");
const _x = (x - 1) + i; return String.fromCharCode(parseInt(charCode, 16));
const _y = y - 1; }
console.log(`${character} -> ${_x} ${_y}`);
jQuery(".seatCharts-row")[_y].children[_x].innerHTML = `<span class="trimChar">${character}</span>` function applyTrim(inCharacter: string, inTrimPos: I.TrimPos): void {
const regex: RegExp = /[^a-zA-Z0-9äöüÄÖÜß$]/;
if (!regex.test(inCharacter)) {
console.log(`${inCharacter} -> ${inTrimPos.xJSC} ${inTrimPos.yJSC}`);
jQuery(".seatCharts-row")[inTrimPos.yJSC].children[inTrimPos.xJSC].innerHTML = `<span class="trimChar">${inCharacter}</span>`
}
}
function getJSCTrimPos(inX: number, inY: number, index: number): I.TrimPos {
return <I.TrimPos> {
x: inX,
y: inY,
xJSC: (inX - 1) + index,
yJSC: inY - 1
} }
} }

View File

@@ -417,5 +417,12 @@ export interface ImportantNote {
importantNoteEncoded: string; importantNoteEncoded: string;
} }
export interface TrimPos {
x: number;
y: number;
xJSC: number;
yJSC: number;
}
export type TypeBuyerType = (string | undefined)[][] | undefined; export type TypeBuyerType = (string | undefined)[][] | undefined;
export type TypeBuyerTypeArr = (string | undefined)[]; export type TypeBuyerTypeArr = (string | undefined)[];