diff --git a/README.md b/README.md index 469d4c7..d3935be 100644 --- a/README.md +++ b/README.md @@ -1,788 +1,19 @@ # Analizador de texto +![Pink Analizer](https://i.pinimg.com/originals/7f/f3/de/7ff3dea0df898128c5186ef218292d52.jpg) -## Índice -* [1. Consideraciones generales](#1-consideraciones-generales) -* [2. Preámbulo](#2-preámbulo) -* [3. Resumen del proyecto](#3-resumen-del-proyecto) -* [4. Funcionalidades](#4-funcionalidades) -* [5. Boilerplate](#5-boilerplate) -* [6. Criterios de aceptación mínimos del proyecto](#6-criterios-de-aceptación-mínimos-del-proyecto) -* [7. Pruebas](#7-pruebas) -* [8. Pistas, tips y lecturas complementarias](#8-pistas-tips-y-lecturas-complementarias) -* [9. Consideraciones para pedir tu Project Feedback](#9-consideraciones-para-pedir-tu-project-feedback) -* [10. Objetivos de aprendizaje](#10-objetivos-de-aprendizaje) -* [11. Funcionalidades opcionales](#11-funcionalidades-opcionales) +## Descripción📑 +Hola! en esta aplicación vamos a analizar el texto que escribas, se contarán los carácteres, números y palabras. -*** +## Uso🧐 +Escribe un texto y el lado izquierdo verás en tiempo real los valores analizados, si quieres analizar otro, puedes borrar todo lo escrito con el boton limpiar. -## 1. Consideraciones generales +## Funcionalidades🔎 +- **Recuento de palabras** +- **Recuento de caracteres** +- **Recuento de caracteres excluyendo espacios y signos de puntuación** +- **Recuento de números ingresados** +- **Suma total de números ingresados**- **Longitud media de las palabras (incluyendo signos de puntuación)** -* Este proyecto lo resolvemos de manera **individual**. -* El rango de tiempo estimado para completar el proyecto es de 2 a 4 Sprints. -* Enfócate en aprender y no solamente en "completar" el proyecto. -* Te sugerimos que no intentes saberlo todo antes de empezar a codear. - No te preocupes demasiado ahora por lo que _todavía_ no entiendas. - Irás aprendiendo. - -## 2. Preámbulo - -![Una lupa sobre texto de libro](https://github.com/Laboratoria/curriculum/assets/92090/2b45f653-69a5-4282-a65c-d34125c36113) - -_Credito: Foto de [ethan](https://unsplash.com/fr/@andallthings?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)_ -_en [Unsplash](https://unsplash.com/es/fotos/72NpWZJOskU?utm_source=unsplash&utm_medium=referral&utm_content=creditCopyText)_ - -Un analizador de texto es una aplicación para extraer información útil de un -texto utilizando diversas técnicas, como el procesamiento del lenguaje -natural (NLP), el aprendizaje automático (ML) y el análisis estadístico. -Estas aplicaciones pueden proporcionar una variedad de métricas que brindan -información básica sobre la longitud y la estructura del texto como por -ejemplo, el conteo de palabras, el conteo de caracteres, el conteo de -oraciones y el conteo de párrafos. Otras métricas incluyen el análisis -de sentimientos, que utiliza técnicas de NLP para determinar el tono -general positivo, negativo o neutral del texto, y el análisis de -legibilidad, que utiliza algoritmos para evaluar la complejidad y la -legibilidad del texto. - -En general, las aplicaciones de análisis de texto brindan información -valiosa y métricas sobre los textos que pueden ayudar a las usuarias a -tomar decisiones informadas y sacar conclusiones significativas. -Mediante el uso de estas herramientas de análisis, las usuarias pueden -obtener una comprensión más profunda de los textos. - -## 3. Resumen del proyecto - -En este proyecto crearás una aplicación web que servirá para que tu usuaria -pueda analizar un texto en el navegador mostrando una serie de indicadores y -métricas específicas sobre caracteres, letras, números, etc. Que hayan sido -enviadas como _input_ por ella. Lo harás utilizando HTML, CSS y JavaScript. - -## 4. Funcionalidades - -El listado de funcionalidades es el siguiente: - -1. La aplicación debe permitir a la usuaria ingresar un texto escribiéndolo -en un cuadro de texto. - -2. La aplicación debe calcular las siguientes métricas y actualizar el -resultado en tiempo real a medida que la usuaria escribe su texto: - - - **Recuento de palabras**: la aplicación debe poder contar el número de - palabras en el texto de entrada y mostrar este recuento a la usuaria - - **Recuento de caracteres**: la aplicación debe poder contar el número de - caracteres en el texto de entrada, incluidos espacios y signos de - puntuación, y mostrar este recuento a la usuaria. - - **Recuento de caracteres excluyendo espacios y signos de puntuación**: - la aplicación debe poder contar el número de caracteres en el texto de - entrada, excluyendo espacios y signos de puntuación, y mostrar este recuento - a la usuaria. - - **Recuento de números**: la aplicación debe contar cúantos números hay en - el texto de entrada y mostrar este recuento a la usuaria. - - **Suma total de números**: la aplicación debe sumar todos los números que - hay en el texto de entrada y mostrar el resultado a la usuaria. - - **Longitud media de las palabras**: la aplicación debe calcular la - longitud media de las palabras en el texto de entrada y mostrársela a la usuaria. - -3. La aplicación debe permitir limpiar el contenido de la caja de texto haciendo -clic en un botón. - -![Text analyzer demo](https://github-production-user-asset-6210df.s3.amazonaws.com/12631491/240650556-988dcd6f-bc46-473b-894c-888a66c9fe2d.gif "Text analyzer demo") - -## 5. Boilerplate - -La lógica del proyecto debe estar implementada completamente en JavaScript. En -este proyecto NO está permitido usar librerías o frameworks, solo JavaScript -puro también conocido como Vanilla JavaScript. - -Para comenzar este proyecto tendrás que hacer un _fork_ y _clonar_ este -repositorio que contiene un _boilerplate_ con tests (pruebas). Un _boilerplate_ -es la estructura básica de un proyecto que sirve como un punto de partida con -archivos y configuración inicial de dependencias y tests. - -El boilerplate que les damos contiene esta estructura: - -```text -./ -├── .babelrc -├── .editorconfig -├── .eslintrc -├── .gitignore -├── README.md -├── package.json -├── src -│ ├── analyzer.js -│ ├── index.html -│ ├── index.js -│ └── style.css -└── test - ├── .eslintrc - └── analyzer.spec.js -``` - -### Descripción de scripts / archivos - -* `README.md`: debes modificarlo para explicar la información necesaria para el - uso de tu aplicación - web, así como una introducción a la aplicación, su funcionalidad y decisiones - de diseño que tomaron. -* `.github/workflows`: esta carpeta contine la configuracion para la ejecution - de Github Actions. No debes modificar esta carpeta ni su contenido. -* `read-only/`: esta carpeta contiene las pruebas de criterios mínimos de - aceptación y end-to-end. No debes modificar esta carpeta ni su contenido. -* [`src/index.html`](./src/index.html): este es el punto de entrada a tu - aplicación. Este archivo debe contener tu HTML. -* [`src/style.css`](./src/style.css): este archivo debe contener las reglas de - estilo. Queremos que escribas tus propias reglas, por eso NO está permitido el - uso de frameworks de CSS (Bootstrap, Materialize, etc). -* [`src/analyzer.js`](./src/analyzer.js): acá debes implementar el objeto - `analyzer`, el cual ya está _exportado_ en el _boilerplate_. Este objeto - (`analyzer`) debe contener seis métodos: - - `analyzer.getWordCount(text)`: esta función debe retornar el recuento de - palabras que se encuentran en el parámetro `text` de tipo `string`. - - `analyzer.getCharacterCount(text)`: esta función debe retornar el recuento - de caracteres que se encuentran en el parámetro `text` de tipo `string`. - - `analyzer.getCharacterCountExcludingSpaces(text)`: esta función debe retornar - el recuento de caracteres excluyendo espacios y signos de puntuación que se - encuentran en el parámetro `text` de tipo `string`. - - `analyzer.getNumberCount(text)`: esta función debe retornar cúantos números - se encuentran en el parámetro `text` de tipo `string`. - - `analyzer.getNumberSum(text)`: esta función debe retornar la suma de todos - los números que se encuentran en el parámetro `text` de tipo `string`. - - `analyzer.getAverageWordLength(text)`: esta función debe retornar la longitud - media de palabras que se encuentran en el parámetro `text` de tipo `string`. - En este caso usa 2 dígitos decimales. - - Para ejemplo de uso de cada función recomendamos ver el archivo - [`test/analyzer.spec.js`](./test/analyzer.spec.js). - - _Nota: para simplificar las funcionalidades, definiremos las palabras como - un grupos de caracteres separados por espacios. Por ejemplo las palabras del - texto de entrada `¡Si, Tú puedes hacerlo!` son cuatro:_ - - - _`¡Si,`_ - - _`Tú`_ - - _`puedes`_ - - _`hacerlo!`_ - -* [`src/index.js`](./src/index.js): acá debes escuchar eventos del DOM, invocar - los métodos del objeto `analyzer` según sea necesario y actualizar el resultado - en la UI (interfaz de usuaria). -* [`test/analyzer.spec.js`](./test/analyzer.spec.js): este archivo contiene las -pruebas unitarias para los métodos del objeto `analyzer`. - -*** - -#### Deploy - -Hacer que los sitios estén publicados (o _desplegados_) para que usuarias de -la web puedan acceder a él es algo común en proyectos de desarrollo de software. - -En este proyecto, utilizaremos _Github Pages_ para desplegar nuestro sitio web. - -El comando `npm run deploy` puede ayudarte con esta tarea y también puedes - consultar su [documentación oficial](https://docs.github.com/es/pages). - -## 6. Criterios de aceptación mínimos del proyecto - -A continuación encontrarás los criterios de aceptación mínimos del proyecto -relacionados con cada objetivo de aprendizaje. - -### HTML - -* **Uso de HTML semántico** - - - [ ] La aplicación tiene un encabezado conformado por un - [`
`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/header) - que es padre de un - [`

