Mercurial > hg > digilib-old
comparison client/src/main/webapp/jquery/ui/jquery.ui.button.js @ 892:ba1eb2d821a2 mvnify
rearrange sources to maven directory standard
author | robcast |
---|---|
date | Tue, 19 Apr 2011 18:44:25 +0200 |
parents | client/digitallibrary/jquery/ui/jquery.ui.button.js@ccf67eaf97ee |
children |
comparison
equal
deleted
inserted
replaced
891:6584af320296 | 892:ba1eb2d821a2 |
---|---|
1 /* | |
2 * jQuery UI Button 1.8.9 | |
3 * | |
4 * Copyright 2011, AUTHORS.txt (http://jqueryui.com/about) | |
5 * Dual licensed under the MIT or GPL Version 2 licenses. | |
6 * http://jquery.org/license | |
7 * | |
8 * http://docs.jquery.com/UI/Button | |
9 * | |
10 * Depends: | |
11 * jquery.ui.core.js | |
12 * jquery.ui.widget.js | |
13 */ | |
14 (function( $, undefined ) { | |
15 | |
16 var lastActive, | |
17 baseClasses = "ui-button ui-widget ui-state-default ui-corner-all", | |
18 stateClasses = "ui-state-hover ui-state-active ", | |
19 typeClasses = "ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only", | |
20 formResetHandler = function( event ) { | |
21 $( ":ui-button", event.target.form ).each(function() { | |
22 var inst = $( this ).data( "button" ); | |
23 setTimeout(function() { | |
24 inst.refresh(); | |
25 }, 1 ); | |
26 }); | |
27 }, | |
28 radioGroup = function( radio ) { | |
29 var name = radio.name, | |
30 form = radio.form, | |
31 radios = $( [] ); | |
32 if ( name ) { | |
33 if ( form ) { | |
34 radios = $( form ).find( "[name='" + name + "']" ); | |
35 } else { | |
36 radios = $( "[name='" + name + "']", radio.ownerDocument ) | |
37 .filter(function() { | |
38 return !this.form; | |
39 }); | |
40 } | |
41 } | |
42 return radios; | |
43 }; | |
44 | |
45 $.widget( "ui.button", { | |
46 options: { | |
47 disabled: null, | |
48 text: true, | |
49 label: null, | |
50 icons: { | |
51 primary: null, | |
52 secondary: null | |
53 } | |
54 }, | |
55 _create: function() { | |
56 this.element.closest( "form" ) | |
57 .unbind( "reset.button" ) | |
58 .bind( "reset.button", formResetHandler ); | |
59 | |
60 if ( typeof this.options.disabled !== "boolean" ) { | |
61 this.options.disabled = this.element.attr( "disabled" ); | |
62 } | |
63 | |
64 this._determineButtonType(); | |
65 this.hasTitle = !!this.buttonElement.attr( "title" ); | |
66 | |
67 var self = this, | |
68 options = this.options, | |
69 toggleButton = this.type === "checkbox" || this.type === "radio", | |
70 hoverClass = "ui-state-hover" + ( !toggleButton ? " ui-state-active" : "" ), | |
71 focusClass = "ui-state-focus"; | |
72 | |
73 if ( options.label === null ) { | |
74 options.label = this.buttonElement.html(); | |
75 } | |
76 | |
77 if ( this.element.is( ":disabled" ) ) { | |
78 options.disabled = true; | |
79 } | |
80 | |
81 this.buttonElement | |
82 .addClass( baseClasses ) | |
83 .attr( "role", "button" ) | |
84 .bind( "mouseenter.button", function() { | |
85 if ( options.disabled ) { | |
86 return; | |
87 } | |
88 $( this ).addClass( "ui-state-hover" ); | |
89 if ( this === lastActive ) { | |
90 $( this ).addClass( "ui-state-active" ); | |
91 } | |
92 }) | |
93 .bind( "mouseleave.button", function() { | |
94 if ( options.disabled ) { | |
95 return; | |
96 } | |
97 $( this ).removeClass( hoverClass ); | |
98 }) | |
99 .bind( "focus.button", function() { | |
100 // no need to check disabled, focus won't be triggered anyway | |
101 $( this ).addClass( focusClass ); | |
102 }) | |
103 .bind( "blur.button", function() { | |
104 $( this ).removeClass( focusClass ); | |
105 }); | |
106 | |
107 if ( toggleButton ) { | |
108 this.element.bind( "change.button", function() { | |
109 self.refresh(); | |
110 }); | |
111 } | |
112 | |
113 if ( this.type === "checkbox" ) { | |
114 this.buttonElement.bind( "click.button", function() { | |
115 if ( options.disabled ) { | |
116 return false; | |
117 } | |
118 $( this ).toggleClass( "ui-state-active" ); | |
119 self.buttonElement.attr( "aria-pressed", self.element[0].checked ); | |
120 }); | |
121 } else if ( this.type === "radio" ) { | |
122 this.buttonElement.bind( "click.button", function() { | |
123 if ( options.disabled ) { | |
124 return false; | |
125 } | |
126 $( this ).addClass( "ui-state-active" ); | |
127 self.buttonElement.attr( "aria-pressed", true ); | |
128 | |
129 var radio = self.element[ 0 ]; | |
130 radioGroup( radio ) | |
131 .not( radio ) | |
132 .map(function() { | |
133 return $( this ).button( "widget" )[ 0 ]; | |
134 }) | |
135 .removeClass( "ui-state-active" ) | |
136 .attr( "aria-pressed", false ); | |
137 }); | |
138 } else { | |
139 this.buttonElement | |
140 .bind( "mousedown.button", function() { | |
141 if ( options.disabled ) { | |
142 return false; | |
143 } | |
144 $( this ).addClass( "ui-state-active" ); | |
145 lastActive = this; | |
146 $( document ).one( "mouseup", function() { | |
147 lastActive = null; | |
148 }); | |
149 }) | |
150 .bind( "mouseup.button", function() { | |
151 if ( options.disabled ) { | |
152 return false; | |
153 } | |
154 $( this ).removeClass( "ui-state-active" ); | |
155 }) | |
156 .bind( "keydown.button", function(event) { | |
157 if ( options.disabled ) { | |
158 return false; | |
159 } | |
160 if ( event.keyCode == $.ui.keyCode.SPACE || event.keyCode == $.ui.keyCode.ENTER ) { | |
161 $( this ).addClass( "ui-state-active" ); | |
162 } | |
163 }) | |
164 .bind( "keyup.button", function() { | |
165 $( this ).removeClass( "ui-state-active" ); | |
166 }); | |
167 | |
168 if ( this.buttonElement.is("a") ) { | |
169 this.buttonElement.keyup(function(event) { | |
170 if ( event.keyCode === $.ui.keyCode.SPACE ) { | |
171 // TODO pass through original event correctly (just as 2nd argument doesn't work) | |
172 $( this ).click(); | |
173 } | |
174 }); | |
175 } | |
176 } | |
177 | |
178 // TODO: pull out $.Widget's handling for the disabled option into | |
179 // $.Widget.prototype._setOptionDisabled so it's easy to proxy and can | |
180 // be overridden by individual plugins | |
181 this._setOption( "disabled", options.disabled ); | |
182 }, | |
183 | |
184 _determineButtonType: function() { | |
185 | |
186 if ( this.element.is(":checkbox") ) { | |
187 this.type = "checkbox"; | |
188 } else { | |
189 if ( this.element.is(":radio") ) { | |
190 this.type = "radio"; | |
191 } else { | |
192 if ( this.element.is("input") ) { | |
193 this.type = "input"; | |
194 } else { | |
195 this.type = "button"; | |
196 } | |
197 } | |
198 } | |
199 | |
200 if ( this.type === "checkbox" || this.type === "radio" ) { | |
201 // we don't search against the document in case the element | |
202 // is disconnected from the DOM | |
203 this.buttonElement = this.element.parents().last() | |
204 .find( "label[for=" + this.element.attr("id") + "]" ); | |
205 this.element.addClass( "ui-helper-hidden-accessible" ); | |
206 | |
207 var checked = this.element.is( ":checked" ); | |
208 if ( checked ) { | |
209 this.buttonElement.addClass( "ui-state-active" ); | |
210 } | |
211 this.buttonElement.attr( "aria-pressed", checked ); | |
212 } else { | |
213 this.buttonElement = this.element; | |
214 } | |
215 }, | |
216 | |
217 widget: function() { | |
218 return this.buttonElement; | |
219 }, | |
220 | |
221 destroy: function() { | |
222 this.element | |
223 .removeClass( "ui-helper-hidden-accessible" ); | |
224 this.buttonElement | |
225 .removeClass( baseClasses + " " + stateClasses + " " + typeClasses ) | |
226 .removeAttr( "role" ) | |
227 .removeAttr( "aria-pressed" ) | |
228 .html( this.buttonElement.find(".ui-button-text").html() ); | |
229 | |
230 if ( !this.hasTitle ) { | |
231 this.buttonElement.removeAttr( "title" ); | |
232 } | |
233 | |
234 $.Widget.prototype.destroy.call( this ); | |
235 }, | |
236 | |
237 _setOption: function( key, value ) { | |
238 $.Widget.prototype._setOption.apply( this, arguments ); | |
239 if ( key === "disabled" ) { | |
240 if ( value ) { | |
241 this.element.attr( "disabled", true ); | |
242 } else { | |
243 this.element.removeAttr( "disabled" ); | |
244 } | |
245 } | |
246 this._resetButton(); | |
247 }, | |
248 | |
249 refresh: function() { | |
250 var isDisabled = this.element.is( ":disabled" ); | |
251 if ( isDisabled !== this.options.disabled ) { | |
252 this._setOption( "disabled", isDisabled ); | |
253 } | |
254 if ( this.type === "radio" ) { | |
255 radioGroup( this.element[0] ).each(function() { | |
256 if ( $( this ).is( ":checked" ) ) { | |
257 $( this ).button( "widget" ) | |
258 .addClass( "ui-state-active" ) | |
259 .attr( "aria-pressed", true ); | |
260 } else { | |
261 $( this ).button( "widget" ) | |
262 .removeClass( "ui-state-active" ) | |
263 .attr( "aria-pressed", false ); | |
264 } | |
265 }); | |
266 } else if ( this.type === "checkbox" ) { | |
267 if ( this.element.is( ":checked" ) ) { | |
268 this.buttonElement | |
269 .addClass( "ui-state-active" ) | |
270 .attr( "aria-pressed", true ); | |
271 } else { | |
272 this.buttonElement | |
273 .removeClass( "ui-state-active" ) | |
274 .attr( "aria-pressed", false ); | |
275 } | |
276 } | |
277 }, | |
278 | |
279 _resetButton: function() { | |
280 if ( this.type === "input" ) { | |
281 if ( this.options.label ) { | |
282 this.element.val( this.options.label ); | |
283 } | |
284 return; | |
285 } | |
286 var buttonElement = this.buttonElement.removeClass( typeClasses ), | |
287 buttonText = $( "<span></span>" ) | |
288 .addClass( "ui-button-text" ) | |
289 .html( this.options.label ) | |
290 .appendTo( buttonElement.empty() ) | |
291 .text(), | |
292 icons = this.options.icons, | |
293 multipleIcons = icons.primary && icons.secondary; | |
294 if ( icons.primary || icons.secondary ) { | |
295 buttonElement.addClass( "ui-button-text-icon" + | |
296 ( multipleIcons ? "s" : ( icons.primary ? "-primary" : "-secondary" ) ) ); | |
297 if ( icons.primary ) { | |
298 buttonElement.prepend( "<span class='ui-button-icon-primary ui-icon " + icons.primary + "'></span>" ); | |
299 } | |
300 if ( icons.secondary ) { | |
301 buttonElement.append( "<span class='ui-button-icon-secondary ui-icon " + icons.secondary + "'></span>" ); | |
302 } | |
303 if ( !this.options.text ) { | |
304 buttonElement | |
305 .addClass( multipleIcons ? "ui-button-icons-only" : "ui-button-icon-only" ) | |
306 .removeClass( "ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary" ); | |
307 if ( !this.hasTitle ) { | |
308 buttonElement.attr( "title", buttonText ); | |
309 } | |
310 } | |
311 } else { | |
312 buttonElement.addClass( "ui-button-text-only" ); | |
313 } | |
314 } | |
315 }); | |
316 | |
317 $.widget( "ui.buttonset", { | |
318 options: { | |
319 items: ":button, :submit, :reset, :checkbox, :radio, a, :data(button)" | |
320 }, | |
321 | |
322 _create: function() { | |
323 this.element.addClass( "ui-buttonset" ); | |
324 }, | |
325 | |
326 _init: function() { | |
327 this.refresh(); | |
328 }, | |
329 | |
330 _setOption: function( key, value ) { | |
331 if ( key === "disabled" ) { | |
332 this.buttons.button( "option", key, value ); | |
333 } | |
334 | |
335 $.Widget.prototype._setOption.apply( this, arguments ); | |
336 }, | |
337 | |
338 refresh: function() { | |
339 this.buttons = this.element.find( this.options.items ) | |
340 .filter( ":ui-button" ) | |
341 .button( "refresh" ) | |
342 .end() | |
343 .not( ":ui-button" ) | |
344 .button() | |
345 .end() | |
346 .map(function() { | |
347 return $( this ).button( "widget" )[ 0 ]; | |
348 }) | |
349 .removeClass( "ui-corner-all ui-corner-left ui-corner-right" ) | |
350 .filter( ":first" ) | |
351 .addClass( "ui-corner-left" ) | |
352 .end() | |
353 .filter( ":last" ) | |
354 .addClass( "ui-corner-right" ) | |
355 .end() | |
356 .end(); | |
357 }, | |
358 | |
359 destroy: function() { | |
360 this.element.removeClass( "ui-buttonset" ); | |
361 this.buttons | |
362 .map(function() { | |
363 return $( this ).button( "widget" )[ 0 ]; | |
364 }) | |
365 .removeClass( "ui-corner-left ui-corner-right" ) | |
366 .end() | |
367 .button( "destroy" ); | |
368 | |
369 $.Widget.prototype.destroy.call( this ); | |
370 } | |
371 }); | |
372 | |
373 }( jQuery ) ); |