mchdev / metadev-forms-sce

// ==UserScript==
// @name         metadev-forms-sce
// @namespace    https://openuserjs.org/users/mchdev
// @description  enhanced screenscript editor for form scripts
// @homepageURL  https://openuserjs.org/scripts/mchdev/metadev-forms-sce
// @updateURL    https://openuserjs.org/meta/mchdev/metadev-forms-sce.meta.js
// @downloadURL  https://openuserjs.org/install/mchdev/metadev-forms-sce.user.js
// @copyright    2020-2021, mchdev (https://openuserjs.org/users/mchdev)
// @license      MIT
// @version      0.1
// @grant        none
// @author       mchdev
// @match        https://meta.vub.sk/*Form/*FormScript*
// @match        https://meta2.vub.sk/*Form/*FormScript*
// @require      https://storage.googleapis.com/sce-editor/sce.js
// ==/UserScript==

(function() {
  'use strict';

  function getMetaUrl() {
    var form = $('form.edit-form');
    var queryParameters = getBoxParams(form);
    queryParameters['noredirect'] = 'true';

    var link = '';
    if ($(form).parents('div.boxloader').length > 0) {
      link = $(form).parents('div.boxloader').first().attr('data-link').split('?');
      link[1] = jQuery.param(queryParameters, true);
      link = link[0] + '?' + link[1];
    } else {
      link = location.pathname + '?' + jQuery.param(queryParameters);
    }

    return link;
  }

  function getNewUrl(uri) {
    var url = new URL(uri);
    var queryParameters = deParamFromString(url.search.substring(1));
    var action = getActionFromPath(queryParameters['p']);
    if (action == 'create') {
      queryParameters['p'] = setActionInPath(queryParameters['p'], '');
      if (queryParameters['p'] != '') {
        queryParameters['p'] = queryParameters['p'] + ';' + 'newid';
        return url.pathname + '?' + jQuery.param(queryParameters);
      } else {
        return url.pathname + 'newid' + '?' + jQuery.param(queryParameters);
      }
    }
  }

  function getNewMetaUrl(metaUrl) {
    return getNewUrl(metaUrl);
  }

  function getRedirectUrl() {
    return getNewUrl(location.href);
  }

  function getModules() {
    var modules = [
      {
        path: 'Form Logic',
        code: $('textarea[id$="svc:formlogic"]').text() || '',
        param: $('textarea[id$="svc:formlogic"]').attr('id'),
      },
      {
        path: 'Form Validations',
        code: $('textarea[id$="svc:formvalidation"]').text() || '',
        param: $('textarea[id$="svc:formvalidation"]').attr('id'),
      },
    ];

    return modules;
  }

  $(document).ready(function() {
    setTimeout(function() {
      var metaUrl = getMetaUrl();
      console.log('metaUrl: ', metaUrl);
      var newMetaUrl = getNewMetaUrl(metaUrl);
      console.log('newMetaUrl: ', newMetaUrl);
      var redirectUrl = getRedirectUrl();
      console.log('redirectUrl: ', redirectUrl);
      var modules = getModules();
      console.log('modules: ', modules);

      if (!metaUrl || !modules) {
        console.log('invalid input');
        return;
      }

      var chrome = navigator.userAgent.indexOf('Chrome') > -1;
      var firefox = navigator.userAgent.indexOf('Firefox') > -1;
      firefox && $('#main').css('height', '100%');
      firefox && $('#inside').css('display', 'flex').css('flex-direction', 'row').css('height', '100%');
      $(document.body).css('overflow', 'hidden');

      $('#content').css('display', 'flex').css('flex-direction', 'column').css('margin-left', 0).css('height', '100%').css('width', '100%').css('padding-bottom', '10px');
      $('.boxloader').css('margin-bottom', 0);
      $('.box-head').width('100%');
      $('.tab.tbl1').css('padding', 0);

      $('.box[data-prop="svc:FormScript"]').hide();
      var app = document.createElement('div');
      app.style.height = '100%';
      app.style.width = '100%';
      app.style.flex = '1';
      $('.boxloader').after(app);
      sce_mount(app, modules, metaUrl, newMetaUrl, redirectUrl);
      }, 1000);
  });

})();