Saturday, October 20, 2012

Convert Text to HTML in SharePoint

Recently I was working on task in which I need to display some HTML content by using a Calculated Column. Then I found a script/ JavaScript which actually converts the text written in calculated column into HTML. So in this blog I'll be stating that JavaScript using which you can use to achieve the desired results.

<script type="text/javascript">
function TextToHTML(NodeSet, HTMLregexp) {
var CellContent = "";
var i=0;
while (i < NodeSet.length){
try {
CellContent = NodeSet[i].innerText || NodeSet[i].textContent;
if (HTMLregexp.test(CellContent)) {NodeSet[i].innerHTML = CellContent;}
}
catch(err){}
i=i+1;
}
}

// Calendar views
var regexpA = new RegExp("\\s*<([a-zA-Z]*)(.|\\s)*/\\1?>\\s*");
TextToHTML(document.getElementsByTagName("a"),regexpA);

// List views
var regexpTD = new RegExp("^\\s*<([a-zA-Z]*)(.|\\s)*/\\1?>\\s*$");
TextToHTML(document.getElementsByTagName("TD"),regexpTD);

// This function is call continuesly every 100ms until the length of the main field changes
// after which the convert text to HTML is executed.
//
var postElemLength = 0;
function PostConvertToHtml()
{
     if (postElemLength == document.getElementsByTagName("TD").length)
     {
          setTimeout(PostConvertToHtml,100);
     }
     else
     {
          var regexpTD = new RegExp("^\\s*<([a-zA-Z]*)(.|\\s)*/\\1?>\\s*$");
          TextToHTML(document.getElementsByTagName("TD"),regexpTD);
     }
}

// Grouped list views
ExpGroupRenderData = (function (old) {
    return function (htmlToRender, groupName, isLoaded) {

    var result = old(htmlToRender, groupName, isLoaded);
    var regexpTD = new RegExp("^\\s*<([a-zA-Z]*)(.|\\s)*/\\1?>\\s*$");
    TextToHTML(document.getElementsByTagName("TD"),regexpTD);

    // start the periodic callback to check when the element has been changed
    if(isLoaded == 'false')
        {
        postElemLength = document.getElementsByTagName("TD").length;
        setTimeout(PostConvertToHtml,100);
        }
    };
})(ExpGroupRenderData);

// Preview pane views
if (typeof(showpreview1)=="function") {
showpreview1 = (function (old) {
    return function (o) {
    var result = old(o);
    var regexpTD = new RegExp("^\\s*<([a-zA-Z]*)(.|\\s)*/\\1?>\\s*$");
    TextToHTML(document.getElementsByTagName("TD"),regexpTD);
    };
})(showpreview1);
}
</script>

No comments:

Post a Comment