308
edits
Line 67: | Line 67: | ||
=== Using semantic roles in <code>preview</code> and <code>execute</code> === | === Using semantic roles in <code>preview</code> and <code>execute</code> === | ||
As arguments are specified using semantic roles, arguments are then passed to the <code>preview</code> and <code>execute</code> methods based on their arguments as well. Both methods are handed an object with the semantic roles as the keys, and the argument data as the values, e.g. | |||
{ object: { text: 'chicken', | |||
data: 'chicken', | |||
... }, | |||
instrument: { text: 'goo', | |||
data: 'Google', | |||
... } | |||
} | |||
Note that the structure of the argument data itself (with requisite properties <code>text</code>, <code>data</code>, and <code>html</code>) is the same as with the Parser 1 API. | |||
Instead of handing the direct object's data and the other arguments' data separately to <code>preview</code> and <code>execute</code>, Parser 2 hands it to them together as one argument: | |||
'''Parser 1 (old) API:''' | |||
CmdUtils.CreateCommand({ | |||
... | |||
preview: function(pblock, object, modifiers) { | |||
var data = {}; | |||
data.query = object.text; | |||
data.engine = modifiers.using.text; | |||
pblock.innerHTML = CmdUtils.renderTemplate( | |||
"Searching for ${query} using ${engine}.", | |||
data ); | |||
}, | |||
execute: function(object, modifiers) { | |||
var data = {}; | |||
data.query = object.text; | |||
data.engine = modifiers.using.text; | |||
displayMessage(CmdUtils.renderTemplate( | |||
"Searching for ${query} using ${engine}.", | |||
data ); | |||
}, | |||
... | |||
'''Parser 2 (new) API:''' | |||
CmdUtils.CreateCommand({ | |||
... | |||
preview: function(pblock, args) { | |||
var data = {}; | |||
data.query = args.object.text; | |||
data.engine = args.instrument.text; | |||
pblock.innerHTML = CmdUtils.renderTemplate( | |||
"Searching for ${query} using ${engine}.", | |||
data ); | |||
}, | |||
execute: function(object, args) { | |||
var data = {}; | |||
data.query = args.object.text; | |||
data.engine = args.instrument.text; | |||
displayMessage(CmdUtils.renderTemplate( | |||
"Searching for ${query} using ${engine}.", | |||
data ); | |||
}, | |||
... | |||
As always, it is best to first check whether the requisite arguments were filled in the parse before using it. | |||
=== Making your command localizable === | === Making your command localizable === |
edits