This commit is contained in:
Simon Vieille 2015-05-05 23:24:37 +02:00
parent 44d90ab942
commit 688925acc0
8 changed files with 145 additions and 102 deletions

View file

@ -8,13 +8,18 @@ app:
title: 'About' title: 'About'
form: form:
error:
not_blank: 'This value should not be blank bro!'
title: title:
placeholder: 'Title' placeholder: 'Title'
cipher: cipher:
alert: 'By enabling cipher, fork will be not possible.'
label: 'Cipher: %value%'
choice: choice:
yes: 'Yes' yes: 'Yes'
no: 'No' no: 'No'
type: type:
label: 'Language: %value%'
choice: choice:
xml: 'HTML/XML' xml: 'HTML/XML'
css: 'CSS' css: 'CSS'

View file

@ -14,9 +14,22 @@ class HomeController
{ {
public function indexAction(Request $request, Application $app) public function indexAction(Request $request, Application $app)
{ {
$form = new CreateGistForm($app['form.factory'], $app['translator']); $data = array(
'type' => 'xml',
'cipher' => 'no',
);
$form = new CreateGistForm($app['form.factory'], $app['translator'], $data);
$form = $form->build(); $form = $form->build();
if ($request->isMethod('post')) {
$form->submit($request);
if ($form->isValid()) {
}
}
return $app['twig']->render( return $app['twig']->render(
'Home/index.html.twig', 'Home/index.html.twig',
array( array(

View file

@ -15,11 +15,11 @@ abstract class AbstractForm
protected $translator; protected $translator;
public function __construct(FormFactory $formFactory, Translator $translator) public function __construct(FormFactory $formFactory, Translator $translator, array $data = array())
{ {
$this->translator = $translator; $this->translator = $translator;
$this->builder = $formFactory->createBuilder('form'); $this->builder = $formFactory->createBuilder('form', $data);
} }
abstract public function build(array $options = array()); abstract public function build(array $options = array());

View file

@ -34,7 +34,9 @@ class CreateGistForm extends AbstractForm
'rows' => 10, 'rows' => 10,
), ),
'constraints' => array( 'constraints' => array(
new NotBlank(), new NotBlank(array(
'message' => $this->translator->trans('form.error.not_blank'),
)),
), ),
) )
); );
@ -57,8 +59,8 @@ class CreateGistForm extends AbstractForm
array( array(
'required' => true, 'required' => true,
'choices' => array( 'choices' => array(
0 => $this->translator->trans('form.cipher.choice.no'), 'no' => $this->translator->trans('form.cipher.choice.no'),
1 => $this->translator->trans('form.cipher.choice.yes'), 'yes' => $this->translator->trans('form.cipher.choice.yes'),
), ),
) )
); );

View file

