From 9e0b412a06b0f73d9adbfdf50876a2d6fd0b10d4 Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:43:58 +0200 Subject: [PATCH 01/34] Getters instead of magic __get in Hal\Entity In the `Hal\Collection` class the magic `__get` for getting properties has been deprecated. To get `$collection` the `getCollection` method has to be called instead. Would it not be better to also use similar solution for the `Hal\Entity` class. So `getEntity` and `getId` methods instead of the magic `__get`? --- src/Entity.php | 36 +++++++++++++++++++++++------------- 1 file changed, 23 insertions(+), 13 deletions(-) diff --git a/src/Entity.php b/src/Entity.php index 58562f1..2dcfeea 100644 --- a/src/Entity.php +++ b/src/Entity.php @@ -8,6 +8,9 @@ class Entity implements Link\LinkCollectionAwareInterface { + /** + * @var mixed + */ protected $id; /** @@ -15,6 +18,9 @@ class Entity implements Link\LinkCollectionAwareInterface */ protected $links; + /** + * @var object|array + */ protected $entity; /** @@ -41,19 +47,23 @@ public function __construct($entity, $id = null) */ public function &__get($name) { - $names = array( - 'entity' => 'entity', - 'id' => 'id', - ); - $name = strtolower($name); - if (!in_array($name, array_keys($names))) { - throw new Exception\InvalidArgumentException(sprintf( - 'Invalid property name "%s"', - $name - )); - } - $prop = $names[$name]; - return $this->{$prop}; + throw new \Exception('Direct query of values is deprecated. Use getters.'); + } + + /** + * @return mixed + */ + public function getId() + { + return $this->id; + } + + /** + * @return object|array + */ + public function getEntity() + { + return $this->entity; } /** From 1d0d739d2fdc1f21fe6e9cfa5463e6228bf4b79b Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:46:38 +0200 Subject: [PATCH 02/34] Getters instead of magic __get in Hal\Entity --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index f1c50c1..908c4db 100644 --- a/README.md +++ b/README.md @@ -175,7 +175,7 @@ class Module public function onRenderEntity($e) { $entity = $e->getParam('entity'); - if (! $entity->entity instanceof SomeTypeIHaveDefined) { + if (! $entity->getEntity() instanceof SomeTypeIHaveDefined) { // do nothing return; } From 49b7fdc5de888052dc12ff294b4656e18728ce78 Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:48:32 +0200 Subject: [PATCH 03/34] Getters instead of magic __get in Hal\Entity --- src/Plugin/Hal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index 1a8a9d6..958a605 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -539,7 +539,7 @@ public function renderResource(Resource $halResource, $renderResource = true, $d public function renderEntity(Entity $halEntity, $renderEntity = true, $depth = 0, $maxDepth = null) { $this->getEventManager()->trigger(__FUNCTION__, $this, array('entity' => $halEntity)); - $entity = $halEntity->entity; + $entity = $halEntity->getEntity(); $entityLinks = $halEntity->getLinks(); $metadataMap = $this->getMetadataMap(); From 75e81fb04b102189d6218f5521f592dcbeec7354 Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:52:42 +0200 Subject: [PATCH 04/34] Getters instead of magic __get in Hal\Entity --- test/EntityTest.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/test/EntityTest.php b/test/EntityTest.php index dc7e102..98c00bc 100644 --- a/test/EntityTest.php +++ b/test/EntityTest.php @@ -40,8 +40,8 @@ public function testPropertiesAreAccessibleAfterConstruction() { $entity = new stdClass; $hal = new Entity($entity, 'id'); - $this->assertSame($entity, $hal->entity); - $this->assertEquals('id', $hal->id); + $this->assertSame($entity, $hal->getEntity()); + $this->assertEquals('id', $hal->getId()); } public function testComposesLinkCollectionByDefault() @@ -64,12 +64,12 @@ public function testRetrievingEntityCanReturnByReference() { $entity = array('foo' => 'bar'); $hal = new Entity($entity, 'id'); - $this->assertEquals($entity, $hal->entity); + $this->assertEquals($entity, $hal->getEntity()); - $entity =& $hal->entity; + $entity =& $hal->getEntity(); $entity['foo'] = 'baz'; - $secondRetrieval =& $hal->entity; + $secondRetrieval =& $hal->getEntity(); $this->assertEquals('baz', $secondRetrieval['foo']); } @@ -79,6 +79,6 @@ public function testRetrievingEntityCanReturnByReference() public function testConstructorAllowsNullIdentifier() { $hal = new Entity(array('foo' => 'bar'), null); - $this->assertNull($hal->id); + $this->assertNull($hal->getId()); } } From 5c704ae8da34c8f4abc819a776e0a55ffa8ca603 Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:54:17 +0200 Subject: [PATCH 05/34] Getters instead of magic __get in Hal\Entity --- test/Plugin/HalTest.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index 8df6e3d..be0d06d 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -1144,7 +1144,7 @@ public function testCreateEntityShouldNotSerializeEntity() $entity = $this->plugin->createEntity($foo, 'api.foo', 'foo_id'); $this->assertInstanceOf('ZF\Hal\Entity', $entity); - $this->assertSame($foo, $entity->entity); + $this->assertSame($foo, $entity->getEntity()); } /** @@ -1202,8 +1202,8 @@ public function testCreateEntityPassesNullValueForIdentifierIfNotDiscovered() $entity = array('foo' => 'bar'); $hal = $this->plugin->createEntity($entity, 'api.foo', 'foo_id'); $this->assertInstanceOf('ZF\Hal\Entity', $hal); - $this->assertEquals($entity, $hal->entity); - $this->assertNull($hal->id); + $this->assertEquals($entity, $hal->getEntity()); + $this->assertNull($hal->getId()); $links = $hal->getLinks(); $this->assertTrue($links->has('self')); From 5609e78394571d0f77ddffa928153ca4e325368b Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 16:56:40 +0200 Subject: [PATCH 06/34] Getters instead of magic __get in Hal\Entity --- test/View/HalJsonRendererTest.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/test/View/HalJsonRendererTest.php b/test/View/HalJsonRendererTest.php index eae91eb..494fe49 100644 --- a/test/View/HalJsonRendererTest.php +++ b/test/View/HalJsonRendererTest.php @@ -260,7 +260,7 @@ public function testCanRenderNonPaginatedCollection() $this->assertRelationalLinkEquals('http://localhost.localdomain/resource/' . $id, 'self', $item); $this->assertObjectHasAttribute('id', $item, var_export($item, 1)); - $this->assertEquals($id, $item->id); + $this->assertEquals($id, $item->getId()); $this->assertObjectHasAttribute('foo', $item); $this->assertEquals('bar', $item->foo); } @@ -312,7 +312,7 @@ public function testCanRenderPaginatedCollection() $this->assertRelationalLinkEquals('http://localhost.localdomain/resource/' . $id, 'self', $item); $this->assertObjectHasAttribute('id', $item, var_export($item, 1)); - $this->assertEquals($id, $item->id); + $this->assertEquals($id, $item->getId()); $this->assertObjectHasAttribute('foo', $item); $this->assertEquals('bar', $item->foo); } @@ -468,7 +468,7 @@ public function testCanRenderNestedEntitiesAsEmbeddedEntities() $user = $embedded->user; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); $user = (array) $user; - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } @@ -517,7 +517,7 @@ public function testRendersEmbeddedEntitiesOfIndividualNonPaginatedCollections() $user = $embedded->user; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); $user = (array) $user; - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } @@ -571,7 +571,7 @@ public function testRendersEmbeddedEntitiesOfIndividualPaginatedCollections() $user = $embedded->user; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); $user = (array) $user; - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } From d0c985007f6d07182dbbe29a06481c80c5b9e47a Mon Sep 17 00:00:00 2001 From: Wilt Date: Wed, 8 Apr 2015 17:01:10 +0200 Subject: [PATCH 07/34] Getters instead of magic __get in Hal\Entity --- src/Plugin/Hal.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index 958a605..8cc2974 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -849,7 +849,7 @@ public function createEntity($entity, $route, $routeIdentifierName) switch (true) { case (is_object($entity) && $metadataMap->has($entity)): $generatedEntity = $this->createEntityFromMetadata($entity, $metadataMap->get($entity)); - $halEntity = new Entity($entity, $generatedEntity->id); + $halEntity = new Entity($entity, $generatedEntity->getId()); $halEntity->setLinks($generatedEntity->getLinks()); break; @@ -937,10 +937,10 @@ public function injectSelfLink(LinkCollectionAwareInterface $resource, $route, $ $routeParams = array(); $routeOptions = array(); if ($resource instanceof Entity - && null !== $resource->id + && null !== $resource->getId() ) { $routeParams = array( - $routeIdentifier => $resource->id, + $routeIdentifier => $resource->getId(), ); } if ($resource instanceof Collection) { From adc8db7c99c33066cedc59b6fb8e5114403da3f1 Mon Sep 17 00:00:00 2001 From: Wilt Date: Thu, 2 Jul 2015 09:23:57 +0200 Subject: [PATCH 08/34] Added changes according to @weierophinney Added changes to make this pull request backwards compatible according to suggestions by @weierophinney - Make getEntity() return by reference. - Alter __get() to raise an E_USER_DEPRECATED, and then proxy to the appropriate getter. Hope this is what you were thinking off. --- src/Entity.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/Entity.php b/src/Entity.php index 2dcfeea..4aeff06 100644 --- a/src/Entity.php +++ b/src/Entity.php @@ -47,7 +47,20 @@ public function __construct($entity, $id = null) */ public function &__get($name) { - throw new \Exception('Direct query of values is deprecated. Use getters.'); + trigger_error(sprintf('%s is deprecated, use getEntity() instead.', __METHOD__), E_USER_DEPRECATED); + $names = array( + 'entity' => 'entity', + 'id' => 'id', + ); + $name = strtolower($name); + if (!in_array($name, array_keys($names))) { + throw new Exception\InvalidArgumentException(sprintf( + 'Invalid property name "%s"', + $name + )); + } + $prop = $names[$name]; + return $this->{$prop}; } /** @@ -63,7 +76,7 @@ public function getId() */ public function getEntity() { - return $this->entity; + return &$this->entity; } /** From 7ee0cf80d8755a33a7fad35c00cf832e4b9f24e5 Mon Sep 17 00:00:00 2001 From: Wilt Date: Thu, 2 Jul 2015 09:28:12 +0200 Subject: [PATCH 09/34] Fixed by reference Made a mistake in returning by reference from `getEnitity` method. --- src/Entity.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/Entity.php b/src/Entity.php index 4aeff06..71d98f8 100644 --- a/src/Entity.php +++ b/src/Entity.php @@ -74,9 +74,9 @@ public function getId() /** * @return object|array */ - public function getEntity() + public function &getEntity() { - return &$this->entity; + return $this->entity; } /** From d542e7952dfe912f14c34e2c855acfe8ee3cc9a8 Mon Sep 17 00:00:00 2001 From: Nicolas Eeckeloo Date: Thu, 24 Sep 2015 10:11:21 +0200 Subject: [PATCH 10/34] Add self link injector --- src/Link/SelfLinkInjector.php | 75 +++++++++++++++++++++++ src/Link/SelfLinkInjectorInterface.php | 21 +++++++ src/Plugin/Hal.php | 59 +++++++++--------- test/Link/SelfLinkInjectorTest.php | 82 ++++++++++++++++++++++++++ 4 files changed, 207 insertions(+), 30 deletions(-) create mode 100644 src/Link/SelfLinkInjector.php create mode 100644 src/Link/SelfLinkInjectorInterface.php create mode 100644 test/Link/SelfLinkInjectorTest.php diff --git a/src/Link/SelfLinkInjector.php b/src/Link/SelfLinkInjector.php new file mode 100644 index 0000000..d6eb1ff --- /dev/null +++ b/src/Link/SelfLinkInjector.php @@ -0,0 +1,75 @@ +getLinks(); + if ($links->has('self')) { + return; + } + + $selfLink = $this->createSelfLink($resource, $route, $routeIdentifier); + + $links->add($selfLink, true); + } + + private function createSelfLink($resource, $route, $routeIdentifier) + { + $link = new Link('self'); + $link->setRoute($route); + + $routeParams = $this->getRouteParams($resource, $routeIdentifier); + if (!empty($routeParams)) { + $link->setRouteParams($routeParams); + } + + $routeOptions = $this->getRouteOptions($resource); + if (!empty($routeOptions)) { + $link->setRouteOptions($routeOptions); + } + + return $link; + } + + private function getRouteParams($resource, $routeIdentifier) + { + if ($resource instanceof Collection) { + return $resource->getCollectionRouteParams(); + } + + $routeParams = []; + + if ($resource instanceof Entity + && null !== $resource->id + ) { + $routeParams = [ + $routeIdentifier => $resource->id, + ]; + } + + return $routeParams; + } + + private function getRouteOptions($resource) + { + if ($resource instanceof Collection) { + return $resource->getCollectionRouteOptions(); + } + + return []; + } +} diff --git a/src/Link/SelfLinkInjectorInterface.php b/src/Link/SelfLinkInjectorInterface.php new file mode 100644 index 0000000..5e832fb --- /dev/null +++ b/src/Link/SelfLinkInjectorInterface.php @@ -0,0 +1,21 @@ +selfLinkInjector instanceof SelfLinkInjectorInterface) { + $this->setSelfLinkInjector(new SelfLinkInjector()); + } + return $this->selfLinkInjector; + } + + /** + * @param SelfLinkInjectorInterface $injector + * @return self + */ + public function setSelfLinkInjector(SelfLinkInjectorInterface $injector) + { + $this->selfLinkInjector = $injector; + return $this; + } + /** * @param ServerUrl $helper * @return self @@ -942,36 +970,7 @@ public function createCollectionFromMetadata($object, Metadata $metadata) */ public function injectSelfLink(LinkCollectionAwareInterface $resource, $route, $routeIdentifier = 'id') { - $links = $resource->getLinks(); - if ($links->has('self')) { - return; - } - - $self = new Link('self'); - $self->setRoute($route); - - $routeParams = []; - $routeOptions = []; - if ($resource instanceof Entity - && null !== $resource->id - ) { - $routeParams = [ - $routeIdentifier => $resource->id, - ]; - } - if ($resource instanceof Collection) { - $routeParams = $resource->getCollectionRouteParams(); - $routeOptions = $resource->getCollectionRouteOptions(); - } - - if (!empty($routeParams)) { - $self->setRouteParams($routeParams); - } - if (!empty($routeOptions)) { - $self->setRouteOptions($routeOptions); - } - - $links->add($self, true); + $this->getSelfLinkInjector()->injectSelfLink($resource, $route, $routeIdentifier); } /** diff --git a/test/Link/SelfLinkInjectorTest.php b/test/Link/SelfLinkInjectorTest.php new file mode 100644 index 0000000..6531a50 --- /dev/null +++ b/test/Link/SelfLinkInjectorTest.php @@ -0,0 +1,82 @@ +getMock(LinkCollection::class); + + $linkCollection + ->method('has') + ->with('self') + ->will($this->returnValue(true)); + + $linkCollection + ->expects($this->never()) + ->method('add'); + + $resource = new Entity([]); + $resource->setLinks($linkCollection); + + $injector = new SelfLinkInjector(); + $injector->injectSelfLink($resource, 'foo'); + } + + public function testInjectEntitySelfLinkShouldAddSelfLinkToLinkCollection() + { + $linkCollection = new LinkCollection(); + + $resource = new Entity([]); + $resource->setLinks($linkCollection); + + $injector = new SelfLinkInjector(); + $injector->injectSelfLink($resource, 'foo'); + + $this->assertTrue($linkCollection->has('self')); + } + + public function testInjectCollectionSelfLinkShouldAddSelfLinkToLinkCollection() + { + $linkCollection = new LinkCollection(); + + $resource = new Collection([]); + $resource->setLinks($linkCollection); + + $injector = new SelfLinkInjector(); + $injector->injectSelfLink($resource, 'foo'); + + $this->assertTrue($linkCollection->has('self')); + } + + public function testInjectEntitySelfLinkWithIdentifierShouldAddSelfLinkWithIdentifierRouteParam() + { + $routeIdentifier = 'id'; + + $linkCollection = new LinkCollection(); + + $resource = new Entity([], 123); + $resource->setLinks($linkCollection); + + $injector = new SelfLinkInjector(); + $injector->injectSelfLink($resource, 'foo', $routeIdentifier); + + $this->assertTrue($linkCollection->has('self')); + + $selfLink = $linkCollection->get('self'); + $linkRouteParams = $selfLink->getRouteParams(); + + $this->assertArrayHasKey($routeIdentifier, $linkRouteParams); + } +} From 3514701cd688be571c3ae647b2bfc053950ab717 Mon Sep 17 00:00:00 2001 From: Nicolas Eeckeloo Date: Thu, 24 Sep 2015 11:34:59 +0200 Subject: [PATCH 11/34] Extract link url building code --- config/module.config.php | 13 +-- src/Extractor/LinkExtractor.php | 45 ++-------- src/Factory/HalViewHelperFactory.php | 22 ++--- .../LinkCollectionExtractorFactory.php | 25 ++++++ src/Factory/LinkExtractorFactory.php | 25 ++++++ src/Factory/LinkUrlBuilderFactory.php | 34 +++++++ src/Link/LinkUrlBuilder.php | 57 ++++++++++++ src/Plugin/Hal.php | 54 ++++-------- test/ChildEntitiesIntegrationTest.php | 8 +- test/Extractor/LinkExtractorTest.php | 26 +++--- test/Factory/HalViewHelperFactoryTest.php | 88 +++++-------------- test/Factory/LinkUrlBuilderFactoryTest.php | 63 +++++++++++++ test/Plugin/HalTest.php | 9 +- 13 files changed, 291 insertions(+), 178 deletions(-) create mode 100644 src/Factory/LinkCollectionExtractorFactory.php create mode 100644 src/Factory/LinkExtractorFactory.php create mode 100644 src/Factory/LinkUrlBuilderFactory.php create mode 100644 src/Link/LinkUrlBuilder.php create mode 100644 test/Factory/LinkUrlBuilderFactoryTest.php diff --git a/config/module.config.php b/config/module.config.php index c20fd71..fa7b02c 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -55,11 +55,14 @@ ], 'service_manager' => [ 'factories' => [ - 'ZF\Hal\HalConfig' => 'ZF\Hal\Factory\HalConfigFactory', - 'ZF\Hal\JsonRenderer' => 'ZF\Hal\Factory\HalJsonRendererFactory', - 'ZF\Hal\JsonStrategy' => 'ZF\Hal\Factory\HalJsonStrategyFactory', - 'ZF\Hal\MetadataMap' => 'ZF\Hal\Factory\MetadataMapFactory', - 'ZF\Hal\RendererOptions' => 'ZF\Hal\Factory\RendererOptionsFactory', + 'ZF\Hal\Extractor\LinkExtractor' => 'ZF\Hal\Factory\LinkExtractorFactory', + 'ZF\Hal\Extractor\LinkCollectionExtractor' => 'ZF\Hal\Factory\LinkCollectionExtractorFactory', + 'ZF\Hal\HalConfig' => 'ZF\Hal\Factory\HalConfigFactory', + 'ZF\Hal\JsonRenderer' => 'ZF\Hal\Factory\HalJsonRendererFactory', + 'ZF\Hal\JsonStrategy' => 'ZF\Hal\Factory\HalJsonStrategyFactory', + 'ZF\Hal\Link\LinkUrlBuilder' => 'ZF\Hal\Factory\LinkUrlBuilderFactory', + 'ZF\Hal\MetadataMap' => 'ZF\Hal\Factory\MetadataMapFactory', + 'ZF\Hal\RendererOptions' => 'ZF\Hal\Factory\RendererOptionsFactory', ], ], 'view_helpers' => [ diff --git a/src/Extractor/LinkExtractor.php b/src/Extractor/LinkExtractor.php index 57200a0..2ec45d9 100644 --- a/src/Extractor/LinkExtractor.php +++ b/src/Extractor/LinkExtractor.php @@ -6,47 +6,23 @@ namespace ZF\Hal\Extractor; -use Zend\View\Helper\Url; -use Zend\View\Helper\ServerUrl; use ZF\ApiProblem\Exception\DomainException; use ZF\Hal\Link\Link; +use ZF\Hal\Link\LinkUrlBuilder; class LinkExtractor implements LinkExtractorInterface { /** - * @var ServerUrl + * @var LinkUrlBuilder */ - protected $serverUrlHelper; + protected $linkUrlBuilder; /** - * @var Url + * @param LinkUrlBuilder $linkUrlBuilder */ - protected $urlHelper; - - /** - * @var string - */ - protected $serverUrlString; - - /** - * @param ServerUrl $serverUrlHelper - * @param Url $urlHelper - */ - public function __construct(ServerUrl $serverUrlHelper, Url $urlHelper) - { - $this->serverUrlHelper = $serverUrlHelper; - $this->urlHelper = $urlHelper; - } - - /** - * @return string - */ - protected function getServerUrl() + public function __construct(LinkUrlBuilder $linkUrlBuilder) { - if ($this->serverUrlString === null) { - $this->serverUrlString = call_user_func($this->serverUrlHelper); - } - return $this->serverUrlString; + $this->linkUrlBuilder = $linkUrlBuilder; } /** @@ -76,20 +52,13 @@ public function extract(Link $object) unset($options['reuse_matched_params']); } - $path = call_user_func( - $this->urlHelper, + $representation['href'] = $this->linkUrlBuilder->buildLinkUrl( $object->getRoute(), $object->getRouteParams(), $options, $reuseMatchedParams ); - if (substr($path, 0, 4) == 'http') { - $representation['href'] = $path; - } else { - $representation['href'] = $this->getServerUrl() . $path; - } - return $representation; } } diff --git a/src/Factory/HalViewHelperFactory.php b/src/Factory/HalViewHelperFactory.php index 0f05d91..8b88d9a 100644 --- a/src/Factory/HalViewHelperFactory.php +++ b/src/Factory/HalViewHelperFactory.php @@ -9,8 +9,6 @@ use Zend\ServiceManager\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\Exception; -use ZF\Hal\Extractor\LinkCollectionExtractor; -use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Plugin; class HalViewHelperFactory implements FactoryInterface @@ -22,27 +20,19 @@ class HalViewHelperFactory implements FactoryInterface public function createService(ServiceLocatorInterface $serviceLocator) { $services = $serviceLocator->getServiceLocator(); - $halConfig = $services->get('ZF\Hal\HalConfig'); + /* @var $rendererOptions \ZF\Hal\RendererOptions */ $rendererOptions = $services->get('ZF\Hal\RendererOptions'); $metadataMap = $services->get('ZF\Hal\MetadataMap'); $hydrators = $metadataMap->getHydratorManager(); - $serverUrlHelper = $serviceLocator->get('ServerUrl'); - if (isset($halConfig['options']['use_proxy'])) { - $serverUrlHelper->setUseProxy($halConfig['options']['use_proxy']); - } - - $urlHelper = $serviceLocator->get('Url'); - $helper = new Plugin\Hal($hydrators); - $helper - ->setMetadataMap($metadataMap) - ->setServerUrlHelper($serverUrlHelper) - ->setUrlHelper($urlHelper); + $helper->setMetadataMap($metadataMap); + + $linkUrlBuilder = $services->get('ZF\Hal\Link\LinkUrlBuilder'); + $helper->setLinkUrlBuilder($linkUrlBuilder); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); - $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); + $linkCollectionExtractor = $services->get('ZF\Hal\Extractor\LinkCollectionExtractor'); $helper->setLinkCollectionExtractor($linkCollectionExtractor); $defaultHydrator = $rendererOptions->getDefaultHydrator(); diff --git a/src/Factory/LinkCollectionExtractorFactory.php b/src/Factory/LinkCollectionExtractorFactory.php new file mode 100644 index 0000000..6304830 --- /dev/null +++ b/src/Factory/LinkCollectionExtractorFactory.php @@ -0,0 +1,25 @@ +get('ZF\Hal\Extractor\LinkExtractor'); + + return new LinkCollectionExtractor($linkExtractor); + } +} diff --git a/src/Factory/LinkExtractorFactory.php b/src/Factory/LinkExtractorFactory.php new file mode 100644 index 0000000..8b6329b --- /dev/null +++ b/src/Factory/LinkExtractorFactory.php @@ -0,0 +1,25 @@ +get('ZF\Hal\Link\LinkUrlBuilder'); + + return new LinkExtractor($linkUrlBuilder); + } +} diff --git a/src/Factory/LinkUrlBuilderFactory.php b/src/Factory/LinkUrlBuilderFactory.php new file mode 100644 index 0000000..3992087 --- /dev/null +++ b/src/Factory/LinkUrlBuilderFactory.php @@ -0,0 +1,34 @@ +get('ZF\Hal\HalConfig'); + + $viewHelperManager = $serviceLocator->get('ViewHelperManager'); + + $serverUrlHelper = $viewHelperManager->get('ServerUrl'); + if (isset($halConfig['options']['use_proxy'])) { + $serverUrlHelper->setUseProxy($halConfig['options']['use_proxy']); + } + + $urlHelper = $viewHelperManager->get('Url'); + + return new LinkUrlBuilder($serverUrlHelper, $urlHelper); + } +} diff --git a/src/Link/LinkUrlBuilder.php b/src/Link/LinkUrlBuilder.php new file mode 100644 index 0000000..2ab0d26 --- /dev/null +++ b/src/Link/LinkUrlBuilder.php @@ -0,0 +1,57 @@ +serverUrlHelper = $serverUrlHelper; + $this->urlHelper = $urlHelper; + } + + /** + * @param string $route + * @param array $params + * @param array $options + * @param bool $reUseMatchedParams + * @return string + */ + public function buildLinkUrl($route, $params = [], $options = [], $reUseMatchedParams = false) + { + $path = call_user_func( + $this->urlHelper, + $route, + $params, + $options, + $reUseMatchedParams + ); + + if (substr($path, 0, 4) == 'http') { + return $path; + } + + return call_user_func($this->serverUrlHelper, $path); + } +} diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index 0cb63c7..40da5e1 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -17,8 +17,6 @@ use Zend\Paginator\Paginator; use Zend\Stdlib\DispatchableInterface; use Zend\View\Helper\AbstractHelper; -use Zend\View\Helper\ServerUrl; -use Zend\View\Helper\Url; use ZF\ApiProblem\ApiProblem; use ZF\Hal\Collection; use ZF\Hal\Entity; @@ -29,6 +27,7 @@ use ZF\Hal\Link\Link; use ZF\Hal\Link\LinkCollection; use ZF\Hal\Link\LinkCollectionAwareInterface; +use ZF\Hal\Link\LinkUrlBuilder; use ZF\Hal\Link\PaginationInjector; use ZF\Hal\Link\PaginationInjectorInterface; use ZF\Hal\Metadata\Metadata; @@ -98,14 +97,9 @@ class Hal extends AbstractHelper implements protected $paginationInjector; /** - * @var ServerUrl + * @var LinkUrlBuilder */ - protected $serverUrlHelper; - - /** - * @var Url - */ - protected $urlHelper; + protected $linkUrlBuilder; /** * @var LinkCollectionExtractor @@ -308,6 +302,16 @@ public function setMetadataMap(MetadataMap $map) return $this; } + /** + * @param LinkUrlBuilder $builder + * @return self + */ + public function setLinkUrlBuilder(LinkUrlBuilder $builder) + { + $this->linkUrlBuilder = $builder; + return $this; + } + /** * @return PaginationInjectorInterface */ @@ -329,26 +333,6 @@ public function setPaginationInjector(PaginationInjectorInterface $injector) return $this; } - /** - * @param ServerUrl $helper - * @return self - */ - public function setServerUrlHelper(ServerUrl $helper) - { - $this->serverUrlHelper = $helper; - return $this; - } - - /** - * @param Url $helper - * @return self - */ - public function setUrlHelper(Url $helper) - { - $this->urlHelper = $helper; - return $this; - } - /** * @return LinkCollectionExtractorInterface */ @@ -751,18 +735,12 @@ public function createLink($route, $id = null, $entity = null) ]); $events->trigger(__FUNCTION__, $this, $eventParams); - $path = call_user_func( - $this->urlHelper, - $eventParams['route'], + return $this->linkUrlBuilder->buildLinkUrl( + $route, $params->getArrayCopy(), + [], $reUseMatchedParams ); - - if (substr($path, 0, 4) == 'http') { - return $path; - } - - return call_user_func($this->serverUrlHelper, $path); } /** diff --git a/test/ChildEntitiesIntegrationTest.php b/test/ChildEntitiesIntegrationTest.php index 524457d..9507967 100644 --- a/test/ChildEntitiesIntegrationTest.php +++ b/test/ChildEntitiesIntegrationTest.php @@ -19,6 +19,7 @@ use ZF\Hal\Extractor\LinkCollectionExtractor; use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Link\Link; +use ZF\Hal\Link\LinkUrlBuilder; use ZF\Hal\Plugin\Hal as HalHelper; use ZF\Hal\View\HalJsonModel; use ZF\Hal\View\HalJsonRenderer; @@ -48,11 +49,12 @@ public function setupHelpers() $serverUrlHelper->setScheme('http'); $serverUrlHelper->setHost('localhost.localdomain'); + $linkUrlBuilder = new LinkUrlBuilder($serverUrlHelper, $urlHelper); + $linksHelper = new HalHelper(); - $linksHelper->setUrlHelper($urlHelper); - $linksHelper->setServerUrlHelper($serverUrlHelper); + $linksHelper->setLinkUrlBuilder($linkUrlBuilder); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkExtractor = new LinkExtractor($linkUrlBuilder); $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $linksHelper->setLinkCollectionExtractor($linkCollectionExtractor); diff --git a/test/Extractor/LinkExtractorTest.php b/test/Extractor/LinkExtractorTest.php index 54de6bf..2923714 100644 --- a/test/Extractor/LinkExtractorTest.php +++ b/test/Extractor/LinkExtractorTest.php @@ -13,15 +13,17 @@ use Zend\View\Helper\Url as UrlHelper; use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Link\Link; +use ZF\Hal\Link\LinkUrlBuilder; class LinkExtractorTest extends TestCase { public function testExtractGivenIncompleteLinkShouldThrowException() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $linkUrlBuilder = $this->getMockBuilder('ZF\Hal\Link\LinkUrlBuilder') + ->disableOriginalConstructor() + ->getMock(); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkExtractor = new LinkExtractor($linkUrlBuilder); $link = $this->getMockBuilder('ZF\Hal\Link\Link') ->disableOriginalConstructor() @@ -38,10 +40,11 @@ public function testExtractGivenIncompleteLinkShouldThrowException() public function testExtractGivenLinkWithUrlShouldReturnThisOne() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $linkUrlBuilder = $this->getMockBuilder('ZF\Hal\Link\LinkUrlBuilder') + ->disableOriginalConstructor() + ->getMock(); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkExtractor = new LinkExtractor($linkUrlBuilder); $params = [ 'rel' => 'resource', @@ -56,10 +59,11 @@ public function testExtractGivenLinkWithUrlShouldReturnThisOne() public function testExtractShouldComposeAnyPropertiesInLink() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $linkUrlBuilder = $this->getMockBuilder('ZF\Hal\Link\LinkUrlBuilder') + ->disableOriginalConstructor() + ->getMock(); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkExtractor = new LinkExtractor($linkUrlBuilder); $link = Link::factory([ 'rel' => 'resource', @@ -87,7 +91,9 @@ public function testPassingFalseReuseParamsOptionShouldOmitMatchedParametersInGe $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); $urlHelper = new UrlHelper; - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkUrlBuilder = new LinkUrlBuilder($serverUrlHelper, $urlHelper); + + $linkExtractor = new LinkExtractor($linkUrlBuilder); $match = $this->matchUrl('/resource/foo', $urlHelper); $this->assertEquals('foo', $match->getParam('id', false)); diff --git a/test/Factory/HalViewHelperFactoryTest.php b/test/Factory/HalViewHelperFactoryTest.php index 54cf13d..2f16fa2 100644 --- a/test/Factory/HalViewHelperFactoryTest.php +++ b/test/Factory/HalViewHelperFactoryTest.php @@ -7,28 +7,29 @@ namespace ZFTest\Hal\Factory; use PHPUnit_Framework_TestCase as TestCase; -use ReflectionObject; use Zend\ServiceManager\ServiceManager; use Zend\Hydrator\HydratorPluginManager; -use Zend\View\Helper\ServerUrl; -use Zend\View\Helper\Url; use ZF\Hal\Factory\HalViewHelperFactory; use ZF\Hal\RendererOptions; class HalViewHelperFactoryTest extends TestCase { - public function setupPluginManager($config = []) + public function testInstantiatesHalViewHelper() { - $services = new ServiceManager(); + $pluginManager = $this->getPluginManager(); - $services->setService('ZF\Hal\HalConfig', $config); + $factory = new HalViewHelperFactory(); + $plugin = $factory->createService($pluginManager); - if (isset($config['renderer']) && is_array($config['renderer'])) { - $rendererOptions = new RendererOptions($config['renderer']); - } else { - $rendererOptions = new RendererOptions(); - } - $services->setService('ZF\Hal\RendererOptions', $rendererOptions); + $this->assertInstanceOf('ZF\Hal\Plugin\Hal', $plugin); + } + + private function getPluginManager() + { + $services = new ServiceManager(); + + $services->setService('ZF\Hal\HalConfig', []); + $services->setService('ZF\Hal\RendererOptions', new RendererOptions()); $metadataMap = $this->getMock('ZF\Hal\Metadata\MetadataMap'); $metadataMap @@ -38,62 +39,21 @@ public function setupPluginManager($config = []) $services->setService('ZF\Hal\MetadataMap', $metadataMap); - $this->pluginManager = $this->getMock('Zend\ServiceManager\AbstractPluginManager'); - - $this->pluginManager - ->expects($this->at(1)) - ->method('get') - ->with('ServerUrl') - ->will($this->returnValue(new ServerUrl())); + $linkUrlBuilder = $this->getMockBuilder('ZF\Hal\Link\LinkUrlBuilder') + ->disableOriginalConstructor() + ->getMock(); + $services->setService('ZF\Hal\Link\LinkUrlBuilder', $linkUrlBuilder); - $this->pluginManager - ->expects($this->at(2)) - ->method('get') - ->with('Url') - ->will($this->returnValue(new Url())); + $linkCollectionExtractor = $this->getMockBuilder('ZF\Hal\Extractor\LinkCollectionExtractor') + ->disableOriginalConstructor() + ->getMock(); + $services->setService('ZF\Hal\Extractor\LinkCollectionExtractor', $linkCollectionExtractor); - $this->pluginManager + $pluginManager = $this->getMock('Zend\ServiceManager\AbstractPluginManager'); + $pluginManager ->method('getServiceLocator') ->will($this->returnValue($services)); - } - - public function testInstantiatesHalViewHelper() - { - $this->setupPluginManager(); - - $factory = new HalViewHelperFactory(); - $plugin = $factory->createService($this->pluginManager); - - $this->assertInstanceOf('ZF\Hal\Plugin\Hal', $plugin); - } - - /** - * @group fail - */ - public function testOptionUseProxyIfPresentInConfig() - { - $options = [ - 'options' => [ - 'use_proxy' => true, - ], - ]; - - $this->setupPluginManager($options); - - $factory = new HalViewHelperFactory(); - $halPlugin = $factory->createService($this->pluginManager); - - $r = new ReflectionObject($halPlugin); - $p = $r->getProperty('serverUrlHelper'); - $p->setAccessible(true); - $serverUrlPlugin = $p->getValue($halPlugin); - $this->assertInstanceOf('Zend\View\Helper\ServerUrl', $serverUrlPlugin); - $r = new ReflectionObject($serverUrlPlugin); - $p = $r->getProperty('useProxy'); - $p->setAccessible(true); - $useProxy = $p->getValue($serverUrlPlugin); - $this->assertInternalType('boolean', $useProxy); - $this->assertTrue($useProxy); + return $pluginManager; } } diff --git a/test/Factory/LinkUrlBuilderFactoryTest.php b/test/Factory/LinkUrlBuilderFactoryTest.php new file mode 100644 index 0000000..2e460a5 --- /dev/null +++ b/test/Factory/LinkUrlBuilderFactoryTest.php @@ -0,0 +1,63 @@ +getServiceManager(); + + $factory = new LinkUrlBuilderFactory(); + $builder = $factory->createService($serviceManager); + + $this->assertInstanceOf('ZF\Hal\Link\LinkUrlBuilder', $builder); + } + + public function testOptionUseProxyIfPresentInConfig() + { + $options = [ + 'options' => [ + 'use_proxy' => true, + ], + ]; + $serviceManager = $this->getServiceManager($options); + + $viewHelperManager = $serviceManager->get('ViewHelperManager'); + $serverUrlHelper = $viewHelperManager->get('ServerUrl'); + + $serverUrlHelper + ->expects($this->once()) + ->method('setUseProxy') + ->with($options['options']['use_proxy']); + + $factory = new LinkUrlBuilderFactory(); + $factory->createService($serviceManager); + } + + private function getServiceManager($config = []) + { + $serviceManager = new ServiceManager(); + + $serviceManager->setService('ZF\Hal\HalConfig', $config); + + $viewHelperManager = new ServiceManager(); + $serviceManager->setService('ViewHelperManager', $viewHelperManager); + + $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); + $viewHelperManager->setService('ServerUrl', $serverUrlHelper); + + $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $viewHelperManager->setService('Url', $urlHelper); + + return $serviceManager; + } +} diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index 35480f5..08ae19a 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -19,11 +19,11 @@ use Zend\View\Helper\ServerUrl as ServerUrlHelper; use ZF\Hal\Collection; use ZF\Hal\Entity; -use ZF\Hal\EntityHydratorManager; use ZF\Hal\Extractor\LinkCollectionExtractor; use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Link\Link; use ZF\Hal\Link\LinkCollection; +use ZF\Hal\Link\LinkUrlBuilder; use ZF\Hal\Metadata\MetadataMap; use ZF\Hal\Plugin\Hal as HalHelper; use ZFTest\Hal\TestAsset as HalTestAsset; @@ -111,10 +111,11 @@ public function setUp() $this->plugin = $plugin = new HalHelper(); $plugin->setController($controller); - $plugin->setUrlHelper($urlHelper); - $plugin->setServerUrlHelper($serverUrlHelper); - $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); + $linkUrlBuilder = new LinkUrlBuilder($serverUrlHelper, $urlHelper); + $plugin->setLinkUrlBuilder($linkUrlBuilder); + + $linkExtractor = new LinkExtractor($linkUrlBuilder); $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $plugin->setLinkCollectionExtractor($linkCollectionExtractor); } From eca4787499980414c499905b43c4426b676e66d9 Mon Sep 17 00:00:00 2001 From: Wilt Date: Thu, 17 Mar 2016 12:34:12 +0100 Subject: [PATCH 12/34] Added public method for resetting the entity hash stack. --- src/Plugin/Hal.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index 0cb63c7..bdf4011 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -1192,6 +1192,14 @@ protected function getIdFromEntity($entity) return false; } + /** + * Reset entity hash stack + */ + public function resetEntityHashStack() + { + $this->entityHashStack = []; + } + /** * Convert an individual entity to an array * From 9a882e82d9cd1f4dc543ea0eac986478c5683714 Mon Sep 17 00:00:00 2001 From: Adam Grabek Date: Wed, 8 Jun 2016 03:35:22 +0200 Subject: [PATCH 13/34] zf3 compatibility + test fixes --- Module.php | 5 +- composer.json | 127 +++++++++--------- config/module.config.php | 22 ++- .../classes/PhlyRestfully.Resource.html | 8 +- .../classes/PhlyRestfully.ResourceEvent.html | 8 +- docs/api/phpdoc/structure.xml | 20 +-- docs/basics/resources.rst | 2 +- docs/ref/advanced-routing.rst | 2 +- docs/ref/resource-event.rst | 2 +- src/Factory/HalConfigFactory.php | 24 +++- src/Factory/HalControllerPluginFactory.php | 20 +-- src/Factory/HalJsonRendererFactory.php | 18 +-- src/Factory/HalJsonStrategyFactory.php | 16 ++- src/Factory/HalViewHelperFactory.php | 34 +++-- src/Factory/MetadataMapFactory.php | 30 +++-- src/Factory/RendererOptionsFactory.php | 23 +++- test/ChildEntitiesIntegrationTest.php | 33 +++-- test/EntityHydratorManagerTest.php | 25 +++- test/Extractor/LinkExtractorTest.php | 18 +-- .../HalControllerPluginFactoryTest.php | 12 +- test/Factory/HalJsonRendererFactoryTest.php | 6 +- test/Factory/HalJsonStrategyFactoryTest.php | 2 +- test/Factory/HalViewHelperFactoryTest.php | 24 +++- test/Factory/MetadataMapFactoryTest.php | 8 +- test/ModuleTest.php | 29 ++-- test/Plugin/HalTest.php | 41 +++++- test/ResourceFactoryTest.php | 7 +- test/View/HalJsonRendererTest.php | 2 +- 28 files changed, 356 insertions(+), 212 deletions(-) diff --git a/Module.php b/Module.php index 811a7bd..9c51070 100644 --- a/Module.php +++ b/Module.php @@ -7,6 +7,7 @@ namespace ZF\Hal; use Zend\Mvc\MvcEvent; +use ZF\Hal\View\HalJsonStrategy; /** * ZF2 module @@ -71,6 +72,8 @@ public function onRender($e) // register at high priority, to "beat" normal json strategy registered // via view manager - $events->attach($services->get('ZF\Hal\JsonStrategy'), 200); + /** @var HalJsonStrategy $halStrategy */ + $halStrategy = $services->get('ZF\Hal\JsonStrategy'); + $halStrategy->attach($events,200); } } diff --git a/composer.json b/composer.json index f1b8711..e24fef6 100644 --- a/composer.json +++ b/composer.json @@ -1,65 +1,72 @@ { - "name": "zfcampus/zf-hal", - "description": "ZF2 Module providing Hypermedia Application Language assets and rendering", - "type": "library", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "zend", - "module", - "rest", - "hal" - ], - "homepage": "http://apigility.org/", - "support": { - "email": "apigility-users@zend.com", - "irc": "irc://irc.freenode.net/apigility", - "source": "https://github.com/zfcampus/zf-hal", - "issues": "https://github.com/zfcampus/zf-hal/issues" + "name": "zfcampus/zf-hal", + "description": "ZF2 Module providing Hypermedia Application Language assets and rendering", + "type": "library", + "minimum-stability": "beta", + "license": "BSD-3-Clause", + "keywords": [ + "zf2", + "zend", + "module", + "rest", + "hal" + ], + "homepage": "http://apigility.org/", + "support": { + "email": "apigility-users@zend.com", + "irc": "irc://irc.freenode.net/apigility", + "source": "https://github.com/zfcampus/zf-hal", + "issues": "https://github.com/zfcampus/zf-hal/issues" + }, + "repositories": [ + { + "type": "composer", + "url": "https://packages.zendframework.com" }, - "repositories": [ - { "type": "composer", "url": "https://packages.zendframework.com" } - ], - "extra": { - "branch-alias": { - "dev-master": "1.3-dev", - "dev-develop": "1.4-dev" - } - }, - "require": { - "php": ">=5.5", - "zfcampus/zf-api-problem": "~1.0", - "zendframework/zend-escaper": "~2.3", - "zendframework/zend-eventmanager": "~2.3", - "zendframework/zend-hydrator": "~1.0", - "zendframework/zend-json": "~2.3", - "zendframework/zend-mvc": "~2.6", - "zendframework/zend-paginator": "~2.3", - "zendframework/zend-uri": "~2.3", - "zendframework/zend-view": "~2.3", - "zendframework/zend-stdlib": "~2.7" - }, - "require-dev": { - "phpunit/PHPUnit": "4.7.*", - "squizlabs/php_codesniffer": "^2.3.1", - "zendframework/zend-console": "~2.3", - "zendframework/zend-filter": "~2.3", - "zendframework/zend-http": "~2.3", - "zendframework/zend-loader": "~2.3", - "zendframework/zend-servicemanager": "~2.3", - "zendframework/zend-validator": "~2.3" - }, - "autoload": { - "psr-4": { - "ZF\\Hal\\": "src/" - }, - "classmap": [ - "Module.php" - ] + { + "type": "vcs", + "url": "https://github.com/AGmakonts/zf-api-problem.git" + } + ], + "extra": { + "branch-alias": { + "dev-master": "1.3-dev", + "dev-develop": "1.4-dev" + } + }, + "require": { + "php": ">=5.5", + "zfcampus/zf-api-problem": "dev-feature/zf3-support", + "zendframework/zend-escaper": "2.5.*", + "zendframework/zend-eventmanager": "3.0.*", + "zendframework/zend-hydrator": "2.2.*", + "zendframework/zend-json": "2.6.*", + "zendframework/zend-mvc": "3.0.*", + "zendframework/zend-paginator": "2.7.*", + "zendframework/zend-uri": "2.5.*", + "zendframework/zend-view": "2.7.*", + "zendframework/zend-stdlib": "3.0.*" + }, + "require-dev": { + "phpunit/PHPUnit": "5.4.*", + "squizlabs/php_codesniffer": "^2.3.1", + "zendframework/zend-console": "2.6.*", + "zendframework/zend-filter": "2.7.*", + "zendframework/zend-http": "2.5.*", + "zendframework/zend-loader": "2.5.*", + "zendframework/zend-validator": "2.8.*" + }, + "autoload": { + "psr-4": { + "ZF\\Hal\\": "src/" }, - "autoload-dev": { - "psr-4": { - "ZFTest\\Hal\\": "test/" - } + "classmap": [ + "Module.php" + ] + }, + "autoload-dev": { + "psr-4": { + "ZFTest\\Hal\\": "test/" } + } } diff --git a/config/module.config.php b/config/module.config.php index c20fd71..19e48c5 100644 --- a/config/module.config.php +++ b/config/module.config.php @@ -4,6 +4,14 @@ * @copyright Copyright (c) 2014 Zend Technologies USA Inc. (http://www.zend.com) */ +use ZF\Hal\Factory\HalConfigFactory; +use ZF\Hal\Factory\HalControllerPluginFactory; +use ZF\Hal\Factory\HalJsonRendererFactory; +use ZF\Hal\Factory\HalJsonStrategyFactory; +use ZF\Hal\Factory\HalViewHelperFactory; +use ZF\Hal\Factory\MetadataMapFactory; +use ZF\Hal\Factory\RendererOptionsFactory; + return [ 'zf-hal' => [ 'renderer' => [ @@ -55,21 +63,21 @@ ], 'service_manager' => [ 'factories' => [ - 'ZF\Hal\HalConfig' => 'ZF\Hal\Factory\HalConfigFactory', - 'ZF\Hal\JsonRenderer' => 'ZF\Hal\Factory\HalJsonRendererFactory', - 'ZF\Hal\JsonStrategy' => 'ZF\Hal\Factory\HalJsonStrategyFactory', - 'ZF\Hal\MetadataMap' => 'ZF\Hal\Factory\MetadataMapFactory', - 'ZF\Hal\RendererOptions' => 'ZF\Hal\Factory\RendererOptionsFactory', + 'ZF\Hal\HalConfig' => HalConfigFactory::class, + 'ZF\Hal\JsonRenderer' => HalJsonRendererFactory::class, + 'ZF\Hal\JsonStrategy' => HalJsonStrategyFactory::class, + 'ZF\Hal\MetadataMap' => MetadataMapFactory::class, + 'ZF\Hal\RendererOptions' => RendererOptionsFactory::class, ], ], 'view_helpers' => [ 'factories' => [ - 'Hal' => 'ZF\Hal\Factory\HalViewHelperFactory', + 'Hal' => HalViewHelperFactory::class, ], ], 'controller_plugins' => [ 'factories' => [ - 'Hal' => 'ZF\Hal\Factory\HalControllerPluginFactory', + 'Hal' => HalControllerPluginFactory::class, ], ], ]; diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Resource.html b/docs/api/phpdoc/classes/PhlyRestfully.Resource.html index c56d97c..c2c9958 100644 --- a/docs/api/phpdoc/classes/PhlyRestfully.Resource.html +++ b/docs/api/phpdoc/classes/PhlyRestfully.Resource.html @@ -258,13 +258,13 @@

Returns

getRouteMatch()

-
getRouteMatch() : null | \Zend\Mvc\Router\RouteMatch
+
getRouteMatch() : null | \Zend\Router\RouteMatch

Returns

-null\Zend\Mvc\Router\RouteMatch +null\Zend\Router\RouteMatch
@@ -409,7 +409,7 @@

Returns

setRouteMatch()

-
setRouteMatch(\Zend\Mvc\Router\RouteMatch $matches) : \PhlyRestfully\Resource
+
setRouteMatch(\Zend\Router\RouteMatch $matches) : \PhlyRestfully\Resource
@@ -420,7 +420,7 @@

setRouteMatch()

Parameters

$matches

-\Zend\Mvc\Router\RouteMatch +\Zend\Router\RouteMatch

Returns

diff --git a/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html b/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html index 61d73ad..9ae735d 100644 --- a/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html +++ b/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html @@ -121,13 +121,13 @@

Returns

getRouteMatch()

-
getRouteMatch() : null | \Zend\Mvc\Router\RouteMatch
+
getRouteMatch() : null | \Zend\Router\RouteMatch

Returns

-null\Zend\Mvc\Router\RouteMatch +null\Zend\Router\RouteMatch
@@ -173,7 +173,7 @@

Returns

setRouteMatch()

-
setRouteMatch(\Zend\Mvc\Router\RouteMatch $matches) : \PhlyRestfully\ResourceEvent
+
setRouteMatch(\Zend\Router\RouteMatch $matches) : \PhlyRestfully\ResourceEvent
@@ -184,7 +184,7 @@

setRouteMatch()

Parameters

$matches

-\Zend\Mvc\Router\RouteMatch +\Zend\Router\RouteMatch

Returns

diff --git a/docs/api/phpdoc/structure.xml b/docs/api/phpdoc/structure.xml index 6b93fce..dd01186 100644 --- a/docs/api/phpdoc/structure.xml +++ b/docs/api/phpdoc/structure.xml @@ -587,8 +587,8 @@ without listeners to do the actual work.</p> - - \Zend\Mvc\Router\RouteMatch + + \Zend\Router\RouteMatch self @@ -597,7 +597,7 @@ without listeners to do the actual work.</p> $matches - \Zend\Mvc\Router\RouteMatch + \Zend\Router\RouteMatch @@ -606,9 +606,9 @@ without listeners to do the actual work.</p> - + null - \Zend\Mvc\Router\RouteMatch + \Zend\Router\RouteMatch @@ -3483,8 +3483,8 @@ replaced with a RestfulJsonModel containing an API-Problem payload.</p> - - \Zend\Mvc\Router\RouteMatch + + \Zend\Router\RouteMatch self @@ -3493,7 +3493,7 @@ replaced with a RestfulJsonModel containing an API-Problem payload.</p> $matches null - \Zend\Mvc\Router\RouteMatch + \Zend\Router\RouteMatch @@ -3502,9 +3502,9 @@ replaced with a RestfulJsonModel containing an API-Problem payload.</p> - + null - \Zend\Mvc\Router\RouteMatch + \Zend\Router\RouteMatch diff --git a/docs/basics/resources.rst b/docs/basics/resources.rst index 3ea0594..c0ddc72 100644 --- a/docs/basics/resources.rst +++ b/docs/basics/resources.rst @@ -38,7 +38,7 @@ also composes the route matches and query parameters from the request. You may retrieve them from the event instance using the following methods: - ``getQueryParams()`` (returns a ``Zend\Stdlib\Parameters`` instance) -- ``getRouteMatch()`` (returns a ``Zend\Mvc\Router\RouteMatch`` instance) +- ``getRouteMatch()`` (returns a ``Zend\Router\RouteMatch`` instance) - ``getQueryParam($name, $default = null)`` - ``getRouteParam($name, $default = null)`` diff --git a/docs/ref/advanced-routing.rst b/docs/ref/advanced-routing.rst index fb9aead..6d83996 100644 --- a/docs/ref/advanced-routing.rst +++ b/docs/ref/advanced-routing.rst @@ -3,7 +3,7 @@ Advanced Routing ================ -The recommended route for a resource is a ``Zend\Mvc\Router\Http\Segment`` +The recommended route for a resource is a ``Zend\Router\Http\Segment`` route, with an identifier: .. code-block:: php diff --git a/docs/ref/resource-event.rst b/docs/ref/resource-event.rst index 39821d4..b50bf49 100644 --- a/docs/ref/resource-event.rst +++ b/docs/ref/resource-event.rst @@ -11,7 +11,7 @@ filtering, or other actions on collections. The available methods are: -- ``getRouteMatch()``, which returns the ``Zend\Mvc\Router\RouteMatch`` instance +- ``getRouteMatch()``, which returns the ``Zend\Router\RouteMatch`` instance that indicates the currently active route in the MVC, and contains any parameters matched during routing. - ``getRouteParam($name, $default = null)`` allows you to retrieve a single route diff --git a/src/Factory/HalConfigFactory.php b/src/Factory/HalConfigFactory.php index 8b373dd..b7afd93 100644 --- a/src/Factory/HalConfigFactory.php +++ b/src/Factory/HalConfigFactory.php @@ -6,20 +6,28 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; +/** + * Class HalConfigFactory + * + * @package ZF\Hal\Factory + */ class HalConfigFactory implements FactoryInterface { /** - * @param ServiceLocatorInterface $serviceLocator - * @return array + * @param \Interop\Container\ContainerInterface $container + * @param string $requestedName + * @param array|NULL $options + * + * @return array|mixed */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { $config = []; - if ($serviceLocator->has('config')) { - $config = $serviceLocator->get('config'); + if ($container->has('config')) { + $config = $container->get('config'); } $halConfig = []; @@ -29,4 +37,6 @@ public function createService(ServiceLocatorInterface $serviceLocator) return $halConfig; } + + } diff --git a/src/Factory/HalControllerPluginFactory.php b/src/Factory/HalControllerPluginFactory.php index 64a87bb..43e6ee7 100644 --- a/src/Factory/HalControllerPluginFactory.php +++ b/src/Factory/HalControllerPluginFactory.php @@ -6,20 +6,24 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; class HalControllerPluginFactory implements FactoryInterface { + /** - * @param ServiceLocatorInterface $serviceLocator - * @return \ZF\Hal\Plugin\Hal + * @param \Interop\Container\ContainerInterface $container + * @param string $requestedName + * @param array|NULL $options + * + * @return mixed */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $services = $serviceLocator->getServiceLocator(); - $helpers = $services->get('ViewHelperManager'); - + $helpers = $container->get('ViewHelperManager'); return $helpers->get('Hal'); } + + } diff --git a/src/Factory/HalJsonRendererFactory.php b/src/Factory/HalJsonRendererFactory.php index b8b44c6..97b702c 100644 --- a/src/Factory/HalJsonRendererFactory.php +++ b/src/Factory/HalJsonRendererFactory.php @@ -6,24 +6,24 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; +use ZF\ApiProblem\View\ApiProblemRenderer; use ZF\Hal\View\HalJsonRenderer; class HalJsonRendererFactory implements FactoryInterface { - /** - * @param ServiceLocatorInterface $serviceLocator - * @return HalJsonRenderer - */ - public function createService(ServiceLocatorInterface $serviceLocator) + + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $helpers = $serviceLocator->get('ViewHelperManager'); - $apiProblemRenderer = $serviceLocator->get('ZF\ApiProblem\ApiProblemRenderer'); + $helpers = $container->get('ViewHelperManager'); + $apiProblemRenderer = $container->get(ApiProblemRenderer::class); $renderer = new HalJsonRenderer($apiProblemRenderer); $renderer->setHelperPluginManager($helpers); return $renderer; } + + } diff --git a/src/Factory/HalJsonStrategyFactory.php b/src/Factory/HalJsonStrategyFactory.php index da509d1..7e56042 100644 --- a/src/Factory/HalJsonStrategyFactory.php +++ b/src/Factory/HalJsonStrategyFactory.php @@ -6,20 +6,24 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; +use Interop\Container\ContainerInterface; +use Zend\ServiceManager\Factory\FactoryInterface; use ZF\Hal\View; class HalJsonStrategyFactory implements FactoryInterface { + /** - * @param ServiceLocatorInterface $serviceLocator - * @return View\HalJsonStrategy + * @param \Interop\Container\ContainerInterface $container + * @param string $requestedName + * @param array|NULL $options + * + * @return \ZF\Hal\View\HalJsonStrategy */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $renderer = $serviceLocator->get('ZF\Hal\JsonRenderer'); + $renderer = $container->get('ZF\Hal\JsonRenderer'); return new View\HalJsonStrategy($renderer); } } diff --git a/src/Factory/HalViewHelperFactory.php b/src/Factory/HalViewHelperFactory.php index 0f05d91..e325fea 100644 --- a/src/Factory/HalViewHelperFactory.php +++ b/src/Factory/HalViewHelperFactory.php @@ -6,34 +6,48 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; +use Interop\Container\ContainerInterface; +use Interop\Container\Exception\ContainerException; +use Zend\ServiceManager\Exception\ServiceNotCreatedException; +use Zend\ServiceManager\Exception\ServiceNotFoundException; +use Zend\ServiceManager\Factory\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\Exception; use ZF\Hal\Extractor\LinkCollectionExtractor; use ZF\Hal\Extractor\LinkExtractor; +use ZF\Hal\Metadata\MetadataMap; use ZF\Hal\Plugin; class HalViewHelperFactory implements FactoryInterface { /** - * @param ServiceLocatorInterface $serviceLocator - * @return Plugin\Hal + * Create an object + * + * @param ContainerInterface $container + * @param string $requestedName + * @param null|array $options + * + * @return object + * @throws ServiceNotFoundException if unable to resolve the service. + * @throws ServiceNotCreatedException if an exception is raised when + * creating a service. + * @throws ContainerException if any other error occurs */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $services = $serviceLocator->getServiceLocator(); - $halConfig = $services->get('ZF\Hal\HalConfig'); + $halConfig = $container->get('ZF\Hal\HalConfig'); /* @var $rendererOptions \ZF\Hal\RendererOptions */ - $rendererOptions = $services->get('ZF\Hal\RendererOptions'); - $metadataMap = $services->get('ZF\Hal\MetadataMap'); + $rendererOptions = $container->get('ZF\Hal\RendererOptions'); + /** @var MetadataMap $metadataMap */ + $metadataMap = $container->get('ZF\Hal\MetadataMap'); $hydrators = $metadataMap->getHydratorManager(); - $serverUrlHelper = $serviceLocator->get('ServerUrl'); + $serverUrlHelper = $container->get('ViewHelperManager')->get('ServerUrl'); if (isset($halConfig['options']['use_proxy'])) { $serverUrlHelper->setUseProxy($halConfig['options']['use_proxy']); } - $urlHelper = $serviceLocator->get('Url'); + $urlHelper = $container->get('ViewHelperManager')->get('Url'); $helper = new Plugin\Hal($hydrators); $helper diff --git a/src/Factory/MetadataMapFactory.php b/src/Factory/MetadataMapFactory.php index 5b097b2..e31d0e9 100644 --- a/src/Factory/MetadataMapFactory.php +++ b/src/Factory/MetadataMapFactory.php @@ -6,7 +6,11 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; +use Interop\Container\ContainerInterface; +use Interop\Container\Exception\ContainerException; +use Zend\ServiceManager\Exception\ServiceNotCreatedException; +use Zend\ServiceManager\Exception\ServiceNotFoundException; +use Zend\ServiceManager\Factory\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; use Zend\Hydrator\HydratorPluginManager; use ZF\Hal\Metadata; @@ -14,17 +18,26 @@ class MetadataMapFactory implements FactoryInterface { /** - * @param ServiceLocatorInterface $serviceLocator - * @return Metadata\MetadataMap + * Create an object + * + * @param ContainerInterface $container + * @param string $requestedName + * @param null|array $options + * + * @return object + * @throws ServiceNotFoundException if unable to resolve the service. + * @throws ServiceNotCreatedException if an exception is raised when + * creating a service. + * @throws ContainerException if any other error occurs */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $config = $serviceLocator->get('ZF\Hal\HalConfig'); + $config = $container->get('ZF\Hal\HalConfig'); - if ($serviceLocator->has('HydratorManager')) { - $hydrators = $serviceLocator->get('HydratorManager'); + if ($container->has('HydratorManager')) { + $hydrators = $container->get('HydratorManager'); } else { - $hydrators = new HydratorPluginManager(); + $hydrators = new HydratorPluginManager($container); } $map = []; @@ -34,4 +47,5 @@ public function createService(ServiceLocatorInterface $serviceLocator) return new Metadata\MetadataMap($map, $hydrators); } + } diff --git a/src/Factory/RendererOptionsFactory.php b/src/Factory/RendererOptionsFactory.php index 5a6745f..ae753c6 100644 --- a/src/Factory/RendererOptionsFactory.php +++ b/src/Factory/RendererOptionsFactory.php @@ -6,19 +6,32 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; +use Interop\Container\ContainerInterface; +use Interop\Container\Exception\ContainerException; +use Zend\ServiceManager\Exception\ServiceNotCreatedException; +use Zend\ServiceManager\Exception\ServiceNotFoundException; +use Zend\ServiceManager\Factory\FactoryInterface; use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\RendererOptions; class RendererOptionsFactory implements FactoryInterface { /** - * @param ServiceLocatorInterface $serviceLocator - * @return RendererOptions + * Create an object + * + * @param ContainerInterface $container + * @param string $requestedName + * @param null|array $options + * + * @return object + * @throws ServiceNotFoundException if unable to resolve the service. + * @throws ServiceNotCreatedException if an exception is raised when + * creating a service. + * @throws ContainerException if any other error occurs */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke(ContainerInterface $container, $requestedName, array $options = NULL) { - $config = $serviceLocator->get('ZF\Hal\HalConfig'); + $config = $container->get('ZF\Hal\HalConfig'); $rendererConfig = []; if (isset($config['renderer']) && is_array($config['renderer'])) { diff --git a/test/ChildEntitiesIntegrationTest.php b/test/ChildEntitiesIntegrationTest.php index 524457d..35f1006 100644 --- a/test/ChildEntitiesIntegrationTest.php +++ b/test/ChildEntitiesIntegrationTest.php @@ -8,8 +8,10 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Http\Request; +use Zend\Hydrator\HydratorPluginManager; use Zend\Mvc\Controller\PluginManager as ControllerPluginManager; -use Zend\Mvc\Router\Http\TreeRouteStack; +use Zend\Router\Http\TreeRouteStack; +use Zend\ServiceManager\ServiceManager; use Zend\View\HelperPluginManager; use Zend\View\Helper\ServerUrl as ServerUrlHelper; use Zend\View\Helper\Url as UrlHelper; @@ -28,6 +30,11 @@ */ class ChildEntitiesIntegrationTest extends TestCase { + + protected $router; + protected $helpers; + protected $renderer; + public function setUp() { $this->setupRouter(); @@ -48,7 +55,9 @@ public function setupHelpers() $serverUrlHelper->setScheme('http'); $serverUrlHelper->setHost('localhost.localdomain'); - $linksHelper = new HalHelper(); + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); + + $linksHelper = new HalHelper($hydratorPluginManager); $linksHelper->setUrlHelper($urlHelper); $linksHelper->setServerUrlHelper($serverUrlHelper); @@ -56,13 +65,13 @@ public function setupHelpers() $linkCollectionExtractor = new LinkCollectionExtractor($linkExtractor); $linksHelper->setLinkCollectionExtractor($linkCollectionExtractor); - $this->helpers = $helpers = new HelperPluginManager(); + $this->helpers = $helpers = new HelperPluginManager(new ServiceManager()); $helpers->setService('url', $urlHelper); $helpers->setService('serverUrl', $serverUrlHelper); - $helpers->setService('hal', $linksHelper); + $helpers->setService('Hal', $linksHelper); - $this->plugins = $plugins = new ControllerPluginManager(); - $plugins->setService('hal', $linksHelper); + $this->plugins = $plugins = new ControllerPluginManager( new ServiceManager()); + $plugins->setService('Hal', $linksHelper); } public function setupRenderer() @@ -165,7 +174,7 @@ public function testParentEntityRendersAsExpected() $request = new Request(); $request->setUri($uri); $matches = $this->router->match($request); - $this->assertInstanceOf('Zend\Mvc\Router\RouteMatch', $matches); + $this->assertInstanceOf('Zend\Router\RouteMatch', $matches); $this->assertEquals('anakin', $matches->getParam('parent')); $this->assertEquals('parent', $matches->getMatchedRouteName()); @@ -190,7 +199,7 @@ public function testChildEntityRendersAsExpected() $request = new Request(); $request->setUri($uri); $matches = $this->router->match($request); - $this->assertInstanceOf('Zend\Mvc\Router\RouteMatch', $matches); + $this->assertInstanceOf('Zend\Router\RouteMatch', $matches); $this->assertEquals('anakin', $matches->getParam('parent')); $this->assertEquals('luke', $matches->getParam('child')); $this->assertEquals('parent/child', $matches->getMatchedRouteName()); @@ -216,7 +225,7 @@ public function testChildCollectionRendersAsExpected() $request = new Request(); $request->setUri($uri); $matches = $this->router->match($request); - $this->assertInstanceOf('Zend\Mvc\Router\RouteMatch', $matches); + $this->assertInstanceOf('Zend\Router\RouteMatch', $matches); $this->assertEquals('anakin', $matches->getParam('parent')); $this->assertNull($matches->getParam('child')); $this->assertEquals('parent/child', $matches->getMatchedRouteName()); @@ -288,7 +297,7 @@ public function testChildEntityObjectIdentifierMapping() $request = new Request(); $request->setUri($uri); $matches = $this->router->match($request); - $this->assertInstanceOf('Zend\Mvc\Router\RouteMatch', $matches); + $this->assertInstanceOf('Zend\Router\RouteMatch', $matches); $this->assertEquals('anakin', $matches->getParam('id')); $this->assertEquals('luke', $matches->getParam('child_id')); $this->assertEquals('parent/child', $matches->getMatchedRouteName()); @@ -316,7 +325,7 @@ public function testChildEntityIdentifierMappingInsideCollection() $request = new Request(); $request->setUri($uri); $matches = $this->router->match($request); - $this->assertInstanceOf('Zend\Mvc\Router\RouteMatch', $matches); + $this->assertInstanceOf('Zend\Router\RouteMatch', $matches); $this->assertEquals('anakin', $matches->getParam('id')); $this->assertNull($matches->getParam('child_id')); $this->assertEquals('parent/child', $matches->getMatchedRouteName()); @@ -349,4 +358,4 @@ public function testChildEntityIdentifierMappingInsideCollection() ); } } -} +} \ No newline at end of file diff --git a/test/EntityHydratorManagerTest.php b/test/EntityHydratorManagerTest.php index 601000c..86cffb3 100644 --- a/test/EntityHydratorManagerTest.php +++ b/test/EntityHydratorManagerTest.php @@ -8,6 +8,7 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Hydrator\HydratorPluginManager; +use Zend\ServiceManager\ServiceManager; use ZF\Hal\EntityHydratorManager; use ZF\Hal\Metadata\MetadataMap; use ZFTest\Hal\Plugin\TestAsset; @@ -25,7 +26,9 @@ public function testAddHydratorGivenEntityClassAndHydratorInstanceShouldAssociat $hydrator = new $hydratorClass(); $metadataMap = new MetadataMap(); - $hydratorPluginManager = new HydratorPluginManager(); + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); + + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $entityHydratorManager->addHydrator( @@ -44,7 +47,9 @@ public function testAddHydratorGivenEntityAndHydratorClassesShouldAssociateThem( $hydratorClass = 'ZFTest\Hal\Plugin\TestAsset\DummyHydrator'; $metadataMap = new MetadataMap(); - $hydratorPluginManager = new HydratorPluginManager(); + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); + + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $entityHydratorManager->addHydrator( @@ -61,7 +66,9 @@ public function testAddHydratorGivenEntityAndHydratorClassesShouldAssociateThem( public function testAddHydratorDoesntFailWithAutoInvokables() { $metadataMap = new MetadataMap(); - $hydratorPluginManager = new HydratorPluginManager(); + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); + + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $entityHydratorManager->addHydrator('stdClass', 'ZFTest\Hal\Plugin\TestAsset\DummyHydrator'); @@ -82,8 +89,10 @@ public function testGetHydratorForEntityGivenEntityDefinedInMetadataMapShouldRet 'hydrator' => $hydratorClass, ], ]); + + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); - $hydratorPluginManager = new HydratorPluginManager(); + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $this->assertInstanceOf( @@ -98,7 +107,9 @@ public function testGetHydratorForEntityGivenUnkownEntityShouldReturnDefaultHydr $defaultHydrator = new DummyHydrator(); $metadataMap = new MetadataMap(); - $hydratorPluginManager = new HydratorPluginManager(); + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); + + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $entityHydratorManager->setDefaultHydrator($defaultHydrator); @@ -113,7 +124,9 @@ public function testGetHydratorForEntityGivenUnkownEntityAndNoDefaultHydratorDef $entity = new TestAsset\Entity('foo', 'Foo Bar'); $metadataMap = new MetadataMap(); - $hydratorPluginManager = new HydratorPluginManager(); + $metadataMap->setHydratorManager(new HydratorPluginManager(new ServiceManager())); + + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadataMap); $hydrator = $entityHydratorManager->getHydratorForEntity($entity); diff --git a/test/Extractor/LinkExtractorTest.php b/test/Extractor/LinkExtractorTest.php index 54de6bf..3648753 100644 --- a/test/Extractor/LinkExtractorTest.php +++ b/test/Extractor/LinkExtractorTest.php @@ -8,8 +8,8 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Http\Request; -use Zend\Mvc\Router\Http\TreeRouteStack; -use Zend\Mvc\Router\RouteMatch; +use Zend\Router\Http\TreeRouteStack; +use Zend\Router\RouteMatch; use Zend\View\Helper\Url as UrlHelper; use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Link\Link; @@ -18,8 +18,8 @@ class LinkExtractorTest extends TestCase { public function testExtractGivenIncompleteLinkShouldThrowException() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $serverUrlHelper = $this->createMock('Zend\View\Helper\ServerUrl'); + $urlHelper = $this->createMock('Zend\View\Helper\Url'); $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); @@ -38,8 +38,8 @@ public function testExtractGivenIncompleteLinkShouldThrowException() public function testExtractGivenLinkWithUrlShouldReturnThisOne() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $serverUrlHelper = $this->createMock('Zend\View\Helper\ServerUrl'); + $urlHelper = $this->createMock('Zend\View\Helper\Url'); $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); @@ -56,8 +56,8 @@ public function testExtractGivenLinkWithUrlShouldReturnThisOne() public function testExtractShouldComposeAnyPropertiesInLink() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); + $serverUrlHelper = $this->createMock('Zend\View\Helper\ServerUrl'); + $urlHelper = $this->createMock('Zend\View\Helper\Url'); $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); @@ -84,7 +84,7 @@ public function testExtractShouldComposeAnyPropertiesInLink() */ public function testPassingFalseReuseParamsOptionShouldOmitMatchedParametersInGeneratedLink() { - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); + $serverUrlHelper = $this->createMock('Zend\View\Helper\ServerUrl'); $urlHelper = new UrlHelper; $linkExtractor = new LinkExtractor($serverUrlHelper, $urlHelper); diff --git a/test/Factory/HalControllerPluginFactoryTest.php b/test/Factory/HalControllerPluginFactoryTest.php index e929de6..d58506f 100644 --- a/test/Factory/HalControllerPluginFactoryTest.php +++ b/test/Factory/HalControllerPluginFactoryTest.php @@ -7,6 +7,8 @@ namespace ZFTest\Hal\Factory; use PHPUnit_Framework_TestCase as TestCase; +use Zend\Hydrator\HydratorPluginManager; +use Zend\ServiceManager\AbstractPluginManager; use Zend\ServiceManager\ServiceManager; use ZF\Hal\Factory\HalControllerPluginFactory; use ZF\Hal\Plugin\Hal as HalPlugin; @@ -21,19 +23,13 @@ public function testInstantiatesHalJsonRenderer() $viewHelperManager ->expects($this->once()) ->method('get') - ->will($this->returnValue(new HalPlugin())); + ->will($this->returnValue(new HalPlugin(new HydratorPluginManager(new ServiceManager())))); $services = new ServiceManager(); $services->setService('ViewHelperManager', $viewHelperManager); - $pluginManager = $this->getMock('Zend\ServiceManager\AbstractPluginManager'); - $pluginManager - ->expects($this->once()) - ->method('getServiceLocator') - ->will($this->returnValue($services)); - $factory = new HalControllerPluginFactory(); - $plugin = $factory->createService($pluginManager); + $plugin = $factory($services, 'Hal'); $this->assertInstanceOf('ZF\Hal\Plugin\Hal', $plugin); } diff --git a/test/Factory/HalJsonRendererFactoryTest.php b/test/Factory/HalJsonRendererFactoryTest.php index f5d982d..e319532 100644 --- a/test/Factory/HalJsonRendererFactoryTest.php +++ b/test/Factory/HalJsonRendererFactoryTest.php @@ -8,8 +8,10 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\ServiceManager\ServiceManager; +use ZF\ApiProblem\Factory\ApiProblemRendererFactory; use ZF\ApiProblem\View\ApiProblemRenderer; use ZF\Hal\Factory\HalJsonRendererFactory; +use ZF\Hal\View\HalJsonRenderer; class HalJsonRendererFactoryTest extends TestCase { @@ -23,10 +25,10 @@ public function testInstantiatesHalJsonRenderer() $services->setService('ViewHelperManager', $viewHelperManager); - $services->setService('ZF\ApiProblem\ApiProblemRenderer', new ApiProblemRenderer()); + $services->setInvokableClass(ApiProblemRenderer::class, ApiProblemRenderer::class); $factory = new HalJsonRendererFactory(); - $renderer = $factory->createService($services); + $renderer = $factory($services,'ZF\Hal\JsonRenderer'); $this->assertInstanceOf('ZF\Hal\View\HalJsonRenderer', $renderer); } diff --git a/test/Factory/HalJsonStrategyFactoryTest.php b/test/Factory/HalJsonStrategyFactoryTest.php index a151953..869bc6a 100644 --- a/test/Factory/HalJsonStrategyFactoryTest.php +++ b/test/Factory/HalJsonStrategyFactoryTest.php @@ -23,7 +23,7 @@ public function testInstantiatesHalJsonStrategy() $services->setService('ZF\Hal\JsonRenderer', $halJsonRenderer); $factory = new HalJsonStrategyFactory(); - $strategy = $factory->createService($services); + $strategy = $factory($services, 'ZF\Hal\JsonStrategy'); $this->assertInstanceOf('ZF\Hal\View\HalJsonStrategy', $strategy); } diff --git a/test/Factory/HalViewHelperFactoryTest.php b/test/Factory/HalViewHelperFactoryTest.php index 54cf13d..5797f87 100644 --- a/test/Factory/HalViewHelperFactoryTest.php +++ b/test/Factory/HalViewHelperFactoryTest.php @@ -8,6 +8,7 @@ use PHPUnit_Framework_TestCase as TestCase; use ReflectionObject; +use Zend\ServiceManager\AbstractPluginManager; use Zend\ServiceManager\ServiceManager; use Zend\Hydrator\HydratorPluginManager; use Zend\View\Helper\ServerUrl; @@ -17,6 +18,9 @@ class HalViewHelperFactoryTest extends TestCase { + private $pluginManager; + private $services; + public function setupPluginManager($config = []) { $services = new ServiceManager(); @@ -30,24 +34,30 @@ public function setupPluginManager($config = []) } $services->setService('ZF\Hal\RendererOptions', $rendererOptions); - $metadataMap = $this->getMock('ZF\Hal\Metadata\MetadataMap'); + $metadataMap = $this->createMock('ZF\Hal\Metadata\MetadataMap'); $metadataMap ->expects($this->once()) ->method('getHydratorManager') - ->will($this->returnValue(new HydratorPluginManager())); + ->will($this->returnValue(new HydratorPluginManager($services))); $services->setService('ZF\Hal\MetadataMap', $metadataMap); - $this->pluginManager = $this->getMock('Zend\ServiceManager\AbstractPluginManager'); + + $pluginManagerMockBuilder = $this->getMockBuilder(AbstractPluginManager::class); + $pluginManagerMockBuilder->setConstructorArgs([$services]); + + $this->pluginManager = $pluginManagerMockBuilder->getMock(); + $services->setService('ViewHelperManager', $this->pluginManager); + $this->services = $services; $this->pluginManager - ->expects($this->at(1)) + ->expects($this->at(0)) ->method('get') ->with('ServerUrl') ->will($this->returnValue(new ServerUrl())); $this->pluginManager - ->expects($this->at(2)) + ->expects($this->at(1)) ->method('get') ->with('Url') ->will($this->returnValue(new Url())); @@ -62,7 +72,7 @@ public function testInstantiatesHalViewHelper() $this->setupPluginManager(); $factory = new HalViewHelperFactory(); - $plugin = $factory->createService($this->pluginManager); + $plugin = $factory($this->services, 'Hal'); $this->assertInstanceOf('ZF\Hal\Plugin\Hal', $plugin); } @@ -81,7 +91,7 @@ public function testOptionUseProxyIfPresentInConfig() $this->setupPluginManager($options); $factory = new HalViewHelperFactory(); - $halPlugin = $factory->createService($this->pluginManager); + $halPlugin = $factory($this->services, 'Hal'); $r = new ReflectionObject($halPlugin); $p = $r->getProperty('serverUrlHelper'); diff --git a/test/Factory/MetadataMapFactoryTest.php b/test/Factory/MetadataMapFactoryTest.php index 855b0d2..693b9a4 100644 --- a/test/Factory/MetadataMapFactoryTest.php +++ b/test/Factory/MetadataMapFactoryTest.php @@ -13,7 +13,7 @@ class MetadataMapFactoryTest extends TestCase { public function testInstantiatesMetadataMapWithEmptyConfig() { - $services = $this->getMock('Zend\ServiceManager\ServiceLocatorInterface'); + $services = $this->createMock('Zend\ServiceManager\ServiceLocatorInterface'); $services ->expects($this->at(0)) @@ -28,14 +28,14 @@ public function testInstantiatesMetadataMapWithEmptyConfig() ->will($this->returnValue(false)); $factory = new MetadataMapFactory(); - $renderer = $factory->createService($services); + $renderer = $factory($services, 'ZF\Hal\MetadataMap'); $this->assertInstanceOf('ZF\Hal\Metadata\MetadataMap', $renderer); } public function testInstantiatesMetadataMapWithMetadataMapConfig() { - $services = $this->getMock('Zend\ServiceManager\ServiceLocatorInterface'); + $services = $this->createMock('Zend\ServiceManager\ServiceLocatorInterface'); $config = [ 'metadata_map' => [ @@ -73,7 +73,7 @@ public function testInstantiatesMetadataMapWithMetadataMapConfig() ->will($this->returnValue(false)); $factory = new MetadataMapFactory(); - $metadataMap = $factory->createService($services); + $metadataMap = $factory($services, 'ZF\Hal\MetadataMap'); $this->assertInstanceOf('ZF\Hal\Metadata\MetadataMap', $metadataMap); diff --git a/test/ModuleTest.php b/test/ModuleTest.php index f3427c4..28e3101 100644 --- a/test/ModuleTest.php +++ b/test/ModuleTest.php @@ -8,13 +8,18 @@ use Zend\ServiceManager\ServiceManager; use Zend\View\View; +use ZF\ApiProblem\View\ApiProblemRenderer; use ZF\Hal\Module; use ZF\Hal\View\HalJsonModel; use PHPUnit_Framework_TestCase as TestCase; use stdClass; +use ZF\Hal\View\HalJsonRenderer; +use ZF\Hal\View\HalJsonStrategy; class ModuleTest extends TestCase { + private $module; + public function setUp() { $this->module = new Module; @@ -22,7 +27,7 @@ public function setUp() public function testOnRenderWhenMvcEventResultIsNotHalJsonModel() { - $mvcEvent = $this->getMock('Zend\Mvc\MvcEvent'); + $mvcEvent = $this->createMock('Zend\Mvc\MvcEvent'); $mvcEvent ->expects($this->once()) ->method('getResult') @@ -36,32 +41,28 @@ public function testOnRenderWhenMvcEventResultIsNotHalJsonModel() public function testOnRenderAttachesJsonStrategy() { - $halJsonStrategy = $this->getMockBuilder('ZF\Hal\View\HalJsonStrategy') - ->disableOriginalConstructor() - ->getMock(); - + $strategy = new HalJsonStrategy(new HalJsonRenderer(new ApiProblemRenderer())); + $view = new View(); - $eventManager = $this->getMock('Zend\EventManager\EventManager'); + $eventManager = $this->createMock('Zend\EventManager\EventManager'); $eventManager - ->expects($this->once()) - ->method('attach') - ->with($halJsonStrategy, 200); + ->expects($this->exactly(2)) + ->method('attach'); $view->setEventManager($eventManager); $serviceManager = new ServiceManager(); - $serviceManager - ->setService('ZF\Hal\JsonStrategy', $halJsonStrategy) - ->setService('View', $view); + $serviceManager->setService('ZF\Hal\JsonStrategy', $strategy); + $serviceManager->setService('View', $view); - $application = $this->getMock('Zend\Mvc\ApplicationInterface'); + $application = $this->createMock('Zend\Mvc\ApplicationInterface'); $application ->expects($this->once()) ->method('getServiceManager') ->will($this->returnValue($serviceManager)); - $mvcEvent = $this->getMock('Zend\Mvc\MvcEvent'); + $mvcEvent = $this->createMock('Zend\Mvc\MvcEvent'); $mvcEvent ->expects($this->at(0)) ->method('getResult') diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index 35480f5..b09ab8d 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -8,11 +8,12 @@ use PHPUnit_Framework_TestCase as TestCase; use ReflectionObject; -use Zend\Mvc\Router\Http\TreeRouteStack; -use Zend\Mvc\Router\Http\Segment; +use Zend\Router\Http\TreeRouteStack; +use Zend\Router\Http\Segment; use Zend\Mvc\MvcEvent; use Zend\Paginator\Adapter\ArrayAdapter as ArrayPaginator; use Zend\Paginator\Paginator; +use Zend\ServiceManager\ServiceManager; use Zend\Uri\Http; use Zend\Hydrator; use Zend\View\Helper\Url as UrlHelper; @@ -97,7 +98,7 @@ public function setUp() $event->setRouter($router); $router->setRequestUri(new Http('http://localhost.localdomain/resource')); - $controller = $this->controller = $this->getMock('Zend\Mvc\Controller\AbstractRestfulController'); + $controller = $this->controller = $this->createMock('Zend\Mvc\Controller\AbstractRestfulController'); $controller->expects($this->any()) ->method('getEvent') ->will($this->returnValue($event)); @@ -109,7 +110,7 @@ public function setUp() $serverUrlHelper->setScheme('http'); $serverUrlHelper->setHost('localhost.localdomain'); - $this->plugin = $plugin = new HalHelper(); + $this->plugin = $plugin = new HalHelper(new Hydrator\HydratorPluginManager(new ServiceManager())); $plugin->setController($controller); $plugin->setUrlHelper($urlHelper); $plugin->setServerUrlHelper($serverUrlHelper); @@ -243,6 +244,8 @@ public function testRendersEmbeddedEntitiesInsideEntitiesBasedOnMetadataMap() 'entity_identifier_name' => 'custom_id', ], ]); + + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); $this->plugin->setMetadataMap($metadata); @@ -295,6 +298,8 @@ public function testMetadataMapLooksForParentClasses() ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $rendered = $this->plugin->renderEntity($entity); @@ -346,6 +351,8 @@ public function testRendersEmbeddedCollectionsInsideEntitiesBasedOnMetadataMap() ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $entity = new Entity( @@ -402,6 +409,8 @@ public function testRendersEmbeddedCollectionsInsideCollectionsBasedOnMetadataMa ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $collection = new Collection([$entity], 'hostname/resource'); @@ -464,6 +473,8 @@ public function testDoesNotRenderEmbeddedEntitiesInsideCollectionsBasedOnMetadat ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $this->plugin->setRenderEmbeddedEntities(false); @@ -680,6 +691,8 @@ public function testEntitiesFromCollectionCanUseHydratorSetInMetadataMap() $collection->setCollectionName('resource'); $collection->setCollectionRoute('hostname/resource'); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $test = $this->plugin->renderCollection($collection); @@ -724,6 +737,8 @@ public function testRetainsLinksInjectedViaMetadataDuringCreateEntity() ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $entity = $this->plugin->createEntity($object, 'hostname/resource', 'id'); $this->assertInstanceof('ZF\Hal\Entity', $entity); @@ -903,6 +918,8 @@ public function testRenderingCollectionUsesCollectionNameFromMetadataMap() 'entity_route_name' => 'hostname/embedded', ], ]); + + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); $this->plugin->setMetadataMap($metadata); @@ -1009,6 +1026,8 @@ public function testCreateEntityShouldNotSerializeEntity() 'entity_identifier_name' => 'id', ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $foo = new TestAsset\Entity('foo', 'Foo Bar'); @@ -1048,6 +1067,8 @@ public function testRenderEntityMaxDepth($entity, $metadataMap, $expectedResult, { $this->plugin->setMetadataMap($metadataMap); + $metadataMap->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + if ($exception) { $this->setExpectedException($exception['class'], $exception['message']); } @@ -1195,6 +1216,9 @@ public function testSubsequentRenderEntityCalls() $metadataMap1 = $this->createNestedMetadataMap(0); $metadataMap2 = $this->createNestedMetadataMap(1); + $metadataMap1->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $metadataMap2->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadataMap1); $result1 = $this->plugin->renderEntity($entity); @@ -1214,6 +1238,7 @@ public function testSubsequentRenderEntityCalls() */ public function testRenderCollectionWithMaxDepth($collection, $metadataMap, $expectedResult, $exception = null) { + $metadataMap->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); $this->plugin->setMetadataMap($metadataMap); if ($exception) { @@ -1507,6 +1532,7 @@ public function testCreateEntityFromMetadataWithoutForcedSelfLinks() ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); $this->plugin->setMetadataMap($metadata); $entity = $this->plugin->createEntityFromMetadata( $object, @@ -1528,6 +1554,8 @@ public function testCreateEntityWithoutForcedSelfLinks() 'force_self_link' => false, ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $entity = $this->plugin->createEntity($object, 'hostname/resource', 'id'); $links = $entity->getLinks(); @@ -1552,6 +1580,8 @@ public function testCreateCollectionFromMetadataWithoutForcedSelfLinks() ], ]); + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $collection = $this->plugin->createCollectionFromMetadata( @@ -1574,6 +1604,9 @@ public function testCreateCollectionWithoutForcedSelfLinks() 'force_self_link' => false, ], ]); + + $metadata->setHydratorManager(new Hydrator\HydratorPluginManager(new ServiceManager())); + $this->plugin->setMetadataMap($metadata); $result = $this->plugin->createCollection($collection); diff --git a/test/ResourceFactoryTest.php b/test/ResourceFactoryTest.php index 45c1ee6..45b3b99 100644 --- a/test/ResourceFactoryTest.php +++ b/test/ResourceFactoryTest.php @@ -8,6 +8,7 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Hydrator\HydratorPluginManager; +use Zend\ServiceManager\ServiceManager; use ZF\Hal\EntityHydratorManager; use ZF\Hal\Extractor\EntityExtractor; use ZF\Hal\Metadata\MetadataMap; @@ -44,6 +45,7 @@ public function testInjectsLinksFromMetadataWhenCreatingEntity() ], ], ]); + $metadata->setHydratorManager(new HydratorPluginManager(new ServiceManager())); $resourceFactory = $this->getResourceFactory($metadata); @@ -80,7 +82,7 @@ public function testRouteParamsAllowsCallable() { $object = new TestAsset\Entity('foo', 'Foo'); - $callback = $this->getMock('stdClass', ['callback']); + $callback = $this->createMock('stdClass', ['callback']); $callback->expects($this->atLeastOnce()) ->method('callback') ->with($this->equalTo($object)) @@ -152,6 +154,7 @@ public function testInjectsLinksFromMetadataWhenCreatingCollection() ], ], ]); + $metadata->setHydratorManager(new HydratorPluginManager(new ServiceManager())); $resourceFactory = $this->getResourceFactory($metadata); @@ -170,7 +173,7 @@ public function testInjectsLinksFromMetadataWhenCreatingCollection() private function getResourceFactory(MetadataMap $metadata) { - $hydratorPluginManager = new HydratorPluginManager(); + $hydratorPluginManager = new HydratorPluginManager(new ServiceManager()); $entityHydratorManager = new EntityHydratorManager($hydratorPluginManager, $metadata); $entityExtractor = new EntityExtractor($entityHydratorManager); diff --git a/test/View/HalJsonRendererTest.php b/test/View/HalJsonRendererTest.php index 63f6a34..f046e5d 100644 --- a/test/View/HalJsonRendererTest.php +++ b/test/View/HalJsonRendererTest.php @@ -143,7 +143,7 @@ private function getHelperPluginManager() ->disableOriginalConstructor() ->getMock(); - $halPlugin = $this->getMock('ZF\Hal\Plugin\Hal'); + $halPlugin = $this->createMock('ZF\Hal\Plugin\Hal'); $helperPluginManager ->method('get') From a611756d5c6f5b2305c7a7b9ae9187506b306ca7 Mon Sep 17 00:00:00 2001 From: Adam Grabek Date: Wed, 8 Jun 2016 03:38:07 +0200 Subject: [PATCH 14/34] composer json cleanup --- composer.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/composer.json b/composer.json index e24fef6..d9b30a1 100644 --- a/composer.json +++ b/composer.json @@ -22,10 +22,6 @@ { "type": "composer", "url": "https://packages.zendframework.com" - }, - { - "type": "vcs", - "url": "https://github.com/AGmakonts/zf-api-problem.git" } ], "extra": { @@ -36,7 +32,7 @@ }, "require": { "php": ">=5.5", - "zfcampus/zf-api-problem": "dev-feature/zf3-support", + "zfcampus/zf-api-problem": "2.0.*", "zendframework/zend-escaper": "2.5.*", "zendframework/zend-eventmanager": "3.0.*", "zendframework/zend-hydrator": "2.2.*", From 63ea3be8494a72475eeb17ebdb448870791b315d Mon Sep 17 00:00:00 2001 From: Adam Grabek Date: Wed, 8 Jun 2016 18:04:00 +0200 Subject: [PATCH 15/34] composer json repo address --- composer.json | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/composer.json b/composer.json index d9b30a1..f5320c9 100644 --- a/composer.json +++ b/composer.json @@ -22,8 +22,14 @@ { "type": "composer", "url": "https://packages.zendframework.com" + }, + { + "type": "vcs", + "url": "https://github.com/AGmakonts/zf-api-problem.git" } + ], + "extra": { "branch-alias": { "dev-master": "1.3-dev", @@ -32,7 +38,7 @@ }, "require": { "php": ">=5.5", - "zfcampus/zf-api-problem": "2.0.*", + "zfcampus/zf-api-problem": "dev-frature/zf3-support", "zendframework/zend-escaper": "2.5.*", "zendframework/zend-eventmanager": "3.0.*", "zendframework/zend-hydrator": "2.2.*", From 04970871f27473b33b37f7ab93b7bf5f3c696dc4 Mon Sep 17 00:00:00 2001 From: Adam Grabek Date: Wed, 8 Jun 2016 18:30:55 +0200 Subject: [PATCH 16/34] composer json repo address --- composer.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/composer.json b/composer.json index f5320c9..26f4c8e 100644 --- a/composer.json +++ b/composer.json @@ -38,7 +38,7 @@ }, "require": { "php": ">=5.5", - "zfcampus/zf-api-problem": "dev-frature/zf3-support", + "zfcampus/zf-api-problem": "dev-feature/zf3-support", "zendframework/zend-escaper": "2.5.*", "zendframework/zend-eventmanager": "3.0.*", "zendframework/zend-hydrator": "2.2.*", From 37a3c5ce38b3abfedf47ebabd066d4486ae2e63d Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 15:24:26 -0500 Subject: [PATCH 17/34] Fixed tests for #99 - Tests were not updated to use new accessors; fixed. - Added new test to ensure deprecation notice is now emitted from Entity instances. --- src/Entity.php | 5 +++-- test/EntityTest.php | 28 ++++++++++++++++++++++++++++ test/Plugin/HalTest.php | 6 +++--- 3 files changed, 34 insertions(+), 5 deletions(-) diff --git a/src/Entity.php b/src/Entity.php index a845257..3f6328f 100644 --- a/src/Entity.php +++ b/src/Entity.php @@ -50,8 +50,9 @@ public function &__get($name) { trigger_error( sprintf( - '%s is deprecated, use getters instead.', - __METHOD__ + 'Direct property access to %s::$%s is deprecated, use getters instead.', + __CLASS__, + $name ), E_USER_DEPRECATED ); diff --git a/test/EntityTest.php b/test/EntityTest.php index eac9c9a..40dfc65 100644 --- a/test/EntityTest.php +++ b/test/EntityTest.php @@ -81,4 +81,32 @@ public function testConstructorAllowsNullIdentifier() $hal = new Entity(['foo' => 'bar'], null); $this->assertNull($hal->getId()); } + + public function magicProperties() + { + return [ + 'entity' => ['entity'], + 'id' => ['id'], + ]; + } + + /** + * @group 99 + * @dataProvider magicProperties + */ + public function testPropertyRetrievalEmitsDeprecationNotice($property) + { + $entity = ['foo' => 'bar']; + $hal = new Entity($entity, 'id'); + $triggered = false; + + set_error_handler(function ($errno, $errstr) use (&$triggered) { + $triggered = true; + $this->assertContains('Direct property access', $errstr); + }, E_USER_DEPRECATED); + $hal->$property; + restore_error_handler(); + + $this->assertTrue($triggered, 'Deprecation notice was not triggered!'); + } } diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index 32f6436..26cdc2e 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -1937,7 +1937,7 @@ public function testCanRenderNestedEntitiesAsEmbeddedEntities() $user = $embedded['user']; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } @@ -1985,7 +1985,7 @@ public function testRendersEmbeddedEntitiesOfIndividualNonPaginatedCollections() $user = $embedded['user']; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } @@ -2037,7 +2037,7 @@ public function testRendersEmbeddedEntitiesOfIndividualPaginatedCollections() $user = $embedded['user']; $this->assertRelationalLinkContains('/user/matthew', 'self', $user); - foreach ($child->entity as $key => $value) { + foreach ($child->getEntity() as $key => $value) { $this->assertArrayHasKey($key, $user); $this->assertEquals($value, $user[$key]); } From 978b7f00adc1bbf96322bf7fd4aadbfa4bcef0bb Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 15:26:02 -0500 Subject: [PATCH 18/34] Added CHANGELOG for #99 --- CHANGELOG.md | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 25bda7c..646db48 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,11 +6,14 @@ All notable changes to this project will be documented in this file, in reverse ### Added -- Nothing. +- [#99](https://github.com/zfcampus/zf-hal/pull/99) adds accessors for the + `$entity` and `$id` properties of `ZF\Hal\Entity`. ### Deprecated -- Nothing. +- [#99](https://github.com/zfcampus/zf-hal/pull/99) deprecates usage of property + access on `ZF\Hal\Entity` to retrieve the identifier and underlying entity + instance. ### Removed From ad7215d2ee38ff2bd924789140a34ffe506a7aa7 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 16:02:30 -0500 Subject: [PATCH 19/34] Added CHANGELOG for #124 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 230411f..8bf7f7f 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,11 @@ All notable changes to this project will be documented in this file, in reverse - [#99](https://github.com/zfcampus/zf-hal/pull/99) adds accessors for the `$entity` and `$id` properties of `ZF\Hal\Entity`. +- [#124](https://github.com/zfcampus/zf-hal/pull/124) adds a new interface + `ZF\Hal\Link\SelfLinkInjectorInterface` and default implementation + `ZF\Hal\Link\SelfLinkInjector`; these are now used as collaborators to the + `Hal` plugin to simplify internal logic, and allow users to provide alternate + strategies for generating the `self` relational link. ### Deprecated From 6d4ce1bbb28dc0084341e629a7900a6295b28729 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 16:39:19 -0500 Subject: [PATCH 20/34] Updated to provide backwards compatibility - Re-adds `setServerUrlHelper()` and `setUrlHelper()` to `Hal` plugin; however, these are now marked deprecated, and throw an exception if used, indicating how developers should now provide facilities for URL generation. - Updates all factories that were touched by the original pull request to implement `__invoke()` and remove direct implementation of `FactoryInterface`. The `HalViewHelperFactory` retains `createService()` for backwards compatibility, and it now proxies to `__invoke()`. --- src/Exception/DeprecatedMethodException.php | 11 ++++++ src/Factory/HalViewHelperFactory.php | 35 +++++++++++++------ .../LinkCollectionExtractorFactory.php | 13 +++---- src/Factory/LinkExtractorFactory.php | 13 +++---- src/Factory/LinkUrlBuilderFactory.php | 12 +++---- src/Plugin/Hal.php | 34 ++++++++++++++++++ test/Factory/LinkUrlBuilderFactoryTest.php | 4 +-- test/Plugin/HalTest.php | 27 ++++++++++++++ 8 files changed, 114 insertions(+), 35 deletions(-) create mode 100644 src/Exception/DeprecatedMethodException.php diff --git a/src/Exception/DeprecatedMethodException.php b/src/Exception/DeprecatedMethodException.php new file mode 100644 index 0000000..bace242 --- /dev/null +++ b/src/Exception/DeprecatedMethodException.php @@ -0,0 +1,11 @@ +getServiceLocator(); + $container = ($container instanceof AbstractPluginManager) + ? $container->getServiceLocator() + : $container; /* @var $rendererOptions \ZF\Hal\RendererOptions */ - $rendererOptions = $services->get('ZF\Hal\RendererOptions'); - $metadataMap = $services->get('ZF\Hal\MetadataMap'); + $rendererOptions = $container->get('ZF\Hal\RendererOptions'); + $metadataMap = $container->get('ZF\Hal\MetadataMap'); $hydrators = $metadataMap->getHydratorManager(); $helper = new Plugin\Hal($hydrators); $helper->setMetadataMap($metadataMap); - $linkUrlBuilder = $services->get('ZF\Hal\Link\LinkUrlBuilder'); + $linkUrlBuilder = $container->get(Link\LinkUrlBuilder::class); $helper->setLinkUrlBuilder($linkUrlBuilder); - $linkCollectionExtractor = $services->get('ZF\Hal\Extractor\LinkCollectionExtractor'); + $linkCollectionExtractor = $container->get(LinkCollectionExtractor::class); $helper->setLinkCollectionExtractor($linkCollectionExtractor); $defaultHydrator = $rendererOptions->getDefaultHydrator(); @@ -58,4 +61,16 @@ public function createService(ServiceLocatorInterface $serviceLocator) return $helper; } + + /** + * Proxies to __invoke() to provide backwards compatibility. + * + * @deprecated since 1.4.0; use __invoke instead. + * @param \Zend\ServiceManager\ServiceLocatorInterface $container + * @return Plugin\Hal + */ + public function createService($container) + { + return $this($container); + } } diff --git a/src/Factory/LinkCollectionExtractorFactory.php b/src/Factory/LinkCollectionExtractorFactory.php index 6304830..f00bdb5 100644 --- a/src/Factory/LinkCollectionExtractorFactory.php +++ b/src/Factory/LinkCollectionExtractorFactory.php @@ -6,20 +6,17 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\Extractor\LinkCollectionExtractor; +use ZF\Hal\Extractor\LinkExtractor; -class LinkCollectionExtractorFactory implements FactoryInterface +class LinkCollectionExtractorFactory { /** - * @param ServiceLocatorInterface $serviceLocator + * @param \Interop\Container\ContainerInterface|\Zend\ServiceManager\ServiceLocatorInterface $container * @return LinkCollectionExtractor */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke($container) { - $linkExtractor = $serviceLocator->get('ZF\Hal\Extractor\LinkExtractor'); - - return new LinkCollectionExtractor($linkExtractor); + return new LinkCollectionExtractor($container->get(LinkExtractor::class)); } } diff --git a/src/Factory/LinkExtractorFactory.php b/src/Factory/LinkExtractorFactory.php index 8b6329b..dba2833 100644 --- a/src/Factory/LinkExtractorFactory.php +++ b/src/Factory/LinkExtractorFactory.php @@ -6,20 +6,17 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\Extractor\LinkExtractor; +use ZF\Hal\Link\LinkUrlBuilder; -class LinkExtractorFactory implements FactoryInterface +class LinkExtractorFactory { /** - * @param ServiceLocatorInterface $serviceLocator + * @param \Interop\Container\ContainerInterface|\Zend\ServiceManager\ServiceLocatorInterface $container * @return LinkExtractor */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke($container) { - $linkUrlBuilder = $serviceLocator->get('ZF\Hal\Link\LinkUrlBuilder'); - - return new LinkExtractor($linkUrlBuilder); + return new LinkExtractor($container->get(LinkUrlBuilder::class)); } } diff --git a/src/Factory/LinkUrlBuilderFactory.php b/src/Factory/LinkUrlBuilderFactory.php index 3992087..8ae2814 100644 --- a/src/Factory/LinkUrlBuilderFactory.php +++ b/src/Factory/LinkUrlBuilderFactory.php @@ -6,21 +6,19 @@ namespace ZF\Hal\Factory; -use Zend\ServiceManager\FactoryInterface; -use Zend\ServiceManager\ServiceLocatorInterface; use ZF\Hal\Link\LinkUrlBuilder; -class LinkUrlBuilderFactory implements FactoryInterface +class LinkUrlBuilderFactory { /** - * @param ServiceLocatorInterface $serviceLocator + * @param \Interop\Container\ContainerInterface|\Zend\ServiceManager\ServiceLocatorInterface $container * @return LinkUrlBuilder */ - public function createService(ServiceLocatorInterface $serviceLocator) + public function __invoke($container) { - $halConfig = $serviceLocator->get('ZF\Hal\HalConfig'); + $halConfig = $container->get('ZF\Hal\HalConfig'); - $viewHelperManager = $serviceLocator->get('ViewHelperManager'); + $viewHelperManager = $container->get('ViewHelperManager'); $serverUrlHelper = $viewHelperManager->get('ServerUrl'); if (isset($halConfig['options']['use_proxy'])) { diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index 6b63df9..026dece 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -303,6 +303,40 @@ public function setLinkUrlBuilder(LinkUrlBuilder $builder) return $this; } + /** + * @deprecated Since 1.4.0; use setLinkUrlBuilder() instead. + * @param callable $helper + * @throws Exception\DeprecatedMethodException + */ + public function setServerUrlHelper(callable $helper) + { + throw new Exception\DeprecatedMethodException(sprintf( + '%s can no longer be used to influence URL generation; please ' + . 'use %s::setLinkUrlBuilder() instead, providing a configured ' + . '%s instance', + __METHOD__, + __CLASS__, + LinkUrlBuilder::class + )); + } + + /** + * @deprecated Since 1.4.0; use setLinkUrlBuilder() instead. + * @param callable $helper + * @throws Exception\DeprecatedMethodException + */ + public function setUrlHelper(callable $helper) + { + throw new Exception\DeprecatedMethodException(sprintf( + '%s can no longer be used to influence URL generation; please ' + . 'use %s::setLinkUrlBuilder() instead, providing a configured ' + . '%s instance', + __METHOD__, + __CLASS__, + LinkUrlBuilder::class + )); + } + /** * @return PaginationInjectorInterface */ diff --git a/test/Factory/LinkUrlBuilderFactoryTest.php b/test/Factory/LinkUrlBuilderFactoryTest.php index 2e460a5..0421cdf 100644 --- a/test/Factory/LinkUrlBuilderFactoryTest.php +++ b/test/Factory/LinkUrlBuilderFactoryTest.php @@ -17,7 +17,7 @@ public function testInstantiatesLinkUrlBuilder() $serviceManager = $this->getServiceManager(); $factory = new LinkUrlBuilderFactory(); - $builder = $factory->createService($serviceManager); + $builder = $factory($serviceManager); $this->assertInstanceOf('ZF\Hal\Link\LinkUrlBuilder', $builder); } @@ -40,7 +40,7 @@ public function testOptionUseProxyIfPresentInConfig() ->with($options['options']['use_proxy']); $factory = new LinkUrlBuilderFactory(); - $factory->createService($serviceManager); + $factory($serviceManager); } private function getServiceManager($config = []) diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index f076b65..8ba20dc 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -19,6 +19,7 @@ use Zend\View\Helper\ServerUrl as ServerUrlHelper; use ZF\Hal\Collection; use ZF\Hal\Entity; +use ZF\Hal\Exception; use ZF\Hal\Extractor\LinkCollectionExtractor; use ZF\Hal\Extractor\LinkExtractor; use ZF\Hal\Link\Link; @@ -2114,4 +2115,30 @@ public function testRenderEntityPostEventIsTriggered() $this->plugin->renderEntity($halEntity); $this->assertTrue($triggered); } + + /** + * @group 125 + */ + public function testSetUrlHelperRaisesExceptionIndicatingDeprecation() + { + $this->setExpectedException( + Exception\DeprecatedMethodException::class, + 'can no longer be used to influence URL generation' + ); + $this->plugin->setUrlHelper(function () { + }); + } + + /** + * @group 125 + */ + public function testSetServerUrlHelperRaisesExceptionIndicatingDeprecation() + { + $this->setExpectedException( + Exception\DeprecatedMethodException::class, + 'can no longer be used to influence URL generation' + ); + $this->plugin->setServerUrlHelper(function () { + }); + } } From 5a0dac489d436cbe4bd9904989d3517b7adae37e Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 16:51:05 -0500 Subject: [PATCH 21/34] Added CHANGELOG for #125 --- CHANGELOG.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8bf7f7f..46bf1bc 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -13,12 +13,33 @@ All notable changes to this project will be documented in this file, in reverse `ZF\Hal\Link\SelfLinkInjector`; these are now used as collaborators to the `Hal` plugin to simplify internal logic, and allow users to provide alternate strategies for generating the `self` relational link. +- [#125](https://github.com/zfcampus/zf-hal/pull/125) adds a new service, + `ZF\Hal\Link\LinkUrlBuilder`. This class composes the `ServerUrl` and `Url` + view helpers in order to provide the functionality required to build a + route-based link URL. The `Hal` plugin now consumes this instead of + implementing the logic internally. + + The upshot is: you can replace the URL generation semantics for your + application entirely by pointing the service to your own implementation. +- [#125](https://github.com/zfcampus/zf-hal/pull/125) adds service factories for + each of the `LinkExtractor` and `LinkCollectionExtractor`, which now allows + users to provide substitutions for their functionality. (Extractors pull links + and link collections in order to generate the relational links for a HAL-JSON + payload.) ### Deprecated - [#99](https://github.com/zfcampus/zf-hal/pull/99) deprecates usage of property access on `ZF\Hal\Entity` to retrieve the identifier and underlying entity instance. +- [#125](https://github.com/zfcampus/zf-hal/pull/125) deprecates the usage of + `Hal::setServerUrlHelper()` and `Hal::setUrlHelper()`; these will each now + raise an exception indicating the user should use a `LinkUrlBuilder` for URL + generation instead. +- [#125](https://github.com/zfcampus/zf-hal/pull/125) deprecates passing a + `ServerUrlHelper` and `UrlHelper` to the constructor of + `ZF\Hal\Exctractor\LinkExtractor`; it now expects a `LinkUrlBuilder` instance + instead. (This class is primarily an internal detail of the `Hal` plugin.) ### Removed From c665e2253e9989a12a9672a81c5064b610f0bbfc Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 17:02:49 -0500 Subject: [PATCH 22/34] Documented use case for new `resetEntityHashStack()` method --- src/Plugin/Hal.php | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index bb36572..fad33ae 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -1180,6 +1180,11 @@ protected function getIdFromEntity($entity) /** * Reset entity hash stack + * + * Call this method if you are rendering multiple responses within the same + * request cycle that may encounter the same entity instances. + * + * @return void */ public function resetEntityHashStack() { From 05773e9b1fb80147b70ff83f4ddec9c8eb0374a3 Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Wed, 6 Jul 2016 17:04:20 -0500 Subject: [PATCH 23/34] Added CHANGELOG for #139 --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index f5ca5da..bb08096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -26,6 +26,11 @@ All notable changes to this project will be documented in this file, in reverse users to provide substitutions for their functionality. (Extractors pull links and link collections in order to generate the relational links for a HAL-JSON payload.) +- [#139](https://github.com/zfcampus/zf-hal/pull/139) adds the new method + `Hal::resetEntityHashStack()`; this method can be used when rendering multiple + responses and/or payloads within the same request cycle, in order to allow + re-using the same entity instances (normally, they would be skipped when + discovered on subsequent iterations). ### Deprecated From d9cde9fb4609aa7773ff2d0e767fcb1bf101440c Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 7 Jul 2016 10:53:55 -0500 Subject: [PATCH 24/34] Clear out all test warnings and errors This patch updates the tests so that they now run without errors or warnings. There are still seven failures, however, which need addressing. --- composer.json | 118 +++++++++------------ src/Factory/HalConfigFactory.php | 37 ++----- src/Factory/HalControllerPluginFactory.php | 18 ++-- src/Factory/HalJsonRendererFactory.php | 14 +-- src/Factory/HalJsonStrategyFactory.php | 21 ++-- src/Factory/MetadataMapFactory.php | 29 ++--- src/Factory/RendererOptionsFactory.php | 26 ++--- src/Metadata/MetadataMap.php | 3 +- Module.php => src/Module.php | 29 +---- src/Plugin/Hal.php | 3 +- test/ChildEntitiesIntegrationTest.php | 10 +- test/Extractor/LinkExtractorTest.php | 7 +- test/Factory/HalViewHelperFactoryTest.php | 47 +++----- test/Factory/LinkUrlBuilderFactoryTest.php | 22 ++-- test/Link/SelfLinkInjectorTest.php | 15 +-- test/Plugin/HalTest.php | 34 ++++-- test/ResourceFactoryTest.php | 28 +++-- test/TestAsset/EntityDefiningCallback.php | 28 +++++ 18 files changed, 214 insertions(+), 275 deletions(-) rename Module.php => src/Module.php (63%) create mode 100644 test/TestAsset/EntityDefiningCallback.php diff --git a/composer.json b/composer.json index 26f4c8e..b594a57 100644 --- a/composer.json +++ b/composer.json @@ -1,74 +1,54 @@ { - "name": "zfcampus/zf-hal", - "description": "ZF2 Module providing Hypermedia Application Language assets and rendering", - "type": "library", - "minimum-stability": "beta", - "license": "BSD-3-Clause", - "keywords": [ - "zf2", - "zend", - "module", - "rest", - "hal" - ], - "homepage": "http://apigility.org/", - "support": { - "email": "apigility-users@zend.com", - "irc": "irc://irc.freenode.net/apigility", - "source": "https://github.com/zfcampus/zf-hal", - "issues": "https://github.com/zfcampus/zf-hal/issues" - }, - "repositories": [ - { - "type": "composer", - "url": "https://packages.zendframework.com" + "name": "zfcampus/zf-hal", + "description": "ZF2 Module providing Hypermedia Application Language assets and rendering", + "type": "library", + "minimum-stability": "beta", + "license": "BSD-3-Clause", + "keywords": [ + "zf2", + "zend", + "module", + "rest", + "hal" + ], + "homepage": "http://apigility.org/", + "support": { + "email": "apigility-users@zend.com", + "irc": "irc://irc.freenode.net/apigility", + "source": "https://github.com/zfcampus/zf-hal", + "issues": "https://github.com/zfcampus/zf-hal/issues" }, - { - "type": "vcs", - "url": "https://github.com/AGmakonts/zf-api-problem.git" - } - - ], - - "extra": { - "branch-alias": { - "dev-master": "1.3-dev", - "dev-develop": "1.4-dev" - } - }, - "require": { - "php": ">=5.5", - "zfcampus/zf-api-problem": "dev-feature/zf3-support", - "zendframework/zend-escaper": "2.5.*", - "zendframework/zend-eventmanager": "3.0.*", - "zendframework/zend-hydrator": "2.2.*", - "zendframework/zend-json": "2.6.*", - "zendframework/zend-mvc": "3.0.*", - "zendframework/zend-paginator": "2.7.*", - "zendframework/zend-uri": "2.5.*", - "zendframework/zend-view": "2.7.*", - "zendframework/zend-stdlib": "3.0.*" - }, - "require-dev": { - "phpunit/PHPUnit": "5.4.*", - "squizlabs/php_codesniffer": "^2.3.1", - "zendframework/zend-console": "2.6.*", - "zendframework/zend-filter": "2.7.*", - "zendframework/zend-http": "2.5.*", - "zendframework/zend-loader": "2.5.*", - "zendframework/zend-validator": "2.8.*" - }, - "autoload": { - "psr-4": { - "ZF\\Hal\\": "src/" + "extra": { + "branch-alias": { + "dev-master": "1.3-dev", + "dev-develop": "1.4-dev" + } + }, + "require": { + "php": "^5.6 || ^7.0", + "zfcampus/zf-api-problem": "^1.2.1", + "zendframework/zend-eventmanager": "^2.6.3 || ^3.0.1", + "zendframework/zend-filter": "^2.7.1", + "zendframework/zend-http": "^2.5.4", + "zendframework/zend-hydrator": "^2.2.1", + "zendframework/zend-mvc": "^2.7.9 || ^3.0.2", + "zendframework/zend-paginator": "^2.7", + "zendframework/zend-uri": "^2.5.2", + "zendframework/zend-view": "^2.8.1", + "zendframework/zend-stdlib": "^2.7.7 || ^3.0.1" + }, + "require-dev": { + "phpunit/PHPUnit": "^4.8 || ^5.4", + "squizlabs/php_codesniffer": "^2.3.1" + }, + "autoload": { + "psr-4": { + "ZF\\Hal\\": "src/" + } }, - "classmap": [ - "Module.php" - ] - }, - "autoload-dev": { - "psr-4": { - "ZFTest\\Hal\\": "test/" + "autoload-dev": { + "psr-4": { + "ZFTest\\Hal\\": "test/" + } } - } } diff --git a/src/Factory/HalConfigFactory.php b/src/Factory/HalConfigFactory.php index b7afd93..63d582f 100644 --- a/src/Factory/HalConfigFactory.php +++ b/src/Factory/HalConfigFactory.php @@ -1,42 +1,27 @@ has('config')) { - $config = $container->get('config'); - } - - $halConfig = []; - if (isset($config['zf-hal']) && is_array($config['zf-hal'])) { - $halConfig = $config['zf-hal']; - } + $config = $container->has('config') + ? $container->get('config') + : []; - return $halConfig; + return (isset($config['zf-hal']) && is_array($config['zf-hal'])) + ? $config['zf-hal'] + : []; } - - } diff --git a/src/Factory/HalControllerPluginFactory.php b/src/Factory/HalControllerPluginFactory.php index 43e6ee7..527d085 100644 --- a/src/Factory/HalControllerPluginFactory.php +++ b/src/Factory/HalControllerPluginFactory.php @@ -1,29 +1,23 @@ get('ViewHelperManager'); return $helpers->get('Hal'); } - - } diff --git a/src/Factory/HalJsonRendererFactory.php b/src/Factory/HalJsonRendererFactory.php index 97b702c..c2f306c 100644 --- a/src/Factory/HalJsonRendererFactory.php +++ b/src/Factory/HalJsonRendererFactory.php @@ -1,20 +1,22 @@ get('ViewHelperManager'); $apiProblemRenderer = $container->get(ApiProblemRenderer::class); @@ -24,6 +26,4 @@ public function __invoke(ContainerInterface $container, $requestedName, array $o return $renderer; } - - } diff --git a/src/Factory/HalJsonStrategyFactory.php b/src/Factory/HalJsonStrategyFactory.php index 7e56042..9148c8e 100644 --- a/src/Factory/HalJsonStrategyFactory.php +++ b/src/Factory/HalJsonStrategyFactory.php @@ -1,29 +1,22 @@ get('ZF\Hal\JsonRenderer'); - return new View\HalJsonStrategy($renderer); + return new HalJsonStrategy($container->get('ZF\Hal\JsonRenderer')); } } diff --git a/src/Factory/MetadataMapFactory.php b/src/Factory/MetadataMapFactory.php index e31d0e9..cfc78f0 100644 --- a/src/Factory/MetadataMapFactory.php +++ b/src/Factory/MetadataMapFactory.php @@ -1,7 +1,7 @@ get('ZF\Hal\HalConfig'); - if ($container->has('HydratorManager')) { - $hydrators = $container->get('HydratorManager'); - } else { - $hydrators = new HydratorPluginManager($container); - } + $hydrators = $container->has('HydratorManager') + ? $container->get('HydratorManager') + : new HydratorPluginManager($container); - $map = []; - if (isset($config['metadata_map']) && is_array($config['metadata_map'])) { - $map = $config['metadata_map']; - } + $map = (isset($config['metadata_map']) && is_array($config['metadata_map'])) + ? $config['metadata_map'] + : []; return new Metadata\MetadataMap($map, $hydrators); } - } diff --git a/src/Factory/RendererOptionsFactory.php b/src/Factory/RendererOptionsFactory.php index ae753c6..5f049c6 100644 --- a/src/Factory/RendererOptionsFactory.php +++ b/src/Factory/RendererOptionsFactory.php @@ -1,7 +1,7 @@ get('ZF\Hal\HalConfig'); - $rendererConfig = []; - if (isset($config['renderer']) && is_array($config['renderer'])) { - $rendererConfig = $config['renderer']; - } + $rendererConfig = (isset($config['renderer']) && is_array($config['renderer'])) + ? $config['renderer'] + : []; if (isset($rendererConfig['render_embedded_resources']) - && !isset($rendererConfig['render_embedded_entities']) + && ! isset($rendererConfig['render_embedded_entities']) ) { $rendererConfig['render_embedded_entities'] = $rendererConfig['render_embedded_resources']; } diff --git a/src/Metadata/MetadataMap.php b/src/Metadata/MetadataMap.php index 4ca887f..70f8769 100644 --- a/src/Metadata/MetadataMap.php +++ b/src/Metadata/MetadataMap.php @@ -7,6 +7,7 @@ namespace ZF\Hal\Metadata; use Zend\Hydrator\HydratorPluginManager; +use Zend\ServiceManager\ServiceManager; use ZF\Hal\Exception; class MetadataMap @@ -57,7 +58,7 @@ public function setHydratorManager(HydratorPluginManager $hydrators) public function getHydratorManager() { if (null === $this->hydrators) { - $this->setHydratorManager(new HydratorPluginManager()); + $this->setHydratorManager(new HydratorPluginManager(new ServiceManager())); } return $this->hydrators; } diff --git a/Module.php b/src/Module.php similarity index 63% rename from Module.php rename to src/Module.php index a9cf2f0..01435a9 100644 --- a/Module.php +++ b/src/Module.php @@ -1,36 +1,16 @@ [ - 'namespaces' => [ - __NAMESPACE__ => __DIR__ . '/src/', - ], - ], - ]; - } - /** * Retrieve module configuration * @@ -38,7 +18,7 @@ public function getAutoloaderConfig() */ public function getConfig() { - return include __DIR__ . '/config/module.config.php'; + return include __DIR__ . '/../config/module.config.php'; } /** @@ -64,7 +44,7 @@ public function onBootstrap(MvcEvent $e) public function onRender(MvcEvent $e) { $result = $e->getResult(); - if (!$result instanceof View\HalJsonModel) { + if (! $result instanceof View\HalJsonModel) { return; } @@ -73,8 +53,7 @@ public function onRender(MvcEvent $e) // register at high priority, to "beat" normal json strategy registered // via view manager - /** @var HalJsonStrategy $halStrategy */ $halStrategy = $services->get('ZF\Hal\JsonStrategy'); - $halStrategy->attach($events,200); + $halStrategy->attach($events, 200); } } diff --git a/src/Plugin/Hal.php b/src/Plugin/Hal.php index fad33ae..021a8f4 100644 --- a/src/Plugin/Hal.php +++ b/src/Plugin/Hal.php @@ -17,6 +17,7 @@ use Zend\Hydrator\HydratorPluginManager; use Zend\Mvc\Controller\Plugin\PluginInterface as ControllerPluginInterface; use Zend\Paginator\Paginator; +use Zend\ServiceManager\ServiceManager; use Zend\Stdlib\DispatchableInterface; use Zend\View\Helper\AbstractHelper; use ZF\ApiProblem\ApiProblem; @@ -125,7 +126,7 @@ class Hal extends AbstractHelper implements public function __construct(HydratorPluginManager $hydrators = null) { if (null === $hydrators) { - $hydrators = new HydratorPluginManager(); + $hydrators = new HydratorPluginManager(new ServiceManager()); } $this->hydrators = $hydrators; } diff --git a/test/ChildEntitiesIntegrationTest.php b/test/ChildEntitiesIntegrationTest.php index 49fc7ec..0cf01cc 100644 --- a/test/ChildEntitiesIntegrationTest.php +++ b/test/ChildEntitiesIntegrationTest.php @@ -10,6 +10,7 @@ use Zend\Http\Request; use Zend\Hydrator\HydratorPluginManager; use Zend\Mvc\Controller\PluginManager as ControllerPluginManager; +use Zend\Mvc\Router\Http\TreeRouteStack as V2TreeRouteStack; use Zend\Router\Http\TreeRouteStack; use Zend\ServiceManager\ServiceManager; use Zend\View\HelperPluginManager; @@ -108,7 +109,10 @@ public function setupRouter() ], ], ]; - $this->router = $router = new TreeRouteStack(); + + $class = class_exists(V2TreeRouteStack::class) ? V2TreeRouteStack::class : TreeRouteStack::class; + + $this->router = $router = new $class(); $router->addRoutes($routes); } @@ -285,7 +289,9 @@ public function setUpAlternateRouter() ], ], ]; - $this->router = $router = new TreeRouteStack(); + + $class = class_exists(V2TreeRouteStack::class) ? V2TreeRouteStack::class : TreeRouteStack::class; + $this->router = $router = new $class(); $router->addRoutes($routes); $this->helpers->get('url')->setRouter($router); } diff --git a/test/Extractor/LinkExtractorTest.php b/test/Extractor/LinkExtractorTest.php index 497263f..37b1214 100644 --- a/test/Extractor/LinkExtractorTest.php +++ b/test/Extractor/LinkExtractorTest.php @@ -8,6 +8,8 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\Http\Request; +use Zend\Mvc\Router\Http\TreeRouteStack as V2TreeRouteStack; +use Zend\Mvc\Router\RouteMatch as V2RouteMatch; use Zend\Router\Http\TreeRouteStack; use Zend\Router\RouteMatch; use Zend\View\Helper\Url as UrlHelper; @@ -121,7 +123,8 @@ private function matchUrl($url, $urlHelper) $request = new Request(); $request->setUri($url); - $router = new TreeRouteStack(); + $routerClass = class_exists(V2TreeRouteStack::class) ? V2TreeRouteStack::class : TreeRouteStack::class; + $router = new $routerClass(); $router->addRoute('hostname', [ 'type' => 'hostname', @@ -139,7 +142,7 @@ private function matchUrl($url, $urlHelper) ]); $match = $router->match($request); - if ($match instanceof RouteMatch) { + if ($match instanceof RouteMatch || $match instanceof V2RouteMatch) { $urlHelper->setRouter($router); $urlHelper->setRouteMatch($match); } diff --git a/test/Factory/HalViewHelperFactoryTest.php b/test/Factory/HalViewHelperFactoryTest.php index e5e90ac..c89a5bb 100644 --- a/test/Factory/HalViewHelperFactoryTest.php +++ b/test/Factory/HalViewHelperFactoryTest.php @@ -11,6 +11,8 @@ use Zend\ServiceManager\AbstractPluginManager; use Zend\ServiceManager\ServiceManager; use Zend\Hydrator\HydratorPluginManager; +use ZF\Hal\Extractor\LinkCollectionExtractor; +use ZF\Hal\Link; use ZF\Hal\Factory\HalViewHelperFactory; use ZF\Hal\RendererOptions; @@ -30,29 +32,31 @@ public function setupPluginManager($config = []) } else { $rendererOptions = new RendererOptions(); } + $services->setService(RendererOptions::class, $rendererOptions); $metadataMap = $this->createMock('ZF\Hal\Metadata\MetadataMap'); $metadataMap ->expects($this->once()) ->method('getHydratorManager') ->will($this->returnValue(new HydratorPluginManager($services))); - $services->setService('ZF\Hal\MetadataMap', $metadataMap); - $linkUrlBuilder = $this->getMockBuilder('ZF\Hal\Link\LinkUrlBuilder') + $linkUrlBuilder = $this->getMockBuilder(Link\LinkUrlBuilder::class) ->disableOriginalConstructor() ->getMock(); - $services->setService('ZF\Hal\Link\LinkUrlBuilder', $linkUrlBuilder); + $services->setService(Link\LinkUrlBuilder::class, $linkUrlBuilder); - $linkCollectionExtractor = $this->getMockBuilder('ZF\Hal\Extractor\LinkCollectionExtractor') + $linkCollectionExtractor = $this->getMockBuilder(LinkCollectionExtractor::class) ->disableOriginalConstructor() ->getMock(); - $services->setService('ZF\Hal\Extractor\LinkCollectionExtractor', $linkCollectionExtractor); + $services->setService(LinkCollectionExtractor::class, $linkCollectionExtractor); + + $pluginManagerMock = $this->getMockBuilder(AbstractPluginManager::class); + $pluginManagerMock->setConstructorArgs([$services]); + $this->pluginManager = $pluginManagerMock->getMock(); + $services->setService('ViewHelperManager', $this->pluginManager); - $pluginManager = $this->getMock('Zend\ServiceManager\AbstractPluginManager'); - $pluginManager - ->method('getServiceLocator') - ->will($this->returnValue($services)); + $this->services = $services; } public function testInstantiatesHalViewHelper() @@ -64,29 +68,4 @@ public function testInstantiatesHalViewHelper() $this->assertInstanceOf('ZF\Hal\Plugin\Hal', $plugin); } - - /** - * @group fail - */ - public function testOptionUseProxyIfPresentInConfig() - { - $options = [ - 'options' => [ - 'use_proxy' => true, - ], - ]; - - $this->setupPluginManager($options); - - $factory = new HalViewHelperFactory(); - $halPlugin = $factory($this->services, 'Hal'); - - $r = new ReflectionObject($halPlugin); - $p = $r->getProperty('serverUrlHelper'); - $p->setAccessible(true); - $serverUrlPlugin = $p->getValue($halPlugin); - $this->assertInstanceOf('Zend\View\Helper\ServerUrl', $serverUrlPlugin); - - return $pluginManager; - } } diff --git a/test/Factory/LinkUrlBuilderFactoryTest.php b/test/Factory/LinkUrlBuilderFactoryTest.php index 0421cdf..b9d9a4c 100644 --- a/test/Factory/LinkUrlBuilderFactoryTest.php +++ b/test/Factory/LinkUrlBuilderFactoryTest.php @@ -8,7 +8,9 @@ use PHPUnit_Framework_TestCase as TestCase; use Zend\ServiceManager\ServiceManager; +use Zend\View\Helper; use ZF\Hal\Factory\LinkUrlBuilderFactory; +use ZF\Hal\Link\LinkUrlBuilder; class LinkUrlBuilderFactoryTest extends TestCase { @@ -19,7 +21,7 @@ public function testInstantiatesLinkUrlBuilder() $factory = new LinkUrlBuilderFactory(); $builder = $factory($serviceManager); - $this->assertInstanceOf('ZF\Hal\Link\LinkUrlBuilder', $builder); + $this->assertInstanceOf(LinkUrlBuilder::class, $builder); } public function testOptionUseProxyIfPresentInConfig() @@ -31,13 +33,9 @@ public function testOptionUseProxyIfPresentInConfig() ]; $serviceManager = $this->getServiceManager($options); - $viewHelperManager = $serviceManager->get('ViewHelperManager'); - $serverUrlHelper = $viewHelperManager->get('ServerUrl'); - - $serverUrlHelper - ->expects($this->once()) - ->method('setUseProxy') - ->with($options['options']['use_proxy']); + $this->serverUrlHelper + ->setUseProxy($options['options']['use_proxy']) + ->shouldBeCalled(); $factory = new LinkUrlBuilderFactory(); $factory($serviceManager); @@ -52,11 +50,11 @@ private function getServiceManager($config = []) $viewHelperManager = new ServiceManager(); $serviceManager->setService('ViewHelperManager', $viewHelperManager); - $serverUrlHelper = $this->getMock('Zend\View\Helper\ServerUrl'); - $viewHelperManager->setService('ServerUrl', $serverUrlHelper); + $this->serverUrlHelper = $serverUrlHelper = $this->prophesize(Helper\ServerUrl::class); + $viewHelperManager->setService('ServerUrl', $serverUrlHelper->reveal()); - $urlHelper = $this->getMock('Zend\View\Helper\Url'); - $viewHelperManager->setService('Url', $urlHelper); + $this->urlHelper = $urlHelper = $this->prophesize(Helper\Url::class); + $viewHelperManager->setService('Url', $urlHelper->reveal()); return $serviceManager; } diff --git a/test/Link/SelfLinkInjectorTest.php b/test/Link/SelfLinkInjectorTest.php index 6531a50..f79509f 100644 --- a/test/Link/SelfLinkInjectorTest.php +++ b/test/Link/SelfLinkInjectorTest.php @@ -6,6 +6,7 @@ namespace ZFTest\Hal\Link; +use Prophecy\Argument; use ZF\Hal\Collection; use ZF\Hal\Entity; use ZF\Hal\Link\LinkCollection; @@ -16,19 +17,13 @@ class SelfLinkInjectorTest extends TestCase { public function testInjectSelfLinkAlreadyAddedShouldBePrevented() { - $linkCollection = $this->getMock(LinkCollection::class); + $linkCollection = $this->prophesize(LinkCollection::class); - $linkCollection - ->method('has') - ->with('self') - ->will($this->returnValue(true)); - - $linkCollection - ->expects($this->never()) - ->method('add'); + $linkCollection->has('self')->willReturn(true); + $linkCollection->add(Argument::any())->shouldNotBeCalled(); $resource = new Entity([]); - $resource->setLinks($linkCollection); + $resource->setLinks($linkCollection->reveal()); $injector = new SelfLinkInjector(); $injector->injectSelfLink($resource, 'foo'); diff --git a/test/Plugin/HalTest.php b/test/Plugin/HalTest.php index 26141eb..caa7765 100644 --- a/test/Plugin/HalTest.php +++ b/test/Plugin/HalTest.php @@ -8,11 +8,15 @@ use PHPUnit_Framework_TestCase as TestCase; use ReflectionObject; -use Zend\Router\Http\TreeRouteStack; -use Zend\Router\Http\Segment; use Zend\Mvc\MvcEvent; +use Zend\Mvc\Router\Exception as V2RouterException; +use Zend\Mvc\Router\Http\Segment as V2Segment; +use Zend\Mvc\Router\Http\TreeRouteStack as V2TreeRouteStack; use Zend\Paginator\Adapter\ArrayAdapter as ArrayPaginator; use Zend\Paginator\Paginator; +use Zend\Router\Exception as RouterException; +use Zend\Router\Http\Segment; +use Zend\Router\Http\TreeRouteStack; use Zend\ServiceManager\ServiceManager; use Zend\Uri\Http; use Zend\Hydrator; @@ -42,10 +46,13 @@ class HalTest extends TestCase public function setUp() { - $this->router = $router = new TreeRouteStack(); - $route = new Segment('/resource[/[:id]]'); + $routerClass = class_exists(V2TreeRouteStack::class) ? V2TreeRouteStack::class : TreeRouteStack::class; + $routeClass = class_exists(V2Segment::class) ? V2Segment::class : Segment::class; + + $this->router = $router = new $routerClass(); + $route = new $routeClass('/resource[/[:id]]'); $router->addRoute('resource', $route); - $route2 = new Segment('/help'); + $route2 = new $routeClass('/help'); $router->addRoute('docs', $route2); $router->addRoute('hostname', [ 'type' => 'hostname', @@ -1942,7 +1949,8 @@ public function testRendersAttributeAsPartOfPaginatedCollection() public function testCanRenderNestedEntitiesAsEmbeddedEntities() { - $this->router->addRoute('user', new Segment('/user[/:id]')); + $routeClass = class_exists(V2Segment::class) ? V2Segment::class : Segment::class; + $this->router->addRoute('user', new $routeClass('/user[/:id]')); $child = new Entity([ 'id' => 'matthew', @@ -1979,7 +1987,8 @@ public function testCanRenderNestedEntitiesAsEmbeddedEntities() public function testRendersEmbeddedEntitiesOfIndividualNonPaginatedCollections() { - $this->router->addRoute('user', new Segment('/user[/:id]')); + $routeClass = class_exists(V2Segment::class) ? V2Segment::class : Segment::class; + $this->router->addRoute('user', new $routeClass('/user[/:id]')); $child = new Entity([ 'id' => 'matthew', @@ -2028,7 +2037,8 @@ public function testRendersEmbeddedEntitiesOfIndividualNonPaginatedCollections() public function testRendersEmbeddedEntitiesOfIndividualPaginatedCollections() { - $this->router->addRoute('user', new Segment('/user[/:id]')); + $routeClass = class_exists(V2Segment::class) ? V2Segment::class : Segment::class; + $this->router->addRoute('user', new $routeClass('/user[/:id]')); $child = new Entity([ 'id' => 'matthew', @@ -2176,7 +2186,7 @@ public function testSetServerUrlHelperRaisesExceptionIndicatingDeprecation() } /** - * @expectedException \Zend\Mvc\Router\Exception\RuntimeException + * @group 101 */ public function testNotExistingRouteInMetadataLinks() { @@ -2205,6 +2215,12 @@ public function testNotExistingRouteInMetadataLinks() ]); $this->plugin->setMetadataMap($metadata); + + $expectedExceptionClass = class_exists(V2RouterException\RuntimeException::class) + ? V2RouterException\RuntimeException::class + : RouterException\RuntimeException::class; + + $this->setExpectedException($expectedExceptionClass); $this->plugin->renderEntity($entity); } } diff --git a/test/ResourceFactoryTest.php b/test/ResourceFactoryTest.php index 9988f89..32b3f39 100644 --- a/test/ResourceFactoryTest.php +++ b/test/ResourceFactoryTest.php @@ -13,7 +13,7 @@ use ZF\Hal\Extractor\EntityExtractor; use ZF\Hal\Metadata\MetadataMap; use ZF\Hal\ResourceFactory; -use ZFTest\Hal\Plugin\TestAsset; +use ZFTest\Hal\Plugin\TestAsset as HalPluginTestAsset; /** * @subpackage UnitTest @@ -25,10 +25,10 @@ class ResourceFactoryTest extends TestCase */ public function testInjectsLinksFromMetadataWhenCreatingEntity() { - $object = new TestAsset\Entity('foo', 'Foo'); + $object = new HalPluginTestAsset\Entity('foo', 'Foo'); $metadata = new MetadataMap([ - 'ZFTest\Hal\Plugin\TestAsset\Entity' => [ + HalPluginTestAsset\Entity::class => [ 'hydrator' => 'Zend\Hydrator\ObjectProperty', 'route_name' => 'hostname/resource', 'links' => [ @@ -51,7 +51,7 @@ public function testInjectsLinksFromMetadataWhenCreatingEntity() $entity = $resourceFactory->createEntityFromMetadata( $object, - $metadata->get('ZFTest\Hal\Plugin\TestAsset\Entity') + $metadata->get(HalPluginTestAsset\Entity::class) ); $this->assertInstanceof('ZF\Hal\Entity', $entity); @@ -80,22 +80,18 @@ public function testInjectsLinksFromMetadataWhenCreatingEntity() */ public function testRouteParamsAllowsCallable() { - $object = new TestAsset\Entity('foo', 'Foo'); + $object = new HalPluginTestAsset\Entity('foo', 'Foo'); - $callback = $this->createMock('stdClass', ['callback']); - $callback->expects($this->atLeastOnce()) - ->method('callback') - ->with($this->equalTo($object)) - ->will($this->returnValue('callback-param')); + $entityDefiningCallback = new TestAsset\EntityDefiningCallback($this, $object); $test = $this; $metadata = new MetadataMap([ - 'ZFTest\Hal\Plugin\TestAsset\Entity' => [ + HalPluginTestAsset\Entity::class => [ 'hydrator' => 'Zend\Hydrator\ObjectProperty', 'route_name' => 'hostname/resource', 'route_params' => [ - 'test-1' => [$callback, 'callback'], + 'test-1' => [$entityDefiningCallback, 'callback'], 'test-2' => function ($expected) use ($object, $test) { $test->assertSame($expected, $object); $test->assertSame($object, $this); @@ -110,7 +106,7 @@ public function testRouteParamsAllowsCallable() $entity = $resourceFactory->createEntityFromMetadata( $object, - $metadata->get('ZFTest\Hal\Plugin\TestAsset\Entity') + $metadata->get(HalPluginTestAsset\Entity::class) ); $this->assertInstanceof('ZF\Hal\Entity', $entity); @@ -133,14 +129,14 @@ public function testRouteParamsAllowsCallable() */ public function testInjectsLinksFromMetadataWhenCreatingCollection() { - $set = new TestAsset\Collection([ + $set = new HalPluginTestAsset\Collection([ (object) ['id' => 'foo', 'name' => 'foo'], (object) ['id' => 'bar', 'name' => 'bar'], (object) ['id' => 'baz', 'name' => 'baz'], ]); $metadata = new MetadataMap([ - 'ZFTest\Hal\Plugin\TestAsset\Collection' => [ + HalPluginTestAsset\Collection::class => [ 'is_collection' => true, 'route_name' => 'hostname/contacts', 'entity_route_name' => 'hostname/embedded', @@ -158,7 +154,7 @@ public function testInjectsLinksFromMetadataWhenCreatingCollection() $collection = $resourceFactory->createCollectionFromMetadata( $set, - $metadata->get('ZFTest\Hal\Plugin\TestAsset\Collection') + $metadata->get(HalPluginTestAsset\Collection::class) ); $this->assertInstanceof('ZF\Hal\Collection', $collection); diff --git a/test/TestAsset/EntityDefiningCallback.php b/test/TestAsset/EntityDefiningCallback.php new file mode 100644 index 0000000..2c88a91 --- /dev/null +++ b/test/TestAsset/EntityDefiningCallback.php @@ -0,0 +1,28 @@ +phpunit = $phpunit; + $this->expected = $expected; + } + + public function callback($value) + { + $this->phpunit->assertSame($this->expected, $value); + return 'callback-param'; + } +} From 5d6269045e0dcdb33ba7983031feef18411ef28c Mon Sep 17 00:00:00 2001 From: Matthew Weier O'Phinney Date: Thu, 7 Jul 2016 11:19:30 -0500 Subject: [PATCH 25/34] Removed obsolete PhlyRestfully API documentation --- docs/api/phpdoc/classes.svg | 512 - .../classes/PhlyRestfully.ApiProblem.html | 168 - ...Restfully.Exception.CreationException.html | 231 - ...lyRestfully.Exception.DomainException.html | 196 - ...estfully.Exception.ExceptionInterface.html | 87 - ...ly.Exception.InvalidArgumentException.html | 84 - ....Exception.InvalidCollectionException.html | 84 - ...ly.Exception.InvalidResourceException.html | 84 - ...hlyRestfully.Exception.PatchException.html | 231 - ...y.Exception.ProblemExceptionInterface.html | 122 - ...yRestfully.Exception.RuntimeException.html | 84 - ...lyRestfully.Exception.UpdateException.html | 231 - ...lly.Factory.ResourceControllerFactory.html | 152 - .../classes/PhlyRestfully.HalCollection.html | 409 - .../classes/PhlyRestfully.HalResource.html | 160 - .../phpdoc/classes/PhlyRestfully.Link.html | 290 - .../classes/PhlyRestfully.LinkCollection.html | 188 - ...estfully.LinkCollectionAwareInterface.html | 110 - ...Restfully.Listener.ApiProblemListener.html | 158 - ...y.Listener.ResourceParametersListener.html | 169 - .../classes/PhlyRestfully.Metadata.html | 420 - .../classes/PhlyRestfully.MetadataMap.html | 154 - .../PhlyRestfully.Plugin.HalLinks.html | 496 - .../classes/PhlyRestfully.Resource.html | 472 - .../PhlyRestfully.ResourceController.html | 484 - .../classes/PhlyRestfully.ResourceEvent.html | 202 - .../PhlyRestfully.ResourceInterface.html | 308 - .../PhlyRestfully.View.RestfulJsonModel.html | 156 - ...hlyRestfully.View.RestfulJsonRenderer.html | 190 - ...hlyRestfully.View.RestfulJsonStrategy.html | 149 - docs/api/phpdoc/css/bootstrap-responsive.css | 567 - .../phpdoc/css/bootstrap-responsive.min.css | 3 - docs/api/phpdoc/css/bootstrap.css | 3370 ------ docs/api/phpdoc/css/bootstrap.min.css | 611 -- docs/api/phpdoc/css/jquery.iviewer.css | 91 - docs/api/phpdoc/css/prettify.css | 1 - docs/api/phpdoc/css/template.css | 516 - docs/api/phpdoc/deprecated.html | 76 - docs/api/phpdoc/errors.html | 1146 -- docs/api/phpdoc/graph_class.html | 73 - .../phpdoc/img/apple-touch-icon-114x114.png | Bin 28338 -> 0 bytes .../api/phpdoc/img/apple-touch-icon-72x72.png | Bin 12751 -> 0 bytes docs/api/phpdoc/img/apple-touch-icon.png | Bin 8358 -> 0 bytes docs/api/phpdoc/img/favicon.ico | Bin 1150 -> 0 bytes .../phpdoc/img/glyphicons-halflings-white.png | Bin 4352 -> 0 bytes docs/api/phpdoc/img/glyphicons-halflings.png | Bin 4352 -> 0 bytes docs/api/phpdoc/img/icons/arrow_down.png | Bin 606 -> 0 bytes docs/api/phpdoc/img/icons/arrow_right.png | Bin 628 -> 0 bytes docs/api/phpdoc/img/icons/class.png | Bin 395 -> 0 bytes docs/api/phpdoc/img/icons/constant.png | Bin 496 -> 0 bytes docs/api/phpdoc/img/icons/favicon.ico | Bin 1150 -> 0 bytes docs/api/phpdoc/img/icons/file-php.png | Bin 4017 -> 0 bytes docs/api/phpdoc/img/icons/file.gif | Bin 110 -> 0 bytes docs/api/phpdoc/img/icons/folder.gif | Bin 106 -> 0 bytes docs/api/phpdoc/img/icons/function.png | Bin 338 -> 0 bytes .../phpdoc/img/icons/icon-folder-open-big.png | Bin 232 -> 0 bytes docs/api/phpdoc/img/icons/icon-th-big.png | Bin 106 -> 0 bytes docs/api/phpdoc/img/icons/icon_template.svg | 93 - docs/api/phpdoc/img/icons/interface.png | Bin 281 -> 0 bytes docs/api/phpdoc/img/icons/method.png | Bin 377 -> 0 bytes docs/api/phpdoc/img/icons/ok.png | Bin 3685 -> 0 bytes docs/api/phpdoc/img/icons/property.png | Bin 360 -> 0 bytes docs/api/phpdoc/img/icons/search.gif | Bin 152 -> 0 bytes docs/api/phpdoc/img/icons/variable.png | Bin 829 -> 0 bytes docs/api/phpdoc/img/icons/view_source.png | Bin 603 -> 0 bytes .../phpdoc/img/icons/visibility_private.png | Bin 3433 -> 0 bytes .../phpdoc/img/icons/visibility_protected.png | Bin 764 -> 0 bytes .../phpdoc/img/icons/visibility_public.png | Bin 3451 -> 0 bytes docs/api/phpdoc/img/iviewer/grab.cur | Bin 1150 -> 0 bytes docs/api/phpdoc/img/iviewer/hand.cur | Bin 1150 -> 0 bytes .../img/iviewer/iviewer.rotate_left.png | Bin 1493 -> 0 bytes .../img/iviewer/iviewer.rotate_right.png | Bin 1482 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_fit.png | Bin 1252 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_fit2.gif | Bin 95 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_in.png | Bin 1420 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_in2.gif | Bin 90 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_out.png | Bin 1416 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_out2.gif | Bin 69 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_zero.png | Bin 1091 -> 0 bytes .../phpdoc/img/iviewer/iviewer.zoom_zero2.gif | Bin 98 -> 0 bytes docs/api/phpdoc/img/loader.gif | Bin 4726 -> 0 bytes docs/api/phpdoc/index.html | 96 - docs/api/phpdoc/js/SVGPan.js | 232 - docs/api/phpdoc/js/bootstrap.js | 1722 --- docs/api/phpdoc/js/bootstrap.min.js | 1 - docs/api/phpdoc/js/jquery-1.4.2.min.js | 154 - docs/api/phpdoc/js/jquery-1.7.1.min.js | 9270 ----------------- .../phpdoc/js/jquery-ui-1.8.2.custom.min.js | 1012 -- docs/api/phpdoc/js/jquery.cookie.js | 104 - docs/api/phpdoc/js/jquery.iviewer.js | 1045 -- docs/api/phpdoc/js/jquery.iviewer.min.js | 42 - docs/api/phpdoc/js/jquery.mousewheel.min.js | 13 - docs/api/phpdoc/js/jquery.panzoom.js | 467 - docs/api/phpdoc/js/jquery.splitter.js | 228 - docs/api/phpdoc/js/jquery.tools.min.js | 115 - docs/api/phpdoc/js/jquery.treeview.js | 256 - docs/api/phpdoc/js/menu.js | 31 - docs/api/phpdoc/js/prettify/lang-apollo.js | 2 - docs/api/phpdoc/js/prettify/lang-clj.js | 18 - docs/api/phpdoc/js/prettify/lang-css.js | 2 - docs/api/phpdoc/js/prettify/lang-go.js | 1 - docs/api/phpdoc/js/prettify/lang-hs.js | 2 - docs/api/phpdoc/js/prettify/lang-lisp.js | 3 - docs/api/phpdoc/js/prettify/lang-lua.js | 2 - docs/api/phpdoc/js/prettify/lang-ml.js | 2 - docs/api/phpdoc/js/prettify/lang-n.js | 4 - docs/api/phpdoc/js/prettify/lang-proto.js | 1 - docs/api/phpdoc/js/prettify/lang-scala.js | 2 - docs/api/phpdoc/js/prettify/lang-sql.js | 2 - docs/api/phpdoc/js/prettify/lang-tex.js | 1 - docs/api/phpdoc/js/prettify/lang-vb.js | 2 - docs/api/phpdoc/js/prettify/lang-vhdl.js | 3 - docs/api/phpdoc/js/prettify/lang-wiki.js | 2 - docs/api/phpdoc/js/prettify/lang-xq.js | 3 - docs/api/phpdoc/js/prettify/lang-yaml.js | 2 - docs/api/phpdoc/js/prettify/prettify.min.js | 28 - docs/api/phpdoc/js/sidebar.js | 45 - docs/api/phpdoc/js/template.js | 188 - docs/api/phpdoc/markers.html | 98 - .../namespaces/PhlyRestfully.Exception.html | 163 - .../namespaces/PhlyRestfully.Factory.html | 97 - .../namespaces/PhlyRestfully.Listener.html | 104 - .../namespaces/PhlyRestfully.Plugin.html | 97 - .../phpdoc/namespaces/PhlyRestfully.View.html | 113 - docs/api/phpdoc/namespaces/PhlyRestfully.html | 376 - docs/api/phpdoc/packages/Default.html | 322 - .../packages/PhlyRestfully.Factory.html | 97 - docs/api/phpdoc/packages/PhlyRestfully.html | 101 - docs/api/phpdoc/structure.xml | 4218 -------- 129 files changed, 34217 deletions(-) delete mode 100644 docs/api/phpdoc/classes.svg delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.ApiProblem.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.CreationException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.DomainException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.ExceptionInterface.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidArgumentException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidCollectionException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidResourceException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.PatchException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.ProblemExceptionInterface.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.RuntimeException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Exception.UpdateException.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Factory.ResourceControllerFactory.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.HalCollection.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.HalResource.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Link.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.LinkCollection.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.LinkCollectionAwareInterface.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Listener.ApiProblemListener.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Listener.ResourceParametersListener.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Metadata.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.MetadataMap.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Plugin.HalLinks.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.Resource.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.ResourceController.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.ResourceInterface.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonModel.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonRenderer.html delete mode 100644 docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonStrategy.html delete mode 100644 docs/api/phpdoc/css/bootstrap-responsive.css delete mode 100644 docs/api/phpdoc/css/bootstrap-responsive.min.css delete mode 100644 docs/api/phpdoc/css/bootstrap.css delete mode 100644 docs/api/phpdoc/css/bootstrap.min.css delete mode 100644 docs/api/phpdoc/css/jquery.iviewer.css delete mode 100644 docs/api/phpdoc/css/prettify.css delete mode 100644 docs/api/phpdoc/css/template.css delete mode 100644 docs/api/phpdoc/deprecated.html delete mode 100644 docs/api/phpdoc/errors.html delete mode 100644 docs/api/phpdoc/graph_class.html delete mode 100644 docs/api/phpdoc/img/apple-touch-icon-114x114.png delete mode 100644 docs/api/phpdoc/img/apple-touch-icon-72x72.png delete mode 100644 docs/api/phpdoc/img/apple-touch-icon.png delete mode 100644 docs/api/phpdoc/img/favicon.ico delete mode 100644 docs/api/phpdoc/img/glyphicons-halflings-white.png delete mode 100644 docs/api/phpdoc/img/glyphicons-halflings.png delete mode 100644 docs/api/phpdoc/img/icons/arrow_down.png delete mode 100644 docs/api/phpdoc/img/icons/arrow_right.png delete mode 100644 docs/api/phpdoc/img/icons/class.png delete mode 100644 docs/api/phpdoc/img/icons/constant.png delete mode 100644 docs/api/phpdoc/img/icons/favicon.ico delete mode 100644 docs/api/phpdoc/img/icons/file-php.png delete mode 100644 docs/api/phpdoc/img/icons/file.gif delete mode 100644 docs/api/phpdoc/img/icons/folder.gif delete mode 100644 docs/api/phpdoc/img/icons/function.png delete mode 100644 docs/api/phpdoc/img/icons/icon-folder-open-big.png delete mode 100644 docs/api/phpdoc/img/icons/icon-th-big.png delete mode 100644 docs/api/phpdoc/img/icons/icon_template.svg delete mode 100644 docs/api/phpdoc/img/icons/interface.png delete mode 100644 docs/api/phpdoc/img/icons/method.png delete mode 100644 docs/api/phpdoc/img/icons/ok.png delete mode 100644 docs/api/phpdoc/img/icons/property.png delete mode 100644 docs/api/phpdoc/img/icons/search.gif delete mode 100644 docs/api/phpdoc/img/icons/variable.png delete mode 100644 docs/api/phpdoc/img/icons/view_source.png delete mode 100644 docs/api/phpdoc/img/icons/visibility_private.png delete mode 100644 docs/api/phpdoc/img/icons/visibility_protected.png delete mode 100644 docs/api/phpdoc/img/icons/visibility_public.png delete mode 100644 docs/api/phpdoc/img/iviewer/grab.cur delete mode 100644 docs/api/phpdoc/img/iviewer/hand.cur delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.rotate_left.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.rotate_right.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_fit.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_fit2.gif delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_in.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_in2.gif delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_out.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_out2.gif delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_zero.png delete mode 100644 docs/api/phpdoc/img/iviewer/iviewer.zoom_zero2.gif delete mode 100644 docs/api/phpdoc/img/loader.gif delete mode 100644 docs/api/phpdoc/index.html delete mode 100644 docs/api/phpdoc/js/SVGPan.js delete mode 100644 docs/api/phpdoc/js/bootstrap.js delete mode 100644 docs/api/phpdoc/js/bootstrap.min.js delete mode 100644 docs/api/phpdoc/js/jquery-1.4.2.min.js delete mode 100644 docs/api/phpdoc/js/jquery-1.7.1.min.js delete mode 100644 docs/api/phpdoc/js/jquery-ui-1.8.2.custom.min.js delete mode 100644 docs/api/phpdoc/js/jquery.cookie.js delete mode 100644 docs/api/phpdoc/js/jquery.iviewer.js delete mode 100644 docs/api/phpdoc/js/jquery.iviewer.min.js delete mode 100644 docs/api/phpdoc/js/jquery.mousewheel.min.js delete mode 100644 docs/api/phpdoc/js/jquery.panzoom.js delete mode 100644 docs/api/phpdoc/js/jquery.splitter.js delete mode 100644 docs/api/phpdoc/js/jquery.tools.min.js delete mode 100644 docs/api/phpdoc/js/jquery.treeview.js delete mode 100644 docs/api/phpdoc/js/menu.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-apollo.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-clj.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-css.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-go.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-hs.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-lisp.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-lua.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-ml.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-n.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-proto.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-scala.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-sql.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-tex.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-vb.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-vhdl.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-wiki.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-xq.js delete mode 100644 docs/api/phpdoc/js/prettify/lang-yaml.js delete mode 100644 docs/api/phpdoc/js/prettify/prettify.min.js delete mode 100644 docs/api/phpdoc/js/sidebar.js delete mode 100644 docs/api/phpdoc/js/template.js delete mode 100644 docs/api/phpdoc/markers.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.Exception.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.Factory.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.Listener.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.Plugin.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.View.html delete mode 100644 docs/api/phpdoc/namespaces/PhlyRestfully.html delete mode 100644 docs/api/phpdoc/packages/Default.html delete mode 100644 docs/api/phpdoc/packages/PhlyRestfully.Factory.html delete mode 100644 docs/api/phpdoc/packages/PhlyRestfully.html delete mode 100644 docs/api/phpdoc/structure.xml diff --git a/docs/api/phpdoc/classes.svg b/docs/api/phpdoc/classes.svg deleted file mode 100644 index cbc692e..0000000 --- a/docs/api/phpdoc/classes.svg +++ /dev/null @@ -1,512 +0,0 @@ - - - - - - -G - -cluster_PhlyRestfully - - - - - - - - -PhlyRestfully - -cluster_PhlyRestfully\Exception - - - - - - - - -Exception - -cluster_PhlyRestfully\Factory - - - - - - - - -Factory - -cluster_PhlyRestfully\Listener - - - - - - - - -Listener - -cluster_PhlyRestfully\Plugin - - - - - - - - -Plugin - -cluster_PhlyRestfully\View - - - - - - - - -View - - -\\PhlyRestfully\\Exception\\UpdateException - - -UpdateException - - - -\\PhlyRestfully\\Exception\\DomainException - - -DomainException - - - -\\PhlyRestfully\\Exception\\UpdateException->\\PhlyRestfully\\Exception\\DomainException - - - - -\\PhlyRestfully\\Exception\\PatchException - - -PatchException - - - -\\PhlyRestfully\\Exception\\PatchException->\\PhlyRestfully\\Exception\\DomainException - - - - -\\PhlyRestfully\\Exception\\ProblemExceptionInterface - - -ProblemExceptionInterface - - - -\\PhlyRestfully\\Exception\\DomainException->\\PhlyRestfully\\Exception\\ProblemExceptionInterface - - - - -\\PhlyRestfully\\Exception\\ExceptionInterface - - -ExceptionInterface - - - -\\PhlyRestfully\\Exception\\DomainException->\\PhlyRestfully\\Exception\\ExceptionInterface - - - - -\\DomainException - -\DomainException - - -\\PhlyRestfully\\Exception\\DomainException->\\DomainException - - - - -\\PhlyRestfully\\Exception\\InvalidResourceException - - -InvalidResourceException - - - -\\PhlyRestfully\\Exception\\InvalidArgumentException - - -InvalidArgumentException - - - -\\PhlyRestfully\\Exception\\InvalidResourceException->\\PhlyRestfully\\Exception\\InvalidArgumentException - - - - -\\PhlyRestfully\\Exception\\InvalidArgumentException->\\PhlyRestfully\\Exception\\ExceptionInterface - - - - -\\InvalidArgumentException - -\InvalidArgumentException - - -\\PhlyRestfully\\Exception\\InvalidArgumentException->\\InvalidArgumentException - - - - -\\PhlyRestfully\\Exception\\RuntimeException - - -RuntimeException - - - -\\PhlyRestfully\\Exception\\RuntimeException->\\PhlyRestfully\\Exception\\ExceptionInterface - - - - -\\RuntimeException - -\RuntimeException - - -\\PhlyRestfully\\Exception\\RuntimeException->\\RuntimeException - - - - -\\PhlyRestfully\\Exception\\CreationException - - -CreationException - - - -\\PhlyRestfully\\Exception\\CreationException->\\PhlyRestfully\\Exception\\DomainException - - - - -\\PhlyRestfully\\Exception\\InvalidCollectionException - - -InvalidCollectionException - - - -\\PhlyRestfully\\Exception\\InvalidCollectionException->\\PhlyRestfully\\Exception\\InvalidArgumentException - - - - -\\PhlyRestfully\\Factory\\ResourceControllerFactory - - -ResourceControllerFactory - - - -\\Zend\\ServiceManager\\AbstractFactoryInterface - -\\Zend\\ServiceManager\\AbstractFactoryInterface - - -\\PhlyRestfully\\Factory\\ResourceControllerFactory->\\Zend\\ServiceManager\\AbstractFactoryInterface - - - - -\\PhlyRestfully\\Listener\\ApiProblemListener - - -ApiProblemListener - - - -\\Zend\\EventManager\\ListenerAggregateInterface - -\\Zend\\EventManager\\ListenerAggregateInterface - - -\\PhlyRestfully\\Listener\\ApiProblemListener->\\Zend\\EventManager\\ListenerAggregateInterface - - - - -\\PhlyRestfully\\Listener\\ResourceParametersListener - - -ResourceParametersListener - - - -\\PhlyRestfully\\Listener\\ResourceParametersListener->\\Zend\\EventManager\\ListenerAggregateInterface - - - - -\\Zend\\EventManager\\SharedListenerAggregateInterface - -\\Zend\\EventManager\\SharedListenerAggregateInterface - - -\\PhlyRestfully\\Listener\\ResourceParametersListener->\\Zend\\EventManager\\SharedListenerAggregateInterface - - - - -\\PhlyRestfully\\Plugin\\HalLinks - - -HalLinks - - - -\\Zend\\EventManager\\EventManagerAwareInterface - -\Zend\EventManager\EventManagerAwareInterface - - -\\PhlyRestfully\\Plugin\\HalLinks->\\Zend\\EventManager\\EventManagerAwareInterface - - - - -\\Zend\\View\\Helper\\AbstractHelper - -\Zend\View\Helper\AbstractHelper - - -\\PhlyRestfully\\Plugin\\HalLinks->\\Zend\\View\\Helper\\AbstractHelper - - - - -\\Zend\\Mvc\\Controller\\Plugin\\PluginInterface - -\\Zend\\Mvc\\Controller\\Plugin\\PluginInterface - - -\\PhlyRestfully\\Plugin\\HalLinks->\\Zend\\Mvc\\Controller\\Plugin\\PluginInterface - - - - -\\PhlyRestfully\\View\\RestfulJsonModel - - -RestfulJsonModel - - - -\\Zend\\View\\Model\\JsonModel - -\Zend\View\Model\JsonModel - - -\\PhlyRestfully\\View\\RestfulJsonModel->\\Zend\\View\\Model\\JsonModel - - - - -\\PhlyRestfully\\View\\RestfulJsonStrategy - - -RestfulJsonStrategy - - - -\\Zend\\View\\Strategy\\JsonStrategy - -\Zend\View\Strategy\JsonStrategy - - -\\PhlyRestfully\\View\\RestfulJsonStrategy->\\Zend\\View\\Strategy\\JsonStrategy - - - - -\\PhlyRestfully\\View\\RestfulJsonRenderer - - -RestfulJsonRenderer - - - -\\Zend\\View\\Renderer\\JsonRenderer - -\Zend\View\Renderer\JsonRenderer - - -\\PhlyRestfully\\View\\RestfulJsonRenderer->\\Zend\\View\\Renderer\\JsonRenderer - - - - -\\PhlyRestfully\\ResourceInterface - - -ResourceInterface - - - -\\PhlyRestfully\\ResourceInterface->\\Zend\\EventManager\\EventManagerAwareInterface - - - - -\\PhlyRestfully\\ApiProblem - - -ApiProblem - - - -\\PhlyRestfully\\MetadataMap - - -MetadataMap - - - -\\PhlyRestfully\\Resource - - -Resource - - - -\\PhlyRestfully\\Resource->\\PhlyRestfully\\ResourceInterface - - - - -\\PhlyRestfully\\Metadata - - -Metadata - - - -\\PhlyRestfully\\LinkCollection - - -LinkCollection - - - -\\Countable - -\\Countable - - -\\PhlyRestfully\\LinkCollection->\\Countable - - - - -\\IteratorAggregate - -\\IteratorAggregate - - -\\PhlyRestfully\\LinkCollection->\\IteratorAggregate - - - - -\\PhlyRestfully\\HalCollection - - -HalCollection - - - -\\PhlyRestfully\\LinkCollectionAwareInterface - - -LinkCollectionAwareInterface - - - -\\PhlyRestfully\\HalCollection->\\PhlyRestfully\\LinkCollectionAwareInterface - - - - -\\PhlyRestfully\\ResourceController - - -ResourceController - - - -\\Zend\\Mvc\\Controller\\AbstractRestfulController - -\Zend\Mvc\Controller\AbstractRestfulController - - -\\PhlyRestfully\\ResourceController->\\Zend\\Mvc\\Controller\\AbstractRestfulController - - - - -\\PhlyRestfully\\Link - - -Link - - - -\\PhlyRestfully\\ResourceEvent - - -ResourceEvent - - - -\\Zend\\EventManager\\Event - -\Zend\EventManager\Event - - -\\PhlyRestfully\\ResourceEvent->\\Zend\\EventManager\\Event - - - - -\\PhlyRestfully\\HalResource - - -HalResource - - - -\\PhlyRestfully\\HalResource->\\PhlyRestfully\\LinkCollectionAwareInterface - - - - - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.ApiProblem.html b/docs/api/phpdoc/classes/PhlyRestfully.ApiProblem.html deleted file mode 100644 index 3882cac..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.ApiProblem.html +++ /dev/null @@ -1,168 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\ApiProblem - - - - - - - - - - -
- -
- -
- -
-

Object describing an API-Problem payload

-
-
-

- Methods

-
-

Constructor

-
__construct(int $status, string $detail, string $describedBy, string $title, array $additional) 
-
-
-

Create an instance using the provided information. If nothing is -provided for the describedBy field, the class default will be used; -if the status matches any known, the title field will be selected -from $problemStatusTitles as a result.

-

Parameters

-
-

$status

-int -
-
-

$detail

-string -
-
-

$describedBy

-string -
-
-

$title

-string -
-

$additional

-
-
-
-

Retrieve properties

-
__get(string $name) : mixed
-
-
-
-

Parameters

-
-

$name

-string -
-

Returns

-
mixed
-
-
-
-

Set the flag indicating whether an exception detail should include a -stack trace and previous exception information.

-
setDetailIncludesStackTrace(bool $flag) : \PhlyRestfully\ApiProblem
-
-
-
-

Parameters

-
-

$flag

-bool -
-

Returns

- -
-
-
-

Cast to an array

-
toArray() : array
-
-
-
-

Returns

-
array
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.CreationException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.CreationException.html deleted file mode 100644 index 57559ea..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.CreationException.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\CreationException - - - - - - - - - - -
- -
- -
- -
-

Throw this exception from a "create" resource listener in order to indicate -an inability to create an item and automatically report it.

-
-
-

- Methods

-
-

getAdditionalDetails() -

-
getAdditionalDetails() : array
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getAdditionalDetails()
-

Returns

-
array
-
-
-
-

getDescribedBy() -

-
getDescribedBy() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getDescribedBy()
-

Returns

-
string
-
-
-
-

getTitle() -

-
getTitle() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getTitle()
-

Returns

-
string
-
-
-
-

setAdditionalDetails() -

-
setAdditionalDetails(array $details) : \PhlyRestfully\Exception\CreationException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setAdditionalDetails()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$details

-array -
-

Returns

- -
-
-
-

setDescribedBy() -

-
setDescribedBy(string $uri) : \PhlyRestfully\Exception\CreationException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setDescribedBy()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$uri

-string -
-

Returns

- -
-
-
-

setTitle() -

-
setTitle(string $title) : \PhlyRestfully\Exception\CreationException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setTitle()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$title

-string -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.DomainException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.DomainException.html deleted file mode 100644 index c01e4c4..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.DomainException.html +++ /dev/null @@ -1,196 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\DomainException - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

getAdditionalDetails() -

-
getAdditionalDetails() : array
-
-
-
-

Returns

-
array
-
-
-
-

getDescribedBy() -

-
getDescribedBy() : string
-
-
-
-

Returns

-
string
-
-
-
-

getTitle() -

-
getTitle() : string
-
-
-
-

Returns

-
string
-
-
-
-

setAdditionalDetails() -

-
setAdditionalDetails(array $details) : \PhlyRestfully\Exception\DomainException
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$details

-array -
-

Returns

- -
-
-
-

setDescribedBy() -

-
setDescribedBy(string $uri) : \PhlyRestfully\Exception\DomainException
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$uri

-string -
-

Returns

- -
-
-
-

setTitle() -

-
setTitle(string $title) : \PhlyRestfully\Exception\DomainException
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$title

-string -
-

Returns

- -
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.ExceptionInterface.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.ExceptionInterface.html deleted file mode 100644 index 33e175a..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.ExceptionInterface.html +++ /dev/null @@ -1,87 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\ExceptionInterface - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-

Marker interface; catch this to catch any module-specific exception.

-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidArgumentException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidArgumentException.html deleted file mode 100644 index 111e747..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidArgumentException.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\InvalidArgumentException - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidCollectionException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidCollectionException.html deleted file mode 100644 index 4bf71d1..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidCollectionException.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\InvalidCollectionException - - - - - - - - - - -
- -
-
-
- -
- -
- -
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidResourceException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidResourceException.html deleted file mode 100644 index 3c2dbf8..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.InvalidResourceException.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\InvalidResourceException - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.PatchException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.PatchException.html deleted file mode 100644 index 7d6d053..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.PatchException.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\PatchException - - - - - - - - - - -
- -
- -
- -
-

Throw this exception from a "patch" resource listener in order to indicate -an inability to patch an item and automatically report it.

-
-
-

- Methods

-
-

getAdditionalDetails() -

-
getAdditionalDetails() : array
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getAdditionalDetails()
-

Returns

-
array
-
-
-
-

getDescribedBy() -

-
getDescribedBy() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getDescribedBy()
-

Returns

-
string
-
-
-
-

getTitle() -

-
getTitle() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getTitle()
-

Returns

-
string
-
-
-
-

setAdditionalDetails() -

-
setAdditionalDetails(array $details) : \PhlyRestfully\Exception\PatchException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setAdditionalDetails()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$details

-array -
-

Returns

- -
-
-
-

setDescribedBy() -

-
setDescribedBy(string $uri) : \PhlyRestfully\Exception\PatchException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setDescribedBy()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$uri

-string -
-

Returns

- -
-
-
-

setTitle() -

-
setTitle(string $title) : \PhlyRestfully\Exception\PatchException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setTitle()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$title

-string -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.ProblemExceptionInterface.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.ProblemExceptionInterface.html deleted file mode 100644 index 9053866..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.ProblemExceptionInterface.html +++ /dev/null @@ -1,122 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\ProblemExceptionInterface - - - - - - - - - - -
- -
- -
- -
-

Interface for exceptions that can provide additional API Problem details

-
-
-

- Methods

-
-

getAdditionalDetails() -

-
getAdditionalDetails() 
-
-
-
-
-

getDescribedBy() -

-
getDescribedBy() 
-
-
-
-
-

getTitle() -

-
getTitle() 
-
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.RuntimeException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.RuntimeException.html deleted file mode 100644 index 5e1b3b0..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.RuntimeException.html +++ /dev/null @@ -1,84 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\RuntimeException - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Exception.UpdateException.html b/docs/api/phpdoc/classes/PhlyRestfully.Exception.UpdateException.html deleted file mode 100644 index 62840fd..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Exception.UpdateException.html +++ /dev/null @@ -1,231 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Exception\UpdateException - - - - - - - - - - -
- -
- -
- -
-

Throw this exception from a "update" resource listener in order to indicate -an inability to update an item and automatically report it.

-
-
-

- Methods

-
-

getAdditionalDetails() -

-
getAdditionalDetails() : array
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getAdditionalDetails()
-

Returns

-
array
-
-
-
-

getDescribedBy() -

-
getDescribedBy() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getDescribedBy()
-

Returns

-
string
-
-
-
-

getTitle() -

-
getTitle() : string
-
Inherited
-
-
- - - -
inherited_from\PhlyRestfully\Exception\DomainException::getTitle()
-

Returns

-
string
-
-
-
-

setAdditionalDetails() -

-
setAdditionalDetails(array $details) : \PhlyRestfully\Exception\UpdateException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setAdditionalDetails()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$details

-array -
-

Returns

- -
-
-
-

setDescribedBy() -

-
setDescribedBy(string $uri) : \PhlyRestfully\Exception\UpdateException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setDescribedBy()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$uri

-string -
-

Returns

- -
-
-
-

setTitle() -

-
setTitle(string $title) : \PhlyRestfully\Exception\UpdateException
-
Inherited
-
-
- - - - - - - - - -
inherited_from\PhlyRestfully\Exception\DomainException::setTitle()
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$title

-string -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Factory.ResourceControllerFactory.html b/docs/api/phpdoc/classes/PhlyRestfully.Factory.ResourceControllerFactory.html deleted file mode 100644 index 4a97dbf..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Factory.ResourceControllerFactory.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Factory\ResourceControllerFactory - - - - - - - - - - -
- -
- -
- -
-

Class ResourceControllerFactory

-
-
- - - -
packagePhlyRestfully\Factory
-

- Methods

-
-

Determine if we can create a service with name

-
canCreateServiceWithName(\Zend\ServiceManager\ServiceLocatorInterface $controllers, string $name, string $requestedName) : bool
-
-
-
-

Parameters

-
-

$controllers

-\Zend\ServiceManager\ServiceLocatorInterface -
-
-

$name

-string -
-
-

$requestedName

-string -
-

Returns

-
bool
-
-
-
-

Create service with name

-
createServiceWithName(\Zend\ServiceManager\ServiceLocatorInterface $controllers, string $name, string $requestedName) : \PhlyRestfully\ResourceController
-
-
-
-

Parameters

-
-

$controllers

-\Zend\ServiceManager\ServiceLocatorInterface -
-
-

$name

-string -
-
-

$requestedName

-string -
-

Exceptions

- - - -
\Zend\ServiceManager\Exception\ServiceNotCreatedExceptionif listener specified is not a ListenerAggregate
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.HalCollection.html b/docs/api/phpdoc/classes/PhlyRestfully.HalCollection.html deleted file mode 100644 index f7bbc58..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.HalCollection.html +++ /dev/null @@ -1,409 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\HalCollection - - - - - - - - - - -
- -
- -
- -
-

Model a collection for use with HAL payloads

-
-
-

- Methods

-
-

__construct() -

-
__construct(array | \Traversable | \Zend\Paginator\Paginator $collection, string $resourceRoute, $resourceRouteParams, $resourceRouteOptions) 
-
-
-
-

Parameters

-
-

$collection

-array\Traversable\Zend\Paginator\Paginator -
-
-

$resourceRoute

-string -
-

$resourceRouteParams

-

$resourceRouteOptions

-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidCollectionException
-
-
-
-

Proxy to properties to allow read access

-
__get(string $name) : mixed
-
-
-
-

Parameters

-
-

$name

-string -
-

Returns

-
mixed
-
-
- - -
-

Set additional attributes to render as part of resource

-
setAttributes(array $attributes) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$attributes

-array -
-

Returns

- -
-
-
-

Set the collection name (for use within the _embedded object)

-
setCollectionName(string $name) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$name

-string -
-

Returns

- -
-
-
-

Set the collection route; used for generating pagination links

-
setCollectionRoute(string $route) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$route

-string -
-

Returns

- -
-
-
-

Set options to use with the collection route; used for generating pagination links

-
setCollectionRouteOptions(array | \Traversable $options) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$options

-array\Traversable -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

- -
-
-
-

Set parameters/substitutions to use with the collection route; used for generating pagination links

-
setCollectionRouteParams(array | \Traversable $params) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$params

-array\Traversable -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

- -
-
-
-

Set the resource key that represents the identifier name

-
setIdentifierName(string $name) : \PhlyRestfully\HalCollection
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$name

-string -
-

Returns

- -
-
- -
-

Set current page

-
setPage(int $page) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$page

-int -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentExceptionfor non-positive and/or non-integer values
-

Returns

- -
-
-
-

Set page size

-
setPageSize(int $size) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$size

-int -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentExceptionfor non-positive and/or non-integer values
-

Returns

- -
-
- -
-

Set the resource route

-
setResourceRoute(string $route) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$route

-string -
-

Returns

- -
-
-
-

Set options to use with the resource route

-
setResourceRouteOptions(array | \Traversable $options) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$options

-array\Traversable -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

- -
-
-
-

Set parameters/substitutions to use with the resource route

-
setResourceRouteParams(array | \Traversable $params) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$params

-array\Traversable -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.HalResource.html b/docs/api/phpdoc/classes/PhlyRestfully.HalResource.html deleted file mode 100644 index 4022b3f..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.HalResource.html +++ /dev/null @@ -1,160 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\HalResource - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

__construct() -

-
__construct(object | array $resource, mixed $id) 
-
-
-
-

Parameters

-
-

$resource

-objectarray -
-
-

$id

-mixed -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidResourceExceptionif resource is not an object or array
-
-
-
-

Retrieve properties

-
__get(string $name) : mixed
-
-
-
-

Parameters

-
-

$name

-string -
-

Returns

-
mixed
-
-
- - -
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Link.html b/docs/api/phpdoc/classes/PhlyRestfully.Link.html deleted file mode 100644 index 65153c7..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Link.html +++ /dev/null @@ -1,290 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Link - - - - - - - - - - -
- -
- -
- -
-

Object describing a link relation

-
-
-

- Methods

-
-

Create a link relation

-
__construct(string $relation) 
-
-
-
- - - -
todofiltering and/or validation of relation string
-

Parameters

-
-

$relation

-string -
-
-
-
-

Retrieve the link relation

-
getRelation() : string
-
-
-
-

Returns

-
string
-
-
-
-

Return the route to be used to generate the link URL, if any

-
getRoute() : null | string
-
-
-
-

Returns

-
-nullstring -
-
-
-
-

Retrieve route assembly options, if any

-
getRouteOptions() : array
-
-
-
-

Returns

-
array
-
-
-
-

Retrieve route assembly parameters/substitutions, if any

-
getRouteParams() : array
-
-
-
-

Returns

-
array
-
-
-
-

Retrieve the link URL, if set

-
getUrl() : null | string
-
-
-
-

Returns

-
-nullstring -
-
-
-
-

Does the link have a route set?

-
hasRoute() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Does the link have a URL set?

-
hasUrl() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Is the link relation complete -- do we have either a URL or a route set?

-
isComplete() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Set the route to use when generating the relation URI

-
setRoute(string $route, null | array | \Traversable $params, null | array | \Traversable $options) : \PhlyRestfully\Link
-
-
-

If any params or options are passed, those will be passed to route assembly.

- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$route

-string -
-
-

$params

-nullarray\Traversable -
-
-

$options

-nullarray\Traversable -
-

Returns

- -
-
-
-

Set route assembly options

-
setRouteOptions(array | \Traversable $options) : \PhlyRestfully\Link
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$options

-array\Traversable -
-

Returns

- -
-
-
-

Set route assembly parameters/substitutions

-
setRouteParams(array | \Traversable $params) : \PhlyRestfully\Link
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-array\Traversable -
-

Returns

- -
-
-
-

Set an explicit URL for the link relation

-
setUrl(string $url) : \PhlyRestfully\Link
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$url

-string -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.LinkCollection.html b/docs/api/phpdoc/classes/PhlyRestfully.LinkCollection.html deleted file mode 100644 index aa005df..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.LinkCollection.html +++ /dev/null @@ -1,188 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\LinkCollection - - - - - - - - - - -
- -
- -
- -
-

Object describing a collection of link relations

-
-
-

- Methods

-
-

Add a link

-
add(\PhlyRestfully\Link $link, bool $overwrite) : \PhlyRestfully\LinkCollection
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

- -
-

$overwrite

-bool -
-

Returns

- -
-
-
-

Return a count of link relations

-
count() : int
-
-
-
-

Returns

-
int
-
-
-
-

Retrieve a link relation

-
get(string $relation) : \PhlyRestfully\Link | array
-
-
-
-

Parameters

-
-

$relation

-string -
-

Returns

- -
-
-
-

Retrieve internal iterator

-
getIterator() : \ArrayIterator
-
-
-
-

Returns

- -
-
-
-

Does a given link relation exist?

-
has(string $relation) : bool
-
-
-
-

Parameters

-
-

$relation

-string -
-

Returns

-
bool
-
-
-
-

Remove a given link relation

-
remove(string $relation) : bool
-
-
-
-

Parameters

-
-

$relation

-string -
-

Returns

-
bool
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.LinkCollectionAwareInterface.html b/docs/api/phpdoc/classes/PhlyRestfully.LinkCollectionAwareInterface.html deleted file mode 100644 index 544bc06..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.LinkCollectionAwareInterface.html +++ /dev/null @@ -1,110 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\LinkCollectionAwareInterface - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-

- Methods

- - -
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Listener.ApiProblemListener.html b/docs/api/phpdoc/classes/PhlyRestfully.Listener.ApiProblemListener.html deleted file mode 100644 index c802039..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Listener.ApiProblemListener.html +++ /dev/null @@ -1,158 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Listener\ApiProblemListener - - - - - - - - - - -
- -
-
-
- -
- -
-
- -
-

ApiProblemListener

-
-

Provides a listener on the render event, at high priority.

- -

If the MvcEvent represents an error, then its view model and result are -replaced with a RestfulJsonModel containing an API-Problem payload.

-

- Methods

-
-

Constructor

-
__construct(string $filter) 
-
-
-

Set the accept filter, if one is passed

-

Parameters

-
-

$filter

-string -
-
-
-
-

attach() -

-
attach(\Zend\EventManager\EventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-
-
-
-

detach() -

-
detach(\Zend\EventManager\EventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-
-
-
-

Listen to the render event

-
onRender(\Zend\Mvc\MvcEvent $e) 
-
Static
-
-
-

Parameters

-
-

$e

-\Zend\Mvc\MvcEvent -
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Listener.ResourceParametersListener.html b/docs/api/phpdoc/classes/PhlyRestfully.Listener.ResourceParametersListener.html deleted file mode 100644 index 377aff3..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Listener.ResourceParametersListener.html +++ /dev/null @@ -1,169 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Listener\ResourceParametersListener - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

attach() -

-
attach(\Zend\EventManager\EventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-
-
-
-

attachShared() -

-
attachShared(\Zend\EventManager\SharedEventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\SharedEventManagerInterface -
-
-
-
-

detach() -

-
detach(\Zend\EventManager\EventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-
-
-
-

detachShared() -

-
detachShared(\Zend\EventManager\SharedEventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\SharedEventManagerInterface -
-
-
-
-

Listen to the dispatch event

-
onDispatch(\Zend\Mvc\MvcEvent $e) 
-
-
-
-

Parameters

-
-

$e

-\Zend\Mvc\MvcEvent -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Metadata.html b/docs/api/phpdoc/classes/PhlyRestfully.Metadata.html deleted file mode 100644 index 6dbca9c..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Metadata.html +++ /dev/null @@ -1,420 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Metadata - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

Constructor

-
__construct(string $class, array $options) 
-
-
-

Sets the class, and passes any options provided to the appropriate -setter methods, after first converting them to lowercase and stripping -underscores.

- -

If the class does not exist, raises an exception.

-

Parameters

-
-

$class

-string -
-
-

$options

-array -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-
-
-
-

Retrieve the class this metadata is associated with

-
getClass() : string
-
-
-
-

Returns

-
string
-
-
-
-

Retrieve the hydrator to associate with this class, if any

-
getHydrator() : null | \Zend\Stdlib\Hydrator\HydratorInterface
-
-
-
-

Returns

-
-null\Zend\Stdlib\Hydrator\HydratorInterface -
-
-
-
-

Retrieve the identifier name

-
getIdentifierName() : string
-
-
-
-

Returns

-
string
-
-
-
-

Retrieve the resource route

-
getResourceRoute() : null | string
-
-
-

If not set, uses the route or url, depending on which is present.

-

Returns

-
-nullstring -
-
-
-
-

Retrieve the route to use for URL generation

-
getRoute() : null | string
-
-
-
-

Returns

-
-nullstring -
-
-
-
-

Retrieve an route options to use in URL generation

-
getRouteOptions() : array
-
-
-
-

Returns

-
array
-
-
-
-

Retrieve any route parameters to use in URL generation

-
getRouteParams() : array
-
-
-
-

Returns

-
array
-
-
-
-

Retrieve the URL to use for this resource, if present

-
getUrl() : null | string
-
-
-
-

Returns

-
-nullstring -
-
-
-
-

Is a hydrator associated with this class?

-
hasHydrator() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Is a route present for this class?

-
hasRoute() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Is a URL set for this class?

-
hasUrl() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Does this class represent a collection?

-
isCollection() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Set the hydrator to use with this class

-
setHydrator(string | \Zend\Stdlib\Hydrator\HydratorInterface $hydrator) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$hydrator

-string\Zend\Stdlib\Hydrator\HydratorInterface -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentExceptionif the class or hydrator does not implement HydratorInterface
-

Returns

- -
-
-
-

Set the identifier name

-
setIdentifierName(string | mixed $identifier) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$identifier

-stringmixed -
-

Returns

- -
-
-
-

Set the flag indicating collection status

-
setIsCollection(bool $flag) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$flag

-bool -
-

Returns

- -
-
-
-

Set the resource route (for embedded resources in collections)

-
setResourceRoute(string $route) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$route

-string -
-

Returns

- -
-
-
-

Set the route for URL generation

-
setRoute(string $route) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$route

-string -
-

Returns

- -
-
-
-

Set route options for URL generation

-
setRouteOptions(array $options) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$options

-array -
-

Returns

- -
-
-
-

Set route parameters for URL generation

-
setRouteParams(array $params) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-array -
-

Returns

- -
-
-
-

Set the URL to use with this resource

-
setUrl(string $url) : \PhlyRestfully\Metadata
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$url

-string -
-

Returns

- -
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.MetadataMap.html b/docs/api/phpdoc/classes/PhlyRestfully.MetadataMap.html deleted file mode 100644 index 3b83d54..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.MetadataMap.html +++ /dev/null @@ -1,154 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\MetadataMap - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

Constructor

-
__construct(array $map) 
-
-
-

If provided, will pass $map to setMap().

-

Parameters

-
-

$map

-nullarray -
-
-
-
-

Retrieve the metadata for a given class

-
get(object | string $class) : \PhlyRestfully\Metadata
-
-
-
-

Parameters

-
-

$class

-objectstring

Object or classname for which to retrieve metadata

-

Returns

- -
-
-
-

Does the map contain metadata for the given class?

-
has(object | string $class) : bool
-
-
-
-

Parameters

-
-

$class

-objectstring

Object or class name to test

-

Returns

-
bool
-
-
-
-

Set the metadata map

-
setMap(array $map) : \PhlyRestfully\MetadataMap
-
-
-

Accepts an array of class => metadata definitions. -Each definition may be an instance of Metadata, or an array -of options used to define a Metadata instance.

- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$map

-array -
-

Returns

- -
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Plugin.HalLinks.html b/docs/api/phpdoc/classes/PhlyRestfully.Plugin.HalLinks.html deleted file mode 100644 index b0df9e7..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Plugin.HalLinks.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Plugin\HalLinks - - - - - - - - - - -
- -
- -
- -
-

Generate links for use with HAL payloads

-
-
-

- Methods

-
-

Map a resource class to a specific hydrator instance

-
addHydrator(string $class, \Zend\Stdlib\Hydrator\HydratorInterface $hydrator) : \PhlyRestfully\Plugin\RestfulJsonRenderer
-
-
-
-

Parameters

-
-

$class

-string -
-
-

$hydrator

-\Zend\Stdlib\Hydrator\HydratorInterface -
-

Returns

-
\PhlyRestfully\Plugin\RestfulJsonRenderer
-
-
-
-

Creates a HalCollection instance with a self relational link

-
createCollection(\PhlyRestfully\HalCollection | array | object $collection, null | string $route) : \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$collection

-\PhlyRestfully\HalCollectionarrayobject -
-
-

$route

-nullstring -
-

Returns

- -
-
- - -
-

Create a HalResource instance and inject it with a self relational link

-
createResource(\PhlyRestfully\HalResource | array | object $resource, string $route, string $identifierName) : \PhlyRestfully\HalResource
-
-
-
-

Parameters

-
-

$resource

-\PhlyRestfully\HalResourcearrayobject -
-
-

$route

-string -
-
-

$identifierName

-string -
-

Returns

- -
-
- -
-

Generate HAL links from a LinkCollection

-
fromLinkCollection(\PhlyRestfully\LinkCollection $collection) : array
-
-
-
-

Parameters

- -

Returns

-
array
-
-
-
-

Create HAL links "object" from a resource/collection

-
fromResource(\PhlyRestfully\LinkCollectionAwareInterface $resource) : array
-
-
-
-

Parameters

- -

Returns

-
array
-
-
-
-

getController() -

-
getController() : \Zend\Stdlib\DispatchableInterface
-
-
-
-

Returns

-
\Zend\Stdlib\DispatchableInterface
-
-
-
-

Retrieve the event manager instance

-
getEventManager() : \Zend\EventManager\EventManagerInterface
-
-
-

Lazy-initializes one if none present.

-

Returns

-
\Zend\EventManager\EventManagerInterface
-
-
-
-

Retrieve a hydrator for a given resource

-
getHydratorForResource(object $resource) : \Zend\Stdlib\Hydrator\HydratorInterface | false
-
-
-

If the resource has a mapped hydrator, returns that hydrator. If not, and -a default hydrator is present, the default hydrator is returned. -Otherwise, a boolean false is returned.

-

Parameters

-
-

$resource

-object -
-

Returns

-
-\Zend\Stdlib\Hydrator\HydratorInterfacefalse -
-
-
-
-

Retrieve the metadata map

-
getMetadataMap() : \PhlyRestfully\MetadataMap
-
- -
- -
-

"Render" a HalCollection

-
renderCollection(\PhlyRestfully\HalCollection $halCollection) : array | \PhlyRestfully\ApiProblem
-
-
-

Injects pagination links, if the composed collection is a Paginator, and -then loops through the collection to create the data structure representing -the collection.

- -

For each resource in the collection, the event "renderCollection.resource" is -triggered, with the following parameters:

- -
    -
  • "collection", which is the $halCollection passed to the method
  • -
  • "resource", which is the current resource
  • -
  • "route", the resource route that will be used to generate links
  • -
  • "routeParams", any default routing parameters/substitutions to use in URL assembly
  • -
  • "routeOptions", any default routing options to use in URL assembly
  • -
- -

This event can be useful particularly when you have multi-segment routes -and wish to ensure that route parameters are injected, or if you want to -inject query or fragment parameters.

- -

Event parameters are aggregated in an ArrayObject, which allows you to -directly manipulate them in your listeners:

- -
$params = $e->getParams();
-$params['routeOptions']['query'] = array('format' => 'json');
-
-

Parameters

-
-

$halCollection

-\PhlyRestfully\HalCollection -
-

Returns

-
-array\PhlyRestfully\ApiProblemAssociative array representing the payload to render; returns ApiProblem if error in pagination occurs
-
-
-
-

Render an individual resource

-
renderResource(\PhlyRestfully\HalResource $halResource) : array
-
-
-

Creates a hash representation of the HalResource. The resource is first -converted to an array, and its associated links are injected as the -"_links" member. If any members of the resource are themselves -HalResource objects, they are extracted into an "_embedded" hash.

-

Parameters

-
-

$halResource

-\PhlyRestfully\HalResource -
-

Returns

-
array
-
-
-
-

setController() -

-
setController(\Zend\Stdlib\DispatchableInterface $controller) 
-
-
-
-

Parameters

-
-

$controller

-\Zend\Stdlib\DispatchableInterface -
-
-
-
-

Set the default hydrator to use if none specified for a class.

-
setDefaultHydrator(\Zend\Stdlib\Hydrator\HydratorInterface $hydrator) : \PhlyRestfully\Plugin\RestfulJsonRenderer
-
-
-
-

Parameters

-
-

$hydrator

-\Zend\Stdlib\Hydrator\HydratorInterface -
-

Returns

-
\PhlyRestfully\Plugin\RestfulJsonRenderer
-
-
-
-

Set the event manager instance

-
setEventManager(\Zend\EventManager\EventManagerInterface $events) 
-
-
-
-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-
-
-
-

Set the metadata map

-
setMetadataMap(\PhlyRestfully\MetadataMap $map) : \PhlyRestfully\Plugin\HalLinks
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

- -

Returns

- -
-
-
-

setServerUrlHelper() -

-
setServerUrlHelper(\Zend\View\Helper\ServerUrl $helper) 
-
-
-
-

Parameters

-
-

$helper

-\Zend\View\Helper\ServerUrl -
-
-
-
-

setUrlHelper() -

-
setUrlHelper(\Zend\View\Helper\Url $helper) 
-
-
-
-

Parameters

-
-

$helper

-\Zend\View\Helper\Url -
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.Resource.html b/docs/api/phpdoc/classes/PhlyRestfully.Resource.html deleted file mode 100644 index c2c9958..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.Resource.html +++ /dev/null @@ -1,472 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\Resource - - - - - - - - - - -
- -
- -
- -
-

Base resource class

-
-

Essentially, simply marshalls arguments and triggers events; it is useless -without listeners to do the actual work.

-

- Methods

-
-

Create a record in the resource

-
create(array | object $data) : array | object
-
-
-

Expects either an array or object representing the item to create. If -a non-array, non-object is provided, raises an exception.

- -

The value returned by the last listener to the "create" event will be -returned as long as it is an array or object; otherwise, the original -$data is returned. If you wish to indicate failure to create, raise a -PhlyRestfully\Exception\CreationException from a listener.

-

Parameters

-
-

$data

-arrayobject -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

-
-arrayobject -
-
-
-
-

Delete an existing item

-
delete(string | int $id) : bool
-
-
-

Use to delete the item indicated by $id. The value returned by the last -listener will be used, as long as it is a boolean; otherwise, a boolean -false will be returned, indicating failure to delete.

-

Parameters

-
-

$id

-stringint -
-

Returns

-
bool
-
-
-
-

Delete an existing collection of records

-
deleteList(null | array $data) : bool
-
-
-
-

Parameters

-
-

$data

-nullarray -
-

Returns

-
bool
-
-
-
-

Fetch an existing item

-
fetch(string | int $id) : false | array | object
-
-
-

Retrieve an existing item indicated by $id. The value of the last -listener will be returned, as long as it is an array or object; -otherwise, a boolean false value will be returned, indicating a -lookup failure.

-

Parameters

-
-

$id

-stringint -
-

Returns

-
-falsearrayobject -
-
-
-
-

Fetch a collection of items

-
fetchAll() : array | \Traversable
-
-
-

Use to retrieve a collection of items. The value of the last -listener will be returned, as long as it is an array or Traversable; -otherwise, an empty array will be returned.

- -

The recommendation is to return a \Zend\Paginator\Paginator instance, -which will allow performing paginated sets, and thus allow the view -layer to select the current page based on the query string or route.

-

Returns

-
-array\Traversable -
-
-
-
-

Retrieve event manager

-
getEventManager() : \Zend\EventManager\EventManagerInterface
-
-
-

Lazy-instantiates an EM instance if none provided.

-

Returns

-
\Zend\EventManager\EventManagerInterface
-
-
-
-

getEventParam() -

-
getEventParam(mixed $name, mixed $default) : mixed
-
-
-
-

Parameters

-
-

$name

-mixed -
-
-

$default

-mixed -
-

Returns

-
mixed
-
-
-
-

Get the event parameters

-
getEventParams() : array
-
-
-
-

Returns

-
array
-
-
-
-

getQueryParams() -

-
getQueryParams() : null | \Zend\Stdlib\Parameters
-
-
-
-

Returns

-
-null\Zend\Stdlib\Parameters -
-
-
-
-

getRouteMatch() -

-
getRouteMatch() : null | \Zend\Router\RouteMatch
-
-
-
-

Returns

-
-null\Zend\Router\RouteMatch -
-
-
-
-

Partial update of an existing item

-
patch(string | int $id, array | object $data) : array | object
-
-
-

Update the item indicated by $id, using the information from $data; -$data should be merged with the existing item in order to provide a -partial update. Additionally, $data should be an array or object; any -other value will raise an exception.

- -

Like create(), the return value of the last executed listener will be -returned, as long as it is an array or object; otherwise, $data is -returned. If you wish to indicate failure to update, raise a -PhlyRestfully\Exception\PatchException.

-

Parameters

-
-

$id

-stringint -
-
-

$data

-arrayobject -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

-
-arrayobject -
-
-
-
-

Update (replace) an existing collection of items

-
replaceList(array $data) : array | object
-
-
-

Replaces the collection with the items contained in $data. -$data should be a multidimensional array or array of objects; if -otherwise, an exception will be raised.

- -

Like update(), the return value of the last executed listener will be -returned, as long as it is an array or object; otherwise, $data is -returned. If you wish to indicate failure to update, raise a -PhlyRestfully\Exception\UpdateException.

-

Parameters

-
-

$data

-array -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

-
-arrayobject -
-
-
-
-

Set event manager instance

-
setEventManager(\Zend\EventManager\EventManagerInterface $events) : Resource
-
-
-

Sets the event manager identifiers to the current class, this class, and -the resource interface.

-

Parameters

-
-

$events

-\Zend\EventManager\EventManagerInterface -
-

Returns

-
Resource
-
-
-
-

setEventParam() -

-
setEventParam(string $name, mixed $value) : mixed
-
-
-
-

Parameters

-
-

$name

-string -
-
-

$value

-mixed -
-

Returns

-
mixed
-
-
-
-

Set the event parameters

-
setEventParams(array $params) : \PhlyRestfully\Resource
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-array -
-

Returns

- -
-
-
-

setQueryParams() -

-
setQueryParams(\Zend\Stdlib\Parameters $params) : \PhlyRestfully\Resource
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-\Zend\Stdlib\Parameters -
-

Returns

- -
-
-
-

setRouteMatch() -

-
setRouteMatch(\Zend\Router\RouteMatch $matches) : \PhlyRestfully\Resource
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$matches

-\Zend\Router\RouteMatch -
-

Returns

- -
-
-
-

Update (replace) an existing item

-
update(string | int $id, array | object $data) : array | object
-
-
-

Updates the item indicated by $id, replacing it with the information -in $data. $data should be a full representation of the item, and should -be an array or object; if otherwise, an exception will be raised.

- -

Like create(), the return value of the last executed listener will be -returned, as long as it is an array or object; otherwise, $data is -returned. If you wish to indicate failure to update, raise a -PhlyRestfully\Exception\UpdateException.

-

Parameters

-
-

$id

-stringint -
-
-

$data

-arrayobject -
-

Exceptions

- - - -
\PhlyRestfully\Exception\InvalidArgumentException
-

Returns

-
-arrayobject -
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.ResourceController.html b/docs/api/phpdoc/classes/PhlyRestfully.ResourceController.html deleted file mode 100644 index 252380c..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.ResourceController.html +++ /dev/null @@ -1,484 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\ResourceController - - - - - - - - - - -
- -
- -
- -
-

Controller for handling resources.

-
-

Extends the base AbstractRestfulController in order to provide very specific -semantics for building a RESTful JSON service. All operations return either

- -
    -
  • a HAL-compliant response with appropriate hypermedia links
  • -
  • a Problem API-compliant response for reporting an error condition
  • -
- -

You may specify what specific HTTP method types you wish to respond to, and -OPTIONS will then report those; attempting any HTTP method falling outside -that list will result in a 405 (Method Not Allowed) response.

- -

I recommend using resource-specific factories when using this controller, -to allow injecting the specific resource you wish to use (and its listeners), -which will also allow you to have multiple instances of the controller when -desired.

- - - - - - - - - -
see\PhlyRestfully\http://tools.ietf.org/html/draft-kelly-json-hal-03
see\PhlyRestfully\http://tools.ietf.org/html/draft-nottingham-http-problem-02
-

- Methods

-
-

Constructor

-
__construct(null | string $eventIdentifier) 
-
-
-

Allows you to set the event identifier, which can be useful to allow multiple -instances of this controller to react to different sets of shared events.

-

Parameters

-
-

$eventIdentifier

-nullstring -
-
-
-
-

Create a new resource

-
create(array $data) : \Zend\Http\Response | \PhlyRestfully\ApiProblem | \PhlyRestfully\HalResource
-
-
-
-

Parameters

-
-

$data

-array -
-

Returns

- -
-
-
-

Delete an existing resource

-
delete(int | string $id) : \Zend\Http\Response | \PhlyRestfully\ApiProblem
-
-
-
-

Parameters

-
-

$id

-intstring -
-

Returns

-
-\Zend\Http\Response\PhlyRestfully\ApiProblem -
-
-
-
-

deleteList() -

-
deleteList() 
-
-
-
-
-

Return single resource

-
get(int | string $id) : \Zend\Http\Response | \PhlyRestfully\ApiProblem | \PhlyRestfully\HalResource
-
-
-
-

Parameters

-
-

$id

-intstring -
-

Returns

- -
-
-
-

getIdentifierName() -

-
getIdentifierName() : string
-
-
-
-

Returns

-
string
-
-
-
-

Return collection of resources

-
getList() : \Zend\Http\Response | \PhlyRestfully\HalCollection
-
-
-
-

Returns

-
-\Zend\Http\Response\PhlyRestfully\HalCollection -
-
-
-
-

Returns the resource

-
getResource() : \PhlyRestfully\ResourceInterface
-
-
-
-

Exceptions

- - - -
\PhlyRestfully\Exception\DomainExceptionIf no resource has been set
-

Returns

- -
-
-
-

Retrieve HEAD metadata for the resource and/or collection

-
head(null | mixed $id) : \Zend\Http\Response | \PhlyRestfully\ApiProblem | \PhlyRestfully\HalResource | \PhlyRestfully\HalCollection
-
-
-
-

Parameters

-
-

$id

-nullmixed -
-

Returns

- -
-
-
-

Handle the dispatch event

-
onDispatch(\Zend\Mvc\MvcEvent $e) : mixed
-
-
-

Does several "pre-flight" checks: -- Raises an exception if no resource is composed. -- Raises an exception if no route is composed. -- Returns a 405 response if the current HTTP request method is not in - $options

- -

When the dispatch is complete, it will check to see if an array was -returned; if so, it will cast it to a view model using the -AcceptableViewModelSelector plugin, and the $acceptCriteria property.

-

Parameters

-
-

$e

-\Zend\Mvc\MvcEvent -
-

Exceptions

- - - -
\PhlyRestfully\Exception\DomainException
-

Returns

-
mixed
-
-
-
-

Respond to OPTIONS request

-
options() : \Zend\Http\Response
-
-
-

Uses $options to set the Allow header line and return an empty response.

-

Returns

-
\Zend\Http\Response
-
-
-
-

Respond to the PATCH method (partial update of existing resource)

-
patch(int | string $id, array $data) : \Zend\Http\Response | \PhlyRestfully\ApiProblem | \PhlyRestfully\HalResource
-
-
-
-

Parameters

-
-

$id

-intstring -
-
-

$data

-array -
-

Returns

- -
-
-
-

Update an existing collection of resources

-
replaceList(array $data) : array
-
-
-
-

Parameters

-
-

$data

-array -
-

Returns

-
array
-
-
-
-

Set the Accept header criteria for use with the AcceptableViewModelSelector

-
setAcceptCriteria(array $criteria) 
-
-
-
-

Parameters

-
-

$criteria

-array -
-
-
-
-

Set the allowed HTTP OPTIONS for the resource (collection)

-
setCollectionHttpOptions(array $options) 
-
-
-
-

Parameters

-
-

$options

-array -
-
-
-
-

Set the name to which to assign a collection in a HalCollection

-
setCollectionName(string $name) 
-
-
-
-

Parameters

-
-

$name

-string -
-
-
-
-

Set the allowed content types for the resource (collection)

-
setContentTypes(array $contentTypes) 
-
-
-
-

Parameters

-
-

$contentTypes

-array -
-
-
-
-

Set the route match segment or query string parameter indicating the -resource identifier

-
setIdentifierName(string $name) 
-
-
-
-

Parameters

-
-

$name

-string -
-
-
-
-

Set the default page size for paginated responses

-
setPageSize(int $count) 
-
-
-
-

Parameters

-
-

$count

-int -
-
-
-
-

Inject the resource with which this controller will communicate.

-
setResource(\PhlyRestfully\ResourceInterface $resource) 
-
-
-
-

Parameters

- -
-
-
-

Set the allowed HTTP OPTIONS for a resource

-
setResourceHttpOptions(array $options) 
-
-
-
-

Parameters

-
-

$options

-array -
-
-
-
-

Inject the route name for this resource.

-
setRoute(string $route) 
-
-
-
-

Parameters

-
-

$route

-string -
-
-
-
-

Update an existing resource

-
update(int | string $id, array $data) : \Zend\Http\Response | \PhlyRestfully\ApiProblem | \PhlyRestfully\HalResource
-
-
-
-

Parameters

-
-

$id

-intstring -
-
-

$data

-array -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html b/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html deleted file mode 100644 index 9ae735d..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.ResourceEvent.html +++ /dev/null @@ -1,202 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\ResourceEvent - - - - - - - - - - -
- -
- -
- -
-

- Methods

-
-

Retrieve a single query parameter by name

-
getQueryParam(string $name, mixed $default) : mixed
-
-
-

If not present, returns the $default value provided.

-

Parameters

-
-

$name

-string -
-
-

$default

-mixed -
-

Returns

-
mixed
-
-
-
-

getQueryParams() -

-
getQueryParams() : null | \Zend\Stdlib\Parameters
-
-
-
-

Returns

-
-null\Zend\Stdlib\Parameters -
-
-
-
-

getRouteMatch() -

-
getRouteMatch() : null | \Zend\Router\RouteMatch
-
-
-
-

Returns

-
-null\Zend\Router\RouteMatch -
-
-
-
-

Retrieve a single route match parameter by name.

-
getRouteParam(string $name, mixed $default) : mixed
-
-
-

If not present, returns the $default value provided.

-

Parameters

-
-

$name

-string -
-
-

$default

-mixed -
-

Returns

-
mixed
-
-
-
-

setQueryParams() -

-
setQueryParams(\Zend\Stdlib\Parameters $params) : \PhlyRestfully\ResourceEvent
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-\Zend\Stdlib\Parameters -
-

Returns

- -
-
-
-

setRouteMatch() -

-
setRouteMatch(\Zend\Router\RouteMatch $matches) : \PhlyRestfully\ResourceEvent
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$matches

-\Zend\Router\RouteMatch -
-

Returns

- -
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.ResourceInterface.html b/docs/api/phpdoc/classes/PhlyRestfully.ResourceInterface.html deleted file mode 100644 index c4e34c6..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.ResourceInterface.html +++ /dev/null @@ -1,308 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\ResourceInterface - - - - - - - - - - -
- -
- -
- -
-

Interface describing operations for a given resource.

-
-
-

- Methods

-
-

Create a record in the resource

-
create(array | object $data) : array | object
-
-
-
-

Parameters

-
-

$data

-arrayobject -
-

Returns

-
-arrayobject -
-
-
-
-

Delete an existing record

-
delete(string | int $id) : bool
-
-
-
-

Parameters

-
-

$id

-stringint -
-

Returns

-
bool
-
-
-
-

Delete an existing collection of records

-
deleteList(null | array $data) : bool
-
-
-
-

Parameters

-
-

$data

-nullarray -
-

Returns

-
bool
-
-
-
-

Fetch an existing record

-
fetch(string | int $id) : false | array | object
-
-
-
-

Parameters

-
-

$id

-stringint -
-

Returns

-
-falsearrayobject -
-
-
-
-

Fetch a collection of records

-
fetchAll() : \Zend\Paginator\Paginator
-
-
-
-

Returns

-
\Zend\Paginator\Paginator
-
-
-
-

getEventParam() -

-
getEventParam(mixed $name, mixed $default) : mixed
-
-
-
-

Parameters

-
-

$name

-mixed -
-
-

$default

-mixed -
-

Returns

-
mixed
-
-
-
-

Get the event parameters

-
getEventParams() : array
-
-
-
-

Returns

-
array
-
-
-
-

Partial update of an existing record

-
patch(string | int $id, array | object $data) : array | object
-
-
-
-

Parameters

-
-

$id

-stringint -
-
-

$data

-arrayobject -
-

Returns

-
-arrayobject -
-
-
-
-

Update (replace) an existing collection of records

-
replaceList(array $data) : array | object
-
-
-
-

Parameters

-
-

$data

-array -
-

Returns

-
-arrayobject -
-
-
-
-

setEventParam() -

-
setEventParam(string $name, mixed $value) : mixed
-
-
-
-

Parameters

-
-

$name

-string -
-
-

$value

-mixed -
-

Returns

-
mixed
-
-
-
-

Set the event parameters

-
setEventParams(array $params) : \PhlyRestfully\ResourceInterface
-
-
-
- - - -
fluentThis method is part of a fluent interface and will return the same instance
-

Parameters

-
-

$params

-array -
-

Returns

- -
-
-
-

Update (replace) an existing record

-
update(string | int $id, array | object $data) : array | object
-
-
-
-

Parameters

-
-

$id

-stringint -
-
-

$data

-arrayobject -
-

Returns

-
-arrayobject -
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonModel.html b/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonModel.html deleted file mode 100644 index a1f60a0..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonModel.html +++ /dev/null @@ -1,156 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\View\RestfulJsonModel - - - - - - - - - - -
- -
- -
- -
-

Simple extension to facilitate the specialized JsonStrategy and JsonRenderer -in this Module.

-
-
-

- Methods

-
-

Retrieve the payload for the response

-
getPayload() : mixed
-
-
-
-

Returns

-
mixed
-
-
-
-

Does the payload represent an API-Problem?

-
isApiProblem() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Does the payload represent a HAL collection?

-
isHalCollection() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Does the payload represent a HAL item?

-
isHalResource() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Set the payload for the response

-
setPayload(mixed $payload) : \PhlyRestfully\View\RestfulJsonModel
-
-
-

This is the value to represent in the response.

-

Parameters

-
-

$payload

-mixed -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonRenderer.html b/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonRenderer.html deleted file mode 100644 index aa4b02b..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonRenderer.html +++ /dev/null @@ -1,190 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\View\RestfulJsonRenderer - - - - - - - - - - -
- -
- -
- -
-

Handles rendering of the following:

-
-
    -
  • API-Problem
  • -
  • HAL collections
  • -
  • HAL resources
  • -
-

- Methods

-
-

getApiProblem() -

-
getApiProblem() : null | \PhlyRestfully\ApiProblem
-
-
-
-

Returns

- -
-
-
-

Lazy-loads a helper plugin manager if none available.

-
getHelperPluginManager() : \Zend\View\HelperPluginManager
-
-
-
-

Returns

-
\Zend\View\HelperPluginManager
-
-
-
-

Whether or not what was rendered represents an API problem

-
isApiProblem() : bool
-
-
-
-

Returns

-
bool
-
-
-
-

Render a view model

-
render(mixed $nameOrModel, mixed $values) : string
-
-
-

If the view model is a RestfulJsonRenderer, determines if it represents -an ApiProblem, HalCollection, or HalResource, and, if so, creates a custom -representation appropriate to the type.

- -

If not, it passes control to the parent to render.

-

Parameters

-
-

$nameOrModel

-mixed -
-
-

$values

-mixed -
-

Returns

-
string
-
-
-
-

Set display_exceptions flag

-
setDisplayExceptions(bool $flag) : \PhlyRestfully\View\RestfulJsonRenderer
-
-
-
-

Parameters

-
-

$flag

-bool -
-

Returns

- -
-
-
-

Set helper plugin manager instance.

-
setHelperPluginManager(\Zend\View\HelperPluginManager $helpers) 
-
-
-

Also ensures that the 'HalLinks' helper is present.

-

Parameters

-
-

$helpers

-\Zend\View\HelperPluginManager -
-
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonStrategy.html b/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonStrategy.html deleted file mode 100644 index 286624f..0000000 --- a/docs/api/phpdoc/classes/PhlyRestfully.View.RestfulJsonStrategy.html +++ /dev/null @@ -1,149 +0,0 @@ - - - - - -PhlyRestfully » \PhlyRestfully\View\RestfulJsonStrategy - - - - - - - - - - -
- -
- -
- -
-

Extension of the JSON strategy to handle the RestfulJsonModel and provide -a Content-Type header appropriate to the response it describes.

-
-

This will give the following content types:

- -
    -
  • application/hal+json for a result that contains HAL-compliant links
  • -
  • application/problem+json for a result that contains a Problem -API-formatted response
  • -
  • application/json for all other responses
  • -
-

- Methods

-
-

__construct() -

-
__construct(\PhlyRestfully\View\RestfulJsonRenderer $renderer) 
-
-
-
-

Parameters

-

$renderer

-
-
-
-

Inject the response

-
injectResponse(\Zend\View\ViewEvent $e) 
-
-
-

Injects the response with the rendered content, and sets the content -type based on the detection that occurred during renderer selection.

-

Parameters

-
-

$e

-\Zend\View\ViewEvent -
-
-
-
-

Detect if we should use the RestfulJsonRenderer based on model type.

-
selectRenderer(\Zend\View\ViewEvent $e) : null | \PhlyRestfully\View\RestfulJsonRenderer
-
-
-
-

Parameters

-
-

$e

-\Zend\View\ViewEvent -
-

Returns

- -
-
-
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/css/bootstrap-responsive.css b/docs/api/phpdoc/css/bootstrap-responsive.css deleted file mode 100644 index 4b032cd..0000000 --- a/docs/api/phpdoc/css/bootstrap-responsive.css +++ /dev/null @@ -1,567 +0,0 @@ -/*! - * Bootstrap Responsive v2.0.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -.hidden { - display: none; - visibility: hidden; -} -@media (max-width: 480px) { - .nav-collapse { - -webkit-transform: translate3d(0, 0, 0); - } - .page-header h1 small { - display: block; - line-height: 18px; - } - input[class*="span"], - select[class*="span"], - textarea[class*="span"], - .uneditable-input { - display: block; - width: 100%; - height: 28px; - /* Make inputs at least the height of their button counterpart */ - - /* Makes inputs behave like true block-level elements */ - - -webkit-box-sizing: border-box; - /* Older Webkit */ - - -moz-box-sizing: border-box; - /* Older FF */ - - -ms-box-sizing: border-box; - /* IE8 */ - - box-sizing: border-box; - /* CSS3 spec*/ - - } - .input-prepend input[class*="span"], .input-append input[class*="span"] { - width: auto; - } - input[type="checkbox"], input[type="radio"] { - border: 1px solid #ccc; - } - .form-horizontal .control-group > label { - float: none; - width: auto; - padding-top: 0; - text-align: left; - } - .form-horizontal .controls { - margin-left: 0; - } - .form-horizontal .control-list { - padding-top: 0; - } - .form-horizontal .form-actions { - padding-left: 10px; - padding-right: 10px; - } - .modal { - position: absolute; - top: 10px; - left: 10px; - right: 10px; - width: auto; - margin: 0; - } - .modal.fade.in { - top: auto; - } - .modal-header .close { - padding: 10px; - margin: -10px; - } - .carousel-caption { - position: static; - } -} -@media (max-width: 768px) { - .container { - width: auto; - padding: 0 20px; - } - .row-fluid { - width: 100%; - } - .row { - margin-left: 0; - } - .row > [class*="span"], .row-fluid > [class*="span"] { - float: none; - display: block; - width: auto; - margin: 0; - } -} -@media (min-width: 768px) and (max-width: 980px) { - .row { - margin-left: -20px; - *zoom: 1; - } - .row:before, .row:after { - display: table; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - margin-left: 20px; - } - .span1 { - width: 42px; - } - .span2 { - width: 104px; - } - .span3 { - width: 166px; - } - .span4 { - width: 228px; - } - .span5 { - width: 290px; - } - .span6 { - width: 352px; - } - .span7 { - width: 414px; - } - .span8 { - width: 476px; - } - .span9 { - width: 538px; - } - .span10 { - width: 600px; - } - .span11 { - width: 662px; - } - .span12, .container { - width: 724px; - } - .offset1 { - margin-left: 82px; - } - .offset2 { - margin-left: 144px; - } - .offset3 { - margin-left: 206px; - } - .offset4 { - margin-left: 268px; - } - .offset5 { - margin-left: 330px; - } - .offset6 { - margin-left: 392px; - } - .offset7 { - margin-left: 454px; - } - .offset8 { - margin-left: 516px; - } - .offset9 { - margin-left: 578px; - } - .offset10 { - margin-left: 640px; - } - .offset11 { - margin-left: 702px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, .row-fluid:after { - display: table; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid > [class*="span"] { - float: left; - margin-left: 2.762430939%; - } - .row-fluid > [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .span1 { - width: 5.801104972%; - } - .row-fluid .span2 { - width: 14.364640883%; - } - .row-fluid .span3 { - width: 22.928176794%; - } - .row-fluid .span4 { - width: 31.491712705%; - } - .row-fluid .span5 { - width: 40.055248616%; - } - .row-fluid .span6 { - width: 48.618784527%; - } - .row-fluid .span7 { - width: 57.182320438000005%; - } - .row-fluid .span8 { - width: 65.74585634900001%; - } - .row-fluid .span9 { - width: 74.30939226%; - } - .row-fluid .span10 { - width: 82.87292817100001%; - } - .row-fluid .span11 { - width: 91.436464082%; - } - .row-fluid .span12 { - width: 99.999999993%; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 32px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 94px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 156px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 218px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 280px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 342px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 404px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 466px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 528px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 590px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 652px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 714px; - } -} -@media (max-width: 980px) { - body { - padding-top: 0; - } - .navbar-fixed-top { - position: static; - margin-bottom: 18px; - } - .navbar-fixed-top .navbar-inner { - padding: 5px; - } - .navbar .container { - width: auto; - padding: 0; - } - .navbar .brand { - padding-left: 10px; - padding-right: 10px; - margin: 0 0 0 -5px; - } - .navbar .nav-collapse { - clear: left; - } - .navbar .nav { - float: none; - margin: 0 0 9px; - } - .navbar .nav > li { - float: none; - } - .navbar .nav > li > a { - margin-bottom: 2px; - } - .navbar .nav > .divider-vertical { - display: none; - } - .navbar .nav > li > a, .navbar .dropdown-menu a { - padding: 6px 15px; - font-weight: bold; - color: #999999; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - } - .navbar .dropdown-menu li + li a { - margin-bottom: 2px; - } - .navbar .nav > li > a:hover, .navbar .dropdown-menu a:hover { - background-color: #222222; - } - .navbar .dropdown-menu { - position: static; - top: auto; - left: auto; - float: none; - display: block; - max-width: none; - margin: 0 15px; - padding: 0; - background-color: transparent; - border: none; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - } - .navbar .dropdown-menu:before, .navbar .dropdown-menu:after { - display: none; - } - .navbar .dropdown-menu .divider { - display: none; - } - .navbar-form, .navbar-search { - float: none; - padding: 9px 15px; - margin: 9px 0; - border-top: 1px solid #222222; - border-bottom: 1px solid #222222; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.1); - } - .navbar .nav.pull-right { - float: none; - margin-left: 0; - } - .navbar-static .navbar-inner { - padding-left: 10px; - padding-right: 10px; - } - .btn-navbar { - display: block; - } - .nav-collapse { - overflow: hidden; - height: 0; - } -} -@media (min-width: 980px) { - .nav-collapse.collapse { - height: auto !important; - } -} -@media (min-width: 1200px) { - .row { - margin-left: -30px; - *zoom: 1; - } - .row:before, .row:after { - display: table; - content: ""; - } - .row:after { - clear: both; - } - [class*="span"] { - float: left; - margin-left: 30px; - } - .span1 { - width: 70px; - } - .span2 { - width: 170px; - } - .span3 { - width: 270px; - } - .span4 { - width: 370px; - } - .span5 { - width: 470px; - } - .span6 { - width: 570px; - } - .span7 { - width: 670px; - } - .span8 { - width: 770px; - } - .span9 { - width: 870px; - } - .span10 { - width: 970px; - } - .span11 { - width: 1070px; - } - .span12, .container { - width: 1170px; - } - .offset1 { - margin-left: 130px; - } - .offset2 { - margin-left: 230px; - } - .offset3 { - margin-left: 330px; - } - .offset4 { - margin-left: 430px; - } - .offset5 { - margin-left: 530px; - } - .offset6 { - margin-left: 630px; - } - .offset7 { - margin-left: 730px; - } - .offset8 { - margin-left: 830px; - } - .offset9 { - margin-left: 930px; - } - .offset10 { - margin-left: 1030px; - } - .offset11 { - margin-left: 1130px; - } - .row-fluid { - width: 100%; - *zoom: 1; - } - .row-fluid:before, .row-fluid:after { - display: table; - content: ""; - } - .row-fluid:after { - clear: both; - } - .row-fluid > [class*="span"] { - float: left; - margin-left: 2.564102564%; - } - .row-fluid > [class*="span"]:first-child { - margin-left: 0; - } - .row-fluid .span1 { - width: 5.982905983%; - } - .row-fluid .span2 { - width: 14.529914530000001%; - } - .row-fluid .span3 { - width: 23.076923077%; - } - .row-fluid .span4 { - width: 31.623931624%; - } - .row-fluid .span5 { - width: 40.170940171000005%; - } - .row-fluid .span6 { - width: 48.717948718%; - } - .row-fluid .span7 { - width: 57.264957265%; - } - .row-fluid .span8 { - width: 65.81196581200001%; - } - .row-fluid .span9 { - width: 74.358974359%; - } - .row-fluid .span10 { - width: 82.905982906%; - } - .row-fluid .span11 { - width: 91.45299145300001%; - } - .row-fluid .span12 { - width: 100%; - } - input.span1, textarea.span1, .uneditable-input.span1 { - width: 60px; - } - input.span2, textarea.span2, .uneditable-input.span2 { - width: 160px; - } - input.span3, textarea.span3, .uneditable-input.span3 { - width: 260px; - } - input.span4, textarea.span4, .uneditable-input.span4 { - width: 360px; - } - input.span5, textarea.span5, .uneditable-input.span5 { - width: 460px; - } - input.span6, textarea.span6, .uneditable-input.span6 { - width: 560px; - } - input.span7, textarea.span7, .uneditable-input.span7 { - width: 660px; - } - input.span8, textarea.span8, .uneditable-input.span8 { - width: 760px; - } - input.span9, textarea.span9, .uneditable-input.span9 { - width: 860px; - } - input.span10, textarea.span10, .uneditable-input.span10 { - width: 960px; - } - input.span11, textarea.span11, .uneditable-input.span11 { - width: 1060px; - } - input.span12, textarea.span12, .uneditable-input.span12 { - width: 1160px; - } - .thumbnails { - margin-left: -30px; - } - .thumbnails > li { - margin-left: 30px; - } -} diff --git a/docs/api/phpdoc/css/bootstrap-responsive.min.css b/docs/api/phpdoc/css/bootstrap-responsive.min.css deleted file mode 100644 index bc3f2ab..0000000 --- a/docs/api/phpdoc/css/bootstrap-responsive.min.css +++ /dev/null @@ -1,3 +0,0 @@ - -.hidden{display:none;visibility:hidden;} -@media (max-width:480px){.nav-collapse{-webkit-transform:translate3d(0, 0, 0);} .page-header h1 small{display:block;line-height:18px;} input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{display:block;width:100%;height:28px;-webkit-box-sizing:border-box;-moz-box-sizing:border-box;-ms-box-sizing:border-box;box-sizing:border-box;} .input-prepend input[class*="span"],.input-append input[class*="span"]{width:auto;} input[type="checkbox"],input[type="radio"]{border:1px solid #ccc;} .form-horizontal .control-group>label{float:none;width:auto;padding-top:0;text-align:left;} .form-horizontal .controls{margin-left:0;} .form-horizontal .control-list{padding-top:0;} .form-horizontal .form-actions{padding-left:10px;padding-right:10px;} .modal{position:absolute;top:10px;left:10px;right:10px;width:auto;margin:0;}.modal.fade.in{top:auto;} .modal-header .close{padding:10px;margin:-10px;} .carousel-caption{position:static;}}@media (max-width:768px){.container{width:auto;padding:0 20px;} .row-fluid{width:100%;} .row{margin-left:0;} .row>[class*="span"],.row-fluid>[class*="span"]{float:none;display:block;width:auto;margin:0;}}@media (min-width:768px) and (max-width:980px){.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:20px;} .span1{width:42px;} .span2{width:104px;} .span3{width:166px;} .span4{width:228px;} .span5{width:290px;} .span6{width:352px;} .span7{width:414px;} .span8{width:476px;} .span9{width:538px;} .span10{width:600px;} .span11{width:662px;} .span12,.container{width:724px;} .offset1{margin-left:82px;} .offset2{margin-left:144px;} .offset3{margin-left:206px;} .offset4{margin-left:268px;} .offset5{margin-left:330px;} .offset6{margin-left:392px;} .offset7{margin-left:454px;} .offset8{margin-left:516px;} .offset9{margin-left:578px;} .offset10{margin-left:640px;} .offset11{margin-left:702px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.762430939%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.801104972%;} .row-fluid .span2{width:14.364640883%;} .row-fluid .span3{width:22.928176794%;} .row-fluid .span4{width:31.491712705%;} .row-fluid .span5{width:40.055248616%;} .row-fluid .span6{width:48.618784527%;} .row-fluid .span7{width:57.182320438000005%;} .row-fluid .span8{width:65.74585634900001%;} .row-fluid .span9{width:74.30939226%;} .row-fluid .span10{width:82.87292817100001%;} .row-fluid .span11{width:91.436464082%;} .row-fluid .span12{width:99.999999993%;} input.span1,textarea.span1,.uneditable-input.span1{width:32px;} input.span2,textarea.span2,.uneditable-input.span2{width:94px;} input.span3,textarea.span3,.uneditable-input.span3{width:156px;} input.span4,textarea.span4,.uneditable-input.span4{width:218px;} input.span5,textarea.span5,.uneditable-input.span5{width:280px;} input.span6,textarea.span6,.uneditable-input.span6{width:342px;} input.span7,textarea.span7,.uneditable-input.span7{width:404px;} input.span8,textarea.span8,.uneditable-input.span8{width:466px;} input.span9,textarea.span9,.uneditable-input.span9{width:528px;} input.span10,textarea.span10,.uneditable-input.span10{width:590px;} input.span11,textarea.span11,.uneditable-input.span11{width:652px;} input.span12,textarea.span12,.uneditable-input.span12{width:714px;}}@media (max-width:980px){body{padding-top:0;} .navbar-fixed-top{position:static;margin-bottom:18px;} .navbar-fixed-top .navbar-inner{padding:5px;} .navbar .container{width:auto;padding:0;} .navbar .brand{padding-left:10px;padding-right:10px;margin:0 0 0 -5px;} .navbar .nav-collapse{clear:left;} .navbar .nav{float:none;margin:0 0 9px;} .navbar .nav>li{float:none;} .navbar .nav>li>a{margin-bottom:2px;} .navbar .nav>.divider-vertical{display:none;} .navbar .nav>li>a,.navbar .dropdown-menu a{padding:6px 15px;font-weight:bold;color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} .navbar .dropdown-menu li+li a{margin-bottom:2px;} .navbar .nav>li>a:hover,.navbar .dropdown-menu a:hover{background-color:#222222;} .navbar .dropdown-menu{position:static;top:auto;left:auto;float:none;display:block;max-width:none;margin:0 15px;padding:0;background-color:transparent;border:none;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} .navbar .dropdown-menu:before,.navbar .dropdown-menu:after{display:none;} .navbar .dropdown-menu .divider{display:none;} .navbar-form,.navbar-search{float:none;padding:9px 15px;margin:9px 0;border-top:1px solid #222222;border-bottom:1px solid #222222;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.1);} .navbar .nav.pull-right{float:none;margin-left:0;} .navbar-static .navbar-inner{padding-left:10px;padding-right:10px;} .btn-navbar{display:block;} .nav-collapse{overflow:hidden;height:0;}}@media (min-width:980px){.nav-collapse.collapse{height:auto !important;}}@media (min-width:1200px){.row{margin-left:-30px;*zoom:1;}.row:before,.row:after{display:table;content:"";} .row:after{clear:both;} [class*="span"]{float:left;margin-left:30px;} .span1{width:70px;} .span2{width:170px;} .span3{width:270px;} .span4{width:370px;} .span5{width:470px;} .span6{width:570px;} .span7{width:670px;} .span8{width:770px;} .span9{width:870px;} .span10{width:970px;} .span11{width:1070px;} .span12,.container{width:1170px;} .offset1{margin-left:130px;} .offset2{margin-left:230px;} .offset3{margin-left:330px;} .offset4{margin-left:430px;} .offset5{margin-left:530px;} .offset6{margin-left:630px;} .offset7{margin-left:730px;} .offset8{margin-left:830px;} .offset9{margin-left:930px;} .offset10{margin-left:1030px;} .offset11{margin-left:1130px;} .row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} .row-fluid:after{clear:both;} .row-fluid>[class*="span"]{float:left;margin-left:2.564102564%;} .row-fluid>[class*="span"]:first-child{margin-left:0;} .row-fluid .span1{width:5.982905983%;} .row-fluid .span2{width:14.529914530000001%;} .row-fluid .span3{width:23.076923077%;} .row-fluid .span4{width:31.623931624%;} .row-fluid .span5{width:40.170940171000005%;} .row-fluid .span6{width:48.717948718%;} .row-fluid .span7{width:57.264957265%;} .row-fluid .span8{width:65.81196581200001%;} .row-fluid .span9{width:74.358974359%;} .row-fluid .span10{width:82.905982906%;} .row-fluid .span11{width:91.45299145300001%;} .row-fluid .span12{width:100%;} input.span1,textarea.span1,.uneditable-input.span1{width:60px;} input.span2,textarea.span2,.uneditable-input.span2{width:160px;} input.span3,textarea.span3,.uneditable-input.span3{width:260px;} input.span4,textarea.span4,.uneditable-input.span4{width:360px;} input.span5,textarea.span5,.uneditable-input.span5{width:460px;} input.span6,textarea.span6,.uneditable-input.span6{width:560px;} input.span7,textarea.span7,.uneditable-input.span7{width:660px;} input.span8,textarea.span8,.uneditable-input.span8{width:760px;} input.span9,textarea.span9,.uneditable-input.span9{width:860px;} input.span10,textarea.span10,.uneditable-input.span10{width:960px;} input.span11,textarea.span11,.uneditable-input.span11{width:1060px;} input.span12,textarea.span12,.uneditable-input.span12{width:1160px;} .thumbnails{margin-left:-30px;} .thumbnails>li{margin-left:30px;}} diff --git a/docs/api/phpdoc/css/bootstrap.css b/docs/api/phpdoc/css/bootstrap.css deleted file mode 100644 index 563050c..0000000 --- a/docs/api/phpdoc/css/bootstrap.css +++ /dev/null @@ -1,3370 +0,0 @@ -/*! - * Bootstrap v2.0.0 - * - * Copyright 2012 Twitter, Inc - * Licensed under the Apache License v2.0 - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Designed and built with all the love in the world @twitter by @mdo and @fat. - */ -article, -aside, -details, -figcaption, -figure, -footer, -header, -hgroup, -nav, -section { - display: block; -} -audio, canvas, video { - display: inline-block; - *display: inline; - *zoom: 1; -} -audio:not([controls]) { - display: none; -} -html { - font-size: 100%; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} -a:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -a:hover, a:active { - outline: 0; -} -sub, sup { - position: relative; - font-size: 75%; - line-height: 0; - vertical-align: baseline; -} -sup { - top: -0.5em; -} -sub { - bottom: -0.25em; -} -img { - max-width: 100%; - height: auto; - border: 0; - -ms-interpolation-mode: bicubic; -} -button, -input, -select, -textarea { - margin: 0; - font-size: 100%; - vertical-align: middle; -} -button, input { - *overflow: visible; - line-height: normal; -} -button::-moz-focus-inner, input::-moz-focus-inner { - padding: 0; - border: 0; -} -button, -input[type="button"], -input[type="reset"], -input[type="submit"] { - cursor: pointer; - -webkit-appearance: button; -} -input[type="search"] { - -webkit-appearance: textfield; - -webkit-box-sizing: content-box; - -moz-box-sizing: content-box; - box-sizing: content-box; -} -input[type="search"]::-webkit-search-decoration, input[type="search"]::-webkit-search-cancel-button { - -webkit-appearance: none; -} -textarea { - overflow: auto; - vertical-align: top; -} -body { - margin: 0; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; - color: #333333; - background-color: #ffffff; -} -a { - color: #0088cc; - text-decoration: none; -} -a:hover { - color: #005580; - text-decoration: underline; -} -.row { - margin-left: -20px; - *zoom: 1; -} -.row:before, .row:after { - display: table; - content: ""; -} -.row:after { - clear: both; -} -[class*="span"] { - float: left; - margin-left: 20px; -} -.span1 { - width: 60px; -} -.span2 { - width: 140px; -} -.span3 { - width: 220px; -} -.span4 { - width: 300px; -} -.span5 { - width: 380px; -} -.span6 { - width: 460px; -} -.span7 { - width: 540px; -} -.span8 { - width: 620px; -} -.span9 { - width: 700px; -} -.span10 { - width: 780px; -} -.span11 { - width: 860px; -} -.span12, .container { - width: 940px; -} -.offset1 { - margin-left: 100px; -} -.offset2 { - margin-left: 180px; -} -.offset3 { - margin-left: 260px; -} -.offset4 { - margin-left: 340px; -} -.offset5 { - margin-left: 420px; -} -.offset6 { - margin-left: 500px; -} -.offset7 { - margin-left: 580px; -} -.offset8 { - margin-left: 660px; -} -.offset9 { - margin-left: 740px; -} -.offset10 { - margin-left: 820px; -} -.offset11 { - margin-left: 900px; -} -.row-fluid { - width: 100%; - *zoom: 1; -} -.row-fluid:before, .row-fluid:after { - display: table; - content: ""; -} -.row-fluid:after { - clear: both; -} -.row-fluid > [class*="span"] { - float: left; - margin-left: 2.127659574%; -} -.row-fluid > [class*="span"]:first-child { - margin-left: 0; -} -.row-fluid .span1 { - width: 6.382978723%; -} -.row-fluid .span2 { - width: 14.89361702%; -} -.row-fluid .span3 { - width: 23.404255317%; -} -.row-fluid .span4 { - width: 31.914893614%; -} -.row-fluid .span5 { - width: 40.425531911%; -} -.row-fluid .span6 { - width: 48.93617020799999%; -} -.row-fluid .span7 { - width: 57.446808505%; -} -.row-fluid .span8 { - width: 65.95744680199999%; -} -.row-fluid .span9 { - width: 74.468085099%; -} -.row-fluid .span10 { - width: 82.97872339599999%; -} -.row-fluid .span11 { - width: 91.489361693%; -} -.row-fluid .span12 { - width: 99.99999998999999%; -} -.container { - width: 940px; - margin-left: auto; - margin-right: auto; - *zoom: 1; -} -.container:before, .container:after { - display: table; - content: ""; -} -.container:after { - clear: both; -} -.container-fluid { - padding-left: 20px; - padding-right: 20px; - *zoom: 1; -} -.container-fluid:before, .container-fluid:after { - display: table; - content: ""; -} -.container-fluid:after { - clear: both; -} -p { - margin: 0 0 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - line-height: 18px; -} -p small { - font-size: 11px; - color: #999999; -} -.lead { - margin-bottom: 18px; - font-size: 20px; - font-weight: 200; - line-height: 27px; -} -h1, -h2, -h3, -h4, -h5, -h6 { - margin: 0; - font-weight: bold; - color: #333333; - text-rendering: optimizelegibility; -} -h1 small, -h2 small, -h3 small, -h4 small, -h5 small, -h6 small { - font-weight: normal; - color: #999999; -} -h1 { - font-size: 30px; - line-height: 36px; -} -h1 small { - font-size: 18px; -} -h2 { - font-size: 24px; - line-height: 36px; -} -h2 small { - font-size: 18px; -} -h3 { - line-height: 27px; - font-size: 18px; -} -h3 small { - font-size: 14px; -} -h4, h5, h6 { - line-height: 18px; -} -h4 { - font-size: 14px; -} -h4 small { - font-size: 12px; -} -h5 { - font-size: 12px; -} -h6 { - font-size: 11px; - color: #999999; - text-transform: uppercase; -} -.page-header { - padding-bottom: 17px; - margin: 18px 0; - border-bottom: 1px solid #eeeeee; -} -.page-header h1 { - line-height: 1; -} -ul, ol { - padding: 0; - margin: 0 0 9px 25px; -} -ul ul, -ul ol, -ol ol, -ol ul { - margin-bottom: 0; -} -ul { - list-style: disc; -} -ol { - list-style: decimal; -} -li { - line-height: 18px; -} -ul.unstyled { - margin-left: 0; - list-style: none; -} -dl { - margin-bottom: 18px; -} -dt, dd { - line-height: 18px; -} -dt { - font-weight: bold; -} -dd { - margin-left: 9px; -} -hr { - margin: 18px 0; - border: 0; - border-top: 1px solid #e5e5e5; - border-bottom: 1px solid #ffffff; -} -strong { - font-weight: bold; -} -em { - font-style: italic; -} -.muted { - color: #999999; -} -abbr { - font-size: 90%; - text-transform: uppercase; - border-bottom: 1px dotted #ddd; - cursor: help; -} -blockquote { - padding: 0 0 0 15px; - margin: 0 0 18px; - border-left: 5px solid #eeeeee; -} -blockquote p { - margin-bottom: 0; - font-size: 16px; - font-weight: 300; - line-height: 22.5px; -} -blockquote small { - display: block; - line-height: 18px; - color: #999999; -} -blockquote small:before { - content: '\2014 \00A0'; -} -blockquote.pull-right { - float: right; - padding-left: 0; - padding-right: 15px; - border-left: 0; - border-right: 5px solid #eeeeee; -} -blockquote.pull-right p, blockquote.pull-right small { - text-align: right; -} -q:before, -q:after, -blockquote:before, -blockquote:after { - content: ""; -} -address { - display: block; - margin-bottom: 18px; - line-height: 18px; - font-style: normal; -} -small { - font-size: 100%; -} -cite { - font-style: normal; -} -code, pre { - padding: 0 3px 2px; - font-family: Menlo, Monaco, "Courier New", monospace; - font-size: 12px; - color: #333333; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -code { - padding: 3px 4px; - color: #d14; - background-color: #f7f7f9; - border: 1px solid #e1e1e8; -} -pre { - display: block; - padding: 8.5px; - margin: 0 0 9px; - font-size: 12px; - line-height: 18px; - background-color: #f5f5f5; - border: 1px solid #ccc; - border: 1px solid rgba(0, 0, 0, 0.15); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - white-space: pre; - white-space: pre-wrap; - word-break: break-all; -} -pre.prettyprint { - margin-bottom: 18px; -} -pre code { - padding: 0; - background-color: transparent; -} -form { - margin: 0 0 18px; -} -fieldset { - padding: 0; - margin: 0; - border: 0; -} -legend { - display: block; - width: 100%; - padding: 0; - margin-bottom: 27px; - font-size: 19.5px; - line-height: 36px; - color: #333333; - border: 0; - border-bottom: 1px solid #eee; -} -label, -input, -button, -select, -textarea { - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 18px; -} -label { - display: block; - margin-bottom: 5px; - color: #333333; -} -input, -textarea, -select, -.uneditable-input { - display: inline-block; - width: 210px; - height: 18px; - padding: 4px; - margin-bottom: 9px; - font-size: 13px; - line-height: 18px; - color: #555555; - border: 1px solid #ccc; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.uneditable-textarea { - width: auto; - height: auto; -} -label input, label textarea, label select { - display: block; -} -input[type="image"], input[type="checkbox"], input[type="radio"] { - width: auto; - height: auto; - padding: 0; - margin: 3px 0; - *margin-top: 0; - /* IE7 */ - - line-height: normal; - border: 0; - cursor: pointer; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -input[type="file"] { - padding: initial; - line-height: initial; - border: initial; - background-color: #ffffff; - background-color: initial; - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -input[type="button"], input[type="reset"], input[type="submit"] { - width: auto; - height: auto; -} -select, input[type="file"] { - height: 28px; - /* In IE7, the height of the select element cannot be changed by height, only font-size */ - - *margin-top: 4px; - /* For IE7, add top margin to align select with labels */ - - line-height: 28px; -} -select { - width: 220px; - background-color: #ffffff; -} -select[multiple], select[size] { - height: auto; -} -input[type="image"] { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -textarea { - height: auto; -} -input[type="hidden"] { - display: none; -} -.radio, .checkbox { - padding-left: 18px; -} -.radio input[type="radio"], .checkbox input[type="checkbox"] { - float: left; - margin-left: -18px; -} -.controls > .radio:first-child, .controls > .checkbox:first-child { - padding-top: 5px; -} -.radio.inline, .checkbox.inline { - display: inline-block; - margin-bottom: 0; - vertical-align: middle; -} -.radio.inline + .radio.inline, .checkbox.inline + .checkbox.inline { - margin-left: 10px; -} -.controls > .radio.inline:first-child, .controls > .checkbox.inline:first-child { - padding-top: 0; -} -input, textarea { - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075); - -webkit-transition: border linear 0.2s, box-shadow linear 0.2s; - -moz-transition: border linear 0.2s, box-shadow linear 0.2s; - -ms-transition: border linear 0.2s, box-shadow linear 0.2s; - -o-transition: border linear 0.2s, box-shadow linear 0.2s; - transition: border linear 0.2s, box-shadow linear 0.2s; -} -input:focus, textarea:focus { - border-color: rgba(82, 168, 236, 0.8); - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.075), 0 0 8px rgba(82, 168, 236, 0.6); - outline: 0; - outline: thin dotted \9; - /* IE6-8 */ - -} -input[type="file"]:focus, input[type="checkbox"]:focus, select:focus { - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.input-mini { - width: 60px; -} -.input-small { - width: 90px; -} -.input-medium { - width: 150px; -} -.input-large { - width: 210px; -} -.input-xlarge { - width: 270px; -} -.input-xxlarge { - width: 530px; -} -input[class*="span"], -select[class*="span"], -textarea[class*="span"], -.uneditable-input { - float: none; - margin-left: 0; -} -input.span1, textarea.span1, .uneditable-input.span1 { - width: 50px; -} -input.span2, textarea.span2, .uneditable-input.span2 { - width: 130px; -} -input.span3, textarea.span3, .uneditable-input.span3 { - width: 210px; -} -input.span4, textarea.span4, .uneditable-input.span4 { - width: 290px; -} -input.span5, textarea.span5, .uneditable-input.span5 { - width: 370px; -} -input.span6, textarea.span6, .uneditable-input.span6 { - width: 450px; -} -input.span7, textarea.span7, .uneditable-input.span7 { - width: 530px; -} -input.span8, textarea.span8, .uneditable-input.span8 { - width: 610px; -} -input.span9, textarea.span9, .uneditable-input.span9 { - width: 690px; -} -input.span10, textarea.span10, .uneditable-input.span10 { - width: 770px; -} -input.span11, textarea.span11, .uneditable-input.span11 { - width: 850px; -} -input.span12, textarea.span12, .uneditable-input.span12 { - width: 930px; -} -input[disabled], -select[disabled], -textarea[disabled], -input[readonly], -select[readonly], -textarea[readonly] { - background-color: #f5f5f5; - border-color: #ddd; - cursor: not-allowed; -} -.control-group.warning > label, .control-group.warning .help-block, .control-group.warning .help-inline { - color: #c09853; -} -.control-group.warning input, .control-group.warning select, .control-group.warning textarea { - color: #c09853; - border-color: #c09853; -} -.control-group.warning input:focus, .control-group.warning select:focus, .control-group.warning textarea:focus { - border-color: #a47e3c; - -webkit-box-shadow: 0 0 6px #dbc59e; - -moz-box-shadow: 0 0 6px #dbc59e; - box-shadow: 0 0 6px #dbc59e; -} -.control-group.warning .input-prepend .add-on, .control-group.warning .input-append .add-on { - color: #c09853; - background-color: #fcf8e3; - border-color: #c09853; -} -.control-group.error > label, .control-group.error .help-block, .control-group.error .help-inline { - color: #b94a48; -} -.control-group.error input, .control-group.error select, .control-group.error textarea { - color: #b94a48; - border-color: #b94a48; -} -.control-group.error input:focus, .control-group.error select:focus, .control-group.error textarea:focus { - border-color: #953b39; - -webkit-box-shadow: 0 0 6px #d59392; - -moz-box-shadow: 0 0 6px #d59392; - box-shadow: 0 0 6px #d59392; -} -.control-group.error .input-prepend .add-on, .control-group.error .input-append .add-on { - color: #b94a48; - background-color: #f2dede; - border-color: #b94a48; -} -.control-group.success > label, .control-group.success .help-block, .control-group.success .help-inline { - color: #468847; -} -.control-group.success input, .control-group.success select, .control-group.success textarea { - color: #468847; - border-color: #468847; -} -.control-group.success input:focus, .control-group.success select:focus, .control-group.success textarea:focus { - border-color: #356635; - -webkit-box-shadow: 0 0 6px #7aba7b; - -moz-box-shadow: 0 0 6px #7aba7b; - box-shadow: 0 0 6px #7aba7b; -} -.control-group.success .input-prepend .add-on, .control-group.success .input-append .add-on { - color: #468847; - background-color: #dff0d8; - border-color: #468847; -} -input:focus:required:invalid, textarea:focus:required:invalid, select:focus:required:invalid { - color: #b94a48; - border-color: #ee5f5b; -} -input:focus:required:invalid:focus, textarea:focus:required:invalid:focus, select:focus:required:invalid:focus { - border-color: #e9322d; - -webkit-box-shadow: 0 0 6px #f8b9b7; - -moz-box-shadow: 0 0 6px #f8b9b7; - box-shadow: 0 0 6px #f8b9b7; -} -.form-actions { - padding: 17px 20px 18px; - margin-top: 18px; - margin-bottom: 18px; - background-color: #f5f5f5; - border-top: 1px solid #ddd; -} -.uneditable-input { - display: block; - background-color: #ffffff; - border-color: #eee; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.025); - cursor: not-allowed; -} -:-moz-placeholder { - color: #999999; -} -::-webkit-input-placeholder { - color: #999999; -} -.help-block { - margin-top: 5px; - margin-bottom: 0; - color: #999999; -} -.help-inline { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-bottom: 9px; - vertical-align: middle; - padding-left: 5px; -} -.input-prepend, .input-append { - margin-bottom: 5px; - *zoom: 1; -} -.input-prepend:before, -.input-append:before, -.input-prepend:after, -.input-append:after { - display: table; - content: ""; -} -.input-prepend:after, .input-append:after { - clear: both; -} -.input-prepend input, -.input-append input, -.input-prepend .uneditable-input, -.input-append .uneditable-input { - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-prepend input:focus, -.input-append input:focus, -.input-prepend .uneditable-input:focus, -.input-append .uneditable-input:focus { - position: relative; - z-index: 2; -} -.input-prepend .uneditable-input, .input-append .uneditable-input { - border-left-color: #ccc; -} -.input-prepend .add-on, .input-append .add-on { - float: left; - display: block; - width: auto; - min-width: 16px; - height: 18px; - margin-right: -1px; - padding: 4px 5px; - font-weight: normal; - line-height: 18px; - color: #999999; - text-align: center; - text-shadow: 0 1px 0 #ffffff; - background-color: #f5f5f5; - border: 1px solid #ccc; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-prepend .active, .input-append .active { - background-color: #a9dba9; - border-color: #46a546; -} -.input-prepend .add-on { - *margin-top: 1px; - /* IE6-7 */ - -} -.input-append input, .input-append .uneditable-input { - float: left; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.input-append .uneditable-input { - border-right-color: #ccc; -} -.input-append .add-on { - margin-right: 0; - margin-left: -1px; - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.input-append input:first-child { - *margin-left: -160px; -} -.input-append input:first-child + .add-on { - *margin-left: -21px; -} -.search-query { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; - -webkit-border-radius: 14px; - -moz-border-radius: 14px; - border-radius: 14px; -} -.form-search input, -.form-inline input, -.form-horizontal input, -.form-search textarea, -.form-inline textarea, -.form-horizontal textarea, -.form-search select, -.form-inline select, -.form-horizontal select, -.form-search .help-inline, -.form-inline .help-inline, -.form-horizontal .help-inline, -.form-search .uneditable-input, -.form-inline .uneditable-input, -.form-horizontal .uneditable-input { - display: inline-block; - margin-bottom: 0; -} -.form-search label, -.form-inline label, -.form-search .input-append, -.form-inline .input-append, -.form-search .input-prepend, -.form-inline .input-prepend { - display: inline-block; -} -.form-search .input-append .add-on, -.form-inline .input-prepend .add-on, -.form-search .input-append .add-on, -.form-inline .input-prepend .add-on { - vertical-align: middle; -} -.control-group { - margin-bottom: 9px; -} -.form-horizontal legend + .control-group { - margin-top: 18px; - -webkit-margin-top-collapse: separate; -} -.form-horizontal .control-group { - margin-bottom: 18px; - *zoom: 1; -} -.form-horizontal .control-group:before, .form-horizontal .control-group:after { - display: table; - content: ""; -} -.form-horizontal .control-group:after { - clear: both; -} -.form-horizontal .control-group > label { - float: left; - width: 140px; - padding-top: 5px; - text-align: right; -} -.form-horizontal .controls { - margin-left: 160px; -} -.form-horizontal .form-actions { - padding-left: 160px; -} -table { - max-width: 100%; - border-collapse: collapse; - border-spacing: 0; -} -.table { - width: 100%; - margin-bottom: 18px; -} -.table th, .table td { - padding: 8px; - line-height: 18px; - text-align: left; - border-top: 1px solid #ddd; -} -.table th { - font-weight: bold; - vertical-align: bottom; -} -.table td { - vertical-align: top; -} -.table thead:first-child tr th, .table thead:first-child tr td { - border-top: 0; -} -.table tbody + tbody { - border-top: 2px solid #ddd; -} -.table-condensed th, .table-condensed td { - padding: 4px 5px; -} -.table-bordered { - border: 1px solid #ddd; - border-collapse: separate; - *border-collapse: collapsed; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.table-bordered th + th, -.table-bordered td + td, -.table-bordered th + td, -.table-bordered td + th { - border-left: 1px solid #ddd; -} -.table-bordered thead:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child th, .table-bordered tbody:first-child tr:first-child td { - border-top: 0; -} -.table-bordered thead:first-child tr:first-child th:first-child, .table-bordered tbody:first-child tr:first-child td:first-child { - -webkit-border-radius: 4px 0 0 0; - -moz-border-radius: 4px 0 0 0; - border-radius: 4px 0 0 0; -} -.table-bordered thead:first-child tr:first-child th:last-child, .table-bordered tbody:first-child tr:first-child td:last-child { - -webkit-border-radius: 0 4px 0 0; - -moz-border-radius: 0 4px 0 0; - border-radius: 0 4px 0 0; -} -.table-bordered thead:last-child tr:last-child th:first-child, .table-bordered tbody:last-child tr:last-child td:first-child { - -webkit-border-radius: 0 0 0 4px; - -moz-border-radius: 0 0 0 4px; - border-radius: 0 0 0 4px; -} -.table-bordered thead:last-child tr:last-child th:last-child, .table-bordered tbody:last-child tr:last-child td:last-child { - -webkit-border-radius: 0 0 4px 0; - -moz-border-radius: 0 0 4px 0; - border-radius: 0 0 4px 0; -} -.table-striped tbody tr:nth-child(odd) td, .table-striped tbody tr:nth-child(odd) th { - background-color: #f9f9f9; -} -table .span1 { - float: none; - width: 44px; - margin-left: 0; -} -table .span2 { - float: none; - width: 124px; - margin-left: 0; -} -table .span3 { - float: none; - width: 204px; - margin-left: 0; -} -table .span4 { - float: none; - width: 284px; - margin-left: 0; -} -table .span5 { - float: none; - width: 364px; - margin-left: 0; -} -table .span6 { - float: none; - width: 444px; - margin-left: 0; -} -table .span7 { - float: none; - width: 524px; - margin-left: 0; -} -table .span8 { - float: none; - width: 604px; - margin-left: 0; -} -table .span9 { - float: none; - width: 684px; - margin-left: 0; -} -table .span10 { - float: none; - width: 764px; - margin-left: 0; -} -table .span11 { - float: none; - width: 844px; - margin-left: 0; -} -table .span12 { - float: none; - width: 924px; - margin-left: 0; -} -[class^="icon-"] { - display: inline-block; - width: 14px; - height: 14px; - vertical-align: text-top; - background-image: url(../img/glyphicons-halflings.png); - background-position: 14px 14px; - background-repeat: no-repeat; - *margin-right: .3em; -} -[class^="icon-"]:last-child { - *margin-left: 0; -} -.icon-white { - background-image: url(../img/glyphicons-halflings-white.png); -} -.icon-glass { - background-position: 0 0; -} -.icon-music { - background-position: -24px 0; -} -.icon-search { - background-position: -48px 0; -} -.icon-envelope { - background-position: -72px 0; -} -.icon-heart { - background-position: -96px 0; -} -.icon-star { - background-position: -120px 0; -} -.icon-star-empty { - background-position: -144px 0; -} -.icon-user { - background-position: -168px 0; -} -.icon-film { - background-position: -192px 0; -} -.icon-th-large { - background-position: -216px 0; -} -.icon-th { - background-position: -240px 0; -} -.icon-th-list { - background-position: -264px 0; -} -.icon-ok { - background-position: -288px 0; -} -.icon-remove { - background-position: -312px 0; -} -.icon-zoom-in { - background-position: -336px 0; -} -.icon-zoom-out { - background-position: -360px 0; -} -.icon-off { - background-position: -384px 0; -} -.icon-signal { - background-position: -408px 0; -} -.icon-cog { - background-position: -432px 0; -} -.icon-trash { - background-position: -456px 0; -} -.icon-home { - background-position: 0 -24px; -} -.icon-file { - background-position: -24px -24px; -} -.icon-time { - background-position: -48px -24px; -} -.icon-road { - background-position: -72px -24px; -} -.icon-download-alt { - background-position: -96px -24px; -} -.icon-download { - background-position: -120px -24px; -} -.icon-upload { - background-position: -144px -24px; -} -.icon-inbox { - background-position: -168px -24px; -} -.icon-play-circle { - background-position: -192px -24px; -} -.icon-repeat { - background-position: -216px -24px; -} -.icon-refresh { - background-position: -240px -24px; -} -.icon-list-alt { - background-position: -264px -24px; -} -.icon-lock { - background-position: -287px -24px; -} -.icon-flag { - background-position: -312px -24px; -} -.icon-headphones { - background-position: -336px -24px; -} -.icon-volume-off { - background-position: -360px -24px; -} -.icon-volume-down { - background-position: -384px -24px; -} -.icon-volume-up { - background-position: -408px -24px; -} -.icon-qrcode { - background-position: -432px -24px; -} -.icon-barcode { - background-position: -456px -24px; -} -.icon-tag { - background-position: 0 -48px; -} -.icon-tags { - background-position: -25px -48px; -} -.icon-book { - background-position: -48px -48px; -} -.icon-bookmark { - background-position: -72px -48px; -} -.icon-print { - background-position: -96px -48px; -} -.icon-camera { - background-position: -120px -48px; -} -.icon-font { - background-position: -144px -48px; -} -.icon-bold { - background-position: -167px -48px; -} -.icon-italic { - background-position: -192px -48px; -} -.icon-text-height { - background-position: -216px -48px; -} -.icon-text-width { - background-position: -240px -48px; -} -.icon-align-left { - background-position: -264px -48px; -} -.icon-align-center { - background-position: -288px -48px; -} -.icon-align-right { - background-position: -312px -48px; -} -.icon-align-justify { - background-position: -336px -48px; -} -.icon-list { - background-position: -360px -48px; -} -.icon-indent-left { - background-position: -384px -48px; -} -.icon-indent-right { - background-position: -408px -48px; -} -.icon-facetime-video { - background-position: -432px -48px; -} -.icon-picture { - background-position: -456px -48px; -} -.icon-pencil { - background-position: 0 -72px; -} -.icon-map-marker { - background-position: -24px -72px; -} -.icon-adjust { - background-position: -48px -72px; -} -.icon-tint { - background-position: -72px -72px; -} -.icon-edit { - background-position: -96px -72px; -} -.icon-share { - background-position: -120px -72px; -} -.icon-check { - background-position: -144px -72px; -} -.icon-move { - background-position: -168px -72px; -} -.icon-step-backward { - background-position: -192px -72px; -} -.icon-fast-backward { - background-position: -216px -72px; -} -.icon-backward { - background-position: -240px -72px; -} -.icon-play { - background-position: -264px -72px; -} -.icon-pause { - background-position: -288px -72px; -} -.icon-stop { - background-position: -312px -72px; -} -.icon-forward { - background-position: -336px -72px; -} -.icon-fast-forward { - background-position: -360px -72px; -} -.icon-step-forward { - background-position: -384px -72px; -} -.icon-eject { - background-position: -408px -72px; -} -.icon-chevron-left { - background-position: -432px -72px; -} -.icon-chevron-right { - background-position: -456px -72px; -} -.icon-plus-sign { - background-position: 0 -96px; -} -.icon-minus-sign { - background-position: -24px -96px; -} -.icon-remove-sign { - background-position: -48px -96px; -} -.icon-ok-sign { - background-position: -72px -96px; -} -.icon-question-sign { - background-position: -96px -96px; -} -.icon-info-sign { - background-position: -120px -96px; -} -.icon-screenshot { - background-position: -144px -96px; -} -.icon-remove-circle { - background-position: -168px -96px; -} -.icon-ok-circle { - background-position: -192px -96px; -} -.icon-ban-circle { - background-position: -216px -96px; -} -.icon-arrow-left { - background-position: -240px -96px; -} -.icon-arrow-right { - background-position: -264px -96px; -} -.icon-arrow-up { - background-position: -289px -96px; -} -.icon-arrow-down { - background-position: -312px -96px; -} -.icon-share-alt { - background-position: -336px -96px; -} -.icon-resize-full { - background-position: -360px -96px; -} -.icon-resize-small { - background-position: -384px -96px; -} -.icon-plus { - background-position: -408px -96px; -} -.icon-minus { - background-position: -433px -96px; -} -.icon-asterisk { - background-position: -456px -96px; -} -.icon-exclamation-sign { - background-position: 0 -120px; -} -.icon-gift { - background-position: -24px -120px; -} -.icon-leaf { - background-position: -48px -120px; -} -.icon-fire { - background-position: -72px -120px; -} -.icon-eye-open { - background-position: -96px -120px; -} -.icon-eye-close { - background-position: -120px -120px; -} -.icon-warning-sign { - background-position: -144px -120px; -} -.icon-plane { - background-position: -168px -120px; -} -.icon-calendar { - background-position: -192px -120px; -} -.icon-random { - background-position: -216px -120px; -} -.icon-comment { - background-position: -240px -120px; -} -.icon-magnet { - background-position: -264px -120px; -} -.icon-chevron-up { - background-position: -288px -120px; -} -.icon-chevron-down { - background-position: -313px -119px; -} -.icon-retweet { - background-position: -336px -120px; -} -.icon-shopping-cart { - background-position: -360px -120px; -} -.icon-folder-close { - background-position: -384px -120px; -} -.icon-folder-open { - background-position: -408px -120px; -} -.icon-resize-vertical { - background-position: -432px -119px; -} -.icon-resize-horizontal { - background-position: -456px -118px; -} -.dropdown { - position: relative; -} -.dropdown-toggle { - *margin-bottom: -3px; -} -.dropdown-toggle:active, .open .dropdown-toggle { - outline: 0; -} -.caret { - display: inline-block; - width: 0; - height: 0; - text-indent: -99999px; - *text-indent: 0; - vertical-align: top; - border-left: 4px solid transparent; - border-right: 4px solid transparent; - border-top: 4px solid #000000; - opacity: 0.3; - filter: alpha(opacity=30); - content: "\2193"; -} -.dropdown .caret { - margin-top: 8px; - margin-left: 2px; -} -.dropdown:hover .caret, .open.dropdown .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.dropdown-menu { - position: absolute; - top: 100%; - left: 0; - z-index: 1000; - float: left; - display: none; - min-width: 160px; - max-width: 220px; - _width: 160px; - padding: 4px 0; - margin: 0; - list-style: none; - background-color: #ffffff; - border-color: #ccc; - border-color: rgba(0, 0, 0, 0.2); - border-style: solid; - border-width: 1px; - -webkit-border-radius: 0 0 5px 5px; - -moz-border-radius: 0 0 5px 5px; - border-radius: 0 0 5px 5px; - -webkit-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -moz-box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - box-shadow: 0 5px 10px rgba(0, 0, 0, 0.2); - -webkit-background-clip: padding-box; - -moz-background-clip: padding; - background-clip: padding-box; - *border-right-width: 2px; - *border-bottom-width: 2px; -} -.dropdown-menu.bottom-up { - top: auto; - bottom: 100%; - margin-bottom: 2px; -} -.dropdown-menu .divider { - height: 1px; - margin: 5px 1px; - overflow: hidden; - background-color: #e5e5e5; - border-bottom: 1px solid #ffffff; - *width: 100%; - *margin: -5px 0 5px; -} -.dropdown-menu a { - display: block; - padding: 3px 15px; - clear: both; - font-weight: normal; - line-height: 18px; - color: #555555; - white-space: nowrap; -} -.dropdown-menu li > a:hover, .dropdown-menu .active > a, .dropdown-menu .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #0088cc; -} -.dropdown.open { - *z-index: 1000; -} -.dropdown.open .dropdown-toggle { - color: #ffffff; - background: #ccc; - background: rgba(0, 0, 0, 0.3); -} -.dropdown.open .dropdown-menu { - display: block; -} -.typeahead { - margin-top: 2px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.well { - min-height: 20px; - padding: 19px; - margin-bottom: 20px; - background-color: #f5f5f5; - border: 1px solid #eee; - border: 1px solid rgba(0, 0, 0, 0.05); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 1px rgba(0, 0, 0, 0.05); -} -.well blockquote { - border-color: #ddd; - border-color: rgba(0, 0, 0, 0.15); -} -.fade { - -webkit-transition: opacity 0.15s linear; - -moz-transition: opacity 0.15s linear; - -ms-transition: opacity 0.15s linear; - -o-transition: opacity 0.15s linear; - transition: opacity 0.15s linear; - opacity: 0; -} -.fade.in { - opacity: 1; -} -.collapse { - -webkit-transition: height 0.35s ease; - -moz-transition: height 0.35s ease; - -ms-transition: height 0.35s ease; - -o-transition: height 0.35s ease; - transition: height 0.35s ease; - position: relative; - overflow: hidden; - height: 0; -} -.collapse.in { - height: auto; -} -.close { - float: right; - font-size: 20px; - font-weight: bold; - line-height: 18px; - color: #000000; - text-shadow: 0 1px 0 #ffffff; - opacity: 0.2; - filter: alpha(opacity=20); -} -.close:hover { - color: #000000; - text-decoration: none; - opacity: 0.4; - filter: alpha(opacity=40); - cursor: pointer; -} -.btn { - display: inline-block; - padding: 4px 10px 4px; - font-size: 13px; - line-height: 18px; - color: #333333; - text-align: center; - text-shadow: 0 1px 1px rgba(255, 255, 255, 0.75); - background-color: #fafafa; - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6)); - background-image: -webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6); - background-image: -ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: -o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-image: linear-gradient(#ffffff, #ffffff 25%, #e6e6e6); - background-repeat: no-repeat; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0); - border: 1px solid #ccc; - border-bottom-color: #bbb; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - cursor: pointer; - *margin-left: .3em; -} -.btn:first-child { - *margin-left: 0; -} -.btn:hover { - color: #333333; - text-decoration: none; - background-color: #e6e6e6; - background-position: 0 -15px; - -webkit-transition: background-position 0.1s linear; - -moz-transition: background-position 0.1s linear; - -ms-transition: background-position 0.1s linear; - -o-transition: background-position 0.1s linear; - transition: background-position 0.1s linear; -} -.btn:focus { - outline: thin dotted; - outline: 5px auto -webkit-focus-ring-color; - outline-offset: -2px; -} -.btn.active, .btn:active { - background-image: none; - -webkit-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 2px 4px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - background-color: #e6e6e6; - background-color: #d9d9d9 \9; - color: rgba(0, 0, 0, 0.5); - outline: 0; -} -.btn.disabled, .btn[disabled] { - cursor: default; - background-image: none; - background-color: #e6e6e6; - opacity: 0.65; - filter: alpha(opacity=65); - -webkit-box-shadow: none; - -moz-box-shadow: none; - box-shadow: none; -} -.btn-large { - padding: 9px 14px; - font-size: 15px; - line-height: normal; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-large .icon { - margin-top: 1px; -} -.btn-small { - padding: 5px 9px; - font-size: 11px; - line-height: 16px; -} -.btn-small .icon { - margin-top: -1px; -} -.btn-primary, -.btn-primary:hover, -.btn-warning, -.btn-warning:hover, -.btn-danger, -.btn-danger:hover, -.btn-success, -.btn-success:hover, -.btn-info, -.btn-info:hover { - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - color: #ffffff; -} -.btn-primary.active, -.btn-warning.active, -.btn-danger.active, -.btn-success.active, -.btn-info.active { - color: rgba(255, 255, 255, 0.75); -} -.btn-primary { - background-color: #006dcc; - background-image: -moz-linear-gradient(top, #0088cc, #0044cc); - background-image: -ms-linear-gradient(top, #0088cc, #0044cc); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc)); - background-image: -webkit-linear-gradient(top, #0088cc, #0044cc); - background-image: -o-linear-gradient(top, #0088cc, #0044cc); - background-image: linear-gradient(top, #0088cc, #0044cc); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0); - border-color: #0044cc #0044cc #002a80; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-primary:hover, -.btn-primary:active, -.btn-primary.active, -.btn-primary.disabled, -.btn-primary[disabled] { - background-color: #0044cc; -} -.btn-primary:active, .btn-primary.active { - background-color: #003399 \9; -} -.btn-warning { - background-color: #faa732; - background-image: -moz-linear-gradient(top, #fbb450, #f89406); - background-image: -ms-linear-gradient(top, #fbb450, #f89406); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406)); - background-image: -webkit-linear-gradient(top, #fbb450, #f89406); - background-image: -o-linear-gradient(top, #fbb450, #f89406); - background-image: linear-gradient(top, #fbb450, #f89406); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0); - border-color: #f89406 #f89406 #ad6704; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-warning:hover, -.btn-warning:active, -.btn-warning.active, -.btn-warning.disabled, -.btn-warning[disabled] { - background-color: #f89406; -} -.btn-warning:active, .btn-warning.active { - background-color: #c67605 \9; -} -.btn-danger { - background-color: #da4f49; - background-image: -moz-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -ms-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #bd362f); - background-image: -o-linear-gradient(top, #ee5f5b, #bd362f); - background-image: linear-gradient(top, #ee5f5b, #bd362f); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0); - border-color: #bd362f #bd362f #802420; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-danger:hover, -.btn-danger:active, -.btn-danger.active, -.btn-danger.disabled, -.btn-danger[disabled] { - background-color: #bd362f; -} -.btn-danger:active, .btn-danger.active { - background-color: #942a25 \9; -} -.btn-success { - background-color: #5bb75b; - background-image: -moz-linear-gradient(top, #62c462, #51a351); - background-image: -ms-linear-gradient(top, #62c462, #51a351); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351)); - background-image: -webkit-linear-gradient(top, #62c462, #51a351); - background-image: -o-linear-gradient(top, #62c462, #51a351); - background-image: linear-gradient(top, #62c462, #51a351); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0); - border-color: #51a351 #51a351 #387038; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-success:hover, -.btn-success:active, -.btn-success.active, -.btn-success.disabled, -.btn-success[disabled] { - background-color: #51a351; -} -.btn-success:active, .btn-success.active { - background-color: #408140 \9; -} -.btn-info { - background-color: #49afcd; - background-image: -moz-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -ms-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4)); - background-image: -webkit-linear-gradient(top, #5bc0de, #2f96b4); - background-image: -o-linear-gradient(top, #5bc0de, #2f96b4); - background-image: linear-gradient(top, #5bc0de, #2f96b4); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0); - border-color: #2f96b4 #2f96b4 #1f6377; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); -} -.btn-info:hover, -.btn-info:active, -.btn-info.active, -.btn-info.disabled, -.btn-info[disabled] { - background-color: #2f96b4; -} -.btn-info:active, .btn-info.active { - background-color: #24748c \9; -} -button.btn, input[type="submit"].btn { - *padding-top: 2px; - *padding-bottom: 2px; -} -button.btn::-moz-focus-inner, input[type="submit"].btn::-moz-focus-inner { - padding: 0; - border: 0; -} -button.btn.large, input[type="submit"].btn.large { - *padding-top: 7px; - *padding-bottom: 7px; -} -button.btn.small, input[type="submit"].btn.small { - *padding-top: 3px; - *padding-bottom: 3px; -} -.btn-group { - position: relative; - *zoom: 1; - *margin-left: .3em; -} -.btn-group:before, .btn-group:after { - display: table; - content: ""; -} -.btn-group:after { - clear: both; -} -.btn-group:first-child { - *margin-left: 0; -} -.btn-group + .btn-group { - margin-left: 5px; -} -.btn-toolbar { - margin-top: 9px; - margin-bottom: 9px; -} -.btn-toolbar .btn-group { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; -} -.btn-group .btn { - position: relative; - float: left; - margin-left: -1px; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.btn-group .btn:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 4px; - -moz-border-radius-topleft: 4px; - border-top-left-radius: 4px; - -webkit-border-bottom-left-radius: 4px; - -moz-border-radius-bottomleft: 4px; - border-bottom-left-radius: 4px; -} -.btn-group .btn:last-child, .btn-group .dropdown-toggle { - -webkit-border-top-right-radius: 4px; - -moz-border-radius-topright: 4px; - border-top-right-radius: 4px; - -webkit-border-bottom-right-radius: 4px; - -moz-border-radius-bottomright: 4px; - border-bottom-right-radius: 4px; -} -.btn-group .btn.large:first-child { - margin-left: 0; - -webkit-border-top-left-radius: 6px; - -moz-border-radius-topleft: 6px; - border-top-left-radius: 6px; - -webkit-border-bottom-left-radius: 6px; - -moz-border-radius-bottomleft: 6px; - border-bottom-left-radius: 6px; -} -.btn-group .btn.large:last-child, .btn-group .large.dropdown-toggle { - -webkit-border-top-right-radius: 6px; - -moz-border-radius-topright: 6px; - border-top-right-radius: 6px; - -webkit-border-bottom-right-radius: 6px; - -moz-border-radius-bottomright: 6px; - border-bottom-right-radius: 6px; -} -.btn-group .btn:hover, -.btn-group .btn:focus, -.btn-group .btn:active, -.btn-group .btn.active { - z-index: 2; -} -.btn-group .dropdown-toggle:active, .btn-group.open .dropdown-toggle { - outline: 0; -} -.btn-group .dropdown-toggle { - padding-left: 8px; - padding-right: 8px; - -webkit-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 1px 0 0 rgba(255, 255, 255, 0.125), inset 0 1px 0 rgba(255, 255, 255, 0.2), 0 1px 2px rgba(0, 0, 0, 0.05); - *padding-top: 5px; - *padding-bottom: 5px; -} -.btn-group.open { - *z-index: 1000; -} -.btn-group.open .dropdown-menu { - display: block; - margin-top: 1px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.btn-group.open .dropdown-toggle { - background-image: none; - -webkit-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: inset 0 1px 6px rgba(0, 0, 0, 0.15), 0 1px 2px rgba(0, 0, 0, 0.05); -} -.btn .caret { - margin-top: 7px; - margin-left: 0; -} -.btn:hover .caret, .open.btn-group .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.btn-primary .caret, -.btn-danger .caret, -.btn-info .caret, -.btn-success .caret { - border-top-color: #ffffff; - opacity: 0.75; - filter: alpha(opacity=75); -} -.btn-small .caret { - margin-top: 4px; -} -.alert { - padding: 8px 35px 8px 14px; - margin-bottom: 18px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); - background-color: #fcf8e3; - border: 1px solid #fbeed5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.alert, .alert-heading { - color: #c09853; -} -.alert .close { - position: relative; - top: -2px; - right: -21px; - line-height: 18px; -} -.alert-success { - background-color: #dff0d8; - border-color: #d6e9c6; -} -.alert-success, .alert-success .alert-heading { - color: #468847; -} -.alert-danger, .alert-error { - background-color: #f2dede; - border-color: #eed3d7; -} -.alert-danger, -.alert-error, -.alert-danger .alert-heading, -.alert-error .alert-heading { - color: #b94a48; -} -.alert-info { - background-color: #d9edf7; - border-color: #bce8f1; -} -.alert-info, .alert-info .alert-heading { - color: #3a87ad; -} -.alert-block { - padding-top: 14px; - padding-bottom: 14px; -} -.alert-block > p, .alert-block > ul { - margin-bottom: 0; -} -.alert-block p + p { - margin-top: 5px; -} -.nav { - margin-left: 0; - margin-bottom: 18px; - list-style: none; -} -.nav > li > a { - display: block; -} -.nav > li > a:hover { - text-decoration: none; - background-color: #eeeeee; -} -.nav-list { - padding-left: 14px; - padding-right: 14px; - margin-bottom: 0; -} -.nav-list > li > a, .nav-list .nav-header { - display: block; - padding: 3px 15px; - margin-left: -15px; - margin-right: -15px; - text-shadow: 0 1px 0 rgba(255, 255, 255, 0.5); -} -.nav-list .nav-header { - font-size: 11px; - font-weight: bold; - line-height: 18px; - color: #999999; - text-transform: uppercase; -} - -.nav-list .nav-header * { - text-transform:none; -} - -.nav-list > li + .nav-header { - margin-top: 9px; -} -.nav-list .active > a, .nav-list .active > a:hover { - color: #ffffff; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.2); - background-color: #0088cc; -} -.nav-list [class^="icon-"] { - margin-right: 2px; -} -.nav-tabs, .nav-pills { - *zoom: 1; -} -.nav-tabs:before, -.nav-pills:before, -.nav-tabs:after, -.nav-pills:after { - display: table; - content: ""; -} -.nav-tabs:after, .nav-pills:after { - clear: both; -} -.nav-tabs > li, .nav-pills > li { - float: left; -} -.nav-tabs > li > a, .nav-pills > li > a { - padding-right: 12px; - padding-left: 12px; - margin-right: 2px; - line-height: 14px; -} -.nav-tabs { - border-bottom: 1px solid #ddd; -} -.nav-tabs > li { - margin-bottom: -1px; -} -.nav-tabs > li > a { - padding-top: 9px; - padding-bottom: 9px; - border: 1px solid transparent; - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #dddddd; -} -.nav-tabs > .active > a, .nav-tabs > .active > a:hover { - color: #555555; - background-color: #ffffff; - border: 1px solid #ddd; - border-bottom-color: transparent; - cursor: default; -} -.nav-pills > li > a { - padding-top: 8px; - padding-bottom: 8px; - margin-top: 2px; - margin-bottom: 2px; - -webkit-border-radius: 5px; - -moz-border-radius: 5px; - border-radius: 5px; -} -.nav-pills .active > a, .nav-pills .active > a:hover { - color: #ffffff; - background-color: #0088cc; -} -.nav-stacked > li { - float: none; -} -.nav-stacked > li > a { - margin-right: 0; -} -.nav-tabs.nav-stacked { - border-bottom: 0; -} -.nav-tabs.nav-stacked > li > a { - border: 1px solid #ddd; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.nav-tabs.nav-stacked > li:first-child > a { - -webkit-border-radius: 4px 4px 0 0; - -moz-border-radius: 4px 4px 0 0; - border-radius: 4px 4px 0 0; -} -.nav-tabs.nav-stacked > li:last-child > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.nav-tabs.nav-stacked > li > a:hover { - border-color: #ddd; - z-index: 2; -} -.nav-pills.nav-stacked > li > a { - margin-bottom: 3px; -} -.nav-pills.nav-stacked > li:last-child > a { - margin-bottom: 1px; -} -.nav-tabs .dropdown-menu, .nav-pills .dropdown-menu { - margin-top: 1px; - border-width: 1px; -} -.nav-pills .dropdown-menu { - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.nav-tabs .dropdown-toggle .caret, .nav-pills .dropdown-toggle .caret { - border-top-color: #0088cc; - margin-top: 6px; -} -.nav-tabs .dropdown-toggle:hover .caret, .nav-pills .dropdown-toggle:hover .caret { - border-top-color: #005580; -} -.nav-tabs .active .dropdown-toggle .caret, .nav-pills .active .dropdown-toggle .caret { - border-top-color: #333333; -} -.nav > .dropdown.active > a:hover { - color: #000000; - cursor: pointer; -} -.nav-tabs .open .dropdown-toggle, .nav-pills .open .dropdown-toggle, .nav > .open.active > a:hover { - color: #ffffff; - background-color: #999999; - border-color: #999999; -} -.nav .open .caret, .nav .open.active .caret, .nav .open a:hover .caret { - border-top-color: #ffffff; - opacity: 1; - filter: alpha(opacity=100); -} -.tabs-stacked .open > a:hover { - border-color: #999999; -} -.tabbable { - *zoom: 1; -} -.tabbable:before, .tabbable:after { - display: table; - content: ""; -} -.tabbable:after { - clear: both; -} -.tabs-below .nav-tabs, .tabs-right .nav-tabs, .tabs-left .nav-tabs { - border-bottom: 0; -} -.tab-content > .tab-pane, .pill-content > .pill-pane { - display: none; -} -.tab-content > .active, .pill-content > .active { - display: block; -} -.tabs-below .nav-tabs { - border-top: 1px solid #ddd; -} -.tabs-below .nav-tabs > li { - margin-top: -1px; - margin-bottom: 0; -} -.tabs-below .nav-tabs > li > a { - -webkit-border-radius: 0 0 4px 4px; - -moz-border-radius: 0 0 4px 4px; - border-radius: 0 0 4px 4px; -} -.tabs-below .nav-tabs > li > a:hover { - border-bottom-color: transparent; - border-top-color: #ddd; -} -.tabs-below .nav-tabs .active > a, .tabs-below .nav-tabs .active > a:hover { - border-color: transparent #ddd #ddd #ddd; -} -.tabs-left .nav-tabs > li, .tabs-right .nav-tabs > li { - float: none; -} -.tabs-left .nav-tabs > li > a, .tabs-right .nav-tabs > li > a { - min-width: 74px; - margin-right: 0; - margin-bottom: 3px; -} -.tabs-left .nav-tabs { - float: left; - margin-right: 19px; - border-right: 1px solid #ddd; -} -.tabs-left .nav-tabs > li > a { - margin-right: -1px; - -webkit-border-radius: 4px 0 0 4px; - -moz-border-radius: 4px 0 0 4px; - border-radius: 4px 0 0 4px; -} -.tabs-left .nav-tabs > li > a:hover { - border-color: #eeeeee #dddddd #eeeeee #eeeeee; -} -.tabs-left .nav-tabs .active > a, .tabs-left .nav-tabs .active > a:hover { - border-color: #ddd transparent #ddd #ddd; - *border-right-color: #ffffff; -} -.tabs-right .nav-tabs { - float: right; - margin-left: 19px; - border-left: 1px solid #ddd; -} -.tabs-right .nav-tabs > li > a { - margin-left: -1px; - -webkit-border-radius: 0 4px 4px 0; - -moz-border-radius: 0 4px 4px 0; - border-radius: 0 4px 4px 0; -} -.tabs-right .nav-tabs > li > a:hover { - border-color: #eeeeee #eeeeee #eeeeee #dddddd; -} -.tabs-right .nav-tabs .active > a, .tabs-right .nav-tabs .active > a:hover { - border-color: #ddd #ddd #ddd transparent; - *border-left-color: #ffffff; -} -.navbar { - overflow: visible; - margin-bottom: 18px; -} -.navbar-inner { - padding-left: 20px; - padding-right: 20px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - -moz-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); - box-shadow: 0 1px 3px rgba(0, 0, 0, 0.25), inset 0 -1px 0 rgba(0, 0, 0, 0.1); -} -.btn-navbar { - display: none; - float: right; - padding: 7px 10px; - margin-left: 5px; - margin-right: 5px; - background-color: #2c2c2c; - background-image: -moz-linear-gradient(top, #333333, #222222); - background-image: -ms-linear-gradient(top, #333333, #222222); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222)); - background-image: -webkit-linear-gradient(top, #333333, #222222); - background-image: -o-linear-gradient(top, #333333, #222222); - background-image: linear-gradient(top, #333333, #222222); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0); - border-color: #222222 #222222 #000000; - border-color: rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25); - filter: progid:DXImageTransform.Microsoft.gradient(enabled = false); - -webkit-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - -moz-box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); - box-shadow: inset 0 1px 0 rgba(255, 255, 255, 0.1), 0 1px 0 rgba(255, 255, 255, 0.075); -} -.btn-navbar:hover, -.btn-navbar:active, -.btn-navbar.active, -.btn-navbar.disabled, -.btn-navbar[disabled] { - background-color: #222222; -} -.btn-navbar:active, .btn-navbar.active { - background-color: #080808 \9; -} -.btn-navbar .icon-bar { - display: block; - width: 18px; - height: 2px; - background-color: #f5f5f5; - -webkit-border-radius: 1px; - -moz-border-radius: 1px; - border-radius: 1px; - -webkit-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - -moz-box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); - box-shadow: 0 1px 0 rgba(0, 0, 0, 0.25); -} -.btn-navbar .icon-bar + .icon-bar { - margin-top: 3px; -} -.nav-collapse.collapse { - height: auto; -} -.navbar .brand:hover { - text-decoration: none; -} -.navbar .brand { - float: left; - display: block; - padding: 8px 20px 12px; - margin-left: -20px; - font-size: 20px; - font-weight: 200; - line-height: 1; - color: #ffffff; -} -.navbar .navbar-text { - margin-bottom: 0; - line-height: 40px; - color: #999999; -} -.navbar .navbar-text a:hover { - color: #ffffff; - background-color: transparent; -} -.navbar .btn, .navbar .btn-group { - margin-top: 5px; -} -.navbar .btn-group .btn { - margin-top: 0; -} -.navbar-form { - margin-bottom: 0; - *zoom: 1; -} -.navbar-form:before, .navbar-form:after { - display: table; - content: ""; -} -.navbar-form:after { - clear: both; -} -.navbar-form input, .navbar-form select { - display: inline-block; - margin-top: 5px; - margin-bottom: 0; -} -.navbar-form .radio, .navbar-form .checkbox { - margin-top: 5px; -} -.navbar-form input[type="image"], .navbar-form input[type="checkbox"], .navbar-form input[type="radio"] { - margin-top: 3px; -} -.navbar-search { - position: relative; - float: left; - margin-top: 6px; - margin-bottom: 0; -} -.navbar-search .search-query { - padding: 4px 9px; - font-family: "Helvetica Neue", Helvetica, Arial, sans-serif; - font-size: 13px; - font-weight: normal; - line-height: 1; - color: #ffffff; - color: rgba(255, 255, 255, 0.75); - background: #666; - background: rgba(255, 255, 255, 0.3); - border: 1px solid #111; - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1), 0 1px 0px rgba(255, 255, 255, 0.15); - -webkit-transition: none; - -moz-transition: none; - -ms-transition: none; - -o-transition: none; - transition: none; -} -.navbar-search .search-query :-moz-placeholder { - color: #eeeeee; -} -.navbar-search .search-query::-webkit-input-placeholder { - color: #eeeeee; -} -.navbar-search .search-query:hover { - color: #ffffff; - background-color: #999999; - background-color: rgba(255, 255, 255, 0.5); -} -.navbar-search .search-query:focus, .navbar-search .search-query.focused { - padding: 5px 10px; - color: #333333; - text-shadow: 0 1px 0 #ffffff; - background-color: #ffffff; - border: 0; - -webkit-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - -moz-box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - box-shadow: 0 0 3px rgba(0, 0, 0, 0.15); - outline: 0; -} -.navbar-fixed-top { - position: fixed; - top: 0; - right: 0; - left: 0; - z-index: 1030; -} -.navbar-fixed-top .navbar-inner { - padding-left: 0; - padding-right: 0; - -webkit-border-radius: 0; - -moz-border-radius: 0; - border-radius: 0; -} -.navbar .nav { - position: relative; - left: 0; - display: block; - float: left; - margin: 0 10px 0 0; -} -.navbar .nav.pull-right { - float: right; -} -.navbar .nav > li { - display: block; - float: left; -} -.navbar .nav > li > a { - float: none; - padding: 10px 10px 11px; - line-height: 19px; - color: #999999; - text-decoration: none; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); -} -.navbar .nav > li > a:hover { - background-color: transparent; - color: #ffffff; - text-decoration: none; -} -.navbar .nav .active > a, .navbar .nav .active > a:hover { - color: #ffffff; - text-decoration: none; - background-color: #222222; - background-color: rgba(0, 0, 0, 0.5); -} -.navbar .divider-vertical { - height: 40px; - width: 1px; - margin: 0 9px; - overflow: hidden; - background-color: #222222; - border-right: 1px solid #333333; -} -.navbar .nav.pull-right { - margin-left: 10px; - margin-right: 0; -} -.navbar .dropdown-menu { - margin-top: 1px; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.navbar .dropdown-menu:before { - content: ''; - display: inline-block; - border-left: 7px solid transparent; - border-right: 7px solid transparent; - border-bottom: 7px solid #ccc; - border-bottom-color: rgba(0, 0, 0, 0.2); - position: absolute; - top: -7px; - left: 9px; -} -.navbar .dropdown-menu:after { - content: ''; - display: inline-block; - border-left: 6px solid transparent; - border-right: 6px solid transparent; - border-bottom: 6px solid #ffffff; - position: absolute; - top: -6px; - left: 10px; -} -.navbar .nav .dropdown-toggle .caret, .navbar .nav .open.dropdown .caret { - border-top-color: #ffffff; -} -.navbar .nav .active .caret { - opacity: 1; - filter: alpha(opacity=100); -} -.navbar .nav .open > .dropdown-toggle, .navbar .nav .active > .dropdown-toggle, .navbar .nav .open.active > .dropdown-toggle { - background-color: transparent; -} -.navbar .nav .active > .dropdown-toggle:hover { - color: #ffffff; -} -.navbar .nav.pull-right .dropdown-menu { - left: auto; - right: 0; -} -.navbar .nav.pull-right .dropdown-menu:before { - left: auto; - right: 12px; -} -.navbar .nav.pull-right .dropdown-menu:after { - left: auto; - right: 13px; -} -.breadcrumb { - padding: 7px 14px; - margin: 0 0 18px; - background-color: #fbfbfb; - background-image: -moz-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -ms-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5)); - background-image: -webkit-linear-gradient(top, #ffffff, #f5f5f5); - background-image: -o-linear-gradient(top, #ffffff, #f5f5f5); - background-image: linear-gradient(top, #ffffff, #f5f5f5); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0); - border: 1px solid #ddd; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; -} -.breadcrumb li { - display: inline; - text-shadow: 0 1px 0 #ffffff; -} -.breadcrumb .divider { - padding: 0 5px; - color: #999999; -} -.breadcrumb .active a { - color: #333333; -} -.pagination { - height: 36px; - margin: 18px 0; -} -.pagination ul { - display: inline-block; - *display: inline; - /* IE7 inline-block hack */ - - *zoom: 1; - margin-left: 0; - margin-bottom: 0; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; - -webkit-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - -moz-box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); - box-shadow: 0 1px 2px rgba(0, 0, 0, 0.05); -} -.pagination li { - display: inline; -} -.pagination a { - float: left; - padding: 0 14px; - line-height: 34px; - text-decoration: none; - border: 1px solid #ddd; - border-left-width: 0; -} -.pagination a:hover, .pagination .active a { - background-color: #f5f5f5; -} -.pagination .active a { - color: #999999; - cursor: default; -} -.pagination .disabled a, .pagination .disabled a:hover { - color: #999999; - background-color: transparent; - cursor: default; -} -.pagination li:first-child a { - border-left-width: 1px; - -webkit-border-radius: 3px 0 0 3px; - -moz-border-radius: 3px 0 0 3px; - border-radius: 3px 0 0 3px; -} -.pagination li:last-child a { - -webkit-border-radius: 0 3px 3px 0; - -moz-border-radius: 0 3px 3px 0; - border-radius: 0 3px 3px 0; -} -.pagination-centered { - text-align: center; -} -.pagination-right { - text-align: right; -} -.pager { - margin-left: 0; - margin-bottom: 18px; - list-style: none; - text-align: center; - *zoom: 1; -} -.pager:before, .pager:after { - display: table; - content: ""; -} -.pager:after { - clear: both; -} -.pager li { - display: inline; -} -.pager a { - display: inline-block; - padding: 5px 14px; - background-color: #fff; - border: 1px solid #ddd; - -webkit-border-radius: 15px; - -moz-border-radius: 15px; - border-radius: 15px; -} -.pager a:hover { - text-decoration: none; - background-color: #f5f5f5; -} -.pager .next a { - float: right; -} -.pager .previous a { - float: left; -} -.modal-open .dropdown-menu { - z-index: 2050; -} -.modal-open .dropdown.open { - *z-index: 2050; -} -.modal-open .popover { - z-index: 2060; -} -.modal-open .tooltip { - z-index: 2070; -} -.modal-backdrop { - position: fixed; - top: 0; - right: 0; - bottom: 0; - left: 0; - z-index: 1040; - background-color: #000000; -} -.modal-backdrop.fade { - opacity: 0; -} -.modal-backdrop, .modal-backdrop.fade.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.modal { - position: fixed; - top: 50%; - left: 50%; - z-index: 1050; - max-height: 500px; - overflow: auto; - width: 560px; - margin: -250px 0 0 -280px; - background-color: #ffffff; - border: 1px solid #999; - border: 1px solid rgba(0, 0, 0, 0.3); - *border: 1px solid #999; - /* IE6-7 */ - - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.modal.fade { - -webkit-transition: opacity .3s linear, top .3s ease-out; - -moz-transition: opacity .3s linear, top .3s ease-out; - -ms-transition: opacity .3s linear, top .3s ease-out; - -o-transition: opacity .3s linear, top .3s ease-out; - transition: opacity .3s linear, top .3s ease-out; - top: -25%; -} -.modal.fade.in { - top: 50%; -} -.modal-header { - padding: 9px 15px; - border-bottom: 1px solid #eee; -} -.modal-header .close { - margin-top: 2px; -} -.modal-body { - padding: 15px; -} -.modal-footer { - padding: 14px 15px 15px; - margin-bottom: 0; - background-color: #f5f5f5; - border-top: 1px solid #ddd; - -webkit-border-radius: 0 0 6px 6px; - -moz-border-radius: 0 0 6px 6px; - border-radius: 0 0 6px 6px; - -webkit-box-shadow: inset 0 1px 0 #ffffff; - -moz-box-shadow: inset 0 1px 0 #ffffff; - box-shadow: inset 0 1px 0 #ffffff; - *zoom: 1; -} -.modal-footer:before, .modal-footer:after { - display: table; - content: ""; -} -.modal-footer:after { - clear: both; -} -.modal-footer .btn { - float: right; - margin-left: 5px; - margin-bottom: 0; -} -.tooltip { - position: absolute; - z-index: 1020; - display: block; - visibility: visible; - padding: 5px; - font-size: 11px; - opacity: 0; - filter: alpha(opacity=0); -} -.tooltip.in { - opacity: 0.8; - filter: alpha(opacity=80); -} -.tooltip.top { - margin-top: -2px; -} -.tooltip.right { - margin-left: 2px; -} -.tooltip.bottom { - margin-top: 2px; -} -.tooltip.left { - margin-left: -2px; -} -.tooltip.top .tooltip-arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.tooltip.left .tooltip-arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.tooltip.bottom .tooltip-arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.tooltip.right .tooltip-arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.tooltip-inner { - max-width: 200px; - padding: 3px 8px; - color: #ffffff; - text-align: center; - text-decoration: none; - background-color: #000000; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.tooltip-arrow { - position: absolute; - width: 0; - height: 0; -} -.popover { - position: absolute; - top: 0; - left: 0; - z-index: 1010; - display: none; - padding: 5px; -} -.popover.top { - margin-top: -5px; -} -.popover.right { - margin-left: 5px; -} -.popover.bottom { - margin-top: 5px; -} -.popover.left { - margin-left: -5px; -} -.popover.top .arrow { - bottom: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-top: 5px solid #000000; -} -.popover.right .arrow { - top: 50%; - left: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-right: 5px solid #000000; -} -.popover.bottom .arrow { - top: 0; - left: 50%; - margin-left: -5px; - border-left: 5px solid transparent; - border-right: 5px solid transparent; - border-bottom: 5px solid #000000; -} -.popover.left .arrow { - top: 50%; - right: 0; - margin-top: -5px; - border-top: 5px solid transparent; - border-bottom: 5px solid transparent; - border-left: 5px solid #000000; -} -.popover .arrow { - position: absolute; - width: 0; - height: 0; -} -.popover-inner { - padding: 3px; - width: 280px; - overflow: hidden; - background: #000000; - background: rgba(0, 0, 0, 0.8); - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; - -webkit-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - -moz-box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); - box-shadow: 0 3px 7px rgba(0, 0, 0, 0.3); -} -.popover-title { - padding: 9px 15px; - line-height: 1; - background-color: #f5f5f5; - border-bottom: 1px solid #eee; - -webkit-border-radius: 3px 3px 0 0; - -moz-border-radius: 3px 3px 0 0; - border-radius: 3px 3px 0 0; -} -.popover-content { - padding: 14px; - background-color: #ffffff; - -webkit-border-radius: 0 0 3px 3px; - -moz-border-radius: 0 0 3px 3px; - border-radius: 0 0 3px 3px; - -webkit-background-clip: padding-box; - -moz-background-clip: padding-box; - background-clip: padding-box; -} -.popover-content p, .popover-content ul, .popover-content ol { - margin-bottom: 0; -} -.thumbnails { - margin-left: -20px; - list-style: none; - *zoom: 1; -} -.thumbnails:before, .thumbnails:after { - display: table; - content: ""; -} -.thumbnails:after { - clear: both; -} -.thumbnails > li { - float: left; - margin: 0 0 18px 20px; -} -.thumbnail { - display: block; - padding: 4px; - line-height: 1; - border: 1px solid #ddd; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; - -webkit-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - -moz-box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); - box-shadow: 0 1px 1px rgba(0, 0, 0, 0.075); -} -a.thumbnail:hover { - border-color: #0088cc; - -webkit-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - -moz-box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); - box-shadow: 0 1px 4px rgba(0, 105, 214, 0.25); -} -.thumbnail > img { - display: block; - max-width: 100%; - margin-left: auto; - margin-right: auto; -} -.thumbnail .caption { - padding: 9px; -} -.label { - padding: 1px 3px 2px; - font-size: 9.75px; - font-weight: bold; - color: #ffffff; - text-transform: uppercase; - background-color: #999999; - -webkit-border-radius: 3px; - -moz-border-radius: 3px; - border-radius: 3px; -} -.label-important { - background-color: #b94a48; -} -.label-warning { - background-color: #f89406; -} -.label-success { - background-color: #468847; -} -.label-info { - background-color: #3a87ad; -} -@-webkit-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@-moz-keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -@keyframes progress-bar-stripes { - from { - background-position: 0 0; - } - to { - background-position: 40px 0; - } -} -.progress { - overflow: hidden; - height: 18px; - margin-bottom: 18px; - background-color: #f7f7f7; - background-image: -moz-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -ms-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9)); - background-image: -webkit-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: -o-linear-gradient(top, #f5f5f5, #f9f9f9); - background-image: linear-gradient(top, #f5f5f5, #f9f9f9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0); - -webkit-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -moz-box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - box-shadow: inset 0 1px 2px rgba(0, 0, 0, 0.1); - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.progress .bar { - width: 0%; - height: 18px; - color: #ffffff; - font-size: 12px; - text-align: center; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - background-color: #0e90d2; - background-image: -moz-linear-gradient(top, #149bdf, #0480be); - background-image: -ms-linear-gradient(top, #149bdf, #0480be); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be)); - background-image: -webkit-linear-gradient(top, #149bdf, #0480be); - background-image: -o-linear-gradient(top, #149bdf, #0480be); - background-image: linear-gradient(top, #149bdf, #0480be); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0); - -webkit-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -moz-box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - box-shadow: inset 0 -1px 0 rgba(0, 0, 0, 0.15); - -webkit-box-sizing: border-box; - -moz-box-sizing: border-box; - box-sizing: border-box; - -webkit-transition: width 0.6s ease; - -moz-transition: width 0.6s ease; - -ms-transition: width 0.6s ease; - -o-transition: width 0.6s ease; - transition: width 0.6s ease; -} -.progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - -webkit-background-size: 40px 40px; - -moz-background-size: 40px 40px; - -o-background-size: 40px 40px; - background-size: 40px 40px; -} -.progress.active .bar { - -webkit-animation: progress-bar-stripes 2s linear infinite; - -moz-animation: progress-bar-stripes 2s linear infinite; - animation: progress-bar-stripes 2s linear infinite; -} -.progress-danger .bar { - background-color: #dd514c; - background-image: -moz-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -ms-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35)); - background-image: -webkit-linear-gradient(top, #ee5f5b, #c43c35); - background-image: -o-linear-gradient(top, #ee5f5b, #c43c35); - background-image: linear-gradient(top, #ee5f5b, #c43c35); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0); -} -.progress-danger.progress-striped .bar { - background-color: #ee5f5b; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-success .bar { - background-color: #5eb95e; - background-image: -moz-linear-gradient(top, #62c462, #57a957); - background-image: -ms-linear-gradient(top, #62c462, #57a957); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957)); - background-image: -webkit-linear-gradient(top, #62c462, #57a957); - background-image: -o-linear-gradient(top, #62c462, #57a957); - background-image: linear-gradient(top, #62c462, #57a957); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0); -} -.progress-success.progress-striped .bar { - background-color: #62c462; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.progress-info .bar { - background-color: #4bb1cf; - background-image: -moz-linear-gradient(top, #5bc0de, #339bb9); - background-image: -ms-linear-gradient(top, #5bc0de, #339bb9); - background-image: -webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9)); - background-image: -webkit-linear-gradient(top, #5bc0de, #339bb9); - background-image: -o-linear-gradient(top, #5bc0de, #339bb9); - background-image: linear-gradient(top, #5bc0de, #339bb9); - background-repeat: repeat-x; - filter: progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0); -} -.progress-info.progress-striped .bar { - background-color: #5bc0de; - background-image: -webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent)); - background-image: -webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: -o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); - background-image: linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent); -} -.accordion { - margin-bottom: 18px; -} -.accordion-group { - margin-bottom: 2px; - border: 1px solid #e5e5e5; - -webkit-border-radius: 4px; - -moz-border-radius: 4px; - border-radius: 4px; -} -.accordion-heading { - border-bottom: 0; -} -.accordion-heading .accordion-toggle { - display: block; - padding: 8px 15px; -} -.accordion-inner { - padding: 9px 15px; - border-top: 1px solid #e5e5e5; -} -.carousel { - position: relative; - margin-bottom: 18px; - line-height: 1; -} -.carousel-inner { - overflow: hidden; - width: 100%; - position: relative; -} -.carousel .item { - display: none; - position: relative; - -webkit-transition: 0.6s ease-in-out left; - -moz-transition: 0.6s ease-in-out left; - -ms-transition: 0.6s ease-in-out left; - -o-transition: 0.6s ease-in-out left; - transition: 0.6s ease-in-out left; -} -.carousel .item > img { - display: block; - line-height: 1; -} -.carousel .active, .carousel .next, .carousel .prev { - display: block; -} -.carousel .active { - left: 0; -} -.carousel .next, .carousel .prev { - position: absolute; - top: 0; - width: 100%; -} -.carousel .next { - left: 100%; -} -.carousel .prev { - left: -100%; -} -.carousel .next.left, .carousel .prev.right { - left: 0; -} -.carousel .active.left { - left: -100%; -} -.carousel .active.right { - left: 100%; -} -.carousel-control { - position: absolute; - top: 40%; - left: 15px; - width: 40px; - height: 40px; - margin-top: -20px; - font-size: 60px; - font-weight: 100; - line-height: 30px; - color: #ffffff; - text-align: center; - background: #222222; - border: 3px solid #ffffff; - -webkit-border-radius: 23px; - -moz-border-radius: 23px; - border-radius: 23px; - opacity: 0.5; - filter: alpha(opacity=50); -} -.carousel-control.right { - left: auto; - right: 15px; -} -.carousel-control:hover { - color: #ffffff; - text-decoration: none; - opacity: 0.9; - filter: alpha(opacity=90); -} -.carousel-caption { - position: absolute; - left: 0; - right: 0; - bottom: 0; - padding: 10px 15px 5px; - background: #333333; - background: rgba(0, 0, 0, 0.75); -} -.carousel-caption h4, .carousel-caption p { - color: #ffffff; -} -.hero-unit { - padding: 60px; - margin-bottom: 30px; - background-color: #f5f5f5; - -webkit-border-radius: 6px; - -moz-border-radius: 6px; - border-radius: 6px; -} -.hero-unit h1 { - margin-bottom: 0; - font-size: 60px; - line-height: 1; - letter-spacing: -1px; -} -.hero-unit p { - font-size: 18px; - font-weight: 200; - line-height: 27px; -} -.pull-right { - float: right; -} -.pull-left { - float: left; -} -.hide { - display: none; -} -.show { - display: block; -} -.invisible { - visibility: hidden; -} diff --git a/docs/api/phpdoc/css/bootstrap.min.css b/docs/api/phpdoc/css/bootstrap.min.css deleted file mode 100644 index d522124..0000000 --- a/docs/api/phpdoc/css/bootstrap.min.css +++ /dev/null @@ -1,611 +0,0 @@ -article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block;} -audio,canvas,video{display:inline-block;*display:inline;*zoom:1;} -audio:not([controls]){display:none;} -html{font-size:100%;-webkit-text-size-adjust:100%;-ms-text-size-adjust:100%;} -a:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -a:hover,a:active{outline:0;} -sub,sup{position:relative;font-size:75%;line-height:0;vertical-align:baseline;} -sup{top:-0.5em;} -sub{bottom:-0.25em;} -img{max-width:100%;height:auto;border:0;-ms-interpolation-mode:bicubic;} -button,input,select,textarea{margin:0;font-size:100%;vertical-align:middle;} -button,input{*overflow:visible;line-height:normal;} -button::-moz-focus-inner,input::-moz-focus-inner{padding:0;border:0;} -button,input[type="button"],input[type="reset"],input[type="submit"]{cursor:pointer;-webkit-appearance:button;} -input[type="search"]{-webkit-appearance:textfield;-webkit-box-sizing:content-box;-moz-box-sizing:content-box;box-sizing:content-box;} -input[type="search"]::-webkit-search-decoration,input[type="search"]::-webkit-search-cancel-button{-webkit-appearance:none;} -textarea{overflow:auto;vertical-align:top;} -body{margin:0;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;color:#333333;background-color:#ffffff;} -a{color:#0088cc;text-decoration:none;} -a:hover{color:#005580;text-decoration:underline;} -.row{margin-left:-20px;*zoom:1;}.row:before,.row:after{display:table;content:"";} -.row:after{clear:both;} -[class*="span"]{float:left;margin-left:20px;} -.span1{width:60px;} -.span2{width:140px;} -.span3{width:220px;} -.span4{width:300px;} -.span5{width:380px;} -.span6{width:460px;} -.span7{width:540px;} -.span8{width:620px;} -.span9{width:700px;} -.span10{width:780px;} -.span11{width:860px;} -.span12,.container{width:940px;} -.offset1{margin-left:100px;} -.offset2{margin-left:180px;} -.offset3{margin-left:260px;} -.offset4{margin-left:340px;} -.offset5{margin-left:420px;} -.offset6{margin-left:500px;} -.offset7{margin-left:580px;} -.offset8{margin-left:660px;} -.offset9{margin-left:740px;} -.offset10{margin-left:820px;} -.offset11{margin-left:900px;} -.row-fluid{width:100%;*zoom:1;}.row-fluid:before,.row-fluid:after{display:table;content:"";} -.row-fluid:after{clear:both;} -.row-fluid>[class*="span"]{float:left;margin-left:2.127659574%;} -.row-fluid>[class*="span"]:first-child{margin-left:0;} -.row-fluid .span1{width:6.382978723%;} -.row-fluid .span2{width:14.89361702%;} -.row-fluid .span3{width:23.404255317%;} -.row-fluid .span4{width:31.914893614%;} -.row-fluid .span5{width:40.425531911%;} -.row-fluid .span6{width:48.93617020799999%;} -.row-fluid .span7{width:57.446808505%;} -.row-fluid .span8{width:65.95744680199999%;} -.row-fluid .span9{width:74.468085099%;} -.row-fluid .span10{width:82.97872339599999%;} -.row-fluid .span11{width:91.489361693%;} -.row-fluid .span12{width:99.99999998999999%;} -.container{width:940px;margin-left:auto;margin-right:auto;*zoom:1;}.container:before,.container:after{display:table;content:"";} -.container:after{clear:both;} -.container-fluid{padding-left:20px;padding-right:20px;*zoom:1;}.container-fluid:before,.container-fluid:after{display:table;content:"";} -.container-fluid:after{clear:both;} -p{margin:0 0 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;line-height:18px;}p small{font-size:11px;color:#999999;} -.lead{margin-bottom:18px;font-size:20px;font-weight:200;line-height:27px;} -h1,h2,h3,h4,h5,h6{margin:0;font-weight:bold;color:#333333;text-rendering:optimizelegibility;}h1 small,h2 small,h3 small,h4 small,h5 small,h6 small{font-weight:normal;color:#999999;} -h1{font-size:30px;line-height:36px;}h1 small{font-size:18px;} -h2{font-size:24px;line-height:36px;}h2 small{font-size:18px;} -h3{line-height:27px;font-size:18px;}h3 small{font-size:14px;} -h4,h5,h6{line-height:18px;} -h4{font-size:14px;}h4 small{font-size:12px;} -h5{font-size:12px;} -h6{font-size:11px;color:#999999;text-transform:uppercase;} -.page-header{padding-bottom:17px;margin:18px 0;border-bottom:1px solid #eeeeee;} -.page-header h1{line-height:1;} -ul,ol{padding:0;margin:0 0 9px 25px;} -ul ul,ul ol,ol ol,ol ul{margin-bottom:0;} -ul{list-style:disc;} -ol{list-style:decimal;} -li{line-height:18px;} -ul.unstyled{margin-left:0;list-style:none;} -dl{margin-bottom:18px;} -dt,dd{line-height:18px;} -dt{font-weight:bold;} -dd{margin-left:9px;} -hr{margin:18px 0;border:0;border-top:1px solid #e5e5e5;border-bottom:1px solid #ffffff;} -strong{font-weight:bold;} -em{font-style:italic;} -.muted{color:#999999;} -abbr{font-size:90%;text-transform:uppercase;border-bottom:1px dotted #ddd;cursor:help;} -blockquote{padding:0 0 0 15px;margin:0 0 18px;border-left:5px solid #eeeeee;}blockquote p{margin-bottom:0;font-size:16px;font-weight:300;line-height:22.5px;} -blockquote small{display:block;line-height:18px;color:#999999;}blockquote small:before{content:'\2014 \00A0';} -blockquote.pull-right{float:right;padding-left:0;padding-right:15px;border-left:0;border-right:5px solid #eeeeee;}blockquote.pull-right p,blockquote.pull-right small{text-align:right;} -q:before,q:after,blockquote:before,blockquote:after{content:"";} -address{display:block;margin-bottom:18px;line-height:18px;font-style:normal;} -small{font-size:100%;} -cite{font-style:normal;} -code,pre{padding:0 3px 2px;font-family:Menlo,Monaco,"Courier New",monospace;font-size:12px;color:#333333;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -code{padding:3px 4px;color:#d14;background-color:#f7f7f9;border:1px solid #e1e1e8;} -pre{display:block;padding:8.5px;margin:0 0 9px;font-size:12px;line-height:18px;background-color:#f5f5f5;border:1px solid #ccc;border:1px solid rgba(0, 0, 0, 0.15);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;white-space:pre;white-space:pre-wrap;word-break:break-all;}pre.prettyprint{margin-bottom:18px;} -pre code{padding:0;background-color:transparent;} -form{margin:0 0 18px;} -fieldset{padding:0;margin:0;border:0;} -legend{display:block;width:100%;padding:0;margin-bottom:27px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #eee;} -label,input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:18px;} -label{display:block;margin-bottom:5px;color:#333333;} -input,textarea,select,.uneditable-input{display:inline-block;width:210px;height:18px;padding:4px;margin-bottom:9px;font-size:13px;line-height:18px;color:#555555;border:1px solid #ccc;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.uneditable-textarea{width:auto;height:auto;} -label input,label textarea,label select{display:block;} -input[type="image"],input[type="checkbox"],input[type="radio"]{width:auto;height:auto;padding:0;margin:3px 0;*margin-top:0;line-height:normal;border:0;cursor:pointer;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -input[type="file"]{padding:initial;line-height:initial;border:initial;background-color:#ffffff;background-color:initial;-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -input[type="button"],input[type="reset"],input[type="submit"]{width:auto;height:auto;} -select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;} -select{width:220px;background-color:#ffffff;} -select[multiple],select[size]{height:auto;} -input[type="image"]{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -textarea{height:auto;} -input[type="hidden"]{display:none;} -.radio,.checkbox{padding-left:18px;} -.radio input[type="radio"],.checkbox input[type="checkbox"]{float:left;margin-left:-18px;} -.controls>.radio:first-child,.controls>.checkbox:first-child{padding-top:5px;} -.radio.inline,.checkbox.inline{display:inline-block;margin-bottom:0;vertical-align:middle;} -.radio.inline+.radio.inline,.checkbox.inline+.checkbox.inline{margin-left:10px;} -.controls>.radio.inline:first-child,.controls>.checkbox.inline:first-child{padding-top:0;} -input,textarea{-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075);-webkit-transition:border linear 0.2s,box-shadow linear 0.2s;-moz-transition:border linear 0.2s,box-shadow linear 0.2s;-ms-transition:border linear 0.2s,box-shadow linear 0.2s;-o-transition:border linear 0.2s,box-shadow linear 0.2s;transition:border linear 0.2s,box-shadow linear 0.2s;} -input:focus,textarea:focus{border-color:rgba(82, 168, 236, 0.8);-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.075),0 0 8px rgba(82, 168, 236, 0.6);outline:0;outline:thin dotted \9;} -input[type="file"]:focus,input[type="checkbox"]:focus,select:focus{-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.input-mini{width:60px;} -.input-small{width:90px;} -.input-medium{width:150px;} -.input-large{width:210px;} -.input-xlarge{width:270px;} -.input-xxlarge{width:530px;} -input[class*="span"],select[class*="span"],textarea[class*="span"],.uneditable-input{float:none;margin-left:0;} -input.span1,textarea.span1,.uneditable-input.span1{width:50px;} -input.span2,textarea.span2,.uneditable-input.span2{width:130px;} -input.span3,textarea.span3,.uneditable-input.span3{width:210px;} -input.span4,textarea.span4,.uneditable-input.span4{width:290px;} -input.span5,textarea.span5,.uneditable-input.span5{width:370px;} -input.span6,textarea.span6,.uneditable-input.span6{width:450px;} -input.span7,textarea.span7,.uneditable-input.span7{width:530px;} -input.span8,textarea.span8,.uneditable-input.span8{width:610px;} -input.span9,textarea.span9,.uneditable-input.span9{width:690px;} -input.span10,textarea.span10,.uneditable-input.span10{width:770px;} -input.span11,textarea.span11,.uneditable-input.span11{width:850px;} -input.span12,textarea.span12,.uneditable-input.span12{width:930px;} -input[disabled],select[disabled],textarea[disabled],input[readonly],select[readonly],textarea[readonly]{background-color:#f5f5f5;border-color:#ddd;cursor:not-allowed;} -.control-group.warning>label,.control-group.warning .help-block,.control-group.warning .help-inline{color:#c09853;} -.control-group.warning input,.control-group.warning select,.control-group.warning textarea{color:#c09853;border-color:#c09853;}.control-group.warning input:focus,.control-group.warning select:focus,.control-group.warning textarea:focus{border-color:#a47e3c;-webkit-box-shadow:0 0 6px #dbc59e;-moz-box-shadow:0 0 6px #dbc59e;box-shadow:0 0 6px #dbc59e;} -.control-group.warning .input-prepend .add-on,.control-group.warning .input-append .add-on{color:#c09853;background-color:#fcf8e3;border-color:#c09853;} -.control-group.error>label,.control-group.error .help-block,.control-group.error .help-inline{color:#b94a48;} -.control-group.error input,.control-group.error select,.control-group.error textarea{color:#b94a48;border-color:#b94a48;}.control-group.error input:focus,.control-group.error select:focus,.control-group.error textarea:focus{border-color:#953b39;-webkit-box-shadow:0 0 6px #d59392;-moz-box-shadow:0 0 6px #d59392;box-shadow:0 0 6px #d59392;} -.control-group.error .input-prepend .add-on,.control-group.error .input-append .add-on{color:#b94a48;background-color:#f2dede;border-color:#b94a48;} -.control-group.success>label,.control-group.success .help-block,.control-group.success .help-inline{color:#468847;} -.control-group.success input,.control-group.success select,.control-group.success textarea{color:#468847;border-color:#468847;}.control-group.success input:focus,.control-group.success select:focus,.control-group.success textarea:focus{border-color:#356635;-webkit-box-shadow:0 0 6px #7aba7b;-moz-box-shadow:0 0 6px #7aba7b;box-shadow:0 0 6px #7aba7b;} -.control-group.success .input-prepend .add-on,.control-group.success .input-append .add-on{color:#468847;background-color:#dff0d8;border-color:#468847;} -input:focus:required:invalid,textarea:focus:required:invalid,select:focus:required:invalid{color:#b94a48;border-color:#ee5f5b;}input:focus:required:invalid:focus,textarea:focus:required:invalid:focus,select:focus:required:invalid:focus{border-color:#e9322d;-webkit-box-shadow:0 0 6px #f8b9b7;-moz-box-shadow:0 0 6px #f8b9b7;box-shadow:0 0 6px #f8b9b7;} -.form-actions{padding:17px 20px 18px;margin-top:18px;margin-bottom:18px;background-color:#f5f5f5;border-top:1px solid #ddd;} -.uneditable-input{display:block;background-color:#ffffff;border-color:#eee;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.025);cursor:not-allowed;} -:-moz-placeholder{color:#999999;} -::-webkit-input-placeholder{color:#999999;} -.help-block{margin-top:5px;margin-bottom:0;color:#999999;} -.help-inline{display:inline-block;*display:inline;*zoom:1;margin-bottom:9px;vertical-align:middle;padding-left:5px;} -.input-prepend,.input-append{margin-bottom:5px;*zoom:1;}.input-prepend:before,.input-append:before,.input-prepend:after,.input-append:after{display:table;content:"";} -.input-prepend:after,.input-append:after{clear:both;} -.input-prepend input,.input-append input,.input-prepend .uneditable-input,.input-append .uneditable-input{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;}.input-prepend input:focus,.input-append input:focus,.input-prepend .uneditable-input:focus,.input-append .uneditable-input:focus{position:relative;z-index:2;} -.input-prepend .uneditable-input,.input-append .uneditable-input{border-left-color:#ccc;} -.input-prepend .add-on,.input-append .add-on{float:left;display:block;width:auto;min-width:16px;height:18px;margin-right:-1px;padding:4px 5px;font-weight:normal;line-height:18px;color:#999999;text-align:center;text-shadow:0 1px 0 #ffffff;background-color:#f5f5f5;border:1px solid #ccc;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-prepend .active,.input-append .active{background-color:#a9dba9;border-color:#46a546;} -.input-prepend .add-on{*margin-top:1px;} -.input-append input,.input-append .uneditable-input{float:left;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.input-append .uneditable-input{border-right-color:#ccc;} -.input-append .add-on{margin-right:0;margin-left:-1px;-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.input-append input:first-child{*margin-left:-160px;}.input-append input:first-child+.add-on{*margin-left:-21px;} -.search-query{padding-left:14px;padding-right:14px;margin-bottom:0;-webkit-border-radius:14px;-moz-border-radius:14px;border-radius:14px;} -.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.form-horizontal .help-inline,.form-search .uneditable-input,.form-inline .uneditable-input,.form-horizontal .uneditable-input{display:inline-block;margin-bottom:0;} -.form-search label,.form-inline label,.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{display:inline-block;} -.form-search .input-append .add-on,.form-inline .input-prepend .add-on,.form-search .input-append .add-on,.form-inline .input-prepend .add-on{vertical-align:middle;} -.control-group{margin-bottom:9px;} -.form-horizontal legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;} -.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";} -.form-horizontal .control-group:after{clear:both;} -.form-horizontal .control-group>label{float:left;width:140px;padding-top:5px;text-align:right;} -.form-horizontal .controls{margin-left:160px;} -.form-horizontal .form-actions{padding-left:160px;} -table{max-width:100%;border-collapse:collapse;border-spacing:0;} -.table{width:100%;margin-bottom:18px;}.table th,.table td{padding:8px;line-height:18px;text-align:left;border-top:1px solid #ddd;} -.table th{font-weight:bold;vertical-align:bottom;} -.table td{vertical-align:top;} -.table thead:first-child tr th,.table thead:first-child tr td{border-top:0;} -.table tbody+tbody{border-top:2px solid #ddd;} -.table-condensed th,.table-condensed td{padding:4px 5px;} -.table-bordered{border:1px solid #ddd;border-collapse:separate;*border-collapse:collapsed;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.table-bordered th+th,.table-bordered td+td,.table-bordered th+td,.table-bordered td+th{border-left:1px solid #ddd;} -.table-bordered thead:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child th,.table-bordered tbody:first-child tr:first-child td{border-top:0;} -.table-bordered thead:first-child tr:first-child th:first-child,.table-bordered tbody:first-child tr:first-child td:first-child{-webkit-border-radius:4px 0 0 0;-moz-border-radius:4px 0 0 0;border-radius:4px 0 0 0;} -.table-bordered thead:first-child tr:first-child th:last-child,.table-bordered tbody:first-child tr:first-child td:last-child{-webkit-border-radius:0 4px 0 0;-moz-border-radius:0 4px 0 0;border-radius:0 4px 0 0;} -.table-bordered thead:last-child tr:last-child th:first-child,.table-bordered tbody:last-child tr:last-child td:first-child{-webkit-border-radius:0 0 0 4px;-moz-border-radius:0 0 0 4px;border-radius:0 0 0 4px;} -.table-bordered thead:last-child tr:last-child th:last-child,.table-bordered tbody:last-child tr:last-child td:last-child{-webkit-border-radius:0 0 4px 0;-moz-border-radius:0 0 4px 0;border-radius:0 0 4px 0;} -.table-striped tbody tr:nth-child(odd) td,.table-striped tbody tr:nth-child(odd) th{background-color:#f9f9f9;} -table .span1{float:none;width:44px;margin-left:0;} -table .span2{float:none;width:124px;margin-left:0;} -table .span3{float:none;width:204px;margin-left:0;} -table .span4{float:none;width:284px;margin-left:0;} -table .span5{float:none;width:364px;margin-left:0;} -table .span6{float:none;width:444px;margin-left:0;} -table .span7{float:none;width:524px;margin-left:0;} -table .span8{float:none;width:604px;margin-left:0;} -table .span9{float:none;width:684px;margin-left:0;} -table .span10{float:none;width:764px;margin-left:0;} -table .span11{float:none;width:844px;margin-left:0;} -table .span12{float:none;width:924px;margin-left:0;} -[class^="icon-"]{display:inline-block;width:14px;height:14px;vertical-align:text-top;background-image:url(../img/glyphicons-halflings.png);background-position:14px 14px;background-repeat:no-repeat;*margin-right:.3em;}[class^="icon-"]:last-child{*margin-left:0;} -.icon-white{background-image:url(../img/glyphicons-halflings-white.png);} -.icon-glass{background-position:0 0;} -.icon-music{background-position:-24px 0;} -.icon-search{background-position:-48px 0;} -.icon-envelope{background-position:-72px 0;} -.icon-heart{background-position:-96px 0;} -.icon-star{background-position:-120px 0;} -.icon-star-empty{background-position:-144px 0;} -.icon-user{background-position:-168px 0;} -.icon-film{background-position:-192px 0;} -.icon-th-large{background-position:-216px 0;} -.icon-th{background-position:-240px 0;} -.icon-th-list{background-position:-264px 0;} -.icon-ok{background-position:-288px 0;} -.icon-remove{background-position:-312px 0;} -.icon-zoom-in{background-position:-336px 0;} -.icon-zoom-out{background-position:-360px 0;} -.icon-off{background-position:-384px 0;} -.icon-signal{background-position:-408px 0;} -.icon-cog{background-position:-432px 0;} -.icon-trash{background-position:-456px 0;} -.icon-home{background-position:0 -24px;} -.icon-file{background-position:-24px -24px;} -.icon-time{background-position:-48px -24px;} -.icon-road{background-position:-72px -24px;} -.icon-download-alt{background-position:-96px -24px;} -.icon-download{background-position:-120px -24px;} -.icon-upload{background-position:-144px -24px;} -.icon-inbox{background-position:-168px -24px;} -.icon-play-circle{background-position:-192px -24px;} -.icon-repeat{background-position:-216px -24px;} -.icon-refresh{background-position:-240px -24px;} -.icon-list-alt{background-position:-264px -24px;} -.icon-lock{background-position:-287px -24px;} -.icon-flag{background-position:-312px -24px;} -.icon-headphones{background-position:-336px -24px;} -.icon-volume-off{background-position:-360px -24px;} -.icon-volume-down{background-position:-384px -24px;} -.icon-volume-up{background-position:-408px -24px;} -.icon-qrcode{background-position:-432px -24px;} -.icon-barcode{background-position:-456px -24px;} -.icon-tag{background-position:0 -48px;} -.icon-tags{background-position:-25px -48px;} -.icon-book{background-position:-48px -48px;} -.icon-bookmark{background-position:-72px -48px;} -.icon-print{background-position:-96px -48px;} -.icon-camera{background-position:-120px -48px;} -.icon-font{background-position:-144px -48px;} -.icon-bold{background-position:-167px -48px;} -.icon-italic{background-position:-192px -48px;} -.icon-text-height{background-position:-216px -48px;} -.icon-text-width{background-position:-240px -48px;} -.icon-align-left{background-position:-264px -48px;} -.icon-align-center{background-position:-288px -48px;} -.icon-align-right{background-position:-312px -48px;} -.icon-align-justify{background-position:-336px -48px;} -.icon-list{background-position:-360px -48px;} -.icon-indent-left{background-position:-384px -48px;} -.icon-indent-right{background-position:-408px -48px;} -.icon-facetime-video{background-position:-432px -48px;} -.icon-picture{background-position:-456px -48px;} -.icon-pencil{background-position:0 -72px;} -.icon-map-marker{background-position:-24px -72px;} -.icon-adjust{background-position:-48px -72px;} -.icon-tint{background-position:-72px -72px;} -.icon-edit{background-position:-96px -72px;} -.icon-share{background-position:-120px -72px;} -.icon-check{background-position:-144px -72px;} -.icon-move{background-position:-168px -72px;} -.icon-step-backward{background-position:-192px -72px;} -.icon-fast-backward{background-position:-216px -72px;} -.icon-backward{background-position:-240px -72px;} -.icon-play{background-position:-264px -72px;} -.icon-pause{background-position:-288px -72px;} -.icon-stop{background-position:-312px -72px;} -.icon-forward{background-position:-336px -72px;} -.icon-fast-forward{background-position:-360px -72px;} -.icon-step-forward{background-position:-384px -72px;} -.icon-eject{background-position:-408px -72px;} -.icon-chevron-left{background-position:-432px -72px;} -.icon-chevron-right{background-position:-456px -72px;} -.icon-plus-sign{background-position:0 -96px;} -.icon-minus-sign{background-position:-24px -96px;} -.icon-remove-sign{background-position:-48px -96px;} -.icon-ok-sign{background-position:-72px -96px;} -.icon-question-sign{background-position:-96px -96px;} -.icon-info-sign{background-position:-120px -96px;} -.icon-screenshot{background-position:-144px -96px;} -.icon-remove-circle{background-position:-168px -96px;} -.icon-ok-circle{background-position:-192px -96px;} -.icon-ban-circle{background-position:-216px -96px;} -.icon-arrow-left{background-position:-240px -96px;} -.icon-arrow-right{background-position:-264px -96px;} -.icon-arrow-up{background-position:-289px -96px;} -.icon-arrow-down{background-position:-312px -96px;} -.icon-share-alt{background-position:-336px -96px;} -.icon-resize-full{background-position:-360px -96px;} -.icon-resize-small{background-position:-384px -96px;} -.icon-plus{background-position:-408px -96px;} -.icon-minus{background-position:-433px -96px;} -.icon-asterisk{background-position:-456px -96px;} -.icon-exclamation-sign{background-position:0 -120px;} -.icon-gift{background-position:-24px -120px;} -.icon-leaf{background-position:-48px -120px;} -.icon-fire{background-position:-72px -120px;} -.icon-eye-open{background-position:-96px -120px;} -.icon-eye-close{background-position:-120px -120px;} -.icon-warning-sign{background-position:-144px -120px;} -.icon-plane{background-position:-168px -120px;} -.icon-calendar{background-position:-192px -120px;} -.icon-random{background-position:-216px -120px;} -.icon-comment{background-position:-240px -120px;} -.icon-magnet{background-position:-264px -120px;} -.icon-chevron-up{background-position:-288px -120px;} -.icon-chevron-down{background-position:-313px -119px;} -.icon-retweet{background-position:-336px -120px;} -.icon-shopping-cart{background-position:-360px -120px;} -.icon-folder-close{background-position:-384px -120px;} -.icon-folder-open{background-position:-408px -120px;} -.icon-resize-vertical{background-position:-432px -119px;} -.icon-resize-horizontal{background-position:-456px -118px;} -.dropdown{position:relative;} -.dropdown-toggle{*margin-bottom:-3px;} -.dropdown-toggle:active,.open .dropdown-toggle{outline:0;} -.caret{display:inline-block;width:0;height:0;text-indent:-99999px;*text-indent:0;vertical-align:top;border-left:4px solid transparent;border-right:4px solid transparent;border-top:4px solid #000000;opacity:0.3;filter:alpha(opacity=30);content:"\2193";} -.dropdown .caret{margin-top:8px;margin-left:2px;} -.dropdown:hover .caret,.open.dropdown .caret{opacity:1;filter:alpha(opacity=100);} -.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;float:left;display:none;min-width:160px;max-width:220px;_width:160px;padding:4px 0;margin:0;list-style:none;background-color:#ffffff;border-color:#ccc;border-color:rgba(0, 0, 0, 0.2);border-style:solid;border-width:1px;-webkit-border-radius:0 0 5px 5px;-moz-border-radius:0 0 5px 5px;border-radius:0 0 5px 5px;-webkit-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-moz-box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);box-shadow:0 5px 10px rgba(0, 0, 0, 0.2);-webkit-background-clip:padding-box;-moz-background-clip:padding;background-clip:padding-box;*border-right-width:2px;*border-bottom-width:2px;}.dropdown-menu.bottom-up{top:auto;bottom:100%;margin-bottom:2px;} -.dropdown-menu .divider{height:1px;margin:5px 1px;overflow:hidden;background-color:#e5e5e5;border-bottom:1px solid #ffffff;*width:100%;*margin:-5px 0 5px;} -.dropdown-menu a{display:block;padding:3px 15px;clear:both;font-weight:normal;line-height:18px;color:#555555;white-space:nowrap;} -.dropdown-menu li>a:hover,.dropdown-menu .active>a,.dropdown-menu .active>a:hover{color:#ffffff;text-decoration:none;background-color:#0088cc;} -.dropdown.open{*z-index:1000;}.dropdown.open .dropdown-toggle{color:#ffffff;background:#ccc;background:rgba(0, 0, 0, 0.3);} -.dropdown.open .dropdown-menu{display:block;} -.typeahead{margin-top:2px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.well{min-height:20px;padding:19px;margin-bottom:20px;background-color:#f5f5f5;border:1px solid #eee;border:1px solid rgba(0, 0, 0, 0.05);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 1px rgba(0, 0, 0, 0.05);}.well blockquote{border-color:#ddd;border-color:rgba(0, 0, 0, 0.15);} -.fade{-webkit-transition:opacity 0.15s linear;-moz-transition:opacity 0.15s linear;-ms-transition:opacity 0.15s linear;-o-transition:opacity 0.15s linear;transition:opacity 0.15s linear;opacity:0;}.fade.in{opacity:1;} -.collapse{-webkit-transition:height 0.35s ease;-moz-transition:height 0.35s ease;-ms-transition:height 0.35s ease;-o-transition:height 0.35s ease;transition:height 0.35s ease;position:relative;overflow:hidden;height:0;}.collapse.in{height:auto;} -.close{float:right;font-size:20px;font-weight:bold;line-height:18px;color:#000000;text-shadow:0 1px 0 #ffffff;opacity:0.2;filter:alpha(opacity=20);}.close:hover{color:#000000;text-decoration:none;opacity:0.4;filter:alpha(opacity=40);cursor:pointer;} -.btn{display:inline-block;padding:4px 10px 4px;font-size:13px;line-height:18px;color:#333333;text-align:center;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#fafafa;background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), color-stop(25%, #ffffff), to(#e6e6e6));background-image:-webkit-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-moz-linear-gradient(top, #ffffff, #ffffff 25%, #e6e6e6);background-image:-ms-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:-o-linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-image:linear-gradient(#ffffff, #ffffff 25%, #e6e6e6);background-repeat:no-repeat;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#e6e6e6', GradientType=0);border:1px solid #ccc;border-bottom-color:#bbb;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);cursor:pointer;*margin-left:.3em;}.btn:first-child{*margin-left:0;} -.btn:hover{color:#333333;text-decoration:none;background-color:#e6e6e6;background-position:0 -15px;-webkit-transition:background-position 0.1s linear;-moz-transition:background-position 0.1s linear;-ms-transition:background-position 0.1s linear;-o-transition:background-position 0.1s linear;transition:background-position 0.1s linear;} -.btn:focus{outline:thin dotted;outline:5px auto -webkit-focus-ring-color;outline-offset:-2px;} -.btn.active,.btn:active{background-image:none;-webkit-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 2px 4px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);background-color:#e6e6e6;background-color:#d9d9d9 \9;color:rgba(0, 0, 0, 0.5);outline:0;} -.btn.disabled,.btn[disabled]{cursor:default;background-image:none;background-color:#e6e6e6;opacity:0.65;filter:alpha(opacity=65);-webkit-box-shadow:none;-moz-box-shadow:none;box-shadow:none;} -.btn-large{padding:9px 14px;font-size:15px;line-height:normal;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-large .icon{margin-top:1px;} -.btn-small{padding:5px 9px;font-size:11px;line-height:16px;} -.btn-small .icon{margin-top:-1px;} -.btn-primary,.btn-primary:hover,.btn-warning,.btn-warning:hover,.btn-danger,.btn-danger:hover,.btn-success,.btn-success:hover,.btn-info,.btn-info:hover{text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);color:#ffffff;} -.btn-primary.active,.btn-warning.active,.btn-danger.active,.btn-success.active,.btn-info.active{color:rgba(255, 255, 255, 0.75);} -.btn-primary{background-color:#006dcc;background-image:-moz-linear-gradient(top, #0088cc, #0044cc);background-image:-ms-linear-gradient(top, #0088cc, #0044cc);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#0088cc), to(#0044cc));background-image:-webkit-linear-gradient(top, #0088cc, #0044cc);background-image:-o-linear-gradient(top, #0088cc, #0044cc);background-image:linear-gradient(top, #0088cc, #0044cc);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#0088cc', endColorstr='#0044cc', GradientType=0);border-color:#0044cc #0044cc #002a80;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-primary:hover,.btn-primary:active,.btn-primary.active,.btn-primary.disabled,.btn-primary[disabled]{background-color:#0044cc;} -.btn-primary:active,.btn-primary.active{background-color:#003399 \9;} -.btn-warning{background-color:#faa732;background-image:-moz-linear-gradient(top, #fbb450, #f89406);background-image:-ms-linear-gradient(top, #fbb450, #f89406);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#fbb450), to(#f89406));background-image:-webkit-linear-gradient(top, #fbb450, #f89406);background-image:-o-linear-gradient(top, #fbb450, #f89406);background-image:linear-gradient(top, #fbb450, #f89406);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#fbb450', endColorstr='#f89406', GradientType=0);border-color:#f89406 #f89406 #ad6704;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-warning:hover,.btn-warning:active,.btn-warning.active,.btn-warning.disabled,.btn-warning[disabled]{background-color:#f89406;} -.btn-warning:active,.btn-warning.active{background-color:#c67605 \9;} -.btn-danger{background-color:#da4f49;background-image:-moz-linear-gradient(top, #ee5f5b, #bd362f);background-image:-ms-linear-gradient(top, #ee5f5b, #bd362f);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#bd362f));background-image:-webkit-linear-gradient(top, #ee5f5b, #bd362f);background-image:-o-linear-gradient(top, #ee5f5b, #bd362f);background-image:linear-gradient(top, #ee5f5b, #bd362f);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#bd362f', GradientType=0);border-color:#bd362f #bd362f #802420;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-danger:hover,.btn-danger:active,.btn-danger.active,.btn-danger.disabled,.btn-danger[disabled]{background-color:#bd362f;} -.btn-danger:active,.btn-danger.active{background-color:#942a25 \9;} -.btn-success{background-color:#5bb75b;background-image:-moz-linear-gradient(top, #62c462, #51a351);background-image:-ms-linear-gradient(top, #62c462, #51a351);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#51a351));background-image:-webkit-linear-gradient(top, #62c462, #51a351);background-image:-o-linear-gradient(top, #62c462, #51a351);background-image:linear-gradient(top, #62c462, #51a351);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#51a351', GradientType=0);border-color:#51a351 #51a351 #387038;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-success:hover,.btn-success:active,.btn-success.active,.btn-success.disabled,.btn-success[disabled]{background-color:#51a351;} -.btn-success:active,.btn-success.active{background-color:#408140 \9;} -.btn-info{background-color:#49afcd;background-image:-moz-linear-gradient(top, #5bc0de, #2f96b4);background-image:-ms-linear-gradient(top, #5bc0de, #2f96b4);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#2f96b4));background-image:-webkit-linear-gradient(top, #5bc0de, #2f96b4);background-image:-o-linear-gradient(top, #5bc0de, #2f96b4);background-image:linear-gradient(top, #5bc0de, #2f96b4);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#2f96b4', GradientType=0);border-color:#2f96b4 #2f96b4 #1f6377;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);}.btn-info:hover,.btn-info:active,.btn-info.active,.btn-info.disabled,.btn-info[disabled]{background-color:#2f96b4;} -.btn-info:active,.btn-info.active{background-color:#24748c \9;} -button.btn,input[type="submit"].btn{*padding-top:2px;*padding-bottom:2px;}button.btn::-moz-focus-inner,input[type="submit"].btn::-moz-focus-inner{padding:0;border:0;} -button.btn.large,input[type="submit"].btn.large{*padding-top:7px;*padding-bottom:7px;} -button.btn.small,input[type="submit"].btn.small{*padding-top:3px;*padding-bottom:3px;} -.btn-group{position:relative;*zoom:1;*margin-left:.3em;}.btn-group:before,.btn-group:after{display:table;content:"";} -.btn-group:after{clear:both;} -.btn-group:first-child{*margin-left:0;} -.btn-group+.btn-group{margin-left:5px;} -.btn-toolbar{margin-top:9px;margin-bottom:9px;}.btn-toolbar .btn-group{display:inline-block;*display:inline;*zoom:1;} -.btn-group .btn{position:relative;float:left;margin-left:-1px;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.btn-group .btn:first-child{margin-left:0;-webkit-border-top-left-radius:4px;-moz-border-radius-topleft:4px;border-top-left-radius:4px;-webkit-border-bottom-left-radius:4px;-moz-border-radius-bottomleft:4px;border-bottom-left-radius:4px;} -.btn-group .btn:last-child,.btn-group .dropdown-toggle{-webkit-border-top-right-radius:4px;-moz-border-radius-topright:4px;border-top-right-radius:4px;-webkit-border-bottom-right-radius:4px;-moz-border-radius-bottomright:4px;border-bottom-right-radius:4px;} -.btn-group .btn.large:first-child{margin-left:0;-webkit-border-top-left-radius:6px;-moz-border-radius-topleft:6px;border-top-left-radius:6px;-webkit-border-bottom-left-radius:6px;-moz-border-radius-bottomleft:6px;border-bottom-left-radius:6px;} -.btn-group .btn.large:last-child,.btn-group .large.dropdown-toggle{-webkit-border-top-right-radius:6px;-moz-border-radius-topright:6px;border-top-right-radius:6px;-webkit-border-bottom-right-radius:6px;-moz-border-radius-bottomright:6px;border-bottom-right-radius:6px;} -.btn-group .btn:hover,.btn-group .btn:focus,.btn-group .btn:active,.btn-group .btn.active{z-index:2;} -.btn-group .dropdown-toggle:active,.btn-group.open .dropdown-toggle{outline:0;} -.btn-group .dropdown-toggle{padding-left:8px;padding-right:8px;-webkit-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 1px 0 0 rgba(255, 255, 255, 0.125),inset 0 1px 0 rgba(255, 255, 255, 0.2),0 1px 2px rgba(0, 0, 0, 0.05);*padding-top:5px;*padding-bottom:5px;} -.btn-group.open{*z-index:1000;}.btn-group.open .dropdown-menu{display:block;margin-top:1px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.btn-group.open .dropdown-toggle{background-image:none;-webkit-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:inset 0 1px 6px rgba(0, 0, 0, 0.15),0 1px 2px rgba(0, 0, 0, 0.05);} -.btn .caret{margin-top:7px;margin-left:0;} -.btn:hover .caret,.open.btn-group .caret{opacity:1;filter:alpha(opacity=100);} -.btn-primary .caret,.btn-danger .caret,.btn-info .caret,.btn-success .caret{border-top-color:#ffffff;opacity:0.75;filter:alpha(opacity=75);} -.btn-small .caret{margin-top:4px;} -.alert{padding:8px 35px 8px 14px;margin-bottom:18px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);background-color:#fcf8e3;border:1px solid #fbeed5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.alert,.alert-heading{color:#c09853;} -.alert .close{position:relative;top:-2px;right:-21px;line-height:18px;} -.alert-success{background-color:#dff0d8;border-color:#d6e9c6;} -.alert-success,.alert-success .alert-heading{color:#468847;} -.alert-danger,.alert-error{background-color:#f2dede;border-color:#eed3d7;} -.alert-danger,.alert-error,.alert-danger .alert-heading,.alert-error .alert-heading{color:#b94a48;} -.alert-info{background-color:#d9edf7;border-color:#bce8f1;} -.alert-info,.alert-info .alert-heading{color:#3a87ad;} -.alert-block{padding-top:14px;padding-bottom:14px;} -.alert-block>p,.alert-block>ul{margin-bottom:0;} -.alert-block p+p{margin-top:5px;} -.nav{margin-left:0;margin-bottom:18px;list-style:none;} -.nav>li>a{display:block;} -.nav>li>a:hover{text-decoration:none;background-color:#eeeeee;} -.nav-list{padding-left:14px;padding-right:14px;margin-bottom:0;} -.nav-list>li>a,.nav-list .nav-header{display:block;padding:3px 15px;margin-left:-15px;margin-right:-15px;text-shadow:0 1px 0 rgba(255, 255, 255, 0.5);} -.nav-list .nav-header{font-size:11px;font-weight:bold;line-height:18px;color:#999999;text-transform:uppercase;} -.nav-list .nav-header *{text-transform:none;} -.nav-list>li+.nav-header{margin-top:9px;} -.nav-list .active>a,.nav-list .active>a:hover{color:#ffffff;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.2);background-color:#0088cc;} -.nav-list [class^="icon-"]{margin-right:2px;} -.nav-tabs,.nav-pills{*zoom:1;}.nav-tabs:before,.nav-pills:before,.nav-tabs:after,.nav-pills:after{display:table;content:"";} -.nav-tabs:after,.nav-pills:after{clear:both;} -.nav-tabs>li,.nav-pills>li{float:left;} -.nav-tabs>li>a,.nav-pills>li>a{padding-right:12px;padding-left:12px;margin-right:2px;line-height:14px;} -.nav-tabs{border-bottom:1px solid #ddd;} -.nav-tabs>li{margin-bottom:-1px;} -.nav-tabs>li>a{padding-top:9px;padding-bottom:9px;border:1px solid transparent;-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;}.nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #dddddd;} -.nav-tabs>.active>a,.nav-tabs>.active>a:hover{color:#555555;background-color:#ffffff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default;} -.nav-pills>li>a{padding-top:8px;padding-bottom:8px;margin-top:2px;margin-bottom:2px;-webkit-border-radius:5px;-moz-border-radius:5px;border-radius:5px;} -.nav-pills .active>a,.nav-pills .active>a:hover{color:#ffffff;background-color:#0088cc;} -.nav-stacked>li{float:none;} -.nav-stacked>li>a{margin-right:0;} -.nav-tabs.nav-stacked{border-bottom:0;} -.nav-tabs.nav-stacked>li>a{border:1px solid #ddd;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.nav-tabs.nav-stacked>li:first-child>a{-webkit-border-radius:4px 4px 0 0;-moz-border-radius:4px 4px 0 0;border-radius:4px 4px 0 0;} -.nav-tabs.nav-stacked>li:last-child>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;} -.nav-tabs.nav-stacked>li>a:hover{border-color:#ddd;z-index:2;} -.nav-pills.nav-stacked>li>a{margin-bottom:3px;} -.nav-pills.nav-stacked>li:last-child>a{margin-bottom:1px;} -.nav-tabs .dropdown-menu,.nav-pills .dropdown-menu{margin-top:1px;border-width:1px;} -.nav-pills .dropdown-menu{-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.nav-tabs .dropdown-toggle .caret,.nav-pills .dropdown-toggle .caret{border-top-color:#0088cc;margin-top:6px;} -.nav-tabs .dropdown-toggle:hover .caret,.nav-pills .dropdown-toggle:hover .caret{border-top-color:#005580;} -.nav-tabs .active .dropdown-toggle .caret,.nav-pills .active .dropdown-toggle .caret{border-top-color:#333333;} -.nav>.dropdown.active>a:hover{color:#000000;cursor:pointer;} -.nav-tabs .open .dropdown-toggle,.nav-pills .open .dropdown-toggle,.nav>.open.active>a:hover{color:#ffffff;background-color:#999999;border-color:#999999;} -.nav .open .caret,.nav .open.active .caret,.nav .open a:hover .caret{border-top-color:#ffffff;opacity:1;filter:alpha(opacity=100);} -.tabs-stacked .open>a:hover{border-color:#999999;} -.tabbable{*zoom:1;}.tabbable:before,.tabbable:after{display:table;content:"";} -.tabbable:after{clear:both;} -.tabs-below .nav-tabs,.tabs-right .nav-tabs,.tabs-left .nav-tabs{border-bottom:0;} -.tab-content>.tab-pane,.pill-content>.pill-pane{display:none;} -.tab-content>.active,.pill-content>.active{display:block;} -.tabs-below .nav-tabs{border-top:1px solid #ddd;} -.tabs-below .nav-tabs>li{margin-top:-1px;margin-bottom:0;} -.tabs-below .nav-tabs>li>a{-webkit-border-radius:0 0 4px 4px;-moz-border-radius:0 0 4px 4px;border-radius:0 0 4px 4px;}.tabs-below .nav-tabs>li>a:hover{border-bottom-color:transparent;border-top-color:#ddd;} -.tabs-below .nav-tabs .active>a,.tabs-below .nav-tabs .active>a:hover{border-color:transparent #ddd #ddd #ddd;} -.tabs-left .nav-tabs>li,.tabs-right .nav-tabs>li{float:none;} -.tabs-left .nav-tabs>li>a,.tabs-right .nav-tabs>li>a{min-width:74px;margin-right:0;margin-bottom:3px;} -.tabs-left .nav-tabs{float:left;margin-right:19px;border-right:1px solid #ddd;} -.tabs-left .nav-tabs>li>a{margin-right:-1px;-webkit-border-radius:4px 0 0 4px;-moz-border-radius:4px 0 0 4px;border-radius:4px 0 0 4px;} -.tabs-left .nav-tabs>li>a:hover{border-color:#eeeeee #dddddd #eeeeee #eeeeee;} -.tabs-left .nav-tabs .active>a,.tabs-left .nav-tabs .active>a:hover{border-color:#ddd transparent #ddd #ddd;*border-right-color:#ffffff;} -.tabs-right .nav-tabs{float:right;margin-left:19px;border-left:1px solid #ddd;} -.tabs-right .nav-tabs>li>a{margin-left:-1px;-webkit-border-radius:0 4px 4px 0;-moz-border-radius:0 4px 4px 0;border-radius:0 4px 4px 0;} -.tabs-right .nav-tabs>li>a:hover{border-color:#eeeeee #eeeeee #eeeeee #dddddd;} -.tabs-right .nav-tabs .active>a,.tabs-right .nav-tabs .active>a:hover{border-color:#ddd #ddd #ddd transparent;*border-left-color:#ffffff;} -.navbar{overflow:visible;margin-bottom:18px;} -.navbar-inner{padding-left:20px;padding-right:20px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);-moz-box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);box-shadow:0 1px 3px rgba(0, 0, 0, 0.25),inset 0 -1px 0 rgba(0, 0, 0, 0.1);} -.btn-navbar{display:none;float:right;padding:7px 10px;margin-left:5px;margin-right:5px;background-color:#2c2c2c;background-image:-moz-linear-gradient(top, #333333, #222222);background-image:-ms-linear-gradient(top, #333333, #222222);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#333333), to(#222222));background-image:-webkit-linear-gradient(top, #333333, #222222);background-image:-o-linear-gradient(top, #333333, #222222);background-image:linear-gradient(top, #333333, #222222);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#333333', endColorstr='#222222', GradientType=0);border-color:#222222 #222222 #000000;border-color:rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.1) rgba(0, 0, 0, 0.25);filter:progid:DXImageTransform.Microsoft.gradient(enabled = false);-webkit-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);-moz-box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);box-shadow:inset 0 1px 0 rgba(255, 255, 255, 0.1),0 1px 0 rgba(255, 255, 255, 0.075);}.btn-navbar:hover,.btn-navbar:active,.btn-navbar.active,.btn-navbar.disabled,.btn-navbar[disabled]{background-color:#222222;} -.btn-navbar:active,.btn-navbar.active{background-color:#080808 \9;} -.btn-navbar .icon-bar{display:block;width:18px;height:2px;background-color:#f5f5f5;-webkit-border-radius:1px;-moz-border-radius:1px;border-radius:1px;-webkit-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);-moz-box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);box-shadow:0 1px 0 rgba(0, 0, 0, 0.25);} -.btn-navbar .icon-bar+.icon-bar{margin-top:3px;} -.nav-collapse.collapse{height:auto;} -.navbar .brand:hover{text-decoration:none;} -.navbar .brand{float:left;display:block;padding:8px 20px 12px;margin-left:-20px;font-size:20px;font-weight:200;line-height:1;color:#ffffff;} -.navbar .navbar-text{margin-bottom:0;line-height:40px;color:#999999;}.navbar .navbar-text a:hover{color:#ffffff;background-color:transparent;} -.navbar .btn,.navbar .btn-group{margin-top:5px;} -.navbar .btn-group .btn{margin-top:0;} -.navbar-form{margin-bottom:0;*zoom:1;}.navbar-form:before,.navbar-form:after{display:table;content:"";} -.navbar-form:after{clear:both;} -.navbar-form input,.navbar-form select{display:inline-block;margin-top:5px;margin-bottom:0;} -.navbar-form .radio,.navbar-form .checkbox{margin-top:5px;} -.navbar-form input[type="image"],.navbar-form input[type="checkbox"],.navbar-form input[type="radio"]{margin-top:3px;} -.navbar-search{position:relative;float:left;margin-top:6px;margin-bottom:0;}.navbar-search .search-query{padding:4px 9px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;font-weight:normal;line-height:1;color:#ffffff;color:rgba(255, 255, 255, 0.75);background:#666;background:rgba(255, 255, 255, 0.3);border:1px solid #111;-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1),0 1px 0px rgba(255, 255, 255, 0.15);-webkit-transition:none;-moz-transition:none;-ms-transition:none;-o-transition:none;transition:none;}.navbar-search .search-query :-moz-placeholder{color:#eeeeee;} -.navbar-search .search-query::-webkit-input-placeholder{color:#eeeeee;} -.navbar-search .search-query:hover{color:#ffffff;background-color:#999999;background-color:rgba(255, 255, 255, 0.5);} -.navbar-search .search-query:focus,.navbar-search .search-query.focused{padding:5px 10px;color:#333333;text-shadow:0 1px 0 #ffffff;background-color:#ffffff;border:0;-webkit-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);-moz-box-shadow:0 0 3px rgba(0, 0, 0, 0.15);box-shadow:0 0 3px rgba(0, 0, 0, 0.15);outline:0;} -.navbar-fixed-top{position:fixed;top:0;right:0;left:0;z-index:1030;} -.navbar-fixed-top .navbar-inner{padding-left:0;padding-right:0;-webkit-border-radius:0;-moz-border-radius:0;border-radius:0;} -.navbar .nav{position:relative;left:0;display:block;float:left;margin:0 10px 0 0;} -.navbar .nav.pull-right{float:right;} -.navbar .nav>li{display:block;float:left;} -.navbar .nav>li>a{float:none;padding:10px 10px 11px;line-height:19px;color:#999999;text-decoration:none;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);} -.navbar .nav>li>a:hover{background-color:transparent;color:#ffffff;text-decoration:none;} -.navbar .nav .active>a,.navbar .nav .active>a:hover{color:#ffffff;text-decoration:none;background-color:#222222;background-color:rgba(0, 0, 0, 0.5);} -.navbar .divider-vertical{height:40px;width:1px;margin:0 9px;overflow:hidden;background-color:#222222;border-right:1px solid #333333;} -.navbar .nav.pull-right{margin-left:10px;margin-right:0;} -.navbar .dropdown-menu{margin-top:1px;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;}.navbar .dropdown-menu:before{content:'';display:inline-block;border-left:7px solid transparent;border-right:7px solid transparent;border-bottom:7px solid #ccc;border-bottom-color:rgba(0, 0, 0, 0.2);position:absolute;top:-7px;left:9px;} -.navbar .dropdown-menu:after{content:'';display:inline-block;border-left:6px solid transparent;border-right:6px solid transparent;border-bottom:6px solid #ffffff;position:absolute;top:-6px;left:10px;} -.navbar .nav .dropdown-toggle .caret,.navbar .nav .open.dropdown .caret{border-top-color:#ffffff;} -.navbar .nav .active .caret{opacity:1;filter:alpha(opacity=100);} -.navbar .nav .open>.dropdown-toggle,.navbar .nav .active>.dropdown-toggle,.navbar .nav .open.active>.dropdown-toggle{background-color:transparent;} -.navbar .nav .active>.dropdown-toggle:hover{color:#ffffff;} -.navbar .nav.pull-right .dropdown-menu{left:auto;right:0;}.navbar .nav.pull-right .dropdown-menu:before{left:auto;right:12px;} -.navbar .nav.pull-right .dropdown-menu:after{left:auto;right:13px;} -.breadcrumb{padding:7px 14px;margin:0 0 18px;background-color:#fbfbfb;background-image:-moz-linear-gradient(top, #ffffff, #f5f5f5);background-image:-ms-linear-gradient(top, #ffffff, #f5f5f5);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ffffff), to(#f5f5f5));background-image:-webkit-linear-gradient(top, #ffffff, #f5f5f5);background-image:-o-linear-gradient(top, #ffffff, #f5f5f5);background-image:linear-gradient(top, #ffffff, #f5f5f5);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ffffff', endColorstr='#f5f5f5', GradientType=0);border:1px solid #ddd;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;}.breadcrumb li{display:inline;text-shadow:0 1px 0 #ffffff;} -.breadcrumb .divider{padding:0 5px;color:#999999;} -.breadcrumb .active a{color:#333333;} -.pagination{height:36px;margin:18px 0;} -.pagination ul{display:inline-block;*display:inline;*zoom:1;margin-left:0;margin-bottom:0;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;-webkit-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);-moz-box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);box-shadow:0 1px 2px rgba(0, 0, 0, 0.05);} -.pagination li{display:inline;} -.pagination a{float:left;padding:0 14px;line-height:34px;text-decoration:none;border:1px solid #ddd;border-left-width:0;} -.pagination a:hover,.pagination .active a{background-color:#f5f5f5;} -.pagination .active a{color:#999999;cursor:default;} -.pagination .disabled a,.pagination .disabled a:hover{color:#999999;background-color:transparent;cursor:default;} -.pagination li:first-child a{border-left-width:1px;-webkit-border-radius:3px 0 0 3px;-moz-border-radius:3px 0 0 3px;border-radius:3px 0 0 3px;} -.pagination li:last-child a{-webkit-border-radius:0 3px 3px 0;-moz-border-radius:0 3px 3px 0;border-radius:0 3px 3px 0;} -.pagination-centered{text-align:center;} -.pagination-right{text-align:right;} -.pager{margin-left:0;margin-bottom:18px;list-style:none;text-align:center;*zoom:1;}.pager:before,.pager:after{display:table;content:"";} -.pager:after{clear:both;} -.pager li{display:inline;} -.pager a{display:inline-block;padding:5px 14px;background-color:#fff;border:1px solid #ddd;-webkit-border-radius:15px;-moz-border-radius:15px;border-radius:15px;} -.pager a:hover{text-decoration:none;background-color:#f5f5f5;} -.pager .next a{float:right;} -.pager .previous a{float:left;} -.modal-open .dropdown-menu{z-index:2050;} -.modal-open .dropdown.open{*z-index:2050;} -.modal-open .popover{z-index:2060;} -.modal-open .tooltip{z-index:2070;} -.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000000;}.modal-backdrop.fade{opacity:0;} -.modal-backdrop,.modal-backdrop.fade.in{opacity:0.8;filter:alpha(opacity=80);} -.modal{position:fixed;top:50%;left:50%;z-index:1050;max-height:500px;overflow:auto;width:560px;margin:-250px 0 0 -280px;background-color:#ffffff;border:1px solid #999;border:1px solid rgba(0, 0, 0, 0.3);*border:1px solid #999;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.modal.fade{-webkit-transition:opacity .3s linear, top .3s ease-out;-moz-transition:opacity .3s linear, top .3s ease-out;-ms-transition:opacity .3s linear, top .3s ease-out;-o-transition:opacity .3s linear, top .3s ease-out;transition:opacity .3s linear, top .3s ease-out;top:-25%;} -.modal.fade.in{top:50%;} -.modal-header{padding:9px 15px;border-bottom:1px solid #eee;}.modal-header .close{margin-top:2px;} -.modal-body{padding:15px;} -.modal-footer{padding:14px 15px 15px;margin-bottom:0;background-color:#f5f5f5;border-top:1px solid #ddd;-webkit-border-radius:0 0 6px 6px;-moz-border-radius:0 0 6px 6px;border-radius:0 0 6px 6px;-webkit-box-shadow:inset 0 1px 0 #ffffff;-moz-box-shadow:inset 0 1px 0 #ffffff;box-shadow:inset 0 1px 0 #ffffff;*zoom:1;}.modal-footer:before,.modal-footer:after{display:table;content:"";} -.modal-footer:after{clear:both;} -.modal-footer .btn{float:right;margin-left:5px;margin-bottom:0;} -.tooltip{position:absolute;z-index:1020;display:block;visibility:visible;padding:5px;font-size:11px;opacity:0;filter:alpha(opacity=0);}.tooltip.in{opacity:0.8;filter:alpha(opacity=80);} -.tooltip.top{margin-top:-2px;} -.tooltip.right{margin-left:2px;} -.tooltip.bottom{margin-top:2px;} -.tooltip.left{margin-left:-2px;} -.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.tooltip-inner{max-width:200px;padding:3px 8px;color:#ffffff;text-align:center;text-decoration:none;background-color:#000000;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.tooltip-arrow{position:absolute;width:0;height:0;} -.popover{position:absolute;top:0;left:0;z-index:1010;display:none;padding:5px;}.popover.top{margin-top:-5px;} -.popover.right{margin-left:5px;} -.popover.bottom{margin-top:5px;} -.popover.left{margin-left:-5px;} -.popover.top .arrow{bottom:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-top:5px solid #000000;} -.popover.right .arrow{top:50%;left:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-right:5px solid #000000;} -.popover.bottom .arrow{top:0;left:50%;margin-left:-5px;border-left:5px solid transparent;border-right:5px solid transparent;border-bottom:5px solid #000000;} -.popover.left .arrow{top:50%;right:0;margin-top:-5px;border-top:5px solid transparent;border-bottom:5px solid transparent;border-left:5px solid #000000;} -.popover .arrow{position:absolute;width:0;height:0;} -.popover-inner{padding:3px;width:280px;overflow:hidden;background:#000000;background:rgba(0, 0, 0, 0.8);-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;-webkit-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);-moz-box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);box-shadow:0 3px 7px rgba(0, 0, 0, 0.3);} -.popover-title{padding:9px 15px;line-height:1;background-color:#f5f5f5;border-bottom:1px solid #eee;-webkit-border-radius:3px 3px 0 0;-moz-border-radius:3px 3px 0 0;border-radius:3px 3px 0 0;} -.popover-content{padding:14px;background-color:#ffffff;-webkit-border-radius:0 0 3px 3px;-moz-border-radius:0 0 3px 3px;border-radius:0 0 3px 3px;-webkit-background-clip:padding-box;-moz-background-clip:padding-box;background-clip:padding-box;}.popover-content p,.popover-content ul,.popover-content ol{margin-bottom:0;} -.thumbnails{margin-left:-20px;list-style:none;*zoom:1;}.thumbnails:before,.thumbnails:after{display:table;content:"";} -.thumbnails:after{clear:both;} -.thumbnails>li{float:left;margin:0 0 18px 20px;} -.thumbnail{display:block;padding:4px;line-height:1;border:1px solid #ddd;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;-webkit-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);-moz-box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);box-shadow:0 1px 1px rgba(0, 0, 0, 0.075);} -a.thumbnail:hover{border-color:#0088cc;-webkit-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);-moz-box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);box-shadow:0 1px 4px rgba(0, 105, 214, 0.25);} -.thumbnail>img{display:block;max-width:100%;margin-left:auto;margin-right:auto;} -.thumbnail .caption{padding:9px;} -.label{padding:1px 3px 2px;font-size:9.75px;font-weight:bold;color:#ffffff;text-transform:uppercase;background-color:#999999;-webkit-border-radius:3px;-moz-border-radius:3px;border-radius:3px;} -.label-important{background-color:#b94a48;} -.label-warning{background-color:#f89406;} -.label-success{background-color:#468847;} -.label-info{background-color:#3a87ad;} -@-webkit-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@-moz-keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}@keyframes progress-bar-stripes{from{background-position:0 0;} to{background-position:40px 0;}}.progress{overflow:hidden;height:18px;margin-bottom:18px;background-color:#f7f7f7;background-image:-moz-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-ms-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#f5f5f5), to(#f9f9f9));background-image:-webkit-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:-o-linear-gradient(top, #f5f5f5, #f9f9f9);background-image:linear-gradient(top, #f5f5f5, #f9f9f9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#f5f5f5', endColorstr='#f9f9f9', GradientType=0);-webkit-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-moz-box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);box-shadow:inset 0 1px 2px rgba(0, 0, 0, 0.1);-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.progress .bar{width:0%;height:18px;color:#ffffff;font-size:12px;text-align:center;text-shadow:0 -1px 0 rgba(0, 0, 0, 0.25);background-color:#0e90d2;background-image:-moz-linear-gradient(top, #149bdf, #0480be);background-image:-ms-linear-gradient(top, #149bdf, #0480be);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#149bdf), to(#0480be));background-image:-webkit-linear-gradient(top, #149bdf, #0480be);background-image:-o-linear-gradient(top, #149bdf, #0480be);background-image:linear-gradient(top, #149bdf, #0480be);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#149bdf', endColorstr='#0480be', GradientType=0);-webkit-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-moz-box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);box-shadow:inset 0 -1px 0 rgba(0, 0, 0, 0.15);-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box;-webkit-transition:width 0.6s ease;-moz-transition:width 0.6s ease;-ms-transition:width 0.6s ease;-o-transition:width 0.6s ease;transition:width 0.6s ease;} -.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);-webkit-background-size:40px 40px;-moz-background-size:40px 40px;-o-background-size:40px 40px;background-size:40px 40px;} -.progress.active .bar{-webkit-animation:progress-bar-stripes 2s linear infinite;-moz-animation:progress-bar-stripes 2s linear infinite;animation:progress-bar-stripes 2s linear infinite;} -.progress-danger .bar{background-color:#dd514c;background-image:-moz-linear-gradient(top, #ee5f5b, #c43c35);background-image:-ms-linear-gradient(top, #ee5f5b, #c43c35);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#ee5f5b), to(#c43c35));background-image:-webkit-linear-gradient(top, #ee5f5b, #c43c35);background-image:-o-linear-gradient(top, #ee5f5b, #c43c35);background-image:linear-gradient(top, #ee5f5b, #c43c35);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#ee5f5b', endColorstr='#c43c35', GradientType=0);} -.progress-danger.progress-striped .bar{background-color:#ee5f5b;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-success .bar{background-color:#5eb95e;background-image:-moz-linear-gradient(top, #62c462, #57a957);background-image:-ms-linear-gradient(top, #62c462, #57a957);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#62c462), to(#57a957));background-image:-webkit-linear-gradient(top, #62c462, #57a957);background-image:-o-linear-gradient(top, #62c462, #57a957);background-image:linear-gradient(top, #62c462, #57a957);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#62c462', endColorstr='#57a957', GradientType=0);} -.progress-success.progress-striped .bar{background-color:#62c462;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.progress-info .bar{background-color:#4bb1cf;background-image:-moz-linear-gradient(top, #5bc0de, #339bb9);background-image:-ms-linear-gradient(top, #5bc0de, #339bb9);background-image:-webkit-gradient(linear, 0 0, 0 100%, from(#5bc0de), to(#339bb9));background-image:-webkit-linear-gradient(top, #5bc0de, #339bb9);background-image:-o-linear-gradient(top, #5bc0de, #339bb9);background-image:linear-gradient(top, #5bc0de, #339bb9);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#5bc0de', endColorstr='#339bb9', GradientType=0);} -.progress-info.progress-striped .bar{background-color:#5bc0de;background-image:-webkit-gradient(linear, 0 100%, 100% 0, color-stop(0.25, rgba(255, 255, 255, 0.15)), color-stop(0.25, transparent), color-stop(0.5, transparent), color-stop(0.5, rgba(255, 255, 255, 0.15)), color-stop(0.75, rgba(255, 255, 255, 0.15)), color-stop(0.75, transparent), to(transparent));background-image:-webkit-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-moz-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-ms-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:-o-linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);background-image:linear-gradient(-45deg, rgba(255, 255, 255, 0.15) 25%, transparent 25%, transparent 50%, rgba(255, 255, 255, 0.15) 50%, rgba(255, 255, 255, 0.15) 75%, transparent 75%, transparent);} -.accordion{margin-bottom:18px;} -.accordion-group{margin-bottom:2px;border:1px solid #e5e5e5;-webkit-border-radius:4px;-moz-border-radius:4px;border-radius:4px;} -.accordion-heading{border-bottom:0;} -.accordion-heading .accordion-toggle{display:block;padding:8px 15px;} -.accordion-inner{padding:9px 15px;border-top:1px solid #e5e5e5;} -.carousel{position:relative;margin-bottom:18px;line-height:1;} -.carousel-inner{overflow:hidden;width:100%;position:relative;} -.carousel .item{display:none;position:relative;-webkit-transition:0.6s ease-in-out left;-moz-transition:0.6s ease-in-out left;-ms-transition:0.6s ease-in-out left;-o-transition:0.6s ease-in-out left;transition:0.6s ease-in-out left;} -.carousel .item>img{display:block;line-height:1;} -.carousel .active,.carousel .next,.carousel .prev{display:block;} -.carousel .active{left:0;} -.carousel .next,.carousel .prev{position:absolute;top:0;width:100%;} -.carousel .next{left:100%;} -.carousel .prev{left:-100%;} -.carousel .next.left,.carousel .prev.right{left:0;} -.carousel .active.left{left:-100%;} -.carousel .active.right{left:100%;} -.carousel-control{position:absolute;top:40%;left:15px;width:40px;height:40px;margin-top:-20px;font-size:60px;font-weight:100;line-height:30px;color:#ffffff;text-align:center;background:#222222;border:3px solid #ffffff;-webkit-border-radius:23px;-moz-border-radius:23px;border-radius:23px;opacity:0.5;filter:alpha(opacity=50);}.carousel-control.right{left:auto;right:15px;} -.carousel-control:hover{color:#ffffff;text-decoration:none;opacity:0.9;filter:alpha(opacity=90);} -.carousel-caption{position:absolute;left:0;right:0;bottom:0;padding:10px 15px 5px;background:#333333;background:rgba(0, 0, 0, 0.75);} -.carousel-caption h4,.carousel-caption p{color:#ffffff;} -.hero-unit{padding:60px;margin-bottom:30px;background-color:#f5f5f5;-webkit-border-radius:6px;-moz-border-radius:6px;border-radius:6px;}.hero-unit h1{margin-bottom:0;font-size:60px;line-height:1;letter-spacing:-1px;} -.hero-unit p{font-size:18px;font-weight:200;line-height:27px;} -.pull-right{float:right;} -.pull-left{float:left;} -.hide{display:none;} -.show{display:block;} -.invisible{visibility:hidden;} diff --git a/docs/api/phpdoc/css/jquery.iviewer.css b/docs/api/phpdoc/css/jquery.iviewer.css deleted file mode 100644 index d68c642..0000000 --- a/docs/api/phpdoc/css/jquery.iviewer.css +++ /dev/null @@ -1,91 +0,0 @@ -.iviewer_common { - position:absolute; - bottom:10px; - border: 1px solid #000; - height: 28px; - z-index: 5000; -} - -.iviewer_cursor { - cursor: url(../img/iviewer/hand.cur) 6 8, pointer; -} - -.iviewer_drag_cursor { - cursor: url(../img/iviewer/grab.cur) 6 8, pointer; -} - -.iviewer_button { - width: 28px; - cursor: pointer; - background-position: center center; - background-repeat: no-repeat; -} - -.iviewer_zoom_in { - left: 20px; - background: url(../img/iviewer/iviewer.zoom_in.png); -} - -.iviewer_zoom_out { - left: 55px; - background: url(../img/iviewer/iviewer.zoom_out.png); -} - -.iviewer_zoom_zero { - left: 90px; - background: url(../img/iviewer/iviewer.zoom_zero.png); -} - -.iviewer_zoom_fit { - left: 125px; - background: url(../img/iviewer/iviewer.zoom_fit.png); -} - -.iviewer_zoom_status { - left: 160px; - font: 1em/28px Sans; - color: #000; - background-color: #fff; - text-align: center; - width: 60px; -} - -.iviewer_rotate_left { - left: 227px; - background: #fff url(../img/iviewer/iviewer.rotate_left.png) center center no-repeat; -} - -.iviewer_rotate_right { - left: 262px; - background: #fff url(../img/iviewer/iviewer.rotate_right.png) center center no-repeat; -} - -.viewer -{ - width: 100%; - height: 500px; - position: relative; - background: transparent url('../img/loader.gif') no-repeat center center; -} - -.viewer img -{ - max-width: none; -} - -.wrapper -{ - overflow: hidden; -} - -.iviewer_common -{ - border: 0; - bottom: auto; - top: 10px; -} - -.iviewer_zoom_status -{ - border: 1px solid black; -} diff --git a/docs/api/phpdoc/css/prettify.css b/docs/api/phpdoc/css/prettify.css deleted file mode 100644 index d44b3a2..0000000 --- a/docs/api/phpdoc/css/prettify.css +++ /dev/null @@ -1 +0,0 @@ -.pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee} \ No newline at end of file diff --git a/docs/api/phpdoc/css/template.css b/docs/api/phpdoc/css/template.css deleted file mode 100644 index be24f08..0000000 --- a/docs/api/phpdoc/css/template.css +++ /dev/null @@ -1,516 +0,0 @@ -@import url(bootstrap.min.css); -@import url(bootstrap-responsive.css); -@import url(prettify.css); -@import url(jquery.iviewer.css); -@import url(http://fonts.googleapis.com/css?family=Crimson+Text|Philosopher|Forum); - -body -{ - padding-top: 60px; /* 60px to make the container go all the way to the bottom of the topbar */ - background: #f9f9f9; - color: #444; -} - -a -{ - color: #55A72F; -} - -li.l0, li.l1, li.l2, li.l3, li.l5, li.l6, li.l7, li.l8 -{ - list-style-type: decimal; -} - -a.brand, h2, .hero-unit h1 -{ - font-family: 'Forum', "Helvetica Neue", Helvetica, Arial, sans-serif; -} - -.element .span4 -{ - width: 275px; -} - -.namespace-contents hr, .package-contents hr -{ - border-top: 3px dotted silver; -} - -.namespace-indent, .package-indent -{ - padding-left: 10px; border-left: 1px dashed #f0f0f0; -} - -.element h3 i, .namespace-contents h3 i, .package-contents h3 i -{ - margin-top: 2px; - margin-right: 5px; -} - -.element h3, .namespace-contents h3, .package-contents h3 -{ - margin-top: 25px; - margin-bottom: 20px; - border-bottom: 1px solid silver; -} - -.element h3:first-of-type, .namespace-contents h3:first-of-type, -.package-contents h3:first-of-type -{ - margin-top: 30px; -} - -.element h2 -{ - font-family: inherit; - font-size: 1.2em; - color: black; -} - -.element .type -{ - font-weight: bold; -} - -#search-query -{ - height: auto; -} - -.hero-unit, div.element, .well -{ - border: 1px solid #e0e0e0; - background: white; -} - -.dropdown-menu a{ - overflow: hidden; - text-overflow: ellipsis; -} -h2 -{ - border-bottom: 1px dashed #55A72F; - margin-bottom: 10px; - padding-bottom: 0; - padding-left: 5px; - color: #e9e9e9; - font-weight: normal; - margin-top: 40px; -} - -h2:first-of-type -{ - margin-top: 0; -} - -.hero-unit -{ - background: #75a70d; /* Old browsers */ - background: -moz-radial-gradient(center, ellipse cover, #bfd255 0%, #8eb92a 72%, #72aa00 96%, #9ecb2d 100%); /* FF3.6+ */ - background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%,#bfd255), color-stop(72%,#8eb92a), color-stop(96%,#72aa00), color-stop(100%,#9ecb2d)); /* Chrome,Safari4+ */ - background: -webkit-radial-gradient(center, ellipse cover, #bfd255 0%,#8eb92a 72%,#72aa00 96%,#9ecb2d 100%); /* Chrome10+,Safari5.1+ */ - background: -o-radial-gradient(center, ellipse cover, #bfd255 0%,#8eb92a 72%,#72aa00 96%,#9ecb2d 100%); /* Opera 12+ */ - background: -ms-radial-gradient(center, ellipse cover, #bfd255 0%,#8eb92a 72%,#72aa00 96%,#9ecb2d 100%); /* IE10+ */ - background: radial-gradient(center, ellipse cover, #bfd255 0%,#8eb92a 72%,#72aa00 96%,#9ecb2d 100%); /* W3C */ - filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#bfd255', endColorstr='#9ecb2d',GradientType=1 ); /* IE6-9 fallback on horizontal gradient */ - - padding: 40px 0 15px 0; - box-shadow: inset 0 0 10px gray; -} - -.hero-unit h1 -{ - text-align: center; - font-weight: normal; - text-align: center; - color: white; - text-shadow: black 0px 0px 15px; -} - -.hero-unit h2 -{ - border: none; - color: white; - background: rgba(48, 48, 48, 0.5); - padding: 0; - margin: 0; - margin-top: 15px; - text-align: center; -} - -.namespace-contents h2, .package-contents h2 -{ - padding-left: 44px; - background: transparent url('../img/icons/icon-th-big.png') no-repeat 3px center; -} - -.package-contents h2 -{ - background-image: url('../img/icons/icon-folder-open-big.png'); -} - -.namespace-contents .element h2, .package-contents .element h2 -{ - padding-left: 0; - background: none; -} - -div.element -{ - border-left: 10px solid #55A72F; - border-radius: 5px; - padding: 7px 7px 2px 7px; - margin-bottom: 15px; - margin-left: 0; -} - -div.element.protected -{ - border-left-color: orange; -} - -div.element.private -{ - border-left-color: red; -} - -div.element.class, div.element.interface -{ - border-left-color: #e0e0e0; -} - -div.element.class.abstract h1, div.element.interface.abstract h1 -{ - font-style: italic; -} - -div.element h1 -{ - font-size: 1.2em; - line-height: 1.5em; - margin-bottom: 10px; - padding-left: 22px; - background: transparent no-repeat left 2px; - word-wrap: break-word; -} - -div.element h1 a -{ - color: transparent; - margin-left: 10px; -} - -div.element h1:hover a -{ - color: silver; -} - -div.element h1 a:hover -{ - color: navy; -} - -div.element a.more:hover -{ - background: #f0f0f0; - color: #444; - text-decoration: none; -} - -div.element a.more -{ - font-weight: bold; - text-align: center; - color: gray; - border-top: 1px dashed silver; - display: block; - margin-top: 5px; - padding: 5px 0; - border-bottom-left-radius: 5px; - border-bottom-right-radius: 5px; -} - -div.element p -{ - font-size: 0.9em; -} - -div.element .table -{ - font-size: 0.9em; -} - -div.element .table th -{ - text-transform: capitalize; -} - -div.detail-description -{ - padding-left: 30px; -} - -body.invert -{ - background: white; -} - -body.invert div.element -{ - background: #f9f9f9; -} - -ul.side-nav -{ - clear: both; -} - -ul.side-nav li -{ - word-wrap: break-word; - padding-left: 10px; - text-indent: -10px; -} - -ul.side-nav li a -{ - background: transparent no-repeat 5px 3px; - padding-bottom: 10px; - font-style: italic; -} - -ul.side-nav li pre -{ - font-size: 0.8em; - margin: 5px 15px 0 15px; - padding: 2px 5px; - background-color: #f8f8f8; - color: gray; - font-style: normal; - word-wrap: break-word; - text-indent: 0; -} - -ul.side-nav li.view-simple span.description -{ - display: none; -} - -ul.side-nav li.view-simple pre -{ - font-size: inherit; - margin: inherit; - padding: inherit; - background-color: inherit; - border: none; - color: inherit; - font-family: inherit; - font-style: inherit; - padding-bottom: 0; - padding-left: 5px; -} - -ul.side-nav li.view-simple a -{ - padding-bottom: 0px; -} - -i.icon-custom -{ - width: 16px; - height: 16px; - background-position: 0; -} - -.table.markers -{ - background: white; -} - -/* JS only functionality; disable by default */ -.btn-group.visibility, .btn-group.view, .btn-group.type-filter -{ - display: none; -} - -.btn-group.view -{ - margin-left: 20px; - margin-bottom: 20px; -} - -.visibility button -{ - height: 24px; -} - -div.element.constant h1, -i.icon-constant { background-image: url('../img/icons/constant.png'); } - -div.element.function h1, -i.icon-function { background-image: url('../img/icons/function.png'); } - -div.element.method h1, -i.icon-method { background-image: url('../img/icons/method.png'); } - -div.element.class h1, -i.icon-class { background-image: url('../img/icons/class.png'); } - -div.element.interface h1, -i.icon-interface { background-image: url('../img/icons/interface.png'); } - -div.element.property h1, -i.icon-property { background-image: url('../img/icons/property.png'); } - -i.icon-show-public { background-image: url('../img/icons/visibility_public.png'); } -i.icon-show-protected { background-image: url('../img/icons/visibility_protected.png'); } -i.icon-show-private { background-image: url('../img/icons/visibility_private.png'); } - -span.empty-namespace -{ - color: silver; -} - -footer -{ - text-align: right; - font-size: 0.8em; - opacity: 0.5; -} - -#mapHolder -{ - border: 4px solid #555; - padding: 0 !important; - overflow: hidden -} - -div.element div.subelement -{ - margin-left: 10px; - padding-bottom: 5px; - clear: both; -} - -pre code -{ - border: none; -} - -div.element div.subelement > code -{ - font-size: 0.8em; - float: left; - margin-right: 10px; - padding: 0 5px; - line-height: 16px; -} - -div.element div.subelement > p -{ - margin-left: 20px; - margin-right: 50px; -} - -div.element div.subelement h4 -{ - color: #666; - margin-bottom: 5px; -} - -div.element div.subelement.response -{ - padding-bottom: 15px; - margin-right: 50px; -} - -div.labels -{ - text-align: right; -} - -.nav-list .nav-header -{ - font-size: 13px; -} - -.go_to_top -{ - float: right; - margin-right: 20px; - background: #2C2C2C; - color: #999; - padding: 3px 10px; - border-bottom-right-radius: 5px; - border-bottom-left-radius: 5px; - text-shadow: 0 -1px 0 rgba(0, 0, 0, 0.25); - line-height: 19px; -} - -.visibility .btn { - text-transform: uppercase; - font-size: 0.7em; - font-weight: bold; -} - -.iviewer_common -{ - z-index: 100; -} - -@media (min-width: 980px) -{ - a[name] - { - margin-top: -50px; - position: absolute; - } -} - -@media (min-width: 1200px) -{ - .method .span4 - { - width: 345px; - } -} - -/* redefined because twitter bootstrap assumes that bootstrap-responsive.css */ -@media (max-width: 980px) -{ - body - { - padding-top: 0; - } - - .go_to_top - { - display: none; - } - - .btn-group.visibility - { - font-size: 0.80em; - margin-bottom: 7px; - display: block; - float: right; - } -} - -@media (max-width: 768px) -{ - .hero-unit h1 { - font-size: 30px; - } - .hero-unit h2 { - font-size: 19px; - } - -} -@media (min-width: 768px) and (max-width: 980px) -{ - .method .span4 - { - width: 203px; - } -} diff --git a/docs/api/phpdoc/deprecated.html b/docs/api/phpdoc/deprecated.html deleted file mode 100644 index 31e2596..0000000 --- a/docs/api/phpdoc/deprecated.html +++ /dev/null @@ -1,76 +0,0 @@ - - - - - -PhlyRestfully - - - - - - - - - - -
- -
-
-
- -
No deprecated elements have been - found in this project. -
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/errors.html b/docs/api/phpdoc/errors.html deleted file mode 100644 index 4f4c290..0000000 --- a/docs/api/phpdoc/errors.html +++ /dev/null @@ -1,1146 +0,0 @@ - - - - - -PhlyRestfully - - - - - - - - - - -
- -
- -
- -
-

-ResourceInterface.php3 -

-
- - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file ResourceInterface.php
error34No short description for method setEventParam()
error42No short description for method getEventParam()
-
-
-

-ApiProblem.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file ApiProblem.php
error118Argument $additional is missing from the Docblock of __construct()
-
-
-

-MetadataMap.php3 -

-
- - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file MetadataMap.php
error11No DocBlock was found for \PhlyRestfully\MetadataMap
critical13No short description for property $map
-
-
-

-Resource.php15 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Resource.php
critical25No short description for property $events
critical30No short description for property $params
critical35No short description for property $queryParams
critical40No short description for property $routeMatch
error45No short description for method setEventParams()
error55No short description for method getEventParams()
error63No short description for method setQueryParams()
error73No short description for method getQueryParams()
error81No short description for method setRouteMatch()
error91No short description for method getRouteMatch()
error99No short description for method setEventParam()
error111No short description for method getEventParam()
error427Name of argument $name does not match with the DocBlock's name $args in prepareEvent()
error427Argument $args is missing from the Docblock of prepareEvent()
-
-
-

-Exception/UpdateException.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/UpdateException.php
-
-
-

-Exception/PatchException.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/PatchException.php
-
-
-

-Exception/DomainException.php11 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/DomainException.php
error11No DocBlock was found for \PhlyRestfully\Exception\DomainException
critical15No short description for property $describedBy
critical20No short description for property $details
critical25No short description for property $title
error30No short description for method setAdditionalDetails()
error40No short description for method setDescribedBy()
error50No short description for method setTitle()
error60No short description for method getAdditionalDetails()
error68No short description for method getDescribedBy()
error76No short description for method getTitle()
-
-
-

-Exception/InvalidResourceException.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/InvalidResourceException.php
error11No DocBlock was found for \PhlyRestfully\Exception\InvalidResourceException
-
-
-

-Exception/InvalidArgumentException.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/InvalidArgumentException.php
error11No DocBlock was found for \PhlyRestfully\Exception\InvalidArgumentException
-
-
-

-Exception/ProblemExceptionInterface.php4 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/ProblemExceptionInterface.php
error16No DocBlock was found for method getAdditionalDetails()
error17No DocBlock was found for method getDescribedBy()
error18No DocBlock was found for method getTitle()
-
-
-

-Exception/ExceptionInterface.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/ExceptionInterface.php
-
-
-

-Exception/RuntimeException.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/RuntimeException.php
error11No DocBlock was found for \PhlyRestfully\Exception\RuntimeException
-
-
-

-Exception/CreationException.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/CreationException.php
-
-
-

-Exception/InvalidCollectionException.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Exception/InvalidCollectionException.php
error11No DocBlock was found for \PhlyRestfully\Exception\InvalidCollectionException
-
-
-

-Metadata.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Metadata.php
error13No DocBlock was found for \PhlyRestfully\Metadata
-
-
-

-LinkCollection.php2 -

-
- - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file LinkCollection.php
critical20No short description for property $links
-
-
-

-Factory/ResourceControllerFactory.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file Factory/ResourceControllerFactory.php
-
-
-

-View/RestfulJsonModel.php1 -

-
- - - - - - - - - - -
TypeLineDescription
critical2No short description for file View/RestfulJsonModel.php
-
-
-

-View/RestfulJsonStrategy.php3 -

-
- - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file View/RestfulJsonStrategy.php
error27No DocBlock was found for property $contentType
error29No DocBlock was found for method __construct()
-
-
-

-View/RestfulJsonRenderer.php4 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file View/RestfulJsonRenderer.php
critical31No short description for property $apiProblem
critical43No short description for property $helpers
error98No short description for method getApiProblem()
-
-
-

-HalCollection.php15 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file HalCollection.php
critical26No short description for property $collection
critical38No short description for property $collectionRoute
critical43No short description for property $collectionRouteOptions
critical48No short description for property $collectionRouteParams
critical61No short description for property $links
critical80No short description for property $resourceLinks
critical85No short description for property $resourceRoute
critical90No short description for property $resourceRouteOptions
critical95No short description for property $resourceRouteParams
error100No short description for method __construct()
error100Name of argument $resourceRoute does not match with the DocBlock's name $collectionRoute in __construct()
error100Name of argument $resourceRouteParams does not match with the DocBlock's name $resourceRoute in __construct()
error100Argument $resourceRouteOptions is missing from the Docblock of __construct()
notice100Parameter $collectionRoute could not be found in __construct()
-
-
-

-ResourceController.php4 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file ResourceController.php
critical88No short description for property $resource
error234No short description for method getIdentifierName()
error396No DocBlock was found for method deleteList()
-
-
-

-Listener/ApiProblemListener.php4 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Listener/ApiProblemListener.php
critical35No short description for property $listeners
error54No short description for method attach()
error62No short description for method detach()
-
-
-

-Listener/ResourceParametersListener.php8 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Listener/ResourceParametersListener.php
error18No DocBlock was found for \PhlyRestfully\Listener\ResourceParametersListener
critical22No short description for property $listeners
critical27No short description for property $sharedListeners
error32No short description for method attach()
error40No short description for method detach()
error52No short description for method attachShared()
error60No short description for method detachShared()
-
-
-

-Link.php6 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Link.php
critical21No short description for property $relation
critical26No short description for property $route
critical31No short description for property $routeOptions
critical36No short description for property $routeParams
critical41No short description for property $url
-
-
-

-ResourceEvent.php8 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file ResourceEvent.php
error15No DocBlock was found for \PhlyRestfully\ResourceEvent
critical17No short description for property $queryParams
critical22No short description for property $routeMatch
error27No short description for method setQueryParams()
error37No short description for method getQueryParams()
error64No short description for method setRouteMatch()
error74No short description for method getRouteMatch()
-
-
-

-Plugin/HalLinks.php12 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file Plugin/HalLinks.php
critical40No short description for property $controller
critical52No short description for property $events
critical64No short description for property $metadataMap
critical69No short description for property $serverUrlHelper
critical74No short description for property $urlHelper
error79No short description for method setController()
error87No short description for method getController()
error178No short description for method setServerUrlHelper()
error186No short description for method setUrlHelper()
notice508Parameter $identiferName could not be found in createCollection()
error531No short description for method createCollectionFromMetadata()
-
-
-

-HalResource.php6 -

-
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file HalResource.php
error11No DocBlock was found for \PhlyRestfully\HalResource
error13No DocBlock was found for property $id
critical15No short description for property $links
error20No DocBlock was found for property $resource
error22No short description for method __construct()
-
-
-

-LinkCollectionAwareInterface.php3 -

-
- - - - - - - - - - - - - - - - - - - - - - -
TypeLineDescription
critical2No short description for file LinkCollectionAwareInterface.php
error13No DocBlock was found for method setLinks()
error14No DocBlock was found for method getLinks()
-
-
-
-
-
- - diff --git a/docs/api/phpdoc/graph_class.html b/docs/api/phpdoc/graph_class.html deleted file mode 100644 index 5628f98..0000000 --- a/docs/api/phpdoc/graph_class.html +++ /dev/null @@ -1,73 +0,0 @@ - - - - - -PhlyRestfully - - - - - - - - - - -
- -
-
-
- - diff --git a/docs/api/phpdoc/img/apple-touch-icon-114x114.png b/docs/api/phpdoc/img/apple-touch-icon-114x114.png deleted file mode 100644 index 1506f6a668fbb2837c06b561895da248c310ac53..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 28338 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�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 diff --git a/docs/api/phpdoc/img/apple-touch-icon.png b/docs/api/phpdoc/img/apple-touch-icon.png deleted file mode 100644 index 2d320cb5e1215894ef37cf8c6fd7a0085eba06f3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8358 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 LNHCv2rc(U_{c|km diff --git a/docs/api/phpdoc/img/glyphicons-halflings-white.png b/docs/api/phpdoc/img/glyphicons-halflings-white.png deleted file mode 100644 index a20760bfde58d1c92cee95116059fba03c68d689..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4352 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 diff --git a/docs/api/phpdoc/img/icons/arrow_down.png b/docs/api/phpdoc/img/icons/arrow_down.png deleted file mode 100644 index 61505adc46d8fa4156d9b31831ebe6770f0e2757..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 606 zcmV-k0-^nhP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iph( z1qcLRmoAwA00G`fL_t(I%cWC2tJ+``e%^eL7t$KUBw$9t*+0;sKcG;!o#ftvQ=v=O zPEznkbn((fBwn}RP@zy12dlPS%uu3(Akjdnjb!m7Z{AKf?FH|p;Io_q=Wq_^JkLWo z=Qsxf&cxXRNV#0TVT@UX5OB_sBngrvNpr^7o%nCPR4T2dTrT%m)3hhWViEKC9B~|j zF^1#uh$Kmn&1OL6a}1fD2f7I*U{_szDuTQUi!ZOqfjWA01!nH;yA``w*%)K zs;Yug3Q-h6DTN>iAcUaZZvWhDHqV4=wffsM&FACsIL_zuX_G9=kR&O+_4XuD6w&YZ zlPHQVyWQ?u0DxMp_GP_Z-y9AHSe6Azl0XPax7|XPWh@p8ESJmcPN(zf4hxRsTn&fA zuar{gx(-1QAP9d+5=9YV7-BM+jB~l%>ytFDR;#zJ>#hvLKqiw(w{yPNyJ*ytHlGe^5w{<6H+p@P5DF!?G;MvWzec z5d^`9X0!S6zm#a(_8ZrA2b!kAG);J(_suYjSEqWV`y{Gq+Kbt2=5Dv!N1CQx)a!M2 sQpyjxu~Ml#WsK2AqtU(B3+LMT58IsRj2DXS7XSbN07*qoM6N<$f?9MBJpcdz diff --git a/docs/api/phpdoc/img/icons/arrow_right.png b/docs/api/phpdoc/img/icons/arrow_right.png deleted file mode 100644 index 60c5927ebf63f388b45315cbc4cc56a77b9f903c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 628 zcmV-)0*n2LP)Px#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iph( z1qT;gv2%z300Hz#L_t(I%axPMt5Q)EhkyI*EgldQ%_FEFNFoiwK|$ce2O<`vO%-#J z*f5+m4E!U)pbO5VW@l24A`$5(O~gT>V;_X?vwa*%Pb1@|_l9>(HfyjxzP0vRMAI}J zBA?HH1aP2?dagoht>5TwNDO6R(YPG_8y~cXI2Im}{b9lX8_ zilTha<#MhY4K|w%7K;TIiv<)#fubnjoMSSXfKrNJF!)f@w4a$w<}m=UV}t2*irH)i z#ux-a_&XQ9UJr-E0ZJ)MCKDfz$D3;n4h4so5CWso2)Ek}0I1jNHC0vbmrA9tCkBKN z=yW=Wq6k3{z!-zoYK0_8=yW=};c)o2TrR)5TEmVFD5YSGK@>$e91e)0h*qoB@AZ0b zWLbWH{Ea67#u&_IGwgOdw%aYL)#{IazyG>ct9`j{4^CR}cs$tcc4#yjzXyZC2U(V% z|8JH50ce_rZnulkX!Ofwvpp*oi2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4`J+jIM*dB6Xqg)}~| zJoCIb=eAt%N2Sc0*LR=)Gr>jXc+U1{2EKOY&`?3wi#H~`UdZcts5G`~(Smi^VXH-t zNnA2H`u*=l#_~yWzkbC{@|eWZU~_(X%TKE^b)f2_P*>quOSp`{Hl;21nz{an^LB{Ts5!Fr;& diff --git a/docs/api/phpdoc/img/icons/constant.png b/docs/api/phpdoc/img/icons/constant.png deleted file mode 100644 index f5f180d5a9b09a19b5ae44ad64a1fdceb6a86d7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 496 zcmVrl1?U*0YQ8KBh3^hnN3W5 z2%|~HXz55n-@#z_4GhF=O%)o!1~F5NWx9pcZ;~F+?Pl3!f;~`hPjKs2om2M?&}Yi{ z)a|hNOZ<{ll;no}Bk)fO?j?Pd^dsz_V-;AIg>Bmyh7qUYr=-X5?0(D-NtDZF=JPoK zm&=9SZbzX|h$DHpwjoI*lSww44g39`Mx%jgn$+ucGMNm9VNk2pa2$tryNzwzJxRTg z;8l{SR;vIEhr`H=-EJ4(_i-GD)oR6Jv3R?-aYHZ~jUoig<&w!{f+RYf4giC};OT}S zkx1Zq9*4t$R;z_&Su~qXve_)-@tE~`O*);X-|ureoq}Sq`0d7mBub?cv)PRE`3%5z zyCt8`Q>j##PN(?3kLP)~uKN-h;x$auB$vxYtfW$@*foCnJuN{HCvYhz#zuJz@P!dKp~(AL>x#lFaYJy!Tsagqt+F;zg(Vd_Ma3C z(nGFZm^~mf*5 z)sz1pn_UOj3v?y|2J0zg2h4lZXZ~Oq6V)2(>o0PAi0Mp zcm2O}aQ*+4X;%Lqp4$EY_?&u@^n?8R{_$;a_<;NZ^2eq1Gykv3ut72B2M+tMZ(scX z!_&L}cQnO<)vrjkgy>B%C#)Z+=I#Bf|8MMChN2ecXJi`Peo$P2?0#|mG=^J|^}*N= zPwo1DaqZOq$7k37KfSmE=*JoV_w{7|UykNZn0k89t1|6?Zs{cGcU*1(=|3{P60d%I dd2d6B_y4`!nK<=Rk_TaW8yL|`1mgK1y#VW>cs>9C diff --git a/docs/api/phpdoc/img/icons/file-php.png b/docs/api/phpdoc/img/icons/file-php.png deleted file mode 100644 index c323f09f66241a28d61f1d2c8e90be0a68126bb6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4017 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 L;uWgGz+epk&R;19 diff --git a/docs/api/phpdoc/img/icons/folder.gif b/docs/api/phpdoc/img/icons/folder.gif deleted file mode 100644 index 2b31631ca2bfec3a8afb1bfdd4f8ed4c5bcc3a18..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmZ?wbhEHb6ky=hKW2GJ7 I#Kd3?0MGg2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4c?q7?3B2Xp1x8ImHETXz54QVYrPgqHx8=(z e>Gl76{l!*pI92y$_dTH37(8A5T-G@yGywo6mxkK_ diff --git a/docs/api/phpdoc/img/icons/icon-folder-open-big.png b/docs/api/phpdoc/img/icons/icon-folder-open-big.png deleted file mode 100644 index fae384ef4df761b2d6cc250ed5787e430ae91663..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 232 zcmeAS@N?(olHy`uVBq!ia0vp^azHG`!3HF+C+nOCQtLfk978H@y`6TEw^f11_3i;d ziGzYN2L&Zg3QDws(66dq&SgShn{Thb{zRo^(j5Lg&dD7z8Ed<2HaxncvF_0qB|qh( zD^{Iwcon{}=b8RLEj=%X$?owoQ+czMDqpDz@out+{J4%~%}Jdw83lFk?!Av|@026WQIOdE8_{3R(~E4X}F}*cK0{Nlc(N@tWx{N75ZIyLFkD`ce?_+omU+4eIu&X fef&+H?MME!>ysALYPH`1I-SAO)z4*}Q$iB}E$LkN diff --git a/docs/api/phpdoc/img/icons/icon-th-big.png b/docs/api/phpdoc/img/icons/icon-th-big.png deleted file mode 100644 index 04b0ad872a98de63bc0e300e627ce69a2a209471..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 106 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fhMq2tAr-gYPBH{4<6!#zfBD*P z%ML8Ga1?(i);mdUy45w?2d5KGCQHxw$nZHi?xXOW{3u1P>qQzNK+O!Eu6{1-oD!M< D6}BRE diff --git a/docs/api/phpdoc/img/icons/icon_template.svg b/docs/api/phpdoc/img/icons/icon_template.svg deleted file mode 100644 index b0428aa..0000000 --- a/docs/api/phpdoc/img/icons/icon_template.svg +++ /dev/null @@ -1,93 +0,0 @@ - - - - - - - - - - - - image/svg+xml - - - - - - - - - Co - - diff --git a/docs/api/phpdoc/img/icons/interface.png b/docs/api/phpdoc/img/icons/interface.png deleted file mode 100644 index 51a3a1762db628e8cbbfb4d933a74b4d962d2d7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 281 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!61|;P_|4#%`EX7WqAsj$Z!;#Vf2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR40E|;Z~{{z_~j>MQR++0q{n_jdZ_~Xzv)82ln zir1^4FSoop)7kP4q||D^oYExqqT%4L-+qnX2?p zUk71ECym(^Ktah8*NBqf{Irtt#G+J&^73-M%)IR4|3mlps%(3Z75trJZsonk=m!SRtUbjIcd*Gd{GD-MU&5kK`Fd$; z&qe*M;R)u)+B55zu54SYqS>Xy$aOeCxaR(R@13(xM|fE^lFf7PnUNSzTjBx@u1_}0S82W4^{;r-{cRJTTl!v}kb2YK z*1sl?dBGmby>EB*DR3}+u*rYhnEoKO=X=4viDB0(R!$ZFviy;n_U!uqz48-dSM>2+ S-W3cC0R~T3KbLh*2~7ZLUYG9x diff --git a/docs/api/phpdoc/img/icons/ok.png b/docs/api/phpdoc/img/icons/ok.png deleted file mode 100644 index 39f287ab19b8bcdc156ea56355a95290d04f0ee8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3685 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 AIsgCw diff --git a/docs/api/phpdoc/img/icons/search.gif b/docs/api/phpdoc/img/icons/search.gif deleted file mode 100644 index eef46fc9ee10547bfa2da348f81b4c83f19e65a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 152 zcmZ?wbhEHb6krfw*v!MQVZ+APuU|iW_~^rj4_mixJ96acuV25;ojZ5^`i(nx?(W*P zd;k6e|NsAIfC0syEQ|~cJPbM@0gxFCEUptydamAU5nbG%&zz z##7bH4$=1vId^*V*v!xR>*{?7mqKrCnmdg!}G z=IXm8Sn&!;akH?purU1n%JB2k%b%|wU4DOV*XpD9FQ1(YRJQ}B0U&^o4e)SH>*-Ur zh)`kY;$&s`_k)2EsF{J8m4Sm#kV96(KvF=6-{ZWnu*|swyBJ`G00a;d%-Q;G(RnJC zk*X~0{H%Zf{A2k0_b@F4v6je+t14+fASCR#!a*Y7?B`u`upwYzT_j5PRxk@1k>@6WFcf574M53UU$ zfM5nZ{PpG4FOc(@{(fdKQRiUz`t=9HgNKh8zJB|~V5B3;@aO9@i00pa89smd@*SEs z7ytqYX29h)kFR`S`1=Lu?N1E0y_w^~*-1fljz_B$LUvK}k?BNXe#Y!m=zM!!V#}8bncK5m;8VP zw86G*RI63?Cd%b9bX|ueNlZ|wR6rj|r_)VIP@r2imh3?SN+^{|kY%~8B{maJ@F*OK z&VH9LwOeGt#DRjj0~v~8`>iO7!Ybi;zE$va`A^T#yW`y44;k^#O~K5*jD=qcUhPSc zvyy~q;5H_1WT1l~cqje9yfa+l!hu6xjdOJ8s;8E^+=QQ$tw p?%p!Hy#YapB=@+^9(46X{{RQg%9y;OKjr`c002ovPDHLkV1g7l326WT diff --git a/docs/api/phpdoc/img/icons/visibility_private.png b/docs/api/phpdoc/img/icons/visibility_private.png deleted file mode 100644 index 386dc2d879d20cf85e4eeaaeb29e66bfe8398995..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3433 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 diff --git a/docs/api/phpdoc/img/iviewer/grab.cur b/docs/api/phpdoc/img/iviewer/grab.cur deleted file mode 100644 index ef540be09383a215ba21287683ae956b74a6dbbf..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcmeHEF%H8Z3_L;+LM2k9N*yv~>~H#wK9i4B>Jy?)*;1Rr5Mf~HSVzWizBA$iDEg)e zv@Up@fGdC-B|(IIaVjw`XMnR4do4(}ceLED$#?I4PhZt?V;F{(zNyX4aU6>oTI<~I zR%1+|Z@pO>D9unx@mz^sV2R6KAHrH&a3w(Uah_+1dcf$ic$W0J$AsEGc`x}F-{G8# oT0W#ZA~$;zN&n?%4r~@-v(K$0B;Q#;t diff --git a/docs/api/phpdoc/img/iviewer/hand.cur b/docs/api/phpdoc/img/iviewer/hand.cur deleted file mode 100644 index 1a5bafb5263fd4937dda4098b04aa5c70e2de924..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1150 zcma)3OKyWe4E694LIn}22q6~8?0U4`qB$BzVUYuLnN^5A#g-vqrbZ8co}UNC0FIu^ z1?Y|NodI+J@I{~!RsQPaynTKEFe0{|*)R-iM9cJuPktQ*F&}vmxJX7;nU}sFz|xzG*A)o1}vy~Np8!oh{{D) z3FWrSE(G-lOIo^%@l%Jh z7d(bKZD(=f(+rDu3Ibk!p~fAzvAEw(G5oFaf>VGX;I$X`=G^#MhKzfwaaX++^R_aG z{23g@-KfbsV!rlS8y~jNpC$Q98001E5Sq?VpxukSs-?)+t$^aeGL+RsprA4wk<#_> z_+u(WTiH*vZ^%;_bKH_BUEq}jd#?-l#9J=q_v{?VaI4}Q9JQ|FoaxO4M#r~&(9l-@ga5_qddH0^Pp)3D%%13U()$KPZ9mfuKHeN zh|FV%AcKd9$Xte~JpHr7ISdEsS=dbylRpV}b%EG*(H$Zm7BrYE89CoGzCv2mgg*7U?}T-eQj1 z{ctQepE}YD%L6}S{pbtWcxoXGX*qRvIs~7NleuJ1rI2sTU9}wgEO}#naM{Mwl$wh8u zCnBy@;!tLlFk2ANZy*yRh*u1IjEu7sgd^u~j?-pP>cuPS5S69F5h60HO2`84nde#W zyHhV;*NN!tY8*EZeXCkX$LB3TNWEh+HIj>(aWc0CrwBgBQY@5_fO(q}ggUVHfHYwh z33cBmty=DP=A9=gECUXndMm_NP*e}Z-LCDyS)!}~n7b*S3$R(WUj{y!TOYyebROJ- zFF$p&>5+Q7DfKeS+K_mst_KprM8H(Hy%~al3{|Z#A5JZTYe-7!V4F>!)KgSFrn=vN z3kCIkDE(K!G*^RwzlwE`Dy#7rUC1u2#kz=0tng2mHP|cZPQ4qN4qPSy<|wW2D5KC{MlR z;>)=A5V)!Cz;#udS#FfKqnHHD=_R1Ptpjzf{nOgnDXf!ZtKqUo3Ky}YM}T&xUI8_p z+{#DD)pj7q40-gM-UA6eVt~J6Ck37*j6+@9f{jOSVfEgWC}V(*7I~i&Dx8uU4S&P_ z;3=qW>uyHVjD_fF#+pz$KVvi(@T$|6gmQ;1NkX6Jb)Y}^@BGWy!Sjrgf9<#ho=bDz zCj-9w{fH|?2J}+O500000NkvXXu0mjf*RRDb diff --git a/docs/api/phpdoc/img/iviewer/iviewer.rotate_right.png b/docs/api/phpdoc/img/iviewer/iviewer.rotate_right.png deleted file mode 100644 index 7a6c829871d058af5a5ca0ac67256c259f84c5ac..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1482 zcmV;*1vUDKP)W@q8L24va@vW@P7*!=(&yIADtgIo?`IW@@z#oP%kAO5~e4>aSvdau$keO zelrxe7h>a?XEPGL-8ZvUK7S5JxO_SC%cam%h9U3nOynA8Bd1~p@(p_slER=;FN42~ zVT$Cx%L&IBfqkNPU0Q$wV<=M8^Ktsd`-seX8%Hx4(Mza9RSeQph6Cvg*A2_?bs*!Z zJm9Mh7vz)H#bKgf96Z*=%6lrx!F>}8+<9p(ZW^~EGIuaSuQBYWfCsY}!gCl75#iYs zn4X1YwmkE{L{qbYU7_|vC;44Kc>_>d53G;Ofy>H6K72&Q1n)K0hYkOJ{}5yueQ_kO zAEZ3kO@`uTdQ^;QD4P$Xc-46$f7y>g|g44T+ z#BgE=@!>Z#-vKoL6Wa&pE*R*#HWno`0s)tGNL1G$LZyexFDGPt0qahH^Hl0tOywX% zlsY1!jA8k4hEa>zCTrlAtqC<~Car`X>shKzaMo5pP+|!}lx4#8x7#jb=yVHAyecTTC4J8t z#9H#H1x)ab5$qRn{T_~Gwh%$&8k>4#Nl^>etY1&RH*c@JV*VdWES08K(6hJ3ua1F+ z1Vqx@pUkersqB_Ip|BQ5mEtYg?Pld26u-(ZDhIXZN8p8vpywZqUmXq21K`XJ6VBRD zSPjgUh_hsuo0Zq@#H52sg=lQDK%p}U0=)MqxPXrz3y|HcLaYr6jTyT{TGH;2&kl$g zvn(tPnZ+iUo13A~-oxKTMnQmAi+~YaKrsopkYC+_iv!`6FZ*8at59p?CSTLD^ce@1hVDp0-#Q zq7i&EGSIAWEAo-(3@vR~e8qHMf3DS%&Pzg-H4FABh2HRK5QhTu_A0SBL~)<~@sXQv zl!l*(`MH4my)*cGH#$9gu8S$5cCU4I9uNy}^C|I;^|0b5vYngtVB^%;d7vlsx1OAw ktS2S0?VM~5JkO{63m1~IVD>3BuK)l507*qoM6N<$f)6RO6951J diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_fit.png b/docs/api/phpdoc/img/iviewer/iviewer.zoom_fit.png deleted file mode 100644 index 364e01d90eae19584713851314629f2468198e9e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1252 zcmbVMZD`zN9M7nO!F>6)Qu>rmKTa$KDx31r-tX6e<%`(6Krd_QfiW`8t`1_@uq7ekl83AbH+? zzu*7$$#_?1`>KY!8VG_|C2bSZcx-mx`sMihAai~i59?7fi@MD`D#97s?^ptvbD@%0UaWlEb9Y?!POak>Kac>j_lvC`$F%JGkXW>_ZEGx zJom!Kv#(7V2O9tK-kSZb!BUHpo@HF_;W5I?7`%^kn|fV6LyKC%38?;(5V z!PU9ZKS#&d``e%Ktf-E%=q0M&EZqyy}ir$_H&JcW2fJ{{PgiX z8-IUUIXQgrq&9v}_F_|k9sDEvsw97zUz^v|wk^6~k{(E}g+-F{ISKr))j<47BXr41~e0blAr&bSs z|IrSo^7@evzS-=(@x`Huqc2r99GkQ^PabxeDqKE2-7j>wsvG2m_N{Pyfo(Z~3KXY?;^Pc&YH??aJsCHEo`3 w8eZ!(AMJatv3kpyYro>2$M)>r+u)qoRbjGiisBQYX$xZ(3D5f)$iQF?09S=3^#A|> diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_in.png b/docs/api/phpdoc/img/iviewer/iviewer.zoom_in.png deleted file mode 100644 index 78993327c62ddd64e7fe33bc1b0d469ef9e17f30..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1420 zcmbVMeM}o=96n$mLI`O1*jPqxokAS8_t9QIP6}&#?I^6YLL;DzakN*s!1Zp|0}9Rz z8rh;F0cBg38IU39T#zkeLnml8hzMCSG?@^xXdOBYVGI|HL|oz(DEbH4A6|0zem&3g z`+V;WTfxD&nA8{m0OHKKM4>pQ1>fi>@%sWi*eedZ1Y?O%#JYqAlBWQjldYscGecHU zg%s&*JUU5b0YHS4wwDMcmP5FMWn^R!Bl9wx$OeF{94|*YYA6A$q^fAQR`OuPF9B(% zR#J>vU<+rUs_EP&o+@f8usfP+92%!2CmYQ2;-UaU2_)!cYTX{(tCg(l;^I8G4N1Ut zh)|=IY&cb7v4IAbr$9^wOC7Kh29<~mkt? zy6{56v}sFRX(iQyz~K<#uSL*ic3n>tk$HCK_ zK(lTzs7O|_b%ItRdb$w;!&xj_!fwxIqQsOzUXp_l84NK@Fs^m9M<}HJbz@t!$KJ?M zP$A`E>v)G)57)jBS6;_)Fv2Ks*P|kY8`^A2u!ZfsWAnHVJ68Y*ZF@k28qrD)nZSf_1^Pw#| z@pZkmCA&G}0&7bcjq%x*?aRCV3irha4o~M_DArx{=C$ijm7gxpJfn{2L~$I+EADGSEAJts^bthXdZ0!+7(pGrKca+s`)MokNH6@80m`S3a@u zY1ygFvFkgB8j(NleZ>ubn=|IJ|7-yHzY}KZV-M0lk+#l6X1~TQy|p*uWp8(@{ii>t zUM%g1pU@A_-dyI62l_3g1J;f*Z-2$!(N|(ifOlu2-fw+1YIXRfE0Nik_Z$MUT=6@` he~f-qo>Y;tmQ(?tGoVp(DLyXve>58lh(UdY?;kaa{Rsd7 diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_in2.gif b/docs/api/phpdoc/img/iviewer/iviewer.zoom_in2.gif deleted file mode 100644 index 5d596181627a30344f9783d466ce0558279fe729..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 90 zcmZ?wbhEHblwpuzXkcUjg8%>j>wsvG2m_O4Pyfo(Z}}I`;fT1UbHL~G(^^jrxfIDc qOSLxju^l&BbLLyj{a>m(=kzlMwFoEmw|glD9`i8f>~-Q|um%7;9UyH0 diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_out.png b/docs/api/phpdoc/img/iviewer/iviewer.zoom_out.png deleted file mode 100644 index 893f3502baaab667354fe8b560c1712b72630836..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1416 zcmeAS@N?(olHy`uVBq!ia0vp^av;pX1|+Qw)-3{3k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+m{T%CB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxKsVXI%s|1+P|wiV z#N6CmN5ROz&_Lh7NZ-&%*U;R`*vQJjKmiJrfVLH-q*(>IxIyg#@@$ndN=gc>^!3Zj z%k|2Q_413-^$jg8EkR}&8R-I5=oVMzl_XZ^<`pZ$OmImpPA){ffi_eM3D1{oGuTzrd=COM+4n&cLd=IHa;5RX-@T zIKQ+g85kdF$}r8qu)}W=NFmTQR{lkqz(`5Vami0E%}vcK@pQ3O0?O#6WTsddyBS)T zxj4DGI+;7U8WbpSnwXlJx+y{RrjQe2`as9%gOUbPQh^Bp(;tWlPxwF%JnN+90rN`{ zFk|eTuyZ2=1LH1F7srr_TYIJ*^g8Sy&?e2@*d%abWdMgri<5t&U4#0<`~ZPHTulKV zL_SFVVrt@l5PQLUVYuUp3a@^r?zky&+EXok@RH&z@w!8r$f$z%0{cUx;M)M%(BO@dlSAr|x|-`3zUuyW0)IVtW>|s>WVT?mGEc zSkr=`cGH2CXUi731dH|WWa9iWg>~1jL@c(3*I%OB-d`n9ld0_~{X@e~VM+?bvqa&xDF~4=3Dc{-t;PQB<+c zv78v6y_Q$sW5p8UNtB8n}}+(%+^^VTDLxDs_M@V zktZgdHP!#l9(Qv}igT01!>vuNAL^777;7#{%n;%?`4GGKfzXddg$9fTvuy=L>XpA# emo~({32$Iz;FK4L4Ckl>myMpTelF{r5}E)fw)-Uj diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_out2.gif b/docs/api/phpdoc/img/iviewer/iviewer.zoom_out2.gif deleted file mode 100644 index 77ec19af216c5525438e73e4fafef1ce08db3cf3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69 zcmZ?wbhEHblwpuzXkcUjg8%>j>wsvG2m_N!Pyfo(Z}}I`*>bCU^SwRQTrH10rZprj VQ(Lv|A^Y)9KG(nX7PB%~0{{a@8tMQ5 diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_zero.png b/docs/api/phpdoc/img/iviewer/iviewer.zoom_zero.png deleted file mode 100644 index c981db6d690774d0c2e67e21c9081d5c89b5fd2d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1091 zcmbVL&ui0A9M4pSOy+USDH`Jt54L&lWo?(ZTAQSq1v^VuUA;)t~d_LcwSBo>#!$V_3 z9LEjkPwFMM?vLJ`gY0_@JiN=6Jv3LLv!qU2W`Mb@O=_6WyXHJDVbfl^_!>`f+;-b3 zS7@bhO0kF=HzS*P+w~cm6!@+QT}TTXPE`s;ULyhK6LAo; zKoamt7>CkCDwR6QBLIO2kO)x>rW6S&0Pwv>U}}L~S4z6k(_*Kz(4f>;M6uOs#amLG z1oI-4WjW$ND8?*e;gUzqcFYS8^%-;=T7lzJhj@I%Xx2!RrUmBdMhLE7C~OjYVJ}fE zWn$a(MHmO7>qc>PtwUPEf85y8IxH{wSS;a?Gy{v(qkgClX1V*fP-MuwQBDUAD~h?O z6RYWBkLLBX!2ZN-$5tc*P9}BL$f+qc2OyjTdQR0O9U94`B&o2^u@x4nAeBw1(2x=n z5avKO31v+Nl7u7!=(60$=Dm=bo`w6m4%6*n!9THz7GRT-piIbOzXOU5LP^*lKCjIt z_&LY3Nh^$svk|L~1LqR9jexj(H@k|ng?bW90+iEJ2GWfvYE_c6auz`iY1tG)S)qru z|0iQ2b4H9>hb!)51ol8qidf>uee2NcllE7&Y7PpcX!=7_qbu-x&Nqo^YXsS zx4psB1L(rH2OVv_Ry|wWf8@aTYwPTIZ{+>+x4F)XFBxU;`RVIF##f(pxPd|L)0^?x S8}D{hqp{BCX7q<@b>%mi3|d_P diff --git a/docs/api/phpdoc/img/iviewer/iviewer.zoom_zero2.gif b/docs/api/phpdoc/img/iviewer/iviewer.zoom_zero2.gif deleted file mode 100644 index e56c670fe62062458276fab5512701433b37af4e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 98 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 diff --git a/docs/api/phpdoc/index.html b/docs/api/phpdoc/index.html deleted file mode 100644 index 35603b5..0000000 --- a/docs/api/phpdoc/index.html +++ /dev/null @@ -1,96 +0,0 @@ - - - - - -PhlyRestfully - - - - - - - - - - -
- -
-

PhlyRestfully

-

Documentation

-
- -
-
- - diff --git a/docs/api/phpdoc/js/SVGPan.js b/docs/api/phpdoc/js/SVGPan.js deleted file mode 100644 index 4966b99..0000000 --- a/docs/api/phpdoc/js/SVGPan.js +++ /dev/null @@ -1,232 +0,0 @@ -/** - * SVGPan library 1.2 - phpDocumentor1 - * ==================== - * - * Given an unique existing element with id "viewport", including the - * the library into any SVG adds the following capabilities: - * - * - Mouse panning - * - Mouse zooming (using the wheel) - * - Object dargging - * - * Known issues: - * - * - Zooming (while panning) on Safari has still some issues - * - * Releases: - * - * 1.2 - phpDocumentor1, Fri Apr 08 19:19:00 CET 2011, Mike van Riel - * Increased zoom speed with 20% - * Disabled element moving functionality - * - * 1.2, Sat Mar 20 08:42:50 GMT 2010, Zeng Xiaohui - * Fixed a bug with browser mouse handler interaction - * - * 1.1, Wed Feb 3 17:39:33 GMT 2010, Zeng Xiaohui - * Updated the zoom code to support the mouse wheel on Safari/Chrome - * - * 1.0, Andrea Leofreddi - * First release - * - * This code is licensed under the following BSD license: - * - * Copyright 2009-2010 Andrea Leofreddi . All rights reserved. - * - * Redistribution and use in source and binary forms, with or without modification, are - * permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, this list of - * conditions and the following disclaimer. - * - * 2. 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. - * - * THIS SOFTWARE IS PROVIDED BY Andrea Leofreddi ``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 Andrea Leofreddi OR - * 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. - * - * The views and conclusions contained in the software and documentation are those of the - * authors and should not be interpreted as representing official policies, either expressed - * or implied, of Andrea Leofreddi. - */ - -var root = document.documentElement; - -var state = 'none', stateTarget, stateOrigin, stateTf; - -setupHandlers(root); - -/** - * Register handlers - */ -function setupHandlers(root){ - setAttributes(root, { - "onmouseup" : "add(evt)", - "onmousedown" : "handleMouseDown(evt)", - "onmousemove" : "handleMouseMove(evt)", - "onmouseup" : "handleMouseUp(evt)", -// "onmouseout" : "handleMouseUp(evt)" // Decomment this to stop the pan functionality when dragging out of the SVG element - }); - - if(navigator.userAgent.toLowerCase().indexOf('webkit') >= 0) - window.addEventListener('mousewheel', handleMouseWheel, false); // Chrome/Safari - else - window.addEventListener('DOMMouseScroll', handleMouseWheel, false); // Others -} - -/** - * Instance an SVGPoint object with given event coordinates. - */ -function getEventPoint(evt) { - var p = root.createSVGPoint(); - - p.x = evt.clientX; - p.y = evt.clientY; - - return p; -} - -/** - * Sets the current transform matrix of an element. - */ -function setCTM(element, matrix) { - var s = "matrix(" + matrix.a + "," + matrix.b + "," + matrix.c + "," + matrix.d + "," + matrix.e + "," + matrix.f + ")"; - - element.setAttribute("transform", s); -} - -/** - * Dumps a matrix to a string (useful for debug). - */ -function dumpMatrix(matrix) { - var s = "[ " + matrix.a + ", " + matrix.c + ", " + matrix.e + "\n " + matrix.b + ", " + matrix.d + ", " + matrix.f + "\n 0, 0, 1 ]"; - - return s; -} - -/** - * Sets attributes of an element. - */ -function setAttributes(element, attributes){ - for (i in attributes) - element.setAttributeNS(null, i, attributes[i]); -} - -/** - * Handle mouse move event. - */ -function handleMouseWheel(evt) { - if(evt.preventDefault) - evt.preventDefault(); - - evt.returnValue = false; - - var svgDoc = evt.target.ownerDocument; - - var delta; - - if(evt.wheelDelta) - delta = evt.wheelDelta / 3600; // Chrome/Safari - else - delta = evt.detail / -90; // Mozilla - - var z = 1 + (delta * 1.2); // Zoom factor: 0.9/1.1 - - var g = svgDoc.getElementById("viewport"); - - var p = getEventPoint(evt); - - p = p.matrixTransform(g.getCTM().inverse()); - - // Compute new scale matrix in current mouse position - var k = root.createSVGMatrix().translate(p.x, p.y).scale(z).translate(-p.x, -p.y); - - setCTM(g, g.getCTM().multiply(k)); - - stateTf = stateTf.multiply(k.inverse()); -} - -/** - * Handle mouse move event. - */ -function handleMouseMove(evt) { - if(evt.preventDefault) - evt.preventDefault(); - - evt.returnValue = false; - - var svgDoc = evt.target.ownerDocument; - - var g = svgDoc.getElementById("viewport"); - - if(state == 'pan') { - // Pan mode - var p = getEventPoint(evt).matrixTransform(stateTf); - - setCTM(g, stateTf.inverse().translate(p.x - stateOrigin.x, p.y - stateOrigin.y)); - } else if(state == 'move') { - // Move mode - var p = getEventPoint(evt).matrixTransform(g.getCTM().inverse()); - - setCTM(stateTarget, root.createSVGMatrix().translate(p.x - stateOrigin.x, p.y - stateOrigin.y).multiply(g.getCTM().inverse()).multiply(stateTarget.getCTM())); - - stateOrigin = p; - } -} - -/** - * Handle click event. - */ -function handleMouseDown(evt) { - if(evt.preventDefault) - evt.preventDefault(); - - evt.returnValue = false; - - var svgDoc = evt.target.ownerDocument; - - var g = svgDoc.getElementById("viewport"); - -// if(evt.target.tagName == "svg") { - // Pan mode - state = 'pan'; - - stateTf = g.getCTM().inverse(); - - stateOrigin = getEventPoint(evt).matrixTransform(stateTf); -// } else { - // Move mode -// state = 'move'; -// -// stateTarget = evt.target; -// -// stateTf = g.getCTM().inverse(); -// -// stateOrigin = getEventPoint(evt).matrixTransform(stateTf); -// } -} - -/** - * Handle mouse button release event. - */ -function handleMouseUp(evt) { - if(evt.preventDefault) - evt.preventDefault(); - - evt.returnValue = false; - - var svgDoc = evt.target.ownerDocument; - - if(state == 'pan' || state == 'move') { - // Quit pan mode - state = ''; - } -} - diff --git a/docs/api/phpdoc/js/bootstrap.js b/docs/api/phpdoc/js/bootstrap.js deleted file mode 100644 index c832ccb..0000000 --- a/docs/api/phpdoc/js/bootstrap.js +++ /dev/null @@ -1,1722 +0,0 @@ -/* =================================================== - * bootstrap-transition.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#transitions - * =================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - -!function( $ ) { - - $(function () { - - "use strict" - - /* CSS TRANSITION SUPPORT (https://gist.github.com/373874) - * ======================================================= */ - - $.support.transition = (function () { - var thisBody = document.body || document.documentElement - , thisStyle = thisBody.style - , support = thisStyle.transition !== undefined || thisStyle.WebkitTransition !== undefined || thisStyle.MozTransition !== undefined || thisStyle.MsTransition !== undefined || thisStyle.OTransition !== undefined - - return support && { - end: (function () { - var transitionEnd = "TransitionEnd" - if ( $.browser.webkit ) { - transitionEnd = "webkitTransitionEnd" - } else if ( $.browser.mozilla ) { - transitionEnd = "transitionend" - } else if ( $.browser.opera ) { - transitionEnd = "oTransitionEnd" - } - return transitionEnd - }()) - } - })() - - }) - -}( window.jQuery ) -/* ========================================================== - * bootstrap-alert.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#alerts - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function( $ ){ - - "use strict" - - /* ALERT CLASS DEFINITION - * ====================== */ - - var dismiss = '[data-dismiss="alert"]' - , Alert = function ( el ) { - $(el).on('click', dismiss, this.close) - } - - Alert.prototype = { - - constructor: Alert - - , close: function ( e ) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - $parent.trigger('close') - - e && e.preventDefault() - - $parent.length || ($parent = $this.hasClass('alert') ? $this : $this.parent()) - - $parent.removeClass('in') - - function removeElement() { - $parent.remove() - $parent.trigger('closed') - } - - $.support.transition && $parent.hasClass('fade') ? - $parent.on($.support.transition.end, removeElement) : - removeElement() - } - - } - - - /* ALERT PLUGIN DEFINITION - * ======================= */ - - $.fn.alert = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('alert') - if (!data) $this.data('alert', (data = new Alert(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.alert.Constructor = Alert - - - /* ALERT DATA-API - * ============== */ - - $(function () { - $('body').on('click.alert.data-api', dismiss, Alert.prototype.close) - }) - -}( window.jQuery ) -/* ============================================================ - * bootstrap-button.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#buttons - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - -!function( $ ){ - - "use strict" - - /* BUTTON PUBLIC CLASS DEFINITION - * ============================== */ - - var Button = function ( element, options ) { - this.$element = $(element) - this.options = $.extend({}, $.fn.button.defaults, options) - } - - Button.prototype = { - - constructor: Button - - , setState: function ( state ) { - var d = 'disabled' - , $el = this.$element - , data = $el.data() - , val = $el.is('input') ? 'val' : 'html' - - state = state + 'Text' - data.resetText || $el.data('resetText', $el[val]()) - - $el[val](data[state] || this.options[state]) - - // push to event loop to allow forms to submit - setTimeout(function () { - state == 'loadingText' ? - $el.addClass(d).attr(d, d) : - $el.removeClass(d).removeAttr(d) - }, 0) - } - - , toggle: function () { - var $parent = this.$element.parent('[data-toggle="buttons-radio"]') - - $parent && $parent - .find('.active') - .removeClass('active') - - this.$element.toggleClass('active') - } - - } - - - /* BUTTON PLUGIN DEFINITION - * ======================== */ - - $.fn.button = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('button') - , options = typeof option == 'object' && option - if (!data) $this.data('button', (data = new Button(this, options))) - if (option == 'toggle') data.toggle() - else if (option) data.setState(option) - }) - } - - $.fn.button.defaults = { - loadingText: 'loading...' - } - - $.fn.button.Constructor = Button - - - /* BUTTON DATA-API - * =============== */ - - $(function () { - $('body').on('click.button.data-api', '[data-toggle^=button]', function ( e ) { - $(e.target).button('toggle') - }) - }) - -}( window.jQuery ) -/* ========================================================== - * bootstrap-carousel.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#carousel - * ========================================================== - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================== */ - - -!function( $ ){ - - "use strict" - - /* CAROUSEL CLASS DEFINITION - * ========================= */ - - var Carousel = function (element, options) { - this.$element = $(element) - this.options = $.extend({}, $.fn.carousel.defaults, options) - this.options.slide && this.slide(this.options.slide) - } - - Carousel.prototype = { - - cycle: function () { - this.interval = setInterval($.proxy(this.next, this), this.options.interval) - return this - } - - , to: function (pos) { - var $active = this.$element.find('.active') - , children = $active.parent().children() - , activePos = children.index($active) - , that = this - - if (pos > (children.length - 1) || pos < 0) return - - if (this.sliding) { - return this.$element.one('slid', function () { - that.to(pos) - }) - } - - if (activePos == pos) { - return this.pause().cycle() - } - - return this.slide(pos > activePos ? 'next' : 'prev', $(children[pos])) - } - - , pause: function () { - clearInterval(this.interval) - return this - } - - , next: function () { - if (this.sliding) return - return this.slide('next') - } - - , prev: function () { - if (this.sliding) return - return this.slide('prev') - } - - , slide: function (type, next) { - var $active = this.$element.find('.active') - , $next = next || $active[type]() - , isCycling = this.interval - , direction = type == 'next' ? 'left' : 'right' - , fallback = type == 'next' ? 'first' : 'last' - , that = this - - this.sliding = true - - isCycling && this.pause() - - $next = $next.length ? $next : this.$element.find('.item')[fallback]() - - if (!$.support.transition && this.$element.hasClass('slide')) { - this.$element.trigger('slide') - $active.removeClass('active') - $next.addClass('active') - this.sliding = false - this.$element.trigger('slid') - } else { - $next.addClass(type) - $next[0].offsetWidth // force reflow - $active.addClass(direction) - $next.addClass(direction) - this.$element.trigger('slide') - this.$element.one($.support.transition.end, function () { - $next.removeClass([type, direction].join(' ')).addClass('active') - $active.removeClass(['active', direction].join(' ')) - that.sliding = false - setTimeout(function () { that.$element.trigger('slid') }, 0) - }) - } - - isCycling && this.cycle() - - return this - } - - } - - - /* CAROUSEL PLUGIN DEFINITION - * ========================== */ - - $.fn.carousel = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('carousel') - , options = typeof option == 'object' && option - if (!data) $this.data('carousel', (data = new Carousel(this, options))) - if (typeof option == 'number') data.to(option) - else if (typeof option == 'string' || (option = options.slide)) data[option]() - else data.cycle() - }) - } - - $.fn.carousel.defaults = { - interval: 5000 - } - - $.fn.carousel.Constructor = Carousel - - - /* CAROUSEL DATA-API - * ================= */ - - $(function () { - $('body').on('click.carousel.data-api', '[data-slide]', function ( e ) { - var $this = $(this), href - , $target = $($this.attr('data-target') || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '')) //strip for ie7 - , options = !$target.data('modal') && $.extend({}, $target.data(), $this.data()) - $target.carousel(options) - e.preventDefault() - }) - }) - -}( window.jQuery ) -/* ============================================================= - * bootstrap-collapse.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#collapse - * ============================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - -!function( $ ){ - - "use strict" - - var Collapse = function ( element, options ) { - this.$element = $(element) - this.options = $.extend({}, $.fn.collapse.defaults, options) - - if (this.options["parent"]) { - this.$parent = $(this.options["parent"]) - } - - this.options.toggle && this.toggle() - } - - Collapse.prototype = { - - constructor: Collapse - - , dimension: function () { - var hasWidth = this.$element.hasClass('width') - return hasWidth ? 'width' : 'height' - } - - , show: function () { - var dimension = this.dimension() - , scroll = $.camelCase(['scroll', dimension].join('-')) - , actives = this.$parent && this.$parent.find('.in') - , hasData - - if (actives && actives.length) { - hasData = actives.data('collapse') - actives.collapse('hide') - hasData || actives.data('collapse', null) - } - - this.$element[dimension](0) - this.transition('addClass', 'show', 'shown') - this.$element[dimension](this.$element[0][scroll]) - - } - - , hide: function () { - var dimension = this.dimension() - this.reset(this.$element[dimension]()) - this.transition('removeClass', 'hide', 'hidden') - this.$element[dimension](0) - } - - , reset: function ( size ) { - var dimension = this.dimension() - - this.$element - .removeClass('collapse') - [dimension](size || 'auto') - [0].offsetWidth - - this.$element.addClass('collapse') - } - - , transition: function ( method, startEvent, completeEvent ) { - var that = this - , complete = function () { - if (startEvent == 'show') that.reset() - that.$element.trigger(completeEvent) - } - - this.$element - .trigger(startEvent) - [method]('in') - - $.support.transition && this.$element.hasClass('collapse') ? - this.$element.one($.support.transition.end, complete) : - complete() - } - - , toggle: function () { - this[this.$element.hasClass('in') ? 'hide' : 'show']() - } - - } - - /* COLLAPSIBLE PLUGIN DEFINITION - * ============================== */ - - $.fn.collapse = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('collapse') - , options = typeof option == 'object' && option - if (!data) $this.data('collapse', (data = new Collapse(this, options))) - if (typeof option == 'string') data[option]() - }) - } - - $.fn.collapse.defaults = { - toggle: true - } - - $.fn.collapse.Constructor = Collapse - - - /* COLLAPSIBLE DATA-API - * ==================== */ - - $(function () { - $('body').on('click.collapse.data-api', '[data-toggle=collapse]', function ( e ) { - var $this = $(this), href - , target = $this.attr('data-target') - || e.preventDefault() - || (href = $this.attr('href')) && href.replace(/.*(?=#[^\s]+$)/, '') //strip for ie7 - , option = $(target).data('collapse') ? 'toggle' : $this.data() - $(target).collapse(option) - }) - }) - -}( window.jQuery ) -/* ============================================================ - * bootstrap-dropdown.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#dropdowns - * ============================================================ - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ============================================================ */ - - -!function( $ ){ - - "use strict" - - /* DROPDOWN CLASS DEFINITION - * ========================= */ - - var toggle = '[data-toggle="dropdown"]' - , Dropdown = function ( element ) { - var $el = $(element).on('click.dropdown.data-api', this.toggle) - $('html').on('click.dropdown.data-api', function () { - $el.parent().removeClass('open') - }) - } - - Dropdown.prototype = { - - constructor: Dropdown - - , toggle: function ( e ) { - var $this = $(this) - , selector = $this.attr('data-target') - , $parent - , isActive - - if (!selector) { - selector = $this.attr('href') - selector = selector && selector.replace(/.*(?=#[^\s]*$)/, '') //strip for ie7 - } - - $parent = $(selector) - $parent.length || ($parent = $this.parent()) - - isActive = $parent.hasClass('open') - - clearMenus() - !isActive && $parent.toggleClass('open') - - return false - } - - } - - function clearMenus() { - $(toggle).parent().removeClass('open') - } - - - /* DROPDOWN PLUGIN DEFINITION - * ========================== */ - - $.fn.dropdown = function ( option ) { - return this.each(function () { - var $this = $(this) - , data = $this.data('dropdown') - if (!data) $this.data('dropdown', (data = new Dropdown(this))) - if (typeof option == 'string') data[option].call($this) - }) - } - - $.fn.dropdown.Constructor = Dropdown - - - /* APPLY TO STANDARD DROPDOWN ELEMENTS - * =================================== */ - - $(function () { - $('html').on('click.dropdown.data-api', clearMenus) - $('body').on('click.dropdown.data-api', toggle, Dropdown.prototype.toggle) - }) - -}( window.jQuery ) -/* ========================================================= - * bootstrap-modal.js v2.0.0 - * http://twitter.github.com/bootstrap/javascript.html#modals - * ========================================================= - * Copyright 2012 Twitter, Inc. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * ========================================================= */ - - -!function( $ ){ - - "use strict" - - /* MODAL CLASS DEFINITION - * ====================== */ - - var Modal = function ( content, options ) { - this.options = $.extend({}, $.fn.modal.defaults, options) - this.$element = $(content) - .delegate('[data-dismiss="modal"]', 'click.dismiss.modal', $.proxy(this.hide, this)) - } - - Modal.prototype = { - - constructor: Modal - - , toggle: function () { - return this[!this.isShown ? 'show' : 'hide']() - } - - , show: function () { - var that = this - - if (this.isShown) return - - $('body').addClass('modal-open') - - this.isShown = true - this.$element.trigger('show') - - escape.call(this) - backdrop.call(this, function () { - var transition = $.support.transition && that.$element.hasClass('fade') - - !that.$element.parent().length && that.$element.appendTo(document.body) //don't move modals dom position - - that.$element - .show() - - if (transition) { - that.$element[0].offsetWidth // force reflow - } - - that.$element.addClass('in') - - transition ? - that.$element.one($.support.transition.end, function () { that.$element.trigger('shown') }) : - that.$element.trigger('shown') - - }) - } - - , hide: function ( e ) { - e && e.preventDefault() - - if (!this.isShown) return - - var that = this - this.isShown = false - - $('body').removeClass('modal-open') - - escape.call(this) - - this.$element - .trigger('hide') - .removeClass('in') - - $.support.transition && this.$element.hasClass('fade') ? - hideWithTransition.call(this) : - hideModal.call(this) - } - - } - - - /* MODAL PRIVATE METHODS - * ===================== */ - - function hideWithTransition() { - var that = this - , timeout = setTimeout(function () { - that.$element.off($.support.transition.end) - hideModal.call(that) - }, 500) - - this.$element.one($.support.transition.end, function () { - clearTimeout(timeout) - hideModal.call(that) - }) - } - - function hideModal( that ) { - this.$element - .hide() - .trigger('hidden') - - backdrop.call(this) - } - - function backdrop( callback ) { - var that = this - , animate = this.$element.hasClass('fade') ? 'fade' : '' - - if (this.isShown && this.options.backdrop) { - var doAnimate = $.support.transition && animate - - this.$backdrop = $('