NOTICE: By continued use of this site you understand and agree to the binding Terms of Service and Privacy Policy.
// ==UserScript== // @name Glitch Restart Button // @namespace https://github.com/jarvis394/glitch-restart-button // @version 3.1.0 // @description Adds restart button to your Glitch project! // @author jarvis394 // @match https://glitch.com/edit/* // @run-at document-start // @grant none // @license MIT // @copyright 2019, jarvis394 (https://openuserjs.org/users/jarvis394) // @iconURL https://i.ibb.co/s9pfQH3/Flat-restart-icon-svg-1.png // @updateURL https://openuserjs.org/meta/jarvis394/Glitch_Restart_Button.meta.js // @downloadURL https://openuserjs.org/install/jarvis394/Glitch_Restart_Button.user.js // ==/UserScript== (async () => { 'use strict' let button, data = {} /** * Adds styles to a page * @param {string} css Styles */ const addCSS = (css) => { let head = document.getElementsByTagName('head')[0] if (!head) return let style = document.createElement('style') style.type = 'text/css' style.innerHTML = css head.appendChild(style) } const isInvalidData = () => { if (!data.token) return alert('Can\'t find your Glitch token, sorry!') if (!data.projectId) return alert('Can\'t find your project ID, sorry!') return false } /** * Reloads current project */ const reloadProject = () => { if (isInvalidData()) return fetch(`https://api.glitch.com/projects/${data.projectId}/stop?authorization=${data.token}`, { method: 'POST' }).then(res => { if (res.status === 401) return alert('Sorry, you are not allowed to restart this project!') }) } /** * Adds button */ const addButton = () => { button = document.createElement('button') button.innerHTML = 'Restart' button.className += 'button-small button-restart' button.disabled = !data.isOwner button.onclick = () => reloadProject() document.getElementsByClassName('editor-container')[0].appendChild(button) console.log('%cAdded %c\'Restart\'%c button to the Editor!', 'color: #555', 'color: #2196F3', 'color: #555') } const updateButton = () => { button.disabled = !data.isOwner document.getElementsByClassName('editor-container')[0].appendChild(button) } const updateData = () => { const project = application.currentProject() const user = application.currentUser() const token = application.persistentToken() data = { user, token, project, projectId: project.id(), isOwner: project.users.some(u => u.id === user.id()) } return data } window.onload = () => { data.isOwner = false application.projectIsLoaded.observe((v) => { if (v) { addCSS(` .button-restart { position: absolute; z-index: 5; bottom: 15px; right: 20px; } `) addButton() updateData() updateButton() } }) } })()