Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/jappix/jappix.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
Diffstat (limited to 'app/javascripts/autocompletion.js')
-rw-r--r--app/javascripts/autocompletion.js256
1 files changed, 0 insertions, 256 deletions
diff --git a/app/javascripts/autocompletion.js b/app/javascripts/autocompletion.js
deleted file mode 100644
index 78f48b50..00000000
--- a/app/javascripts/autocompletion.js
+++ /dev/null
@@ -1,256 +0,0 @@
-/*
-
-Jappix - An open social platform
-These are the autocompletion tools JS script for Jappix
-
--------------------------------------------------
-
-License: AGPL
-Author: Valérian Saliou
-
-*/
-
-// Bundle
-var Autocompletion = (function () {
-
- /**
- * Alias of this
- * @private
- */
- var self = {};
-
-
- /**
- * Sort an autocompletion result array with insensitivity to the case,
- * using the 1st elements (a[0] and b[0]) to process comparison
- * @public
- * @param {array} a
- * @param {array} b
- * @return {undefined}
- */
- self.caseInsensitiveSort = function(a, b) {
-
- try {
- // Put the two strings into lower case
- var sort_a = a[0].toLowerCase();
- var sort_b = b[0].toLowerCase();
-
- // Process the sort
- if(sort_a > sort_b) {
- return 1;
- }
-
- if(sort_a < sort_b) {
- return -1;
- }
- } catch(e) {
- Console.error('Autocompletion.caseInsensitiveSort', e);
- }
-
- };
-
-
- /**
- * Split a query into its subqueries ready to be used in autocompletion
- * @public
- * @param {string} query
- * @return {object}
- */
- self.getSubQueries = function(query) {
-
- var result = [];
-
- try {
- var subqueries = [];
- var remnants = [];
-
- var query_last_char_pos = query.length - 1;
- var space_counter = 0;
- var cur_char;
-
- for(var i = query_last_char_pos; i >= 0; i--) {
- // Search from the end of the query
- cur_char = query.charAt(i);
-
- if(space_counter === 0 && cur_char.search(/\s/) === 0) {
- // The first "local" space was found
- // Add the subquery and its remnant to results
- subqueries.push(query.slice(i+1));
- remnants.push(query.slice(0, i+1));
-
- space_counter++;
- } else {
- space_counter = 0;
- }
- }
-
- if(space_counter === 0) {
- // If the first char of the query is not a space, add the full query to results
- subqueries.push(query);
- remnants.push('');
- }
-
- result = [subqueries, remnants];
- } catch(e) {
- Console.error('Autocompletion.getSubQueries', e);
- } finally {
- return result;
- }
-
- };
-
-
- /**
- * Creates an array with the autocompletion results. An autocompletion result
- * is an array containing the result himself and the rank of the query which
- * matched this answer
- * @public
- * @param {Array} query
- * @param {string} id
- * @return {Array}
- */
- self.process = function(query, id) {
-
- var results = [];
-
- try {
- // Replace forbidden characters in regex
- query = Common.escapeRegex(query);
-
- // Build an array of regex to use
- var query_reg_exp = [];
-
- for(i = 0; i < query.length; i++) {
- if(query[i] !== null) {
- query_reg_exp.push(
- new RegExp('(^)' + query[i], 'gi')
- );
- }
- }
-
- // Search in the roster
- var nick, regex;
-
- $('#' + id + ' .user').each(function() {
- nick = $(this).find('.name').text();
-
- for(i = 0; i < query_reg_exp.length; i++) {
- regex = query_reg_exp[i];
-
- if(nick.match(regex)) {
- results.push([nick, i]);
- }
- }
- });
-
- // Sort the array
- results = results.sort(
- self.caseInsensitiveSort
- );
- } catch(e) {
- Console.error('Autocompletion.process', e);
- } finally {
- return results;
- }
-
- };
-
-
- /**
- * Resets the autocompletion tools
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.reset = function(hash) {
-
- try {
- $('#' + hash + ' .message-area').removeAttr('data-autocompletion-pointer')
- .removeAttr('data-autocompletion-query');
- } catch(e) {
- Console.error('Autocompletion.reset', e);
- }
-
- };
-
-
- /**
- * Autocompletes the chat input nick
- * @public
- * @param {string} hash
- * @return {undefined}
- */
- self.create = function(hash) {
-
- try {
- // Initialize
- var message_area_sel = $('#' + hash + ' .message-area');
- var value = message_area_sel.val();
-
- if(!value) {
- self.reset(hash);
- }
-
- var query = message_area_sel.attr('data-autocompletion-query');
-
- if(query === undefined) {
- // The autocompletion has not been yet launched
- query = self.getSubQueries(value);
- message_area_sel.attr('data-autocompletion-query', JSON.stringify(query));
- } else {
- // The autocompletion has already stored a query
- query = JSON.parse(query);
- }
-
- // Get the pointer
- var pointer = message_area_sel.attr('data-autocompletion-pointer');
- var i = pointer ? parseInt(pointer, 10) : 0;
-
- // We get the nickname
- var nick_result = self.process(query[0], hash)[i];
- var nick;
-
- if(nick_result !== undefined) {
- nick = nick_result[0];
- }
-
- // Shit, this is my nick!
- if((nick !== undefined) && (nick.toLowerCase() == Name.getMUCNick(hash).toLowerCase())) {
- // Increment
- i++;
-
- // Get the next nick
- nick_result = self.process(query[0], hash)[i];
-
- if (nick_result !== undefined) {
- nick = nick_result[0];
- }
- }
-
- // We quote the nick
- if((nick_result !== undefined) && (nick !== undefined)) {
- // Increment
- i++;
-
- Utils.quoteMyNick(
- hash,
- nick,
- query[1][nick_result[1]]
- );
-
- // Put a pointer
- message_area_sel.attr('data-autocompletion-pointer', i);
- }
- } catch(e) {
- Console.error('Autocompletion.create', e);
- }
-
- };
-
-
- /**
- * Return class scope
- */
- return self;
-
-})();