Daniel Stig. of the Mt dev team made one for Mootools before the
jQuery one bit off his idea: http://code.google.com/p/qfocuser/

No need to copy the imitation when you got the orig!

On Jun 27, 10:40 am, Fábio Costa <[email protected]> wrote:
> element.get('tabindex') ouldnt work since this is a very buggy attribute
> theres an if on theyrr attr function if the attribute is tabindex, so you
> would need need to create a get for tabindex.
>
> this focusable thing is a very hard one, since you can define what is
> focusable or not on your browser... its not a generic thing.
>
> Element.Properties.tabindex = {
> get: function(){
> //this has been gotten from jquery.
> // elem.tabIndex doesn't always return the correct value when it hasn't been
> explicitly set
> //http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-...
>   var attributeNode = this.getAttributeNode( "tabIndex" );
>   return attributeNode && attributeNode.specified
>     ? attributeNode.value
>      : this.nodeName.match(/(button|input|object|select|textarea)/i)
>      ? 0
>       : this.nodeName.match(/^(a|area)$/i) && this.href
>       ? 0
>        : undefined;
>
> }
> };
>
> $extend(Selectors.Pseudo, {
>
> // i have not tested this
> focusable: function(element) {
>    var el = this,
>         nodeName = el.nodeName.toLowerCase(),
>         tabIndex = el.get('tabindex');
>    return (/input|select|textarea|button|object/.test(nodeName)
>      ? !el.disabled
>      : 'a' == nodeName || 'area' == nodeName
>        ? el.href || !isNaN(tabIndex)
>        : !isNaN(tabIndex))
>      // the element and all of its ancestors must be visible
>      // the browser may report that the area is hidden
>      && (el.offsetWidth > 0 || el.offsetHeight > 0);
>  },
>
> //im not sure if is() == match() but if think it is
>  tabbable: function(element) {
>    var el = $(this),
>          tabIndex = el.get('tabindex');
>    return (isNaN(tabIndex) || tabIndex >= 0) && el.match(':focusable');
>  }
>
> });
>
> Theres maybe something missing...
> If it works let us know...
>
> Fábio Miranda Costa
> Engenheiro de Computaçãohttp://meiocodigo.com
>
> On Fri, Jun 26, 2009 at 8:10 PM, Oskar Krawczyk 
> <[email protected]>wrote:
>
>
>
> > It would seem *$.attr(element, 'tabindex')* would be *
> > element.get('tabindex')* in Moo. I can't believe how
> > counter-self-explanatory jQ syntax is– "parents" (all of them?), "closest"
> > (closest parent or sibling? single or a set of elements) wtf...
>
> > Once you decipher how the functions work extend Pseudo.selectors by doing:
>
> > $extend(Selectors.Pseudo, {
> > tabable: function() {
> >  // this = element
> > }
> > });
>
> > On 26 Jun 2009, at 21:10, Rolf -nl wrote:
>
> > I could use the :tabbable and :focusable selector functions from
> > jQuery I spotted in jQuery UI,however I have 0 experience in their
> > language syntax. How would someone start porting stuff like this too a
> > MooTools extension?
>
> > The majority of code is self explaining, but I for instance what
> > $.attr does .... i dunno...
>
> > //Additional selectors
> > $.extend($.expr[':'], {
> >  data: function(elem, i, match) {
> >    return !!$.data(elem, match[3]);
> >  },
>
> >  focusable: function(element) {
> >    var nodeName = element.nodeName.toLowerCase(),
> >      tabIndex = $.attr(element, 'tabindex');
> >    return (/input|select|textarea|button|object/.test(nodeName)
> >      ? !element.disabled
> >      : 'a' == nodeName || 'area' == nodeName
> >        ? element.href || !isNaN(tabIndex)
> >        : !isNaN(tabIndex))
> >      // the element and all of its ancestors must be visible
> >      // the browser may report that the area is hidden
> >      && !$(element)['area' == nodeName ? 'parents' : 'closest']
> > (':hidden').length;
> >  },
>
> >  tabbable: function(element) {
> >    var tabIndex = $.attr(element, 'tabindex');
> >    return (isNaN(tabIndex) || tabIndex >= 0) && $(element).is
> > (':focusable');
> >  }
> > });

Reply via email to