fixed the resizable text area with IE problem fixed the ad space with IE problem merged the 7.2.0 and 7.1.4 change logs
253 lines
7.6 KiB
JavaScript
253 lines
7.6 KiB
JavaScript
/**
|
|
* The check box marks a task complete. It is a simulated form field
|
|
* with three states ...
|
|
* 0=unchecked, 1=some children checked, 2=all children checked
|
|
* When a task is clicked, the state of the nodes and parent and children
|
|
* are updated, and this behavior cascades.
|
|
*
|
|
* @extends YAHOO.widget.TextNode
|
|
* @constructor
|
|
* @param oData {object} A string or object containing the data that will
|
|
* be used to render this node.
|
|
* @param oParent {Node} This node's parent node
|
|
* @param expanded {boolean} The initial expanded/collapsed state
|
|
* @param checked {boolean} The initial checked/unchecked state
|
|
*/
|
|
YAHOO.widget.TaskNode = function(oData, oParent, expanded, checked) {
|
|
|
|
if (oData) {
|
|
this.init(oData, oParent, expanded);
|
|
this.setUpLabel(oData);
|
|
if (checked && checked === true) {
|
|
this.check();
|
|
}
|
|
|
|
/*
|
|
if (!this.tree.checkClickEvent) {
|
|
this.tree.checkClickEvent =
|
|
new YAHOO.util.CustomEvent("checkclick", this.tree);
|
|
}
|
|
*/
|
|
}
|
|
|
|
this.logger = new YAHOO.widget.LogWriter(this.toString());
|
|
};
|
|
|
|
YAHOO.widget.TaskNode.prototype = new YAHOO.widget.TextNode();
|
|
|
|
/**
|
|
* True if checkstate is 1 (some children checked) or 2 (all children checked),
|
|
* false if 0.
|
|
* @type boolean
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.checked = false;
|
|
|
|
/**
|
|
* checkState
|
|
* 0=unchecked, 1=some children checked, 2=all children checked
|
|
* @type int
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.checkState = 0;
|
|
|
|
/**
|
|
* The id of the check element
|
|
* @type string
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.getCheckElId = function() {
|
|
return "ygtvcheck" + this.index;
|
|
};
|
|
|
|
/**
|
|
* Returns the check box element
|
|
* @return the check html element (img)
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.getCheckEl = function() {
|
|
return document.getElementById(this.getCheckElId());
|
|
};
|
|
|
|
/**
|
|
* The style of the check element, derived from its current state
|
|
* @return {string} the css style for the current check state
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.getCheckStyle = function() {
|
|
return "ygtvcheck" + this.checkState;
|
|
};
|
|
|
|
/**
|
|
* Returns the link that will invoke this node's check toggle
|
|
* @return {string} returns the link required to adjust the checkbox state
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.getCheckLink = function() {
|
|
return "YAHOO.widget.TreeView.getNode(\'" + this.tree.id + "\'," +
|
|
this.index + ").checkClick()";
|
|
};
|
|
|
|
/**
|
|
* Invoked when the user clicks the check box
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.checkClick = function() {
|
|
this.logger.log("previous checkstate: " + this.checkState);
|
|
if (this.checkState === 0) {
|
|
this.check();
|
|
} else {
|
|
this.uncheck();
|
|
}
|
|
|
|
// this.tree.checkClickEvent.fire(this);
|
|
|
|
this.onCheckClick();
|
|
};
|
|
|
|
/**
|
|
* Override to get the check click event
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.onCheckClick = function() {
|
|
this.logger.log("check was clicked");
|
|
}
|
|
|
|
/**
|
|
* Refresh the state of this node's parent, and cascade up.
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.updateParent = function() {
|
|
var p = this.parent;
|
|
|
|
if (!p || !p.updateParent) {
|
|
this.logger.log("Abort udpate parent: " + this.index);
|
|
return;
|
|
}
|
|
|
|
var somethingChecked = false;
|
|
var somethingNotChecked = false;
|
|
|
|
for (var i=0;i< p.children.length;++i) {
|
|
if (p.children[i].checked) {
|
|
somethingChecked = true;
|
|
// checkState will be 1 if the child node has unchecked children
|
|
if (p.children[i].checkState == 1) {
|
|
somethingNotChecked = true;
|
|
}
|
|
} else {
|
|
somethingNotChecked = true;
|
|
}
|
|
}
|
|
|
|
if (somethingChecked) {
|
|
p.setCheckState( (somethingNotChecked) ? 1 : 2 );
|
|
} else {
|
|
p.setCheckState(0);
|
|
}
|
|
|
|
p.updateCheckHtml();
|
|
p.updateParent();
|
|
};
|
|
|
|
/**
|
|
* If the node has been rendered, update the html to reflect the current
|
|
* state of the node.
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.updateCheckHtml = function() {
|
|
if (this.parent && this.parent.childrenRendered) {
|
|
this.getCheckEl().className = this.getCheckStyle();
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Updates the state. The checked property is true if the state is 1 or 2
|
|
*
|
|
* @param the new check state
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.setCheckState = function(state) {
|
|
this.checkState = state;
|
|
this.checked = (state > 0);
|
|
};
|
|
|
|
/**
|
|
* Check this node
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.check = function() {
|
|
this.logger.log("check");
|
|
this.setCheckState(2);
|
|
for (var i=0; i<this.children.length; ++i) {
|
|
this.children[i].check();
|
|
}
|
|
this.updateCheckHtml();
|
|
this.updateParent();
|
|
};
|
|
|
|
/**
|
|
* Uncheck this node
|
|
*/
|
|
YAHOO.widget.TaskNode.prototype.uncheck = function() {
|
|
this.setCheckState(0);
|
|
for (var i=0; i<this.children.length; ++i) {
|
|
this.children[i].uncheck();
|
|
}
|
|
this.updateCheckHtml();
|
|
this.updateParent();
|
|
};
|
|
|
|
// Overrides YAHOO.widget.TextNode
|
|
YAHOO.widget.TaskNode.prototype.getNodeHtml = function() {
|
|
this.logger.log("Generating html");
|
|
var sb = new Array();
|
|
|
|
sb[sb.length] = '<table border="0" cellpadding="0" cellspacing="0">';
|
|
sb[sb.length] = '<tr>';
|
|
|
|
for (i=0;i<this.depth;++i) {
|
|
sb[sb.length] = '<td class="' + this.getDepthStyle(i) + '"> </td>';
|
|
}
|
|
|
|
sb[sb.length] = '<td';
|
|
sb[sb.length] = ' id="' + this.getToggleElId() + '"';
|
|
sb[sb.length] = ' class="' + this.getStyle() + '"';
|
|
if (this.hasChildren(true)) {
|
|
sb[sb.length] = ' onmouseover="this.className=';
|
|
sb[sb.length] = 'YAHOO.widget.TreeView.getNode(\'';
|
|
sb[sb.length] = this.tree.id + '\',' + this.index + ').getHoverStyle()"';
|
|
sb[sb.length] = ' onmouseout="this.className=';
|
|
sb[sb.length] = 'YAHOO.widget.TreeView.getNode(\'';
|
|
sb[sb.length] = this.tree.id + '\',' + this.index + ').getStyle()"';
|
|
}
|
|
sb[sb.length] = ' onclick="javascript:' + this.getToggleLink() + '"> ';
|
|
sb[sb.length] = '</td>';
|
|
|
|
// check box
|
|
sb[sb.length] = '<td';
|
|
sb[sb.length] = ' id="' + this.getCheckElId() + '"';
|
|
sb[sb.length] = ' class="' + this.getCheckStyle() + '"';
|
|
sb[sb.length] = ' onclick="javascript:' + this.getCheckLink() + '">';
|
|
sb[sb.length] = ' </td>';
|
|
|
|
|
|
sb[sb.length] = '<td>';
|
|
sb[sb.length] = '<a';
|
|
sb[sb.length] = ' id="' + this.labelElId + '"';
|
|
sb[sb.length] = ' class="' + this.labelStyle + '"';
|
|
sb[sb.length] = ' href="' + this.href + '"';
|
|
sb[sb.length] = ' target="' + this.target + '"';
|
|
if (this.hasChildren(true)) {
|
|
sb[sb.length] = ' onmouseover="document.getElementById(\'';
|
|
sb[sb.length] = this.getToggleElId() + '\').className=';
|
|
sb[sb.length] = 'YAHOO.widget.TreeView.getNode(\'';
|
|
sb[sb.length] = this.tree.id + '\',' + this.index + ').getHoverStyle()"';
|
|
sb[sb.length] = ' onmouseout="document.getElementById(\'';
|
|
sb[sb.length] = this.getToggleElId() + '\').className=';
|
|
sb[sb.length] = 'YAHOO.widget.TreeView.getNode(\'';
|
|
sb[sb.length] = this.tree.id + '\',' + this.index + ').getStyle()"';
|
|
}
|
|
sb[sb.length] = ' >';
|
|
sb[sb.length] = this.label;
|
|
sb[sb.length] = '</a>';
|
|
sb[sb.length] = '</td>';
|
|
sb[sb.length] = '</tr>';
|
|
sb[sb.length] = '</table>';
|
|
|
|
return sb.join("");
|
|
|
|
};
|
|
|
|
YAHOO.widget.TaskNode.prototype.toString = function() {
|
|
return "TaskNode (" + this.index + ") " + this.label;
|
|
};
|
|
|