`](https://developer.mozilla.org/en-US/docs/Web/HTML/Element/h1) - con texto `Analizador de texto`. Para que puedas practicar más, estos - elementos no pueden tener atributos `id`, ni `name`, ni `class`. - - - [ ] La aplicación usa un - [` + + + + + + + +
+

by: M Fernanda Castillo

+
+ \ No newline at end of file diff --git a/src/index.js b/src/index.js index 58ba255..6320014 100644 --- a/src/index.js +++ b/src/index.js @@ -1,3 +1,46 @@ -import analyzer from './analyzer.js'; +import analyzer from "./analyzer.js"; -//TODO: escuchar eventos del DOM e invocar los métodos del objeto `analyzer` \ No newline at end of file +const textarea = document.getElementsByName("user-input")[0]; +const buttonClean = document.getElementById('reset-button'); + +function updateValues(input){ + // WORD COUNT + const wordCount = analyzer.getWordCount(input); + const wordCountShow = document.querySelector('[data-testid="word-count"]'); + wordCountShow.innerHTML = `Palabras: ${wordCount}`; + + // CHARACTER COUNT + const characterCount = analyzer.getCharacterCount(input); + const characterCountShow = document.querySelector('[data-testid="character-count"]'); + characterCountShow.innerHTML = `Caracteres: ${characterCount}`; + + // CHARACTER COUNT EXCLUDING + const characterCountExcluding = analyzer.getCharacterCountExcludingSpaces(input); + const characterCountExcludingShow = document.querySelector('[data-testid="character-no-spaces-count"]'); + characterCountExcludingShow.innerHTML = `Caracteres sin espacios: ${characterCountExcluding}`; + + // AVERAGE WORDS + const averageWords = analyzer.getAverageWordLength(input); + const averageWordsShow = document.querySelector('[data-testid="word-length-average"]'); + averageWordsShow.innerHTML = `Promedio longitud: ${averageWords}`; + + // NUMBER COUNT + const numberCount = analyzer.getNumberCount(input); + const numberCountShow = document.querySelector('[data-testid="number-count"]'); + numberCountShow.innerHTML = `Numeros: ${numberCount}`; + + // NUMBER SUM + const numberSum = analyzer.getNumberSum(input); + const numberSumShow = document.querySelector('[data-testid="number-sum"]'); + numberSumShow.innerHTML = `Suma de los numeros: ${numberSum}`; +} + +textarea.addEventListener("input", function () { + const input = textarea.value; + updateValues(input); +}); + +buttonClean.addEventListener('click', function(){ + textarea.value=''; + updateValues(''); +}); diff --git a/src/style.css b/src/style.css index e69de29..69b18b8 100644 --- a/src/style.css +++ b/src/style.css @@ -0,0 +1,123 @@ +body{ + /* background: rgb(129,121,178); + background: linear-gradient(0deg, rgba(129,121,178,1) 0%, rgba(98,92,144,1) 5%, rgba(25,25,63,1) 74%); */ + background-image: url('./image/bg-city.gif'); + background-repeat: no-repeat; + background-size: cover; + + font-family: "Podkova", serif; + + display: grid; + place-content: center; + min-height: 100vh; +} +section{ + padding: 2rem 5rem; + + border-radius: 30px; + + background-color: rgba(181, 163, 196, 0.475); + backdrop-filter: blur(8px); +} +header{ + text-align: center; +} + +h1{ + font-family: "Podkova", serif; + font-weight: 700; + font-size: 4rem; + color: #e8edcc; +} + +ul{ + display: flex; + flex-direction: column; + gap: 1rem; + padding: 0; + margin: 0; +} + +.analizer-content-list{ + list-style-type: none; + + color: #D25285; + font-size: 20px; + font-weight: 700; + + display: flex; + align-items: center; + + background-color: rgba(25, 25, 63, 0.738); + padding: 8px 15px; + width: 250px; + min-height: 50px; + + border-radius: 20px; +} + +textarea[name="user-input"]{ + min-width: 450px; + min-height: 300px; + + + background-color: rgba(223, 214, 239, 0.563); + + background-image: url('../image/pp-city.png'); + background-repeat: no-repeat; + background-size: 60%; + background-position: 230px 150px; + + + border-radius: 32px; + border-width: 4px; + border-color: #D25285; + + padding: 2rem; + color: #19193f; + font-size: 24px; + font-family: "Patrick Hand"; + font-weight: 700; + + outline: none; + resize: none; + caret-color: #19193f; +} + +#reset-button{ + text-align: center; + width: 12rem; + padding: 8px; + + font-family: "Patrick Hand"; + font-size: 32px; + color: #fdf9ff; + + margin-top: 2rem; + border-radius: 32px; + border-width: 0; + cursor: pointer; + + background-color: #ff68a4; +} + +#reset-button:active{ + background: #E6B861; +} + +footer{ + text-align: end; + color: #f7eaee; +} + +#analizer-content{ + display: flex; + flex-direction: row; + gap: 2rem; +} +#analizer-input{ + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; +} \ No newline at end of file