From 6fce50343246d98462ac00f289812b082167aa78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20Haso=C5=88?= Date: Mon, 12 Nov 2012 15:23:36 +0100 Subject: [PATCH] [Templating] Added ability to set a specific version of the asset --- .../TwigBundle/Extension/AssetsExtension.php | 11 +++++----- .../Component/Templating/Asset/Package.php | 20 +++++++++++++------ .../Templating/Asset/PackageInterface.php | 5 +++-- .../Templating/Asset/PathPackage.php | 7 +++++-- .../Component/Templating/Asset/UrlPackage.php | 7 +++++-- src/Symfony/Component/Templating/CHANGELOG.md | 5 +++++ .../Templating/Helper/CoreAssetsHelper.php | 9 +++++---- .../Tests/Helper/AssetsHelperTest.php | 8 ++++++++ 8 files changed, 51 insertions(+), 21 deletions(-) diff --git a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php index 9dd6a2b96314..0bcfd1199433 100644 --- a/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php +++ b/src/Symfony/Bundle/TwigBundle/Extension/AssetsExtension.php @@ -48,15 +48,16 @@ public function getFunctions() * * Absolute paths (i.e. http://...) are returned unmodified. * - * @param string $path A public path - * @param string $packageName The name of the asset package to use - * @param Boolean $absolute Whether to return an absolute URL or a relative one + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * @param Boolean $absolute Whether to return an absolute URL or a relative one + * @param string|Boolean|null $version A specific version * * @return string A public path which takes into account the base path and URL path */ - public function getAssetUrl($path, $packageName = null, $absolute = false) + public function getAssetUrl($path, $packageName = null, $absolute = false, $version = null) { - $url = $this->container->get('templating.helper.assets')->getUrl($path, $packageName); + $url = $this->container->get('templating.helper.assets')->getUrl($path, $packageName, $version); if (!$absolute) { return $url; diff --git a/src/Symfony/Component/Templating/Asset/Package.php b/src/Symfony/Component/Templating/Asset/Package.php index 58d6ef45c442..bb7bef23f0c0 100644 --- a/src/Symfony/Component/Templating/Asset/Package.php +++ b/src/Symfony/Component/Templating/Asset/Package.php @@ -33,34 +33,42 @@ public function __construct($version = null, $format = '') $this->format = $format ?: '%s?%s'; } + /** + * {@inheritdoc} + */ public function getVersion() { return $this->version; } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - return $this->applyVersion($path); + return $this->applyVersion($path, $version); } /** * Applies version to the supplied path. * - * @param string $path A path + * @param string $path A path + * @param string|Boolean|null $version A specific version * * @return string The versionized path */ - protected function applyVersion($path) + protected function applyVersion($path, $version = null) { - if (null === $this->version) { + $version = null !== $version ? $version : $this->version; + if (null === $version || false === $version) { return $path; } - $versionized = sprintf($this->format, ltrim($path, '/'), $this->version); + $versionized = sprintf($this->format, ltrim($path, '/'), $version); if ($path && '/' == $path[0]) { $versionized = '/'.$versionized; diff --git a/src/Symfony/Component/Templating/Asset/PackageInterface.php b/src/Symfony/Component/Templating/Asset/PackageInterface.php index a9ec65aecb25..528101e3ca52 100644 --- a/src/Symfony/Component/Templating/Asset/PackageInterface.php +++ b/src/Symfony/Component/Templating/Asset/PackageInterface.php @@ -28,9 +28,10 @@ public function getVersion(); /** * Returns an absolute or root-relative public path. * - * @param string $path A path + * @param string $path A path + * @prama string|Boolean|null $version A specific version for the path * * @return string The public path */ - public function getUrl($path); + public function getUrl($path, $version = null); } diff --git a/src/Symfony/Component/Templating/Asset/PathPackage.php b/src/Symfony/Component/Templating/Asset/PathPackage.php index 1e02845c3cba..1806107f6dfc 100644 --- a/src/Symfony/Component/Templating/Asset/PathPackage.php +++ b/src/Symfony/Component/Templating/Asset/PathPackage.php @@ -42,13 +42,16 @@ public function __construct($basePath = null, $version = null, $format = null) } } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - $url = $this->applyVersion($path); + $url = $this->applyVersion($path, $version); // apply the base path if ('/' !== substr($url, 0, 1)) { diff --git a/src/Symfony/Component/Templating/Asset/UrlPackage.php b/src/Symfony/Component/Templating/Asset/UrlPackage.php index da5c0830fb4e..00a21670f445 100644 --- a/src/Symfony/Component/Templating/Asset/UrlPackage.php +++ b/src/Symfony/Component/Templating/Asset/UrlPackage.php @@ -41,13 +41,16 @@ public function __construct($baseUrls = array(), $version = null, $format = null } } - public function getUrl($path) + /** + * {@inheritdoc} + */ + public function getUrl($path, $version = null) { if (false !== strpos($path, '://') || 0 === strpos($path, '//')) { return $path; } - $url = $this->applyVersion($path); + $url = $this->applyVersion($path, $version); if ($url && '/' != $url[0]) { $url = '/'.$url; diff --git a/src/Symfony/Component/Templating/CHANGELOG.md b/src/Symfony/Component/Templating/CHANGELOG.md index 3d06446d1357..5f805434c2f0 100644 --- a/src/Symfony/Component/Templating/CHANGELOG.md +++ b/src/Symfony/Component/Templating/CHANGELOG.md @@ -1,6 +1,11 @@ CHANGELOG ========= +2.2.0 +----- + + * added ability to set a specific version of the asset + 2.1.0 ----- diff --git a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php index 73f145562282..fb4ed5dca074 100644 --- a/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php +++ b/src/Symfony/Component/Templating/Helper/CoreAssetsHelper.php @@ -105,14 +105,15 @@ public function getVersion($packageName = null) * * Absolute paths (i.e. http://...) are returned unmodified. * - * @param string $path A public path - * @param string $packageName The name of the asset package to use + * @param string $path A public path + * @param string $packageName The name of the asset package to use + * @param string|Boolean|null $version A specific version * * @return string A public path which takes into account the base path and URL path */ - public function getUrl($path, $packageName = null) + public function getUrl($path, $packageName = null, $version = null) { - return $this->getPackage($packageName)->getUrl($path); + return $this->getPackage($packageName)->getUrl($path, $version); } /** diff --git a/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php b/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php index e69fbb27c3b1..c29c6de1a332 100644 --- a/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php +++ b/src/Symfony/Component/Templating/Tests/Helper/AssetsHelperTest.php @@ -57,6 +57,14 @@ public function testGetUrl() $this->assertEquals('/', $helper->getUrl(''), '->getUrl() with empty arg returns the prefix alone'); } + public function testGetUrlWithVersion() + { + $helper = new AssetsHelper(null, array(), '12'); + $this->assertEquals('/foo.js?12', $helper->getUrl('foo.js')); + $this->assertEquals('/foo.js?bar', $helper->getUrl('foo.js', null, 'bar')); + $this->assertEquals('/foo.js', $helper->getUrl('foo.js', null, false)); + } + public function testGetUrlLeavesProtocolRelativePathsUntouched() { $helper = new AssetsHelper(null, 'http://foo.com');