libreqr/less.php/lib/Less/Tree/Url.php

77 lines
1.8 KiB
PHP

<?php
/**
* Url
*
* @package Less
* @subpackage tree
*/
class Less_Tree_Url extends Less_Tree {
public $attrs;
public $value;
public $currentFileInfo;
public $isEvald;
public $type = 'Url';
public function __construct( $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_Functions $ctx
*/
public function compile( $ctx ) {
$val = $this->value->compile( $ctx );
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 Less_Tree_URL( $val, $this->currentFileInfo, true );
}
}