1/* âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ 2 The plan cards, rendered from one place. 3 4 Eight pages used to carry their own copy of these four cards â about 500 5 lines each, identical apart from the Free tagline, the dropdown order and 6 which dropdown starts open. Adding Gimkit meant editing all eight. Now a 7 page writes only the mount point: 8 9 <div class="pricing-cards" data-pricing data-first="gimkit" 10 data-tagline="Highlighting free on Gimkit"></div> 11 <script src="/pricing-block.js?v=1"></script> 12 13 data-first the page's own product: listed first and opened. Omit on the 14 homepage and /pricing/, where nothing is opened. 15 data-tagline the line under "Free". 16 17 Loaded WITHOUT defer, straight after the mount, on purpose: the cards have to 18 exist before the inline reveal script at the foot of the page tags them and 19 before pricing-cards.js (deferred) wires the buttons. It is one small cached 20 file and it does no network or layout work. 21 22 To add a platform: one entry in ORDER, one in NAMES, one in DROPS. 23 âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ */ 24(function () { 25 var me = document.currentScript; 26 var mount = me && me.previousElementSibling; 27 if (!mount || !mount.hasAttribute('data-pricing')) mount = document.querySelector('[data-pricing]'); 28 if (!mount) return; 29 30 var ORDER = ["delta", "edpuzzle", "membean", "quizlet", "blooket", "gimkit", "wayground"]; 31 var NAMES = {"membean": "Membean", "delta": "DeltaMath", "edpuzzle": "Edpuzzle", "blooket": "Blooket", "quizlet": "Quizlet", "gimkit": "Gimkit", "wayground": "Wayground"}; 32 // one card shell per tier: Free, Weekly, Monthly, Yearly 33 var CHROME = [ 34 "<article class=\"plan-card starter-card\" data-reveal><div class=\"plan-top\"><h3>Free</h3><p class=\"pc-tagline\">{{tagline}}</p></div><div class=\"pc-buy\"><p class=\"price\"><strong>$0</strong><span>/forever</span></p><div class=\"pc-action\"><a class=\"plan-cta starter\" href=\"https://app.geniecheats.com/auth/signin\">Make an account</a><p class=\"plan-note\">No credit card required</p></div></div><div class=\"pc-drops\">{{drops}}</div></article>", 35 "<article class=\"plan-card\" data-reveal><div class=\"plan-top\"><h3>\n Weekly\n </h3><p class=\"pc-tagline\">Short commitment, full access</p></div><div class=\"pc-buy\"><p class=\"price\"><strong>$1.99</strong><span>/week</span></p><div class=\"pc-action\"><a class=\"plan-cta weekly\" href=\"https://app.geniecheats.com/auth/signin?plan=weekly\">Get Weekly</a><p class=\"plan-note\">Cancel anytime</p></div></div><div class=\"pc-drops\">{{drops}}</div></article>", 36 "<article class=\"plan-card ultra-card\" data-reveal><div class=\"plan-top\"><h3>\n Monthly\n <span class=\"trial-chip\" data-ultra-trial>3-day trial</span></h3><p class=\"pc-tagline\">The usual choice — try it free for 3 days</p></div><div class=\"pc-buy\"><!-- Two headline prices, swapped by pricing-cards.js to match the\n note below. A trial-eligible visitor gets the 3 free days and\n then the full $4.99 â the $1.50 first-month coupon is NOT\n applied on a trial checkout, because a `once` coupon would be\n consumed by the $0 invoice Stripe raises at trial start. An\n account that has already used its trial buys at $3.49 for the\n first month instead. Showing $3.49 to someone who will be\n charged $4.99 is the mismatch this replaced. --><p class=\"price\" data-ultra-price-trial hidden><strong>$4.99</strong><span>/month</span></p><p class=\"price\" data-ultra-price-default><s>$4.99</s><strong>$3.49</strong><span>/first month</span></p><div class=\"pc-action\"><a class=\"plan-cta ultra\" href=\"https://app.geniecheats.com/auth/signin?plan=ultra\">3-Day Free Trial</a><!-- pricing-cards.js swaps these: an account that has already used\n its trial must not be shown a trial footnote. --><p class=\"plan-note\" data-ultra-note-trial>Free for 3 days, then $4.99/month. Cancel anytime.</p><p class=\"plan-note\" data-ultra-note-default hidden>$3.49 your first month, then $4.99/month. Cancel anytime.</p></div></div><div class=\"pc-drops\">{{drops}}</div></article>", 37 "<article class=\"plan-card\" data-reveal><div class=\"plan-top\"><h3>
37\n Yearly\n <span class=\"value-chip\">Save 33%</span></h3><p class=\"pc-tagline\">Best value, paid once</p></div><div class=\"pc-buy\"><p class=\"price\"><strong>$39.99</strong><span>/year</span></p><p class=\"pc-permo\">Works out to $3.33/month</p><div class=\"pc-action\"><a class=\"plan-cta yearly\" href=\"https://app.geniecheats.com/auth/signin?plan=yearly\">Get Yearly</a><p class=\"plan-note\">Billed once a year. Cancel anytime.</p></div></div><div class=\"pc-drops\">{{drops}}</div></article>" 38]; 39 // per platform: [free body, paid body] â or four bodies where the tiers differ 40 var DROPS = { 41 "delta": [ 42 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-deltamath.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">DeltaMath</span><span class=\"pc-drop-sub\">Delta Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\">DeltaMath has no free tier. You get a <strong>10-minute demo</strong> with everything unlocked — it counts only while Delta Genie is actually working and pauses when you stop, so you keep what you don’t use. After that it needs a paid plan.</p><ul class=\"feature-list\"><li class=\"is-included\">Full DeltaMath auto-solve<span class=\"fl-sub\">whole assignments, start to finish</span></li><li class=\"is-included\">Snip & Solve<span class=\"fl-sub\">any problem from a screenshot — 10 a day, then credit packs</span></li><li class=\"is-included\">Unlimited auto-solve problems</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>", 43 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-deltamath.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">DeltaMath</span><span class=\"pc-drop-sub\">Delta Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Full DeltaMath auto-solve<span class=\"fl-sub\">whole assignments, start to finish</span></li><li class=\"is-included\">Snip & Solve<span class=\"fl-sub\">any problem from a screenshot — 10 a day, then credit packs</span></li><li class=\"is-included\">Unlimited auto-solve problems</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>" 44 ], 45 "edpuzzle": [ 46 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-edpuzzle.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Edpuzzle</span><span class=\"pc-drop-sub\">EdGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Multiple choice<span class=\"fl-sub\">free, no plan needed</span></li><li class=\"is-included\">Video speed & background play</li><li class=\"is-locked\">Written answers<span class=\"fl-sub\">open-ended and reflection questions</span></li><li class=\"is-locked\">Transcription for videos with no captions</li></ul></div>", 47 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-edpuzzle.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Edpuzzle</span><span class=\"pc-drop-sub\">EdGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Written answers<span class=\"fl-sub\">open-ended and reflection questions</span></li><li class=\"is-included\">Multiple choice</li><li class=\"is-included\">Transcription for videos with no captions</li><li class=\"is-included\">Video speed & background play</li></ul></div>" 48 ], 49 "membean": [ 50 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-membean.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Membean</span><span class=\"pc-drop-sub\">MemGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\"><strong>MemGenie</strong> is our separate Chrome extension for Membean. These benefits apply on Membean, not on {{here}}.</p><ul class=\"feature-list\"><li class=\"is-included\">Highlight the correct answer<span class=\"fl-sub\">typing, multiple choice, learn words</span></li><li class=\"is-included\">Fully undetectable</li><li class=\"is-included\">150 questions per day</li><li class=\"is-locked\">Full Membean automation</li><li class=\"is-locked\">Membean quiz auto-solve</li><li class=\"is-locked\">Unlimited questions</li><li class=\"is-locked\">
50Custom accuracy</li><li class=\"is-locked\">Custom timing</li></ul></div>", 51 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-membean.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Membean</span><span class=\"pc-drop-sub\">MemGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\"><strong>MemGenie</strong> is our separate Chrome extension for Membean. These benefits apply on Membean, not on {{here}}.</p><ul class=\"feature-list\"><li class=\"is-included\">Full Membean automation</li><li class=\"is-included\">Membean quiz auto-solve</li><li class=\"is-included\">Unlimited questions</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>" 52 ], 53 "quizlet": [ 54 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-quizlet.webp\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">
54Quizlet</span><span class=\"pc-drop-sub\">Quizlet Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\">Quizlet Genie runs on <strong>Quizlet Live</strong> games. Highlighting the right answer is free on any signed-in account — having it click for you is the paid part.</p><ul class=\"feature-list\"><li class=\"is-included\">Highlights the correct answer<span class=\"fl-sub\">free, no plan needed</span></li><li class=\"is-included\">Fully undetectable</li><li class=\"is-locked\">Full automation<span class=\"fl-sub\">answers the round for you</span></li><li class=\"is-locked\">Custom accuracy</li><li class=\"is-locked\">Custom timing</li></ul></div>", 55 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-quizlet.webp\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Quizlet</span><span class=\"pc-drop-sub\">Quizlet Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Full automation<span class=\"fl-sub\">answers the round for you on Quizlet Live</span></li><li class=\"is-included\">Highlights the correct answer</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>" 56 ], 57 "blooket": [ 58 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-blooket.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Blooket</span><span class=\"pc-drop-sub\">BlookGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\">Answering is <strong>free and unlimited</strong> on any signed-in account — the right tile is highlighted green and you click it. Playing the game for you is the paid half.</p><ul class=\"feature-list\"><li class=\"is-included\">Finds every answer<span class=\"fl-sub\">free and unlimited, no quota</span></li><li class=\"is-included\">Highlights the correct tile<span class=\"fl-sub\">you click it</span></li><li class=\"is-included\">Works on all game modes</li><li class=\"is-locked\">Full auto<span class=\"fl-sub\">plays the whole game, start to finish</span></li><li class=\"is-locked\">Clicks the answer for you</li><li class=\"is-locked\">Answer speed control</li></ul></div>", 59 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-blooket.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Blooket</span><span class=\"pc-drop-sub\">BlookGenie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Full auto<span class=\"fl-sub\">plays the whole game, start to finish</span></li><li class=\"is-included\">Picks the best prize in a split second</li><li class=\"is-included\">Clicks the answer for you</li><li class=\"is-included\">Answer speed control<span class=\"fl-sub\">a range, not a fixed delay</span></li><li class=\"is-included\">Finds every answer<span class=\"fl-sub\">free and unlimited, no quota</span></li><li class=\"is-included\">Works on all game modes</li></ul></div>" 60 ], 61 "gimkit": [ 62 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-gimkit.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Gimkit</span><span class=\"pc-drop-sub\">Gimkit Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\">Gimkit Genie runs on <strong>Gimkit</strong> games. Highlighting the right answer is free on any signed-in account — having it click for you is the paid part.</p><ul class=\"feature-list\"><li class=\"is-included\">Highlights the correct answer<span class=\"fl-sub\">free, no plan needed</span></li><li class=\"is-included\">Fully undetectable</li><li class=\"is-locked\">Full automation<span class=\"fl-sub\">answers the round for you</span></li><li class=\"is-locked\">
62Custom accuracy</li><li class=\"is-locked\">Custom timing</li></ul></div>", 63 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-gimkit.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Gimkit</span><span class=\"pc-drop-sub\">Gimkit Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Full automation<span class=\"fl-sub\">answers and presses Continue for you</span></li><li class=\"is-included\">Highlights the correct answer</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>" 64 ], 65 "wayground": [ 66 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-wayground.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Wayground</span><span class=\"pc-drop-sub\">Wayground Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><p class=\"pc-drop-note\">Wayground Genie runs on <strong>Wayground Live</strong> games. Highlighting the right answer is free on any signed-in account — having it click for you is the paid part.</p><ul class=\"feature-list\"><li class=\"is-included\">Highlights the correct answer<span class=\"fl-sub\">free, no plan needed</span></li><li class=\"is-included\">Fully undetectable</li><li class=\"is-locked\">Full automation<span class=\"fl-sub\">answers the round for you</span></li><li class=\"is-locked\">Custom accuracy</li><li class=\"is-locked\">Custom timing</li></ul></div>", 67 "<summary><img class=\"pc-drop-logo\" src=\"/assets/logo-wayground.png\" alt=\"\" width=\"96\" height=\"96\" loading=\"lazy\" decoding=\"async\"><span class=\"pc-drop-head\"><span class=\"pc-drop-title\">Wayground</span><span class=\"pc-drop-sub\">Wayground Genie</span></span><span class=\"pc-drop-caret\" aria-hidden=\"true\"></span></summary><div class=\"pc-drop-body\"><ul class=\"feature-list\"><li class=\"is-included\">Full automation<span class=\"fl-sub\">answers the round for you on Wayground Live</span></li><li class=\"is-included\">Highlights the correct answer</li><li class=\"is-included\">Custom accuracy</li><li class=\"is-included\">Custom timing</li><li class=\"is-included\">Fully undetectable</li></ul></div>" 68 ] 69}; 70 71 var first = mount.getAttribute('data-first'); 72 var tagline = mount.getAttribute('data-tagline') || 'Free on Blooket, Membean and Edpuzzle'; 73 var order = ORDER.slice(); 74 if (first && order.indexOf(first) > -1) { order.splice(order.indexOf(first), 1); order.unshift(first); } 75 76 function body(prod, tier) { 77 var d = DROPS[prod]; 78 var html = d.length === 2 ? d[tier === 0 ? 0 : 1] : d[tier]; 79 // "These benefits apply on Membean, not on <this page's platform>." only 80 // makes sense on another product's page; elsewhere the whole note goes. 81 if (html.indexOf('{{here}}') > -1) { 82 html = first && first !== prod 83 ? html.replace('{{here}}', NAMES[first]) 84 : html.replace(/<p class="pc-drop-note">(?:(?!<\/p>).)*\{\{here\}\}(?:(?!<\/p>).)*<\/p>/, ''); 85 } 86 return html; 87 } 88 89 mount.innerHTML = CHROME.map(function (shell, tier) { 90 var drops = order.map(function (prod) { 91 return '<details class="pc-drop pc-drop--' + prod + '"' + (prod === first ? ' open' : '') + '>' + body(prod, tier) + '</details>'; 92 }).join(''); 93 return shell.replace('{{tagline}}', tagline).replace('{{drops}}', drops); 94 }).join(''); 95 96 // ââ the crossed-out price ââââââââââââââââââââââââââââââââââââââââââââââââ 97 // The same three-stage flow as the MemGenie all-extensions upsell 98 // (UltraOfferPanel.tsx): $4.99 plain, the neon line drawn across it at 650ms, 99 // then $3.49 rising into place at 1450ms. There the clock starts on mount;
100 // here it starts the moment the card enters the viewport, with threshold 0.01 101 // so it begins as the card's top edge appears rather than a fifth of the way in. 102 // 103 // The class goes on the CARD, not the <s>, so nothing downstream can drop it. 104 // And it has to survive failing: the stylesheet only hides the line and the 105 // $3.49 once .pc-strike-armed is set, so no JS means both are simply there, 106 // and the failsafe below finishes the job if the observer never reports. 107 // $4.99 must never be left looking like the price you pay. 108 (function () { 109 var cards = mount.querySelectorAll('.plan-card'); 110 if (!cards.length) return; 111 var reduce = window.matchMedia && window.matchMedia('(prefers-reduced-motion: reduce)').matches; 112 if (reduce || !('IntersectionObserver' in window)) return; 113 114 document.documentElement.classList.add('pc-strike-armed'); 115 116 function run(card) { 117 setTimeout(function () { card.classList.add('is-struck'); }, 650); 118 setTimeout(function () { card.classList.add('is-priced'); }, 1450); 119 } 120 121 var io = new IntersectionObserver(function (entries, obs) { 122 entries.forEach(function (e) { 123 if (!e.isIntersecting) return; 124 obs.unobserve(e.target); 125 run(e.target); 126 }); 127 }, { threshold: 0.01 }); 128 [].forEach.call(cards, function (c) { io.observe(c); }); 129 130 // Nothing has started by now, so the observer is not reporting. Show the 131 // finished state outright rather than leave the figures wrong. 132 setTimeout(function () { 133 if (mount.querySelector('.plan-card.is-struck')) return; 134 [].forEach.call(cards, function (c) { c.classList.add('is-struck', 'is-priced'); }); 135 }, 3000); 136 })(); 137})();
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.