http://www.mediawiki.org/wiki/Special:Code/MediaWiki/56421

Revision: 56421
Author:   catrope
Date:     2009-09-16 17:47:04 +0000 (Wed, 16 Sep 2009)

Log Message:
-----------
wmf-deployment-work: Merge r56417 (pre-deployment usability fixes) from 
trunk. Also merge r56195 (NTOC bugfix), made conflict resolution easier.

Modified Paths:
--------------
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/ClickTracking/ClickTracking.hooks.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.hooks.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.i18n.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.php
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.js
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.min.js

Added Paths:
-----------
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-ilink.png
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-xlink.png

Property Changed:
----------------
    branches/wmf-deployment-work/extensions/UsabilityInitiative/
    
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js


Property changes on: branches/wmf-deployment-work/extensions/UsabilityInitiative
___________________________________________________________________
Added: svn:mergeinfo
   + /branches/REL1_15/phase3/extensions/UsabilityInitiative:51646
/trunk/extensions/UsabilityInitiative:56207,56209,56296,56333,56355,56417
/trunk/phase3/extensions/UsabilityInitiative:56213,56215-56216,56218,56325,56334-56336,56338,56340,56343,56345,56347,56350

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/ClickTracking/ClickTracking.hooks.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/ClickTracking/ClickTracking.hooks.php
   2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/ClickTracking/ClickTracking.hooks.php
   2009-09-16 17:47:04 UTC (rev 56421)
@@ -62,7 +62,7 @@
                                'wgTrackingToken' => 
ClickTrackingHooks::get_session_id()
                        )
                );
