Revision: 51658
Author:   catrope
Date:     2009-06-09 19:10:48 +0000 (Tue, 09 Jun 2009)

Log Message:
-----------
UsabilityInitiative: Add EditWarning extension that warns users when they try 
to navigate away from the edit form without saving their changes

Modified Paths:
--------------
    trunk/extensions/UsabilityInitiative/UsabilityInitiative.php

Added Paths:
-----------
    trunk/extensions/UsabilityInitiative/EditWarning/
    trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.hooks.php
    trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.i18n.php
    trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.js
    trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.php

Added: trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.hooks.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.hooks.php      
                        (rev 0)
+++ trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.hooks.php      
2009-06-09 19:10:48 UTC (rev 51658)
@@ -0,0 +1,38 @@
+<?php
+/**
+ * Hooks for Usability Initiative EditWarning extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+class EditWarningHooks {
+       /**
+        * AjaxAddScript hook
+        * Add ajax support script
+        */
+       public static function addJS( $out ) {
+               global $wgScriptPath, $wgJsMimeType, $wgEditWarningStyleVersion;
+               // Add javascript resources to document
+               $out->addScript(
+                       Xml::element(
+                               'script',
+                               array(
+                                       'type' => $wgJsMimeType,
+                                       'src' => $wgScriptPath .
+                                               
'/extensions/UsabilityInitiative/EditWarning/EditWarning.js?' .
+                                               $wgEditWarningStyleVersion
+                               ),
+                               '',
+                               false
+                       )
+               );
+               wfLoadExtensionMessages( 'EditWarning' );
+               $key = Xml::escapeJsString( 'editwarning-warning' );
+               $value = Xml::escapeJsString( wfMsg( 'editwarning-warning' ) );
+               $messagesList = "'$key': '$value'";
+               $out->addInlineScript("loadGM({{$messagesList}});");
+               // Continue
+               return true;
+       }
+}


Property changes on: 
trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.hooks.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.i18n.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.i18n.php       
                        (rev 0)
+++ trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.i18n.php       
2009-06-09 19:10:48 UTC (rev 51658)
@@ -0,0 +1,18 @@
+<?php
+/**
+ * Internationalisation for Usability Initiative EditWarning extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/** English
+ * @author Roan Kattouw
+ */
+$messages['en'] = array(
+       'editwarning' => 'Edit warning',
+       'editwarning-desc' => 'Show a warning when a user tries to leave the 
edit form without saving',
+       'editwarning-warning' => 'You have unsaved changes. Click OK to leave 
this page and destroy your changes, or Cancel to stay here and keep them.',
+);


Property changes on: 
trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.i18n.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.js
===================================================================
--- trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.js             
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.js     
2009-06-09 19:10:48 UTC (rev 51658)
@@ -0,0 +1,57 @@
+/* JavaScript for EditToolbar extension */
+
+/**
+ * This is designed to be directly compatible with (and is essentially taken
+ * directly from) the mv_embed code for bringing internationalized messages 
into
+ * the JavaScript space. As such, if we get to the point of merging that stuff
+ * into the main branch this code will be uneeded and probably cause issues.
+ */
+// Creates global message object if not already in existence
+if ( !gMsg ) var gMsg = {};
+/**
+ * Caches a list of messages for later retrieval
+ * @param {Object} msgSet Hash of key:value pairs of messages to cache
+ */
+function loadGM( msgSet ){
+       for ( var i in msgSet ){
+               gMsg[ i ] = msgSet[i];
+       }
+}
+/**
+ * Retieves a message from the global message cache, performing on-the-fly
+ * replacements using MediaWiki message syntax ($1, $2, etc.)
+ * @param {String} key Name of message as it is in MediaWiki
+ * @param {Array} args Array of replacement arguments
+ */
+function gM( key, args ) {
+       var ms = '';    
+       if ( key in gMsg ) {
+               ms = gMsg[ key ];
+               if ( typeof args == 'object' || typeof args == 'array' ) {
+                       for ( var v in args ){
+                               var rep = '\$'+ ( parseInt(v) + 1 );
+                               ms = ms.replace( rep, args[v]);
+                       }
+               } else if ( typeof args =='string' || typeof args =='number' ) {
+                       ms = ms.replace( /\$1/, args );
+               }
+               return ms;
+       } else {
+               return '[' + key + ']';
+       }
+}
+
+function editWarningSetWarning() {
+       $(window).bind('beforeunload', function(event) {
+               if(!confirm(gM('editwarning-warning')))
+                       event.preventDefault();
+               event.stopImmediatePropagation();
+       });
+}
+
+$(document).ready(function() {
+       $('#wpTextbox1').change(editWarningSetWarning)
+               .bind('paste', editWarningSetWarning);
+       $('#wpSummary').change(editWarningSetWarning)
+               .bind('paste', editWarningSetWarning);
+});