@ -1,91 +1,85 @@
{% extends 'base.html.twig' %} {% extends 'base.html.twig' %}
{% block body %} {% block body %}
<div class="row"> <div class="row">
{{ form(form) }} <form action="{{ path('home') }}" method="post">
<div class="col-md-12"> <div class="col-md-12">
<div class="panel panel-default"> <div class="panel panel-default">
<div class="panel-heading"> <div class="panel-heading">
<input type="text" class="form-control" id="name" placeholder="Title"> {{ form_widget(form.title) }}
</div> </div>
<div class="panel-body"> <div class="panel-body">
<p class="text-primary"> <p class="text-primary hide" id="cipher-alert">
<span class="glyphicon glyphicon-info-sign"></span> <span class="glyphicon glyphicon-info-sign"></span>
En activant le chiffrement, le code déposé ne pourra pas être forké. {{ 'form.cipher.alert'|trans }}
</p> </p>
<div class="btn-toolbar"> <div class="btn-toolbar">
<div class="btn-group" id="languages"> <div class="btn-group" id="options">
<div class="btn-group"> <div class="btn-group">
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown">
Language XML <span id="type-label" data-tpl="{{ 'form.type.label'|trans }}">
<span class="caret"></span> </span>
</button> <span class="caret"></span>
<ul class="dropdown-menu" role="menu"> </button>
<li> <ul class="dropdown-menu">
<a href="html">HTML/XML</a> {% for item in form.type.vars.choices %}
</li> <li>
<li> <input
<a href="css">CSS</a> {% if item.value == form.type.vars.value %}checked{% endif %}
</li> data-id="#type-label" type="radio" class="hide"
<li> data-title="{{ item.label }}"
<a href="javascript">JAVASCRIPT</a> value="{{ item.value }}"
</li> name="form[type]"
<li> id="type-{{ loop.index }}" />
<a href="php">PHP</a>
</li> <a href="#">
<li> <label for="type-{{ loop.index }}">
<a href="sql">SQL</a> {{ item.label }}
</li> </label>
<li> </a>
<a href="yaml">YAML</a> </li>
</li> {% endfor %}
<li> </ul>
<a href="perl">PERL</a> </div>
</li> <div class="btn-group">
<li> <button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false">
<a href="c">C/C++</a> <span id="cipher-label" data-tpl="{{ 'form.cipher.label'|trans }}">
</li> </span>
<li> <span class="caret"></span>
<a href="asp">ASP</a> </button>
</li> <ul class="dropdown-menu" role="menu">
<li> {% for item in form.cipher.vars.choices %}
<a href="python">PYTHON</a> <li>
</li> <input
<li> {% if item.value == form.cipher.vars.value %}checked{% endif %}
<a href="bash">BASH</a> data-id="#cipher-label" type="radio" class="hide cipher-input"
</li> data-title="{{ item.label }}"
<li> value="{{ item.value }}"
<a href="actionscript">ACTION SCRIPT</a> name="form[cipher]"
</li> id="cipher-{{ loop.index }}" />
<li>
<a href="texte">TEXT</a> <a href="#">
</li> <label for="cipher-{{ loop.index }}">
</ul> {{ item.label }}
</div> </label>
<div class="btn-group"> </a>
<button type="button" class="btn btn-default dropdown-toggle" data-toggle="dropdown" aria-expanded="false"> </li>
Chiffrement : non {% endfor %}
<span class="caret"></span> </ul>
</button> </div>
<ul class="dropdown-menu" role="menu"> </div>
<li> </div>
<a href="html">oui</a> <p>
</li> {{ form_errors(form.content) }}
<li> {{ form_widget(form.content) }}
<a href="css">non</a> </p>
</li> <p>
</ul> <input type="submit" class="btn btn-primary" value="Envoyer">
</div> </p>
</div> </div>
</div> </div>
<p> </div>
<textarea rows="10" id="code" class="form-control"></textarea> {{ form_widget(form._token) }}
</p> </form>
<p> </div>
<input type="submit" class="btn btn-primary" value="Envoyer">
</p>
</div>
</div>
</div>
</div>
{% endblock %} {% endblock %}

View file

@ -42,13 +42,13 @@
</div> </div>
</nav> </nav>
<div class="container-fluid" id="container"> <div class="container-fluid" id="container">
{% block body %}{% endblock %} {% block body %}{% endblock %}
{% block js %}
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>
<script src="{{ web_path }}components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="{{ web_path }}components/select2-dist/dist/js/select2.full.min.js"></script>
<script src="{{ web_path }}app/js/app.js></script>
{% endblock %}
</div> </div>
{% block js %}
<script src="{{ web_path }}components/jquery/dist/jquery.min.js"></script>
<script src="{{ web_path }}components/bootstrap/dist/js/bootstrap.min.js"></script>
<script src="{{ web_path }}components/select2-dist/dist/js/select2.full.min.js"></script>
<script src="{{ web_path }}app/js/app.js"></script>
{% endblock %}
</body> </body>
</html> </html>

View file

@ -12,7 +12,7 @@ body {
border: #333; border: #333;
} }
#code { #form_content {
display: block; display: block;
width: 100%; width: 100%;
padding: 10px; padding: 10px;
@ -43,3 +43,4 @@ body {
.panel-heading .actions { .panel-heading .actions {
margin-top: -5px; margin-top: -5px;
} }

View file

@ -1,3 +1,31 @@
$('textarea').on('keyup change', function() { $('textarea').on('keyup change', function() {
$(this).attr('rows', Math.max(10, $(this).val().split("\n").length)); $(this).attr('rows', Math.max(10, $(this).val().split("\n").length));
});
$('#options input').change(function() {
var $input = $(this);
var $label = $($input.data('id'));
$label.html($label.data('tpl').replace('%value%', $input.data('title')));
});
$('#options li, #options a').click(function() {
$(this).find('label').trigger('click');
});
$('#options label').click(function(e) {
e.stopPropagation();
});
$('#options input:checked').each(function() {
$(this).trigger('change');
});
$('.cipher-input').change(function() {
if ($('.cipher-input:checked').val() === 'yes') {
$('#cipher-alert').removeClass('hide');
} else {
$('#cipher-alert').addClass('hide');
}
}); });