Вход Регистрация
Файл: js/mail/typing.js
Строк: 182
<?php
var SCRIPTS_URL = '/ajax/mail/', 
    
CHECK_TYPING_URL = SCRIPTS_URL + 'check_typing.php', 
    
UPDATE_TYPING_URL = SCRIPTS_URL + 'update_typing.php';

var 
CHECK_TYPING_TIMEOUT = 2000, 
    
TYPING_WAIT_TIME = 10;

function 
handleJsonErrors(json) {
    if (
json == undefined || json.error != undefined) {
        
showError(json == undefined ? 'Произошла ошибка' : json.error);
        return 
true;
    }

    return 
false;
}

function 
showError(error) {
    
alert(error);
}

var 
MailTyping = function (id_user) {
    var 
self = this;
    var 
$inputMsg, $typingElement, $typingDotsElement;

    
// handlers
    
var typingHandler, dotsHandler;
    var 
checkTypingTimeout;

    
// jqXHR
    
var checkTypingXHR, typingXHR;

    var 
isTyping = false, 
        
isUserTyping = false, 
        
lastTypingTime;

    $(
document).ready(function () {
        
$inputMsg = $('#inputMsg');
        
// for altername_post_form.php
        
if ($inputMsg.length == 0)
            
$inputMsg = $('textarea[name="msg"]');
        
// for mail by iskatel'
        
if ($inputMsg.length == 0)
            
$inputMsg = $('#messages');
        
$typingElement = $('#typing');
        
$typingDotsElement = $('#typingDots');

        
self.initListeners();

    });

    
this.initListeners = function () {

        
$inputMsg.on('input', function () {
            if (!
isTyping) {
                
isTyping = true;

                
self.updateTyping();
            }

            if (
typingHandler != undefined)
                
clearInterval(typingHandler);

            
typingHandler = setTimeout(function () {
                
isTyping = false;

                
self.updateTyping();
            }, 
1000);
        });

        
self.setCheckTypingTimeout();
    }

    
this.setCheckTypingTimeout = function () {
        
self.abortCheckTyping();

        
checkTypingTimeout = setTimeout(function () {
            
self.checkTyping(function () {
                
self.setCheckTypingTimeout();
            });
        }, 
CHECK_TYPING_TIMEOUT);
    }

    
this.abortCheckTyping = function () {
        if (
checkTypingTimeout != undefined)
            
clearInterval(checkTypingTimeout);

        if (
checkTypingXHR != undefined)
            
checkTypingXHR.abort();
    }

    
this.updateTyping = function () {
        if (
typingXHR != undefined)
            
typingXHR.abort();

        
typingXHR = $.ajax({
            
url: UPDATE_TYPING_URL, 
            
type: 'post', 
            
data: {
                
id_user: id_user, 
                
is_typing: isTyping
            
},  
            
success: function (json) {
                if (
handleJsonErrors(json))
                    return;
            }
        });
    }

    
this.checkTyping = function (completeCallback) {
        
checkTypingXHR = $.ajax({
            
url: CHECK_TYPING_URL, 
            
type: 'post', 
            
data: {
                
id_user: id_user, 
                
is_typing: isUserTyping
            
}, 
            
success: function (json) {
                if (
handleJsonErrors(json))
                    return;

                
isUserTyping = json.is_typing;
                var 
mailTypingId = json.mailTypingId;

                if (
mailTypingId != id_user && isTyping)
                    
self.updateTyping();

                if (
dotsHandler != undefined)
                    
clearInterval(dotsHandler);

                
lastTypingTime = json.time;
                if (
lastTypingTime < unixTimestamp() - TYPING_WAIT_TIME)
                    
isUserTyping = false;

                
self.updateUserIsTyping();
            }, 
            
complete: function () {
                if ($.
isFunction(completeCallback))
                    
completeCallback();
            }
        });
    }

    
self.updateUserIsTyping = function () {
        if (
isUserTyping) {
            
dotsHandler = setInterval(function () {
                
self.updateDots();
            }, 
200);
            
$typingElement.show(100);
        }
        else
            
$typingElement.hide(100);
    }


    
self.updateDots = function () {
        var 
dots = $typingDotsElement.text();
        var 
objs = {'': '.', '.': '..', '..': '...', '...': ''};
        
$typingDotsElement.text(objs[dots]);
    }
}
?>
Онлайн: 1
Реклама