/** * Renders form end. * * @return string */ public static function renderFormEnd(Form $form) { $s = ''; if (strcasecmp($form->getMethod(), 'get') === 0) { $url = explode('?', $form->getElementPrototype()->action, 2); if (isset($url[1])) { foreach (preg_split('#[;&]#', $url[1]) as $param) { $parts = explode('=', $param, 2); $name = urldecode($parts[0]); if (!isset($form[$name])) { $s .= Nette\Utils\Html::el('input', array('type' => 'hidden', 'name' => $name, 'value' => urldecode($parts[1]))); } } } } foreach ($form->getComponents(true, 'Nette\\Forms\\Controls\\HiddenField') as $control) { if (!$control->getOption('rendered')) { $s .= $control->getControl(); } } if (iterator_count($form->getComponents(true, 'Nette\\Forms\\Controls\\TextInput')) < 2) { $s .= '<!--[if IE]><input type=IEbug disabled style="display:none"><![endif]-->'; } echo ($s ? "<div>{$s}</div>\n" : '') . $form->getElementPrototype()->endTag() . "\n"; }
private function decorateFormControls() { $this->form->getElementPrototype()->class('form-horizontal'); $this->usedPrimary = FALSE; foreach ($this->form->getControls() as $control) { if ($control instanceof NetteBaseControl) { $this->decorateFormControl($control); } } }
/** * Render the templates * * @param \Nette\Forms\Form $form * @param string $mode * * @return void */ public function render(Nette\Forms\Form $form, $mode = NULL) { if ($this->form !== $form) { $this->form = $form; // translators if ($translator = $this->form->getTranslator()) { $this->template->setTranslator($translator); } // controls placeholders & classes foreach ($this->form->getControls() as $control) { $this->prepareControl($control); } $formEl = $form->getElementPrototype(); if (!$formEl->class || stripos('form-', (string) $formEl->class) === FALSE) { $formEl->addClass('form-horizontal'); } } $this->template->form = $this->form; $this->template->_form = $this->form; $this->template->renderer = $this; if ($mode === NULL) { $this->template->render(); } elseif ($mode === 'begin') { FormMacros::renderFormBegin($this->form, array()); } elseif ($mode === 'end') { FormMacros::renderFormEnd($this->form); } else { $this->template->setFile(__DIR__ . '/@parts.latte'); $this->template->mode = $mode; $this->template->render(); $this->template->setFile(__DIR__ . '/@form.latte'); } }
private function getToggleScript(Rules $rules, $cond = NULL) { $s = ''; foreach ($rules->getToggles() as $id => $visible) { $s .= "visible = true; {$cond}\n" . "nette.toggle(" . Nette\Json::encode((string) $id) . ", " . ($visible ? '' : '!') . "visible);\n"; } $formName = Nette\Json::encode((string) $this->form->getElementPrototype()->id); foreach ($rules as $rule) { if ($rule->type === Rule::CONDITION && is_string($rule->operation)) { $script = $this->getClientScript($rule->control, $rule->operation, $rule->arg); if ($script) { $res = $this->getToggleScript($rule->subRules, $cond . "{$script} visible = visible && " . ($rule->isNegative ? '!' : '') . "res;\n"); if ($res) { $el = $rule->control->getControlPrototype(); if ($el->getName() === 'select') { $el->onchange("nette.forms[{$formName}].toggle(this)", TRUE); } else { $el->onclick("nette.forms[{$formName}].toggle(this)", TRUE); //$el->onkeyup("nette.forms[$formName].toggle(this)", TRUE); } $s .= $res; } } } } return $s; }
/** * Render the templates. * @param Form $form * @param string $mode * @param array $args */ public function render(Form $form, $mode = NULL, $args = NULL) { if ($this->template === NULL) { if ($presenter = $form->lookup('Nette\\Application\\UI\\Presenter', FALSE)) { /** @var \Nette\Application\UI\Presenter $presenter */ $this->template = clone $presenter->getTemplate(); } else { $this->template = new FileTemplate(); $this->template->registerFilter(new \Nette\Latte\Engine()); } } if ($this->form !== $form) { $this->form = $form; // translators if ($translator = $this->form->getTranslator()) { $this->template->setTranslator($translator); } // controls placeholders & classes foreach ($this->form->getControls() as $control) { $this->prepareControl($control); } $formEl = $form->getElementPrototype(); if (!($classes = self::getClasses($formEl)) || stripos($classes, 'form-') === FALSE) { //$formEl->addClass('form-horizontal'); } } elseif ($mode === 'begin') { foreach ($this->form->getControls() as $control) { /** @var \Nette\Forms\Controls\BaseControl $control */ $control->setOption('rendered', FALSE); } } $this->template->setFile(__DIR__ . '/@form.latte'); $this->template->setParameters(array_fill_keys(array('control', '_control', 'presenter', '_presenter'), NULL) + array('_form' => $this->form, 'form' => $this->form, 'renderer' => $this)); if ($mode === NULL) { if ($args) { $this->form->getElementPrototype()->addAttributes($args); } $this->template->render(); } elseif ($mode === 'begin') { FormMacros::renderFormBegin($this->form, (array) $args); } elseif ($mode === 'end') { FormMacros::renderFormEnd($this->form); } else { $attrs = array('input' => array(), 'label' => array()); foreach ((array) $args as $key => $val) { if (stripos($key, 'input-') === 0) { $attrs['input'][substr($key, 6)] = $val; } elseif (stripos($key, 'label-') === 0) { $attrs['label'][substr($key, 6)] = $val; } } $this->template->setFile(__DIR__ . '/@parts.latte'); $this->template->mode = $mode; $this->template->attrs = (array) $attrs; $this->template->render(); } }
/** * @param Nette\Forms\Form $form * @param null $mode * * @return mixed */ public function render(Nette\Forms\Form $form, $mode = null) { $form->getElementPrototype()->addClass('form-horizontal'); $form->getElementPrototype()->setNovalidate('novalidate'); foreach ($form->getControls() as $control) { if ($control instanceof Controls\Button) { if (strpos($control->getControlPrototype()->getClass(), 'btn') === FALSE) { $control->getControlPrototype()->addClass(empty($usedPrimary) ? 'btn btn-primary' : 'btn btn-default'); $usedPrimary = true; } } elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) { $control->getControlPrototype()->addClass('form-control'); } elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) { $control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type); } } return parent::render($form, $mode); }
/** * Renders form end. * @return string */ public function renderEnd() { $s = ''; foreach ($this->form->getControls() as $control) { if ($control instanceof HiddenField && !$control->getOption('rendered')) { $s .= (string) $control->getControl(); } } if ($s) { $s = $this->getWrapper('hidden container')->setHtml($s) . "\n"; } return $s . $this->form->getElementPrototype()->endTag() . "\n"; }
/** * Renders form end. * @return string */ public static function renderFormEnd(Form $form, $withTags = TRUE) { $s = ''; if (strcasecmp($form->getMethod(), 'get') === 0) { foreach (preg_split('#[;&]#', parse_url($form->getElementPrototype()->action, PHP_URL_QUERY), NULL, PREG_SPLIT_NO_EMPTY) as $param) { $parts = explode('=', $param, 2); $name = urldecode($parts[0]); if (!isset($form[$name])) { $s .= Html::el('input', ['type' => 'hidden', 'name' => $name, 'value' => urldecode($parts[1])]); } } } foreach ($form->getControls() as $control) { if ($control->getOption('type') === 'hidden' && !$control->getOption('rendered')) { $s .= $control->getControl(); } } if (iterator_count($form->getComponents(TRUE, Nette\Forms\Controls\TextInput::class)) < 2) { $s .= "<!--[if IE]><input type=IEbug disabled style=\"display:none\"><![endif]-->\n"; } return $s . ($withTags ? $form->getElementPrototype()->endTag() . "\n" : ''); }
/** * Renders form end. * @return string */ public function renderEnd() { $s = ''; foreach ($this->form->getControls() as $control) { if ($control instanceof Nette\Forms\Controls\HiddenField && !$control->getOption('rendered')) { $s .= (string) $control->getControl(); } } if (iterator_count($this->form->getComponents(TRUE, 'Nette\\Forms\\Controls\\TextInput')) < 2) { $s .= '<!--[if IE]><input type=IEbug disabled style="display:none"><![endif]-->'; } if ($s) { $s = $this->getWrapper('hidden container')->setHtml($s) . "\n"; } return $s . $this->form->getElementPrototype()->endTag() . "\n"; }
public function render(\Nette\Forms\Form $form, $mode = null) { $this->wrappers['controls']['container'] = 'div class=col-sm-12'; $this->wrappers['pair']['container'] = 'div class=form-group'; $this->wrappers['control']['container'] = 'div class=col-lg-8'; $this->wrappers['label']['container'] = 'label class=col-lg-4'; // make form and controls compatible with Twitter Bootstrap $form->getElementPrototype()->class('form-horizontal'); foreach ($form->getControls() as $control) { if ($control instanceof Controls\Button) { $control->getControlPrototype()->addClass(empty($usedPrimary) ? 'btn btn-primary' : 'btn btn-default'); $usedPrimary = true; } elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) { $control->getControlPrototype()->addClass('form-control'); } elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) { $control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type); } } return parent::render($form, $mode); }
/** * Render the templates * * @param \Nette\Forms\Form $form * * @return void */ public function render(Nette\Forms\Form $form) { if ($this->form !== $form) { $this->form = $form; // translators if ($translator = $this->form->getTranslator()) { $this->template->setTranslator($translator); } // controls placeholders & classes foreach ($this->form->getControls() as $control) { $this->prepareControl($control); } $formEl = $form->getElementPrototype(); if (stripos('form-', $formEl->class) === FALSE) { $formEl->addClass('form-horizontal'); } } $this->template->form = $this->form; $this->template->renderer = $this; $this->template->render(); }
/** * Make form and controls compatible with Twitter Bootstrap * @param Form $form */ protected function prepareForm(Form $form) { $form->getElementPrototype()->class[] = 'form-horizontal'; $translator = $form->getTranslator(); foreach ($form->controls as $control) { /** @var BaseControl $control */ if ($control instanceof HiddenField) { continue; } elseif ($control instanceof Button) { $control->controlPrototype->class[] = "btn-block btn-lg"; } else { if ($control->getLabel()) { $control->setAttribute('placeholder', $control->caption); if (empty($control->controlPrototype->attrs['title'])) { $control->setAttribute('title', $translator ? $translator->translate($control->caption) : $control->caption); } $control->getLabelPrototype()->attrs["style"] = "display:none"; } } } BootstrapHelper::ApplyBootstrapToControls($form); }
public static function bootstrapForm(Form $form) { // setup form rendering $renderer = $form->getRenderer(); $renderer->wrappers['controls']['container'] = NULL; $renderer->wrappers['pair']['container'] = 'div class="form-group"'; $renderer->wrappers['pair']['.error'] = 'has-error'; $renderer->wrappers['control']['container'] = 'div class="col-sm-9"'; $renderer->wrappers['label']['container'] = 'div class="col-sm-3 control-label"'; $renderer->wrappers['control']['description'] = 'span class=help-block'; $renderer->wrappers['control']['errorcontainer'] = 'span class=help-block'; // make form and controls compatible with Twitter Bootstrap $form->getElementPrototype()->class('form-horizontal'); foreach ($form->getControls() as $control) { if ($control instanceof Controls\Button) { $control->getControlPrototype()->addClass(empty($usedPrimary) ? 'btn btn-shadow' : 'btn btn-default'); $usedPrimary = TRUE; } elseif ($control instanceof Controls\TextBase || $control instanceof Controls\SelectBox || $control instanceof Controls\MultiSelectBox) { $control->getControlPrototype()->addClass('form-control form-control-shadow'); } elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) { $control->getSeparatorPrototype()->setName('div')->addClass($control->getControlPrototype()->type); } } }
private function addFormModeClass(Form $form, array &$attrs) { if ($this->renderMode !== RenderModeEnum::VERTICAL) { if (isset($attrs['class'])) { $classes = explode(' ', $attrs['class']); $pos = array_search('no-' . $this->renderMode, $classes, TRUE); if ($pos !== FALSE) { // if .no-form-<mode> class is present, remove it and not include form-<mode> class unset($classes[$pos]); } else { // otherwise add form-<mode> class $classes[] = $this->renderMode; } if (count($classes) === 0) { unset($attrs['class']); } else { $attrs['class'] = implode(' ', $classes); } } else { $classes = $form->getElementPrototype()->getAttribute('class'); if (is_string($classes)) { $classes = explode(' ', $classes); } elseif (!is_array($classes)) { $classes = []; } $classes[] = $this->renderMode; $attrs['class'] = implode(' ', $classes); } } }
/** * Make form and controls compatible with Twitter Bootstrap * @param Form $form */ protected function prepareForm(Form $form) { $form->getElementPrototype()->class[] = 'form-inline'; BootstrapHelper::ApplyBootstrapToControls($form); }
/** * Render the templates * * @param \Nette\Forms\Form $form * @param string $mode * @param array $args * @return void */ public function render(Nette\Forms\Form $form, $mode = NULL, $args = NULL) { if ($this->template === NULL) { if ($presenter = $form->lookup('Nette\\Application\\UI\\Presenter', FALSE)) { /** @var \Nette\Application\UI\Presenter $presenter */ $this->template = clone $presenter->getTemplate(); } else { $this->template = new Nette\Bridges\ApplicationLatte\Template(new Nette\Latte\Engine()); } } if ($this->form !== $form) { $this->form = $form; // translators if ($translator = $this->form->getTranslator()) { $this->template->setTranslator($translator); } // controls placeholders & classes foreach ($this->form->getControls() as $control) { $this->prepareControl($control); } $formEl = $form->getElementPrototype(); if (!($classes = self::getClasses($formEl)) || stripos($classes, 'form-') === FALSE) { $this->horizontalMode = $this->mode === self::MODE_HORIZONTAL; if ($this->mode !== self::MODE_NO_CLASS) { $formEl->addClass($this->mode); } } } elseif ($mode === 'begin') { foreach ($this->form->getControls() as $control) { /** @var \Nette\Forms\Controls\BaseControl $control */ $control->setOption('rendered', FALSE); } } $this->template->setFile(__DIR__ . '/@form.latte'); $this->template->setParameters(array_fill_keys(array('control', '_control', 'presenter', '_presenter'), NULL) + array('_form' => $this->form, 'form' => $this->form, 'renderer' => $this)); if ($this->horizontalMode) { $this->template->labelCols = $this->labelColumns; $this->template->inputCols = $this->inputColumns; $this->template->labelClass = $this->columnClassPrefix . $this->labelColumns; $this->template->inputClass = $this->columnClassPrefix . $this->inputColumns; $this->template->skipClass = $this->columnClassPrefix . 'offset-' . $this->labelColumns; } if ($mode === NULL) { if ($args) { $this->form->getElementPrototype()->addAttributes($args); } $this->template->render(); } elseif ($mode === 'begin') { FormMacros::renderFormBegin($this->form, (array) $args); } elseif ($mode === 'end') { FormMacros::renderFormEnd($this->form); } else { $attrs = array('input' => array(), 'label' => array(), 'pair' => array(), 'pair-class' => ''); foreach ((array) $args as $key => $val) { if (stripos($key, 'input-') === 0) { $attrs['input'][substr($key, 6)] = $val; } elseif (stripos($key, 'label-') === 0) { $attrs['label'][substr($key, 6)] = $val; } elseif ($key === 'class') { $attrs['pair-class'] = $val; } else { $attrs['pair'][$key] = $val; } } if ($this->horizontalMode) { if (isset($attrs['label']['class'])) { $attrs['label']['class'] .= ' ' . $this->columnClassPrefix . $this->labelColumns; } else { $attrs['label']['class'] = $this->columnClassPrefix . $this->labelColumns; } } $this->template->setFile(__DIR__ . '/@parts.latte'); $this->template->mode = $mode; $this->template->attrs = (array) $attrs; $this->template->render(); } }
* @version $Id$ */ define("APP_DIR", dirname(__FILE__)); require_once "../load.php"; require_once "example_library.php"; if (isset($_GET["logConsole"])) { require "logConsole.php"; } use FileDownloader\Downloader\AdvancedDownloader; use FileDownloader\FDTools; use FileDownloader\FileDownload; use Nette\Diagnostics\Debugger; use Nette\Forms\Form; // Generate form $f = new Form("upload-form"); $f->getElementPrototype()->id = "frm"; $f->setMethod("GET"); $f->addSelect("speed", "Speed", array(1 => "1byte/s", 50 => "50bytes/s", 512 => "512bytes/s", 1 * FDTools::KILOBYTE => "1kb/s", 5 * FDTools::KILOBYTE => "5kb/s", 20 * FDTools::KILOBYTE => "20kb/s", 32 * FDTools::KILOBYTE => "32kb/s", 50 * FDTools::KILOBYTE => "50kb/s", 64 * FDTools::KILOBYTE => "64kb/s", 100 * FDTools::KILOBYTE => "100kb/s", 128 * FDTools::KILOBYTE => "128kb/s", 200 * FDTools::KILOBYTE => "200kb/s", 256 * FDTools::KILOBYTE => "256kb/s", 300 * FDTools::KILOBYTE => "300kb/s", 512 * FDTools::KILOBYTE => "512kb/s", 1 * FDTools::MEGABYTE => "1mb/s", 2 * FDTools::MEGABYTE => "2mb/s", 5 * FDTools::MEGABYTE => "5mb/s", 10 * FDTools::MEGABYTE => "10mb/s", 0 => "Unlimited")); $f->addText("filename", "Filename")->addRule(Form::FILLED, "You must fill name!"); $f->addSelect("size", "Size", array(1 => "1MB", 4 => "4MB", 8 => "8MB", 16 => "16MB", 32 => "32MB", 64 => "64MB", 128 => "128MB", 256 => "256MB", 512 => "512MB")); $f->addSelect("log", "Log called events?", array(0 => "No", 1 => "Yes (may cause CPU load)")); $f->addSubmit("download", "Download!"); $f->setDefaults(array("speed" => 50, "filename" => "Some horrible file name - ěščřžýáíé.bin", "size" => 8, "log" => 1)); if ($f->isSubmitted() and $f->isValid()) { Debugger::enable(Debugger::PRODUCTION); // Log errors to file! $val = $f->getValues(); $location = dirname(__FILE__) . "/cache/test-" . $val["size"] . "MB.tmp"; if (!file_exists($location)) { generateFile($location, $val["size"] * 1024); }
if ($form->isSuccess()) { echo '<h2>Form was submitted and successfully validated</h2>'; Dumper::dump($form->getValues()); exit; } // setup form rendering $renderer = $form->getRenderer(); $renderer->wrappers['controls']['container'] = NULL; $renderer->wrappers['pair']['container'] = 'div class=control-group'; $renderer->wrappers['pair']['.error'] = 'error'; $renderer->wrappers['control']['container'] = 'div class=controls'; $renderer->wrappers['label']['container'] = 'div class=control-label'; $renderer->wrappers['control']['description'] = 'span class=help-inline'; $renderer->wrappers['control']['errorcontainer'] = 'span class=help-inline'; // make form and controls compatible with Twitter Bootstrap $form->getElementPrototype()->class('form-horizontal'); foreach ($form->getControls() as $control) { if ($control instanceof Controls\Button) { $control->getControlPrototype()->addClass(empty($usedPrimary) ? 'btn btn-primary' : 'btn'); $usedPrimary = TRUE; } elseif ($control instanceof Controls\Checkbox || $control instanceof Controls\CheckboxList || $control instanceof Controls\RadioList) { $control->getLabelPrototype()->addClass($control->getControlPrototype()->type); $control->getSeparatorPrototype()->setName(NULL); } } ?> <!DOCTYPE html> <meta charset="utf-8"> <title>Nette Forms & Bootstrap 2 rendering example</title> <link rel="stylesheet" media="screen" href="http://netdna.bootstrapcdn.com/bootstrap/2.3.2/css/bootstrap.min.css" />