All Downloads are FREE. Search and download functionalities are using the official Maven repository.

js.autocomplete.js Maven / Gradle / Ivy

There is a newer version: 2.0.3
Show newest version
jQuery.namespace("jira.widget.autocomplete");jira.widget.autocomplete=function(){var inFocus;var delay=function(callback,l){if(delay.t){clearTimeout(delay.t);delay.t=undefined}delay.t=setTimeout(callback,l*1000)};var INVALID_KEYS={9:true,13:true,14:true,25:true,27:true,38:true,40:true,224:true};return{dispatcher:function(){},getSavedResponse:function(){},saveResponse:function(){},renderSuggestions:function(){},disable:function(){this.disabled=true},enable:function(){this.disabled=false},set:function(options){for(var name in options){if(options.hasOwnProperty(name)){this[name]=options[name]}}},completeField:function(value){if(value){this.field.val(value).focus()}},textToSuggestionCursorPosition:function(){return this.field.val()},addSuggestionControls:function(suggestionNodes){var that=this;var evaluateIndex=function(idx,max){var minBoundary=(that.autoSelectFirst===false)?-1:0;if(that.allowArrowCarousel){if(idx>max){return minBoundary}else{if(idxmax){return max}else{if(idx-1){that.suggestionNodes[that.selectedIndex][0].removeClass("active")}that.selectedIndex=evaluateIndex(idx,that.suggestionNodes.length-1);if(that.selectedIndex>-1){that.suggestionNodes[that.selectedIndex][0].addClass("active")}};var evaluateIfActive=function(){return that.suggestionNodes&&that.suggestionNodes[that.selectedIndex]&&that.suggestionNodes[that.selectedIndex][0].hasClass("active")};var keyPressHandler=function(e){if(that.responseContainer.is(":visible")){if(e.keyCode===13){if(evaluateIfActive()&&!that.pendingRequest){that.completeField(that.suggestionNodes[that.selectedIndex][1])}e.preventDefault()}}};var keyboardNavigateHandler=function(e){if(that.responseContainer.is(":visible")){if(that.field[0]!==document.activeElement){that.field.focus()}if(e.keyCode===40){setActive(that.selectedIndex+1);if(that.selectedIndex>=0){var containerHeight=that.responseContainer.height();var bottom=that.suggestionNodes[that.selectedIndex][0].position().top+that.suggestionNodes[that.selectedIndex][0].outerHeight();if(bottom-containerHeight>0){that.responseContainer.scrollTop(that.responseContainer.scrollTop()+bottom-containerHeight+2)}}else{that.responseContainer.scrollTop(0)}e.preventDefault()}else{if(e.keyCode===38){setActive(that.selectedIndex-1);if(that.selectedIndex>=0){var top=that.suggestionNodes[that.selectedIndex][0].position().top;if(top<0){that.responseContainer.scrollTop(that.responseContainer.scrollTop()+top-2)}}e.preventDefault()}else{if(e.keyCode===9){if(evaluateIfActive()){that.completeField(that.suggestionNodes[that.selectedIndex][1]);e.preventDefault()}else{that.dropdownController.hideDropdown()}}}}}};if(suggestionNodes.length){this.selectedIndex=0;this.suggestionNodes=suggestionNodes;for(var i=0;i=this.minQueryLength){if(!(e.keyCode in INVALID_KEYS)||(this.responseContainer&&!this.responseContainer.is(":visible")&&(e.keyCode==38||e.keyCode==40))){if(isIe8){delay(jQuery.proxy(callback,this),0.2)}else{callback.call(this)}}}return e}})(),addMultiSelectAdvice:function(delim){var that=this;var alertUserValueAlreadyExists=function(val){if(!alertUserValueAlreadyExists.isAlerting){alertUserValueAlreadyExists.isAlerting=true;var userAlert=jQuery(document.createElement("div")).css({"float":"left",display:"none"}).addClass("warningBox").html("Oops! You have already entered the value "+val+"").appendTo(that.field.parent()).show("fast",function(){that.delay(function(){userAlert.hide("fast",function(){userAlert.remove();alertUserValueAlreadyExists.isAlerting=false})},4)})}};jQuery.aop.before({target:this,method:"dispatcher"},function(innvocation){var val=this.field.val();innvocation[0]=jQuery.trim(val.slice(val.lastIndexOf(delim)+1));return innvocation});jQuery.aop.before({target:this,method:"completeField"},function(args){var valueToAdd=args[0],untrimmedVals=this.field.val().split(delim);var trimmedVals=jQuery(untrimmedVals).map(function(){return jQuery.trim(this)}).get();if(!this.allowDuplicates&&new RegExp("(?:^|[\\s"+delim+"])"+valueToAdd+"\\s*"+delim).test(this.field.val())){alertUserValueAlreadyExists(valueToAdd);trimmedVals[trimmedVals.length-1]=""}else{trimmedVals[trimmedVals.length-1]=valueToAdd;trimmedVals[trimmedVals.length]=""}args[0]=trimmedVals.join(delim.replace(/([^\s]$)/,"$1 "));return args})},addDropdownAdvice:function(){var that=this;jQuery.aop.after({target:this,method:"buildResponseContainer"},function(args){this.dropdownController=jira.widget.dropdown.Autocomplete({target:this,method:"renderSuggestions"},this.responseContainer);if(AJS.$.browser.msie){jQuery.aop.before({target:this.dropdownController,method:"displayDropdown"},function(){that.field.parent().addClass("atlassian-autocomplete")});jQuery.aop.after({target:this.dropdownController,method:"hideDropdown"},function(){that.field.parent().removeClass("atlassian-autocomplete")})}return args});jQuery.aop.after({target:this,method:"renderSuggestions"},function(args){if(args&&args.length>0){this.dropdownController.displayDropdown()}else{this.dropdownController.hideDropdown()}return args});jQuery.aop.after({target:this,method:"completeField"},function(args){this.dropdownController.hideDropdown();return args});jQuery.aop.after({target:this,method:"keyUpHandler"},function(e){if((!(this.field.val().length>=this.minQueryLength)||e.keyCode===27)&&this.dropdownController&&this.dropdownController.displayed){this.dropdownController.hideDropdown();if(e.keyCode===27){e.stopPropagation()}}return e})},init:function(options){var that=this;this.set(options);this.field=this.field||jQuery("#"+this.fieldID);this.field.attr("autocomplete","off").keyup(function(e){if(!that.disabled){that.keyUpHandler(e)}}).keydown(function(e){var ESC_KEY=27;if(e.keyCode===ESC_KEY&&that.responseContainer&&that.responseContainer.is(":visible")){e.preventDefault()}}).click(function(e){if(inFocus===that){e.stopPropagation()}});this.addDropdownAdvice();if(options.delimChar){this.addMultiSelectAdvice(options.delimChar)}}}}();jira.widget.autocomplete.REST=function(){var that=begetObject(jira.widget.autocomplete);that.dispatcher=function(reqFieldVal){var that=this;if(reqFieldVal.length0){resultsContainer=jQuery("
    ").appendTo(this.responseContainer);jQuery(response.users).each(function(){suggestionNodes.push([jQuery("
  • ").html(this.html).appendTo(resultsContainer),this.name])})}if(response.footer){this.responseContainer.append(jQuery("
    ").addClass("yui-ac-ft").html(response.footer).css("display","block"))}if(suggestionNodes.length>0){that.addSuggestionControls(suggestionNodes);AJS.$(".atlassian-autocomplete div.yad, .atlassian-autocomplete .labels li").textOverflow("…",true)}return suggestionNodes};options.minQueryLength=2;options.queryDelay=0.25;that.init(options);return that};jira.widget.autocomplete.Issues=function(options){var that=begetObject(jira.widget.autocomplete.REST);that.getAjaxParams=function(){return{url:contextPath+"/rest/api/1.0/issues/picker",data:options.ajaxData,dataType:"json",type:"GET"}};that.renderSuggestions=function(response){var resultsContainer,suggestionNodes=[];this.clearResponseContainer();if(response&&response.sections&&response.sections.length>0){resultsContainer=AJS.$("
      ").appendTo(this.responseContainer);AJS.$(response.sections).each(function(){var section=this;var subSection=AJS.$("
      ").attr("id",options.fieldID+"_s_"+section.id).addClass("yag").text(section.label);if(section.sub){subSection.append(AJS.$("").addClass("yagt").text("("+section.sub+")"))}resultsContainer.append(AJS.$("
    • ").append(subSection).mouseover(function(){AJS.$(this).addClass("active")}).mouseout(function(){AJS.$(this).removeClass("active")}));if(section.msg){var msg=AJS.$("
      ").attr("id",options.fieldID+"_i_"+section.id+"_n").addClass("yad").text(section.msg);resultsContainer.append(AJS.$("
    • ").append(msg).mouseover(function(){AJS.$(this).addClass("active")}).mouseout(function(){AJS.$(this).removeClass("active")}))}if(section.issues&§ion.issues.length>0){AJS.$(section.issues).each(function(){var imgUrl;if(/^http/.test(this.img)){imgUrl=this.img}else{imgUrl=contextPath+this.img}var issueNode=AJS.$("
    • ").append(AJS.$("
      ").attr("id",options.fieldID+"_i_"+section.id+"_"+this.key).addClass("yad").append(AJS.$("").addClass("yat").attr({cellpadding:"0",cellspacing:"0"}).append(AJS.$("").append(AJS.$("
      ").append(AJS.$("").attr("src",imgUrl))).append(AJS.$("").append(AJS.$("
      ").addClass("yak").html(this.keyHtml))).append(AJS.$("
      ").css("width","100%").html(this.summary)))));resultsContainer.append(issueNode);suggestionNodes.push([issueNode,this.key])})}});that.addSuggestionControls(suggestionNodes);return suggestionNodes}};options.minQueryLength=1;options.queryDelay=0.25;that.init(options);return that};jira.widget.autocomplete.Users.init=function(parent){AJS.$("fieldset.user-picker-params",parent).each(function(){var params=AJS.parseOptionsFromFieldset(AJS.$(this)),field=(params.fieldId||params.fieldName),$container=AJS.$("#"+field+"_container");$container.find("a.popup-trigger").click(function(e){var url=contextPath,vWinUsers;e.preventDefault();if(!params.formName){params.formName=$container.find("#"+field).parents("form").attr("name")}if(params.actionToOpen){url=url+params.actionToOpen}else{url=url+"/secure/popups/UserPickerBrowser.jspa"}url+="?formName="+params.formName+"&";url+="multiSelect="+params.multiSelect+"&";url+="element="+field;vWinUsers=window.open(url,"UserPicker","status=yes,resizable=yes,top=100,left=200,width=580,height=750,scrollbars=yes");vWinUsers.opener=self;vWinUsers.focus()});if(params.userPickerEnabled===true){jira.widget.autocomplete.Users({field:parent?parent.find("#"+field):null,fieldID:field,delimChar:params.multiSelect===false?undefined:",",ajaxData:{fieldName:params.fieldName}})}})};AJS.$(document).bind("dialogContentReady",function(e,dialog){jira.widget.autocomplete.Users.init(dialog.get$popupContent())});jira.widget.autocomplete.Issues.init=function(){jQuery.namespace("jira.issuepicker");AJS.$("fieldset.issue-picker-params").each(function(){var params=AJS.parseOptionsFromFieldset(AJS.$(this)),$container=AJS.$("#"+params.fieldId+"-container").add("#"+params.fieldName+"_container");$container.find("a.popup-trigger").click(function(e){var url=contextPath+"/secure/popups/IssuePicker.jspa?";url+="currentIssue="+params.currentIssueKey+"&";url+="singleSelectOnly="+params.singleSelectOnly+"&";url+="showSubTasks="+params.showSubTasks+"&";url+="showSubTasksParent="+params.showSubTaskParent;if(params.currentProjectId&¶ms.currentProjectId!=""){url+="&selectedProjectId="+params.currentProjectId}jira.issuepicker.callback=function(keysMap){var $formElement,keys=[];keysMap=JSON.parse(keysMap);if(params.fieldId&&keys){$formElement=AJS.$("#"+params.fieldId);if($formElement){AJS.$.each(keysMap,function(){keys.push(this.value)});$formElement.val(keys.join(", "))}}};var vWinUsers=window.open(url,"IssueSelectorPopup","status=no,resizable=yes,top=100,left=200,width=620,height=500,scrollbars=yes,resizable");vWinUsers.opener=self;vWinUsers.focus();e.preventDefault()});if(!params.fieldId){params.fieldId=params.fieldName}if(params.issuePickerEnabled===true){jira.widget.autocomplete.Issues({fieldID:params.fieldId,delimChar:params.singleSelectOnly===true?undefined:",",ajaxData:params})}})};AJS.$(function(){jira.widget.autocomplete.Users.init();jira.widget.autocomplete.Issues.init()});AJS.$(function(){AJS.$("fieldset.user-searcher-params").each(function(){var params=AJS.parseOptionsFromFieldset(AJS.$(this)),$container=AJS.$("#"+params.fieldId+"_container");if(params.userPickerEnabled===true){var autocompleter=jira.widget.autocomplete.Users({fieldID:params.fieldId,delimChar:params.multiSelect===true?",":undefined,ajaxData:{fieldName:params.fieldName}})}var setupFields=function(related){var field=AJS.$("#"+params.fieldId);var userImage=AJS.$("#"+params.fieldId+"Image");var groupImage=AJS.$("#"+params.fieldId+"GroupImage");var fieldDesc=AJS.$("#"+params.fieldId+"_desc");if(related==="select.list.none"){field.val("").attr("disabled","true");userImage.hide();groupImage.hide();fieldDesc.hide()}else{field.removeAttr("disabled");if(related==="select.list.group"){userImage.hide();groupImage.show();if(params.userPickerEnabled===true){autocompleter.disable();fieldDesc.hide()}}else{userImage.show();groupImage.hide();if(params.userPickerEnabled===true){autocompleter.enable();fieldDesc.show()}}}};AJS.$("#"+params.userSelect).change(function(){var related=AJS.$(this).find("option:selected").attr("rel");setupFields(related)}).find("option:selected").each(function(){setupFields(AJS.$(this).attr("rel"))});$container.find("a.user-popup-trigger").click(function(e){var url=contextPath+"/secure/popups/UserPickerBrowser.jspa?";url+="formName="+params.formName+"&";url+="multiSelect="+params.multiSelect+"&";url+="element="+params.fieldId;var vWinUsers=window.open(url,"UserPicker","status=yes,resizable=yes,top=100,left=200,width=580,height=750,scrollbars=yes");vWinUsers.opener=self;vWinUsers.focus();e.preventDefault()});$container.find("a.group-popup-trigger").click(function(e){var url=contextPath+"/secure/popups/GroupPickerBrowser.jspa?";url+="formName="+params.formName+"&";url+="multiSelect="+params.multiSelect+"&";url+="element="+params.fieldId;var vWinUsers=window.open(url,"GroupPicker","status=yes,resizable=yes,top=100,left=200,width=580,height=750,scrollbars=yes");vWinUsers.opener=self;vWinUsers.focus();e.preventDefault()})})});