UnipaForFI

ユニットの達成状況を追加

// ==UserScript==
// @name        UnipaForFI
// @namespace   https://twitter.com/akameco
// @description ユニットの達成状況を追加
// @include     https://portal.sa.dendai.ac.jp/up/faces/up/*
// @version     1.0.1
// @grant       none
// ==/UserScript==

(function ($) {
    // 実行ページチェック
    var page_title = $('.titleAreaL').html();
    if (page_title != '成績照会') {
        console.log('skip Unit script');
        return;
    }
    console.log('load Unit script');
    var units = {
      cg: {
        complete: 0,
        count: 0,
        now: 0,
        list: [
          'CGモデリングおよび演習',
          'CGレンダリングおよび演習',
          '形状処理および演習',
          'コンピュータアニメーションおよび演習'
        ]
      },
      vs: {
        complete: 0,
        count: 0,
        now: 0,
        list: [
          '画像処理',
          '画像処理演習',
          '音声・音響情報処理',
          'コンピュータ音楽作品制作演習',
          'バーチャルリアリティ',
          '音声・音響情報処理'
        ]
      },
      mi: { 
        complete: 0,
        count: 0,
        now: 0,
        list: [
          'ヒューマンインタラクション及び演習',
          '人間情報システムおよび演習',
          'メディア情報学',
          'インタラクションデザイン'
        ]
      },
      wi: {
        complete: 0,
        count: 0,
        now: 0,
        list: [
          'サーバ設計論',
          '情報アクセスと知的処理',
          'サーバプログラミング演習',
          'Web情報システム演習',
          'データベースプログラミング演習'
        ]
      },
      sn: {
        complete: 0,
        count: 0,
        now: 0,
        list: [
          '情報セキュリティの基礎と暗号技術',
          'ネットワークプログラミング',
          'ネットワークプログラミング演習',
          'ネットワークセキュリティおよび演習'
        ]
      },
      st: {
        complete: 0,
        count: 0,
        now: 0,
        list: [
          'サーバ設計論',
          'メディア情報学',
          'サーバプログラミング演習',
          'ソフトウェア設計',
          '情報システム論',
          'ソフトウェア分析・モデリング'
        ]
      }
    };

    // 科目を取得
    var myUnitList = $("td .tdKamokuList");
    // 評価を取得
    var hyokaList = $("td .tdHyokaList");
    // 単位を習得
    var taniList = $("td .tdTaniList");
    // 単位認定可能な評価範囲
    var hyoka = ["S","A","B","C","RS","RA","RB","RC","RN"];

    for (var unitKey in units) {
      var unit = units[unitKey];
      var unitList = unit.list;
      unitSize = myUnitList.size();
      for (var j=0; j < unitSize; ++j) {
        var myUnitText = myUnitList[j].textContent;
        var myHyokaText = hyokaList[j].textContent;
        var i = unitList.indexOf(myUnitText);
        if (i != -1) {
          // 単位数
          var n = taniList[j].textContent ? parseInt(taniList[j].textContent) : 0;
          // 合計単位
          unit.count += n;
          // 取得済み単位
          if (hyoka.indexOf(myHyokaText) >= 0){
            unit.complete += n;
          } 
        }
      }
      unit.now = unit.count - unit.complete;
    }

    // 要素の追加
    var table = $("table.outline tbody")[0];
    // unipaは本当に最悪なのでtdを追加しなくちゃレイアウトが崩れる
    var titleText = "<tr><td></td><td class='subTitleArea'>ユニット達成度</td><td></td><tr>";
    var tablePrefix = '<tr><td></td><td>';
    var tableText = "<table class='singleTableLine'>";

    var tableParams = [
        ['ユニット分類', 'unitKey'],
        ['履修済単位', 'complete'],
        ['履修中単位', 'now'],
        ['ユニット合計', 'count']
    ];

    for (var i = 0; i < tableParams.length; i++) {
        tableText += "<tr>";
        tableText += "<th class='headTaniShutoku'>" + tableParams[i][0];
        for (var unitKey in units) {
            tableText += "<td class='dataTaniShutokuKamoku'>";
            if (i == 0) {
                tableText += unitKey;
            } else {
                tableText += units[unitKey][tableParams[i][1]];
            }
            tableText += '</td>';
        }
    }

    tableText += "</table>";
    var tableSuffix = '</td><td></td></tr>';

    var link = "<tr><td></td><td><a href='http://www.im.dendai.ac.jp/curriculum.html' target='_blank'>ユニット詳細(学科ページ)</a></td></tr>"

    $(table).append(titleText);
    $(table).append(tablePrefix + tableText + tableSuffix);
    $(table).append(link);
    
    // 動作確認
    var check = function () {
      for(var unitKey in units){
        var unit = units[unitKey];
        var unitList = unit["list"];
        var unitComplete = unit["complete"];
        var unitNow = unit["now"];
        console.log(unitList);
        console.log("履修済み" + unitComplete);
        console.log("履修中" + unitNow);
      }
    };

})(jQuery);