Greasy Fork is available in English.

The Works Burger Chooser

Choose a random burger on the works menu

// ==UserScript==
// @name         The Works Burger Chooser
// @namespace    https://greasyfork.org/users/649
// @version      1.3.1
// @description  Choose a random burger on the works menu
// @author       Adrien Pyke
// @match        *://worksburger.com/menu/burger-menu/*
// @grant        unsafeWindow
// ==/UserScript==

(() => {
  'use strict';

  const W = unsafeWindow || window;

  const SCRIPT_NAME = 'The Works Burger Chooser';

  const Util = {
    log(...args) {
      args.unshift(`%c${SCRIPT_NAME}:`, 'font-weight: bold;color: #233c7b;');
      console.log(...args);
    },
    q: (query, context = document) => context.querySelector(query),
    qq: (query, context = document) =>
      Array.from(context.querySelectorAll(query)),
    prepend: (parent, child) => parent.insertBefore(child, parent.firstChild),
    createCheckbox(text) {
      const label = document.createElement('label');
      label.textContent = text;
      const checkbox = document.createElement('input');
      checkbox.type = 'checkbox';
      label.appendChild(checkbox);
      return label;
    },
    randomColor() {
      const letters = '0123456789ABCDEF'.split('');
      let color = '#';
      for (let i = 0; i < 6; i++) {
        color += letters[Math.floor(Math.random() * letters.length)];
      }
      return color;
    },
    createStyle(css) {
      const style = document.createElement('style');
      style.textContent = css;
      document.head.appendChild(style);
    }
  };

  Util.createStyle(`
		.vc_grid-item-mini .vc_col-sm-12 {
			width: 100%
		}
	`);

  const container = document.createElement('div');
  container.setAttribute(
    'style',
    `
		position: fixed;
		bottom: 20px;
		left: 20px;
		padding: 5px;
		z-index: 99999;
		background-color: white;
		display: flex;
		flex-direction: column;
	`
  );

  const vegetarian = Util.createCheckbox('Vegetarian ');
  const cbVegetarian = Util.q('input', vegetarian);
  container.appendChild(vegetarian);

  const button = document.createElement('button');
  button.textContent = 'Choose Random Burger';
  container.appendChild(button);

  document.body.appendChild(container);

  const selectBurger = () => {
    Util.log('Choosing Random Burger...');

    let burgers = Util.qq('.vc_grid-item-mini');
    burgers.forEach(burger => burger.removeAttribute('style'));
    if (cbVegetarian.checked) {
      burgers = burgers.filter(b =>
        Util.q('img[src="/wp-content/uploads/2017/11/veg.png"]', b)
      );
    }

    const burger = burgers[Math.floor(Math.random() * burgers.length)];

    burger.setAttribute(
      'style',
      `
			transition: 0.5s;
			box-shadow: inset 0 0 100px ${Util.randomColor()};
			transform: scale(1.2, 1.2);
			border-radius: 20px;
		`
    );

    setTimeout(() => (burger.style.transform = 'scale(1, 1)'), 500);

    burger.scrollIntoView();
  };

  if (W.BM_MODE) {
    selectBurger();
  }

  button.onclick = selectBurger;
})();