get_emotes impl
This commit is contained in:
		
							parent
							
								
									70ccf22939
								
							
						
					
					
						commit
						87f2833a3a
					
				
					 2 changed files with 44 additions and 24 deletions
				
			
		
							
								
								
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										16
									
								
								.vscode/tasks.json
									
									
									
									
										vendored
									
									
								
							| 
						 | 
				
			
			@ -1,16 +0,0 @@
 | 
			
		|||
{
 | 
			
		||||
	"version": "2.0.0",
 | 
			
		||||
	"tasks": [
 | 
			
		||||
		{
 | 
			
		||||
			"type": "npm",
 | 
			
		||||
			"script": "build",
 | 
			
		||||
			"group": {
 | 
			
		||||
				"kind": "build",
 | 
			
		||||
				"isDefault": true
 | 
			
		||||
			},
 | 
			
		||||
			"problemMatcher": [],
 | 
			
		||||
			"label": "npm: build",
 | 
			
		||||
			"detail": "webpack --config webpack.config.js"
 | 
			
		||||
		}
 | 
			
		||||
	]
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										52
									
								
								src/main.ts
									
									
									
									
									
								
							
							
						
						
									
										52
									
								
								src/main.ts
									
									
									
									
									
								
							| 
						 | 
				
			
			@ -1,12 +1,49 @@
 | 
			
		|||
const emote_regex = /bttv:([^\s]+)/g;
 | 
			
		||||
 | 
			
		||||
async function bttv_get_url(code: string): Promise<string> {
 | 
			
		||||
  return "changed from ext";
 | 
			
		||||
type Emote = {
 | 
			
		||||
  code: string;
 | 
			
		||||
  url: string;
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
async function bttv_get_url(code: string): Promise<Emote> {
 | 
			
		||||
  return {
 | 
			
		||||
    code: code,
 | 
			
		||||
    url: `result_${code}`,
 | 
			
		||||
  };
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
type EmoteMap = { [code: string]: string };
 | 
			
		||||
 | 
			
		||||
async function get_emotes(codes: Iterable<string>): Promise<EmoteMap> {
 | 
			
		||||
  const codes_set = new Set(codes);
 | 
			
		||||
 | 
			
		||||
  // queue emote jobs
 | 
			
		||||
  const queue = [...codes_set].map((code) => bttv_get_url(code));
 | 
			
		||||
 | 
			
		||||
  // run
 | 
			
		||||
  const result: EmoteMap = {};
 | 
			
		||||
  for (const job of await Promise.all(queue)) {
 | 
			
		||||
    result[job.code] = job.url;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  return result;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
async function process_text(text: string): Promise<string> {
 | 
			
		||||
  const emotes = text.matchAll(emote_regex);
 | 
			
		||||
  const matches = [...text.matchAll(emote_regex)];
 | 
			
		||||
  const emotes = await get_emotes(matches.map((elem) => elem[1]));
 | 
			
		||||
 | 
			
		||||
  for (const emote of matches.reverse()) {
 | 
			
		||||
    const [match, code] = emote;
 | 
			
		||||
    const index = emote.index ?? 0;
 | 
			
		||||
 | 
			
		||||
    text =
 | 
			
		||||
      text.substring(0, index) +
 | 
			
		||||
      emotes[code] +
 | 
			
		||||
      text.substring(index + match.length);
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  console.log(text);
 | 
			
		||||
  return text;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -21,17 +58,16 @@ async function process_text(text: string): Promise<string> {
 | 
			
		|||
 | 
			
		||||
    const img = document.createElement("img");
 | 
			
		||||
    img.setAttribute("src", chrome.runtime.getURL("bttv.png"));
 | 
			
		||||
    img.style.setProperty("max-height", "25px");
 | 
			
		||||
    img.style.setProperty("max-width", "25px");
 | 
			
		||||
    img.style.setProperty("vertical-align", "middle");
 | 
			
		||||
 | 
			
		||||
    btn.addEventListener("click", async (event) => {
 | 
			
		||||
      const cb_input = document.querySelector("#mgc_cb_evo_input");
 | 
			
		||||
      if (!(cb_input instanceof HTMLInputElement)) return;
 | 
			
		||||
 | 
			
		||||
      cb_input.focus();
 | 
			
		||||
      cb_input.value += await bttv_get_url("foo bar");
 | 
			
		||||
      cb_input.focus();
 | 
			
		||||
      await process_text("bttv:foo bttv:bar bttv:foo");
 | 
			
		||||
 | 
			
		||||
      // await process_text(cb_input.value);
 | 
			
		||||
      // cb_input.focus();
 | 
			
		||||
    });
 | 
			
		||||
 | 
			
		||||
    btn.appendChild(img);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue