The Works Burger Chooser

Choose a random burger on the works menu

  1. // ==UserScript==
  2. // @name The Works Burger Chooser
  3. // @namespace https://greasyfork.org/users/649
  4. // @version 1.3.1
  5. // @description Choose a random burger on the works menu
  6. // @author Adrien Pyke
  7. // @match *://worksburger.com/menu/burger-menu/*
  8. // @grant unsafeWindow
  9. // ==/UserScript==
  10.  
  11. (() => {
  12. 'use strict';
  13.  
  14. const W = unsafeWindow || window;
  15.  
  16. const SCRIPT_NAME = 'The Works Burger Chooser';
  17.  
  18. const Util = {
  19. log(...args) {
  20. args.unshift(`%c${SCRIPT_NAME}:`, 'font-weight: bold;color: #233c7b;');
  21. console.log(...args);
  22. },
  23. q: (query, context = document) => context.querySelector(query),
  24. qq: (query, context = document) =>
  25. Array.from(context.querySelectorAll(query)),
  26. prepend: (parent, child) => parent.insertBefore(child, parent.firstChild),
  27. createCheckbox(text) {
  28. const label = document.createElement('label');
  29. label.textContent = text;
  30. const checkbox = document.createElement('input');
  31. checkbox.type = 'checkbox';
  32. label.appendChild(checkbox);
  33. return label;
  34. },
  35. randomColor() {
  36. const letters = '0123456789ABCDEF'.split('');
  37. let color = '#';
  38. for (let i = 0; i < 6; i++) {
  39. color += letters[Math.floor(Math.random() * letters.length)];
  40. }
  41. return color;
  42. },
  43. createStyle(css) {
  44. const style = document.createElement('style');
  45. style.textContent = css;
  46. document.head.appendChild(style);
  47. }
  48. };
  49.  
  50. Util.createStyle(`
  51. .vc_grid-item-mini .vc_col-sm-12 {
  52. width: 100%
  53. }
  54. `);
  55.  
  56. const container = document.createElement('div');
  57. container.setAttribute(
  58. 'style',
  59. `
  60. position: fixed;
  61. bottom: 20px;
  62. left: 20px;
  63. padding: 5px;
  64. z-index: 99999;
  65. background-color: white;
  66. display: flex;
  67. flex-direction: column;
  68. `
  69. );
  70.  
  71. const vegetarian = Util.createCheckbox('Vegetarian ');
  72. const cbVegetarian = Util.q('input', vegetarian);
  73. container.appendChild(vegetarian);
  74.  
  75. const button = document.createElement('button');
  76. button.textContent = 'Choose Random Burger';
  77. container.appendChild(button);
  78.  
  79. document.body.appendChild(container);
  80.  
  81. const selectBurger = () => {
  82. Util.log('Choosing Random Burger...');
  83.  
  84. let burgers = Util.qq('.vc_grid-item-mini');
  85. burgers.forEach(burger => burger.removeAttribute('style'));
  86. if (cbVegetarian.checked) {
  87. burgers = burgers.filter(b =>
  88. Util.q('img[src="/wp-content/uploads/2017/11/veg.png"]', b)
  89. );
  90. }
  91.  
  92. const burger = burgers[Math.floor(Math.random() * burgers.length)];
  93.  
  94. burger.setAttribute(
  95. 'style',
  96. `
  97. transition: 0.5s;
  98. box-shadow: inset 0 0 100px ${Util.randomColor()};
  99. transform: scale(1.2, 1.2);
  100. border-radius: 20px;
  101. `
  102. );
  103.  
  104. setTimeout(() => (burger.style.transform = 'scale(1, 1)'), 500);
  105.  
  106. burger.scrollIntoView();
  107. };
  108.  
  109. if (W.BM_MODE) {
  110. selectBurger();
  111. }
  112.  
  113. button.onclick = selectBurger;
  114. })();