<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ca">
	<id>https://ca.conanwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFCKeditor</id>
	<title>MediaWiki:FCKeditor - Historial de revisió</title>
	<link rel="self" type="application/atom+xml" href="https://ca.conanwiki.org/index.php?action=history&amp;feed=atom&amp;title=MediaWiki%3AFCKeditor"/>
	<link rel="alternate" type="text/html" href="https://ca.conanwiki.org/index.php?title=MediaWiki:FCKeditor&amp;action=history"/>
	<updated>2026-05-03T17:02:11Z</updated>
	<subtitle>Historial de revisió per a aquesta pàgina del wiki</subtitle>
	<generator>MediaWiki 1.43.8</generator>
	<entry>
		<id>https://ca.conanwiki.org/index.php?title=MediaWiki:FCKeditor&amp;diff=427&amp;oldid=prev</id>
		<title>Mpuj: Crear article</title>
		<link rel="alternate" type="text/html" href="https://ca.conanwiki.org/index.php?title=MediaWiki:FCKeditor&amp;diff=427&amp;oldid=prev"/>
		<updated>2012-09-26T18:32:45Z</updated>

		<summary type="html">&lt;p&gt;Crear article&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Pàgina nova&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Options for FCKeditor&lt;br /&gt;
 * [start with FCKeditor]&lt;br /&gt;
 */&lt;br /&gt;
define(&amp;quot;RTE_VISIBLE&amp;quot;, 1);&lt;br /&gt;
/**&lt;br /&gt;
 * Options for FCKeditor&lt;br /&gt;
 * [show toggle link]&lt;br /&gt;
 */&lt;br /&gt;
