/**
* 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.
*/