"use strict";
/**
* @fileOverview These methods work with and manipulate html
* @module ink/strings/html
* @author Terry Weiss
* @author zumbrunn
* @author Esa-Matti Suurone
*/
var patterns = require( "./patterns" );
/**
* Converts entity characters to HTML equivalents.
*
* @param {string}
* str The string to work with
* @return {string}
*/
exports.unescapeHTML = function ( str ) {
if ( str === null ) {
return '';
}
return String( str ).replace( /\&([^;]+);/g, function ( entity, entityCode ) {
var match;
if ( entityCode in patterns.escapeChars ) {
return patterns.escapeChars[ entityCode ];
} else { //noinspection JSHint
if ( match = entityCode.match( /^#x([\da-fA-F]+)$/ ) ) {
return String.fromCharCode( parseInt( match[ 1 ], 16 ) );
} else { //noinspection JSHint
if ( match = entityCode.match( /^#(\d+)$/ ) ) {
//noinspection JSHint
return String.fromCharCode( ~~match[ 1 ] );
} else {
return entity;
}
}
}
} );
};
/**
* translates all characters of a string into HTML entities
*
* @param {String}
* string the string
* @returns {String} translated result
* @example
* var strings = require("ink-strings");
* strings.entitize("test me");
* -> "test me"
*/
exports.entitize = function ( string ) {
var buffer = [];
for ( var i = 0; i < string.length; i++ ) {
buffer.push( "", string.charCodeAt( i ).toString(), ";" );
}
return buffer.join( "" );
};
/**
* Remove all potential HTML/XML tags from this string
*
* @param {String}
* string the string
* @return {String} the processed string
*/
exports.stripTags = function ( string ) {
return string.replace( /<\/?[^>]+>/gi, '' );
};
/**
* Escape the string to make it safe for use within an HTML document.
*
* @param {String}
* string the string to escape
* @return {String} the escaped string
*/
exports.escapeHtml = function ( string ) {
return string.replace( /&/g, '&' ).replace( /"/g, '"' ).replace( />/g, '>' ).replace( /</g, '<' );
};