export enum NewsType { Markdown, // Without html + yaml ManaPlus //update news txt } export namespace News { // Fetches only the most recent entry export async function get(url:string,parser:NewsType):Promise{ try { //1. load const unsafe_content = await request(`${url}?${Math.random()}`); //2. sanitize const content = killHTML( unsafe_content ); //3. parse if(parser == NewsType.ManaPlus){ return manaTextParser(content); } else if (parser == NewsType.Markdown){ return "Parsing Failed: Markdown Parser is not implemented yet"; } } catch (e){ console.log(e); return `Failed to get the news, please select the news category on the right to view all news`; } } } function request(url:string):Promise{ return new Promise((res, rej)=>{ var xhr = new XMLHttpRequest(); xhr.addEventListener("error", (ev)=>{ rej(ev); }); xhr.open('GET', url); xhr.onload = function() { if (xhr.status === 200) { res(xhr.responseText); } else { rej(new Error(`xhr.status: ${xhr.status} != 200`)); } }; xhr.send(); }); } function killHTML(raw:string):string{ return raw.replace(/<|>/,"⚠️"); } function manaTextParser(input:string){ const tmwLegacy = "##7Legacy Server##0"; let result = input; if(result.indexOf(tmwLegacy) !== -1){ const i = result.indexOf(tmwLegacy) + tmwLegacy.length; result = result.slice(0, result.indexOf(tmwLegacy, i)); result = result.replace(/\n \n /, ""); } result = result.replace(/\[@@(.+?)\|(.+?)@@\]/g,'$2') .replace(/##B(.+?)##b/g,'$1') .replace(/##0 Actual Release: ##1 *(.+)/,'

$1

') .replace(/\n/g,"
"); if(result.indexOf(tmwLegacy) === -1) result = result.replace(/br>([^]+?)

$1


<').replace(/
/g,""); return result.replace(/##\d/g,""); }