/**
* edatagrid - jQuery EasyUI
*
* Licensed under the GPL:
* http://www.gnu.org/licenses/gpl.txt
*
* Copyright 2011-2015 www.jeasyui.com
*
* Dependencies:
* datagrid
* messager
*
*/
(function($){
// var oldLoadDataMethod = $.fn.datagrid.methods.loadData;
// $.fn.datagrid.methods.loadData = function(jq, data){
// jq.each(function(){
// $.data(this, 'datagrid').filterSource = null;
// });
// return oldLoadDataMethod.call($.fn.datagrid.methods, jq, data);
// };
var autoGrids = [];
function checkAutoGrid(){
autoGrids = $.grep(autoGrids, function(t){
return t.length && t.data('edatagrid');
});
}
function saveAutoGrid(omit){
checkAutoGrid();
$.map(autoGrids, function(t){
if (t[0] != $(omit)[0]){
t.edatagrid('saveRow');
}
});
checkAutoGrid();
}
function addAutoGrid(dg){
checkAutoGrid();
for(var i=0; i<autoGrids.length; i++){
if ($(autoGrids[i])[0] == $(dg)[0]){return;}
}
autoGrids.push($(dg));
}
function delAutoGrid(dg){
checkAutoGrid();
autoGrids = $.grep(autoGrids, function(t){
return $(t)[0] != $(dg)[0];
});
}
$(function(){
$(document).unbind('.edatagrid').bind('mousedown.edatagrid', function(e){
var p = $(e.target).closest('div.datagrid-view,div.combo-panel,div.window,div.window-mask');
if (p.length){
if (p.hasClass('datagrid-view')){
saveAutoGrid(p.children('table'));
}
return;
}
saveAutoGrid();
});
});
function buildGrid(target){
var opts = $.data(target, 'edatagrid').options;
$(target).datagrid($.extend({}, opts, {
onDblClickCell:function(index,field,value){
if (opts.editing){
$(this).edatagrid('editRow', index);
focusEditor(target, field);
}
if (opts.onDblClickCell){
opts.onDblClickCell.call(target, index, field, value);
}
},
onClickCell:function(index,field,value){
// if (opts.editing && opts.editIndex >= 0){
// $(this).edatagrid('editRow', index);
// focusEditor(target, field);
// }
if (opts.editIndex >= 0){
var dg = $(this);
if (opts.editing){
dg.edatagrid('editRow', index);
} else {
setTimeout(function(){
dg.edatagrid('selectRow', opts.editIndex);
}, 0);
}
focusEditor(target, field);
}
if (opts.onClickCell){
opts.onClickCell.call(target, index, field, value);
}
},
onBeforeEdit: function(index, row){
if (opts.onBeforeEdit){
if (opts.onBeforeEdit.call(target, index, row) == false){
return false;
}
}
if (opts.autoSave){
addAutoGrid(this);
}
opts.originalRow = $.extend(true, [], row);
},
onAfterEdit: function(index, row){
delAutoGrid(this);
opts.editIndex = -1;
var url = row.isNewRecord ? opts.saveUrl : opts.updateUrl;
if (url){
var changed = false;
var fields = $(this).edatagrid('getColumnFields',true).concat($(this).edatagrid('getColumnFields'));
for(var i=0; i<fields.length; i++){
var field = fields[i];
var col = $(this).edatagrid('getColumnOption', field);
if (col.editor && opts.originalRow[field] != row[field]){
changed = true;
break;
}
}
if (changed){
opts.poster.call(target, url, row, function(data){
if (data.isError){
var originalRow = opts.originalRow;
$(target).edatagrid('cancelRow',index);
$(target).edatagrid('selectRow',index);
$(target).edatagrid('editRow',index);
opts.originalRow = originalRow;
opts.onError.call(target, index, data);
return;
}
data.isNewRecord = null;
$(target).datagrid('updateRow', {
index: index,
row: data
});
if (opts.tree){
var idValue = row[opts.idField||'id'];
var t = $(opts.tree);
var node = t.tree('find', idValue);
if (node){
node.text = row[opts.treeTextField];
t.tree('update', node);
} else {
var pnode = t.tree('find', row[opts.treeParentField]);
t.tree('append', {
parent: (pnode ? pnode.target : null),
data: [{id:idValue,text:row[opts.treeTextField]}]
});
}
}
opts.onSuccess.call(target, index, row);
opts.onSave.call(target, index, row);
}, function(data){
opts.onError.call(target, index, data);
});
} else {
opts.onSave.call(target, index, row);
}
} else {
row.isNewRecord = false;
opts.onSave.call(target, index, row);
}
if (opts.onAfterEdit) opts.onAfterEdit.call(target, index, row);
},
onCancelEdit: function(index, row){
delAutoGrid(this);
opts.editIndex = -1;
if (row.isNewRecord) {
$(this).datagrid('deleteRow', index);
}
if (opts.onCancelEdit) opts.onCancelEdit.call(target, index, row);
},
onBeforeLoad: function(param){
if (opts.onBeforeLoad.call(target, param) == false){return false}
$(this).edatagrid('cancelRow');
if (opts.tree){
var node = $(opts.tree).tree('getSelected');
param[opts.treeParentField] = node ? node.id : undefined;
}
}
}));
if (opts.tree){
$(opts.tree).tree({
url: opts.treeUrl,
onClick: function(node){
$(target).datagrid('load');
},
onDrop: function(dest,source,point){
var targetId = $(this).tree('getNode', dest).id;
var data = {
id:source.id,
targetId:targetId,
point:point
};
opts.poster.call(target, opts.treeDndUrl, data, function(result){
$(target).datagrid('load');
});
}
});
}
}
function focusEditor(target, field){
var opts = $(target).edatagrid('options');
var t;
var editor = $(target).datagrid('getEditor', {index:opts.editIndex,field:field});
if (editor){
t = editor.target;
} else {
var editors = $(target).datagrid('getEditors', opts.editIndex);
if (editors.length){
t = editors[0].target;
}
}
if (t){
if ($(t).hasClass('textbox-f')){
$(t).textbox('textbox').focus();
} else {
$(t).focus();
}
}
}
$.fn.edatagrid = function(options, param){
if (typeof options == 'string'){
var method = $.fn.edatagrid.methods[options];
if (method){
return method(this, param);
} else {
return this.datagrid(options, param);
}
}
options = options || {};
return this.each(function(){
var state = $.data(this, 'edatagrid');
if (state){
$.extend(state.options, options);
} else {
$.data(this, 'edatagrid', {
options: $.extend({}, $.fn.edatagrid.defaults, $.fn.edatagrid.parseOptions(this), options)
});
}
buildGrid(this);
});
};
$.fn.edatagrid.parseOptions = function(target){
return $.extend({}, $.fn.datagrid.parseOptions(target), {
});
};
$.fn.edatagrid.methods = {
options: function(jq){
var opts = $.data(jq[0], 'edatagrid').options;
return opts;
},
loadData: function(jq, data){
return jq.each(function(){
$(this).edatagrid('cancelRow');
$(this).datagrid('loadData', data);
});
},
enableEditing: function(jq){
return jq.each(function(){
var opts = $.data(this, 'edatagrid').options;
opts.editing = true;
});
},
disableEditing: function(jq){
return jq.each(function(){
var opts = $.data(this, 'edatagrid').options;
opts.editing = false;
});
},
isEditing: function(jq, index){
var opts = $.data(jq[0], 'edatagrid').options;
var tr = opts.finder.getTr(jq[0], index);
return tr.length && tr.hasClass('datagrid-row-editing');
},
editRow: function(jq, index){
return jq.each(function(){
var dg = $(this);
var opts = $.data(this, 'edatagrid').options;
var editIndex = opts