Diff: STRATO-apps/wordpress_03/app/wp-includes/js/jquery/ui/button.js

Keine Baseline-Datei – Diff nur gegen leer.
Zur Liste
1 -
1 + /*!
2 + * jQuery UI Button 1.13.3
3 + * https://jqueryui.com
4 + *
5 + * Copyright OpenJS Foundation and other contributors
6 + * Released under the MIT license.
7 + * https://jquery.org/license
8 + */
9 +
10 + //>>label: Button
11 + //>>group: Widgets
12 + //>>description: Enhances a form with themeable buttons.
13 + //>>docs: https://api.jqueryui.com/button/
14 + //>>demos: https://jqueryui.com/button/
15 + //>>css.structure: ../../themes/base/core.css
16 + //>>css.structure: ../../themes/base/button.css
17 + //>>css.theme: ../../themes/base/theme.css
18 +
19 + ( function( factory ) {
20 + "use strict";
21 +
22 + if ( typeof define === "function" && define.amd ) {
23 +
24 + // AMD. Register as an anonymous module.
25 + define( [
26 + "jquery",
27 +
28 + // These are only for backcompat
29 + // TODO: Remove after 1.12
30 + "./controlgroup",
31 + "./checkboxradio",
32 +
33 + "../keycode",
34 + "../widget"
35 + ], factory );
36 + } else {
37 +
38 + // Browser globals
39 + factory( jQuery );
40 + }
41 + } )( function( $ ) {
42 + "use strict";
43 +
44 + $.widget( "ui.button", {
45 + version: "1.13.3",
46 + defaultElement: "<button>",
47 + options: {
48 + classes: {
49 + "ui-button": "ui-corner-all"
50 + },
51 + disabled: null,
52 + icon: null,
53 + iconPosition: "beginning",
54 + label: null,
55 + showLabel: true
56 + },
57 +
58 + _getCreateOptions: function() {
59 + var disabled,
60 +
61 + // This is to support cases like in jQuery Mobile where the base widget does have
62 + // an implementation of _getCreateOptions
63 + options = this._super() || {};
64 +
65 + this.isInput = this.element.is( "input" );
66 +
67 + disabled = this.element[ 0 ].disabled;
68 + if ( disabled != null ) {
69 + options.disabled = disabled;
70 + }
71 +
72 + this.originalLabel = this.isInput ? this.element.val() : this.element.html();
73 + if ( this.originalLabel ) {
74 + options.label = this.originalLabel;
75 + }
76 +
77 + return options;
78 + },
79 +
80 + _create: function() {
81 + if ( !this.option.showLabel & !this.options.icon ) {
82 + this.options.showLabel = true;
83 + }
84 +
85 + // We have to check the option again here even though we did in _getCreateOptions,
86 + // because null may have been passed on init which would override what was set in
87 + // _getCreateOptions
88 + if ( this.options.disabled == null ) {
89 + this.options.disabled = this.element[ 0 ].disabled || false;
90 + }
91 +
92 + this.hasTitle = !!this.element.attr( "title" );
93 +
94 + // Check to see if the label needs to be set or if its already correct
95 + if ( this.options.label && this.options.label !== this.originalLabel ) {
96 + if ( this.isInput ) {
97 + this.element.val( this.options.label );
98 + } else {
99 + this.element.html( this.options.label );
100 + }
101 + }
102 + this._addClass( "ui-button", "ui-widget" );
103 + this._setOption( "disabled", this.options.disabled );
104 + this._enhance();
105 +
106 + if ( this.element.is( "a" ) ) {
107 + this._on( {
108 + "keyup": function( event ) {
109 + if ( event.keyCode === $.ui.keyCode.SPACE ) {
110 + event.preventDefault();
111 +
112 + // Support: PhantomJS <= 1.9, IE 8 Only
113 + // If a native click is available use it so we actually cause navigation
114 + // otherwise just trigger a click event
115 + if ( this.element[ 0 ].click ) {
116 + this.element[ 0 ].click();
117 + } else {
118 + this.element.trigger( "click" );
119 + }
120 + }
121 + }
122 + } );
123 + }
124 + },
125 +
126 + _enhance: function() {
127 + if ( !this.element.is( "button" ) ) {
128 + this.element.attr( "role", "button" );
129 + }
130 +
131 + if ( this.options.icon ) {
132 + this._updateIcon( "icon", this.options.icon );
133 + this._updateTooltip();
134 + }
135 + },
136 +
137 + _updateTooltip: function() {
138 + this.title = this.element.attr( "title" );
139 +
140 + if ( !this.options.showLabel && !this.title ) {
141 + this.element.attr( "title", this.options.label );
142 + }
143 + },
144 +
145 + _updateIcon: function( option, value ) {
146 + var icon = option !== "iconPosition",
147 + position = icon ? this.options.iconPosition : value,
148 + displayBlock = position === "top" || position === "bottom";
149 +
150 + // Create icon
151 + if ( !this.icon ) {
152 + this.icon = $( "<span>" );
153 +
154 + this._addClass( this.icon, "ui-button-icon", "ui-icon" );
155 +
156 + if ( !this.options.showLabel ) {
157 + this._addClass( "ui-button-icon-only" );
158 + }
159 + } else if ( icon ) {
160 +
161 + // If we are updating the icon remove the old icon class
162 + this._removeClass( this.icon, null, this.options.icon );
163 + }
164 +
165 + // If we are updating the icon add the new icon class
166 + if ( icon ) {
167 + this._addClass( this.icon, null, value );
168 + }
169 +
170 + this._attachIcon( position );
171 +
172 + // If the icon is on top or bottom we need to add the ui-widget-icon-block class and remove
173 + // the iconSpace if there is one.
174 + if ( displayBlock ) {
175 + this._addClass( this.icon, null, "ui-widget-icon-block" );
176 + if ( this.iconSpace ) {
177 + this.iconSpace.remove();
178 + }
179 + } else {
180 +
181 + // Position is beginning or end so remove the ui-widget-icon-block class and add the
182 + // space if it does not exist
183 + if ( !this.iconSpace ) {
184 + this.iconSpace = $( "<span> </span>" );
185 + this._addClass( this.iconSpace, "ui-button-icon-space" );
186 + }
187 + this._removeClass( this.icon, null, "ui-wiget-icon-block" );
188 + this._attachIconSpace( position );
189 + }
190 + },
191 +
192 + _destroy: function() {
193 + this.element.removeAttr( "role" );
194 +
195 + if ( this.icon ) {
196 + this.icon.remove();
197 + }
198 + if ( this.iconSpace ) {
199 + this.iconSpace.remove();
200 + }
201 + if ( !this.hasTitle ) {
202 + this.element.removeAttr( "title" );
203 + }
204 + },
205 +
206 + _attachIconSpace: function( iconPosition ) {
207 + this.icon[ /^(?:end|bottom)/.test( iconPosition ) ? "before" : "after" ]( this.iconSpace );
208 + },
209 +
210 + _attachIcon: function( iconPosition ) {
211 + this.element[ /^(?:end|bottom)/.test( iconPosition ) ? "append" : "prepend" ]( this.icon );
212 + },
213 +
214 + _setOptions: function( options ) {
215 + var newShowLabel = options.showLabel === undefined ?
216 + this.options.showLabel :
217 + options.showLabel,
218 + newIcon = options.icon === undefined ? this.options.icon : options.icon;
219 +
220 + if ( !newShowLabel && !newIcon ) {
221 + options.showLabel = true;
222 + }
223 + this._super( options );
224 + },
225 +
226 + _setOption: function( key, value ) {
227 + if ( key === "icon" ) {
228 + if ( value ) {
229 + this._updateIcon( key, value );
230 + } else if ( this.icon ) {
231 + this.icon.remove();
232 + if ( this.iconSpace ) {
233 + this.iconSpace.remove();
234 + }
235 + }
236 + }
237 +
238 + if ( key === "iconPosition" ) {
239 + this._updateIcon( key, value );
240 + }
241 +
242 + // Make sure we can't end up with a button that has neither text nor icon
243 + if ( key === "showLabel" ) {
244 + this._toggleClass( "ui-button-icon-only", null, !value );
245 + this._updateTooltip();
246 + }
247 +
248 + if ( key === "label" ) {
249 + if ( this.isInput ) {
250 + this.element.val( value );
251 + } else {
252 +
253 + // If there is an icon, append it, else nothing then append the value
254 + // this avoids removal of the icon when setting label text
255 + this.element.html( value );
256 + if ( this.icon ) {
257 + this._attachIcon( this.options.iconPosition );
258 + this._attachIconSpace( this.options.iconPosition );
259 + }
260 + }
261 + }
262 +
263 + this._super( key, value );
264 +
265 + if ( key === "disabled" ) {
266 + this._toggleClass( null, "ui-state-disabled", value );
267 + this.element[ 0 ].disabled = value;
268 + if ( value ) {
269 + this.element.trigger( "blur" );
270 + }
271 + }
272 + },
273 +
274 + refresh: function() {
275 +
276 + // Make sure to only check disabled if its an element that supports this otherwise
277 + // check for the disabled class to determine state
278 + var isDisabled = this.element.is( "input, button" ) ?
279 + this.element[ 0 ].disabled : this.element.hasClass( "ui-button-disabled" );
280 +
281 + if ( isDisabled !== this.options.disabled ) {
282 + this._setOptions( { disabled: isDisabled } );
283 + }
284 +
285 + this._updateTooltip();
286 + }
287 + } );
288 +
289 + // DEPRECATED
290 + if ( $.uiBackCompat !== false ) {
291 +
292 + // Text and Icons options
293 + $.widget( "ui.button", $.ui.button, {
294 + options: {
295 + text: true,
296 + icons: {
297 + primary: null,
298 + secondary: null
299 + }
300 + },
301 +
302 + _create: function() {
303 + if ( this.options.showLabel && !this.options.text ) {
304 + this.options.showLabel = this.options.text;
305 + }
306 + if ( !this.options.showLabel && this.options.text ) {
307 + this.options.text = this.options.showLabel;
308 + }
309 + if ( !this.options.icon && ( this.options.icons.primary ||
310 + this.options.icons.secondary ) ) {
311 + if ( this.options.icons.primary ) {
312 + this.options.icon = this.options.icons.primary;
313 + } else {
314 + this.options.icon = this.options.icons.secondary;
315 + this.options.iconPosition = "end";
316 + }
317 + } else if ( this.options.icon ) {
318 + this.options.icons.primary = this.options.icon;
319 + }
320 + this._super();
321 + },
322 +
323 + _setOption: function( key, value ) {
324 + if ( key === "text" ) {
325 + this._super( "showLabel", value );
326 + return;
327 + }
328 + if ( key === "showLabel" ) {
329 + this.options.text = value;
330 + }
331 + if ( key === "icon" ) {
332 + this.options.icons.primary = value;
333 + }
334 + if ( key === "icons" ) {
335 + if ( value.primary ) {
336 + this._super( "icon", value.primary );
337 + this._super( "iconPosition", "beginning" );
338 + } else if ( value.secondary ) {
339 + this._super( "icon", value.secondary );
340 + this._super( "iconPosition", "end" );
341 + }
342 + }
343 + this._superApply( arguments );
344 + }
345 + } );
346 +
347 + $.fn.button = ( function( orig ) {
348 + return function( options ) {
349 + var isMethodCall = typeof options === "string";
350 + var args = Array.prototype.slice.call( arguments, 1 );
351 + var returnValue = this;
352 +
353 + if ( isMethodCall ) {
354 +
355 + // If this is an empty collection, we need to have the instance method
356 + // return undefined instead of the jQuery instance
357 + if ( !this.length && options === "instance" ) {
358 + returnValue = undefined;
359 + } else {
360 + this.each( function() {
361 + var methodValue;
362 + var type = $( this ).attr( "type" );
363 + var name = type !== "checkbox" && type !== "radio" ?
364 + "button" :
365 + "checkboxradio";
366 + var instance = $.data( this, "ui-" + name );
367 +
368 + if ( options === "instance" ) {
369 + returnValue = instance;
370 + return false;
371 + }
372 +
373 + if ( !instance ) {
374 + return $.error( "cannot call methods on button" +
375 + " prior to initialization; " +
376 + "attempted to call method '" + options + "'" );
377 + }
378 +
379 + if ( typeof instance[ options ] !== "function" ||
380 + options.charAt( 0 ) === "_" ) {
381 + return $.error( "no such method '" + options + "' for button" +
382 + " widget instance" );
383 + }
384 +
385 + methodValue = instance[ options ].apply( instance, args );
386 +
387 + if ( methodValue !== instance && methodValue !== undefined ) {
388 + returnValue = methodValue && methodValue.jquery ?
389 + returnValue.pushStack( methodValue.get() ) :
390 + methodValue;
391 + return false;
392 + }
393 + } );
394 + }
395 + } else {
396 +
397 + // Allow multiple hashes to be passed on init
398 + if ( args.length ) {
399 + options = $.widget.extend.apply( null, [ options ].concat( args ) );
400 + }
401 +
402 + this.each( function() {
403 + var type = $( this ).attr( "type" );
404 + var name = type !== "checkbox" && type !== "radio" ? "button" : "checkboxradio";
405 + var instance = $.data( this, "ui-" + name );
406 +
407 + if ( instance ) {
408 + instance.option( options || {} );
409 + if ( instance._init ) {
410 + instance._init();
411 + }
412 + } else {
413 + if ( name === "button" ) {
414 + orig.call( $( this ), options );
415 + return;
416 + }
417 +
418 + $( this ).checkboxradio( $.extend( { icon: false }, options ) );
419 + }
420 + } );
421 + }
422 +
423 + return returnValue;
424 + };
425 + } )( $.fn.button );
426 +
427 + $.fn.buttonset = function() {
428 + if ( !$.ui.controlgroup ) {
429 + $.error( "Controlgroup widget missing" );
430 + }
431 + if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" && arguments[ 2 ] ) {
432 + return this.controlgroup.apply( this,
433 + [ arguments[ 0 ], "items.button", arguments[ 2 ] ] );
434 + }
435 + if ( arguments[ 0 ] === "option" && arguments[ 1 ] === "items" ) {
436 + return this.controlgroup.apply( this, [ arguments[ 0 ], "items.button" ] );
437 + }
438 + if ( typeof arguments[ 0 ] === "object" && arguments[ 0 ].items ) {
439 + arguments[ 0 ].items = {
440 + button: arguments[ 0 ].items
441 + };
442 + }
443 + return this.controlgroup.apply( this, arguments );
444 + };
445 + }
446 +
447 + return $.ui.button;
448 +
449 + } );
450 +