-               UsabilityInitiativeHooks::addLiteralVariables(
+               UsabilityInitiativeHooks::addVariables(
                        array( 
                                'wgClickTrackingIsThrottled' => 
ClickTrackingHooks::isUserThrottled()
                        )

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
       2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.hooks.php
       2009-09-16 17:47:04 UTC (rev 56421)
@@ -15,7 +15,9 @@
         * Intercept the display of the toolbar, replacing the content of 
$toolbar
         */
        public static function addToolbar( &$toolbar ) {
-               global $wgUser, $wgEditToolbarGlobalEnable, 
$wgEditToolbarUserEnable;
+               global $wgUser, $wgEditToolbarGlobalEnable;
+               global $wgEditToolbarUserEnable, $wgEditToolbarCGDGlobalEnable;
+               global $wgEditToolbarCGDUserEnable;
                
                // Only proceed if some specific conditions are met
                if ( $wgEditToolbarGlobalEnable || ( $wgEditToolbarUserEnable 
&& $wgUser->getOption( 'usebetatoolbar' ) ) ) {
@@ -25,6 +27,9 @@
                        UsabilityInitiativeHooks::addScript(
                                'EditToolbar/EditToolbar.js', 
$wgEditToolbarStyleVersion
                        );
+                       UsabilityInitiativeHooks::addVariables( array(
+                               'wgEditToolbarCGD' => 
$wgEditToolbarCGDGlobalEnable || ( $wgEditToolbarCGDUserEnable && 
$wgUser->getOption( 'usebetatoolbar-cgd' ) )
+                       ) );
                        // Internationalization
                        wfLoadExtensionMessages( 'EditToolbar' );
                        UsabilityInitiativeHooks::addMessages(
@@ -35,6 +40,10 @@
                                        'edittoolbar-tool-bold-example',
                                        'edittoolbar-tool-italic',
                                        'edittoolbar-tool-italic-example',
+                                       'edittoolbar-tool-ilink',
+                                       'edittoolbar-tool-ilink-example',
+                                       'edittoolbar-tool-xlink',
+                                       'edittoolbar-tool-xlink-example',
                                        'edittoolbar-tool-link',
                                        'edittoolbar-tool-link-title',
                                        'edittoolbar-tool-link-int',
@@ -85,6 +94,7 @@
                                        'edittoolbar-tool-gallery-example',
                                        'edittoolbar-tool-newline',
                                        'edittoolbar-tool-table',
+                                       'edittoolbar-tool-table-example-old',
                                        'edittoolbar-tool-table-example',
                                        'edittoolbar-tool-table-example-header',
                                        'edittoolbar-tool-table-title',
@@ -196,15 +206,9 @@
         */
        public static function addPreferences( $user, &$defaultPreferences ) {
                global $wgEditToolbarGlobalEnable, $wgEditToolbarUserEnable;
+               global $wgEditToolbarCGDGlobalEnable, 
$wgEditToolbarCGDUserEnable;
 
-               // Checks if...
-               if (
-                       // Toolbar is NOT globablly enabled
-                       !$wgEditToolbarGlobalEnable &&
-                       // And Toolbar is per-user enablable
-                       $wgEditToolbarUserEnable
-               ) {
-                       // Internationalization
+               if ( !$wgEditToolbarGlobalEnable && $wgEditToolbarUserEnable ) {
                        wfLoadExtensionMessages( 'EditToolbar' );
                        // Adds preference for opting in
                        $defaultPreferences['usebetatoolbar'] =
@@ -214,6 +218,15 @@
                                'section' => 'editing/advancedediting',
                        );
                }
+               
+               if ( !$wgEditToolbarGlobalEnable && $wgEditToolbarUserEnable ) {
+                       wfLoadExtensionMessages( 'EditToolbar' );
+                       $defaultPreferences['usebetatoolbar-cgd'] = array(
+                               'type' => 'toggle',
+                               'label-message' => 'edittoolbar-cgd-preference',
+                               'section' => 'editing/advancedediting',
+                       );
+               }
                return true;
        }
 }

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
        2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.i18n.php
        2009-09-16 17:47:04 UTC (rev 56421)
@@ -15,12 +15,17 @@
        'edittoolbar' => 'Editing toolbar',
        'edittoolbar-desc' => 'Edit page toolbar with enhanced usability',
        'edittoolbar-preference' => 'Enable enhanced editing toolbar',
+       'edittoolbar-cgd-preference' => 'Enable content generation dialogs in 
enhanced editing toolbar',
        'edittoolbar-loading' => 'Loading...',
        /* Main Section */
        'edittoolbar-tool-bold' => 'Bold',
        'edittoolbar-tool-bold-example' => 'Bold text',
        'edittoolbar-tool-italic' => 'Italic',
        'edittoolbar-tool-italic-example' => 'Italic text',
+       'edittoolbar-tool-ilink' => 'Internal link',
+       'edittoolbar-tool-ilink-example' => 'Link title',
+       'edittoolbar-tool-xlink' => 'External link (remember http:// prefix)',
+       'edittoolbar-tool-xlink-example' => 'http://www.example.com link title',
        'edittoolbar-tool-link' => 'Link',
        'edittoolbar-tool-link-title' => 'Insert link',
        'edittoolbar-tool-link-int' => 'To a wiki page',
@@ -72,6 +77,18 @@
 {{ns:file}}:Example.jpg|Caption2",
        'edittoolbar-tool-newline' => 'New line',
        'edittoolbar-tool-table' => 'Table',
+       'edittoolbar-tool-table-example-old' => "-
+! header 1
+! header 2
+! header 3
+|-
+| row 1, cell 1
+| row 1, cell 2
+| row 1, cell 3
+|-
+| row 2, cell 1
+| row 2, cell 2
+| row 2, cell 3",
        'edittoolbar-tool-table-example' => 'Row $1, cell $2',
        'edittoolbar-tool-table-example-header' => 'Row $1, cell $2 (header)',
        'edittoolbar-tool-table-title' => 'Insert table',

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
      2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.js
      2009-09-16 17:47:04 UTC (rev 56421)
@@ -1,6 +1,10 @@
 /* JavaScript for EditToolbar extension */
 
 js2AddOnloadHook( function() {
+       // Only show content generation dialogs if enabled
+       if ( typeof wgEditToolbarCGD != 'undefined' && wgEditToolbarCGD )
+               $j( '#wpTextbox1' ).addClass( 'withCGD' );
+       
        if ( $j.wikiEditor != undefined && $j.wikiEditor.isSupported() || 
!$j.wikiEditor.isSupportKnown() ) {
                // Remove the old toolbar
                $j( '#toolbar' ).remove();
@@ -47,10 +51,39 @@
                        },
                        'insert': {
                                tools: {
-                                       'link': {
+                                       'xlink': {
+                                               labelMsg: 
'edittoolbar-tool-xlink',
+                                               type: 'button',
+                                               icon: 'insert-xlink.png',
+                                               filters: [ 
'#wpTextbox1:not(.withCGD)' ],
+                                               action: {
+                                                       type: 'encapsulate',
+                                                       options: {
+                                                               pre: "[",
+                                                               periMsg: 
'edittoolbar-tool-xlink-example',
+                                                               post: "]"
+                                                       }
+                                               }
+                                       },
+                                       'ilink': {
+                                               labelMsg: 
'edittoolbar-tool-ilink',
+                                               type: 'button',
+                                               icon: 'insert-ilink.png',
+                                               filters: [ 
'#wpTextbox1:not(.withCGD)' ],
+                                               action: {
+                                                       type: 'encapsulate',
+                                                       options: {
+                                                               pre: "[[",
+                                                               periMsg: 
'edittoolbar-tool-ilink-example',
+                                                               post: "]]"
+                                                       }
+                                               }
+                                       },
+                                       'linkCGD': {
                                                labelMsg: 
'edittoolbar-tool-link',
                                                type: 'button',
                                                icon: 'insert-link.png',
+                                               filters: [ 
'#wpTextbox1.withCGD' ],
                                                action: {
                                                        type: 'dialog',
                                                        module: 'insert-link'
@@ -271,15 +304,30 @@
                                                        }
                                                }
                                        },
-                                       'table': {
+                                       'tableCGD': {
                                                labelMsg: 
'edittoolbar-tool-table',
                                                type: 'button',
                                                icon: 'insert-table.png',
+                                               filters: [ 
'#wpTextbox1.withCGD' ],
                                                action: {
                                                        type: 'dialog',
                                                        module: 'insert-table'
                                                }
                                        },
+                                       'table': {
+                                               labelMsg: 
'edittoolbar-tool-table',
+                                               type: 'button',
+                                               icon: 'insert-table.png',
+                                               filters: [ 
'#wpTextbox1:not(.withCGD)' ],
+                                               action: {
+                                                       type: 'encapsulate',
+                                                       options: {
+                                                               pre: "{| 
class=\"wikitable\" border=\"1\"\n|",
+                                                               periMsg: 
'edittoolbar-tool-table-example-old',
+                                                               post: "\n|}"
+                                                       }
+                                               }
+                                       },
                                        'newline': {
                                                labelMsg: 
'edittoolbar-tool-newline',
                                                type: 'button',
@@ -299,6 +347,7 @@
                                                labelMsg: 
'edittoolbar-tool-replace',
                                                type: 'button',
                                                icon: 'search-replace.png',
+                                               filters: [ 
'#wpTextbox1.withCGD' ],
                                                action: {
                                                        type: 'dialog',
                                                        module: 
'search-and-replace'

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
     2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/EditToolbar/EditToolbar.php
     2009-09-16 17:47:04 UTC (rev 56421)
@@ -19,7 +19,7 @@
 /* Configuration */
 
 // Bump the version number every time you change any of the .css/.js files
-$wgEditToolbarStyleVersion = 28;
+$wgEditToolbarStyleVersion = 33;
 
 // Set this to true to simply override the stock toolbar for everyone
 $wgEditToolbarGlobalEnable = false;
@@ -29,6 +29,15 @@
 // will not do anything)
 $wgEditToolbarUserEnable = true;
 
+// Set this to true to enable content generation dialogs for everyone who gets
+// the toolbar
+$wgEditToolbarCGDGlobalEnable = false;
+
+// Set this to true to add a preference to the editing section of preferences
+// which enabled and disables content generation dialogs
+// If $wgEditToolbatCGDGlobalEnable is true, this will be ignored
+$wgEditToolbarCGDUserEnable = true;
+
 // Set if we should include a client-side testing script
 $wgEditToolbarRunTests = false;
 

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.hooks.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.hooks.php
     2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.hooks.php
     2009-09-16 17:47:04 UTC (rev 56421)
@@ -15,14 +15,36 @@
         * Adds the TOC to the edit form
         */
         public static function addTOC( &$toolbar ) {
-               global $wgNavigableTOCStyleVersion, $wgParser, $wgUser;
-               global $wgEnableParserCache;
+               global $wgNavigableTOCStyleVersion, $wgUser;
+               global $wgNavigableTOCGlobalEnable, $wgNavigableTOCUserEnable;
                
-               // Adds script to document
-               UsabilityInitiativeHooks::initialize();
-               UsabilityInitiativeHooks::addScript(
-                       'NavigableTOC/NavigableTOC.js', 
$wgNavigableTOCStyleVersion
-               );
+               if ( $wgNavigableTOCGlobalEnable || ( $wgNavigableTOCUserEnable 
&& $wgUser->getOption( 'usenavigabletoc' ) ) ) {                
+                       // Adds script to document
+                       UsabilityInitiativeHooks::initialize();
+                       UsabilityInitiativeHooks::addScript(
+                               'NavigableTOC/NavigableTOC.js', 
$wgNavigableTOCStyleVersion
+                       );
+               }
                return true;
        }
+       
+       /**
+        * GetPreferences hook
+        * Add NTOC-related items to the preferences
+        */
+       public static function addPreferences( $user, &$defaultPreferences ) {
+               global $wgNavigableTOCGlobalEnable, $wgNavigableTOCUserEnable;
+
+               if ( !$wgNavigableTOCGlobalEnable && $wgNavigableTOCUserEnable 
) {
+                       wfLoadExtensionMessages( 'NavigableTOC' );
+                       // Adds preference for opting in
+                       $defaultPreferences['usenavigabletoc'] =
+                       array(
+                               'type' => 'toggle',
+                               'label-message' => 'navigabletoc-preference',
+                               'section' => 'editing/advancedediting',
+                       );
+               }
+               return true;
+       }
 }

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.i18n.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.i18n.php
      2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.i18n.php
      2009-09-16 17:47:04 UTC (rev 56421)
@@ -14,6 +14,7 @@
 $messages['en'] = array(
        'navigabletoc' => 'Navigable table of contents',
        'navigabletoc-desc' => 'Adds a table of contents to the edit form that 
scrolls the text box when a section is clicked',
+       'navigabletoc-preference' => 'Enable navigable table of contents',
 );
 
 /** Afrikaans (Afrikaans)

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.php
   2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/NavigableTOC/NavigableTOC.php
   2009-09-16 17:47:04 UTC (rev 56421)
@@ -18,6 +18,14 @@
 
 /* Configuration */
 
+// Set this to true to simply force NavigableTOC on everyone
+$wgNavigableTOCGlobalEnable = false;
+
+// Set this to true to add a preference to the editing section of preferences
+// which enables and disables NavigableTOC (if $wgNavigableTOCGlobalEnable, 
this
+// will not do anything)
+$wgNavigableTOCUserEnable = true;
+
 // Bump the version number every time you change any of the .css/.js files
 $wgNavigableTOCStyleVersion = 3;
 
@@ -45,4 +53,5 @@
        dirname( __FILE__ ) . '/NavigableTOC.i18n.php';
 
 // Registers Hooks
-$wgHooks['EditPageBeforeEditToolbar'][] = 'NavigableTOCHooks::addTOC';
\ No newline at end of file
+$wgHooks['EditPageBeforeEditToolbar'][] = 'NavigableTOCHooks::addTOC';
+$wgHooks['GetPreferences'][] = 'NavigableTOCHooks::addPreferences';

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
   2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.hooks.php
   2009-09-16 17:47:04 UTC (rev 56421)
@@ -62,17 +62,17 @@
                                array( 'src' => 
'js/plugins/jquery.namespaceSelect.js', 'version' => 0 ),
                                array( 'src' => 
'js/plugins/jquery.suggestions.js', 'version' => 2 ),
                                array( 'src' => 
'js/plugins/jquery.textSelection.js', 'version' => 9 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 4 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.js', 'version' => 5 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toolbar.js', 'version' => 11 ),
-                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 1 ),
+                               array( 'src' => 
'js/plugins/jquery.wikiEditor.dialogs.js', 'version' => 2 ),
                                array( 'src' => 
'js/plugins/jquery.wikiEditor.toc.js', 'version' => 6 ),
                                array( 'src' => 'js/js2/jquery-ui-1.7.2.js', 
'version' => '1.7.2x' ),
                        ),
                        'combined' => array(
-                               array( 'src' => 'js/plugins.combined.js', 
'version' => 17 ),
+                               array( 'src' => 'js/plugins.combined.js', 
'version' => 22 ),
                        ),
                        'minified' => array(
-                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 17 ),
+                               array( 'src' => 'js/plugins.combined.min.js', 
'version' => 22 ),
                        ),
                ),
        );
@@ -124,31 +124,7 @@
                
                if ( !self::$doOutput )
                        return true;
-               // Transforms variables into javascript global variables
-               foreach ( self::$variables as $key => $value ) {
-                       $escapedVariableValue = Xml::escapeJsString( $value );
-                       $escapedVariableKey = Xml::escapeJsString( $key );
-                       self::$variables[$key] =
-                               "var {$escapedVariableKey} = 
'{$escapedVariableValue}';";
-               }
                
-               //literal variables, ie ones we do not want escaped as strings
-               foreach( self::$literalVariables as $key => $value){
-                       $escapedVariableValue = Xml::escapeJsString( $value );
-                       $escapedVariableKey = Xml::escapeJsString( $key );
-                       self::$variables[$key] =
-                               "var {$escapedVariableKey} = 
{$escapedVariableValue};";
-               }
-               if ( count( self::$variables ) > 0 ) {
-                       $out->addScript(
-                               Xml::tags(
-                                       'script',
-                                       array( 'type' => $wgJsMimeType ),
-                                       implode( self::$variables )
-                               )
-                       );
-               }
-               
                // Loops over each script
                foreach ( self::$scripts as $script ) {
                        // Add javascript to document
@@ -198,6 +174,14 @@
                }
                return true;
        }
+       
+       /**
+        * MakeGlobalVariablesScript hook
+        */
+       public static function addJSVars( &$vars ) {
+               $vars = array_merge( $vars, self::$variables );
+               return true;
+       }
 
        /**
         * Adds a reference to a javascript file to the head of the document
@@ -233,13 +217,4 @@
        public static function addVariables( $variables ) {
                self::$variables = array_merge( self::$variables, $variables );
        }
-       
-       /**
-        * Adds variables that will be turned into global variables in JS, but 
not escaped as strings
-        * @param $variables array of "name" => "value"
-        */
-       public static function addLiteralVariables( $variables ) {
-               self::$literalVariables = array_merge( self::$literalVariables, 
$variables );
-       }
-       
 }

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.php
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.php
 2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/UsabilityInitiative.php
 2009-09-16 17:47:04 UTC (rev 56421)
@@ -45,3 +45,4 @@
 
 // Registers Hooks
 $wgHooks['BeforePageDisplay'][] = 'UsabilityInitiativeHooks::addResources';
+$wgHooks['MakeGlobalVariablesScript'][] = 
'UsabilityInitiativeHooks::addJSVars';
\ No newline at end of file

Copied: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-ilink.png
 (from rev 56417, 
trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-ilink.png)
===================================================================
(Binary files differ)

Copied: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-xlink.png
 (from rev 56417, 
trunk/extensions/UsabilityInitiative/images/wikiEditor/toolbar/insert-xlink.png)
===================================================================
(Binary files differ)

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
 2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.js
 2009-09-16 17:47:04 UTC (rev 56421)
@@ -65,96 +65,88 @@
 // gets called again we can pick up where we left off
 var context = $(this).data( 'wikiEditor-context' );
 
-/* API */
 
-// The first time this is called, we expect context to be undefined, meaning
-// the editing UI has not yet been, and still needs to be, built. However, each
-// additional call after that is expected to be an API call, which contains a
-// string as the first argument which corresponds to a supported API call
-if ( typeof context !== 'undefined' ) {
-       // Since javascript gives arguments as an object, we need to convert 
them
-       // so they can be used more easily
-       arguments = $.makeArray( arguments );
-       if ( arguments.length > 0 ) {
-               // Handle API calls
-               var call = arguments.shift();
-               if ( call in context.api ) {
-                       context.api[call]( context, arguments[0] == undefined ? 
{} : arguments[0] );
-               }
-               // Store the context for next time and return
-               return $(this).data( 'context', context );
-       }
-       // Nothing to do, just return
-       return $(this);
-}
-
-/* Construction */
-
-var instance = $.wikiEditor.instances.length;
-context = { '$textarea': $(this), 'modules': {}, 'data': {}, 'instance': 
instance };
-$.wikiEditor.instances[instance] = $(this);
-
-// Encapsulate the textarea with some containers for layout
-$(this)
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui' ).attr( 'id', 
'wikiEditor-ui' ) )
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-bottom' ).attr( 
'id', 'wikiEditor-ui-bottom' ) )
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-text' ).attr( 'id', 
'wikiEditor-ui-text' ) );
-
-// Get a reference to the outer container
-context.$ui = $(this).parent().parent().parent();
-context.$ui.after( $( '<div style="clear:both;"></div>' ) );
-// Attach a container in the top
-context.$ui.prepend( $( '<div></div>' ).addClass( 'wikiEditor-ui-top' ).attr( 
'id', 'wikiEditor-ui-top' ) );
-
-// Create a set of standard methods for internal and external use
-context.api = {
-       /**
-        * Accepts either a string of the name of a module to add without any
-        * additional configuration parameters, or an object with members keyed 
with
-        * module names and valued with configuration objects
-        */
-       addModule: function( context, data ) {
-               // A safe way of calling an API function on a module
-               function callModuleApi( module, call, data ) {
-                       if (
-                               module in $.wikiEditor.modules &&
-                               'fn' in $.wikiEditor.modules[module] &&
-                               call in $.wikiEditor.modules[module].fn
-                       ) {
-                               $.wikiEditor.modules[module].fn[call]( context, 
data );
+if ( typeof context == 'undefined' ) {
+       /* Construction */
+       var instance = $.wikiEditor.instances.length;
+       context = { '$textarea': $(this), 'modules': {}, 'data': {}, 
'instance': instance };
+       $.wikiEditor.instances[instance] = $(this);
+       
+       // Encapsulate the textarea with some containers for layout
+       $(this)
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui' ).attr( 
'id', 'wikiEditor-ui' ) )
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-bottom' 
).attr( 'id', 'wikiEditor-ui-bottom' ) )
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-text' 
).attr( 'id', 'wikiEditor-ui-text' ) );
+       
+       // Get a reference to the outer container
+       context.$ui = $(this).parent().parent().parent();
+       context.$ui.after( $( '<div style="clear:both;"></div>' ) );
+       // Attach a container in the top
+       context.$ui.prepend( $( '<div></div>' ).addClass( 'wikiEditor-ui-top' 
).attr( 'id', 'wikiEditor-ui-top' ) );
+       
+       // Create a set of standard methods for internal and external use
+       context.api = {
+               /**
+                * Accepts either a string of the name of a module to add 
without any
+                * additional configuration parameters, or an object with 
members keyed with
+                * module names and valued with configuration objects
+                */
+               addModule: function( context, data ) {
+                       // A safe way of calling an API function on a module
+                       function callModuleApi( module, call, data ) {
+                               if (
+                                       module in $.wikiEditor.modules &&
+                                       'fn' in $.wikiEditor.modules[module] &&
+                                       call in $.wikiEditor.modules[module].fn
+                               ) {
+                                       $.wikiEditor.modules[module].fn[call]( 
context, data );
+                               }
                        }
-               }
-               if ( typeof data == 'string' ) {
-                       callModuleApi( data, 'create', {} );
-               } else if ( typeof data == 'object' ) {
-                       for ( module in data ) {
-                               if ( typeof module == 'string' ) {
-                                       callModuleApi( module, 'create', 
data[module] );
+                       if ( typeof data == 'string' ) {
+                               callModuleApi( data, 'create', {} );
+                       } else if ( typeof data == 'object' ) {
+                               for ( module in data ) {
+                                       if ( typeof module == 'string' ) {
+                                               callModuleApi( module, 
'create', data[module] );
+                                       }
                                }
                        }
                }
-       }
-};
-// Allow modules to extend the API
-for ( module in $.wikiEditor.modules ) {
-       if ( 'api' in $.wikiEditor.modules[module] ) {
-               for ( call in $.wikiEditor.modules[module].api ) {
-                       // Modules may not overwrite existing API functions - 
first come,
-                       // first serve
-                       if ( !( call in context.api ) ) {
-                               context.api[call] = 
$.wikiEditor.modules[module].api[call];
+       };
+       // Allow modules to extend the API
+       for ( module in $.wikiEditor.modules ) {
+               if ( 'api' in $.wikiEditor.modules[module] ) {
+                       for ( call in $.wikiEditor.modules[module].api ) {
+                               // Modules may not overwrite existing API 
functions - first come,
+                               // first serve
+                               if ( !( call in context.api ) ) {
+                                       context.api[call] = 
$.wikiEditor.modules[module].api[call];
+                               }
                        }
                }
        }
+       //Each browser seems to do this differently, so let's keep our editor
+       //consistent by always starting at the begining
+       context.$textarea.scrollToCaretPosition( 0 );
 }
+
 // If there was a configuration passed, it's assumed to be for the addModule
-// API call, so we can just send it on it's way right now
+// API call
 if ( arguments.length > 0 && typeof arguments[0] == 'object' ) {
        context.api.addModule( context, arguments[0] );
+} else {
+       // Since javascript gives arguments as an object, we need to convert 
them
+       // so they can be used more easily
+       arguments = $.makeArray( arguments );
+       if ( arguments.length > 0 ) {
+               // Handle API calls
+               var call = arguments.shift();
+               if ( call in context.api ) {
+                       context.api[call]( context, arguments[0] == undefined ? 
{} : arguments[0] );
+               }
+       }
 }
-//Each browser seems to do this differently, so let's keep our editor
-//consistent by always starting at the begining
-context.$textarea.scrollToCaretPosition( 0 );
+
 // Store the context for next time, and support chaining
 return $(this).data( 'wikiEditor-context', context );
 

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js
     2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js
     2009-09-16 17:47:04 UTC (rev 56421)
@@ -45,7 +45,7 @@
                context.$textarea
                        .bind( 'keyup encapsulateSelection',
                                function( event ) {
-                                       var context = $(this).data( 'context' );
+                                       var context = $(this).data( 
'wikiEditor-context' );
                                        $(this).eachAsync( {
                                                bulk: 0,
                                                loop: function() {
@@ -55,9 +55,9 @@
                                        } );
                                }
                        )
-                       .bind( 'mouseup scrollToPosition',
+                       .bind( 'mouseup scrollToPosition focus',
                                function( event ) {
-                                       var context = $(this).data( 'context' );
+                                       var context = $(this).data( 
'wikiEditor-context' );
                                        $(this).eachAsync( {
                                                bulk: 0,
                                                loop: function() {
@@ -65,15 +65,23 @@
                                                }
                                        } );
                                }
-                       );
+                       )
+                       .blur( function() {
+                               var context = $(this).data( 
'wikiEditor-context' );
+                               $.wikiEditor.modules.toc.fn.unhighlight( 
context );
+                       });
        },
+ 
+       unhighlight: function( context ) {
+               context.modules.$toc.find( 'a' ).removeClass( 
'currentSelection' );
+       },
        /**
         * Highlight the section the cursor is currently within
         * 
         * @param {Object} context
         */
        update: function( context ) {
-               context.modules.$toc.find( 'a' ).removeClass( 
'currentSelection' );
+               $.wikiEditor.modules.toc.fn.unhighlight( context );
                var position = context.$textarea.getCaretPosition();
                var section = 0;
                if ( context.data.outline.length > 0 ) {
@@ -220,4 +228,4 @@
        }
 }
 
-}; } ) ( jQuery );
\ No newline at end of file
+}; } ) ( jQuery );


