Source: nodes/node.jsdoc

/**
 * Allows for overriding the display string for a property value as displayed on the node.<br>
 * The `this` object will reference the node.
 * @callback wcNode~PropertyDisplay
 * @param {Object} value - The value or initial value of the property to display.
 * @param {Boolean} isInitial - If true, displaying the initial value for the property.
 * @returns {String} - A string value to display on the node.
 */

/**
 * A callback handler for testing whether a property link can connect with another.<br>
 * The `this` object will reference the node.
 * @callback wcNode~PropertyLinkCondition
 * @param {String} name - The name of your link being connected to.
 * @param {wcNode} targetNode - The target node being connected with.
 * @param {String} targetLink - The name of the targets link.
 */

/**
 * A set of options that apply to all property types.
 * @typedef {Object} wcNode~PropertyOptions
 * @property {String} [description] - An optional description to display as a tooltip for this property.
 * @property {wcNode~PropertyDisplay} [display] - An optional function that will be called to retrieve the display string for the value/initial value for this property.
 * @property {wcNode~ExportValue} [exportValue] - An optional function that will retrieve the property's value when it is about to be exported to file.
 * @property {Boolean} [input] - If true, this property will have an input link so its value can be changed through script.
 * @property {Boolean} [output] - If true, this property will have an output link so its value can be retrieved through script.
 * @property {wcNode~PropertyLinkCondition} [inputCondition] - If supplied, returns whether a specified connection can be made to your property input.
 * @property {wcNode~PropertyLinkCondition} [outputCondition] - If supplied, returns whether a specified connection can be made to your property output.
 * @property {Boolean} [linked] - If true, the value and initial values will be linked and can not be separated. Changing either will change them both.
 * @property {Boolean} [readOnly] - If true, clicking this property will not show an editor.
 */

/**
 * Options for a [NUMBER]{@link wcPlay.PROPERTY} value.
 * @typedef {Object} wcNode~NumberOptions
 * @property {String} [description] - An optional description to display as a tooltip for this property.
 * @property {wcNode~PropertyDisplay} [display] - An optional function that will be called to retrieve the display string for the value/initial value for this property.
 * @property {wcNode~ExportValue} [exportValue] - An optional function that will retrieve the property's value when it is about to be exported to file.
 * @property {Boolean} [input] - If true, this property will have an input link so its value can be changed through script.
 * @property {Boolean} [output] - If true, this property will have an output link so its value can be retrieved through script.
 * @property {wcNode~PropertyLinkCondition} [inputCondition] - If supplied, returns whether a specified connection can be made to your property input.
 * @property {wcNode~PropertyLinkCondition} [outputCondition] - If supplied, returns whether a specified connection can be made to your property output.
 * @property {Boolean} [linked] - If true, the value and initial values will be linked and can not be separated. Changing either will change them both.
 * @property {Boolean} [readOnly] - If true, clicking this property will not show an editor.
 * @property {Number} [min=-Infinity] - The minimum value of the number range.
 * @property {Number} [max=Infinity] - The maximum value of the number range.
 * @property {Number} [step=1] - The amount the value will go up or down when the user clicks the up and down arrow controls.
 */

/**
 * Options for a [STRING]{@link wcPlay.PROPERTY} value.
 * @typedef {Object} wcNode~StringOptions
 * @property {String} [description] - An optional description to display as a tooltip for this property.
 * @property {wcNode~PropertyDisplay} [display] - An optional function that will be called to retrieve the display string for the value/initial value for this property.
 * @property {wcNode~ExportValue} [exportValue] - An optional function that will retrieve the property's value when it is about to be exported to file.
 * @property {Boolean} [input] - If true, this property will have an input link so its value can be changed through script.
 * @property {Boolean} [output] - If true, this property will have an output link so its value can be retrieved through script.
 * @property {wcNode~PropertyLinkCondition} [inputCondition] - If supplied, returns whether a specified connection can be made to your property input.
 * @property {wcNode~PropertyLinkCondition} [outputCondition] - If supplied, returns whether a specified connection can be made to your property output.
 * @property {Boolean} [linked] - If true, the value and initial values will be linked and can not be separated. Changing either will change them both.
 * @property {Boolean} [readOnly] - If true, clicking this property will not show an editor.
 * @property {Number} [maxlength=Infinity] - The maximum number of characters allowed.
 * @property {Boolean} [multiline=false] - Whether to use a multi-line text editor for this property.
 * @property {wcNode~SelectItem[]|String[]|wcNode~SelectItemFunc} items - A list of items to drop down in a suggestion as the user types, or a callback function that can dynamically retrieve a list. See [here]{@link http://caniuse.com/#search=datalist} for browser compatability information.
*/

