Difference between revisions of "Scripting"
(14 intermediate revisions by 5 users not shown) | |||
Line 1: | Line 1: | ||
− | <noinclude>{{Manual Page|version= | + | <noinclude>{{Manual Page|version=5.0}}</noinclude>{{objects|property}} |
− | {{objects|property}} | + | Script is a sequence of commands, that are executed one after each other. |
− | + | GeoGebra supports two scripting languages - GGBScript and Javascript. | |
− | * clicking | + | You can enter scripts in the ''Scripting'' tab of the [[File:Menu-options.svg|link=|16px]] [[Properties Dialog]] of the object you want to assign a script to. |
− | * loading the file ( | + | {{Note|The ''Properties'' panel needs to be closed for scripts to work.}} |
+ | |||
+ | |||
+ | Different objects support different types of scripting; the execution of scripts can be triggered by : | ||
+ | * clicking a particular object (''OnClick'' tab) | ||
+ | * updating a particular object (when value or properties of the object are changed) (''OnUpdate'' tab) | ||
+ | * changing the content of an input box (''OnChange'' tab) | ||
+ | * when the mouse button is released (or finger is removed from the screen for touch devices) after dragging an object (''On Drag-end'' tab) | ||
+ | * loading the file (for JavaScript - ''Global Javascript'' tab) | ||
* Javascript listeners (see [[Reference:JavaScript]]) | * Javascript listeners (see [[Reference:JavaScript]]) | ||
− | + | The difference between ''OnUpdate'' and ''OnChange'' scripting for an input box is that in case the script is entered in the ''OnUpdate'' tab, it is executed only when the focus is removed from the input box (by e.g. clicking on a button, clicking in the ''Graphics View'', etc...), whereas scripting entered in the ''OnChange tab'' will be executed as soon as the content of the input box changes, and the focus is still on the input box itself. | |
+ | |||
+ | {{Notes|1=<div> | ||
+ | * Check this https://www.geogebra.org/m/bek5uqah demo of ''OnChange'' and ''OnUpdate'' scripts for an input box. | ||
+ | * Check this https://www.geogebra.org/m/kxgvyqvj demo of ''OnDrag-end'' scripting for a draggable point.</div>}} | ||
==GGBScript== | ==GGBScript== | ||
− | You can create scripts consisting of GeoGebra commands, | + | You can create scripts consisting of GeoGebra commands, as you would use them in the [[Input Bar]]. After triggering the script, every command is executed, in the same order they are written, sequentially. |
{{Example|1=<div> | {{Example|1=<div> | ||
− | * ''a'' is an integer-valued [[Slider Tool|slider]] ranging from 1 to 3 | + | * ''a'' is an integer-valued [[Slider Tool|slider]] ranging from 1 to 3 (therefore Increment equals 1) |
− | * <code><nowiki>list1 = {"red", "green", "blue"}</nowiki></code> | + | * type in: <code><nowiki>list1 = {"red", "green", "blue"}</nowiki></code> |
− | * in properties of ''a'', set "On Update" script to <code>SetColor | + | * in properties of ''a'', set "On Update" script to <code>SetColor(a, Element(list1, a))</code> |
* by moving the slider you change its color</div>}} | * by moving the slider you change its color</div>}} | ||
− | '''Explanation:''' Every time the slider | + | '''Explanation:''' Every time the slider is moved, there an update occurs. So, for every move the script is called and the value of ''a'' is used to get one color from the list and change the color of the slider ''a''. |
− | {{Hint| | + | {{Note|You can use <code>#</code> to start a comment}} |
+ | {{Hint|Some commands can only be used for scripting. The list of these command is available in the [[Scripting_Commands]] page.}} | ||
==JavaScript== | ==JavaScript== | ||
− | JavaScript is a programming language used by many Internet | + | JavaScript is a programming language used by many Internet technologies. Unlike GeoGebra Script, in Javascript commands don't have to be executed as a simple sequence, but a control flow (<code>if</code>, <code>while</code>, <code>for</code>) can be used. For generic JavaScript you can find a nice tutorial on [https://developer.mozilla.org/en/JavaScript/Guide developer.mozilla.org]. |
+ | In GeoGebra, you can use special JavaScript methods which allow you to change the construction. These methods belong to ggbApplet object, which means that you call them as <code>ggbApplet.method_name(parameter,..,parameter)</code>. For complete list of these methods see [[Reference:JavaScript]]. | ||
{{Example|1= | {{Example|1= | ||
Line 33: | Line 47: | ||
This script creates 10 points ''A<sub>0</sub>'' to ''A<sub>9</sub>'' at random coordinates. | This script creates 10 points ''A<sub>0</sub>'' to ''A<sub>9</sub>'' at random coordinates. | ||
}} | }} | ||
+ | {{note|Scripting with JavaScript is very versatile, but many tasks can also be achieved using the simpler GeoGebraScript.}} | ||
− | |||
===Global JavaScript=== | ===Global JavaScript=== | ||
− | In the Global JavaScript part of Scripting tab in [[Properties Dialog | + | In the ''Global JavaScript'' part of the ''Scripting'' tab in the [[File:Menu-options.svg|link=|16px]] ''Properties Dialog'' you may define '''functions''' (not variables) which will be available from the other scripts. You can also define function ''ggbOnInit(name, api)'', which is called automatically once the construction is loaded. The ''ggbOnInit'' function can be used for registering some ''listeners'', as shown below.{{example|1= |
<pre> | <pre> | ||
function onAdd(name){ | function onAdd(name){ | ||
Line 42: | Line 56: | ||
} | } | ||
− | function ggbOnInit(){ | + | function ggbOnInit(name, api){ |
− | + | api.registerAddListener("onAdd"); | |
} | } | ||
</pre> | </pre> | ||
− | First we defined function ''onAdd'' that given a string shows a message depending on that string. After that, using the ''ggbOnInit'' function, we told GeoGebra to call this function whenever a new object is added. Once we reload our construction, function ggbOnInit will be called and since then, when user adds a point named e.g. ''A'', message "Object A was added" will appear. }} | + | First we defined function ''onAdd'' that given a string shows a message depending on that string. After that, using the ''ggbOnInit'' function, we told GeoGebra to call this function whenever a new object is added. Once we reload our construction, function ''ggbOnInit'' will be called and since then, when user adds a point named e.g. ''A'', message "Object A was added" will appear. }} |
− | You can also use listeners for actions like rename, delete and clear construction. | + | You can also use ''listeners'' for actions like rename, delete and clear construction. A complete list is available in [[Reference:JavaScript]]. |
− | {{Note|Using any ggbApplet methods in Global JavaScript outside of ggbOnInit will not work as intended since they will be called before the construction is loaded.}} | + | {{Note|Using any ggbApplet methods in ''Global JavaScript'' outside of ggbOnInit will not work as intended since they will be called before the construction is loaded.}} |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− |
Latest revision as of 11:18, 3 May 2023
Script is a sequence of commands, that are executed one after each other.
GeoGebra supports two scripting languages - GGBScript and Javascript. You can enter scripts in the Scripting tab of the Properties Dialog of the object you want to assign a script to.
Different objects support different types of scripting; the execution of scripts can be triggered by :
- clicking a particular object (OnClick tab)
- updating a particular object (when value or properties of the object are changed) (OnUpdate tab)
- changing the content of an input box (OnChange tab)
- when the mouse button is released (or finger is removed from the screen for touch devices) after dragging an object (On Drag-end tab)
- loading the file (for JavaScript - Global Javascript tab)
- Javascript listeners (see Reference:JavaScript)
The difference between OnUpdate and OnChange scripting for an input box is that in case the script is entered in the OnUpdate tab, it is executed only when the focus is removed from the input box (by e.g. clicking on a button, clicking in the Graphics View, etc...), whereas scripting entered in the OnChange tab will be executed as soon as the content of the input box changes, and the focus is still on the input box itself.
- Check this https://www.geogebra.org/m/bek5uqah demo of OnChange and OnUpdate scripts for an input box.
- Check this https://www.geogebra.org/m/kxgvyqvj demo of OnDrag-end scripting for a draggable point.
GGBScript
You can create scripts consisting of GeoGebra commands, as you would use them in the Input Bar. After triggering the script, every command is executed, in the same order they are written, sequentially.
- a is an integer-valued slider ranging from 1 to 3 (therefore Increment equals 1)
- type in:
list1 = {"red", "green", "blue"}
- in properties of a, set "On Update" script to
SetColor(a, Element(list1, a))
- by moving the slider you change its color
Explanation: Every time the slider is moved, there an update occurs. So, for every move the script is called and the value of a is used to get one color from the list and change the color of the slider a.
#
to start a comment
JavaScript
JavaScript is a programming language used by many Internet technologies. Unlike GeoGebra Script, in Javascript commands don't have to be executed as a simple sequence, but a control flow (if
, while
, for
) can be used. For generic JavaScript you can find a nice tutorial on developer.mozilla.org.
In GeoGebra, you can use special JavaScript methods which allow you to change the construction. These methods belong to ggbApplet object, which means that you call them as ggbApplet.method_name(parameter,..,parameter)
. For complete list of these methods see Reference:JavaScript.
for(var i =0;i<10;i++) ggbApplet.evalCommand("A_"+i+"=(random()*10,random()*10)");This script creates 10 points A0 to A9 at random coordinates.
Global JavaScript
In the Global JavaScript part of the Scripting tab in the Properties Dialog you may define functions (not variables) which will be available from the other scripts. You can also define function ggbOnInit(name, api), which is called automatically once the construction is loaded. The ggbOnInit function can be used for registering some listeners, as shown below.
function onAdd(name){ alert("Object "+name+" was added."); } function ggbOnInit(name, api){ api.registerAddListener("onAdd"); }First we defined function onAdd that given a string shows a message depending on that string. After that, using the ggbOnInit function, we told GeoGebra to call this function whenever a new object is added. Once we reload our construction, function ggbOnInit will be called and since then, when user adds a point named e.g. A, message "Object A was added" will appear.
You can also use listeners for actions like rename, delete and clear construction. A complete list is available in Reference:JavaScript.