/*______________
| ______ | U I Z E J A V A S C R I P T F R A M E W O R K
| / / | ---------------------------------------------------
| / O / | MODULE : Uize.Parse.Xml.TagAttributeValue Class
| / / / |
| / / / /| | ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2014-2016 UIZE
| /___ | LICENSE : Available under MIT License or GNU General Public License
|_______________| http://uize.com/license.html
*/
/* Module Meta Data
type: Class
importance: 4
codeCompleteness: 100
docCompleteness: 2
*/
/*?
Introduction
The =Uize.Parse.Xml.TagAttributeValue= module provides methods for parsing and serializing tag attribute values for tag attributes of XML tags.
*DEVELOPERS:* `Chris van Rensburg`
*/
Uize.module ({
name:'Uize.Parse.Xml.TagAttributeValue',
superclass:'Uize.Parse.Base',
required:[
'Uize.Util.Html.Encode',
'Uize.Str.Whitespace'
],
builder:function (_superclass) {
'use strict';
var
/*** Variables for Scruncher Optimization ***/
_Uize_Util_Html_Encode = Uize.Util.Html.Encode,
/*** Variables for Performance Optimization ***/
_htmlEncode = _Uize_Util_Html_Encode.encode,
_htmlDecode = _Uize_Util_Html_Encode.decode,
_indexOfWhitespace = Uize.Str.Whitespace.indexOfWhitespace
;
return _superclass.subclass ({
instanceProperties:{
value:''
},
instanceMethods:{
parse:function (_source,_index) {
var
m = this,
_sourceLength = (m.source = _source).length
;
m.index = _index || (_index = 0);
var
_currentChar = _source.charAt (_index),
_currentCharIsQuote = _currentChar == '"' || _currentChar == '\'';
;
_index = _currentCharIsQuote
? _source.indexOf (_currentChar,_index + 1)
: Math.min (
((_indexOfWhitespace (_source,_index) + 1) || _sourceLength + 1) - 1,
((_source.indexOf ('>',_index) + 1) || _sourceLength + 1) - 1
)
;
if (_index > -1) {
m.value = _htmlDecode (_source.slice (m.index + _currentCharIsQuote,_index));
m.length = _index + _currentCharIsQuote - m.index;
m.isValid = true;
} else {
m.value = '';
m.length = 0;
m.isValid = false;
}
},
serialize:function () {
return this.isValid ? '"' + _htmlEncode (this.value) + '"' : '';
}
}
});
}
});