GreasyFork优化

自动登录账号、快捷寻找自己库被其他脚本引用、更新自己的脚本列表、库、优化图片浏览、美化页面、Markdown复制按钮

< Feedback on GreasyFork优化

Review: Good - script works

§
Posted: 2024-09-25

好同志,求添加脚本的设置项同步到GitHub 。不然每次都需要自己复制到脚本管理器里面。

const panelData = GM_getValue("GM_Panel", {})
const jsonData = JSON.stringify(panelData, null, 2)
const GistManager = {
    githubToken: null,
    description: null,
    init: function (token, description) {
        this.githubToken = token
        this.description = description || "Default Gist Description"
    },
    // 查找 Gist 根据描述
    findGistByDescription: function (callback) {
        const url = 'https://api.github.com/gists'
        GM_xmlhttpRequest({
            method: "GET",
            url: url,
            headers: {
                "Authorization": `token ${this.githubToken}`,
                "Content-Type": "application/json"
            },
            onload: function (response) {
                if (response.status === 200) {
                    const gists = JSON.parse(response.responseText)
                    for (let gist of gists) {
                        if (gist.description === GistManager.description) {
                            console.log("找到匹配的 Gist:", gist.html_url)
                            return callback(gist.id)
                        }
                    }
                    callback(null)
                } else {
                    console.error("获取 Gist 列表失败:", response.responseText)
                    callback(null)
                }
            }
        })
    },
    // 上传或更新 Gist
    uploadToGist: function (filename, content) {
        this.findGistByDescription((gistId) => {
            if (gistId) {
                this.updateGist(gistId, filename, content)
            } else {
                this.createGist(filename, content)
            }
        })
    },
    // 创建新的 Gist
    createGist: function (filename, content) {
        const url = 'https://api.github.com/gists'
        const data = {
            "description": this.description,
            "public": true,
            "files": {
                [filename]: {
                    "content": content
                }
            }
        }
        GM_xmlhttpRequest({
            method: "POST",
            url: url,
            headers: {
                "Authorization": `token ${this.githubToken}`,
                "Content-Type": "application/json"
            },
            data: JSON.stringify(data),
            onload: function (response) {
                if (response.status === 201) {
                    const responseData = JSON.parse(response.responseText)
                    console.log("Gist 创建成功:", responseData.html_url)
                } else {
                    console.error("Gist 创建失败:", response.responseText)
                }
            }
        })
    },
    downloadGistAsJson: function (filename) {
        // 查找与描述匹配的 Gist
        this.findGistByDescription((gistId) => {
            if (!gistId) {
                console.error("未找到匹配的 Gist")
                return
            }
            const url = `https://api.github.com/gists/${gistId}`
            GM_xmlhttpRequest({
                method: "GET",
                url: url,
                headers: {
                    "Authorization": `token ${this.githubToken}`,
                    "Content-Type": "application/json"
                },
                onload: function (response) {
                    if (response.status === 200) {
                        const gistData = JSON.parse(response.responseText)
                        const fileContent = gistData.files[filename].content
                        const parsedJson = JSON.parse(fileContent)
                        GM_setValue("GM_Panel", parsedJson)
                    } else {
                        console.error("下载 Gist 失败:", response.responseText)
                    }
                }
            })
        })
    },
    // 更新已有的 Gist
    updateGist: function (gistId, filename, content) {
        const url = `https://api.github.com/gists/${gistId}`
        const data = {
            "files": {
                [filename]: {
                    "content": content
                }
            }
        }
        GM_xmlhttpRequest({
            method: "PATCH",
            url: url,
            headers: {
                "Authorization": `token ${this.githubToken}`,
                "Content-Type": "application/json"
            },
            data: JSON.stringify(data),
            onload: function (response) {
                if (response.status === 200) {
                } else {
                    console.error("Gist 更新失败:", response.responseText)
                }
            }
        })
    }
}
const githubToken = ''
const description = "GreasyFork优化设置备份"
GistManager.init(githubToken, description)
const filename = "GM_Panel.json"
GistManager.uploadToGist(filename, jsonData)
GistManager.downloadGistAsJson(filename)
WhiteSevsAuthor
§
Posted: 2024-09-28

这种脚本数据同步功能建议给脚本管理器提建议,这不该是脚本做的事

§
Posted: 2024-09-28

这种脚本数据同步功能建议给脚本管理器提建议,这不该是脚本做的事

好的

Post reply

Sign in to post a reply.