Skip to content

Commit baf19ce

Browse files
committed
Datatable trait
1 parent ca057c3 commit baf19ce

File tree

2 files changed

+147
-130
lines changed

2 files changed

+147
-130
lines changed

Ajax/semantic/widgets/datatable/DataTable.php

Lines changed: 3 additions & 130 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@
1111
use Ajax\semantic\html\elements\HtmlButton;
1212
use Ajax\semantic\html\base\constants\Direction;
1313
use Ajax\service\JArray;
14-
use Ajax\semantic\html\base\HtmlSemDoubleElement;
1514
use Ajax\semantic\widgets\base\InstanceViewer;
1615
use Ajax\semantic\html\collections\table\traits\TableTrait;
1716
use Ajax\semantic\html\elements\HtmlLabel;
@@ -24,7 +23,7 @@
2423
*
2524
*/
2625
class DataTable extends Widget {
27-
use TableTrait;
26+
use TableTrait,DataTableFieldAsTrait;
2827
protected $_searchField;
2928
protected $_urls;
3029
protected $_pagination;
@@ -114,7 +113,7 @@ public function compile(JsUtils $js=NULL,&$view=NULL){
114113
$this->_generateContent($table);
115114

116115
if($this->_hasCheckboxes && $table->hasPart("thead")){
117-
$table->getHeader()->getCell(0, 0)->addToProperty("class","no-sort");
116+
$table->getHeader()->getCell(0, 0)->addClass("no-sort");
118117
}
119118

120119
if(isset($this->_pagination) && $this->_pagination->getVisible()){
@@ -263,133 +262,7 @@ public function refresh($compileParts=["tbody"]){
263262
$this->_compileParts=$compileParts;
264263
return $this;
265264
}
266-
/**
267-
* @param string $caption
268-
* @param callable $callback
269-
* @param boolean $visibleHover
270-
* @return callable
271-
*/
272-
private function getFieldButtonCallable($caption,$visibleHover=true,$callback=null){
273-
return $this->getCallable("getFieldButton",[$caption,$visibleHover],$callback);
274-
}
275-
276-
/**
277-
* @param callable $thisCallback
278-
* @param array $parameters
279-
* @param callable $callback
280-
* @return callable
281-
*/
282-
private function getCallable($thisCallback,$parameters,$callback=null){
283-
$result=function($instance) use($thisCallback,$parameters,$callback){
284-
$object=call_user_func_array(array($this,$thisCallback), $parameters);
285-
if(isset($callback)){
286-
if(\is_callable($callback)){
287-
$callback($object,$instance);
288-
}
289-
}
290-
if($object instanceof HtmlSemDoubleElement){
291-
$object->setProperty("data-ajax",$this->_instanceViewer->getIdentifier());
292-
if($object->propertyContains("class","visibleover")){
293-
$this->_visibleHover=true;
294-
$object->setProperty("style","visibility:hidden;");
295-
}
296-
}
297-
return $object;
298-
};
299-
return $result;
300-
}
301-
302-
/**
303-
* @param string $caption
304-
* @return HtmlButton
305-
*/
306-
private function getFieldButton($caption,$visibleHover=true){
307-
$bt= new HtmlButton("",$caption);
308-
if($visibleHover)
309-
$this->_visibleOver($bt);
310-
return $bt;
311-
}
312265

313-
/**
314-
* Inserts a new Button for each row
315-
* @param string $caption
316-
* @param callable $callback
317-
* @param boolean $visibleHover
318-
* @return \Ajax\semantic\widgets\datatable\DataTable
319-
*/
320-
public function addFieldButton($caption,$visibleHover=true,$callback=null){
321-
$this->addField($this->getCallable("getFieldButton",[$caption,$visibleHover],$callback));
322-
return $this;
323-
}
324-
325-
/**
326-
* Inserts a new Button for each row at col $index
327-
* @param int $index
328-
* @param string $caption
329-
* @param callable $callback
330-
* @return \Ajax\semantic\widgets\datatable\DataTable
331-
*/
332-
public function insertFieldButton($index,$caption,$visibleHover=true,$callback=null){
333-
$this->insertField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
334-
return $this;
335-
}
336-
337-
/**
338-
* Inserts a new Button for each row in col at $index
339-
* @param int $index
340-
* @param string $caption
341-
* @param callable $callback
342-
* @return \Ajax\semantic\widgets\datatable\DataTable
343-
*/
344-
public function insertInFieldButton($index,$caption,$visibleHover=true,$callback=null){
345-
$this->insertInField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
346-
return $this;
347-
}
348-
349-
private function addDefaultButton($icon,$class=null,$visibleHover=true,$callback=null){
350-
$this->addField($this->getCallable("getDefaultButton",[$icon,$class,$visibleHover],$callback));
351-
return $this;
352-
}
353-
354-
private function insertDefaultButtonIn($index,$icon,$class=null,$visibleHover=true,$callback=null){
355-
$this->insertInField($index,$this->getCallable("getDefaultButton",[$icon,$class,$visibleHover],$callback));
356-
return $this;
357-
}
358-
359-
private function getDefaultButton($icon,$class=null,$visibleHover=true){
360-
$bt=$this->getFieldButton("",$visibleHover);
361-
$bt->asIcon($icon);
362-
if(isset($class))
363-
$bt->addToProperty("class", $class);
364-
return $bt;
365-
}
366-
367-
public function addDeleteButton($visibleHover=true,$generateBehavior=true,$callback=null){
368-
$this->_hasDelete=$generateBehavior;
369-
return $this->addDefaultButton("remove","delete red basic",$visibleHover,$callback);
370-
}
371-
372-
public function addEditButton($visibleHover=true,$generateBehavior=true,$callback=null){
373-
$this->_hasEdit=$generateBehavior;
374-
return $this->addDefaultButton("edit","edit basic",$visibleHover,$callback);
375-
}
376-
377-
public function addEditDeleteButtons($visibleHover=true,$generateBehavior=true,$callbackEdit=null,$callbackDelete=null){
378-
$this->addEditButton($visibleHover,$generateBehavior,$callbackEdit);
379-
$index=$this->_instanceViewer->visiblePropertiesCount()-1;
380-
$this->insertDeleteButtonIn($index,$visibleHover,$generateBehavior,$callbackDelete);
381-
return $this;
382-
}
383-
384-
public function insertDeleteButtonIn($index,$visibleHover=true,$generateBehavior=true,$callback=null){
385-
$this->_hasDelete=$generateBehavior;
386-
return $this->insertDefaultButtonIn($index,"remove","delete red basic",$visibleHover,$callback);
387-
}
388-
389-
public function insertEditButtonIn($index,$visibleHover=true,$generateBehavior=true,$callback=null){
390-
$this->_hasEdit=$generateBehavior;
391-
return $this->insertDefaultButtonIn($index,"edit","edit basic",$visibleHover,$callback);
392-
}
393266

394267
public function addSearchInToolbar($position=Direction::RIGHT){
395268
return $this->addInToolbar($this->getSearchField())->setPosition($position);
@@ -424,7 +297,7 @@ public function asForm(){
424297
* @param string $cssStyle
425298
* @param string $url
426299
* @param string $responseElement
427-
* @param array $attributes
300+
* @param array $attributes associative array (<b>ajax</b> key is for ajax post)
428301
* @return \Ajax\semantic\widgets\datatable\DataTable
429302
*/
430303
public function fieldAsSubmit($index,$cssStyle=NULL,$url=NULL,$responseElement=NULL,$attributes=NULL){
Lines changed: 144 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,144 @@
1+
<?php
2+
namespace Ajax\semantic\widgets\datatable;
3+
use Ajax\semantic\html\elements\HtmlButton;
4+
use Ajax\semantic\widgets\base\InstanceViewer;
5+
6+
/**
7+
* @author jc
8+
* @property boolean $_hasDelete
9+
* @property boolean $_hasEdit
10+
* @property boolean $_visibleHover;
11+
* @property InstanceViewer $_instanceViewer
12+
*/
13+
trait DataTableFieldAsTrait{
14+
abstract public function addField($field);
15+
abstract public function insertField($index,$field);
16+
abstract public function insertInField($index,$field);
17+
/**
18+
* @param string $caption
19+
* @param callable $callback
20+
* @param boolean $visibleHover
21+
* @return callable
22+
*/
23+
private function getFieldButtonCallable($caption,$visibleHover=true,$callback=null){
24+
return $this->getCallable("getFieldButton",[$caption,$visibleHover],$callback);
25+
}
26+
27+
/**
28+
* @param callable $thisCallback
29+
* @param array $parameters
30+
* @param callable $callback
31+
* @return callable
32+
*/
33+
private function getCallable($thisCallback,$parameters,$callback=null){
34+
$result=function($instance) use($thisCallback,$parameters,$callback){
35+
$object=call_user_func_array(array($this,$thisCallback), $parameters);
36+
if(isset($callback)){
37+
if(\is_callable($callback)){
38+
$callback($object,$instance);
39+
}
40+
}
41+
if($object instanceof HtmlSemDoubleElement){
42+
$object->setProperty("data-ajax",$this->_instanceViewer->getIdentifier());
43+
if($object->propertyContains("class","visibleover")){
44+
$this->_visibleHover=true;
45+
$object->setProperty("style","visibility:hidden;");
46+
}
47+
}
48+
return $object;
49+
};
50+
return $result;
51+
}
52+
53+
/**
54+
* @param string $caption
55+
* @return HtmlButton
56+
*/
57+
private function getFieldButton($caption,$visibleHover=true){
58+
$bt= new HtmlButton("",$caption);
59+
if($visibleHover)
60+
$this->_visibleOver($bt);
61+
return $bt;
62+
}
63+
64+
/**
65+
* Inserts a new Button for each row
66+
* @param string $caption
67+
* @param callable $callback
68+
* @param boolean $visibleHover
69+
* @return \Ajax\semantic\widgets\datatable\DataTable
70+
*/
71+
public function addFieldButton($caption,$visibleHover=true,$callback=null){
72+
$this->addField($this->getCallable("getFieldButton",[$caption,$visibleHover],$callback));
73+
return $this;
74+
}
75+
76+
/**
77+
* Inserts a new Button for each row at col $index
78+
* @param int $index
79+
* @param string $caption
80+
* @param callable $callback
81+
* @return \Ajax\semantic\widgets\datatable\DataTable
82+
*/
83+
public function insertFieldButton($index,$caption,$visibleHover=true,$callback=null){
84+
$this->insertField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
85+
return $this;
86+
}
87+
88+
/**
89+
* Inserts a new Button for each row in col at $index
90+
* @param int $index
91+
* @param string $caption
92+
* @param callable $callback
93+
* @return \Ajax\semantic\widgets\datatable\DataTable
94+
*/
95+
public function insertInFieldButton($index,$caption,$visibleHover=true,$callback=null){
96+
$this->insertInField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
97+
return $this;
98+
}
99+
100+
private function addDefaultButton($icon,$class=null,$visibleHover=true,$callback=null){
101+
$this->addField($this->getCallable("getDefaultButton",[$icon,$class,$visibleHover],$callback));
102+
return $this;
103+
}
104+
105+
private function insertDefaultButtonIn($index,$icon,$class=null,$visibleHover=true,$callback=null){
106+
$this->insertInField($index,$this->getCallable("getDefaultButton",[$icon,$class,$visibleHover],$callback));
107+
return $this;
108+
}
109+
110+
private function getDefaultButton($icon,$class=null,$visibleHover=true){
111+
$bt=$this->getFieldButton("",$visibleHover);
112+
$bt->asIcon($icon);
113+
if(isset($class))
114+
$bt->addClass($class);
115+
return $bt;
116+
}
117+
118+
public function addDeleteButton($visibleHover=true,$generateBehavior=true,$callback=null){
119+
$this->_hasDelete=$generateBehavior;
120+
return $this->addDefaultButton("remove","delete red basic",$visibleHover,$callback);
121+
}
122+
123+
public function addEditButton($visibleHover=true,$generateBehavior=true,$callback=null){
124+
$this->_hasEdit=$generateBehavior;
125+
return $this->addDefaultButton("edit","edit basic",$visibleHover,$callback);
126+
}
127+
128+
public function addEditDeleteButtons($visibleHover=true,$generateBehavior=true,$callbackEdit=null,$callbackDelete=null){
129+
$this->addEditButton($visibleHover,$generateBehavior,$callbackEdit);
130+
$index=$this->_instanceViewer->visiblePropertiesCount()-1;
131+
$this->insertDeleteButtonIn($index,$visibleHover,$generateBehavior,$callbackDelete);
132+
return $this;
133+
}
134+
135+
public function insertDeleteButtonIn($index,$visibleHover=true,$generateBehavior=true,$callback=null){
136+
$this->_hasDelete=$generateBehavior;
137+
return $this->insertDefaultButtonIn($index,"remove","delete red basic",$visibleHover,$callback);
138+
}
139+
140+
public function insertEditButtonIn($index,$visibleHover=true,$generateBehavior=true,$callback=null){
141+
$this->_hasEdit=$generateBehavior;
142+
return $this->insertDefaultButtonIn($index,"edit","edit basic",$visibleHover,$callback);
143+
}
144+
}

0 commit comments

Comments
 (0)