Property changes on: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js
___________________________________________________________________
Added: svn:mergeinfo
   + 
/branches/REL1_15/phase3/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:51646
/trunk/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:56195,56207,56209,56296,56333,56355,56417
/trunk/phase3/extensions/UsabilityInitiative/js/plugins/jquery.wikiEditor.toc.js:56213,56215-56216,56218,56325,56334-56336,56338,56340,56343,56345,56347,56350

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.js
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.js
  2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.js
  2009-09-16 17:47:04 UTC (rev 56421)
@@ -1000,13 +1000,76 @@
 // gets called again we can pick up where we left off
 var context = $(this).data( 'wikiEditor-context' );
 
-/* API */
 
-// The first time this is called, we expect context to be undefined, meaning
-// the editing UI has not yet been, and still needs to be, built. However, each
-// additional call after that is expected to be an API call, which contains a
-// string as the first argument which corresponds to a supported API call
-if ( typeof context !== 'undefined' ) {
+if ( typeof context == 'undefined' ) {
+       /* Construction */
+       var instance = $.wikiEditor.instances.length;
+       context = { '$textarea': $(this), 'modules': {}, 'data': {}, 
'instance': instance };
+       $.wikiEditor.instances[instance] = $(this);
+       
+       // Encapsulate the textarea with some containers for layout
+       $(this)
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui' ).attr( 
'id', 'wikiEditor-ui' ) )
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-bottom' 
).attr( 'id', 'wikiEditor-ui-bottom' ) )
+               .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-text' 
).attr( 'id', 'wikiEditor-ui-text' ) );
+       
+       // Get a reference to the outer container
+       context.$ui = $(this).parent().parent().parent();
+       context.$ui.after( $( '<div style="clear:both;"></div>' ) );
+       // Attach a container in the top
+       context.$ui.prepend( $( '<div></div>' ).addClass( 'wikiEditor-ui-top' 
).attr( 'id', 'wikiEditor-ui-top' ) );
+       
+       // Create a set of standard methods for internal and external use
+       context.api = {
+               /**
+                * Accepts either a string of the name of a module to add 
without any
+                * additional configuration parameters, or an object with 
members keyed with
+                * module names and valued with configuration objects
+                */
+               addModule: function( context, data ) {
+                       // A safe way of calling an API function on a module
+                       function callModuleApi( module, call, data ) {
+                               if (
+                                       module in $.wikiEditor.modules &&
+                                       'fn' in $.wikiEditor.modules[module] &&
+                                       call in $.wikiEditor.modules[module].fn
+                               ) {
+                                       $.wikiEditor.modules[module].fn[call]( 
context, data );
+                               }
+                       }
+                       if ( typeof data == 'string' ) {
+                               callModuleApi( data, 'create', {} );
+                       } else if ( typeof data == 'object' ) {
+                               for ( module in data ) {
+                                       if ( typeof module == 'string' ) {
+                                               callModuleApi( module, 
'create', data[module] );
+                                       }
+                               }
+                       }
+               }
+       };
+       // Allow modules to extend the API
+       for ( module in $.wikiEditor.modules ) {
+               if ( 'api' in $.wikiEditor.modules[module] ) {
+                       for ( call in $.wikiEditor.modules[module].api ) {
+                               // Modules may not overwrite existing API 
functions - first come,
+                               // first serve
+                               if ( !( call in context.api ) ) {
+                                       context.api[call] = 
$.wikiEditor.modules[module].api[call];
+                               }
+                       }
+               }
+       }
+       //Each browser seems to do this differently, so let's keep our editor
+       //consistent by always starting at the begining
+       context.$textarea.scrollToCaretPosition( 0 );
+}
+
+// If there was a configuration passed, it's assumed to be for the addModule
+// API call
+if ( arguments.length > 0 && typeof arguments[0] == 'object' ) {
+       context.api.addModule( context, arguments[0] );
+} else {
        // Since javascript gives arguments as an object, we need to convert 
them
        // so they can be used more easily
        arguments = $.makeArray( arguments );
@@ -1016,80 +1079,9 @@
                if ( call in context.api ) {
                        context.api[call]( context, arguments[0] == undefined ? 
{} : arguments[0] );
                }
-               // Store the context for next time and return
-               return $(this).data( 'context', context );
        }
