Formspecs: examples, clarification and images
This commit is contained in:
parent
2663c01b19
commit
d86db04eb1
@ -7,6 +7,13 @@ root: ../
|
|||||||
Introduction
|
Introduction
|
||||||
------------
|
------------
|
||||||
|
|
||||||
|
<figure class="right_image">
|
||||||
|
<img src="{{ page.root }}/static/formspec_example.png" alt="Furnace Inventory">
|
||||||
|
<figcaption>
|
||||||
|
Screenshot of furnace formspec, labelled.
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
In this chapter we will learn how to create a formspec and display it to the user.
|
In this chapter we will learn how to create a formspec and display it to the user.
|
||||||
A formspec is the specification code for a form.
|
A formspec is the specification code for a form.
|
||||||
In Minetest, forms are windows like the Inventory which allow you to move your mouse
|
In Minetest, forms are windows like the Inventory which allow you to move your mouse
|
||||||
@ -27,7 +34,7 @@ Formspec Syntax
|
|||||||
Formspecs have a rather weird syntax.
|
Formspecs have a rather weird syntax.
|
||||||
They consist of a series of tags which are in the following form:
|
They consist of a series of tags which are in the following form:
|
||||||
|
|
||||||
element[param1;param2;...]
|
element_type[param1;param2;...]
|
||||||
|
|
||||||
Firstly the element type is declared, and then the attributes are given in square brackets.
|
Firstly the element type is declared, and then the attributes are given in square brackets.
|
||||||
|
|
||||||
@ -47,8 +54,9 @@ The x and y values are separated by a comma, as you can see above.
|
|||||||
|
|
||||||
### Field[x, y; w, h; name; label; default]
|
### Field[x, y; w, h; name; label; default]
|
||||||
|
|
||||||
Most elements follow a similar form to this. The name attribute is used in callbacks
|
This is a textbox element. Most other elements have a similar style of attributes.
|
||||||
to get the submitted information. The others are pretty self-explaintary.
|
The "name" attribute is used in callbacks to get the submitted information.
|
||||||
|
The others are pretty self-explaintary.
|
||||||
|
|
||||||
field[1,1;3,1;firstname;Firstname;]
|
field[1,1;3,1;firstname;Firstname;]
|
||||||
|
|
||||||
@ -74,9 +82,43 @@ to see, along with the formname.
|
|||||||
Formnames are used in callbacks to identify which form has been submitted,
|
Formnames are used in callbacks to identify which form has been submitted,
|
||||||
and see if the callback is relevant.
|
and see if the callback is relevant.
|
||||||
|
|
||||||
|
### Example
|
||||||
|
|
||||||
|
<figure class="right_image">
|
||||||
|
<img src="{{ page.root }}/static/formspec_name.png" alt="Name Formspec">
|
||||||
|
<figcaption>
|
||||||
|
The formspec generated by<br />
|
||||||
|
the example's code
|
||||||
|
</figcaption>
|
||||||
|
</figure>
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
-- Show form when the /formspec command is used.
|
||||||
|
minetest.register_chatcommand("formspec", {
|
||||||
|
func = function(name, param)
|
||||||
|
minetest.show_formspec(name, "mymod:form",
|
||||||
|
"size[4,3]" ..
|
||||||
|
"label[0,0;Hello, " .. name .. "]" ..
|
||||||
|
"field[1,1.5;3,1;name;Name;]" ..
|
||||||
|
"button_exit[1,2;2,1;exit;Save]")
|
||||||
|
end
|
||||||
|
})
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
|
The above example shows a formspec to a player when they use the /formspec command.
|
||||||
|
|
||||||
|
Note: the .. is used to join two strings together. The following two lines are equivalent:
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
"foobar"
|
||||||
|
"foo" .. "bar"
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
Callbacks
|
Callbacks
|
||||||
---------
|
---------
|
||||||
|
|
||||||
|
Let's expand on the above example.
|
||||||
|
|
||||||
{% highlight lua %}
|
{% highlight lua %}
|
||||||
-- Show form when the /formspec command is used.
|
-- Show form when the /formspec command is used.
|
||||||
minetest.register_chatcommand("formspec", {
|
minetest.register_chatcommand("formspec", {
|
||||||
@ -126,6 +168,15 @@ Some elements can submit the form without the user having to click a button,
|
|||||||
such as a check box. You can detect for these cases by looking
|
such as a check box. You can detect for these cases by looking
|
||||||
for a clicked button.
|
for a clicked button.
|
||||||
|
|
||||||
|
{% highlight lua %}
|
||||||
|
-- An example of what fields could contain,
|
||||||
|
-- using the above code
|
||||||
|
{
|
||||||
|
name = "Foo Bar",
|
||||||
|
exit = true
|
||||||
|
}
|
||||||
|
{% endhighlight %}
|
||||||
|
|
||||||
Contexts
|
Contexts
|
||||||
--------
|
--------
|
||||||
|
|
||||||
@ -133,10 +184,14 @@ In quite a lot of cases you want your minetest.show_formspec to give information
|
|||||||
to the callback which you don't want to have to send to the client. Information
|
to the callback which you don't want to have to send to the client. Information
|
||||||
such as what a chat command was called with, or what the dialog is about.
|
such as what a chat command was called with, or what the dialog is about.
|
||||||
|
|
||||||
Let's say you are making a form to handle land protection information. Here is
|
Let's say you are making a form to handle land protection information.
|
||||||
how you would do it:
|
|
||||||
|
|
||||||
{% highlight lua %}
|
{% highlight lua %}
|
||||||
|
--
|
||||||
|
-- Step 1) set context when player requests the formspec
|
||||||
|
--
|
||||||
|
|
||||||
|
-- land_formspec_context[playername] gives the player's context.
|
||||||
local land_formspec_context = {}
|
local land_formspec_context = {}
|
||||||
|
|
||||||
minetest.register_chatcommand("land", {
|
minetest.register_chatcommand("land", {
|
||||||
@ -157,6 +212,11 @@ minetest.register_chatcommand("land", {
|
|||||||
end
|
end
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
--
|
||||||
|
-- Step 2) retrieve context when player submits the form
|
||||||
|
--
|
||||||
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
minetest.register_on_player_receive_fields(function(player, formname, fields)
|
||||||
if formname ~= "mylandowner:edit" then
|
if formname ~= "mylandowner:edit" then
|
||||||
return false
|
return false
|
||||||
|
BIN
static/formspec_example.png
Normal file
BIN
static/formspec_example.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 21 KiB |
BIN
static/formspec_name.png
Normal file
BIN
static/formspec_name.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 35 KiB |
@ -10,6 +10,21 @@ a {
|
|||||||
text-decoration: underline;
|
text-decoration: underline;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.right_image {
|
||||||
|
float: right;
|
||||||
|
margin: 0 0 0 10px;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right_image img {
|
||||||
|
margin: 0;
|
||||||
|
padding: 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
.right_image figcaption {
|
||||||
|
padding: 0 0 0 6px;
|
||||||
|
}
|
||||||
|
|
||||||
#page {
|
#page {
|
||||||
background: white;
|
background: white;
|
||||||
margin: 0;
|
margin: 0;
|
||||||
@ -91,6 +106,7 @@ h2 {
|
|||||||
margin: 30px 0 10px 0;
|
margin: 30px 0 10px 0;
|
||||||
display: block;
|
display: block;
|
||||||
padding: 0 0 5px 0;
|
padding: 0 0 5px 0;
|
||||||
|
clear: both;
|
||||||
}
|
}
|
||||||
|
|
||||||
h3 {
|
h3 {
|
||||||
|
Loading…
Reference in New Issue
Block a user