/* * ==================================== * Class AXIS.ParamRequest * Source: packages/web/sharedjs/data/ * =================================== * */ /*globals $, _ */ 'use strict'; var AXIS = AXIS || {}; AXIS.ParamRequest = function () { AXIS.ParamRequest.instance = this; this.onDataSuccess = null; this.onDataError = null; this.url = ''; this.components = null; }; AXIS.ParamRequest.getBaseUrl = function () { return location.protocol + '//' + location.hostname + (location.port && ':' + location.port) + '/'; }; AXIS.ParamRequest.getQueryValueByKey = function (key, query) { if (_.isUndefined(query)) { query = window.location.search.substring(1); } query = query.substring(query.indexOf('?') + 1); var vars = query.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) === key) { return decodeURIComponent(pair[1]); } } return null; }; AXIS.ParamRequest.replaceQueryValueByKey = function (urlQuery, key, value) { var start = urlQuery.substring(0, urlQuery.indexOf('?') + 1); urlQuery = urlQuery.substring(urlQuery.indexOf('?') + 1); var vars = urlQuery.split('&'); for (var i = 0; i < vars.length; i++) { var pair = vars[i].split('='); if (decodeURIComponent(pair[0]) == key) { vars[i] = key + '=' + value; } } return start + vars.join('&'); }; AXIS.ParamRequest.parseParamList = function (result) { var lines = result.split('\n'); var data = {}; _.each(lines, function (value) { value = value.replace('\r', ''); if (value.length > 0) { var lineData = value.split('='); this[lineData[0]] = lineData[1]; } }, data); return data; }; AXIS.ParamRequest.prototype = { isBusy : false, call: function (url, onDataSuccess, onDataError, onDataAlways, postData) { var type = 'GET'; this.onDataSuccess = onDataSuccess; this.onDataError = onDataError; this.onDataAlways = onDataAlways; this.url = url; this.isBusy = true; if (!_.isUndefined(postData)) { type = 'POST'; } else { postData = {}; } $.ajax({ type: type, data: postData, url: url, cache: false }) .done(function (data) { var instance = AXIS.ParamRequest.instance; if (_.isString(data) && data.indexOf('root.') > -1) { data = AXIS.ParamRequest.parseParamList(data); } instance.isBusy = false; if (instance.onDataSuccess) { instance.onDataSuccess(data); } }) .fail(function (data) { AXIS.ErrorService.log(AXIS.ParamRequest, 'Couldn not fetch data:' + data, AXIS.ErrorService.INFO); var instance = AXIS.ParamRequest.instance; instance.isBusy = false; if (instance.onDataError) { instance.onDataError(data); } }) .always(function (data) { var instance = AXIS.ParamRequest.instance; instance.isBusy = false; if (instance.onDataAlways) { instance.onDataAlways(data); } }); }, post: function (url, data, onDataSuccess, onDataError, onDataAlways) { this.call(url, onDataSuccess, onDataError, onDataAlways, data); }, updateComponentParameters: function (baseUrl, components) { this.components = components; var params = ''; _.each( components, function (element) { if (_.has(element, 'getUpdateParams') && _.isFunction(element.getUpdateParams)) { var tempParams = element.getUpdateParams(); if (tempParams && tempParams.length > 0) { params += tempParams; } } else { throw new Error(''); } } ); if (params.length > 0) { baseUrl += '?' + params; this.call(baseUrl + '?' + params); } return baseUrl; }, //Deprecated - use call() instead loadData : function (onDataSuccess, onDataError, url) { AXIS.ErrorService.log(AXIS.ParamRequest, 'loadData method is deprecated, use call() instead.', AXIS.ErrorService.WARN); this.onDataSuccess = onDataSuccess; this.onDataError = onDataError; url = this.getBaseUrl() + url; this.isBusy = true; this.call(url, onDataSuccess, onDataError); }, getBaseUrl: function () { return AXIS.ParamRequest.getBaseUrl(); } };