Skip to content

Commit 96dbf1a

Browse files
committed
Clean up some refactoring leftovers
1 parent d14e01f commit 96dbf1a

File tree

5 files changed

+72
-109
lines changed

5 files changed

+72
-109
lines changed

src/DataTableFactory.php

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,14 +49,6 @@ public function setInstantiator(Instantiator $instantiator)
4949
$this->instantiator = $instantiator;
5050
}
5151

52-
/**
53-
* @param ServiceLocator $typeLocator
54-
*/
55-
public function setTypeLocator(ServiceLocator $typeLocator)
56-
{
57-
$this->typeLocator = $typeLocator;
58-
}
59-
6052
/**
6153
* @param array $options
6254
* @param DataTableState $state

src/Twig/DataTablesExtension.php

Lines changed: 21 additions & 87 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212

1313
namespace Omines\DataTablesBundle\Twig;
1414

15-
use Omines\DataTablesBundle\Column\AbstractColumn;
1615
use Omines\DataTablesBundle\DataTable;
1716
use Symfony\Component\Translation\TranslatorInterface;
1817

@@ -37,12 +36,6 @@ public function __construct(TranslatorInterface $translator)
3736
public function getFunctions()
3837
{
3938
return [
40-
new \Twig_SimpleFunction('datatable', [$this, 'datatable'],
41-
['is_safe' => ['html'], 'needs_environment' => true]),
42-
new \Twig_SimpleFunction('datatable_html', [$this, 'datatableHtml'],
43-
['is_safe' => ['html'], 'needs_environment' => true]),
44-
new \Twig_SimpleFunction('datatable_js', [$this, 'datatableJs'],
45-
['is_safe' => ['html'], 'needs_environment' => true]),
4639
new \Twig_SimpleFunction('datatable_settings', function (DataTable $dataTable) {
4740
return json_encode([
4841
'name' => $dataTable->getName(),
@@ -55,81 +48,39 @@ public function getFunctions()
5548
];
5649
}
5750

58-
public function datatable(\Twig_Environment $twig, DataTable $datatable, $options = [], $parameters = [])
59-
{
60-
return $this->render($twig, '@DataTables/datatable.html.twig', $datatable, $options, $parameters);
61-
}
62-
63-
public function datatableHtml(\Twig_Environment $twig, DataTable $datatable, $options = [], $parameters = [])
64-
{
65-
return $this->render($twig, '@DataTables/datatable_html.html.twig', $datatable, $options, $parameters);
66-
}
67-
68-
public function datatableJs(\Twig_Environment $twig, DataTable $datatable, $options = [], $parameters = [])
69-
{
70-
return $this->render($twig, '@DataTables/datatable_js.html.twig', $datatable, $options, $parameters);
71-
}
72-
73-
private function render(\Twig_Environment $twig, string $template, DataTable $datatable, $options = [], $parameters = [])
74-
{
75-
return $twig->render($template, array_merge([
76-
'datatable' => $datatable,
77-
'options' => $this->getOptions($datatable, $options),
78-
], $parameters));
79-
}
80-
81-
private function getOptions(DataTable $datatable, $options)
82-
{
83-
$result = array_merge($datatable->getOptions(), $options);
84-
85-
$result['columns'] = array_map(
86-
function (AbstractColumn $column) {
87-
return [
88-
'data' => $column->getName(),
89-
'orderable' => $column->isOrderable(),
90-
'searchable' => $column->isSearchable(),
91-
'visible' => $column->isVisible(),
92-
'className' => $column->getClassName(),
93-
];
94-
}, $datatable->getColumns());
95-
96-
$result['language'] = $this->getLanguageSettings($datatable);
97-
98-
return $result;
99-
}
100-
10151
/**
10252
* @param DataTable $dataTable
10353
* @return array
10454
*/
10555
private function getLanguageSettings(DataTable $dataTable)
10656
{
10757
$locale = $this->translator->getLocale();
108-
if ($dataTable->isLanguageFromCDN() && array_key_exists($locale, $this->languageCDNFile)) {
109-
return ['url' => "//cdn.datatables.net/plug-ins/1.10.15/i18n/{$this->languageCDNFile[$locale]}"];
58+
if ($dataTable->isLanguageFromCDN() && array_key_exists($locale, self::LANGUAGES_IN_CDN)) {
59+
return ['url' => '//cdn.datatables.net/plug-ins/1.10.15/i18n/' . self::LANGUAGES_IN_CDN[$locale]];
11060
} else {
11161
$domain = $dataTable->getTranslationDomain();
62+
11263
return [
113-
'processing' => $this->translator->trans('datatable.datatable.processing', $domain),
114-
'search' => $this->translator->trans('datatable.datatable.search', $domain),
115-
'lengthMenu' => $this->translator->trans('datatable.datatable.lengthMenu', $domain),
116-
'info' => $this->translator->trans('datatable.datatable.info', $domain),
117-
'infoEmpty' => $this->translator->trans('datatable.datatable.infoEmpty', $domain),
118-
'infoFiltered' => $this->translator->trans('datatable.datatable.infoFiltered', $domain),
119-
'infoPostFix' => $this->translator->trans('datatable.datatable.infoPostFix', $domain),
120-
'loadingRecords' => $this->translator->trans('datatable.datatable.loadingRecords', $domain),
121-
'zeroRecords' => $this->translator->trans('datatable.datatable.zeroRecords', $domain),
122-
'emptyTable' => $this->translator->trans('datatable.datatable.emptyTable', $domain),
123-
'searchPlaceholder' => $this->translator->trans('datatable.datatable.searchPlaceholder', $domain),
64+
'processing' => $this->translator->trans('datatable.datatable.processing', [], $domain),
65+
'search' => $this->translator->trans('datatable.datatable.search', [], $domain),
66+
'lengthMenu' => $this->translator->trans('datatable.datatable.lengthMenu', [], $domain),
67+
'info' => $this->translator->trans('datatable.datatable.info', [], $domain),
68+
'infoEmpty' => $this->translator->trans('datatable.datatable.infoEmpty', [], $domain),
69+
'infoFiltered' => $this->translator->trans('datatable.datatable.infoFiltered', [], $domain),
70+
'infoPostFix' => $this->translator->trans('datatable.datatable.infoPostFix', [], $domain),
71+
'loadingRecords' => $this->translator->trans('datatable.datatable.loadingRecords', [], $domain),
72+
'zeroRecords' => $this->translator->trans('datatable.datatable.zeroRecords', [], $domain),
73+
'emptyTable' => $this->translator->trans('datatable.datatable.emptyTable', [], $domain),
74+
'searchPlaceholder' => $this->translator->trans('datatable.datatable.searchPlaceholder', [], $domain),
12475
'paginate' => [
125-
'first' => $this->translator->trans('datatable.datatable.paginate.first', $domain),
126-
'previous' => $this->translator->trans('datatable.datatable.paginate.previous', $domain),
127-
'next' => $this->translator->trans('datatable.datatable.paginate.next', $domain),
128-
'last' => $this->translator->trans('datatable.datatable.paginate.last', $domain),
76+
'first' => $this->translator->trans('datatable.datatable.paginate.first', [], $domain),
77+
'previous' => $this->translator->trans('datatable.datatable.paginate.previous', [], $domain),
78+
'next' => $this->translator->trans('datatable.datatable.paginate.next', [], $domain),
79+
'last' => $this->translator->trans('datatable.datatable.paginate.last', [], $domain),
12980
],
13081
'aria' => [
131-
'sortAscending' => $this->translator->trans('datatable.datatable.aria.sortAscending', $domain),
132-
'sortDescending' => $this->translator->trans('datatable.datatable.aria.sortDescending', $domain),
82+
'sortAscending' => $this->translator->trans('datatable.datatable.aria.sortAscending', [], $domain),
83+
'sortDescending' => $this->translator->trans('datatable.datatable.aria.sortDescending', [], $domain),
13384
],
13485
];
13586
}
@@ -145,24 +96,7 @@ public function getName()
14596
return 'DataTablesBundle';
14697
}
14798

148-
protected $callbackMethodName = [
149-
'createdRow',
150-
'drawCallback',
151-
'footerCallback',
152-
'formatNumber',
153-
'headerCallback',
154-
'infoCallback',
155-
'initComplete',
156-
'preDrawCallback',
157-
'rowCallback',
158-
'stateLoadCallback',
159-
'stateLoaded',
160-
'stateLoadParams',
161-
'stateSaveCallback',
162-
'stateSaveParams',
163-
];
164-
165-
protected $languageCDNFile = [
99+
const LANGUAGES_IN_CDN = [
166100
'af' => 'Afrikaans.json',
167101
'ar' => 'Arabic.json',
168102
'az' => 'Azerbaijan.json',

tests/Fixtures/AppBundle/Controller/HomeController.php

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,11 @@
1212

1313
namespace Tests\Fixtures\AppBundle\Controller;
1414

15+
use Omines\DataTablesBundle\Adapter\ArrayAdapter;
1516
use Omines\DataTablesBundle\Column\TextColumn;
1617
use Omines\DataTablesBundle\Controller\DataTablesTrait;
1718
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
19+
use Symfony\Component\HttpFoundation\Request;
1820

1921
/**
2022
* HomeController.
@@ -25,7 +27,7 @@ class HomeController extends Controller
2527
{
2628
use DataTablesTrait;
2729

28-
public function showAction()
30+
public function showAction(Request $request)
2931
{
3032
$datatable1 = $this->createDataTable();
3133
$datatable1
@@ -35,10 +37,18 @@ public function showAction()
3537

3638
$datatable2 = $this->createDataTable();
3739
$datatable2
40+
->setName('noCDN')
41+
->setMethod(Request::METHOD_GET)
42+
->setLanguageFromCDN(false)
3843
->add('col3', TextColumn::class, ['label' => 'foo', 'field' => 'bar'])
3944
->add('col4', TextColumn::class, ['label' => 'bar', 'field' => 'foo'])
45+
->createAdapter(ArrayAdapter::class)
4046
;
4147

48+
if ($datatable2->handleRequest($request)->isCallback()) {
49+
return $datatable2->getResponse();
50+
}
51+
4252
return $this->render('@App/home.html.twig', [
4353
'datatable1' => $datatable1,
4454
'datatable2' => $datatable2,

tests/Fixtures/AppBundle/Resources/views/home.html.twig

Lines changed: 31 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,16 +5,37 @@
55
</head>
66
<body>
77
<h2>Table 1</h2>
8-
<div id="table1">
9-
{{ datatable_html(datatable1, {className: 'table-bordered'}) }}
10-
</div>
11-
{{ datatable_js(datatable1, { responsive: true, searching: true, dom:'<"html5buttons"B>lTfgitp', buttons: [
12-
'copy', 'csv', { extend: 'excel', title: 'domains'}, { extend: 'pdf', title: 'domains'}, { extend: 'print' }
13-
]})
14-
}}
8+
<div id="table1"></div>
159
<h2>Table 2</h2>
16-
<div id="table2">
17-
{{ datatable(datatable2) }}
18-
</div>
10+
<div id="table2"></div>
11+
12+
<script src="bundles/datatables/js/datatables.js"></script>
13+
<script>
14+
$(function() {
15+
$('#table1').initDataTables({{ datatable_settings(datatable1) }}, {
16+
searching: true,
17+
dom:'<"html5buttons"B>lTfgitp',
18+
buttons: [
19+
'copy',
20+
'csv',
21+
{ extend: 'excel', title: 'domains'},
22+
{ extend: 'pdf', title: 'domains'},
23+
{ extend: 'print' }
24+
]
25+
});
26+
27+
$('#table2').initDataTables({{ datatable_settings(datatable2) }}, {
28+
searching: true,
29+
dom:'<"html5buttons"B>lTfgitp',
30+
buttons: [
31+
'copy',
32+
'csv',
33+
{ extend: 'excel', title: 'domains'},
34+
{ extend: 'pdf', title: 'domains'},
35+
{ extend: 'print' }
36+
]
37+
});
38+
});
39+
</script>
1940
</body>
2041
</html>

tests/Functional/FunctionalTest.php

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,19 +40,25 @@ public function testFrontend()
4040
$crawler = $this->client->request('GET', '/');
4141
$this->assertSuccessful($response = $this->client->getResponse());
4242

43-
// Verify HTML was correctly inserted
44-
$this->assertSame(4, $crawler->filter('table thead th')->count(), 'the HTML is correctly generated');
43+
$content = $response->getContent();
44+
$this->assertContains('"name":"dt"', $content);
45+
$this->assertContains('(filtered from _MAX_ total entries)', $content);
46+
$json = $this->callDataTableUrl('/?_dt=noCDN&_init=true');
47+
$this->assertEmpty($json->data);
4548
}
4649

4750
public function testPlainDataTable()
4851
{
49-
$json = $this->callDataTableUrl('/plain?_dt=persons&draw=1&start=25&length=50&order[0][column]=0&order[0][dir]=desc');
52+
$json = $this->callDataTableUrl('/plain?_dt=persons&_init=true&draw=1&start=25&length=50&order[0][column]=0&order[0][dir]=desc');
5053

5154
$this->assertSame(1, $json->draw);
5255
$this->assertSame(125, $json->recordsTotal);
5356
$this->assertSame(125, $json->recordsFiltered);
5457
$this->assertCount(50, $json->data);
5558

59+
$this->assertContains('<table id="persons"', $json->template);
60+
$this->assertNotEmpty($json->options);
61+
5662
$sample = $json->data[5];
5763
$this->assertSame('FirstName94', $sample->firstName);
5864
$this->assertSame('LastName94', $sample->lastName);

0 commit comments

Comments
 (0)