osu! my download

ous beatmap download from mirror.osu beatmap镜像站下载。支持的镜像站点:bloodcat.com、osu.mengsky.net、inso.link。

Verze ze dne 20. 12. 2016. Zobrazit nejnovější verzi.

// ==UserScript==
// @name           osu! my download
// @description    ous beatmap download from mirror.osu beatmap镜像站下载。支持的镜像站点:bloodcat.com、osu.mengsky.net、inso.link。
// @author         dazzulay
// @copyright      2014+, dazzulay
// @version        2.0.0
// @icon           http://osu.ppy.sh/favicon.ico
// @include        http*://osu.ppy.sh/b/*
// @include        http*://osu.ppy.sh/s/*
// @include        http*://osu.ppy.sh/p/beatmap*
// @include        http*://new.ppy.sh/beatmapsets/*
// @grant          none
// @namespace      https://greasyfork.org/scripts/3916
// @homepageURL    https://greasyfork.org/scripts/3916
// ==/UserScript==
$(function() {
	function osu_my_downoad(){
		var self = this;
		this.mirros = {
			bloodcat: {
				url: 'http://bloodcat.com/osu/m/{bmid}',
				class: 'my_orange',
				text: 'DOWNLOAD BLOODCAT'
			},
			mengsky: {
				url: 'http://osu.mengsky.net/api/download/{bmid}',
				class: 'my_green',
				text: 'DOWNLOAD MENGSKY'
			},
			insolink: {
				url: 'http://inso.link/?source=osu_my_download&m={bmid}',
				class: 'my_pink',
				text: 'DOWNLOAD INSO.LINK',
				target: '_blank'
			}
		};
		this.mirros_parse = function(bmid){
			$.each(self.mirros,function(k,v){
				self.mirros[k].url = str_render(v.url,{bmid:bmid});
			});
		};
		this.drives = {
			osu_ppy_sh:function(){
				// css样式 设置
				$('head').append('<style>.my_container{position:fixed;top:20px;right:0px;}.my_btn{text-align: center;width:150px;height:111px;display:table-cell;vertical-align:middle;margin:0 0 10px 0;padding:10px;font-family:Haettenschweiler,Impact,"Arial Grande",Tahoma,Helvetica,Arial,sans-serif;font-size:32px;font-weight:normal;color:#fff;border:4px solid #fff;border-radius:6px;}.my_btn:hover{text-shadow:0 0 20px floralwhite;color:#fff;}.my_orange{background:linear-gradient(to bottom,darkorange,orange,darkorange);}.my_blue{background:linear-gradient(to bottom,darkblue,blue,darkblue);}.my_green{background:linear-gradient(to bottom,darkgreen,green,darkgreen);}.my_pink{background:linear-gradient(to bottom,HotPink,pink,HotPink);}.my_btn span{display:inline-block;vertical-align:middle;text-align:center}</style>');

				// 获取beatmapid
				var bmsrc = $('.bmt').attr('src');
				var bmid = bmsrc.substring(bmsrc.indexOf("thumb/")+6,bmsrc.lastIndexOf("l"));

				// 设置url
				self.mirros_parse(bmid);

				// 添加按钮
				var $container = $('<div class="my_container"></div>');
				var btn_tpl = '<a class="my_btn {class}" href="{url}" target="{target}"><span>{text}</span></a><br/>';
				$.each(self.mirros,function(k,v){
					$container.append(str_render(btn_tpl,self.mirros[k]));
				});
				$('body').append($container);
			},
			new_ppy_sh:function(){
				// css样式 设置
				$('head').append('<style>.my_container a:before{content:" ";position:absolute;left:0;right:0;top:0;bottom:0}.my_orange:before{background-color:rgba(255,141,0,.5)}.my_green:before{background-color:rgba(0,101,0,.5)}.my_pink:before{background-color:rgba(255,107,181,.5)}</style>');

				// 获取beatmapid
				var bmsrc = $('.js-beatmapset-page--audio-preview').attr('src');
				var bmid = bmsrc.substring(bmsrc.lastIndexOf("/")+1,bmsrc.lastIndexOf("."));

				// 设置url
				self.mirros_parse(bmid);

				// 添加按钮
				var $container = $('<div class="beatmapset-header__buttons my_container"></div>');
				var btn_tpl = '<a href="{url}" class="btn-osu-big btn-osu-big--beatmapset-header {class}"  target="{target}"><div class="btn-osu-big__content"><div class="btn-osu-big__left"><span class="btn-osu-big__text-top">{text}</span></div><div class="btn-osu-big__icon"><span class="fa fa-download"></span></div></div></a>';
				$.each(self.mirros,function(k,v){
					$container.append(str_render(btn_tpl,self.mirros[k]));
				});
				console.log($container.html());
				$('.beatmapset-header__box--main').append($container);
			}
		};
		this.init=function(){
			var domain = document.domain;
			var drive = domain.replace(/\./g,'_');
			self.drives[drive]();
		};
		self.init();
	}
	osu_my_downoad();
	
	function str_render(template, context) {

		var tokenReg = /(\\)?\{([^\{\}\\]+)(\\)?\}/g;

		return template.replace(tokenReg, function (word, slash1, token, slash2) {
			if (slash1 || slash2) {
				return word.replace('\\', '');
			}

			var variables = token.replace(/\s/g, '').split('.');
			var currentObject = context;
			var i, length, variable;

			for (i = 0, length = variables.length; i < length; ++i) {
				variable = variables[i];
				currentObject = currentObject[variable];
				if (currentObject === undefined || currentObject === null) return '';
			}
			return currentObject;
		});
	}
});