@@ -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