diff --git a/src/app/Sandbox.ts b/src/app/Sandbox.ts index 56cedb76..2b95cccb 100644 --- a/src/app/Sandbox.ts +++ b/src/app/Sandbox.ts @@ -29,7 +29,7 @@ SCHEMAS.register('foo', ObjectNode({ }) ), map: MapNode( - EnumNode(['pig', 'sheep']), + EnumNode(['pig', 'sheep'], 'pig'), Resource(StringNode()) ), recursive: ListNode( diff --git a/src/app/app.ts b/src/app/app.ts index 55c60c1a..fe24657d 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -1,4 +1,4 @@ -import { RegistryFetcher } from './RegistryFetcher' +import Split from 'split.js' import { DataModel, IView, @@ -13,8 +13,7 @@ import { locale, COLLECTIONS } from 'minecraft-schemas' -import Split from 'split.js' - +import { RegistryFetcher } from './RegistryFetcher' import { SandboxSchema } from './Sandbox' import { ErrorsView } from './ErrorsView' @@ -57,6 +56,13 @@ const treeViewObserver = (el: HTMLElement) => { el.querySelectorAll('.node-header[data-error]').forEach(e => { e.insertAdjacentHTML('beforeend', ``) }) + el.querySelectorAll('.collapse.closed, button.add').forEach(e => { + e.insertAdjacentHTML('afterbegin', ``) + }) + el.querySelectorAll('.collapse.open, button.remove').forEach(e => { + e.insertAdjacentHTML('afterbegin', ` + `) + }) } const publicPath = process.env.NODE_ENV === 'production' ? '/dev/' : '/'; @@ -78,11 +84,17 @@ Promise.all([ const errorsViewEl = document.getElementById('errors-view')! const errorsToggle = document.getElementById('errors-toggle')! const sourceViewOutput = (document.getElementById('source-view-output') as HTMLTextAreaElement) + const treeViewOutput = document.getElementById('tree-view-output')! const sourceControlsToggle = document.getElementById('source-controls-toggle')! const sourceControlsMenu = document.getElementById('source-controls-menu')! const sourceControlsCopy = document.getElementById('source-controls-copy')! const sourceControlsDownload = document.getElementById('source-controls-download')! const sourceToggle = document.getElementById('source-toggle')! + const treeControlsToggle = document.getElementById('tree-controls-toggle')! + const treeControlsMenu = document.getElementById('tree-controls-menu')! + const treeControlsVersionToggle = document.getElementById('tree-controls-version-toggle')! + const treeControlsVersionMenu = document.getElementById('tree-controls-version-menu')! + const treeControlsReset = document.getElementById('tree-controls-reset')! let selected = modelFromPath(location.pathname) @@ -95,22 +107,20 @@ Promise.all([ 'sandbox': new DataModel(SandboxSchema) } - const views: { [key: string]: IView } = { - 'tree': new TreeView(models[selected], treeViewEl, { + const views: IView[] = [ + new TreeView(models[selected], treeViewOutput, { showErrors: true, observer: treeViewObserver }), - 'source': new SourceView(models[selected], sourceViewOutput, { + new SourceView(models[selected], sourceViewOutput, { indentation: 2 }), - 'errors': new ErrorsView(models[selected], errorsViewEl) - } + new ErrorsView(models[selected], errorsViewEl) + ] const updateModel = (newModel: string) => { selected = newModel - for (const v in views) { - views[v].setModel(models[selected]) - } + views.forEach(v => v.setModel(models[selected])) selectedModel.textContent = locale(`title.${selected}`) modelSelectorMenu.innerHTML = '' @@ -224,6 +234,25 @@ Promise.all([ downloadAnchor.click() }) + treeControlsToggle.addEventListener('click', evt => { + treeControlsMenu.style.visibility = 'visible' + document.body.addEventListener('click', evt => { + treeControlsMenu.style.visibility = 'hidden' + }, { capture: true, once: true }) + }) + + treeControlsVersionToggle.addEventListener('click', evt => { + treeControlsVersionMenu.style.visibility = 'visible' + document.body.addEventListener('click', evt => { + treeControlsVersionMenu.style.visibility = 'hidden' + }, { capture: true, once: true }) + }) + + treeControlsReset.addEventListener('click', evt => { + models[selected].reset(models[selected].schema.default()) + addChecked(treeControlsReset) + }) + errorsToggle.addEventListener('click', evt => { if (errorsViewEl.classList.contains('hidden')) { errorsViewEl.classList.remove('hidden') diff --git a/src/generator.html b/src/generator.html index b67c04e7..07b68533 100644 --- a/src/generator.html +++ b/src/generator.html @@ -38,7 +38,41 @@