Newer
Older
WebMCR / upload / themes / default / js / global.js.back
@Qexy Qexy on 3 May 2015 8 KB WebMCR_Reloaded_Alpha_v1.0.0
function is_json(str){
	try{
		JSON.parse(str);
	}catch(e){
		return false;
	}
	return true;
}

function getParameterByName(name) {
	name = name.replace(/[\[]/, "\\[").replace(/[\]]/, "\\]");
	var regex = new RegExp("[\\?&]" + name + "=([^&#]*)"),
		results = regex.exec(location.search);
	return results == null ? "" : decodeURIComponent(results[1].replace(/\+/g, " "));
}

var base_url = $("base").attr("href");
var style_url = $('meta[name="style_url"]').attr("content");

function notify_closer(){

	if($('.close-alert').length >= 1){
		$('body .close-alert').parent().fadeOut("normal", function(){
			$(this).remove();
		});
	}
}

function notify(title, message, type){
	type = parseInt(type);
	switch(type){
		case 2: type = 'alert-error'; break;
		case 3: type = 'alert-success'; break;
		case 4: type = 'alert-info'; break;

		default: type = ''; break;
	}

	$('html, body').animate({scrollTop:0}, 'normal');

	$(".main-content").prepend('<div class="alert '+type+' ajx"><a href="#" class="close-alert">&times;</a><b>'+title+'</b> '+message+'</div>');

	setTimeout("notify_closer()", 2500);

	return true;
}

function send_ret_req(method, url, params){
	var req = null;
	try { req = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) {
		try { req = new ActiveXObject("Microsoft.XMLHTTP"); } catch (e) {
			try { req = new XMLHttpRequest(); } catch(e) {}
		}
	}
	if (req == null) throw new Error('XMLHttpRequest not supported');

	req.open(method, url, false);
	req.send(params);

	return req.responseText;
}

$.mcr_session = {
	url: base_url+"?mode=ajax&do=session",

	get: function(name){
		var params = "&name="+name.toString();
		return send_ret_req("GET", this.url+"&op=get"+params, null);
	},

	set: function(name, value){
		var params = "&name="+name.toString()+"&value="+value.toString();
		return send_ret_req("GET", this.url+"&op=set"+params, null);
	},

	remove: function(name){
		var params = "&name="+name.toString();
		return send_ret_req("GET", this.url+"&op=remove"+params, null);
	},
};

$.mcr = {
	mon_delay: 2000,

	remote_url: function(url, method, accept){
		var req = null;
		try{
			req = new ActiveXObject("Msxml2.XMLHTTP");
		}catch(e){
			try{
				req = new ActiveXObject("Microsoft.XMLHTTP");
			}catch(e){
				try{
					req = new XMLHttpRequest();
				}catch(e){}
			}
		}

		if (req == null) throw new Error('XMLHttpRequest not supported');

		var type = (accept===undefined) ? "text/plain" : accept;

		req.open(method, url, false);
		req.setRequestHeader("Accept",type);
		req.send(null);

		return req.responseText;
	},

	load_monitoring: function(){
		var data = $.mcr.remote_url(base_url+"?mode=ajax&do=monitor", 'GET');

		if(!is_json(data)){
			notify("Ошибка!", "Мониторинг временно недоступен", 1);
			return false;
		}

		$('.js-monitor').empty();

		$('.js-monitor').fadeIn('slow', function(){

			var jd	= JSON.parse(data);

			if(!jd._status){ $(this).html(jd._message); return false; }

			var jdd = jd._data;

			var i = 0;

			var count_players = 0;

			while(i<jdd.length){

				//console.log(jdd);

				var ar = jdd[i];

				i++;
				
				var m_data = $.mcr.remote_url("http://api.minetools.eu/query/" + ar.ip + "/" + ar.port, "GET");

				if(!is_json(m_data)){ continue; }

				var md = JSON.parse(m_data);
				
				$('.js-monitor').append(ar.form);

				if(md.error !== undefined){
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress').addClass('progress-danger');
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress > .bar').animate({width: "100%"}, 1000);
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress > .stats').html("Оффлайн");
				}else{
					var persent = md.Players / (md.MaxPlayers / 100);
					persent = parseInt(persent);
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress').addClass('progress-success');
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress > .bar').animate({width: persent+"%"}, 1000);
					$('.js-monitor > .monitor-id#'+ar.id+' > .progress > .stats').html(md.Players+" / "+md.MaxPlayers);
					count_players = count_players+md.Players;
				}

			}

			$('.js-monitor').append("Всего игроков: "+count_players);
			
			$("[rel='tooltip']").tooltip({container: 'body'});

			//$(this).append(jdd.form);

			return true;
		});
	},

	get_release_git: function(stable){

		var url = (stable===undefined || stable===true) ? "https://api.github.com/repos/qexyorg/WebMCR/releases" : "https://api.github.com/repos/qexyorg/WebMCR/tags";

		var data = this.remote_url(url, "GET", "application/json");

		if(!is_json(data)){
			notify("Ошибка!", "Произошла ошибка получения информации", 1);
			return "∞";
		}

		jsondata	= JSON.parse(data);

		if($.isEmptyObject(jsondata)){ return "∞"; }

		return '<a href="'+jsondata[0]['html_url']+'" target="_blank">'+jsondata[0]['tag_name']+'</a>';
	},

	get_version: function(){
		var data = this.remote_url("https://api.webmcr.com/?do=latest_version", "GET", "application/json");

		if(!is_json(data)){
			notify("Ошибка!", "Произошла ошибка получения информации", 1);
			return "∞";
		}

		var jsondata	= JSON.parse(data);
		var message		= jsondata.message;
		//var type		= jsondata.type; // unused variable

		return message;
	},
};

