// ==UserScript==
// @name 辅助选老师-有效经验值|好评率|年龄|Top 5
// @version 0.1.33
// @namespace https://github.com/niubilityfrontend
// @description 51Talk.辅助选老师-有效经验值|好评率|年龄|Top 5;有效经验值=所有标签数量相加后除以5;好评率=好评数/总评论数;年龄根据你的喜好选择。
// @author jimbo
// @license GPLv3
// @supportURL https://github.com/niubilityfrontend/hunttingteacheron51talk
// @match https://www.51talk.com/ReserveNew/index*
// @match http://www.51talk.com/ReserveNew/index*
// @icon https://avatars3.githubusercontent.com/u/25388328
// @grant GM_xmlhttpRequest
// @grant GM_getValue
// @grant GM_setValue
// @grant GM_listValues
// @grant GM_deleteValue
// @require http://code.jquery.com/jquery-3.4.1.min.js
// @require https://code.jquery.com/ui/1.12.1/jquery-ui.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/pace/1.0.2/pace.min.js
// @require https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.5/i18n/grid.locale-cn.js
// @require https://cdnjs.cloudflare.com/ajax/libs/free-jqgrid/4.15.5/jquery.jqgrid.min.js
// @require https://greasyfork.org/scripts/388372-scrollfix/code/scrollfix.js?version=726657
// @downloadURL none
// ==/UserScript==
(function () {
'use strict';
Pace.Options = {
ajax: false, // disabled
document: false, // disabled
eventLag: false, // disabled
elements: {
selectors: ['#filterdialog']
}
};
$("head").append(
''
);
$("head").append(
''
);
$("head").append('');
$.each($(".item-top-cont"), function (i, item) {
item.innerHTML = item.innerHTML.replace('', '');
});
function sleep(delay) {
var start = (new Date()).getTime();
while ((new Date()).getTime() - start < delay) {
continue;
}
}
//删除数组中的空元素
Array.prototype.clean = function (deleteValue = "") {
for (var i = 0; i < this.length; i++) {
if (this[i] == deleteValue) {
this.splice(i, 1);
i--;
}
}
return this;
};
Number.prototype.toString = function () {
return this.toFixed(2);
};
String.prototype.toFloat = function () {
return parseFloat(this);
};
String.prototype.toInt = function () {
return parseint(this);
};
String.prototype.startsWith = function (str) {
return this.slice(0, str.length) == str;
};
String.prototype.endsWith = function (str) {
return this.slice(-str.length) == str;
};
String.prototype.contains = function (str) {
return this.indexOf(str) > -1;
};
var asc = function (a, b) {
return $(a).attr('indicator').toFloat() > $(b).attr('indicator').toFloat() ? 1 : -1;
};
var desc = function (a, b) {
return $(a).attr('indicator').toFloat() > $(b).attr('indicator').toFloat() ? -1 : 1;
};
var sortByIndicator = function (sortBy) {
var sortEle = $('.s-t-content.f-cb .item').sort(sortBy);
$('.s-t-content.f-cb').empty().append(sortEle);
};
function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]); return null;
}
/**
* 提交运算函数到 document 的 fx 队列
*/
var submit = function (fun) {
var queue = $.queue(document, "fx", fun);
if (queue[0] == 'inprogress') {
return;
}
$.dequeue(document);
};
let maxlabel = 0, minlabel = 9999999, maxfc = 0, minfc = 999999;
function updateTeacherinfoToUI(jqel, tinfo) {
maxlabel = (tinfo.label > maxlabel) ? tinfo.label : maxlabel;
minlabel = (tinfo.label < minlabel) ? tinfo.label : minlabel;
maxfc = (tinfo.favoritesCount > maxfc) ? tinfo.favoritesCount : maxfc;
minfc = (tinfo.favoritesCount < minfc) ? tinfo.favoritesCount : minfc;
jqel.attr("teacherinfo", JSON.stringify(tinfo));
jqel.find(".teacher-name")
.html(jqel.find(".teacher-name").text() + "
[" + tinfo.label + "|" + tinfo.thumbupRate + "%|" + tinfo.favoritesCount + "]");
jqel.find(".teacher-age")
.html(jqel.find(".teacher-age").text() + " | ");
jqel//.attr('thumbup', tinfo.thumbup)
//.attr('thumbdown', tinfo.thumbdown)
//.attr('thumbupRate', tinfo.thumbupRate)
//.attr('age', tinfo.age)
//.attr('label', tinfo.label)
.attr('indicator', tinfo.indicator);
}
function executeFilters(uifilters) {
let tcount = 0, hidecount = 0;
$.each($('.item'), function (i, item) {
var node = $(item);
var tinfojson = node.attr("teacherinfo");
if (!tinfojson) {
return true;
}
var tinfo = JSON.parse(tinfojson);
if ((tinfo.thumbupRate >= uifilters.rate1 && tinfo.thumbupRate <= uifilters.rate2)
&& tinfo.label >= uifilters.l1 && tinfo.label <= uifilters.l2
&& tinfo.age >= uifilters.age1 && tinfo.age <= uifilters.age2
&& tinfo.favoritesCount >= uifilters.fc1 && tinfo.favoritesCount <= uifilters.fc2) {
if (node.is(':hidden')) { //如果node是隐藏的则显示node元素,否则隐藏
node.show();
node.animate({
left: "+=50"
}, 3500).animate({
left: "-=50"
}, 3500);
} else {
//nothing todo
}
tcount++;
} else {
node.css('color', 'white').hide();
hidecount++;
}
});
$('#tcount').text(tcount);
$('#thidecount').text(hidecount);
}
let configExprMilliseconds = 1000 * 60 * 60 * GM_getValue('tinfoexprhours', 24 * 3); //缓存7天小时
$(".item").each(function (index, el) {
submit(function (next) {
Pace.track(function () {
let jqel = $(el);
let tid = jqel.find(".teacher-details-link a").attr('href').replace("https://www.51talk.com/TeacherNew/info/", "").replace('http://www.51talk.com/TeacherNew/info/', '');
var tinfokey = 'tinfo-' + tid;
var tinfoexpirekey = 'tinfoexpire-' + tid;
var tinfoexpire = GM_getValue(tinfoexpirekey, new Date().getTime());
if (new Date().getTime() - tinfoexpire < configExprMilliseconds) {
var tinfo = GM_getValue(tinfokey);
if (tinfo) {
updateTeacherinfoToUI(jqel, tinfo);
next();
return true;
}
}
// ajax 请求一定要包含在一个函数中
var start = (new Date()).getTime();
let num = /[0-9]*/g;
$.ajax({
url: window.location.protocol + '//www.51talk.com/TeacherNew/teacherComment?tid=' + tid + '&type=bad&has_msg=1',
type: 'GET',
dateType: 'html',
success: function (r) {
var jqr = $(r);
if (jqr.find(".evaluate-content-left span").length >= 3) {
var thumbup = Number(jqr.find(".evaluate-content-left span:eq(1)").text().match(num).clean("")[0]);
var thumbdown = Number(jqr.find(".evaluate-content-left span:eq(2)").text().match(num).clean("")[0]);
var thumbupRate = ((thumbup + 0.00001) / (thumbdown + thumbup)).toFixed(2) * 100;
var favoritesCount = Number(jqr.find(".clear-search").text().match(num).clean("")[0]);
var age = jqel.find(".teacher-age").text().match(num).clean("")[0];
var label = (function () {
let j_len = jqel.find(".label").text().match(num).clean("").length; let l = 0;
for (let j = 0; j < j_len; j++) {
l += Number(jqel.find(".label").text().match(num).clean("")[j]);
}
l = Math.ceil(l / 5);
return l;
})();
var name = jqel.find(".teacher-name").text();
var type = $('.s-t-top-list .li-active').text();
var tage = Number(jqr.find(".teacher-name-tit > .age.age-line").text().match(num).clean("")[0]);
var slevel = jqr.find('.sui-students').text();
var tinfo = { 'slevel': slevel, 'tage': tage, 'thumbup': thumbup, 'thumbdown': thumbdown, 'thumbupRate': thumbupRate, 'age': age, 'label': label, 'indicator': Math.ceil(label * thumbupRate / 100) + favoritesCount, 'favoritesCount': favoritesCount, 'name': name, 'type': type };
GM_setValue(tinfoexpirekey, new Date().getTime());
GM_setValue(tinfokey, tinfo);
updateTeacherinfoToUI(jqel, tinfo);
} else {
console.log('Teacher s detail info getting error:' + JSON.stringify(jqel) + ",error info:" + r);
}
},
error: function (data) { console.log("xhr error when getting teacher " + JSON.stringify(jqel) + ",error msg:" + JSON.stringify(data)); }
}).always(function () {
while ((new Date()).getTime() - start < 600) {
continue;
}
next();
});
});
});
});
function getUiFilters() {
var l1 = $("#tlabelslider").slider('values', 0);
var l2 = $("#tlabelslider").slider('values', 1);
var rate1 = $("#thumbupRateslider").slider('values', 0);
var rate2 = $("#thumbupRateslider").slider('values', 1);
var age1 = $("#tAgeSlider").slider('values', 0);
var age2 = $("#tAgeSlider").slider('values', 1);
var fc1 = $("#fcSlider").slider('values', 0);
var fc2 = $("#fcSlider").slider('values', 1);
return { l1, l2, rate1, rate2, age1, age2, fc1, fc2 };
}
submit(function (next) {
try {
var config = GM_getValue('filterconfig', { l1: 300, l2: maxlabel, rate1: 96, rate2: 100, age1: 0, age2: 110 });
$('body').append("