Index: trunk/extensions/ArticleFeedbackv5/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.special.js |
— | — | @@ -1,8 +1,7 @@ |
2 | 2 | ( function ( $ ) { |
3 | 3 | $.articleFeedbackv5special = {}; |
4 | 4 | |
5 | | - // TODO: Pass this in better from the PHP side. |
6 | | - $.articleFeedbackv5special.page = hackPageId; |
| 5 | + $.articleFeedbackv5special.page = undefined; |
7 | 6 | $.articleFeedbackv5special.filter = 'visible'; |
8 | 7 | $.articleFeedbackv5special.sort = 'newest'; |
9 | 8 | $.articleFeedbackv5special.limit = 25; |
— | — | @@ -128,6 +127,7 @@ |
129 | 128 | // This was failing sometimes when it was in the function above. |
130 | 129 | // I think it maky have been a race condition. |
131 | 130 | $.articleFeedbackv5special.apiUrl = mw.util.wikiScript('api'); |
| 131 | + $.articleFeedbackv5special.page = mw.config.get( 'afPageId' ); |
132 | 132 | |
133 | 133 | // Set up event binds and do initial data fetch. |
134 | 134 | $.articleFeedbackv5special.setBinds(); |
Index: trunk/extensions/ArticleFeedbackv5/SpecialArticleFeedbackv5.php |
— | — | @@ -5,13 +5,12 @@ |
6 | 6 | } |
7 | 7 | |
8 | 8 | public function execute( $param ) { |
9 | | - global $wgOut; |
10 | | - |
| 9 | + $out = $this->getOutput(); |
11 | 10 | $title = Title::newFromText( $param ); |
12 | 11 | if ( $title ) { |
13 | 12 | $pageId = $title->getArticleID(); |
14 | 13 | } else { |
15 | | - $wgOut->addWikiMsg( 'articlefeedbackv5-invalid-page-id' ); |
| 14 | + $out->addWikiMsg( 'articlefeedbackv5-invalid-page-id' ); |
16 | 15 | return; |
17 | 16 | } |
18 | 17 | |
— | — | @@ -19,72 +18,92 @@ |
20 | 19 | $found = isset( $ratings['found'] ) ? $ratings['found'] : null; |
21 | 20 | $rating = isset( $ratings['rating'] ) ? $ratings['rating'] : null; |
22 | 21 | |
23 | | - $wgOut->setPagetitle( "Feedback for $title" ); |
| 22 | + $out->setPagetitle( "Feedback for $title" ); |
24 | 23 | |
25 | 24 | if( !$pageId ) { |
26 | | - $wgOut->addWikiMsg( 'articlefeedbackv5-invalid-page-id' ); |
| 25 | + $out->addWikiMsg( 'articlefeedbackv5-invalid-page-id' ); |
27 | 26 | } else { |
28 | | - $wgOut->addHTML( |
| 27 | + $out->addHTML( |
29 | 28 | Linker::link( |
30 | 29 | Title::newFromText( $param ), |
31 | | - wfMessage( 'articlefeedbackv5-go-to-article' )->escaped() |
| 30 | + $this->msg( 'articlefeedbackv5-go-to-article' )->escaped() |
32 | 31 | ) |
33 | 32 | .' | '. |
34 | 33 | Linker::link( |
35 | 34 | Title::newFromText( $param ), |
36 | | - wfMessage( 'articlefeedbackv5-discussion-page' )->escaped() |
| 35 | + $this->msg( 'articlefeedbackv5-discussion-page' )->escaped() |
37 | 36 | ) |
38 | 37 | .' | '. |
39 | 38 | Linker::link( |
40 | 39 | Title::newFromText( $param ), |
41 | | - wfMessage( 'articlefeedbackv5-whats-this' )->escaped() |
| 40 | + $this->msg( 'articlefeedbackv5-whats-this' )->escaped() |
42 | 41 | ) |
43 | 42 | ); |
44 | 43 | } |
45 | 44 | |
46 | 45 | if( $found ) { |
47 | | - $wgOut->addWikiMsg( 'articlefeedbackv5-percent-found', $found ); |
| 46 | + $out->addWikiMsg( 'articlefeedbackv5-percent-found', $found ); |
48 | 47 | } |
49 | 48 | |
50 | 49 | if( $rating ) { |
51 | | - $wgOut->addWikiMsg( 'articlefeedbackv5-overall-rating', $rating); |
| 50 | + $out->addWikiMsg( 'articlefeedbackv5-overall-rating', $rating); |
52 | 51 | } |
53 | 52 | |
54 | | - $wgOut->addWikiMsg( 'articlefeedbackv5-special-title' ); |
| 53 | + $out->addWikiMsg( 'articlefeedbackv5-special-title' ); |
55 | 54 | |
56 | | - $showing = wfMessage( |
| 55 | + $showing = $this->msg( |
57 | 56 | 'articlefeedbackv5-special-showing', |
58 | | - '<span id="aft5-feedback-count-shown">0</span>', |
59 | | - '<span id="aft5-feedback-count-total">0</span>' |
| 57 | + Html::element( 'span', array( 'id' => 'aft-feedback-count-shown' ), '0'), |
| 58 | + Html::element( 'span', array( 'id' => 'aft-feedback-count-total' ), '0') |
60 | 59 | ); |
61 | 60 | |
62 | | - $wgOut->addHTML(' |
63 | | -<script> var hackPageId = '.$pageId.'; </script> |
64 | | -<script src="/extensions/ArticleFeedbackv5/modules/jquery.articleFeedbackv5/jquery.articleFeedbackv5.special.js"></script>' |
65 | | -.wfMessage('articlefeedbackv5-special-filter-label-before')->escaped() |
66 | | -.'<select id="aft5-filter"> |
67 | | - <option value="visible">'.wfMessage( 'articlefeedbackv5-special-filter-visible' )->escaped().'</option> |
68 | | - <option value="invisible">'.wfMessage( 'articlefeedbackv5-special-filter-invisible' )->escaped().'</option> |
69 | | - <option value="all">'.wfMessage( 'articlefeedbackv5-special-filter-all' )->escaped().'</option> |
70 | | -</select>' |
71 | | -.wfMessage('articlefeedbackv5-special-filter-label-after')->escaped() |
72 | | -.' | ' |
73 | | -.wfMessage('articlefeedbackv5-special-sort-label-before')->escaped() |
74 | | -.'<select id="aft5-sort"> |
75 | | - <option value="newest">'.wfMessage( 'articlefeedbackv5-special-sort-newest' )->escaped().'</option> |
76 | | - <option value="oldest">'.wfMessage( 'articlefeedbackv5-special-sort-oldest' )->escaped().'</option> |
77 | | -</select>' |
78 | | -.wfMessage('articlefeedbackv5-special-sort-label-after')->escaped() |
79 | | -.'<br> |
80 | | -<span id="aft5-showing"> '.$showing.' </span> |
81 | | -<br> |
82 | | -<div style="border:1px solid red;" id="aft5-show-feedback"></div> |
83 | | -<a href="#" id="aft5-show-more">' |
84 | | -.wfMessage( 'articlefeedbackv5-special-more' )->escaped() |
85 | | -.'</a> |
86 | | - '); |
| 61 | + $out->addJsConfigVars( 'afPageId', $pageId ); |
| 62 | + $out->addModules( 'jquery.articleFeedbackv5.special' ); |
| 63 | + |
| 64 | + $filterSelect = new XmlSelect( false, 'aft5-filter' ); |
| 65 | + $filterSelect->addOptions( $this->selectMsg( array( |
| 66 | + 'articlefeedbackv5-special-filter-visible' => 'visible', |
| 67 | + 'articlefeedbackv5-special-filter-invisible' => 'invisible', |
| 68 | + 'articlefeedbackv5-special-filter-all' => 'all', |
| 69 | + ) ) ); |
| 70 | + |
| 71 | + $sortSelect = new XmlSelect( false, 'aft5-sort' ); |
| 72 | + $sortSelect->addOptions( $this->selectMsg( array( |
| 73 | + 'articlefeedbackv5-special-sort-newest' => 'newest', |
| 74 | + 'articlefeedbackv5-special-sort-oldest' => 'oldest', |
| 75 | + ) ) ); |
| 76 | + |
| 77 | + $out->addHTML($this->msg('articlefeedbackv5-special-filter-label-before')->escaped() |
| 78 | + . $filterSelect->getHTML() |
| 79 | + . $this->msg('articlefeedbackv5-special-filter-label-after')->escaped() |
| 80 | + . ' | ' |
| 81 | + . $this->msg('articlefeedbackv5-special-sort-label-before')->escaped() |
| 82 | + . $sortSelect->getHTML() |
| 83 | + . $this->msg('articlefeedbackv5-special-sort-label-after')->escaped() |
| 84 | + . Html::element( 'span', array( 'id' => 'aft-showing' ), $showing ) |
| 85 | + . Html::element( 'div', array( 'id' => 'aft5-show-feedback', |
| 86 | + 'style' => 'border:1px solid red;' ), '' ) |
| 87 | + . Html::element( 'a', array( 'href' => '#', 'id' => 'aft5-show-more' ), |
| 88 | + $this->msg( 'articlefeedbackv5-special-more' )->escaped() ) |
| 89 | + ); |
87 | 90 | } |
88 | 91 | |
| 92 | + /** |
| 93 | + * Takes an associative array of label to value and converts the message |
| 94 | + * names into localized strings |
| 95 | + * |
| 96 | + * @param array $options |
| 97 | + * @return array |
| 98 | + */ |
| 99 | + private function selectMsg( array $options ) { |
| 100 | + $newOpts = array(); |
| 101 | + foreach ( $options as $label => $value ) { |
| 102 | + $newOpts[$this->msg( $label )->escaped()] = $value; |
| 103 | + } |
| 104 | + |
| 105 | + return $newOpts; |
| 106 | + } |
| 107 | + |
89 | 108 | private function fetchOverallRating( $pageId ) { |
90 | 109 | $rv = array(); |
91 | 110 | $dbr = wfGetDB( DB_SLAVE ); |
— | — | @@ -114,10 +133,4 @@ |
115 | 134 | |
116 | 135 | return $rv; |
117 | 136 | } |
118 | | - |
119 | | - |
120 | | - protected static function formatNumber( $number ) { |
121 | | - global $wgLang; |
122 | | - return $wgLang->formatNum( number_format( $number, 2 ) ); |
123 | | - } |
124 | 137 | } |