| 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 |