FSN#35474 Tweede aanzet BBCodes ondersteuning in textarea
svn path=/Website/trunk/; revision=28322
This commit is contained in:
@@ -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, '&')
|
||||
.replace(/</g, '<')
|
||||
.replace(/>/g, '>')
|
||||
.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;
|
||||
|
||||
Reference in New Issue
Block a user