您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Adds Content Manager support to RSR Live Timing website, The Setup Market, AC Club and Assetto-DB.
// ==UserScript== // @name AC Content Manager Installation Buttons // @namespace http://tampermonkey.net/ // @homepageURL https://github.com/gro-ove/actools-cm-download-extension // @version 0.2.5 // @description Adds Content Manager support to RSR Live Timing website, The Setup Market, AC Club and Assetto-DB. // @author x4fab // @match http://assettocorsa.club/* // @match http://www.assetto-db.com/* // @match http://assetto-db.com/* // @match http://thesetupmarket.com/* // @match http://www.radiators-champ.com/RSRLiveTiming/* // @grant none // @license MIT License // @run-at document-end // @icon data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADBQTFRF/wAAzAAAmf8AmQAAZv8AZswAZpkAZmZmZjMzM5kAM2YzM2YAMzMzMzMAAAAAXl5e7+St3wAAABB0Uk5T////////////////////AOAjXRkAAAHSSURBVHjatNfZsoMgDIBhcGkUI7z/2x5Ay2ZiqM7hppNO/89ujqjcy6X+B1gWeAWA1q8A0OoV4PtXQOjfALF/ARz9c+DsHwPf/imQ+odA7p8BRV8B0AmUvRqh97xQZK8xRYseu4Cmz8fXqgIAm0mJfQWAtc2kxL4EfGGbSYl9AYTCNpMS+wzEwjaTSq/j+gQchW0mJR0/AWdhm8kDQn8C38I2UwWQ/QGkwjZTCdB9BHJhm6kAmD4ARWGbKQO+ByD68Lwtk3pKQHjdOMo9B8RejXLPAEcfAaGngbMPwE2/xQVm2/YG+PYeAL7fpyGsyT+sNZB6tdy9/31K61MBuVf67vOzQO6rdfn+OMB19jzQ2fMfobPngc7+F4DsfwDongSQAi49IgdguLSB2J+nzxVARwBE7y7AmvoLQPUO4mm4ZmCOTxg4AC317jNMxBqmE8ByUb0zE72A2icSvYOZ7I0IYLoOUsIGTgAwX4h3rr8ASPQewPZrGFZg9spEH7ZC0Agf4wQAm70ZbGU/oxMAvOztYKV6DkBib2jy/wmdACC5t8S5/APcAcjsTU9hA3cPILu3DUL6AVkAb/bGXkg/IAfc9Q6MAeGmC7tvNf715vuH9SfAAHw2q5zSfJAiAAAAAElFTkSuQmCC // ==/UserScript== (function() { function _$(selector, fn, p){ var e = (p || document).querySelector(selector); return fn ? e ? fn(e) : undefined : e; } function _$each(selector, fn, p){ Array.prototype.forEach.call((p || document).querySelectorAll(selector), fn); } function _$map(selector, fn, p){ return Array.prototype.map.call((p || document).querySelectorAll(selector), fn); } function _$some(selector, fn, p){ return Array.prototype.some.call((p || document).querySelectorAll(selector), fn); } function _$every(selector, fn, p){ return Array.prototype.every.call((p || document).querySelectorAll(selector), fn); } function _$filter(selector, fn, p){ return Array.prototype.filter.call((p || document).querySelectorAll(selector), fn); } // custom CSS function _$css(data, id){ if (!id){ id = '__cm_extention_style'; } var s = document.getElementById('__cm_extention_style'); if (s){ s.parentNode.removeChild(s); } s = document.body.appendChild(document.createElement('style')); s.id = '__cm_extention_style'; if (s.styleSheet) { s.styleSheet.cssText = css; } else { s.appendChild(document.createTextNode(typeof data === 'function' ? ''.slice.call(data, 14, -3) : data)); } } // as a variable, it can be easily redefined later for userscript format var _$res = function (url){ return (typeof browser !== 'undefined' ? browser : chrome).extension.getURL(url); }; _$res = function (url){ if (url == "img/icon-acclub.png") return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAMAAACdt4HsAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAA9QTFRFmZmZZmZmMzMzAAAAgYGBlaSnFAAAAAV0Uk5T/////wD7tg5TAAABkElEQVR42qSXSwLDIAgFBbz/mVvjJ4CgQbN7qTOmVgxN+fJK9t2UrgRABDeCP38lKPyN4OEvBJU/FzT+WND5U8HgDwUvfyZg/JGA8ycCwTMBIHwSSP4V7Ooi2fyYVdcFgExdsOK5AFAkolb3S16sh0jUBWuerQeq1WmCDT+Qhyf5aRHs+I5UfiTqgi3fkMb3RF2QcMdXpPMtkSOw+AcZfE3kCEy+IC//JHIEmJy6YHxJ5AjQqwvO/xM5AsyIYO4rsUwyMcGf1yv03v8gqONg5tXv7AnaPLDlHUF/TtjytmB8zz1vCvQ6rXhLEOInwX+XpQg/C3JofvMJQrwhiPGzAGP8N8GC/yRY8bI20RRoHlGcWTIZglX9lQNDplkw8++Q58CRaRIY/BhSDyyZtMDi+5B2ZstUdiK/wOAb0s98mXSjafH15nhnyKQFZqODnFDJ61TFex05oZISJLPRQk5kwa/WwOv0ZPIFcNbuY7RV9QTHfzgwyDuC77wtCPCmIMJbWznEz0+AMT6nfHldC34CDADQEDTb2F/V3AAAAABJRU5ErkJggg=="; if (url == "img/icon-thesetupmarket-16.png") return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAXxJREFUeNqMk7EvBFEQxt/e7l7uGnH+AIlCgY4gEoUEhRONQnKVUPkP5FqFQqGSoCDXKYRaSSUhIiERQbLonKwlud3mbNY38l2MjZOb5JedNzvf7Hszby3f943rukaZA+ZBBcTmH6vX68aEYWiSJNHsgttU7E+iKDIZcZRtggUQmRZMtJmUeIl+yGcWlIDOy/3ya7Wa7GIj+bFn0Ackvg+u1La3QIn+KI5/JAW02AM9TKgwdsz1OtdF0AveUMCTApfqyyNM3lFFD8CqWq+AJ3FQ4Nrh2B6BB8bAHFjkGW/YhzLXMtZp0KlnfgK6wQQYAG1KfA9m0uNPX5oPMAmsJmI9AZuahuXl5RTFpok44EfEHsCZyj2UanegwEAVvCix+LNgj1svgnHmroFlmUIWDc2RIdXtKujnVE75Tvwy2BZffgMpoO/3MMWvYJAxB7SrnELDlwKZVIfzPIZs9ZyxT/CucgItsIIgMLZtG8v67mMX6AAXrfxIcRybLwEGAPyuf5tj/yp0AAAAAElFTkSuQmCC"; if (url == "img/icon-radiatorschamp-30.png") return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAB4AAAAeCAMAAAAM7l6QAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAACFQTFRF///////M/8zM/8yZ/5mZzJmZzJlmzGZmzGYzzDMz////Hc17DAAAAAt0Uk5T/////////////wBKTwHyAAAA5ElEQVR42nzT2xaEIAgF0BNBaP//wcNFDWfWxFOyVwRquFfg/o0nB+CFwfTyNs7+wqYv7PqfQ5O/+sNSicdjlMMapipp5gmp2LUHQ3yJQ82pajDE10DrxlrV2dQSri350X7B1TJH64MlWgjV1M5RNNhUUFWJyGZIJi+wvcunqjIn59e3ypc3IcF3fKVq52gueaQebQ/PuWtlSpExve5qA1Pw2di3TqxNvZbaBvhMOV2cSsSjfYav5rmP9TzfcRCVedwBGd3cG/N6lqmFufwRajuy3fND6h3ERTt/31D8/+9KfAQYAH4FGSoAsxbPAAAAAElFTkSuQmCC"; if (url == "img/icon-radiatorschamp-48.png") return "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAMAAABg3Am1AAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAADxQTFRF/8wA/5kA/wAAzJkAzAAAmWYAmQAzmQAAZmYAZjMAZgAzZgAAMzMzMzMAMwAzMwAAADMzAAAzAAAAogAl5T9rCwAAABR0Uk5T/////////////////////////wBPT+cRAAACAElEQVR42pSVi5KDIAwAqUoU0EvB///XSyCAUOzUzPRBu8sjAVFnFxbOr6G6Njj7SIB1ck8E4h8JzC8PBOafCJF/ICT+d0H4nxdd+B9HKPy0imAdfBEqv2Di7DKVkkNVAVTPJ8yu05IF+MPMu92qngfhiwC4/0HmozDsvwjE7zJN4nen7ngRmBeBeRLu+CREPgmRJ8Hd8FFIfBQSz8LS8TAVQXgWhK9CyX+tIJzC71j4IlD/sbKVX1zun4TCZ2FxNp5Ne6144XfETiDe8Ta94Tsh/su5stDx3l+n9PZvGYHnH6GWfx96O/aDYj+QXps2PgprnA9RHb/NH7G9SbDC10jzOebZGIYyTS1lPO2lc8j7TekQNL2JQS36yVsFQ3735qU9WZs3InivqWWVXUY8TUkTY6jPPAJ/OWhKrVDz79nQF0EzH7oRrvUKZEjHohwhOGiEbj8EyovOa5gN+kA79Co0PHWGMVUlS5E/qXCLxOoanp4W3LtO/Gvz6eApwBK26Z8Erl6pW0gnRkGNlmch1BUL39wP2PB8QAPqnCHhh0LiSQjO4kYKbdvMNxcKNjxdqLwQ5F2IhR8ImT9Fw3nGy+P4Qwj9Y97Ns7u543DEk/D6InS8M8bwounDDYWOB/OSfUqVHqW1nw/wCBKDOsDHtQaU2RwwEAZXYN03+Zd/AQYAX0xuXwD83e4AAAAASUVORK5CYII="; return ''; }; if (/^http:\/\/assettocorsa\.club\/.*/i.test(location.href) || /^https:\/\/assettocorsa\.club\/.*/i.test(location.href)){ if (_$('p.download a', function (x){ return x.textContent; }) == 'DOWNLOAD'){ _$('.spec > div', function (x) { x.style.width = '60%'; }); _$('.spec > div:last-child', function (x) { x.style.width = '40%'; }); _$each('.__cmspecial', function (x){ x.parentNode.removeChild(x); }); _$('p.download a', function (x) { var c = x.cloneNode(); c.classList.add('__cmspecial'); c.removeAttribute('target'); c.setAttribute('href', 'acmanager://install?url=' + encodeURIComponent(x.href)); c.textContent = 'INSTALL'; c.setAttribute('style', 'color: rgb(100, 166, 112); padding: 0px 0px 6px 40px; line-height: 33px; margin: 2px 0px 2px 12px;' + 'background: url(' + JSON.stringify(_$res('img/icon-acclub.png')) + ') left center / contain no-repeat;' + 'display: inline-block;'); x.parentNode.insertBefore(c, x.nextSibling); }); } } else if (/^http:\/\/www\.assetto-db\.com\/.*/i.test(location.href) || /^http:\/\/assetto-db\.com\/.*/i.test(location.href)){ _$each('.__cmspecial', function (x){ x.parentNode.removeChild(x); }); _$('.carDetails a[href^="/"][href$="/download"]', function (x) { var c = x.cloneNode(); c.classList.add('__cmspecial'); c.removeAttribute('target'); c.setAttribute('href', 'acmanager://install?url=' + encodeURIComponent(location.href)); c.textContent = 'Install using Content Manager'; // with hue filter, hover/active colors are already there, and also it won’t look weird // in case of sudden redesign c.setAttribute('style', 'filter:hue-rotate(-120deg);-webkit-filter:hue-rotate(-120deg)'); c.classList.remove('btn-default'); c.classList.add('btn-primary'); x.parentNode.insertBefore(c, x.nextSibling); }); } else if (/^http:\/\/thesetupmarket\.com\/.*/i.test(location.href)){ if (!_$('#__cm_stop')){ // if you would need to stop CM, just add empty element with ID=__cm_stop somewhere var observeDOM = (function(){ var MutationObserver = window.MutationObserver || window.WebKitMutationObserver, eventListenerSupported = window.addEventListener; return function(obj, callback){ if (MutationObserver){ var obs = new MutationObserver(function(mutations, observer){ if (mutations[0].addedNodes.length || mutations[0].removedNodes.length){ callback(); } }); obs.observe(obj, { childList: true, subtree: true }); } else if (eventListenerSupported){ obj.addEventListener('DOMNodeInserted', callback, false); } }; })(); observeDOM(document.body, function(){ _$each('.icon-details.icon-link[href^="#/setups/Assetto Corsa/"]:not(.__cmspecial)', function (x){ x.classList.add('__cmspecial'); var c = x.cloneNode(true); x.parentNode.appendChild(c); c.setAttribute('href', 'acmanager://thesetupmarket/setup?id=' + (x.href.match(/\/([\w-]+)\/?$/) || {})[1]); c.setAttribute('style', 'color:transparent;background:url(' + JSON.stringify(_$res('img/icon-thesetupmarket-16.png')) + ');background-repeat:no-repeat;background-position:center;'); }); _$each('.link.icon-download.fixed-download-link:not(.__cmspecial)', function (x){ var i = setInterval(function (){ var id = (x.href.match(/\/([\w-]+)\/?$/) || {})[1]; if (id == null) return; clearInterval(i); x.classList.add('__cmspecial'); var c = x.cloneNode(true); x.parentNode.appendChild(c); c.classList.remove('icon-download'); c.textContent = 'install using CM'; c.setAttribute('href', 'acmanager://thesetupmarket/setup?id=' + id); c.setAttribute('style', 'right:220px;filter:hue-rotate(-60deg);-webkit-filter:hue-rotate(-60deg)') }, 100); }); }); } } else if (/^http:\/\/www\.radiators-champ\.com\/RSRLiveTiming\/.*/i.test(location.href)){ if (_$('#__cmext_style', function (x){ x.parentNode.removeChild(x); return true; })){ // cleaning up after RSR Live Timing Content Manager Support extension _$('#__cmext_start_btn', function (x){ x.parentNode.removeChild(x); return true; }); _$each('th:last-child', function (x){ if (x.textContent === 'Install'){ x.textContent = 'Download'; } }); _$each('a', function (x){ var m = x.href.match(/^acmanager:\/\/rsr\/setup\?id=(\d+)/); if (m){ x.href = 'http://www.radiators-champ.com/RSRLiveTiming/ajax.php?action=download_setup&id=' + m[1]; } }); } // start button if needed or possible var eventId = (location.href.match(/\beventId?=(\d+)\b/i) || {})[1]; var carId = (location.href.match(/\bcar(?:Id)?=(\d+)\b/i) || {})[1]; var trackId = (location.href.match(/\btrack(?:Id)?=(\d+)\b/i) || {})[1]; if (eventId != null || carId != null && trackId != null){ _$css(function(){/* #__cmext_start_btn { display: block !important; position: fixed !important; bottom: 20px !important; right: 20px !important; width: 72px !important; height: 72px !important; border-radius: 2px !important; background: #A20025 !important; color: white !important; text-transform: uppercase !important; text-decoration: none !important; font-size: 13px !important; font-weight: bold !important; line-height: 27px !important; padding: 8px !important; text-align: center !important; color: #FFF !important; } #__cmext_start_btn:hover, #__cmext_start_btn:active { color: #FFF !important; background: #990024 !important; text-decoration: none !important; } */}); var c = eventId || trackId + '/' + carId; var b = document.createElement('a'); b.id = '__cmext_start_btn'; b.appendChild(document.createElement('img')).src = _$res('img/icon-radiatorschamp-48.png'); b.appendChild(document.createElement('br')); b.appendChild(document.createTextNode('Start')); b.href = 'acmanager://rsr?id=' + encodeURIComponent(c); document.body.appendChild(b); } // setups table: new column with quick install buttons _$each('th:last-child', function (x){ if (x.textContent === 'Download'){ x.textContent = 'Download'; x.parentNode.appendChild(x.cloneNode()).textContent = 'Install'; } }); _$each('a', function (x){ var m = x.href.match(/=download_setup&id=(\d+)/); if (m){ var c = x.parentNode.parentNode.appendChild(x.parentNode.cloneNode(true)).querySelector('a'); c.href = 'acmanager://rsr/setup?id=' + m[1]; c.querySelector('img').src = _$res('img/icon-radiatorschamp-30.png'); x.href = x.href.replace(/&id/, '&proc=1&id'); } }); } })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址