Skip to content

Commit 7abd109

Browse files
committed
$visibleHover attribute
1 parent 3abce32 commit 7abd109

File tree

2 files changed

+65
-33
lines changed

2 files changed

+65
-33
lines changed

Ajax/semantic/widgets/base/InstanceViewer.php

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,10 +38,12 @@ public function getValues(){
3838
return $values;
3939
}
4040

41-
public function getIdentifier(){
42-
$value=self::$index;
41+
public function getIdentifier($index=NULL){
42+
if(!isset($index))
43+
$index=self::$index;
44+
$value=$index;
4345
if(isset($this->values["identifier"]))
44-
$value=$this->values["identifier"](self::$index,$this->instance);
46+
$value=$this->values["identifier"]($index,$this->instance);
4547
return $value;
4648
}
4749

Ajax/semantic/widgets/datatable/DataTable.php

Lines changed: 60 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ class DataTable extends Widget {
2929
protected $_pagination;
3030
protected $_hasCheckboxes;
3131
protected $_compileParts;
32+
protected $_visibleHover=false;
3233

3334
public function run(JsUtils $js){
3435
if($this->_hasCheckboxes && isset($js)){
@@ -37,6 +38,10 @@ public function run(JsUtils $js){
3738
\$checkbox.each(function() {if($(this).prop('checked')){allUnchecked = false;}else{allChecked = false;}});
3839
if(allChecked) {\$parentCheckbox.checkbox('set checked');}else if(allUnchecked){\$parentCheckbox.checkbox('set unchecked');}else{\$parentCheckbox.checkbox('set indeterminate');}");
3940
}
41+
if($this->_visibleHover){
42+
$js->execOn("mouseover", "#".$this->identifier." tr", "$(event.target).closest('tr').find('.visibleover').css('visibility', 'visible');",["preventDefault"=>false,"stopPropagation"=>true]);
43+
$js->execOn("mouseout", "#".$this->identifier." tr", "$(event.target).closest('tr').find('.visibleover').css('visibility', 'hidden');",["preventDefault"=>false,"stopPropagation"=>true]);
44+
}
4045
return parent::run($js);
4146
}
4247

@@ -102,17 +107,20 @@ protected function _generateContent($table){
102107
$objects=$this->_pagination->getObjects($this->_modelInstance);
103108
}
104109
InstanceViewer::setIndex(0);
105-
$table->fromDatabaseObjects($objects, function($instance){
110+
$table->fromDatabaseObjects($objects, function($instance) use($table){
106111
$this->_instanceViewer->setInstance($instance);
107112
InstanceViewer::$index++;
108-
$result= $this->_instanceViewer->getValues();
113+
$values= $this->_instanceViewer->getValues();
109114
if($this->_hasCheckboxes){
110115
$ck=new HtmlCheckbox("ck-".$this->identifier,"");
111116
$field=$ck->getField();
112117
$field->setProperty("value",$this->_instanceViewer->getIdentifier());
113118
$field->setProperty("name", "selection[]");
114-
\array_unshift($result, $ck);
119+
\array_unshift($values, $ck);
115120
}
121+
$result=$table->newRow();
122+
$result->setIdentifier($this->identifier."-tr-".$this->_instanceViewer->getIdentifier());
123+
$result->setValues($values);
116124
return $result;
117125
});
118126
}
@@ -207,10 +215,11 @@ public function refresh($compileParts=["tbody"]){
207215
/**
208216
* @param string $caption
209217
* @param callable $callback
218+
* @param boolean $visibleHover
210219
* @return callable
211220
*/
212-
private function getFieldButtonCallable($caption,$callback=null){
213-
return $this->getCallable("getFieldButton",[$caption],$callback);
221+
private function getFieldButtonCallable($caption,$visibleHover=true,$callback=null){
222+
return $this->getCallable("getFieldButton",[$caption,$visibleHover],$callback);
214223
}
215224

216225
/**
@@ -229,6 +238,10 @@ private function getCallable($thisCallback,$parameters,$callback=null){
229238
}
230239
if($object instanceof HtmlSemDoubleElement){
231240
$object->setProperty("data-ajax",$this->_instanceViewer->getIdentifier());
241+
if($object->propertyContains("class","visibleover")){
242+
$this->_visibleHover=true;
243+
$object->setProperty("style","visibility:hidden;");
244+
}
232245
}
233246
return $object;
234247
};
@@ -239,18 +252,22 @@ private function getCallable($thisCallback,$parameters,$callback=null){
239252
* @param string $caption
240253
* @return HtmlButton
241254
*/
242-
private function getFieldButton($caption){
243-
return new HtmlButton("",$caption);
255+
private function getFieldButton($caption,$visibleHover=true){
256+
$bt= new HtmlButton("",$caption);
257+
if($visibleHover)
258+
$this->_visibleOver($bt);
259+
return $bt;
244260
}
245261

246262
/**
247263
* Inserts a new Button for each row
248264
* @param string $caption
249265
* @param callable $callback
266+
* @param boolean $visibleHover
250267
* @return \Ajax\semantic\widgets\datatable\DataTable
251268
*/
252-
public function addFieldButton($caption,$callback=null){
253-
$this->addField($this->getCallable("getFieldButton",[$caption],$callback));
269+
public function addFieldButton($caption,$visibleHover=true,$callback=null){
270+
$this->addField($this->getCallable("getFieldButton",[$caption,$visibleHover],$callback));
254271
return $this;
255272
}
256273

@@ -261,8 +278,8 @@ public function addFieldButton($caption,$callback=null){
261278
* @param callable $callback
262279
* @return \Ajax\semantic\widgets\datatable\DataTable
263280
*/
264-
public function insertFieldButton($index,$caption,$callback=null){
265-
$this->insertField($index, $this->getFieldButtonCallable($caption,$callback));
281+
public function insertFieldButton($index,$caption,$visibleHover=true,$callback=null){
282+
$this->insertField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
266283
return $this;
267284
}
268285

@@ -273,50 +290,50 @@ public function insertFieldButton($index,$caption,$callback=null){
273290
* @param callable $callback
274291
* @return \Ajax\semantic\widgets\datatable\DataTable
275292
*/
276-
public function insertInFieldButton($index,$caption,$callback=null){
277-
$this->insertInField($index, $this->getFieldButtonCallable($caption,$callback));
293+
public function insertInFieldButton($index,$caption,$visibleHover=true,$callback=null){
294+
$this->insertInField($index, $this->getFieldButtonCallable($caption,$visibleHover,$callback));
278295
return $this;
279296
}
280297

281-
private function addDefaultButton($icon,$class=null,$callback=null){
282-
$this->addField($this->getCallable("getDefaultButton",[$icon,$class],$callback));
298+
private function addDefaultButton($icon,$class=null,$visibleHover=true,$callback=null){
299+
$this->addField($this->getCallable("getDefaultButton",[$icon,$class],$visibleHover,$callback));
283300
return $this;
284301
}
285302

286-
private function insertDefaultButtonIn($index,$icon,$class=null,$callback=null){
287-
$this->insertInField($index,$this->getCallable("getDefaultButton",[$icon,$class],$callback));
303+
private function insertDefaultButtonIn($index,$icon,$class=null,$visibleHover=true,$callback=null){
304+
$this->insertInField($index,$this->getCallable("getDefaultButton",[$icon,$class,$visibleHover],$callback));
288305
return $this;
289306
}
290307

291-
private function getDefaultButton($icon,$class=null){
292-
$bt=$this->getFieldButton("");
308+
private function getDefaultButton($icon,$class=null,$visibleHover=true){
309+
$bt=$this->getFieldButton("",$visibleHover);
293310
$bt->asIcon($icon);
294311
if(isset($class))
295312
$bt->addToProperty("class", $class);
296313
return $bt;
297314
}
298315

299-
public function addDeleteButton($callback=null){
300-
return $this->addDefaultButton("remove","delete red basic",$callback);
316+
public function addDeleteButton($visibleHover=true,$callback=null){
317+
return $this->addDefaultButton("remove","delete red basic",$visibleHover,$callback);
301318
}
302319

303-
public function addEditButton($callback=null){
304-
return $this->addDefaultButton("edit","edit basic",$callback);
320+
public function addEditButton($visibleHover=true,$callback=null){
321+
return $this->addDefaultButton("edit","edit basic",$visibleHover,$callback);
305322
}
306323

307-
public function addEditDeleteButtons($callbackEdit=null,$callbackDelete=null){
308-
$this->addEditButton($callbackEdit);
324+
public function addEditDeleteButtons($visibleHover=true,$callbackEdit=null,$callbackDelete=null){
325+
$this->addEditButton($visibleHover,$callbackEdit);
309326
$index=$this->_instanceViewer->visiblePropertiesCount()-1;
310-
$this->insertDeleteButtonIn($index,$callbackDelete);
327+
$this->insertDeleteButtonIn($index,$visibleHover,$callbackDelete);
311328
return $this;
312329
}
313330

314-
public function insertDeleteButtonIn($index,$callback=null){
315-
return $this->insertDefaultButtonIn($index,"remove","delete red basic",$callback);
331+
public function insertDeleteButtonIn($index,$visibleHover=true,$callback=null){
332+
return $this->insertDefaultButtonIn($index,"remove","delete red basic",$visibleHover,$callback);
316333
}
317334

318-
public function insertEditButtonIn($index,$callback=null){
319-
return $this->insertDefaultButtonIn($index,"edit","edit basic",$callback);
335+
public function insertEditButtonIn($index,$visibleHover=true,$callback=null){
336+
return $this->insertDefaultButtonIn($index,"edit","edit basic",$visibleHover,$callback);
320337
}
321338

322339
public function addSearchInToolbar($position=Direction::RIGHT){
@@ -345,4 +362,17 @@ public function onNewRow($callback) {
345362
public function asForm(){
346363
return $this->getForm();
347364
}
365+
366+
public function fieldAsSubmit($index,$cssStyle=NULL,$url=NULL,$responseElement=NULL,$attributes=NULL){
367+
return $this->_fieldAs(function($id,$name,$value,$caption) use ($url,$responseElement,$cssStyle,$index){
368+
$button=new HtmlButton($id,$value,$cssStyle);
369+
$button->postOnClick($url,"$(event.target).closest('tr').find(':input').serialize()",$responseElement);
370+
return $this->_visibleOver($button);
371+
}, $index,$attributes);
372+
}
373+
374+
protected function _visibleOver($element){
375+
$this->_visibleHover=true;
376+
return $element->addToProperty("class", "visibleover")->setProperty("style","visibility:hidden;");
377+
}
348378
}

0 commit comments

Comments
 (0)