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