Utility/Fields/Repeater.php
public function render()
    {
        $htmlRepeaterTemplate = '';
        $tdFirstBody = "<td class='field-order'>
                                <label class='circle' >%s</label>
                                <input type='hidden' name='%s' id='%s' value='%s'/>
                            </td>";
        $repeaterDeleteId = 'repeater_delete_' . $this->locale . '_' . $this->getFieldId();
        $repeaterTableId = 'repeater_table_' . $this->locale . '_' . $this->getFieldId();
        $repeaterDeleteName = sprintf('%s[fields][%s][delete]', $this->locale, $this->getFieldId());
        $tdDeleteBtn = "<td class='last'>
							<a class='btn-delete' onclick=\"deleteRepeaterField('{$this->locale}_{$this->getFieldId()}',this)\">
								<span class='glyphicon glyphicon-minus'></span>
							</a>
						</td>";
        $groups = $this->groupFields;

        $headers = $this->repeaterHeaders;
        $columns = count($headers) + 2;
        $tableHeader = "<tr class='repeater-group'>
							<th colspan='{$columns}'>" . $this->getLabel() . '</th>
						</tr>';

        $columnWidth = 50;
        if (count($headers)) {
            $columnWidth = 100 / ($columns - 2);
             // make header
            $tdHeader = '';
            $tdTemplate = '';
            foreach ($headers as $field) {
                $tdHeader .= sprintf("<th class='caption' width='%s'>%s</th>", $columnWidth . '%', $field->getLabel());
                $field->setLabel('');
                $tdTemplate .= sprintf("<td width='%s'>%s</td>", $columnWidth . '%', $field->render());
            }

            $groupName = $this->locale . '[fields][%s][order][%s]';
            $groupName = sprintf($groupName, $this->fieldId, 'clone');
            // assign template to create new item of repeater
            $tdFirstNew = sprintf($tdFirstBody, -1, $groupName, $groupName, -1);
            $tdTemplate = $tdFirstNew . $tdTemplate . $tdDeleteBtn;
            $repeaterFormat = "<tr class='repeater-template' id='repeater_template_%s_%s'>%s</tr>";
            $htmlRepeaterTemplate = sprintf($repeaterFormat, $this->locale, $this->getFieldId(), $tdTemplate);

            // assign header lable for repeater
            $tdHeader = '<th>&nbsp;</th>' . $tdHeader . "<th class='last'>&nbsp;</th>";
            $tableHeader .= $tdHeader;
        }
        $trBody = '';
        if (count($groups)) {
            // make row
            $i = 1;
            foreach ($groups as $groupId => $group) {
                $groupName = $this->locale . '[fields][%s][order][%s]';
                $groupOrder = $group['order'];
                $groupName = sprintf($groupName, $this->fieldId, $groupId);

                $fields = $group['fields'];
                $tdBody = '';
                foreach ($fields as $field) {
                    $field->setLabel('');
                    $tdBody .= sprintf("<td width='%s'>%s</td>", $columnWidth . '%', $field->render());
                }

                $tdFirstNew = sprintf($tdFirstBody, $i, $groupName, $groupName, $groupOrder);
                $tdBody = $tdFirstNew . $tdBody . $tdDeleteBtn;
                $trBody .= sprintf("<tr data-id='%s' class='another-field'>%s</tr>", $groupId, $tdBody);
                ++$i;
            }
        }
        $tableBody = $trBody . $htmlRepeaterTemplate;
        $htmlAddNewBtn = "<a  class ='btn btn-primary btn-flat' onclick=\"addRepeaterField('{$this->locale}_{$this->getFieldId()}')\">" . trans('Add Item') . '</a>';
        $tableFooter = sprintf("<td colspan='{$columns}'>%s</td>", $htmlAddNewBtn);

        $tableHtml = "<table  class='table-repeater ' id='{$repeaterTableId}' >
							<thead>%s</thead>
							<tbody class='sortable'>%s</tbody>
							<tfoot>%s</tfoot>
						  </table>";

        $html = sprintf($tableHtml, $tableHeader, $tableBody, $tableFooter);

        // assign index for repeater to make new item
        $repeaterIndexId = 'repeater_index_' . $this->locale . '_' . $this->getFieldId();

        $inputIndex = FormFacade::hidden($repeaterIndexId, 0, array('id' => $repeaterIndexId));
        $inputDelete = FormFacade::hidden($repeaterDeleteName, '', array('id' => $repeaterDeleteId));
        $html            .= $inputIndex . $inputDelete;

        $html            .=  sprintf("<script>$( document ).ready(function() {bindSortableForRepeater('%s');});</script>", $repeaterTableId);

        return $html;
    }
