runtimeDispatchJs top-level constant

String const runtimeDispatchJs

Implementation

const String runtimeDispatchJs = r'''
function runAction(action, ctx) {
  if (!action) return;
  const verb = action.verb;
  const args = action.args;
  ctx = ctx || {};

  switch (verb) {
    case 'noop':
      return;
    case 'surface.open':
      openSurface(args[0], args[1], { trigger: ctx.trigger });
      return;
    case 'surface.close':
      closeSurface(args[0], args[1]);
      return;
    case 'surface.toggle':
      toggleSurface(args[0], args[1], { trigger: ctx.trigger });
      return;
    case 'surface.dismiss': {
      const surface = withinSurface(ctx.trigger);
      if (surface) {
        closeSurface(surfaceType(surface), surfaceId(surface));
      } else {
        dismissTopSurface();
      }
      return;
    }
    case 'value.set':
      setGroupValue(args[0], args[1] || '');
      return;
    case 'value.toggle':
      toggleGroupValue(args[0], args[1] || '');
      return;
    case 'value.clear':
      clearGroup(args[0]);
      return;
    case 'tab.activate':
      activateTab(args[0], args[1]);
      return;
    case 'panel.expand':
      expandPanel(args[0], args[1]);
      return;
    case 'panel.collapse':
      collapsePanel(args[0], args[1]);
      return;
    case 'panel.toggle':
      togglePanel(args[0], args[1]);
      return;
    case 'step.go':
      goToStep(args[0], args[1]);
      return;
    case 'page.go':
      goToPage(args[0], args[1]);
      return;
    case 'carousel.go':
      goToSlide(args[0], args[1]);
      return;
    case 'slider.set':
      setSliderValue(args[0], args[1] || '0', args[2]);
      return;
    case 'cycle.next':
      cycleStep(args[0], 1);
      return;
    case 'cycle.prev':
      cycleStep(args[0], -1);
      return;
    case 'calendar.prev':
      calendarPrev(args[0]);
      return;
    case 'calendar.next':
      calendarNext(args[0]);
      return;
    case 'calendar.today':
      calendarToday(args[0]);
      return;
    case 'calendar.select':
      calendarSelect(args[0], (ctx.trigger && ctx.trigger.getAttribute) ? ctx.trigger.getAttribute('data-arcane-value') : args[1]);
      return;
    case 'command.filter': {
      const inp = ctx.trigger;
      const q = inp && inp.value !== undefined ? inp.value : (args[1] || '');
      filterCommand(args[0], q);
      return;
    }
    case 'command.selectFirst':
      commandSelectFirst(args[0]);
      return;
    case 'form.submit':
      submitForm(args[0]);
      return;
    case 'form.reset':
      resetForm(args[0]);
      return;
    case 'form.validate':
      validateForm(args[0]);
      return;
    case 'field.set':
      setFieldValue(args[0], args[1], args[2] || '');
      return;
    case 'copy':
      copyText(args[0] || '', args[1]);
      return;
    case 'nav.go':
      navGo(args[0]);
      return;
    case 'nav.external':
      navExternal(args[0]);
      return;
    case 'nav.back':
      navBack();
      return;
    case 'theme.mode.set':
      setThemeMode(args[0]);
      return;
    case 'theme.mode.toggle':
      toggleThemeMode();
      return;
    case 'theme.stylesheet.set':
      setStylesheet(args[0]);
      return;
    case 'theme.palette.set': {
      const parts = (args[0] || '').split('/');
      setPalette(parts[0] || '', parts[1] || '');
      return;
    }
    case 'toast.show': {
      const payload = readJson(args[0], { message: args[0] || '' });
      showToast(payload);
      return;
    }
    case 'event.dispatch': {
      const detail = args[1] ? readJson(args[1], {}) : {};
      fireEvent(document, args[0], detail);
      return;
    }
    case 'script.run': {
      const fn = ARCANE.scripts[args[0]];
      if (typeof fn === 'function') {
        fn.apply(null, args.slice(1));
      }
      return;
    }
    default:
      if (verb && verb.indexOf(':') > 0) {
        fireEvent(document, verb, { args: args, ctx: ctx });
        return;
      }
      console.warn('[arcane] unknown action:', verb);
  }
}

function runActions(str, ctx) {
  if (!str) return;
  const list = parseActions(str);
  for (let i = 0; i < list.length; i++) {
    runAction(list[i], ctx);
  }
}

ARCANE.run = runActions;
ARCANE.runOne = runAction;
''';