- Download this gist as a zip and extract
- Open
chrome://extensions
- Enable
Developer mode
- Click
Load unpacked extension...
and select the extracted folder - 💵 Profit 💵
Created by the SMU CS Society
chrome://extensions
Developer mode
Load unpacked extension...
and select the extracted folderCreated by the SMU CS Society
{ | |
"manifest_version": 2, | |
"name": "Quick Gist", | |
"description": "Get the gist out.", | |
"version": "1.0.0", | |
"browser_action": { | |
"default_title": "Create Gist", | |
"default_popup": "popup.html" | |
}, | |
"permissions": [ | |
"tabs" | |
] | |
} |
<html><head><style> | |
* { | |
font-size: 1.25em; | |
} | |
body { | |
padding: 1em; | |
width: 400px; | |
max-width: 800px; | |
} | |
input, textarea { | |
width: 100%; | |
} | |
textarea { | |
margin-bottom: 1em; | |
} | |
#replicate { | |
float: right; | |
} | |
#smucsm { | |
color: #aaa; | |
font-size: 0.75em; | |
position: absolute; | |
bottom: 0; | |
right: 5px; | |
text-decoration: none; | |
} | |
#smucsm:hover, | |
#smucsm:active, | |
#smucsm:visited, { | |
color: #aaa; | |
} | |
</style> | |
</head><body><div> | |
<h1>Create a Gist</h1> | |
<form id="coolform"> | |
<input name="description" type="text" placeholder="Description"> | |
<textarea name="content" placeholder="...Content..." rows="10"></textarea> | |
<button type="submit">Save</button> | |
<button id="replicate">Self Replicate</button> | |
</form> | |
<a id="smucsm" target="_blank" href="http://smucsm.github.io">Created by the SMU CS Society</a> | |
</div> | |
<script src="popup.js"></script></body></html> |
var coolform = document.getElementById("coolform"); | |
var replicate = document.getElementById("replicate"); | |
coolform.onsubmit = function(e){ | |
e.preventDefault(); | |
var target = e.target | |
var description = target.elements.namedItem("description").value; | |
var content = target.elements.namedItem("content").value; | |
var filename = new Date().toISOString().slice(0,10) + ".md"; | |
var githubRequest = toGitHubObject(description, [{name:filename, content:content}]); | |
genericRequest("POST", 'https://api.github.com/gists', JSON.stringify(githubRequest)); | |
}; | |
replicate.onclick = function (){ | |
var manifestFile, | |
popupjs, | |
popuphtml = document.documentElement.outerHTML; | |
// ------- | |
genericRequest("GET", "manifest.json", null, function(request){ | |
if (request.target.status >= 200 && request.target.status < 400) { | |
var response = request.target.responseText; | |
manifestFile = response; | |
// ------- | |
genericRequest("GET", "popup.js", null, function(request){ | |
if (request.target.status >= 200 && request.target.status < 400) { | |
var response = request.target.responseText; | |
popupjs = response; | |
// ------- | |
var githubRequest = toGitHubObject("Quick Gist: The self replicating chrome extension", [ | |
{name:"README.md", content:"- Download this gist as a zip and extract\n- Open `chrome://extensions`\n- Enable `Developer mode`\n- Click `Load unpacked extension...` and select the extracted folder\n- :dollar: Profit :dollar:\n\nCreated by the [SMU CS Society](http://smucsm.github.io)"}, | |
{name:"manifest.json", content: manifestFile}, | |
{name:"popup.js", content: popupjs}, | |
{name:"popup.html", content: popuphtml} | |
]); | |
genericRequest("POST", 'https://api.github.com/gists', JSON.stringify(githubRequest)); | |
} else { | |
console.log("Error", request); | |
} | |
}); | |
} else { | |
console.log("Error", request); | |
} | |
}); | |
} | |
function genericRequest(method, url, data, success, error){ | |
if (method == null || url == null){ | |
console.log('missing request, method or url'); | |
return; | |
} | |
if (method != "GET" && method != "POST"){ | |
console.log('invalid request type'); | |
return; | |
} | |
var request = new XMLHttpRequest(); | |
request.open(method, url, true); | |
request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded; charset=UTF-8'); | |
if (success){ | |
request.onload = success; | |
} | |
else { | |
request.onload = function() { | |
if (request.status >= 200 && request.status < 400) { | |
var response = JSON.parse(request.responseText); | |
console.log("Success", response.html_url); | |
// Open new tab with response.html_url | |
chrome.tabs.create({ | |
url: response.html_url | |
}); | |
} else { | |
console.log("Error", request); | |
} | |
}; | |
} | |
if (error){ | |
request.onerror = error; | |
} | |
else { | |
request.onerror = function(){ | |
console.log("Error", request); | |
} | |
} | |
request.send(data); | |
} | |
// files = [{name: "filename", content: "file content"}] | |
function toGitHubObject(description, files){ | |
var githubRequest = {}; | |
githubRequest.description = description; | |
githubRequest.public = true; | |
githubRequest.files = {}; | |
//unpack files to github's files object | |
files.forEach(function(file){ | |
githubRequest.files[file.name] = { | |
content: file.content | |
}; | |
}); | |
return githubRequest; | |
} |