/**
 * Options for a [SELECT]{@link wcPlay.PROPERTY} value.
 * @typedef {Object} wcNode~SelectOptions
 * @property {String} [description] - An optional description to display as a tooltip for this property.
 * @property {wcNode~PropertyDisplay} [display] - An optional function that will be called to retrieve the display string for the value/initial value for this property.
 * @property {wcNode~ExportValue} [exportValue] - An optional function that will retrieve the property's value when it is about to be exported to file.
 * @property {Boolean} [input] - If true, this property will have an input link so its value can be changed through script.
 * @property {Boolean} [output] - If true, this property will have an output link so its value can be retrieved through script.
 * @property {wcNode~PropertyLinkCondition} [inputCondition] - If supplied, returns whether a specified connection can be made to your property input.
 * @property {wcNode~PropertyLinkCondition} [outputCondition] - If supplied, returns whether a specified connection can be made to your property output.
 * @property {Boolean} [linked] - If true, the value and initial values will be linked and can not be separated. Changing either will change them both.
 * @property {Boolean} [readOnly] - If true, clicking this property will not show an editor.
 * @property {wcNode~SelectItem[]|String[]|wcNode~SelectItemFunc} items - A list of items to display in the combo box, or a callback function that can dynamically retrieve a list.
 * @property {Boolean} [allowNone=true] - If true, will allow the user to select '<none>' as an option.
 * @property {Object} [noneValue] - If supplied, and allowNone is true, will assign the internal value of the '<none>' option.
 */

/**
 * Options for a [CUSTOM]{@link wcPlay.PROPERTY} value.
 * @typedef {Object} wcNode~CustomOptions
 * @property {String} [description] - An optional description to display as a tooltip for this property.
 * @property {wcNode~PropertyDisplay} [display] - An optional function that will be called to retrieve the display string for the value/initial value for this property.
 * @property {wcNode~ExportValue} [exportValue] - An optional function that will retrieve the property's value when it is about to be exported to file.
 * @property {Boolean} [input] - If true, this property will have an input link so its value can be changed through script.
 * @property {Boolean} [output] - If true, this property will have an output link so its value can be retrieved through script.
 * @property {wcNode~PropertyLinkCondition} [inputCondition] - If supplied, returns whether a specified connection can be made to your property input.
 * @property {wcNode~PropertyLinkCondition} [outputCondition] - If supplied, returns whether a specified connection can be made to your property output.
 * @property {Boolean} [linked] - If true, the value and initial values will be linked and can not be separated. Changing either will change them both.
 * @property {Boolean} [readOnly] - If true, clicking this property will not show an editor.
 * @property {wcNode~CustomCreateFunc} [onCreate] - If supplied, will be called when the property control is being edited and should return an element to display the control.
 */

/**
 * A callback that dynamically retrieves a list of items to display in a Select property.
 * @callback wcNode~SelectItemFunc
 * @param {wcNode~SelectItem[]|String[]} items - A list of items to display in the combo box.
 */

/**
 * A callback function to generate a custom property control, this should generate the necessary controls and return a containing control element.
 * @callback wcNode~CustomCreateFunc
 * @param {wcNode} node - The node.
 * @param {String} name - The property name being changed.
 * @param {Object} value - The property value.
 * @param {Boolean} isInitial - If true, the property being changed is the initial value.
 * @param {wcNode~CustomOnChangedFunc} onChanged - A function to call when the property value has been changed.
 * @returns {external:jQuery~Object} - A containing element that contains the control.
 */
 
/**
 * Used with the custom property type, a callback to call when the property value has changed. This allows for proper undo management.
 * @callback wcNode~CustomOnChangedFunc
 * @param {Object} newValue - The new value.
 */

/**
 * A select property item.
 * @typedef {Object} wcNode~SelectItem
 * @property {String} name - The display text to display for this item.
 * @property {String|Number} value - The value to assign to the property when this property is selected.
 */

/**
 * Basic information about a chain connection.
 * @typedef {Object} wcNode~ChainData
 * @property {String} inName    - The name of the input or entry link this chain is connected to.
 * @property {Number} inNodeId  - The ID of the input or entry node this chain is connected to.
 * @property {String} outName   - The name of the output or exit link this chain is connected to.
 * @property {Number} outNodeId - The ID of the output or exit node this chain is connected to.
 */

/**
 * Basic information for a property.
 * @typedef {Object} wcNode~PropertyData
 * @property {String} name - The name of the property.
 * @property {wcPlay.PROPERTY} type - The type of the property.
 * @property {Object} value - The current value of the property.
 * @property {Object} initialValue - The initial value of the property.
 * @property {Object} options - The options for this property.
 */