Вход Регистрация
Файл: 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 typingHandlerdotsHandler;
    var 
checkTypingTimeout;

    
// jqXHR
    
var checkTypingXHRtypingXHR;

    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({
            
urlUPDATE_TYPING_URL
            
type'post'
            
data: {
                
id_userid_user
                
is_typingisTyping
            
},  
            
success: function (json) {
                if (
handleJsonErrors(json))
                    return;
            }
        });
    }

    
this.checkTyping = function (completeCallback) {
        
checkTypingXHR = $.ajax({
            
urlCHECK_TYPING_URL
            
type'post'
            
data: {
                
id_userid_user
                
is_typingisUserTyping
            
}, 
            
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]);
    }
}
?>
Онлайн: 0
Реклама