2 * jqGrid common function
\r
3 * Tony Tomov tony@trirand.com
\r
4 * http://trirand.com/blog/
\r
5 * Dual licensed under the MIT and GPL licenses:
\r
6 * http://www.opensource.org/licenses/mit-license.php
\r
7 * http://www.gnu.org/licenses/gpl.html
\r
10 var showModal = function(h) {
\r
13 var closeModal = function(h) {
\r
15 if(h.o) { h.o.remove(); }
\r
17 function createModal(aIDs, content, p, insertSelector, posSelector, appendsel) {
\r
18 var clicon = p.imgpath ? p.imgpath+p.closeicon : p.closeicon;
\r
19 var mw = document.createElement('div');
\r
20 jQuery(mw).addClass("modalwin").attr("id",aIDs.themodal);
\r
21 var mh = jQuery('<div id="'+aIDs.modalhead+'"><table width="100%"><tbody><tr><td class="modaltext">'+p.caption+'</td> <td align="right"><a href="javascript:void(0);" class="jqmClose">'+(clicon!=''?'<img src="' + clicon + '" border="0"/>':'X') + '</a></td></tr></tbody></table> </div>').addClass("modalhead");
\r
22 var mc = document.createElement('div');
\r
23 jQuery(mc).addClass("modalcontent").attr("id",aIDs.modalcontent);
\r
24 jQuery(mc).append(content);
\r
26 var loading = document.createElement("div");
\r
27 jQuery(loading).addClass("loading").html(p.processData||"");
\r
28 jQuery(mw).prepend(loading);
\r
29 jQuery(mw).prepend(mh);
\r
30 jQuery(mw).addClass("jqmWindow");
\r
32 jQuery(mw).append("<img class='jqResize' src='"+p.imgpath+"resize.gif'/>");
\r
34 if(appendsel===true) { jQuery('body').append(mw); } //append as first child in body -for alert dialog
\r
35 else { jQuery(mw).insertBefore(insertSelector); }
\r
36 if(p.left ==0 && p.top==0) {
\r
38 pos = findPos(posSelector) ;
\r
39 p.left = pos[0] + 4;
\r
42 if (p.width == 0 || !p.width) {p.width = 300;}
\r
43 if(p.height==0 || !p.width) {p.height =200;}
\r
44 if(!p.zIndex) {p.zIndex = 950;}
\r
45 jQuery(mw).css({top: p.top+"px",left: p.left+"px",width: p.width+"px",height: p.height+"px", zIndex:p.zIndex});
\r
49 function viewModal(selector,o){
\r
58 jQuery(selector).jqm(o).jqmShow();
\r
61 function DnRModal(modwin,handler){
\r
62 jQuery(handler).css('cursor','move');
\r
63 jQuery(modwin).jqDrag(handler).jqResize(".jqResize");
\r
67 function info_dialog(caption, content,c_b, pathimg) {
\r
68 var cnt = "<div id='info_id'>";
\r
69 cnt += "<div align='center'><br />"+content+"<br /><br />";
\r
70 cnt += "<input type='button' size='10' id='closedialog' class='jqmClose EditButton' value='"+c_b+"' />";
\r
71 cnt += "</div></div>";
\r
73 themodal:'info_dialog',
\r
74 modalhead:'info_head',
\r
75 modalcontent:'info_content'},
\r
78 height:120,drag: false,
\r
79 caption:"<b>"+caption+"</b>",
\r
81 closeicon: 'ico-close.gif',
\r
86 viewModal("#info_dialog",{
\r
87 onShow: function(h) {
\r
90 onHide: function(h) {
\r
91 h.w.hide().remove();
\r
92 if(h.o) { h.o.remove(); }
\r
98 function findPos(obj) {
\r
99 var curleft = curtop = 0;
\r
100 if (obj.offsetParent) {
\r
102 curleft += obj.offsetLeft;
\r
103 curtop += obj.offsetTop;
\r
104 } while (obj = obj.offsetParent);
\r
105 //do not change obj == obj.offsetParent
\r
107 return [curleft,curtop];
\r
109 function isArray(obj) {
\r
110 if (obj.constructor.toString().indexOf("Array") == -1) {
\r
117 function createEl(eltype,options,vl,elm) {
\r
122 elem = document.createElement("textarea");
\r
123 jQuery(elem).attr(options);
\r
124 jQuery(elem).html(vl);
\r
126 case "checkbox" : //what code for simple checkbox
\r
127 elem = document.createElement("input");
\r
128 elem.type = "checkbox";
\r
129 jQuery(elem).attr({id:options.id,name:options.name});
\r
130 if( !options.value) {
\r
131 if(vl.toLowerCase() =='on') {
\r
133 elem.defaultChecked=true;
\r
138 jQuery(elem).attr("offval","off");
\r
140 var cbval = options.value.split(":");
\r
141 if(vl == cbval[0]) {
\r
143 elem.defaultChecked=true;
\r
145 elem.value = cbval[0];
\r
146 jQuery(elem).attr("offval",cbval[1]);
\r
150 var so = options.value.split(";"),sv, ov;
\r
151 elem = document.createElement("select");
\r
152 var msl = options.multiple === true ? true : false;
\r
153 jQuery(elem).attr({id:options.id,name:options.name,size:Math.min(options.size,so.length), multiple:msl });
\r
154 for(var i=0; i<so.length;i++){
\r
155 sv = so[i].split(":");
\r
156 ov = document.createElement("option");
\r
157 ov.value = sv[0]; ov.innerHTML = sv[1];
\r
158 if (!msl && sv[1]==vl) ov.selected ="selected";
\r
159 if (msl && jQuery.inArray(sv[1],vl.split(","))>-1) ov.selected ="selected";
\r
160 elem.appendChild(ov);
\r
164 elem = document.createElement("input");
\r
165 elem.type = "text";
\r
167 if(!options.size && elm) {
\r
168 jQuery(elem).css("width",jQuery(elm).width()-4);
\r
170 jQuery(elem).attr(options);
\r
173 elem = document.createElement("input");
\r
174 elem.type = "password";
\r
176 if(!options.size) { jQuery(elem).css("width",jQuery(elm).width()-4); }
\r
177 jQuery(elem).attr(options);
\r
180 elem = document.createElement("input");
\r
181 elem.type = "image";
\r
182 jQuery(elem).attr(options);
\r
187 function checkValues(val, valref,g) {
\r
189 var edtrul = g.p.colModel[valref].editrules;
\r
192 if(edtrul.required == true) {
\r
193 if( val.match(/^s+$/) || val == "" ) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.required,""];
\r
195 if(edtrul.number == true) {
\r
196 if(isNaN(val)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.number,""];
\r
198 if(edtrul.minValue && !isNaN(edtrul.minValue)) {
\r
199 if (parseFloat(val) < parseFloat(edtrul.minValue) ) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.minValue+" "+edtrul.minValue,""];
\r
201 if(edtrul.maxValue && !isNaN(edtrul.maxValue)) {
\r
202 if (parseFloat(val) > parseFloat(edtrul.maxValue) ) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.maxValue+" "+edtrul.maxValue,""];
\r
204 if(edtrul.email == true) {
\r
205 // taken from jquery Validate plugin
\r
206 var 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;
\r
207 if(!filter.test(val)) {return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.email,""];}
\r
209 if(edtrul.integer == true) {
\r
210 if(isNaN(val)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.integer,""];
\r
211 if ((val < 0) || (val % 1 != 0) || (val.indexOf('.') != -1)) return [false,g.p.colNames[valref]+": "+jQuery.jgrid.edit.msg.integer,""];
\r
214 return [true,"",""];
\r