-       // Nothing to do, just return
-       return $(this);
 }
 
-/* Construction */
-
-var instance = $.wikiEditor.instances.length;
-context = { '$textarea': $(this), 'modules': {}, 'data': {}, 'instance': 
instance };
-$.wikiEditor.instances[instance] = $(this);
-
-// Encapsulate the textarea with some containers for layout
-$(this)
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui' ).attr( 'id', 
'wikiEditor-ui' ) )
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-bottom' ).attr( 
'id', 'wikiEditor-ui-bottom' ) )
-       .wrap( $( '<div></div>' ).addClass( 'wikiEditor-ui-text' ).attr( 'id', 
'wikiEditor-ui-text' ) );
-
-// Get a reference to the outer container
-context.$ui = $(this).parent().parent().parent();
-context.$ui.after( $( '<div style="clear:both;"></div>' ) );
-// Attach a container in the top
-context.$ui.prepend( $( '<div></div>' ).addClass( 'wikiEditor-ui-top' ).attr( 
'id', 'wikiEditor-ui-top' ) );
-
-// Create a set of standard methods for internal and external use
-context.api = {
-       /**
-        * Accepts either a string of the name of a module to add without any
-        * additional configuration parameters, or an object with members keyed 
with
-        * module names and valued with configuration objects
-        */
-       addModule: function( context, data ) {
-               // A safe way of calling an API function on a module
-               function callModuleApi( module, call, data ) {
-                       if (
-                               module in $.wikiEditor.modules &&
-                               'fn' in $.wikiEditor.modules[module] &&
-                               call in $.wikiEditor.modules[module].fn
-                       ) {
-                               $.wikiEditor.modules[module].fn[call]( context, 
data );
-                       }
-               }
-               if ( typeof data == 'string' ) {
-                       callModuleApi( data, 'create', {} );
-               } else if ( typeof data == 'object' ) {
-                       for ( module in data ) {
-                               if ( typeof module == 'string' ) {
-                                       callModuleApi( module, 'create', 
data[module] );
-                               }
-                       }
-               }
-       }
-};
-// Allow modules to extend the API
-for ( module in $.wikiEditor.modules ) {
-       if ( 'api' in $.wikiEditor.modules[module] ) {
-               for ( call in $.wikiEditor.modules[module].api ) {
-                       // Modules may not overwrite existing API functions - 
first come,
-                       // first serve
-                       if ( !( call in context.api ) ) {
-                               context.api[call] = 
$.wikiEditor.modules[module].api[call];
-                       }
-               }
-       }
-}
-// If there was a configuration passed, it's assumed to be for the addModule
-// API call, so we can just send it on it's way right now
-if ( arguments.length > 0 && typeof arguments[0] == 'object' ) {
-       context.api.addModule( context, arguments[0] );
-}
-//Each browser seems to do this differently, so let's keep our editor
-//consistent by always starting at the begining
-context.$textarea.scrollToCaretPosition( 0 );
 // Store the context for next time, and support chaining
 return $(this).data( 'wikiEditor-context', context );
 
