JavaScript field

Revision as of 05:00, 2 October 2016 by UnConnoisseur (talk | contribs)
« Page as of 2016-09-10, editions Mobile 3.9.7, Desktop 1.0.3 »

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
i + 1

Result will be: 3

Fields of an entry

Function field("[field name]") is used to get access to the values of other 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 entries. Each array element has a method field for access to values of the linked entry.

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 a an entry contains the field whose value is 18 March 2016 14:55

Example of Format dates

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 http://momentjs.com

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 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. Value returned is the last value assigned or the value in a Return statement.
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

JavaScript Guide Shows you how to use JavaScript and gives an overview of the language. Helps to understand its capabilities and features.
JavaScript Reference The entire language is 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 deceptive simplicity, powerful language features await.
JavaScript 1.7 The JavaScript release upon which Memento is currently based.