Skip to content
This repository has been archived by the owner on Feb 26, 2018. It is now read-only.

Commit

Permalink
issue #23 - Refactored inputGroup as element
Browse files Browse the repository at this point in the history
  • Loading branch information
moura137 authored and adamwathan committed May 1, 2015
1 parent ce98b60 commit c4190c4
Show file tree
Hide file tree
Showing 7 changed files with 96 additions and 104 deletions.
9 changes: 9 additions & 0 deletions src/AdamWathan/BootForms/BasicFormBuilder.php
Expand Up @@ -5,6 +5,7 @@
use AdamWathan\BootForms\Elements\CheckGroup;
use AdamWathan\BootForms\Elements\HelpBlock;
use AdamWathan\BootForms\Elements\GroupWrapper;
use AdamWathan\BootForms\Elements\InputGroup;

class BasicFormBuilder
{
Expand Down Expand Up @@ -169,6 +170,14 @@ public function file($label, $name, $value = null)
return $this->wrap($formGroup);
}

public function inputGroup($label, $name, $value = null)
{
$control = new InputGroup($name);
$control->value($value);

return $this->formGroup($label, $name, $control);
}

public function __call($method, $parameters)
{
return call_user_func_array(array($this->builder, $method), $parameters);
Expand Down
24 changes: 3 additions & 21 deletions src/AdamWathan/BootForms/Elements/FormGroup.php
Expand Up @@ -8,7 +8,6 @@ class FormGroup extends Element
protected $label;
protected $control;
protected $helpBlock;
protected $inputGroup;

public function __construct(Label $label, Element $control)
{
Expand All @@ -22,32 +21,15 @@ public function render()
$html = '<div';
$html .= $this->renderAttributes();
$html .= '>';
$html .= $this->label;
$html .= $this->renderInputGroup();
$html .= $this->label;
$html .= $this->control;
$html .= $this->renderHelpBlock();

$html .= '</div>';

return $html;
}

public function inputGroup($class = "")
{
if (!isset($this->inputGroup)) {
$this->inputGroup = new InputGroup($this, $class);
}

return $this->inputGroup;
}

protected function renderInputGroup()
{
if ($this->inputGroup) {
return $this->inputGroup->render();
}

return $this->control;
}

public function helpBlock($text)
{
if (isset($this->helpBlock)) {
Expand Down
7 changes: 1 addition & 6 deletions src/AdamWathan/BootForms/Elements/GroupWrapper.php
Expand Up @@ -21,12 +21,7 @@ public function helpBlock($text)
$this->formGroup->helpBlock($text);
return $this;
}

public function inputGroup($class = "")
{
return $this->formGroup->inputGroup($class);
}


public function __toString()
{
return $this->render();
Expand Down
72 changes: 36 additions & 36 deletions src/AdamWathan/BootForms/Elements/InputGroup.php
@@ -1,55 +1,55 @@
<?php namespace AdamWathan\BootForms\Elements;

use AdamWathan\Form\Elements\Element;
use AdamWathan\BootForms\Elements\FormGroup;
use AdamWathan\Form\Elements\Text;

class InputGroup extends Element
class InputGroup extends Text
{
private $formGroup;
private $beforeAddon = array();
private $afterAddon = array();
protected $beforeAddon = array();

public function __construct(FormGroup $formGroup, $class = '')
{
$this->formGroup = $formGroup;
$this->addClass('input-group');
if (!empty($class)) $this->addClass($class);
}
protected $afterAddon = array();

public function beforeAddon($addon)
{
$this->beforeAddon[] = $addon;
return $this->formGroup;
}
public function beforeAddon($addon)
{
$this->beforeAddon[] = $addon;

return $this;
}

public function afterAddon($addon)
{
$this->afterAddon[] = $addon;

public function afterAddon($addon)
return $this;
}

public function type($type)
{
$this->afterAddon[] = $addon;
return $this->formGroup;
$this->attributes['type'] = $type;
return $this;
}

protected function renderAddons($addons)
{
$html = '';
foreach ($addons as $addon) {
$html .= '<span class="input-group-addon">';
$html .= $addon;
$html .= '</span>';
}
protected function renderAddons($addons)
{
$html = '';

return $html;
}
foreach ($addons as $addon)
{
$html .= '<span class="input-group-addon">';
$html .= $addon;
$html .= '</span>';
}

return $html;
}

public function render()
{
$html = '<div';
$html .= $this->renderAttributes();
$html .= '>';
$html = '<div class="input-group">';
$html .= $this->renderAddons($this->beforeAddon);
$html .= $this->formGroup->control();
$html .= parent::render();
$html .= $this->renderAddons($this->afterAddon);
$html .= '</div>';

return $html;
}
}
}
33 changes: 26 additions & 7 deletions tests/BasicFormBuilderTest.php
Expand Up @@ -59,13 +59,6 @@ public function testRenderTextGroupWithErrorOverridesCustomHelpBlock()
$this->assertEquals($expected, $result);
}

public function testRenderTextGroupWithInputGroup()
{
$expected = '<div class="form-group"><label class="control-label" for="email">Email</label><div class="input-group"><span class="input-group-addon">@</span><input type="text" name="email" id="email" class="form-control"></div></div>';
$result = $this->form->text('Email', 'email')->inputGroup()->beforeAddon('@')->render();
$this->assertEquals($expected, $result);
}

public function testRenderTextGroupWithOldInput()
{
$oldInput = Mockery::mock('AdamWathan\Form\OldInput\OldInputInterface');
Expand Down Expand Up @@ -480,6 +473,32 @@ public function testCanHideLabels()
$this->assertEquals($expected, $result);
}

public function testRenderInputGroupWithBeforeAddon()
{
$expected = '<div class="form-group"><label class="control-label" for="username">Username</label><div class="input-group"><span class="input-group-addon">@</span><input type="text" name="username" id="username" class="form-control"></div></div>';
$result = $this->form->inputGroup('Username', 'username')->beforeAddon('@')->render();
$this->assertEquals($expected, $result);
}

public function testRenderInputGroupWithAfterAddon()
{
$expected = '<div class="form-group"><label class="control-label" for="site">Site</label><div class="input-group"><input type="text" name="site" id="site" class="form-control"><span class="input-group-addon">.com.br</span></div></div>';
$result = $this->form->inputGroup('Site', 'site')->afterAddon('.com.br')->render();
$this->assertEquals($expected, $result);
}

public function testRenderInputGroupChangeTypeWithBothAddon()
{
$expected = '<div class="form-group"><label class="control-label" for="secret">Secret</label><div class="input-group"><span class="input-group-addon">before</span><input type="password" name="secret" id="secret" class="form-control"><span class="input-group-addon">after</span></div></div>';
$result = $this->form
->inputGroup('Secret', 'secret')
->type('password')
->beforeAddon('before')
->afterAddon('after')
->render();
$this->assertEquals($expected, $result);
}

private function getStubObject()
{
$obj = new stdClass;
Expand Down
12 changes: 0 additions & 12 deletions tests/FormGroupTest.php
Expand Up @@ -81,16 +81,4 @@ public function testCanRenderWithHelpBlock()
$result = $formGroup->render();
$this->assertEquals($expected, $result);
}

public function testCanRenderWithInputGroup()
{
$label = $this->builder->label('Site');
$text = $this->builder->text('site');
$formGroup = new FormGroup($label, $text);
$formGroup->inputGroup()->beforeAddon('www')->inputGroup()->afterAddon('.com.br');

$expected = '<div class="form-group"><label>Site</label><div class="input-group"><span class="input-group-addon">www</span><input type="text" name="site"><span class="input-group-addon">.com.br</span></div></div>';
$result = $formGroup->render();
$this->assertEquals($expected, $result);
}
}
43 changes: 21 additions & 22 deletions tests/InputGroupTest.php
Expand Up @@ -5,35 +5,34 @@

