您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Allows you to copy the gog languages in a BBCode fashion
// ==UserScript== // @name GOG Language BBCode quick copy // @namespace https://greasyforks.org/ // @version 0.02 // @description Allows you to copy the gog languages in a BBCode fashion // @author byJ // @license MIT // @match https://www.gog.com/en/game/* // @grant GM_xmlhttpRequest // @grant GM_setClipboard // @grant GM_setValue // @grant GM_getValue // ==/UserScript== (function() { 'use strict'; if(window.location.hostname === 'www.gog.com'){ gogButton(); } function gogButton(){ const $btn = document.createElement('a'); const text = 'Copy BBCode'; $btn.classList.add('btnv6_blue_hoverfade', 'btn_small'); const $text = $btn.appendChild(document.createElement('span')); $text.innerHTML = `${text}<img src="https://ptpimg.me/sx226x.png">`; $btn.addEventListener('click', function(){ GM_setClipboard(parseGOGLanguage(document), 'text'); $text.childNodes[0].nodeValue = 'copied'; setTimeout(function(){$text.childNodes[0].nodeValue = text; }, 3000); }); const $container = document.querySelector('div.details.table.table--without-border.ng-scope') const $before = document.querySelectorAll('.details__separator')[1] $container.insertBefore($btn, $before); } function parseGOGLanguage($document){ let languages_div_list = $document.querySelectorAll('div.details__content.table__row-content.details__languages-row'); if(!languages_div_list) return; let languages = { 'Audio': [], 'Text': [], }; languages_div_list.forEach(function (element) { let language = element.querySelector('div').textContent.trim(); let audio = element.querySelectorAll('use')[0].getAttribute('xlink:href'); let text = element.querySelectorAll('use')[1].getAttribute('xlink:href'); if (audio === '#check_tick'){ languages['Audio'].push(language) } if (text === '#check_tick'){ languages['Text'].push(language) } }) let output = '' let keys = Object.keys(languages); for(var i = 0; i < keys.length; i++){ let key = keys[i]; if (languages[key].length === 0){ continue } let keygroup = [key]; if(i < keys.length - 1){ for(var iNext = i+1; iNext < keys.length; iNext){ if(areSame(languages[keys[i]], languages[keys[iNext]])) { keygroup.push(keys[iNext]); keys.splice(iNext,1); } else { iNext++; } } } const multi = languages[key].length > 1; if(keys.length === 1){ output += `[b]Language${multi ? "s": ""}[/b]: `; }else { output += `[b]${keygroup.join(' and ')} Language${multi ? "s": ""}[/b]: `; } if(multi){ let lastItem = languages[key].pop(); output += languages[key].join(', '); output += ` and ${lastItem}`; } else { output += languages[key]; } output += '\n'; } return output; } function areSame(array1, array2){ return array1.length === array2.length && array1.sort().every((value, index) => value === array2.sort()[index]) } })();