Base.js

/**
 * Базовый класс приложения
 *
 * @class Base
 * @author Ihor Bielchenko
 */
class Base {

	state = {
		body: document.getElementById('root')
	}

	/**
	 * Отправка запроса через XMLHttpRequest
	 * @param {String} query Адрес запроса
	 * @param {String} method Метод запроса
	 * @param {Function} callback Функция обратного вызова
	 * @async
	 */
	sendXHR(query = '', method = 'GET', callback = () => {}) {
		this.state.body.style.opacity = .5;
		setTimeout(() => {
			callback({success: 1, data: []});
			this.state.body.style.opacity = 1;
		}, (Math.random() * (2000 - 120) + 120));

		/*let XHR = ('onload' in new XMLHttpRequest()) ? XMLHttpRequest : XDomainRequest;
		let xhr = new XHR();

		xhr.open(method, query, true);
		xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
		xhr.send();

		xhr.onreadystatechange = () => {
			if(xhr.status === 200 && xhr.readyState === 4) {
				callback(xhr.response);
			}
		}*/
	}

	/**
	 * Отправка данных на сервер через соккет
	 * @param {String} query Строка запроса
	 * @param {Function} callback
	 * @param {Number} opacity Засветлять страницу при загрузке
	 */
	serverSEND(query = '', callback = () => {}, opacity = 1) {
		//window.conn.send(query);

		if(opacity === 1) {
			this.state.body.style.opacity = .5;
		}

		setTimeout(() => {
			callback({success: 1, data: []});

			if(opacity === 1) {
				this.state.body.style.opacity = 1;
			}
		}, (Math.random() * (2000 - 120) + 120));
	}

	/**
	 * Получение сообщений с сервера через соккет
	 * @fires onmessage
	 * @param {Object} e
	 */
	serverGET(e) {

	}

	/**
	 * Обновление адресной строки
	 * @param {String} ресурс
	 */
	changeURL(resource = '#') {
		window.history.pushState({}, null, resource);
		var event = new CustomEvent('change-page', {
			detail: {
				resource: resource
			}
		});
		document.dispatchEvent(event);
	}
};

export default new Base();