define(&amp;#039;RTE_TOGGLE_LINK&amp;#039;, 2);&lt;br /&gt;
/**&lt;br /&gt;
 * Options for FCKeditor&lt;br /&gt;
 * [show popup link]&lt;br /&gt;
 */&lt;br /&gt;
define(&amp;#039;RTE_POPUP&amp;#039;, 4);&lt;br /&gt;
&lt;br /&gt;
class FCKeditor_MediaWiki {&lt;br /&gt;
	public $showFCKEditor;&lt;br /&gt;
	private $count = array();&lt;br /&gt;
	private $wgFCKBypassText = &amp;quot;&amp;quot;;&lt;br /&gt;
	private $debug = 0;&lt;br /&gt;
	private $excludedNamespaces;&lt;br /&gt;
	private $oldTextBox1;&lt;br /&gt;
	static $nsToggles = array(&lt;br /&gt;
	&amp;#039;riched_disable_ns_main&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_user&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_user_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_project&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_project_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_image&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_image_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_mediawiki&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_mediawiki_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_template&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_template_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_help&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_help_talk&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_category&amp;#039;,&lt;br /&gt;
	&amp;#039;riched_disable_ns_category_talk&amp;#039;,&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	static $messagesLoaded = false;&lt;br /&gt;
&lt;br /&gt;
	function __call($m, $a) {&lt;br /&gt;
		print &amp;quot;\n#### &amp;quot; . $m . &amp;quot;\n&amp;quot;;&lt;br /&gt;
		if (!isset($this-&amp;gt;count[$m])) {&lt;br /&gt;
			$this-&amp;gt;count[$m] = 0;&lt;br /&gt;
		}&lt;br /&gt;
		$this-&amp;gt;count[$m]++;&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	function onMonoBookTemplateToolboxEnd() {&lt;br /&gt;
		if ($this-&amp;gt;debug) {&lt;br /&gt;
			print_r($this-&amp;gt;count);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	private function getExcludedNamespaces() {&lt;br /&gt;
		global $wgUser,$wgDefaultUserOptions, $wgFCKEditorExcludedNamespaces;&lt;br /&gt;
&lt;br /&gt;
		if ( is_null( $this-&amp;gt;excludedNamespaces ) ) {&lt;br /&gt;
			$this-&amp;gt;excludedNamespaces = array();&lt;br /&gt;
			foreach ( self::$nsToggles as $toggle ) {&lt;br /&gt;
				$default = isset($wgDefaultUserOptions[$toggle]) ? $wgDefaultUserOptions[$toggle] : &amp;quot;&amp;quot;;&lt;br /&gt;
				if ( $wgUser-&amp;gt;getOption( $toggle, $default) ) {&lt;br /&gt;
					$this-&amp;gt;excludedNamespaces[] = constant(strtoupper(str_replace(&amp;quot;riched_disable_&amp;quot;, &amp;quot;&amp;quot;, $toggle)));&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			/*&lt;br /&gt;
			If this site&amp;#039;s LocalSettings.php defines Namespaces that shouldn&amp;#039;t use the FCKEditor (in the #wgFCKexcludedNamespaces array), those excluded&lt;br /&gt;
			namespaces should be combined with those excluded in the user&amp;#039;s preferences.&lt;br /&gt;
			*/&lt;br /&gt;
			if (!empty($wgFCKEditorExcludedNamespaces) &amp;amp;&amp;amp; is_array($wgFCKEditorExcludedNamespaces)) {&lt;br /&gt;
				$this-&amp;gt;excludedNamespaces = array_merge($wgFCKEditorExcludedNamespaces, $this-&amp;gt;excludedNamespaces);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return $this-&amp;gt;excludedNamespaces;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onLanguageGetMagic(&amp;amp;$magicWords, $langCode) {&lt;br /&gt;
		$magicWords[&amp;#039;NORICHEDITOR&amp;#039;] = array( 0, &amp;#039;__NORICHEDITOR__&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onParserBeforeInternalParse(&amp;amp;$parser, &amp;amp;$text, &amp;amp;$strip_state) {&lt;br /&gt;
		MagicWord::get( &amp;#039;NORICHEDITOR&amp;#039; )-&amp;gt;matchAndRemove( $text );&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onEditPageShowEditFormFields($pageEditor, $wgOut) {&lt;br /&gt;
		global $wgUser, $wgFCKEditorIsCompatible, $wgTitle, $wgVersion;&lt;br /&gt;
&lt;br /&gt;
		/*&lt;br /&gt;
		If FCKeditor extension is enabled, BUT it shouldn&amp;#039;t appear (because it&amp;#039;s disabled by user, we have incompatible browser etc.)&lt;br /&gt;
		We must do this trick to show the original text as WikiText instead of HTML when conflict occurs&lt;br /&gt;
		*/&lt;br /&gt;
		if ( (!$wgUser-&amp;gt;getOption( &amp;#039;showtoolbar&amp;#039; ) || $wgUser-&amp;gt;getOption( &amp;#039;riched_disable&amp;#039; ) || !$wgFCKEditorIsCompatible) ||&lt;br /&gt;
				in_array($wgTitle-&amp;gt;getNamespace(), $this-&amp;gt;getExcludedNamespaces()) || !($this-&amp;gt;showFCKEditor &amp;amp; RTE_VISIBLE) ||&lt;br /&gt;
				false !== strpos($pageEditor-&amp;gt;textbox1, &amp;quot;__NORICHEDITOR__&amp;quot;)&lt;br /&gt;
			) {&lt;br /&gt;
			if ($pageEditor-&amp;gt;isConflict) {&lt;br /&gt;
				$pageEditor-&amp;gt;textbox1 = $pageEditor-&amp;gt;getWikiContent();&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		/*&lt;br /&gt;
		If FCKeditor extension is enabled, and it should appear&lt;br /&gt;
		We must do this trick to show HTML instead of the original text when conflict occurs&lt;br /&gt;
		This hack is only needed for MW 1.11 and below&lt;br /&gt;
		*/&lt;br /&gt;
		else if (version_compare(&amp;quot;1.12&amp;quot;, $wgVersion, &amp;quot;&amp;gt;&amp;quot;)) {&lt;br /&gt;
			if ($pageEditor-&amp;gt;isConflict) {&lt;br /&gt;
			$options = new FCKeditorParserOptions();&lt;br /&gt;
			$options-&amp;gt;setTidy(true);&lt;br /&gt;
			$parser = new FCKeditorParser();&lt;br /&gt;
			$parser-&amp;gt;setOutputType(OT_HTML);&lt;br /&gt;
			$pa = $parser-&amp;gt;parse($pageEditor-&amp;gt;textbox1, $pageEditor-&amp;gt;mTitle, $options);&lt;br /&gt;
			$pageEditor-&amp;gt;textbox1 = $pa-&amp;gt;mText;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onEditPageBeforeConflictDiff($pageEditor, $wgOut) {&lt;br /&gt;
		global $fckPageEditor, $wgRequest;&lt;br /&gt;
&lt;br /&gt;
		/*&lt;br /&gt;
		Show WikiText instead of HTML when there is a conflict&lt;br /&gt;
		http://dev.fckeditor.net/ticket/1385&lt;br /&gt;
		*/&lt;br /&gt;
		$pageEditor-&amp;gt;textbox2 = $wgRequest-&amp;gt;getVal( &amp;#039;wpTextbox1&amp;#039; );&lt;br /&gt;
		$pageEditor-&amp;gt;textbox1 = $pageEditor-&amp;gt;getWikiContent();&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onParserBeforeStrip(&amp;amp;$parser, &amp;amp;$text, &amp;amp;$stripState) {&lt;br /&gt;
		$text = $parser-&amp;gt;strip( $text, $stripState );&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onSanitizerAfterFixTagAttributes($text, $element, &amp;amp;$attribs) {&lt;br /&gt;
		$text = preg_match_all(&amp;quot;/Fckmw\d+fckmw/&amp;quot;, $text, $matches);&lt;br /&gt;
&lt;br /&gt;
		if (!empty($matches[0][0])) {&lt;br /&gt;
			global $leaveRawTemplates;&lt;br /&gt;
			if (!isset($leaveRawTemplates)) {&lt;br /&gt;
				$leaveRawTemplates = array();&lt;br /&gt;
			}&lt;br /&gt;
			$leaveRawTemplates = array_merge($leaveRawTemplates, $matches[0]);&lt;br /&gt;
			$attribs = array_merge($attribs, $matches[0]);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function registerHooks() {&lt;br /&gt;
		global $wgHooks, $wgExtensionFunctions, $wgVersion;&lt;br /&gt;
&lt;br /&gt;
		$wgHooks[&amp;#039;UserToggles&amp;#039;][]                       = array($this, &amp;#039;onUserToggles&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;MessagesPreLoad&amp;#039;][]                   = array($this, &amp;#039;onMessagesPreLoad&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;ParserAfterTidy&amp;#039;][]                   = array($this, &amp;#039;onParserAfterTidy&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;EditPage::showEditForm:initial&amp;#039;][]    = array($this, &amp;#039;onEditPageShowEditFormInitial&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;EditPage::showEditForm:fields&amp;#039;][]		= array($this, &amp;#039;onEditPageShowEditFormFields&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;EditPageBeforePreviewText&amp;#039;][]         = array($this, &amp;#039;onEditPageBeforePreviewText&amp;#039;);&lt;br /&gt;
		if (version_compare(&amp;quot;1.14alpha&amp;quot;, $wgVersion, &amp;quot;&amp;lt;=&amp;quot;)) {&lt;br /&gt;
			$wgHooks[&amp;#039;ParserBeforeStrip&amp;#039;][]             = array($this, &amp;#039;onParserBeforeStrip&amp;#039;);&lt;br /&gt;
		}&lt;br /&gt;
		$wgHooks[&amp;#039;EditPagePreviewTextEnd&amp;#039;][]            = array($this, &amp;#039;onEditPagePreviewTextEnd&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;CustomEditor&amp;#039;][]                      = array($this, &amp;#039;onCustomEditor&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;LanguageGetMagic&amp;#039;][]                  = array($this, &amp;quot;onLanguageGetMagic&amp;quot;);&lt;br /&gt;
		$wgHooks[&amp;#039;ParserBeforeInternalParse&amp;#039;][]         = array($this, &amp;quot;onParserBeforeInternalParse&amp;quot;);&lt;br /&gt;
		$wgHooks[&amp;#039;EditPageBeforeConflictDiff&amp;#039;][]		= array($this, &amp;#039;onEditPageBeforeConflictDiff&amp;#039;);&lt;br /&gt;
		$wgHooks[&amp;#039;SanitizerAfterFixTagAttributes&amp;#039;][]	= array($this, &amp;#039;onSanitizerAfterFixTagAttributes&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		if ($this-&amp;gt;debug) {&lt;br /&gt;
			/*&lt;br /&gt;
			This is just an array of all available hooks, useful for debugging and learning&lt;br /&gt;
			Add here all new hooks&lt;br /&gt;
			*/&lt;br /&gt;
			$opcje =  array(&amp;#039;ArticleSave&amp;#039;,&lt;br /&gt;
			&amp;#039;ArticleInsertComplete&amp;#039;, &amp;#039;ArticleSaveComplete&amp;#039;, &amp;#039;TitleMoveComplete&amp;#039;, &amp;#039;ArticleProtect&amp;#039;, &amp;#039;ArticleProtectComplete&amp;#039;, &amp;#039;ArticleDelete&amp;#039;, &amp;#039;ArticleDeleteComplete&amp;#039;, &amp;#039;AlternateEdit&amp;#039;, &amp;#039;ArticleFromTitle&amp;#039;, &amp;#039;ArticleAfterFetchContent&amp;#039;,&lt;br /&gt;
			&amp;#039;ArticlePageDataBefore&amp;#039;, &amp;#039;ArticlePageDataAfter&amp;#039;, &amp;#039;ParserBeforeStrip&amp;#039;, &amp;#039;ParserAfterStrip&amp;#039;, &amp;#039;ParserBeforeInternalParse&amp;#039;, &amp;#039;InternalParseBeforeLinks&amp;#039;, &amp;#039;ParserBeforeTidy&amp;#039;, &amp;#039;ParserAfterTidy&amp;#039;, &amp;#039;ParserClearState&amp;#039;, &amp;#039;ParserGetVariableValueSwitch&amp;#039;,&lt;br /&gt;
			&amp;#039;ParserGetVariableValueTs&amp;#039;, &amp;#039;ParserGetVariableValueVarCache&amp;#039;, &amp;#039;OutputPageBeforeHTML&amp;#039;, &amp;#039;OutputPageParserOutput&amp;#039;, &amp;#039;CategoryPageView&amp;#039;, &amp;#039;PageRenderingHash&amp;#039;, &amp;#039;ArticleViewHeader&amp;#039;, &amp;#039;ArticleViewRedirect&amp;#039;, &amp;#039;editSectionLinkForOther&amp;#039;, &amp;#039;editSectionLink&amp;#039;,&lt;br /&gt;
			&amp;#039;AutoAuthenticate&amp;#039;, &amp;#039;UserLoginComplete&amp;#039;, &amp;#039;UserLogout&amp;#039;, &amp;#039;UserLogoutComplete&amp;#039;, &amp;#039;userCan&amp;#039;, &amp;#039;WatchArticle&amp;#039;, &amp;#039;WatchArticleComplete&amp;#039;, &amp;#039;UnwatchArticle&amp;#039;, &amp;#039;UnwatchArticleComplete&amp;#039;, &amp;#039;MarkPatrolled&amp;#039;,&lt;br /&gt;
			&amp;#039;MarkPatrolledComplete&amp;#039;, &amp;#039;EmailUser&amp;#039;, &amp;#039;EmailUserComplete&amp;#039;, &amp;#039;UploadVerification&amp;#039;, &amp;#039;UploadComplete&amp;#039;, &amp;#039;SpecialMovepageAfterMove&amp;#039;, &amp;#039;SpecialSearchNogomatch&amp;#039;, &amp;#039;ArticleEditUpdateNewTalk&amp;#039;, &amp;#039;UserRetrieveNewTalks&amp;#039;, &amp;#039;UserClearNewTalkNotification&amp;#039;,&lt;br /&gt;
			&amp;#039;ArticlePurge&amp;#039;, &amp;#039;SpecialPageGetRedirect&amp;#039;, &amp;#039;SpecialPageExecuteBeforeHeader&amp;#039;, &amp;#039;SpecialPageExecuteBeforePage&amp;#039;, &amp;#039;SpecialPageExecuteAfterPage&amp;#039;, &amp;#039;SpecialVersionExtensionTypes&amp;#039;, &amp;#039;SpecialPage_initList&amp;#039;, &amp;#039;UploadForm:initial&amp;#039;, &amp;#039;UploadForm:BeforeProcessing&amp;#039;, &amp;#039;AddNewAccount&amp;#039;,&lt;br /&gt;
			&amp;#039;AbortNewAccount&amp;#039;, &amp;#039;BlockIp&amp;#039;, &amp;#039;BlockIpComplete&amp;#039;, &amp;#039;UserRights&amp;#039;, &amp;#039;GetBlockedStatus&amp;#039;, &amp;#039;LogPageActionText&amp;#039;, &amp;#039;LogPageLogHeader&amp;#039;, &amp;#039;LogPageLogName&amp;#039;, &amp;#039;LogPageValidTypes&amp;#039;, &amp;#039;BeforePageDisplay&amp;#039;,&lt;br /&gt;
			&amp;#039;MonoBookTemplateToolboxEnd&amp;#039;, &amp;#039;PersonalUrls&amp;#039;, &amp;#039;SkinTemplateContentActions&amp;#039;, &amp;#039;SkinTemplateTabs&amp;#039;, &amp;#039;SkinTemplatePreventOtherActiveTabs&amp;#039;, &amp;#039;SkinTemplateSetupPageCss&amp;#039;, &amp;#039;SkinTemplateBuildContentActionUrlsAfterSpecialPage&amp;#039;, &amp;#039;SkinTemplateBuildNavUrlsNav_urlsAfterPermalink&amp;#039;, &amp;#039;UserCreateForm&amp;#039;, &amp;#039;UserLoginForm&amp;#039;,&lt;br /&gt;
			&amp;#039;ArticleEditUpdatesDeleteFromRecentchanges&amp;#039;, &amp;#039;EditFilter&amp;#039;, &amp;#039;EditPage::showEditForm:initial&amp;#039;, &amp;#039;GetInternalURL&amp;#039;, &amp;#039;GetLocalURL&amp;#039;, &amp;#039;GetFullURL&amp;#039;, &amp;#039;LanguageGetMagic&amp;#039;, &amp;#039;MagicWordMagicWords&amp;#039;, &amp;#039;MagicWordwgVariableIDs&amp;#039;, &amp;#039;MessagesPreLoad&amp;#039;,&lt;br /&gt;
			&amp;#039;ParserTestParser&amp;#039;, &amp;#039;SpecialContributionsBeforeMainOutput&amp;#039;, &amp;#039;UnknownAction&amp;#039;, &amp;#039;wgQueryPages&amp;#039;, &amp;#039;DisplayOldSubtitle&amp;#039;, &amp;#039;LoadAllMessages&amp;#039;, &amp;#039;RecentChange_save&amp;#039;, &amp;#039;UserToggles&amp;#039;, &amp;#039;BadImage&amp;#039;, &amp;#039;DiffViewHeader&amp;#039;,&lt;br /&gt;
			&amp;#039;EditFormPreloadText&amp;#039;, &amp;#039;EmailConfirmed&amp;#039;, &amp;#039;FetchChangesList&amp;#039;, &amp;#039;MathAfterTexvc&amp;#039;, &amp;#039;SiteNoticeAfter&amp;#039;, &amp;#039;SiteNoticeBefore&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			foreach ($opcje as $o) {&lt;br /&gt;
				$wgHooks[$o][] = array($this, str_replace(&amp;quot;:&amp;quot;, &amp;quot;_&amp;quot;, $o));&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onCustomEditor(&amp;amp;$article, &amp;amp;$user) {&lt;br /&gt;
		global $wgRequest, $mediaWiki;&lt;br /&gt;
&lt;br /&gt;
		$action = $mediaWiki-&amp;gt;getVal(&amp;#039;Action&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		$internal = $wgRequest-&amp;gt;getVal( &amp;#039;internaledit&amp;#039; );&lt;br /&gt;
		$external = $wgRequest-&amp;gt;getVal( &amp;#039;externaledit&amp;#039; );&lt;br /&gt;
		$section = $wgRequest-&amp;gt;getVal( &amp;#039;section&amp;#039; );&lt;br /&gt;
		$oldid = $wgRequest-&amp;gt;getVal( &amp;#039;oldid&amp;#039; );&lt;br /&gt;
		if( !$mediaWiki-&amp;gt;getVal( &amp;#039;UseExternalEditor&amp;#039; ) || $action==&amp;#039;submit&amp;#039; || $internal ||&lt;br /&gt;
		$section || $oldid || ( !$user-&amp;gt;getOption( &amp;#039;externaleditor&amp;#039; ) &amp;amp;&amp;amp; !$external ) ) {&lt;br /&gt;
			$editor = new FCKeditorEditPage( $article );&lt;br /&gt;
			$editor-&amp;gt;submit();&lt;br /&gt;
		} elseif( $mediaWiki-&amp;gt;getVal( &amp;#039;UseExternalEditor&amp;#039; ) &amp;amp;&amp;amp; ( $external || $user-&amp;gt;getOption( &amp;#039;externaleditor&amp;#039; ) ) ) {&lt;br /&gt;
			$mode = $wgRequest-&amp;gt;getVal( &amp;#039;mode&amp;#039; );&lt;br /&gt;
			$extedit = new ExternalEdit( $article, $mode );&lt;br /&gt;
			$extedit-&amp;gt;edit();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return false;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onEditPageBeforePreviewText(&amp;amp;$editPage, $previewOnOpen) {&lt;br /&gt;
		global $wgUser, $wgRequest;&lt;br /&gt;
&lt;br /&gt;
		if ($wgUser-&amp;gt;getOption( &amp;#039;showtoolbar&amp;#039; ) &amp;amp;&amp;amp; !$wgUser-&amp;gt;getOption( &amp;#039;riched_disable&amp;#039; ) &amp;amp;&amp;amp; !$previewOnOpen ) {&lt;br /&gt;
			$this-&amp;gt;oldTextBox1 = $editPage-&amp;gt;textbox1;&lt;br /&gt;
			$editPage-&amp;gt;importFormData( $wgRequest );&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onEditPagePreviewTextEnd(&amp;amp;$editPage, $previewOnOpen) {&lt;br /&gt;
		global $wgUser;&lt;br /&gt;
&lt;br /&gt;
		if ($wgUser-&amp;gt;getOption( &amp;#039;showtoolbar&amp;#039; ) &amp;amp;&amp;amp; !$wgUser-&amp;gt;getOption( &amp;#039;riched_disable&amp;#039; ) &amp;amp;&amp;amp; !$previewOnOpen ) {&lt;br /&gt;
			$editPage-&amp;gt;textbox1 = $this-&amp;gt;oldTextBox1;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onParserAfterTidy(&amp;amp;$parser, &amp;amp;$text) {&lt;br /&gt;
		global $wgUseTeX, $wgUser, $wgTitle, $wgFCKEditorIsCompatible;&lt;br /&gt;
&lt;br /&gt;
		if (!$wgUser-&amp;gt;getOption( &amp;#039;showtoolbar&amp;#039; ) || $wgUser-&amp;gt;getOption( &amp;#039;riched_disable&amp;#039; ) || !$wgFCKEditorIsCompatible) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (is_object($wgTitle) &amp;amp;&amp;amp; in_array($wgTitle-&amp;gt;getNamespace(), $this-&amp;gt;getExcludedNamespaces())) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if ($wgUseTeX) {&lt;br /&gt;
			//it may add much overload on page with huge amount of math content...&lt;br /&gt;
			$text = preg_replace(&amp;#039;/&amp;lt;img class=&amp;quot;tex&amp;quot; alt=&amp;quot;([^&amp;quot;]*)&amp;quot;/m&amp;#039;, &amp;#039;&amp;lt;img _fckfakelement=&amp;quot;true&amp;quot; _fck_mw_math=&amp;quot;$1&amp;quot;&amp;#039;, $text);&lt;br /&gt;
			$text = preg_replace(&amp;quot;/&amp;lt;img class=&amp;#039;tex&amp;#039; src=\&amp;quot;([^\&amp;quot;]*)\&amp;quot; alt=\&amp;quot;([^\&amp;quot;]*)\&amp;quot;/m&amp;quot;, &amp;#039;&amp;lt;img src=&amp;quot;$1&amp;quot; _fckfakelement=&amp;quot;true&amp;quot; _fck_mw_math=&amp;quot;$2&amp;quot;&amp;#039;, $text);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onMessagesPreLoad() {&lt;br /&gt;
		global $wgMessageCache, $wgUser, $wgContLanguageCode;&lt;br /&gt;
&lt;br /&gt;
		if ( !self::$messagesLoaded ) {&lt;br /&gt;
			$lang = $wgUser-&amp;gt;getOption( &amp;#039;language&amp;#039;, $wgContLanguageCode );&lt;br /&gt;
			$i18nfile = dirname( __FILE__ ) . DIRECTORY_SEPARATOR .&amp;#039;FCKeditor.i18n.&amp;#039; . $lang . &amp;#039;.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
			if ( file_exists( $i18nfile ) ) {&lt;br /&gt;
				require( $i18nfile );&lt;br /&gt;
			} else {&lt;br /&gt;
				$lang = &amp;#039;en&amp;#039;;&lt;br /&gt;
				require( dirname( __FILE__ ) . DIRECTORY_SEPARATOR .&amp;#039;FCKeditor.i18n.en.php&amp;#039; );&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$wgMessageCache-&amp;gt;addMessages( $messages, $lang );&lt;br /&gt;
			self::$messagesLoaded = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	/**&lt;br /&gt;
	 * Add FCK script&lt;br /&gt;
	 *&lt;br /&gt;
	 * @param unknown_type $q&lt;br /&gt;
	 * @return unknown&lt;br /&gt;
	 */&lt;br /&gt;
	public function onEditPageShowEditFormInitial( $form ) {&lt;br /&gt;
		global $wgOut, $wgTitle, $wgScriptPath, $wgContLang;&lt;br /&gt;
		global $wgFCKEditorToolbarSet, $wgFCKEditorIsCompatible;&lt;br /&gt;
		global $wgFCKEditorExtDir, $wgFCKEditorDir, $wgFCKEditorHeight, $wgUser;&lt;br /&gt;
		global $wgStylePath, $wgStyleVersion, $wgDefaultSkin, $wgExtensionFunctions;&lt;br /&gt;
		global $wgFCKWikiTextBeforeParse;&lt;br /&gt;
		global $wgHooks, $wgDefaultUserOptions;&lt;br /&gt;
&lt;br /&gt;
		if (!isset($this-&amp;gt;showFCKEditor))&lt;br /&gt;
		{&lt;br /&gt;
			$this-&amp;gt;showFCKEditor = 0;&lt;br /&gt;
			if ( !$wgUser-&amp;gt;getOption( &amp;#039;riched_start_disabled&amp;#039;,$wgDefaultUserOptions[&amp;#039;riched_start_disabled&amp;#039;] ) ) {&lt;br /&gt;
				$this-&amp;gt;showFCKEditor += RTE_VISIBLE;&lt;br /&gt;
			}&lt;br /&gt;
			if ( $wgUser-&amp;gt;getOption( &amp;#039;riched_use_popup&amp;#039;,$wgDefaultUserOptions[&amp;#039;riched_use_popup&amp;#039;] ) ) {&lt;br /&gt;
				$this-&amp;gt;showFCKEditor += RTE_POPUP;&lt;br /&gt;
			}&lt;br /&gt;
			if ( $wgUser-&amp;gt;getOption( &amp;#039;riched_use_toggle&amp;#039;,$wgDefaultUserOptions[&amp;#039;riched_use_toggle&amp;#039;] ) ) {&lt;br /&gt;
				$this-&amp;gt;showFCKEditor += RTE_TOGGLE_LINK;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if( (!empty($_SESSION[&amp;#039;showMyFCKeditor&amp;#039;])) &amp;amp;&amp;amp; ($wgUser-&amp;gt;getOption( &amp;#039;riched_toggle_remember_state&amp;#039;,$wgDefaultUserOptions[&amp;#039;riched_toggle_remember_state&amp;#039;] )))&lt;br /&gt;
		{&lt;br /&gt;
			//clear RTE_VISIBLE flag&lt;br /&gt;
			$this-&amp;gt;showFCKEditor &amp;amp;= ~RTE_VISIBLE ;&lt;br /&gt;
			//get flag from session&lt;br /&gt;
			$this-&amp;gt;showFCKEditor |= $_SESSION[&amp;#039;showMyFCKeditor&amp;#039;] ;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!$wgUser-&amp;gt;getOption( &amp;#039;showtoolbar&amp;#039; ) || $wgUser-&amp;gt;getOption( &amp;#039;riched_disable&amp;#039;, !empty( $wgDefaultUserOptions[&amp;#039;riched_disable&amp;#039;] ) ? $wgDefaultUserOptions[&amp;#039;riched_disable&amp;#039;] : false ) || !$wgFCKEditorIsCompatible) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (in_array($wgTitle-&amp;gt;getNamespace(), $this-&amp;gt;getExcludedNamespaces())) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (false !== strpos($form-&amp;gt;textbox1, &amp;quot;__NORICHEDITOR__&amp;quot;)) {&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$wgFCKWikiTextBeforeParse = $form-&amp;gt;textbox1;&lt;br /&gt;
		if ($this-&amp;gt;showFCKEditor &amp;amp; RTE_VISIBLE)&lt;br /&gt;
		{&lt;br /&gt;
			$options = new FCKeditorParserOptions();&lt;br /&gt;
			$options-&amp;gt;setTidy(true);&lt;br /&gt;
			$parser = new FCKeditorParser();&lt;br /&gt;
			$parser-&amp;gt;setOutputType(OT_HTML);&lt;br /&gt;
			$form-&amp;gt;textbox1 = str_replace(&amp;quot;&amp;lt;!-- Tidy found serious XHTML errors --&amp;gt;&amp;quot;, &amp;quot;&amp;quot;, $parser-&amp;gt;parse($form-&amp;gt;textbox1, $wgTitle, $options)-&amp;gt;getText());&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$printsheet = htmlspecialchars( &amp;quot;$wgStylePath/common/wikiprintable.css?$wgStyleVersion&amp;quot; );&lt;br /&gt;
&lt;br /&gt;
		//CSS trick,  we need to get user CSS stylesheets somehow... it must be done in a different way!&lt;br /&gt;
		$skin = $wgUser-&amp;gt;getSkin();&lt;br /&gt;
		$skin-&amp;gt;loggedin = $wgUser-&amp;gt;isLoggedIn();&lt;br /&gt;
		$skin-&amp;gt;mTitle =&amp;amp; $wgTitle;&lt;br /&gt;
		$skin-&amp;gt;initPage($wgOut);&lt;br /&gt;
		//$skin-&amp;gt;skinname = &amp;#039;monobook&amp;#039;;&lt;br /&gt;
		$skin-&amp;gt;userpage = $wgUser-&amp;gt;getUserPage()-&amp;gt;getPrefixedText();&lt;br /&gt;
		if (method_exists($skin, &amp;quot;setupUserCss&amp;quot;)) {&lt;br /&gt;
			$skin-&amp;gt;setupUserCss($wgOut);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		if (!empty($skin-&amp;gt;usercss) &amp;amp;&amp;amp; preg_match_all(&amp;#039;/@import &amp;quot;([^&amp;quot;]+)&amp;quot;;/&amp;#039;, $skin-&amp;gt;usercss, $matches)) {&lt;br /&gt;
			$userStyles = $matches[1];&lt;br /&gt;
		}&lt;br /&gt;
		//End of CSS trick&lt;br /&gt;
&lt;br /&gt;
		$script = &amp;lt;&amp;lt;&amp;lt;HEREDOC&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;$wgScriptPath/$wgFCKEditorDir/fckeditor.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
var sEditorAreaCSS = &amp;#039;$printsheet,/mediawiki/skins/monobook/main.css?{$wgStyleVersion}&amp;#039;;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!--[if lt IE 5.5000]&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;sEditorAreaCSS += &amp;#039;,/mediawiki/skins/monobook/IE50Fixes.css?{$wgStyleVersion}&amp;#039;; &amp;lt;/script&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 5.5000]&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;sEditorAreaCSS += &amp;#039;,/mediawiki/skins/monobook/IE55Fixes.css?{$wgStyleVersion}&amp;#039;; &amp;lt;/script&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 6]&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;sEditorAreaCSS += &amp;#039;,/mediawiki/skins/monobook/IE60Fixes.css?{$wgStyleVersion}&amp;#039;; &amp;lt;/script&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if IE 7]&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;sEditorAreaCSS += &amp;#039;,/mediawiki/skins/monobook/IE70Fixes.css?{$wgStyleVersion}&amp;#039;; &amp;lt;/script&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
&amp;lt;!--[if lt IE 7]&amp;gt;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;sEditorAreaCSS += &amp;#039;,/mediawiki/skins/monobook/IEFixes.css?{$wgStyleVersion}&amp;#039;; &amp;lt;/script&amp;gt;&amp;lt;![endif]--&amp;gt;&lt;br /&gt;
HEREDOC;&lt;br /&gt;
&lt;br /&gt;
		$script .= &amp;#039;&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt; &amp;#039;;&lt;br /&gt;
		if (!empty($userStyles)) {&lt;br /&gt;
			$script .= &amp;#039;sEditorAreaCSS += &amp;quot;,&amp;#039;.implode(&amp;#039;,&amp;#039;, $userStyles).&amp;#039;&amp;quot;;&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$showRef = false;&lt;br /&gt;
		if ( (isset($wgHooks[&amp;#039;ParserFirstCallInit&amp;#039;]) &amp;amp;&amp;amp; in_array(&amp;#039;wfCite&amp;#039;,$wgHooks[&amp;#039;ParserFirstCallInit&amp;#039;])) || (isset($wgExtensionFunctions) &amp;amp;&amp;amp; in_array(&amp;#039;wfCite&amp;#039;,$wgExtensionFunctions)) ) {&lt;br /&gt;
			$showRef = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$showSource = false;&lt;br /&gt;
		if ( (isset ($wgHooks[&amp;#039;ParserFirstCallInit&amp;#039;]) &amp;amp;&amp;amp; in_array(&amp;#039;efSyntaxHighlight_GeSHiSetup&amp;#039;, $wgHooks[&amp;#039;ParserFirstCallInit&amp;#039;]))&lt;br /&gt;
			|| (isset ($wgExtensionFunctions) &amp;amp;&amp;amp; in_array(&amp;#039;efSyntaxHighlight_GeSHiSetup&amp;#039;, $wgExtensionFunctions)) ) {&lt;br /&gt;
			$showSource = true;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$script .= &amp;#039;&lt;br /&gt;
var showFCKEditor = &amp;#039;. $this-&amp;gt;showFCKEditor .&amp;#039;;&lt;br /&gt;
var popup = false;		//pointer to popup document&lt;br /&gt;
var firstLoad = true;&lt;br /&gt;
var editorMsgOn = &amp;quot;&amp;#039;. wfMsg( &amp;#039;textrichditor&amp;#039; ) .&amp;#039;&amp;quot;;&lt;br /&gt;
var editorMsgOff = &amp;quot;&amp;#039;. wfMsg( &amp;#039;tog-riched_disable&amp;#039; ) .&amp;#039;&amp;quot;;&lt;br /&gt;
var editorLink = &amp;quot;&amp;#039;. (($this-&amp;gt;showFCKEditor &amp;amp; RTE_VISIBLE)? wfMsg( &amp;#039;tog-riched_disable&amp;#039; ): wfMsg( &amp;#039;textrichditor&amp;#039; )) .&amp;#039;&amp;quot;;&lt;br /&gt;
var saveSetting = &amp;#039;. ($wgUser-&amp;gt;getOption( &amp;#039;riched_toggle_remember_state&amp;#039;,$wgDefaultUserOptions[&amp;#039;riched_toggle_remember_state&amp;#039;]  ) ?  1 : 0) .&amp;#039;;&lt;br /&gt;
var RTE_VISIBLE = &amp;#039;.RTE_VISIBLE.&amp;#039;;&lt;br /&gt;
var RTE_TOGGLE_LINK = &amp;#039;.RTE_TOGGLE_LINK.&amp;#039;;&lt;br /&gt;
var RTE_POPUP = &amp;#039;.RTE_POPUP.&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
var oFCKeditor = new FCKeditor( &amp;quot;wpTextbox1&amp;quot; ) ;&lt;br /&gt;
&lt;br /&gt;
//Set config&lt;br /&gt;
oFCKeditor.BasePath = &amp;quot;&amp;#039;.$wgScriptPath.&amp;#039;/&amp;#039;.$wgFCKEditorDir.&amp;#039;/&amp;quot; ;&lt;br /&gt;
oFCKeditor.Config[&amp;quot;CustomConfigurationsPath&amp;quot;] = &amp;quot;&amp;#039;.$wgScriptPath.&amp;#039;/&amp;#039;.$wgFCKEditorExtDir.&amp;#039;/fckeditor_config.js&amp;quot; ;&amp;#039;;&lt;br /&gt;
		if ($wgContLang-&amp;gt;isRTL()) {&lt;br /&gt;
			$script .= &amp;#039;oFCKeditor.Config[&amp;quot;EditorAreaCSS&amp;quot;] = &amp;quot;&amp;#039;.$wgScriptPath.&amp;#039;/&amp;#039;.$wgFCKEditorExtDir.&amp;#039;/css/fckeditor.css,&amp;#039;.$wgScriptPath.&amp;#039;/&amp;#039;.$wgFCKEditorExtDir.&amp;#039;/css/fckeditor-rtl.css&amp;quot; ;&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		else {&lt;br /&gt;
			$script .= &amp;#039;oFCKeditor.Config[&amp;quot;EditorAreaCSS&amp;quot;] = &amp;quot;&amp;#039;.$wgScriptPath.&amp;#039;/&amp;#039;.$wgFCKEditorExtDir.&amp;#039;/css/fckeditor.css&amp;quot; ;&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
		$script .= &amp;#039;&lt;br /&gt;
oFCKeditor.ToolbarSet = &amp;quot;&amp;#039;. $wgFCKEditorToolbarSet .&amp;#039;&amp;quot; ;&lt;br /&gt;
oFCKeditor.ready = true;&lt;br /&gt;
oFCKeditor.Config[&amp;quot;showreferences&amp;quot;] = &amp;#039;.(($showRef)?&amp;#039;true&amp;#039;:&amp;#039;false&amp;#039;).&amp;#039;;&lt;br /&gt;
oFCKeditor.Config[&amp;quot;showsource&amp;quot;] = &amp;#039;.(($showSource)?&amp;#039;true&amp;#039;:&amp;#039;false&amp;#039;).&amp;#039;;&lt;br /&gt;
&amp;#039;;&lt;br /&gt;
		$script .= &amp;#039;&amp;lt;/script&amp;gt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		$newWinMsg = wfMsg(&amp;#039;rich_editor_new_window&amp;#039;);&lt;br /&gt;
		$script .= &amp;lt;&amp;lt;&amp;lt;HEREDOC&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
//IE hack to call func from popup&lt;br /&gt;
function FCK_sajax(func_name, args, target) {&lt;br /&gt;
	sajax_request_type = &amp;#039;POST&amp;#039; ;&lt;br /&gt;
	sajax_do_call(func_name, args, function (x) {&lt;br /&gt;
		// I know this is function, not object&lt;br /&gt;
		target(x);&lt;br /&gt;
		}&lt;br /&gt;
	);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
function onLoadFCKeditor()&lt;br /&gt;
{&lt;br /&gt;
	if (!(showFCKEditor &amp;amp; RTE_VISIBLE))&lt;br /&gt;
		showFCKEditor += RTE_VISIBLE;&lt;br /&gt;
	firstLoad = false;&lt;br /&gt;
	realTextarea = document.getElementById(&amp;#039;wpTextbox1&amp;#039;);&lt;br /&gt;
	if ( realTextarea )&lt;br /&gt;
	{&lt;br /&gt;
		var height = $wgFCKEditorHeight ;&lt;br /&gt;
		realTextarea.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
		if ( height == 0 )&lt;br /&gt;
		{&lt;br /&gt;
			// Get the window (inner) size.&lt;br /&gt;
			var height = window.innerHeight || ( document.documentElement &amp;amp;&amp;amp; document.documentElement.clientHeight ) || 550 ;&lt;br /&gt;
&lt;br /&gt;
			// Reduce the height to the offset of the toolbar.&lt;br /&gt;
			var offset = document.getElementById(&amp;#039;wikiPreview&amp;#039;) || document.getElementById(&amp;#039;toolbar&amp;#039;) ;&lt;br /&gt;
			while ( offset )&lt;br /&gt;
			{&lt;br /&gt;
				height -= offset.offsetTop ;&lt;br /&gt;
				offset = offset.offsetParent ;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// Add a small space to be left in the bottom.&lt;br /&gt;
			height -= 20 ;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		// Enforce a minimum height.&lt;br /&gt;
		height = ( !height || height &amp;lt; 300 ) ? 300 : height ;&lt;br /&gt;
&lt;br /&gt;
		// Create the editor instance and replace the textarea.&lt;br /&gt;
		oFCKeditor.Height = height ;&lt;br /&gt;
		oFCKeditor.ReplaceTextarea() ;&lt;br /&gt;
&lt;br /&gt;
		// Hide the default toolbar.&lt;br /&gt;
		document.getElementById(&amp;#039;toolbar&amp;#039;).style.display = &amp;#039;none&amp;#039; ;&lt;br /&gt;
		// do things with CharInsert for example&lt;br /&gt;
&lt;br /&gt;
		var edittools_markup = document.getElementById (&amp;#039;editpage-specialchars&amp;#039;) ;&lt;br /&gt;
		if (edittools_markup) {&lt;br /&gt;
			edittools_markup.style.display = &amp;#039;none&amp;#039; ;&lt;br /&gt;
		}&lt;br /&gt;
		FCKeditorInsertTags = function (tagOpen, tagClose, sampleText, oDoc)&lt;br /&gt;
		{&lt;br /&gt;
			var txtarea;&lt;br /&gt;
&lt;br /&gt;
			if ( !(typeof(oDoc.FCK) == &amp;quot;undefined&amp;quot;) &amp;amp;&amp;amp; !(typeof(oDoc.FCK.EditingArea) == &amp;quot;undefined&amp;quot;) )&lt;br /&gt;
			{&lt;br /&gt;
				txtarea = oDoc.FCK.EditingArea.Textarea ;&lt;br /&gt;
			}&lt;br /&gt;
			else if (oDoc.editform)&lt;br /&gt;
			{&lt;br /&gt;
				// if we have FCK enabled, behave differently...&lt;br /&gt;
				if ( showFCKEditor &amp;amp; RTE_VISIBLE )&lt;br /&gt;
				{&lt;br /&gt;
					SRCiframe = oDoc.getElementById (&amp;#039;wpTextbox1___Frame&amp;#039;) ;&lt;br /&gt;
					if ( SRCiframe )&lt;br /&gt;
					{&lt;br /&gt;
						if (window.frames[SRCiframe])&lt;br /&gt;
							SRCdoc = window.frames[SRCiframe].oDoc ;&lt;br /&gt;
						else&lt;br /&gt;
							SRCdoc = SRCiframe.contentDocument ;&lt;br /&gt;
&lt;br /&gt;
						var SRCarea = SRCdoc.getElementById (&amp;#039;xEditingArea&amp;#039;).firstChild ;&lt;br /&gt;
&lt;br /&gt;
						if (SRCarea)&lt;br /&gt;
							txtarea = SRCarea ;&lt;br /&gt;
						else&lt;br /&gt;
							return false ;&lt;br /&gt;
&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
					{&lt;br /&gt;
						return false ;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					txtarea = oDoc.editform.wpTextbox1 ;&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			else&lt;br /&gt;
			{&lt;br /&gt;
				// some alternate form? take the first one we can find&lt;br /&gt;
				var areas = oDoc.getElementsByTagName( &amp;#039;textarea&amp;#039; ) ;&lt;br /&gt;
				txtarea = areas[0] ;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			var selText, isSample = false ;&lt;br /&gt;
&lt;br /&gt;
			if ( oDoc.selection  &amp;amp;&amp;amp; oDoc.selection.createRange )&lt;br /&gt;
			{ // IE/Opera&lt;br /&gt;
&lt;br /&gt;
				//save window scroll position&lt;br /&gt;
				if ( oDoc.documentElement &amp;amp;&amp;amp; oDoc.documentElement.scrollTop )&lt;br /&gt;
					var winScroll = oDoc.documentElement.scrollTop ;&lt;br /&gt;
				else if ( oDoc.body )&lt;br /&gt;
					var winScroll = oDoc.body.scrollTop ;&lt;br /&gt;
&lt;br /&gt;
				//get current selection&lt;br /&gt;
				txtarea.focus() ;&lt;br /&gt;
				var range = oDoc.selection.createRange() ;&lt;br /&gt;
				selText = range.text ;&lt;br /&gt;
				//insert tags&lt;br /&gt;
				checkSelected();&lt;br /&gt;
				range.text = tagOpen + selText + tagClose ;&lt;br /&gt;
				//mark sample text as selected&lt;br /&gt;
				if ( isSample &amp;amp;&amp;amp; range.moveStart )&lt;br /&gt;
				{&lt;br /&gt;
					if (window.opera)&lt;br /&gt;
						tagClose = tagClose.replace(/\\n/g,&amp;#039;&amp;#039;) ; //check it out one more time&lt;br /&gt;
					range.moveStart(&amp;#039;character&amp;#039;, - tagClose.length - selText.length) ;&lt;br /&gt;
					range.moveEnd(&amp;#039;character&amp;#039;, - tagClose.length) ;&lt;br /&gt;
				}&lt;br /&gt;
				range.select();&lt;br /&gt;
				//restore window scroll position&lt;br /&gt;
				if ( oDoc.documentElement &amp;amp;&amp;amp; oDoc.documentElement.scrollTop )&lt;br /&gt;
					oDoc.documentElement.scrollTop = winScroll ;&lt;br /&gt;
				else if ( oDoc.body )&lt;br /&gt;
					oDoc.body.scrollTop = winScroll ;&lt;br /&gt;
&lt;br /&gt;
			}&lt;br /&gt;
			else if ( txtarea.selectionStart || txtarea.selectionStart == &amp;#039;0&amp;#039; )&lt;br /&gt;
			{ // Mozilla&lt;br /&gt;
&lt;br /&gt;
				//save textarea scroll position&lt;br /&gt;
				var textScroll = txtarea.scrollTop ;&lt;br /&gt;
				//get current selection&lt;br /&gt;
				txtarea.focus() ;&lt;br /&gt;
				var startPos = txtarea.selectionStart ;&lt;br /&gt;
				var endPos = txtarea.selectionEnd ;&lt;br /&gt;
				selText = txtarea.value.substring( startPos, endPos ) ;&lt;br /&gt;
&lt;br /&gt;
				//insert tags&lt;br /&gt;
				if (!selText)&lt;br /&gt;
				{&lt;br /&gt;
					selText = sampleText ;&lt;br /&gt;
					isSample = true ;&lt;br /&gt;
				}&lt;br /&gt;
				else if (selText.charAt(selText.length - 1) == &amp;#039; &amp;#039;)&lt;br /&gt;
				{ //exclude ending space char&lt;br /&gt;
					selText = selText.substring(0, selText.length - 1) ;&lt;br /&gt;
					tagClose += &amp;#039; &amp;#039; ;&lt;br /&gt;
				}&lt;br /&gt;
				txtarea.value = txtarea.value.substring(0, startPos) + tagOpen + selText + tagClose +&lt;br /&gt;
								txtarea.value.substring(endPos, txtarea.value.length) ;&lt;br /&gt;
				//set new selection&lt;br /&gt;
				if (isSample)&lt;br /&gt;
				{&lt;br /&gt;
					txtarea.selectionStart = startPos + tagOpen.length ;&lt;br /&gt;
					txtarea.selectionEnd = startPos + tagOpen.length + selText.length ;&lt;br /&gt;
				}&lt;br /&gt;
				else&lt;br /&gt;
				{&lt;br /&gt;
					txtarea.selectionStart = startPos + tagOpen.length + selText.length + tagClose.length ;&lt;br /&gt;
					txtarea.selectionEnd = txtarea.selectionStart;&lt;br /&gt;
				}&lt;br /&gt;
				//restore textarea scroll position&lt;br /&gt;
				txtarea.scrollTop = textScroll;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function checkSelected()&lt;br /&gt;
{&lt;br /&gt;
	if (!selText) {&lt;br /&gt;
		selText = sampleText;&lt;br /&gt;
		isSample = true;&lt;br /&gt;
	} else if (selText.charAt(selText.length - 1) == &amp;#039; &amp;#039;) { //exclude ending space char&lt;br /&gt;
		selText = selText.substring(0, selText.length - 1);&lt;br /&gt;
		tagClose += &amp;#039; &amp;#039;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
function initEditor()&lt;br /&gt;
{&lt;br /&gt;
	var toolbar = document.getElementById(&amp;#039;toolbar&amp;#039;) ;&lt;br /&gt;
	//show popup or toogle link&lt;br /&gt;
	if (showFCKEditor &amp;amp; (RTE_POPUP|RTE_TOGGLE_LINK)){&lt;br /&gt;
		//add new toolbar before wiki toolbar&lt;br /&gt;
		var fckTools = document.createElement(&amp;#039;div&amp;#039;);&lt;br /&gt;
		fckTools.setAttribute(&amp;#039;id&amp;#039;, &amp;#039;fckTools&amp;#039;);&lt;br /&gt;
		toolbar.parentNode.insertBefore( fckTools, toolbar );&lt;br /&gt;
&lt;br /&gt;
		var SRCtextarea = document.getElementById( &amp;quot;wpTextbox1&amp;quot; ) ;&lt;br /&gt;
		if (showFCKEditor &amp;amp; RTE_VISIBLE) SRCtextarea.style.display = &amp;quot;none&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (showFCKEditor &amp;amp; RTE_TOGGLE_LINK)&lt;br /&gt;
	{&lt;br /&gt;
		fckTools.innerHTML=&amp;#039;[&amp;lt;a class=&amp;quot;fckToogle&amp;quot; id=&amp;quot;toggle_wpTextbox1&amp;quot; href=&amp;quot;javascript:void(0)&amp;quot; onclick=&amp;quot;ToggleFCKEditor(\&amp;#039;toggle\&amp;#039;,\&amp;#039;wpTextbox1\&amp;#039;)&amp;quot;&amp;gt;&amp;#039;+ editorLink +&amp;#039;&amp;lt;/a&amp;gt;] &amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	if (showFCKEditor &amp;amp; RTE_POPUP)&lt;br /&gt;
	{&lt;br /&gt;
		var style = (showFCKEditor &amp;amp; RTE_VISIBLE) ? &amp;#039;style=&amp;quot;display:none&amp;quot;&amp;#039; : &amp;quot;&amp;quot;;&lt;br /&gt;
		fckTools.innerHTML+=&amp;#039;&amp;lt;span &amp;#039; + style + &amp;#039; id=&amp;quot;popup_wpTextbox1&amp;quot;&amp;gt;[&amp;lt;a class=&amp;quot;fckPopup&amp;quot; href=&amp;quot;javascript:void(0)&amp;quot; onclick=&amp;quot;ToggleFCKEditor(\&amp;#039;popup\&amp;#039;,\&amp;#039;wpTextbox1\&amp;#039;)&amp;quot;&amp;gt;{$newWinMsg}&amp;lt;/a&amp;gt;]&amp;lt;/span&amp;gt;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (showFCKEditor &amp;amp; RTE_VISIBLE)&lt;br /&gt;
	{&lt;br /&gt;
		if ( toolbar )		//insert wiki buttons&lt;br /&gt;
		{&lt;br /&gt;
			// Remove the mwSetupToolbar onload hook to avoid a JavaScript error with FF.&lt;br /&gt;
			if ( window.removeEventListener )&lt;br /&gt;
				window.removeEventListener( &amp;#039;load&amp;#039;, mwSetupToolbar, false ) ;&lt;br /&gt;
			else if ( window.detachEvent )&lt;br /&gt;
				window.detachEvent( &amp;#039;onload&amp;#039;, mwSetupToolbar ) ;&lt;br /&gt;
			mwSetupToolbar = function() { return false ; } ;&lt;br /&gt;
&lt;br /&gt;
			for (var i = 0; i &amp;lt; mwEditButtons.length; i++) {&lt;br /&gt;
				mwInsertEditButton(toolbar, mwEditButtons[i]);&lt;br /&gt;
			}&lt;br /&gt;
			for (var i = 0; i &amp;lt; mwCustomEditButtons.length; i++) {&lt;br /&gt;
				mwInsertEditButton(toolbar, mwCustomEditButtons[i]);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		onLoadFCKeditor();&lt;br /&gt;
	}&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
addOnloadHook( initEditor );&lt;br /&gt;
&lt;br /&gt;
HEREDOC;&lt;br /&gt;
&lt;br /&gt;
if ($this-&amp;gt;showFCKEditor &amp;amp; (RTE_TOGGLE_LINK | RTE_POPUP) ){&lt;br /&gt;
	//add toogle link and handler&lt;br /&gt;
	$script .= &amp;lt;&amp;lt;&amp;lt;HEREDOC&lt;br /&gt;
&lt;br /&gt;
function ToggleFCKEditor(mode, objId)&lt;br /&gt;
{&lt;br /&gt;
	var SRCtextarea = document.getElementById( objId ) ;&lt;br /&gt;
	if(mode == &amp;#039;popup&amp;#039;){&lt;br /&gt;
		if (( showFCKEditor &amp;amp; RTE_VISIBLE) &amp;amp;&amp;amp; ( FCKeditorAPI ))	//if FCKeditor is up-to-date&lt;br /&gt;
		{&lt;br /&gt;
			var oEditorIns = FCKeditorAPI.GetInstance( objId );&lt;br /&gt;
			var text = oEditorIns.GetData( oEditorIns.Config.FormatSource );&lt;br /&gt;
			SRCtextarea.value = text;			//copy text to textarea&lt;br /&gt;
		}&lt;br /&gt;
		FCKeditor_OpenPopup(&amp;#039;oFCKeditor&amp;#039;,objId);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	var oToggleLink = document.getElementById(&amp;#039;toggle_&amp;#039;+ objId );&lt;br /&gt;
	var oPopupLink = document.getElementById(&amp;#039;popup_&amp;#039;+ objId );&lt;br /&gt;
&lt;br /&gt;
	if ( firstLoad )&lt;br /&gt;
	{&lt;br /&gt;
		// firstLoad = true =&amp;gt; FCKeditor start invisible&lt;br /&gt;
		if (oToggleLink) oToggleLink.innerHTML = &amp;quot;Loading...&amp;quot;;&lt;br /&gt;
		sajax_request_type = &amp;#039;POST&amp;#039; ;&lt;br /&gt;
		oFCKeditor.ready = false;&lt;br /&gt;
		sajax_do_call(&amp;#039;wfSajaxWikiToHTML&amp;#039;, [SRCtextarea.value], function ( result ){&lt;br /&gt;
			if ( firstLoad )	//still&lt;br /&gt;
			{&lt;br /&gt;
				SRCtextarea.value = result.responseText; //insert parsed text&lt;br /&gt;
				onLoadFCKeditor();&lt;br /&gt;
				if (oToggleLink) oToggleLink.innerHTML = editorMsgOff;&lt;br /&gt;
				oFCKeditor.ready = true;&lt;br /&gt;
			}&lt;br /&gt;
		});&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if (!oFCKeditor.ready) return false;		//sajax_do_call in action&lt;br /&gt;
	if (!FCKeditorAPI) return false;			//not loaded yet&lt;br /&gt;
	var oEditorIns = FCKeditorAPI.GetInstance( objId );&lt;br /&gt;
	var oEditorIframe  = document.getElementById( objId+&amp;#039;___Frame&amp;#039; );&lt;br /&gt;
	var FCKtoolbar = document.getElementById(&amp;#039;toolbar&amp;#039;);&lt;br /&gt;
	var bIsWysiwyg = ( oEditorIns.EditMode == FCK_EDITMODE_WYSIWYG );&lt;br /&gt;
&lt;br /&gt;
	//FCKeditor visible -&amp;gt; hidden&lt;br /&gt;
	if ( showFCKEditor &amp;amp; RTE_VISIBLE)&lt;br /&gt;
	{&lt;br /&gt;
		var text = oEditorIns.GetData( oEditorIns.Config.FormatSource );&lt;br /&gt;
		SRCtextarea.value = text;&lt;br /&gt;
		if ( bIsWysiwyg ) oEditorIns.SwitchEditMode();		//switch to plain&lt;br /&gt;
		var text = oEditorIns.GetData( oEditorIns.Config.FormatSource );&lt;br /&gt;
		//copy from FCKeditor to textarea&lt;br /&gt;
		SRCtextarea.value = text;&lt;br /&gt;
		if (saveSetting)&lt;br /&gt;
		{&lt;br /&gt;
			sajax_request_type = &amp;#039;GET&amp;#039; ;&lt;br /&gt;
			sajax_do_call( &amp;#039;wfSajaxToggleFCKeditor&amp;#039;, [&amp;#039;hide&amp;#039;], function(){} ) ;		//remember closing in session&lt;br /&gt;
		}&lt;br /&gt;
		if (oToggleLink) oToggleLink.innerHTML = editorMsgOn;&lt;br /&gt;
		if (oPopupLink) oPopupLink.style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
		showFCKEditor -= RTE_VISIBLE;&lt;br /&gt;
		oEditorIframe.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
		FCKtoolbar.style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
		SRCtextarea.style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	//FCKeditor hidden -&amp;gt; visible&lt;br /&gt;
	else&lt;br /&gt;
	{&lt;br /&gt;
		if ( bIsWysiwyg ) oEditorIns.SwitchEditMode();		//switch to plain&lt;br /&gt;
		SRCtextarea.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
		//copy from textarea to FCKeditor&lt;br /&gt;
		oEditorIns.EditingArea.Textarea.value = SRCtextarea.value&lt;br /&gt;
		FCKtoolbar.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
		oEditorIframe.style.display = &amp;#039;&amp;#039;;&lt;br /&gt;
		if ( !bIsWysiwyg ) oEditorIns.SwitchEditMode();		//switch to WYSIWYG&lt;br /&gt;
		showFCKEditor += RTE_VISIBLE; // showFCKEditor+=RTE_VISIBLE&lt;br /&gt;
		if (oToggleLink) oToggleLink.innerHTML = editorMsgOff;&lt;br /&gt;
		if (oPopupLink) oPopupLink.style.display = &amp;#039;none&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	return true;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
HEREDOC;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
if($this-&amp;gt;showFCKEditor &amp;amp; RTE_POPUP){&lt;br /&gt;
	$script .= &amp;lt;&amp;lt;&amp;lt;HEREDOC&lt;br /&gt;
&lt;br /&gt;
function FCKeditor_OpenPopup(jsID, textareaID)&lt;br /&gt;
{&lt;br /&gt;
	popupUrl = &amp;#039;${wgFCKEditorExtDir}/FCKeditor.popup.html&amp;#039;;&lt;br /&gt;
	popupUrl = popupUrl + &amp;#039;?var=&amp;#039;+ jsID + &amp;#039;&amp;amp;el=&amp;#039; + textareaID;&lt;br /&gt;
	window.open(popupUrl, null, &amp;#039;toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=1,dependent=yes&amp;#039;);&lt;br /&gt;
	return 0;&lt;br /&gt;
}&lt;br /&gt;
HEREDOC;&lt;br /&gt;
}&lt;br /&gt;
$script .= &amp;quot;&amp;lt;/script&amp;gt;&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
		$wgOut-&amp;gt;addScript($script);&lt;br /&gt;
&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	public function onUserToggles( &amp;amp;$extraToggles ) {&lt;br /&gt;
		global $wgUser,$wgDefaultUserOptions;&lt;br /&gt;
		$extraToggles[] = &amp;#039;riched_disable&amp;#039;;&lt;br /&gt;
		$extraToggles[] = &amp;#039;riched_start_disabled&amp;#039;;&lt;br /&gt;
		$extraToggles[] = &amp;#039;riched_use_popup&amp;#039;;&lt;br /&gt;
		$extraToggles[] = &amp;#039;riched_use_toggle&amp;#039;;&lt;br /&gt;
		$extraToggles[] = &amp;#039;riched_toggle_remember_state&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		//Show default options in Special:Preferences&lt;br /&gt;
		if( !array_key_exists( &amp;quot;riched_disable&amp;quot;, $wgUser-&amp;gt;mOptions ) &amp;amp;&amp;amp; !empty($wgDefaultUserOptions[&amp;#039;riched_disable&amp;#039;]) )&lt;br /&gt;
			$wgUser-&amp;gt;setOption(&amp;quot;riched_disable&amp;quot;, $wgDefaultUserOptions[&amp;#039;riched_disable&amp;#039;]);&lt;br /&gt;
		if( !array_key_exists( &amp;quot;riched_start_disabled&amp;quot;, 	$wgUser-&amp;gt;mOptions ) &amp;amp;&amp;amp; !empty($wgDefaultUserOptions[&amp;#039;riched_start_disabled&amp;#039;]) )&lt;br /&gt;
			$wgUser-&amp;gt;setOption(&amp;quot;riched_start_disabled&amp;quot;,$wgDefaultUserOptions[&amp;#039;riched_start_disabled&amp;#039;]);&lt;br /&gt;
		if( !array_key_exists( &amp;quot;riched_use_popup&amp;quot;, 	$wgUser-&amp;gt;mOptions ) &amp;amp;&amp;amp; !empty($wgDefaultUserOptions[&amp;#039;riched_use_popup&amp;#039;]) )&lt;br /&gt;
			$wgUser-&amp;gt;setOption(&amp;quot;riched_use_popup&amp;quot;,$wgDefaultUserOptions[&amp;#039;riched_use_popup&amp;#039;]);&lt;br /&gt;
		if( !array_key_exists( &amp;quot;riched_use_toggle&amp;quot;, 	$wgUser-&amp;gt;mOptions ) &amp;amp;&amp;amp; !empty($wgDefaultUserOptions[&amp;#039;riched_use_toggle&amp;#039;]) )&lt;br /&gt;
			$wgUser-&amp;gt;setOption(&amp;quot;riched_use_toggle&amp;quot;,$wgDefaultUserOptions[&amp;#039;riched_use_toggle&amp;#039;]);&lt;br /&gt;
		if( !array_key_exists( &amp;quot;riched_toggle_remember_state&amp;quot;, 	$wgUser-&amp;gt;mOptions ) &amp;amp;&amp;amp; !empty($wgDefaultUserOptions[&amp;#039;riched_toggle_remember_state&amp;#039;]) )&lt;br /&gt;
			$wgUser-&amp;gt;setOption(&amp;quot;riched_toggle_remember_state&amp;quot;,$wgDefaultUserOptions[&amp;#039;riched_toggle_remember_state&amp;#039;]);&lt;br /&gt;
&lt;br /&gt;
		$extraToggles = array_merge($extraToggles, self::$nsToggles);&lt;br /&gt;
		return true;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;/div&gt;</summary>
		<author><name>Mpuj</name></author>
	</entry>
</feed>