Last active
January 7, 2019 19:47
-
-
Save braathwaate/94fdbf7dfad04c1f4a1768d745c837db to your computer and use it in GitHub Desktop.
fixes to FA autocomplete by anoop
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
+++ b/core/includes/ui/ui_view.inc | |
@@ -923,24 +917,13 @@ function get_js_select_combo_item() { | |
} | |
} | |
} else { | |
+ var element = doc.getElementsByName(client_id); | |
+ if (element[0] != null) { | |
+ element[0].value=value; | |
+ var sname = '_'+client_id+'_update'; | |
+ var update = doc.getElementsByName(sname)[0]; | |
+ if(update) { | |
+ window.opener.JsHttpRequest.request(update); | |
+ } else { | |
+ var element = doc.getElementsByName(client_id+'mselect'); | |
+ if (element[0] != null) { | |
+ element[0].setvalue(value); | |
+ // element[0].value=value; | |
+ } | |
+ } | |
+ } else { | |
+ | |
var stock_element = doc.getElementsByName('stock_id'); | |
if( stock_element.length > 0) { | |
stock_element.value = value; | |
var stock_id = doc.getElementById('_stock_id_edit'); | |
stock_id.value=value; | |
stock_id.onblur(); | |
} | |
} | |
window.close(); | |
}"; | |
+++ b/core/js/inserts.js | |
@@ -290,6 +290,19 @@ function mbselect(elm) | |
} | |
} | |
} | |
+ typer.setvalue = function(id) { | |
+ for (var mm = 0; mm < list.length; mm++) { | |
+ if (id == list[mm].id) { | |
+ selectedoption = list[mm]; | |
+ selectedvalue = id; | |
+ list[mm].className = ' aselected'; | |
+ list[mm].scrollIntoView(false); | |
+ } | |
+ } | |
+ this.value = decodeHtml(selectedoption.innerHTML); | |
+ this.select(); | |
+ this.focus(); | |
+ } |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
@@ -283,7 +283,7 @@ function setFocus(name, byId) { | |
} | |
} | |
if (name) | |
- if(byId || !(el = document.getElementsByName(name)[0])) | |
+ if(byId || !((el = document.getElementsByName(name+'mselect')[0]) || (el = document.getElementsByName(name)[0]))) | |
el = document.getElementById(name); | |
} | |
if (el != null && el.focus) { |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/********************************************************************** | |
Copyright (C) FrontAccounting, LLC. | |
Released under the terms of the GNU General Public License, GPL, | |
as published by the Free Software Foundation, either version 3 | |
of the License, or (at your option) any later version. | |
This program is distributed in the hope that it will be useful, | |
but WITHOUT ANY WARRANTY; without even the implied warranty of | |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. | |
See the License here <http://www.gnu.org/licenses/gpl-3.0.html>. | |
***********************************************************************/ | |
function set_mark(img) { | |
var box = document.getElementById('ajaxmark'); | |
if(box) { | |
if(img) box.src = user.theme+'images/'+ img; | |
box.style.visibility = img ? 'visible' : 'hidden'; | |
} | |
} | |
function disp_msg(msg, cl) { | |
var box = document.getElementById('msgbox'); | |
box.innerHTML= "<div class='"+(cl || 'err_msg')+"'>"+ msg+'</div>'; | |
// box.style.display = msg=='' ? 'none':'block'; | |
if (msg!='') window.scrollTo(0,element_pos(box).y-10); | |
} | |
// | |
// JsHttpRequest class extensions. | |
// | |
// Main functions for asynchronus form submitions | |
// Trigger is the source of request and can have following forms: | |
// - input object - all form values are also submited | |
// - arbitrary string - POST var trigger with value 1 is added to request; | |
// if form parameter exists also form values are submited, otherwise | |
// request is directed to current location | |
// | |
JsHttpRequest.request= function(trigger, form, tout) { | |
// if (trigger.type=='submit' && !validate(trigger)) return false; | |
tout = tout || 10000; // default timeout value | |
document.getElementById('msgbox').innerHTML=''; | |
set_mark(tout>10000 ? 'progressbar.gif' : 'ajax-loader.gif'); | |
JsHttpRequest._request(trigger, form, tout, 0); | |
}; | |
JsHttpRequest._request = function(trigger, form, tout, retry) { | |
if (trigger.tagName=='A') { | |
var content = {}; | |
var upload = 0; | |
var url = trigger.href; | |
if (trigger.id) content[trigger.id] = 1; | |
} else { | |
var submitObj = typeof(trigger) == "string" ? | |
document.getElementsByName(trigger)[0] : trigger; | |
form = form || (submitObj && submitObj.form); | |
var upload = form && form.enctype=='multipart/form-data'; | |
var url = form ? form.getAttribute('action') : | |
window.location.toString(); | |
var content = this.formInputs(trigger, form, upload); | |
if (!form) url = url.substring(0, url.indexOf('?')); | |
if (!submitObj) { | |
content[trigger] = 1; | |
} | |
} | |
// this is to avoid caching problems | |
content['_random'] = Math.random()*1234567; | |
var tcheck = setTimeout( | |
function() { | |
for(var id in JsHttpRequest.PENDING) { | |
var call = JsHttpRequest.PENDING[id]; | |
if (call != false) { | |
if (call._ldObj.xr) // needed for gecko | |
call._ldObj.xr.onreadystatechange = function(){}; | |
call.abort(); // why this doesn't kill request in firebug? | |
// call._ldObj.xr.abort(); | |
delete JsHttpRequest.PENDING[id]; | |
} | |
} | |
set_mark(retry ? 'ajax-loader2.gif':'warning.png' ); | |
if(retry) | |
JsHttpRequest._request(trigger, form, tout, retry-1); | |
}, tout ); | |
JsHttpRequest.query( | |
(upload ? "form." : "")+"POST "+url, // force form loader | |
content, | |
// Function is called when an answer arrives. | |
function(result, errors) { | |
// Write the answer. | |
var newwin = 0; | |
if (result) { | |
for(var i in result ) { | |
atom = result[i]; | |
cmd = atom['n']; | |
property = atom['p']; | |
type = atom['c']; | |
id = atom['t']; | |
data = atom['data']; | |
// debug(cmd+':'+property+':'+type+':'+id); | |
// seek element by id if there is no elemnt with given name | |
objElement = document.getElementsByName(id)[0] || document.getElementById(id); | |
if(cmd=='as') { | |
eval("objElement.setAttribute('"+property+"','"+data+"');"); | |
} else if(cmd=='up') { | |
// if(!objElement) alert('No element "'+id+'"'); | |
if(objElement) { | |
if (objElement.tagName == 'INPUT' || objElement.tagName == 'TEXTAREA') | |
objElement.value = data; | |
else | |
objElement.innerHTML = data; // selector, div, span etc | |
} | |
} else if(cmd=='di') { // disable/enable element | |
objElement.disabled = data; | |
} else if(cmd=='fc') { // set focus | |
_focus = data; | |
} else if(cmd=='js') { // evaluate js code | |
__isGecko ? eval(data) : setTimeout(function(){eval(data);}, 200); // timeout required by IE7/8 | |
} else if(cmd=='rd') { // client-side redirection | |
window.location = data; | |
} else if(cmd=='pu') { // pop-up | |
newwin = 1; | |
window.open(data,'REP_WINDOW','toolbar=no,scrollbars=yes,resizable=yes,menubar=no'); | |
} else { | |
errors = errors+'<br>Unknown ajax function: '+cmd; | |
} | |
} | |
if(tcheck) | |
JsHttpRequest.clearTimeout(tcheck); | |
// Write errors to the debug div. | |
document.getElementById('msgbox').innerHTML = errors; | |
set_mark(); | |
Behaviour.apply(); | |
if (errors.length>0) | |
window.scrollTo(0,0); | |
//document.getElementById('msgbox').scrollIntoView(true); | |
// Restore focus if we've just lost focus because of DOM element refresh | |
if(!newwin) { | |
setFocus(); | |
} | |
} | |
}, | |
false // do not disable caching | |
); | |
}; | |
// collect all form input values plus inp trigger value | |
JsHttpRequest.formInputs = function(inp, objForm, upload) | |
{ | |
var submitObj = inp; | |
var q = {}; | |
if (typeof(inp) == "string") | |
submitObj = document.getElementsByName(inp)[0]||inp; | |
objForm = objForm || (submitObj && submitObj.form); | |
if (objForm) | |
{ | |
var formElements = objForm.elements; | |
for( var i=0; i < formElements.length; i++) | |
{ | |
var el = formElements[i]; | |
var name = el.name; | |
if (!el.name) continue; | |
if(upload) { // for form containing file inputs collect all | |
// form elements and add value of trigger submit button | |
// (internally form is submitted via form.submit() not button click()) | |
if (submitObj.type=='submit' && el==submitObj) | |
{ | |
q[name] = el.value; | |
continue; | |
} | |
} | |
if (el.type ) | |
if( | |
(el.type == 'radio' && el.checked == false) | |
|| (el.type == 'submit' && (!submitObj || el.name!=submitObj.name))) | |
continue; | |
if (el.disabled && el.disabled == true) | |
continue; | |
if (name) | |
{ | |
if(el.type=='select-multiple') | |
{ | |
name = name.substr(0,name.length-2); | |
q[name] = new Array; | |
for (var j = 0; j < el.length; j++) | |
{ | |
s = name.substring(0, name.length-2); | |
if (el.options[j].selected == true) | |
q[name].push(el.options[j].value); | |
} | |
} | |
else | |
if (el.type=='file') | |
q[name] = el; | |
else | |
{ | |
if (el.type == 'checkbox') { | |
q[name] = (el.checked == true); | |
} else { | |
q[name] = el.value; | |
} | |
} | |
} | |
} | |
} | |
return q; | |
}; | |
// | |
// User price formatting | |
// | |
function price_format(post, num, dec, label, color) { | |
var el = label ? document.getElementById(post) : document.getElementsByName(post)[0]; | |
//num = num.toString().replace(/\$|\,/g,''); | |
if(isNaN(num)) | |
num = "0"; | |
sign = (num == (num = Math.abs(num))); | |
var max = dec=='max'; | |
if(max) dec = num==0 ? 2 : 15 - Math.floor(Math.log(Math.abs(num))); | |
if(dec<0) dec = 2; | |
decsize = Math.pow(10, dec); | |
num = Math.floor(num*decsize+0.50000000001); | |
cents = num%decsize; | |
num = Math.floor(num/decsize).toString(); | |
for( i=cents.toString().length; i<dec; i++){ | |
cents = "0"+cents; | |
} | |
if (max) // strip trailing 0 | |
cents = cents.toString().replace(/0+$/,''); | |
for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++) | |
num = num.substring(0,num.length-(4*i+3))+user.ts+ | |
num.substring(num.length-(4*i+3)); | |
num = ((sign)?'':'-') + num; | |
if(dec!=0 && (!max || cents!=0)) | |
num = num + user.ds + cents; | |
if(label) | |
el.innerHTML = num; | |
else | |
el.value = num; | |
if(color) { | |
el.style.color = (sign) ? '' : '#FF0000'; | |
} | |
} | |
function get_amount(doc, label) { | |
if(label) | |
var val = document.getElementById(doc).innerHTML; | |
else | |
var val = typeof(doc) == "string" ? | |
document.getElementsByName(doc)[0].value : doc.value; | |
val = val.replace(new RegExp('\\'+user.ts, 'g'),''); | |
val = +val.replace(new RegExp('\\'+user.ds, 'g'),'.'); | |
return isNaN(val) ? 0 : val; | |
} | |
function goBack(deep) { | |
if (window.opener) | |
window.close(); | |
else | |
window.history.go(deep || -1); | |
} | |
function setFocus(name, byId) { | |
var el = null; | |
if(typeof(name)=='object') | |
el = name; | |
else { | |
if(!name) { // page load/ajax update | |
if (_focus) | |
name = _focus; // last focus set in onfocus handlers | |
else | |
if (document.forms.length) { // no current focus (first page display) - set it from from last form | |
var cur = document.getElementsByName('_focus')[document.forms.length-1]; | |
if(cur) name = cur.value; | |
} | |
} | |
if (name) | |
if(byId || !((el = document.getElementsByName(name+'mselect')[0]) || (el = document.getElementsByName(name)[0]))) | |
el = document.getElementById(name); | |
} | |
if (el != null && el.focus) { | |
// The timeout is needed to prevent unpredictable behaviour on IE & Gecko. | |
// Using tmp var prevents crash on IE5 | |
var tmp = function() {el.focus(); if (el.select) el.select();}; | |
setTimeout(tmp, 0); | |
} | |
} | |
/* | |
Find closest element in neighbourhood and set focus. | |
dir is arrow keycode. | |
*/ | |
function move_focus(dir, e0, neighbours) | |
{ | |
var p0 = element_pos(e0); | |
var t; | |
var l=0; | |
for(var i=0; i<neighbours.length; i++) { | |
var e = neighbours[i]; | |
var p = element_pos(e); | |
if (p!=null && (e.className=='menu_option' || e.className=='printlink' | |
|| e.className == 'repclass_link' || e.className == 'repopts_link')) { | |
if (((dir==40) && (p.y>p0.y)) || (dir==38 && (p.y<p0.y)) | |
|| ((dir==37) && (p.x<p0.x)) || ((dir==39 && (p.x>p0.x)))) { | |
var l1 = (p.y-p0.y)*(p.y-p0.y)+(p.x-p0.x)*(p.x-p0.x); | |
if ((l1<l) || (l==0)) { | |
l = l1; t = e; | |
} | |
} | |
} | |
} | |
if (t) | |
setFocus(t); | |
return t; | |
} | |
var __isGecko = navigator.userAgent.match(/gecko/i); // i.e. Gecko or KHTML, like Gecko ;) | |
//returns the absolute position of some element within document | |
function element_pos(e) { | |
var res = new Object(); | |
res.x = 0; res.y = 0; | |
if (e !== null) { | |
res.x = e.offsetLeft; | |
res.y = e.offsetTop; | |
var offsetParent = e.offsetParent; | |
var parentNode = e.parentNode; | |
while (offsetParent !== null && offsetParent.style.display != 'none') { | |
res.x += offsetParent.offsetLeft; | |
res.y += offsetParent.offsetTop; | |
// the second case is for IE6/7 in some doctypes | |
if (offsetParent != document.body && offsetParent != document.documentElement) { | |
res.x -= offsetParent.scrollLeft; | |
res.y -= offsetParent.scrollTop; | |
} | |
//next lines are necessary to support FireFox problem with offsetParent | |
if (__isGecko) { | |
while (offsetParent != parentNode && parentNode !== null) { | |
res.x -= parentNode.scrollLeft; | |
res.y -= parentNode.scrollTop; | |
parentNode = parentNode.parentNode; | |
} | |
} | |
parentNode = offsetParent.parentNode; | |
offsetParent = offsetParent.offsetParent; | |
} | |
} | |
// parentNode has style.display set to none | |
if (parentNode != document.documentElement) return null; | |
return res; | |
} | |
function string_contains(haystack, needle) { | |
var words = haystack.split(' '); | |
return words.indexOf(needle) > -1; | |
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/** | |
* ADDED AUTO-COMPLETE SELECT BOX BY ANOOP MB. | |
* http://frontaccounting.com/punbb/viewtopic.php?id=6198 | |
*/ | |
/*<----------MBCODE START------------>*/ | |
function mbselect(elm) | |
{ | |
var mbc = ''; | |
var selectedvalue = null; | |
var selectedoption = null; | |
var selectedoptionkey = null; | |
var dispayitems = 0; | |
var optgropc = 0; | |
var selectedoptionold; | |
var selectedvalueold; | |
var selectedoptionkeyold; | |
var options = elm.getElementsByTagName('option'); | |
if (options.length != 0) { | |
var rep=""; | |
var tit=""; | |
for (var j = 0; j < options.length; j++) { | |
if (options[j].selected) { // check if options is selected | |
selectedvalue = options[j].getAttribute('value'); | |
selectedoption = document.createElement('LI'); | |
selectedoption.className = "aselected"; | |
selectedoption.id = options[j].getAttribute('value'); | |
selectedoption.innerHTML = options[j].text; | |
selectedoptionkey = j; | |
} | |
if(options[j].parentNode.nodeName.toLowerCase() === 'optgroup' && rep!=options[j].parentNode.getAttribute('label')){ | |
var optgroup=options[j].parentNode; | |
var l =optgroup.getAttribute('label'); | |
mbc += '<li id="' + l.toUpperCase() + '" class="abbrs">' + l.toUpperCase() + '</li>'; | |
rep=l; | |
tit=l; | |
dispayitems++; | |
} | |
mbc += '<li title="'+tit+'" class="anoselect" id="' + options[j].getAttribute('value') + '">' + options[j].text + '</li>'; | |
dispayitems++; | |
} | |
} | |
else { | |
mbc +='<li class="abbrs">No Options</li>'; | |
selectedoption = document.createElement('LI'); | |
selectedoption.innerHTML =''; | |
dispayitems++; | |
} | |
var ih=elm.offsetHeight; | |
var iw=elm.offsetWidth; | |
elm.style.display = 'none'; | |
elm.setAttribute("style","display:none"); | |
var wrapper = document.createElement('div'); | |
wrapper.setAttribute("style","display:inline-block;height:"+ih+"px;"); | |
wrapper.style.display = 'inline-block'; | |
wrapper.style.height =ih+"px"; | |
var typer = document.createElement('INPUT'); | |
typer.setAttribute("type","text"); | |
typer.type = 'text'; | |
typer.setAttribute("class","typer"); | |
typer.setAttribute("autocomplete","off"); | |
typer.className = "typer"; | |
typer.setAttribute("name",elm.getAttribute("name")+"mselect"); | |
typer.setAttribute("style","display:inline-block;width:"+iw+"px"); | |
typer.style.display = 'inline-block'; | |
typer.setAttribute("style","width:"+iw+"px"); | |
typer.style.width =iw+"px"; | |
typer.value = decodeHtml(selectedoption.innerHTML); | |
typer.setAttribute("value",typer.value); | |
var hidden = document.createElement('INPUT'); | |
hidden.setAttribute("type","hidden"); | |
hidden.type = 'hidden'; | |
hidden.setAttribute("name",elm.getAttribute("name")); | |
hidden.value = selectedvalue; | |
var totitems=dispayitems; | |
elm.parentNode.insertBefore(wrapper, elm); | |
var arrow = document.createElement('SPAN'); | |
arrow.innerHTML = '\u25BC'; | |
arrow.setAttribute("class","mb"); | |
arrow.className = "mb"; | |
wrapper.appendChild(typer); | |
wrapper.appendChild(arrow); | |
wrapper.appendChild(hidden); | |
elm.parentNode.removeChild(elm); | |
var popup = document.createElement('div'); | |
var list = popup.getElementsByTagName('LI'); | |
typer.select(); | |
function pop(disp, cont) { | |
disp = disp || 'none'; | |
cont = cont || null; | |
var rect = typer.getBoundingClientRect(); | |
var left = rect.left; | |
var top = rect.bottom; | |
var width = typer.offsetWidth-2; | |
popup.className += " popups"; | |
var contentmb = '<div class="lister"><ul class="mselect-rset">'; | |
contentmb += mbc; | |
contentmb += '</ul></div>'; | |
popup.innerHTML = contentmb; | |
if (cont != null) { | |
var opts = []; | |
var ullist = popup.getElementsByTagName('UL')[0]; | |
var hlino = ullist.querySelectorAll('li.abbrs').length; | |
var gid = '#$%#'; | |
var cu=0; | |
var co=0; | |
var ck=0; | |
var vk=0; | |
for (var nn = 0; nn < list.length; nn++) { | |
if (cont.test(list[nn].innerHTML)) { | |
if (list[nn].className == 'abbrs') { | |
opts.push('<li class="abbrs">' + list[nn].innerHTML.replace(cont, "<u>$1</u>") + '</li>'); | |
gid = list[nn].id.toLowerCase(); | |
cu=1; | |
}else{ | |
if(cu!=1 &&ck!=list[nn].title &&hlino!=0){ | |
opts.push('<li class="abbrs">'+list[nn].title.toUpperCase()+'</li>'); | |
ck=list[nn].title; | |
} | |
if(vk!=1) { | |
opts.push('<li class="aselected" id="' + list[nn].id+'">' + list[nn].innerHTML.replace(cont, "<u>$1</u>") + '</li>'); | |
vk=1; | |
selectedoption=list[nn]; | |
selectedoptionkey=nn; | |
selectedvalue=list[nn].id; | |
} | |
else | |
{ | |
opts.push('<li class="anoselect " id="' + list[nn].id+'">' + list[nn].innerHTML.replace(cont, "<u>$1</u>") + '</li>'); | |
} | |
co=1; | |
} | |
} | |
if(gid==list[nn].title.toLowerCase() && co!=1) | |
{ | |
if(vk!=1) { | |
opts.push('<li class="aselected" id="' + list[nn].id+'">'+list[nn].innerHTML+'</li>'); | |
vk=1; | |
selectedoption=list[nn]; | |
selectedoptionkey=nn; | |
selectedvalue=list[nn].id; | |
} | |
else | |
{ | |
opts.push('<li class="anoselect" id="' + list[nn].id+'">'+list[nn].innerHTML+'</li>'); | |
} | |
} | |
} | |
totitems =opts.length; | |
if(opts.length==0){ | |
opts[0]='<li class="abbrs">Nothing Found</li>'; | |
selectedoption=selectedoptionold; | |
selectedoptionkey=selectedoptionkeyold; | |
} | |
//alert(opts.join("")); | |
ullist.innerHTML = ullist.innerHTML.replace(ullist.innerHTML,opts.join("")); | |
} | |
popup.style.position = "fixed"; | |
popup.style.left = left + "px"; | |
popup.style.top = top + "px"; | |
popup.style.width = width + "px"; | |
typer.parentNode.appendChild(popup); | |
popup.style.display = disp; | |
optgropc = 0; | |
list = popup.getElementsByTagName('LI'); | |
function clear() { | |
for (var mm = 0; mm < list.length; mm++) { | |
if (list[mm].className != 'abbrs') { | |
list[mm].className = ' anoselect'; | |
} | |
} | |
} | |
function setlistindex() { | |
clear(); | |
for (var mm = 0; mm < list.length; mm++) { | |
if (list[mm].className != 'abbrs') { | |
if (selectedoption.id == list[mm].id) { | |
list[mm].className = ' aselected'; | |
list[mm].scrollIntoView(false); | |
} | |
} | |
} | |
} | |
selectedoptionold =selectedoption; | |
selectedvalueold =selectedvalue; | |
selectedoptionkeyold =selectedoptionkey; | |
if(list.length>0) { | |
setlistindex(); | |
for (var mm = 0; mm < list.length; mm++) { | |
(function (mm) { | |
if (list[mm].className != 'abbrs') { | |
list[mm].onmousedown = function (event) { | |
typer.value = decodeHtml(this.innerHTML); | |
hidden.value = this.id; | |
selectedoption = this; | |
selectedvalue = this.id; | |
selectedoptionkey = mm; | |
selectedoptionold = selectedoption; | |
selectedvalueold = selectedvalue; | |
selectedoptionkeyold = selectedoptionkey; | |
typer.blur(); | |
popup.style.display = 'none'; | |
//JsHttpRequest.request(hidden); | |
//_update_box(hidden); | |
var sname = '_' + hidden.name + '_update'; | |
var update = document.getElementsByName(sname)[0]; | |
if (update) { | |
JsHttpRequest.request(update); | |
} | |
return false; | |
}; | |
list[mm].onmouseover = function (event) { | |
clear(); | |
optgropc = 0; | |
selectedoption = this; | |
selectedvalue = this.id; | |
selectedoptionkey = mm; | |
this.className = ' aselected'; | |
}; | |
list[mm].onmouseout = function (event) { | |
selectedoption = selectedoptionold; | |
selectedvalue = selectedvalueold; | |
selectedoptionkey = selectedoptionkeyold; | |
optgropc = 0; | |
this.className = ' anoselect'; | |
}; | |
} | |
else { | |
list[mm].onmousedown = function (event) { | |
typer.focus(); | |
optgropc = 1; | |
} | |
} | |
})(mm); | |
} | |
} | |
} | |
typer.onmousedown = function (event) { | |
pop("block"); | |
}; | |
typer.onfocus = function (event) { | |
save_focus(typer); | |
typer.select(); | |
}; | |
window.onresize = function (event) { | |
popcl(); | |
}; | |
typer.onblur = function (event) { | |
if (optgropc != 1) { | |
pop("none"); | |
optgropc = 0; | |
if (typer.value == null || typer.value == '' ||typer.value!=selectedoption.innerHTML) { | |
typer.value = decodeHtml(selectedoption.innerHTML); | |
hidden.value = selectedvalue; | |
} | |
} else { | |
optgropc = 0; | |
this.focus(); | |
} | |
}; | |
typer.onmouseout = function (event) { | |
optgropc = 0; | |
}; | |
arrow.onclick = function(event) { | |
typer.select(); | |
typer.focus(); | |
pop("block"); | |
}; | |
typer.onkeydown = function (event) { | |
event = event || window.event; | |
if (event.which == 40) { | |
if(totitems>0){ | |
var listsel = popup.querySelectorAll('li.aselected'); | |
if(selectedoptionkey>list.length)selectedoptionkey=0; | |
if(list[selectedoptionkey].className=='abbrs')selectedoptionkey++; | |
selectedoptionkey++; | |
if(selectedoptionkey==list.length)selectedoptionkey=0; | |
if(list[selectedoptionkey].className=='abbrs')selectedoptionkey++; | |
listsel[0].className=listsel[0].className.replace('aselected','anoselect'); | |
list[selectedoptionkey].className='aselected'; | |
selectedoption = list[selectedoptionkey]; | |
selectedvalue = list[selectedoptionkey].id; | |
selectedoption.scrollIntoView(false); | |
} | |
event.cancelBubble = true; | |
if (navigator.appName != 'Microsoft Internet Explorer') { | |
event.preventDefault(); | |
event.stopPropagation(); | |
} | |
return false; | |
} | |
if (event.which == 38) { | |
if(totitems>0){ | |
var listsel = popup.querySelectorAll('li.aselected'); | |
if(selectedoptionkey>list.length)selectedoptionkey=0; | |
if(list[selectedoptionkey].className=='abbrs')selectedoptionkey--; | |
selectedoptionkey--; | |
if(list[0].className=='abbrs') | |
{ | |
if(selectedoptionkey<1)selectedoptionkey=list.length-1; | |
}else | |
{ | |
if(selectedoptionkey<0)selectedoptionkey=list.length-1; | |
} | |
if(list[selectedoptionkey].className=='abbrs')selectedoptionkey--; | |
listsel[0].className=listsel[0].className.replace('aselected','anoselect'); | |
list[selectedoptionkey].className='aselected'; | |
selectedoption = list[selectedoptionkey]; | |
selectedvalue = list[selectedoptionkey].id; | |
selectedoption.scrollIntoView(false); | |
} | |
event.cancelBubble = true; | |
if (navigator.appName != 'Microsoft Internet Explorer') { | |
event.preventDefault(); | |
event.stopPropagation(); | |
} | |
return false; | |
} | |
} | |
typer.onkeypress = function (event) { | |
event = event || window.event; | |
if (event.which == 13) { | |
selectedoptionold =selectedoption; | |
selectedvalueold =selectedvalue; | |
selectedoptionkeyold =selectedoptionkey; | |
typer.value = decodeHtml(selectedoption.innerHTML); | |
hidden.value = selectedvalue; | |
typer.blur(); | |
popcl(); | |
//JsHttpRequest.request(hidden ); | |
//_update_box(hidden); | |
var sname = '_'+hidden.name+'_update'; | |
var update = document.getElementsByName(sname)[0]; | |
if(update) { | |
JsHttpRequest.request(update); | |
} | |
return false; | |
} | |
}; | |
typer.onkeyup=function(event){ | |
if(event.which!=13&&event.which!=16&&event.which!=17&&event.which!=18&&event.which!=19&&event.which!=20 | |
&&event.which!=27&&event.which!=35&&event.which!=36&&event.which!=37&&event.which!=38 | |
&&event.which!=39&&event.which!=40&&event.which!=91&&event.which!=93&&event.which!=224 | |
&&event.which!=16&&event.which!=9){ | |
if (typer.value != '' && typer.value != null) { | |
var tes = new RegExp('(' + escapeRegExp(typer.value) + ')', "i"); | |
pop('block', tes); | |
} | |
else { | |
pop('block'); | |
} | |
}else{ | |
return false; | |
} | |
} | |
var myEfficientFn = debounce(function () { | |
var rect = typer.getBoundingClientRect(); | |
var left = rect.left; | |
var top = rect.bottom; | |
popup.style.left = left + "px"; | |
popup.style.top = top + "px"; | |
}, 5); | |
window.addEventListener('scroll', myEfficientFn); | |
} | |
function debounce(func, wait, immediate) { | |
var timeout; | |
return function() { | |
var context = this, args = arguments; | |
var later = function() { | |
timeout = null; | |
if (!immediate) func.apply(context, args); | |
}; | |
var callNow = immediate && !timeout; | |
clearTimeout(timeout); | |
timeout = setTimeout(later, wait); | |
if (callNow) func.apply(context, args); | |
}; | |
}; | |
function popcl() { | |
// All the elements with class close or fade. | |
var els = document.querySelectorAll('.popups'); | |
var ins = document.querySelectorAll('input.typer'); | |
// Loop through the list. | |
for (var i = 0; i < els.length; i++) { | |
// Hide them. | |
els[i].style.display = 'none'; | |
} | |
for (var i = 0; i < ins.length; i++) { | |
// Blur them. | |
ins[i].blur(); | |
} | |
} | |
function escapeRegExp(str) { | |
return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&"); | |
} | |
function decodeHtml(html) { | |
var txt = document.createElement("textarea"); | |
txt.innerHTML = html; | |
return txt.value; | |
} | |
/*<----------MBCODE END------------>*/ |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment