[ApiBundle] Refactored formatters to handle both one object, and a collection

This commit is contained in:
William DURAND 2012-04-12 12:48:36 +02:00
parent 6fc0d8619e
commit 72b8976006
9 changed files with 1156 additions and 8 deletions

View File

@ -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)
{

View File

@ -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);
}

View File

@ -0,0 +1,54 @@
<?php
namespace Nelmio\ApiBundle\Formatter;
use Nelmio\ApiBundle\Annotation\ApiDoc;
use Symfony\Component\Routing\Route;
class HtmlFormatter extends AbstractFormatter
{
/**
* {@inheritdoc}
*/
public function formatOne(ApiDoc $apiDoc, Route $route)
{
return $this->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();
}
}

View File

@ -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;
}
}

View File

@ -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;
}
}

View File

@ -0,0 +1,29 @@
<?xml version="1.0" ?>
<container xmlns="http://symfony.com/schema/dic/services"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://symfony.com/schema/dic/services http://symfony.com/schema/dic/services/services-1.0.xsd">
<parameters>
<parameter key="nelmio.api.parser.form_type_parser.class">Nelmio\ApiBundle\Parser\FormTypeParser</parameter>
<parameter key="nelmio.api.formatter.abstract_formatter.class">Nelmio\ApiBundle\Formatter\AbstractFormatter</parameter>
<parameter key="nelmio.api.formatter.markdown_formatter.class">Nelmio\ApiBundle\Formatter\MarkdownFormatter</parameter>
<parameter key="nelmio.api.formatter.simple_formatter.class">Nelmio\ApiBundle\Formatter\SimpleFormatter</parameter>
<parameter key="nelmio.api.formatter.html_formatter.class">Nelmio\ApiBundle\Formatter\HtmlFormatter</parameter>
</parameters>
<services>
<service id="nelmio.api.parser.form_type_parser" class="%nelmio.api.parser.form_type_parser.class%">
<argument type="service" id="form.factory" />
</service>
<service id="nelmio.api.formatter.abstract_formatter" class="%nelmio.api.formatter.abstract_formatter.class%">
<argument type="service" id="nelmio.api.parser.form_type_parser" />
</service>
<service id="nelmio.api.formatter.markdown_formatter" class="%nelmio.api.formatter.markdown_formatter.class%"
parent="nelmio.api.formatter.abstract_formatter" />
<service id="nelmio.api.formatter.simple_formatter" class="%nelmio.api.formatter.simple_formatter.class%"
parent="nelmio.api.formatter.abstract_formatter" />
<service id="nelmio.api.formatter.html_formatter" class="%nelmio.api.formatter.html_formatter.class%"
parent="nelmio.api.formatter.abstract_formatter" />
</services>
</container>

View File

@ -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; }

View File

@ -0,0 +1,94 @@
<li class="resource">
<ul class="endpoints">
<li class="endpoint">
<ul class="operations">
<li class="<?php echo strtolower($method); ?> operation">
<div class="heading toggler">
<h3>
<span class="http_method">
<a><?php echo $method; ?></a>
</span>
<span class="path">
<?php echo $uri; ?>
</span>
</h3>
<ul class="options">
<?php if (isset($comment)) : ?>
<li><?php echo $comment; ?></li>
<?php endif; ?>
</ul>
</div>
<div class="content" style="display: none;">
<?php if (isset($requirements) && !empty($requirements)) : ?>
<h4>Requirements</h4>
<table class="fullwidth">
<thead>
<tr>
<th>Name</th>
<th>Value</th>
</tr>
</thead>
<tbody>
<?php foreach ($requirements as $key => $value) : ?>
<tr>
<td><?php echo $key; ?></td>
<td><?php echo $value; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php if (isset($filters)) : ?>
<h4>Filters</h4>
<table class="fullwidth">
<thead>
<tr>
<th>Name</th>
<th>Information</th>
</tr>
</thead>
<tbody>
<?php foreach ($filters as $name => $info) : ?>
<tr>
<td><?php echo $name; ?></td>
<td>
<ul>
<?php foreach ($info as $key => $value) : ?>
<li><?php echo $key . ': ' . $value; ?></li>
<?php endforeach; ?>
</ul>
</td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
<?php if (isset($parameters)) : ?>
<h4>Parameters</h4>
<table class='fullwidth'>
<thead>
<tr>
<th>Parameter</th>
<th>Type</th>
<th>Required?</th>
</tr>
</thead>
<tbody>
<?php foreach ($parameters as $name => $info) : ?>
<tr>
<td><?php echo $name; ?></td>
<td><?php echo $info['type']; ?></td>
<td><?php echo $info['is_required'] ? 'true' : 'false'; ?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
<?php endif; ?>
</div>
</li>
</ul>
</li>
</ul>
</li>

View File

@ -0,0 +1,24 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta charset="utf-8" />
<!-- Always force latest IE rendering engine (even in intranet) and Chrome Frame -->
<meta content="IE=edge,chrome=1" http-equiv="X-UA-Compatible" />
<title>API documentation</title>
<link href="http://fonts.googleapis.com/css?family=Droid+Sans:400,700" rel="stylesheet" type="text/css" />
<link href="/bundles/nelmioapi/css/screen.css" media="screen" rel="stylesheet" type="text/css" />
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js" type="text/javascript"></script>
</head>
<body>
<div class="container" id="resources_container">
<ul id="resources">
<?php echo $content; ?>
</ul>
</div>
<script type="text/javascript">
$('.toggler').click(function() {
$(this).next().toggle();
});
</script>
</body>
</html>