src/cm/media/js/lib/yui/yui3.0.0/examples/event/assets/checkbox.js
author Yves-Marie Haussonne <ymh.work+github@gmail.com>
Fri, 09 May 2014 18:35:26 +0200
changeset 656 a84519031134
parent 0 40c8f766c9b8
permissions -rw-r--r--
add link to "privacy policy" in the header test
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
0
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     1
YUI().use("*", function(Y) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     2
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     3
	var UA = Y.UA,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     4
		getClassName = Y.ClassNameManager.getClassName,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     5
		sCheckboxFocusClass = getClassName("checkbox", "focus"),	// Create yui-checkbox-focus
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     6
		sCheckboxCheckedClass = getClassName("checkbox", "checked"),	// Create yui-checkbox-checked
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     7
		sCheckboxActiveClass = getClassName("checkbox", "active"),	// Create yui-checkbox-active
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     8
		bKeyListenersInitialized = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
     9
		bMouseListenersInitialized = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    10
		forAttr = (UA.ie && UA.ie < 8) ? "htmlFor" : "for",
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    11
		bBlockDocumentMouseUp = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    12
		bBlockClearActive = false,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    13
		bBlockBlur = false,		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    14
		oActiveCheckbox;			
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    15
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    16
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    17
	var initKeyListeners = function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    18
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    19
		this.delegate("keydown", onCheckboxKeyDown, ".yui-checkbox");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    20
		this.delegate("click", onCheckboxClick, ".yui-checkbox");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    21
		this.delegate("blur", onCheckboxBlur, "input[type=checkbox]");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    22
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    23
		bKeyListenersInitialized = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    24
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    25
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    26
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    27
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    28
	var initMouseListeners = function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    29
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    30
		this.delegate("mouseover", onCheckboxMouseOver, ".yui-checkbox");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    31
		this.delegate("mouseout", onCheckboxMouseOut, ".yui-checkbox-active");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    32
		this.get("ownerDocument").on("mouseup", onDocumentMouseUp);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    33
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    34
		bMouseListenersInitialized = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    35
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    36
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    37
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    38
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    39
	var getCheckbox = function (node) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    40
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    41
		return (node.hasClass("yui-checkbox") ? node : node.ancestor(".yui-checkbox"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    42
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    43
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    44
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    45
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    46
	var getCheckboxForLabel = function (label) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    47
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    48
		var sID = label.getAttribute(forAttr),
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    49
			oInput,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    50
			oCheckbox;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    51
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    52
		if (sID) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    53
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    54
			oInput = Y.one("#" + sID);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    55
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    56
			if (oInput) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    57
				oCheckbox = getCheckbox(oInput);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    58
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    59
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    60
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    61
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    62
		return oCheckbox;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    63
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    64
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    65
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    66
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    67
	var updateCheckedState = function (input) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    68
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    69
		var oCheckbox = getCheckbox(input);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    70
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    71
		if (input.get("checked")) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    72
			oCheckbox.addClass(sCheckboxCheckedClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    73
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    74
		else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    75
			oCheckbox.removeClass(sCheckboxCheckedClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    76
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    77
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    78
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    79
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    80
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    81
	var setActiveCheckbox = function (checkbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    82
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    83
		checkbox.addClass(sCheckboxActiveClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    84
		oActiveCheckbox = checkbox;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    85
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    86
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    87
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    88
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    89
	var clearActiveCheckbox = function () {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    90
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    91
		if (oActiveCheckbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    92
			oActiveCheckbox.removeClass(sCheckboxActiveClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    93
			oActiveCheckbox = null;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    94
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    95
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    96
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    97
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    98
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
    99
	var onCheckboxMouseOver = function (event, matchedEl) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   100
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   101
		if (oActiveCheckbox && oActiveCheckbox.compareTo(this)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   102
			oActiveCheckbox.addClass(sCheckboxActiveClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   103
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   104
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   105
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   106
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   107
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   108
	var onCheckboxMouseOut = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   109
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   110
		this.removeClass(sCheckboxActiveClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   111
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   112
	};				
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   113
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   114
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   115
	var onDocumentMouseUp = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   116
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   117
		var oCheckbox;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   118
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   119
		if (!bBlockDocumentMouseUp) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   120
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   121
			oCheckbox = getCheckbox(event.target);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   122
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   123
			if ((oCheckbox && !oCheckbox.compareTo(oActiveCheckbox)) || !oCheckbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   124
				clearActiveCheckbox();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   125
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   126
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   127
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   128
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   129
		bBlockDocumentMouseUp = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   130
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   131
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   132
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   133
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   134
	var onCheckboxFocus = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   135
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   136
		//	Remove the focus style from any checkbox that might still have it
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   137
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   138
		var oCheckbox = Y.one("#checkboxes").one(".yui-checkbox-focus");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   139
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   140
		if (oCheckbox) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   141
			oCheckbox.removeClass(sCheckboxFocusClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   142
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   143
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   144
		//	Defer adding key-related and click event listeners until 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   145
		//	one of the checkboxes is initially focused.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   146
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   147
		if (!bKeyListenersInitialized) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   148
			initKeyListeners.call(event.container);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   149
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   150
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   151
		oCheckbox = getCheckbox(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   152
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   153
		oCheckbox.addClass(sCheckboxFocusClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   154
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   155
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   156
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   157
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   158
	var onCheckboxBlur = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   159
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   160
		if (bBlockBlur) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   161
			bBlockBlur = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   162
			return;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   163
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   164
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   165
		var oCheckbox = getCheckbox(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   166
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   167
		oCheckbox.removeClass(sCheckboxFocusClass);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   168
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   169
		if (!bBlockClearActive && oCheckbox.compareTo(oActiveCheckbox)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   170
			clearActiveCheckbox();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   171
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   172
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   173
		bBlockClearActive = false;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   174
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   175
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   176
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   177
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   178
	var onCheckboxMouseDown = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   179
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   180
		//	Defer adding mouse-related and click event listeners until 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   181
		//	the user mouses down on one of the checkboxes.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   182
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   183
		if (!bMouseListenersInitialized) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   184
			initMouseListeners.call(event.container);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   185
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   186
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   187
		var oCheckbox,
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   188
			oInput;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   189
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   190
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   191
		if (this.get("nodeName").toLowerCase() === "label") {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   192
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   193
			//	If the target of the event was the checkbox's label element, the
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   194
			//	label will dispatch a click event to the checkbox, meaning the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   195
			//	"onCheckboxClick" handler will be called twice.  For that reason
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   196
			//	it is necessary to block the "onDocumentMouseUp" handler from
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   197
			//	clearing the active state, so that a reference to the active  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   198
			//	checkbox still exists the second time the "onCheckboxClick"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   199
			//	handler is called.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   200
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   201
			bBlockDocumentMouseUp = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   202
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   203
			//	When the user clicks the label instead of the checkbox itself, 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   204
			//	the checkbox will be blurred if it has focus.  Since the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   205
			//	"onCheckboxBlur" handler clears the active state it is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   206
			//	necessary to block the clearing of the active state when the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   207
			//	label is clicked instead of the checkbox itself.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   208
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   209
			bBlockClearActive = true;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   210
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   211
			oCheckbox = getCheckboxForLabel(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   212
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   213
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   214
		else {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   215
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   216
			oCheckbox = this;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   217
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   218
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   219
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   220
		//	Need to focus the input manually for two reasons:
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   221
		//	1) 	Mousing down on a label in Webkit doesn't focus its  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   222
		//		associated checkbox
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   223
		//	2)	By default checkboxes are focused when the user mouses 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   224
		//		down on them.  However, since the actually checkbox is 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   225
		//		obscurred by the two span elements that are used to 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   226
		//		style it, the checkbox wont' receive focus as it was 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   227
		//		never the actual target of the mousedown event.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   228
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   229
		oInput = oCheckbox.one("input");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   230
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   231
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   232
		//	Calling Event.preventDefault won't block the blurring of the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   233
		//	currently focused element in IE, so we'll use the "bBlockBlur"
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   234
		//	variable to stop the code in the blur event handler  
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   235
		//	from executing.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   236
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   237
		bBlockBlur = (UA.ie && oInput.get("checked"));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   238
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   239
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   240
		oInput.focus();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   241
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   242
		setActiveCheckbox(oCheckbox);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   243
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   244
		//	Need to call preventDefault because by default mousing down on
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   245
		//	an element will blur the element in the document that currently 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   246
		//	has focus--in this case, the input element that was 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   247
		//	just focused.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   248
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   249
		event.preventDefault();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   250
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   251
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   252
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   253
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   254
	var onCheckboxClick = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   255
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   256
		var oInput;
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   257
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   258
		if (this.compareTo(oActiveCheckbox)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   259
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   260
			oInput = this.one("input");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   261
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   262
			if (!event.target.compareTo(oInput)) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   263
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   264
				//	If the click event was fired via the mouse the checked
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   265
				//	state will have to be manually updated since the input 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   266
				//	is hidden offscreen and therefore couldn't be the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   267
				//	target of the click.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   268
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   269
				oInput.set("checked", (!oInput.get("checked")));
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   270
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   271
			}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   272
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   273
			updateCheckedState(oInput);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   274
			clearActiveCheckbox();
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   275
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   276
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   277
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   278
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   279
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   280
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   281
	var onCheckboxKeyDown = function (event) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   282
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   283
		//	Style the checkbox as being active when the user presses the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   284
		//	space bar
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   285
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   286
		if (event.keyCode === 32) {
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   287
			setActiveCheckbox(this);
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   288
		}
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   289
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   290
	};
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   291
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   292
	Y.all("#checkboxes>div>span").addClass("yui-checkbox");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   293
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   294
	//	Remove the "yui-checkboxes-loading" class used to hide the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   295
	//	checkboxes now that the checkboxes have been skinned.
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   296
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   297
	Y.one("#checkboxes").get("ownerDocument").get("documentElement").removeClass("yui-checkboxes-loading");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   298
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   299
	//	Add the minimum number of event listeners needed to start, bind the 
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   300
	//	rest when needed
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   301
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   302
	Y.delegate("mousedown", onCheckboxMouseDown, "#checkboxes", ".yui-checkbox,label");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   303
	Y.delegate("focus", onCheckboxFocus, "#checkboxes", "input[type=checkbox]");
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   304
		
40c8f766c9b8 import from internal svn r 4007
raph
parents:
diff changeset
   305
});