Add grid
parent
23f008e0e4
commit
b2fdcf91b8
31
index.lua
31
index.lua
|
@ -180,7 +180,7 @@ local function show_properties(elem, node)
|
|||
elem:setAttribute('data-formspec_ast', json.dumps(node))
|
||||
properties_elem.innerHTML = ''
|
||||
local base = elem.parentNode.parentNode
|
||||
assert(base.className == 'formspec_ast-base')
|
||||
assert(base.classList:contains('formspec_ast-base'))
|
||||
renderer.redraw_formspec(base)
|
||||
end
|
||||
|
||||
|
@ -196,7 +196,8 @@ local function show_properties(elem, node)
|
|||
parent:appendChild(elem)
|
||||
end
|
||||
|
||||
local n = assert(renderer.render_formspec(formspec, callbacks, false))
|
||||
local n = assert(renderer.render_formspec(formspec, callbacks,
|
||||
{store_json = false}))
|
||||
properties_elem:appendChild(n)
|
||||
end
|
||||
renderer.default_callback = show_properties
|
||||
|
@ -251,8 +252,8 @@ end
|
|||
local element_dialog_base
|
||||
do
|
||||
local replace_formspec = renderer.replace_formspec
|
||||
function renderer.replace_formspec(elem, tree)
|
||||
local new_elem, err = replace_formspec(elem, tree)
|
||||
function renderer.replace_formspec(elem, ...)
|
||||
local new_elem, err = replace_formspec(elem, ...)
|
||||
if new_elem and element_dialog_base == elem then
|
||||
element_dialog_base = new_elem
|
||||
end
|
||||
|
@ -263,7 +264,7 @@ end
|
|||
local function render_into(base, formspec, callbacks)
|
||||
base.innerHTML = ''
|
||||
base:appendChild(assert(renderer.render_formspec(formspec, callbacks,
|
||||
false)))
|
||||
{store_json = false})))
|
||||
end
|
||||
|
||||
local element_dialog
|
||||
|
@ -380,18 +381,28 @@ function renderer.show_element_dialog(base)
|
|||
end
|
||||
end
|
||||
y = y + 0.5
|
||||
fs = fs .. 'button[0.25,' .. y .. ';5.5,0.75;load;Load / save formspec]'
|
||||
fs = fs .. 'button[0.25,' .. y .. ';5.5,0.75;grid;Toggle grid]'
|
||||
fs = fs .. 'button[0.25,' .. y + 1 .. ';5.5,0.75;load;Load / save formspec]'
|
||||
function callbacks.grid()
|
||||
local raw = element_dialog_base:getAttribute('data-render-options')
|
||||
if raw == js.null then raw = '{}' end
|
||||
local options = json.loads(raw)
|
||||
options.grid = not options.grid
|
||||
raw = assert(json.dumps(options))
|
||||
element_dialog_base:setAttribute('data-render-options', raw)
|
||||
renderer.redraw_formspec(element_dialog_base)
|
||||
end
|
||||
callbacks.load = show_load_save_dialog
|
||||
y = y + 1
|
||||
y = y + 2
|
||||
fs = 'formspec_version[2]size[6,' .. y .. ']' .. fs
|
||||
element_dialog:appendChild(assert(renderer.render_formspec(fs, callbacks,
|
||||
false)))
|
||||
{store_json = false})))
|
||||
end
|
||||
|
||||
-- A JS API for testing
|
||||
function window:render_formspec(fs, callbacks)
|
||||
function window:render_formspec(fs, callbacks, options)
|
||||
local tree = assert(formspec_ast.parse(fs))
|
||||
local elem = assert(renderer.render_ast(tree, callbacks))
|
||||
local elem = assert(renderer.render_ast(tree, callbacks, options))
|
||||
local e = document:getElementById('formspec_output')
|
||||
if not e or e == js.null then
|
||||
window:addEventListener('load', function()
|
||||
|
|
24
renderer.lua
24
renderer.lua
|
@ -233,13 +233,20 @@ function renderer.make_image(name, allow_empty)
|
|||
return img
|
||||
end
|
||||
|
||||
function renderer.render_ast(tree, callbacks, store_json, scale)
|
||||
scale = 50 * (scale or 1)
|
||||
local default_options = {}
|
||||
function renderer.render_ast(tree, callbacks, options)
|
||||
options = options or default_options
|
||||
local scale = 50 * (options.scale or 1)
|
||||
local store_json = options.store_json or options.store_json == nil
|
||||
local base = document:createElement('div')
|
||||
base.className = 'formspec_ast-base'
|
||||
base:setAttribute('data-render-options', json.dumps(options))
|
||||
base.style.fontSize = scale .. 'px'
|
||||
local container = document:createElement('div')
|
||||
base:appendChild(container)
|
||||
if options.grid then
|
||||
base.firstChild.className = 'grid'
|
||||
end
|
||||
|
||||
for _, node in ipairs(formspec_ast.flatten(tree)) do
|
||||
if not elems[node.type] then
|
||||
|
@ -320,15 +327,22 @@ function renderer.elem_to_ast(elem)
|
|||
return res
|
||||
end
|
||||
|
||||
function renderer.replace_formspec(elem, tree)
|
||||
local new_elem, err = renderer.render_ast(tree)
|
||||
function renderer.replace_formspec(elem, ...)
|
||||
local new_elem, err = renderer.render_ast(...)
|
||||
if not new_elem then return nil, err end
|
||||
elem:replaceWith(new_elem)
|
||||
return new_elem, nil
|
||||
end
|
||||
|
||||
function renderer.redraw_formspec(elem)
|
||||
renderer.replace_formspec(elem, renderer.elem_to_ast(elem))
|
||||
local tree = renderer.elem_to_ast(elem)
|
||||
local options = elem:getAttribute('data-render-options')
|
||||
if type(options) == 'string' then
|
||||
options = json.loads(options)
|
||||
else
|
||||
options = nil
|
||||
end
|
||||
renderer.replace_formspec(elem, tree, nil, options)
|
||||
end
|
||||
|
||||
function renderer.unrender_formspec(elem)
|
||||
|
|
14
style.css
14
style.css
|
@ -5,7 +5,13 @@
|
|||
background-color: #343434;
|
||||
border: 1px solid #0D0D0D;
|
||||
border-radius: 3px;
|
||||
overflow: hidden; }
|
||||
overflow: hidden;
|
||||
image-rendering: optimizeSpeed;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: crisp-edges;
|
||||
image-rendering: pixelated; }
|
||||
.formspec_ast-base > div.grid {
|
||||
background: url("grid.png"); }
|
||||
.formspec_ast-base > div, .formspec_ast-base > div input, .formspec_ast-base > div textarea {
|
||||
font-family: Arimo, sans-serif;
|
||||
color: #FFFFFF; }
|
||||
|
@ -62,12 +68,6 @@
|
|||
top: 50%;
|
||||
left: 50%;
|
||||
transform: translate(-50%, -50%); }
|
||||
.formspec_ast-base .formspec_ast-image, .formspec_ast-base .formspec_ast-image_button img,
|
||||
.formspec_ast-base .formspec_ast-image_button_exit img {
|
||||
image-rendering: optimizeSpeed;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: crisp-edges;
|
||||
image-rendering: pixelated; }
|
||||
.formspec_ast-base .formspec_ast-field span, .formspec_ast-base .formspec_ast-pwdfield span, .formspec_ast-base .formspec_ast-textarea span {
|
||||
position: absolute;
|
||||
transform: translateY(-100%); }
|
||||
|
|
16
style.scss
16
style.scss
|
@ -24,6 +24,14 @@
|
|||
border: 1px solid #0D0D0D;
|
||||
border-radius: 3px;
|
||||
overflow: hidden;
|
||||
image-rendering: optimizeSpeed;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: crisp-edges;
|
||||
image-rendering: pixelated;
|
||||
|
||||
&.grid {
|
||||
background: url("grid.png");
|
||||
}
|
||||
|
||||
&, input, textarea {
|
||||
font-family: Arimo, sans-serif;
|
||||
|
@ -107,14 +115,6 @@ img {
|
|||
}
|
||||
}
|
||||
|
||||
.formspec_ast-image, .formspec_ast-image_button img,
|
||||
.formspec_ast-image_button_exit img {
|
||||
image-rendering: optimizeSpeed;
|
||||
image-rendering: -moz-crisp-edges;
|
||||
image-rendering: crisp-edges;
|
||||
image-rendering: pixelated;
|
||||
}
|
||||
|
||||
.formspec_ast-field, .formspec_ast-pwdfield, .formspec_ast-textarea {
|
||||
span {
|
||||
position: absolute;
|
||||
|
|
Loading…
Reference in New Issue