diff --git a/src/Html/Builder.php b/src/Html/Builder.php
index 8edd318..1979a51 100644
--- a/src/Html/Builder.php
+++ b/src/Html/Builder.php
@@ -155,6 +155,26 @@ public function parameterize($attributes = [])
{
$parameters = (new Parameters($attributes))->toArray();
+ $max_record_per_page = $this->config->get('datatables.max_record_per_page', 0);
+ if (!array_key_exists('lengthMenu', $parameters)) {
+ $parameters['lengthMenu'] = [10, 25, 50, 100];
+ }
+
+ if ($max_record_per_page != 0) {
+ $lengthMenu = array_unique($parameters['lengthMenu']);
+ foreach ($lengthMenu as $key => $value) {
+ if ($value > $max_record_per_page) {
+ unset($lengthMenu[$key]);
+ }
+ }
+ $lengthMenu = array_values($lengthMenu);
+ if (empty($lengthMenu)) {
+ $lengthMenu = [$max_record_per_page];
+ }
+ sort($lengthMenu);
+ $parameters['lengthMenu'] = $lengthMenu;
+ }
+
$values = [];
$replacements = [];
@@ -224,8 +244,10 @@ public function table(array $attributes = [], $drawFooter = false, $drawSearch =
$htmlAttr = $this->html->attributes($this->tableAttributes);
$tableHtml = '
';
- $searchHtml = $drawSearch ? '' . implode('',
- $this->compileTableSearchHeaders()) . '
' : '';
+ $searchHtml = $drawSearch ? '' . implode(
+ '',
+ $this->compileTableSearchHeaders()
+ ) . '
' : '';
$tableHtml .= '' . implode('', $th) . '
' . $searchHtml . '';
if ($drawFooter) {
$tf = $this->compileTableFooter();
diff --git a/tests/HtmlBuilderTest.php b/tests/HtmlBuilderTest.php
index cdf28fc..8153d23 100644
--- a/tests/HtmlBuilderTest.php
+++ b/tests/HtmlBuilderTest.php
@@ -36,10 +36,10 @@ public function test_generate_table_html()
$builder->html->shouldReceive('attributes')->once()->andReturn();
$script = $builder->scripts()->toHtml();
- $expected = '' . "\n";
+ $expected = '' . "\n";
$this->assertEquals($expected, $script);
- $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"name":"baz","data":"biz","title":"Biz","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"data":"meh","title":"Muh","orderable":true,"searchable":true,"name":"meh"},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false});});';
+ $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"name":"baz","data":"biz","title":"Biz","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"data":"meh","title":"Muh","orderable":true,"searchable":true,"name":"meh"},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false,"lengthMenu":[10,25,50,100]});});';
$this->assertEquals($expected, $builder->generateScripts()->toHtml());
}
@@ -79,10 +79,10 @@ public function test_generate_table_html_with_empty_footer()
$builder->html->shouldReceive('attributes')->once()->andReturn();
$script = $builder->scripts()->toHtml();
- $expected = '' . "\n";
+ $expected = '' . "\n";
$this->assertEquals($expected, $script);
- $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false});});';
+ $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false,"lengthMenu":[10,25,50,100]});});';
$this->assertEquals($expected, $builder->generateScripts()->toHtml());
}
@@ -112,10 +112,10 @@ public function test_generate_table_html_with_footer_content()
$builder->html->shouldReceive('attributes')->once()->andReturn();
$script = $builder->scripts()->toHtml();
- $expected = '' . "\n";
+ $expected = '' . "\n";
$this->assertEquals($expected, $script);
- $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false});});';
+ $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"name":"id","data":"id","title":"Id","orderable":true,"searchable":true},{"name":"a","data":"a","title":"A","orderable":true,"searchable":true},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false,"lengthMenu":[10,25,50,100]});});';
$this->assertEquals($expected, $builder->generateScripts()->toHtml());
}
@@ -146,10 +146,10 @@ public function test_generate_table_html_with_render_helpers()
$builder->html->shouldReceive('attributes')->once()->andReturn();
$script = $builder->scripts()->toHtml();
- $expected = '' . "\n";
+ $expected = '' . "\n";
$this->assertEquals($expected, $script);
- $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"name":"baz","data":"biz","title":"Biz","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"data":"1.0000","title":"Num","render":"$.fn.dataTable.render.number( \",\", \".\", 2, \"\" )","orderable":true,"searchable":true,"name":"1.0000"},{"data":"
","title":"Tex","render":"$.fn.dataTable.render.text()","orderable":true,"searchable":true,"name":"
"},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false});});';
+ $expected = '$(function(){window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}=window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}||{};window.{{ config(\'datatables-html.namespace\', \'LaravelDataTables\') }}["foo"]=$("#foo").DataTable({"serverSide":true,"processing":true,"ajax":"ajax-url","columns":[{"name":"foo","data":"foo","title":"Foo","orderable":true,"searchable":true},{"name":"foo","data":"foo","title":"Bar","orderable":true,"searchable":true},{"name":"baz","data":"biz","title":"Biz","orderable":true,"searchable":true},{"defaultContent":"","title":"","data":"checkbox","name":"checkbox","orderable":false,"searchable":false,"width":"10px","id":"foo"},{"data":"1.0000","title":"Num","render":"$.fn.dataTable.render.number( \",\", \".\", 2, \"\" )","orderable":true,"searchable":true,"name":"1.0000"},{"data":"
","title":"Tex","render":"$.fn.dataTable.render.text()","orderable":true,"searchable":true,"name":"
"},{"defaultContent":"","data":"action","name":"action","title":"Options","render":null,"orderable":false,"searchable":false}],"bFilter":false,"lengthMenu":[10,25,50,100]});});';
$this->assertEquals($expected, $builder->generateScripts()->toHtml());
}