您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Helps you export all the files from ai-challenge.com into zip archive
当前为
- // ==UserScript==
- // @name ai-challenge Exporter
- // @id ai-challenge_exporter
- // @namespace ai-challenge_exporter
- // @version 0.1
- // @author KOLANICH
- // @copyright KOLANICH, 2014
- // @description Helps you export all the files from ai-challenge.com into zip archive
- // @license GNU GPL v3
- // @noframes 1
- // @icon http://ai-challenge.com/favicon.ico
- // @website https://github.com/KOLANICH/ai-challenge-Exporter
- // @include http://ai-challenge.com/ru/profile/*
- // @resource jszip https://raw.github.com/Stuk/jszip/master/jszip.js
- // @run-at document-end
- // @contributionURL https://github.com/KOLANICH/ai-challenge-Exporter/fork
- // @contributionAmount feel free to fork and contribute
- // ==/UserScript==
- //var unpackCodesRx=/([a-f\d]{32})(\w+\.\w+)\1/ig;
- const signature="89c4e347cdca08508a415e959f2a9b5c";
- const unpackCodesRx=new RegExp("(?://)?(?:\\r?\\n)*"+signature+"(\\w+\\.\\w+)"+signature+"(?:\\r?\\n)*","ig");
- var fileEl= document.createElement("INPUT");
- fileEl.type="file";
- fileEl.accept="application/javascript, text/javascript";
- function checkInjection(){
- if(typeof JSZip==="undefined")
- eval(GM_getResourceText('jszip').replace("var JSZip","JSZip"));
- }
- function unpackCodes(str){
- let tokenz=unescape(str).split(unpackCodesRx);
- let filez={};
- let j=0;
- /*for(var i=1;i<tokenz.length;i+=3){
- let hash=tokenz[i];
- let code=tokenz[i+2];
- f(hash!=GM_cryptoHash(code, "MD5").toLowerCase()){
- i-=2;
- continue;
- }
- filez[tokenz[i+1]]={};
- filez[tokenz[i+1]].hash=hash;
- filez[tokenz[i+1]].code=code;
- j++;
- }*/
- for(let i=1;i<tokenz.length;i+=2){
- filez[tokenz[i]]={};
- filez[tokenz[i]].code=tokenz[i+1];
- j++;
- }
- return filez;
- }
- function packCodes(filez,pretty){
- if(typeof pretty=="undefined")pretty=true;
- let str="";
- for(let name in filez){
- str+=(pretty?"//":"")+signature+name+signature+(pretty?"\n"+filez[name].code+"\n":encodeURIComponent(filez[name].code));
- }
- return str;
- }
- function exportToZip(filez){
- checkInjection();
- var zip = new JSZip();
- console.log(zip);
- for(let fileName in filez){
- zip.file(fileName, filez[fileName].code);
- }
- var blob=zip.generate({type:"blob",compression:"STORE"});
- console.log(blob);
- return URL.createObjectURL(blob);
- }
- function importFromString(codes){
- codes=unpackCodes(codes);
- codes=packCodes(codes,false);
- var ret = GM_xmlhttpRequest({
- method: "POST",
- data: "data="+encodeURIComponent(codes),
- url : "/upload",
- headers: {
- "Content-Type": "application/x-www-form-urlencoded"
- },
- onload: function(res) {
- if (res.responseText == "ok") {
- window.location.reload();
- GM_notification("Код сохранен!");
- } else {
- GM_notification("Код не сохранен! Ошибка: " + res.responseText);
- }
- }
- });
- }
- GM_registerMenuCommand("export to clipboard",function(){
- let filez=unpackCodes(decodeURIComponent(unsafeWindow["tournamentView"].model.attributes.code));
- GM_setClipboard(packCodes(filez),"text");
- alert("Exported to clipboard");
- });
- GM_registerMenuCommand("export",function(){
- let filez=unpackCodes(decodeURIComponent(unsafeWindow["tournamentView"].model.attributes.code));
- GM_openInTab(exportToZip(filez));
- });
- GM_registerMenuCommand("export from editor",function(){
- alert("NOT IMPLEMENTED!");
- GM_openInTab("https://github.com/KOLANICH/ai-challenge-Exporter/issues/1");
- /*var spl = this.get("splitCode");
- if (!$(btn).hasClass("disabled")) {
- $(btn).addClass("disabled").html("Отправка...");
- for (var name in spl) {
- data += "89c4e347cdca08508a415e959f2a9b5c" + name + "89c4e347cdca08508a415e959f2a9b5c" + encodeURIComponent(spl[name].cm.getValue());
- }
- let codePacked=decodeURIComponent(unsafeWindow["tournamentView"].model.attributes.code);
- console.log(unpackCodes(codePacked));*/
- });
- GM_registerMenuCommand("import from string",function(){
- let codes=prompt("Input string");
- if(!codes)return;
- importFromString(codes);
- });
- var reader = new FileReader();
- reader.onload =function(evt){
- let codes=evt.target.result;
- if(!codes)return;
- importFromString(codes);
- };
- function handleFileSelect(evt) {
- for (let f of evt.target.files) {
- reader.readAsText(f);
- break;
- }
- }
- fileEl.addEventListener('change', handleFileSelect, false);
- GM_registerMenuCommand("import from file",function(){
- var evt = document.createEvent("MouseEvents");
- evt.initMouseEvent("click", true, true, window, 1, 0, 0, 0, 0, false, false, false, false, 0, null);
- fileEl.dispatchEvent(evt);
- });