--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/vendor/bundles/Symfony/Bundle/AsseticBundle/Routing/AsseticLoader.php Sat Sep 24 15:40:41 2011 +0200
@@ -0,0 +1,122 @@
+<?php
+
+/*
+ * This file is part of the Symfony framework.
+ *
+ * (c) Fabien Potencier <fabien@symfony.com>
+ *
+ * This source file is subject to the MIT license that is bundled
+ * with this source code in the file LICENSE.
+ */
+
+namespace Symfony\Bundle\AsseticBundle\Routing;
+
+use Assetic\Asset\AssetInterface;
+use Assetic\Factory\LazyAssetManager;
+use Symfony\Bundle\AsseticBundle\Config\AsseticResource;
+use Symfony\Component\Config\Loader\Loader;
+use Symfony\Component\Config\Resource\FileResource;
+use Symfony\Component\Routing\Route;
+use Symfony\Component\Routing\RouteCollection;
+
+/**
+ * Loads routes for all assets.
+ *
+ * Assets should only be served through the routing system for ease-of-use
+ * during development.
+ *
+ * For example, add the following to your application's routing_dev.yml:
+ *
+ * _assetic:
+ * resource: .
+ * type: assetic
+ *
+ * In a production environment you should use the `assetic:dump` command to
+ * create static asset files.
+ *
+ * @author Kris Wallsmith <kris@symfony.com>
+ */
+class AsseticLoader extends Loader
+{
+ protected $am;
+
+ public function __construct(LazyAssetManager $am)
+ {
+ $this->am = $am;
+ }
+
+ public function load($routingResource, $type = null)
+ {
+ $routes = new RouteCollection();
+
+ // resources
+ foreach ($this->am->getResources() as $resources) {
+ if (!$resources instanceof \Traversable) {
+ $resources = array($resources);
+ }
+ foreach ($resources as $resource) {
+ $routes->addResource(new AsseticResource($resource));
+ }
+ }
+
+ // routes
+ foreach ($this->am->getNames() as $name) {
+ $asset = $this->am->get($name);
+ $formula = $this->am->getFormula($name);
+
+ $this->loadRouteForAsset($routes, $asset, $name);
+
+ $debug = isset($formula[2]['debug']) ? $formula[2]['debug'] : $this->am->isDebug();
+ $combine = isset($formula[2]['combine']) ? $formula[2]['combine'] : !$debug;
+
+ // add a route for each "leaf" in debug mode
+ if (!$combine) {
+ $i = 0;
+ foreach ($asset as $leaf) {
+ $this->loadRouteForAsset($routes, $leaf, $name, $i++);
+ }
+ }
+ }
+
+ return $routes;
+ }
+
+ /**
+ * Loads a route to serve an supplied asset.
+ *
+ * The fake front controller that {@link UseControllerWorker} adds to the
+ * target URL will be removed before set as a route pattern.
+ *
+ * @param RouteCollection $routes The route collection
+ * @param AssetInterface $asset The asset
+ * @param string $name The name to use
+ * @param integer $pos The leaf index
+ */
+ private function loadRouteForAsset(RouteCollection $routes, AssetInterface $asset, $name, $pos = null)
+ {
+ $defaults = array(
+ '_controller' => 'assetic.controller:render',
+ 'name' => $name,
+ 'pos' => $pos,
+ );
+
+ // remove the fake front controller
+ $pattern = str_replace('_controller/', '', $asset->getTargetPath());
+
+ if ($format = pathinfo($pattern, PATHINFO_EXTENSION)) {
+ $defaults['_format'] = $format;
+ }
+
+ $route = '_assetic_'.$name;
+ if (null !== $pos) {
+ $route .= '_'.$pos;
+ }
+
+ $routes->add($route, new Route($pattern, $defaults));
+ }
+
+ public function supports($resource, $type = null)
+ {
+ return 'assetic' == $type;
+ }
+}