Greasy Fork is available in English.
Agrega un botón para subir una foto como avatar en Duolingo
// ==UserScript==
// @name Duolingo Avatar Uploader
// @namespace http://yournamespace.com
// @version 0.1
// @description Agrega un botón para subir una foto como avatar en Duolingo
// @author Your Name
// @license MIT
// @match https://www.duolingo.com/settings/avatar
// @grant none
// ==/UserScript==
(function() {
'use strict';
// Esperar a que la página esté completamente cargada
window.addEventListener('load', function() {
// Función para manejar la carga de la imagen
function handleImageUpload(event) {
const file = event.target.files[0]; // Obtener el archivo seleccionado
if (file) {
const formData = new FormData(); // Crear objeto FormData
formData.append('avatar', file); // Agregar archivo al FormData
// Enviar la imagen al servidor
fetch('https://www.duolingo.com/api/1/avatar', {
method: 'POST',
body: formData
})
.then(response => {
if (response.ok) {
console.log('Imagen subida exitosamente');
// Recargar la página para ver el avatar actualizado
window.location.reload();
} else {
console.error('Error al subir la imagen');
alert('Hemos tenido problemas al procesar el envío. Por favor, inténtalo de nuevo.');
}
})
.catch(error => {
console.error('Error al subir la imagen:', error);
alert('Hubo un error al subir la imagen. Por favor, inténtalo de nuevo.');
});
}
}
// Encontrar el contenedor donde quieres agregar el botón (ajusta el selector según tu necesidad)
const avatarSettingsContainer = document.querySelector('.avatar-settings-container');
if (avatarSettingsContainer) {
// Crear un botón personalizado para subir la imagen
const uploadButton = document.createElement('button');
uploadButton.textContent = 'Subir Imagen'; // Texto del botón
uploadButton.addEventListener('click', function() {
// Crear un input de tipo file al hacer clic en el botón
const fileInput = document.createElement('input');
fileInput.type = 'file'; // Establecer el tipo como 'file'
fileInput.accept = 'image/*'; // Permitir solo archivos de imagen
fileInput.style.display = 'none'; // Ocultar el input de forma inicial
// Escuchar eventos de cambio en el input de tipo file
fileInput.addEventListener('change', handleImageUpload);
// Simular clic en el input de tipo file para abrir el selector de archivos
fileInput.click();
});
// Agregar el botón al contenedor
avatarSettingsContainer.appendChild(uploadButton);
} else {
console.error('No se encontró el contenedor para agregar el botón.');
}
});
})();