Index: branches/REL1_17/phase3/skins/common/shared.css |
— | — | @@ -780,10 +780,6 @@ |
781 | 781 | margin: 2px; |
782 | 782 | } |
783 | 783 | |
784 | | -li.gallerybox div.thumb a.image img { |
785 | | - vertical-align: text-top; |
786 | | -} |
787 | | - |
788 | 784 | div.gallerytext { |
789 | 785 | overflow: hidden; |
790 | 786 | font-size: 94%; |
Property changes on: branches/REL1_17/phase3/skins/common/shared.css |
___________________________________________________________________ |
Modified: svn:mergeinfo |
791 | 787 | Merged /trunk/phase3/skins/common/shared.css:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82482,82486 |
Index: branches/REL1_17/phase3/skins/vector/screen.css |
— | — | @@ -969,8 +969,8 @@ |
970 | 970 | } |
971 | 971 | /* User Message */ |
972 | 972 | .usermessage { |
973 | | - background-color: #e0e8ff; |
974 | | - border: 1px solid #99b3ff; |
| 973 | + background-color: #ffce7b; |
| 974 | + border: 1px solid #ffa500; |
975 | 975 | color: black; |
976 | 976 | font-weight: bold; |
977 | 977 | margin: 2em 0 1em; |
Property changes on: branches/REL1_17/phase3/skins/vector/screen.css |
___________________________________________________________________ |
Modified: svn:mergeinfo |
978 | 978 | Merged /trunk/phase3/skins/vector/screen.css:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82482,82486 |
Index: branches/REL1_17/phase3/includes/json/FormatJson.php |
— | — | @@ -9,6 +9,8 @@ |
10 | 10 | die( 1 ); |
11 | 11 | } |
12 | 12 | |
| 13 | +require_once dirname( __FILE__ ) . '/Services_JSON.php'; |
| 14 | + |
13 | 15 | class FormatJson { |
14 | 16 | |
15 | 17 | /** |
— | — | @@ -55,4 +57,4 @@ |
56 | 58 | } |
57 | 59 | } |
58 | 60 | |
59 | | -} |
\ No newline at end of file |
| 61 | +} |
Index: branches/REL1_17/phase3/includes/parser/Parser.php |
— | — | @@ -318,8 +318,8 @@ |
319 | 319 | |
320 | 320 | /** |
321 | 321 | * A converted title will be provided in the output object if title and |
322 | | - * content conversion are enabled, the article text does not contain |
323 | | - * a conversion-suppressing double-underscore tag, and no |
| 322 | + * content conversion are enabled, the article text does not contain |
| 323 | + * a conversion-suppressing double-underscore tag, and no |
324 | 324 | * {{DISPLAYTITLE:...}} is present. DISPLAYTITLE takes precedence over |
325 | 325 | * automatic link conversion. |
326 | 326 | */ |
— | — | @@ -476,7 +476,9 @@ |
477 | 477 | |
478 | 478 | $flags = PPFrame::NO_ARGS | PPFrame::NO_TEMPLATES; |
479 | 479 | $dom = $this->preprocessToDom( $text, self::PTD_FOR_INCLUSION ); |
480 | | - return $this->getPreprocessor()->newFrame()->expand( $dom, $flags ); |
| 480 | + $text = $this->getPreprocessor()->newFrame()->expand( $dom, $flags ); |
| 481 | + $text = $this->mStripState->unstripBoth( $text ); |
| 482 | + return $text; |
481 | 483 | } |
482 | 484 | |
483 | 485 | /** |
— | — | @@ -4043,6 +4045,9 @@ |
4044 | 4046 | # Because mOutputType is OT_WIKI, this will only process {{subst:xxx}} type tags |
4045 | 4047 | $text = $this->replaceVariables( $text ); |
4046 | 4048 | |
| 4049 | + # This works almost by chance, as the replaceVariables are done before the getUserSig(), |
| 4050 | + # which may corrupt this parser instance via its wfMsgExt( parsemag ) call- |
| 4051 | + |
4047 | 4052 | # Signatures |
4048 | 4053 | $sigText = $this->getUserSig( $user ); |
4049 | 4054 | $text = strtr( $text, array( |
— | — | @@ -4923,6 +4928,15 @@ |
4924 | 4929 | return $this->extractSections( $text, $section, "get", $deftext ); |
4925 | 4930 | } |
4926 | 4931 | |
| 4932 | + /** |
| 4933 | + * This function returns $oldtext after the content of the section |
| 4934 | + * specified by $section has been replaced with $text. |
| 4935 | + * |
| 4936 | + * @param $text String: former text of the article |
| 4937 | + * @param $section Numeric: section identifier |
| 4938 | + * @param $text String: replacing text |
| 4939 | + * #return String: modified text |
| 4940 | + */ |
4927 | 4941 | public function replaceSection( $oldtext, $section, $text ) { |
4928 | 4942 | return $this->extractSections( $oldtext, $section, "replace", $text ); |
4929 | 4943 | } |
Property changes on: branches/REL1_17/phase3/includes/parser/Parser.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
4930 | 4944 | Merged /trunk/phase3/includes/parser/Parser.php:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82482,82486 |
Index: branches/REL1_17/phase3/includes/Sanitizer.php |
— | — | @@ -40,7 +40,7 @@ |
41 | 41 | * Allows some... latitude. |
42 | 42 | * Used in Sanitizer::fixTagAttributes and Sanitizer::decodeTagAttributes |
43 | 43 | */ |
44 | | -$attribFirst = '[:A-Z_a-z]'; |
| 44 | +$attribFirst = '[:A-Z_a-z0-9]'; |
45 | 45 | $attrib = '[:A-Z_a-z-.0-9]'; |
46 | 46 | $space = '[\x09\x0a\x0d\x20]'; |
47 | 47 | define( 'MW_ATTRIBS_REGEX', |
Property changes on: branches/REL1_17/phase3/includes/Sanitizer.php |
___________________________________________________________________ |
Added: svn:mergeinfo |
48 | 48 | Merged /branches/new-installer/phase3/includes/Sanitizer.php:r43664-66004 |
49 | 49 | Merged /branches/wmf-deployment/includes/Sanitizer.php:r53381 |
50 | 50 | Merged /branches/REL1_15/phase3/includes/Sanitizer.php:r51646 |
51 | 51 | Merged /branches/sqlite/includes/Sanitizer.php:r58211-58321 |
52 | 52 | Merged /trunk/phase3/includes/Sanitizer.php:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82480,82482,82486,82845,82847-82848 |
Index: branches/REL1_17/phase3/includes/api/ApiQueryPageProps.php |
— | — | @@ -108,7 +108,7 @@ |
109 | 109 | * @return bool True if it fits in the result |
110 | 110 | */ |
111 | 111 | private function addPageProps( $result, $page, $props ) { |
112 | | - $fit = $result->addValue( array( 'query', 'pages' ), $page, $props ); |
| 112 | + $fit = $result->addValue( array( 'query', 'pages', $page ), 'pageprops', $props ); |
113 | 113 | |
114 | 114 | if ( !$fit ) { |
115 | 115 | $this->setContinueEnumParameter( 'continue', $page ); |
Property changes on: branches/REL1_17/phase3/includes/api/ApiQueryPageProps.php |
___________________________________________________________________ |
Modified: svn:mergeinfo |
116 | 116 | Merged /trunk/phase3/includes/api/ApiQueryPageProps.php:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82482,82486 |
Index: branches/REL1_17/phase3/includes/media/SVGMetadataExtractor.php |
— | — | @@ -74,7 +74,7 @@ |
75 | 75 | $keepReading = $this->reader->read(); |
76 | 76 | } |
77 | 77 | |
78 | | - if ( $this->reader->name != 'svg' ) { |
| 78 | + if ( !$this->qualifiedNameEquals( $this->reader->name, 'svg', 'svg' ) ) { |
79 | 79 | throw new MWException( "Expected <svg> tag, got ". |
80 | 80 | $this->reader->name ); |
81 | 81 | } |
— | — | @@ -90,13 +90,13 @@ |
91 | 91 | |
92 | 92 | $this->debug( "$tag" ); |
93 | 93 | |
94 | | - if ( $tag == 'svg' && $type == XmlReader::END_ELEMENT && $this->reader->depth <= $exitDepth ) { |
| 94 | + if ( $this->qualifiedNameEquals( $tag, 'svg', 'svg' ) && $type == XmlReader::END_ELEMENT && $this->reader->depth <= $exitDepth ) { |
95 | 95 | break; |
96 | | - } elseif ( $tag == 'title' ) { |
| 96 | + } elseif ( $this->qualifiedNameEquals( $tag, 'svg', 'title' ) ) { |
97 | 97 | $this->readField( $tag, 'title' ); |
98 | | - } elseif ( $tag == 'desc' ) { |
| 98 | + } elseif ( $this->qualifiedNameEquals( $tag, 'svg', 'desc' ) ) { |
99 | 99 | $this->readField( $tag, 'description' ); |
100 | | - } elseif ( $tag == 'metadata' && $type == XmlReader::ELEMENT ) { |
| 100 | + } elseif ( $this->qualifiedNameEquals( $tag, 'svg', 'metadata' ) && $type == XmlReader::ELEMENT ) { |
101 | 101 | $this->readXml( $tag, 'metadata' ); |
102 | 102 | } elseif ( $tag !== '#text' ) { |
103 | 103 | $this->debug( "Unhandled top-level XML tag $tag" ); |
— | — | @@ -172,10 +172,15 @@ |
173 | 173 | } elseif ( $this->reader->nodeType == XmlReader::ELEMENT ) { |
174 | 174 | switch( $this->reader->name ) { |
175 | 175 | case 'animate': |
| 176 | + case 'svg:animate': |
176 | 177 | case 'set': |
| 178 | + case 'svg:set': |
177 | 179 | case 'animateMotion': |
| 180 | + case 'svg:animateMotion': |
178 | 181 | case 'animateColor': |
| 182 | + case 'svg:animateColor': |
179 | 183 | case 'animateTransform': |
| 184 | + case 'svg:animateTransform': |
180 | 185 | $this->debug( "HOUSTON WE HAVE ANIMATION" ); |
181 | 186 | $this->metadata['animated'] = true; |
182 | 187 | break; |
— | — | @@ -284,4 +289,22 @@ |
285 | 290 | return floatval( $length ); |
286 | 291 | } |
287 | 292 | } |
| 293 | + |
| 294 | + /** |
| 295 | + * XML namespace check |
| 296 | + * |
| 297 | + * Check if a read node name matches the expected nodeName |
| 298 | + * @param $qualifiedName as read by XMLReader |
| 299 | + * @param $prefix the namespace prefix that you expect for this element, defaults to svg namespace |
| 300 | + * @param $localName the localName part of the element that you want to match |
| 301 | + * |
| 302 | + * @return boolean |
| 303 | + */ |
| 304 | + private function qualifiedNameEquals( $qualifiedName, $prefix="svg", $localName ) { |
| 305 | + if( ($qualifiedName == $localName && $prefix == "svg" ) || |
| 306 | + $qualifiedName == ($prefix . ":" . $localName) ) { |
| 307 | + return true; |
| 308 | + } |
| 309 | + return false; |
| 310 | + } |
288 | 311 | } |
Index: branches/REL1_17/phase3/includes/libs/CSSMin.php |
— | — | @@ -126,6 +126,17 @@ |
127 | 127 | $offset = $match[0][1] + strlen( $match[0][0] ); |
128 | 128 | continue; |
129 | 129 | } |
| 130 | + // URLs with absolute paths like /w/index.php need to be expanded |
| 131 | + // to absolute URLs but otherwise left alone |
| 132 | + if ( $match['file'][0] !== '' && $match['file'][0][0] === '/' ) { |
| 133 | + // Replace the file path with an expanded URL |
| 134 | + $source = substr_replace( $source, wfExpandUrl( $match['file'][0] ), |
| 135 | + $match['file'][1], strlen( $match['file'][0] ) |
| 136 | + ); |
| 137 | + // Move the offset to the end of the match, leaving it alone |
| 138 | + $offset = $match[0][1] + strlen( $match[0][0] ); |
| 139 | + continue; |
| 140 | + } |
130 | 141 | // Shortcuts |
131 | 142 | $embed = $match['embed'][0]; |
132 | 143 | $pre = $match['pre'][0]; |
Index: branches/REL1_17/phase3/includes/specials/SpecialNewpages.php |
— | — | @@ -366,7 +366,7 @@ |
367 | 367 | |
368 | 368 | $feed->outHeader(); |
369 | 369 | if( $pager->getNumRows() > 0 ) { |
370 | | - foreach ( $pager->mResult->fetchObject() as $row ) { |
| 370 | + foreach ( $pager->mResult as $row ) { |
371 | 371 | $feed->outItem( $this->feedItem( $row ) ); |
372 | 372 | } |
373 | 373 | } |
Index: branches/REL1_17/phase3/includes/specials/SpecialListfiles.php |
— | — | @@ -211,10 +211,8 @@ |
212 | 212 | ) ); |
213 | 213 | $s = Html::openElement( 'form', array( 'method' => 'get', 'action' => $wgScript, 'id' => 'mw-listfiles-form' ) ) . |
214 | 214 | Xml::fieldset( wfMsg( 'listfiles' ) ) . |
215 | | - Html::openElement( 'table', array( 'id' => 'mw-listfiles-table' ) ) . |
216 | 215 | Xml::buildForm( $inputForm, 'table_pager_limit_submit' ) . |
217 | 216 | $this->getHiddenFields( array( 'limit', 'ilsearch', 'user' ) ) . |
218 | | - Html::closeElement( 'table' ) . |
219 | 217 | Html::closeElement( 'fieldset' ) . |
220 | 218 | Html::closeElement( 'form' ) . "\n"; |
221 | 219 | return $s; |
Index: branches/REL1_17/phase3/includes/specials/SpecialContributions.php |
— | — | @@ -56,7 +56,7 @@ |
57 | 57 | $this->opts['contribs'] = 'newbie'; |
58 | 58 | } |
59 | 59 | |
60 | | - $this->opts['deletedOnly'] = $wgRequest->getCheck( 'deletedOnly' ); |
| 60 | + $this->opts['deletedOnly'] = $wgRequest->getBool( 'deletedOnly' ); |
61 | 61 | |
62 | 62 | if( !strlen( $target ) ) { |
63 | 63 | $wgOut->addHTML( $this->getForm() ); |
— | — | @@ -65,7 +65,7 @@ |
66 | 66 | |
67 | 67 | $this->opts['limit'] = $wgRequest->getInt( 'limit', $wgUser->getOption('rclimit') ); |
68 | 68 | $this->opts['target'] = $target; |
69 | | - $this->opts['topOnly'] = $wgRequest->getCheck( 'topOnly' ); |
| 69 | + $this->opts['topOnly'] = $wgRequest->getBool( 'topOnly' ); |
70 | 70 | |
71 | 71 | $nt = Title::makeTitleSafe( NS_USER, $target ); |
72 | 72 | if( !$nt ) { |
— | — | @@ -616,7 +616,6 @@ |
617 | 617 | $classes = array(); |
618 | 618 | |
619 | 619 | $page = Title::newFromRow( $row ); |
620 | | - $page->resetArticleId( $row->rev_page ); // use process cache |
621 | 620 | $link = $sk->link( |
622 | 621 | $page, |
623 | 622 | htmlspecialchars( $page->getPrefixedText() ), |
Index: branches/REL1_17/phase3/includes/specials/SpecialEmailuser.php |
— | — | @@ -90,7 +90,7 @@ |
91 | 91 | $this->outputHeader(); |
92 | 92 | |
93 | 93 | $this->mTarget = is_null( $par ) |
94 | | - ? $wgRequest->getVal( 'wpTarget', '' ) |
| 94 | + ? $wgRequest->getVal( 'wpTarget', $wgRequest->getVal( 'target', '' ) ) |
95 | 95 | : $par; |
96 | 96 | |
97 | 97 | $ret = self::getTarget( $this->mTarget ); |
Index: branches/REL1_17/phase3/includes/Import.php |
— | — | @@ -662,7 +662,7 @@ |
663 | 663 | return false; |
664 | 664 | } |
665 | 665 | |
666 | | - return array( $origTitle, $title ); |
| 666 | + return array( $title, $origTitle ); |
667 | 667 | } |
668 | 668 | } |
669 | 669 | |
Index: branches/REL1_17/phase3/includes/Pager.php |
— | — | @@ -899,7 +899,13 @@ |
900 | 900 | * @return Associative array |
901 | 901 | */ |
902 | 902 | function getRowAttrs( $row ) { |
903 | | - return array( 'class' => $this->getRowClass( $row ) ); |
| 903 | + $class = $this->getRowClass( $row ); |
| 904 | + if ( $class === '' ) { |
| 905 | + // Return an empty array to avoid clutter in HTML like class="" |
| 906 | + return array(); |
| 907 | + } else { |
| 908 | + return array( 'class' => $this->getRowClass( $row ) ); |
| 909 | + } |
904 | 910 | } |
905 | 911 | |
906 | 912 | /** |
Index: branches/REL1_17/phase3/includes/ImageGallery.php |
— | — | @@ -275,8 +275,12 @@ |
276 | 276 | $thumbhtml = "\n\t\t\t".'<div style="height: '.(30 + $this->mHeights).'px;">' |
277 | 277 | . htmlspecialchars( $img->getLastError() ) . '</div>'; |
278 | 278 | } else { |
279 | | - $vpad = floor(( 30 + $this->mHeights - $thumb->height ) /2); |
| 279 | + //We get layout problems with the margin, if the image is smaller |
| 280 | + //than the line-height, so we less margin in these cases. |
| 281 | + $minThumbHeight = $thumb->height > 17 ? $thumb->height : 17; |
| 282 | + $vpad = floor(( 30 + $this->mHeights - $minThumbHeight ) /2); |
280 | 283 | |
| 284 | + |
281 | 285 | $imageParameters = array( |
282 | 286 | 'desc-link' => true, |
283 | 287 | 'desc-query' => $descQuery |
— | — | @@ -288,11 +292,11 @@ |
289 | 293 | |
290 | 294 | # Set both fixed width and min-height. |
291 | 295 | $thumbhtml = "\n\t\t\t". |
292 | | - '<div class="thumb" style="width: ' .($this->mWidths+30).'px; height: ' .($this->mHeights+30).'px;">' |
| 296 | + '<div class="thumb" style="width: ' .($this->mWidths+30).'px;">' |
293 | 297 | # Auto-margin centering for block-level elements. Needed now that we have video |
294 | 298 | # handlers since they may emit block-level elements as opposed to simple <img> tags. |
295 | 299 | # ref http://css-discuss.incutio.com/?page=CenteringBlockElement |
296 | | - . '<div style="margin:'.$vpad.'px auto 0;">' |
| 300 | + . '<div style="margin:'.$vpad.'px auto;">' |
297 | 301 | . $thumb->toHtml( $imageParameters ) . '</div></div>'; |
298 | 302 | |
299 | 303 | // Call parser transform hook |
Index: branches/REL1_17/phase3/languages/classes/LanguageWa.php |
— | — | @@ -25,6 +25,7 @@ |
26 | 26 | ## # "<day> d' <monthname>" for months starting with a vowel |
27 | 27 | ## # |
28 | 28 | function date( $ts, $adj = false, $format = true, $tc = false ) { |
| 29 | + $ts = wfTimestamp( TS_MW, $ts ); |
29 | 30 | if ( $adj ) { $ts = $this->userAdjust( $ts, $tc ); } |
30 | 31 | $datePreference = $this->dateFormat( $format ); |
31 | 32 | |
Index: branches/REL1_17/phase3/RELEASE-NOTES |
— | — | @@ -510,6 +510,7 @@ |
511 | 511 | * (bug 26781) {{PAGENAME}} and related parser functions escape their output better. |
512 | 512 | * (bug 26716) Provide link to instructions for external editor related preferences |
513 | 513 | and add a comment to the ini control file explaining what is going on. |
| 514 | +* (bug 27560) Search queries no longer fail in walloon language |
514 | 515 | |
515 | 516 | === API changes in 1.17 === |
516 | 517 | * BREAKING CHANGE: action=patrol now requires POST |
— | — | @@ -520,6 +521,8 @@ |
521 | 522 | * (bug 27201) Special:WhatLinksHere output no longer contains duplicate IDs |
522 | 523 | * (bug 26560) On allusers if limit < total number of users, last user gets duplicate |
523 | 524 | * (bug 27715) imageinfo didn't respect revdelete |
| 525 | +* (bug 27479) API error when using both prop=pageprops and |
| 526 | + prop=info&inprop=displaytitle |
524 | 527 | |
525 | 528 | * (bug 22738) Allow filtering by action type on query=logevent. |
526 | 529 | * (bug 22764) uselang parameter for action=parse. |
Property changes on: branches/REL1_17/phase3/RELEASE-NOTES |
___________________________________________________________________ |
Modified: svn:mergeinfo |
527 | 530 | Merged /trunk/phase3/RELEASE-NOTES:r82297,82307,82309,82312,82315,82337,82391-82392,82403,82411,82446,82457,82466,82473,82475,82478,82482,82486 |