/*______________
| ______ | 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.Widget.Tree.ListAbstract Class
| / / / |
| / / / /| | ONLINE : http://uize.com
| /____/ /__/_| | COPYRIGHT : (c)2003-2014 UIZE
| /___ | LICENSE : Available under MIT License or GNU General Public License
|_______________| http://uize.com/license.html
*/
/* Module Meta Data
type: Class
importance: 5
codeCompleteness: 100
docCompleteness: 2
*/
/*?
Introduction
The =Uize.Widget.Tree.ListAbstract= class is an abstract class that provides common code to the =Uize.Widget.Tree.List= class and the newer =Uize.Widgets.NavTree.List.Widget= V2 widget class.
*DEVELOPERS:* `Chris van Rensburg`
*/
Uize.module ({
name:'Uize.Widget.Tree.ListAbstract',
required:[
'Uize.Dom.Basics',
'Uize.Tooltip',
'Uize.Util.Html.Encode'
],
builder:function (_superclass) {
'use strict';
var
/*** Variables for Scruncher Optimization ***/
_true = true,
_false = false,
_Uize_Dom_Basics = Uize.Dom.Basics,
_Uize_Tooltip = Uize.Tooltip,
_htmlEncode = Uize.Util.Html.Encode.encode
;
return _superclass.subclass ({
instanceMethods:{
getTogglerTitle:function (_item) {
return 'Click to ' + (_item.expanded === _false ? 'expand' : 'collapse');
},
wireUi:function () {
var m = this;
if (!m.isWired) {
var
_tooltip = m._tooltip,
_tooltipIsPlainObject = Uize.isPlainObject (_tooltip),
_tooltipNode = _Uize_Dom_Basics.getById (_tooltipIsPlainObject ? _tooltip.node : _tooltip)
;
m.traverseTree ({
itemHandler:
function (_item,_itemSpecifier) {
_tooltip &&
m.wireNode (
_itemSpecifier + 'TitleLink',
{
mouseover:
function () {
if (_tooltipNode) {
var _tooltipHtml;
if (_tooltipIsPlainObject) {
_tooltipHtml = _tooltip.show (_item);
} else {
var _tooltipTemplate = m._tooltipTemplate;
if (_tooltipTemplate) {
_tooltipHtml = _tooltipTemplate.call (m,_item);
} else {
var _itemDescription = _item.description;
if (_itemDescription)
_tooltipHtml = _htmlEncode (_itemDescription)
;
}
_tooltipHtml && _Uize_Dom_Basics.setInnerHtml (_tooltipNode,_tooltipHtml);
}
if (_tooltipHtml) {
_Uize_Tooltip.showTooltip (_tooltipNode,_true);
m.fire ({name:'After Show Tooltip',item:_item});
}
}
},
mouseout:function () {
_Uize_Tooltip.showTooltip (_tooltipNode,_false);
m.fire ({name:'After Hide Tooltip',item:_item});
}
}
)
;
},
beforeSubItemsHandler:
function (_item,_itemSpecifier) {
m.wireNode (
[
_itemSpecifier + 'TogglerLink',
!_item.link || m._linksAlwaysToggleExpanded
? (_itemSpecifier + 'TitleLink')
: undefined
],
{
click:function (_event) {
if (_event.shiftKey || _event.ctrlKey || _event.metaKey) {
m.setExpandedDepth (
m.getItemFromSpecifier (_itemSpecifier).expanded !== _false
? 0
: (_event.shiftKey ? 1 : 1000),
_itemSpecifier
);
_event.cancelBubble = _true;
} else {
m.setItemExpanded (_itemSpecifier);
}
},
focus:function () {this.blur ()}
}
);
}
});
_superclass.doMy (m,'wireUi');
}
}
},
stateProperties:{
_alwaysLinkHeadings:{
name:'alwaysLinkHeadings',
value:_false
},
_linksAlwaysToggleExpanded:{
name:'linksAlwaysToggleExpanded',
value:_false
},
_tooltip:'tooltip',
_tooltipTemplate:'tooltipTemplate'
}
});
}
});