/draft/o2/string/submodule/encode.js
https://github.com/v0lkan/o2.js · JavaScript · 138 lines · 117 code · 6 blank · 15 comment · 0 complexity · 9df5369278f5b1240cdcff8d57860115 MD5 · raw file
- define([
- ], function() {
- 'use strict';
- /*
- * # Module Exports
- */
- var exports = {},
- /*
- * # Mappings
- */
- /*
- *
- */
- xssEncodeNoAmpMap = [
- {regExp: /"/g, replace: '"'},
- {regExp: /</g, replace: '<'},
- {regExp: />/g, replace: '>'},
- {regExp: /\'/g, replace: '''}
- ],
- /*
- *
- */
- xssEncodeMap = [
- {regExp: /"/g, replace: '"'},
- {regExp: /&/g, replace: '&'},
- {regExp: /</g, replace: '<'},
- {regExp: />/g, replace: '>'},
- {regExp: /\'/g, replace: '''}
- ],
- /*
- *
- */
- encodeMap = [
- {regExp: / /g, replace: ' '},
- {regExp: /"/g, replace: '"'},
- {regExp: /&/g, replace: '&'},
- {regExp: /</g, replace: '<'},
- {regExp: />/g, replace: '>'},
- {regExp: /\'/g, replace: '''}
- ],
- /*
- *
- */
- //TODO: [[/stuff/, 'repl'],[/stuff2/, 'repl2']] would save space.
- decodeMap = [
- {regExp: / | /g, replace: ' '},
- {regExp: /"|"|"t;/g, replace: '"'},
- {regExp: /'|'|&aposs;/g, replace: '\''},
- {regExp: /<|</g, replace: '<'},
- {regExp: />|>/g, replace: '>'},
- {regExp: /&|&/g, replace: '&'}
- ],
- /*
- *
- */
- safeHtmlMap = [
- {regExp: /"/g, replace: '"'},
- {regExp: /'/g, replace: '''}
- ],
- /*
- * # Common Text
- */
- kEmpty = '',
- kContainer = 'div',
- /*
- * # Temporary
- */
- tempDiv = null;
- /*
- *
- */
- function processMap(str, map) {
- var result = str,
- i, len, mapItem;
- for (i = 0, len = map.length; i < len; i++) {
- mapItem = map[i];
- result = result.replace(mapItem.regExp, mapItem.replace);
- }
- return result;
- }
- exports.decode = function(str) {
- return processMap([kEmpty, str].join(kEmpty), decodeMap);
- };
- exports.encode = function(str) {
- return processMap([kEmpty, str].join(kEmpty), encodeMap);
- };
- exports.htmlEncode = exports.encode;
- exports.encodeSafeHtml = function(str) {
- if (!tempDiv) {
- tempDiv = document.createElement(kContainer);
- }
- tempDiv.innerHTML = kEmpty;
- tempDiv.appendChild(
- document.createTextNode([kEmpty, str].join(kEmpty))
- );
- return processMap(tempDiv.innerHTML, safeHtmlMap);
- };
- exports.safeHtmlEncode = exports.encodeSafeHtml;
- exports.escape = function(str) {
- return encodeURIComponent([kEmpty, str].join(kEmpty));
- };
- exports.unescape = function(str) {
- return decodeURIComponent([kEmpty, str].join(kEmpty));
- };
- exports.xssEncode = function(str, isAmpersandsPreserved) {
- return processMap([kEmpty, str].join(kEmpty),
- !!isAmpersandsPreserved ? xssEncodeNoAmpMap : xssEncodeMap
- );
- };
- return exports;
- });