您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Set of tools to ease games upload on BrokenStones
// ==UserScript== // @name BrokenStones - Upload Game Helper // @namespace https://brokenstones.club/ // @version 0.8.4 // @description Set of tools to ease games upload on BrokenStones // @author whatever // @match https://brokenstones.club/upload.php* // @match https://brokenstones.club/torrents.php?action=editgroup* // @require https://code.jquery.com/jquery-3.1.1.min.js // @require https://greasemonkey.github.io/gm4-polyfill/gm4-polyfill.js // @grant GM.xmlHttpRequest // @grant GM_xmlhttpRequest // ==/UserScript== ///TODO: //description regex improvement //add img uploader //add gog search //64-bit detection //add additionnal notes //config (default) var force_enabled = false, //set MacOS Games by default (false) early_access_warning = true, //uploading rule 1.2.5 warning (true) imgur_clientid = ""; //facultative imgur api key ("") //default values var label_screenshots = {start:"\n\n[hide=Screenshots]", end:"[/hide]"}, label_info = "\n\n[b]More information[/b]: ", label_instructions_zip = "1) Unpack\n2) Move to Applications\n3) Play!\n", label_instructions_pkg = "1) Install\n2) Play!\n", label_instructions_dmg = "1) Mount\n2) Drag & Play!\n", label_dlc = {few:"\n[b]Including DLC[/b]: ", many_start:"\n[hide=Including DLC]", many_end:"[/hide]"}, label_languages = "\n[b]Languages[/b]: ", label_version = "\n[b]Version[/b]: ", label_cure = "\n[b]Cure[/b]: ", label_earlyaccess = "\n\n[color=blue]Approved by staff as early access[/color]", label_button = {edit:"Update", upload:"Load"}, nb_screenshots = 5; //site vars var page_add = window.location.href.includes("upload.php?groupid=")? true : false, page_edit = window.location.href.includes("torrents.php?action=editgroup")? true : false, gh_form = document.forms.torrent, version_max_length = 30, cpu_max_length = 20, os_max_length = 20, ram_max_length = 20, vram_max_length = 20; //save slots var gh_screenshots, gh_info, gh_group_desc, gh_earlyaccess, gh_button_label = label_button.upload, gh_version_lock = false, gh_image_lock = false, gh_release_desc_lock = false, gh_group_desc_lock = false, gh_dlc_nb = 0, gh_dlc = "", gh_languages = "", gh_instructions = label_instructions_zip; //default value //regexes function get_desc(str) { if (!str) return ""; str = str.replace(/(©|™|®)/g, ""); str = str.replace(/\r/g,""); str = str.replace(/\t/g,""); str = str.replace(/< *(\/|) *(b|strong) *>/g, "[$1b]"); str = str.replace(/< *(\/|) *u *>/g, "[$1u]"); str = str.replace(/< *(\/|) *(i|em) *>/g, "[$1i]"); str = str.replace(/< *br *\/*>/g, "\n"); str = str.replace(/< *li *>(\s*|\t*)/g, "[*]"); str = str.replace(/\n *(-|\*) */g, "\n[*]"); str = str.replace(/< *\/ *li *>/g, ""); str = str.replace(/< *ul *class=\\*\"bb_ul\\*\" *>/g, ""); str = str.replace(/< *\/ *ul *>/g, ""); str = str.replace(/< *h2 *class=\"bb_tag\" *>/g, "\n[b]"); str = str.replace(/< *h[12] *>/g, "\n[b]"); str = str.replace(/< *\/ *h[12] *>/g, "[/b]\n"); str = str.replace(/\"/g, "\""); str = str.replace(/\n+\s*\t*•\s*\t*/g, "\n[*]"); str = str.replace(/\&/g, "&"); str = str.replace(/< *img *src=\".*\".*>/g, ""); str = str.replace(/< *a [^>]*>/g, ""); str = str.replace(/< *\/ *a *>/g, ""); str = str.replace(/< *p *>/g, "\n\n"); str = str.replace(/< *\/ *p *>/g, ""); str = str.replace(//g, "\""); str = str.replace(//g, "\""); str = str.replace(/ +/g, " "); str = str.replace(/ *\n */g, "\n"); str = str.replace(/\[b\]\n*(\[b\]\n*)+/g, "[b]"); str = str.replace(/ *\[\/b\](\n)*(\[\/b\]\n*)+/g, "[/b]$1"); str = str.replace(/\[b\]\[\/b\]/g, ""); str = str.replace(/\n +/g, "\n"); str = str.replace(/\n\n\n+/g, "\n\n"); str = str.replace(/\n\n+\[\*\]/g, "\n[*]"); var regFeatures = /\n+ *(\[(b|u|i)\])* *(Key Features|Main Features|Game Features|KEY GAME FEATURES|Other Features|Features of the Game|FEATURE OVERVIEW|Features|Featuring|Feautures) *:* *(\n*\[\/(b|u|i)\])* *:* */i; str = str.replace(regFeatures, "\n\n[b]Features[/b]:\n"); if (!regFeatures.test(str)) { var regFeaturesList = /(\n\[\*\].*){3,20}/g; var featuresList = str.match(regFeaturesList); var lastLine = regFeaturesList.exec(featuresList); str = str.replace(featuresList, "\n\n[b]Features[/b]:"+featuresList); } str = str.replace(/^\n+/, ""); str = str.replace(/\n+$/, ""); str = str.replace(/\n\n\n+/g, "\n\n"); return str; } function get_sysreq_raw(reg, str) { if (!str) return "N/A"; reg = new RegExp(" *("+reg+") *(:|) *<\/strong> *(.*?) *<br>","i"); if (str.match(reg)) return str.match(reg)[3]; return "N/A"; } function get_sysreq(field, str) { if (str == "N/A") return "N/A"; str = str.replace(/©|™|®|\(|\)|\:|\/|\@/g, ""); //undesired str = str.replace(/ (or|and|of) /g, ""); str = str.replace(/(better|above|beyond|superior|later|onwards|newer|higher|faster|greater|equivalent)/ig, "+"); str = str.replace(/Pentium/ig, ""); str = str.replace(/CPU Speed/ig, ""); str = str.replace(/Processor/ig, ""); str = str.replace(/CPU/ig, ""); str = str.replace(/V*RAM/ig, ""); str = str.replace(/Intel/ig,""); str = str.replace(/AMD/ig, ""); str = str.replace(/Minimum/ig, ""); str = str.replace(/DDR3/ig, ""); if(field == "VRAM") { str = str.replace(/video/ig, ""); str = str.replace(/card/ig, ""); str = str.replace(/memory/ig, ""); str = str.replace(/graphics/ig, ""); str = str.replace(/compatible/ig, ""); str = str.replace(/dedicated/ig, ""); str = str.replace(/compliant/ig, ""); str = str.replace(/plus/ig, ""); str = str.replace(/required/ig, ""); str = str.replace(/class/ig, ""); str = str.replace(/series/ig, ""); str = str.replace(/Radeon \d{3,5}/ig,""); str = str.replace(/Radeon/ig,""); str = str.replace(/Nvidia/ig,""); str = str.replace(/Geforce *\d+M*/ig,""); str = str.replace(/Geforce/ig,""); str = str.replace(/ATI/g,""); str = str.replace(/ Pro/ig,""); str = str.replace(/GPU/ig,""); str = str.replace(/With/ig,""); str = str.replace(/GTX*S* *\d+(MX|M|ti)*/ig,""); str = str.replace(/Iris *\d{3,5}/ig,""); str = str.replace(/Iris/ig,""); str = str.replace(/HD *\d{4}M*/ig,""); str = str.replace(/RX*\d+ *M*\d{2,5}X*/ig,""); str = str.replace(/RX*\d+ *M*X*/ig,""); str = str.replace(/\d+MX*(,| )+/ig,""); str = str.replace(/M\d+/ig,""); str = str.replace(/\+/g,""); str = str.replace(/\-/g,""); str = str.replace(/\|/g,""); str = str.replace(/see notes for more details/i, ""); } //because i've been told OSX versions are preferable than OS names if (field == "OS") { str = str.includes("10.4")? str.replace(/tiger/i, "") : str.replace(/tiger/i, "10.4"); str = str.includes("10.6")? str.replace(/snow leopard/i, "") : str.replace(/snow leopard/i, "10.6"); str = str.includes("10.5")? str.replace(/leopard/i, "") : str.replace(/leopard/i, "10.5"); str = str.includes("10.8")? str.replace(/mountain lion/i, "") : str.replace(/mountain lion/i, "10.8"); str = str.includes("10.7")? str.replace(/lion/i, "") : str.replace(/lion/i, "10.7"); str = str.includes("10.9")? str.replace(/mavericks/i, "") : str.replace(/mavericks/i, "10.9"); str = str.includes("10.10")? str.replace(/yosemite/i, "") : str.replace(/yosemite/i, "10.10"); str = str.includes("10.11")? str.replace(/el capitan/i, "") : str.replace(/el capitan/i, "10.11"); str = str.includes("10.13")? str.replace(/high sierra/i, "") : str.replace(/high sierra/i, "10.13"); str = str.includes("10.12")? str.replace(/sierra/i, "") : str.replace(/sierra/i, "10.12"); str = str.includes("10.14")? str.replace(/mojave/i, "") : str.replace(/mojave/i, "10.14"); str = str.includes("10.15")? str.replace(/catalina/i, "") : str.replace(/catalina/i, "10.15"); str = str.replace(/mac/ig, ""); str = str.replace(/version/ig, ""); str = str.replace(/os/ig, ""); str = str.replace(/x/ig, ""); } str = str.replace(/ +,/g, ","); str = str.replace(/,+/g, ","); str = str.replace(/ +/g, " "); str = str.replace(/^ +/, ""); str = str.replace(/^,+/, ""); str = str.replace(/^ +/, ""); str = str.replace(/ +$/, ""); str = str.replace(/\.+$/, ""); str = str.replace(/,+$/, ""); str = str.replace(/ +$/, ""); return str; } function get_langs(str) { str = str.replace(/ *<br> */g, ""); str = str.replace(/ *languages with full audio support */, ""); str = str.replace(/ *<strong> *\* *<\/strong> */g, ""); str = str.replace(/ *- *(Spain|Brazil|Latin America)/g, "") var reg = str.match(/Spanish/g); if (reg) if (reg.length == 2) str = str.replace(/(, Spanish|Spanish ,)/, ""); reg = str.match(/Portuguese/g); if (reg) if (reg.length == 2) str = str.replace(/(, Portuguese|Portuguese ,)/, ""); return str; } function get_appid(str) { //TODO: proper fix var reg = str.match(/\/app\/(\d+)/i); str = reg? reg[1] : str; str = str.replace(/^\s*(\d+)\s*$/, "$1"); str = str.length > 200 ? "" : str; //quick fix return str; } function get_title(str) { //TODO: recapitalization str = str.replace(/(©|™|®)/g, ""); str = str.replace(/’/g,"'"); return str; } function get_dlc(str, title) { str = str.replace(/(©|™|®)/g, ""); str = str.replace(/’/g,"'"); str = str.replace(/DLC/i, ""); var reg_dlc = new RegExp(" *"+title+" *(:|-)* *","i"); str = str.replace(reg_dlc, ""); str = str.replace(/ *- */g, " "); str = str.replace(/ +/g, " "); str = str.replace(/^ /, ""); str = str.replace(/ $/, ""); return str; } //data handlers function fill_version(str) { if (!gh_version_lock) { var original = str; //if label_instructions gh_instructions = str.includes(".pkg.torrent") ? label_instructions_pkg : str.includes(".dmg.torrent") ? label_instructions_dmg : label_instructions_zip; str = str.replace(/.*_enUS_(.*)_(\d+)\.pkg\.torrent$/i, "$1 ($2)"); str = str.replace(/.*_enUS_(.*)_(\d+)\.torrent$/i, "$1 ($2)"); str = str.replace(/.*_(.*)_\((\d+)\)_mac_gog(|\-2).torrent/i, "$1 ($2)"); if (str != original) { str = str.replace(/_/g, "."); makeitgog(); } str = str.replace(/.*\.v(.*?)(|\.Incl\.DLC)(|\.MacOSX).(zip|dmg)\.torrent$/i, "$1"); str = (str == original)? "": str; if (gh_earlyaccess) { var t = str str = str.replace(/\(.*\)/, "(early access)") if (t == str) { str = str + " (early access)"; } } $("#os_version").val(str); fill_release_desc(); } } function fill_search(response) { var search_dom = document.createElement('html'); search_dom.innerHTML = response.responseText; var results = ""; $(search_dom).find("span.title").each(function( index ) { if (index > 9) return false; //limit results var a = $(this).parent().closest("a"); var type = a.attr("data-ds-itemkey"); if (type.includes("App")) { var title = get_title($(this).text()); var id = a.attr("data-ds-appid"); var selected = ""; if (title.toLowerCase() == $("#gh_steam_input").val().toLowerCase()) { //perfect match $("#gh_steam_input").val(id); $("#gh_steam_button").click(); selected = " selected"; } title = title.length > 50 ? title.substr(0, 50) + "..." : title; results = results + "<option value='" + id + "'" + selected + ">" + title + "</option>"; } }); if (results != "") { $("#gh_steam_search_results").remove(); $("#gh_steam_button").after(" <select id='gh_steam_search_results'>"+results+"</select>"); $("#gh_steam_search_results").change(function() { $("#gh_steam_input").val($(this).val()); }); $("#gh_steam_button").attr("value", gh_button_label); } else { $("#gh_steam_search_results").remove(); $("#gh_steam_button").after(" <span id='gh_steam_search_results'>Nothing found</span>"); } } function fill_group_desc(desc_field) { if (!gh_group_desc_lock) { var group_desc = gh_group_desc + label_screenshots.start + gh_screenshots + label_screenshots.end + gh_info; $(desc_field).val(group_desc); $(desc_field).val($(desc_field).val()); } } function fill_release_desc() { if (!gh_release_desc_lock) { var release_source = $("#source").val() != "" ? $("#source").val() + " " : "", release_cure = $("#cure").val() != "" ? $("#cure").val() + " " : "", release_version = "v" + $("#os_version").val(), release_dlc = gh_dlc_nb == 0 ? "" : gh_dlc_nb < 10 ? label_dlc.few + gh_dlc : label_dlc.many_start + gh_dlc + label_dlc.many_end, release_desc = gh_instructions + release_dlc + label_languages + gh_languages + label_version + release_source; release_desc = ($("#cure").val().includes("DRM Free") || $("#cure").val() == "") ? release_desc + release_cure + release_version: release_desc + release_version + label_cure + release_cure; release_desc = gh_earlyaccess ? release_desc + label_earlyaccess : release_desc; gh_form.release_desc.value = release_desc; formatMacOSName(); } } function fill_form(response) { var appid = $("#gh_steam_input").val(); var steamJSon = response.response[appid].data; gh_earlyaccess = false; if(!page_add) { var image_field = gh_form.image; var desc_field = page_edit? gh_form.body : gh_form.desc; //group values var title = get_title(steamJSon.name); var desc = steamJSon.about_the_game === ""? get_desc(steamJSon.detailed_description) : get_desc(steamJSon.about_the_game); gh_group_desc = desc; gh_info = label_info + "https://store.steampowered.com/app/"+ appid; if (!gh_image_lock) { var image = steamJSon.header_image.split("?")[0]; $(image_field).val(image); var image_portrait = "https://steamcdn-a.akamaihd.net/steam/apps/" + appid + "/library_600x900_2x.jpg"; var request_image = new GM.xmlHttpRequest({ method: "GET", url: image_portrait, responseType: "json", onload: function(response) { if(response.status == 200){ $(image_field).val(image_portrait); } var request = GM.xmlHttpRequest({ method: "POST", url: "https://api.imgur.com/3/upload", data: "image="+$(image_field).val()+"&type=url", responseType: "json", headers: { "Authorization": "Client-ID "+imgur_clientid, "Content-Type": "application/x-www-form-urlencoded" }, onload: function(response) { if(response.status == 200 && response.response["success"]){ $(image_field).val(response.response["data"].link); } } }); } }); } if(!page_edit) { var tags_official = []; $("#genre_tags option").each(function(){ tags_official.push($(this).val()); }); var tags = []; steamJSon.genres.forEach(function (genre) { var tag = genre.description.toLowerCase().replace(/RPG/i, "roleplaying"); if (tag == "early access") gh_earlyaccess = true; if (tags_official.includes(tag)) tags.push(tag); }); $("#tags").val(tags.join(", ")); } gh_screenshots = ""; //clean steamJSon.screenshots.forEach(function(screen, index) { if (index >= nb_screenshots) return; var screenshot_url = screen.path_full.split("?")[0]; var request = GM.xmlHttpRequest({ method: "POST", url: "https://api.imgur.com/3/upload", data: "image="+screenshot_url+"&type=url", responseType: "json", headers: { "Authorization": "Client-ID "+imgur_clientid, "Content-Type": "application/x-www-form-urlencoded" }, onload: function(response) { if(response.status == 200 && response.response["success"]){ gh_screenshots += "[img]" + response.response["data"].link + "[/img]\n"; } else { gh_screenshots += "[url]" + screenshot_url + "[/url]\n"; console.log(response.responseText); console.log(response); } fill_group_desc(desc_field); } }); }); //fill group $("#title").val(title); fill_group_desc(desc_field); } if (page_add) { steamJSon.genres.forEach(function (genre) { var tag = genre.description.toLowerCase(); if (tag == "early access") gh_earlyaccess = true; }); } if (!page_edit) { //release values var sysreq = steamJSon.mac_requirements.minimum, vram_min_raw = get_sysreq_raw("Graphics|VRAM|Video Memory|Video Card", sysreq), cpu_min_raw = get_sysreq_raw("CPU Type|CPU Processor|CPU|Processor", sysreq), ram_min_raw = get_sysreq_raw("System RAM|RAM|System Memory|Memory", sysreq), os_min_raw = get_sysreq_raw("Supported OS|OS|Operating Systems|Operating System|Mac OS|System|Mac", sysreq), os_min = get_sysreq("OS", os_min_raw), cpu_min = get_sysreq("CPU", cpu_min_raw), ram_min = get_sysreq("RAM", ram_min_raw), vram_min = get_sysreq("VRAM", vram_min_raw); gh_languages = get_langs(steamJSon.supported_languages); //dlc gh_dlc = ""; gh_dlc_nb = steamJSon.dlc == undefined ? 0 : steamJSon.dlc.length; if (gh_dlc_nb > 0) { steamJSon.dlc.forEach(function (dlc) { var request = new GM.xmlHttpRequest({ method: "GET", url: "http://store.steampowered.com/api/appdetails?l=en&appids=" + dlc, responseType: "json", onload: function(response) { var dlc_name = get_dlc(response.response[dlc].data.name, get_title(steamJSon.name)); if (!dlc_name.includes("Soundtrack") && !dlc_name.includes("Artbook") && !dlc_name.includes("Season Pass")) { gh_dlc = gh_dlc_nb < 10 ? gh_dlc == "" ? dlc_name : gh_dlc + ", " + dlc_name : gh_dlc + "[*]" + dlc_name + "\n"; } else { gh_dlc_nb = gh_dlc_nb - 1; } fill_release_desc(); } }); }); } //fill release gh_form.os_minversion.value = os_min; gh_form.os_minversion.title = os_min_raw; check_length(gh_form.os_minversion, os_max_length); gh_form.os_minprocessor.value = cpu_min; gh_form.os_minprocessor.title = cpu_min_raw; check_length(gh_form.os_minprocessor, cpu_max_length); gh_form.os_minram.value = ram_min; gh_form.os_minram.title = ram_min_raw; check_length(gh_form.os_minram, ram_max_length); gh_form.os_minvideoram.value = vram_min; gh_form.os_minvideoram.title = vram_min_raw; check_length(gh_form.os_minvideoram, vram_max_length); fill_release_desc(); } if (gh_earlyaccess && early_access_warning) { window.alert("Uploading Rule #1.2.5\n\nPre-Release content including Alpha, Beta, Preview and Apple Developer releases are not allowed. Except for rare cases at the discretion of the Staff. You need to request approval via the Staff Inbox prior to uploading, not doing so will result in loss of uploading rights."); } } function makeitgog() { //recurrent gh_form.cure.selectedIndex = 1; gh_form.os_includes.selectedIndex = 5; gh_form.source.selectedIndex = 2; gh_instructions = gh_instructions == label_instructions_zip || gh_instructions == "" ? label_instructions_pkg : gh_instructions; fill_release_desc(); } function check_length(elem, max_size) { //inputs length var characters = $(elem).val().length, label = $(elem).parent().prev(); if (characters > max_size) { label.css("color","red").css("font-weight","bold"); } else { label.css("color","").css("font-weight",""); } } function game_helper() { if (page_edit) { gh_form = document.forms.torrent_group gh_button_label = label_button.edit; } //if form returned error doesn't erase values if (!page_edit) if (gh_form.release_desc.value != "") {gh_release_desc_lock = true; gh_version_lock=true;} //GOG option $("select#os_includes").append("<option value='GOG'>GOG</option>"); //extra fields $("select#os_includes").parent().parent().after('<tr><td class="store">Store:</td><td><select id="source" name="source"><option value="">---</option><option value="Steam">Steam</option><option value="GOG">GOG</option><option value="MAS">Mac App Store</option><option value="Humble Bundle">Humble Bundle</option><option value="Itch.io">Itch.io</option><option value="EGS">Epic Games Store</option><option value="Official Website">Official Website</option></select></td><td class="label">Treatment:</td><td><select id="cure" name="cure"><option value="">---</option><option value="DRM Free">DRM Free</option><option value="ACTiVATED">ACTiVATED</option><option value="SKiDROW">SKiDROW</option><option value="Nemirtingas Steam Emu">Nemirtingas Steam Emu</option></select></td></tr>') //default release values if (!page_edit) { gh_form.type.selectedIndex = 1; gh_form.os_type.selectedIndex = 2; gh_form.os_includes.selectedIndex = 1; } //form if (page_edit) { $("input[name='image']").parent().prepend("<h3>Steam:</h3><input id='gh_steam_input' placeholder='Game title or Steam store page'/><br><input type='checkbox' id='gh_update_image' checked/> <label>Image</label> <input type='checkbox' id='gh_update_desc' checked/> <label>Description</label><br/>"); } else { $("#categories").parent().parent().after("<tr id='game_helper'><td class='label'>Steam info:</td><td><input id='gh_steam_input' type='text' placeholder='Game title or Steam link' /></td></tr>"); } //button $("#gh_steam_input").after(" <input type='button' id='gh_steam_button' value='"+gh_button_label+"'/>"); $("#gh_steam_button").click(function() { $("#gh_steam_input").val(get_appid($("#gh_steam_input").val())); var appid = $("#gh_steam_input").val(); appid = encodeURI(appid); if (!isNaN(appid)) { var request = new GM.xmlHttpRequest({ method: "GET", url: "http://store.steampowered.com/api/appdetails?l=en&appids=" + appid, responseType: "json", onload: fill_form }); } else { if ($("select#gh_steam_search_results").length==0) { appid = appid.replace(" ", "+"); var searchrequest = new GM.xmlHttpRequest({ method: "GET", url: "https://store.steampowered.com/search/?term=" + appid + "&category1=998", responseType: "document", onload: fill_search }); } else { $("#gh_steam_input").val($("#gh_steam_search_results").val()); $("#gh_steam_search_results").remove(); $("#gh_steam_button").click(); } } }); //qol $("#gh_steam_input").on("input", function(e) { $("#gh_steam_search_results").remove(); var appid = $("#gh_steam_input").val(); if (!isNaN(appid)) { $("#gh_steam_button").attr("value", gh_button_label); } else { $("#gh_steam_button").attr("value", "Search"); } }); $("#gh_steam_input").on("keydown", function(e) { if (e.which == 13) { //enter key $("#gh_steam_button").click(); return false; } }); if (!page_edit) { //version detection $("#file").change(function() {fill_version($("#file").val());}); //input checks $("#os_version").on("input", function() { gh_version_lock = $(this).val() != ""? true : false; check_length(this, version_max_length); fill_release_desc(); }); $("#os_minprocessor").on("input", function() {check_length(this, cpu_max_length)}); $("#os_minversion").on("input", function() {check_length(this, os_max_length)}); $("#os_minram").on("input", function() {check_length(this, ram_max_length)}); $("#os_minvideoram").on("input", function() {check_length(this, vram_max_length)}); $("#image").change(function() {gh_image_lock = $("#image").val() != ""? true : false;}) //presets $(gh_form.release_desc).change(function() { gh_release_desc_lock = true; $("select#source").attr("disabled", "true"); $("select#cure").attr("disabled", "true"); gh_form.cure.selectedIndex = 0; gh_form.source.selectedIndex = 0; }) $("select#os_includes").change(function() { if (gh_form.os_includes.selectedIndex == 5) { makeitgog(); } else { fill_release_desc(); } }); $("select#source").change(function() { var source = $("select#source").val(); if (source == "GOG") { makeitgog(); } else { gh_form.os_includes.selectedIndex = 1; if (source == "Itch.io" || source == "EGS" || source == "Humble Bundle") gh_form.cure.selectedIndex = 1; fill_release_desc(); } }); $("select#cure").change(function() { var cure = $("select#cure").val() if (cure == "ACTiVATED" || cure == "Nemirtingas Steam Emu" || cure == "SKiDROW") { gh_form.source.selectedIndex = 1; gh_form.os_includes.selectedIndex = 1; } fill_release_desc(); }); } else { $("input#gh_update_image").change(function() { gh_image_lock = !$(this).prop("checked"); }); $("input#gh_update_desc").change(function() { gh_group_desc_lock = !$(this).prop("checked"); }); } //autofill if (page_add) $("#gh_steam_input").val(get_appid(gh_form.desc.value)); if (page_edit) $("#gh_steam_input").val(get_appid(gh_form.body.value)); //autoload if (page_add && $("#gh_steam_input").val() != "" && !gh_release_desc_lock) $("#gh_steam_button").click(); } (function() { 'use strict'; var type_field = $("#categories")[0]; var macos_games = 1; if(page_edit) { type_field = $("#newcategoryid")[0]; if (type_field.selectedIndex == macos_games || force_enabled) game_helper(); } else { if ((type_field.selectedIndex == macos_games && page_add) || force_enabled) game_helper(); //manage type change var type = $("#categories"); var type_default_behavior = type.attr("onchange"); type.removeAttr("onchange"); type.change(function() { $("#dynamic_form").prepend("<input type='hidden' id='gh_hidden_key'>"); //hide a key to check loading eval(type_default_behavior); var safety = 0; //for polar bears' sake var loading = setInterval(function(){ if($("#gh_hidden_key").length==0) { var game_helper_on = $("#game_helper").length == 0? false : true; if (type_field.selectedIndex == macos_games && !game_helper_on) game_helper(); if (game_helper_on) $("#game_helper").remove(); clearInterval(loading); } if (safety > 30) clearInterval(loading); //kill loading >9000 ms safety ++; }, 300); }); } })();