Skip to content

Commit a78505b

Browse files
committed
json & jsonArray refactoring
1 parent 93b0d76 commit a78505b

File tree

3 files changed

+54
-89
lines changed

3 files changed

+54
-89
lines changed

Ajax/common/traits/JsUtilsAjaxTrait.php

Lines changed: 51 additions & 84 deletions
Original file line numberDiff line numberDiff line change
@@ -38,8 +38,10 @@ protected function _ajax($method,$url,$responseElement="",$parameters=[]) {
3838
if($hasLoader===true && JString::isNotNull($responseElement)){
3939
$this->addLoading($retour, $responseElement);
4040
}
41-
$async=($async)?"true":"false";
42-
$ajaxParameters=["url"=>"url","method"=>"'".\strtoupper($method)."'","async"=>$async];
41+
$ajaxParameters=["url"=>"url","method"=>"'".\strtoupper($method)."'"];
42+
if(!$async){
43+
$ajaxParameters["async"]="false";
44+
}
4345
if(isset($params)){
4446
$ajaxParameters["data"]=self::_correctParams($params);
4547
}
@@ -230,85 +232,66 @@ public function ajaxDeferred($method,$url, $responseElement="", $parameters=[])
230232
/**
231233
* Performs an ajax request and receives the JSON data types by assigning DOM elements with the same name
232234
* @param string $url the request url
233-
* @param string $params JSON parameters
234235
* @param string $method Method used
235-
* @param string $jsCallback javascript code to execute after the request
236-
* @param string $attr
237-
* @param string $context
238-
* @param boolean $immediatly
236+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>"document","jsCondition"=>NULL,"headers"=>null,"immediatly"=>false)
239237
*/
240-
private function _json($url, $method="get", $params="{}", $jsCallback=NULL, $attr="id", $context="document",$immediatly=false) {
241-
$jsCallback=isset($jsCallback) ? $jsCallback : "";
242-
$retour=$this->_getAjaxUrl($url, $attr);
243-
$retour.="$.{$method}(url,".$params.").done(function( data ) {\n";
244-
$retour.="\tdata=$.parseJSON(data);for(var key in data){"
238+
private function _json($url, $method="get",$parameters=[]) {
239+
$parameters=\array_merge($parameters,["hasLoader"=>false]);
240+
$jsCallback=isset($parameters['jsCallback']) ? $parameters['jsCallback'] : "";
241+
$context=isset($parameters['context']) ? $parameters['context'] : "document";
242+
$retour="\tdata=($.isPlainObject(data))?data:JSON.parse(data);\t".$jsCallback.";\n\tfor(var key in data){"
245243
."if($('#'+key,".$context.").length){ if($('#'+key,".$context.").is('[value]')) { $('#'+key,".$context.").val(data[key]);} else { $('#'+key,".$context.").html(data[key]); }}};\n";
246-
$retour.="\t".$jsCallback."\n".
247-
"\t$(document).trigger('jsonReady',[data]);\n".
248-
"});\n";
249-
if ($immediatly)
250-
$this->jquery_code_for_compile[]=$retour;
251-
return $retour;
244+
$retour.="\t$(document).trigger('jsonReady',[data]);\n";
245+
$parameters["jsCallback"]=$retour;
246+
return $this->_ajax($method, $url,null,$parameters);
252247
}
253248

254249
/**
255250
* Performs an ajax request and receives the JSON data types by assigning DOM elements with the same name
256251
* @param string $url the request url
257-
* @param string $params JSON parameters
258252
* @param string $method Method used
259-
* @param string $jsCallback javascript code to execute after the request
260-
* @param string $context
261-
* @param boolean $immediatly
253+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>"document","jsCondition"=>NULL,"headers"=>null,"immediatly"=>false)
262254
*/
263-
public function json($url, $method="get", $params="{}", $jsCallback=NULL,$context="document",$immediatly=false) {
264-
return $this->_json($url,$method,$params,$jsCallback,NULL,$context,$immediatly);
255+
public function json($url, $method="get", $parameters=[]) {
256+
return $this->_json($url,$method,$parameters);
265257
}
266258

267259
/**
268260
* Makes an ajax request and receives the JSON data types by assigning DOM elements with the same name when $event fired on $element
269261
* @param string $element
270262
* @param string $event
271263
* @param string $url the request address
264+
* @param string $method default get
272265
* @param array $parameters default : array("preventDefault"=>true,"stopPropagation"=>true,"jsCallback"=>NULL,"attr"=>"id","params"=>"{}","method"=>"get","immediatly"=>true)
273266
*/
274-
public function jsonOn($event,$element, $url,$parameters=array()) {
275-
$preventDefault=true;
276-
$stopPropagation=true;
277-
$jsCallback=null;
278-
$attr="id";
279-
$method="get";
280-
$context="document";
281-
$params="{}";
282-
$immediatly=true;
283-
extract($parameters);
284-
return $this->_add_event($element, $this->_json($url,$method, $params,$jsCallback, $attr,$context), $event, $preventDefault, $stopPropagation,$immediatly);
267+
public function jsonOn($event,$element, $url,$method="get",$parameters=array()) {
268+
$this->setDefaultParameters($parameters, ["preventDefault"=>true,"stopPropagation"=>true,"immediatly"=>true]);
269+
return $this->_add_event($element, $this->jsonDeferred($url,$method, $parameters), $event, $parameters["preventDefault"], $parameters["stopPropagation"],$parameters["immediatly"]);
285270
}
286271

287272
/**
288273
* Prepares an ajax request delayed and receives the JSON data types by assigning DOM elements with the same name
289274
* @param string $url the request url
290-
* @param string $params Paramètres passés au format JSON
291275
* @param string $method Method used
292-
* @param string $jsCallback javascript code to execute after the request
293-
* @param string $context jquery DOM element, array container.
276+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>"document","jsCondition"=>NULL,"headers"=>null,"immediatly"=>false)
294277
*/
295-
public function jsonDeferred($url, $method="get", $params="{}", $jsCallback=NULL,$context=NULL) {
296-
return $this->json($url, $method, $params, $jsCallback, $context,false);
278+
public function jsonDeferred($url, $method="get", $parameters=[]) {
279+
$parameters["immediatly"]=false;
280+
return $this->_json($url,$method,$parameters);
297281
}
298282

299283
/**
300284
* Performs an ajax request and receives the JSON array data types by assigning DOM elements with the same name
285+
* @param string $maskSelector
301286
* @param string $url the request url
302-
* @param string $params The JSON parameters
303-
* @param string $method Method used
304-
* @param string $jsCallback javascript code to execute after the request
305-
* @param string $context jquery DOM element, array container.
306-
* @param string $rowClass the css class for the new element
307-
* @param boolean $immediatly
287+
* @param string $method Method used, default : get
288+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>null,"jsCondition"=>NULL,"headers"=>null,"immediatly"=>false,"rowClass"=>"_json")
308289
*/
309-
private function _jsonArray($maskSelector, $url, $method="get", $params="{}", $jsCallback=NULL,$rowClass="_json",$context=NULL,$attr="id",$immediatly=false) {
310-
$jsCallback=isset($jsCallback) ? $jsCallback : "";
311-
$retour=$this->_getAjaxUrl($url, $attr);
290+
private function _jsonArray($maskSelector, $url, $method="get", $parameters=[]) {
291+
$parameters=\array_merge($parameters,["hasLoader"=>false]);
292+
$rowClass=isset($parameters['rowClass']) ? $parameters['rowClass'] : "_json";
293+
$jsCallback=isset($parameters['jsCallback']) ? $parameters['jsCallback'] : "";
294+
$context=isset($parameters['context']) ? $parameters['context'] : null;
312295
if($context===null){
313296
$parent="$('".$maskSelector."').parent()";
314297
$newElm = "$('#'+newId)";
@@ -317,66 +300,50 @@ private function _jsonArray($maskSelector, $url, $method="get", $params="{}", $j
317300
$newElm = $context.".find('#'+newId)";
318301
}
319302
$appendTo="\t\tnewElm.appendTo(".$parent.");\n";
320-
$retour.="var self = $(this);\n$.{$method}(url,".$params.").done(function( data ) {\n";
321-
$retour.=$parent.".find('._json').remove();";
322-
$retour.="\tdata=$.parseJSON(data);$.each(data, function(index, value) {\n"."\tvar created=false;var maskElm=$('".$maskSelector."').first();maskElm.hide();"."\tvar newId=(maskElm.attr('id') || 'mask')+'-'+index;"."\tvar newElm=".$newElm.";\n"."\tif(!newElm.length){\n"."\t\tnewElm=maskElm.clone();
303+
$retour=$parent.".find('.{$rowClass}').remove();";
304+
$retour.="\tdata=($.isPlainObject(data))?data:JSON.parse(data);\t".$jsCallback.";\n$.each(data, function(index, value) {\n"."\tvar created=false;var maskElm=$('".$maskSelector."').first();maskElm.hide();"."\tvar newId=(maskElm.attr('id') || 'mask')+'-'+index;"."\tvar newElm=".$newElm.";\n"."\tif(!newElm.length){\n"."\t\tnewElm=maskElm.clone();
323305
newElm.attr('id',newId);\n;newElm.addClass('{$rowClass}').removeClass('_jsonArrayModel');\nnewElm.find('[id]').each(function(){ var newId=$(this).attr('id')+'-'+index;$(this).attr('id',newId).removeClass('_jsonArrayChecked');});\n";
324306
$retour.= $appendTo;
325307
$retour.="\t}\n"."\tfor(var key in value){\n"."\t\t\tvar html = $('<div />').append($(newElm).clone()).html();\n"."\t\t\tif(html.indexOf('__'+key+'__')>-1){\n"."\t\t\t\tcontent=$(html.split('__'+key+'__').join(value[key]));\n"."\t\t\t\t$(newElm).replaceWith(content);newElm=content;\n"."\t\t\t}\n"."\t\tvar sel='[data-id=\"'+key+'\"]';if($(sel,newElm).length){\n"."\t\t\tvar selElm=$(sel,newElm);\n"."\t\t\t if(selElm.is('[value]')) { selElm.attr('value',value[key]);selElm.val(value[key]);} else { selElm.html(value[key]); }\n"."\t\t}\n"."}\n"."\t$(newElm).show(true);"."\n"."\t$(newElm).removeClass('hide');"."});\n";
326308
$retour.="\t$(document).trigger('jsonReady',[data]);\n";
327-
$retour.="\t".$jsCallback."\n"."});\n";
328-
if ($immediatly)
329-
$this->jquery_code_for_compile[]=$retour;
330-
return $retour;
309+
$parameters["jsCallback"]=$retour;
310+
return $this->_ajax($method, $url,null,$parameters);
331311
}
332312

333313
/**
334314
* Performs an ajax request and receives the JSON array data types by assigning DOM elements with the same name
315+
* @param string $maskSelector
335316
* @param string $url the request url
336-
* @param string $params The JSON parameters
337-
* @param string $method Method used
338-
* @param string $jsCallback javascript code to execute after the request
339-
* @param string $rowClass the css class for the new element
340-
* @param string $context jquery DOM element, array container.
341-
* @param boolean $immediatly
317+
* @param string $method Method used, default : get
318+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>null,"jsCondition"=>NULL,"headers"=>null,"immediatly"=>false,"rowClass"=>"_json")
342319
*/
343-
public function jsonArray($maskSelector, $url, $method="get", $params="{}", $jsCallback=NULL,$rowClass="_json",$context=NULL,$immediatly=false) {
344-
return $this->_jsonArray($maskSelector, $url,$method,$params,$jsCallback,$rowClass,$context,NULL,$immediatly);
320+
public function jsonArray($maskSelector, $url, $method="get", $parameters=[]) {
321+
return $this->_jsonArray($maskSelector, $url,$method,$parameters);
345322
}
346323

347324
/**
348325
* Peforms an ajax request delayed and receives a JSON array data types by copying and assigning them to the DOM elements with the same name
349-
* @param string $maskSelector the selector of the element to clone
326+
* @param string $maskSelector
350327
* @param string $url the request url
351-
* @param string $params JSON parameters
352-
* @param string $method Method used
353-
* @param string $jsCallback javascript code to execute after the request
354-
* @param string $rowClass the css class for the new element
355-
* @param string $context jquery DOM element, array container.
328+
* @param string $method Method used, default : get
329+
* @param array $parameters default : array("params"=>"{}","jsCallback"=>NULL,"attr"=>"id","context"=>null,"jsCondition"=>NULL,"headers"=>null,"rowClass"=>"_json")
356330
*/
357-
public function jsonArrayDeferred($maskSelector, $url, $method="get", $params="{}", $jsCallback=NULL,$rowClass="_json",$context=NULL) {
358-
return $this->jsonArray($maskSelector, $url, $method, $params, $jsCallback,$rowClass,$context,false);
331+
public function jsonArrayDeferred($maskSelector, $url, $method="get", $parameters) {
332+
$parameters["immediatly"]=false;
333+
return $this->jsonArray($maskSelector, $url, $method, $parameters);
359334
}
360335

361336
/**
362337
* Performs an ajax request and receives the JSON array data types by assigning DOM elements with the same name when $event fired on $element
363338
* @param string $element
364339
* @param string $event
365340
* @param string $url the request url
341+
* @param string $method Method used, default : get
366342
* @param array $parameters default : array("preventDefault"=>true,"stopPropagation"=>true,"jsCallback"=>NULL,"attr"=>"id","params"=>"{}","method"=>"get","rowClass"=>"_json","immediatly"=>true)
367343
*/
368-
public function jsonArrayOn($event,$element,$maskSelector, $url,$parameters=array()) {
369-
$preventDefault=true;
370-
$stopPropagation=true;
371-
$jsCallback=null;
372-
$attr="id";
373-
$method="get";
374-
$context = null;
375-
$params="{}";
376-
$immediatly=true;
377-
$rowClass="_json";
378-
extract($parameters);
379-
return $this->_add_event($element, $this->_jsonArray($maskSelector,$url,$method, $params,$jsCallback, $rowClass, $context,$attr), $event, $preventDefault, $stopPropagation,$immediatly);
344+
public function jsonArrayOn($event,$element,$maskSelector, $url,$method="get",$parameters=array()) {
345+
$this->setDefaultParameters($parameters, ["preventDefault"=>true,"stopPropagation"=>true,"immediatly"=>true]);
346+
return $this->_add_event($element, $this->jsonArrayDeferred($maskSelector,$url,$method, $parameters), $event, $parameters["preventDefault"], $parameters["stopPropagation"],$parameters["immediatly"]);
380347
}
381348

382349
/**

Ajax/semantic/components/validation/Rule.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -169,7 +169,7 @@ public static function custom($name,$jsFunction){
169169
public static function ajax(JsUtils $js,$name,$url,$params,$jsCallback,$method="post",$parameters=[]){
170170
$parameters=\array_merge(["async"=>false,"url"=>$url,"params"=>$params,"hasLoader"=>false,"jsCallback"=>$jsCallback,"dataType"=>"json","stopPropagation"=>false,"preventDefault"=>false,"responseElement"=>null],$parameters);
171171
$ajax=new AjaxCall($method, $parameters);
172-
return self::custom($name, "function(value){var result=true;".$ajax->compile($js)."console.log(result);return result;}");
172+
return self::custom($name, "function(value){var result=true;".$ajax->compile($js)."return result;}");
173173
}
174174

175175
}

Ajax/service/AjaxCall.php

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -17,11 +17,9 @@ public function compile(JsUtils $js=null) {
1717
if ($js===null)
1818
return;
1919
$params="{}";
20-
$jsCallback=NULL;
2120
$stopPropagation=true;
2221
$preventDefault=true;
2322
$method="get";
24-
$rowClass="_json";
2523
$this->parameters["immediatly"]=false;
2624
extract($this->parameters);
2725
$result=$this->_eventPreparing($preventDefault, $stopPropagation);
@@ -36,10 +34,10 @@ public function compile(JsUtils $js=null) {
3634
$result.=$js->postFormDeferred($url, $form, $responseElement, $this->parameters);
3735
break;
3836
case "json":
39-
$result.=$js->jsonDeferred($url,$method,$params,$jsCallback);
37+
$result.=$js->jsonDeferred($url,$method,$this->parameters);
4038
break;
4139
case "jsonArray":
42-
$result.=$js->jsonArrayDeferred($modelSelector, $url,$method,$params,$jsCallback,$rowClass);
40+
$result.=$js->jsonArrayDeferred($modelSelector, $url,$method,$this->parameters);
4341
break;
4442
default:
4543
//$result.=$js->ajax($this->method, $url,$responseElement,$this->parameters);

0 commit comments

Comments
 (0)