UnipaForFI

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

当前为 2015-09-13 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

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

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

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

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

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

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

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

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

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

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

// ==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);