File: /home/barbeatleanalyti/public_html/manage.beatleanalytics.com/theme/black/js/jTreeView.js
/**
Project: jTreeView jQuery Plugin
Version: 0.1
Project Website: http://code.google.com/p/jquery-treeview/
Author: Jack.Qiu
License:
The jTreeView jQuery plugin is currently available for use in all personal or
commercial projects under both MIT and GPL licenses. This means that you can choose
the license that best suits your project, and use it accordingly.
*/
(function(jQuery) {
jQuery.fn.jTreeView = function(settings) {
settings = jQuery.extend({
/* Callbacks
The callbacks should be functions that take one argument. The checkbox tree
will return the jQuery wrapped LI element of the item that was checked/expanded.
*/
onExpand: null,
onCollapse: null,
onCheck: null,
onUnCheck: null,
onHalfCheck: null,
onLabelHoverOver: null,
onLabelHoverOut: null,
onLabelClick: null,
/* Valid choices: 'expand', 'check' */
labelAction: "expand",
CascadeCheckChildren : true,
CascadeCheckParent : true,
CascadeUnCheckChildren : true,
CascadeUnCheckParent : true,
imgPath: "img/",
// Debug (currently does nothing)
debug: false
}, settings);
var $tree = this;
$tree
.click(
function(e){
onclickTree($(e.target));
}
)
.mouseover(
function(e){
var $sender = $(e.target);
if($sender.attr("tagName").toUpperCase()=="LABEL")
{
$sender.addClass("hover");
if (settings.onLabelHoverOver) settings.onLabelHoverOver($sender.parent());
}
}
)
.mouseout(
function(e){
var $sender = $(e.target);
if($sender.attr("tagName").toUpperCase()=="LABEL")
{
$sender.removeClass("hover");
if (settings.onLabelHoverOut) settings.onLabelHoverOut($sender.parent());
}
}
)
.mousedown(
function(ev){
var $sender = $(ev.target);
if($sender.attr("tagName").toUpperCase()=="LABEL")
{
//alert($sender.attr("tagName"));
}
}
);
$tree.checkNode = CheckedNode;
$tree.uncheckNode = UnCheckedNode;
$tree.checkAllNodes = CheckedAllNode;
$tree.uncheckAllNodes = UnCheckedAllNode;
$tree.addNode = AddNode;
$tree.deleteNode = DeleteNode;
function CheckedNode(pSender)
{
_CheckedNode($(pSender).children("div.checkbox"));
}
function UnCheckedNode(pSender)
{
_UnCheckedNode($(pSender).children("div.checkbox"));
}
function AddNode(pParentNode,pChildNode)
{
var $ul=pParentNode.children("ul")
if($ul.length == 0)
{
$ul = $('<ul></ul>');
}
//$ul.add(pChildNode);
pChildNode.appendTo($ul);
}
function DeleteNode(pNode)
{
pNode.remove();
}
function CheckedAllNode()
{
$tree.children("li").each(
function(){
_CheckedNode($(this).children("div.checkbox"));
}
);
}
function UnCheckedAllNode()
{
$tree.children("li").each(
function(){
_UnCheckedNode($(this).children("div.checkbox"));
}
);
}
function _CheckedNode(pCurrentNode)
{
var $currentNode = pCurrentNode;
//�Ƚ��Լ���Ϊ��ȫ��ѡ��
$currentNode
.removeClass("half_checked")
.addClass("checked")
;
if (settings.onCheck) settings.onCheck($currentNode.parent());
//���ӽڵ�ȫ����Ϊ����ѡ��
$currentNode.siblings("ul").find(".checkbox").not(".checked")
.removeClass("half_checked")
// .addClass("checked")
.each(function() {
if (settings.onCheck) settings.onCheck($(this).parent());
})
;
}
function _UnCheckedNode(pCurrentNode)
{
var $currentNode = pCurrentNode;
if (settings.onUnCheck) settings.onUnCheck($currentNode.parent());
//�Ƚ��Լ���Ϊδѡ��
$currentNode
.removeClass("checked")
;
//���ӽڵ�ȫ����Ϊ��δѡ��
$currentNode.siblings("ul").find(".checkbox")
.removeClass("checked")
.each(function() {
if (settings.onCheck) settings.onCheck($(this).parent());
})
;
}
//�ݹ鴦�����Ƚڵ�
function changedParent(pCurrentNodeCheckbox)
{
var $currentNodeCheckbox = pCurrentNodeCheckbox;
var $currentNodeLI = $currentNodeCheckbox.parent();
var $currentNodeUL = $currentNodeLI.parent();
if($currentNodeUL.hasClass("tree")) //���ڵ�
{
return false;
}
var $parentNodeCheckbox = $currentNodeUL.siblings("div.checkbox");
if($currentNodeCheckbox.hasClass("checked"))
{
var siblingsAllChecked = true;
$currentNodeLI.siblings("li").each(
function(){
var $childBox=$(this).children("div.checkbox");
if(!$childBox.hasClass("checked"))
{
siblingsAllChecked = false;
return false;
}
}
);
if(siblingsAllChecked)
{
$parentNodeCheckbox
.removeClass("half_checked")
.addClass("checked")
;
}
else
{
$parentNodeCheckbox
.removeClass("checked")
.addClass("half_checked")
;
}
}
else if($currentNodeCheckbox.hasClass("half_checked"))
{
$parentNodeCheckbox
.removeClass("checked")
.addClass("half_checked")
;
}
else
{
var siblingsAllUnChecked = true;
$currentNodeLI.siblings("li").each(
function(){
var $childBox=$(this).children("div.checkbox");
if($childBox.hasClass("checked") || $childBox.hasClass("half_checked"))
{
siblingsAllUnChecked = false;
return false;
}
}
);
if(siblingsAllUnChecked)
{
$parentNodeCheckbox
.removeClass("half_checked")
.removeClass("checked")
;
}
else
{
$parentNodeCheckbox
.removeClass("checked")
.addClass("half_checked")
;
}
}
changedParent($parentNodeCheckbox);
}
function expandNode(pSender){
pSender
.removeClass("collapsed")
.addClass("expanded")
.siblings("ul").show()
;
if (settings.onExpand) settings.onExpand(pSender.parent());
}
function collapseNode(pSender)
{
pSender
.removeClass("expanded")
.addClass("collapsed")
.siblings("ul").hide()
;
if (settings.onCollapse) settings.onCollapse(pSender.parent());
}
function onclickTree(pSender)
{
var $sender = pSender; //���������¼��Ķ���
var senderTagName = $sender.attr("tagName").toUpperCase();
switch(senderTagName)
{
case "DIV": //��չ���������ѡ��
if($sender.hasClass("arrow")) //��չ�������
{
if($sender.hasClass("collapsed")) //��ǰ״̬������������л�Ϊ��չ����
{
expandNode($sender);
}
else if($sender.hasClass("expanded")) //��ǰ״̬����չ�������л�Ϊ�������
{
collapseNode($sender)
}
else //��ǰ״̬�������ӽڵ㡱��������
{
}
}
else if($sender.hasClass("checkbox")) //��ѡ��ť
{
if($sender.hasClass("half_checked")) //��ǰ״̬��������ѡ���л�Ϊ��ȫ��ѡ��
{
_CheckedNode($sender);
}
else if($sender.hasClass("checked")) //��ǰ״̬����ȫ��ѡ���л�Ϊ��δѡ��
{
_UnCheckedNode($sender);
}
else //��ǰ״̬����δѡ���л�Ϊ��ȫ��ѡ��
{
_CheckedNode($sender);
}
changedParent($sender); //�ݹ鴦�����Ƚڵ�
}
break
case "LABEL": //��ʾ������
var action = settings.labelAction;
switch(settings.labelAction) {
case 'expand':
onclickTree($sender.siblings(".arrow"));
break;
case 'check':
$sender.siblings(".checkbox").trigger('onclick',$sender.siblings(".arrow"));
break;
}
if (settings.onLabelClick) settings.onLabelClick($sender.parent());
break
default:
//��n������1Ҳ����2����ִ�д˴���
}
}
return $tree;
};
})(jQuery);