chblogBlog personal de Cristian Hernandez

Class para Manejo de accesibilidad

En Actionscript, Accesibilidad by Cristian Hernández on the January 31st, 2006

Para facilitar el otorgamiento de propiedades de accesibilidad a los Movieclips y botones en Falsh decidí crear esta class, espero que les sea útil ;):

/**
* @class AccImplement
* @author Cristian Hernandez - www.cristianhenandez.org
* @version 0.2
* @description Otorga a un objeto (Movieclip o botón) propiedades de accesibilidad
* @usage   <pre>var myAcc:AccObject = new AccObject (_mc[,_desc,_short])</pre>
* @param   _mc  (Movieclip)   el movievlip
* @param   _mc  (Movieclip)   el movievlip
* @param   _desc (String)  texto descriptivo (opcional en el momento de la instanciación, puede ser seteado desde
* @param   _short (String)  shortcut ej : Ctrl+1.
*/

import mx.accessibility.AccImpl;
class org.cristianhernandez.AccObject extends mx.accessibility.AccImpl{
        /**
        * @property tabPos (Number) Variable de clase que registra el taborder, esta se autoincrementa
        * cada vez que se instancia la clase para que el tabIndex sea progresivo. Si se desea cambiar el tabindex
        * solo basta con instanciar la clase en distinto orden
        */

        private static var tabPos = 0;
        var func:Function;
        var _mc:Object;
        var _desc:String;
        var _short:String;
        var trgt:Object
        var EVENT_OBJECT_STATECHANGE:Number = 0x800a;
        function AccObject(_mc:Object,_desc:String,_short:String){
                this._mc = _mc;
                this._desc = (_desc == undefined)? "":_desc
                shortCut = (_short == undefined)? "":_short;
                this._mc._accProps = new Object();
                AccObject.tabPos++;
                setProps()
        }
        /**
        * @method set description
        * @description  setea la descripcion (name) del objeto, esto puede ser seteado en el momento
        * de instanciar la clase.
        * @usage <code>AccImplement.description = "Select to back"</code>
        * @returns void
        */

        public function set description (_desc:String){
                this._desc = _desc;
                setProps()
        }
        /**
        * @method set description
        * @description  setea el atajo del tecledo (shortCut) del objeto, esto puede ser seteado en el momento
        * de instanciar la clase
        * @usage <code>AccImplement.shortCut = "Ctrl+1"</code>
        * @returns void
        */

        public function set shortCut (_short:String){
                this._short = _short;
                this._mc.obj = new Object();
                this._mc.obj.trgt = this;
                this._mc.obj.onKeyDown = myKeyDown;
                Key.addListener(this._mc.obj);
                setProps()
        }
        /**
        * @method set keyHandler
        * @description  setea la funcion de que será llamada cuando se realice el atrajo del teclado, por defecto esta
        * funcion es el onRelease del boton, es decir que si no se llama este metodo cuando se ejecute el shortcut se
        * llamara el evento que tiene asignado en el onRelaese
        * Como parametro de esa funcion se pasa el objeto al que se le realizó el shortcut<br />
        * Ejemplo:<br />
        * <code>function onClickBtn(btn){
        *                     trace("Seleccion de boton nombre: "+btn._name)
        *              }
        * </code>
        * @param   func (Function)  funcion a ajecutar
        * @usage <code>AccImplement.keyHandler = myFunction</code>
        * @returns void
        */

        public function set keyHandler(func:Function){
                this.func = func;
        }
        /**
        * @method set myKeyDown
        * @description (private)
        * @returns void
        */

        private function myKeyDown():Void {
                with(this.trgt){
                        var code_number:Number = Key.getCode();
                        var short_array = _short.split("+");
                        var cond1:Boolean = short_array[0] == "Ctrl" and Key.isDown(Key.CONTROL);
                        var cond2:Boolean = Key.getCode() == ord(short_array[1]);
                        if(cond1 and cond2){
                                Selection.setFocus(_mc);
                                Accessibility.sendEvent(_mc, 0, EVENT_OBJECT_STATECHANGE,true );
                                if(func == undefined){
                                        //accion por defecto
                                        _mc.onRelease();
                                }else{
                                        // llamada a la function
                                        func.call(_mc)
                                }
                        }
                }
        }
        /**
        * @method setProps
        * @description (private) actualiza las propiedades de accesibilidad en el objeto
        * @returns void
        */

        private function setProps():Void{
                this._mc._accProps.shortcut = this._short;
                this._mc._accProps.forcesimple = true;
                this._mc._accProps.silent = false;
                this._mc.tabIndex = AccObject.tabPos;
                this._mc._accProps.name = this._desc;
                Accessibility.updateProperties();
        }
}

Archivos y un ejemplo de uso

Usabilidad: Presione aquí para leer el post

En Usabilidad by Cristian Hernández on the January 11th, 2006

Me parecen que van contra todos los criterios de usabilidad los mensajes como este:
Pulse sobre los puntos para navegar el sitio
Y todas sus variaciones como:
"Haga click aquí para entrar"
"Haga click sobre la foto par acerrar la ventana"
"Presione el botón azul para entrar a nuestro sitio"
"Click aquí"
"Pase el puntero de mouse por la foto para ver las opciones"

El diseño de un sitio debe ser lo suficientemente intuitivo para no tener que estar dándole órdenes al usuario que haga esta o tal cosa.

Lo que digo talvéz parezca obvio o cuestiones ya superadas en los nuevos sitios, pero sigo encontrándome con este tipo de cosas en muchos diseños nuevos.

Hogar, dulce hogar

En Personal by Cristian Hernández on the January 9th, 2006

Año nuevo, casa nueva y vida nueva, dicen
La ventana de mi nueva casa