// ==UserScript== // @name Steam 工作坊模组辅助脚本 // @namespace http://tampermonkey.net/ // @version 1.9 // @description 辅助管理Steam工作坊模组清单的脚本工具 // @author LaysDragon镭锶龙 // @match https://steamcommunity.com/id/*/myworkshopfiles/* // @match https://steamcommunity.com/profiles/*/myworkshopfiles/* // @require https://cdnjs.cloudflare.com/ajax/libs/URI.js/1.19.1/URI.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/FileSaver.js/1.3.8/FileSaver.min.js // @require https://cdnjs.cloudflare.com/ajax/libs/lz-string/1.4.4/lz-string.min.js // @require https://code.jquery.com/jquery-3.3.1.min.js // @grant none // @downloadURL none // ==/UserScript== (function() { 'use strict'; window.URI = URI; var $NJ = $; window.$NJ = $; $.noConflict() //var URI = URI; //var saveAs = saveAs; if(typeof URI().query(true).appid === 'undefined' || URI().query(true).appid === "0" || URI().query(true).browsefilter !== 'mysubscriptions'){ return; } //$NJ("head").append (''); $NJ('.rightDetailsBlock:eq(1)').prepend('
'); //$NJ('.rightDetailsBlock:eq(1)').prepend($NJ(' 格式转换 ').click(openEditorTools)); $NJ('.rightDetailsBlock:eq(1)').prepend($NJ(' 导入模组 ').click(startImport)); $NJ('.rightDetailsBlock:eq(1)').prepend($NJ(' 导出模组 ').click(startExport)); $NJ('body').append($NJ(`
`)) function getSessionID(){ return $NJ('form#PublishedFileUnsubscribe input[name="sessionid"]').val() } function getPageList(){ return $NJ('[id^=Subscription]').map(function(){ let ele = $NJ(this); //https://steamcommunity.com/sharedfiles/filedetails/?id= return { name:ele.find('.workshopItemTitle').text(), //link:ele.find('a:has(div.workshopItemTitle)').attr('href'), id:URI(ele.find('a:has(div.workshopItemTitle)').attr('href')).query(true).id, //img:ele.find('img.workshopItemPreviewImage').attr('src') } }).get(); } function currentMaxItems(){ let all = new Set(['10','20','30']); let items = new Set($NJ('.workshopBrowsePaging div:eq(1) a').map(function(){return $NJ(this).text()}).get()); let target = [...all].filter(x => !items.has(x)); return target[0]; } function selectMaxItems(value){ let all = new Set(['10','20','30']); if(!all.has(value)){ throw new Error('Invalid Select Option'); } $NJ (`.workshopBrowsePaging div:eq(1) a:contains("${value}")`)[0].click(); } function hasNextPage(){ let nextPageButton = $NJ('.workshopBrowsePagingControls:first').find('span:contains(">"),a:contains(">")'); return nextPageButton.length!=0 && !nextPageButton.hasClass('disabled'); } function goNextPage(){ $NJ('.workshopBrowsePagingControls:first').find('span:contains(">"),a:contains(">")')[0].click(); } //status: STOP PROCESSING function getStatus(){ return localStorage.getItem('exporterStatus')||"STOP"; } let allFlags = new Set(['TASK_CLEAR_IMPORT']); function setFlag(flag){ if(!allFlags.has(flag)){ throw new Error('Invalid Flag'); } localStorage.setItem('exporterFlag_'+flag,true); } function clearFlag(flag){ if(!allFlags.has(flag)){ throw new Error('Invalid Flag'); } localStorage.setItem('exporterFlag_'+flag,false); } function getFlag(flag){ if(!allFlags.has(flag)){ throw new Error('Invalid Flag'); } return JSON.parse(localStorage.getItem('exporterFlag_'+flag)||'false'); } function getAppID(){ return URI().query(true).appid; } function getAppName(){ return $NJ ('.HeaderUserInfoSection:last').text(); } function getUserID(){ return URI().segment(1); } function setStatus(status){ let all = new Set(['STOP','PROCESSING']); if(!all.has(status)){ throw new Error('Invalid Status'); } localStorage.setItem('exporterStatus',status); } function getListData(){ return JSON.parse(localStorage.getItem('exporterLists')||'[]'); } function setListData(data){ localStorage.setItem('exporterLists',JSON.stringify(data)); } function getImportListData(){ return JSON.parse(localStorage.getItem('exporterImportLists')||'[]'); } function setImportListData(data){ localStorage.setItem('exporterImportLists',JSON.stringify(data)); } function startExport(){ //$NJ( "#export_notification_dialog" ).dialog(); ShowBlockingWaitDialog('导出MOD清单','脚本正在进行模组资料收集作业,请稍后...'); if(getStatus()=="STOP"){ setStatus('PROCESSING'); setListData([]); location.href = URI().search(function(data) { data.p = 1; return data; }).toString(); } } function startImport(){ { function handleFileSelect(evt) { evt.stopPropagation(); evt.preventDefault(); if(evt.type == "drop"){ var file = evt.originalEvent.dataTransfer.files[0]; }else{ var file = evt.target.files[0]; } var reader = new FileReader(); reader.onload = function(event) { $TextArea.val(event.target.result); }; reader.readAsText(file); } let $Body = $NJ('
'); $Body.append( $NJ(`

请填入 压缩base64 或者 JSON 字串

`)); let $FileRead = $NJ('',{'type':'file','style':'display:none;'}); let $FileDrop = $NJ(`
点击上传档案或将文件拖放到此处
`); $FileDrop.on("drop",handleFileSelect); $FileDrop.on("dragover",function (evt) { evt.originalEvent.stopPropagation(); evt.originalEvent.preventDefault(); evt.originalEvent.dataTransfer.dropEffect = 'copy'; }); $FileDrop.click(function(){$FileRead.click()}); $FileRead.change(handleFileSelect); $Body.append($FileRead); $Body.append($FileDrop); let $TextArea = $NJ('