Permalink
Browse files

Core: Move focusable into its own module

Ref #9647
  • Loading branch information...
1 parent 4916487 commit 475ccefd97ec24d76cfa6767c007501c14934ba6 @arschmitz arschmitz committed Jul 16, 2015
Showing with 69 additions and 35 deletions.
  1. +2 −1 tests/unit/core/selector.js
  2. +2 −34 ui/core.js
  3. +1 −0 ui/dialog.js
  4. +64 −0 ui/focusable.js
@@ -1,7 +1,8 @@
define( [
"jquery",
"ui/core",
- "ui/data"
+ "ui/data",
+ "ui/focusable"
], function( $ ) {
module( "core - selectors" );
View
@@ -22,6 +22,7 @@
"jquery",
"./data",
"./disable-selection",
+ "./focusable",
"./version"
], factory );
} else {
@@ -180,44 +181,11 @@ $.fn.extend( {
}
} );
-// selectors
-function focusable( element, hasTabindex ) {
- var map, mapName, img,
- nodeName = element.nodeName.toLowerCase();
- if ( "area" === nodeName ) {
- map = element.parentNode;
- mapName = map.name;
- if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
- return false;
- }
- img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
- return !!img && visible( img );
- }
- return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
- !element.disabled :
- "a" === nodeName ?
- element.href || hasTabindex :
- hasTabindex ) &&
- // the element and all of its ancestors must be visible
- visible( element );
-}
-
-function visible( element ) {
- return $.expr.filters.visible( element ) &&
- !$( element ).parents().addBack().filter( function() {
- return $.css( this, "visibility" ) === "hidden";
- } ).length;
-}
-
$.extend( $.expr[ ":" ], {
- focusable: function( element ) {
- return focusable( element, $.attr( element, "tabindex" ) != null );
- },
-
tabbable: function( element ) {
var tabIndex = $.attr( element, "tabindex" ),
hasTabindex = tabIndex != null;
- return ( !hasTabindex || tabIndex >= 0 ) && focusable( element, hasTabindex );
+ return ( !hasTabindex || tabIndex >= 0 ) && $.ui.focusable( element, hasTabindex );
}
} );
View
@@ -26,6 +26,7 @@
"./widget",
"./button",
"./draggable",
+ "./focusable",
"./mouse",
"./position",
"./resizable",
View
@@ -0,0 +1,64 @@
+/*!
+ * jQuery UI Focusable @VERSION
+ * http://jqueryui.com
+ *
+ * Copyright jQuery Foundation and other contributors
+ * Released under the MIT license.
+ * http://jquery.org/license
+ */
+
+//>>label: focusable
+//>>group: Core
+//>>description: Selects elements which can be focused.
+//>>docs: http://api.jqueryui.com/focusable-selector/
+
+( function( factory ) {
+ if ( typeof define === "function" && define.amd ) {
+
+ // AMD. Register as an anonymous module.
+ define( [ "jquery", "./version" ], factory );
+ } else {
+
+ // Browser globals
+ factory( jQuery );
+ }
+} ( function( $ ) {
+
+// selectors
+$.ui.focusable = function( element, hasTabindex ) {
+ var map, mapName, img,
+ nodeName = element.nodeName.toLowerCase();
+ if ( "area" === nodeName ) {
+ map = element.parentNode;
+ mapName = map.name;
+ if ( !element.href || !mapName || map.nodeName.toLowerCase() !== "map" ) {
+ return false;
+ }
+ img = $( "img[usemap='#" + mapName + "']" )[ 0 ];
+ return !!img && visible( img );
+ }
+ return ( /^(input|select|textarea|button|object)$/.test( nodeName ) ?
+ !element.disabled :
+ "a" === nodeName ?
+ element.href || hasTabindex :
+ hasTabindex ) &&
+ // the element and all of its ancestors must be visible
+ visible( element );
+};
+
+function visible( element ) {
+ return $.expr.filters.visible( element ) &&
+ !$( element ).parents().addBack().filter( function() {
+ return $.css( this, "visibility" ) === "hidden";
+ } ).length;
+}
+
+$.extend( $.expr[ ":" ], {
+ focusable: function( element ) {
+ return $.ui.focusable( element, $.attr( element, "tabindex" ) != null );
+ }
+} );
+
+return $.ui.focusable;
+
+} ) );

0 comments on commit 475ccef

Please sign in to comment.