Name

sn_grc.GRCURIUtilsBase

Description

Utility functions for ScopedGlideURI.

Script

var GRCURIUtilsBase = Class.create();
GRCURIUtilsBase.prototype = {
  initialize: function() {},

  checkWizard: function(uri, path) {
      return this._checkWizard(uri, path);
  },

  matchParameters: function(subparam, paramsList) {
      return this._matchParameters(subparam, paramsList);
  },

  unsetParameters: function(uri, params) {
      this._unsetParameters(uri, params);
  },

  /**
   * Redirect to an interceptor page if a wizard (interceptor) exists.
   * @param {Object} uri - ScopedGlideURI instance.
   * @param {string} path - a string that represent uri path.
   * @returns {string} destination uri string
   */
  _checkWizard: function(uri, path) {
      var self = this;
      var already = uri.get('WIZARD:action');
      if (already == 'follow') {
          return null;
      }

      var wizID = new GlideappWizardIntercept(path).get();
      if (!wizID) {
          return path;
      }

      // list of all params in uri
      var paramsList = (uri.toString() || '').split(/.*\?|\x26/);
      // list of params to match in uri 
      var paramsToMatch = ['sysparm_list_', 'sysparm_record_'];
      var fullParamNames = self._getFullParamNames(paramsToMatch, paramsList);
      // list of params to remove from uri
      var paramsToReset = ['sys_is_list', 'sys_is_related_list', 'sys_submitted', 'sysparm_checked_items', 'sysparm_ref_list_query', 'sysparm_current_row'].concat(fullParamNames);
      uri.set('sysparm_parent', wizID);
      self._unsetParameters(uri, paramsToReset);
      uri.set('sysparm_referring_url', uri.toString());
      paramsToMatch = ['fancy\\.', 'sys_rownum', 'sysparm_encoded', 'sysparm_query_encoded'];
      fullParamNames = self._getFullParamNames(paramsToMatch, paramsList);
      paramsToReset = ['sysparm_refer'].concat(fullParamNames);
      self._unsetParameters(uri, paramsToReset);

      return 'wizard_view.do';
  },

  /**
   * Get full paramater name for a list of substring parameters to match.
   * @param {Array[string]} substrings - an array of parameter substrings to match.
   * @param {Array[string]} paramsList - an array of all parameters in a url.
   * @returns {Array[string]} List of url parameter names that matched parameters substring.
   */
  _getFullParamNames: function(substrings, paramsList) {
      var self = this;
      var results = [];
      substrings.forEach(function(subparam) {
          var matchedParams = self._matchParameters(subparam, paramsList);
          if (matchedParams.length > 0) {
              results = results.concat(matchedParams);
          }

      });

      return results;
  },

  /**
   * Get full paramater name for a substring parameter to match.
   * @param {string} subparam - a parameter substring to match.
   * @param {Array[string]} paramsList - an array of all parameters in a url.
   * @returns {Array[string]} List of url parameter names that matched a parameter substring.
   */
  _matchParameters: function(subparam, paramsList) {
      var results = [];
      var regex = new RegExp(subparam + '.*(?=\x3d)'); // match string before "=" sign (param name)
      paramsList.forEach(function(param) {
          var matches = (param || '').match(regex);
          matches && results.push(matches[0]);
      });

      return results;
  },

  /**
   * Reset parameter value to an empty string if it exists (mimicking a remove method).
   * @param {Object} uri - ScopedGlideURI instance.
   * @param {Array[string]} params - an array of parameters to unset in a url.
   * @returns {Object} uri - ScopedGlideURI instance.
   */
  _unsetParameters: function(uri, params) {
      var _params = params || [];
      _params.forEach(function(param) {
          if (uri.get(param)) {
              uri.set(param, '');
          }

      });

      return uri;
  },

  type: 'GRCURIUtilsBase'
};

Sys ID

14420e6eff3220101ec56dbf793bf196

Offical Documentation

Official Docs: