Math, Functions, and Expressions
Expressions allow you to dynamically generate text and numeric values through interactions in your prototypes. You can use expressions to do things like calculate the purchase total for a shopping cart, dynamically construct UI messages, and display the current date.
You can use an expression in any field that has an fx icon next to it. Type your expression directly into the field or click the icon to open the Edit Value dialog.
From there, you can click Insert Variable or Function to view the full list of variables and functions available for use in expressions. You can also create local variables to access specific widget properties in your expressions.
Writing Expressions
Axure RP treats any text wrapped in double square brackets as an expression, and the expression itself will be replaced by its own final output value in the web browser. Text outside the brackets is treated as static and will not be changed in the web browser.
For example, if you set the text on a widget to Your total is $[[ 5.50 + 2.99 ]]
, the widget's text will read Your total is $8.49
in the web browser.
Numbers and Math
Basic Operators
You can perform the following basic math operations in your expressions:
Addition: +
[[ 5 + 2 ]] -> 7
Subtraction: -
[[ 5 - 2 ]] -> 3
Multiplication: *
[[ 5 * 2 ]] -> 10
Division: /
[[ 5 / 2 ]] -> 2.5
Modulus/Remainder: %
[[ 5 % 2 ]] -> 1
Advanced Number and Math Functions
To perform more advanced mathematical operations, use the functions listed under Number and Math in the Insert Variable or Function menu.
You can use these functions with:
- numbers:
[[ 7.546.toFixed(2) ]]
- variables containing numeric values:
[[ TaxRateVar.toFixed(2) ]]
- numeric values returned by other operations and functions:
[[ (2.55*7.3).toFixed(2) ]]
x.toExponential(decimalPoints)
Returns a string representing x in exponential notation. You can specify the number of decimal places in the parentheses.
[[ 12345.toExponential() ]] -> 1.2345e+4
[[ 12345.toExponential(2) ]] -> 1.23e+4
x.toFixed(decimalPoints)
Rounds x to the number of decimal places specified in the parentheses.
[[ 12.345.toFixed(2) ]] -> 12.35
x.toPrecision(length)
Returns a string representing x with the specified number of significant digits. May return in exponential notation for large numbers.
[[ 12.34.toPrecision(3) ]] -> 12.3
[[ 12.34.toPrecision(5) ]] -> 12.340
[[ 1234.toPrecision(2) ]] -> 1.2e+3
Math.abs(x)
Returns the absolute value of x.
[[ Math.abs(1) ]] -> 1
[[ Math.abs(-1) ]] -> 1
Math.acos(x)
Returns the arccosine of x in radians.
[[ Math.acos(-1) ]] -> 3.141592653589793
[[ Math.acos(0) ]] -> 1.5707963267948966
[[ Math.acos(1) ]] -> 0
Math.asin(x)
Returns the arcsine of x in radians.
[[ Math.asin(-1) ]] -> -1.5707963267948966
[[ Math.asin(0) ]] -> 0
[[ Math.asin(1) ]] -> 1.5707963267948966
Math.atan(x)
Returns the arctangent of x in radians.
[[ Math.atan(1) ]] -> 0.7853981633974483
[[ Math.atan(0) ]] -> 0
[[ Math.atan(-0) ]] -> -0
Math.atan2(y, x)
Returns the angle in the plane (in radians) between the positive x-axis and the ray from (0,0) to the point (x,y).
[[ Math.atan2(90, 15) ]] -> 1.4056476493802699
[[ Math.atan2(15, 90) ]] -> 0.16514867741462683
Math.ceil(x)
Rounds x up to the nearest integer.
[[ Math.ceil(12.7) ]] -> 13
[[ Math.ceil(12.3) ]] -> 13
Math.cos(x)
Returns the cosine of x, which must be expressed in radians.
[[ Math.cos(0) ]] -> 1
[[ Math.cos(1) ]] -> 0.5403023058681398
Math.exp(x)
Returns e raised to the power of x, where e is Euler's number.
[[ Math.exp(0) ]] -> 1
[[ Math.exp(1) ]] -> 2.718281828459045
Math.floor(x)
Rounds x down to the nearest integer.
[[ Math.floor(12.7) ]] -> 12
[[ Math.floor(12.3) ]] -> 12
Math.log(x)
Returns the natural logarithm of x.
[[ Math.log(1) ]] -> 0
[[ Math.log(10) ]] -> 2.302585092994046
Math.max(x, y, ...)
Returns the largest of the numbers in the parentheses.
[[ Math.max(1, 2, 3) ]] -> 3
Math.min(x, y, ...)
Returns the smallest of the numbers in the parentheses.
[[ Math.min(1, 2, 3) ]] -> 1
Math.pow(x, y)
Returns x raised to the power of y.
[[ Math.pow(5, 2) ]] -> 25
Math.random()
Returns a random number between 0 (inclusive) and 1 (exclusive).
[[ Math.random() ]] -> 0.9255151869426522
[[ Math.random() ]] -> 0.313352887182183
Tip
Check out the Mozilla Developer Network reference on Math.random() to learn how to generate random numbers within your own specified range.
Math.sin(x)
Returns the sine of x, which must be expressed in radians.
[[ Math.sin(0) ]] -> 0
[[ Math.sin(1) ]] -> 0.8414709848078965
Math.sqrt(x)
Returns the square root of x.
[[ Math.sqrt(25) ]] -> 5
Math.tan(x)
Returns the tangent of x, which must be expressed in radians.
[[ Math.tan(0) ]] -> 0
[[ Math.tan(1) ]] -> 1.5574077246549023
String (Text)
To manipulate strings of text, use the functions listed under String in the Insert Variable or Function menu.
You can use these functions with:
- strings of text inside double or single quotation marks:
[[ "Hello, world!".toUpperCase() ]]
- variables containing string values:
[[ GreetingVar.toUpperCase() ]]
- string values returned by other operations and functions:
[[ "Hello, world!".substr(0,5).toUpperCase() ]]
string.length
Returns the character length of the string, including spaces.
[[ "Hello, world!".length ]] -> 13
string.charAt(index)
Returns the character at the specified index in the string.
[[ "Hello, world!".charAt(7) ]] -> w
string.charCodeAt(index)
Returns the UTF-16 code unit of the character at the specified index in the string.
[[ "Hello, world!".charCodeAt(7) ]] -> 119
string.concat("string", ...)
Adds (concatenates) the string(s) in the parentheses to the string the function is called on.
[[ "Hello".concat(", world!") ]] -> Hello, world!
Tip
You can also concatenate strings with the addition operator,
+
:
[[ "Hello" + ", world!" ]] -> Hello, world!
string.indexOf("searchValue")
Returns the starting index of the first instance of the search value within the string the function is called on. If the search value isn't found, returns -1.
[[ "Hello, world!".indexOf("o") ]] -> 4
[[ "Hello, world!".indexOf("Howdy") ]] -> -1
string.lastIndexOf("searchValue")
Returns the starting index of the last instance of the search value within the string the function is called on. If the search value isn't found, returns -1.
[[ "Hello, world!".lastIndexOf("o") ]] -> 8
[[ "Hello, world!".lastIndexOf("Howdy") ]] -> -1
string.replace("searchValue", "newValue")
Replaces all instances of the search value with the new value.
[[ "Hello, world!".replace("Hello", "Howdy") ]] -> Howdy, world!
string.slice(startIndex, endIndex)
Returns a snippet of the string, starting with the character at the first index and ending with the character just before the second index. You can optionally omit the second index to instead end at the end of the string.
You may provide negative indices to count backwards from the end of the string, as in the third example below.
[[ "Hello, world!".slice(3, 10) ]] -> lo, wor
[[ "Hello, world!".slice(3) ]] -> lo, world!
[[ "Hello, world!".slice(-6, 12) ]] -> world
string.substr(startIndex, length)
Returns a snippet of the string, starting with the character at the starting index and continuing until the specified length is reached. You can optionally omit the length to instead end at the end of the string.
You may provide negative indices to count backwards from the end of the string, as in the third example below.
[[ "Hello, world!".substr(3, 7) ]] -> lo, wor
[[ "Hello, world!".substr(3) ]] -> lo, world!
[[ "Hello, world!".substr(-6, 5) ]] -> world
string.substring(startIndex, endIndex)
Returns a snippet of the string, starting with the character at the first index and ending with the character just before the second index. You can optionally omit the second index to instead end at the end of the string.
[[ "Hello, world!".substring(3, 10) ]] -> lo, wor
[[ "Hello, world!".substring(3) ]] -> lo, world!
Note
The
substring()
method does not support negative indices.
string.toLowerCase()
Converts the string to all lowercase characters.
[[ "Hello, world!".toLowerCase() ]] -> hello, world!
string.toUpperCase()
Converts the string to all uppercase characters.
[[ "Hello, world!".toUpperCase() ]] -> HELLO, WORLD!
string.trim()
Removes all space characters from the beginning and end of the string.
[[ " Hello, world! ".trim() ]] -> Hello, world
Widget Properties
You can access the properties of widgets, like their location and dimensions, with the options listed under Widget in the Insert Variable or Function menu.
In order to use these options, you'll need to append them to a widget object with "dot notation": Object.property
. There are three widget objects you can use:
This refers to the widget whose event you're configuring the current action under, such as a button whose Click or Tap event you might be working with.
[[ This.width ]]
Target refers to the widget that is the target of the action you're currently configuring, such as the widget being hidden with a Show/Hide action.
[[ Target.width ]]
LVAR1 refers to a widget you've stored in a local variable. (Replace "LVAR1" with whatever name you've assigned your local variable.)
[[ LVAR1.width ]]
widget.x
Returns the x value of the widget's top-left corner.
[[ LVAR1.x ]] -> 100
widget.y
Returns the y value of the widget's top-left corner.
[[ LVAR1.y ]] -> 100
widget.width
Returns the widget's width in pixels.
[[ LVAR1.width ]] -> 300
widget.height
Returns the widget's height in pixels.
[[ LVAR1.height ]] -> 170
widget.scrollX
Returns the number of pixels that a scrollable dynamic panel has been scrolled horizontally.
[[ LVAR1.scrollX ]] -> 50
widget.scrollY
Returns the number of pixels that a scrollable dynamic panel has been scrolled vertically.
[[ LVAR1.scrollY ]] -> 50
widget.text
Returns the widget's text, if any.
[[ LVAR1.text ]] -> first.last@domain.com
widget.name
Returns the widget's name, if you've given it one.
[[ LVAR1.name ]] -> Email Field
widget.top
Returns the y value of the widget's top edge.
[[ LVAR1.top ]] -> 100
widget.left
Returns the x value of the widget's left edge.
[[ LVAR1.left ]] -> 100
widget.right
Returns the x value of the widget's right edge.
[[ LVAR1.right ]] -> 400
widget.bottom
Returns the y value of the widget's bottom edge.
[[ LVAR1.bottom ]] -> 270
widget.opacity
Returns the widget's opacity as a number between 0 and 100.
[[ LVAR1.opacity ]] -> 85
widget.rotation
Returns the widget's rotation as a number between 0 and 359.
[[ LVAR1.rotation ]] -> 90
Page, Window, and Cursor
PageName
Returns the name of the current page, as shown in the Pages pane.
[[ PageName ]] -> Login Page
Window.width
Returns the width of the browser window's viewport in pixels.
[[ Window.width ]] -> 1920
Window.height
Returns the height of the browser window's viewport in pixels.
[[ Window.height ]] -> 948
Window.scrollX
Returns the number of pixels that the browser window has been scrolled horizontally.
[[ Window.scrollX ]] -> 100
Window.scrollY
Returns the number of pixels that the browser window has been scrolled vertically.
[[ Window.scrollY ]] -> 100
Cursor.x
Returns the x value of the cursor's position on the page.
[[ Cursor.x ]] -> 100
Cursor.y
Returns the y value of the cursor's position on the page.
[[ Cursor.y ]] -> 100
DragX
Returns the pixel difference between the cursor's previous and current position along the X axis as you're dragging a dynamic panel widget. The value is positive when you're dragging to the right and negative when you're dragging to the left.
[[ DragX ]] -> 3
[[ DragX ]] -> -5
DragY
Returns the pixel difference between the cursor's previous and current position along the Y axis as you're dragging a dynamic panel widget. The value is positive when you're dragging down and negative when you're dragging up.
[[ DragY ]] -> 3
[[ DragY ]] -> -5
TotalDragX
Returns the pixel difference between the cursor's starting position and its current position along the X axis as you're dragging a dynamic panel widget. The value is positive when you're dragging to the right and negative when you're dragging to the left.
[[ TotalDragX ]] -> 30
[[ TotalDragX ]] -> -50
TotalDragY
Returns the pixel difference between the cursor's starting position and its current position along the Y axis as you're dragging a dynamic panel widget. The value is positive when you're dragging down and negative when you're dragging up.
[[ TotalDragY ]] -> 30
[[ TotalDragY ]] -> -50
DragTime
Returns the total time in milliseconds that a draggable dynamic panel has been dragged from drag start to drag drop.
[[ DragTime ]] -> 1525
Note
Though
DragTime
tracks the duration of the entire drag, the return value is only updated when the cursor moves during the drag.
Date and Time
Use the functions listed under Date in the Insert Variable or Function menu to produce and manipulate date and time information.
You can use these functions with the following date objects:
Now
A date object representing the current date and time. When used by itself, returns the current date and time, fully articulated and with the web browser's time zone.
[[ Now ]] -> Wed Nov 14 2018 16:20:24 GMT-0800 (Pacific Standard Time)
GenDate
A date object representing the date and time that the prototype's HTML was last generated. When used by itself, returns the generation date and time, fully articulated and with the web browser's time zone.
[[ GenDate ]] -> Wed Nov 14 2018 16:20:24 GMT-0800 (Pacific Standard Time)
Now.getDate() and Now.getUTCDate()
Returns a number representing the given date object's day of the month, either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getDate() ]] -> 14
[[ Now.getUTCDate() ]] -> 15
Now.getDay() and Now.getUTCDay()
Returns a number representing the given date object's day of the week, either in the web browser's time zone or Coordinated Universal Time (UTC). Sunday is 0, and Saturday is 6.
[[ Now.getDay() ]] -> 3
[[ Now.getUTCDay() ]] -> 4
Now.getDayOfWeek()
Returns the name of the given date object's day of the week.
[[ Now.getDayOfWeek() ]] -> Wednesday
Now.getFullYear() and Now.getUTCFullYear()
Returns the given date object's year in four-digit format, either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getFullYear() ]] -> 2018
[[ Now.getUTCFullYear() ]] -> 2018
Now.getHours() and Now.getUTCHours()
Returns the hours portion of the given date object's time as a number between 0 and 23 (24 hour/military format), either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getHours() ]] -> 16
[[ Now.getUTCHours() ]] -> 0
Now.getMilliseconds() and Now.getUTCMilliseconds()
Returns the milliseconds portion of the given date object's time, either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getMilliseconds() ]] -> 838
[[ Now.getUTCMilliseconds() ]] -> 838
Now.getMinutes() and Now.getUTCMinutes()
Returns the minutes portion of the given date object's time, either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getMinutes() ]] -> 20
[[ Now.getUTCMinutes() ]] -> 20
Now.getMonth() and Now.getUTCMonth()
Now.getMonth()
returns the given date object's month as a number between 1 and 12 in the web browser's time zone.
Now.getUTCMonth()
returns the given date object's month as a number between 0 and 11 in Coordinated Universal Time (UTC).
[[ Now.getMonth() ]] -> 11
[[ Now.getUTCMonth() ]] -> 10
Now.getMonthName()
Returns the name of the given date object's month.
[[ Now.getMonthName() ]] -> November
Now.getSeconds() and Now.getUTCSeconds()
Returns the seconds portion of the given date object's time, either in the web browser's time zone or Coordinated Universal Time (UTC).
[[ Now.getSeconds() ]] -> 24
[[ Now.getUTCSeconds() ]] -> 24
Now.getTime()
Returns the milliseconds elapsed between 1 January 1970 00:00:00 UTC and the given date object.
[[ Now.getTime() ]] -> 1542235968871
Now.getTimezoneOffset()
Returns the time zone difference, in minutes, from the web browser's locale to Coordinated Universal Time (UTC).
[[ Now.getTimezoneOffset() ]] -> 480
Date.parse(dateString)
Parses a given string representation of a date and creates a new date object. Returns the milliseconds elapsed between 1 January 1970 00:00:00 UTC and the given date.
The date string may be in a number of formats, including those returned by Now and GenDate.
[[ Date.parse(Now) ]] -> 1542236704000
[[ Date.parse("2018-11-14") ]] -> 1542153600000
[[ Date.parse("Jun 28, 1969") ]] -> -16131600000
Now.toDateString()
Returns a simplified version of the date object, including only the day of the week, the month, the date, and the year.
[[ Now.toDateString() ]] -> Wed Nov 14 2018
Now.toISOString()
Returns the date object in simplified extended ISO format in Coordinated Universal Time (UTC).
[[ Now.toISOString() ]] -> 2018-11-15T00:31:33.666Z
Now.toLocaleDateString()
Returns a language- and region-sensitive version of the date portion of a date object, based on the web browser's settings. You can manually set the locale by including a BCP 47 language tag string in the parentheses.
[[ Now.toLocaleDateString() ]] -> 11/15/2018
[[ Now.toLocaleDateString("en-GB") ]] -> 15/11/2018
[[ Now.toLocaleDateString("ar-EG") ]] -> ١٥/١١/٢٠١٨
Now.toLocaleTimeString()
Returns a language- and region-sensitive version of the time portion of a date object, based on the web browser's settings. You can manually set the locale by including a BCP 47 language tag string in the parentheses.
[[ Now.toLocaleTimeString() ]] -> 5:00:06 PM
[[ Now.toLocaleTimeString("en-GB") ]] -> 17:00:06
[[ Now.toLocaleTimeString("ar-EG") ]] -> ١٢:٢٩:٠٢ م
Now.toLocaleString()
Returns a language- and region-sensitive version of the date object, based on the web browser's settings. You can manually set the locale by including a BCP 47 language tag string in the parentheses.
[[ Now.toLocaleString() ]] -> 11/15/2018, 5:00:06 PM
[[ Now.toLocaleString("en-GB") ]] -> 15/11/2018, 17:00:06
[[ Now.toLocaleString("ar-EG") ]] -> ١٥/١١/٢٠١٨ ١٢:٣٥:٠٧ م
Now.toTimeString()
Returns the time portion of the date object, fully articulated and with the web browser's time zone.
[[ Now.toTimeString() ]] -> 17:00:06 GMT-0800 (Pacific Standard Time)
Now.toUTCString()
Returns a shortened version of the date object in Coordinated Universal Time (UTC).
[[ Now.toUTCString() ]] -> Thu, 15 Nov 2018 01:00:06 GMT
Date.UTC(year,month,day,hour,min,sec,millisec)
Constructs a new date object in Coordinated Universal Time (UTC) and returns the milliseconds elapsed between the date and 1 January 1970 00:00:00 UTC. The parameters must be in the following formats:
- year (required): Four digits
- month (required): An integer between 0 (January) and 11 (December)
- day: An integer between 1 and 31. If omitted, defaults to 1
- hour: An integer between 0 and 23. If omitted, defaults to 0
- minute: An integer between 0 and 59. If omitted, defaults to 0
- second: An integer between 0 and 59. If omitted, defaults to 0
- millisecond: An integer between 0 and 999. If omitted, defaults to 0
[[ Date.UTC(1969, 5, 28, 1, 20) ]] -> -16152000000
Now.addYears(years)
Adds the specified number of years to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addYears(3) ]] -> Mon Nov 15 2021 13:00:34 GMT-0800 (Pacific Standard Time)
Now.addMonths(months)
Adds the specified number of months to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addMonths(3) ]] -> Fri Feb 15 2019 13:00:34 GMT-0800 (Pacific Standard Time)
Now.addDays(days)
Adds the specified number of days to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addDays(3) ]] -> Sun Nov 18 2018 13:00:34 GMT-0800 (Pacific Standard Time)
Now.addHours(hours)
Adds the specified number of hours to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addHours(3) ]] -> Thu Nov 15 2018 16:00:34 GMT-0800 (Pacific Standard Time)
Now.addMinutes(minutes)
Adds the specified number of minutes to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addMinutes(3) ]] -> Thu Nov 15 2018 13:03:34 GMT-0800 (Pacific Standard Time)
Now.addSeconds(seconds)
Adds the specified number of seconds to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addSeconds(3) ]] -> Thu Nov 15 2018 13:00:37 GMT-0800 (Pacific Standard Time)
Now.addMilliseconds(milliseconds)
Adds the specified number of milliseconds to the date object and returns the new date and time, fully articulated and with the web browser's time zone.
[[ Now.addMilliseconds(3) ]] -> Thu Nov 15 2018 13:00:37 GMT-0800 (Pacific Standard Time)
Boolean
The boolean operators are used to write comparison expressions that evaluate to either true or false. Comparison expressions are used for things like repeater filtering, updating and marking repeater rows, and writing complex conditional logic.
Equals: ==
[[ 5 + 2 == 7 ]] -> true
Does not equal: !=
[[ 5 + 2 != 8 ]] -> true
Less than: <
[[ 5 + 2 < 4 + 3 ]] -> false
Less than or equals: <=
[[ 5 + 2 <= 4 + 3 ]] -> true
Greater than: >
[[ 5 + 2 > 4 + 3 ]] -> false
Greater than or equals: >=
[[ 5 + 2 >= 4 + 2 ]] -> true
The next operators, the and and or operators, are used to combine two or more comparison expressions. Expressions using and will evaluate to true when all combined comparisons evaluate to true, and expressions using or will evaluate to true when any one comparison evaluates to true.
And: &&
[[ 5 + 2 == 7 && 4 + 3 == 7 ]] -> true
[[ 5 + 2 == 7 && 4 + 3 == 8 ]] -> false
Or: ||
[[ 5 + 2 == 7 || 4 + 3 == 8 ]] -> true
[[ 5 + 2 == 8 || 4 + 3 == 8 ]] -> false