Split up Util.ts
This commit is contained in:
parent
1e38e24fb3
commit
034a7a2fdb
@ -28,7 +28,8 @@ import Sidebar from './components/Sidebar.vue';
|
|||||||
import ChatBox from './components/ChatBox.vue';
|
import ChatBox from './components/ChatBox.vue';
|
||||||
import {useStore} from "@/store";
|
import {useStore} from "@/store";
|
||||||
import {ActionTypes} from "@/store/action-types";
|
import {ActionTypes} from "@/store/action-types";
|
||||||
import {hideSplash, parseUrl, showSplash, showSplashError} from '@/util';
|
import {parseUrl} from '@/util';
|
||||||
|
import {hideSplash, showSplash, showSplashError} from '@/util/splash';
|
||||||
import {MutationTypes} from "@/store/mutation-types";
|
import {MutationTypes} from "@/store/mutation-types";
|
||||||
import {LiveAtlasServerDefinition} from "@/index";
|
import {LiveAtlasServerDefinition} from "@/index";
|
||||||
|
|
||||||
|
@ -24,7 +24,8 @@ import '@/scss/style.scss';
|
|||||||
|
|
||||||
import 'focus-visible';
|
import 'focus-visible';
|
||||||
import {MutationTypes} from "@/store/mutation-types";
|
import {MutationTypes} from "@/store/mutation-types";
|
||||||
import {showSplashError, validateConfiguration} from "@/util";
|
import {validateConfiguration} from "@/util/config";
|
||||||
|
import {showSplashError} from "@/util/splash";
|
||||||
import { VueClipboard } from '@soerenmartius/vue3-clipboard';
|
import { VueClipboard } from '@soerenmartius/vue3-clipboard';
|
||||||
import Notifications from '@kyvg/vue3-notification'
|
import Notifications from '@kyvg/vue3-notification'
|
||||||
|
|
||||||
|
175
src/util.ts
175
src/util.ts
@ -15,10 +15,8 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
import API from '@/api';
|
import API from '@/api';
|
||||||
import {DynmapPlayer, DynmapUrlConfig, DynmapWorld, DynmapWorldMap} from "@/dynmap";
|
import {DynmapPlayer, DynmapWorld, DynmapWorldMap} from "@/dynmap";
|
||||||
import {useStore} from "@/store";
|
import {useStore} from "@/store";
|
||||||
import {LiveAtlasDynmapServerDefinition, LiveAtlasServerDefinition} from "@/index";
|
|
||||||
import ConfigurationError from "@/errors/ConfigurationError";
|
|
||||||
|
|
||||||
interface HeadQueueEntry {
|
interface HeadQueueEntry {
|
||||||
cacheKey: string;
|
cacheKey: string;
|
||||||
@ -206,119 +204,6 @@ export const parseMapSearchParams = (query: URLSearchParams) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
const validateLiveAtlasConfiguration = (config: any): Map<string, LiveAtlasServerDefinition> => {
|
|
||||||
const check = '\nCheck your server configuration in index.html is correct.',
|
|
||||||
result = new Map<string, LiveAtlasServerDefinition>();
|
|
||||||
|
|
||||||
if (!Object.keys(config).length) {
|
|
||||||
throw new ConfigurationError(`No servers defined. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
for (const server in config) {
|
|
||||||
if (!Object.hasOwnProperty.call(config, server)) {
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
const serverConfig = config[server];
|
|
||||||
|
|
||||||
if (!serverConfig || serverConfig.constructor !== Object || !Object.keys(serverConfig).length) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Configuration missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
serverConfig.id = server;
|
|
||||||
serverConfig.type = serverConfig.type || 'dynmap';
|
|
||||||
|
|
||||||
switch(serverConfig.type) {
|
|
||||||
case 'dynmap':
|
|
||||||
if (!serverConfig.dynmap || serverConfig.dynmap.constructor !== Object) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap configuration object missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap.configuration) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap configuration URL missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap.update) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap update URL missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap.markers) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap markers URL missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap.tiles) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap tiles URL missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!serverConfig.dynmap.sendmessage) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Dynmap sendmessage URL missing. ${check}`);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
case 'pl3xmap':
|
|
||||||
case 'plexmap':
|
|
||||||
if (!serverConfig.plexmap || serverConfig.plexmap.constructor !== Object) {
|
|
||||||
throw new ConfigurationError(`Server '${server}': Pl3xmap configuration object missing. ${check}`);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
result.set(server, serverConfig);
|
|
||||||
}
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
const validateDynmapConfiguration = (config: DynmapUrlConfig): Map<string, LiveAtlasDynmapServerDefinition> => {
|
|
||||||
const check = '\nCheck your standalone/config.js file exists and is being loaded correctly.';
|
|
||||||
|
|
||||||
if (!config) {
|
|
||||||
throw new ConfigurationError(`Dynmap configuration is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config.configuration) {
|
|
||||||
throw new ConfigurationError(`Dynmap configuration URL is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config.update) {
|
|
||||||
throw new ConfigurationError(`Dynmap update URL is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config.markers) {
|
|
||||||
throw new ConfigurationError(`Dynmap markers URL is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config.tiles) {
|
|
||||||
throw new ConfigurationError(`Dynmap tiles URL is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!config.sendmessage) {
|
|
||||||
throw new ConfigurationError(`Dynmap sendmessage URL is missing. ${check}`);
|
|
||||||
}
|
|
||||||
|
|
||||||
const result = new Map<string, LiveAtlasDynmapServerDefinition>();
|
|
||||||
result.set('dynmap', {
|
|
||||||
id: 'dynmap',
|
|
||||||
label: 'dynmap',
|
|
||||||
type: 'dynmap',
|
|
||||||
dynmap: config
|
|
||||||
});
|
|
||||||
|
|
||||||
return result;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const validateConfiguration = (): Map<string, LiveAtlasServerDefinition> => {
|
|
||||||
if (!window.liveAtlasConfig) {
|
|
||||||
throw new ConfigurationError(`Configuration object is missing`);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (typeof window.liveAtlasConfig.servers !== 'undefined') {
|
|
||||||
return validateLiveAtlasConfiguration(window.liveAtlasConfig.servers || {});
|
|
||||||
}
|
|
||||||
|
|
||||||
return validateDynmapConfiguration(window.config?.url || null);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const getAPI = () => {
|
export const getAPI = () => {
|
||||||
const store = useStore();
|
const store = useStore();
|
||||||
|
|
||||||
@ -344,61 +229,3 @@ export const getUrlForLocation = (world: DynmapWorld, map: DynmapWorldMap, locat
|
|||||||
|
|
||||||
return `#${world.name};${map.name};${locationString};${zoom}`;
|
return `#${world.name};${map.name};${locationString};${zoom}`;
|
||||||
}
|
}
|
||||||
|
|
||||||
const app = document.getElementById('app'),
|
|
||||||
splash = document.getElementById('splash'),
|
|
||||||
splashSpinner = document.getElementById('splash__spinner'),
|
|
||||||
splashError = document.getElementById('splash__error'),
|
|
||||||
splashErrorMessage = document.getElementById('splash__error-message'),
|
|
||||||
splashRetry = document.getElementById('splash__error-retry');
|
|
||||||
|
|
||||||
export const showSplash = function() {
|
|
||||||
if(!splash || !app) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
splash.hidden = false;
|
|
||||||
app.setAttribute('aria-hidden', 'true');
|
|
||||||
|
|
||||||
requestAnimationFrame(function() {
|
|
||||||
splash.style.opacity = '1';
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const hideSplash = () => {
|
|
||||||
if(!splash || !app) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
requestAnimationFrame(() => {
|
|
||||||
splash.style.opacity = '0';
|
|
||||||
app.removeAttribute('aria-hidden');
|
|
||||||
|
|
||||||
if(window.getComputedStyle(splash).opacity === '0') {
|
|
||||||
splash.hidden = true;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
export const showSplashError = (message: string, fatal: boolean, attempts?: number) => {
|
|
||||||
if(splashError) {
|
|
||||||
splashError.setAttribute('aria-hidden', 'false');
|
|
||||||
}
|
|
||||||
|
|
||||||
if(splashErrorMessage) {
|
|
||||||
splashErrorMessage.innerText = message || 'Unknown error';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(splashSpinner && fatal) {
|
|
||||||
splashSpinner.style.visibility = 'hidden';
|
|
||||||
}
|
|
||||||
|
|
||||||
if(splashRetry) {
|
|
||||||
if(fatal) {
|
|
||||||
splashRetry.hidden = true;
|
|
||||||
} else if(attempts) {
|
|
||||||
splashRetry.hidden = false;
|
|
||||||
splashRetry.textContent = `Retrying... (${attempts.toString()})`;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
115
src/util/config.ts
Normal file
115
src/util/config.ts
Normal file
@ -0,0 +1,115 @@
|
|||||||
|
import {LiveAtlasDynmapServerDefinition, LiveAtlasServerDefinition} from "@/index";
|
||||||
|
import ConfigurationError from "@/errors/ConfigurationError";
|
||||||
|
import {DynmapUrlConfig} from "@/dynmap";
|
||||||
|
|
||||||
|
const validateLiveAtlasConfiguration = (config: any): Map<string, LiveAtlasServerDefinition> => {
|
||||||
|
const check = '\nCheck your server configuration in index.html is correct.',
|
||||||
|
result = new Map<string, LiveAtlasServerDefinition>();
|
||||||
|
|
||||||
|
if (!Object.keys(config).length) {
|
||||||
|
throw new ConfigurationError(`No servers defined. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (const server in config) {
|
||||||
|
if (!Object.hasOwnProperty.call(config, server)) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
const serverConfig = config[server];
|
||||||
|
|
||||||
|
if (!serverConfig || serverConfig.constructor !== Object || !Object.keys(serverConfig).length) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Configuration missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
serverConfig.id = server;
|
||||||
|
serverConfig.type = serverConfig.type || 'dynmap';
|
||||||
|
|
||||||
|
switch(serverConfig.type) {
|
||||||
|
case 'dynmap':
|
||||||
|
if (!serverConfig.dynmap || serverConfig.dynmap.constructor !== Object) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap configuration object missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.dynmap.configuration) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap configuration URL missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.dynmap.update) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap update URL missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.dynmap.markers) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap markers URL missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.dynmap.tiles) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap tiles URL missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!serverConfig.dynmap.sendmessage) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Dynmap sendmessage URL missing. ${check}`);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 'pl3xmap':
|
||||||
|
case 'plexmap':
|
||||||
|
if (!serverConfig.plexmap || serverConfig.plexmap.constructor !== Object) {
|
||||||
|
throw new ConfigurationError(`Server '${server}': Pl3xmap configuration object missing. ${check}`);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
result.set(server, serverConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
const validateDynmapConfiguration = (config: DynmapUrlConfig): Map<string, LiveAtlasDynmapServerDefinition> => {
|
||||||
|
const check = '\nCheck your standalone/config.js file exists and is being loaded correctly.';
|
||||||
|
|
||||||
|
if (!config) {
|
||||||
|
throw new ConfigurationError(`Dynmap configuration is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.configuration) {
|
||||||
|
throw new ConfigurationError(`Dynmap configuration URL is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.update) {
|
||||||
|
throw new ConfigurationError(`Dynmap update URL is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.markers) {
|
||||||
|
throw new ConfigurationError(`Dynmap markers URL is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.tiles) {
|
||||||
|
throw new ConfigurationError(`Dynmap tiles URL is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!config.sendmessage) {
|
||||||
|
throw new ConfigurationError(`Dynmap sendmessage URL is missing. ${check}`);
|
||||||
|
}
|
||||||
|
|
||||||
|
const result = new Map<string, LiveAtlasDynmapServerDefinition>();
|
||||||
|
result.set('dynmap', {
|
||||||
|
id: 'dynmap',
|
||||||
|
label: 'dynmap',
|
||||||
|
type: 'dynmap',
|
||||||
|
dynmap: config
|
||||||
|
});
|
||||||
|
|
||||||
|
return result;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const validateConfiguration = (): Map<string, LiveAtlasServerDefinition> => {
|
||||||
|
if (!window.liveAtlasConfig) {
|
||||||
|
throw new ConfigurationError(`Configuration object is missing`);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (typeof window.liveAtlasConfig.servers !== 'undefined') {
|
||||||
|
return validateLiveAtlasConfiguration(window.liveAtlasConfig.servers || {});
|
||||||
|
}
|
||||||
|
|
||||||
|
return validateDynmapConfiguration(window.config?.url || null);
|
||||||
|
};
|
57
src/util/splash.ts
Normal file
57
src/util/splash.ts
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
const app = document.getElementById('app'),
|
||||||
|
splash = document.getElementById('splash'),
|
||||||
|
splashSpinner = document.getElementById('splash__spinner'),
|
||||||
|
splashError = document.getElementById('splash__error'),
|
||||||
|
splashErrorMessage = document.getElementById('splash__error-message'),
|
||||||
|
splashRetry = document.getElementById('splash__error-retry');
|
||||||
|
|
||||||
|
export const showSplash = function() {
|
||||||
|
if(!splash || !app) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
splash.hidden = false;
|
||||||
|
app.setAttribute('aria-hidden', 'true');
|
||||||
|
|
||||||
|
requestAnimationFrame(function() {
|
||||||
|
splash.style.opacity = '1';
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const hideSplash = () => {
|
||||||
|
if(!splash || !app) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
requestAnimationFrame(() => {
|
||||||
|
splash.style.opacity = '0';
|
||||||
|
app.removeAttribute('aria-hidden');
|
||||||
|
|
||||||
|
if(window.getComputedStyle(splash).opacity === '0') {
|
||||||
|
splash.hidden = true;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
export const showSplashError = (message: string, fatal: boolean, attempts?: number) => {
|
||||||
|
if(splashError) {
|
||||||
|
splashError.setAttribute('aria-hidden', 'false');
|
||||||
|
}
|
||||||
|
|
||||||
|
if(splashErrorMessage) {
|
||||||
|
splashErrorMessage.innerText = message || 'Unknown error';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(splashSpinner && fatal) {
|
||||||
|
splashSpinner.style.visibility = 'hidden';
|
||||||
|
}
|
||||||
|
|
||||||
|
if(splashRetry) {
|
||||||
|
if(fatal) {
|
||||||
|
splashRetry.hidden = true;
|
||||||
|
} else if(attempts) {
|
||||||
|
splashRetry.hidden = false;
|
||||||
|
splashRetry.textContent = `Retrying... (${attempts.toString()})`;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
};
|
Loading…
Reference in New Issue
Block a user