r85151 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r85150‎ | r85151 | r85152 >
Date:20:39, 1 April 2011
Author:demon
Status:resolved (Comments)
Tags:
Comment:
Modified paths:
  • /branches/REL1_17/phase3/docs/hooks.txt (modified) (history)
  • /branches/REL1_17/phase3/includes/GlobalFunctions.php (modified) (history)
  • /branches/REL1_17/phase3/includes/ImageGallery.php (modified) (history)
  • /branches/REL1_17/phase3/includes/LocalisationCache.php (modified) (history)
  • /branches/REL1_17/phase3/includes/MagicWord.php (modified) (history)
  • /branches/REL1_17/phase3/includes/MessageCache.php (modified) (history)
  • /branches/REL1_17/phase3/includes/OutputPage.php (modified) (history)
  • /branches/REL1_17/phase3/includes/PrefixSearch.php (modified) (history)
  • /branches/REL1_17/phase3/includes/Title.php (modified) (history)
  • /branches/REL1_17/phase3/includes/WatchedItem.php (modified) (history)
  • /branches/REL1_17/phase3/includes/Xml.php (modified) (history)
  • /branches/REL1_17/phase3/includes/diff/DifferenceEngine.php (modified) (history)
  • /branches/REL1_17/phase3/includes/json/FormatJson.php (modified) (history)
  • /branches/REL1_17/phase3/includes/libs/CSSMin.php (modified) (history)
  • /branches/REL1_17/phase3/includes/media/SVG.php (modified) (history)
  • /branches/REL1_17/phase3/includes/resourceloader/ResourceLoaderFileModule.php (modified) (history)
  • /branches/REL1_17/phase3/includes/resourceloader/ResourceLoaderWikiModule.php (modified) (history)
  • /branches/REL1_17/phase3/includes/specials/SpecialListfiles.php (modified) (history)
  • /branches/REL1_17/phase3/languages/messages/MessagesEn.php (modified) (history)
  • /branches/REL1_17/phase3/languages/messages/MessagesPl.php (modified) (history)
  • /branches/REL1_17/phase3/languages/messages/MessagesQqq.php (modified) (history)
  • /branches/REL1_17/phase3/maintenance/findhooks.php (modified) (history)
  • /branches/REL1_17/phase3/maintenance/language/messageTypes.inc (modified) (history)
  • /branches/REL1_17/phase3/maintenance/language/messages.inc (modified) (history)
  • /branches/REL1_17/phase3/resources/Resources.php (modified) (history)
  • /branches/REL1_17/phase3/skins/common/mwsuggest.js (modified) (history)
  • /branches/REL1_17/phase3/skins/common/preview.js (modified) (history)
  • /branches/REL1_17/phase3/skins/common/shared.css (modified) (history)
  • /branches/REL1_17/phase3/skins/vector/screen.css (modified) (history)

Diff [purge]

Index: branches/REL1_17/phase3/maintenance/findhooks.php
@@ -63,14 +63,15 @@
6464 $IP . '/includes/installer/',
6565 $IP . '/includes/parser/',
6666 $IP . '/includes/resourceloader/',
 67+ $IP . '/includes/revisiondelete/',
6768 $IP . '/includes/search/',
6869 $IP . '/includes/specials/',
6970 $IP . '/includes/upload/',
7071 $IP . '/languages/',
7172 $IP . '/maintenance/',
72 - $IP . '/maintenance/tests/',
73 - $IP . '/maintenance/tests/parser/',
74 - $IP . '/maintenance/tests/phpunit/suites/',
 73+ $IP . '/tests/',
 74+ $IP . '/tests/parser/',
 75+ $IP . '/tests/phpunit/suites/',
7576 $IP . '/skins/',
7677 );
7778
Index: branches/REL1_17/phase3/maintenance/language/messages.inc
@@ -2698,6 +2698,7 @@
26992699 'exif-gpsareainformation',
27002700 'exif-gpsdatestamp',
27012701 'exif-gpsdifferential',
 2702+ 'exif-objectname',
