/**
* The ACE Editor Velocity Plugin
*
* @module aui-ace-editor
* @submodule aui-ace-autocomplete-velocity
*/
var Lang = A.Lang,
MATCH_DIRECTIVES = 0,
MATCH_VARIABLES = 1,
/**
* A base class for Velocity plugin.
*
* @class A.AceEditor.AutoCompleteVelocity
* @extends A.AceEditor.TemplateProcessor
* @param {Object} config Object literal specifying widget configuration
* properties.
* @constructor
*/
Velocity = A.Base.create('aui-ace-autocomplete-velocity', A.AceEditor.TemplateProcessor, [], {
/**
* Checks if the provided content contains directive or variable.
*
* @method getMatch
* @param {String} content The content which should be traversed for
* matches
* @return {Object} An Object which contains the following properties:
* content - the found content
* start - the start index of the match
* type - match type, could be 0 (DIRECTIVES) or 1 (VARIABLES)
*/
getMatch: function(content) {
var instance = this,
match,
matchIndex;
if ((matchIndex = content.lastIndexOf('#')) >= 0) {
content = content.substring(matchIndex);
if (instance.get('directivesMatcher').test(content)) {
match = {
content: content.substring(1),
start: matchIndex,
type: MATCH_DIRECTIVES
};
}
}
else if ((matchIndex = content.lastIndexOf('$')) >= 0) {
content = content.substring(matchIndex);
if (instance.get('variablesMatcher').test(content)) {
match = {
content: content.substring(1),
start: matchIndex,
type: MATCH_VARIABLES
};
}
}
return match;
}
}, {
/**
* Static property which provides a string to identify the class.
*
* @property NAME
* @type String
* @static
*/
NAME: 'aui-ace-autocomplete-velocity',
/**
* Static property provides a string to identify the namespace.
*
* @property NS
* @type String
* @static
*/
NS: 'aui-ace-autocomplete-velocity',
/**
* Static property used to define the default attribute
* configuration for the Velocity.
*
* @property ATTRS
* @type Object
* @static
*/
ATTRS: {
/**
* Contains the list of supported directives according to Velocity
* specification.
*
* @attribute directives
* @default
* value: [
* 'else',
* 'elseif',
* 'foreach',
* 'if',
* 'include',
* 'macro',
* 'parse',
* 'set',
* 'stop'
*]
* @type Array
*/
directives: {
validator: Lang.isArray,
value: [
'else',
'elseif',
'foreach',
'if',
'include',
'macro',
'parse',
'set',
'stop'
]
},
/**
* Contains the regular expression which checks for directive.
*
* @attribute directivesMatcher
* @default /#[\w]*[^#]*$/
*/
directivesMatcher: {
setter: '_setRegexValue',
value: /#[\w]*[^#]*$/
},
/**
* The Editor in which the current instance is plugged.
*
* @attribute host
* @type Object
*/
host: {
validator: Lang.isObject
},
/**
* Contains the supported variables.
*
* @attribute variables
* @type Object
*/
variables: {
validator: Lang.isObject
},
/**
* Contains the regular expression which will check for variable
* match.
*
* @attribute variablesMatcher
* @default /\$[\w., ()"]*(?:[^$]|\\\$)*$/
*/
variablesMatcher: {
setter: '_setRegexValue',
value: /\$[\w., ()"]*(?:[^$]|\\\$)*$/
}
}
});
A.AceEditor.AutoCompleteVelocity = Velocity;