Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ==UserScript==
- // @name Expand DONGars
- // @namespace http://tampermonkey.net/
- // @version 1.0.0
- // @description Expands Dogars links into their full sets.
- // @author Mr. Sableye
- // @include https://boards.4channel.org/*
- // @include http://boards.4channel.org/*
- // @grant GM.xmlHttpRequest
- // @run-at document-body
- // ==/UserScript==
- let updatedPosts = {};
- // https://github.com/shoedrip-unbound/dogars-frontend/blob/master/src/utils.ts#L70
- const setToString = (set) => {
- let res = '';
- if (set.name)
- res += `${set.name} (${set.species})`;
- else
- res += set.species;
- if (set.gender && set.gender != '' && set.gender != 'N')
- res += ` (${set.gender})`;
- if (set.item && set.item != '')
- res += ` @ ${set.item}`;
- res += `\nAbility: ${set.ability}\n`;
- if (set.level && set.level != 100)
- res += `Level: ${set.level}\n`;
- if (set.shiny)
- res += 'Shiny: Yes\n';
- if (set.happiness !== undefined && set.happiness !== null && set.happiness < 255)
- res += `Happiness: ${set.happiness}\n`;
- let buildstr = (t, f) => ['HP', 'Atk', 'Def', 'SpA', 'SpD', 'Spe']
- .filter(s => set[`${s.toLowerCase()}_${t}`] != f)
- .map(s => set[`${s.toLowerCase()}_${t}`] + ' ' + s)
- .join(' / ');
- let evstr = buildstr('ev', 0);
- let ivstr = buildstr('iv', 31);
- if (evstr != '')
- res += `EVs: ${evstr}\n`;
- let neutral = ['Serious', 'Bashful', 'Docile', 'Hardy', 'Quirky'];
- let nature = neutral.some(n => n == set.nature);
- if (set.nature && !nature)
- res += `${set.nature} Nature\n`;
- if (ivstr != '')
- res += `IVs: ${ivstr}\n`;
- res += [1, 2, 3, 4]
- .map(d => 'move_' + d)
- .filter(n => set[n])
- .map(n => `- ${set[n]}`)
- .join('\n') + '\n';
- if (set.creator || set.hash) {
- res += `Creator: ${set.creator || 'Anonymous'}${(set.hash && `#${set.hash}`) || ''}\n`;
- }
- if (set.description) {
- res += `Description: ${set.description}\n`;
- }
- return res;
- };
- const getSet = (setId) => fetch(`https://dogars.ga/api/sets/${setId}`)
- .then(response => response.text())
- .then(responseText => JSON.parse(responseText))
- .then(responseJson => setToString(responseJson));
- const dogarsLinkRegex = /(https?:\/\/)?dogars.ga\/set\/(?<setId>[0-9]+)/gi;
- const expandDogars = async () => {
- const postElements = document.getElementsByClassName('postMessage');
- for (const postElement of postElements) {
- if (!updatedPosts[postElement.id]) {
- const postElementText = postElement.textContent;
- let match = dogarsLinkRegex.exec(postElementText);
- while (match !== null) {
- if (match?.groups?.['setId']) {
- const set = await getSet(match?.groups?.['setId']);
- const setNode = document.createElement('pre');
- setNode.classList.add('prettyprint');
- setNode.classList.add('prettyprinted');
- const setTextNode = document.createTextNode(set);
- setNode.appendChild(setTextNode);
- const lineBreak = document.createElement('br');
- postElement.appendChild(lineBreak);
- postElement.appendChild(setNode);
- }
- match = dogarsLinkRegex.exec(postElementText);
- }
- updatedPosts[postElement.id] = true;
- }
- }
- };
- setTimeout(expandDogars, 2000);
- setInterval(expandDogars, 30000);
Add Comment
Please, Sign In to add comment