@@ -1782,7 +1774,7 @@
                context.$textarea
                        .bind( 'keyup encapsulateSelection',
                                function( event ) {
-                                       var context = $(this).data( 'context' );
+                                       var context = $(this).data( 
'wikiEditor-context' );
                                        $(this).eachAsync( {
                                                bulk: 0,
                                                loop: function() {
@@ -1792,9 +1784,9 @@
                                        } );
                                }
                        )
-                       .bind( 'mouseup scrollToPosition',
+                       .bind( 'mouseup scrollToPosition focus',
                                function( event ) {
-                                       var context = $(this).data( 'context' );
+                                       var context = $(this).data( 
'wikiEditor-context' );
                                        $(this).eachAsync( {
                                                bulk: 0,
                                                loop: function() {
@@ -1802,15 +1794,23 @@
                                                }
                                        } );
                                }
-                       );
+                       )
+                       .blur( function() {
+                               var context = $(this).data( 
'wikiEditor-context' );
+                               $.wikiEditor.modules.toc.fn.unhighlight( 
context );
+                       });
        },
+ 
+       unhighlight: function( context ) {
+               context.modules.$toc.find( 'a' ).removeClass( 
'currentSelection' );
+       },
        /**
         * Highlight the section the cursor is currently within
         * 
         * @param {Object} context
         */
        update: function( context ) {
-               context.modules.$toc.find( 'a' ).removeClass( 
'currentSelection' );
+               $.wikiEditor.modules.toc.fn.unhighlight( context );
                var position = context.$textarea.getCaretPosition();
                var section = 0;
                if ( context.data.outline.length > 0 ) {
@@ -1957,4 +1957,4 @@
        }
 }
 
