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