Overview

Namespaces

  • Budovy
  • Kdyby
    • BootstrapFormRenderer
      • DI
      • Latte
  • Nette
    • Application
      • Diagnostics
      • Responses
      • Routers
      • UI
    • Caching
      • Storages
    • ComponentModel
    • Database
      • Diagnostics
      • Drivers
      • Reflection
      • Table
    • DI
      • Config
        • Adapters
      • Diagnostics
      • Extensions
    • Diagnostics
    • Forms
      • Controls
      • Rendering
    • Http
      • Diagnostics
    • Iterators
    • Latte
      • Macros
    • Loaders
    • Localization
    • Mail
    • PhpGenerator
    • Reflection
    • Security
      • Diagnostics
    • Templating
    • Utils
  • NetteModule
  • Nextras
    • Datagrid
  • None
  • PHP
  • Tester
    • CodeCoverage
    • Runner
      • Output
  • Vodacek
    • Forms
      • Controls
  • WebLoader
    • Filter
    • Nette

Classes

  • CssLoader
  • Extension
  • JavaScriptLoader
  • WebLoader
  • Overview
  • Namespace
  • Class
  • Tree
  1: <?php
  2: 
  3: namespace WebLoader\Nette;
  4: 
  5: use Nette\Configurator;
  6: use Nette\DI\Compiler;
  7: use Nette\DI\CompilerExtension;
  8: use Nette\DI\Config\Helpers;
  9: use Nette\DI\ContainerBuilder;
 10: use Nette\Utils\Finder;
 11: 
 12: if (!class_exists('Nette\DI\CompilerExtension')) {
 13:     class_alias('Nette\Config\CompilerExtension', 'Nette\DI\CompilerExtension');
 14:     class_alias('Nette\Config\Compiler', 'Nette\DI\Compiler');
 15:     class_alias('Nette\Config\Helpers', 'Nette\DI\Config\Helpers');
 16:     class_alias('Nette\Config\Configurator', 'Nette\Configurator');
 17: }
 18: 
 19: 
 20: /**
 21:  * @author Jan Marek
 22:  */
 23: class Extension extends CompilerExtension
 24: {
 25: 
 26:     const DEFAULT_TEMP_PATH = 'webtemp';
 27:     const EXTENSION_NAME = 'webloader';
 28: 
 29:     public function getDefaultConfig()
 30:     {
 31:         return array(
 32:             'jsDefaults' => array(
 33:                 'sourceDir' => '%wwwDir%/js',
 34:                 'tempDir' => '%wwwDir%/' . self::DEFAULT_TEMP_PATH,
 35:                 'tempPath' => self::DEFAULT_TEMP_PATH,
 36:                 'files' => array(),
 37:                 'remoteFiles' => array(),
 38:                 'filters' => array(),
 39:                 'fileFilters' => array(),
 40:                 'joinFiles' => TRUE,
 41:                 'namingConvention' => '@' . $this->prefix('jsNamingConvention'),
 42:             ),
 43:             'cssDefaults' => array(
 44:                 'sourceDir' => '%wwwDir%/css',
 45:                 'tempDir' => '%wwwDir%/' . self::DEFAULT_TEMP_PATH,
 46:                 'tempPath' => self::DEFAULT_TEMP_PATH,
 47:                 'files' => array(),
 48:                 'remoteFiles' => array(),
 49:                 'filters' => array(),
 50:                 'fileFilters' => array(),
 51:                 'joinFiles' => TRUE,
 52:                 'namingConvention' => '@' . $this->prefix('cssNamingConvention'),
 53:             ),
 54:             'js' => array(
 55: 
 56:             ),
 57:             'css' => array(
 58: 
 59:             ),
 60:         );
 61:     }
 62: 
 63:     public function loadConfiguration()
 64:     {
 65:         $builder = $this->getContainerBuilder();
 66:         $config = $this->getConfig($this->getDefaultConfig());
 67: 
 68:         $builder->addDefinition($this->prefix('cssNamingConvention'))
 69:             ->setFactory('WebLoader\DefaultOutputNamingConvention::createCssConvention');
 70: 
 71:         $builder->addDefinition($this->prefix('jsNamingConvention'))
 72:             ->setFactory('WebLoader\DefaultOutputNamingConvention::createJsConvention');
 73: 
 74:         $builder->parameters['webloader'] = $config;
 75: 
 76:         $loaderFactoryTempPaths = array();
 77: 
 78:         foreach (array('css', 'js') as $type) {
 79:             foreach ($config[$type] as $name => $wlConfig) {
 80:                 $wlConfig = Helpers::merge($wlConfig, $config[$type . 'Defaults']);
 81:                 $this->addWebLoader($builder, $type . ucfirst($name), $wlConfig);
 82:                 $loaderFactoryTempPaths[strtolower($name)] = $wlConfig['tempPath'];
 83:             }
 84:         }
 85: 
 86:         $builder->addDefinition($this->prefix('factory'))
 87:             ->setClass('WebLoader\LoaderFactory', array($loaderFactoryTempPaths));
 88:     }
 89: 
 90:     private function addWebLoader(ContainerBuilder $builder, $name, $config)
 91:     {
 92:         $filesServiceName = $this->prefix($name . 'Files');
 93: 
 94:         $files = $builder->addDefinition($filesServiceName)
 95:             ->setClass('WebLoader\FileCollection')
 96:             ->setArguments(array($config['sourceDir']));
 97: 
 98:         foreach ($config['files'] as $file) {
 99:             // finder support
100:             if (is_array($file) && isset($file['files']) && (isset($file['in']) || isset($file['from']))) {
101:                 $finder = Finder::findFiles($file['files']);
102: 
103:                 if (isset($file['exclude'])) {
104:                     $finder->exclude($file['exclude']);
105:                 }
106: 
107:                 if (isset($file['in'])) {
108:                     $finder->in($file['in']);
109:                 } else {
110:                     $finder->from($file['from']);
111:                 }
112: 
113:                 foreach ($finder as $foundFile) {
114:                     $files->addSetup('addFile', array((string) $foundFile));
115:                 }
116:             } else {
117:                 $files->addSetup('addFile', array($file));
118:             }
119:         }
120: 
121:         $files->addSetup('addRemoteFiles', array($config['remoteFiles']));
122: 
123:         $compiler = $builder->addDefinition($this->prefix($name . 'Compiler'))
124:             ->setClass('WebLoader\Compiler')
125:             ->setArguments(array(
126:                 '@' . $filesServiceName,
127:                 $config['namingConvention'],
128:                 $config['tempDir'],
129:             ));
130: 
131:         $compiler->addSetup('setJoinFiles', array($config['joinFiles']));
132: 
133:         foreach ($config['filters'] as $filter) {
134:             $compiler->addSetup('addFilter', array($filter));
135:         }
136: 
137:         foreach ($config['fileFilters'] as $filter) {
138:             $compiler->addSetup('addFileFilter', array($filter));
139:         }
140: 
141:         // todo css media
142:     }
143: 
144:     public function install(Configurator $configurator)
145:     {
146:         $self = $this;
147:         $configurator->onCompile[] = function ($configurator, Compiler $compiler) use ($self) {
148:             $compiler->addExtension($self::EXTENSION_NAME, $self);
149:         };
150:     }
151: 
152: }
153: 
API documentation generated by ApiGen 2.8.0