Mostrando entradas con la etiqueta html5. Mostrar todas las entradas
Mostrando entradas con la etiqueta html5. Mostrar todas las entradas

agregar tags html dinamicamente en un div con html5 y javascript puro - sin plugins

Si queremos dejar de usar los a veces pesados wyswyg, o textareas con opciones de edicion de texto que muchas veces ni necesitamos, les presento el codigo con que lo hice posible :

html 


<input type="button" value="Paste HTML" onclick="cargar();">

<div id="test" contenteditable="true">
    Here is some nice text
</div>

javascript 


function pasteHtmlAtCaret(html) {
    var sel, range;
    if (window.getSelection) {
        // IE9 and non-IE
        sel = window.getSelection();
        if (sel.getRangeAt && sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();

            // Range.createContextualFragment() would be useful here but is
            // non-standard and not supported in all browsers (IE9, for one)
            var el = document.createElement("div");
            el.innerHTML = html;
            var frag = document.createDocumentFragment(), node, lastNode;
            while ( (node = el.firstChild) ) {
                lastNode = frag.appendChild(node);
            }
            range.insertNode(frag);
            
            // Preserve the selection
            if (lastNode) {
                range = range.cloneRange();
                range.setStartAfter(lastNode);
                range.collapse(true);
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    } else if (document.selection && document.selection.type != "Control") {
        // IE < 9
        document.selection.createRange().pasteHTML(html);
    }
}
function cargar(){
    var inn = '<iframe width="560" height="315" src="//www.youtube.com/embed/tlUVVGCdOiQ" frameborder="0" allowfullscreen></iframe>';
document.getElementById('test').focus(); 
    pasteHtmlAtCaret(inn);
}

ver demo aqui http://jsfiddle.net/fenve/8WLNY/

Jquery nuevos eventos moviles html5

TUTORIAL JQUERY PARA MOVIL
     Nuevos eventos
    Ya hemos hablado del evento "mobileinit", que nos permite utilizar JQuery
    mobile cuando este ya está disponible para ser utilizado. Luego tenemos
    nuevos eventos, por ejemplo para poder manejar gestos, que podemos
    aplicar a todo el documento o a algún elemento en particular, por ejemplo
    podríamos tener una zona de eventos y vía JQuery le podemos enlazar un
    nuevo evento, por ejemplo el evento "tap", que en realidad se parece al
    evento "click" (es la acción de tocar con el dedo una zona de la pantalla):
    $("zona").bind("tap", function() {
    // acción de tocar con el dedo
  });
    El evento "taphold" tambien conocido como Long Press es otro evento de
    gestos que es, tocar y mantener presionado durante unos instantes, por
    ejemplo para mostrar un menú. Este evento equivale a hacer click con
    el botón derecho del ratón en un ordenador personal:
    $("zona").bind("taphold", function() {
    // acción de tocar con el dedo y mantener presionado
  });
    Luego tenemos eventos como "swipeLeft" o "swipeRight", que nos permite
    la acción con un gesto de derecha a izquierda o a la inversa de pasar de
    página, mostrar una foto etc:
    $("zona").bind("swipeLeft", function() {
    // acción de tocar y desplazar con el dedo hacia la izquierda
  });
    $("zona").bind("swipeRight", function() {
    // acción de tocar y desplazar con el dedo hacia la derecha
  });
    Ademas de eventos de gestos, tenemos otros eventos que se conocen
    como eventos de mouse virtuales. Hay equipos móviles que son táctiles
    pero no poseen eventos de TOUCH, por lo que tendríamos un problema
    de compatibilidad, pero por suerte JQuery mobile nos ofrece nuevos
    eventos, que se pueden enlazar con métodos como ".bind" o ".live" .
    Por ejemplo "vclick" lo que hace es emular un click o un touch, y se
    ejecuta dependiendo de la compatibilidad del equipo, si el equipo
    soporta touch va a usar eventos de touch para que sea más rápido, 
    si solamente soporta eventos de click lo va a hacer con click.
    Y así como tenemos "vclick" también tenemos:
     "vmousecancel", "vmousedown", "vmousemove"
     "vmouseout", "vmouseover", "vmouseup" :
    $("zona").bind("vclick", function() {
    // emula eventos touch o click, depende compatibilidad
  });
    También existen eventos de orientación. Con estos eventos podemos
    detectar por ejemplo, cuando el usuario cambia la orientación del
    equipo, cuando pasa de estar de posición horizontal a vertical o a la
    inversa:
    $(document).bind("orientationchange", function() {
    // evento de orientación, detecta la posición del equipo
  });
    O eventos de scroll, aunque tienen el problema de que en los móviles
    normalmente hay varias cosas que realizar con scroll. Lo primero
    que sucede con el scroll es que este tiene arrastre con el dedo para
    el desplazamiento, y cuando dejamos de hacer scroll y soltamos hay
    un tiempo más de desplazamiento, incluso a veces puede haber
    un rebote. Por tanto si capturamos en el scroll, se ejecutará cuando
    finalice toda la acción y a lo mejor nosotros queremos que se ejecute
    cuando apenas se ha dejado de hacer scroll, aunque todavía tenga
    desplazamiento. JQuery mobile ofrece eventos como "scrollstart",
    que es cuando comienza el scroll, o "scrollstop" que es cuando
    realmente termina la animación del scroll:
    $(document).bind("scrollstart", function() {
    // evento de scroll al inicio del mismo
  });
    $(document).bind("scrollstop", function() {
    // evento de scroll al finalizar él mismo totalmente 
  });
    Y por supuesto tenemos eventos de página. Recordemos que en
    JQuery mobile tenemos un elemento que representa a la página:
    <div data-role="page" id="pagina1">
    // contenido de la página
  </div>
    si este elemento tiene un identificador podemos capturar eventos
    de página, que los hay de varios tipos. El más importante es
    cuando la página está completamente cargada, es decir, está
    lista en pantalla para poder hacer algo: "pageinit", y este debería
    ser nuestro lugar predilecto para escribir código JavaScript que
    va a manipular elementos de esa página: 
    $(document).bind("pageinit", function() {
    // evento para manipular elementos de la página cuando está cargada 
  });
    Luego tenemos eventos que tienen que ver con la carga de la página
    cuando esta se carga vía Ajax, es decir, eventos de página externa.
    Tenemos el evento "pageload" que es cuando la página ya se cargó,
    alguno más avanzado como "pagebeforeload" que es antes de cargarse,
    o "pageloadfailed" que es cuando falla la carga de página y se puede
    aplicar a una página en particular o a todas:
    $("pagina1").bind("pageinit", function() {
    // evento a ejecutar cuando está cargada la página
  });
    $(document).bind("pageloadfailed", function() {
    alert("Ha fallado la carga de la página"); 
  });
    También tenemos eventos de cambio, que tienen que ver con una página
    en particular normalmente, por ejemplo "pagebeforechange" , que se
    ejecuta antes de que la página haga algún cambio, es decir, pasar de
    una página a otra a través de una transición, y tenemos "pagechange"
    que se ejecuta después del cambio:
    $("pagina1").bind("pagebeforechange", function() {
    // evento a ejecutar antes del cambio de la página
  });
    $("pagina1").bind("pagechange", function() {
    // evento a ejecutar después del cambio de la página
  });
    Y Hay otros que tienen que ver con la transición, con el efecto, con la
    animación, y son eventos que nos permiten hacer algo antes o después
    de que la animación se ejecute:
    $("pagina1").bind("pagebeforeshow", function() {
    // evento a ejecutar antes de que se muestre "pagina1"
  });
    $("pagina1").bind("pageshow", function() {
    // evento a ejecutar cuando "pagina1" ya se ha mostrado
  });
    $("pagina1").bind("pagehide", function() {
    // evento a ejecutar cuando desaparezca "pagina1"
  });
    $("pagina1").bind("pagebeforehide", function() {
    // evento a ejecutar antes de que desaparezca "pagina1"
  });
    $("pagina1").bind("pageremove", function() {
    // evento a ejecutar antes de que se salga "pagina1" del DOM
  });
    Por último vamos a hablar de eventos de layout, por ejemplo el evento
    "updatelayout". Hay algunos controles, por ejemplo de elementos
    colapsables que lo que hacen es modificar el tamaño de la página.
    Podemos capturar este evento para darnos cuenta que en realidad se
    ha actualizado el diseño de la página o si queremos hacer algo al
    respecto:
    $(document).bind("updatelayout", function() {
    // evento a ejecutar al modificarse el tamaño de una página
  });
    O "animationComplete" que se ejecuta cuando una animación de CSS
    ha finalizado:
    $(document).bind("animationComplete", function() {
    // evento a ejecutar cuando terminen las animaciones CSS

  });


RESUMEN

  <head>
      <script src="jquery_mobile/jquery.js"></script>
      <script src="micodigo.js"></script>
      <script src="jquery.mobile-1.0.min.js"></script>
    </head>

Código del nuevo documento: micodigo.js

$(document).bind("mobileinit", function() {

    // Código de inicio para JQuery mobile

  $.mobile.ajaxEnabled = false;
  $.mobile.defaultPageTransition = "slideup";
  $.mobile.defaultDialogTransition = "flip";
  $.mobile.loadingMessage = "Por favor espere...";
  $.mobile.pageLoadErrorMessage = "No se ha podido cargar la página";

    // Eventos de gestos

  $("zona").bind("tap", function() {
  });

  $("zona").bind("taphold", function() {
  });

  $("zona").bind("swipeleft", function() {
  });

  $("zona").bind("swiperight", function() {
  });

    // Eventos de mouse virtuales

  $("zona").bind("vclick", function() {
  });

    // Eventos de orientación

  $(document).bind("orientationchange", function() {
  });

    // Eventos de scroll

  $(document).bind("scrollstart", function() {
  });

  $(document).bind("scrollstop", function() {
  });

    // Eventos de página

  $("pagina1").bind("pageinit", function() {
  });

    // Eventos de página externa

  $(document).bind("pageloadfailed", function() {
      alert("Falló la carga de la página");
  });

  $("pagina1").bind("pagechange", function() {
  });

  $("pagina1").bind("pageshow", function() {
  });

  $("pagina1").bind("pagehide", function() {
  });

    // Eventos layout

  $(document).bind("updatelayout", function() {
  });

  $(document).bind("animacionComplete", function() {
  });

});


Utilicemos PushState()

Querido  pushState( )


Para conseguir la mejor experiencia de navegación posible uno de los recursos que utilizamos es la precarga o caché de diferentes secciones de nuestras web. Con esto conseguimos que la transición entre dichas secciones no conlleve una recarga en el navegador, sino que aparezca y oculte de forma inmediata.
De igual forma, utilizamos AJAX allá donde lo consideramos necesario para reducir en lo máximo posible los tiempos de espera del usuario.
ajax2
Todo esto es muy bonito, y se lleva utilizando desde hace bastantes años, son técnicas básicas que cualquier desarrollador web habrá utilizado en infinidad de ocasiones pero conlleva un problema inherente: nuestros contenidos cambian pero nuestra url en la barra del navegador permanece inalterada.
¿Cuál es el problema entonces? Pues sencillamente que esos contenidos dinámicos serán inaccesibles desde una url determinada, de tal forma que para llegar a ellos tendremos que ejecutar la lógica necesaria en nuestra aplicación ya sea un botón, enlace o cualquier forma de evento que se nos haya ocurrido siendo, por tanto, imposible compartir directamente esa sección que tanto nos interesa, o incluso siendo invisible para los motores de indexación de moda (aka Google). Esto rompe con la filosofía de la web, pues con una misma URL tendremos diferentes contenidos, según las acciones que llevemos a cabo. Debemos intentar reducir al mínimo este comportamiento.
Afortunadamente, y para ello es este post, tenemos una solución bastante elegante y poco intrusiva: El método pushState().
PushState() admite 3 parámetros, el primero es un objeto JS que podemos asociar en el historial con los datos que nos interesen, el segundo es el título que queremos poner en nuestra página (de momento no lo acepta casi ningún navegador, pero siempre podemos utilizar document.title), y el tercero sería la propia URL que queremos que aparezca en nuestro navegador. Con la URL bastaría si no necesitamos asociar datos a cada paso en el historial.
push
De esta forma, asociando pushState a nuestra carga de datos AJAX, o cualquier cambio dinámico de contenido, podemos establecer una URL diferente para cada caso. Obviamente, debemos de tratar esas url y mostrar al usuario el contenido dinámico apropiado en caso de que acceda directamente desde la URL que hemos generado.
Para muestra un botón, podéis ver un ejemplo en nuestra web comercial de TwinPush, en la sección características. Podemos cambiar entre las diferentes ‘features‘ sin carga de datos entre ellas, sin embargo, la URL si que está cambiando por si necesitamos compartir una característica determinada.
Podremos acompañar al uso de pushState con el evento onpopState. Este evento detecta un cambio en nuestro historial (por ejemplo al presionar el botón ‘Back’ en nuestro navegador). Con este evento, además, obtendremos una copia del objeto que utilizamos en el pushState (si es que se lo llegamos a indicar). Este evento es muy útil para cuando queremos navegar hacia atrás o adelante en nuestro historial generado por pushStates.
Con estas herramientas ya no tenemos excusa para que nuestro contenido dinámico no genere sus propias URL, y de esta forma mejorar la accesibilidad de nuestra web.

Detectar dispositivo movil / Mobile device detection Javascript

Detectar si nos visitan desde un aplicativo movil 

creamos detected_movil.js y pegamos lo siguiente :


var esMovil = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i);
    },
  otro: function() {
    return navigator.userAgent.match(/Mobile/i);
  },
    cualquiera: function() {
        dato = esMovil.Android() || esMovil.BlackBerry() || esMovil.iOS() || esMovil.Opera() || esMovil.Windows() || esMovil.otro();
        return dato;
    }
};


en el html que deseamos detectar lo especificado añadimos el siguiente codigo js:

<script type='text/javascript' src='js/detected_movil.js'></script>
<script>
$(document).ready(function() {

    if (esMovil.cualquiera()) {
    //acciones si es movil
}
</script>

CommentFB