mirror of
https://github.com/misode/misode.github.io.git
synced 2026-05-04 14:42:53 +00:00
Allow multiple views + smarter initialization
This commit is contained in:
+29
-2
@@ -16,7 +16,34 @@
|
||||
<title data-i18n="title.advancement">Advancement Generator Minecraft 1.15</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
|
||||
<span id="descriptionSpan" class="navbar-brand mb-0 h1" data-i18n="description.advancement"></span>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="collapsibleNavbar">
|
||||
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
|
||||
<div id="versionList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
|
||||
🌎 Language
|
||||
</a>
|
||||
<div id="lngList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
|
||||
<div id="themeList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
</ul>
|
||||
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/loot-table" style="color: #ddd;" data-i18n="credit"></a></span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container" data-generator="advancement"></div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||
@@ -25,7 +52,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
|
||||
<script src="../js/i18n.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
<script src="../js/model.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+14
-13
@@ -6,19 +6,20 @@ const lngs = [
|
||||
|
||||
lngs.forEach(v => $('#lngList').append(`<a class="dropdown-item" onclick="changeLng('${v[0]}')">${v[1]}</a>`))
|
||||
|
||||
i18next
|
||||
.use(i18nextBrowserLanguageDetector)
|
||||
.use(i18nextXHRBackend)
|
||||
.init({
|
||||
backend: { loadPath: '../locales/{{lng}}.json' },
|
||||
fallbackLng: 'en',
|
||||
whitelist: lngs.map(v => v[0]),
|
||||
keySeparator: false
|
||||
})
|
||||
.then(() => {
|
||||
jqueryI18next.init(i18next, $, { parseDefaultValueFromContent: false })
|
||||
updateView()
|
||||
})
|
||||
function initLng() {
|
||||
return i18next
|
||||
.use(i18nextBrowserLanguageDetector)
|
||||
.use(i18nextXHRBackend)
|
||||
.init({
|
||||
backend: { loadPath: '../locales/{{lng}}.json' },
|
||||
fallbackLng: 'en',
|
||||
whitelist: lngs.map(v => v[0]),
|
||||
keySeparator: false
|
||||
})
|
||||
.then(() => {
|
||||
jqueryI18next.init(i18next, $, { parseDefaultValueFromContent: false });
|
||||
});
|
||||
}
|
||||
|
||||
function changeLng(code) {
|
||||
i18next.changeLanguage(code).then(() => {
|
||||
|
||||
+52
-24
@@ -1,30 +1,58 @@
|
||||
|
||||
let indentation = 2;
|
||||
let luckBased = false;
|
||||
let historyBuffer = 100;
|
||||
let history = ['{}'];
|
||||
let historyIndex = 0;
|
||||
|
||||
let structure;
|
||||
let components;
|
||||
let collections;
|
||||
let table = {};
|
||||
let listeners = [];
|
||||
|
||||
const generators = {
|
||||
'advancement': ['1.15'],
|
||||
'loot-table': ['1.13', '1.14', '1.15'],
|
||||
'predicate': ['1.15']
|
||||
}
|
||||
|
||||
function addListener(listener) {
|
||||
listeners.push(listener);
|
||||
listener();
|
||||
}
|
||||
|
||||
loadGenerator($('[data-generator]').attr('data-generator'));
|
||||
function loadGenerator(generator) {
|
||||
const versions = generators[generator] || [];
|
||||
versions.forEach(v => {
|
||||
$('#versionList').append(`<a class="dropdown-item" onclick="changeVersion('${v}')">${v}</a>`)
|
||||
});
|
||||
const promises = [initLng(), loadVersion(generator, '1.15')];
|
||||
Promise.all(promises).then(() => {
|
||||
invalidated()
|
||||
});
|
||||
}
|
||||
|
||||
function loadVersion(generator, version) {
|
||||
return $.getJSON('../schemas/' + version + '.json', json => {
|
||||
structure = json.roots.find(e => e.id === generator);
|
||||
components = json.components;
|
||||
collections = json.collections;
|
||||
}).fail((jqXHR, textStatus, errorThrown) => {
|
||||
let message = 'Failed loading ' + version + ' schema';
|
||||
structure = {};
|
||||
console.error(message + '\n' + errorThrown);
|
||||
}).always(() => {
|
||||
$('#versionLabel').text(version);
|
||||
});
|
||||
}
|
||||
|
||||
$("#source").val('');
|
||||
$('#luckBased').prop('checked', false);
|
||||
$('#tableType').val("minecraft:generic");
|
||||
$('#indentationSelect').val("2");
|
||||
|
||||
let indentation = 2;
|
||||
let luckBased = false;
|
||||
let table = {
|
||||
type: "minecraft:generic",
|
||||
pools: [
|
||||
{
|
||||
"rolls": 1,
|
||||
"entries": [
|
||||
{
|
||||
"type": "minecraft:item",
|
||||
"name": "minecraft:stone"
|
||||
}
|
||||
]
|
||||
}
|
||||
]
|
||||
};
|
||||
let historyBuffer = 100;
|
||||
let history = ['{}'];
|
||||
let historyIndex = 0;
|
||||
invalidated();
|
||||
|
||||
const params = new URLSearchParams(window.location.search);
|
||||
if (params.has('q')) {
|
||||
$('#source').val(atob(params.get('q')));
|
||||
@@ -49,7 +77,7 @@ function undo() {
|
||||
if (historyIndex > 0) {
|
||||
historyIndex -= 1;
|
||||
table = JSON.parse(history[historyIndex]);
|
||||
updateView();
|
||||
listeners.forEach(l => l());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -57,7 +85,7 @@ function redo() {
|
||||
if (historyIndex < history.length - 1) {
|
||||
historyIndex += 1;
|
||||
table = JSON.parse(history[historyIndex]);
|
||||
updateView();
|
||||
listeners.forEach(l => l());
|
||||
}
|
||||
}
|
||||
|
||||
@@ -73,7 +101,7 @@ function invalidated() {
|
||||
history = history.slice(0, historyIndex);
|
||||
history.push(JSON.stringify(table));
|
||||
}
|
||||
updateView();
|
||||
listeners.forEach(l => l());
|
||||
}
|
||||
|
||||
function updateTableType() {
|
||||
|
||||
+4
-40
@@ -1,45 +1,9 @@
|
||||
let structure;
|
||||
let components;
|
||||
let collections;
|
||||
|
||||
const generators = {
|
||||
'advancement': ['1.15'],
|
||||
'loot-table': ['1.13', '1.14', '1.15'],
|
||||
'predicate': ['1.15']
|
||||
}
|
||||
const themes = ["light", "dark"];
|
||||
|
||||
const generator = window.location.pathname.replace(/\/$/, '').replace(/^\//, '');
|
||||
generators[generator].forEach(v => {
|
||||
$('#versionList').append(`<a class="dropdown-item" onclick="changeVersion('${v}')">${v}</a>`)
|
||||
});
|
||||
themes.forEach(v => $('#themeList').append(`<a class="dropdown-item" onclick="changeTheme('${v}')" data-i18n="theme.${v}"></a>`));
|
||||
|
||||
changeVersion('1.15');
|
||||
function changeVersion(version) {
|
||||
$.getJSON('../schemas/' + version + '.json', json => {
|
||||
if (json.root) {
|
||||
structure = json.root;
|
||||
} else if (json.roots) {
|
||||
structure = json.roots.find(e => e.id === generator) || json.roots[0] ;
|
||||
}
|
||||
components = json.components;
|
||||
collections = json.collections;
|
||||
}).fail((jqXHR, textStatus, errorThrown) => {
|
||||
let message = 'Failed loading ' + version + ' schema';
|
||||
structure = {
|
||||
fields: [
|
||||
{
|
||||
id: 'pools',
|
||||
type: 'error',
|
||||
message: message
|
||||
}
|
||||
]
|
||||
};
|
||||
console.error(message + '\n' + errorThrown);
|
||||
}).always(() => {
|
||||
$('#versionLabel').text(version);
|
||||
updateView();
|
||||
});
|
||||
}
|
||||
addListener(updateView);
|
||||
|
||||
changeTheme(localStorage.getItem('theme'))
|
||||
function changeTheme(theme) {
|
||||
@@ -65,7 +29,7 @@ function updateView() {
|
||||
}
|
||||
|
||||
function generateSourceAndView(data, struct) {
|
||||
if (generator === 'loot-table') {
|
||||
if (struct.id === 'loot-table') {
|
||||
$('#lootTableToolbar').removeClass('d-none');
|
||||
$('#structure').attr('data-index', 'pools');
|
||||
return generateTable(data, struct);
|
||||
|
||||
+29
-2
@@ -16,7 +16,34 @@
|
||||
<title data-i18n="title.loot-table">Loot Table Generator Minecraft 1.15</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
|
||||
<span id="descriptionSpan" class="navbar-brand mb-0 h1" data-i18n="description.loot-table"></span>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="collapsibleNavbar">
|
||||
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
|
||||
<div id="versionList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
|
||||
🌎 Language
|
||||
</a>
|
||||
<div id="lngList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
|
||||
<div id="themeList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
</ul>
|
||||
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/loot-table" style="color: #ddd;" data-i18n="credit"></a></span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container" data-generator="loot-table"></div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||
@@ -25,7 +52,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
|
||||
<script src="../js/i18n.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
<script src="../js/model.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
+29
-2
@@ -16,7 +16,34 @@
|
||||
<title data-i18n="title.predicate">Predicate Generator Minecraft 1.15</title>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<nav class="navbar navbar-expand-md navbar-dark bg-dark">
|
||||
<span id="descriptionSpan" class="navbar-brand mb-0 h1" data-i18n="description.predicate"></span>
|
||||
<button class="navbar-toggler navbar-toggler-right" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
|
||||
<span class="navbar-toggler-icon"></span>
|
||||
</button>
|
||||
<div class="collapse navbar-collapse" id="collapsibleNavbar">
|
||||
<ul class="navbar-nav mr-md-auto mb-2 mb-md-0">
|
||||
<li class="nav-item dropdown">
|
||||
<a id="versionLabel" class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown"></a>
|
||||
<div id="versionList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle mr-2" href="" role="button" data-toggle="dropdown">
|
||||
🌎 Language
|
||||
</a>
|
||||
<div id="lngList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
<li class="nav-item dropdown">
|
||||
<a class="nav-link dropdown-toggle" href="" role="button" data-toggle="dropdown" data-i18n="theme"></a>
|
||||
<div id="themeList" class="dropdown-menu"></div>
|
||||
</li>
|
||||
</ul>
|
||||
<span class="ml-0 ml-md-2"><a href="https://github.com/misode/loot-table" style="color: #ddd;" data-i18n="credit"></a></span>
|
||||
</div>
|
||||
</nav>
|
||||
|
||||
<div class="container" data-generator="predicate"></div>
|
||||
|
||||
<script src="https://code.jquery.com/jquery-3.4.1.min.js" integrity="sha256-CSXorXvZcTkaix6Yvo6HppcZGetbYMGWSFlBw8HfCJo=" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.6/umd/popper.min.js" integrity="sha384-wHAiFfRlMFy6i5SRaxvfOCifBUQy1xHdJ/yoi7FRNXMRBu5WHdZYu1hA6ZOblgut" crossorigin="anonymous"></script>
|
||||
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.2.1/js/bootstrap.min.js" integrity="sha384-B0UglyR+jN6CkvvICOB2joaf5I4l3gm9GU6Hc1og6Ls7i6U/mkkaduKaBhlAXv9k" crossorigin="anonymous"></script>
|
||||
@@ -25,7 +52,7 @@
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/i18next-xhr-backend/3.0.0/i18nextXHRBackend.min.js" integrity="sha384-dK+VwLEvPDbpKM7G7D/LtbW6W2zlt99nuVTwoYIkMulAedST9Vj9OCRkv2xV8GjD" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-i18next/1.2.1/jquery-i18next.min.js" integrity="sha384-fLTSt6zHOb152KeFkj7kSiXdkyjKf6fjk5bdzWYLDPDo9evwd9PVs3TKoYYaaxdl" crossorigin="anonymous"></script>
|
||||
<script src="../js/i18n.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
<script src="../js/model.js" charset="utf-8"></script>
|
||||
<script src="../js/view.js" charset="utf-8"></script>
|
||||
</body>
|
||||
</html>
|
||||
|
||||
Reference in New Issue
Block a user