Вход Регистрация
Файл: sys/static/js/ds-ajax.js
Строк: 111
<?php
/**
* Разработано для CMS-Social v3
* Project URL:  https://cms-social.ru
*
* Система интервального опроса сервера
* Позволяет регистрировать различные типы уведомлений с гибкой 
* настройкой callback параметров в момент опроса
* И при получении данных от сервера выполнять пользовательскую callback функцию

* Author:       alex-borisi
* E-Mail:       alex-borisi@ya.ru
* Author URL:   https://andryushkin.ru
*/ 

function DS_Ajax_Events() 
{
    
this.ds_events = {}; 

    
/**
    * $events.setEvents(eventName, {data, success})
    * eventName (string) Название (идентификатор) события 
    * data (function | [string, object, ..]) Данные для отправки на сервер
    * success (function) Функция будет отработана если пришел ответ с результатом
    */ 

    
this.setEvents = function(eventNameeventArgs) {
        
let obj = {
            
datatrue
        }

        
// Если нет данных для передачи
        
eventArgs Object.assign(objeventArgs);

        
Object.defineProperty(this.ds_eventseventName, {
            
value: {
                
eventName eventName
                
eventArgs eventArgs
            }, 
            
enumerabletrue
            
configurabletrue
        }); 
    }

    
/**
    * Получить все зарегистрированные запросы
    * $events.getEvents()
    * @return object
    */ 

    
this.getEvents = function() {
        return 
this.ds_events
    }

    
/**
    * $events.doEvent() 
    * Запускает callback функцию при получении результа
    */ 

    
this.doEvent = function(eventNameeventResult) {
        var 
objectEvent Object.getOwnPropertyDescriptor(this.ds_eventseventName); 

        if (
typeof objectEvent == 'object') {
            
objectEvent.value.eventArgs.success(eventResult);  
        }
    }

    
/**
    * $events.delete(eventName) 
    * Удаляет зарегистрированное уведомление
    */ 

    
this.delete = function(eventName) {
        
delete this.ds_events[eventName]; 
    }
}

/**
* Глобальный объект Ajax уведомлений
* $events.setEvents()
* $events.getEvents()
* $events.doEvent()
*/ 

var $events = new DS_Ajax_Events();  

/**
* Система работает в связке с jQuery, поэтому регистрировать собственные обработчики
* лучше всего, когда jQuery был инициализирован. 
*/ 

jQuery(function($) {
    
setInterval(function() {
        var 
events $events.getEvents(); 

        
/**
        * С каждым опросом сервера, формируем данные для отправки на сервер
        */ 
        
var ajax_data_setup = {}; 

        for(
let key in events) {
            if (
typeof events[key].eventArgs.data == 'function') {
                var 
data events[key].eventArgs.data(); 
            } else {
                var 
data events[key].eventArgs.data
            }

            
/** Если callback_data вернет false то данный тип не будет отправлен **/
            
if (data !== false) {
                
Object.defineProperty(ajax_data_setupevents[key].eventName, {
                    
valuedata
                    
enumerabletrue
                });            
            }
        }

        $.
ajax({
            
type"POST",
            
url'/ds-ajax/?action=ds_events',
            
data: {
                
jsonJSON.stringify(ajax_data_setup)
            },
            
dataType'json',
            
success: function(events) {

                
/**
                * Ответ содержит массив данных, с ключом ie равным идентификатору 
                * зарегистрированного типа уведомлений, и event с данными ответа.
                */ 
                
$.each(events, function(ieevent) {
                    
$events.doEvent(ieevent); 
                });
            }
        }); 
    }, 
1000); 
});
?>
Онлайн: 0
Реклама