public function render()
    {
        $htmlRepeaterTemplate = '';
        $tdFirstBody = "<td class='field-order'>
                                <label class='circle' >%s</label>
                                <input type='hidden' name='%s' id='%s' value='%s'/>
                            </td>";
        $repeaterDeleteId = 'repeater_delete_' . $this->locale . '_' . $this->getFieldId();
        $repeaterTableId = 'repeater_table_' . $this->locale . '_' . $this->getFieldId();
        $repeaterDeleteName = sprintf('%s[fields][%s][delete]', $this->locale, $this->getFieldId());
        $tdDeleteBtn = "<td class='last'>
							<a class='btn-delete' onclick=\"deleteRepeaterField('{$this->locale}_{$this->getFieldId()}',this)\">
								<span class='glyphicon glyphicon-minus'></span>
							</a>
						</td>";
        $groups = $this->groupFields;

        $headers = $this->repeaterHeaders;
        $columns = count($headers) + 2;
        $tableHeader = "<tr class='repeater-group'>
							<th colspan='{$columns}'>" . $this->getLabel() . '</th>
						</tr>';

        $columnWidth = 50;
        if (count($headers)) {
            $columnWidth = 100 / ($columns - 2);
             // make header
            $tdHeader = '';
            $tdTemplate = '';
            foreach ($headers as $field) {
                $tdHeader .= sprintf("<th class='caption' width='%s'>%s</th>", $columnWidth . '%', $field->getLabel());
                $field->setLabel('');
                $tdTemplate .= sprintf("<td width='%s'>%s</td>", $columnWidth . '%', $field->render());
            }

            $groupName = $this->locale . '[fields][%s][order][%s]';
            $groupName = sprintf($groupName, $this->fieldId, 'clone');
            // assign template to create new item of repeater
            $tdFirstNew = sprintf($tdFirstBody, -1, $groupName, $groupName, -1);
            $tdTemplate = $tdFirstNew . $tdTemplate . $tdDeleteBtn;
            $repeaterFormat = "<tr class='repeater-template' id='repeater_template_%s_%s'>%s</tr>";
            $htmlRepeaterTemplate = sprintf($repeaterFormat, $this->locale, $this->getFieldId(), $tdTemplate);

            // assign header lable for repeater
            $tdHeader = '<th>&nbsp;</th>' . $tdHeader . "<th class='last'>&nbsp;</th>";
            $tableHeader .= $tdHeader;
        }
        $trBody = '';
        if (count($groups)) {
            // make row
            $i = 1;
            foreach ($groups as $groupId => $group) {
                $groupName = $this->locale . '[fields][%s][order][%s]';
                $groupOrder = $group['order'];
                $groupName = sprintf($groupName, $this->fieldId, $groupId);

                $fields = $group['fields'];
                $tdBody = '';
                foreach ($fields as $field) {
                    $field->setLabel('');
                    $tdBody .= sprintf("<td width='%s'>%s</td>", $columnWidth . '%', $field->render());
                }

                $tdFirstNew = sprintf($tdFirstBody, $i, $groupName, $groupName, $groupOrder);
                $tdBody = $tdFirstNew . $tdBody . $tdDeleteBtn;
                $trBody .= sprintf("<tr data-id='%s' class='another-field'>%s</tr>", $groupId, $tdBody);
                ++$i;
            }
        }
        $tableBody = $trBody . $htmlRepeaterTemplate;
        $htmlAddNewBtn = "<a  class ='btn btn-primary btn-flat' onclick=\"addRepeaterField('{$this->locale}_{$this->getFieldId()}')\">" . trans('Add Item') . '</a>';
        $tableFooter = sprintf("<td colspan='{$columns}'>%s</td>", $htmlAddNewBtn);

        $tableHtml = "<table  class='table-repeater ' id='{$repeaterTableId}' >
							<thead>%s</thead>
							<tbody class='sortable'>%s</tbody>
							<tfoot>%s</tfoot>
						  </table>";

        $html = sprintf($tableHtml, $tableHeader, $tableBody, $tableFooter);

        // assign index for repeater to make new item
        $repeaterIndexId = 'repeater_index_' . $this->locale . '_' . $this->getFieldId();

        $inputIndex = FormFacade::hidden($repeaterIndexId, 0, array('id' => $repeaterIndexId));
        $inputDelete = FormFacade::hidden($repeaterDeleteName, '', array('id' => $repeaterDeleteId));
        $html            .= $inputIndex . $inputDelete;

        $html            .=  sprintf("<script>$( document ).ready(function() {bindSortableForRepeater('%s');});</script>", $repeaterTableId);

        return $html;
    }
Render for group field.

@return string