Skip to content
Extraits de code Groupes Projets
Valider 77403596 rédigé par danielvincent's avatar danielvincent Validation de Raphael Sofaer
Parcourir les fichiers

mentions in publisher autocomplete within context

parent 150f6763
Aucune branche associée trouvée
Aucune étiquette associée trouvée
Aucune requête de fusion associée trouvée
...@@ -234,7 +234,7 @@ $.Autocompleter = function(input, options) { ...@@ -234,7 +234,7 @@ $.Autocompleter = function(input, options) {
previousValue = currentValue; previousValue = currentValue;
currentValue = options.searchTermFromValue(currentValue); currentValue = options.searchTermFromValue(currentValue, $input[0].selectionStart);
if ( currentValue.length >= options.minChars) { if ( currentValue.length >= options.minChars) {
$input.addClass(options.loadingClass); $input.addClass(options.loadingClass);
if (!options.matchCase) if (!options.matchCase)
......
...@@ -54,11 +54,21 @@ var Publisher = { ...@@ -54,11 +54,21 @@ var Publisher = {
textarea.val(formatted); textarea.val(formatted);
}, },
searchTermFromValue: function(value) searchTermFromValue: function(value, cursorIndex)
{ {
matches = value.match(/@(.+)/); var atLocation = value.lastIndexOf('@', cursorIndex);
if(atLocation == -1){return '';}
var nextAt = value.indexOf('@', cursorIndex+1);
if(nextAt == -1){nextAt = value.length;}
if(atLocation < 2){
atLocation = 0;
}else{ atLocation = atLocation -2 }
relevantString = value.slice(atLocation, nextAt).replace(/\s+$/,"");
matches = relevantString.match(/(^|\s)@(.+)/);
if(matches){ if(matches){
return matches[1]; return matches[2];
}else{ }else{
return ''; return '';
} }
......
...@@ -78,24 +78,46 @@ describe("Publisher", function() { ...@@ -78,24 +78,46 @@ describe("Publisher", function() {
Publisher.form().find('#status_message_fake_message').val()); Publisher.form().find('#status_message_fake_message').val());
}); });
}); });
describe("input", function(){
beforeEach(function(){
spec.loadFixture('aspects_index_prefill');
});
it("returns the status_message_fake_message textarea", function(){
expect(Publisher.input()[0].id).toBe('status_message_fake_message');
expect(Publisher.input().length).toBe(1);
});
});
describe("autocompletion", function(){ describe("autocompletion", function(){
describe("searchTermFromValue", function(){ describe("searchTermFromValue", function(){
var func; var func;
beforeEach(function(){func = Publisher.autocompletion.searchTermFromValue;}); beforeEach(function(){func = Publisher.autocompletion.searchTermFromValue;});
it("returns everything after an @", function(){ it("returns nothing if the cursor is before the @", function(){
expect(func('not @dan grip')).toBe('dan grip'); expect(func('not @dan grip', 2)).toBe('');
});
it("returns everything after an @ if the cursor is a word after that @", function(){
expect(func('not @dan grip', 13)).toBe('dan grip');
});
it("returns everything after an @ if the cursor is after that @", function(){
expect(func('not @dan grip', 7)).toBe('dan grip');
});
it("returns everything after an @ at the start of the line", function(){
expect(func('@dan grip', 9)).toBe('dan grip');
}); });
it("returns nothing if there is no @", function(){ it("returns nothing if there is no @", function(){
expect(func('dan')).toBe(''); expect(func('dan', 3)).toBe('');
}); });
it("returns nothing for just an @", function(){ it("returns nothing for just an @", function(){
expect(func('@')).toBe(''); expect(func('@', 1)).toBe('');
});
it("returns everything after the last @", function(){
expect(func('@siojfoi @dan"')).toBe('dan"');
}); });
it("returns nothing if there are letters preceding the @", function(){ it("returns nothing if there are letters preceding the @", function(){
expect(func('ioj@asdo')).toBe(''); expect(func('ioj@asdo', 8)).toBe('');
});
it("returns everything between @s if there are 2 @s and the cursor is between them", function(){
expect(func('@asdpo aoisdj @asodk', 8)).toBe('asdpo aoisdj');
});
it("returns everything after the 2nd @ if there are 2 @s and the cursor after them", function(){
expect(func('@asod asdo @asd asok', 15)).toBe('asd asok');
}); });
}); });
}); });
......
...@@ -19,6 +19,7 @@ src_files: ...@@ -19,6 +19,7 @@ src_files:
- public/javascripts/vendor/Mustache.js - public/javascripts/vendor/Mustache.js
- public/javascripts/vendor/timeago.js - public/javascripts/vendor/timeago.js
- public/javascripts/vendor/facebox.js - public/javascripts/vendor/facebox.js
- public/javascripts/jquery.autocomplete-custom.js
- public/javascripts/diaspora.js - public/javascripts/diaspora.js
- public/javascripts/widgets/alert.js - public/javascripts/widgets/alert.js
- public/javascripts/widgets/embedder.js - public/javascripts/widgets/embedder.js
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter