bugcore
Version:
bugcore is a JavaScript library that provides a foundational architecture for object oriented JS
119 lines (96 loc) • 3.68 kB
JavaScript
/*
* Copyright (c) 2016 airbug Inc. http://airbug.com
*
* bugcore may be freely distributed under the MIT license.
*/
//-------------------------------------------------------------------------------
// Annotations
//-------------------------------------------------------------------------------
//@Export('HtmlUtil')
//@Require('ArgUtil')
//@Require('Class')
//@Require('Obj')
//@Require('Url')
//-------------------------------------------------------------------------------
// Context
//-------------------------------------------------------------------------------
require('bugpack').context("*", function(bugpack) {
//-------------------------------------------------------------------------------
// BugPack
//-------------------------------------------------------------------------------
var ArgUtil = bugpack.require('ArgUtil');
var Class = bugpack.require('Class');
var Obj = bugpack.require('Obj');
var Url = bugpack.require('Url');
//-------------------------------------------------------------------------------
// Declare Class
//-------------------------------------------------------------------------------
/**
* @class
* @extends {Obj}
*/
var HtmlUtil = Class.extend(Obj, {
_name: "HtmlUtil"
});
//-------------------------------------------------------------------------------
// Static Methods
//-------------------------------------------------------------------------------
/**
* @static
* @param {string} value
* @return {string}
*/
HtmlUtil.escapeHtml = function(value) {
return String(value).replace(/&/g, '&').replace(/</g, '<').replace(/>/g, '>').replace(/"/g, '"');
};
/**
* @static
* @param {string} value
* @param {function(string, Url)} replacerFunction
* @return {string}
*/
HtmlUtil.replaceUrls = function(value, replacerFunction) {
var regex = /(((([A-Za-z]{3,9}:(?:\/\/)?)|\/\/)(?:[-;:&=\+\$,A-Za-z0-9]+@)?[A-Za-z0-9.-]+|(?:(?:\w*\.)+|[-;:&=\+\$,A-Za-z0-9]+@)[A-Za-z0-9.-]+)(:(?:[0-9]+))?((?:\/[\+~%\/.A-Za-z0-9-_]*)?(?:\?(?:[-\+=&;:%@.A-Za-z0-9_,]*))?(?:#(?:[A-Za-z0-9\/]*))?)?)/g;
return value.replace(regex, function(match) {
var url = Url.parse(match);
return replacerFunction(match, url);
});
};
/**
* @static
* @param {string} value
* @return {string}
*/
HtmlUtil.stringToHtml = function(value) {
var args = ArgUtil.process(arguments, [
{name: "value", optional: false, type: "string"}
]);
value = args.value;
var html = HtmlUtil.escapeHtml(value);
return HtmlUtil.newlineToBr(html);
};
/**
* @static
* @param {string} value
* @return {string}
*/
HtmlUtil.urlsToHtmlATags = function(value) {
HtmlUtil.replaceUrls(value, function(match, url) {
return '<a href="' + url.toString() + '">' + match + '</a>';
});
};
/**
* @static
* @param {string} value
* @param {boolean=} isXhtml
* @return {string}
*/
HtmlUtil.newlineToBr = function(value, isXhtml) {
var breakTag = (isXhtml || typeof isXhtml === 'undefined') ? '<br />' : '<br>';
return (value + '').replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1'+ breakTag +'$2');
};
//-------------------------------------------------------------------------------
// Exports
//-------------------------------------------------------------------------------
bugpack.export('HtmlUtil', HtmlUtil);
});