$grid); parent::__construct($properties); } public function jQueryDocumentReady() { $id = $this->form->getId(); /*jQuery is used to remove margin from the elements on the far left/right of each row and apply css entries to the last row.*/ echo <<form->getAttributes(), '>'; $this->form->getError()->render(); $elements = $this->form->getElements(); $gridElementCount = 0; $gridIndex = 0; $gridCount = 0; $elementSize = sizeof($elements); for($e = 0; $e < $elementSize; ++$e) { $element = $elements[$e]; if($element instanceof Element_Hidden || $element instanceof Element_HTMLExternal) $element->render(); elseif($element instanceof Element_Button) { /*Consecutive Button elements are rendered horizontally in the same row.*/ if($e == 0 || !$elements[($e - 1)] instanceof Element_Button) echo '
'; $element->render(); if(($e + 1) == $elementSize || !$elements[($e + 1)] instanceof Element_Button) echo '
'; } else { echo $element->getPreHTML(); if(!empty($this->grid[$gridIndex])) { if($gridCount == 0) echo '
'; } else echo '
'; echo '
'; $this->renderLabel($element); $element->render(); echo '
'; if(!empty($this->grid[$gridIndex]) && ($gridElementCount + 1) == $this->gridIncludedElements) echo '
'; elseif(!empty($this->grid[$gridIndex])) { if(($gridCount + 1) == $this->grid[$gridIndex]) { echo '
'; $gridCount = 0; ++$gridIndex; } else ++$gridCount; } else echo ''; echo $element->getPostHTML(); ++$gridElementCount; } } echo ''; } public function renderCSS() { $id = $this->form->getId(); $width = $this->form->getWidth(); $widthSuffix = $this->form->getWidthSuffix(); parent::renderCSS(); echo <<gridMargin}$widthSuffix; margin-left: {$this->gridMargin}$widthSuffix; } CSS; $elements = $this->form->getElements(); $gridElements = array(); foreach($elements as $element) { /*Hidden, HTMLExternal, and Button element classes aren't included in the grid.*/ if(!$element instanceof Element_Hidden && !$element instanceof Element_HTMLExternal && !$element instanceof Element_Button) { ++$this->gridIncludedElements; $gridElements[] = $element; } } /*If the grid array contains more elements than the form has available, it is revised.*/ if(array_sum($this->grid) > $this->gridIncludedElements) { $gridRevised = array(); foreach($this->grid as $grid) { $gridRemaining = $this->gridIncludedElements - array_sum($gridRevised); if(!empty($gridRemaining)) if($gridRemaining >= $grid) $gridRevised[] = $grid; else $gridRevised[] = $gridRemaining; else break; } $this->grid = $gridRevised; } $gridSize = sizeof($this->grid); $elementWidths = array(); for($g = 0; $g < $gridSize; ++$g) { $gridSum = array_sum(array_slice($this->grid, 0, $g)); if($widthSuffix == "px") $gridRemainingWidth = $width; else $gridRemainingWidth = 100; $gridRemainingElements = $this->grid[$g]; for($e = $gridSum; $e < ($gridSum + $this->grid[$g]); ++$e) { $elementWidths[$e] = $gridElements[$e]->getWidth(); if(!empty($elementWidths[$e])) { $gridRemainingWidth -= $elementWidths[$e]; --$gridRemainingElements; echo '#', $id, ' #pfbc-element-', $e, ' { float: left; width: ', $elementWidths[$e], $widthSuffix, '; }'; echo '#', $id, ' #pfbc-element-', $e, ' .pfbc-textbox, #', $id, ' #pfbc-element-', $e, ' .pfbc-textarea, #', $id, ' #pfbc-element-', $e, ' .pfbc-select { width: ', $elementWidths[$e], $widthSuffix, '; }'; } } if(!empty($gridRemainingElements)) { $elementWidth = floor((($gridRemainingWidth - ($this->gridMargin * 2 * ($this->grid[$g] - 1))) / $gridRemainingElements)); for($e = $gridSum; $e < ($gridSum + $this->grid[$g]); ++$e) { if(empty($elementWidths[$e])) { echo '#', $id, ' #pfbc-element-', $e, ' { float: left; width: ', $elementWidth, $widthSuffix, '; }'; echo '#', $id, ' #pfbc-element-', $e, ' .pfbc-textbox, #', $id, ' #pfbc-element-', $e, ' .pfbc-textarea, #', $id, ' #pfbc-element-', $e, ' .pfbc-select { width: ', $elementWidth, $widthSuffix, '; }'; } } } } } }