X-Git-Url: https://git.rapsys.eu/.gitweb.cgi/packbundle/blobdiff_plain/74728125f4c1dbae4c513d01bc83724c18c4108f..f414da492f983455e1db3f9e89f8cb12a8a1ed8b:/README.md?ds=inline
diff --git a/README.md b/README.md
index ee7b0bb..3998c89 100644
--- a/README.md
+++ b/README.md
@@ -24,6 +24,14 @@ Add bundle custom repository to your project's `composer.json` file:
"psr-4": {
"Rapsys\\PackBundle\\": ""
}
+ },
+ "require": {
+ "symfony/asset": "^4.4",
+ "symfony/flex": "^1.5",
+ "symfony/framework-bundle": "^4.4",
+ "symfony/process": "^4.4",
+ "symfony/twig-bundle": "^4.4",
+ "twig/extensions": "^1.5"
}
}
}
@@ -79,3 +87,189 @@ class AppKernel extends Kernel
// ...
}
```
+
+### Step 3: Configure the Bundle
+
+Setup configuration file `config/packages/rapsys_pack.yaml` with the following
+content available in `Resources/config/packages/rapsys_pack.yaml`:
+
+```yaml
+#Services configuration
+services:
+ #Replace assets.packages definition
+ assets.packages:
+ class: 'Symfony\Component\Asset\Packages'
+ arguments: [ '@rapsys_pack.path_package' ]
+ #Replace assets.context definition
+ assets.context:
+ class: 'Rapsys\PackBundle\Context\RequestStackContext'
+ arguments: [ '@request_stack', '%asset.request_context.base_path%', '%asset.request_context.secure%' ]
+ #Register assets pack package
+ rapsys_pack.path_package:
+ class: 'Rapsys\PackBundle\Package\PathPackage'
+ arguments: [ '/', '@assets.empty_version_strategy', '@assets.context' ]
+ public: true
+ #Register twig pack extension
+ rapsys_pack.pack_extension:
+ class: 'Rapsys\PackBundle\Extension\PackExtension'
+ arguments: [ '@file_locator', '@service_container', '@rapsys_pack.path_package', '@rapsys_pack.slugger_util' ]
+ tags: [ 'twig.extension' ]
+ #Register slugger util service
+ rapsys_pack.slugger_util:
+ class: 'Rapsys\PackBundle\Util\SluggerUtil'
+ arguments: [ '%kernel.secret%' ]
+ public: true
+ #Register slugger util class alias
+ Rapsys\PackBundle\Util\SluggerUtil:
+ alias: 'rapsys_pack.slugger_util'
+```
+
+Open a command console, enter your project directory and execute the following
+command to see default bundle configuration:
+
+```console
+$ php bin/console config:dump-reference RapsysPackBundle
+```
+
+Open a command console, enter your project directory and execute the following
+command to see current bundle configuration:
+
+```console
+$ php bin/console debug:config RapsysPackBundle
+```
+
+### Step 4: Use the twig extension in your Template
+
+You can use a template like this to generate your first `rapsys_pack` enabled
+template:
+
+```twig
+
+
+
+
+ {% block title %}Welcome!{% endblock %}
+ {% stylesheet '//fonts.googleapis.com/css?family=Irish+Grover|La+Belle+Aurore' '@NamedBundle/Resources/public/css/{reset,screen}.css' '@Short/css/example.css' %}
+
+ {% endstylesheet %}
+
+
+ {% block body %}{% endblock %}
+ {% javascript '@Short/js/*.js' %}
+
+ {% endjavascript %}
+
+
+```
+
+### Step 5: Make sure you have local binary installed
+
+You need to have cpack and jpack scripts from https://git.rapsys.eu/packer/ repository
+set as executable and installed in /usr/local/bin.
+
+To install cpack and jpack required packages open a root console and execute the
+following command:
+
+```console
+# urpmi perl-base perl-CSS-Packer perl-JavaScript-Packer
+```
+
+or stone age distributions:
+
+```console
+# apt-get install libcss-packer-perl libjavascript-packer-perl
+```
+
+or other distributions through cpan:
+
+```console
+# cpan App::cpanminus
+# cpanm CSS::Packer
+# cpanm JavaScript::Packer
+```
+
+### Step 6: Create your own filter
+
+You can create you own mypackfilter class which call a mypack binary:
+
+```php
+fileName = $fileName;
+
+ //Set line
+ $this->line = $line;
+
+ //Set bin
+ $this->bin = $bin;
+
+ //Check argument presence
+ if (!empty($this->...)) {
+ //Append argument
+ if ($this->... == '...') {
+ $this->bin .= ' ...';
+ } else {
+ //Throw an error on ...
+ throw new Error(sprintf('Got ... for %s: %s', $this->bin, $this->...), $this->line, $this->fileName);
+ }
+ }
+ }
+
+ //Pass merge of all inputs in content
+ public function process(string $content): string {
+ //Create descriptors
+ $descriptorSpec = array(
+ 0 => array('pipe', 'r'),
+ 1 => array('pipe', 'w'),
+ 2 => array('pipe', 'w')
+ );
+
+ //Open process
+ if (is_resource($proc = proc_open($this->bin, $descriptorSpec, $pipes))) {
+ //Set stderr as non blocking
+ stream_set_blocking($pipes[2], false);
+
+ //Send content to stdin
+ fwrite($pipes[0], $content);
+
+ //Close stdin
+ fclose($pipes[0]);
+
+ //Read content from stdout
+ if ($stdout = stream_get_contents($pipes[1])) {
+ $content = $stdout;
+ }
+
+ //Close stdout
+ fclose($pipes[1]);
+
+ //Read content from stderr
+ if (($stderr = stream_get_contents($pipes[2]))) {
+ throw new Error(sprintf('Got unexpected strerr for %s: %s', $this->bin, $stderr), $this->line, $this->fileName);
+ }
+
+ //Close stderr
+ fclose($pipes[2]);
+
+ //Close process
+ if (($ret = proc_close($proc))) {
+ throw new Error(sprintf('Got unexpected non zero return code %s: %d', $this->bin, $ret), $this->line, $this->fileName);
+ }
+ }
+
+ //Return content
+ return $content;
+ }
+}
+```
+
+The class must implements FilterInterface and get it's arguments through constructor.