Greasy Fork

来自缓存

Greasy Fork is available in English.

Duolingo Avatar Uploader

Agrega un botón para subir una foto como avatar en Duolingo

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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.');
        }

    });

})();