// ==UserScript==
// @name 学堂在线小助手注释版
// @version 0.0.9.3
// @description 解放双手,自动播放
// @author 1xin
// @require http://code.jquery.com/jquery-latest.js
// @noframes
// @match *://*.xuetangx.com/courses/*/courseware/*
// @match *://*.xuetangx.com/newcloud/dashboard*
// @grant GM_addStyle
// @grant GM.getValue
// @grant GM_openInTab
// @grant GM_notification
// @namespace https://greasyfork.org/users/183871
// @downloadURL https://update.greasyfork.icu/scripts/98624/%E5%AD%A6%E5%A0%82%E5%9C%A8%E7%BA%BF%E5%B0%8F%E5%8A%A9%E6%89%8B%E6%B3%A8%E9%87%8A%E7%89%88.user.js
// @updateURL https://update.greasyfork.icu/scripts/98624/%E5%AD%A6%E5%A0%82%E5%9C%A8%E7%BA%BF%E5%B0%8F%E5%8A%A9%E6%89%8B%E6%B3%A8%E9%87%8A%E7%89%88.meta.js
// ==/UserScript==
(function() {
'use strict';
GM_addStyle('#next_video_btn{color:#fa7d3c;}');
//获取下一个视频地址
//getUrl()获取下一个视频地址
var getNextVideoUrl = {
getUrl:function(){
var next_video,next_video_url,next_unit,next_unit_ul;
var active_video=$("li.active ");
if (active_video.next().length > 0 ) {
next_video=active_video.next().find("a");
next_video_url=next_video.attr('href');
}else{
next_unit=$("div.chapter.is-open").next();
if(next_unit.length>0){
next_unit_ul=next_unit.find('ul').children(":first").find("a");
next_video_url=next_unit_ul.attr('href');
}else{
return false;
}
}
return next_video_url;
}
};
//f**k U DuCha!
var nopeople={
getuserpeople:function(){
var username=$("li.nav-user--info-name").text();
var userid=$("li.nav-user--info-number").text();
//alert(userid);
//if(username==1xin.hate){alert(f**k u);} -_-!bbbb
}
};
//增加下一个按钮,防止程序出错
//addNextButton()增加下一个视频按钮
//toNextButton()转到下一个视频地址
//addTips()提示信息
var addNextButton={
addButton:function(next_video_url){
var next_btn_html = '';
next_btn_html +='
';
next_btn_html += '';
next_btn_html += '跳转到下一个视频';
next_btn_html += '';
next_btn_html +='';
//增加下一个视频按钮
var ul_tag = $("ul.wrapper-downloads");
if (ul_tag) {
ul_tag.append(next_btn_html);
}
},
toNextButton:function(){
if(getNextVideoUrl.getUrl()!=false){
window.location.href=getNextVideoUrl.getUrl();
}else{
return 0;
}
},
addTips:function(){
var li_tag = $("ul.wrapper-downloads");
var tips_button = '';
tips_button += '';
tips_button += '';
tips_button += '';
tips_button += '再次强调:答题时请关掉脚本!!';
tips_button += '';
tips_button += '';
tips_button += '';
if (li_tag) {
li_tag.append(tips_button);
}
},
addVersion:function(){
var li_tag = $("ul.wrapper-downloads");
var tips_Version = '';
tips_Version += '';
tips_Version += '';
tips_Version += '';
tips_Version += '版本0.0.9.3';
tips_Version += '';
tips_Version += '';
tips_Version += '';
if (li_tag) {
li_tag.append(tips_Version);
}
}
};
//视频播放
//myVideo video DOM 对象
//playVideo() 自动播放
//stopVideo() 监测是否结束,到下一个视频
//isVideoPage() 是否是视频页
//VideoQuality() 自动切换到低清,节省流量
//changeVideoSpeed() 自动二倍速播放,节省时间
//changeVideoVolume() 自动静音,节省……耳朵?
var autoPlayVideo={
myVideo:null,
playVideo:function(){
setTimeout(function(){
var m=autoPlayVideo.isVideoPage();
//alert(m);
if(m){
try
{
autoPlayVideo.myVideo = document.getElementsByTagName('video')[0];
autoPlayVideo.myVideo.play();
autoPlayVideo.changeVideoQuality();
autoPlayVideo.changeVideoSpeed();
autoPlayVideo.changeVideoVolume();
autoPlayVideo.myVideo.play();
autoPlayVideo.stopVideo();
}
catch(e)
{
//location.reload();
autoPlayVideo.myVideo.play();
}
}else{
addNextButton.toNextButton();
}
},2000);
},
stopVideo:function(){
this.myVideo.addEventListener('ended',function(){
//alert('stop');
addNextButton.toNextButton();
});
},
isVideoPage:function(){
if(document.getElementsByTagName('video').length > 0){
return true;
}else{
return false;
}
},
changeVideoQuality:function(){
var qualityDiv=$("div.xt_video_player_quality.xt_video_player_common.fr>ul");
var qualityButton=qualityDiv.children(":last");
qualityButton.trigger("click");
},
changeVideoSpeed:function(){
var speedDiv=$("div.xt_video_player_speed.xt_video_player_common.fr>ul");
var speedButton=speedDiv.children(":first");
speedButton.trigger("click");
},
changeVideoVolume:function(){
var VolumeDiv=$("div.xt_video_player_volume");
var VolumeButton=VolumeDiv.children(":first");
VolumeButton.trigger("click");
}
};
//一键
//addScore() 获取所有成绩
//addScoreTip() 提示
//addScoreTable() 成绩表
var addOneShotButton={
addScore:function(){
var li_tag = $("div.nav-menu > ul");
var tips_button = '';
tips_button += '';
if (li_tag) {
li_tag.append(tips_button);
}
$("#mybutton").click(function(){
//alert(allScore.scoreArray(apiUrl.getApiUrl())[0][0]);
//allScore.addTrTd(allScore.scoreArray(apiUrl.getApiUrl()));
//addOneShotButton.addScoreTip();
var score_tag = $("li.item-score");
if(score_tag.length > 0){
alert("请确定后耐心等待");
addOneShotButton.addScoreTable(allScore.addTrTd(allScore.scoreArray(apiUrl.getApiUrl())));
}else{
$("#notips").show();
//window.open("www.baidu.com");
//GM_openInTab("http://www.baidu.com");
};
});
$("#mybutton").mouseover(function(){
$("#mytips").show();
});
$("#mybutton").mouseout(function(){
$("#mytips").hide();
});
},
addAutoPlay:function(){
var li_tag = $("div.nav-menu > ul");
var tips_button = '';
tips_button += '';
if (li_tag) {
li_tag.append(tips_button);
}
$("#allplaybutton").click(function(){
var score_tag = $("li.item-score");
if(score_tag.length > 0){
//GM_openInTab(apiUrl.getPlayUrl()[0]);
for(var i=0;i ul");
var tips_button = '';
tips_button +=''
tips_button +='
提示:需要15秒
'
tips_button +='请耐心等待 —_—!
'
tips_button += '';
if (li_tag) {
li_tag. append(tips_button);
}
$("#mytips").hide();
},
addNoScoreTip:function(){
var li_tag=$("div.nav-menu > ul");
var tips_button = '';
tips_button +=''
tips_button +='
-当前没有任何课程-
'
tips_button += '';
if (li_tag) {
li_tag. append(tips_button);
}
$("#notips").hide();
$("#notips").mouseover(function(){
$("#notips").hide();
});
},
addScoreTable:function(tdtr){
var li_tag=$("div.row.container-search");
var tips_button = '';
tips_button +=''
tips_button += '
';
tips_button += '课程名 | 答题总分 | 答题得分 | 视频总分 | 视频得分 | 课程总分 |
';
tips_button += tdtr;
tips_button += '
';
tips_button += '
';
if (li_tag) {
li_tag. after(tips_button);
}
}
};
//将所有课程成绩构成数组
//scoreArray() 返回所有课程成绩构成的数组
//addTrTd() 将数组构成表格
var allScore={
scoreArray:function(apiArray){
var allScoreArray=new Array;
for(var i=0;i";
for(var j=0;j0){
stringTrTd+=" align='right' ";
}
stringTrTd+=">";
stringTrTd+=allScoreArray[i][j];
stringTrTd+="";
}
stringTrTd+="";
}
//alert(stringTrTd);
return stringTrTd
}
}
//课程成绩对象
//getScoreJson() 获取成绩json
//ecodeJson() 解析json
//getScoreArray() 返回单个科目成绩数组
var scoreJson={
htmlobj:null,//成绩的json数据
//
course_name:null,//课程名
homeworkTotal:null,//题目总分
homeworkScore:null,//题目得分
videoTotal:null,//视频总分
videoScore:null,//视频总分
final_score:null,//课程总分
//利用ajax获取课程成绩
getScoreJson:function(scoreUrl){
this.htmlobj=$.ajax({
url:scoreUrl,
async:false
});
},
//解析返回json
decodeJson:function(){
//alert(this.htmlobj.responseText);
var jsonData=JSON.parse(this.htmlobj.responseText);
this.course_name=jsonData.course_name;
this.homeworkTotal=jsonData.progress_items[0].total;
this.homeworkScore=jsonData.progress_items[0].score;
this.videoTotal=jsonData.progress_items[1].total;
this.videoScore=jsonData.progress_items[1].score;
this.final_score=jsonData.final_score;
//alert(this.course_name+this.homeworkTotal+this.homeworkScore+this.videoTotal+this.videoScore);
},
//返回成绩数组
getScoreArray:function(scoreUrl){
var scoreArr = new Array;
this.getScoreJson(scoreUrl);
this.decodeJson();
scoreArr[0]=this.course_name;
scoreArr[1]=this.homeworkTotal;
scoreArr[2]=this.homeworkScore;
scoreArr[3]=this.videoTotal;
scoreArr[4]=this.videoScore;
scoreArr[5]=this.final_score;
return scoreArr;
}
};
//获取每个课程成绩的api序号
//getApiUrl()返回所有课程成绩api地址
//Array 序号api地址
//
//
var apiUrl={
getApiUrl:function(){
var valArr = new Array;
var url=$("li.item-score > div > span > a").each(function(i){
valArr[i] = "/newcloud/api/course_score/"+$(this).attr("href").split("termcourse_id=")[1]+"/";
});
var priv = valArr.join(',');
//alert(valArr[1]);
return valArr;
//url.css("background-color","red");
//alert(url.attr("href"));
},
getPlayUrl:function(){
//a.btn.btn-warning
var valArr = new Array;
var url=$("a.btn.btn-warning").each(function(i){
valArr[i] = 'http://'+document.domain+$(this).attr("href")+"/";
});
var priv = valArr.join(',');
//alert(valArr[1]);
return valArr;
//url.css("background-color","red");
//alert(url.attr("href"));
}
};
var videoSite = window.location.href;
var reVideo = /courses/i;
var reScore = /newcloud/i;
//视频页
if(reVideo.test(videoSite)){
autoPlayVideo.playVideo();
var t=getNextVideoUrl.getUrl();
addNextButton.addButton(t);
addNextButton.addTips();
addNextButton.addVersion();
}
//成绩页
if(reScore.test(videoSite)){
setTimeout(function(){
addOneShotButton.addScore();
addOneShotButton.addAutoPlay();
addOneShotButton.addScoreTip();
addOneShotButton.addNoScoreTip()
//addOneShotButton.addScoreTable();
//scoreJson.decodeJson();
//nopeople.getuserpeople();
},1000)
}
})();