// ==UserScript== // @name UnipaBeautifulTimeboard // @namespace notification // @description 学生時間割表の見た目を整える // @include http*://portal.sa.dendai.ac.jp/up/faces/up/* // @version 1.29 // @grant none // @downloadURL https://update.greasyfork.icu/scripts/5131/UnipaBeautifulTimeboard.user.js // @updateURL https://update.greasyfork.icu/scripts/5131/UnipaBeautifulTimeboard.meta.js // ==/UserScript== $(function () { try { var page_title = $('.titleAreaL').html(); var mode, selector_table_prefix; if (page_title == '学生時間割表') { mode = 's'; selector_table_prefix = '#form1\\:calendarList'; } else if(page_title == '授業時間割表') { mode = 'a'; selector_table_prefix = '#form1\\:tableCal '; } else { console.log('skip BT script'); return; } console.log('load BT script'); var data = { 'header:form1:htmlMenuItemButton': '実行', 'header:form1:hiddenMenuNo': '602', 'header:form1:hiddenFuncRowId': '0', 'com.sun.faces.VIEW': $('[name="com.sun.faces.VIEW"]').val(), 'header:form1': 'header:form1' }; $.ajax({ url: '#', type: 'post', timeout: 5000, data: data, success: function(html, status) { var got_units = []; $(html).find('#singleTableArea>table>tbody>tr').each(function() { if ('ABCSRARBRCRSRN'.indexOf($(this).find(".tdHyokaList").text()) == -1) { return; } got_units.push($(this).find('.tdKamokuList').text()); }); console.log(got_units); // 授業情報表示の整形 $(selector_table_prefix + ' .linkMark>a').each(function() { var params, id, name, term, term_code, teacher, room, unit; params = $(this).html().split(' '); if (mode == 'a') { var params2, params3, params4; params2 = params[0].split(' '); id = params2[0]; name = params2[1]; params3 = params[1].split(' '); room = params3[1]; term = ''; if (params3[0].indexOf(')') != -1) { params4 = params3[0].split(')'); term = params4[0].replace(/(/g, '(').replace('科目', '') + ')'; teacher = params4[1].replace(/[【】]/g, '').replace(/ /, ' '); } else { teacher = params3[0].replace(/[【】]/g, '').replace(/ /, '').replace(/ /, ' '); } $span_unit = ''; } else if (mode == 's') { id = params[0]; name = params[1]; term = params[2].replace(/(/g, '(').replace(/)/g, ')').replace('科目', ''); teacher = params[3].replace(/[【】]/g, '').replace(/ /, ' '); room = params[4]; unit = params[5].replace('単位', ''); if (!unit) { unit = '同上'; } $span_unit = $('').addClass('unit').html(unit); // $span_unit = '' + unit + '単位'; } term_code = -1; if (term == ' ') { term = ''; } else if (term.indexOf('前期') != -1) { term_code = 0; } else if (term.indexOf('後期') != -1) { term_code = 1; } unit_ids = to_unit_id(name); $(this).parent().addClass('cid-' + id.substr(0, 3)); $(this).parent().addClass('name-' + name); if (got_units.indexOf(name) != -1) { $(this).parent().addClass('got'); } $(this).parent().addClass('name-' + name); if (term_code != -1) { $(this).parent().addClass('term-' + term_code); } units_html = ''; $name_el = $('').addClass('name').html(name); $term_el = $('').addClass('term').html(term); if (unit_ids.length != 0) { // unit 科目の処理 for (var j = 0; j < unit_ids.length; j++) { $name_el.append(to_unit_str_wrap(unit_ids[j])); } } $(this).html(''); $(this).append($('
').append($name_el, $term_el)); $(this).after( $('').addClass('teacher').html('☺' + teacher), $('').addClass('subs').html('➡').append( $('').addClass('room').html(room), $span_unit ), $('').addClass('id').html(id) ); }); var $id_params = $('.linkMark .id'); // style変更 $('.linkMark>a>div').css({ 'max-height' : '3em', 'overflow' : 'hidden' }); $('.linkMark>a .term').css({ 'font-size' : '11px', 'color' : 'orange' }); $id_params.css({ 'font-size' : '11px', 'color' : 'gray', 'display' : 'none' }); $('.linkMark .teacher').css('font-size', '15px'); $('.linkMark> .room').css({ 'font-size': '12px', 'float' : 'left' }); $('.linkMark>.subs').css({ 'overflow' : 'auto', 'line-height' : '19px' }); $('.linkmark .unit').css({ 'font-size': '12px', 'float' : 'right', 'padding' : '0 6px', 'background' : '#1d588f', 'color' : 'white', 'border-radius' : '8px' }); $('.linkmark .unit>span').css({ 'font-size': '9px', }); $('.koma>span>div').css({ 'height': '107px' }); $('.koma>span>:not(div:last-child)').css('border-bottom', 'solid 1px'); // 土曜日の授業がないかチェック sut_check = ''; $('.outline tr.tujoHeight>td:nth-child(7)>span').each(function() { sut_check += $(this).html(); }); // 土曜日が空の場合は消去 if (sut_check == '') { $('.outline tr>*:nth-child(7)').hide(); } var term_cu_str, selector_control, selector; if (mode == 's') { term_cu_str = $('#form1\\:lableGakkiName').html().substr(0, 1); $('.left.lineHeight').append('') } else { term_cu_str = $('#form1\\:labelOutLabel3').html().substr(7, 1); $('#form1\\:labelOutLabel').after('') } // クラスIDの表示をトグルするチェックボックス $('#second-control-box').append('クラスIDを表示'); $('#toggle-show-id').change(function() { if ($(this).is(":checked")) { $id_params.show(); $('.koma>span>div').css('height', '117px'); } else { $id_params.hide(); $('.koma>span>div').css('height', '107px'); } }); // 人科のトグル idが11Gから始まるもの $('#second-control-box').append('人科の表示'); $('#second-control-box').append('取得科目の表示'); // 4半期のクラスのみ表示を切り替えるinput $('#second-control-box').append( '' + term_cu_str + '期' + '' + term_cu_str + '前期' + '' + term_cu_str + '後期' ); var changed_filter = function() { $('.cid-11G').show(); $('.got').show(); $('.term-0').show(); $('.term-1').show(); switch($('input[name="view-term"]:radio').val()) { case '0': $('.term-0').show(); $('.term-1').show(); break; case '1': $('.term-0').show(); $('.term-1').hide(); break; case '2': $('.term-0').hide(); $('.term-1').show(); break; default: break; } if (!$('#toggle-show-punit').is(":checked")) { $('.cid-11G').hide(); } if (!$('#toggle-show-got').is(":checked")) { $('.got').hide(); } } $('#toggle-show-punit').change(changed_filter); $('#toggle-show-got').change(changed_filter); $('input[name="view-term"]:radio').change(changed_filter); } }); } catch (e) { $('body').prepend('[GreasmonkeyScript: BeautifulTimeboard] でエラーが起こっています, 無効にして下さい
'); } function to_unit_str(id) { return ["CG", "VS", "MI", "WI", "SN", "ST"][id]; } function to_unit_str_long(id) { return [ "Computer Graphics (コンピュータグラフィックス)", "Video & Sound (映像と音)", "Media & Interaction (メディアとインタラクション)", "Web Intelligence (ウェブインテリジェンス)", "Security & Network (セキュリティとネットワーク)", "Software Technology (ソフトウェアテクノロジ)" ][id]; } function to_unit_id(name) { lib = [[ 'CGモデリングおよび演習', 'CGレンダリングおよび演習', '形状処理および演習', 'コンピュータアニメーションおよび演習' ], [ '画像処理', '画像処理演習', '音声・音響情報処理', 'コンピュータ音楽作品制作演習', 'バーチャルリアリティ', '音声・音響情報処理' ], [ 'ヒューマンインタラクションおよび演習', '人間情報システムおよび演習', 'メディア情報学', 'インタラクションデザイン' ], [ 'サーバ設計論', '情報アクセスと知的処理', 'サーバプログラミング演習', 'Web情報システム演習', 'データベースプログラミング演習' ], [ '情報セキュリティの基礎と暗号技術', 'ネットワークプログラミング', 'ネットワークプログラミング演習', 'ネットワークセキュリティおよび演習' ], [ 'サーバ設計論', 'メディア情報学', 'サーバプログラミング演習', 'ソフトウェア設計', '情報システム論', 'ソフトウェア分析・モデリング' ]]; kinds = []; for (var i = 0; i < lib.length; i++) { if (lib[i].indexOf(name) >= 0) { kinds.push(i); } } return kinds; } function to_unit_str_wrap(id) { var style = { background: 'orange', color: 'white', 'border-radius': '4px', 'padding-left': '5px', 'padding-right': '5px', 'margin-left': '5px', }; // 情報とメディアで色分け if (id >= 3) { style.background = 'blue'; } return $('').html(to_unit_str(id)).css(style); } });