-}; } ) ( jQuery );
\ No newline at end of file
+}; } ) ( jQuery );

Modified: 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.min.js
===================================================================
--- 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.min.js
      2009-09-16 17:17:16 UTC (rev 56420)
+++ 
branches/wmf-deployment-work/extensions/UsabilityInitiative/js/plugins.combined.min.js
      2009-09-16 17:47:04 UTC (rev 56421)
@@ -68,13 +68,11 @@
 return 
this.each(function(){$(this).focus();if(this.selectionStart||this.selectionStart=='0'){this.selectionStart=pos;this.selectionEnd=pos;$(this).scrollTop(getCaretScrollPosition(this));}else
 if(document.selection&&document.selection.createRange){var 
range=document.selection.createRange();var 
oldPos=$(this).getCaretPosition();var 
goBack=false;if(oldPos==pos){pos++;goBack=true;}
 
range.moveToElementText(this);range.collapse();range.move('character',pos);range.select();this.scrollTop+=range.offsetTop;if(goBack){range.move('character',-1);range.select();}}
 
$(this).trigger('scrollToPosition');});}});})(jQuery);(function($){$.wikiEditor={'modules':{},'instances':[],'supportedBrowsers':{'ltr':{'msie':7,'firefox':2,'opera':9,'safari':3,'chrome':1,'camino':1},'rtl':{'msie':8,'firefox':2,'opera':9,'safari':3,'chrome':1,'camino':1}},imgPath:wgScriptPath+'/extensions/UsabilityInitiative/images/wikiEditor/'};$.wikiEditor.isSupportKnown=function(){return(function(supportedBrowsers){return
 $.browser.name in 
supportedBrowsers;})($.wikiEditor.supportedBrowsers[$('body.rtl').size()?'rtl':'ltr']);};$.wikiEditor.isSupported=function(){return(function(supportedBrowsers){return
 $.browser.name in 
supportedBrowsers&&$.browser.versionNumber>=supportedBrowsers[$.browser.name];})($.wikiEditor.supportedBrowsers[$('body.rtl').size()?'rtl':'ltr']);};$.wikiEditor.autoMsg=function(object,property){if(typeof
 property=='object'){for(i in property){if(property[i]in 
object||property[i]+'Msg'in object){property=property[i];break;}}}
-if(property in object){return object[property];}else if(property+'Msg'in 
object){return 
gM(object[property+'Msg']);}else{return'';}};$.fn.wikiEditor=function(){var 
context=$(this).data('wikiEditor-context');if(typeof 
context!=='undefined'){arguments=$.makeArray(arguments);if(arguments.length>0){var
 call=arguments.shift();if(call in 
context.api){context.api[call](context,arguments[0]==undefined?{}:arguments[0]);}
-return $(this).data('context',context);}
-return $(this);}
-var 
instance=$.wikiEditor.instances.length;context={'$textarea':$(this),'modules':{},'data':{},'instance':instance};$.wikiEditor.instances[instance]=$(this);$(this).wrap($('<div></div>').addClass('wikiEditor-ui').attr('id','wikiEditor-ui')).wrap($('<div></div>').addClass('wikiEditor-ui-bottom').attr('id','wikiEditor-ui-bottom')).wrap($('<div></div>').addClass('wikiEditor-ui-text').attr('id','wikiEditor-ui-text'));context.$ui=$(this).parent().parent().parent();context.$ui.after($('<div
 
style="clear:both;"></div>'));context.$ui.prepend($('<div></div>').addClass('wikiEditor-ui-top').attr('id','wikiEditor-ui-top'));context.api={addModule:function(context,data){function
 callModuleApi(module,call,data){if(module in $.wikiEditor.modules&&'fn'in 
$.wikiEditor.modules[module]&&call in 
$.wikiEditor.modules[module].fn){$.wikiEditor.modules[module].fn[call](context,data);}}
+if(property in object){return object[property];}else if(property+'Msg'in 
object){return 
gM(object[property+'Msg']);}else{return'';}};$.fn.wikiEditor=function(){var 
context=$(this).data('wikiEditor-context');if(typeof context=='undefined'){var 
instance=$.wikiEditor.instances.length;context={'$textarea':$(this),'modules':{},'data':{},'instance':instance};$.wikiEditor.instances[instance]=$(this);$(this).wrap($('<div></div>').addClass('wikiEditor-ui').attr('id','wikiEditor-ui')).wrap($('<div></div>').addClass('wikiEditor-ui-bottom').attr('id','wikiEditor-ui-bottom')).wrap($('<div></div>').addClass('wikiEditor-ui-text').attr('id','wikiEditor-ui-text'));context.$ui=$(this).parent().parent().parent();context.$ui.after($('<div
 
style="clear:both;"></div>'));context.$ui.prepend($('<div></div>').addClass('wikiEditor-ui-top').attr('id','wikiEditor-ui-top'));context.api={addModule:function(context,data){function
 callModuleApi(module,call,data){if(module in $.wikiEditor.modules&&'fn'in 
$.wikiEditor.modules[module]&&call in 
$.wikiEditor.modules[module].fn){$.wikiEditor.modules[module].fn[call](context,data);}}
 if(typeof data=='string'){callModuleApi(data,'create',{});}else if(typeof 
data=='object'){for(module in data){if(typeof 
module=='string'){callModuleApi(module,'create',data[module]);}}}}};for(module 
in $.wikiEditor.modules){if('api'in $.wikiEditor.modules[module]){for(call in 
$.wikiEditor.modules[module].api){if(!(call in 
context.api)){context.api[call]=$.wikiEditor.modules[module].api[call];}}}}
-if(arguments.length>0&&typeof 
arguments[0]=='object'){context.api.addModule(context,arguments[0]);}
-context.$textarea.scrollToCaretPosition(0);return 
$(this).data('wikiEditor-context',context);};})(jQuery);RegExp.escape=function(s){return
 
s.replace(/([.*+?^${}()|\/\\[\]])/g,'\\$1');};(function($){$.wikiEditor.modules.dialogs={api:{addDialog:function(context,data){$.wikiEditor.modules.dialogs.fn.create(context,{'modules':data})},openDialog:function(context,data){if(data.dialog
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('open');}},closeDialog:function(context,data){if(data.dialog
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('close');}}},fn:{create:function(context,config){for(module
 in config){$.wikiEditor.modules.dialogs.modules[module]=config[module];}
+context.$textarea.scrollToCaretPosition(0);}
+if(arguments.length>0&&typeof 
arguments[0]=='object'){context.api.addModule(context,arguments[0]);}else{arguments=$.makeArray(arguments);if(arguments.length>0){var
 call=arguments.shift();if(call in 
context.api){context.api[call](context,arguments[0]==undefined?{}:arguments[0]);}}}
+return 
$(this).data('wikiEditor-context',context);};})(jQuery);RegExp.escape=function(s){return
 
s.replace(/([.*+?^${}()|\/\\[\]])/g,'\\$1');};(function($){$.wikiEditor.modules.dialogs={api:{addDialog:function(context,data){$.wikiEditor.modules.dialogs.fn.create(context,{'modules':data})},openDialog:function(context,data){if(data.dialog
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('open');}},closeDialog:function(context,data){if(data.dialog
 in 
$.wikiEditor.modules.dialogs.modules){$('#'+$.wikiEditor.modules.dialogs.modules[data.dialog].id).dialog('close');}}},fn:{create:function(context,config){for(module
 in config){$.wikiEditor.modules.dialogs.modules[module]=config[module];}
 for(module in $.wikiEditor.modules.dialogs.modules){var 
module=$.wikiEditor.modules.dialogs.modules[module];if($('#'+module.id).size()==0){var
 
configuration=module.dialog;configuration.bgiframe=true;configuration.autoOpen=false;configuration.modal=true;configuration.title=$.wikiEditor.autoMsg(module,'title');for(msg
 in 
configuration.buttons){configuration.buttons[gM(msg)]=configuration.buttons[msg];delete
 configuration.buttons[msg];}
 $('<div /> 
').attr('id',module.id).html(module.html).data('context',context).appendTo($('body')).each(module.init).dialog(configuration);}}}},'modules':{}};})(jQuery);(function($){$.wikiEditor.modules.toolbar={api:{addToToolbar:function(context,data){for(type
 in data){switch(type){case'sections':var 
$sections=context.modules.$toolbar.find('div.sections');var 
$tabs=context.modules.$toolbar.find('div.tabs');for(section in 
data[type]){if(section=='main'){context.modules.$toolbar.prepend($.wikiEditor.modules.toolbar.fn.buildSection(context,section,data[type][section]));continue;}
 
$sections.append($.wikiEditor.modules.toolbar.fn.buildSection(context,section,data[type][section]));$tabs.append($.wikiEditor.modules.toolbar.fn.buildTab(context,section,data[type][section]));}
@@ -123,7 +121,7 @@
 return 
$section;},updateBookletSelection:function(context,id,$pages,$index){var 
cookie='wikiEditor-'+context.instance+'-booklet-'+id+'-page';var 
selected=$.cookie(cookie);var 
$selectedIndex=$index.find('*[rel='+selected+']');if($selectedIndex.size()==0){selected=$index.children().eq(0).attr('rel');$.cookie(cookie,selected);}
 
$pages.children().hide();$pages.find('*[rel='+selected+']').show();$index.children().removeClass('current');$selectedIndex.addClass('current');},build:function(context,config){var
 $tabs=$('<div />').addClass('tabs').appendTo(context.modules.$toolbar);var 
$sections=$('<div 
/>').addClass('sections').appendTo(context.modules.$toolbar);context.modules.$toolbar.append($('<div
 />').css('clear','both'));var sectionQueue=[];for(section in 
config){if(section=='main'){context.modules.$toolbar.prepend($.wikiEditor.modules.toolbar.fn.buildSection(context,section,config[section]));}else{sectionQueue.push({'$sections':$sections,'context':context,'id':section,'config':config[section]});$tabs.append($.wikiEditor.modules.toolbar.fn.buildTab(context,section,config[section]));}}
 
$.eachAsync(sectionQueue,{'bulk':0,'end':function(){$('body').css('position','static');$('body').css('position','relative');},'loop':function(i,s){s.$sections.append($.wikiEditor.modules.toolbar.fn.buildSection(s.context,s.id,s.config));}});}}};})(jQuery);(function($){$.wikiEditor.modules.toc={api:{},fn:{create:function(context,config){if('$toc'in
 context.modules){return;}
-context.modules.$toc=$('<div></div>').addClass('wikiEditor-ui-toc').attr('id','wikiEditor-ui-toc');$.wikiEditor.modules.toc.fn.build(context,config);context.$ui.find('.wikiEditor-ui-bottom').append(context.modules.$toc);context.modules.$toc.height(context.$ui.find('.wikiEditor-ui-bottom').height());context.modules.$toc.css('width','12em').css('marginTop',-(context.$ui.find('.wikiEditor-ui-bottom').height()));context.$ui.find('.wikiEditor-ui-text').css(($('body.rtl').size()?'marginLeft':'marginRight'),'12em');$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);context.$textarea.bind('keyup
 encapsulateSelection',function(event){var 
context=$(this).data('context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);}});}).bind('mouseup
 scrollToPosition',function(event){var 
context=$(this).data('context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.update(context);}});});},update:function(context){context.modules.$toc.find('a').removeClass('currentSelection');var
 position=context.$textarea.getCaretPosition();var 
section=0;if(context.data.outline.length>0){if(!(position<context.data.outline[0].position-1)){while(section<context.data.outline.length&&context.data.outline[section].position-1<position){section++;}
+context.modules.$toc=$('<div></div>').addClass('wikiEditor-ui-toc').attr('id','wikiEditor-ui-toc');$.wikiEditor.modules.toc.fn.build(context,config);context.$ui.find('.wikiEditor-ui-bottom').append(context.modules.$toc);context.modules.$toc.height(context.$ui.find('.wikiEditor-ui-bottom').height());context.modules.$toc.css('width','12em').css('marginTop',-(context.$ui.find('.wikiEditor-ui-bottom').height()));context.$ui.find('.wikiEditor-ui-text').css(($('body.rtl').size()?'marginLeft':'marginRight'),'12em');$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);context.$textarea.bind('keyup
 encapsulateSelection',function(event){var 
context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.build(context);$.wikiEditor.modules.toc.fn.update(context);}});}).bind('mouseup
 scrollToPosition focus',function(event){var 
context=$(this).data('wikiEditor-context');$(this).eachAsync({bulk:0,loop:function(){$.wikiEditor.modules.toc.fn.update(context);}});}).blur(function(){var
 
context=$(this).data('wikiEditor-context');$.wikiEditor.modules.toc.fn.unhighlight(context);});},unhighlight:function(context){context.modules.$toc.find('a').removeClass('currentSelection');},update:function(context){$.wikiEditor.modules.toc.fn.unhighlight(context);var
 position=context.$textarea.getCaretPosition();var 
section=0;if(context.data.outline.length>0){if(!(position<context.data.outline[0].position-1)){while(section<context.data.outline.length&&context.data.outline[section].position-1<position){section++;}
 section=Math.max(0,section);}
 
context.modules.$toc.find('a.section-'+section).addClass('currentSelection');}},build:function(context){function
 
buildStructure(outline,offset,level){if(offset==undefined)offset=0;if(level==undefined)level=1;var
 sections=[];for(var 
i=offset;i<outline.length;i++){if(outline[i].nLevel==level){var 
sub=buildStructure(outline,i+1,level+1);if(sub.length){outline[i].sections=sub;}
 sections[sections.length]=outline[i];}else if(outline[i].nLevel<level){break;}}



_______________________________________________
MediaWiki-CVS mailing list
MediaWiki-CVS@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to