$(function(){

	$("[rel='tooltip']").tooltip({container: 'body'});

	$('.spl-body.closed').hide();

	setTimeout($.mcr.load_monitoring, $.mcr.mon_delay);
	
	$('.spl-btn').on("click", function(){
		var element = $(this).attr("data-click");
		$(".spl-body#"+element).toggleClass("opened").toggleClass("closed").slideToggle("fast");
		$('.spl-btn[data-click="'+element+'"]').toggleClass("opened").toggleClass("closed");

		if($(this).hasClass("session")){
			var session = $.mcr_session.get(element);

			if(session!='true'){
				$.mcr_session.set(element, true);
			}else if(session=='true'){
				$.mcr_session.set(element, false);
			}
		}

		return false;
	});


	
	$('.check-all').on("click", function(){
		var element = $(this).attr("data-for");

		var obj = $("."+element);

		var length = obj.length;

		var inc;

		for(inc=0; inc < length; inc++){

			if($(this)[0].checked==true){
				obj[inc].checked=true;
			}else{
				obj[inc].checked=false;
			}
		}

	});

	$('.remove').click(function(){

		if($(this).attr("data-checkbox")!='false'){
			var element = $(this).attr("data-for");
			var length = $('.'+element+':checked').length;

			if(length<=0){
				notify("Ошибка!", "Не выбрано ни одного пункта для удаления", 1);
				return false;
			}

		}
		
		var text = $(this).attr("data-text");
		if(!confirm(text)){ return false; }

		return true;
	});

	$('body').on("click", '.close-alert', function(){
		$(this).parent().fadeOut("normal", function(){
			$(this).remove();
		});
		return false;
	})

	$(".mcr-debug .action").on("click", function(){
		$(".mcr-debug").toggleClass("open");
		return false;
	});

	$(".bb-panel .bb").on("click", function(){

		var panel_id = $(this).parent().closest(".bb-panel").attr("id");

		var pid = ".bb-panel#"+panel_id;

		var panel_obj = $('textarea[data-for="'+panel_id+'"]')[0];

		var leftcode = $(this).attr("data-left");
		var rightcode = ($(this).attr("data-right")==undefined) ? leftcode : $(this).attr("data-right");

		if(!$(this).hasClass("woborder")){
			leftcode = '['+leftcode+']';
			rightcode = (rightcode=='') ? '' : '[/'+rightcode+']';
		}else{
			rightcode = (rightcode=='') ? '' : rightcode;
		}

		if(document.selection){

			var s = document.selection.createRange();
			if(s.text){
				s.text = leftcode + s.text + rightcode;
			}

		}else{ // Opera, FireFox, Chrome

			var start = (panel_obj.selectionStart==undefined) ? 0 : panel_obj.selectionStart;

			var end = (panel_obj.selectionEnd==undefined) ? 0 : panel_obj.selectionEnd;

			s = panel_obj.value.substr(start,end-start);

			panel_obj.value = panel_obj.value.substr(0, start) + leftcode + s + rightcode + panel_obj.value.substr(end);
		}

		return false;
	});

	$("#search-selector a").click(function(){

		var search_val = $("#search-hidden").val();

		$("#search-selector a#"+search_val).parent().removeClass("active");

		var id = this.id;

		$("#search-hidden").val(id);

		$(this).parent().addClass("active");

		return false;

	});

	$("#close-notify").click(function(){
		$(".block-notify").fadeOut("normal", function(){
			$(this).remove();
		});
		return false;
	});

	$(".edit").click(function(){
		
		var element = $(this).attr("data-for");
		var length = $('.'+element+':checked').length;
		var link = $(this).attr("data-link");

		if(length<=0){
			notify("Ошибка!", "Не выбрано ни одного пункта для удаления", 1);
			return false;
		}else if(length>1){
			notify("Ошибка!", "Для редактирования необходимо выбрать только один пункт из списка", 1);
			return false;
		}

		var id = $('.'+element+':checked').val();

		window.location.href = link+id;
		
		return false;
	});
});