123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982 |
- /*jshint eqeqeq:false */
- /*global jQuery, define */
- (function( factory ) {
- "use strict";
- if ( typeof define === "function" && define.amd ) {
- // AMD. Register as an anonymous module.
- define([
- "jquery",
- "js/grid.base"
- ], factory );
- } else {
- // Browser globals
- factory( jQuery );
- }
- }(function( $ ) {
- "use strict";
- //module begin
- $.jgrid.extend({
- setTreeNode : function(i, len){
- return this.each(function(){
- var $t = this;
- if( !$t.grid || !$t.p.treeGrid ) {return;}
- var expCol = $t.p.expColInd,
- expanded = $t.p.treeReader.expanded_field,
- isLeaf = $t.p.treeReader.leaf_field,
- level = $t.p.treeReader.level_field,
- icon = $t.p.treeReader.icon_field,
- loaded = $t.p.treeReader.loaded, lft, rgt, curLevel, ident,lftpos, twrap,
- ldat, lf,
- common = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')].common,
- index = i;
- $($t).triggerHandler("jqGridBeforeSetTreeNode", [index, len]);
- if($.isFunction($t.p.beforeSetTreeNode)) {
- $t.p.beforeSetTreeNode.call($t, index, len);
- }
- while(i<len) {
- var ind = $.jgrid.stripPref($t.p.idPrefix, $t.rows[i].id), dind = $t.p._index[ind], expan;
- ldat = $t.p.data[dind];
- //$t.rows[i].level = ldat[level];
- if($t.p.treeGridModel === 'nested') {
- if(!ldat[isLeaf]) {
- lft = parseInt(ldat[$t.p.treeReader.left_field],10);
- rgt = parseInt(ldat[$t.p.treeReader.right_field],10);
- // NS Model
- ldat[isLeaf] = (rgt === lft+1) ? 'true' : 'false';
- $t.rows[i].cells[$t.p._treeleafpos].innerHTML = ldat[isLeaf];
- }
- }
- //else {
- //row.parent_id = rd[$t.p.treeReader.parent_id_field];
- //}
- curLevel = parseInt(ldat[level],10);
- if($t.p.tree_root_level === 0) {
- ident = curLevel+1;
- lftpos = curLevel;
- } else {
- ident = curLevel;
- lftpos = curLevel -1;
- }
- twrap = "<div class='tree-wrap tree-wrap-"+$t.p.direction+"' style='width:"+(ident*18)+"px;'>";
- twrap += "<div style='"+($t.p.direction==="rtl" ? "right:" : "left:")+(lftpos*18)+"px;' class='"+common.icon_base+" ";
- if(ldat[loaded] !== undefined) {
- if(ldat[loaded]==="true" || ldat[loaded]===true) {
- ldat[loaded] = true;
- } else {
- ldat[loaded] = false;
- }
- }
- if(ldat[isLeaf] === "true" || ldat[isLeaf] === true) {
- twrap += ((ldat[icon] !== undefined && ldat[icon] !== "") ? ldat[icon] : $t.p.treeIcons.leaf)+" tree-leaf treeclick";
- ldat[isLeaf] = true;
- lf="leaf";
- } else {
- ldat[isLeaf] = false;
- lf="";
- }
- ldat[expanded] = ((ldat[expanded] === "true" || ldat[expanded] === true) ? true : false) && (ldat[loaded] || ldat[loaded] === undefined);
- if(ldat[expanded] === false) {
- twrap += ((ldat[isLeaf] === true) ? "'" : $t.p.treeIcons.plus+" tree-plus treeclick'");
- } else {
- twrap += ((ldat[isLeaf] === true) ? "'" : $t.p.treeIcons.minus+" tree-minus treeclick'");
- }
-
- twrap += "></div></div>";
- $($t.rows[i].cells[expCol]).wrapInner("<span class='cell-wrapper"+lf+"'></span>").prepend(twrap);
- if(curLevel !== parseInt($t.p.tree_root_level,10)) {
- //var pn = $($t).jqGrid('getNodeParent',ldat);
- //expan = pn && pn.hasOwnProperty(expanded) ? pn[expanded] : true;
- expan = $($t).jqGrid('isVisibleNode',ldat); // overhead
- if( !expan ){
- $($t.rows[i]).css("display","none");
- }
- }
- $($t.rows[i].cells[expCol])
- .find("div.treeclick")
- .on("click",function(e){
- var target = e.target || e.srcElement,
- ind2 =$.jgrid.stripPref($t.p.idPrefix,$(target,$t.rows).closest("tr.jqgrow")[0].id),
- pos = $t.p._index[ind2];
- if(!$t.p.data[pos][isLeaf]){
- if($t.p.data[pos][expanded]){
- $($t).jqGrid("collapseRow",$t.p.data[pos]);
- $($t).jqGrid("collapseNode",$t.p.data[pos]);
- } else {
- $($t).jqGrid("expandRow",$t.p.data[pos]);
- $($t).jqGrid("expandNode",$t.p.data[pos]);
- }
- }
- return false;
- });
- if($t.p.ExpandColClick === true) {
- $($t.rows[i].cells[expCol])
- .find("span.cell-wrapper")
- .css("cursor","pointer")
- .on("click",function(e) {
- var target = e.target || e.srcElement,
- ind2 =$.jgrid.stripPref($t.p.idPrefix,$(target,$t.rows).closest("tr.jqgrow")[0].id),
- pos = $t.p._index[ind2];
- if(!$t.p.data[pos][isLeaf]){
- if($t.p.data[pos][expanded]){
- $($t).jqGrid("collapseRow",$t.p.data[pos]);
- $($t).jqGrid("collapseNode",$t.p.data[pos]);
- } else {
- $($t).jqGrid("expandRow",$t.p.data[pos]);
- $($t).jqGrid("expandNode",$t.p.data[pos]);
- }
- }
- $($t).jqGrid("setSelection",ind2);
- return false;
- });
- }
- i++;
- }
- $($t).triggerHandler("jqGridAfterSetTreeNode", [index, len]);
- if($.isFunction($t.p.afterSetTreeNode)) {
- $t.p.afterSetTreeNode.call($t, index, len);
- }
- });
- },
- setTreeGrid : function() {
- return this.each(function (){
- var $t = this, i=0, pico, ecol = false, nm, key, tkey, dupcols=[],
- classes = $.jgrid.styleUI[($t.p.styleUI || 'jQueryUI')].treegrid;
- if(!$t.p.treeGrid) {return;}
- if(!$t.p.treedatatype ) {$.extend($t.p,{treedatatype: $t.p.datatype});}
- if($t.p.loadonce) { $t.p.treedatatype = 'local'; }
- $t.p.subGrid = false;$t.p.altRows =false;
- //bvn
- if (!$t.p.treeGrid_bigData) {
- $t.p.pgbuttons = false;
- $t.p.pginput = false;
- $t.p.rowList = [];
- }
- $t.p.gridview = true;
- //bvn
- if($t.p.rowTotal === null && !$t.p.treeGrid_bigData ) { $t.p.rowNum = 10000; }
- $t.p.multiselect = false;
- // $t.p.rowList = [];
- $t.p.expColInd = 0;
- pico = classes.icon_plus;
- if($t.p.styleUI === 'jQueryUI') {
- pico += ($t.p.direction==="rtl" ? 'w' : 'e');
- }
- $t.p.treeIcons = $.extend({plus:pico, minus: classes.icon_minus, leaf: classes.icon_leaf},$t.p.treeIcons || {});
- if($t.p.treeGridModel === 'nested') {
- $t.p.treeReader = $.extend({
- level_field: "level",
- left_field:"lft",
- right_field: "rgt",
- leaf_field: "isLeaf",
- expanded_field: "expanded",
- loaded: "loaded",
- icon_field: "icon"
- },$t.p.treeReader);
- } else if($t.p.treeGridModel === 'adjacency') {
- $t.p.treeReader = $.extend({
- level_field: "level",
- parent_id_field: "parent",
- leaf_field: "isLeaf",
- expanded_field: "expanded",
- loaded: "loaded",
- icon_field: "icon"
- },$t.p.treeReader );
- }
- for ( key in $t.p.colModel){
- if($t.p.colModel.hasOwnProperty(key)) {
- nm = $t.p.colModel[key].name;
- if( nm === $t.p.ExpandColumn && !ecol ) {
- ecol = true;
- $t.p.expColInd = i;
- }
- i++;
- //
- for(tkey in $t.p.treeReader) {
- if($t.p.treeReader.hasOwnProperty(tkey) && $t.p.treeReader[tkey] === nm) {
- dupcols.push(nm);
- }
- }
- }
- }
- $.each($t.p.treeReader,function(j,n){
- if(n && $.inArray(n, dupcols) === -1){
- if(j==='leaf_field') { $t.p._treeleafpos= i; }
- i++;
- $t.p.colNames.push(n);
- $t.p.colModel.push({name:n,width:1,hidden:true,sortable:false,resizable:false,hidedlg:true,editable:true,search:false});
- }
- });
- });
- },
- expandRow: function (record){
- this.each(function(){
- var $t = this;
- //bvn
- if (!$t.p.treeGrid_bigData) {
- var $rootpages = $t.p.lastpage;
- }
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var childern = $($t).jqGrid("getNodeChildren",record),
- //if ($($t).jqGrid("isVisibleNode",record)) {
- expanded = $t.p.treeReader.expanded_field,
- rowid = record[$t.p.localReader.id],
- ret = $($t).triggerHandler("jqGridBeforeExpandTreeGridRow", [rowid, record, childern]);
- if(ret === undefined ) {
- ret = true;
- }
- if(ret && $.isFunction($t.p.beforeExpandTreeGridRow)) {
- ret = $t.p.beforeExpandTreeGridRow.call($t, rowid, record, childern);
- }
- if( ret === false ) { return; }
- $(childern).each(function(){
- var id = $t.p.idPrefix + $.jgrid.getAccessor(this,$t.p.localReader.id);
- $($($t).jqGrid('getGridRowById', id)).css("display","");
- if(this[expanded]) {
- $($t).jqGrid("expandRow",this);
- }
- });
- $($t).triggerHandler("jqGridAfterExpandTreeGridRow", [rowid, record, childern]);
- if($.isFunction($t.p.afterExpandTreeGridRow)) {
- $t.p.afterExpandTreeGridRow.call($t, rowid, record, childern);
- }
- //bvn
- if (!$t.p.treeGrid_bigData) {
- $t.p.lastpage = $rootpages;
- }
- //}
- });
- },
- collapseRow : function (record) {
- this.each(function(){
- var $t = this;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var childern = $($t).jqGrid("getNodeChildren",record),
- expanded = $t.p.treeReader.expanded_field,
- rowid = record[$t.p.localReader.id],
- ret = $($t).triggerHandler("jqGridBeforeCollapseTreeGridRow", [rowid, record, childern]);
- if(ret === undefined ) {
- ret = true;
- }
- if(ret && $.isFunction($t.p.beforeCollapseTreeGridRow)) {
- ret = $t.p.beforeCollapseTreeGridRow.call($t, rowid, record, childern);
- }
- if( ret === false ) { return; }
- $(childern).each(function(){
- var id = $t.p.idPrefix + $.jgrid.getAccessor(this,$t.p.localReader.id);
- $($($t).jqGrid('getGridRowById', id)).css("display","none");
- if(this[expanded]){
- $($t).jqGrid("collapseRow",this);
- }
- });
- $($t).triggerHandler("jqGridAfterCollapseTreeGridRow", [rowid, record, childern]);
- if($.isFunction($t.p.afterCollapseTreeGridRow)) {
- $t.p.afterCollapseTreeGridRow.call($t, rowid, record, childern);
- }
- });
- },
- // NS ,adjacency models
- getRootNodes : function(currentview) {
- var result = [];
- this.each(function(){
- var $t = this, level, parent_id, view;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- if( typeof currentview !== 'boolean') {
- currentview = false;
- }
- if(currentview) {
- view = $($t).jqGrid('getRowData', null, true);
- } else {
- view = $t.p.data;
- }
- switch ($t.p.treeGridModel) {
- case 'nested' :
- level = $t.p.treeReader.level_field;
- $(view).each(function() {
- if(parseInt(this[level],10) === parseInt($t.p.tree_root_level,10)) {
- if(currentview){
- result.push($t.p.data[$t.p._index[this[$t.p.keyName]]]);
- } else {
- result.push(this);
- }
- }
- });
- break;
- case 'adjacency' :
- parent_id = $t.p.treeReader.parent_id_field;
- $(view).each(function(){
- if(this[parent_id] === null || String(this[parent_id]).toLowerCase() === "null") {
- if(currentview){
- result.push($t.p.data[$t.p._index[this[$t.p.keyName]]]);
- } else {
- result.push(this);
- }
- }
- });
- break;
- }
- });
- return result;
- },
- getNodeDepth : function(rc) {
- var ret = null;
- this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var $t = this;
- switch ($t.p.treeGridModel) {
- case 'nested' :
- var level = $t.p.treeReader.level_field;
- ret = parseInt(rc[level],10) - parseInt($t.p.tree_root_level,10);
- break;
- case 'adjacency' :
- ret = $($t).jqGrid("getNodeAncestors",rc).length;
- break;
- }
- });
- return ret;
- },
- getNodeParent : function(rc) {
- var result = null;
- this.each(function(){
- var $t = this;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- switch ($t.p.treeGridModel) {
- case 'nested' :
- var lftc = $t.p.treeReader.left_field,
- rgtc = $t.p.treeReader.right_field,
- levelc = $t.p.treeReader.level_field,
- lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
- $(this.p.data).each(function(){
- if(parseInt(this[levelc],10) === level-1 && parseInt(this[lftc],10) < lft && parseInt(this[rgtc],10) > rgt) {
- result = this;
- return false;
- }
- });
- break;
- case 'adjacency' :
- var parent_id = $t.p.treeReader.parent_id_field,
- dtid = $t.p.localReader.id,
- ind = rc[dtid], pos = $t.p._index[ind];
- while(pos--) {
- if( String( $t.p.data[pos][dtid]) === String( $.jgrid.stripPref($t.p.idPrefix, rc[parent_id]) ) ) {
- result = $t.p.data[pos];
- break;
- }
- }
- break;
- }
- });
- return result;
- },
- getNodeChildren : function(rc, currentview) {
- var result = [];
- this.each(function(){
- var $t = this;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var i, len = currentview ? this.rows.length : this.p.data.length, row;
- switch ($t.p.treeGridModel) {
- case 'nested' :
- var lftc = $t.p.treeReader.left_field,
- rgtc = $t.p.treeReader.right_field,
- levelc = $t.p.treeReader.level_field,
- lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
- for(i=0; i < len; i++) {
- row = currentview ? $t.p.data[$t.p._index[this.rows[i].id]] : $t.p.data[i];
- if(row && parseInt(row[levelc],10) === level+1 && parseInt(row[lftc],10) > lft && parseInt(row[rgtc],10) < rgt) {
- result.push(row);
- }
- }
- break;
- case 'adjacency' :
- var parent_id = $t.p.treeReader.parent_id_field,
- dtid = $t.p.localReader.id;
- for(i=0; i < len; i++) {
- row = currentview ? $t.p.data[$t.p._index[this.rows[i].id]] : $t.p.data[i];
- if(row && String(row[parent_id]) === String( $.jgrid.stripPref($t.p.idPrefix, rc[dtid]) ) ) {
- result.push(row);
- }
- }
- break;
- }
- });
- return result;
- },
- getFullTreeNode : function(rc, expand) {
- var result = [];
- this.each(function(){
- var $t = this, len,expanded = $t.p.treeReader.expanded_field;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- if(expand == null || typeof expand !== 'boolean') {
- expand = false;
- }
- switch ($t.p.treeGridModel) {
- case 'nested' :
- var lftc = $t.p.treeReader.left_field,
- rgtc = $t.p.treeReader.right_field,
- levelc = $t.p.treeReader.level_field,
- lft = parseInt(rc[lftc],10), rgt = parseInt(rc[rgtc],10), level = parseInt(rc[levelc],10);
- $(this.p.data).each(function(){
- if(parseInt(this[levelc],10) >= level && parseInt(this[lftc],10) >= lft && parseInt(this[lftc],10) <= rgt) {
- if(expand) { this[expanded] = true; }
- result.push(this);
- }
- });
- break;
- case 'adjacency' :
- if(rc) {
- result.push(rc);
- var parent_id = $t.p.treeReader.parent_id_field,
- dtid = $t.p.localReader.id;
- $(this.p.data).each(function(i){
- len = result.length;
- for (i = 0; i < len; i++) {
- if ( String( $.jgrid.stripPref($t.p.idPrefix, result[i][dtid]) ) === String( this[parent_id] ) ) {
- if(expand) { this[expanded] = true; }
- result.push(this);
- break;
- }
- }
- });
- }
- break;
- }
- });
- return result;
- },
- // End NS, adjacency Model
- getNodeAncestors : function(rc, reverse, expanded) {
- var ancestors = [];
- if(reverse === undefined ) {
- reverse = false;
- }
- this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- if(expanded === undefined ) {
- expanded = false;
- } else {
- expanded = this.p.treeReader.expanded_field;
- }
- var parent = $(this).jqGrid("getNodeParent",rc);
- while (parent) {
- if(expanded) {
- try{
- parent[expanded] = true;
- } catch (etn) {}
- }
- if(reverse) {
- ancestors.unshift(parent);
- } else {
- ancestors.push(parent);
- }
- parent = $(this).jqGrid("getNodeParent",parent);
- }
- });
- return ancestors;
- },
- isVisibleNode : function(rc) {
- var result = true;
- this.each(function(){
- var $t = this;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var ancestors = $($t).jqGrid("getNodeAncestors",rc),
- expanded = $t.p.treeReader.expanded_field;
- $(ancestors).each(function(){
- result = result && this[expanded];
- if(!result) {return false;}
- });
- });
- return result;
- },
- isNodeLoaded : function(rc) {
- var result;
- this.each(function(){
- var $t = this;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var isLeaf = $t.p.treeReader.leaf_field,
- loaded = $t.p.treeReader.loaded;
- if(rc !== undefined ) {
- if(rc[loaded] !== undefined) {
- result = rc[loaded];
- } else if( rc[isLeaf] || $($t).jqGrid("getNodeChildren",rc).length > 0){
- result = true;
- } else {
- result = false;
- }
- } else {
- result = false;
- }
- });
- return result;
- },
- setLeaf : function (rc, state, collapsed) {
- return this.each(function(){
- var id = $.jgrid.getAccessor(rc,this.p.localReader.id),
- rc1 = $("#"+id,this.grid.bDiv)[0],
- isLeaf = this.p.treeReader.leaf_field;
- try {
- var dr = this.p._index[id];
- if(dr != null) {
- this.p.data[dr][isLeaf] = state;
- }
- } catch(E){}
- if(state === true) {
- // set it in data
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.minus+" tree-minus "+this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.leaf +" tree-leaf");
- } else if(state === false) {
- var ico = this.p.treeIcons.minus+" tree-minus";
- if(collapsed) {
- ico = this.p.treeIcons.plus+" tree-plus";
- }
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.leaf +" tree-leaf").addClass( ico );
- }
- });
- },
- reloadNode: function(rc, reloadcurrent) {
- return this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var rid = this.p.localReader.id,
- currselection = this.p.selrow;
- $(this).jqGrid("delChildren", rc[rid]);
- if(reloadcurrent=== undefined) {
- reloadcurrent = false;
- }
-
- if(!reloadcurrent) {
- if(!jQuery._data( this, "events" ).jqGridAfterSetTreeNode) {
- $(this).on("jqGridAfterSetTreeNode.reloadNode", function(){
- var isLeaf = this.p.treeReader.leaf_field;
- if(this.p.reloadnode ) {
- var rc = this.p.reloadnode,
- chld = $(this).jqGrid('getNodeChildren', rc);
- if(rc[isLeaf] && chld.length) {
- $(this).jqGrid('setLeaf', rc, false);
- } else if(!rc[isLeaf] && chld.length === 0) {
- $(this).jqGrid('setLeaf', rc, true);
- }
- }
- this.p.reloadnode = false;
- });
- }
- }
- var expanded = this.p.treeReader.expanded_field,
- parent = this.p.treeReader.parent_id_field,
- loaded = this.p.treeReader.loaded,
- level = this.p.treeReader.level_field,
- isLeaf = this.p.treeReader.leaf_field,
- lft = this.p.treeReader.left_field,
- rgt = this.p.treeReader.right_field;
- var id = $.jgrid.getAccessor(rc,this.p.localReader.id),
- rc1 = $("#"+id,this.grid.bDiv)[0];
- rc[expanded] = true;
- if(!rc[isLeaf]) {
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");
- }
- this.p.treeANode = rc1.rowIndex;
- this.p.datatype = this.p.treedatatype;
- this.p.reloadnode = rc;
- if(reloadcurrent) {
- this.p.treeANode = rc1.rowIndex > 0 ? rc1.rowIndex - 1 : 1;
- $(this).jqGrid('delRowData', id);
- }
- if(this.p.treeGridModel === 'nested') {
- $(this).jqGrid("setGridParam",{postData:{nodeid:id,n_left:rc[lft],n_right:rc[rgt],n_level:rc[level]}});
- } else {
- $(this).jqGrid("setGridParam",{postData:{nodeid:id,parentid:rc[parent],n_level:rc[level]}} );
- }
- $(this).trigger("reloadGrid");
-
- rc[loaded] = true;
- if(this.p.treeGridModel === 'nested') {
- $(this).jqGrid("setGridParam",{selrow: currselection, postData:{nodeid:'',n_left:'',n_right:'',n_level:''}});
- } else {
- $(this).jqGrid("setGridParam",{selrow: currselection, postData:{nodeid:'',parentid:'',n_level:''}});
- }
- });
- },
- expandNode : function(rc) {
- return this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var $t = this,
- expanded = this.p.treeReader.expanded_field,
- parent = this.p.treeReader.parent_id_field,
- loaded = this.p.treeReader.loaded,
- level = this.p.treeReader.level_field,
- lft = this.p.treeReader.left_field,
- rgt = this.p.treeReader.right_field;
- if(!rc[expanded]) {
- var id = $.jgrid.getAccessor(rc,this.p.localReader.id),
- rc1 = $("#" + this.p.idPrefix + $.jgrid.jqID(id),this.grid.bDiv)[0],
- position = this.p._index[id],
- ret = $($t).triggerHandler("jqGridBeforeExpandTreeGridNode", [id, rc]);
- if(ret === undefined ) {
- ret = true;
- }
- if( ret && $.isFunction(this.p.beforeExpandTreeGridNode) ) {
- ret = this.p.beforeExpandTreeGridNode.call(this, id, rc );
- }
- if( ret === false ) { return; }
- if( $(this).jqGrid("isNodeLoaded",this.p.data[position]) ) {
- rc[expanded] = true;
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");
- } else if (!this.grid.hDiv.loading) {
- rc[expanded] = true;
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.plus+" tree-plus").addClass(this.p.treeIcons.minus+" tree-minus");
- this.p.treeANode = rc1.rowIndex;
- this.p.datatype = this.p.treedatatype;
- if(this.p.treeGridModel === 'nested') {
- $(this).jqGrid("setGridParam",{postData:{nodeid:id,n_left:rc[lft],n_right:rc[rgt],n_level:rc[level]}});
- } else {
- $(this).jqGrid("setGridParam",{postData:{nodeid:id,parentid:rc[parent],n_level:rc[level]}} );
- }
- $(this).trigger("reloadGrid");
- rc[loaded] = true;
- if(this.p.treeGridModel === 'nested') {
- $(this).jqGrid("setGridParam",{postData:{nodeid:'',n_left:'',n_right:'',n_level:''}});
- } else {
- $(this).jqGrid("setGridParam",{postData:{nodeid:'',parentid:'',n_level:''}});
- }
- }
- $($t).triggerHandler("jqGridAfterExpandTreeGridNode", [id, rc]);
- if($.isFunction(this.p.afterExpandTreeGridNode)) {
- this.p.afterExpandTreeGridNode.call(this, id, rc );
- }
- }
- });
- },
- collapseNode : function(rc) {
- return this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var expanded = this.p.treeReader.expanded_field,
- $t = this;
- if(rc[expanded]) {
- var id = $.jgrid.getAccessor(rc,this.p.localReader.id),
- rc1 = $("#" + this.p.idPrefix + $.jgrid.jqID(id),this.grid.bDiv)[0],
- ret = $($t).triggerHandler("jqGridBeforeCollapseTreeGridNode", [id, rc]);
- if(ret === undefined ) {
- ret = true;
- }
- if( ret && $.isFunction(this.p.beforeCollapseTreeGridNode) ) {
- ret = this.p.beforeCollapseTreeGridNode.call(this, id, rc );
- }
- rc[expanded] = false;
- if( ret === false ) { return; }
- $("div.treeclick",rc1).removeClass(this.p.treeIcons.minus+" tree-minus").addClass(this.p.treeIcons.plus+" tree-plus");
- $($t).triggerHandler("jqGridAfterCollapseTreeGridNode", [id, rc]);
- if($.isFunction(this.p.afterCollapseTreeGridNode)) {
- this.p.afterCollapseTreeGridNode.call(this, id, rc );
- }
- }
- });
- },
- SortTree : function( sortname, newDir, st, datefmt) {
- return this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var i, len,
- rec, records = [], $t = this, query, roots,
- rt = $(this).jqGrid("getRootNodes", $t.p.search);
- // Sorting roots
- query = $.jgrid.from.call(this, rt);
- query.orderBy(sortname, newDir, st, datefmt);
- roots = query.select();
- // Sorting children
- for (i = 0, len = roots.length; i < len; i++) {
- rec = roots[i];
- records.push(rec);
- $(this).jqGrid("collectChildrenSortTree",records, rec, sortname, newDir, st, datefmt);
- }
- $.each(records, function(index) {
- var id = $.jgrid.getAccessor(this, $t.p.localReader.id);
- $('#'+$.jgrid.jqID($t.p.id)+ ' tbody tr:eq('+index+')').after($('tr#'+$.jgrid.jqID(id), $t.grid.bDiv));
- });
- query = null;roots=null;records=null;
- });
- },
- searchTree : function ( recs ) {
- var i= recs.length || 0, ancestors=[], lid, roots=[], result=[],tid, alen, rlen, j, k;
- this.each(function(){
- if(!this.grid || !this.p.treeGrid) {
- return;
- }
- if(i) {
- lid = this.p.localReader.id;
- while( i-- ) { // reverse
- ancestors = $(this).jqGrid('getNodeAncestors', recs[i], true, true);
- //add the searched item
- ancestors.push(recs[i]);
- tid = ancestors[0][lid];
- if($.inArray(tid, roots ) !== -1) { // ignore repeated, but add missing
- for( j = 0, alen = ancestors.length; j < alen; j++) {
- //$.inArray ?!?
- var found = false;
- for( k=0, rlen = result.length; k < rlen; k++) {
- if(ancestors[j][lid] === result[k][lid]) {
- found = true;
- break;
- }
- }
- if(!found) {
- result.push(ancestors[j]);
- }
- }
- continue;
- } else {
- roots.push( tid );
- }
- result = result.concat( ancestors );
- }
- }
- });
- return result;
- },
- collectChildrenSortTree : function(records, rec, sortname, newDir,st, datefmt) {
- return this.each(function(){
- if(!this.grid || !this.p.treeGrid) {return;}
- var i, len,
- child, ch, query, children;
- ch = $(this).jqGrid("getNodeChildren",rec, this.p.search);
- query = $.jgrid.from.call(this, ch);
- query.orderBy(sortname, newDir, st, datefmt);
- children = query.select();
- for (i = 0, len = children.length; i < len; i++) {
- child = children[i];
- records.push(child);
- $(this).jqGrid("collectChildrenSortTree",records, child, sortname, newDir, st, datefmt);
- }
- });
- },
- // experimental
- setTreeRow : function(rowid, data) {
- var success=false;
- this.each(function(){
- var t = this;
- if(!t.grid || !t.p.treeGrid) {return;}
- success = $(t).jqGrid("setRowData", rowid, data);
- });
- return success;
- },
- delTreeNode : function (rowid) {
- return this.each(function () {
- var $t = this, rid = $t.p.localReader.id, i,
- left = $t.p.treeReader.left_field,
- right = $t.p.treeReader.right_field, myright, width, res, key;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var rc = $t.p._index[rowid];
- if (rc !== undefined) {
- // nested
- myright = parseInt($t.p.data[rc][right],10);
- width = myright - parseInt($t.p.data[rc][left],10) + 1;
- var dr = $($t).jqGrid("getFullTreeNode",$t.p.data[rc]);
- if(dr.length>0){
- for (i=0;i<dr.length;i++){
- $($t).jqGrid("delRowData",dr[i][rid]);
- }
- }
- if( $t.p.treeGridModel === "nested") {
- // ToDo - update grid data
- res = $.jgrid.from.call($t, $t.p.data)
- .greater(left,myright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][left] = parseInt(res[key][left],10) - width ;
- }
- }
- }
- res = $.jgrid.from.call($t, $t.p.data)
- .greater(right,myright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][right] = parseInt(res[key][right],10) - width ;
- }
- }
- }
- }
- }
- });
- },
- delChildren : function (rowid) {
- return this.each(function () {
- var $t = this, rid = $t.p.localReader.id,
- left = $t.p.treeReader.left_field,
- right = $t.p.treeReader.right_field, myright, width, res, key;
- if(!$t.grid || !$t.p.treeGrid) {return;}
- var rc = $t.p._index[rowid];
- if (rc !== undefined) {
- // nested
- myright = parseInt($t.p.data[rc][right],10);
- width = myright - parseInt($t.p.data[rc][left],10) + 1;
- var dr = $($t).jqGrid("getFullTreeNode",$t.p.data[rc]);
- if(dr.length>0){
- for (var i=0;i<dr.length;i++){
- if(dr[i][rid] !== rowid)
- $($t).jqGrid("delRowData",dr[i][rid]);
- }
- }
- if( $t.p.treeGridModel === "nested") {
- // ToDo - update grid data
- res = $.jgrid.from($t.p.data)
- .greater(left,myright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][left] = parseInt(res[key][left],10) - width ;
- }
- }
- }
- res = $.jgrid.from($t.p.data)
- .greater(right,myright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][right] = parseInt(res[key][right],10) - width ;
- }
- }
- }
- }
- }
- });
- },
- addChildNode : function( nodeid, parentid, data, expandData ) {
- //return this.each(function(){
- var $t = this[0];
- if(data) {
- // we suppose tha the id is autoincremet and
- var expanded = $t.p.treeReader.expanded_field,
- isLeaf = $t.p.treeReader.leaf_field,
- level = $t.p.treeReader.level_field,
- //icon = $t.p.treeReader.icon_field,
- parent = $t.p.treeReader.parent_id_field,
- left = $t.p.treeReader.left_field,
- right = $t.p.treeReader.right_field,
- loaded = $t.p.treeReader.loaded,
- method, parentindex, parentdata, parentlevel, i, len, max=0, rowind = parentid, leaf, maxright;
- if(expandData===undefined) {expandData = false;}
- if ( nodeid == null ) {
- i = $t.p.data.length-1;
- if( i>= 0 ) {
- while(i>=0){max = Math.max(max, parseInt($t.p.data[i][$t.p.localReader.id],10)); i--;}
- }
- nodeid = max+1;
- }
- var prow = $($t).jqGrid('getInd', parentid);
- leaf = false;
- // if not a parent we assume root
- if ( parentid === undefined || parentid === null || parentid==="") {
- parentid = null;
- rowind = null;
- method = 'last';
- parentlevel = $t.p.tree_root_level;
- i = $t.p.data.length+1;
- } else {
- method = 'after';
- parentindex = $t.p._index[parentid];
- parentdata = $t.p.data[parentindex];
- parentid = parentdata[$t.p.localReader.id];
- parentlevel = parseInt(parentdata[level],10)+1;
- var childs = $($t).jqGrid('getFullTreeNode', parentdata);
- // if there are child nodes get the last index of it
- if(childs.length) {
- i = childs[childs.length-1][$t.p.localReader.id];
- rowind = i;
- i = $($t).jqGrid('getInd',rowind)+1;
- } else {
- i = $($t).jqGrid('getInd', parentid)+1;
- }
- // if the node is leaf
- if(parentdata[isLeaf]) {
- leaf = true;
- parentdata[expanded] = true;
- //var prow = $($t).jqGrid('getInd', parentid);
- $($t.rows[prow])
- .find("span.cell-wrapperleaf").removeClass("cell-wrapperleaf").addClass("cell-wrapper")
- .end()
- .find("div.tree-leaf").removeClass($t.p.treeIcons.leaf+" tree-leaf").addClass($t.p.treeIcons.minus+" tree-minus");
- $t.p.data[parentindex][isLeaf] = false;
- parentdata[loaded] = true;
- }
- }
- len = i+1;
- if( data[expanded]===undefined) {data[expanded]= false;}
- if( data[loaded]===undefined ) { data[loaded] = false;}
- data[level] = parentlevel;
- if( data[isLeaf]===undefined) {data[isLeaf]= true;}
- if( $t.p.treeGridModel === "adjacency") {
- data[parent] = parentid;
- }
- if( $t.p.treeGridModel === "nested") {
- // this method requiere more attention
- var query, res, key;
- //maxright = parseInt(maxright,10);
- // ToDo - update grid data
- if(parentid !== null) {
- maxright = parseInt(parentdata[right],10);
- query = $.jgrid.from.call($t, $t.p.data);
- query = query.greaterOrEquals(right,maxright,{stype:'integer'});
- res = query.select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][left] = res[key][left] > maxright ? parseInt(res[key][left],10) +2 : res[key][left];
- res[key][right] = res[key][right] >= maxright ? parseInt(res[key][right],10) +2 : res[key][right];
- }
- }
- }
- data[left] = maxright;
- data[right]= maxright+1;
- } else {
- maxright = parseInt( $($t).jqGrid('getCol', right, false, 'max'), 10);
- res = $.jgrid.from.call($t, $t.p.data)
- .greater(left,maxright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][left] = parseInt(res[key][left],10) +2 ;
- }
- }
- }
- res = $.jgrid.from.call($t, $t.p.data)
- .greater(right,maxright,{stype:'integer'})
- .select();
- if(res.length) {
- for( key in res) {
- if(res.hasOwnProperty(key)) {
- res[key][right] = parseInt(res[key][right],10) +2 ;
- }
- }
- }
- data[left] = maxright+1;
- data[right] = maxright + 2;
- }
- }
- if( parentid === null || $($t).jqGrid("isNodeLoaded",parentdata) || leaf ) {
- $($t).jqGrid('addRowData', nodeid, data, method, rowind);
- $($t).jqGrid('setTreeNode', i, len);
- }
- if(parentdata && !parentdata[expanded] && expandData) {
- $($t.rows[prow])
- .find("div.treeclick")
- .click();
- }
- }
- //});
- }
- });
- //module end
- }));
|