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