Noteflight Tuplet Improver

allows you to make tuplets of any size in Noteflight!

// ==UserScript==
// @name           Noteflight Tuplet Improver
// @namespace      Unseeable's Noteflight Tools
// @version        1.2.0
// @description:en allows you to make tuplets of any size in Noteflight!
// @description:fr vous permet de créer des groupes de notes de n'importe quelle taille dans Noteflight!
// @description:de ermöglicht es Ihnen, in Noteflight Noten Gruppierung jeder Größe zu erstellen!
// @author         Colton Stone
// @license        GPL-3.0-or-later
// @tag            productivity
// @tag            utilities
// @match          *://www.noteflight.com/scores/view/*
// @icon           https://www.google.com/s2/favicons?sz=32&domain=noteflight.com
// @grant          unsafeWindow
// @description allows you to make tuplets of any size in Noteflight!
// ==/UserScript==

(function() {
  var uwin = unsafeWindow;
  console.log(uwin);
  function checkNested(obj, args) {
    for (var i = 0; i < args.length; i++) {
      if (!obj || !obj.hasOwnProperty(args[i])) {
        return false;
      }
      obj = obj[args[i]];
    }
    return true;
  }
  function waitForGlobal(obj, keyPath, callback) {
    var args = keyPath.split('.');
    if (checkNested(obj, args)) {
      callback();
    } else {
      setTimeout(function() {
        waitForGlobal(keyPath, callback);
      }, 100);
    }
  }
  var nfeditor;
  waitForGlobal(uwin, "nfeditor", () => {
    nfeditor = uwin.nfeditor;
    nfeditor.palette().currentPalette().applyTuplet = (e) => {
      if (e == "septuplet") {
        var l = uwin.prompt("Enter number of notes in tuplet:");
        nfeditor.documentController.controller.createTuplet(parseInt(l));
      } else {
        nfeditor.palette().currentPalette().applyAction("tuplet", {
          duplet: 2,
          triplet: 3,
          quadruplet: 4,
          quintuplet: 5,
          sextuplet: 6
        }[e]);
      }
    };
  });
})();