From 10f528e26549c83f9cd6a7b615c02edc2dfd92fd Mon Sep 17 00:00:00 2001 From: Daniel Kraus Date: Fri, 13 Jun 2014 17:15:09 +0200 Subject: [PATCH] Release version 3.0.0 --- LinkTitles.php | 46 +++++++++++++++++++------------- NEWS | 10 ++++++- gh-pages | 2 +- release/LinkTitles-3.0.0.tar.gz | Bin 0 -> 20177 bytes 4 files changed, 37 insertions(+), 21 deletions(-) create mode 100644 release/LinkTitles-3.0.0.tar.gz diff --git a/LinkTitles.php b/LinkTitles.php index 3392e40..c82e704 100755 --- a/LinkTitles.php +++ b/LinkTitles.php @@ -64,28 +64,39 @@ /// will process a page. If set to true in `LocalSettings.php`, links will /// be inserted whenever a page is edited and saved (unless 'minor /// modifications' is checked). If set to false, the extension will not do - /// anything when a page is edited - /// and saved. + /// anything when a page is edited and saved. Because saving a page + /// automatically invalidates the cache, the next time the page is + /// displayed (i.e., immediately after saving it), the extension might add + /// links if $wgLinkTitlesParseOnRender is set to true. /// @ingroup config $wgLinkTitlesParseOnEdit = true; - /// Less important configuration variable that determines when the + /// Important configuration variable that determines when the /// extension will process a page. If set to true in LocalSettings.php, - /// links will be inserted when a page is rendered for viewing. - /// @note Whether a page will be rendered or just fetched from the page - /// cache is unpredictable. Therefore, pages may not always be parsed for - /// possible links when this variable is set to true. - /// @warning Setting this to true has the potential to affect lots of page - /// views (but see note regarding cached pages). + /// links will be added whenever a page is rendered for viewing, after + /// templates have been expanded. + /// @note Since pages are cached, links may not appear immediately. + /// When links are added during the rendering process, they do not appear + /// as markup when the page is edited. This may or may not be the behavior + /// that you desire. Also note that if lots of templates or parser + /// functions are included, processing time may increase quite a bit, + /// causing gateway time-out errors of the web server. /// @ingroup config $wgLinkTitlesParseOnRender = false; /// Determines whether to parse text inside templates. If this is set to - /// true in LocalSettings.php, + /// true in LocalSettings.php, the parameters in a template will be parsed + /// (e.g., {{myTemplate|template parameter that may contain a page + /// title}}). + /// @note If pages are parsed when they are rendered (see + /// $wgLinkTitlesParseOnRender setting), this setting does not take + /// effect. /// @ingroup config $wgLinkTitlesSkipTemplates = false; /// Blacklist of page titles that should never be linked. + /// @note See also: __NOAUTOLINKTARGET__ magic word to allow wiki users to + /// blacklist a page dynamically. /// @ingroup config $wgLinkTitlesBlackList = array(); @@ -93,7 +104,6 @@ /// title on a page or all occurrences. Default is false: All occurrences /// on a page are linked. /// @ingroup config - $wgLinkTitlesFirstOnly = false; /// Determines whether a page title must occur at the start of a word in @@ -144,9 +154,8 @@ $wgLinkTitlesSmartMode = true; /// Determines whether or not to check if a page redirects to the current - /// page. Normally one would want to have the default behavior (true), but - /// this check requires a time-consuming database query for every page in - /// the wiki. + /// page. This check requires that the extension fetches the page content + /// of a potential target page from the database, which costs time. /// @note For maximum performance, set both $wgLinkTitlesCheckRedirect and /// $wgLinkTitlesEnableNoTargetMagicWord to false in LocalSettings.php. /// On the developer's machine, fetching the target page content increased @@ -154,8 +163,7 @@ /// (Intel Core i5-3320M, 2x 2.6 GHz, 16 GB RAM, PHP 5.5.9, Apache 2.4.7, /// MySQL 5.5.37, MediaWiki 1.23.0). If any of the two mentioned variables /// is set to true, a page content request will be performed for every - /// page in the wiki whenever a single page is edited or parsed in batch - /// mode. + /// page whose title occurs on a given page. /// @ingroup config $wgLinkTitlesCheckRedirect = true; @@ -170,14 +178,14 @@ /// (Intel Core i5-3320M, 2x 2.6 GHz, 16 GB RAM, PHP 5.5.9, Apache 2.4.7, /// MySQL 5.5.37, MediaWiki 1.23.0). If any of the two mentioned variables /// is set to true, a page content request will be performed for every - /// page in the wiki whenever a single page is edited or parsed in batch - /// mode. + /// page whose title occurs on a given page. /// @ingroup config $wgLinkTitlesEnableNoTargetMagicWord = true; /// Time limit for online batch processing. This determines the maximum /// amount of time in seconds that page processing will take before a /// refresh of the special page is issued. + /// @note See SpecialLinkTitles class. /// @ingroup config $wgLinkTitlesTimeLimit = 0.2; @@ -187,7 +195,7 @@ 'name' => 'LinkTitles', 'author' => '[https://www.mediawiki.org/wiki/User:Bovender Daniel Kraus]', 'url' => 'https://www.mediawiki.org/wiki/Extension:LinkTitles', - 'version' => '2.4.2', + 'version' => '3.0.0', 'descriptionmsg' => 'linktitles-desc' ); diff --git a/NEWS b/NEWS index 2a9d8bd..dc65b83 100644 --- a/NEWS +++ b/NEWS @@ -1,3 +1,11 @@ +LinkTitles 3.0.0: 2014-06-13 +* Dramatically improved performance (especially apparent during batch + processing). +* Change algorithm for parse-on-render so that it also adds links to + expanded templates. +* Make code fully compatible with the current MediaWiki version 1.23 by + removing deprecated hooks. Minimum required MediaWiki version is now 1.21. + LinkTitles 2.4.1: 2014-06-06 * The ZIP file for 2.4.0 had missing files. @@ -108,4 +116,4 @@ LinkTitles 0.0.2: 2012-05-20 LinkTitles 0.0.1: 2012-05-20 * Initial release. -# vim: tw=76:fo=tqn:flp=^\\*\\s+ +# vim: tw=76:fo=tqn:fo=tcroqn:flp=^\\*\\s+:comments=\:# diff --git a/gh-pages b/gh-pages index 5c3bdd5..54c88f4 160000 --- a/gh-pages +++ b/gh-pages @@ -1 +1 @@ -Subproject commit 5c3bdd596d611059d57a55aa371ee78a82eb0e08 +Subproject commit 54c88f4ed7419638f818a7480955d1622eac4e5f diff --git a/release/LinkTitles-3.0.0.tar.gz b/release/LinkTitles-3.0.0.tar.gz new file mode 100644 index 0000000000000000000000000000000000000000..94840eb5c59644c05c5a2300dbbe9c5f5e0511a4 GIT binary patch literal 20177 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