
pax_global_header 0000666 0000000 0000000 00000000064 12653102260 0014507 g ustar 00root root 0000000 0000000 52 comment=40e205f0a371777ebf297593abd881ad11199548 ProxyManager-2.0.0/ 0000775 0000000 0000000 00000000000 12653102260 0014122 5 ustar 00root root 0000000 0000000 ProxyManager-2.0.0/CHANGELOG.md 0000664 0000000 0000000 00000014730 12653102260 0015740 0 ustar 00root root 0000000 0000000 --- title: Changelog --- This is a list of changes/improvements that were introduced in ProxyManager ## 2.0.0 ### BC Breaks Please refer to [the upgrade documentation](UPGRADE.md) to see which backwards-incompatible changes were applied to this release. ### New features #### PHP 7 support ProxyManager will now correctly operate in PHP 7 environments. #### PHP 7 Return type hints ProxyManager will now correctly mimic signatures of methods with return type hints: ```php class SayHello { public function hello() : string { return 'hello!'; } } ``` #### PHP 7 Scalar type hints ProxyManager will now correctly mimic signatures of methods with scalar type hints ```php class SayHello { public function hello(string $name) : string { return 'hello, ' . $name; } } ``` #### PHP 5.6 Variadics support ProxyManager will now correctly mimic behavior of methods with variadic parameters: ```php class SayHello { public function hello(string ...$names) : string { return 'hello, ' . implode(', ', $names); } } ``` By-ref variadic arguments are also supported: ```php class SayHello { public function hello(string ... & $names) { foreach ($names as & $name) { $name = 'hello, ' . $name; } } } ``` #### Constructors in proxies are not replaced anymore In ProxyManager v1.x, the constructor of a proxy was completely replaced with a method accepting proxy-specific parameters. This is no longer true, and you will be able to use the constructor of your objects as if the class wasn't proxied at all: ```php class SayHello { public function __construct() { echo 'Hello!'; } } /* @var $proxyGenerator \ProxyManager\ProxyGenerator\ProxyGeneratorInterface */ $proxyClass = $proxyGenerator->generateProxy( new ReflectionClass(SayHello::class), new ClassGenerator('ProxyClassName') ); eval('generate()); $proxyName = $proxyClass->getName(); $object = new ProxyClassName(); // echoes "Hello!" var_dump($object); // a proxy object ``` If you still want to manually build a proxy (without factories), a `public static staticProxyConstructor` method is added to the generated proxy classes. #### Friend classes support You can now access state of "friend objects" at any time. ```php class EmailAddress { private $address; public function __construct(string $address) { assertEmail($address); $this->address = $address; } public function equalsTo(EmailAddress $other) { return $this->address === $other->address; } } ``` When using lazy-loading or access-interceptors, the `equalsTo` method will properly work, as even `protected` and `private` access are now correctly proxied. #### Ghost objects now only lazy-load on state-access Lazy loading ghost objects now trigger lazy-loading only when their state is accessed. This also implies that lazy loading ghost objects cannot be used with interfaces anymore. ```php class AccessPolicy { private $policyName; /** * Calling this method WILL cause lazy-loading, when using a ghost object, * as the method is accessing the object's state */ public function getPolicyName() : string { return $this->policyName; } /** * Calling this method WILL NOT cause lazy-loading, when using a ghost object, * as the method is not reading any from the object. */ public function allowAccess() : bool { return false; } } ``` #### Faster ghost object state initialization Lazy loading ghost objects can now be initialized in a more efficient way, by avoiding reflection or setters: ```php class Foo { private $a; protected $b; public $c; } $factory = new \ProxyManager\Factory\LazyLoadingGhostFactory(); $proxy = $factory-createProxy( Foo::class, function ( GhostObjectInterface $proxy, string $method, array $parameters, & $initializer, array $properties ) { $initializer = null; $properties["\0Foo\0a"] = 'abc'; $properties["\0*\0b"] = 'def'; $properties['c'] = 'ghi'; return true; } ); $reflectionA = new ReflectionProperty(Foo::class, 'a'); $reflectionA->setAccessible(true); var_dump($reflectionA->getValue($proxy)); // dumps "abc" $reflectionB = new ReflectionProperty(Foo::class, 'b'); $reflectionB->setAccessible(true); var_dump($reflectionB->getValue($proxy)); // dumps "def" var_dump($proxy->c); // dumps "ghi" ``` #### Skipping lazy-loaded properties in generated proxies Lazy loading ghost objects can now skip lazy-loading for certain properties. This is especially useful when you have properties that are always available, such as identifiers of entities: ```php class User { private $id; private $username; public function getId() : int { return $this->id; } public function getUsername() : string { return $this->username; } } /* @var $proxy User */ $proxy = (new \ProxyManager\Factory\LazyLoadingGhostFactory())->createProxy( User::class, function ( GhostObjectInterface $proxy, string $method, array $parameters, & $initializer, array $properties ) { $initializer = null; var_dump('Triggered lazy-loading!'); $properties["\0User\0username"] = 'Ocramius'; return true; }, [ 'skippedProperties' => [ "\0User\0id", ], ] ); $idReflection = new \ReflectionProperty(User::class, 'id'); $idReflection->setAccessible(true); $idReflection->setValue($proxy, 123); var_dump($proxy->getId()); // 123 var_dump($proxy->getUsername()); // "Triggered lazy-loading!", then "Ocramius" ``` #### Proxies are now always generated on-the-fly by default Proxies are now automatically generated any time you require them: no configuration needed. If you want to gain better performance, you may still want to read the [tuning for production docs](docs/tuning-for-production.md). #### Proxy names are now hashed, simplified signature is attached to them Proxy classes now have shorter names, as the parameters used to generate them are hashed into their name. A signature is attached to proxy classes (as a private static property) so that proxy classes aren't re-used across library updates. Upgrading ProxyManager will now cause all proxies to be re-generated automatically, while the old proxy files are going to be ignored. ProxyManager-2.0.0/LICENSE 0000664 0000000 0000000 00000002041 12653102260 0015124 0 ustar 00root root 0000000 0000000 Copyright (c) 2013 Marco Pivetta Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. ProxyManager-2.0.0/README.md 0000664 0000000 0000000 00000005744 12653102260 0015413 0 ustar 00root root 0000000 0000000 # Proxy Manager This library aims at providing abstraction for generating various kinds of [proxy classes](http://ocramius.github.io/presentations/proxy-pattern-in-php/).  [](https://travis-ci.org/Ocramius/ProxyManager) [](https://scrutinizer-ci.com/g/Ocramius/ProxyManager/) [](https://scrutinizer-ci.com/g/Ocramius/ProxyManager/) [](https://insight.sensiolabs.com/projects/69fe5f97-b1c8-4ddd-93ce-900b8b788cf2) [](https://www.versioneye.com/package/php--ocramius--proxy-manager) [](https://www.versioneye.com/php/ocramius:proxy-manager/references) [](http://hhvm.h4cc.de/package/ocramius/proxy-manager) [](https://packagist.org/packages/ocramius/proxy-manager) [](https://packagist.org/packages/ocramius/proxy-manager) [](https://packagist.org/packages/ocramius/proxy-manager) ## Documentation You can learn about the proxy pattern and how to use the **ProxyManager** in the [docs](docs), which are also [compiled to HTML](http://ocramius.github.io/ProxyManager). ## Help/Support [](https://gitter.im/Ocramius/ProxyManager?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge) ## Installation The suggested installation method is via [composer](https://getcomposer.org/): ```sh php composer.phar require ocramius/proxy-manager:1.0.* ``` ## Proxy example Here's how you build a lazy loadable object with ProxyManager using a *Virtual Proxy* ```php $factory = new \ProxyManager\Factory\LazyLoadingValueHolderFactory(); $proxy = $factory->createProxy( \MyApp\HeavyComplexObject::class, function (& $wrappedObject, $proxy, $method, $parameters, & $initializer) { $wrappedObject = new HeavyComplexObject(); // instantiation logic here $initializer = null; // turning off further lazy initialization } ); $proxy->doFoo(); ``` See the [online documentation](http://ocramius.github.io/ProxyManager) for more supported proxy types and examples. ProxyManager-2.0.0/STABILITY.md 0000664 0000000 0000000 00000000646 12653102260 0016016 0 ustar 00root root 0000000 0000000 --- title: Stability --- This is a list of supported versions, with their expected release/support time-frames: # 2.0.x * Release date: 2016-01-30 * Bug fixes: till 2017-01-29 * Security fixes: till 2018-01-29 # 1.0.x * Release date: 2014-12-12 * Bug fixes: till 2015-12-11 * Security fixes: till 2016-12-11 # 0.5.x * Release date: 2013-12-01 * Bug fixes: till 2015-03-11 * Security fixes: till 2015-12-11 ProxyManager-2.0.0/UPGRADE.md 0000664 0000000 0000000 00000014376 12653102260 0015546 0 ustar 00root root 0000000 0000000 --- title: Upgrade --- This is a list of backwards compatibility (BC) breaks introduced in ProxyManager: # 2.0.0 * PHP `~7.0` is now required to use ProxyManager * HHVM compatibility is not guaranteed, as HHVM is not yet PHP 7 compliant * All classes and interfaces now use [strict scalar type hints](http://php.net/manual/en/functions.arguments.php#functions.arguments.type-declaration). If you extended or implemented anything from the `ProxyManager\` namespace, you probably need to change that code to adapt it to the new signature. * All classes and interfaces now use [return type declarations](http://php.net/manual/en/functions.returning-values.php#functions.returning-values.type-declaration). If you extended or implemented anything from the `ProxyManager\` namespace, you probably need to change that code to adapt it to the new signature. * ProxyManager will no longer write proxies to disk by default: the [`EvaluatingGeneratorStrategy`](src/GeneratorStrategy/EvaluatingGeneratorStrategy.php) is used instead. If you still want ProxyManager to write files to disk, please refer to the [tuning for production docs](docs/tuning-for-production.md) * Ghost objects were entirely rewritten, for better support and improved performance. Lazy-loading is not triggered by public API access, but by property access (private and public). While this is not really a BC break, you are encouraged to check your applications if you rely on [ghost objects](docs/lazy-loading-ghost-object.md). * If ProxyManager can't find a proxy, it will now automatically attempt to auto-generate it, regardless of the settings passed to it. * `ProxyManager\Configuration#setAutoGenerateProxies()` was removed. Please look for calls to this method and remove them. * Private properties are now also correctly handled by ProxyManager: accessing proxy state via friend classes (protected or private scope) does not require any particular workarounds anymore. * `ProxyManager\Version::VERSION` was removed. Please use `ProxyManager\Version::getVersion()` instead. * PHP 4 style constructors are no longer supported # 1.0.0 `1.0.0` is be fully compatible with `0.5.0`. # 0.5.0 * The Generated Hydrator has been removed - it is now available as a separate project at [Ocramius/GeneratedHydrator](https://github.com/Ocramius/GeneratedHydrator) [#65](https://github.com/Ocramius/ProxyManager/pull/65) * When having a `public function __get($name)` defined (by-val) and public properties, it won't be possible to get public properties by-ref while initializing the object. Either drop `__get()` or implement a by-ref `& __get()` [#126](https://github.com/Ocramius/ProxyManager/pull/126) * Proxies are now being always auto-generated if they could not be autoloaded by a factory. The methods [`ProxyManager\Configuration#setAutoGenerateProxies()`](https://github.com/Ocramius/ProxyManager/blob/0.5.0-BETA2/src/ProxyManager/Configuration.php#L67) and [`ProxyManager\Configuration#doesAutoGenerateProxies()`](https://github.com/Ocramius/ProxyManager/blob/0.5.0-BETA2/src/ProxyManager/Configuration.php#L75) are now no-op and deprecated, and will be removed in the next minor version [#87](https://github.com/Ocramius/ProxyManager/pull/87) [#90](https://github.com/Ocramius/ProxyManager/pull/90) * Proxy public properties defaults are now set before initialization [#116](https://github.com/Ocramius/ProxyManager/pull/116) [#122](https://github.com/Ocramius/ProxyManager/pull/122) # 0.4.0 * An optional parameter `$options` was introduced in [`ProxyManager\Inflector\ClassNameInflectorInterface#getProxyClassName($className, array $options = array())`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Inflector/ClassNameInflectorInterface.php) parametrize the generated class name as of [#10](https://github.com/Ocramius/ProxyManager/pull/10) and [#59](https://github.com/Ocramius/ProxyManager/pull/59) * Generated hydrators no longer have constructor arguments. Any required reflection instantiation is now dealt with in the hydrator internally as of [#63](https://github.com/Ocramius/ProxyManager/pull/63) # 0.3.4 * Interface names are also supported for proxy generation as of [#40](https://github.com/Ocramius/ProxyManager/pull/40) # 0.3.3 * [Generated hydrators](https://github.com/Ocramius/ProxyManager/tree/master/docs/generated-hydrator.md) were introduced # 0.3.2 * An additional (optional) [by-ref parameter was added](https://github.com/Ocramius/ProxyManager/pull/31) to the lazy loading proxies' initializer to allow unsetting the initializer with less overhead. # 0.3.0 * Dependency to [jms/cg](https://github.com/schmittjoh/cg-library) removed * Moved code generation logic to [`Zend\Code`](https://github.com/zendframework/zf2) * Added method [`ProxyManager\Inflector\ClassNameInflectorInterface#isProxyClassName($className)`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Inflector/ClassNameInflectorInterface.php) * The constructor of [`ProxyManager\Autoloader\Autoloader`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Autoloader/Autoloader.php) changed from `__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator)` to `__construct(\ProxyManager\FileLocator\FileLocatorInterface $fileLocator, \ProxyManager\Inflector\ClassNameInflectorInterface $classNameInflector)` * Classes implementing `CG\Core\GeneratorStrategyInterface` now implement [`ProxyManager\GeneratorStrategy\GeneratorStrategyInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/GeneratorStrategy/GeneratorStrategyInterface.php) instead * All code generation logic has been replaced - If you wrote any logic based on `ProxyManager\ProxyGenerator`, you will have to rewrite it # 0.2.0 * The signature of initializers to be used with proxies implementing [`ProxyManager\Proxy\LazyLoadingInterface`](https://github.com/Ocramius/ProxyManager/blob/master/src/ProxyManager/Proxy/LazyLoadingInterface.php) changed from: ```php $initializer = function ($proxy, & $wrappedObject, $method, $parameters) {}; ``` to ```php $initializer = function (& $wrappedObject, $proxy, $method, $parameters) {}; ``` Only the order of parameters passed to the closures has been changed. ProxyManager-2.0.0/composer.json 0000664 0000000 0000000 00000003347 12653102260 0016653 0 ustar 00root root 0000000 0000000 { "name": "ocramius/proxy-manager", "description": "A library providing utilities to generate, instantiate and generally operate with Object Proxies", "type": "library", "license": "MIT", "homepage": "https://github.com/Ocramius/ProxyManager", "keywords": [ "proxy", "proxy pattern", "service proxies", "lazy loading", "aop" ], "authors": [ { "name": "Marco Pivetta", "email": "ocramius@gmail.com", "homepage": "http://ocramius.github.io/" } ], "require": { "php": "~7.0", "zendframework/zend-code": "~3.0", "ocramius/package-versions": "^1.0" }, "require-dev": { "ext-phar": "*", "phpunit/phpunit": "^5.1.3", "squizlabs/php_codesniffer": "^2.5.0", "couscous/couscous": "^1.4.0" }, "suggest": { "ocramius/generated-hydrator": "To have very fast object to array to object conversion for ghost objects", "zendframework/zend-xmlrpc": "To have the XmlRpc adapter (Remote Object feature)", "zendframework/zend-json": "To have the JsonRpc adapter (Remote Object feature)", "zendframework/zend-soap": "To have the Soap adapter (Remote Object feature)" }, "autoload": { "psr-0": { "ProxyManager\\": "src" } }, "autoload-dev": { "psr-0": { "ProxyManagerTest\\": "tests", "ProxyManagerTestAsset\\": "tests" } }, "extra": { "branch-alias": { "dev-master": "2.0.x-dev" } } } ProxyManager-2.0.0/couscous.yml 0000664 0000000 0000000 00000000204 12653102260 0016504 0 ustar 00root root 0000000 0000000 baseUrl: https://ocramius.github.io/ProxyManager template: directory: doc-template exclude: - vendor - bin - tests ProxyManager-2.0.0/doc-template/ 0000775 0000000 0000000 00000000000 12653102260 0016500 5 ustar 00root root 0000000 0000000 ProxyManager-2.0.0/doc-template/css/ 0000775 0000000 0000000 00000000000 12653102260 0017270 5 ustar 00root root 0000000 0000000 ProxyManager-2.0.0/doc-template/css/highlight.dark.css 0000664 0000000 0000000 00000006064 12653102260 0022677 0 ustar 00root root 0000000 0000000 ďťż/* Copyright (c) 2006, Ivan Sagalaev All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of highlight.js nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ .hljs { display: block; overflow-x: auto; padding: 0.5em; background: #444; -webkit-text-size-adjust: none; } .hljs-keyword, .hljs-literal, .hljs-change, .hljs-winutils, .hljs-flow, .nginx .hljs-title, .tex .hljs-special { color: white; } .hljs, .hljs-subst { color: #ddd; } .hljs-string, .hljs-title, .hljs-type, .ini .hljs-title, .hljs-tag .hljs-value, .css .hljs-rules .hljs-value, .hljs-preprocessor, .hljs-pragma, .ruby .hljs-symbol, .ruby .hljs-symbol .hljs-string, .ruby .hljs-class .hljs-parent, .hljs-built_in, .django .hljs-template_tag, .django .hljs-variable, .smalltalk .hljs-class, .hljs-javadoc, .ruby .hljs-string, .django .hljs-filter .hljs-argument, .smalltalk .hljs-localvars, .smalltalk .hljs-array, .hljs-attr_selector, .hljs-pseudo, .hljs-addition, .hljs-stream, .hljs-envvar, .apache .hljs-tag, .apache .hljs-cbracket, .tex .hljs-command, .hljs-prompt, .coffeescript .hljs-attribute { color: #d88; } .hljs-comment, .hljs-annotation, .hljs-decorator, .hljs-pi, .hljs-doctype, .hljs-deletion, .hljs-shebang, .apache .hljs-sqbracket, .tex .hljs-formula { color: #777; } .hljs-keyword, .hljs-literal, .hljs-title, .css .hljs-id, .hljs-phpdoc, .hljs-dartdoc, .hljs-type, .vbscript .hljs-built_in, .rsl .hljs-built_in, .smalltalk .hljs-class, .diff .hljs-header, .hljs-chunk, .hljs-winutils, .bash .hljs-variable, .apache .hljs-tag, .tex .hljs-special, .hljs-request, .hljs-status { font-weight: bold; } .coffeescript .javascript, .javascript .xml, .tex .hljs-formula, .xml .javascript, .xml .vbscript, .xml .css, .xml .hljs-cdata { opacity: 0.5; } ProxyManager-2.0.0/doc-template/css/main.css 0000664 0000000 0000000 00000030060 12653102260 0020725 0 ustar 00root root 0000000 0000000 html { font-family: sans-serif; -ms-text-size-adjust: 100%; -webkit-text-size-adjust: 100%; } body { margin: 0; } [hidden], template { display: none; } a { background: transparent; } a:active, a:hover { outline: 0; } h1 { font-size: 2em; margin: 0.67em 0; } img { border: 0; } svg:not(:root) { overflow: hidden; } figure { margin: 1em 40px; } hr { -moz-box-sizing: content-box; box-sizing: content-box; height: 0; } pre { overflow: auto; } code, kbd, pre, samp { font-family: 'Menlo', 'Monaco', monospace; font-size: 1em; } button, input, optgroup, select, textarea { color: inherit; font: inherit; margin: 0; } button { overflow: visible; } button, select { text-transform: none; } button, html input[type="button"], input[type="reset"], input[type="submit"] { -webkit-appearance: button; cursor: pointer; } h1, h2, h3, h4, h5, h6, p, ul, ol, li { margin: 0; padding: 0; line-height: normal; } a { color: #31811D; text-decoration: none; } a:hover { color: #2F611C; text-decoration: none; } h3 { margin-bottom: 1em; color: #17324f; font-weight: 400; font-size: 3em; } h4 { margin-bottom: 1em; font-weight: 400; font-size: 1.375em; } p { margin-bottom: 1.5em; font-size: 1.125em; } hr { margin: 2.5em 0; padding: 0; width: 100%; height: 3px; border: 0; background: #e6eaef; } pre code { border-radius: 4px; font-size: 15px; padding: 20px; border: 1px solid #EBEBEB; } .content h1 { padding-bottom: 12px; border-bottom: 1px solid #EFEFEF; margin-bottom: 20px; } .main-nav ul li{ position: relative;} .main-nav ul li{ position: relative;} .main-nav ul li:hover { background: #2F611C;} .main-nav ul li:hover > ul { display:block } .main-nav ul li > ul { display:none; position: absolute; list-style: none; width: 100%; z-index: 9;} .main-nav ul li > ul li a { color: #BFE5F1; display: block; background: #2F611C; padding: 20px;} .main-nav ul li > ul li a:hover { background: #1C440C;} /* Menu Sidebar*/ .button-block { padding-top: 15px; } .button-block .btn-1 { margin-right: 6px; } .btn, .spy-nav a { position: relative; display: inline-block; margin: 0; padding: 0 20px; height: 57px; border: 0; vertical-align: top; text-align: center; text-transform: uppercase; font-weight: 400; font-size: 1.125em; transitionP: all .2s; line-height: 57px; } .btn.btn-action, .spy-nav a.btn-action { background: #ee2d4d; color: #fff; } .btn.btn-action:hover, .spy-nav a.btn-action:hover { background: #bf0f2d; } .btn.btn-default, .spy-nav a { background: #31811D; color: #fff; } .btn.btn-default:hover, .spy-nav a:hover { background: #2F611C; color: #fff; } .btn.btn-text, .spy-nav a.btn-text { color: #18324f; font-weight: 600; } .btn.btn-full, .spy-nav a { display: block; } @media only screen and (max-width: 480px) { .site-header{ position: fixed !important; top: 0; z-index: 999999} .page-title-wrapper{ margin-top: 70px;} .main-wrapper iframe{ width: 42% !important; float: left; margin-left: 8%;} .content iframe{width: 100%; height: 100%;} } .btn-top { position: relative; display: inline-block; float: right; margin: 20px 0 0; padding: 0 30px 0 50px; height: 57px; border: 2px solid #31811D; color: #31811D; vertical-align: top; text-align: center; text-transform: uppercase; font-weight: 600; font-size: 1.125em; line-height: 53px; transition: all .2s; } .btn-top:before { background-position: 0 -140px; width: 52px; height: 52px; position: absolute; top: 0; left: 0; content: ''; } @media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-top:before { background-position: 0 -140px; background-size: 152px auto; width: 52px; height: 52px; } } .btn-top:hover { border-color: #2F611C; color: #2F611C; } @media only screen and (max-width: 768px) { .btn-top { float: none; margin-top: 0; margin-bottom: 30px; white-space: nowrap; } } @media only screen and (max-width: 480px) { .btn-top { font-size: 0.9em; line-height: 46px; height: 48px; padding-right: 22px; padding-left: 47px; } } .btn-download { float: right; padding-left: 50px; } .btn-download:before { background-position: -18px -116px; width: 16px; height: 16px; position: absolute; top: 50%; left: 20px; margin-top: -7px; content: ''; } @media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-download:before { background-position: -18px -116px; background-size: 152px auto; width: 16px; height: 16px; } } .btn-done { float: right; padding-left: 50px; } .btn-done:before { background-position: 0 -116px; width: 18px; height: 14px; position: absolute; top: 50%; margin-top: -7px; left: 20px; content: ''; } @media only screen and (min-resolution: 2dppx), (-webkit-min-device-pixel-ratio: 2) { .btn-done:before { background-position: 0 -116px; background-size: 152px auto; width: 18px; height: 13.5px; margin-top: -6.75px; } } .btn-cancel { float: right; } *, *:before, *:after { -moz-box-sizing: border-box; -webkit-box-sizing: border-box; box-sizing: border-box; } html { -webkit-font-smoothing: antialiased; text-rendering: optimizeLegibility; min-width: 280px; } @media only screen and (min-width: 64.063em) and (max-width: 90em) { html { min-width: 960px; } } body { font-size: 16px; font-family: 'Source Sans Pro', sans-serif; min-width: 290px; } @media only screen and (max-width: 480px) { body.page-home { background-image: none; } } img { max-width: 100%; height: auto !important; } input { -webkit-appearance: none; -webkit-border-radius: 0; border-radius: 0; } main { overflow: hidden; } .clearfix:after { content: ""; display: table; clear: both; } .container { width: 60em; margin-left: auto; margin-right: auto; } .container:after { content: " "; display: block; clear: both; } @media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } } .content ul { padding-left: 19px; list-style-type: square; margin-top: 15px; } /* Menu top */ .main-nav { float: right; } .fixed-wrapper .main-nav { display: none; } .active .main-nav { display: block; } .main-nav > ul { list-style: none; } .main-nav > ul > li { float: left; } .main-nav > ul > li > a { display: block; padding: 22px 30px; color: #fff; text-decoration: none; text-transform: uppercase; font-weight: 600; font-size: 1.375em; line-height: 29px; transition: all .2s; } .main-nav > ul > li > a:hover { color: #bfe5f1; background-color: #2F611C; } .main-nav > ul > li > a.active { background-color: #2F611C; color: #fff; } .main-nav > ul > li > a.opened { background-color: #18324f; } @media only screen and (max-width: 600px) { .main-nav { font-size: 0.86em; } .main-nav > ul > li > a { padding-left: 18px; padding-right: 18px; } } @media only screen and (max-width: 480px) { .main-nav > ul > li > a { font-size: 0.95em; padding: 22px 6px; } } .site-header { position: relative; width: 100%; background: #31811D; } .site-header h1 { float: left; margin: 15px 0; } .site-header h1 a { display: block; } .site-header h1 img { display: block; max-height: 42px; } @media only screen and (max-width: 480px) { .site-header h1 img { max-height: 42px; } } .page-title-wrapper { position: relative; padding: 26px 0 55px; text-align: center; } .page-title-wrapper .page-title { margin-top: 44px; color: #17324f; font-weight: 400; font-size: 3.75em; } .page-title-wrapper .linguistics { padding: 0 2em 13px; border-bottom: 1px solid #D4DBE3; color: #18324f; text-transform: uppercase; font-weight: 400; font-size: 1.25em; } @media only screen and (max-width: 768px) { .page-title-wrapper { font-size: 0.8em; } } @media only screen and (max-width: 480px) { .page-title-wrapper { font-size: 0.65em; } } .site-footer { margin-top: 20px; padding-top: 50px; padding-bottom: 50px; background: #18324f; color: #7c8ea3; text-align: center; } .site-footer .container { position: relative; } .footer-logos ul li{ list-style: none; display: inline-block;} .footer-logos ul li a{ padding-left: 10px; padding-right: 10px} .site-footer a{ color: white !important;} .site-footer p { text-align: left; display: block; margin-bottom: 1.5em; font-size: 1.125em; } @media only screen and (max-width: 1024px) { .site-footer p { margin-left: 0; } } @media only screen and (max-width: 768px) { .site-footer p { text-align: center; margin-left: auto; } } @media only screen and (max-width: 600px) { .site-footer { font-size: 0.9em; } } .main-logo { display: block; float: left; margin: 30px 0; } .fixed-wrapper .main-logo { display: none; } .main-logo img { display: block; } .main-logo figure { position: relative; margin: 0; max-width: 56px; } .main-logo figcaption { position: absolute; width: 160px; top: 20px; left: 68px; } .active .main-logo { display: block; margin: 0; } .active .main-logo figure { max-width: 42px; } .active .main-logo figcaption { width: 120px; top: 15px; left: 55px; } @media only screen and (max-width: 480px) { .main-logo figcaption { display: none; } } .container { width: 60em; margin-left: auto; margin-right: auto; } .container:after { content: " "; display: block; clear: both; } @media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } } .component-demo { position: relative; padding: 1px 0 0; background: #e6eaef; } .component-demo:before { background-image: url("../img/enf.png"); } @media only screen and (max-width: 480px) { .component-demo { padding: 40px 0 0; } } .component-info .container { position: relative; } .component-info .sidebar { width: 220px; float: left; margin-top: 75px; } .component-info .sidebar .component-meta { margin-top: 10px; font-size: 1.125em; } .component-info .sidebar .component-meta span { white-space: nowrap; margin-bottom: 10px; padding-left: 25px; color: #18324f; } .component-info .sidebar.sticky { position: fixed; margin-top: 38px; } .component-info .content { width: 64.58333333%; float: right; margin-top: 60px; margin-bottom: 75px; } .component-info .content h3 { margin-bottom: .75em; font-size: 2.75em; } .component-info .content p { margin-bottom: 1.75em; line-height: 1.45; } @media only screen and (max-width: 480px) { .component-info .content .section-title { font-size: 2.1em; } } @media only screen and (max-width: 768px) { .component-info .sidebar { float: none; margin-left: auto; margin-right: auto; } .component-info .sidebar .component-meta { margin-top: 30px; text-align: center; } .component-info .sidebar.sticky { position: relative; margin-top: 75px; } .component-info .content { float: none; width: 100%; } } @media only screen and (max-width: 480px) { .component-info .content { margin-bottom: 0; } } .spy-nav { margin-bottom: 10px; } .spy-nav ul { list-style: none; } .spy-nav a { padding-top: 9px; padding-bottom: 10px; height: auto; border-bottom: 1px solid #4B8B20; text-align: left; text-transform: none; font-size: 1.375em; line-height: normal; } .spy-nav .active a { border-bottom-color: #fff; background: #fff; color: #17324f; } .spy-nav select{ width: 100%; margin-bottom: 10px} .main-wrapper { margin: 44px auto 44px; max-width: 600px; } .main-wrapper label { display: block; margin-bottom: .75em; color: #3f4e5e; font-size: 1.25em; } .main-wrapper .text-field { padding: 0 15px; width: 100%; height: 40px; border: 1px solid #CBD3DD; font-size: 1.125em; } .main-wrapper ::-webkit-input-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; } .main-wrapper :-moz-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; } .main-wrapper ::-moz-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; } .main-wrapper :-ms-input-placeholder { color: #CBD3DD; font-style: italic; font-size: 18px; } .page-icon-wrapper:before, .page-icon-wrapper .logo-asp:before, .page-icon-wrapper .logo-hibernate:before, .page-icon-wrapper .logo-angularjs:before, .page-icon-wrapper .logo-requirejs:before, .page-icon-wrapper .logo-reward:before, .component-demo:before {background-repeat: no-repeat; background-size: 100%; width: 92px; height: 108px; position: absolute; left: 50%; margin-left: -46px; top: 0; bottom: auto; margin-top: -28px; content: ''; } .container { width: 60em; margin-left: auto; margin-right: auto; } .container:after { content: " "; display: block; clear: both; } @media only screen and (max-width: 1024px) { .container { margin-left: 15px; margin-right: 15px; width: auto; } } .bcms-clearfix:after {content: ""; visibility: hidden; display: block; height: 0; clear: both; } ProxyManager-2.0.0/doc-template/default.twig 0000664 0000000 0000000 00000011246 12653102260 0021024 0 ustar 00root root 0000000 0000000