@@ -13,7 +13,7 @@ discard block |
||
13 | 13 | |
14 | 14 | /** |
15 | 15 | * Ensures the speed parameter is valid for jQuery |
16 | - * @param string|int $speed |
|
16 | + * @param string $speed |
|
17 | 17 | * @return string |
18 | 18 | */ |
19 | 19 | private function _validate_speed($speed) { |
@@ -422,7 +422,7 @@ discard block |
||
422 | 422 | * |
423 | 423 | * @param string $element |
424 | 424 | * @param array $options |
425 | - * @return void |
|
425 | + * @return string |
|
426 | 426 | */ |
427 | 427 | public function sortable($element, $options=array()) { |
428 | 428 | if (count($options)>0) { |
@@ -493,7 +493,7 @@ discard block |
||
493 | 493 | * @param string $jqueryCall the JQuery callback |
494 | 494 | * @param mixed $param array or string parameters |
495 | 495 | * @param string $jsCallback javascript code to execute after the jquery call |
496 | - * @return mixed |
|
496 | + * @return string |
|
497 | 497 | */ |
498 | 498 | public function doJQuery($element, $jqueryCall, $param="", $jsCallback="") { |
499 | 499 | return $this->_doJQuery($element, $jqueryCall, $param, $jsCallback, true); |
@@ -505,7 +505,7 @@ discard block |
||
505 | 505 | * @param string $jqueryCall the JQuery callback |
506 | 506 | * @param mixed $param array or string parameters |
507 | 507 | * @param string $jsCallback javascript code to execute after the jquery call |
508 | - * @return mixed |
|
508 | + * @return string |
|
509 | 509 | */ |
510 | 510 | public function doJQueryDeferred($element, $jqueryCall, $param="", $jsCallback="") { |
511 | 511 | return $this->_doJQuery($element, $jqueryCall, $param, $jsCallback, false); |
@@ -517,7 +517,7 @@ discard block |
||
517 | 517 | * @param string $element |
518 | 518 | * @param string $elementToModify |
519 | 519 | * @param string $jqueryCall |
520 | - * @param string|array $param |
|
520 | + * @param string $param |
|
521 | 521 | * @param boolean $preventDefault |
522 | 522 | * @param boolean $stopPropagation |
523 | 523 | * @param string $jsCallback javascript code to execute after the jquery call |
@@ -40,10 +40,12 @@ discard block |
||
40 | 40 | if (isset($param)) { |
41 | 41 | $param=Javascript::prep_value($param); |
42 | 42 | $str="$({$element}).{$jQueryCall}({$param});"; |
43 | - } else |
|
44 | - $str="$({$element}).{$jQueryCall}();"; |
|
45 | - if ($immediatly) |
|
46 | - $this->jquery_code_for_compile[]=$str; |
|
43 | + } else { |
|
44 | + $str="$({$element}).{$jQueryCall}();"; |
|
45 | + } |
|
46 | + if ($immediatly) { |
|
47 | + $this->jquery_code_for_compile[]=$str; |
|
48 | + } |
|
47 | 49 | return $str; |
48 | 50 | } |
49 | 51 | |
@@ -59,8 +61,9 @@ discard block |
||
59 | 61 | $to=Javascript::prep_element($to); |
60 | 62 | $element=Javascript::prep_element($element); |
61 | 63 | $str="$({$to}).{$jQueryCall}({$element});"; |
62 | - if ($immediatly) |
|
63 | - $this->jquery_code_for_compile[]=$str; |
|
64 | + if ($immediatly) { |
|
65 | + $this->jquery_code_for_compile[]=$str; |
|
66 | + } |
|
64 | 67 | return $str; |
65 | 68 | } |
66 | 69 | /** |
@@ -109,10 +112,12 @@ discard block |
||
109 | 112 | if (isset($value)) { |
110 | 113 | $value=Javascript::prep_value($value); |
111 | 114 | $str="$({$element}).attr(\"$attributeName\",{$value});"; |
112 | - } else |
|
113 | - $str="$({$element}).attr(\"$attributeName\");"; |
|
114 | - if ($immediatly) |
|
115 | - $this->jquery_code_for_compile[]=$str; |
|
115 | + } else { |
|
116 | + $str="$({$element}).attr(\"$attributeName\");"; |
|
117 | + } |
|
118 | + if ($immediatly) { |
|
119 | + $this->jquery_code_for_compile[]=$str; |
|
120 | + } |
|
116 | 121 | return $str; |
117 | 122 | } |
118 | 123 | |
@@ -168,8 +173,9 @@ discard block |
||
168 | 173 | |
169 | 174 | $str="$({$element}).animate({\n$animations\n\t\t}".$speed.$extra.");"; |
170 | 175 | |
171 | - if ($immediatly) |
|
172 | - $this->jquery_code_for_compile[]=$str; |
|
176 | + if ($immediatly) { |
|
177 | + $this->jquery_code_for_compile[]=$str; |
|
178 | + } |
|
173 | 179 | return $str; |
174 | 180 | } |
175 | 181 | |
@@ -214,8 +220,9 @@ discard block |
||
214 | 220 | |
215 | 221 | $str="$({$element}).fadeIn({$speed}{$callback});"; |
216 | 222 | |
217 | - if ($immediatly) |
|
218 | - $this->jquery_code_for_compile[]=$str; |
|
223 | + if ($immediatly) { |
|
224 | + $this->jquery_code_for_compile[]=$str; |
|
225 | + } |
|
219 | 226 | return $str; |
220 | 227 | } |
221 | 228 | |
@@ -238,8 +245,9 @@ discard block |
||
238 | 245 | |
239 | 246 | $str="$({$element}).fadeOut({$speed}{$callback});"; |
240 | 247 | |
241 | - if ($immediatly) |
|
242 | - $this->jquery_code_for_compile[]=$str; |
|
248 | + if ($immediatly) { |
|
249 | + $this->jquery_code_for_compile[]=$str; |
|
250 | + } |
|
243 | 251 | return $str; |
244 | 252 | } |
245 | 253 | |
@@ -262,8 +270,9 @@ discard block |
||
262 | 270 | |
263 | 271 | $str="$({$element}).slideUp({$speed}{$callback});"; |
264 | 272 | |
265 | - if ($immediatly) |
|
266 | - $this->jquery_code_for_compile[]=$str; |
|
273 | + if ($immediatly) { |
|
274 | + $this->jquery_code_for_compile[]=$str; |
|
275 | + } |
|
267 | 276 | return $str; |
268 | 277 | } |
269 | 278 | |
@@ -298,8 +307,9 @@ discard block |
||
298 | 307 | |
299 | 308 | $str="$({$element}).slideDown({$speed}{$callback});"; |
300 | 309 | |
301 | - if ($immediatly) |
|
302 | - $this->jquery_code_for_compile[]=$str; |
|
310 | + if ($immediatly) { |
|
311 | + $this->jquery_code_for_compile[]=$str; |
|
312 | + } |
|
303 | 313 | return $str; |
304 | 314 | } |
305 | 315 | |
@@ -322,8 +332,9 @@ discard block |
||
322 | 332 | |
323 | 333 | $str="$({$element}).slideToggle({$speed}{$callback});"; |
324 | 334 | |
325 | - if ($immediatly) |
|
326 | - $this->jquery_code_for_compile[]=$str; |
|
335 | + if ($immediatly) { |
|
336 | + $this->jquery_code_for_compile[]=$str; |
|
337 | + } |
|
327 | 338 | return $str; |
328 | 339 | } |
329 | 340 | |
@@ -346,8 +357,9 @@ discard block |
||
346 | 357 | |
347 | 358 | $str="$({$element}).hide({$speed}{$callback});"; |
348 | 359 | |
349 | - if ($immediatly) |
|
350 | - $this->jquery_code_for_compile[]=$str; |
|
360 | + if ($immediatly) { |
|
361 | + $this->jquery_code_for_compile[]=$str; |
|
362 | + } |
|
351 | 363 | return $str; |
352 | 364 | } |
353 | 365 | |
@@ -362,8 +374,9 @@ discard block |
||
362 | 374 | $element=Javascript::prep_element($element); |
363 | 375 | $str="$({$element}).toggle();"; |
364 | 376 | |
365 | - if ($immediatly) |
|
366 | - $this->jquery_code_for_compile[]=$str; |
|
377 | + if ($immediatly) { |
|
378 | + $this->jquery_code_for_compile[]=$str; |
|
379 | + } |
|
367 | 380 | return $str; |
368 | 381 | } |
369 | 382 | |
@@ -388,8 +401,9 @@ discard block |
||
388 | 401 | $element=Javascript::prep_element($element); |
389 | 402 | $str="$({$element}).trigger(\"$event\");"; |
390 | 403 | |
391 | - if ($immediatly) |
|
392 | - $this->jquery_code_for_compile[]=$str; |
|
404 | + if ($immediatly) { |
|
405 | + $this->jquery_code_for_compile[]=$str; |
|
406 | + } |
|
393 | 407 | return $str; |
394 | 408 | } |
395 | 409 | |
@@ -412,8 +426,9 @@ discard block |
||
412 | 426 | |
413 | 427 | $str="$({$element}).show({$speed}{$callback});"; |
414 | 428 | |
415 | - if ($immediatly) |
|
416 | - $this->jquery_code_for_compile[]=$str; |
|
429 | + if ($immediatly) { |
|
430 | + $this->jquery_code_for_compile[]=$str; |
|
431 | + } |
|
417 | 432 | return $str; |
418 | 433 | } |
419 | 434 | |
@@ -462,8 +477,9 @@ discard block |
||
462 | 477 | $str.="else{".$jsCodeIfFalse."}"; |
463 | 478 | } |
464 | 479 | |
465 | - if ($immediatly) |
|
466 | - $this->jquery_code_for_compile[]=$str; |
|
480 | + if ($immediatly) { |
|
481 | + $this->jquery_code_for_compile[]=$str; |
|
482 | + } |
|
467 | 483 | return $str; |
468 | 484 | } |
469 | 485 | |
@@ -479,11 +495,13 @@ discard block |
||
479 | 495 | private function _doJQuery($element, $jqueryCall, $param="", $jsCallback="", $immediatly=false) { |
480 | 496 | $param=Javascript::prep_value($param); |
481 | 497 | $callback=""; |
482 | - if ($jsCallback!="") |
|
483 | - $callback=", function(event){\n{$jsCallback}\n}"; |
|
498 | + if ($jsCallback!="") { |
|
499 | + $callback=", function(event){\n{$jsCallback}\n}"; |
|
500 | + } |
|
484 | 501 | $script="$(".Javascript::prep_element($element).").".$jqueryCall."(".$param.$callback.");\n"; |
485 | - if ($immediatly) |
|
486 | - $this->jquery_code_for_compile[]=$script; |
|
502 | + if ($immediatly) { |
|
503 | + $this->jquery_code_for_compile[]=$script; |
|
504 | + } |
|
487 | 505 | return $script; |
488 | 506 | } |
489 | 507 | |
@@ -554,8 +572,9 @@ discard block |
||
554 | 572 | */ |
555 | 573 | public function exec($js, $immediatly=false) { |
556 | 574 | $script=$js."\n"; |
557 | - if ($immediatly) |
|
558 | - $this->jquery_code_for_compile[]=$script; |
|
575 | + if ($immediatly) { |
|
576 | + $this->jquery_code_for_compile[]=$script; |
|
577 | + } |
|
559 | 578 | return $script; |
560 | 579 | } |
561 | 580 |
@@ -16,8 +16,17 @@ discard block |
||
16 | 16 | protected $ajaxLoader='<span></span><span></span><span></span><span></span><span></span>'; |
17 | 17 | |
18 | 18 | abstract public function getUrl($url); |
19 | + |
|
20 | + /** |
|
21 | + * @param string $element |
|
22 | + * @param string $js |
|
23 | + * @param string $event |
|
24 | + */ |
|
19 | 25 | abstract public function _add_event($element, $js, $event, $preventDefault=false, $stopPropagation=false,$immediatly=true); |
20 | 26 | |
27 | + /** |
|
28 | + * @param string $method |
|
29 | + */ |
|
21 | 30 | protected function _ajax($method,$url, $params="{}", $responseElement="", $jsCallback=NULL, $attr="id", $hasLoader=true,$jqueryDone="html",$ajaxTransition=null,$immediatly=false) { |
22 | 31 | if(JString::isNull($params)){$params="{}";} |
23 | 32 | $jsCallback=isset($jsCallback) ? $jsCallback : ""; |
@@ -36,6 +45,9 @@ discard block |
||
36 | 45 | |
37 | 46 | |
38 | 47 | |
48 | + /** |
|
49 | + * @param string $attr |
|
50 | + */ |
|
39 | 51 | protected function _getAjaxUrl($url,$attr){ |
40 | 52 | $url=$this->_correctAjaxUrl($url); |
41 | 53 | $retour="url='".$url."';"; |
@@ -53,6 +65,9 @@ discard block |
||
53 | 65 | return $retour; |
54 | 66 | } |
55 | 67 | |
68 | + /** |
|
69 | + * @param string $jqueryDone |
|
70 | + */ |
|
56 | 71 | protected function _getOnAjaxDone($responseElement,$jqueryDone,$ajaxTransition,$jsCallback){ |
57 | 72 | $retour="";$call=null; |
58 | 73 | if ($responseElement!=="") { |
@@ -86,6 +101,9 @@ discard block |
||
86 | 101 | return $url; |
87 | 102 | } |
88 | 103 | |
104 | + /** |
|
105 | + * @param string $retour |
|
106 | + */ |
|
89 | 107 | protected function addLoading(&$retour, $responseElement) { |
90 | 108 | $loading_notifier='<div class="ajax-loader">'; |
91 | 109 | if ($this->ajaxLoader=='') { |
@@ -252,6 +270,7 @@ discard block |
||
252 | 270 | * @param string $rowClass the css class for the new element |
253 | 271 | * @param string $context jquery DOM element, array container. |
254 | 272 | * @param boolean $immediatly |
273 | + * @param string $maskSelector |
|
255 | 274 | */ |
256 | 275 | public function jsonArray($maskSelector, $url, $method="get", $params="{}", $jsCallback=NULL,$rowClass="_json",$context=NULL,$immediatly=false) { |
257 | 276 | return $this->_jsonArray($maskSelector, $url,$method,$params,$jsCallback,$rowClass,$context,NULL,$immediatly); |
@@ -342,6 +361,11 @@ discard block |
||
342 | 361 | return $this->getOn("click", $element, $url, $responseElement, $parameters); |
343 | 362 | } |
344 | 363 | |
364 | + /** |
|
365 | + * @param string $url |
|
366 | + * @param string $jsCallback |
|
367 | + * @param callable $ajaxTransition |
|
368 | + */ |
|
345 | 369 | private function _post($url, $params="{}", $responseElement="", $jsCallback=NULL, $attr="id", $hasLoader=true,$jqueryDone="html",$ajaxTransition=null,$immediatly=false) { |
346 | 370 | return $this->_ajax("post", $url,$params,$responseElement,$jsCallback,$attr,$hasLoader,$jqueryDone,$ajaxTransition,$immediatly); |
347 | 371 | } |
@@ -412,6 +436,13 @@ discard block |
||
412 | 436 | return $this->postOn("click", $element, $url, $params, $responseElement, $parameters); |
413 | 437 | } |
414 | 438 | |
439 | + /** |
|
440 | + * @param string $url |
|
441 | + * @param string $form |
|
442 | + * @param string $responseElement |
|
443 | + * @param string $jsCallback |
|
444 | + * @param callable $ajaxTransition |
|
445 | + */ |
|
415 | 446 | private function _postForm($url, $form, $responseElement, $validation=false, $jsCallback=NULL, $attr="id", $hasLoader=true,$jqueryDone="html",$ajaxTransition=null,$immediatly=false) { |
416 | 447 | $jsCallback=isset($jsCallback) ? $jsCallback : ""; |
417 | 448 | $retour=$this->_getAjaxUrl($url, $attr); |
@@ -29,8 +29,9 @@ discard block |
||
29 | 29 | } |
30 | 30 | $retour.="$.".$method."(url,".$params.").done(function( data ) {\n"; |
31 | 31 | $retour.=$this->_getOnAjaxDone($responseElement, $jqueryDone,$ajaxTransition,$jsCallback)."});\n"; |
32 | - if ($immediatly) |
|
33 | - $this->jquery_code_for_compile[]=$retour; |
|
32 | + if ($immediatly) { |
|
33 | + $this->jquery_code_for_compile[]=$retour; |
|
34 | + } |
|
34 | 35 | return $retour; |
35 | 36 | } |
36 | 37 | |
@@ -40,15 +41,17 @@ discard block |
||
40 | 41 | $url=$this->_correctAjaxUrl($url); |
41 | 42 | $retour="url='".$url."';"; |
42 | 43 | $slash="/"; |
43 | - if(JString::endswith($url, "/")===true) |
|
44 | - $slash=""; |
|
44 | + if(JString::endswith($url, "/")===true) { |
|
45 | + $slash=""; |
|
46 | + } |
|
45 | 47 | if(JString::isNotNull($attr)){ |
46 | - if ($attr==="value") |
|
47 | - $retour.="url=url+'".$slash."'+$(this).val();\n"; |
|
48 | - elseif ($attr==="html") |
|
49 | - $retour.="url=url+'".$slash."'+$(this).html();\n"; |
|
50 | - elseif($attr!==null && $attr!=="") |
|
51 | - $retour.="url=url+'".$slash."'+($(this).attr('".$attr."')||'');\n"; |
|
48 | + if ($attr==="value") { |
|
49 | + $retour.="url=url+'".$slash."'+$(this).val();\n"; |
|
50 | + } elseif ($attr==="html") { |
|
51 | + $retour.="url=url+'".$slash."'+$(this).html();\n"; |
|
52 | + } elseif($attr!==null && $attr!=="") { |
|
53 | + $retour.="url=url+'".$slash."'+($(this).attr('".$attr."')||'');\n"; |
|
54 | + } |
|
52 | 55 | } |
53 | 56 | return $retour; |
54 | 57 | } |
@@ -58,13 +61,14 @@ discard block |
||
58 | 61 | if ($responseElement!=="") { |
59 | 62 | if(isset($ajaxTransition)){ |
60 | 63 | $call=$this->setAjaxDataCall($ajaxTransition); |
61 | - }elseif(isset($this->ajaxTransition)){ |
|
64 | + } elseif(isset($this->ajaxTransition)){ |
|
62 | 65 | $call=$this->ajaxTransition; |
63 | 66 | } |
64 | - if(\is_callable($call)) |
|
65 | - $retour="\t".$call($responseElement,$jqueryDone).";\n"; |
|
66 | - else |
|
67 | - $retour="\t$({$responseElement}).{$jqueryDone}( data );\n"; |
|
67 | + if(\is_callable($call)) { |
|
68 | + $retour="\t".$call($responseElement,$jqueryDone).";\n"; |
|
69 | + } else { |
|
70 | + $retour="\t$({$responseElement}).{$jqueryDone}( data );\n"; |
|
71 | + } |
|
68 | 72 | } |
69 | 73 | $retour.="\t".$jsCallback."\n"; |
70 | 74 | return $retour; |
@@ -78,8 +82,9 @@ discard block |
||
78 | 82 | } |
79 | 83 | |
80 | 84 | protected function _correctAjaxUrl($url) { |
81 | - if ($url!=="/" && JString::endsWith($url, "/")===true) |
|
82 | - $url=substr($url, 0, strlen($url)-1); |
|
85 | + if ($url!=="/" && JString::endsWith($url, "/")===true) { |
|
86 | + $url=substr($url, 0, strlen($url)-1); |
|
87 | + } |
|
83 | 88 | if (strncmp($url, 'http://', 7)!=0&&strncmp($url, 'https://', 8)!=0) { |
84 | 89 | $url=$this->getUrl($url); |
85 | 90 | } |
@@ -159,8 +164,9 @@ discard block |
||
159 | 164 | $retour.="\t".$jsCallback."\n". |
160 | 165 | "\t$(document).trigger('jsonReady',[data]);\n". |
161 | 166 | "});\n"; |
162 | - if ($immediatly) |
|
163 | - $this->jquery_code_for_compile[]=$retour; |
|
167 | + if ($immediatly) { |
|
168 | + $this->jquery_code_for_compile[]=$retour; |
|
169 | + } |
|
164 | 170 | return $retour; |
165 | 171 | } |
166 | 172 | |
@@ -225,7 +231,7 @@ discard block |
||
225 | 231 | if($context===null){ |
226 | 232 | $parent="$('".$maskSelector."').parent()"; |
227 | 233 | $newElm = "$('#'+newId)"; |
228 | - }else{ |
|
234 | + } else{ |
|
229 | 235 | $parent=$context; |
230 | 236 | $newElm = $context.".find('#'+newId)"; |
231 | 237 | } |
@@ -238,8 +244,9 @@ discard block |
||
238 | 244 | $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"; |
239 | 245 | $retour.="\t$(document).trigger('jsonReady',[data]);\n"; |
240 | 246 | $retour.="\t".$jsCallback."\n"."});\n"; |
241 | - if ($immediatly) |
|
242 | - $this->jquery_code_for_compile[]=$retour; |
|
247 | + if ($immediatly) { |
|
248 | + $this->jquery_code_for_compile[]=$retour; |
|
249 | + } |
|
243 | 250 | return $retour; |
244 | 251 | } |
245 | 252 | |
@@ -430,8 +437,9 @@ discard block |
||
430 | 437 | }});\n"; |
431 | 438 | $retour.="$('#".$form."').submit();\n"; |
432 | 439 | } |
433 | - if ($immediatly) |
|
434 | - $this->jquery_code_for_compile[]=$retour; |
|
440 | + if ($immediatly) { |
|
441 | + $this->jquery_code_for_compile[]=$retour; |
|
442 | + } |
|
435 | 443 | return $retour; |
436 | 444 | } |
437 | 445 |
@@ -34,12 +34,14 @@ |
||
34 | 34 | if ($stopPropagation===true) { |
35 | 35 | $js=Javascript::$stopPropagation.$js; |
36 | 36 | } |
37 | - if (array_search($event, $this->jquery_events)===false) |
|
38 | - $event="\n\t$(".Javascript::prep_element($element).").bind('{$event}',function(event){\n\t\t{$js}\n\t});\n"; |
|
39 | - else |
|
40 | - $event="\n\t$(".Javascript::prep_element($element).").{$event}(function(event){\n\t\t{$js}\n\t});\n"; |
|
41 | - if($immediatly) |
|
42 | - $this->jquery_code_for_compile[]=$event; |
|
37 | + if (array_search($event, $this->jquery_events)===false) { |
|
38 | + $event="\n\t$(".Javascript::prep_element($element).").bind('{$event}',function(event){\n\t\t{$js}\n\t});\n"; |
|
39 | + } else { |
|
40 | + $event="\n\t$(".Javascript::prep_element($element).").{$event}(function(event){\n\t\t{$js}\n\t});\n"; |
|
41 | + } |
|
42 | + if($immediatly) { |
|
43 | + $this->jquery_code_for_compile[]=$event; |
|
44 | + } |
|
43 | 45 | return $event; |
44 | 46 | } |
45 | 47 |
@@ -16,8 +16,9 @@ discard block |
||
16 | 16 | */ |
17 | 17 | private function _compileLibrary($library, &$view=NULL){ |
18 | 18 | if ($library!=NULL) { |
19 | - if(isset($view)) |
|
20 | - $library->compileHtml($this, $view); |
|
19 | + if(isset($view)) { |
|
20 | + $library->compileHtml($this, $view); |
|
21 | + } |
|
21 | 22 | if ($library->isAutoCompile()) { |
22 | 23 | $library->compile(true); |
23 | 24 | } |
@@ -37,7 +38,9 @@ discard block |
||
37 | 38 | } |
38 | 39 | |
39 | 40 | private function minify($input) { |
40 | - if(trim($input) === "") return $input; |
|
41 | + if(trim($input) === "") { |
|
42 | + return $input; |
|
43 | + } |
|
41 | 44 | return preg_replace( |
42 | 45 | array( |
43 | 46 | // Remove comment(s) |