Greasy Fork

Greasy Fork is available in English.

osu! my download

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

当前为 2016-12-29 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==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.2
// @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      http://greasyfork.icu/scripts/3916
// @homepageURL    http://greasyfork.icu/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;border-radius:4px;}.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]));
				});
				$('.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;
		});
	}
});