/** * Functions for ajax boxes. * * :organization: Logilab * :copyright: 2010 LOGILAB S.A. (Paris, FRANCE), all rights reserved. * :contact: http://www.logilab.fr/ -- mailto:contact@logilab.fr * */functionajaxBoxValidateSelectorInput(boxid,eid,separator,fname,msg){varholderid=cw.utils.domid(boxid)+eid+'Holder';varvalue=$('#'+holderid+'Input').val();if(separator){value=$.map(value.split(separator),jQuery.trim);}vard=loadRemote('json',ajaxFuncArgs(fname,null,eid,value));d.addCallback(function(){$('#'+holderid).empty();varformparams=ajaxFuncArgs('render',null,'boxes',boxid,eid);$('#'+cw.utils.domid(boxid)+eid).loadxhtml('json',formparams);if(msg){document.location.hash='#header';updateMessage(msg);}});}functionajaxBoxRemoveLinkedEntity(boxid,eid,relatedeid,delfname,msg){vard=loadRemote('json',ajaxFuncArgs(delfname,null,eid,relatedeid));d.addCallback(function(){varformparams=ajaxFuncArgs('render',null,'boxes',boxid,eid);$('#'+cw.utils.domid(boxid)+eid).loadxhtml('json',formparams);if(msg){document.location.hash='#header';updateMessage(msg);}});}functionajaxBoxShowSelector(boxid,eid,unrelfname,addfname,msg,oklabel,cancellabel,separator){varholderid=cw.utils.domid(boxid)+eid+'Holder';varholder=$('#'+holderid);if(holder.children().length){holder.empty();}else{varinputid=holderid+'Input';vardeferred=loadRemote('json',ajaxFuncArgs(unrelfname,null,eid));deferred.addCallback(function(unrelated){varinput=INPUT({'type':'text','id':inputid,'size':20});holder.append(input).show();$input=$(input);$input.keypress(function(event){if(event.keyCode==KEYS.KEY_ENTER){// XXX not very user friendly: we should test that the suggestions// aren't visible anymoreajaxBoxValidateSelectorInput(boxid,eid,separator,addfname,msg);}});varbuttons=DIV({'class':"sgformbuttons"},A({'href':"javascript: noop();",'onclick':cw.utils.strFuncCall('ajaxBoxValidateSelectorInput',boxid,eid,separator,addfname,msg)},oklabel),' / ',A({'href':"javascript: noop();",'onclick':'$("#'+holderid+'").empty()'},cancellabel));holder.append(buttons);$input.autocomplete(unrelated,{multiple:separator,max:15});$input.focus();});}}