Files
GS13NG/tgui/src/tgui.js
2020-01-15 09:41:33 +02:00

71 lines
1.9 KiB
JavaScript

// Temporarily import Ractive first to keep it from detecting ie8's object.defineProperty shim, which it misuses (ractivejs/ractive#2343).
import Ractive from 'ractive'
Ractive.DEBUG = /minified/.test(() => {/* minified */})
import 'ie8'
import 'babel-polyfill'
import 'dom4'
import 'html5shiv'
// Extend the Math builtin with our own utilities.
Object.assign(Math, require('util/math'))
// Set up the initialize function. This is either called below if JSON is provided
// inline, or called by the server if it was not.
import TGUI from 'tgui.ract'
// This thing was a part of an old index.html
window.update = window.initialize = dataString => {
const data = JSON.parse(dataString);
// Initialize
if (!window.tgui) {
window.tgui = new TGUI({
el: '#container',
data () {
const initial = data;
return {
constants: require('util/constants'),
text: require('util/text'),
config: initial.config,
data: initial.data,
adata: initial.data,
};
},
});
}
// Update
if (window.tgui) {
window.tgui.set('config', data.config);
if (typeof data.data !== 'undefined') {
window.tgui.set('data', data.data);
window.tgui.animate('adata', data.data);
}
}
};
// Try to find data in the page. If the JSON was inlined, load it.
const holder = document.getElementById('data')
const data = holder.textContent
const ref = holder.getAttribute('data-ref')
if (data !== '{}') {
window.initialize(data)
holder.remove()
}
// Let the server know we're set up.
// This also sends data if it was not inlined.
// NOTE: This is currently handled by tgui-next. Only initialize if
// we were loaded by tgui-fallback.html.
import { act } from 'util/byond';
import { loadCSS } from 'fg-loadcss';
if (window.tguiFallback) {
act(ref, 'tgui:initialize');
// Load fonts.
loadCSS('v4shim.css')
loadCSS('font-awesome.css')
}
else {
act(ref, 'tgui:update');
}