class InputGroupTest extends PHPUnit_Framework_TestCase
{
public function setUp()
public function testCanRenderBasicText()
{
$input = new InputGroup('email');
$this->assertInstanceOf('AdamWathan\Form\Elements\Text', $input);

$expected = '<div class="input-group"><input type="text" name="email"></div>';
$result = $input->render();
$this->assertEquals($expected, $result);
}

public function testCanRenderBeforeAddon()
{
$control = '<input type="text" name="username">';
$formGroup = m::mock('AdamWathan\BootForms\Elements\FormGroup');
$formGroup->shouldReceive('control')->once()->andReturn($control);

$inputGroup = new InputGroup($formGroup, 'input-group-lg');
$this->assertEquals($formGroup, $inputGroup->beforeAddon('@'));

$expected = '<div class="input-group input-group-lg"><span class="input-group-addon">@</span>'.$control.'</div>';
$result = $inputGroup->render();
$this->assertEquals($expected, $result);
$input = new InputGroup('username');
$this->assertEquals($input, $input->beforeAddon('@'));

$expected = '<div class="input-group"><span class="input-group-addon">@</span><input type="text" name="username"></div>';
$result = $input->render();
$this->assertEquals($expected, $result);
}

public function testCanRenderAfterAddon()
public function testCanRenderAfterAddonAndType()
{
$control = '<input type="text" name="username">';
$formGroup = m::mock('AdamWathan\BootForms\Elements\FormGroup');
$formGroup->shouldReceive('control')->once()->andReturn($control);

$inputGroup = new InputGroup($formGroup, 'input-group-lg');
$this->assertEquals($formGroup, $inputGroup->afterAddon(',00'));

$expected = '<div class="input-group input-group-lg">'.$control.'<span class="input-group-addon">,00</span></div>';
$result = $inputGroup->render();
$this->assertEquals($expected, $result);
$input = new InputGroup('mail');
$this->assertEquals($input, $input->type('email'));
$this->assertEquals($input, $input->afterAddon('@domain.com'));

$expected = '<div class="input-group"><input type="email" name="mail"><span class="input-group-addon">@domain.com</span></div>';
$result = $input->render();
$this->assertEquals($expected, $result);
}
}

0 comments on commit c4190c4

Please sign in to comment.