142 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			142 lines
		
	
	
		
			3.1 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| /*
 | |
|  * EJS Embedded JavaScript templates
 | |
|  * Copyright 2112 Matthew Eernisse (mde@fleegix.org)
 | |
|  *
 | |
|  * Licensed under the Apache License, Version 2.0 (the "License");
 | |
|  * you may not use this file except in compliance with the License.
 | |
|  * You may obtain a copy of the License at
 | |
|  *
 | |
|  *         http://www.apache.org/licenses/LICENSE-2.0
 | |
|  *
 | |
|  * Unless required by applicable law or agreed to in writing, software
 | |
|  * distributed under the License is distributed on an "AS IS" BASIS,
 | |
|  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 | |
|  * See the License for the specific language governing permissions and
 | |
|  * limitations under the License.
 | |
|  *
 | |
| */
 | |
| 
 | |
| /**
 | |
|  * Private utility functions
 | |
|  * @module utils
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| 'use strict';
 | |
| 
 | |
| var regExpChars = /[|\\{}()[\]^$+*?.]/g;
 | |
| 
 | |
| /**
 | |
|  * Escape characters reserved in regular expressions.
 | |
|  *
 | |
|  * If `string` is `undefined` or `null`, the empty string is returned.
 | |
|  *
 | |
|  * @param {String} string Input string
 | |
|  * @return {String} Escaped string
 | |
|  * @static
 | |
|  * @private
 | |
|  */
 | |
| exports.escapeRegExpChars = function (string) {
 | |
|   // istanbul ignore if
 | |
|   if (!string) {
 | |
|     return '';
 | |
|   }
 | |
|   return String(string).replace(regExpChars, '\\$&');
 | |
| };
 | |
| 
 | |
| var _ENCODE_HTML_RULES = {
 | |
|       '&': '&'
 | |
|     , '<': '<'
 | |
|     , '>': '>'
 | |
|     , '"': '"'
 | |
|     , "'": '''
 | |
|     }
 | |
|   , _MATCH_HTML = /[&<>\'"]/g;
 | |
| 
 | |
| function encode_char(c) {
 | |
|   return _ENCODE_HTML_RULES[c] || c;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Stringified version of constants used by {@link module:utils.escapeXML}.
 | |
|  *
 | |
|  * It is used in the process of generating {@link ClientFunction}s.
 | |
|  *
 | |
|  * @readonly
 | |
|  * @type {String}
 | |
|  */
 | |
| 
 | |
| var escapeFuncStr =
 | |
|   'var _ENCODE_HTML_RULES = {\n'
 | |
| + '      "&": "&"\n'
 | |
| + '    , "<": "<"\n'
 | |
| + '    , ">": ">"\n'
 | |
| + '    , \'"\': """\n'
 | |
| + '    , "\'": "'"\n'
 | |
| + '    }\n'
 | |
| + '  , _MATCH_HTML = /[&<>\'"]/g;\n'
 | |
| + 'function encode_char(c) {\n'
 | |
| + '  return _ENCODE_HTML_RULES[c] || c;\n'
 | |
| + '};\n';
 | |
| 
 | |
| /**
 | |
|  * Escape characters reserved in XML.
 | |
|  *
 | |
|  * If `markup` is `undefined` or `null`, the empty string is returned.
 | |
|  *
 | |
|  * @implements {EscapeCallback}
 | |
|  * @param {String} markup Input string
 | |
|  * @return {String} Escaped string
 | |
|  * @static
 | |
|  * @private
 | |
|  */
 | |
| 
 | |
| exports.escapeXML = function (markup) {
 | |
|   return markup == undefined
 | |
|     ? ''
 | |
|     : String(markup)
 | |
|         .replace(_MATCH_HTML, encode_char);
 | |
| };
 | |
| exports.escapeXML.toString = function () {
 | |
|   return Function.prototype.toString.call(this) + ';\n' + escapeFuncStr
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Copy all properties from one object to another, in a shallow fashion.
 | |
|  *
 | |
|  * @param  {Object} to   Destination object
 | |
|  * @param  {Object} from Source object
 | |
|  * @return {Object}      Destination object
 | |
|  * @static
 | |
|  * @private
 | |
|  */
 | |
| exports.shallowCopy = function (to, from) {
 | |
|   from = from || {};
 | |
|   for (var p in from) {
 | |
|     to[p] = from[p];
 | |
|   }
 | |
|   return to;
 | |
| };
 | |
| 
 | |
| /**
 | |
|  * Simple in-process cache implementation. Does not implement limits of any
 | |
|  * sort.
 | |
|  *
 | |
|  * @implements Cache
 | |
|  * @static
 | |
|  * @private
 | |
|  */
 | |
| exports.cache = {
 | |
|   _data: {},
 | |
|   set: function (key, val) {
 | |
|     this._data[key] = val;
 | |
|   },
 | |
|   get: function (key) {
 | |
|     return this._data[key];
 | |
|   },
 | |
|   reset: function () {
 | |
|     this._data = {};
 | |
|   }
 | |
| };
 | |
| 
 |