JavaScriptContent::getHtml()   A
last analyzed

Complexity

Conditions 1
Paths 1

Size

Total Lines 8
Code Lines 6

Duplication

Lines 8
Ratio 100 %

Importance

Changes 0
Metric Value
cc 1
eloc 6
nc 1
nop 0
dl 8
loc 8
rs 9.4285
c 0
b 0
f 0
1
<?php
2
/**
3
 * Content for JavaScript pages.
4
 *
5
 * This program is free software; you can redistribute it and/or modify
6
 * it under the terms of the GNU General Public License as published by
7
 * the Free Software Foundation; either version 2 of the License, or
8
 * (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License along
16
 * with this program; if not, write to the Free Software Foundation, Inc.,
17
 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
18
 * http://www.gnu.org/copyleft/gpl.html
19
 *
20
 * @since 1.21
21
 *
22
 * @file
23
 * @ingroup Content
24
 *
25
 * @author Daniel Kinzler
26
 */
27
28
/**
29
 * Content for JavaScript pages.
30
 *
31
 * @ingroup Content
32
 */
33 View Code Duplication
class JavaScriptContent extends TextContent {
0 ignored issues
show
Duplication introduced by
This class seems to be duplicated in your project.

Duplicated code is one of the most pungent code smells. If you need to duplicate the same code in three or more different places, we strongly encourage you to look into extracting the code into a single class or operation.

You can also find more detailed suggestions in the “Code” section of your repository.

Loading history...
34
35
	/**
36
	 * @var bool|Title|null
37
	 */
38
	private $redirectTarget = false;
39
40
	/**
41
	 * @param string $text JavaScript code.
42
	 * @param string $modelId the content model name
43
	 */
44
	public function __construct( $text, $modelId = CONTENT_MODEL_JAVASCRIPT ) {
45
		parent::__construct( $text, $modelId );
46
	}
47
48
	/**
49
	 * Returns a Content object with pre-save transformations applied using
50
	 * Parser::preSaveTransform().
51
	 *
52
	 * @param Title $title
53
	 * @param User $user
54
	 * @param ParserOptions $popts
55
	 *
56
	 * @return JavaScriptContent
57
	 */
58
	public function preSaveTransform( Title $title, User $user, ParserOptions $popts ) {
59
		global $wgParser;
60
		// @todo Make pre-save transformation optional for script pages
61
		// See bug #32858
62
63
		$text = $this->getNativeData();
64
		$pst = $wgParser->preSaveTransform( $text, $title, $user, $popts );
65
66
		return new static( $pst );
67
	}
68
69
	/**
70
	 * @return string JavaScript wrapped in a <pre> tag.
71
	 */
72
	protected function getHtml() {
73
		$html = "";
74
		$html .= "<pre class=\"mw-code mw-js\" dir=\"ltr\">\n";
75
		$html .= htmlspecialchars( $this->getNativeData() );
76
		$html .= "\n</pre>\n";
77
78
		return $html;
79
	}
80
81
	/**
82
	 * If this page is a redirect, return the content
83
	 * if it should redirect to $target instead
84
	 *
85
	 * @param Title $target
86
	 * @return JavaScriptContent
87
	 */
88
	public function updateRedirect( Title $target ) {
89
		if ( !$this->isRedirect() ) {
90
			return $this;
91
		}
92
93
		return $this->getContentHandler()->makeRedirectContent( $target );
94
	}
95
96
	/**
97
	 * @return Title|null
98
	 */
99
	public function getRedirectTarget() {
100
		if ( $this->redirectTarget !== false ) {
101
			return $this->redirectTarget;
102
		}
103
		$this->redirectTarget = null;
104
		$text = $this->getNativeData();
105
		if ( strpos( $text, '/* #REDIRECT */' ) === 0 ) {
106
			// Extract the title from the url
107
			preg_match( '/title=(.*?)\\\\u0026action=raw/', $text, $matches );
108
			if ( isset( $matches[1] ) ) {
109
				$title = Title::newFromText( $matches[1] );
110
				if ( $title ) {
111
					// Have a title, check that the current content equals what
112
					// the redirect content should be
113
					if ( $this->equals( $this->getContentHandler()->makeRedirectContent( $title ) ) ) {
114
						$this->redirectTarget = $title;
115
					}
116
				}
117
			}
118
		}
119
120
		return $this->redirectTarget;
121
	}
122
123
}
124