Showdown Team Backup

Backup and restore Pokemon Showdown! teams in files

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey, το Greasemonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Violentmonkey για να εγκαταστήσετε αυτόν τον κώδικα.

θα χρειαστεί να εγκαταστήσετε μια επέκταση όπως το Tampermonkey ή το Userscripts για να εγκαταστήσετε αυτόν τον κώδικα.

You will need to install an extension such as Tampermonkey to install this script.

Θα χρειαστεί να εγκαταστήσετε μια επέκταση διαχείρισης κώδικα χρήστη για να εγκαταστήσετε αυτόν τον κώδικα.

(Έχω ήδη έναν διαχειριστή κώδικα χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(Έχω ήδη έναν διαχειριστή στυλ χρήστη, επιτρέψτε μου να τον εγκαταστήσω!)

// ==UserScript==
// @name         Showdown Team Backup
// @namespace    http://tampermonkey.net/
// @version      0.1
// @license MIT
// @description  Backup and restore Pokemon Showdown! teams in files
// @author       AnsonIsTheBest
// @match        https://play.pokemonshowdown.com/teambuilder*
// @grant        GM_download
// ==/UserScript==

(function() {
    'use strict';

    if (!localStorage.getItem('showdownBackupDialogDisabled')) {
        const response = confirm('感谢安装队伍导出插件!在队伍编辑器界面划到底可以找到备份所有队伍和导入备份的按钮!如果找不到按钮了请刷新界面并不要点进任何队伍详情。遇到问题请访问https://discord.gg/KAR3mEjRWe。\n\n\nThank you for installing Showdown Team Backup! Scroll down to the bottom in team builder to find the button to backup teams and import teams! If you cant find the button reload the page and scroll down directly without clicking on any teams. For any other issues visit https://discord.gg/KAR3mEjRWe');
        if (response === false) {
            localStorage.setItem('showdownBackupDialogDisabled', 'true');
        }
    }

    function backupTeams() {
        const teams = window.localStorage.getItem('showdown_teams');
        if (!teams) {
            alert('没有找到可以备份的队伍!\nNo teams found to backup!');
            return;
        }

        const date = new Date();
        const dateStr = date.getFullYear() + '-' +
                       ('0' + (date.getMonth() + 1)).slice(-2) + '-' +
                       ('0' + date.getDate()).slice(-2);
        const timeStr = ('0' + date.getHours()).slice(-2) + '-' +
                       ('0' + date.getMinutes()).slice(-2) + '-' +
                       ('0' + date.getSeconds()).slice(-2);
        const filename = `Teams_${dateStr}--${timeStr}.txt`;

        const blob = new Blob([teams], { type: 'text/plain' });
        GM_download({
            url: URL.createObjectURL(blob),
            name: filename,
            saveAs: true
        });
    }

    function restoreTeams() {
        const input = document.createElement('input');
        input.type = 'file';
        input.accept = '.txt';
        input.onchange = e => {
            const file = e.target.files[0];
            if (!file) return;

            const reader = new FileReader();
            reader.onload = function(e) {
                const teams = e.target.result;
                window.localStorage.setItem('showdown_teams', teams);
                alert('已导入完毕!重新加载中...\n\nTeams restored! Reloading page...');
                location.reload();
            };
            reader.readAsText(file);
        };
        input.click();
    }

    function addBackupButtons() {
        const teampane = document.querySelector('.teampane');
        if (!teampane) return;

        const backupButton = document.createElement('button');
        backupButton.className = 'button';
        backupButton.innerHTML = '<i class="fa fa-download"></i> Backup teams';
        backupButton.addEventListener('click', backupTeams);

        const restoreButton = document.querySelector('button[name="backup"]');
        if (restoreButton) {
            restoreButton.parentNode.insertBefore(backupButton, restoreButton);
        }

        const importButton = document.createElement('button');
        importButton.className = 'button';
        importButton.innerHTML = '<i class="fa fa-upload"></i> Import teams from backup';
        importButton.addEventListener('click', restoreTeams);
        restoreButton.parentNode.insertBefore(importButton, restoreButton.nextSibling);
    }

    window.addEventListener('load', addBackupButtons);
})();