27022703 ),
27032704 'exif-values' => array(
27042705 'exif-make-value',
Index: branches/REL1_17/phase3/maintenance/language/messageTypes.inc
@@ -601,4 +601,5 @@
602602 'exif-gpsdestdistance-n',
603603 'exif-gpsdirection-t',
604604 'exif-gpsdirection-m',
 605+ 'exif-objectname',
605606 );
Index: branches/REL1_17/phase3/skins/common/preview.js
@@ -1,127 +1,128 @@
22 /**
33 * Live preview script for MediaWiki
44 */
 5+(function( $ ) {
 6+ window.doLivePreview = function( e ) {
 7+ e.preventDefault();
58
6 -window.doLivePreview = function( e ) {
7 - e.preventDefault();
 9+ $( mw ).trigger( 'LivePreviewPrepare' );
810
9 - $( mw ).trigger( 'LivePreviewPrepare' );
 11+ var postData = $('#editform').formToArray();
 12+ postData.push( { 'name' : 'wpPreview', 'value' : '1' } );
1013
11 - var postData = $('#editform').formToArray();
12 - postData.push( { 'name' : 'wpPreview', 'value' : '1' } );
 14+ // Hide active diff, used templates, old preview if shown
 15+ var copyElements = ['#wikiPreview', '.templatesUsed', '.hiddencats',
 16+ '#catlinks'];
 17+ var copySelector = copyElements.join(',');
1318
14 - // Hide active diff, used templates, old preview if shown
15 - var copyElements = ['#wikiPreview', '.templatesUsed', '.hiddencats',
16 - '#catlinks'];
17 - var copySelector = copyElements.join(',');
 19+ $.each( copyElements, function(k,v) { $(v).fadeOut('fast'); } );
1820
19 - $.each( copyElements, function(k,v) { $(v).fadeOut('fast'); } );
 21+ // Display a loading graphic
 22+ var loadSpinner = $('<div class="mw-ajax-loader"/>');
 23+ $('#wikiPreview').before( loadSpinner );
2024
21 - // Display a loading graphic
22 - var loadSpinner = $('<div class="mw-ajax-loader"/>');
23 - $('#wikiPreview').before( loadSpinner );
 25+ var page = $('<div/>');
 26+ var target = $('#editform').attr('action');
2427
25 - var page = $('<div/>');
26 - var target = $('#editform').attr('action');
 28+ if ( !target ) {
 29+ target = window.location.href;
 30+ }
2731
28 - if ( !target ) {
29 - target = window.location.href;
30 - }
 32+ page.load( target + ' ' + copySelector, postData,
 33+ function() {
3134
32 - page.load( target + ' ' + copySelector, postData,
33 - function() {
 35+ for( var i=0; i<copyElements.length; ++i) {
 36+ // For all the specified elements, find the elements in the loaded page
 37+ // and the real page, empty the element in the real page, and fill it
 38+ // with the content of the loaded page
 39+ var copyContent = page.find( copyElements[i] ).contents();
 40+ $(copyElements[i]).empty().append( copyContent );
 41+ var newClasses = page.find( copyElements[i] ).attr('class');
 42+ $(copyElements[i]).attr( 'class', newClasses );
 43+ }
3444
35 - for( var i=0; i<copyElements.length; ++i) {
36 - // For all the specified elements, find the elements in the loaded page
37 - // and the real page, empty the element in the real page, and fill it
38 - // with the content of the loaded page
39 - var copyContent = page.find( copyElements[i] ).contents();
40 - $(copyElements[i]).empty().append( copyContent );
41 - var newClasses = page.find( copyElements[i] ).attr('class');
42 - $(copyElements[i]).attr( 'class', newClasses );
43 - }
 45+ $.each( copyElements, function(k,v) {
 46+ // Don't belligerently show elements that are supposed to be hidden
 47+ $(v).fadeIn( 'fast', function() { $(this).css('display', ''); } );
 48+ } );
4449
45 - $.each( copyElements, function(k,v) {
46 - // Don't belligerently show elements that are supposed to be hidden
47 - $(v).fadeIn( 'fast', function() { $(this).css('display', ''); } );
 50+ loadSpinner.remove();
 51+
 52+ $( mw ).trigger( 'LivePreviewDone', [copyElements] );
4853 } );
49 -
50 - loadSpinner.remove();
 54+ };
5155
52 - $( mw ).trigger( 'LivePreviewDone', [copyElements] );
53 - } );
54 -};
 56+ // Shamelessly stolen from the jQuery form plugin, which is licensed under the GPL.
 57+ // http://jquery.malsup.com/form/#download
 58+ $.fn.formToArray = function() {
 59+ var a = [];
 60+ if (this.length == 0) return a;
5561
56 -// Shamelessly stolen from the jQuery form plugin, which is licensed under the GPL.
57 -// http://jquery.malsup.com/form/#download
58 -$.fn.formToArray = function() {
59 - var a = [];
60 - if (this.length == 0) return a;
 62+ var form = this[0];
 63+ var els = form.elements;
 64+ if (!els) return a;
 65+ for(var i=0, max=els.length; i < max; i++) {
 66+ var el = els[i];
 67+ var n = el.name;
 68+ if (!n) continue;
6169
62 - var form = this[0];
63 - var els = form.elements;
64 - if (!els) return a;
65 - for(var i=0, max=els.length; i < max; i++) {
66 - var el = els[i];
67 - var n = el.name;
68 - if (!n) continue;
69 -
70 - var v = $.fieldValue(el, true);
71 - if (v && v.constructor == Array) {
72 - for(var j=0, jmax=v.length; j < jmax; j++)
73 - a.push({name: n, value: v[j]});
 70+ var v = $.fieldValue(el, true);
 71+ if (v && v.constructor == Array) {
 72+ for(var j=0, jmax=v.length; j < jmax; j++)
 73+ a.push({name: n, value: v[j]});
 74+ }
 75+ else if (v !== null && typeof v != 'undefined')
 76+ a.push({name: n, value: v});
7477 }
75 - else if (v !== null && typeof v != 'undefined')
76 - a.push({name: n, value: v});
77 - }
7878
79 - if (form.clk) {
80 - // input type=='image' are not found in elements array! handle it here
81 - var $input = $(form.clk), input = $input[0], n = input.name;
82 - if (n && !input.disabled && input.type == 'image') {
83 - a.push({name: n, value: $input.val()});
84 - a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
 79+ if (form.clk) {
 80+ // input type=='image' are not found in elements array! handle it here
 81+ var $input = $(form.clk), input = $input[0], n = input.name;
 82+ if (n && !input.disabled && input.type == 'image') {
 83+ a.push({name: n, value: $input.val()});
 84+ a.push({name: n+'.x', value: form.clk_x}, {name: n+'.y', value: form.clk_y});
 85+ }
8586 }
86 - }
87 - return a;
88 -};
 87+ return a;
 88+ };
8989
90 -/**
91 - * Returns the value of the field element.
92 - */
93 -$.fieldValue = function(el, successful) {
94 - var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
95 - if (typeof successful == 'undefined') successful = true;
 90+ /**
 91+ * Returns the value of the field element.
 92+ */
 93+ $.fieldValue = function(el, successful) {
 94+ var n = el.name, t = el.type, tag = el.tagName.toLowerCase();
 95+ if (typeof successful == 'undefined') successful = true;
9696
97 - if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
98 - (t == 'checkbox' || t == 'radio') && !el.checked ||
99 - (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
100 - tag == 'select' && el.selectedIndex == -1))
101 - return null;
 97+ if (successful && (!n || el.disabled || t == 'reset' || t == 'button' ||
 98+ (t == 'checkbox' || t == 'radio') && !el.checked ||
 99+ (t == 'submit' || t == 'image') && el.form && el.form.clk != el ||
 100+ tag == 'select' && el.selectedIndex == -1))
 101+ return null;
102102
103 - if (tag == 'select') {
104 - var index = el.selectedIndex;
105 - if (index < 0) return null;
106 - var a = [], ops = el.options;
107 - var one = (t == 'select-one');
108 - var max = (one ? index+1 : ops.length);
109 - for(var i=(one ? index : 0); i < max; i++) {
110 - var op = ops[i];
111 - if (op.selected) {
112 - var v = op.value;
113 - if (!v) // extra pain for IE...
114 - v = (op.attributes && op.attributes['value'] &&
115 - !(op.attributes['value'].specified))
116 - ? op.text : op.value;
117 - if (one) return v;
118 - a.push(v);
 103+ if (tag == 'select') {
 104+ var index = el.selectedIndex;
 105+ if (index < 0) return null;
 106+ var a = [], ops = el.options;
 107+ var one = (t == 'select-one');
 108+ var max = (one ? index+1 : ops.length);
 109+ for(var i=(one ? index : 0); i < max; i++) {
 110+ var op = ops[i];
 111+ if (op.selected) {
 112+ var v = op.value;
 113+ if (!v) // extra pain for IE...
 114+ v = (op.attributes && op.attributes['value'] &&
 115+ !(op.attributes['value'].specified))
 116+ ? op.text : op.value;
 117+ if (one) return v;
 118+ a.push(v);
 119+ }
119120 }
 121+ return a;
120122 }
121 - return a;
122 - }
123 - return el.value;
124 -};
 123+ return el.value;
 124+ };
125125
126 -$(document).ready( function() {
127 - $('#wpPreview').click( doLivePreview );
128 -} );
 126+ $(document).ready( function() {
 127+ $('#wpPreview').click( doLivePreview );
 128+ } );
 129+}) ( jQuery );
Index: branches/REL1_17/phase3/skins/common/shared.css
@@ -9,9 +9,9 @@
1010 .mw-plusminus-neg { color: #8b0000; } /* dark red */
1111 .mw-plusminus-null { color: #aaa; } /* gray */
1212
13 -/* Links to redirects appear italicized on [[Special:AllPages]],
14 - and in category listings */
15 -.allpagesredirect, .redirect-in-category { font-style: italic; }
 13+/* Links to redirects appear italicized on [[Special:AllPages]], [[Special:PrefixIndex]],
 14+ [[Special:Watchlist/edit]] and in category listings */
 15+.allpagesredirect, .redirect-in-category, .watchlistredir { font-style: italic; }
1616
1717 /* Comment and username portions of RC entries */
1818 span.comment {
@@ -780,6 +780,10 @@
781781 margin: 2px;
782782 }
783783
 784+li.gallerybox div.thumb a.image img {
 785+ vertical-align: text-top;
 786+}
 787+
784788 div.gallerytext {
785789 overflow: hidden;
786790 font-size: 94%;
Property changes on: branches/REL1_17/phase3/skins/common/shared.css
___________________________________________________________________
Modified: svn:mergeinfo
787791 Merged /trunk/phase3/skins/common/shared.css:r82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/skins/common/mwsuggest.js
@@ -7,6 +7,12 @@
88 * by Robert Stojnic (April 2008)
99 */
1010
 11+// Make sure wgMWSuggestTemplate is defined
 12+if ( !mw.config.exists( 'wgMWSuggestTemplate' ) ) {
 13+ mw.config.set( 'wgMWSuggestTemplate', mw.config.get( 'wgServer' ) + mw.config.get( 'wgScriptPath' )
 14+ + "/api.php?action=opensearch\x26search={searchTerms}\x26namespace={namespaces}\x26suggest" );
 15+}
 16+
1117 // search_box_id -> Results object
1218 window.os_map = {};
1319 // cached data, url -> json_text
@@ -40,6 +46,9 @@
4147 window.os_container_max_width = 2;
4248 // currently active animation timer
4349 window.os_animation_timer = null;
 50+// whether MWSuggest is enabled. Set to false when os_MWSuggestDisable() is called
 51+window.os_enabled = true;
 52+
4453 /**
4554 * <datalist> is a new HTML5 element that allows you to manually supply
4655 * suggestion lists and have them rendered according to the right platform
@@ -99,7 +108,11 @@
100109
101110 /** Initialization, call upon page onload */
102111 window.os_MWSuggestInit = function() {
103 - for( i = 0; i < os_autoload_inputs.length; i++ ) {
 112+ if ( !window.os_enabled ) {
 113+ return;
 114+ }
 115+
 116+ for( var i = 0; i < os_autoload_inputs.length; i++ ) {
104117 var id = os_autoload_inputs[i];
105118 var form = os_autoload_forms[i];
106119 element = document.getElementById( id );
@@ -109,6 +122,25 @@
110123 }
111124 };
112125
 126+/* Teardown, called when things like SimpleSearch need to disable MWSuggest */
 127+window.os_MWSuggestTeardown = function() {
 128+ for( var i = 0; i < os_autoload_inputs.length; i++ ) {
 129+ var id = os_autoload_inputs[i];
 130+ var form = os_autoload_forms[i];
 131+ element = document.getElementById( id );
 132+ if( element != null ) {
 133+ os_teardownHandlers( id, form, element );
 134+ }
 135+ }
 136+};
 137+
 138+/* Call this to disable MWSuggest. Works regardless of whether MWSuggest has been initialized already. */
 139+window.os_MWSuggestDisable = function() {
 140+ window.os_MWSuggestTeardown();
 141+ window.os_enabled = false;
 142+}
 143+
 144+
113145 /** Init Result objects and event handlers */
114146 window.os_initHandlers = function( name, formname, element ) {
115147 var r = new os_Results( name, formname );
@@ -118,20 +150,20 @@
119151 return;
120152 }
121153 // event handler
122 - os_hookEvent( element, 'keyup', function( event ) { os_eventKeyup( event ); } );
123 - os_hookEvent( element, 'keydown', function( event ) { os_eventKeydown( event ); } );
124 - os_hookEvent( element, 'keypress', function( event ) { os_eventKeypress( event ); } );
 154+ os_hookEvent( element, 'keyup', os_eventKeyup );
 155+ os_hookEvent( element, 'keydown', os_eventKeydown );
 156+ os_hookEvent( element, 'keypress', os_eventKeypress );
125157 if ( !os_use_datalist ) {
126158 // These are needed for the div hack to hide it if the user blurs.
127 - os_hookEvent( element, 'blur', function( event ) { os_eventBlur( event ); } );
128 - os_hookEvent( element, 'focus', function( event ) { os_eventFocus( event ); } );
 159+ os_hookEvent( element, 'blur', os_eventBlur );
 160+ os_hookEvent( element, 'focus', os_eventFocus );
129161 // We don't want browser auto-suggestions interfering with our div, but
130162 // autocomplete must be on for datalist to work (at least in Opera
131163 // 10.10).
132164 element.setAttribute( 'autocomplete', 'off' );
133165 }
134166 // stopping handler
135 - os_hookEvent( formElement, 'submit', function( event ) { return os_eventOnsubmit( event ); } );
 167+ os_hookEvent( formElement, 'submit', os_eventOnsubmit );
136168 os_map[name] = r;
137169 // toggle link
138170 if( document.getElementById( r.toggle ) == null ) {
@@ -159,6 +191,30 @@
160192
161193 };
162194
 195+window.os_teardownHandlers = function( name, formname, element ) {
 196+ var formElement = document.getElementById( formname );
 197+ if( !formElement ) {
 198+ // Older browsers (Opera 8) cannot get form elements
 199+ return;
 200+ }
 201+
 202+ os_unhookEvent( element, 'keyup', os_eventKeyup );
 203+ os_unhookEvent( element, 'keydown', os_eventKeydown );
 204+ os_unhookEvent( element, 'keypress', os_eventKeypress );
 205+ if ( !os_use_datalist ) {
 206+ // These are needed for the div hack to hide it if the user blurs.
 207+ os_unhookEvent( element, 'blur', os_eventBlur );
 208+ os_unhookEvent( element, 'focus', os_eventFocus );
 209+ // We don't want browser auto-suggestions interfering with our div, but
 210+ // autocomplete must be on for datalist to work (at least in Opera
 211+ // 10.10).
 212+ element.removeAttribute( 'autocomplete' );
 213+ }
 214+ // stopping handler
 215+ os_unhookEvent( formElement, 'submit', os_eventOnsubmit );
 216+};
 217+
 218+
163219 window.os_hookEvent = function( element, hookName, hookFunct ) {
164220 if ( element.addEventListener ) {
165221 element.addEventListener( hookName, hookFunct, false );
@@ -167,6 +223,14 @@
168224 }
169225 };
170226
 227+window.os_unhookEvent = function( element, hookName, hookFunct ) {
 228+ if ( element.removeEventListener ) {
 229+ element.removeEventListener( hookName, hookFunct, false );
 230+ } else if ( element.detachEvent ) {
 231+ element.detachEvent( 'on' + hookName, hookFunct );
 232+ }
 233+}
 234+
171235 /********************
172236 * Keyboard events
173237 ********************/
@@ -414,7 +478,7 @@
415479 var r = os_timer.r;
416480 var query = os_timer.query;
417481 os_timer = null;
418 - var path = wgMWSuggestTemplate.replace( "{namespaces}", os_getNamespaces( r ) )
 482+ var path = mw.config.get( 'wgMWSuggestTemplate' ).replace( "{namespaces}", os_getNamespaces( r ) )
419483 .replace( "{dbname}", wgDBname )
420484 .replace( "{searchTerms}", os_encodeQuery( query ) );
421485
Index: branches/REL1_17/phase3/skins/vector/screen.css
@@ -350,6 +350,9 @@
351351 margin-top: 0.4em;
352352 }
353353 div#simpleSearch {
 354+ display: block;
 355+ width: 14em;
 356+ height: 1.4em;
354357 margin-top: 0.65em;
355358 position: relative;
356359 min-height: 1px; /* Gotta trigger hasLayout for IE7 */
@@ -368,9 +371,11 @@
369372 */
370373 font-size: 13px;
371374 top: 0.25em;
 375+ direction: ltr;
372376 }
373377 div#simpleSearch input {
374378 color: black;
 379+ direction: ltr;
375380 }
376381 div#simpleSearch input:focus {
377382 outline: none;
@@ -382,39 +387,49 @@
383388 color: #999999;
384389 }
385390 div#simpleSearch input#searchInput {
 391+ position: absolute;
 392+ top: 0;
 393+ left: 0;
 394+ width: 90%;
386395 margin: 0;
387 - border-width: 0;
388 - padding: 3px;
389 - vertical-align: top;
 396+ padding: 0;
 397+ padding-left: 0.2em;
 398+ padding-top: 0.2em;
 399+ padding-bottom: 0.2em;
 400+ outline: none;
 401+ border: none;
390402 /*
391403 * DON'T PANIC! Browsers that won't scale this properly are the same browsers that have JS issues that prevent
392404 * this from ever being shown anyways.
393405 */
394406 font-size: 13px;
395 - width: 14em;
396407 background-color: transparent;
397408 direction: ltr;
398409 }
399410 div#simpleSearch button#searchButton {
 411+ position: absolute;
 412+ width: 10%;
 413+ right: 0;
 414+ top: 0;
400415 padding: 0;
401 - margin: 0 5px;
 416+ padding-top: 0.2em;
 417+ padding-bottom: 0.2em;
 418+ padding-right: 0.4em;
 419+ margin: 0;
402420 border: none;
403421 cursor: pointer;
404422 background-color: transparent;
405 - font-size: x-small;
406423 }
407424 /* OVERRIDDEN BY COMPLIANT BROWSERS */
408425 div#simpleSearch button#searchButton img {
409426 border: none;
410427 margin: 0;
 428+ margin-top: -3px;
411429 padding: 0;
412 - padding-top: 0.5em;
413 - vertical-align: middle;
414430 }
415431 /* IGNORED BY IE6 */
416432 div#simpleSearch button#searchButton > img {
417 - padding-top: 0;
418 - margin-top: -1px;
 433+ margin: 0;
419434 }
420435 /* Panel */
421436 div#mw-panel {
Property changes on: branches/REL1_17/phase3/skins/vector/screen.css
___________________________________________________________________
Modified: svn:mergeinfo
422437 Merged /trunk/phase3/skins/vector/screen.css:r82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/docs/hooks.txt
@@ -1112,7 +1112,7 @@
11131113 'MakeGlobalVariablesScript': called right before Skin::makeVariablesScript
11141114 is executed. Ideally, this hook should only be used to add variables that
11151115 depend on the current page/request; static configuration should be added
1116 -through ResourceLoaderConfigVars instead.
 1116+through ResourceLoaderGetConfigVars instead.
11171117 &$vars: variable (or multiple variables) to be added into the output
11181118 of Skin::makeVariablesScript
11191119
@@ -1367,7 +1367,7 @@
13681368 'RecentChange_save': called at the end of RecentChange::save()
13691369 $recentChange: RecentChange object
13701370
1371 -'ResourceLoaderConfigVars': called at the end of
 1371+'ResourceLoaderGetConfigVars': called at the end of
13721372 ResourceLoaderStartUpModule::getConfig(). Use this to export static
13731373 configuration variables to JavaScript. Things that depend on the current
13741374 page/request state must be added through MakeGlobalVariablesScript instead.
Property changes on: branches/REL1_17/phase3/docs/hooks.txt
___________________________________________________________________
Modified: svn:mergeinfo
13751375 Merged /trunk/phase3/docs/hooks.txt:r82000,82004,82020,82025,82038-82039,82048,82070,82081,82083,82090-82091,82095-82096,82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/includes/Xml.php
@@ -583,8 +583,8 @@
584584 $s = $value ? 'true' : 'false';
585585 } elseif ( is_null( $value ) ) {
586586 $s = 'null';
587 - } elseif ( is_int( $value ) ) {
588 - $s = $value;
 587+ } elseif ( is_int( $value ) || is_float( $value ) ) {
 588+ $s = strval($value);
589589 } elseif ( is_array( $value ) && // Make sure it's not associative.
590590 array_keys($value) === range( 0, count($value) - 1 ) ||
591591 count($value) == 0
Property changes on: branches/REL1_17/phase3/includes/Xml.php
___________________________________________________________________
Added: svn:mergeinfo
592592 Merged /branches/sqlite/includes/Xml.php:r58211-58321
593593 Merged /trunk/phase3/includes/Xml.php:r82000,82004,82020,82025,82038-82039,82048,82070,82081,82083,82090-82091,82095-82096,82099,82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253,82845,82847-82848
594594 Merged /branches/new-installer/phase3/includes/Xml.php:r43664-66004
595595 Merged /branches/wmf-deployment/includes/Xml.php:r53381
596596 Merged /branches/REL1_15/phase3/includes/Xml.php:r51646
Index: branches/REL1_17/phase3/includes/diff/DifferenceEngine.php
@@ -590,7 +590,8 @@
591591 */
592592 function showDiffStyle() {
593593 global $wgOut;
594 - $wgOut->addModules( 'mediawiki.legacy.diff' );
 594+ $wgOut->addModuleStyles( 'mediawiki.legacy.diff' );
 595+ $wgOut->addModuleScripts( 'mediawiki.legacy.diff' );
595596 }
596597
597598 /**
Index: branches/REL1_17/phase3/includes/json/FormatJson.php
@@ -44,11 +44,11 @@
4545 */
4646 public static function decode( $value, $assoc = false ) {
4747 if ( !function_exists( 'json_decode' ) ) {
48 - $json = new Services_JSON();
 48+ if( $assoc )
 49+ $json = new Services_JSON( SERVICES_JSON_LOOSE_TYPE );
 50+ else
 51+ $json = new Services_JSON();
4952 $jsonDec = $json->decode( $value );
50 - if( $assoc ) {
51 - $jsonDec = wfObjectToArray( $jsonDec );
52 - }
5353 return $jsonDec;
5454 } else {
5555 return json_decode( $value, $assoc );
Index: branches/REL1_17/phase3/includes/PrefixSearch.php
@@ -78,6 +78,9 @@
7979 protected static function specialSearch( $search, $limit ) {
8080 global $wgContLang;
8181
 82+ # normalize searchKey, so aliases with spaces can be found - bug 25675
 83+ $search = str_replace( ' ', '_', $search );
 84+
8285 $searchKey = $wgContLang->caseFold( $search );
8386
8487 // Unlike SpecialPage itself, we want the canonical forms of both
Index: branches/REL1_17/phase3/includes/GlobalFunctions.php
@@ -3508,10 +3508,13 @@
35093509 }
35103510
35113511 /* Recursively converts the parameter (an object) to an array with the same data */
3512 -function wfObjectToArray( $object, $recursive = true ) {
 3512+function wfObjectToArray( $objOrArray, $recursive = true ) {
35133513 $array = array();
3514 - foreach ( get_object_vars( $object ) as $key => $value ) {
3515 - if ( is_object( $value ) && $recursive ) {
 3514+ if( is_object( $objOrArray ) ) {
 3515+ $objOrArray = get_object_vars( $objOrArray );
 3516+ }
 3517+ foreach ( $objOrArray as $key => $value ) {
 3518+ if ( $recursive && ( is_object( $value ) || is_array( $value ) ) ) {
35163519 $value = wfObjectToArray( $value );
35173520 }
35183521
Property changes on: branches/REL1_17/phase3/includes/GlobalFunctions.php
___________________________________________________________________
Modified: svn:mergeinfo
35193522 Merged /trunk/phase3/includes/GlobalFunctions.php:r82000,82004,82020,82025,82038-82039,82048,82070,82081,82083,82090-82091,82095-82096,82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/includes/WatchedItem.php
@@ -84,6 +84,8 @@
8585 * @return bool
8686 */
8787 public function removeWatch() {
 88+ wfProfileIn( __METHOD__ );
 89+
8890 $success = false;
8991 $dbw = wfGetDB( DB_MASTER );
9092 $dbw->delete( 'watchlist',
@@ -112,6 +114,8 @@
113115 if ( $dbw->affectedRows() ) {
114116 $success = true;
115117 }
 118+
 119+ wfProfileOut( __METHOD__ );
116120 return $success;
117121 }
118122
Index: branches/REL1_17/phase3/includes/LocalisationCache.php
@@ -442,6 +442,20 @@
443443 }
444444 }
445445
 446+ protected function mergeMagicWords( &$value, $fallbackValue ) {
 447+ foreach ( $fallbackValue as $magicName => $fallbackInfo ) {
 448+ if ( !isset( $value[$magicName] ) ) {
 449+ $value[$magicName] = $fallbackInfo;
 450+ } else {
 451+ $oldSynonyms = array_slice( $fallbackInfo, 1 );
 452+ $newSynonyms = array_slice( $value[$magicName], 1 );
 453+ $synonyms = array_values( array_unique( array_merge(
 454+ $newSynonyms, $oldSynonyms ) ) );
 455+ $value[$magicName] = array_merge( array( $fallbackInfo[0] ), $synonyms );
 456+ }
 457+ }
 458+ }
 459+
446460 /**
447461 * Given an array mapping language code to localisation value, such as is
448462 * found in extension *.i18n.php files, iterate through a fallback sequence
Index: branches/REL1_17/phase3/includes/MessageCache.php
@@ -522,9 +522,7 @@
523523 throw new MWException( "Bad lang code $langcode given" );
524524 }
525525
526 - // Don't change getPreferredVariant() to getCode() / mCode, for
527 - // more details, see the comment in Language::getMessage().
528 - $langcode = $lang->getPreferredVariant();
 526+ $langcode = $lang->getCode();
529527
530528 $message = false;
531529
Index: branches/REL1_17/phase3/includes/OutputPage.php
@@ -2415,7 +2415,7 @@
24162416 $timestamp = max( $timestamp, $module->getModifiedTime( $context ) );
24172417 }
24182418 // Add a version parameter so cache will break when things change
2419 - $query['version'] = wfTimestamp( TS_ISO_8601_BASIC, round( $timestamp, -2 ) );
 2419+ $query['version'] = wfTimestamp( TS_ISO_8601_BASIC, $timestamp );
24202420 }
24212421 // Make queries uniform in order
24222422 ksort( $query );
Property changes on: branches/REL1_17/phase3/includes/OutputPage.php
___________________________________________________________________
Modified: svn:mergeinfo
24232423 Merged /trunk/phase3/includes/OutputPage.php:r82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/includes/resourceloader/ResourceLoaderFileModule.php
@@ -197,6 +197,8 @@
198198 break;
199199 }
200200 }
 201+ // Make sure the remote base path is a complete valid url
 202+ $this->remoteBasePath = wfExpandUrl( $this->remoteBasePath );
201203 }
202204
203205 /**
Index: branches/REL1_17/phase3/includes/resourceloader/ResourceLoaderWikiModule.php
@@ -81,6 +81,7 @@
8282 }
8383
8484 public function getStyles( ResourceLoaderContext $context ) {
 85+ global $wgScriptPath;
8586
8687 $styles = array();
8788 foreach ( $this->getPages( $context ) as $titleText => $options ) {
@@ -99,6 +100,7 @@
100101 if ( $this->getFlip( $context ) ) {
101102 $style = CSSJanus::transform( $style, true, false );
102103 }
 104+ $style = CSSMin::remap( $style, false, $wgScriptPath, true );
103105 if ( !isset( $styles[$media] ) ) {
104106 $styles[$media] = '';
105107 }
Index: branches/REL1_17/phase3/includes/media/SVG.php
@@ -206,11 +206,22 @@
207207
208208 // Sort fields into visible and collapsed
209209 $visibleFields = $this->visibleMetadataFields();
 210+
 211+ // Rename fields to be compatible with exif, so that
 212+ // the labels for these fields work.
 213+ $conversion = array( 'width' => 'imagewidth',
 214+ 'height' => 'imagelength',
 215+ 'description' => 'imagedescription',
 216+ 'title' => 'objectname',
 217+ );
210218 foreach ( $metadata as $name => $value ) {
211219 $tag = strtolower( $name );
 220+ if ( isset( $conversion[$tag] ) ) {
 221+ $tag = $conversion[$tag];
 222+ }
212223 self::addMeta( $result,
213224 in_array( $tag, $visibleFields ) ? 'visible' : 'collapsed',
214 - 'svg',
 225+ 'exif',
215226 $tag,
216227 $value
217228 );
Index: branches/REL1_17/phase3/includes/MagicWord.php
@@ -272,13 +272,13 @@
273273 * @private
274274 */
275275 function initRegex() {
276 - #$variableClass = Title::legalChars();
277 - # This was used for matching "$1" variables, but different uses of the feature will have
278 - # different restrictions, which should be checked *after* the MagicWord has been matched,
279 - # not here. - IMSoP
 276+ // Sort the synonyms by length, descending, so that the longest synonym
 277+ // matches in precedence to the shortest
 278+ $synonyms = $this->mSynonyms;
 279+ usort( $synonyms, array( $this, 'compareStringLength' ) );
280280
281281 $escSyn = array();
282 - foreach ( $this->mSynonyms as $synonym )
 282+ foreach ( $synonyms as $synonym )
283283 // In case a magic word contains /, like that's going to happen;)
284284 $escSyn[] = preg_quote( $synonym, '/' );
285285 $this->mBaseRegex = implode( '|', $escSyn );
@@ -292,6 +292,23 @@
293293 }
294294
295295 /**
 296+ * A comparison function that returns -1, 0 or 1 depending on whether the
 297+ * first string is longer, the same length or shorter than the second
 298+ * string.
 299+ */
 300+ function compareStringLength( $s1, $s2 ) {
 301+ $l1 = strlen( $s1 );
 302+ $l2 = strlen( $s2 );
 303+ if ( $l1 < $l2 ) {
 304+ return 1;
 305+ } elseif ( $l1 > $l2 ) {
 306+ return -1;
 307+ } else {
 308+ return 0;
 309+ }
 310+ }
 311+
 312+ /**
296313 * Gets a regex representing matching the word
297314 */
298315 function getRegex() {
Index: branches/REL1_17/phase3/includes/Title.php
@@ -3951,7 +3951,8 @@
39523952 }
39533953 // Check cache first
39543954 $uid = $user->getId();
3955 - if ( isset( $this->mNotificationTimestamp[$uid] ) ) {
 3955+ // avoid isset here, as it'll return false for null entries
 3956+ if ( array_key_exists( $uid, $this->mNotificationTimestamp ) ) {
39563957 return $this->mNotificationTimestamp[$uid];
39573958 }
39583959 if ( !$uid || !$wgShowUpdatedMarker ) {
Property changes on: branches/REL1_17/phase3/includes/Title.php
___________________________________________________________________
Modified: svn:mergeinfo
39593960 Merged /trunk/phase3/includes/Title.php:r82000,82004,82020,82025,82038-82039,82048,82070,82081,82083,82090-82091,82095-82096,82129,82155-82156,82181,82191,82200,82203,82215,82219,82221,82253
Index: branches/REL1_17/phase3/includes/libs/CSSMin.php
@@ -36,7 +36,7 @@
3737 * which when base64 encoded will result in a 1/3 increase in size.
3838 */
3939 const EMBED_SIZE_LIMIT = 24576;
40 - const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\:\'"]*)\??[^\)\'"]*[\'"]?\s*\)';
 40+ const URL_REGEX = 'url\(\s*[\'"]?(?P<file>[^\?\)\'"]*)(?P<query>\??[^\)\'"]*)[\'"]?\s*\)';
4141
4242 /* Protected Static Members */
4343
@@ -79,6 +79,32 @@
8080 return $files;
8181 }
8282
 83+ protected static function getMimeType( $file ) {
 84+ $realpath = realpath( $file );
 85+ // Try a couple of different ways to get the mime-type of a file, in order of
 86+ // preference
 87+ if (
 88+ $realpath
 89+ && function_exists( 'finfo_file' )
 90+ && function_exists( 'finfo_open' )
 91+ && defined( 'FILEINFO_MIME_TYPE' )
 92+ ) {
 93+ // As of PHP 5.3, this is how you get the mime-type of a file; it uses the Fileinfo
 94+ // PECL extension
 95+ return finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
 96+ } else if ( function_exists( 'mime_content_type' ) ) {
 97+ // Before this was deprecated in PHP 5.3, this was how you got the mime-type of a file
 98+ return mime_content_type( $file );
 99+ } else {
 100+ // Worst-case scenario has happened, use the file extension to infer the mime-type
 101+ $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
 102+ if ( isset( self::$mimeTypes[$ext] ) ) {
 103+ return self::$mimeTypes[$ext];
 104+ }
 105+ }
 106+ return false;
 107+ }
 108+
83109 /**
84110 * Remaps CSS URL paths and automatically embeds data URIs for URL rules
85111 * preceded by an /* @embed * / comment
@@ -94,63 +120,57 @@
95121 self::URL_REGEX . '(?P<post>[^;]*)[\;]?/';
96122 $offset = 0;
97123 while ( preg_match( $pattern, $source, $match, PREG_OFFSET_CAPTURE, $offset ) ) {
 124+ // Skip absolute URIs
 125+ if ( preg_match( '/^https?:\/\//', $match['file'][0] ) ) {
 126+ // Move the offset to the end of the match, leaving it alone
 127+ $offset = $match[0][1] + strlen( $match[0][0] );
 128+ continue;
 129+ }
98130 // Shortcuts
99131 $embed = $match['embed'][0];
100132 $pre = $match['pre'][0];
101133 $post = $match['post'][0];
 134+ $query = $match['query'][0];
 135+ $url = "{$remote}/{$match['file'][0]}";
102136 $file = "{$local}/{$match['file'][0]}";
103 - $url = "{$remote}/{$match['file'][0]}";
104 - // Only proceed if we can access the file
105 - if ( file_exists( $file ) ) {
 137+ $replacement = false;
 138+ if ( $local !== false && file_exists( $file ) ) {
106139 // Add version parameter as a time-stamp in ISO 8601 format,
107140 // using Z for the timezone, meaning GMT
108141 $url .= '?' . gmdate( 'Y-m-d\TH:i:s\Z', round( filemtime( $file ), -2 ) );
109 - // If we the mime-type can't be determined, no embedding will take place
110 - $type = false;
111 - $realpath = realpath( $file );
112 - // Try a couple of different ways to get the mime-type of a file,
113 - // in order of preference
114 - if ( $realpath
115 - && function_exists( 'finfo_file' ) && function_exists( 'finfo_open' )
116 - && defined( 'FILEINFO_MIME_TYPE' ) )
117 - {
118 - // As of PHP 5.3, this is how you get the mime-type of a file;
119 - // it uses the Fileinfo PECL extension
120 - $type = finfo_file( finfo_open( FILEINFO_MIME_TYPE ), $realpath );
121 - } else if ( function_exists( 'mime_content_type' ) ) {
122 - // Before this was deprecated in PHP 5.3,
123 - // this used to be how you get the mime-type of a file
124 - $type = mime_content_type( $file );
125 - } else {
126 - // Worst-case scenario has happened,
127 - // use the file extension to infer the mime-type
128 - $ext = strtolower( pathinfo( $file, PATHINFO_EXTENSION ) );
129 - if ( isset( self::$mimeTypes[$ext] ) ) {
130 - $type = self::$mimeTypes[$ext];
 142+ // Embedding requires a bit of extra processing, so let's skip that if we can
 143+ if ( $embed ) {
 144+ $type = self::getMimeType( $file );
 145+ // Detect when URLs were preceeded with embed tags, and also verify file size is
 146+ // below the limit
 147+ if (
 148+ $type
 149+ && $match['embed'][1] > 0
 150+ && filesize( $file ) < self::EMBED_SIZE_LIMIT
 151+ ) {
 152+ // Strip off any trailing = symbols (makes browsers freak out)
 153+ $data = base64_encode( file_get_contents( $file ) );
 154+ // Build 2 CSS properties; one which uses a base64 encoded data URI in place
 155+ // of the @embed comment to try and retain line-number integrity, and the
 156+ // other with a remapped an versioned URL and an Internet Explorer hack
 157+ // making it ignored in all browsers that support data URIs
 158+ $replacement = "{$pre}url(data:{$type};base64,{$data}){$post};";
 159+ $replacement .= "{$pre}url({$url}){$post}!ie;";
131160 }
132161 }
133 - // Detect when URLs were preceeded with embed tags,
134 - // and also verify file size is below the limit
135 - if ( $embed && $type && $match['embed'][1] > 0
136 - && filesize( $file ) < self::EMBED_SIZE_LIMIT )
137 - {
138 - // Strip off any trailing = symbols (makes browsers freak out)
139 - $data = base64_encode( file_get_contents( $file ) );
140 - // Build 2 CSS properties; one which uses a base64 encoded data URI
141 - // in place of the @embed comment to try and retain line-number integrity,
142 - // and the other with a remapped an versioned URL and an Internet Explorer
143 - // hack making it ignored in all browsers that support data URIs
144 - $replacement = "{$pre}url(data:{$type};base64,{$data}){$post};";
145 - $replacement .= "{$pre}url({$url}){$post}!ie;";
146 - } else {
147 - // Build a CSS property with a remapped and versioned URL,
148 - // preserving comment for debug mode
149 - $replacement = "{$embed}{$pre}url({$url}){$post};";
 162+ if ( $replacement === false ) {
 163+ // Assume that all paths are relative to $remote, and make them absolute
 164+ $replacement = "{$embed}{$pre}url({$url}){$post};";
150165 }
151 -
 166+ } else if ( $local === false ) {
 167+ // Assume that all paths are relative to $remote, and make them absolute
 168+ $replacement = "{$embed}{$pre}url({$url}{$query}){$post};";
 169+ }
 170+ if ( $replacement !== false ) {
152171 // Perform replacement on the source
153 - $source = substr_replace( $source,
154 - $replacement, $match[0][1], strlen( $match[0][0] ) );
 172+ $source = substr_replace(
 173+ $source, $replacement, $match[0][1], strlen( $match[0][0] )
 174+ );
155175 // Move the offset to the end of the replacement in the source
156176 $offset = $match[0][1] + strlen( $replacement );
157177 continue;
@@ -160,7 +180,7 @@
161181 }
162182 return $source;
163183 }
164 -
 184+
165185 /**
166186 * Removes whitespace from CSS data
167187 *
Index: branches/REL1_17/phase3/includes/specials/SpecialListfiles.php
@@ -213,7 +213,7 @@
214214 Xml::fieldset( wfMsg( 'listfiles' ) ) .
215215 Html::openElement( 'table', array( 'id' => 'mw-listfiles-table' ) ) .
216216 Xml::buildForm( $inputForm, 'table_pager_limit_submit' ) .
217 - $this->getHiddenFields( array( 'limit', 'ilsearch', 'username' ) ) .
 217+ $this->getHiddenFields( array( 'limit', 'ilsearch', 'user' ) ) .
218218 Html::closeElement( 'table' ) .
219219 Html::closeElement( 'fieldset' ) .
220220 Html::closeElement( 'form' ) . "\n";
Index: branches/REL1_17/phase3/includes/ImageGallery.php
@@ -156,11 +156,11 @@
157157 }
158158
159159 /**
160 - * Add an image at the beginning of the gallery.
161 - *
162 - * @param $title Title object of the image that is added to the gallery
163 - * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown.
164 - */
 160+ * Add an image at the beginning of the gallery.
 161+ *
 162+ * @param $title Title object of the image that is added to the gallery
 163+ * @param $html String: Additional HTML text to be shown. The name and size of the image are always shown.
 164+ */
165165 function insert( $title, $html='' ) {
166166 if ( $title instanceof File ) {
167167 // Old calling convention
@@ -286,14 +286,13 @@
287287 $imageParameters['alt'] = $nt->getText();
288288 }
289289
290 - # Set both fixed width and height. Otherwise we might have problems
291 - # with the vertical centering of images where height<line-size
 290+ # Set both fixed width and min-height.
292291 $thumbhtml = "\n\t\t\t".
293292 '<div class="thumb" style="width: ' .($this->mWidths+30).'px; height: ' .($this->mHeights+30).'px;">'
294293 # Auto-margin centering for block-level elements. Needed now that we have video
295294 # handlers since they may emit block-level elements as opposed to simple <img> tags.
296295 # ref http://css-discuss.incutio.com/?page=CenteringBlockElement
297 - . '<div style="margin:'.$vpad.'px auto;">'
 296+ . '<div style="margin:'.$vpad.'px auto 0;">'
298297 . $thumb->toHtml( $imageParameters ) . '</div></div>';
299298
300299 // Call parser transform hook
Index: branches/REL1_17/phase3/languages/messages/MessagesQqq.php
@@ -3308,6 +3308,7 @@
33093309 See also Wikipedia on [http://en.wikipedia.org/wiki/Focal_length#In_photography focal length].',
33103310 'exif-gpslatitude' => '{{Identical|Latitude}}',
33113311 'exif-gpslongitude' => '{{Identical|Longitude}}',
 3312+'exif-objectname' => 'This message labels a field in the image metadata table that is a short name or title for the image. (As compared to {{msg-mw|exif-imagedescription}} which is a long description of the image).',
33123313
33133314 # EXIF attributes
33143315 'exif-compression-6' => '{{optional}}',
Index: branches/REL1_17/phase3/languages/messages/MessagesPl.php
@@ -60,6 +60,10 @@
6161 'Dyskusja_grafiki' => NS_FILE_TALK,
6262 );
6363
 64+$namespaceGenderAliases = array(
 65+ NS_USER => array( 'male' => 'Użytkownik', 'female' => 'Użytkowniczka' ),
 66+ NS_USER_TALK => array( 'male' => 'Dyskusja_użytkownika', 'female' => 'Dyskusja_użytkowniczki' ),
 67+);
6468
6569 $dateFormats = array(
6670 'mdy time' => 'H:i',
Index: branches/REL1_17/phase3/languages/messages/MessagesEn.php
@@ -3771,6 +3771,7 @@
37723772 'exif-gpsareainformation' => 'Name of GPS area',
37733773 'exif-gpsdatestamp' => 'GPS date',
37743774 'exif-gpsdifferential' => 'GPS differential correction',
 3775+'exif-objectname' => 'Short title',
37753776
37763777 # Make & model, can be wikified in order to link to the camera and model name
37773778 'exif-make-value' => '$1', # do not translate or duplicate this message to other languages
Index: branches/REL1_17/phase3/resources/Resources.php
@@ -330,6 +330,14 @@
331331 'dependencies' => array( 'jquery.checkboxShiftClick', 'jquery.client', 'jquery.placeholder' ),
332332 'debugScripts' => 'resources/mediawiki.util/mediawiki.util.test.js',
333333 ),
 334+ 'mediawiki.util.jpegmeta' => array(
 335+ 'scripts' => 'resources/mediawiki.util/mediawiki.util.jpegmeta.js',
 336+ ),
 337+ 'mediawiki.action.history' => array(
 338+ 'scripts' => 'resources/mediawiki.action/mediawiki.action.history.js',
 339+ 'dependencies' => 'mediawiki.legacy.history',
 340+ 'group' => 'mediawiki.action.history',
 341+ ),
334342 'mediawiki.action.edit' => array(
335343 'scripts' => 'resources/mediawiki.action/mediawiki.action.edit.js',
336344 ),
@@ -426,8 +434,11 @@
427435 'dependencies' => 'mediawiki.legacy.wikibits',
428436 ),
429437 'mediawiki.legacy.diff' => array(
430 - 'scripts' => 'skins/common/diff.js',
431 - 'styles' => 'skins/common/diff.css',
 438+ 'scripts' => 'common/diff.js',
 439+ 'styles' => 'common/diff.css',
 440+ 'group' => 'mediawiki.action.history',
 441+ 'remoteBasePath' => $GLOBALS['wgStylePath'],
 442+ 'localBasePath' => "{$GLOBALS['IP']}/skins",
432443 'dependencies' => 'mediawiki.legacy.wikibits',
433444 ),
434445 'mediawiki.legacy.edit' => array(
@@ -439,7 +450,10 @@
440451 'dependencies' => 'mediawiki.legacy.wikibits',
441452 ),
442453 'mediawiki.legacy.history' => array(
443 - 'scripts' => 'skins/common/history.js',
 454+ 'scripts' => 'common/history.js',
 455+ 'group' => 'mediawiki.action.history',
 456+ 'remoteBasePath' => $GLOBALS['wgStylePath'],
 457+ 'localBasePath' => "{$GLOBALS['IP']}/skins",
444458 'dependencies' => 'mediawiki.legacy.wikibits',
445459 ),
446460 'mediawiki.legacy.htmlform' => array(

Follow-up revisions

RevisionCommit summaryAuthorDate
r85348Fixes for r85151: grab Resources.php changes for r81719, r81721, r81722, r822...demon17:41, 4 April 2011

Past revisions this follows-up on

RevisionCommit summaryAuthorDate
r81960Since 1.17 a whole lot of extensions have sprouted *.i18n.magic.php files. Mo...tstarling11:53, 11 February 2011
r82000Resolves bug #27328 by supporting URL rewriting for CSS that comes from the W...tparscal22:57, 11 February 2011
r82004* (bug 27333) Fix repetitive last-seen time queries on page history...brion01:10, 12 February 2011
r82020* Fix hook name...ialex17:15, 12 February 2011
r82025Since mwsuggest.js is no longer used in core, wgMWSuggestTemplate is not defi...krinkle20:08, 12 February 2011
r82038Follow-up r81731 CR comments. Calling wfExpandUrl() on remote base path.krinkle22:46, 12 February 2011
r82039Follow-up r82038. Calling wfExpandUrl() on remote base path *AFTER* is has be...krinkle23:20, 12 February 2011
r82048(Follow-up r75968) r75968 started extracting and displaying some svg metadata...bawolff04:55, 13 February 2011
r82070Add profiling to removeWatchreedy19:12, 13 February 2011
r82081* (bug 27377) Fix Special:Listfile user selector when initial form parameters...brion21:20, 13 February 2011
r82083Bug 27385 - Set Polish $namespaceGenderAliases (r82029)raymond21:35, 13 February 2011
r82090* (bug 26250, bug 23817) Fix wfObjectToArray() to descend into arrays; fixes ...brion23:04, 13 February 2011
r82091* (bug 23817, bug 26250) User Service_JSON's native associative array mode in...brion23:08, 13 February 2011
r82096* (bug 25675) Fix search suggestions for Special: pages with spaces...brion00:32, 14 February 2011
r82099* (bug 25571) Xml::encodeJsVar now passes floats natively instead of converti...brion00:54, 14 February 2011
r82129(bug 27402) Add support for disabling MWSuggestcatrope19:55, 14 February 2011
r82155Resolves bug #27332 - now using absolute positioning with em measurements to ...tparscal00:23, 15 February 2011
r82156Resolves remaining issues in r82000 with remapping relative CSS URLs that con...tparscal00:49, 15 February 2011
r82181* (bug 27338) Gallery in 1.17 breaks for audio/video + ogghandler...mah19:39, 15 February 2011
r82191(bug 27435) Wrap with jquery bit per Roan's suggestionmah21:02, 15 February 2011
r82200Grouped diff and history modules together to help reduce cache invalidation. ...tparscal22:14, 15 February 2011
r82203Adding italics for .watchlistredir...krinkle23:45, 15 February 2011
r82215re r82181 remove min-height that doesn't work with IE6mah03:38, 16 February 2011
r82219(bug 27302) Don't append the current timestamp for user/site modules when no ...catrope07:19, 16 February 2011
r82221* Fix for r81960: List the local magic word synonyms first, so that they will...tstarling07:24, 16 February 2011
r82253revert r77452, r80492 and r82246.philip16:07, 16 February 2011

Comments

#Comment by Catrope (talk | contribs)   09:38, 3 April 2011

The merge of r81960 is broken: mergeMagicWords() is added, but the other changes in that rev are not applied.

In Resources.php:

+		'scripts' => 'resources/mediawiki.util/mediawiki.util.jpegmeta.js',

but this file isn't in REL1_17 and the jpegmeta module isn't referenced by any code in REL1_17/phase3/includes

Resources.php also contains a few changes from r81719, r81721 and r81722. These revs weren't tagged 1.17 but should be merged, so I tagged them.

The rest is OK.

#Comment by 😂 (talk | contribs)   20:11, 3 April 2011

I have yet to get a single Resources.php merge without annoying conflicts :(

#Comment by 😂 (talk | contribs)   17:44, 4 April 2011

Yay for followups :D

Status & tagging log