From 5719d7e118df84a45bd90fe0b77b40db95aac93e Mon Sep 17 00:00:00 2001 From: Elizabeth Hunt Date: Wed, 5 Apr 2023 09:52:07 -0600 Subject: Gross --- static/js/main.js | 250 +++++++++++++++++++++++++++++------------------------- 1 file changed, 135 insertions(+), 115 deletions(-) (limited to 'static/js/main.js') diff --git a/static/js/main.js b/static/js/main.js index e14b8a6..62c14a9 100644 --- a/static/js/main.js +++ b/static/js/main.js @@ -1,131 +1,139 @@ -const PROG_FACTORIAL = `YOU WON'T WANT TO MISS 'Hello, World!' - -DISCOVER HOW TO factorial WITH n +const PROG_FIBONACCI = ` +DISCOVER HOW TO link WITH a RUMOR HAS IT - WHAT IF n IS ACTUALLY 0 - SHOCKING DEVELOPMENT 1 - LIES! - SHOCKING DEVELOPMENT - n TIMES factorial OF n MINUS 1 + DISCOVER HOW TO query WITH first + RUMOR HAS IT + WHAT IF first IS ACTUALLY 1 + SHOCKING DEVELOPMENT a + LIES! + SHOCKING DEVELOPMENT 2 + END OF STORY + SHOCKING DEVELOPMENT query END OF STORY -EXPERTS CLAIM result TO BE factorial OF 10 -YOU WON'T WANT TO MISS 'Result is' -YOU WON'T WANT TO MISS result +EXPERTS CLAIM something TO BE link OF 3 +YOU WON'T WANT TO MISS something OF 1 -PLEASE LIKE AND SUBSCRIBE`; +PLEASE LIKE AND SUBSCRIBE + +`; -const PROG_FIBONACCI = `DISCOVER HOW TO fibonacci WITH a, b, n +const PROG_FACTORIAL = `DISCOVER HOW TO link WITH a RUMOR HAS IT - WHAT IF n SMALLER THAN 1 - SHOCKING DEVELOPMENT b - LIES! RUMOR HAS IT - YOU WON'T WANT TO MISS b - SHOCKING DEVELOPMENT - fibonacci OF b, a PLUS b, n MINUS 1 + DISCOVER HOW TO query WITH first + RUMOR HAS IT + WHAT IF first IS ACTUALLY 1 + SHOCKING DEVELOPMENT 1 + LIES! + SHOCKING DEVELOPMENT 2 END OF STORY + SHOCKING DEVELOPMENT query END OF STORY -EXPERTS CLAIM limit TO BE 10 -YOU WON'T WANT TO MISS 'First 10 Fibonacci numbers' -EXPERTS CLAIM nothing TO BE fibonacci OF 0, 1, limit +YOU WON'T WANT TO MISS link OF 1 OF 2 PLEASE LIKE AND SUBSCRIBE`; const PROG_DEFAULT = PROG_FIBONACCI; const HEADLINES = [ - `You Won't Believe What This Programming Language Can Do!`, - `The Best Programming Language You Haven't Heard Of (It Will Surprise You!)`, - `Shocking New Programming Language Bewilders Programmers at Google and Facebook!`, - `Programmer Who Made Everything Now Predicts the Next Big Language!`, - `The Secret Programming Language Every 10x Programmer Recommends!`, - `Programmers at Microsoft Hate This One Trick to Get Good at that Code Thing!`, - `How To Lose Brain Fat With This Programming Language!`, - `Your Friends Will Be Jealous About This New Programming Language!`, - `You Can Earn Millions With This Programming Language!`, - `The Cure For Cancer Could Be Found With The Programming Language!` + `You Won't Believe What This Programming Language Can Do!`, + `The Best Programming Language You Haven't Heard Of (It Will Surprise You!)`, + `Shocking New Programming Language Bewilders Programmers at Google and Facebook!`, + `Programmer Who Made Everything Now Predicts the Next Big Language!`, + `The Secret Programming Language Every 10x Programmer Recommends!`, + `Programmers at Microsoft Hate This One Trick to Get Good at that Code Thing!`, + `How To Lose Brain Fat With This Programming Language!`, + `Your Friends Will Be Jealous About This New Programming Language!`, + `You Can Earn Millions With This Programming Language!`, + `The Cure For Cancer Could Be Found With The Programming Language!`, ]; function randomHeadline() { - return HEADLINES[~~(Math.random() * HEADLINES.length)]; + return HEADLINES[~~(Math.random() * HEADLINES.length)]; } -const { - Component, -} = window.Torus; +const { Component } = window.Torus; class Editor extends Component { - init() { - this.prog = PROG_DEFAULT; - // script appends to it - this.output = ''; - this.errors = ''; + init() { + this.prog = PROG_DEFAULT; + // script appends to it + this.output = ""; + this.errors = ""; - this.handleRun = () => this.eval(); - this.handleInput = evt => { - this.prog = evt.target.value; - this.render(); - } - this.handleKeydown = evt => { - if (evt.key === 'Tab') { - evt.preventDefault(); - const idx = evt.target.selectionStart; - if (idx !== null) { - const front = this.prog.substr(0, idx); - const back = this.prog.substr(idx); - this.prog = front + ' ' + back; - this.render(); - evt.target.setSelectionRange(idx + 4, idx + 4); - } - } - } - this.setFactorial = () => { - this.prog = PROG_FACTORIAL; - this.output = this.errors = ''; - this.render(); + this.handleRun = () => this.eval(); + this.handleInput = (evt) => { + this.prog = evt.target.value; + this.render(); + }; + this.handleKeydown = (evt) => { + if (evt.key === "Tab") { + evt.preventDefault(); + const idx = evt.target.selectionStart; + if (idx !== null) { + const front = this.prog.substr(0, idx); + const back = this.prog.substr(idx); + this.prog = front + " " + back; + this.render(); + evt.target.setSelectionRange(idx + 4, idx + 4); } - this.setFibonacci= () => { - this.prog = PROG_FIBONACCI; - this.output = this.errors = ''; - this.render(); - } - } - eval() { - this.output = ''; - this.errors = ''; - try { - const tokens = tokenize(this.prog); - const nodes = new Parser(tokens).parse(); - const env = new Environment({ - print: s => { - this.output += s.toString().toUpperCase() + '!\n'; - this.render(); - }, - input: s => { - return prompt(s); - }, - }); - env.run(nodes); - } catch (e) { - this.errors = e.toString(); - } - this.render(); + } + }; + this.setFactorial = () => { + this.prog = PROG_FACTORIAL; + this.output = this.errors = ""; + this.render(); + }; + this.setFibonacci = () => { + this.prog = PROG_FIBONACCI; + this.output = this.errors = ""; + this.render(); + }; + } + eval() { + this.output = ""; + this.errors = ""; + try { + const tokens = tokenize(this.prog); + const nodes = new Parser(tokens).parse(); + const env = new Environment({ + print: (s) => { + console.log(s); + this.output += s.toString().toUpperCase() + "!\n"; + this.render(); + }, + input: (s) => { + return prompt(s); + }, + }); + env.run(nodes); + } catch (e) { + this.errors = e.toString(); } - compose() { - return jdom`
+ this.render(); + } + compose() { + return jdom`
+ onclick=${ + this.setFibonacci + }>Fibonacci sample + onclick=${ + this.setFactorial + }>Factorial sample + onclick=${ + this.handleRun + }>Run this!
- ${this.prog.split('\n') - .map(line => jdom`

${line.trim() ? line : '-'}

`)} + ${this.prog + .split("\n") + .map((line) => jdom`

${line.trim() ? line : "-"}

`)}