diff --git a/code/BootstrapForm.php b/code/BootstrapForm.php index 6ff330c..24a9e1f 100755 --- a/code/BootstrapForm.php +++ b/code/BootstrapForm.php @@ -29,6 +29,28 @@ class BootstrapForm extends Form { protected $formLayout = "vertical"; + /** + * The label grid class for the bootstrap 3 horizontal form + * + * @var String + */ + protected $gridLabelClass = "col-sm-3"; + + + /** + * The input grid class for the bootstrap 3 horizontal form + * + * @var String + */ + protected $gridInputClass = "col-sm-9"; + + /** + * The Action grid class for the bootstrap 3 horizontal form + * + * @var String + */ + protected $gridActionClass = "col-sm-offset-3 col-sm-9"; + /** @@ -97,6 +119,50 @@ public function setLayout($layout) { } + /** + * Sets the desired label Grid Class of the form. Options include: + * - "col-sm-3" (default) + * - "col-sm-4" + * etc.. + * + * @param String + * @return BootstrapForm + */ + public function setGridLabelClass($class) { + $this->gridLabelClass = strtolower($class); + return $this; + } + + + /** + * Sets the desired Input Grid Class of the form. Options include: + * - "col-sm-9" (default) + * - "col-sm-8" + * etc.. + * + * @param String + * @return BootstrapForm + */ + public function setGridInputClass($class) { + $this->gridInputClass = strtolower($class); + return $this; + } + + + /** + * Sets the desired Action Grid Class of the form. Options include: + * - "col-sm-offset-3 col-sm-9" (default) + * - "col-sm-offset-2 col-sm-10" + * etc.. + * + * @param String + * @return BootstrapForm + */ + public function setGridActionClass($class) { + $this->gridActionClass = strtolower($class); + return $this; + } + /** * Adds a "well," or sunken background and border, to the form @@ -116,18 +182,18 @@ public function addWell() { * @return string */ public function forTemplate() { - if(!$this->stat('bootstrap_included')) { - Requirements::css(BOOTSTRAP_FORMS_DIR.'/css/bootstrap.css'); + if($this->stat('bootstrap_included')!=false) { + Requirements::css(BOOTSTRAP_FORMS_DIR.'/css/bootstrap.css'); } - if(!$this->stat('jquery_included')) { + if($this->stat('jquery_included')!=false) { Requirements::javascript(THIRDPARTY_DIR."/jquery/jquery.js"); } - if(!$this->stat('bootstrap_form_included')) { + if(!$this->stat('bootstrap_form_included')!=false) { Requirements::javascript(BOOTSTRAP_FORMS_DIR."/javascript/bootstrap_forms.js"); } $this->addExtraClass("form-{$this->formLayout}"); - $this->applyBootstrap(); + $this->applyBootstrap(); return parent::forTemplate(); } diff --git a/code/BootstrapFormField.php b/code/BootstrapFormField.php index 7371665..5f9c4b0 100755 --- a/code/BootstrapFormField.php +++ b/code/BootstrapFormField.php @@ -27,6 +27,23 @@ class BootstrapFormField extends DataExtension { ); + /** + * The label grid class for the bootstrap 3 horizontal form + * overrides form setting + * + * @var String + */ + protected $gridLabelClass = ''; + + /** + * The input grid class for the bootstrap 3 horizontal form + * overrides form setting + * + * @var String + */ + protected $gridInputClass = ''; + + /** * Adds a HTML5 placeholder attribute to the form field * @@ -166,6 +183,59 @@ public function HolderClasses() { return implode(" ",$this->holderClasses); } + + /** + * returns the bootstrap Layout to be used in templates + * + * @return string + */ + public function BootstrapLayout() { + return $this->owner->form->formLayout; + } + + /** + * Allows setting custom Grid label class to override from grid label class + * + * @param string $class + * + * @return BootstrapFormField + */ + public function setGridLabelClass($class) { + $this->gridLabelClass = $class; + return $this->owner; + } + + /** + * Allows setting custom Grid input class to override from grid label class + * + * @param string $class + * + * @return BootstrapFormField + */ + public function setGridInputClass($class) { + $this->gridInputClass = $class; + return $this->owner; + } + + /** + * returns Grid label class to be used in templates + * + * @return integer + */ + public function GridLabelClass() { + return (trim($this->gridLabelClass)!='')?$this->gridLabelClass:$this->owner->form->gridLabelClass; + } + + /** + * returns Grid input class to be used in templates + * + * @return integer + */ + public function GridInputClass() { + return (trim($this->gridInputClass)!='')?$this->gridInputClass:$this->owner->form->gridInputClass; + } + + /** * checks for error messages in owner form field * adds error class to holder and loads error message as helptext @@ -178,22 +248,22 @@ private function loadErrorMessage() { $this->addHelpText($this->owner->message); } } - + /** * Adds the form-control class to *just* the formfield, not the holder. * This seems a bit of a hack, but addExtraClass() affects both the holder * and the field, so that's not a realistic option. We can't have form-control * on the wrapping div. - * - * @param FormField $field + * + * @param FormField $field */ - public function onBeforeRender (FormField $field) { - $inline_fields = Config::inst()->get('BootstrapForm','inline_fields'); + public function onBeforeRender (FormField $field) { + $inline_fields = Config::inst()->get('BootstrapForm','inline_fields'); - if(!in_array($field->class, $inline_fields )) { - $field->addExtraClass('form-control'); - } + if(!in_array($field->class, $inline_fields )) { + $field->addExtraClass('form-control'); + } } -} \ No newline at end of file +} diff --git a/templates/BootstrapFieldHolder.ss b/templates/BootstrapFieldHolder.ss index f7d072d..9479221 100755 --- a/templates/BootstrapFieldHolder.ss +++ b/templates/BootstrapFieldHolder.ss @@ -1,11 +1,12 @@
$HelpText
<% end_if %> <% if $InlineHelpText %> $InlineHelpText - <% end_if %> + <% end_if %> +<% if $BootstrapLayout=='horizontal' %>$HelpText
- <% end_if %> - <% if InlineHelpText %> - $InlineHelpText - <% end_if %> + <% if $HelpText %>$HelpText
<% end_if %> + + <% if $InlineHelpText %>$InlineHelpText<% end_if %> + + <% if $AppendedText || $PrependedText %>