Вход Регистрация
Файл: Arhmobi_esdcms/sys/themes/.common/dcmsApi.js
Строк: 63
<?php
(function ($) {
    if (
typeof $ == "undefined")
        return;
    var 
api = $.fn.dcmsApi = {
        
_timeout: null,
        
_queue: [],
        
/**
         * Постановка запроса в очередь
         * @param {string} module Модуль, к которому обращаемся (php class в [/sys/plugins/classes/*] Должен быть реализацией интерфейса api_controller )
         * @param {string} method Метод, который будет вызываться у модуля (статичный метод класса)
         * @param {*} params Параметры, с которыми будет вызван метод
         * @param {function} callback Обработчик успешно выполненного запроса
         * @param {function} [callbackE] Обработчик ошибки при выполнении запроса
         */
        
request: function (module, method, params, callback, callbackE) {
            if (
api._timeout)
                
clearTimeout(api._timeout);
            
api._queue.push({
                
module: module,
                
method: method,
                
p: params,
                
c: callback,
                
ce: callbackE
            
});
            
api._timeout = setTimeout(api.start, 20);
        },
        
/**
         * Отправка очереди запросов на сервер
         */
        
start: function () {
            var 
requests = [];
            var 
queue = api._queue;
            
api._queue = [];
            for (var 
i = 0; i < queue.length; i++) {
                var 
req = queue[i];
                
requests.push({
                    
module: req.module,
                    
method: req.method,
                    
data: req.p
                
});
            }
            $.
post('/sys/api.php', {
                
requests: JSON.stringify(requests)
            }).
                
done($.proxy(api._done, this, queue)).
                
fail($.proxy(api._fail, this, queue));
        },
        
/**
         * Обработка ответа сервера и выполнение отдельных c`ов из очереди
         * @param queue
         * @param response
         * @private
         */
        
_done: function (queue, response) {
            for (var 
i = 0; i < queue.length; i++) {
                try {
                    if (
response[i].error)
                        
queue[i].ce.call(this);
                    else
                        
queue[i].c.call(this, response[i].data);
                } catch (
e) {

                }
            }
        },
        
_fail: function (queue) {
            for (var 
i = 0; i < queue.length; i++) {
                try {
                    
queue[i].ce.call(this);
                } catch (
e) {

                }
            }
        }
    };
})(
jQuery);

// создаем модуль для AngularJs, который проксирует запросы через jQuery
if (window.angular){
    (function (
angular) {
        if (
typeof angular == "undefined")
            return;
        
angular.module('dcmsApi', [])
            .
factory('dcmsApi', function ($q) {
                var 
api = $().dcmsApi;
                return {
                    
/**
                     * Запрос к API DCMS
                     * @param {string} module
                     * @param {string} method
                     * @param {*} params
                     * @returns {Function|promise}
                     */
                    
request: function (module, method, params) {
                        var 
deferred = $q.defer();
                        
api.request.call(this, module, method, params,
                            function (
data) {
                                
deferred.resolve(data);
                            }, function () {
                                
deferred.reject();
                            });
                        return 
deferred.promise;
                    }
                };
            });
    })(
window.angular);
}
?>
Онлайн: 0
Реклама