Skip to content

Commit 57dcebf

Browse files
committed
JsonDataTable widget added
+ fixed jsCallback + __field__ replace [[field]] for json requests
1 parent c16d386 commit 57dcebf

File tree

16 files changed

+181
-50
lines changed

16 files changed

+181
-50
lines changed

Ajax/Jquery.php

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,17 @@ public function _compile(&$view=NULL, $view_var='script_foot', $script_tags=TRUE
259259
return $output;
260260
}
261261

262+
public function getScript($offset=0){
263+
$code=$this->jquery_code_for_compile;
264+
if($offset>0)
265+
$code=\array_slice($code, $offset);
266+
return implode('', $code);
267+
}
268+
269+
public function scriptCount(){
270+
return \sizeof($this->jquery_code_for_compile);
271+
}
272+
262273
private function defer($script){
263274
$result="window.defer=function (method) {if (window.jQuery) method(); else setTimeout(function() { defer(method) }, 50);};";
264275
$result.="window.defer(function(){".$script."})";

Ajax/JsUtils.php

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -256,6 +256,14 @@ public function clear_compile() {
256256
$this->js->_clear_compile();
257257
}
258258

259+
public function getScript($offset=0){
260+
return $this->js->getScript($offset);
261+
}
262+
263+
public function scriptCount(){
264+
return $this->js->scriptCount();
265+
}
266+
259267
/**
260268
* Outputs a <script> tag
261269
*

Ajax/common/traits/JqueryAjaxTrait.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -177,9 +177,10 @@ public function _jsonArray($maskSelector, $url, $method="get", $params="{}", $js
177177
$appendTo="\t\tnewElm.appendTo(".$parent.");\n";
178178
$retour.="var self = $(this);\n$.{$method}(url,".$params.").done(function( data ) {\n";
179179
$retour.=$parent.".find('._json').remove();";
180-
$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();newElm.attr('id',newId);\n;newElm.addClass('_json');\n";
180+
$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();
181+
newElm.attr('id',newId);\n;newElm.addClass('_json').removeClass('_jsonArrayModel');\nnewElm.find('[id]').each(function(){ var newId=$(this).attr('id')+'-'+index;$(this).attr('id',newId).removeClass('_jsonArrayChecked');});\n";
181182
$retour.= $appendTo;
182-
$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";
183+
$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";
183184
$retour.="\t$(document).trigger('jsonReady',[data]);\n";
184185
$retour.="\t".$jsCallback."\n"."});\n";
185186
if ($immediatly)

Ajax/semantic/html/collections/menus/HtmlMenu.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ public function getItemHeader() {
236236
}
237237

238238
public function run(JsUtils $js){
239-
$this->onClick('if(!$(this).hasClass("dropdown")){$(this).addClass("active").siblings().removeClass("active");}');
239+
$this->onClick('if(!$(this).hasClass("dropdown")&&!$(this).hasClass("no-active")){$(this).addClass("active").siblings().removeClass("active");}',false,false);
240240
$result= parent::run($js);
241241
return $result->setItemSelector(".item");
242242
}

Ajax/semantic/html/collections/menus/HtmlPaginationMenu.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,9 @@ public function __construct( $identifier, $items=array() ){
1717
* @see \Ajax\common\html\BaseHtml::compile()
1818
*/
1919
public function compile(JsUtils $js=NULL,&$view=NULL){
20-
$this->insertItem(new HtmlIcon("", "left chevron"))->setProperty("data-page", \max([1,$this->_page-1]));
21-
$this->addItem(new HtmlIcon("", "right chevron"))->setProperty("data-page", \min([\sizeof($this->content)-2,$this->_page+1]));
20+
$max=\sizeof($this->content);
21+
$this->insertItem(new HtmlIcon("", "left chevron"))->setProperty("data-page", \max([1,$this->_page-1]))->addToProperty("class","_firstPage no-active");
22+
$this->addItem(new HtmlIcon("", "right chevron"))->setProperty("data-page", \min([$max,$this->_page+1]))->setProperty("data-max", $max)->addToProperty("class","_lastPage no-active");
2223
$this->asPagination();
2324
return parent::compile($js,$view);
2425
}

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

Lines changed: 17 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ class HtmlTD extends HtmlSemDoubleElement {
1414
private $_container;
1515
private $_row;
1616
private $_col;
17+
private $_colMerged=false;
18+
private $_rowMerged=false;
1719

1820
/**
1921
*
@@ -38,6 +40,11 @@ public function setValue($value) {
3840
return $this;
3941
}
4042

43+
public function addValue($value) {
44+
$this->addContent($value);
45+
return $this;
46+
}
47+
4148
public function setRowspan($rowspan) {
4249
$to=min($this->_container->count(), $this->_row + $rowspan - 1);
4350
for($i=$to; $i > $this->_row; $i--) {
@@ -48,11 +55,19 @@ public function setRowspan($rowspan) {
4855
}
4956

5057
public function mergeRow() {
51-
return $this->setRowspan($this->_container->count());
58+
if(!$this->_rowMerged){
59+
$this->_rowMerged=true;
60+
return $this->setRowspan($this->_container->count());
61+
}
62+
return $this->_container;
5263
}
5364

5465
public function mergeCol() {
55-
return $this->setColspan($this->_container->getRow($this->_row)->count());
66+
if(!$this->_colMerged){
67+
$this->_colMerged=true;
68+
return $this->setColspan($this->_container->getRow($this->_row)->count());
69+
}
70+
return $this->_container;
5671
}
5772

5873
public function setColspan($colspan) {

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,22 @@ public function setContainer($container, $row) {
6464
* @param mixed $values
6565
*/
6666
public function setValues($values=array()) {
67+
return $this->_addOrSetValues($values, function(&$cell,$value){$cell->setValue($value);});
68+
}
69+
70+
/**
71+
* Adds values to the row cols
72+
* @param mixed $values
73+
*/
74+
public function addValues($values=array()) {
75+
return $this->_addOrSetValues($values, function(&$cell,$value){$cell->addValue($value);});
76+
}
77+
78+
/**
79+
* Sets or adds values to the row cols
80+
* @param mixed $values
81+
*/
82+
protected function _addOrSetValues($values,$callback) {
6783
$count=$this->count();
6884
if (!\is_array($values)) {
6985
$values=\array_fill(0, $count, $values);
@@ -76,8 +92,9 @@ public function setValues($values=array()) {
7692

7793
for($i=0; $i < $count; $i++) {
7894
$cell=$this->content[$i];
79-
$cell->setValue($values[$i]);
95+
$callback($cell,$values[$i]);
8096
}
97+
return $this;
8198
}
8299

83100
/**

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

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -125,6 +125,23 @@ public function setCellValue($row, $col, $value="") {
125125
* @param mixed $values
126126
*/
127127
public function setValues($values=array()) {
128+
return $this->_addOrSetValues($values, function($row,$_values){$row->setValues($_values);});
129+
}
130+
131+
/**
132+
* Adds the cells values
133+
* @param mixed $values
134+
*/
135+
public function addValues($values=array()) {
136+
return $this->_addOrSetValues($values, function($row,$_values){$row->addValues($_values);});
137+
}
138+
139+
/**
140+
* Adds or sets the cells values
141+
* @param mixed $values
142+
* @param callable $callback
143+
*/
144+
protected function _addOrSetValues($values,$callback) {
128145
$count=$this->count();
129146
$isArray=true;
130147
if (!\is_array($values)) {
@@ -138,7 +155,7 @@ public function setValues($values=array()) {
138155

139156
for($i=0; $i < $count; $i++) {
140157
$row=$this->content[$i];
141-
$row->setValues($values[$i]);
158+
$callback($row,$values[$i]);
142159
}
143160
return $this;
144161
}

Ajax/semantic/widgets/base/FieldAsTrait.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,11 @@ abstract protected function _buttonAsSubmit(HtmlButton &$button,$event,$url,$res
3838
* @param array $attributes
3939
*/
4040
protected function _applyAttributes($element,&$attributes,$index){
41-
if(isset($attributes["callback"])){
42-
$callback=$attributes["callback"];
41+
if(isset($attributes["jsCallback"])){
42+
$callback=$attributes["jsCallback"];
4343
if(\is_callable($callback)){
4444
$callback($element,$this->_modelInstance,$index);
45-
unset($attributes["callback"]);
45+
unset($attributes["jsCallback"]);
4646
}
4747
}
4848
unset($attributes["rules"]);

Ajax/semantic/widgets/base/InstanceViewer.php

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
namespace Ajax\semantic\widgets\base;
33
use Ajax\service\JString;
44
use Ajax\service\JArray;
5+
use Ajax\service\JReflection;
56

67
class InstanceViewer {
78
protected $widgetIdentifier;
@@ -64,8 +65,12 @@ public function getIdentifier($index=NULL){
6465
if(!isset($index))
6566
$index=self::$index;
6667
$value=$index;
67-
if(isset($this->values["identifier"]))
68-
$value=$this->values["identifier"]($index,$this->instance);
68+
if(isset($this->values["identifier"])){
69+
if(\is_string($this->values["identifier"]))
70+
$value=JReflection::callMethod($this->instance, $this->values["identifier"], []);
71+
else
72+
$value=$this->values["identifier"]($index,$this->instance);
73+
}
6974
return $value;
7075
}
7176

0 commit comments

Comments
 (0)