| Index: trunk/phase3/includes/CoreParserFunctions.php |
| — | — | @@ -42,6 +42,7 @@ |
| 43 | 43 | $parser->setFunctionHook( 'defaultsort', array( __CLASS__, 'defaultsort' ), SFH_NO_HASH ); |
| 44 | 44 | $parser->setFunctionHook( 'filepath', array( __CLASS__, 'filepath' ), SFH_NO_HASH ); |
| 45 | 45 | $parser->setFunctionHook( 'pagesincategory', array( __CLASS__, 'pagesincategory' ), SFH_NO_HASH ); |
| | 46 | + $parser->setFunctionHook( 'pagesize', array( __CLASS__, 'pagesize' ), SFH_NO_HASH ); |
| 46 | 47 | $parser->setFunctionHook( 'tag', array( __CLASS__, 'tagObj' ), SFH_OBJECT_ARGS ); |
| 47 | 48 | |
| 48 | 49 | if ( $wgAllowDisplayTitle ) { |
| — | — | @@ -241,6 +242,43 @@ |
| 242 | 243 | return self::formatRaw( $count, $raw ); |
| 243 | 244 | } |
| 244 | 245 | |
| | 246 | + /** |
| | 247 | + * Return the size of the given page, or 0 if it's nonexistent. This is an |
| | 248 | + * expensive parser function and can't be called too many times per page. |
| | 249 | + * |
| | 250 | + * @FIXME This doesn't work correctly on preview for getting the size of |
| | 251 | + * the current page. |
| | 252 | + * @FIXME Title::getLength() documentation claims that it adds things to |
| | 253 | + * the link cache, so the local cache here should be unnecessary, but in |
| | 254 | + * fact calling getLength() repeatedly for the same $page does seem to |
| | 255 | + * run one query for each call? |
| | 256 | + */ |
| | 257 | + static function pagesize( $parser, $page = '', $raw = null ) { |
| | 258 | + static $cache = array(); |
| | 259 | + $title = Title::newFromText($page); |
| | 260 | + |
| | 261 | + if( !is_object( $title ) ) { |
| | 262 | + $cache[$page] = 0; |
| | 263 | + return self::formatRaw( 0, $raw ); |
| | 264 | + } |
| | 265 | + |
| | 266 | + # Normalize name for cache |
| | 267 | + $page = $title->getPrefixedText(); |
| | 268 | + |
| | 269 | + $length = 0; |
| | 270 | + if( isset( $cache[$page] ) ) { |
| | 271 | + $length = $cache[$page]; |
| | 272 | + } elseif( $parser->incrementExpensiveFunctionCount() ) { |
| | 273 | + $length = $cache[$page] = $title->getLength(); |
| | 274 | + |
| | 275 | + // Register dependency in templatelinks |
| | 276 | + $id = $title->getArticleId(); |
| | 277 | + $revid = Revision::newFromTitle($title); |
| | 278 | + $parser->mOutput->addTemplate($title, $id, $revid); |
| | 279 | + } |
| | 280 | + return self::formatRaw( $length, $raw ); |
| | 281 | + } |
| | 282 | + |
| 245 | 283 | static function language( $parser, $arg = '' ) { |
| 246 | 284 | global $wgContLang; |
| 247 | 285 | $lang = $wgContLang->getLanguageName( strtolower( $arg ) ); |
| Index: trunk/phase3/languages/messages/MessagesEn.php |
| — | — | @@ -339,6 +339,7 @@ |
| 340 | 340 | 'tag' => array( 0, 'tag' ), |
| 341 | 341 | 'hiddencat' => array( 1, '__HIDDENCAT__' ), |
| 342 | 342 | 'pagesincategory' => array( 1, 'PAGESINCATEGORY', 'PAGESINCAT' ), |
| | 343 | + 'pagesize' => array( 1, 'PAGESIZE' ), |
| 343 | 344 | ); |
| 344 | 345 | |
| 345 | 346 | /** |
| Index: trunk/phase3/RELEASE-NOTES |
| — | — | @@ -82,6 +82,7 @@ |
| 83 | 83 | * Allow \C and \Q as TeX commands to match \R, \N, \Z |
| 84 | 84 | * On Special:UserRights, when you can add a group you can't remove or remove |
| 85 | 85 | one you can't add, a notice is printed to warn you |
| | 86 | +* (bug 12698) Create PAGESIZE parser function, to return the size of a page |
| 86 | 87 | |
| 87 | 88 | === Bug fixes in 1.13 === |
| 88 | 89 | |