FSN#35474 Tweede aanzet BBCodes ondersteuning in textarea

svn path=/Website/trunk/; revision=28322
This commit is contained in:
Jos Groot Lipman
2016-03-01 09:24:45 +00:00
parent ec2cf3c5a8
commit 69517d7001

View File

@@ -1,5 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"
xmlns:msxsl="urn:schemas-microsoft-com:xslt"
xmlns:fclt="http://facilitor.nl/xsltools">
<xsl:import href="./printFG.xsl"/>
<xsl:output method="html" encoding="windows-1252" indent="yes"/>
@@ -56,6 +58,79 @@
</xsl:choose>
</xsl:template>
<msxsl:script language="JScript" implements-prefix="fclt">
<![CDATA[
String.prototype.format = function()
{
var formatted = this;
for (var i = 0; i < arguments.length; i++)
{
var regexp = new RegExp('\\{'+i+'\\}', 'gi');
formatted = formatted.replace(regexp, arguments[i]);
}
return formatted;
};
var safe = {
html: function (waarde)
{
// Heeft XSLT hier niet een handigere truc voor?
return waarde.replace(/&/g, '&amp;')
.replace(/</g, '&lt;')
.replace(/>/g, '&gt;')
.replace(/\n/g, '<br>')
}
}
// Let op: deze functie lijkt veel op shared.inc/safe.fclthtml
// belangrijkste verschil is dat we hier geen \r in de tekst tegenkomen
// wat enkele regexp's iets anders maakt
function fclthtml(nodelist) {
var waarde = nodelist.nextNode().text;
var safepairs = "h1,h2,h3,h4,h5,h6,b,i,u,em,strong,small,big,th,td,tr,table,xmp".split(",");
var safehtml = safe.html(waarde); // Let op: vervangt *alle* \n door <br>. Dat gaan we deels later nog terugdraaien
// We hebben het wel *nodig* omdat .* niet over meerdere regels werkt (hoewel dat
// weer oplosbaar schijnt te zijn met [\s\S])
for (var i = 0; i < safepairs.length; i++)
{
var code = safepairs[i];
var strre = "\\[{0}\\](.*?)\\[\\/{0}\\]".format(code); // De ? maakt de .* lazy (ipv greedy)
var strnew = "<" + code + ">$1</" + code + ">";
var re = new RegExp(strre, "g");
var safehtml = safehtml.replace(re, strnew);
}
// Nu de <br>'s binnen de tabel terugzetten. Let op dat ze *binnen* <td>'s weer wel moeten blijven
// TODO: Kan dit beter?
if (safehtml.indexOf("<table>") > -1)
{
var tablepairs = "th,td,tr,table".split(",");
for (var i = 0; i < tablepairs.length; i++)
{
var code = tablepairs[i];
var re = new RegExp("<{0}>(<br>)+".format(code), "g");
var safehtml = safehtml.replace(re, "<" + code + ">");
var re = new RegExp("</{0}>(<br>)+".format(code), "g");
var safehtml = safehtml.replace(re, "</" + code + ">");
}
}
// Nu de <br>'s binnen <pre> terugzetten
var matches = safehtml.match(/<xmp(?:.*?)>(?:.*?)<\/xmp>/g);
if (matches)
{
var len = matches.length;
var i;
for (i = 0; i < len; i++) {
safehtml = safehtml.replace(matches[i], matches[i].replace(/<br(?:.*?)>/g, '\r')); // een \n wordt toch een <br>?
}
}
return safehtml;
}
]]>
</msxsl:script>
<xsl:template name="stylesheet">
<style>body {
font-family: Verdana;