Mercurial > kallithea
comparison rhodecode/public/js/rhodecode.js @ 2369:c2f131502037 beta
Autocomplete fixes
- use translation MAP
- move translation to top level in order to be used inside rhodecode.js
- re-use user and groups data in changesets page
author | Marcin Kuzminski <marcin@python-works.com> |
---|---|
date | Fri, 01 Jun 2012 23:29:41 +0200 |
parents | 5143b8df576c |
children | 6776f4e569d7 530bd12fc18a |
comparison
equal
deleted
inserted
replaced
2368:5143b8df576c | 2369:c2f131502037 |
---|---|
42 // Replace the prototype property | 42 // Replace the prototype property |
43 return format; | 43 return format; |
44 | 44 |
45 }(); | 45 }(); |
46 | 46 |
47 String.prototype.strip = function(char) { | |
48 if(char === undefined){ | |
49 char = '\\s'; | |
50 } | |
51 return this.replace(new RegExp('^'+char+'+|'+char+'+$','g'), ''); | |
52 } | |
53 String.prototype.lstrip = function(char) { | |
54 if(char === undefined){ | |
55 char = '\\s'; | |
56 } | |
57 return this.replace(new RegExp('^'+char+'+'),''); | |
58 } | |
59 String.prototype.rstrip = function(char) { | |
60 if(char === undefined){ | |
61 char = '\\s'; | |
62 } | |
63 return this.replace(new RegExp(''+char+'+$'),''); | |
64 } | |
47 | 65 |
48 /** | 66 /** |
49 * SmartColorGenerator | 67 * SmartColorGenerator |
50 * | 68 * |
51 *usage:: | 69 *usage:: |
445 } | 463 } |
446 YUD.addClass(overlay, 'submitting'); | 464 YUD.addClass(overlay, 'submitting'); |
447 | 465 |
448 ajaxPOST(submit_url, postData, success); | 466 ajaxPOST(submit_url, postData, success); |
449 }); | 467 }); |
450 | 468 // callbacks |
451 tooltip_activate(); | 469 tooltip_activate(); |
452 }; | 470 }; |
453 | 471 |
454 var deleteComment = function(comment_id){ | 472 var deleteComment = function(comment_id){ |
455 var url = AJAX_COMMENT_DELETE_URL.replace('__COMMENT_ID__',comment_id); | 473 var url = AJAX_COMMENT_DELETE_URL.replace('__COMMENT_ID__',comment_id); |
817 }; | 835 }; |
818 | 836 |
819 | 837 |
820 /** MEMBERS AUTOCOMPLETE WIDGET **/ | 838 /** MEMBERS AUTOCOMPLETE WIDGET **/ |
821 | 839 |
822 var MembersAutoComplete = function (users_list, groups_list, group_lbl, members_lbl) { | 840 var MembersAutoComplete = function (users_list, groups_list) { |
823 var myUsers = users_list; | 841 var myUsers = users_list; |
824 var myGroups = groups_list; | 842 var myGroups = groups_list; |
825 | 843 |
826 // Define a custom search function for the DataSource of users | 844 // Define a custom search function for the DataSource of users |
827 var matchUsers = function (sQuery) { | 845 var matchUsers = function (sQuery) { |
832 var matches = []; | 850 var matches = []; |
833 | 851 |
834 // Match against each name of each contact | 852 // Match against each name of each contact |
835 for (; i < l; i++) { | 853 for (; i < l; i++) { |
836 contact = myUsers[i]; | 854 contact = myUsers[i]; |
837 if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) { | 855 if (((contact.fname+"").toLowerCase().indexOf(query) > -1) || |
838 matches[matches.length] = contact; | 856 ((contact.lname+"").toLowerCase().indexOf(query) > -1) || |
839 } | 857 ((contact.nname) && ((contact.nname).toLowerCase().indexOf(query) > -1))) { |
858 matches[matches.length] = contact; | |
859 } | |
840 } | 860 } |
841 return matches; | 861 return matches; |
842 }; | 862 }; |
843 | 863 |
844 // Define a custom search function for the DataSource of usersGroups | 864 // Define a custom search function for the DataSource of usersGroups |
910 // group | 930 // group |
911 if (oResultData.grname != undefined) { | 931 if (oResultData.grname != undefined) { |
912 var grname = oResultData.grname; | 932 var grname = oResultData.grname; |
913 var grmembers = oResultData.grmembers; | 933 var grmembers = oResultData.grmembers; |
914 var grnameMatchIndex = grname.toLowerCase().indexOf(query); | 934 var grnameMatchIndex = grname.toLowerCase().indexOf(query); |
915 var grprefix = "{0}: ".format(group_lbl); | 935 var grprefix = "{0}: ".format(_TM['Group']); |
916 var grsuffix = " (" + grmembers + " )"; | 936 var grsuffix = " (" + grmembers + " )"; |
917 var grsuffix = " ({0} {1})".format(grmembers, members_lbl); | 937 var grsuffix = " ({0} {1})".format(grmembers, _TM['members']); |
918 | 938 |
919 if (grnameMatchIndex > -1) { | 939 if (grnameMatchIndex > -1) { |
920 return _gravatar(grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix,null,true); | 940 return _gravatar(grprefix + highlightMatch(grname, query, grnameMatchIndex) + grsuffix,null,true); |
921 } | 941 } |
922 return _gravatar(grprefix + oResultData.grname + grsuffix, null,true); | 942 return _gravatar(grprefix + oResultData.grname + grsuffix, null,true); |
923 // Users | 943 // Users |
924 } else if (oResultData.fname != undefined) { | 944 } else if (oResultData.nname != undefined) { |
925 var fname = oResultData.fname, | 945 var fname = oResultData.fname || ""; |
926 lname = oResultData.lname, | 946 var lname = oResultData.lname || ""; |
927 nname = oResultData.nname || "", | 947 var nname = oResultData.nname; |
928 // Guard against null value | 948 |
929 fnameMatchIndex = fname.toLowerCase().indexOf(query), | 949 // Guard against null value |
950 var fnameMatchIndex = fname.toLowerCase().indexOf(query), | |
930 lnameMatchIndex = lname.toLowerCase().indexOf(query), | 951 lnameMatchIndex = lname.toLowerCase().indexOf(query), |
931 nnameMatchIndex = nname.toLowerCase().indexOf(query), | 952 nnameMatchIndex = nname.toLowerCase().indexOf(query), |
932 displayfname, displaylname, displaynname; | 953 displayfname, displaylname, displaynname; |
933 | 954 |
934 if (fnameMatchIndex > -1) { | 955 if (fnameMatchIndex > -1) { |
986 ownerAC: ownerAC, | 1007 ownerAC: ownerAC, |
987 }; | 1008 }; |
988 } | 1009 } |
989 | 1010 |
990 | 1011 |
991 var MentionsAutoComplete = function (divid, cont, users_list, groups_list, group_lbl, members_lbl) { | 1012 var MentionsAutoComplete = function (divid, cont, users_list, groups_list) { |
992 var myUsers = users_list; | 1013 var myUsers = users_list; |
993 var myGroups = groups_list; | 1014 var myGroups = groups_list; |
994 | 1015 |
995 // Define a custom search function for the DataSource of users | 1016 // Define a custom search function for the DataSource of users |
996 var matchUsers = function (sQuery) { | 1017 var matchUsers = function (sQuery) { |
1006 var matches = []; | 1027 var matches = []; |
1007 | 1028 |
1008 // Match against each name of each contact | 1029 // Match against each name of each contact |
1009 for (; i < l; i++) { | 1030 for (; i < l; i++) { |
1010 contact = myUsers[i]; | 1031 contact = myUsers[i]; |
1011 if ((contact.fname.toLowerCase().indexOf(query) > -1) || (contact.lname.toLowerCase().indexOf(query) > -1) || (contact.nname && (contact.nname.toLowerCase().indexOf(query) > -1))) { | 1032 if (((contact.fname+"").toLowerCase().indexOf(query) > -1) || |
1033 ((contact.lname+"").toLowerCase().indexOf(query) > -1) || | |
1034 ((contact.nname) && ((contact.nname).toLowerCase().indexOf(query) > -1))) { | |
1012 matches[matches.length] = contact; | 1035 matches[matches.length] = contact; |
1013 } | 1036 } |
1014 } | 1037 } |
1015 return matches | 1038 return matches |
1016 }; | 1039 }; |
1021 return u | 1044 return u |
1022 }; | 1045 }; |
1023 | 1046 |
1024 // DataScheme for owner | 1047 // DataScheme for owner |
1025 var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); | 1048 var ownerDS = new YAHOO.util.FunctionDataSource(matchUsers); |
1049 | |
1026 ownerDS.responseSchema = { | 1050 ownerDS.responseSchema = { |
1027 fields: ["id", "fname", "lname", "nname", "gravatar_lnk"] | 1051 fields: ["id", "fname", "lname", "nname", "gravatar_lnk"] |
1028 }; | 1052 }; |
1029 | 1053 |
1030 // Instantiate AutoComplete for mentions | 1054 // Instantiate AutoComplete for mentions |
1054 em = '/images/icons/group.png' | 1078 em = '/images/icons/group.png' |
1055 } | 1079 } |
1056 tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>' | 1080 tmpl = '<div class="ac-container-wrap"><img class="perm-gravatar-ac" src="{0}"/>{1}</div>' |
1057 return tmpl.format(em,res) | 1081 return tmpl.format(em,res) |
1058 } | 1082 } |
1059 if (oResultData.fname != undefined) { | 1083 if (oResultData.nname != undefined) { |
1060 var fname = oResultData.fname, | 1084 var fname = oResultData.fname || ""; |
1061 lname = oResultData.lname, | 1085 var lname = oResultData.lname || ""; |
1062 nname = oResultData.nname || "", | 1086 var nname = oResultData.nname; |
1063 // Guard against null value | 1087 |
1064 fnameMatchIndex = fname.toLowerCase().indexOf(query), | 1088 // Guard against null value |
1089 var fnameMatchIndex = fname.toLowerCase().indexOf(query), | |
1065 lnameMatchIndex = lname.toLowerCase().indexOf(query), | 1090 lnameMatchIndex = lname.toLowerCase().indexOf(query), |
1066 nnameMatchIndex = nname.toLowerCase().indexOf(query), | 1091 nnameMatchIndex = nname.toLowerCase().indexOf(query), |
1067 displayfname, displaylname, displaynname; | 1092 displayfname, displaylname, displaynname; |
1068 | 1093 |
1069 if (fnameMatchIndex > -1) { | 1094 if (fnameMatchIndex > -1) { |
1136 chunks.push(org.substr(0,at_pos))// prefix chunk | 1161 chunks.push(org.substr(0,at_pos))// prefix chunk |
1137 chunks.push(msg2) // search chunk | 1162 chunks.push(msg2) // search chunk |
1138 chunks.push(org.substr(max_pos)) // postfix chunk | 1163 chunks.push(org.substr(max_pos)) // postfix chunk |
1139 | 1164 |
1140 // clean up msg2 for filtering and regex match | 1165 // clean up msg2 for filtering and regex match |
1141 var msg2 = msg2.replace(' ','').replace('\n',''); | 1166 var msg2 = msg2.lstrip(' ').lstrip('\n'); |
1142 | 1167 |
1143 if(re.test(msg2)){ | 1168 if(re.test(msg2)){ |
1144 var unam = re.exec(msg2)[1]; | 1169 var unam = re.exec(msg2)[1]; |
1145 return [unam, chunks]; | 1170 return [unam, chunks]; |
1146 } | 1171 } |
1166 return { | 1191 return { |
1167 ownerDS: ownerDS, | 1192 ownerDS: ownerDS, |
1168 ownerAC: ownerAC, | 1193 ownerAC: ownerAC, |
1169 }; | 1194 }; |
1170 } | 1195 } |
1171 | |
1172 | |
1173 | 1196 |
1174 | 1197 |
1175 /** | 1198 /** |
1176 * QUICK REPO MENU | 1199 * QUICK REPO MENU |
1177 */ | 1200 */ |