/*jshint eqeqeq:false */
|
/*global jQuery, define */
|
(function( factory ) {
|
"use strict";
|
if ( typeof define === "function" && define.amd ) {
|
// AMD. Register as an anonymous module.
|
define([
|
"jquery",
|
"./grid.base",
|
"./jqModal",
|
"./jqDnR"
|
], factory );
|
} else {
|
// Browser globals
|
factory( jQuery );
|
}
|
}(function( $ ) {
|
"use strict";
|
//module begin
|
$.extend($.jgrid,{
|
// Modal functions
|
showModal : function(h) {
|
h.w.show();
|
},
|
closeModal : function(h) {
|
h.w.hide().attr("aria-hidden","true");
|
if(h.o) {h.o.remove();}
|
},
|
hideModal : function (selector,o) {
|
o = $.extend({jqm : true, gb :'', removemodal: false, formprop: false, form : ''}, o || {});
|
var thisgrid = o.gb && typeof o.gb === "string" && o.gb.substr(0,6) === "#gbox_" ? $("#" + o.gb.substr(6))[0] : false;
|
if(o.onClose) {
|
var oncret = thisgrid ? o.onClose.call(thisgrid, selector) : o.onClose(selector);
|
if (typeof oncret === 'boolean' && !oncret ) { return; }
|
}
|
if( o.formprop && thisgrid && o.form) {
|
var fh = $(selector)[0].style.height,
|
fw = $(selector)[0].style.width;
|
if(fh.indexOf("px") > -1 ) {
|
fh = parseFloat(fh);
|
}
|
if(fw.indexOf("px") > -1 ) {
|
fw = parseFloat(fw);
|
}
|
var frmgr, frmdata;
|
if(o.form==='edit'){
|
frmgr = '#' +$.jgrid.jqID("FrmGrid_"+ o.gb.substr(6));
|
frmdata = "formProp";
|
} else if( o.form === 'view') {
|
frmgr = '#' +$.jgrid.jqID("ViewGrid_"+ o.gb.substr(6));
|
frmdata = "viewProp";
|
}
|
$(thisgrid).data(frmdata, {
|
top:parseFloat($(selector).css("top")),
|
left : parseFloat($(selector).css("left")),
|
width : fw,
|
height : fh,
|
dataheight : $(frmgr).height(),
|
datawidth: $(frmgr).width()
|
});
|
}
|
if ($.fn.jqm && o.jqm === true) {
|
$(selector).attr("aria-hidden","true").jqmHide();
|
} else {
|
if(o.gb !== '') {
|
try {$(".jqgrid-overlay:first",o.gb).hide();} catch (e){}
|
}
|
$(selector).hide().attr("aria-hidden","true");
|
}
|
if( o.removemodal ) {
|
$(selector).remove();
|
}
|
},
|
//Helper functions
|
findPos : function(obj) {
|
var curleft = 0, curtop = 0;
|
if (obj.offsetParent) {
|
do {
|
curleft += obj.offsetLeft;
|
curtop += obj.offsetTop;
|
} while (obj = obj.offsetParent);
|
//do not change obj == obj.offsetParent
|
}
|
return [curleft,curtop];
|
},
|
createModal : function(aIDs, content, p, insertSelector, posSelector, appendsel, css) {
|
p = $.extend(true, {}, $.jgrid.jqModal || {}, p);
|
var self = this,
|
rtlsup = $(p.gbox).attr("dir") === "rtl" ? true : false,
|
classes = $.jgrid.styleUI[(p.styleUI || 'jQueryUI')].modal,
|
common = $.jgrid.styleUI[(p.styleUI || 'jQueryUI')].common,
|
mw = document.createElement('div');
|
css = $.extend({}, css || {});
|
mw.className= "ui-jqdialog " + classes.modal;
|
mw.id = aIDs.themodal;
|
var mh = document.createElement('div');
|
mh.className = "ui-jqdialog-titlebar " + classes.header;
|
mh.id = aIDs.modalhead;
|
$(mh).append("<span class='ui-jqdialog-title'>"+p.caption+"</span>");
|
var ahr= $("<a class='ui-jqdialog-titlebar-close "+common.cornerall+"'></a>")
|
.hover(function(){ahr.addClass(common.hover);},
|
function(){ahr.removeClass(common.hover);})
|
.append("<span class='" + common.icon_base+" " + classes.icon_close + "'></span>");
|
$(mh).append(ahr);
|
if(rtlsup) {
|
mw.dir = "rtl";
|
$(".ui-jqdialog-title",mh).css("float","right");
|
$(".ui-jqdialog-titlebar-close",mh).css("left",0.3+"em");
|
} else {
|
mw.dir = "ltr";
|
$(".ui-jqdialog-title",mh).css("float","left");
|
$(".ui-jqdialog-titlebar-close",mh).css("right",0.3+"em");
|
}
|
var mc = document.createElement('div');
|
$(mc).addClass("ui-jqdialog-content " + classes.content).attr("id",aIDs.modalcontent);
|
$(mc).append(content);
|
mw.appendChild(mc);
|
$(mw).prepend(mh);
|
if(appendsel===true) {
|
$('body').append(mw);
|
} //append as first child in body -for alert dialog
|
else if (typeof appendsel === "string") {
|
$(appendsel).append(mw);
|
} else {
|
$(mw).insertBefore(insertSelector);
|
}
|
$(mw).css(css);
|
if(p.jqModal === undefined) {p.jqModal = true;} // internal use
|
var coord = {};
|
if ( $.fn.jqm && p.jqModal === true) {
|
if(p.left ===0 && p.top===0 && p.overlay) {
|
var pos = [];
|
pos = $.jgrid.findPos(posSelector);
|
p.left = pos[0] + 4;
|
p.top = pos[1] + 4;
|
}
|
coord.top = p.top+"px";
|
coord.left = p.left;
|
} else if(p.left !==0 || p.top!==0) {
|
coord.left = p.left;
|
coord.top = p.top+"px";
|
}
|
$("a.ui-jqdialog-titlebar-close",mh).click(function(){
|
var oncm = $("#"+$.jgrid.jqID(aIDs.themodal)).data("onClose") || p.onClose;
|
var gboxclose = $("#"+$.jgrid.jqID(aIDs.themodal)).data("gbox") || p.gbox;
|
self.hideModal("#"+$.jgrid.jqID(aIDs.themodal),{gb:gboxclose,jqm:p.jqModal,onClose:oncm, removemodal: p.removemodal || false, formprop : !p.recreateForm || false, form: p.form || ''});
|
return false;
|
});
|
if (p.width === 0 || !p.width) {p.width = 300;}
|
if(p.height === 0 || !p.height) {p.height =200;}
|
if(!p.zIndex) {
|
var parentZ = $(insertSelector).parents("*[role=dialog]").filter(':first').css("z-index");
|
if(parentZ) {
|
p.zIndex = parseInt(parentZ,10)+2;
|
} else {
|
p.zIndex = 950;
|
}
|
}
|
var rtlt = 0;
|
if( rtlsup && coord.left && !appendsel) {
|
rtlt = $(p.gbox).width()- (!isNaN(p.width) ? parseInt(p.width,10) :0) - 8; // to do
|
// just in case
|
coord.left = parseInt(coord.left,10) + parseInt(rtlt,10);
|
}
|
if(coord.left) { coord.left += "px"; }
|
$(mw).css($.extend({
|
width: isNaN(p.width) ? "auto": p.width+"px",
|
height:isNaN(p.height) ? "auto" : p.height + "px",
|
zIndex:p.zIndex,
|
overflow: 'hidden'
|
},coord))
|
.attr({tabIndex: "-1","role":"dialog","aria-labelledby":aIDs.modalhead,"aria-hidden":"true"});
|
if(p.drag === undefined) { p.drag=true;}
|
if(p.resize === undefined) {p.resize=true;}
|
if (p.drag) {
|
$(mh).css('cursor','move');
|
if($.fn.tinyDraggable) {
|
//$(mw).jqDrag(mh);
|
$(mw).tinyDraggable({ handle:"#"+$.jgrid.jqID(mh.id) });
|
} else {
|
try {
|
$(mw).draggable({handle: $("#"+$.jgrid.jqID(mh.id))});
|
} catch (e) {}
|
}
|
}
|
if(p.resize) {
|
if($.fn.jqResize) {
|
$(mw).append("<div class='jqResize "+classes.resizable+" "+common.icon_base + " " +classes.icon_resizable+"'></div>");
|
$("#"+$.jgrid.jqID(aIDs.themodal)).jqResize(".jqResize",aIDs.scrollelm ? "#"+$.jgrid.jqID(aIDs.scrollelm) : false);
|
} else {
|
try {
|
$(mw).resizable({handles: 'se, sw',alsoResize: aIDs.scrollelm ? "#"+$.jgrid.jqID(aIDs.scrollelm) : false});
|
} catch (r) {}
|
}
|
}
|
if(p.closeOnEscape === true){
|
$(mw).keydown( function( e ) {
|
if( e.which === 27 ) {
|
var cone = $("#"+$.jgrid.jqID(aIDs.themodal)).data("onClose") || p.onClose;
|
self.hideModal("#"+$.jgrid.jqID(aIDs.themodal),{gb:p.gbox,jqm:p.jqModal,onClose: cone, removemodal: p.removemodal || false, formprop : !p.recreateForm || false, form: p.form || ''});
|
}
|
});
|
}
|
},
|
viewModal : function (selector,o){
|
o = $.extend({
|
toTop: true,
|
overlay: 10,
|
modal: false,
|
overlayClass : 'ui-widget-overlay', // to be fixed
|
onShow: $.jgrid.showModal,
|
onHide: $.jgrid.closeModal,
|
gbox: '',
|
jqm : true,
|
jqM : true
|
}, o || {});
|
if(o.focusField === undefined) {
|
o.focusField = 0;
|
}
|
if(typeof o.focusField === "number" && o.focusField >= 0 ) {
|
o.focusField = parseInt(o.focusField,10);
|
} else if(typeof o.focusField === "boolean" && !o.focusField) {
|
o.focusField = false;
|
} else {
|
o.focusField = 0;
|
}
|
if ($.fn.jqm && o.jqm === true) {
|
if(o.jqM) { $(selector).attr("aria-hidden","false").jqm(o).jqmShow(); }
|
else {$(selector).attr("aria-hidden","false").jqmShow();}
|
} else {
|
if(o.gbox !== '') {
|
$(".jqgrid-overlay:first",o.gbox).show();
|
$(selector).data("gbox",o.gbox);
|
}
|
$(selector).show().attr("aria-hidden","false");
|
if(o.focusField >= 0) {
|
try{$(':input:visible',selector)[parseInt(o.focusField,10)].focus();}catch(_){}
|
}
|
}
|
},
|
info_dialog : function(caption, content,c_b, modalopt) {
|
var mopt = {
|
width:290,
|
height:'auto',
|
dataheight: 'auto',
|
drag: true,
|
resize: false,
|
left:250,
|
top:170,
|
zIndex : 1000,
|
jqModal : true,
|
modal : false,
|
closeOnEscape : true,
|
align: 'center',
|
buttonalign : 'center',
|
buttons : []
|
// {text:'textbutt', id:"buttid", onClick : function(){...}}
|
// if the id is not provided we set it like info_button_+ the index in the array - i.e info_button_0,info_button_1...
|
};
|
$.extend(true, mopt, $.jgrid.jqModal || {}, {caption:"<b>"+caption+"</b>"}, modalopt || {});
|
var jm = mopt.jqModal, self = this,
|
classes = $.jgrid.styleUI[(mopt.styleUI || 'jQueryUI')].modal,
|
common = $.jgrid.styleUI[(mopt.styleUI || 'jQueryUI')].common;
|
if($.fn.jqm && !jm) { jm = false; }
|
// in case there is no jqModal
|
var buttstr ="", i;
|
if(mopt.buttons.length > 0) {
|
for(i=0;i<mopt.buttons.length;i++) {
|
if(mopt.buttons[i].id === undefined) { mopt.buttons[i].id = "info_button_"+i; }
|
buttstr += "<a id='"+mopt.buttons[i].id+"' class='fm-button " + common.button+"'>"+mopt.buttons[i].text+"</a>";
|
}
|
}
|
var dh = isNaN(mopt.dataheight) ? mopt.dataheight : mopt.dataheight+"px",
|
cn = "text-align:"+mopt.align+";";
|
var cnt = "<div id='info_id'>";
|
cnt += "<div id='infocnt' style='margin:0px;padding-bottom:1em;width:100%;overflow:auto;position:relative;height:"+dh+";"+cn+"'>"+content+"</div>";
|
cnt += c_b ? "<div class='" + classes.header + "' style='text-align:"+mopt.buttonalign+";padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;'><a id='closedialog' class='fm-button " + common.button + "'>"+c_b+"</a>"+buttstr+"</div>" :
|
buttstr !== "" ? "<div class='" + classes.header + "' style='text-align:"+mopt.buttonalign+";padding-bottom:0.8em;padding-top:0.5em;background-image: none;border-width: 1px 0 0 0;'>"+buttstr+"</div>" : "";
|
cnt += "</div>";
|
|
try {
|
if($("#info_dialog").attr("aria-hidden") === "false") {
|
$.jgrid.hideModal("#info_dialog",{jqm:jm});
|
}
|
$("#info_dialog").remove();
|
} catch (e){}
|
$.jgrid.createModal({
|
themodal:'info_dialog',
|
modalhead:'info_head',
|
modalcontent:'info_content',
|
scrollelm: 'infocnt'},
|
cnt,
|
mopt,
|
'','',true
|
);
|
// attach onclick after inserting into the dom
|
if(buttstr) {
|
$.each(mopt.buttons,function(i){
|
$("#"+$.jgrid.jqID(this.id),"#info_id").bind('click',function(){mopt.buttons[i].onClick.call($("#info_dialog")); return false;});
|
});
|
}
|
$("#closedialog", "#info_id").click(function(){
|
self.hideModal("#info_dialog",{
|
jqm:jm,
|
onClose: $("#info_dialog").data("onClose") || mopt.onClose,
|
gb: $("#info_dialog").data("gbox") || mopt.gbox
|
});
|
return false;
|
});
|
$(".fm-button","#info_dialog").hover(
|
function(){$(this).addClass(common.hover);},
|
function(){$(this).removeClass(common.hover);}
|
);
|
if($.isFunction(mopt.beforeOpen) ) { mopt.beforeOpen(); }
|
$.jgrid.viewModal("#info_dialog",{
|
onHide: function(h) {
|
h.w.hide().remove();
|
if(h.o) { h.o.remove(); }
|
},
|
modal :mopt.modal,
|
jqm:jm
|
});
|
if($.isFunction(mopt.afterOpen) ) { mopt.afterOpen(); }
|
try{ $("#info_dialog").focus();} catch (m){}
|
},
|
bindEv: function (el, opt) {
|
var $t = this;
|
if($.isFunction(opt.dataInit)) {
|
opt.dataInit.call($t,el,opt);
|
}
|
if(opt.dataEvents) {
|
$.each(opt.dataEvents, function() {
|
if (this.data !== undefined) {
|
$(el).bind(this.type, this.data, this.fn);
|
} else {
|
$(el).bind(this.type, this.fn);
|
}
|
});
|
}
|
},
|
// Form Functions
|
createEl : function(eltype,options,vl,autowidth, ajaxso) {
|
var elem = "", $t = this;
|
function setAttributes(elm, atr, exl ) {
|
var exclude = ['dataInit','dataEvents','dataUrl', 'buildSelect','sopt', 'searchhidden', 'defaultValue', 'attr', 'custom_element', 'custom_value', 'oper'];
|
if(exl !== undefined && $.isArray(exl)) {
|
$.merge(exclude, exl);
|
}
|
$.each(atr, function(key, value){
|
if($.inArray(key, exclude) === -1) {
|
$(elm).attr(key,value);
|
}
|
});
|
if(!atr.hasOwnProperty('id')) {
|
$(elm).attr('id', $.jgrid.randId());
|
}
|
}
|
switch (eltype)
|
{
|
case "textarea" :
|
elem = document.createElement("textarea");
|
if(autowidth) {
|
if(!options.cols) { $(elem).css({width:"98%"});}
|
} else if (!options.cols) { options.cols = 20; }
|
if(!options.rows) { options.rows = 2; }
|
if(vl===' ' || vl===' ' || (vl.length===1 && vl.charCodeAt(0)===160)) {vl="";}
|
elem.value = vl;
|
setAttributes(elem, options);
|
$(elem).attr({"role":"textbox","multiline":"true"});
|
break;
|
case "checkbox" : //what code for simple checkbox
|
elem = document.createElement("input");
|
elem.type = "checkbox";
|
if( !options.value ) {
|
var vl1 = (vl+"").toLowerCase();
|
if(vl1.search(/(false|f|0|no|n|off|undefined)/i)<0 && vl1!=="") {
|
elem.checked=true;
|
elem.defaultChecked=true;
|
elem.value = vl;
|
} else {
|
elem.value = "on";
|
}
|
$(elem).attr("offval","off");
|
} else {
|
var cbval = options.value.split(":");
|
if(vl === cbval[0]) {
|
elem.checked=true;
|
elem.defaultChecked=true;
|
}
|
elem.value = cbval[0];
|
$(elem).attr("offval",cbval[1]);
|
}
|
setAttributes(elem, options, ['value']);
|
$(elem).attr("role","checkbox");
|
break;
|
case "select" :
|
elem = document.createElement("select");
|
elem.setAttribute("role","select");
|
var msl, ovm = [];
|
if(options.multiple===true) {
|
msl = true;
|
elem.multiple="multiple";
|
$(elem).attr("aria-multiselectable","true");
|
} else { msl = false; }
|
if(options.dataUrl != null) {
|
var rowid = null, postData = options.postData || ajaxso.postData;
|
try {
|
rowid = options.rowId;
|
} catch(e) {}
|
|
if ($t.p && $t.p.idPrefix) {
|
rowid = $.jgrid.stripPref($t.p.idPrefix, rowid);
|
}
|
$.ajax($.extend({
|
url: $.isFunction(options.dataUrl) ? options.dataUrl.call($t, rowid, vl, String(options.name)) : options.dataUrl,
|
type : "GET",
|
dataType: "html",
|
data: $.isFunction(postData) ? postData.call($t, rowid, vl, String(options.name)) : postData,
|
context: {elem:elem, options:options, vl:vl},
|
success: function(data){
|
var ovm = [], elem = this.elem, vl = this.vl,
|
options = $.extend({},this.options),
|
msl = options.multiple===true,
|
cU = options.cacheUrlData === true,
|
oV ='', txt,
|
a = $.isFunction(options.buildSelect) ? options.buildSelect.call($t,data) : data;
|
if(typeof a === 'string') {
|
a = $( $.trim( a ) ).html();
|
}
|
if(a) {
|
$(elem).append(a);
|
setAttributes(elem, options, postData ? ['postData'] : undefined );
|
if(options.size === undefined) { options.size = msl ? 3 : 1;}
|
if(msl) {
|
ovm = vl.split(",");
|
ovm = $.map(ovm,function(n){return $.trim(n);});
|
} else {
|
ovm[0] = $.trim(vl);
|
}
|
//$(elem).attr(options);
|
setTimeout(function(){
|
$("option",elem).each(function(i){
|
txt = $(this).text();
|
vl = $(this).val() || txt;
|
if(cU) {
|
oV += (i!== 0 ? ";": "")+ vl+":"+txt;
|
}
|
//if(i===0) { this.selected = ""; }
|
// fix IE8/IE7 problem with selecting of the first item on multiple=true
|
if (i === 0 && elem.multiple) { this.selected = false; }
|
$(this).attr("role","option");
|
if($.inArray($.trim(txt),ovm) > -1 || $.inArray($.trim(vl),ovm) > -1 ) {
|
this.selected= "selected";
|
}
|
});
|
if(cU) {
|
if(options.oper === 'edit') {
|
$($t).jqGrid('setColProp',options.name,{ editoptions: {buildSelect: null, dataUrl : null, value : oV} });
|
} else if(options.oper === 'search') {
|
$($t).jqGrid('setColProp',options.name,{ searchoptions: {dataUrl : null, value : oV} });
|
} else if(options.oper ==='filter') {
|
if($("#fbox_"+$t.p.id)[0].p) {
|
var cols = $("#fbox_"+$t.p.id)[0].p.columns, nm;
|
$.each(cols,function(i) {
|
nm = this.index || this.name;
|
if(options.name === nm) {
|
this.searchoptions.dataUrl = null;
|
this.searchoptions.value = oV;
|
return false;
|
}
|
});
|
}
|
}
|
}
|
$($t).triggerHandler("jqGridAddEditAfterSelectUrlComplete", [elem]);
|
},0);
|
}
|
}
|
},ajaxso || {}));
|
} else if(options.value) {
|
var i;
|
if(options.size === undefined) {
|
options.size = msl ? 3 : 1;
|
}
|
if(msl) {
|
ovm = vl.split(",");
|
ovm = $.map(ovm,function(n){return $.trim(n);});
|
}
|
if(typeof options.value === 'function') { options.value = options.value(); }
|
var so,sv, ov, oSv, key, value,
|
sep = options.separator === undefined ? ":" : options.separator,
|
delim = options.delimiter === undefined ? ";" : options.delimiter;
|
if(typeof options.value === 'string') {
|
so = options.value.split(delim);
|
for(i=0; i<so.length;i++){
|
sv = so[i].split(sep);
|
if(sv.length > 2 ) {
|
sv[1] = $.map(sv,function(n,ii){if(ii>0) { return n;} }).join(sep);
|
}
|
ov = document.createElement("option");
|
ov.setAttribute("role","option");
|
ov.value = sv[0]; ov.innerHTML = sv[1];
|
elem.appendChild(ov);
|
if (!msl && ($.trim(sv[0]) === $.trim(vl) || $.trim(sv[1]) === $.trim(vl))) { ov.selected ="selected"; }
|
if (msl && ($.inArray($.trim(sv[1]), ovm)>-1 || $.inArray($.trim(sv[0]), ovm)>-1)) {ov.selected ="selected";}
|
}
|
} else if (Object.prototype.toString.call(options.value) === "[object Array]") {
|
oSv = options.value;
|
// array of arrays [[Key, Value], [Key, Value], ...]
|
for (i=0; i<oSv.length; i++) {
|
if(oSv[i].length === 2) {
|
key = oSv[i][0];
|
value = oSv[i][1];
|
ov = document.createElement("option");
|
ov.setAttribute("role","option");
|
ov.value = key; ov.innerHTML = value;
|
elem.appendChild(ov);
|
if (!msl && ( $.trim(key) === $.trim(vl) || $.trim(value) === $.trim(vl)) ) { ov.selected ="selected"; }
|
if (msl && ($.inArray($.trim(value),ovm)>-1 || $.inArray($.trim(key),ovm)>-1)) { ov.selected ="selected"; }
|
}
|
}
|
} else if (typeof options.value === 'object') {
|
oSv = options.value;
|
for (key in oSv) {
|
if (oSv.hasOwnProperty(key ) ){
|
ov = document.createElement("option");
|
ov.setAttribute("role","option");
|
ov.value = key; ov.innerHTML = oSv[key];
|
elem.appendChild(ov);
|
if (!msl && ( $.trim(key) === $.trim(vl) || $.trim(oSv[key]) === $.trim(vl)) ) { ov.selected ="selected"; }
|
if (msl && ($.inArray($.trim(oSv[key]),ovm)>-1 || $.inArray($.trim(key),ovm)>-1)) { ov.selected ="selected"; }
|
}
|
}
|
}
|
setAttributes(elem, options, ['value']);
|
}
|
break;
|
case "image" :
|
case "file" :
|
elem = document.createElement("input");
|
elem.type = eltype;
|
setAttributes(elem, options);
|
break;
|
case "custom" :
|
elem = document.createElement("span");
|
try {
|
if($.isFunction(options.custom_element)) {
|
var celm = options.custom_element.call($t,vl,options);
|
if(celm) {
|
celm = $(celm).addClass("customelement").attr({id:options.id,name:options.name});
|
$(elem).empty().append(celm);
|
} else {
|
throw "e2";
|
}
|
} else {
|
throw "e1";
|
}
|
} catch (e) {
|
var errors = $.jgrid.getRegional($t, 'errors'),
|
edit =$.jgrid.getRegional($t, 'edit');
|
|
if (e==="e1") { $.jgrid.info_dialog(errors.errcap,"function 'custom_element' "+edit.msg.nodefined, edit.bClose, {styleUI : $t.p.styleUI });}
|
else if (e==="e2") { $.jgrid.info_dialog(errors.errcap,"function 'custom_element' "+edit.msg.novalue,edit.bClose, {styleUI : $t.p.styleUI });}
|
else { $.jgrid.info_dialog(errors.errcap,typeof e==="string"?e:e.message,edit.bClose, {styleUI : $t.p.styleUI }); }
|
}
|
break;
|
default :
|
var role;
|
if(eltype==="button") { role = "button"; }
|
else { role = "textbox"; } // ???
|
elem = document.createElement("input");
|
elem.type = eltype;
|
elem.value = vl;
|
setAttributes(elem, options);
|
if(eltype !== "button"){
|
if(autowidth) {
|
if(!options.size) { $(elem).css({width:"96%"}); }
|
} else if (!options.size) { options.size = 20; }
|
}
|
$(elem).attr("role",role);
|
}
|
return elem;
|
},
|
// Date Validation Javascript
|
checkDate : function (format, date) {
|
var daysInFebruary = function(year){
|
// February has 29 days in any year evenly divisible by four,
|
// EXCEPT for centurial years which are not also divisible by 400.
|
return (((year % 4 === 0) && ( year % 100 !== 0 || (year % 400 === 0))) ? 29 : 28 );
|
},
|
tsp = {}, sep;
|
format = format.toLowerCase();
|
//we search for /,-,. for the date separator
|
if(format.indexOf("/") !== -1) {
|
sep = "/";
|
} else if(format.indexOf("-") !== -1) {
|
sep = "-";
|
} else if(format.indexOf(".") !== -1) {
|
sep = ".";
|
} else {
|
sep = "/";
|
}
|
format = format.split(sep);
|
date = date.split(sep);
|
if (date.length !== 3) { return false; }
|
var j=-1,yln, dln=-1, mln=-1, i;
|
for(i=0;i<format.length;i++){
|
var dv = isNaN(date[i]) ? 0 : parseInt(date[i],10);
|
tsp[format[i]] = dv;
|
yln = format[i];
|
if(yln.indexOf("y") !== -1) { j=i; }
|
if(yln.indexOf("m") !== -1) { mln=i; }
|
if(yln.indexOf("d") !== -1) { dln=i; }
|
}
|
if (format[j] === "y" || format[j] === "yyyy") {
|
yln=4;
|
} else if(format[j] ==="yy"){
|
yln = 2;
|
} else {
|
yln = -1;
|
}
|
var daysInMonth = [0,31,29,31,30,31,30,31,31,30,31,30,31],
|
strDate;
|
if (j === -1) {
|
return false;
|
}
|
strDate = tsp[format[j]].toString();
|
if(yln === 2 && strDate.length === 1) {yln = 1;}
|
if (strDate.length !== yln || (tsp[format[j]]===0 && date[j]!=="00")){
|
return false;
|
}
|
if(mln === -1) {
|
return false;
|
}
|
strDate = tsp[format[mln]].toString();
|
if (strDate.length<1 || tsp[format[mln]]<1 || tsp[format[mln]]>12){
|
return false;
|
}
|
if(dln === -1) {
|
return false;
|
}
|
strDate = tsp[format[dln]].toString();
|
if (strDate.length<1 || tsp[format[dln]]<1 || tsp[format[dln]]>31 || (tsp[format[mln]]===2 && tsp[format[dln]]>daysInFebruary(tsp[format[j]])) || tsp[format[dln]] > daysInMonth[tsp[format[mln]]]){
|
return false;
|
}
|
return true;
|
},
|
isEmpty : function(val)
|
{
|
if (val.match(/^\s+$/) || val === "") {
|
return true;
|
}
|
return false;
|
},
|
checkTime : function(time){
|
// checks only hh:ss (and optional am/pm)
|
var re = /^(\d{1,2}):(\d{2})([apAP][Mm])?$/,regs;
|
if(!$.jgrid.isEmpty(time))
|
{
|
regs = time.match(re);
|
if(regs) {
|
if(regs[3]) {
|
if(regs[1] < 1 || regs[1] > 12) { return false; }
|
} else {
|
if(regs[1] > 23) { return false; }
|
}
|
if(regs[2] > 59) {
|
return false;
|
}
|
} else {
|
return false;
|
}
|
}
|
return true;
|
},
|
checkValues : function(val, valref, customobject, nam) {
|
var edtrul,i, nm, dft, len, g = this, cm = g.p.colModel,
|
msg = $.jgrid.getRegional(this, 'edit.msg'), fmtdate;
|
if(customobject === undefined) {
|
if(typeof valref==='string'){
|
for( i =0, len=cm.length;i<len; i++){
|
if(cm[i].name===valref) {
|
edtrul = cm[i].editrules;
|
valref = i;
|
if(cm[i].formoptions != null) { nm = cm[i].formoptions.label; }
|
break;
|
}
|
}
|
} else if(valref >=0) {
|
edtrul = cm[valref].editrules;
|
}
|
} else {
|
edtrul = customobject;
|
nm = nam===undefined ? "_" : nam;
|
}
|
if(edtrul) {
|
if(!nm) { nm = g.p.colNames != null ? g.p.colNames[valref] : cm[valref].label; }
|
if(edtrul.required === true) {
|
if( $.jgrid.isEmpty(val) ) { return [false,nm+": "+msg.required,""]; }
|
}
|
// force required
|
var rqfield = edtrul.required === false ? false : true;
|
if(edtrul.number === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
if(isNaN(val)) { return [false,nm+": "+msg.number,""]; }
|
}
|
}
|
if(edtrul.minValue !== undefined && !isNaN(edtrul.minValue)) {
|
if (parseFloat(val) < parseFloat(edtrul.minValue) ) { return [false,nm+": "+msg.minValue+" "+edtrul.minValue,""];}
|
}
|
if(edtrul.maxValue !== undefined && !isNaN(edtrul.maxValue)) {
|
if (parseFloat(val) > parseFloat(edtrul.maxValue) ) { return [false,nm+": "+msg.maxValue+" "+edtrul.maxValue,""];}
|
}
|
var filter;
|
if(edtrul.email === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
// taken from $ Validate plugin
|
filter = /^((([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+(\.([a-z]|\d|[!#\$%&'\*\+\-\/=\?\^_`{\|}~]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])+)*)|((\x22)((((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(([\x01-\x08\x0b\x0c\x0e-\x1f\x7f]|\x21|[\x23-\x5b]|[\x5d-\x7e]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(\\([\x01-\x09\x0b\x0c\x0d-\x7f]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF]))))*(((\x20|\x09)*(\x0d\x0a))?(\x20|\x09)+)?(\x22)))@((([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|\d|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.)+(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])|(([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])([a-z]|\d|-|\.|_|~|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])*([a-z]|[\u00A0-\uD7FF\uF900-\uFDCF\uFDF0-\uFFEF])))\.?$/i;
|
if(!filter.test(val)) {return [false,nm+": "+msg.email,""];}
|
}
|
}
|
if(edtrul.integer === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
if(isNaN(val)) { return [false,nm+": "+msg.integer,""]; }
|
if ((val % 1 !== 0) || (val.indexOf('.') !== -1)) { return [false,nm+": "+msg.integer,""];}
|
}
|
}
|
if(edtrul.date === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
if(cm[valref].formatoptions && cm[valref].formatoptions.newformat) {
|
dft = cm[valref].formatoptions.newformat;
|
fmtdate = $.jgrid.getRegional(g, 'formatter.date.masks');
|
if(fmtdate && fmtdate.hasOwnProperty(dft) ) {
|
dft = fmtdate[dft];
|
}
|
} else {
|
dft = cm[valref].datefmt || "Y-m-d";
|
}
|
if(!$.jgrid.checkDate (dft, val)) { return [false,nm+": "+msg.date+" - "+dft,""]; }
|
}
|
}
|
if(edtrul.time === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
if(!$.jgrid.checkTime (val)) { return [false,nm+": "+msg.date+" - hh:mm (am/pm)",""]; }
|
}
|
}
|
if(edtrul.url === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
filter = /^(((https?)|(ftp)):\/\/([\-\w]+\.)+\w{2,3}(\/[%\-\w]+(\.\w{2,})?)*(([\w\-\.\?\\\/+@&#;`~=%!]*)(\.\w{2,})?)*\/?)/i;
|
if(!filter.test(val)) {return [false,nm+": "+msg.url,""];}
|
}
|
}
|
if(edtrul.custom === true) {
|
if( !(rqfield === false && $.jgrid.isEmpty(val)) ) {
|
if($.isFunction(edtrul.custom_func)) {
|
var ret = edtrul.custom_func.call(g,val,nm,valref);
|
return $.isArray(ret) ? ret : [false,msg.customarray,""];
|
}
|
return [false,msg.customfcheck,""];
|
}
|
}
|
}
|
return [true,"",""];
|
}
|
});
|
//module end
|
}));
|