- // ==UserScript==
- // @name NGA Subscribe Tool
- // @namespace https://gf.qytechs.cn/zh-CN/scripts/38841-nga-subscribe-tool
- // @version 0.1.2.20180413
- // @icon http://bbs.nga.cn/favicon.ico
- // @description NGA 订阅工具,在打开页面时检测关注的作者是否发布了新帖,若是则在进入版面时弹出提醒(在帖子内不提醒)
- // @author AgLandy
- // @include /^https?:\/\/(bbs\.ngacn\.cc|nga\.178\.com|bbs\.nga\.cn)/(thread\.php\?(f|st)id|read).+/
- // @grant none
- // @require https://gf.qytechs.cn/scripts/39014-nga-user-script-loader/code/NGA%20User%20Script%20Loader.js
- // ==/UserScript==
-
- //发布地址:http://bbs.ngacn.cc/read.php?tid=13525229
-
- (function(){
-
- function init(usl){
-
- let $ = usl.$,
- st = commonui.subscribeTool = {
- init: function(){
- let data = {s: 0};
- if(localStorage.subscribeToolData)
- data = JSON.parse(localStorage.subscribeToolData);
- else{
- data[8143443] = {'name': '奥妮酱', 'read': 1};
- localStorage.subscribeToolData = JSON.stringify(data);
- }
- return data;
- },
- cache: {},
- f: function(ck){
- let noti = commonui.notification,
- go = function(){
- for(let i = 0; i < ck.length; i++){
- let t = st.cache[ck[i]],
- s = commonui.cutstrbylen(t[2],19);
- if(s.length < t[2].length)
- s += '...';
- $('<span><b style="color:blue">■</b> <span class="silver">' +
- commonui.time2dis(ck[i]) +
- ' <a class="b" target="_blank" href="/nuke.php?func=ucp&uid=' + t[1] + '">' +
- t[0] +
- '</a> 发布了主题 <nobr><a class="b" href="' + t[3] + '" title="' + t[2] + '" target="_blank">' +
- s +
- '</a></nobr><br></span></span>').prependTo('div.single_ttip2 div.div1:has(span.title:contains("提醒信息")) td:eq(0)'); //js_notification.js
- st.data[t[1]].read = 1;
- localStorage.subscribeToolData = JSON.stringify(st.data);
- }
- st.cache = {};
- };
- if(!noti.box)
- noti.createBox();
- if(noti.box.style.display != 'none')
- return go();
- if(!document.body)
- return window.setTimeout(function(){st.f(ck);}, 3000);
- if(noti.box.parentNode != document.body)
- document.body.appendChild(noti.box);
- noti.box._.show(0, 0);
- if(noti.box.offsetHeight > __NUKE.position.get().ch){
- if(noti.box.style.position != 'absolute')
- noti.box.style.position = 'absolute';
- if(noti.timeout)
- window.clearInterval(noti.timeout);
- }
- else{
- if(noti.box.style.position != 'fixed')
- noti.box.style.position = 'fixed';
- if(window.__UA && __UA[0] == 1 && __UA[1] <= 6)
- noti.timeout = window.setInterval(function(){commonui.notification.checkPos();}, 3000);
- } //notification.js commonui.notification.openBox
- go();
- },
- r: function(){
- //在帖子中为除自己以外的楼层添加关注按钮
- if(usl.lS && $('a[name="uid"]')[0]){
- $('a[name="uid"]').next().remove(); //去除已有的按钮
- $('a[name="uid"]').closest('td').unbind('.stBtn'); //解绑悬停事件
- $('a[name="uid"]').each(function(i, uid){
- let a = $(uid),
- u = a.text();
- if(u == __CURRENT_UID)
- return;
- a.parent().css({'position':'relative'});
- let d = $('<span style="font:15px/16px Serif;vertical-align:bottom;margin-left:3px;color:#ff7800;cursor:pointer;' + (st.data.s ? '' : 'display:none;') + '" />').html(st.data[u] ? '♥' : '♡').click(function(){
- d.html(st.data[u] ? '♡' : '♥');
- st.data[u] = st.data[u] ? null : {'name': commonui.posterInfo.uI.users[u].username, 'read': 1};
- localStorage.subscribeToolData = JSON.stringify(st.data);
- }).insertAfter(a);
- if(!st.data.s)
- a.closest('td').bind({
- 'mouseenter.stBtn': function(){d.fadeIn();},
- 'mouseleave.stBtn': function(){d.fadeOut();}
- });
- }); //添加按钮及绑定事件
- }
-
- //检测是否有关注作者的新帖
- let n = 0;
- if(usl.lS)
- $.each(st.data, function(k, v){
- if(v == null || k == 's'){
- n++;
- return;
- } //取消关注的作者跳过检测
- if(commonui.postArg && commonui.postArg.data[0] && commonui.postArg.data[0].pAid == k && __CURRENT_TID > v.lastTid){
- v.lastTid = __CURRENT_TID;
- v.read = 1;
- localStorage.subscribeToolData = JSON.stringify(st.data);
- n++;
- return;
- } //若当前页为关注作者的新帖首页则不再提示该帖
- $.post('thread.php?order_by=postdatedesc&authorid=' + k, 'lite=xml', function(response){
- let t = $(response).find('__T item:eq(0)'),
- tid = parseInt(t.find('tid').text()),
- postdate = parseInt(t.find('postdate').text()),
- author = t.find('author').text(),
- authorid = t.find('authorid').text(),
- subject = t.find('subject').text(),
- url = t.find('tpcurl').text();
- if(tid > v.lastTid){
- v.read = 0;
- if(authorid != '0')
- st.cache[postdate] = [author, authorid, subject, url];
- }
- else if(authorid != '0' && v.read == 0){
- st.cache[postdate] = [author, authorid, subject, url];
- }
- v.lastTid = tid;
- localStorage.subscribeToolData = JSON.stringify(st.data);
- n++;
- });
- });
-
- //版面中显示关注作者头像及新帖提醒
- if(/\/thread\.php\?(f|st)id.+$/.test(window.location.href)){
- //新帖提醒
- if(usl.lS)
- (function check(){
- if(st.check){
- if(st.check > 20){
- st.lastCheck = 'timeout';
- delete st.check;
- st.cache = {};
- return;
- }
- else
- st.check++;
- }
- else
- st.check = 1;
-
- if(n == Object.keys(st.data).length){
- st.lastCheck = st.check;
- delete st.check;
- let ck = Object.keys(st.cache);
- if(ck[0])
- if(commonui.notification)
- st.f(ck);
- else
- commonui.loadNotiScript(function(){
- st.f(ck);
- });
- }
- else
- setTimeout(function(){
- check();
- },150);
- })();
-
- //显示关注作者头像
- let authors = $('div#mc a[href^="/nuke.php?func=ucp&uid="]');
- if(!authors[0])
- return;
- authors.each(function(i, author){
- let uid = author.title.replace(/\D/g, '');
- if(!st.data[uid] || $(author).prev('div:has(img)')[0])
- return;
- $.post('nuke.php?__lib=ucp&__act=get&uid=' + uid, '__output=12', function(response){
- if(!response.result.avatar)
- return;
- let a = commonui.selectAvatar(response.result.avatar, __CURRENT_UID),
- td = author.parentNode,
- rp = td.getClientRects()[0],
- h = rp.bottom - rp.top,
- d = _$('/div').$0(
- 'style', {
- borderRight: '1px solid ' + __COLOR.bg0,
- overflow: 'hidden',
- width: h + 'px',
- height: h + 'px',
- cssFloat: 'left',
- margin: '-6px 0 -6px -' + h + 'px'
- },
- _$('/img').$0(
- 'onload', function(){
- let r;
- if(this.height > this.width){
- r = h / this.width;
- this.width = h;
- this.height *= r;
- this.style.marginTop = (Math.abs(h - this.height) / 3 * -1) + 'px';
- }
- else{
- r = h / this.height;
- this.height = h;
- this.width *= r;
- this.style.marginLeft = (Math.abs(h - this.width) / 2 * -1) + 'px';
- }
- this.style.opacity = 0.7;
- this.style.display = '';
- },
- 'style', {display:'none'},
- 'src', a
- )
- );
- td.style.paddingLeft = h + 'px';
- $(author).before(d); //forum.js commonui.loadThreadInfoSetAvatar
- });
- });
- }
- }
- };
-
- commonui.mainMenu.data[402] = {innerHTML: '订阅按钮设置', on: {event: 'click', func: function(e){
- let o = __SETTING.o = commonui.createadminwindow(),
- k = _$('/input').$0('type','checkbox','checked',0)._.on('click', function(){
- st.data.s = this.checked ? 0 : 1;
- localStorage.subscribeToolData = JSON.stringify(st.data);
- st.r();
- });
- o._.addContent(null);
- o._.addTitle('订阅按钮设置');
- o._.addContent(
- k,
- '悬停显示',
- _$('/br')
- );
- if(!st.data.s)
- k._.attr('checked', 1);
- o._.show(e);
- }}, parent: 18};
- commonui.mainMenu.data[18].subKeys.push(402);
-
- st.data = usl.lS ? st.init() : {'8143443':{'name':'奥妮酱'}, s: 0};
-
- st.r();
-
- if(!usl.userScriptData.stBtn)
- usl.userScriptData.stBtn = st.r;
-
- }
-
- (function check(){
- try{
- if(commonui.userScriptLoader.$)
- init(commonui.userScriptLoader);
- else
- setTimeout(check, 5);
- }
- catch(e){
- setTimeout(check, 50);
- }
- })();
-
- })();