Difference between revisions of "Scripting"

From GeoGebra Manual
Jump to: navigation, search
m (restated the beginning)
(add "api" argument)
(12 intermediate revisions by 5 users not shown)
Line 1: Line 1:
<noinclude>{{Manual Page|version=4.0}}[[Category:Manual (official)|{{PAGENAME}}]]</noinclude>
+
<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. The execution can be triggered by :
 
Script is a sequence of commands, that are executed one after each other. GeoGebra supports two scripting languages - GGBScript and Javascript. The execution can be triggered by :
 
* clicking a particular object
 
* clicking a particular object
Line 8: Line 6:
 
* Javascript listeners (see [[Reference:JavaScript]])
 
* Javascript listeners (see [[Reference:JavaScript]])
  
You can set this script via Scripting panel of [[Properties Dialog]].
+
You can set this script via the Tab ''Scripting'' in the [[File:Menu-options.svg|link=|16px]] [[Properties Dialog]].  
 +
{{Note|The ''Properties'' panel needs to be closed for scripts to work.}}
  
 
==GGBScript==
 
==GGBScript==
Line 14: Line 13:
 
   
 
   
 
{{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[a, Element[list1, a]]</code>
+
* 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 ist moved, there is happening an update. 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".
+
'''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''.
  
 +
{{Note|You can use <code>#</code> to start a comment}}
 
{{Hint|There are commands that can be only used for scripting. You can find them in the page [[Scripting_Commands]].}}
 
{{Hint|There are commands that can be only used for scripting. You can find them in the page [[Scripting_Commands]].}}
  
 
==JavaScript==
 
==JavaScript==
JavaScript is a programming language used by many Internet  technologies. Unlike GeoGebra Script, in Javascript the 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]].
+
JavaScript is a programming language used by many Internet  technologies. Unlike GeoGebra Script, in Javascript the 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 34: Line 35:
 
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.}}
  
GeoGebra contains its own JavaScript engine. When exported as [[Dynamic Worksheet]] one can choose whether to use this engine or the one contained in browser applets. If you edit JavaScript in a HTML page, the ggbApplet variable will not be initialized, you have to initialize it e.g. using <code>ggbApplet=document.applets[0];</code> first.
 
 
===Global JavaScript===
 
===Global JavaScript===
In the Global JavaScript part of Scripting tab in [[Properties Dialog]] you may define some functions or do some assignments that will be done before the construction is loaded. You can also define function ''ggbOnInit()'', which is called automatically once the construction is loaded. The ggbOnInit function can be used for registering some listeners, as shown below.{{example|1=
+
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 43: Line 44:
 
}
 
}
  
function ggbOnInit(){
+
function ggbOnInit(name, api){
     ggbApplet.registerAddListener("onAdd");
+
     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. Complete list is available in [[Reference:JavaScript]].
+
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.}}
===USB Data Logging (From GeoGebra 4.2)===
 
For logging data from some Vernier USB Data Loggers, eg ''Go!Motion'' and ''Go!Temp'' one can define a logger listener using the registerLoggerListener method. Such listener can look like this:
 
<pre>
 
function logger(value) {
 
  var d = value * 1;
 
  ggbApplet.evalCommand("(CopyFreeObject[a],"+d+")");
 
  ggbApplet.evalCommand("SetValue[a,a+1]");
 
}
 
</pre>
 
This script assumes that there is a free number ''a'' in the construction. Each time number ''d'' is logged, point ''(a,d)'' is constructed and ''a'' is increased.
 

Revision as of 13:01, 21 April 2021


Script is a sequence of commands, that are executed one after each other. GeoGebra supports two scripting languages - GGBScript and Javascript. The execution can be triggered by :

  • clicking a particular object
  • updating a particular object (when value or properties of the object are changed)
  • loading the file (in case of JavaScript)
  • Javascript listeners (see Reference:JavaScript)

You can set this script via the Tab Scripting in the Menu-options.svg Properties Dialog.

Note: The Properties panel needs to be closed for scripts to work.

GGBScript

You can create scripts consisting of GeoGebra commands, like you can use them in the Input Bar. After triggering the script, every command is executed one after each other.

Example:
  • 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.

Note: You can use # to start a comment
Note Hint: There are commands that can be only used for scripting. You can find them in the page Scripting_Commands.


JavaScript

JavaScript is a programming language used by many Internet technologies. Unlike GeoGebra Script, in Javascript the 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.

Example:
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.
Note: Scripting with JavaScript is very versatile, but many tasks can also be achieved using the simpler GeoGebraScript.

Global JavaScript

In the Global JavaScript part of the Scripting tab in the Menu-options.svg 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:
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.

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.

Comments

© 2024 International GeoGebra Institute