Ahora voy a explicar en parte como desarroll茅 algunas funcionalidades para los bloques de c贸digo que muestra el siguiente dise帽o:
Algo importante es entender como vamos a desarrolar la funcionalidad para que sea sencillo de reutilizar. En Jekyll tenemos archivos Markdown para escribir p谩ginas con un formato agradable y tambi茅n jekyll tiene los includes que es una forma efectiva de reutilizar bloques de c贸digo y contenido en diferentes partes de nuestro sitio web. En resumen la sintaxis que quiero lograr es parecido a lo siguiente:
1
2
3
4
5
{% include codeHeader.html %}
```js
const myvar = "hello world";
console.log(myvar);
```
Primero, necesitamos crear un archivo include que contendr谩 el fragmento de HTML para la cabecera o parte superior de los bloques de c贸digo. Para creamos el archivo codeHeader.html
en la carpeta de los includes:
1
touch _includes/codeHeader.html
1
type null > _includes/codeHeader.html
Vamos a empezar por el bot贸n para copiar al portapapeles. Para ello a帽adimos el siguiente fragmento al archivo:
Como estoy enfocado en desarrollar la funcionalidad, no voy a extender este art铆culo en cuanto a los estilos, eso quiz谩s lo comente en otro momento. Por ahora lo importante es entender que tenemos un bot贸n que llama o mejor dicho invoca a la funci贸n copyCode(this)
y esto es importante ya que vamos a estar programando esta funci贸n en javascript en otro archivo (esto es algo personal, ya que se podr铆a escribir el c贸digo de javascript en el mismo include entre etiquetas script
).
En otro archivo que voy a llamar copyClipboard.js
que podemos crear dentro de la carpeta assets en el proyecto:
1
touch assets/copyClipboard.js
1
type null > assets/copyClipboard.js
no olvidar incluir este script en el layout principal. Ej:
<script src="/fullstack-python/copyClipboard.js"></script>
Ahora, antes de continuar con ense帽ar el c贸digo, vamos a ver como se renderiza en el navegador cuando escribimos una p谩gina y usamos el include:
1
2
3
4
5
{% include codeHeader.html %}
```js
const myvar = "hello world";
console.log(myvar);
```
Como podemos observar, todos los elementos que corresponden al bloque de c贸digo, se generan a la misma altura que nuestro fragmento del include, lo que significa que para seleccionar a ese elemento hermano, podemos utilizar las propiedades del DOM en javascript para acceder a los elementos relacionados.
Entonces escribamos la funci贸n para copiar al portapapeles:
1
2
3
4
5
6
function copyCode(e) {
const parent = e.parentElement;
const code = parent.nextElementSibling.textContent;
window.navigator.clipboard.writeText(code.trim());
alert("Copiado!");
}
parentNode
: Para acceder al elemento padre.nextElementSibling
: Para obtener el siguiente hermano.previousElementSibling
: Para obtener el hermano anterior.querySelector
: Para seleccionar hermanos espec铆ficos utilizando selectores CSS.Ejemplo parentNode:
1
2
3
4
5
6
7
8
9
10
11
<div id="contenedor">
<p id="parrafo1">Soy el primer p谩rrafo.</p>
<p id="parrafo2">Soy el segundo p谩rrafo.</p>
<p id="parrafo3">Soy el tercer p谩rrafo.</p>
</div>
<script>
const parrafo2 = document.getElementById('parrafo2');
const padre = parrafo2.parentNode // Obtiene al padre (#contenedor)
console.log(padre)
</script>
Ejemplo nextElementSibling:
1
2
3
4
5
6
7
8
9
10
11
<div>
<p id="parrafo1">Soy el primer p谩rrafo.</p>
<p id="parrafo2">Soy el segundo p谩rrafo.</p>
</div>
<script>
const primerParrafo = document.getElementById('parrafo1');
const segundoParrafo = primerParrafo.nextElementSibling; // Selecciona el siguiente hermano
console.log(segundoParrafo.textContent); // Imprime: "Soy el segundo p谩rrafo."
</script>
window.navigator
:
window
es el objeto global en un entorno de navegador que representa la ventana del navegador.navigator
es una propiedad del objeto window
que proporciona informaci贸n sobre el navegador y su configuraci贸n.clipboard
:
clipboard
es una propiedad del objeto navigator
que permite interactuar con el portapapeles del sistema. Esta API permite leer y escribir datos en el portapapeles de manera program谩tica.writeText()
:
writeText()
es un m茅todo de la API del portapapeles que permite escribir texto en el portapapeles. Acepta un argumento: una cadena de texto que se desea copiar.code.trim()
:
code
es la variable que contiene el texto a copiar.trim()
es un m茅todo de cadena en JavaScript que elimina los espacios en blanco al principio y al final de la cadena.See the Pen copy-clipboard by EniDev911 (@EniDev911) on CodePen.