1) add new preference: use external diffs (uses same framework as external
authorErik Moeller <erik@users.mediawiki.org>
Tue, 12 Apr 2005 03:36:20 +0000 (03:36 +0000)
committerErik Moeller <erik@users.mediawiki.org>
Tue, 12 Apr 2005 03:36:20 +0000 (03:36 +0000)
   editors)
2) support for external diffs
3) shuffle some user preferences around

includes/DifferenceEngine.php
includes/ExternalEdit.php
includes/SpecialPreferences.php
languages/Language.php

index 66edfa9..c871eb9 100644 (file)
@@ -64,9 +64,37 @@ class DifferenceEngine {
        }
 
        function showDiffPage() {
-               global $wgUser, $wgTitle, $wgOut, $wgContLang, $wgOnlySysopsCanPatrol, $wgUseRCPatrol;
+               global $wgUser, $wgTitle, $wgOut, $wgContLang, $wgOnlySysopsCanPatrol,
+                      $wgUseExternalEditor, $wgUseRCPatrol;
                $fname = 'DifferenceEngine::showDiffPage';
                wfProfileIn( $fname );
+                               
+               # If external diffs are enabled both globally and for the user,
+               # we'll use the application/x-external-editor interface to call
+               # an external diff tool like kompare, kdiff3, etc.
+               if($wgUseExternalEditor) {
+                       global $wgInputEncoding,$wgServer,$wgScript;
+                       $wgOut->disable();
+                       header ( "Content-type: application/x-external-editor; charset=".$wgInputEncoding );
+                       $url1=$wgTitle->getFullURL("action=raw&oldid=".$this->mOldid);
+                       $url2=$wgTitle->getFullURL("action=raw&oldid=".$this->mNewid);
+                       $control=<<<CONTROL
+[Process]
+Type=Diff text
+Engine=MediaWiki
+Script={$wgServer}{$wgScript}
+
+[File]
+Extension=wiki
+URL=$url1
+
+[File 2]
+Extension=wiki
+URL=$url2
+CONTROL;
+                       echo($control);
+                       return;
+               }
 
                # mOldid is false if the difference engine is called with a "vague" query for
                # a diff between a version V and its previous version V' AND the version V
index b52dcf0..a4acab5 100644 (file)
@@ -11,7 +11,7 @@
  * @package MediaWiki
  *
  * Support for external editors to modify both text and files
- * in external application. It works as follows: MediaWiki
+ * in external applications. It works as follows: MediaWiki
  * sends a meta-file with the MIME type 'application/x-external-editor'
  * to the client. The user has to associate that MIME type with
  * a helper application (a reference implementation in Perl
@@ -36,7 +36,11 @@ class ExternalEdit {
                $name=$this->mTitle->getText();
                $pos=strrpos($name,".")+1;
                header ( "Content-type: application/x-external-editor; charset=".$this->mCharset );
-               if(!isset($this->mMode)) {
+               
+               # $type can be "Edit text", "Edit file" or "Diff text" at the moment
+               # See the protocol specifications at [[m:Help:External editors/Tech]] for
+               # details.
+               if(!isset($this->mMode)) {              
                        $type="Edit text";              
                        $url=$this->mTitle->getFullURL("action=edit&internaledit=true");
                        # *.wiki file extension is used by some editors for syntax 
@@ -44,12 +48,11 @@ class ExternalEdit {
                        $extension="wiki"; 
                } elseif($this->mMode=="file") {
                        $type="Edit file"; 
-                       $url = Image::newFromTitle( $this->mTitle );
-                       $url = $wgServer . $url->url; # php sucks
-                       
+                       $image = Image::newFromTitle( $this->mTitle );
+                       $url = $wgServer . $image->getURL();
                        $extension=substr($name, $pos);
                }                                        
-               $control="
+               $control = <<<CONTROL
 [Process]
 Type=$type
 Engine=MediaWiki
@@ -59,7 +62,8 @@ Path={$wgScriptPath}
 
 [File]
 Extension=$extension
-URL=$url";
+URL=$url
+CONTROL;
                echo $control;
        }
 }
index d4e6722..35b40a4 100644 (file)
@@ -668,6 +668,9 @@ class PreferencesForm {
                        <label>$tbr: <input type='text' name=\"wpRows\" value=\"{$this->mRows}\" size='6' /></label>
                        <label>$tbc: <input type='text' name=\"wpCols\" value=\"{$this->mCols}\" size='6' /></label>
                </div> " .
+               $this->getToggle( "editsection" ) .
+               $this->getToggle( "editsectiononrightclick" ) .
+               $this->getToggle( "editondblclick" ) .
                $this->getToggle( "editwidth" ) .
                $this->getToggle( "showtoolbar" ) .
                $this->getToggle( "previewonfirst" ) .
@@ -675,6 +678,7 @@ class PreferencesForm {
                $this->getToggle( "watchdefault" ) .
                $this->getToggle( "minordefault" ) . 
                $this->getToggle( "externaleditor" ) .
+               $this->getToggle( "externaldiff" ) .
                "
        </fieldset>");
        
@@ -684,7 +688,9 @@ class PreferencesForm {
        <fieldset><legend>".wfMsg('prefs-rc')."</legend>
                <div><label>$rcc: <input type='text' name=\"wpRecent\" value=\"$this->mRecent\" size='6' /></label></div>" .
                $this->getToggle( "hideminor" ) . $shownumberswatching .
-               $this->getToggle( "usenewrc" ) . $this->getToggle('showupdated', wfMsg('updatedmarker')) .
+               $this->getToggle( "usenewrc" ) . 
+               $this->getToggle( "rcusemodstyle" ) .
+               $this->getToggle('showupdated', wfMsg('updatedmarker')) .
                "<div><label>$stt: <input type='text' name=\"wpStubs\" value=\"$this->mStubs\" size='6' /></label></div>
        </fieldset>
        
index e80981c..341e479 100644 (file)
@@ -85,8 +85,9 @@ if(isset($wgExtraNamespaces)) {
        'shownumberswatching'   => 1,
        'rcusemodstyle'         => 1,
        'showupdated'           => 1,
-       'fancysig' => 0,
-       'externaleditor' => 0,
+       'fancysig'              => 0,
+       'externaleditor'        => 0,
+       'externaldiff'          => 0,
 );
 
 /* private */ $wgQuickbarSettingsEn = array(
@@ -161,7 +162,8 @@ define( 'MW_DATE_USER_FORMAT', true );
        'rcusemodstyle',
        'showupdated',
        'fancysig',
-       'externaleditor'
+       'externaleditor',
+       'externaldiff',
 );
 
 /* private */ $wgBookstoreListEn = array(
@@ -269,7 +271,7 @@ global $wgRightsText;
 'tog-hideminor' => 'Hide minor edits in recent changes',
 'tog-usenewrc' => 'Enhanced recent changes (not for all browsers)',
 'tog-numberheadings' => 'Auto-number headings',
-'tog-showtoolbar'              => 'Show edit toolbar',
+'tog-showtoolbar'              => 'Show edit toolbar (JavaScript)',
 'tog-editondblclick' => 'Edit pages on double click (JavaScript)',
 'tog-editsection'              => 'Enable section editing via [edit] links',
 'tog-editsectiononrightclick'  => 'Enable section editing by right clicking<br /> on section titles (JavaScript)',
@@ -290,6 +292,7 @@ global $wgRightsText;
 'tog-showupdated'              => 'Show update marker ',
 'tog-fancysig' => 'Raw signatures (without automatic link)',
 'tog-externaleditor' => 'Use external editor by default',
+'tog-externaldiff' => 'Use external diff by default',
 
 # dates
 'sunday' => 'Sunday',