Extension talk:TinyMCE MW
From MediaWiki.org
Contents |
[edit] Code TinyMCE_MW.php
Click edit THEN copy and paste. If you don't, special characters will convert and the extension will not work.
<?php
/*
TinyMCE_MW.php - MediaWiki extension - version 0.5.4
by Joseph P. Socoloski III
If you already have pages written in Mediawiki wikitext, this extension enables
Moxiecode's TinyMCE and does not break Mediawiki wikitext. Also, TinyMCE_MW
has a new 'msword' configuration theme. msword follows the MS Office 2003
toolbar layout. Call TinyMCE's simple, advanced and a built-in msword theme from
LocalSettings.php. TinyMCE_MW was built and tested on Mediawiki-1.10.0.
Successfully tested CategoryTree extension for compatibility with new tags.
-Improved custom tag parsing for repeat and categorytree; added sql2wiki
References: http://meta.wikimedia.org/wiki/Image:Wiki-refcard.png
http://meta.wikimedia.org/wiki/Cheatsheet
http://meta.wikimedia.org/wiki/Help:HTML_in_wikitext
http://wiki.moxiecode.com/index.php/TinyMCE:Index
http://www.mediawiki.org/wiki/Extension:CategoryTree
http://www.mediawiki.org/wiki/Manual:Parameters_to_index.php
NOTE:To change the default font and size for TinyMCE, add these two lines to your
theme's editor_content.css body{} section:
font-family: Arial;
font-size: 14px;
NOTE:To decrease the space between lines after a carriage return place this line
to your theme's editor_content.css:
p {margin: 0; padding: 0;}
BUGS: - Does not support Wikitext Bullet list
- Does not support Wikitext Numbered list
- Does not support Wikitext Redirect to another article
- Does not support Wikitext Tables
TODO: - Enable Ajax usage
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
This library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with this library; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA
*/
if( !defined( 'MEDIAWIKI' ) ) {
die();
}
$wgExtensionCredits['other'][] = array(
"name" => "TinyMCE MW extension",
"author" => "Joseph P. Socoloski III",
"version" => "0.5.4",
"url" => "http://www.mediawiki.org/wiki/Extension:TinyMCE_MW",
"description" => "Easily implement Moxiecode's TinyMCE into MediaWiki"
);
# REGISTER HOOKS
$wgHooks['ParserBeforeStrip'][] = 'wfTinymceParserCut';
$wgHooks['ParserAfterTidy'][] = 'wfTinymceParserPaste';
$wgHooks['ArticleAfterFetchContent'][] = 'wfCheckBeforeEdit';
$wgHooks['EditPage::showEditForm:initial'][] = 'wfTinymceAddScript';
##Process the raw wikidb code before any internal processing is applied
function wfTinymceParserCut ($q, $text) {
global $wgTitle;
global $wgTempText, $wgUseTinymce;
$ns_allowed = true;
$ns = $wgTitle->getNamespace();
#if (in_array($ns, $wgexcludedNamespaces)) $ns_allowed = false;
$wgTempText = $text;#get text
#$text = "";
return true;
}
##Process the wgTempText code (wikitext and html) and reformat it into html friendly $text
function wfTinymceParserPaste ($q, $text) {
global $wgOut, $wgTitle, $wgParser;
global $wgTempText, $wgTinymceToken, $wgUseTinymce;
$List = array();
$ns_allowed = true;
$ns = $wgTitle->getNamespace();
# TinyMCE can NOT be enabled for any pages that have data tags
if ($ns_allowed and $wgUseTinymce) {
$tinymcetext = $wgTempText;
## EXTENSION TAGS | ADD HERE ##
#Custom tags may ONLY be entered in the regular editor NOT the HTML Source editor
#Allow_inputbox_tags
while (preg_match("|<inputbox>(.*?)</inputbox>|is", $tinymcetext, $a)) {
$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
$r = preg_replace("|<br.*?>|i", "\n", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
}
#Allow_repeat_tags
while (preg_match("|<repeat.*?>(.*?)</repeat>|is", $tinymcetext, $a)) {
$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
#<repeat table="Service_Center_Table" sort="sc_num"></repeat>
$r = preg_replace("|<br.*?>|i", "\n", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
}
#Allow_categorytree_tags
while (preg_match("|<categorytree.*?>(.*?)</categorytree>|is", $tinymcetext, $a)) {
$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
$r = preg_replace("|<br.*?>|i", "\n", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
}
#Allow_includeonlyx_tags
while (preg_match("|<includeonly>(.*?)</includeonly>|is", $tinymcetext, $a)) {
$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
$r = preg_replace("|<br.*?>|i", "\n", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
}
#Allow_repeat_tags
while (preg_match("|<sql2wiki.*?>(.*?)</sql2wiki>|is", $tinymcetext, $a)) {
$r = preg_replace("| |i", "", $a[0]);#erase all the whitespace
$r = preg_replace("|</p><p>|i", "<br/>", $a[0]);#sometimes </p><p> instead of br
#<repeat table="Service_Center_Table" sort="sc_num"></repeat>
$r = preg_replace("|<br.*?>|i", "\n", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
}
## EXTENSION TAGS END ##
#Allow_a_tags
$i = 0;
$ta = md5("aopen");
while (preg_match("|(<a.*?>)|i", $tinymcetext, $a)) {
$j = $ta."_".md5($i);
$List[$j]["content"] = $a[0];
$List[$j]["index"] = $j;
$tinymcetext = str_replace($a[0], $j, $tinymcetext);
$i++;
}
$i = 0;
$ta = md5("aclose");
while (preg_match("|(</a>)|i", $tinymcetext, $a)) {
$j = $ta."_".md5($i);
$List[$j]["content"] = $a[0];
$List[$j]["index"] = $j;
$tinymcetext = str_replace($a[0], $j, $tinymcetext);
$i++;
}
#Allow_img_tags
$i = 0;
$timg = md5("img");
while (preg_match("|(<img[^>]*?/>)|i", $tinymcetext, $a)) {
$j = $timg."_".md5($i);
$List[$j]["content"] = $a[0];
$List[$j]["index"] = $j;
$tinymcetext = str_replace($a[0], $j, $tinymcetext);
$i++;
}
## MEDIAWIKI WIKITEXT HANDLING ##
#'''''bold and italic'''''
while (preg_match("|'''''.*?'''''|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("'''''", "", $value);
$r = preg_replace("|'''''.*?'''''|is", "<i><strong>".$value."</strong></i>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#'''bold'''
while (preg_match("|'''.*?'''|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("'''", "", $value);
$r = preg_replace("|'''.*?'''|is", "<strong>".$value."</strong>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#''italic''
while (preg_match("|''.*?''|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("''", "", $value);
$r = preg_replace("|''.*?''|is", "<i>".$value."</i>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#=====level 4=====
while (preg_match("|=====.*?=====|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("=====", "", $value);
$r = preg_replace("|=====.*?=====|is", "<h5>".$value."</h5>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#====level 3====
while (preg_match("|====.*?====|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("====", "", $value);
$r = preg_replace("|====.*?====|is", "<h4>".$value."</h4>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#===level 2===
while (preg_match("|===.*?===|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("===", "", $value);
$r = preg_replace("|===.*?===|is", "<h3>".$value."</h3>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#==heading==
while (preg_match("|==.*?==|is", $tinymcetext, $a)) {
$value = implode(",", $a);
$value = str_replace("==", "", $value);
$r = preg_replace("|==.*?==|is", "<h2>".$value."</h2>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
#==heading 1==
## Does not support <h1> tags because "|=.*?=|is" grabs too much
#---- horizontal line
while (preg_match("|----|is", $tinymcetext, $a)) {
$r = preg_replace("|----|is", "<hr>", $a[0]);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
## MEDIAWIKI WIKITEXT HANDLING END ##
$tagList = array("pre", "math", "gallery", "nowiki", "html");
foreach($tagList as $tag) {
while (preg_match("|<($tag.*?)>(.*?)</$tag>|is", $tinymcetext, $a)) {
$r = preg_replace("|<br.*?>|i", "", $a[0]);
$r = preg_replace("| |i", " ", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
}
foreach($q->mTagHooks as $tag => $func) {
while (preg_match("|<($tag.*?)>(.*?)</$tag>|is", $tinymcetext, $a)) {
$r = preg_replace("|<br.*?>|i", "", $a[0]);
$r = preg_replace("| |i", " ", $r);
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);
}
}
$state = new StripState;
$x =& $state;
$tinymcetext = $q->strip($tinymcetext, $x);
# optional remove <p></p>
#$tinymcetext = preg_replace('/<p[^>]*>/','',$tinymcetext);//Remove the start <p> or <p attr="">
# $tinymcetext = preg_replace('/<\/p>/', '<br />', $tinymcetext); // Replace the end
#$tinymcetext = preg_replace('/<\/p>/', '\n', $tinymcetext); // Replace the end
#$tinymcetext = preg_replace("|<br/>|i", "\n", $tinymcetext);
$tinymcetext = preg_replace("/<\/?tbody>/i","", $tinymcetext);
$tinymcetext = preg_replace("/$wgTinymceToken/i","", $tinymcetext);
$tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, array( &$q, 'attributeStripCallback' ) );
$tinymcetext = $q->replaceVariables($tinymcetext);
$tinymcetext = $q->stripToc( $tinymcetext );
$tinymcetext = $q->replaceInternalLinks( $tinymcetext );
$tinymcetext = $q->replaceExternalLinks( $tinymcetext );
$tinymcetext = str_replace($q->mUniqPrefix."NOPARSE", "", $tinymcetext);
$tinymcetext = $q->doMagicLinks( $tinymcetext );
$tinymcetext = $q->formatHeadings( $tinymcetext, true );
$q->replaceLinkHolders( $tinymcetext );
$tinymcetext = $q->unstripNoWiki( $tinymcetext, $state );
$tinymcetext = $q->unstrip($tinymcetext, $state);
foreach($List as $item) {
$tinymcetext = str_replace($item["index"], $item["content"], $tinymcetext);
$i++;
}
$text = $tinymcetext;
}
return true;
}
function wfTinymceAddScript ($q) {
global $wgOut, $wgTitle, $wgScriptPath, $wgMyWikiURL;
global $wgTempText, $wgTinymceDir, $wgTinymceTheme, $wgExt_valid_elements, $wgUseTinymce;
$wgTinymceDir = "tinymce";
$ns_allowed = true;
$ns = $wgTitle->getNamespace();
if ($ns_allowed && $wgUseTinymce)
{
# following from http://rorlach.de/mediawiki/index.php/Toggle_TinyMCE
$wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\">
var tinyMCEmode = true;
function toggleEditorMode(wpTextbox1,eleToggleLink) {
try {
if(tinyMCEmode) {
tinyMCE.execCommand(\"mceRemoveControl\", false, wpTextbox1);
tinyMCEmode = false;
if(eleToggleLink)
eleToggleLink.innerHTML = \"Enable Advanced Editor\";
} else {
tinyMCE.execCommand(\"mceAddControl\", false, wpTextbox1);
tinyMCEmode = true;
if(eleToggleLink)
eleToggleLink.innerHTML = \"Disable Advanced Editor\";
}
} catch(e) {
//error handling
}
}
</script>");
if (($wgTinymceTheme == "simple")){
$wgOut->addScript( "<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
mode : \"textareas\",
theme : \"simple\",
convert_newlines_to_brs : false,
apply_source_formatting : true,
relative_urls : false,
remove_script_host : true,
document_base_url : \"$wgMyWikiURL\",
extended_valid_elements : \"$wgExt_valid_elements\"
});</script>" );
} elseif(($wgTinymceTheme == "advanced")) {
$wgOut->addScript( "<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
mode : \"textareas\",
theme : \"advanced\",
convert_newlines_to_brs : false,
apply_source_formatting : true,
relative_urls : false,
remove_script_host : true,
document_base_url : \"$wgMyWikiURL\",
extended_valid_elements : \"$wgExt_valid_elements\"
});</script>" );
}elseif(($wgTinymceTheme == "msword")) {
$wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\" src=\"$wgScriptPath/extensions/$wgTinymceDir/jscripts/tiny_mce/tiny_mce.js\"></script><script language=\"javascript\" type=\"text/javascript\">tinyMCE.init({
mode : \"textareas\",
theme : \"advanced\",
extended_valid_elements : \"$wgExt_valid_elements\",
convert_newlines_to_brs : false,
apply_source_formatting : true,
relative_urls : false,
remove_script_host : true,
document_base_url : \"$wgMyWikiURL\",
plugins : \"style,layer,table,save,advhr,advimage,advlink,emotions,iespell,insertdatetime,preview,zoom,media,searchreplace,print,contextmenu,paste,directionality,fullscreen,noneditable,visualchars,nonbreaking,xhtmlxtras\",
theme_advanced_buttons1 : \"newdocument,save,|,print,|,iespell,|cut,copy,paste,pastetext,pasteword,|,undo,redo,|,link,unlink,image,hr,anchor,code,|,search,replace,|,tablecontrols,|,help\",
theme_advanced_buttons2 : \"styleselect,formatselect,fontselect,fontsizeselect,|,bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,bullist,numlist,|,outdent,indent,cleanup,backcolor,forecolor,removeformat\",
theme_advanced_buttons3 : \"insertdate,inserttime,|,sub,sup,|,charmap,emotions,media,|,ltr,rtl,|,fullscreen\",
theme_advanced_toolbar_location : \"top\",
theme_advanced_toolbar_align : \"left\"
});</script>");
}else{$wgOut->addScript("**TINYMCE NOT ENABLED: FIX wgTinymceTheme**<script language=\"javascript\" type=\"text/javascript\"></script>" );}
#Since editing add the button
$wgOut->addHTML("<p align=\"right\"><a id=\"toggleLink\" href=\"#\" title=\"toggle TinyMCE\" onclick=\"toggleEditorMode('wpTextbox1',this);\">Hide Editor</a></p>");
}
else{$wgOut->addScript("<script language=\"javascript\" type=\"text/javascript\"></script>" ); $wgUseTinymce = true; }
return true;
}
# Check existing article for any tags we don't want TinyMCE parsing...
function wfCheckBeforeEdit ($q, $text) {
global $wgUseTinymce;
if (preg_match("|<(data.*?)>(.*?)</data>|is", $text, $a)) {
$wgUseTinymce = false;
}
elseif(preg_match("|<(data.*?)>(.*?)</data>|is", $text, $a)) {
$wgUseTinymce = false;}
else{$wgUseTinymce = true;}
return true;
}
?>
[edit] Upgrade Log
[edit] 6/24/07 v0.2.1
- Misc. fixes
[edit] 6/25/07 v0.3.0
- Fixed TinyMCE_MW to work with inputbox extension.
- Section now for custom extension tags.
[edit] 6/26/07 v0.4.0
- Updated inputbox handler to fix 'p /p' tags
- Does not support wikitext h1 tags because "|=.*?=|is" grabs too much.
- Support toggling. Enable and Disable TinyMCE toolbar by a link in upper right corner of editpage.
[edit] 6/27/07 v0.4.1
- Set 'convert_newlines_to_brs : false' ; it was inserting new br tags on each re-edit
[edit] 6/28/07 v0.4.3
- WikiDB tag support. Disables TinyMCE before editing any articles with WikiDB tags.
[edit] 7/1/07 v0.5.3
- Added better link support. Added relative_url, remove_script_host, document_base_url
[edit] 9/20/07 v0.5.4
- Modified #Allow_repeat_tagsm and #Allow_categorytree_tags replacements
[edit] Error.
Fatal error: Cannot instantiate non-existent class: stripstate in /home/atuaesco/public_html/extensions/TinyMCE_MW.php on line 237 I have this error when i try to edit a page
Try version 0.5.4 --JoeSox 18:33, 20 September 2007 (UTC)
[edit] Slight fix
I use a wiki with quite a lot of rewriting happening. In my case I need to be able to set $wgTinymceDir from my LocalSettings.php. This small modification makes this possible. Line:283
if(!isset($wgTinymceDir)) $wgTinymceDir = "tinymce";
--Rob 02:39, 4 October 2007 (UTC)
[edit] The new bugfix 0.5.4 has trouble with Extension:CategoryTree
If I turn TinyMCE_MW on, end save an article with the <categorytree>-tag into the Editorbox (makes no difference if "hide editor" is used), then I get this error:
Fatal error: Maximum execution time of 30 seconds exceeded in /srv/www/htdocs/wiki/extensions/TinyMCE_MW.php on line 119
This is on line 119 of TinyMCE_MW.php:
$tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
With your earlier version 0.5.3 this doesn't appear, so it seams to cause a bug and not fix. By comparation of these version there are big differences between the lines around 119, especialy this looks a little bit supecious: New in 0.5.4:
#Allow_categorytree_tags
while (preg_match("|<categorytree.*?>(.*?)</categorytree>|is", $tinymcetext, $a)) {
...
Old code in 0.5.3:
#Allow_categorytree_tags
while (preg_match("|<categorytree>(.*?)</categorytree>|is", $tinymcetext, $a)) {
...
We now rollback to 0.5.3 but I'll be greatefull if this plugin will improved in future.
Regards -Stefan
79.211.199.93 12:02, 4 October 2007 (UTC)
[edit] mediawiki 1.12.0
Does anyone have this installed on mediawiki version 1.12.0? I tried following the directions over here: TinyMCE_MW.
Setup: MW 1.12 | Windows 2003 w/ IIS. | MYSQL 5.x | PHP 5.25
But i had no luck, i got the following error:
Internal error
Parser::replaceVariables called using the old argument format
Backtrace:
#0 W:\Wiki\mediawiki-1.12.0\includes\Parser.php(4526): Parser->replaceVariables('', Array)
#1 [internal function]: Parser->attributeStripCallback('', Array)
#2 W:\Wiki\mediawiki-1.12.0\includes\Sanitizer.php(479): call_user_func_array(Array, Array)
#3 W:\Wiki\mediawiki-1.12.0\extensions\TinyMCE_MW.php(255): Sanitizer::removeHTMLtags('<big><strong>Me...', Array)
#4 [internal function]: wfTinymceParserPaste(Object(Parser), '<p><big><b>Medi...')
#5 W:\Wiki\mediawiki-1.12.0\includes\Hooks.php(113): call_user_func_array('wfTinymceParser...', Array)
#6 W:\Wiki\mediawiki-1.12.0\includes\Parser.php(432): wfRunHooks('ParserAfterTidy', Array)
#7 W:\Wiki\mediawiki-1.12.0\includes\Article.php(3174): Parser->parse('<big>'''MediaWi...', Object(Title), Object(ParserOptions), true, true, 8)
#8 W:\Wiki\mediawiki-1.12.0\includes\Article.php(821): Article->outputWikiText('<big>'''MediaWi...')
#9 W:\Wiki\mediawiki-1.12.0\includes\Wiki.php(390): Article->view()
#10 W:\Wiki\mediawiki-1.12.0\includes\Wiki.php(48): MediaWiki->performAction(Object(OutputPage), Object(Article), Object(Title), Object(User), Object(WebRequest))
#11 W:\Wiki\mediawiki-1.12.0\index.php(90): MediaWiki->initialize(Object(Title), Object(OutputPage), Object(User), Object(WebRequest))
#12 {main}
Mlong212 05:29, 20 April 2008 (CEST)
You need to change the following line in TinyMCE_MW.php (~line 255)
$tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, array( &$q, 'attributeStripCallback' ) );
to the following
$tinymcetext = Sanitizer::removeHTMLtags( $tinymcetext, 'attributeStripCallback', array( &$q ) );
Very close to working! The above change allowed me in to the main page without halting on error, however:
- Additional html code is shown on everything & the page layout is not as it was (without even editing yet)
- When trying to edit a page it displays the error: PHP Fatal Error: Maximum execution time of 30 seconds exceeded in (filepath)\extensions\TinyMCE_MW.php on line XXX
- XXX because it is different each time though it does seem to hit on a line containing: $tinymcetext = str_replace($a[0], html_entity_decode($r), $tinymcetext);#htmlentities()
[edit] Cannot modify header information
I got several warnings like
"Warning: Cannot modify header information - headers already sent by [...]"
my solution:
"eliminate additional whitespace before and after the <php> and </php> tags in the TinyMCE_MW.php file" (http://tinymce.moxiecode.com/punbb/viewtopic.php?id=8233) which was for me to delete the tags:
<code> and <pre>
by Magnus Rode
[edit] All's well in 1.12 except...
Have TinyMCE_MW.php working in 1.12 but <pre> tags are displaying as:
UNIQ229ef7f677e8689b-pre-00000004-QINU
If I remove the following line from TinyMCE_MW.php:
$tinymcetext = $q->replaceVariables($tinymcetext);
..the <pre> tags then work
...but {{templates}} are not parsed.
So there's something in 1.12 that doesn't appreciate replaceVariables when parsing <pre> tags.
In Eric Hartwell's Technotes he has a similar problem caused by recursively calling the parse function in parser.php.
It seems TinyMCE_MW.php may be flawed following changes to MediaWiki's parsing since 1.10.
Anyone have any suggestions as to how to fix the extension for 1.12?
--Nigelm 20:39, 26 May 2008 (UTC)

