git @ Cat's Eye Technologies Gemooy / master src / gemooy-launcher.js
master

Tree @master (Download .tar.gz)

gemooy-launcher.js @masterraw · history · blame

// SPDX-FileCopyrightText: In 2012, Chris Pressey, the original author of this work, placed it into the public domain.
// For more information, please refer to <https://unlicense.org/>
// SPDX-License-Identifier: Unlicense

function launch(prefix, container, config) {
  if (typeof container === 'string') {
    container = document.getElementById(container);
  }
  config = config || {};

  function loadThese(deps, callback) {
    var loaded = 0;
    for (var i = 0; i < deps.length; i++) {
      var elem = document.createElement('script');
      elem.src = prefix + deps[i];
      elem.onload = function() {
        if (++loaded < deps.length) return;
        callback();
      }
      document.body.appendChild(elem);
    }
  }

  loadThese([
    "yoob/element-factory.js",
    "yoob/controller.js",
    "yoob/playfield.js",
    "yoob/playfield-canvas-view.js",
    "yoob/cursor.js",
    "yoob/preset-manager.js",
    "yoob/source-manager.js"
  ], function() {
    loadThese(["gemooy.js"], function() {
      var controlPanel = yoob.makeDiv(container);
      var subPanel = yoob.makeDiv(container);
      var selectSource = yoob.makeSelect(subPanel, 'example source:', []);
      var display = yoob.makeDiv(container);
      display.id = 'canvas_viewport';
      var canvas = yoob.makeCanvas(display, 400, 400);
      var editor = yoob.makeTextArea(container, 40, 25);

      var v = (new yoob.PlayfieldCanvasView()).init({ canvas: canvas });
      v.setCellDimensions(undefined, 20);

      var c = (new GemooyController()).init({
          panelContainer: controlPanel,
          view: v
      });
      c.clickStop();

      var sourceManager = (new yoob.SourceManager()).init({
          panelContainer: controlPanel,
          editor: editor,
          hideDuringEdit: [display],
          disableDuringEdit: [c.panel],
          storageKey: 'gemooy.js',
          onDone: function() {
              c.performReset(this.getEditorText());
          }
      });
      
      var presetManager = (new yoob.PresetManager()).init({
        selectElem: selectSource
      }).populateFromPairs(sourceManager, examplePrograms);
      presetManager.select('toggle-column.gemooy');
    });
  });
}