Property changes on: 
trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.js
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.php
===================================================================
--- trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.php            
                (rev 0)
+++ trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.php    
2009-06-09 19:10:48 UTC (rev 51658)
@@ -0,0 +1,41 @@
+<?php
+/**
+ * Usability Initiative EditWarning extension
+ *
+ * @file
+ * @ingroup Extensions
+ *
+ * This file contains the include file for the EditWarning portion of the
+ * UsabilityInitiative extension of MediaWiki.
+ *
+ * Usage: This file is included automatically by ../UsabilityInitiative.php
+ *
+ * @author Roan Kattouw <roan.katt...@gmail.com>
+ * @license GPL v2 or later
+ * @version 0.1.1
+ */
+
+// Shortcut to this extension directory
+$dir = dirname( __FILE__ ) . '/';
+
+// Credits
+$wgExtensionCredits['other'][] = array(
+       'path' => __FILE__,
+       'name' => 'EditWarning',
+       'author' => 'Roan Kattouw',
+       'version' => '0.1.1',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:UsabilityInitiative',
+       'descriptionmsg' => 'editwarning-desc',
+);
+
+// Bump the version number every time you change any of the .css/.js files
+$wgEditWarningStyleVersion = 0;
+
+// Autoload Classes
+$wgAutoloadClasses['EditWarningHooks'] = $dir . 'EditWarning.hooks.php';
+
+// Internationalization
+$wgExtensionMessagesFiles['EditWarning'] = $dir . 'EditWarning.i18n.php';
+
+// Register ajax add script hook
+$wgHooks['AjaxAddScript'][] = 'EditWarningHooks::addJS';


Property changes on: 
trunk/extensions/UsabilityInitiative/EditWarning/EditWarning.php
___________________________________________________________________
Added: svn:eol-style
   + native

Modified: trunk/extensions/UsabilityInitiative/UsabilityInitiative.php
===================================================================
--- trunk/extensions/UsabilityInitiative/UsabilityInitiative.php        
2009-06-09 18:27:59 UTC (rev 51657)
+++ trunk/extensions/UsabilityInitiative/UsabilityInitiative.php        
2009-06-09 19:10:48 UTC (rev 51658)
@@ -28,16 +28,14 @@
        'descriptionmsg' => 'usabilityinitiative-desc',
 );
 
-// Shortcut to this extension directory
-$dir = dirname( __FILE__ );
-
 // Autoload Classes
-$wgAutoloadClasses['UsabilityInitiativeHooks'] = 
"$dir/UsabilityInitiative.hooks.php";
-$wgExtensionMessagesFiles['UsabilityInitiative'] = 
"$dir/UsabilityInitiative.i18n.php";
+$wgAutoloadClasses['UsabilityInitiativeHooks'] = dirname(__FILE__) . 
"/UsabilityInitiative.hooks.php";
+$wgExtensionMessagesFiles['UsabilityInitiative'] = dirname(__FILE__) . 
"/UsabilityInitiative.i18n.php";
 
 // Register ajax add script hook
 $wgHooks['AjaxAddScript'][] = 'UsabilityInitiativeHooks::addJS';
 
 /* Components */
 
-require_once( "$dir/EditToolbar/EditToolbar.php" );
+require_once( dirname(__FILE__) . "/EditToolbar/EditToolbar.php" );
+require_once( dirname(__FILE__) . "/EditWarning/EditWarning.php" );



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

Reply via email to