File: Url.php

package info (click to toggle)
mediawiki 1%3A1.43.3%2Bdfsg-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 417,464 kB
  • sloc: php: 1,062,949; javascript: 664,290; sql: 9,714; python: 5,458; xml: 3,489; sh: 1,131; makefile: 64
file content (76 lines) | stat: -rw-r--r-- 1,956 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
<?php
/**
 * @private
 */
class Less_Tree_Url extends Less_Tree implements Less_Tree_HasValueProperty {

	public $attrs;
	public $value;
	public $currentFileInfo;
	public $isEvald;

	/**
	 * @param Less_Tree_Variable|Less_Tree_Quoted|Less_Tree_Anonymous $value
	 * @param array|null $currentFileInfo
	 * @param bool|null $isEvald
	 */
	public function __construct( Less_Tree $value, $currentFileInfo = null, $isEvald = null ) {
		$this->value = $value;
		$this->currentFileInfo = $currentFileInfo;
		$this->isEvald = $isEvald;
	}

	public function accept( $visitor ) {
		$this->value = $visitor->visitObj( $this->value );
	}

	/**
	 * @see Less_Tree::genCSS
	 */
	public function genCSS( $output ) {
		$output->add( 'url(' );
		$this->value->genCSS( $output );
		$output->add( ')' );
	}

	/**
	 * @param Less_Environment $env
	 */
	public function compile( $env ) {
		$val = $this->value->compile( $env );

		if ( !$this->isEvald ) {
			// Add the base path if the URL is relative
			if ( Less_Parser::$options['relativeUrls']
				&& $this->currentFileInfo
				&& is_string( $val->value )
				&& Less_Environment::isPathRelative( $val->value )
			) {
				$rootpath = $this->currentFileInfo['uri_root'];
				if ( !$val->quote ) {
					$rootpath = preg_replace( '/[\(\)\'"\s]/', '\\$1', $rootpath );
				}
				$val->value = $rootpath . $val->value;
			}

			$val->value = Less_Environment::normalizePath( $val->value );
		}

		// Add cache buster if enabled
		if ( Less_Parser::$options['urlArgs'] ) {
			if ( !preg_match( '/^\s*data:/', $val->value ) ) {
				$delimiter = strpos( $val->value, '?' ) === false ? '?' : '&';
				$urlArgs = $delimiter . Less_Parser::$options['urlArgs'];
				$hash_pos = strpos( $val->value, '#' );
				if ( $hash_pos !== false ) {
					$val->value = substr_replace( $val->value, $urlArgs, $hash_pos, 0 );
				} else {
					$val->value .= $urlArgs;
				}
			}
		}

		return new self( $val, $this->currentFileInfo, true );
	}

}