From 72b897600662ae66d7a2ef0de86c4d667397a231 Mon Sep 17 00:00:00 2001 From: William DURAND Date: Thu, 12 Apr 2012 12:48:36 +0200 Subject: [PATCH] [ApiBundle] Refactored formatters to handle both one object, and a collection --- Formatter/AbstractFormatter.php | 24 +- Formatter/FormatterInterface.php | 4 +- Formatter/HtmlFormatter.php | 54 ++ Formatter/MarkdownFormatter.php | 23 +- Formatter/SimpleFormatter.php | 13 +- Resources/config/formatters.xml | 29 + Resources/public/css/screen.css | 899 ++++++++++++++++++++++ Resources/views/formatter.html.php | 94 +++ Resources/views/formatter_layout.html.php | 24 + 9 files changed, 1156 insertions(+), 8 deletions(-) create mode 100644 Formatter/HtmlFormatter.php create mode 100644 Resources/config/formatters.xml create mode 100644 Resources/public/css/screen.css create mode 100644 Resources/views/formatter.html.php create mode 100644 Resources/views/formatter_layout.html.php diff --git a/Formatter/AbstractFormatter.php b/Formatter/AbstractFormatter.php index 32609fa..5616d5c 100644 --- a/Formatter/AbstractFormatter.php +++ b/Formatter/AbstractFormatter.php @@ -18,12 +18,30 @@ abstract class AbstractFormatter implements FormatterInterface $this->parser = $parser; } - public function format(ApiDoc $apiDoc, Route $route) + /** + * {@inheritdoc} + */ + public function formatOne(ApiDoc $apiDoc, Route $route) { - return $this->render($this->getData($apiDoc, $route)); + return $this->renderOne($this->getData($apiDoc, $route)); } - protected abstract function render(array $data); + /** + * {@inheritdoc} + */ + public function format(array $collection) + { + $array = array(); + foreach ($collection as $coll) { + $array[] = $this->getData($coll['annotation'], $coll['route']); + } + + return $this->render($array); + } + + protected abstract function renderOne(array $data); + + protected abstract function render(array $collection); private function getData(ApiDoc $apiDoc, Route $route) { diff --git a/Formatter/FormatterInterface.php b/Formatter/FormatterInterface.php index ded81c0..bc87030 100644 --- a/Formatter/FormatterInterface.php +++ b/Formatter/FormatterInterface.php @@ -7,5 +7,7 @@ use Symfony\Component\Routing\Route; interface FormatterInterface { - function format(ApiDoc $apiDoc, Route $route); + function format(array $collection); + + function formatOne(ApiDoc $apiDoc, Route $route); } diff --git a/Formatter/HtmlFormatter.php b/Formatter/HtmlFormatter.php new file mode 100644 index 0000000..2f71e78 --- /dev/null +++ b/Formatter/HtmlFormatter.php @@ -0,0 +1,54 @@ +renderWithLayout(parent::formatOne($apiDoc, $route)); + } + + /** + * {@inheritdoc} + */ + protected function renderOne(array $data) + { + extract($data); + + ob_start(); + include __DIR__ . '/../Resources/views/formatter.html.php'; + + return ob_get_clean(); + } + + /** + * {@inheritdoc} + */ + protected function render(array $collection) + { + $content = ''; + foreach ($collection as $data) { + $content .= $this->renderOne($data); + } + + return $this->renderWithLayout($content); + } + + private function renderWithLayout($content) + { + $array = array('content' => $content); + extract($array); + + ob_start(); + include __DIR__ . '/../Resources/views/formatter_layout.html.php'; + + return ob_get_clean(); + } +} diff --git a/Formatter/MarkdownFormatter.php b/Formatter/MarkdownFormatter.php index 2289db1..8621e97 100644 --- a/Formatter/MarkdownFormatter.php +++ b/Formatter/MarkdownFormatter.php @@ -4,7 +4,10 @@ namespace Nelmio\ApiBundle\Formatter; class MarkdownFormatter extends AbstractFormatter { - protected function render(array $data) + /** + * {@inheritdoc} + */ + protected function renderOne(array $data) { $markdown = sprintf("### `%s` %s ###\n", $data['method'], $data['uri']); @@ -41,8 +44,8 @@ class MarkdownFormatter extends AbstractFormatter if (isset($data['parameters'])) { $markdown .= "#### Parameters ####\n\n"; - foreach ($data['parameters'] as $parameter) { - $markdown .= sprintf("%s:\n\n", $parameter['name']); + foreach ($data['parameters'] as $name => $parameter) { + $markdown .= sprintf("%s:\n\n", $name); $markdown .= sprintf(" * type: %s\n", $parameter['type']); $markdown .= sprintf(" * is_required: %s\n", $parameter['is_required'] ? 'true' : 'false'); $markdown .= "\n"; @@ -51,4 +54,18 @@ class MarkdownFormatter extends AbstractFormatter return $markdown; } + + /** + * {@inheritdoc} + */ + protected function render(array $collection) + { + $markdown = ''; + foreach ($collection as $data) { + $markdown .= $this->renderOne($data); + $markdown .= "\n"; + } + + return $markdown; + } } diff --git a/Formatter/SimpleFormatter.php b/Formatter/SimpleFormatter.php index b9738f1..0dc6ee7 100644 --- a/Formatter/SimpleFormatter.php +++ b/Formatter/SimpleFormatter.php @@ -4,8 +4,19 @@ namespace Nelmio\ApiBundle\Formatter; class SimpleFormatter extends AbstractFormatter { - protected function render(array $data) + /** + * {@inheritdoc} + */ + protected function renderOne(array $data) { return $data; } + + /** + * {@inheritdoc} + */ + protected function renderOne(array $collection) + { + return $collection; + } } diff --git a/Resources/config/formatters.xml b/Resources/config/formatters.xml new file mode 100644 index 0000000..0d86441 --- /dev/null +++ b/Resources/config/formatters.xml @@ -0,0 +1,29 @@ + + + + + Nelmio\ApiBundle\Parser\FormTypeParser + Nelmio\ApiBundle\Formatter\AbstractFormatter + Nelmio\ApiBundle\Formatter\MarkdownFormatter + Nelmio\ApiBundle\Formatter\SimpleFormatter + Nelmio\ApiBundle\Formatter\HtmlFormatter + + + + + + + + + + + + + + + diff --git a/Resources/public/css/screen.css b/Resources/public/css/screen.css new file mode 100644 index 0000000..7eb7bf3 --- /dev/null +++ b/Resources/public/css/screen.css @@ -0,0 +1,899 @@ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { +margin: 0; +padding: 0; +border: 0; +font-size: 100%; +font: inherit; +vertical-align: baseline; } + +body { +line-height: 1; } + +ol, ul { +list-style: none; } + +table { +border-collapse: collapse; +border-spacing: 0; } + +caption, th, td { +text-align: left; +font-weight: normal; +vertical-align: middle; } + +q, blockquote { +quotes: none; } +q:before, q:after, blockquote:before, blockquote:after { +content: ""; +content: none; } + +a img { +border: none; } + +article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary { +display: block; } + +h1 a, h2 a, h3 a, h4 a, h5 a, h6 a { +text-decoration: none; } +h1 a:hover, h2 a:hover, h3 a:hover, h4 a:hover, h5 a:hover, h6 a:hover { +text-decoration: underline; } +h1 span.divider, h2 span.divider, h3 span.divider, h4 span.divider, h5 span.divider, h6 span.divider { +color: #aaaaaa; } + +h1 { +color: #547f00; +color: black; +font-size: 1.5em; +line-height: 1.3em; +padding: 10px 0 10px 0; +font-family: "Droid Sans", sans-serif; +font-weight: bold; } + +h2 { +color: #89bf04; +color: black; +font-size: 1.3em; +padding: 10px 0 10px 0; } +h2 a { +color: black; } +h2 span.sub { +font-size: 0.7em; +color: #999999; +font-style: italic; } +h2 span.sub a { +color: #777777; } + +h3 { +color: black; +font-size: 1.1em; +padding: 10px 0 10px 0; } + +div.heading_with_menu { +float: none; +clear: both; +overflow: hidden; +display: block; } +div.heading_with_menu h1, div.heading_with_menu h2, div.heading_with_menu h3, div.heading_with_menu h4, div.heading_with_menu h5, div.heading_with_menu h6 { +display: block; +clear: none; +float: left; +-moz-box-sizing: border-box; +-webkit-box-sizing: border-box; +-ms-box-sizing: border-box; +box-sizing: border-box; +width: 60%; } +div.heading_with_menu ul { +display: block; +clear: none; +float: right; +-moz-box-sizing: border-box; +-webkit-box-sizing: border-box; +-ms-box-sizing: border-box; +box-sizing: border-box; +margin-top: 10px; } + +p { +line-height: 1.4em; +padding: 0 0 10px 0; +color: #333333; } + +ol { +margin: 0px 0 10px 0; +padding: 0 0 0 18px; +list-style-type: decimal; } +ol li { +padding: 5px 0px; +font-size: 0.9em; +color: #333333; } + +.markdown h3 { +color: #547f00; } +.markdown h4 { +color: #666666; } +.markdown pre { +font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +background-color: #fcf6db; +border: 1px solid black; +border-color: #e5e0c6; +padding: 10px; +margin: 0 0 10px 0; } +.markdown pre code { +line-height: 1.6em; } +.markdown p code, .markdown li code { +font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +background-color: #f0f0f0; +color: black; +padding: 1px 3px; } +.markdown ol, .markdown ul { +font-family: "Droid Sans", sans-serif; +margin: 5px 0 10px 0; +padding: 0 0 0 18px; +list-style-type: disc; } +.markdown ol li, .markdown ul li { +padding: 3px 0px; +line-height: 1.4em; +color: #333333; } + +div.gist { +margin: 20px 0 25px 0 !important; } + +p.big, div.big p { +font-size: 1 em; +margin-bottom: 10px; } + +span.weak { +color: #666666; } +span.blank, span.empty { +color: #888888; +font-style: italic; } + +a { +color: #547f00; } + +strong { +font-family: "Droid Sans", sans-serif; +font-weight: bold; +font-weight: bold; } + +.code { +font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; } + +pre { +font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; +background-color: #fcf6db; +border: 1px solid black; +border-color: #e5e0c6; +padding: 10px; +/* white-space: pre-line */ } +pre code { +line-height: 1.6em; } + +.required { +font-weight: bold; } + +table.fullwidth { +width: 100%; } +table thead tr th { + padding: 5px; + font-size: 0.9em; + color: #666666; +border-bottom: 1px solid #999999; } +table tbody tr.offset { +background-color: #f5f5f5; } +table tbody tr td { + padding: 6px; + font-size: 0.9em; + border-bottom: 1px solid #cccccc; + vertical-align: top; +line-height: 1.3em; } +table tbody tr:last-child td { +border-bottom: none; } +table tbody tr.offset { +background-color: #f0f0f0; } + +form.form_box { + background-color: #ebf3f9; + border: 1px solid black; + border-color: #c3d9ec; +padding: 10px; } +form.form_box label { +color: #0f6ab4 !important; } +form.form_box input[type=submit] { + display: block; +padding: 10px; } +form.form_box p { + font-size: 0.9em; + padding: 0 0 15px 0; +color: #7e7b6d; } +form.form_box p a { +color: #646257; } +form.form_box p strong { +color: black; } +form.form_box p.weak { +font-size: 0.8em; } +form.formtastic fieldset.inputs ol li p.inline-hints { + margin-left: 0; + font-style: italic; + font-size: 0.9em; +margin: 0; } +form.formtastic fieldset.inputs ol li label { + display: block; + clear: both; + width: auto; + padding: 0 0 3px 0; +color: #666666; } +form.formtastic fieldset.inputs ol li label abbr { + padding-left: 3px; +color: #888888; } +form.formtastic fieldset.inputs ol li.required label { +color: black; } +form.formtastic fieldset.inputs ol li.string input, form.formtastic fieldset.inputs ol li.url input, form.formtastic fieldset.inputs ol li.numeric input { + display: block; + padding: 4px; + width: auto; +clear: both; } +form.formtastic fieldset.inputs ol li.string input.title, form.formtastic fieldset.inputs ol li.url input.title, form.formtastic fieldset.inputs ol li.numeric input.title { +font-size: 1.3em; } +form.formtastic fieldset.inputs ol li.text textarea { + font-family: "Droid Sans", sans-serif; + height: 250px; + padding: 4px; + display: block; +clear: both; } +form.formtastic fieldset.inputs ol li.select select { + display: block; +clear: both; } +form.formtastic fieldset.inputs ol li.boolean { + float: none; + clear: both; + overflow: hidden; +display: block; } +form.formtastic fieldset.inputs ol li.boolean input { + display: block; + float: left; + clear: none; +margin: 0 5px 0 0; } +form.formtastic fieldset.inputs ol li.boolean label { + display: block; + float: left; + clear: none; + margin: 0; +padding: 0; } +form.formtastic fieldset.buttons { + margin: 0; +padding: 0; } +form.fullwidth ol li.string input, form.fullwidth ol li.url input, form.fullwidth ol li.text textarea, form.fullwidth ol li.numeric input { +width: 500px !important; } + +body { + font-family: "Droid Sans", sans-serif; + margin: 1% auto; +} +body ul#resources { + padding: 0 15px; + font-family: "Droid Sans", sans-serif; +font-size: 0.9em; } +body ul#resources li.resource { +border-bottom: 1px solid #dddddd; } +body ul#resources li.resource:last-child { +border-bottom: none; } +body ul#resources li.resource div.heading { + border: 1px solid transparent; + float: none; + clear: both; + overflow: hidden; +display: block; } +body ul#resources li.resource div.heading h2 { + color: #999999; + padding-left: 0px; + display: block; + clear: none; + float: left; + font-family: "Droid Sans", sans-serif; +font-weight: bold; } +body ul#resources li.resource div.heading h2 a { +color: #999999; } +body ul#resources li.resource div.heading h2 a:hover { +color: black; } +body ul#resources li.resource div.heading ul.options { + float: none; + clear: both; + overflow: hidden; + margin: 0; + padding: 0; + display: block; + clear: none; + float: right; +margin: 14px 10px 0 0; } +body ul#resources li.resource div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; +border-right: 1px solid #dddddd; } +body ul#resources li.resource div.heading ul.options li:first-child, body ul#resources li.resource div.heading ul.options li.first { +padding-left: 0; } +body ul#resources li.resource div.heading ul.options li:last-child, body ul#resources li.resource div.heading ul.options li.last { + padding-right: 0; +border-right: none; } +body ul#resources li.resource div.heading ul.options li { + color: #666666; +font-size: 0.9em; } +body ul#resources li.resource div.heading ul.options li a { + color: #aaaaaa; +text-decoration: none; } +body ul#resources li.resource div.heading ul.options li a:hover { + text-decoration: underline; +color: black; } +body ul#resources li.resource:hover div.heading h2 a, body ul#resources li.resource.active div.heading h2 a { +color: black; } +body ul#resources li.resource:hover div.heading ul.options li a, body ul#resources li.resource.active div.heading ul.options li a { +color: #555555; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px 0; +padding: 0 0 0 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 0 0; + padding: 0; + background-color: #e7f0f7; + border: 1px solid black; +border-color: #c3d9ec; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; +color: black; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span { + margin: 0; +padding: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #0f6ab4; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; +border-radius: 2px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path { +padding-left: 10px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path a { + color: black; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading h3 span.path a:hover { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options { + float: none; + clear: both; + overflow: hidden; + margin: 0; + padding: 0; + display: block; + clear: none; + float: right; +margin: 6px 10px 0 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; +border-right: 1px solid #dddddd; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:first-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.first { +padding-left: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li:last-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li.last { + padding-right: 0; +border-right: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li { + border-right-color: #c3d9ec; + color: #0f6ab4; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a { + color: #0f6ab4; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a:hover, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a:active, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.heading ul.options li a.active { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content { + background-color: #ebf3f9; + border: 1px solid black; + border-color: #c3d9ec; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; +margin: 0 0 20px 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content h4 { + color: #0f6ab4; + font-size: 1.1em; + margin: 0; +padding: 15px 0 5px 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content form input[type='text'].error { + outline: 2px solid black; +outline-color: #cc0000; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; +display: block; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; +padding: 6px 8px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header img { + display: block; + display: block; + clear: none; +float: right; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #6fa5d2; + display: inline-block; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.response div.block { + background-color: #fcf6db; + border: 1px solid black; +border-color: #e5e0c6; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.get div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; +overflow-y: auto; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px 0; +padding: 0 0 0 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 0 0; + padding: 0; + background-color: #e7f6ec; + border: 1px solid black; +border-color: #c3e8d1; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; +color: black; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span { + margin: 0; +padding: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #10a54a; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; +border-radius: 2px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path { +padding-left: 10px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path a { + color: black; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading h3 span.path a:hover { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options { + float: none; + clear: both; + overflow: hidden; + margin: 0; + padding: 0; + display: block; + clear: none; + float: right; +margin: 6px 10px 0 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; +border-right: 1px solid #dddddd; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:first-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.first { +padding-left: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li:last-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li.last { + padding-right: 0; +border-right: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li { + border-right-color: #c3e8d1; + color: #10a54a; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a { + color: #10a54a; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a:hover, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a:active, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.heading ul.options li a.active { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content { + background-color: #ebf7f0; + border: 1px solid black; + border-color: #c3e8d1; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; +margin: 0 0 20px 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content h4 { + color: #10a54a; + font-size: 1.1em; + margin: 0; +padding: 15px 0 5px 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content form input[type='text'].error { + outline: 2px solid black; +outline-color: #cc0000; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; +display: block; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; +padding: 6px 8px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header img { + display: block; + display: block; + clear: none; +float: right; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #6fc992; + display: inline-block; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.response div.block { + background-color: #fcf6db; + border: 1px solid black; +border-color: #e5e0c6; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.post div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; +overflow-y: auto; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px 0; +padding: 0 0 0 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 0 0; + padding: 0; + background-color: #f9f2e9; + border: 1px solid black; +border-color: #f0e0ca; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; +color: black; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span { + margin: 0; +padding: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #c5862b; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; +border-radius: 2px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path { +padding-left: 10px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path a { + color: black; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading h3 span.path a:hover { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options { + float: none; + clear: both; + overflow: hidden; + margin: 0; + padding: 0; + display: block; + clear: none; + float: right; +margin: 6px 10px 0 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; +border-right: 1px solid #dddddd; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:first-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.first { +padding-left: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li:last-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li.last { + padding-right: 0; +border-right: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li { + border-right-color: #f0e0ca; + color: #c5862b; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a { + color: #c5862b; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a:hover, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a:active, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.heading ul.options li a.active { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content { + background-color: #faf5ee; + border: 1px solid black; + border-color: #f0e0ca; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; +margin: 0 0 20px 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content h4 { + color: #c5862b; + font-size: 1.1em; + margin: 0; +padding: 15px 0 5px 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content form input[type='text'].error { + outline: 2px solid black; +outline-color: #cc0000; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; +display: block; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; +padding: 6px 8px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header img { + display: block; + display: block; + clear: none; +float: right; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #dcb67f; + display: inline-block; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.response div.block { + background-color: #fcf6db; + border: 1px solid black; +border-color: #e5e0c6; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.put div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; +overflow-y: auto; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 10px 0; +padding: 0 0 0 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading { + float: none; + clear: both; + overflow: hidden; + display: block; + margin: 0 0 0 0; + padding: 0; + background-color: #f5e8e8; + border: 1px solid black; +border-color: #e8c6c7; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 { + display: block; + clear: none; + float: left; + width: auto; + margin: 0; + padding: 0; + line-height: 1.1em; +color: black; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span { + margin: 0; +padding: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.http_method a { + text-transform: uppercase; + background-color: #a41e22; + text-decoration: none; + color: white; + display: inline-block; + width: 50px; + font-size: 0.7em; + text-align: center; + padding: 7px 0 4px 0; + -moz-border-radius: 2px; + -webkit-border-radius: 2px; + -o-border-radius: 2px; + -ms-border-radius: 2px; + -khtml-border-radius: 2px; +border-radius: 2px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path { +padding-left: 10px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path a { + color: black; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading h3 span.path a:hover { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options { + float: none; + clear: both; + overflow: hidden; + margin: 0; + padding: 0; + display: block; + clear: none; + float: right; +margin: 6px 10px 0 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + float: left; + clear: none; + margin: 0; + padding: 2px 10px; +border-right: 1px solid #dddddd; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:first-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.first { +padding-left: 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li:last-child, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li.last { + padding-right: 0; +border-right: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li { + border-right-color: #e8c6c7; + color: #a41e22; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a { + color: #a41e22; +text-decoration: none; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a:hover, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a:active, body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.heading ul.options li a.active { +text-decoration: underline; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content { + background-color: #f7eded; + border: 1px solid black; + border-color: #e8c6c7; + border-top: none; + padding: 10px; + -moz-border-radius-bottomleft: 6px; + -webkit-border-bottom-left-radius: 6px; + -o-border-bottom-left-radius: 6px; + -ms-border-bottom-left-radius: 6px; + -khtml-border-bottom-left-radius: 6px; + border-bottom-left-radius: 6px; + -moz-border-radius-bottomright: 6px; + -webkit-border-bottom-right-radius: 6px; + -o-border-bottom-right-radius: 6px; + -ms-border-bottom-right-radius: 6px; + -khtml-border-bottom-right-radius: 6px; + border-bottom-right-radius: 6px; +margin: 0 0 20px 0; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content h4 { + color: #a41e22; + font-size: 1.1em; + margin: 0; +padding: 15px 0 5px 0px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content form input[type='text'].error { + outline: 2px solid black; +outline-color: #cc0000; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header { + float: none; + clear: both; + overflow: hidden; +display: block; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header input.submit { + display: block; + clear: none; + float: left; +padding: 6px 8px; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header img { + display: block; + display: block; + clear: none; +float: right; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.sandbox_header a { + padding: 4px 0 0 10px; + color: #c8787a; + display: inline-block; +font-size: 0.9em; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.response div.block { + background-color: #fcf6db; + border: 1px solid black; +border-color: #e5e0c6; } +body ul#resources li.resource ul.endpoints li.endpoint ul.operations li.operation.delete div.content div.response div.block pre { + font-family: "Anonymous Pro", "Menlo", "Consolas", "Bitstream Vera Sans Mono", "Courier New", monospace; + padding: 10px; + font-size: 0.9em; + max-height: 400px; +overflow-y: auto; } diff --git a/Resources/views/formatter.html.php b/Resources/views/formatter.html.php new file mode 100644 index 0000000..cb6f2e7 --- /dev/null +++ b/Resources/views/formatter.html.php @@ -0,0 +1,94 @@ +
  • + +
  • diff --git a/Resources/views/formatter_layout.html.php b/Resources/views/formatter_layout.html.php new file mode 100644 index 0000000..2a34162 --- /dev/null +++ b/Resources/views/formatter_layout.html.php @@ -0,0 +1,24 @@ + + + + + + + API documentation + + + + + +
    + +
    + + +