JavaScript field: Difference between revisions
mNo edit summary |
mNo edit summary |
||
Line 1: | Line 1: | ||
{{Stamp|2016- | {{Stamp|2016-12-03|4.1.0|1.0.7}} | ||
The value of the field will be the result of execution of the script defined in the field and executed in the entry context. | The value of the field will be the result of execution of the script defined in the field and executed in the entry context. | ||
Line 7: | Line 7: | ||
A script may consist of multiple operations, but only the result of the last operation will be entered into the field. For example: | A script may consist of multiple operations, but only the result of the last operation will be entered into the field. For example: | ||
<source lang="javascript"> | <source lang="javascript"> | ||
var i = 1 + 1 | var i = 1 + 1 // Result would be 2, if this were the final statement, | ||
i + 1 | i + 1 // but instead, this is the final statement, so the result will be 3 | ||
</source> | </source> | ||
== Fields of an entry == | == Fields of an entry == | ||
Line 44: | Line 43: | ||
You can enable the integrated library [http://momentjs.com/ '''moment.js'''] to work with the date and time. Click '''''JavaScript Libraries''''' and choose '''''moment.min.js'''''. | You can enable the integrated library [http://momentjs.com/ '''moment.js'''] to work with the date and time. Click '''''JavaScript Libraries''''' and choose '''''moment.min.js'''''. | ||
Some examples. If | Some examples. If an entry contains the field Date whose value is 18 March 2016 14:55 | ||
Example of | '''Example of date formats''' | ||
<source lang="javascript"> | <source lang="javascript"> | ||
moment(field('Date')).format('MMMMM Do YYYYY') // March 18th 2016 | moment(field('Date')).format('MMMMM Do YYYYY') // March 18th 2016 | ||
Line 54: | Line 53: | ||
</source> | </source> | ||
Example of | '''Example of relative time''' | ||
<source lang="javascript"> | <source lang="javascript"> | ||
moment(field('Date')).fromNow() // 11 minutes ago | moment(field('Date')).fromNow() // 11 minutes ago | ||
Line 60: | Line 59: | ||
</source> | </source> | ||
Example of | '''Example of calendar time''' | ||
<source lang="javascript"> | <source lang="javascript"> | ||
moment(field('Date')).calendar() // Today at 2:55 PM | moment(field('Date')).calendar() // Today at 2:55 PM | ||
Line 66: | Line 65: | ||
</source> | </source> | ||
More information about library features on '''http://momentjs.com''' | More information about library features on '''[http://momentjs.com]''' | ||
== Examples == | == Examples == | ||
Line 116: | Line 115: | ||
== References == | == References == | ||
You can find a full description of the language [https://developer.mozilla.org/docs/Web/JavaScript here]. | You can find a full description of the language [https://developer.mozilla.org/docs/Web/JavaScript '''here''']. | ||
The implementation is based on [https://www.mozilla.org/rhino/ Rhino library]. | The implementation is based on the [https://www.mozilla.org/rhino/ '''Rhino library''']. | ||
{{FieldNameHint}} | {{FieldNameHint}} | ||
Line 124: | Line 123: | ||
; Script itself | ; Script itself | ||
: JavaScript script. | : JavaScript script. The context of the script is the [[Triggers#Object Entry|'''Entry object''']]. The value returned is the last value assigned or expressed. | ||
; JavaScript Libraries | ; JavaScript Libraries |
Revision as of 05:35, 3 December 2016
The value of the field will be the result of execution of the script defined in the field and executed in the entry context.
JavaScript 1.7 is used for scripts. The current version supports only core methods of the language.
A script may consist of multiple operations, but only the result of the last operation will be entered into the field. For example:
var i = 1 + 1 // Result would be 2, if this were the final statement,
i + 1 // but instead, this is the final statement, so the result will be 3
Fields of an entry
Function field("fieldName") is used to get access to the values of entry fields. The type of the JavaScript object returned by the function depends on the field type.
Compatibility of Memento field types and JavaScript objects is shown in the table:
Field type | JavaScript object |
---|---|
Text , Hyperlink, Password, Phone, Email, Calculation (string result) , Single-choice list , Radio buttons | String |
Integer, Real number, Rating, Currency, Calculation (number result) | Number |
Date , Date/Time, Time | Date |
Checkbox (Boolean) | Boolean |
Multiple-choice list, Checkboxes | Array of String |
Link to entry | Array of Entry Each array element has a method field() for access to values of fields of entries of the linked library. Example: field("linkField")[i].field("remoteField") |
Time of script execution
A script can be executed both when an entry is created or changed and when it is displayed.
The time of script execution is set by the toggle button Execute script real time on the field edit screen. It is reasonable to enable this option if your script contains functions that depend on the current time. Online execution in case of a large number of entries can significantly increase the time required to open the library.
Functions to work with the date
You can enable the integrated library moment.js to work with the date and time. Click JavaScript Libraries and choose moment.min.js.
Some examples. If an entry contains the field Date whose value is 18 March 2016 14:55
Example of date formats
moment(field('Date')).format('MMMMM Do YYYYY') // March 18th 2016
moment(field('Date')).format('dddd') // Friday
moment(field('Date')).format('dddd [Escaped] YYYY') // Friday Escaped 2016
moment(field('Date')).format('HH:mm') // 14:55
Example of relative time
moment(field('Date')).fromNow() // 11 minutes ago
moment(field('Date')).startOf('day').fromNow() // 15 hours ago
Example of calendar time
moment(field('Date')).calendar() // Today at 2:55 PM
moment(field('Date')).add(1 , 'days').calendar() // Tomorrow at 2:55 PM
More information about library features on [1]
Examples
Example: Sum
Entries contain fields: Price, Count. We add a JavaScript field "Sum" by using the following script:
field('Price')*field('Count')
Example: Percentage
Entries contain fields: Count, Total. We add a JavaScript field "Percentage" by using the following script:
var total = field('Total')
if (total > 0)
field('Count')*100/total + ' %'
else
'none'
Example: Days
Entries contain fields: StartDateTime, EndDateTime. We add a calculating field "Days" by using the following script:
moment(field('End')).diff(field('Start') , 'days')
Example: References
There’s library Order – with orders and library Item – with items. Library Order contains a link to library Item. Library Item contains field Price. To calculate the cost of the order, let’s add script field Sum using the following script:
var sum = 0
var items = field('Item')
for(var i in items) {
sum = sum + items[i].field('Price')
}
Example: Birthday
We have birthday field. If a person younger than 18 years we want displaying string "youth", else "adult".
var years = moment().diff(field('Birthday') , 'years' )
if (years < 18)
'Youth'
else
'Adult'
References
You can find a full description of the language here. The implementation is based on the Rhino library.
- Name
- Textual, case-insensitive field identifier that can include spaces; it's best to avoid characters that can be used as operators, though (standard across all field types)
- Hint
- Textual, case-insensitive field identifier that can include spaces
Script
- Script itself
- JavaScript script. The context of the script is the Entry object. The value returned is the last value assigned or expressed.
- JavaScript Libraries
- Choose additional JavaScript Libraries to be loaded. At this time, only moment.min.js is available.
- Execute script in real time
-
- No (default)
- Script will run only upon edit. Performance will be enhanced.
- Yes
- Script will run upon edit or display.
Display Options
- Display in the list as
- Select among the following roles for the current field in the entries list:
- As a Regular field
- As an Entry Name
- As an Entry Description
- As an Entry Status
- The field name
- Display the name of the field in the card entry (By default, On). By this, it is meant that the field name will or will not be displayed on either the Entry View card or the Entry Edit card.
- Font
- Choices are:
- Family: Regular, Light, Condensed, Thin, Medium. By default, Regular.
- Style: Normal, Bold, Italic, Bold Italic. By default, Normal.
- Size: By default, 18. Direct entry to change.
- Color: By default, White. Palette of 20 colors, backed up by a continuously variable color chooser.
- Dependencies
- Ability to add one or more visibility dependencies upon fields with qualifying types.
JavaScript links
W3Schools | |
---|---|
JavaScript Tutorial | A pleasant, fairly complete, and useful tutorial on JavaScript Best on a computer or tablet in landscape. On a phone or tablet in portrait, scroll to the bottom for navigation. |
Mozilla Developer Network | |
JavaScript Guide | Shows you how to use JavaScript, gives an overview of the language, and presents its capabilities & features |
JavaScript Reference | The entire JavaScript language described in detail |
Introduction to JavaScript | Introduces JavaScript and discusses some of its fundamental concepts |
JavaScript Tutorial | A re-introduction. JavaScript is often derided as being a toy, but beneath its simplicity, powerful language features await. |
JavaScript 1.7 | The JavaScript release upon which Memento is currently based |
About JavaScript | Jumping off point in learning about JavaScript |
[Category:Spec]