From 39273d2c67ef201c30e19a66c3923ff1979fd66b Mon Sep 17 00:00:00 2001 From: Aryeh Gregor Date: Mon, 28 Jul 2008 23:52:55 +0000 Subject: [PATCH] Recommit r38149, with the fatal error fixed. The EditSectionLinkForOther hook is now removed entirely -- EditSectionLink is run unconditionally instead. This is extremely unlikely to break any extensions. --- RELEASE-NOTES | 5 +++ docs/hooks.txt | 21 ++++++------ includes/Linker.php | 66 +++++++++++++++++++++----------------- includes/parser/Parser.php | 4 +-- 4 files changed, 56 insertions(+), 40 deletions(-) diff --git a/RELEASE-NOTES b/RELEASE-NOTES index 2975b06806..e89a0c51a1 100644 --- a/RELEASE-NOTES +++ b/RELEASE-NOTES @@ -29,6 +29,11 @@ it from source control: http://www.mediawiki.org/wiki/Download_from_SVN * (bug 8068) New __INDEX__ and __NOINDEX__ magic words allow user control of search engine indexing on a per-article basis. * Handheld stylesheet options +* Added 'DoEditSectionLink' hook as a cleaner unified version of the old + 'EditSectionLink' and 'EditSectionLinkForOther' hooks. Note that the + 'EditSectionLinkForOther' hook has been removed, but 'EditSectionLink' is + run in all cases instead, so extensions using the old hooks should still work + if they ran roughly the same code for both hooks (as is almost certain). === Bug fixes in 1.14 === diff --git a/docs/hooks.txt b/docs/hooks.txt index 2ef8cc97ed..98ceb42681 100644 --- a/docs/hooks.txt +++ b/docs/hooks.txt @@ -533,6 +533,17 @@ $newRev: Revision object of the "new" revision $article: article (object) being viewed $oldid: oldid (int) being viewed +'DoEditSectionLink': Override the HTML generated for section edit links +$skin: Skin object rendering the UI +$title: Title object for the title being linked to (may not be the same as + $wgTitle, if the section is included from a template) +$section: The designation of the section being pointed to, to be included in + the link, like "§ion=$section" +$tooltip: The default tooltip. Escape with htmlspecialchars() before using. + By default, this is wrapped in the 'editsectionhint' message. +$result: The HTML to return, prefilled with the default plus whatever other + changes earlier hooks have made + 'EditFilter': Perform checks on an edit $editor: Edit form (see includes/EditPage.php) $text: Contents of the edit box @@ -579,18 +590,10 @@ sections. &$editpage: The current EditPage object &$buttons: Array of edit buttons "Save", "Preview", "Live", and "Diff" -'EditSectionLink': Override the return value of Linker::editSectionLink() -$skin: Skin rendering the UI -$title: Title being linked to -$section: Section to link to -$link: Default link -$result: Result (alter this to override the generated links) - -'EditSectionLinkForOther': Override the return value of Linker::editSectionLinkForOther() +'EditSectionLink': Do not use, use DoEditSectionLink instead. $skin: Skin rendering the UI $title: Title being linked to $section: Section to link to -$hint: Anchor title/tooltip attributes $link: Default link $result: Result (alter this to override the generated links) diff --git a/includes/Linker.php b/includes/Linker.php index 03e7a9eb22..0661e3701e 100644 --- a/includes/Linker.php +++ b/includes/Linker.php @@ -1276,6 +1276,7 @@ class Linker { * @param $section Integer: section number. */ public function editSectionLinkForOther( $title, $section ) { + wfDeprecated( __METHOD__ ); $title = Title::newFromText( $title ); return $this->doEditSectionLink( $title, $section, '', 'EditSectionLinkForOther' ); } @@ -1286,48 +1287,55 @@ class Linker { * @param $hint Link String: title, or default if omitted or empty */ public function editSectionLink( Title $nt, $section, $hint='' ) { - if( $hint != '' ) { - $hint = wfMsgHtml( 'editsectionhint', htmlspecialchars( $hint ) ); - $hint = " title=\"$hint\""; - } + wfDeprecated( __METHOD__ ); return $this->doEditSectionLink( $nt, $section, $hint, 'EditSectionLink' ); } /** - * Implement editSectionLink and editSectionLinkForOther. + * Create a section edit link. This supersedes editSectionLink() and + * editSectionLinkForOther(). * - * @param $nt Title object - * @param $section Integer, section number - * @param $hint String, for HTML title attribute - * @param $hook String, name of hook to run - * @return String, HTML to use for edit link + * @param $nt Title The title being linked to (may not be the same as + * $wgTitle, if the section is included from a template) + * @param $section string The designation of the section being pointed to, + * to be included in the link, like "§ion=$section" + * @param $tooltip string The tooltip to use for the link: will be escaped + * and wrapped in the 'editsectionhint' message + * @return string HTML to use for edit link */ - protected function doEditSectionLink( Title $nt, $section, $hint, $hook ) { - global $wgContLang; - $editurl = '§ion='.$section; + public function doEditSectionLink( Title $nt, $section, $tooltip='' ) { + $attribs = ''; + if( $tooltip ) { + $attribs = wfMsgHtml( 'editsectionhint', htmlspecialchars( $tooltip ) ); + $attribs = " title=\"$attribs\""; + } + $url = $this->makeKnownLinkObj( $nt, htmlspecialchars(wfMsg('editsection')), - 'action=edit'.$editurl, - '', '', '', $hint + "action=edit§ion=$section", + '', '', '', $attribs ); - $result = null; - - // The two hooks have slightly different interfaces . . . - if( $hook == 'EditSectionLink' ) { - wfRunHooks( 'EditSectionLink', array( &$this, $nt, $section, $hint, $url, &$result ) ); - } elseif( $hook == 'EditSectionLinkForOther' ) { - wfRunHooks( 'EditSectionLinkForOther', array( &$this, $nt, $section, $url, &$result ) ); - } - // For reverse compatibility, add the brackets *after* the hook is run, - // and even add them to hook-provided text. - if( is_null( $result ) ) { + # Run the old hook + $result = null; + wfRunHooks( 'EditSectionLink', array( &$this, $nt, $section, $attribs, $url, &$result ) ); + if( !is_null( $result ) ) { + # For reverse compatibility, add the brackets *after* the hook is + # run, and even add them to hook-provided text. (This is the main + # reason that the EditSectionLink hook is deprecated in favor of + # DoEditSectionLink: it can't change the brackets or the span.) $result = wfMsgHtml( 'editsection-brackets', $url ); - } else { - $result = wfMsgHtml( 'editsection-brackets', $result ); + return "$result"; } - return "$result"; + + # Add the brackets and the span, and *then* run the nice new hook, with + # clean and non-redundant arguments. + $result = wfMsgHtml( 'editsection-brackets', $url ); + $result = "$result"; + + wfRunHooks( 'DoEditSectionLink', array( $this, $nt, $section, $tooltip, &$result ) ); + return $result; } /** diff --git a/includes/parser/Parser.php b/includes/parser/Parser.php index 7f00824d77..c074717b0f 100644 --- a/includes/parser/Parser.php +++ b/includes/parser/Parser.php @@ -3609,9 +3609,9 @@ class Parser if( $isTemplate ) { # Put a T flag in the section identifier, to indicate to extractSections() # that sections inside should be counted. - $editlink = $sk->editSectionLinkForOther($titleText, "T-$sectionIndex"); + $editlink = $sk->doEditSectionLink(Title::newFromText( $titleText ), "T-$sectionIndex"); } else { - $editlink = $sk->editSectionLink($this->mTitle, $sectionIndex, $headlineHint); + $editlink = $sk->doEditSectionLink($this->mTitle, $sectionIndex, $headlineHint); } } else { $editlink = ''; -- 2.20.1