From 4e3aadc38a671ebd37d3619ea64f278f5a06f6dc Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 18:57:16 +0100 Subject: Rename some stuff related to autocomplete --- view/js/autocomplete.js | 16 ++++++++-------- view/js/main.js | 2 +- 2 files changed, 9 insertions(+), 9 deletions(-) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index e68356057..1fa20cc3b 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -3,7 +3,7 @@ * * require jQuery, jquery.textcomplete */ -function mysearch(term, callback, backend_url, extra_channels) { +function contact_search(term, callback, backend_url, extra_channels) { var postdata = { start:0, count:100, @@ -25,11 +25,11 @@ function mysearch(term, callback, backend_url, extra_channels) { }).fail(function () {callback([]); }); // Callback must be invoked even if something went wrong. } -function format(item) { +function contact_format(item) { return "
{2} ({3})
".format(item.taggable, item.photo, item.name, ((item.label) ? item.nick + ' ' + item.label : item.nick), item.link ) } -function replace(item) { +function editor_replace(item) { // $2 ensures that prefix (@,@!) is preserved var id = item.id; // 16 chars of hash should be enough. Full hash could be used if it can be done in a visually appealing way. @@ -40,19 +40,19 @@ function replace(item) { } /** - * jQuery plugin 'contact_autocomplete' + * jQuery plugin 'editor_autocomplete' */ (function( $ ){ - $.fn.contact_autocomplete = function(backend_url, extra_channels) { + $.fn.editor_autocomplete = function(backend_url, extra_channels) { if (typeof extra_channels === 'undefined') extra_channels = false; // Autocomplete contacts contacts = { match: /(^|\s)(@\!*)([^ \n]+)$/, index: 3, - search: function(term, callback) { mysearch(term, callback, backend_url, extra_channels); }, - replace: replace, - template: format, + search: function(term, callback) { contact_search(term, callback, backend_url, extra_channels); }, + replace: editor_replace, + template: contact_format, } smilies = { diff --git a/view/js/main.js b/view/js/main.js index 85aea9875..5e3fb2bff 100644 --- a/view/js/main.js +++ b/view/js/main.js @@ -574,7 +574,7 @@ function updateConvItems(mode,data) { } /* autocomplete @nicknames */ - $(".comment-edit-form textarea").contact_autocomplete(baseurl+"/acl?f=&n=1"); + $(".comment-edit-form textarea").editor_autocomplete(baseurl+"/acl?f=&n=1"); var bimgs = $(".wall-item-body img").not(function() { return this.complete; }); var bimgcount = bimgs.length; -- cgit v1.2.3 From 34ecbcceea9ae6399f50c6e8718a9f84345136b9 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 19:39:50 +0100 Subject: Make nav search use textcomplete --- view/js/autocomplete.js | 30 ++++++++++++++++++++++++++---- 1 file changed, 26 insertions(+), 4 deletions(-) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 1fa20cc3b..1fad1903b 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -3,15 +3,15 @@ * * require jQuery, jquery.textcomplete */ -function contact_search(term, callback, backend_url, extra_channels) { +function contact_search(term, callback, backend_url, type, extra_channels) { var postdata = { start:0, count:100, search:term, - type:'c', + type:type, } - if(extra_channels) + if(typeof extra_channels !== 'undefined' && extra_channels) postdata['extra_channels[]'] = extra_channels; $.ajax({ @@ -39,6 +39,10 @@ function editor_replace(item) { return '$1$2'+item.nick.replace(' ','') + '+' + id; } +function basic_replace(item) { + return '$1$2'+item.nick; +} + /** * jQuery plugin 'editor_autocomplete' */ @@ -50,7 +54,7 @@ function editor_replace(item) { contacts = { match: /(^|\s)(@\!*)([^ \n]+)$/, index: 3, - search: function(term, callback) { contact_search(term, callback, backend_url, extra_channels); }, + search: function(term, callback) { contact_search(term, callback, backend_url, 'c', extra_channels); }, replace: editor_replace, template: contact_format, } @@ -65,3 +69,21 @@ function editor_replace(item) { this.textcomplete([contacts,smilies],{className:'acpopup'}); }; })( jQuery ); + +/** + * jQuery plugin 'search_autocomplete' + */ +(function( $ ){ + $.fn.search_autocomplete = function(backend_url) { + + // Autocomplete contacts + contacts = { + match: /(^)(@)([^\n]+)$/, + index: 3, + search: function(term, callback) { contact_search(term, callback, backend_url, 'x',[]); }, + replace: basic_replace, + template: contact_format, + } + this.textcomplete([contacts],{className:'acpopup'}); + }; +})( jQuery ); -- cgit v1.2.3 From 0cf016b0b049a32dd053e680f21237d039959252 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:03:05 +0100 Subject: Make mod_poke use textcomplete --- view/js/autocomplete.js | 26 +++++++++++++++++++++++--- view/js/mod_poke.js | 13 ++----------- 2 files changed, 25 insertions(+), 14 deletions(-) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 1fad1903b..8966c675d 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -40,7 +40,7 @@ function editor_replace(item) { } function basic_replace(item) { - return '$1$2'+item.nick; + return '$1'+item.name+' '; } /** @@ -78,8 +78,8 @@ function basic_replace(item) { // Autocomplete contacts contacts = { - match: /(^)(@)([^\n]+)$/, - index: 3, + match: /(^@)([^\n]+)$/, + index: 2, search: function(term, callback) { contact_search(term, callback, backend_url, 'x',[]); }, replace: basic_replace, template: contact_format, @@ -87,3 +87,23 @@ function basic_replace(item) { this.textcomplete([contacts],{className:'acpopup'}); }; })( jQuery ); + +(function( $ ){ + $.fn.contact_autocomplete = function(backend_url, onselect) { + + // Autocomplete contacts + contacts = { + match: /(^)([^\n]+)$/, + index: 2, + search: function(term, callback) { contact_search(term, callback, backend_url, '',[]); }, + replace: basic_replace, + template: contact_format, + } + + var a = this.textcomplete([contacts],{className:'acpopup'}); + + if(typeof onselect !== 'undefined') + a.on('textComplete:select',function(e,value,strategy) { onselect(value); }); + }; +})( jQuery ); + diff --git a/view/js/mod_poke.js b/view/js/mod_poke.js index 78972888f..c5ca5399c 100644 --- a/view/js/mod_poke.js +++ b/view/js/mod_poke.js @@ -1,14 +1,5 @@ $(document).ready(function() { - var a; - a = $("#poke-recip").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'poke-recip-ac', - onSelect: function(value,data) { - $("#poke-recip-complete").val(data); - } + $("#poke-recip").contact_autocomplete(baseurl + '/acl', function(data) { + $("#poke-recip-complete").val(data.id); }); - a.setOptions({ params: { type: 'a' }}); - }); -- cgit v1.2.3 From e025fd9de218b49f15cc710c7a3a6bbad29fc42c Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:06:06 +0100 Subject: Make mail use textcomplete --- view/js/mod_mail.js | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) (limited to 'view/js') diff --git a/view/js/mod_mail.js b/view/js/mod_mail.js index 82f60f46f..9c4597866 100644 --- a/view/js/mod_mail.js +++ b/view/js/mod_mail.js @@ -1,13 +1,6 @@ $(document).ready(function() { - var a; - a = $("#recip").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'recip-ac', - onSelect: function(value,data) { - $("#recip-complete").val(data); - }, + $("#recip").contact_autocomplete(baseurl + '/acl', function(data) { + $("#recip-complete").val(data.xid); }); }); -- cgit v1.2.3 From f157122c351bdff3cf23520d791925f0f6463f3c Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:25:29 +0100 Subject: Make searchbox use textcomplete --- view/js/mod_network.js | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) (limited to 'view/js') diff --git a/view/js/mod_network.js b/view/js/mod_network.js index 8f1e5132d..1b7ccdc0a 100644 --- a/view/js/mod_network.js +++ b/view/js/mod_network.js @@ -1,10 +1,5 @@ $(document).ready(function() { - var a; - a = $("#search-text").autocomplete({ - serviceUrl: baseurl + '/search_ac', - minChars: 2, - id: 'search-text-ac', - }); + $("#search-text").contact_autocomplete(baseurl + '/acl'); $('.jslider-scale ins').addClass('hidden-xs'); }); -- cgit v1.2.3 From 9f8ce331f3661463573dac9d1bd0bf68eb15a322 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:29:38 +0100 Subject: Disable browser-based autocomplete when using the textcomplete based one --- view/js/autocomplete.js | 3 +++ 1 file changed, 3 insertions(+) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 8966c675d..66d8cf90c 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -66,6 +66,7 @@ function basic_replace(item) { template: function(item) { return item['icon'] + item['text'] }, replace: function(item) { return "$1"+item['text'] + ' '; }, } + this.attr('autocomplete','off'); this.textcomplete([contacts,smilies],{className:'acpopup'}); }; })( jQuery ); @@ -84,6 +85,7 @@ function basic_replace(item) { replace: basic_replace, template: contact_format, } + this.attr('autocomplete','off'); this.textcomplete([contacts],{className:'acpopup'}); }; })( jQuery ); @@ -100,6 +102,7 @@ function basic_replace(item) { template: contact_format, } + this.attr('autocomplete','off'); var a = this.textcomplete([contacts],{className:'acpopup'}); if(typeof onselect !== 'undefined') -- cgit v1.2.3 From c9b15bbab530264c4d5e1a648fc62153843b0618 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:38:56 +0100 Subject: Allow passing autocomplete type to contact_autocomplete --- view/js/autocomplete.js | 6 ++++-- view/js/mod_mail.js | 2 +- view/js/mod_poke.js | 2 +- 3 files changed, 6 insertions(+), 4 deletions(-) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 66d8cf90c..26d3f6211 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -91,13 +91,15 @@ function basic_replace(item) { })( jQuery ); (function( $ ){ - $.fn.contact_autocomplete = function(backend_url, onselect) { + $.fn.contact_autocomplete = function(backend_url, typ, onselect) { + + if(typeof typ === 'undefined') typ = ''; // Autocomplete contacts contacts = { match: /(^)([^\n]+)$/, index: 2, - search: function(term, callback) { contact_search(term, callback, backend_url, '',[]); }, + search: function(term, callback) { contact_search(term, callback, backend_url, typ,[]); }, replace: basic_replace, template: contact_format, } diff --git a/view/js/mod_mail.js b/view/js/mod_mail.js index 9c4597866..2cbc924f4 100644 --- a/view/js/mod_mail.js +++ b/view/js/mod_mail.js @@ -1,5 +1,5 @@ $(document).ready(function() { - $("#recip").contact_autocomplete(baseurl + '/acl', function(data) { + $("#recip").contact_autocomplete(baseurl + '/acl', '', function(data) { $("#recip-complete").val(data.xid); }); diff --git a/view/js/mod_poke.js b/view/js/mod_poke.js index c5ca5399c..3c07fcef7 100644 --- a/view/js/mod_poke.js +++ b/view/js/mod_poke.js @@ -1,5 +1,5 @@ $(document).ready(function() { - $("#poke-recip").contact_autocomplete(baseurl + '/acl', function(data) { + $("#poke-recip").contact_autocomplete(baseurl + '/acl', 'a', function(data) { $("#poke-recip-complete").val(data.id); }); }); -- cgit v1.2.3 From 8e4d66dd7b232f487e11fab249ca30336cbb3a6f Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:57:10 +0100 Subject: Make mod_connections search use textcomplete --- view/js/mod_connections.js | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) (limited to 'view/js') diff --git a/view/js/mod_connections.js b/view/js/mod_connections.js index 8a8f2fee6..6393630b3 100644 --- a/view/js/mod_connections.js +++ b/view/js/mod_connections.js @@ -1,13 +1,5 @@ $(document).ready(function() { - var a; - a = $("#contacts-search").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'contact-search-ac', - }); - a.setOptions({ autoSubmit: true, params: { type: 'a' }}); - + $("#contacts-search").contact_autocomplete(baseurl + '/acl', 'a'); }); $("#contacts-search").keyup(function(event){ -- cgit v1.2.3 From b098d5d901d529b48461811c414c6043c991e92a Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 20:57:30 +0100 Subject: Make photos tag autocomplete use textcomplete --- view/js/mod_photos.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'view/js') diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 0a64f8102..676f5e8ef 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -2,19 +2,11 @@ var ispublic = aStr['everybody']; $(document).ready(function() { - - var a; - a = $("#photo-edit-newtag").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'newtag-ac', - onSelect: function(value,data) { - $("#photo-edit-newtag").val(data); - }, - }); - a.setOptions({ params: { type: 'p' }}); - + $(document).ready(function() { + $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', function(data) { + $("#photo-edit-newtag").val('@' + data.name.replace(' ','_'); // Is the underscore replacement still needed? + }); + }); $('#contact_allow, #contact_deny, #group_allow, #group_deny').change(function() { var selstr; -- cgit v1.2.3 From fcc9131fb9b1a0c115823c42a0828ce25670b215 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 21:01:36 +0100 Subject: Make mod_sources autocomplete use textcomplete --- view/js/mod_sources.js | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) (limited to 'view/js') diff --git a/view/js/mod_sources.js b/view/js/mod_sources.js index 49880b38f..add8ac15e 100644 --- a/view/js/mod_sources.js +++ b/view/js/mod_sources.js @@ -1,15 +1,7 @@ $(document).ready(function() { - var a; - a = $("#id_name").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'id-name-ac', - onSelect: function(value,data) { - $("#id_abook").val(data); - } - }); - - a.setOptions({ params: { type: 'a' }}); - + $(document).ready(function() { + $("#id_name").contact_autocomplete(baseurl + '/acl', 'a', function(data) { + $("#id_abook").val(data.id); + }); + }); }); -- cgit v1.2.3 From d7a3d9f60654a721cb00d78dd653fd56e4e9fb53 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 21:32:17 +0100 Subject: Add autosubmit feature to textcomplete based autocompleter --- view/js/autocomplete.js | 15 +++++++++++++-- view/js/mod_connections.js | 2 +- view/js/mod_mail.js | 2 +- view/js/mod_photos.js | 2 +- view/js/mod_poke.js | 2 +- view/js/mod_sources.js | 2 +- 6 files changed, 18 insertions(+), 7 deletions(-) (limited to 'view/js') diff --git a/view/js/autocomplete.js b/view/js/autocomplete.js index 26d3f6211..afdf9c230 100644 --- a/view/js/autocomplete.js +++ b/view/js/autocomplete.js @@ -43,6 +43,10 @@ function basic_replace(item) { return '$1'+item.name+' '; } +function submit_form(e) { + $(e).parents('form').submit(); +} + /** * jQuery plugin 'editor_autocomplete' */ @@ -86,14 +90,18 @@ function basic_replace(item) { template: contact_format, } this.attr('autocomplete','off'); - this.textcomplete([contacts],{className:'acpopup'}); + var a = this.textcomplete([contacts],{className:'acpopup'}); + + a.on('textComplete:select', function(e,value,strategy) { submit_form(this); }); + }; })( jQuery ); (function( $ ){ - $.fn.contact_autocomplete = function(backend_url, typ, onselect) { + $.fn.contact_autocomplete = function(backend_url, typ, autosubmit, onselect) { if(typeof typ === 'undefined') typ = ''; + if(typeof autosubmit === 'undefined') autosubmit = false; // Autocomplete contacts contacts = { @@ -107,6 +115,9 @@ function basic_replace(item) { this.attr('autocomplete','off'); var a = this.textcomplete([contacts],{className:'acpopup'}); + if(autosubmit) + a.on('textComplete:select', function(e,value,strategy) { submit_form(this); }); + if(typeof onselect !== 'undefined') a.on('textComplete:select',function(e,value,strategy) { onselect(value); }); }; diff --git a/view/js/mod_connections.js b/view/js/mod_connections.js index 6393630b3..f29d96729 100644 --- a/view/js/mod_connections.js +++ b/view/js/mod_connections.js @@ -1,5 +1,5 @@ $(document).ready(function() { - $("#contacts-search").contact_autocomplete(baseurl + '/acl', 'a'); + $("#contacts-search").contact_autocomplete(baseurl + '/acl', 'a', true); }); $("#contacts-search").keyup(function(event){ diff --git a/view/js/mod_mail.js b/view/js/mod_mail.js index 2cbc924f4..16e06e6f5 100644 --- a/view/js/mod_mail.js +++ b/view/js/mod_mail.js @@ -1,5 +1,5 @@ $(document).ready(function() { - $("#recip").contact_autocomplete(baseurl + '/acl', '', function(data) { + $("#recip").contact_autocomplete(baseurl + '/acl', '', false, function(data) { $("#recip-complete").val(data.xid); }); diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 676f5e8ef..5f19e5f7f 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -3,7 +3,7 @@ var ispublic = aStr['everybody']; $(document).ready(function() { $(document).ready(function() { - $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', function(data) { + $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) { $("#photo-edit-newtag").val('@' + data.name.replace(' ','_'); // Is the underscore replacement still needed? }); }); diff --git a/view/js/mod_poke.js b/view/js/mod_poke.js index 3c07fcef7..58e50588f 100644 --- a/view/js/mod_poke.js +++ b/view/js/mod_poke.js @@ -1,5 +1,5 @@ $(document).ready(function() { - $("#poke-recip").contact_autocomplete(baseurl + '/acl', 'a', function(data) { + $("#poke-recip").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) { $("#poke-recip-complete").val(data.id); }); }); diff --git a/view/js/mod_sources.js b/view/js/mod_sources.js index add8ac15e..1bbf89765 100644 --- a/view/js/mod_sources.js +++ b/view/js/mod_sources.js @@ -1,6 +1,6 @@ $(document).ready(function() { $(document).ready(function() { - $("#id_name").contact_autocomplete(baseurl + '/acl', 'a', function(data) { + $("#id_name").contact_autocomplete(baseurl + '/acl', 'a', false, function(data) { $("#id_abook").val(data.id); }); }); -- cgit v1.2.3 From 885bcb4b2a811c2f18d96b440f9fdc0e223307a0 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 21:33:22 +0100 Subject: Remove out-of-date mod_message.js --- view/js/mod_message.js | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100644 view/js/mod_message.js (limited to 'view/js') diff --git a/view/js/mod_message.js b/view/js/mod_message.js deleted file mode 100644 index 82f60f46f..000000000 --- a/view/js/mod_message.js +++ /dev/null @@ -1,13 +0,0 @@ -$(document).ready(function() { - var a; - a = $("#recip").autocomplete({ - serviceUrl: baseurl + '/acl', - minChars: 2, - width: 250, - id: 'recip-ac', - onSelect: function(value,data) { - $("#recip-complete").val(data); - }, - }); - -}); -- cgit v1.2.3 From f3cd29f829ab66fe1f9fac306dcc6fa20858ad52 Mon Sep 17 00:00:00 2001 From: Stefan Parviainen Date: Wed, 7 Jan 2015 21:38:12 +0100 Subject: Typo + comment --- view/js/mod_photos.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'view/js') diff --git a/view/js/mod_photos.js b/view/js/mod_photos.js index 5f19e5f7f..4c724c5e1 100644 --- a/view/js/mod_photos.js +++ b/view/js/mod_photos.js @@ -4,7 +4,7 @@ var ispublic = aStr['everybody']; $(document).ready(function() { $(document).ready(function() { $("#photo-edit-newtag").contact_autocomplete(baseurl + '/acl', 'p', false, function(data) { - $("#photo-edit-newtag").val('@' + data.name.replace(' ','_'); // Is the underscore replacement still needed? + $("#photo-edit-newtag").val('@' + data.name.replace(' ','_')); // TODO: Get rid of underscore }); }); -- cgit v1.2.3