# HG changeset patch # User Thomas De Schampheleire <thomas.de.schamphele...@gmail.com> # Date 1435679620 -7200 # Tue Jun 30 17:53:40 2015 +0200 # Node ID 2d3ead418f13410650da664144462a54a0312163 # Parent 00a21b2c96879db000cb598df11d9671766869c2 autocomplete: introduce function to set up basic autocomplete functionality
To set up an autocomplete instance, there is quite some boilerplate that is with minimal differences between instances. Move this to a helper function to reduce duplication, while still allowing each specific case to tweak behavior. diff --git a/kallithea/public/js/base.js b/kallithea/public/js/base.js --- a/kallithea/public/js/base.js +++ b/kallithea/public/js/base.js @@ -1221,6 +1221,21 @@ var autocompleteFormatter = function (oR } }; +// Generate a basic autocomplete instance that can be tweaked further by the caller +var autocompleteCreate = function (inputElement, container, matchFunc) { + var datasource = new YAHOO.util.FunctionDataSource(matchFunc); + + var autocomplete = new YAHOO.widget.AutoComplete(inputElement, container, datasource); + autocomplete.useShadow = false; + autocomplete.resultTypeList = false; + autocomplete.animVert = false; + autocomplete.animHoriz = false; + autocomplete.animSpeed = 0.1; + autocomplete.formatResult = autocompleteFormatter; + + return autocomplete; +} + var _MembersAutoComplete = function (divid, cont, users_list, groups_list) { var matchUsers = function (sQuery) { @@ -1235,30 +1250,9 @@ var _MembersAutoComplete = function (div return u.concat(g); }; - // DataScheme for members - var memberDS = new YAHOO.util.FunctionDataSource(matchAll); + var membersAC = autocompleteCreate(divid, cont, matchAll); - // DataScheme for owner - var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); - - // Instantiate AutoComplete for perms - var membersAC = new YAHOO.widget.AutoComplete(divid, cont, memberDS); - membersAC.useShadow = false; - membersAC.resultTypeList = false; - membersAC.animVert = false; - membersAC.animHoriz = false; - membersAC.animSpeed = 0.1; - - // Instantiate AutoComplete for owner - var ownerAC = new YAHOO.widget.AutoComplete("user", "owner_container", ownerDS); - ownerAC.useShadow = false; - ownerAC.resultTypeList = false; - ownerAC.animVert = false; - ownerAC.animHoriz = false; - ownerAC.animSpeed = 0.1; - - membersAC.formatResult = autocompleteFormatter; - ownerAC.formatResult = autocompleteFormatter; + var ownerAC = autocompleteCreate("user", "owner_container", matchUsers); // Handler for selection of an entry var itemSelectHandler = function (sType, aArgs) { @@ -1292,20 +1286,10 @@ var MentionsAutoComplete = function (div return autocompleteMatchUsers(sQuery, users_list); } - // DataScheme for owner - var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); - - // Instantiate AutoComplete for mentions - var ownerAC = new YAHOO.widget.AutoComplete(divid, cont, ownerDS); - ownerAC.useShadow = false; - ownerAC.resultTypeList = false; - ownerAC.suppressInputUpdate = true; - ownerAC.animVert = false; - ownerAC.animHoriz = false; - ownerAC.animSpeed = 0.1; - - // Custom formatter to highlight the matching letters - ownerAC.formatResult = function (oResultData, sQuery, sResultMatch) { + var mentionsAC = autocompleteCreate(divid, cont, matchUsers); + mentionsAC.suppressInputUpdate = true; + // Overwrite formatResult to take into account mentionQuery + mentionsAC.formatResult = function (oResultData, sQuery, sResultMatch) { var org_sQuery = sQuery; if (this.dataSource.mentionQuery != null) { sQuery = this.dataSource.mentionQuery; @@ -1314,7 +1298,7 @@ var MentionsAutoComplete = function (div } // Handler for selection of an entry - ownerAC.itemSelectEvent.subscribe(function (sType, aArgs) { + mentionsAC.itemSelectEvent.subscribe(function (sType, aArgs) { var myAC = aArgs[0]; // reference back to the AC instance var elLI = aArgs[1]; // reference to the selected LI element var oData = aArgs[2]; // object literal of selected item's result data @@ -1332,10 +1316,10 @@ var MentionsAutoComplete = function (div // in this keybuffer we will gather current value of search ! // since we need to get this just when someone does `@` then we do the // search - ownerAC.dataSource.chunks = []; - ownerAC.dataSource.mentionQuery = null; + mentionsAC.dataSource.chunks = []; + mentionsAC.dataSource.mentionQuery = null; - ownerAC.get_mention = function(msg, max_pos) { + mentionsAC.get_mention = function(msg, max_pos) { var org = msg; // Must match utils2.py MENTIONS_REGEX. // Only matching on string up to cursor, so it must end with $ @@ -1366,14 +1350,14 @@ var MentionsAutoComplete = function (div var currentMessage = $divid.val(); var currentCaretPosition = $divid[0].selectionStart; - var unam = ownerAC.get_mention(currentMessage, currentCaretPosition); + var unam = mentionsAC.get_mention(currentMessage, currentCaretPosition); var curr_search = null; if(unam[0]){ curr_search = unam[0]; } - ownerAC.dataSource.chunks = unam[1]; - ownerAC.dataSource.mentionQuery = curr_search; + mentionsAC.dataSource.chunks = unam[1]; + mentionsAC.dataSource.mentionQuery = curr_search; }); } @@ -1423,19 +1407,8 @@ var PullRequestAutoComplete = function ( return autocompleteMatchUsers(sQuery, users_list); }; - // DataScheme for owner - var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); - - // Instantiate AutoComplete for mentions - var reviewerAC = new YAHOO.widget.AutoComplete(divid, cont, ownerDS); - reviewerAC.useShadow = false; - reviewerAC.resultTypeList = false; + var reviewerAC = autocompleteCreate(divid, cont, matchUsers); reviewerAC.suppressInputUpdate = true; - reviewerAC.animVert = false; - reviewerAC.animHoriz = false; - reviewerAC.animSpeed = 0.1; - - reviewerAC.formatResult = autocompleteFormatter; // Handler for selection of an entry reviewerAC.itemSelectEvent.subscribe(function (sType, aArgs) { _______________________________________________ kallithea-general mailing list kallithea-general@sfconservancy.org http://lists.sfconservancy.org/mailman/listinfo/kallithea-general