// ==UserScript== // @name radiko widen timetable // @name:ja radiko 番組表の幅を広げる // @namespace https://greasyfork.org/users/19523 // @description 番組表の幅をウィンドウ幅いっぱいに広げます // @include http://radiko.jp/* // @version 0.2 // @grant none // @downloadURL none // ==/UserScript== var getStyleSheetIndex = function (src) { for (var i = 0, styleSheet; styleSheet = document.styleSheets[i]; i++) { if (styleSheet.href.indexOf(src) >= 0) break; } return i; }; var getCssRuleIndex = function (i, map) { for (var j = 0, len = Object.keys(map).length; j < document.styleSheets[i].cssRules.length && len > 0; j++) { var selector = document.styleSheets[i].cssRules[j].selectorText; if (typeof selector === "undefined") { continue; } if (map[selector]) { map[selector] = j; --len; } } return map; }; var setProperty = function () { var styleSheetIndex = getStyleSheetIndex('style.css'); timetable = getCssRuleIndex(styleSheetIndex, timetable); document.styleSheets[styleSheetIndex].cssRules[timetable['.content .content__inner']].style.setProperty('width', 'initial'); document.styleSheets[styleSheetIndex].cssRules[timetable['.program-table__outer']].style.setProperty('width', 'initial'); document.styleSheets[styleSheetIndex].cssRules[timetable['.program-table__pager .item--prev']].style.setProperty('left', 'initial'); document.styleSheets[styleSheetIndex].cssRules[timetable['.program-table__pager .item--prev']].style.setProperty('z-index', '1'); document.styleSheets[styleSheetIndex].cssRules[timetable['.program-table__pager .item--next']].style.setProperty('position', 'initial'); document.styleSheets[styleSheetIndex].cssRules[timetable['.program-table__pager .item--next']].style.setProperty('float', 'right'); observer.disconnect(); }; var NOT_SET = -1; var timetable = { '.content .content__inner': NOT_SET, '.program-table__outer': NOT_SET, '.program-table__pager .item--prev': NOT_SET, '.program-table__pager .item--next': NOT_SET }; var contents = document.getElementById('contents'); var observer = new MutationObserver(function (mutations) { switch (location.hash) { case '#!/timetable': setTimeout(setProperty, 1000); break; } }); observer.observe(contents, { childList: true });