Skip to content

Commit 74dc3cd

Browse files
committed
Adds getFieldValue on dataTable & dataElement widgets
1 parent 9a9b82f commit 74dc3cd

File tree

16 files changed

+152
-12
lines changed

16 files changed

+152
-12
lines changed

Ajax/JsUtils.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -436,10 +436,15 @@ public function _add_event($element, $js, $event, $preventDefault=false, $stopPr
436436
if ($stopPropagation===true) {
437437
$js=Javascript::$stopPropagation.$js;
438438
}
439-
if (array_search($event, $this->jquery_events)===false)
439+
if (array_search($event, $this->jquery_events)===false){
440440
$event="\n\t$(".Javascript::prep_element($element).").bind('{$event}',function(event){\n\t\t{$js}\n\t});\n";
441-
else
441+
}
442+
else{
443+
/*if($event==="click"){
444+
$js="let self = $(this);if (self.hasClass('__clicked')){self.removeClass('__clicked');}else{self.addClass('__clicked');setTimeout(function() {if (self.hasClass('__clicked')){self.removeClass('__clicked');".$js."}}, 500);}";
445+
}*/
442446
$event="\n\t$(".Javascript::prep_element($element).").{$event}(function(event){\n\t\t{$js}\n\t});\n";
447+
}
443448
if($immediatly)
444449
$this->jquery_code_for_compile[]=$event;
445450
return $event;

Ajax/common/Widget.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -169,6 +169,7 @@ public function addField($field,$key=null){
169169
$this->_instanceViewer->addField($field,$key);
170170
return $this;
171171
}
172+
172173

173174
public function addFields($fields){
174175
$this->_instanceViewer->addFields($fields);

Ajax/common/html/HtmlContentOnly.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
<?php
2+
3+
namespace Ajax\common\html;
4+
5+
class HtmlContentOnly extends HtmlDoubleElement{
6+
public function __construct($content,$identifier=""){
7+
parent::__construct($identifier);
8+
$this->_template='%wrapContentBefore%%content%%wrapContentAfter%';
9+
$this->setContent($content);
10+
}
11+
}
12+

Ajax/common/html/HtmlDoubleElement.php

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44

55

66
use Ajax\JsUtils;
7+
use Ajax\semantic\html\collections\form\HtmlFormField;
8+
use Ajax\semantic\html\collections\form\HtmlForm;
79
class HtmlDoubleElement extends HtmlSingleElement {
810
/**
911
*
@@ -12,6 +14,7 @@ class HtmlDoubleElement extends HtmlSingleElement {
1214
protected $content;
1315
protected $wrapContentBefore="";
1416
protected $wrapContentAfter="";
17+
protected $_editableContent;
1518

1619
public function __construct($identifier, $tagName="p") {
1720
parent::__construct($identifier, $tagName);
@@ -103,4 +106,40 @@ public function getTextContent(){
103106
}
104107
return strip_tags($this->content);
105108
}
109+
110+
public function asEditable(HtmlFormField $field,$asForm=false,$setValueProperty="val()"){
111+
$idF=$field->getIdentifier();
112+
$idE=$idF;
113+
if($asForm){
114+
$frm=new HtmlForm("frm-".$field->getIdentifier());
115+
$frm->setProperty("onsubmit", "return false;");
116+
$fields=$frm->addFields();
117+
$idE=$frm->getIdentifier();
118+
$fields->addItem($field);
119+
$fields->addButtonIcon("bt-okay", "check","green mini","\$('#".$idE."').trigger('validate',{value: $('#'+idF+' input').val()});");
120+
$fields->addButtonIcon("bt-cancel", "close","mini","\$('#".$idE."').trigger('endEdit');");
121+
$this->_editableContent=$frm;
122+
$keypress="";
123+
$focusOut="";
124+
}else{
125+
$focusOut="if(e.relatedTarget==null)elm.trigger('endEdit');";
126+
$this->_editableContent=$field;
127+
$keypress="$('#".$idF."').keyup(function(e){if(e.which == 13) {\$('#".$idE."').trigger('validate',{value: $('#'+idF+' input').val()});}if(e.keyCode===27) {\$('#".$idE."').trigger('endEdit');}});";
128+
}
129+
$this->_editableContent->setProperty("style", "display:none;");
130+
$this->onCreate("let idF='".$idF."';let idE='".$idE."';let elm=$('#'+idE);let self=$('#".$this->getIdentifier()."');".$keypress."elm.on('validate',function(){self.html($('#'+idE+' input').".$setValueProperty.");elm.trigger('endEdit');});elm.on('endEdit',function(){self.show();$(this).hide();});elm.focusout(function(e){".$focusOut."});");
131+
$this->onClick("let self=$(this);self.hide();".$field->setJsContent("self.html()").";$('#".$idF." input').trigger('change');elm.show();$('#'+idE+' input').focus();");
132+
}
133+
/**
134+
* {@inheritDoc}
135+
* @see \Ajax\common\html\BaseHtml::compile_once()
136+
*/
137+
protected function compile_once(\Ajax\JsUtils $js = NULL, &$view = NULL) {
138+
if(!$this->_compiled && isset($this->_editableContent)){
139+
$this->wrap("",$this->_editableContent);
140+
}
141+
parent::compile_once($js,$view);
142+
143+
}
144+
106145
}

Ajax/common/html/traits/BaseHooksTrait.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,9 +39,9 @@ public function addHook($hookKey,$callable){
3939
* @param mixed|null $variable
4040
* @return void|mixed
4141
*/
42-
public function execHook($hookKey,$variable=null){
42+
public function execHook($hookKey,...$variables){
4343
if(($hook=$this->getHook($hookKey))!=null){
44-
return $hook($variable);
44+
return call_user_func_array($hook,$variables);
4545
}
4646
return;
4747
}

Ajax/common/traits/JsUtilsAjaxTrait.php

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ protected function _ajax($method,$url,$responseElement="",$parameters=[]) {
3131
$originalSelector=$responseElement;
3232
$responseElement=$this->_getResponseElement($responseElement);
3333
$retour.="var self=this;\n";
34+
$before=isset($before)?$before:"";
35+
$retour.=$before;
3436
if($hasLoader===true && JString::isNotNull($responseElement)){
3537
$this->addLoading($retour, $responseElement,$ajaxLoader);
3638
}elseif($hasLoader==="internal"){

Ajax/semantic/html/collections/form/HtmlFormField.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
use Ajax\semantic\html\elements\HtmlLabel;
1010
use Ajax\semantic\components\validation\FieldValidation;
1111
use Ajax\semantic\html\collections\form\traits\FieldTrait;
12+
use Ajax\semantic\html\base\constants\Size;
1213

1314
class HtmlFormField extends HtmlSemDoubleElement {
1415
use FieldTrait;
@@ -164,4 +165,8 @@ public function addIcon($icon,$direction=Direction::LEFT){
164165
public function getValidation() {
165166
return $this->_validation;
166167
}
168+
169+
public function setSize($size) {
170+
return $this->getField()->addToPropertyCtrl("class", $size, Size::getConstants());
171+
}
167172
}

Ajax/semantic/html/collections/form/traits/FieldTrait.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,4 +124,19 @@ public function setDisabled($disable=true) {
124124
$field->addToProperty("class", "disabled");
125125
return $this;
126126
}
127+
128+
public function setJsContent($content){
129+
$id="";
130+
$field=$this->getDataField();
131+
if(isset($field)){
132+
$id=$field->getIdentifier();
133+
}
134+
if($id!==''){
135+
return '$("#'.$id.'").val('.$content.')';
136+
}
137+
}
138+
139+
public function getJsContent(){
140+
return $this->setJsContent("");
141+
}
127142
}

Ajax/semantic/html/collections/form/traits/FieldsTrait.php

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,16 @@ public function addPassword($identifier, $label=NULL){
159159
public function addButton($identifier,$value,$cssStyle=NULL,$onClick=NULL){
160160
return $this->addItem(new HtmlButton($identifier,$value,$cssStyle,$onClick));
161161
}
162+
163+
public function addButtonIcon($identifier,$icon,$cssStyle=NULL,$onClick=NULL){
164+
$bt=new HtmlButton($identifier);
165+
$bt->asIcon($icon);
166+
if(isset($onClick))
167+
$bt->onClick($onClick);
168+
if (isset($cssStyle))
169+
$bt->addClass($cssStyle);
170+
return $this->addItem($bt);
171+
}
162172

163173
/**
164174
* @param string $identifier

Ajax/semantic/html/collections/table/HtmlTable.php

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,6 +408,11 @@ public function setCompileParts($parts=["tbody"]) {
408408
$this->_compileParts=$parts;
409409
return $this;
410410
}
411+
412+
public function refreshTR(){
413+
$this->setCompileParts();
414+
$this->getPart("tbody")->refreshTR();
415+
}
411416

412417
public function refresh($js){
413418
$this->_footer=$this->getFooter();

Ajax/semantic/html/collections/table/traits/TableTrait.php

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,12 @@ public function onRow($event,$jsCode, $stopPropagation=false, $preventDefault=fa
8080
}
8181

8282
public function getOnRow($event, $url, $responseElement="", $parameters=array()){
83-
$parameters=\array_merge($parameters,["stopPropagation"=>false,"preventDefault"=>false]);
84-
return $this->_self->getOn($event."{{tbody tr}}", $url,$responseElement,$parameters);
83+
$parameters=\array_merge($parameters,["stopPropagation"=>false,"preventDefault"=>false,"jsCondition"=>'!$(this).closest("tr").hasClass("active")']);
84+
$selector="tbody tr";
85+
if(isset($parameters["selector"])){
86+
$selector=$parameters["selector"];
87+
}
88+
return $this->_self->getOn($event."{{".$selector."}}", $url,$responseElement,$parameters);
8589
}
8690

8791
public function onPageChange($jsCode){

Ajax/semantic/html/content/table/HtmlTableContent.php

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public function setRowCount($rowCount, $colCount) {
4747
public function getTdTagName($tagName) {
4848
return $this->_tdTagNames[$this->tagName];
4949
}
50+
51+
public function refreshTR(){
52+
$this->_template="%wrapContentBefore%%content%%wrapContentAfter%";
53+
}
5054

5155
/**
5256
*

Ajax/semantic/widgets/base/InstanceViewer.php

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -124,6 +124,7 @@ protected function _getValue($property,$index){
124124
$value=JReflection::callMethod($this->instance, $getter, []);
125125
}
126126
}
127+
127128
return $this->_postGetValue($index, $propertyName, $value);
128129
}
129130

Ajax/semantic/widgets/dataelement/DataElement.php

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -61,6 +61,20 @@ protected function _generateContent($table){
6161
$row->getItem(1)->setProperty("data-field", $fields[$i]);
6262
}
6363
}
64+
65+
public function getFieldValue($index){
66+
if(is_string($index)){
67+
$fields=$this->_instanceViewer->getVisibleProperties();
68+
$index=array_search($index, $fields);
69+
}
70+
if(is_numeric($index)){
71+
$values= $this->_instanceViewer->getValues();
72+
if(isset($values[$index])){
73+
return $values[$index];
74+
}
75+
}
76+
return null;
77+
}
6478

6579
protected function _applyStyleAttributes(HtmlTable $table){
6680
$table->setColWidths($this->_colWidths);

Ajax/semantic/widgets/dataform/DataForm.php

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -57,25 +57,26 @@ protected function _generateContent($form){
5757
$wrappers=$this->_instanceViewer->getWrappers();
5858
\sort($separators);
5959
$size=\sizeof($separators);
60+
$nb=0;
6061
if($size===1){
6162
$i=-1;
6263
foreach ($values as $v){
63-
$this->_generateFields($form, [$v], $headers, $i, $wrappers);
64+
$this->_generateFields($form, [$v], $headers, $i, $wrappers,$nb++);
6465
$i++;
6566
}
6667
}else{
6768
$separators[]=$count;
6869
for($i=0;$i<$size;$i++){
6970
$fields=\array_slice($values, $separators[$i]+1,$separators[$i+1]-$separators[$i]);
70-
$this->_generateFields($form, $fields, $headers, $separators[$i], $wrappers);
71+
$this->_generateFields($form, $fields, $headers, $separators[$i], $wrappers,$nb++);
7172
}
7273
}
7374
if($this->_hasRules && !$this->getForm()->hasValidationParams()){
7475
$this->setValidationParams(["inline"=>true]);
7576
}
7677
}
7778

78-
protected function _generateFields($form,$values,$headers,$sepFirst,$wrappers){
79+
protected function _generateFields($form,$values,$headers,$sepFirst,$wrappers,$nb){
7980
$wrapper=null;
8081
if(isset($headers[$sepFirst+1]))
8182
$form->addHeader($headers[$sepFirst+1],4,true);
@@ -91,7 +92,7 @@ protected function _generateFields($form,$values,$headers,$sepFirst,$wrappers){
9192
if(isset($wrapper)){
9293
$added->wrap($wrapper[0],$wrapper[1]);
9394
}
94-
$this->execHook("onGenerateFields",$added);
95+
$this->execHook("onGenerateFields",$added,$nb);
9596
}
9697

9798
/**

Ajax/semantic/widgets/datatable/DataTable.php

Lines changed: 24 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,18 @@ protected function _generateBehavior($op,$params,JsUtils $js){
8989
protected function getTable() {
9090
return $this->content["table"];
9191
}
92+
93+
public function refreshTR(){
94+
$this->getTable()->refreshTR();
95+
return $this;
96+
}
97+
98+
public function refreshTD($fieldName,$jquery,$view){
99+
$index=$this->_getIndex($fieldName);
100+
$this->compile($jquery,$view);
101+
return $this->refreshTR()->getTable()->getCell(0,$index);
102+
}
103+
92104

93105

94106
public function compile(JsUtils $js=NULL,&$view=NULL){
@@ -215,6 +227,17 @@ private function getElementContent($elm){
215227
}
216228
return $elm;
217229
}
230+
231+
public function getFieldValue($index){
232+
$index=$this->_getIndex($index);
233+
if(is_numeric($index)){
234+
$values= $this->_instanceViewer->getValues();
235+
if(isset($values[$index])){
236+
return $values[$index];
237+
}
238+
}
239+
return null;
240+
}
218241

219242
protected function _generateRow($instance,$fields,&$table,$checkedClass=null,$uuids=null){
220243
$this->_instanceViewer->setInstance($instance);
@@ -269,8 +292,7 @@ protected function _associatePaginationBehavior(JsUtils $js=NULL,$offset=null){
269292
$page=URequest::post("p");
270293
if(isset($page)){
271294
$js->execAtLast('$("#'.$this->getIdentifier().' .pagination").children("a.item").removeClass("active");$("#'.$this->getIdentifier().' .pagination").children("a.item[data-page='.$page.']:not(.no-active)").addClass("active");');
272-
}
273-
295+
}
274296
}
275297
}
276298
}

0 commit comments

Comments
 (0)