Greasy Fork is available in English.

IVE出席率及缺席率計算器

幫助IVE學生計算出席率及缺席率

Від 02.09.2017. Дивіться остання версія.

// ==UserScript==
// @name         IVE出席率及缺席率計算器
// @namespace    undefined
// @version      1.0.2
// @description  幫助IVE學生計算出席率及缺席率
// @author       Miklet
// @match        *://myportal.vtc.edu.hk/*
// @require      https://code.jquery.com/jquery-latest.js
// @run-at       document-start
// @grant        unsafeWindow
// ==/UserScript==
(function() {
    'use strict';
    $(function() {
        var insert_btn = document.createElement("button");
        insert_btn.setAttribute("style",";padding:10px;margin:10px;background-color:#555;color:#fff;position:absolute;right:0;bottom:0;border:0;");
        insert_btn.setAttribute ("id","calculate_btn");
        insert_btn.innerHTML = "計算出缺率";
        if($('table.hkvtcsp_wording').length){
            document.body.insertBefore(insert_btn, document.body.firstChild);
            document.getElementById ("calculate_btn").addEventListener (
                "click", function(){
                    var input_time = prompt("請輸入該單元的總時數");
                    if(input_time !== "" && input_time == parseInt(input_time, 10)){
                        var executeCalculation = calculate(input_time);
                    }else{
                        alert('發生了錯誤');
                    }
                }, false
            );
        }
        function time_convert(input_min) {
            var output_hr = Math.floor( input_min / 60);          
            var output_min = input_min % 60;
            if (output_min !== 0) {
                return output_hr + "小時" + output_min + "分鐘";
            } else {
                return output_hr + "小時";
            }
        }
        function calculate(tt_input_time) {
            var tb_array = [];
            var headers = [];
            $('table.hkvtcsp_wording th').each(function(index, item) {
                headers[index] = $(item).text();
            });
            $('table.hkvtcsp_wording tr').has('td').each(function() {
                var arrayItem = {};
                $('td', $(this)).each(function(index, item) {
                    arrayItem[headers[index]] = $(item).text();
                });
                tb_array.push(arrayItem);
            });
            var att_lesson = 0;
            var abs_lesson = 0;
            var late_lesson = 0;
            var tt_lesson_time = 0;
            var tt_att_time = 0;
            var tt_abs_time = 0;
            var att_time;
            var abs_time;
            var i=0;
            for (i = 0; i < tb_array.length; i++) {
                var lesson_time_array = tb_array[i]['課堂時間'].split("-");
                //Lesson Count
                switch (tb_array[i]['']) {
                    case 'Present':
                        att_lesson++;
                        break;
                    case 'Late':
                        late_lesson++;
                        break;
                    case 'Absent':
                        abs_lesson++;
                        break;
                }
                //ABS & ATT Caculate
                var arrived_time = tb_array[i]['出席時間'];
                var row_lesson_time_start = new Date();
                var lesson_time_array_0 = lesson_time_array[0].split(':');
                row_lesson_time_start.setHours(lesson_time_array_0[0], lesson_time_array_0[1]);
                var row_lesson_time_end = new Date();
                var lesson_time_array_1 = lesson_time_array[1].split(':');
                row_lesson_time_end.setHours(lesson_time_array_1[0], lesson_time_array_1[1]);
                var row_lesson_time_arrived = new Date();
                if (arrived_time != '-') {
                    arrived_time = arrived_time.split(':');
                    row_lesson_time_arrived.setHours(arrived_time[0], arrived_time[1]);
                    if (row_lesson_time_arrived > row_lesson_time_start.setMinutes(row_lesson_time_start.getMinutes() + 10)) {
                        row_lesson_time_start.setHours(lesson_time_array_0[0], lesson_time_array_0[1]);
                        att_time = (row_lesson_time_end - row_lesson_time_arrived) / 1000 / 60;
                        abs_time = (row_lesson_time_arrived - row_lesson_time_start) / 1000 / 60;
                    } else {
                        row_lesson_time_start.setHours(lesson_time_array_0[0], lesson_time_array_0[1]);
                        att_time = (row_lesson_time_end - row_lesson_time_start) / 1000 / 60;
                        abs_time = 0;
                    }
                } else {
                    att_time = 0;
                    abs_time = (row_lesson_time_end - row_lesson_time_start) / 1000 / 60;
                }
                tt_lesson_time = tt_lesson_time + ((row_lesson_time_end - row_lesson_time_start) / 1000 / 60);
                tt_att_time = tt_att_time + att_time;
                tt_abs_time = tt_abs_time + abs_time;
            }
            var time_remain;
            if(tt_input_time*60*0.3>=tt_abs_time){
                time_remain = (tt_input_time*60*0.3)-tt_abs_time;
                time_remain = time_convert(time_remain);
            }else{
                time_remain = "/";
            }
            alert("已上課堂時數 : "+time_convert(tt_lesson_time)+"\n\n"+
                  "總出席時數 : "+time_convert(tt_att_time)+"\n"+
                  "出席率 : "+(tt_att_time / (tt_input_time*60) * 100).toFixed(2)+"%\n\n"+
                  "總缺席時數 : "+time_convert(tt_abs_time)+"\n"+
                  "缺席率 : "+(tt_abs_time / (tt_input_time*60) * 100).toFixed(2)+"%\n\n"+
                  "剩餘可缺席時數 : "+time_remain
                 );
        }
    });
})();