Similar Posts
Añadir números de línea en highlight.js
Aprovechando la versión 1.2.0 de Snippet Block, comparto cómo añadir números de línea al código formateado por highlight.js.
El desarrollador del plugin pasa de añadir esta característica a la librería, lo cual me parece muy bien, que cada uno haga lo que quiera con su código. Pero como tampoco hay eventos o algo que permita añadir características, es necesario “hackear” la función antes de su uso.
document.addEventListener( 'DOMContentLoaded', () => {
const prevHighligth = window.hljs.highlightBlock;
window.hljs.highlightBlock = block => {
const newline = '<span class="sw_new_line"></span>';
// Replace all without regex
block.innerHTML = block.innerHTML
.split( newline )
.join( '' );
prevHighligth( block );
if ( block.classList.contains( 'sw_show_line_numbers' ) ) {
block.innerHTML = newline +
block
.innerHTML
.replace( /\n/g, `\n${ newline }` );
}
};
} );
¿Qué es lo que hace este código? Primero guarda el método original highlightBlock para usarlo posteriormente. Y luego se modifica el método para apadir una clase para mostrar los números de línea al principio del código y después de cada salto de línea.
Ahora toca explicar la parte CSS, para ello usaremos CSS counters.
pre code {
counter-reset: linenumber;
}
pre code .sw_new_line::before {
content: counter(linenumber, decimal-leading-zero);
counter-increment: linenumber;
padding-right: 15px;
font-size: 0.8em;
opacity: 0.6;
}
CSSViewer: visor de CSS para Firefox
CSSViewer es una extensión para Firefox que nos permite visualizar en una ventana los estilos que posee un elemento de la página web que estamos viendo. Muy útil para cuando desarrollamos o para cuando visitamos páginas que nos gustan y queremos destripar los estilos sin necesidad de meternos en el código fuente.
Un par de fallos sí que le veo:
- los iframes los trata como objecto, cuando podría profundizar en ellos, y los frames no sabe tratarlos, por ejemplo en la página de GMail, supongo que será porque tira del elemento body, el cual no existe en la página que contiene los frames (claro que esto es una suposición),
- el segundo fallo es que la ventana que muestra los estilos es demasiado Web 2.0, algo más anticuado hubiera quedado mejor, es demasiado grande y se sale de la pantalla y no sigue bien al ratón, por lo que a veces el ratón se posiciona encima de la ventana y obtiene los estilos de la ventana que muestra los estilos (un poco recursivo, ¿no?).
Salvo estas cosillas, una extensión que ya tengo instalada y que creo que me será muy útil.
Vía / Bartelme Design
Lista de recursos Javascript
Una gran lista de recursos que podemos necesitar para nuestros desarrollos o para aprender cosas nuevas sobre Javascript.
Tutoriales
- A (Re)-Introduction to JavaScript
- Eloquent JavaScript
- JavaScript (quirksmode.org)
- JavaScript Cake Tutorials and Scripts
- JavaScript Boot Camp Tutorial
- JavaScript Closures
- JavaScript in Ten Minutes
- JavaScript Tutorial
- JavaScript tutorial for the total non-programmer
- JavaScript/DHTML Tutorials
- Painless JavaScript Using Prototype
- Ten JavaScript Tools Everyone Should Have
- You think you know (JavaScript) but you have no idea
Colección de scripts
- Hot Scripts
- JavaScript Search
- JavaScript Scripts
- JavaScript Source
- Over 400+ free JavaScripts!
- Reusable Libraries And Objects
- The Yahoo! User Interface Library
Frameworks y librerÃas
- Ext JS – JavaScript Library
- JavaScript code library
- jQuery
- jsvalidate
- Mochikit
- overLIB
- Project: Bajax
- Prototype
- Open Rico
- script.aculo.us
- The Dojo Toolkit
- The Solvent
Técnicas
- BarelyFitz Tabs
- Behaviour : Using CSS selectors to apply JavaScript behaviours
- BSN AutoSuggest
- Drag & Drop Sortable Lists with JavaScript and CSS
- Edit in Place with JavaScript and CSS
- FD Sortable tables
- Flexible client-side table sorting
- flickrshow – Simple JavaScript slideshows for Flickr
- Form validation
- Highslide JS – JavaScript thumbnail viewer
- iPhoto-like image resizing using JavaScript
- JavaScript gallery and slideshow system
- JavaScript Tabifier automatically create an html tab interface
- JavaScript: DHTML Library, Drag & Drop for Images and Layers
- JDV Sortable tables
- Kryogenix Sortable tables
- Lightbox JS
- Livepipe Tabs
- moo.fx – The next small thing
- Mouse wheel programming in JavaScript
- overLIB Tooltips
- PlotKit – JavaScript Chart Plotting – liquidx
- Store JSON data in cookies
- Sorted tables
- TableKit
- ThickBox 2.1
- Tooltips, DHTML, JavaScript – BoxOver
Referencias
- CSS Properties to JavaScript Reference
- gotAPI/HTML – Instant search in HTML and other developer documentation
- JavaScript Cheat Sheet/
- JavaScript Reference
Herramientas
- Firebug – Web Development Evolved
- JSLint, The JavaScript Verifier
- RegexPal: JavaScript Regex Tester
- XML.ObjTree XML parser
70+ JavaScript Resources for Every Web Developer
VÃa / dzone
Javascript 1.7 en Firefox 2
Una de las nuevas caracterÃsticas que nos trae Firefox 2 es el soporte para Javascript 1.7. Entre las novedades que nos encontramos está:
- Generadores: una forma de ejecutar procesos iterativos, usando yield para “congelar” el valor de una variable y usando next() para realizar la llamada al siguiente estado.
- Iterators: en vez de usar for…in y for each…in, nos podemos crear un iterador, mediante Iterator(), para realizarlo de una forma más sencilla.
- Comprensión de arrays: una forma sencilla de inicializar el valor de arrays.
- Sentencia let: para modificar el alcance de variables para un bloque de código.
- Devolver varios valores: la posibilidad de que una función devuelva varios valores.
Más información
VÃa / SitePoint
Laboratorio: detectar parametros de la URL en Javascript
Algo bastante sencillo y que puede sernos útil es detectar los parámetros que se envían por URL para así modificar el comportamiento de nuestro Javascript, por ejemplo si se envía un parámetro o tiene cierto valor, se podría cargar un objeto o implementar una función.
El script sería el siguiente:
// Obtenemos la URL
var url = document.location.href;
// Nos quedamos con los parámetros
url = url.substring(url.lastIndexOf('?')+1);
// Dividimos los distintos parámetros
url = url.split('&');
// Almacenamos los parámetros en un array(param => valor)
var res = new Array();
for(var i=0; i
Si nuestra URL es amigable, no hay parámetros sino que se indican en la propia URL (http://servidor/metodo/accion/parametro/parametro), deberíamos hacer algo así:
//Obtenemos la Query String (URL - host)
var url = document.location.href;
url = url.substring(url.lastIndexOf(document.location.host)+1);
// Separamos mediante la barra (/)
var res = url.split('/');
Como se puede apreciar es muy sencillo, pero nos puede ser muy útil, sobre todo si queremos ganar en rendimiento y no cargar todo el js, que a veces no está muy optimizado y en todas las páginas se carga cuando a veces no sería necesario.
Novedades en Javascript 1.8
Mientras se sigue con el desarrollo de la versión 3 de Firefox, podemos ir viendo que novedades traerá la versión 1.8 de Javascript. Las novedades son muy interesantes, pero creo que necesitarán de un cambio de modo de pensar en Javascript, ya que es algo a lo que no estamos acostumbrados.
Notación Lambda
La notación Lambda nos permite declarar funciones que devuelvan datos sin necesidad de llaves ({..}), ni de devolver directamente el resultado con return.
Por ejemplo, la siguiente función:
function(x) { return x * x; }
pasarÃa a ser:
function(x) x * x
Generador de expresiones
Existente ya en Phyton, nos permite generar expresiones como arrays o matrices de forma rápida y elegante. Para una explicación con un poco de profundidad, el autor del artÃculo usa un solucionador de Sudokus para explicarnos paso a paso cómo funcionan. Quizás un ejemplo más sencillo sea el siguiente:
// Crea un array de 100 posiciones rellenas con cero
[ 0 for ( i in 100 ) ]
// Crea una matriz identidad de 10x10
[[ i == j ? 1 : 0 for ( i in 10 ) ] for ( j in 10 )]
También se pueden utilizar para comprimir arrays, por ejemplo quedarnos solo con los valores pares:
[i for (i in lista) if (i % 2 == 0)]
Reducción de arrays
Permite reducir iterativamente un array a un solo valor usando una función llamada de retorno.
La nomenclatura serÃa de la siguiente forma:
miArray.reduce( fn [, val_inicial] );
// La función serÃa de la siguiente manera
miArray.reduce(function(ultimo_valor, valor_actual){
return ultimo_valor + valor_actual;
});
Si combinamos los dos puntos anteriores, podemos obtener la suma de los cien primeros números de la siguiente manera:
[x for ( x in 100 )].reduce(function(a,b) a+b);
VÃa / dzone