// ==UserScript== // @name BGM NSFW // @namespace https://greasyfork.org/zh-CN/scripts/38829-bgm-nsfw // @version 0.5 // @description NSFW for bangumi // @author Vincent // @include /^https?:\/\/((bangumi|bgm)\.tv|chii.in)\/group\/topic\/\d+$/ // @require https://code.jquery.com/jquery-3.2.1.min.js // @grant GM_addStyle // @downloadURL https://update.greasyfork.icu/scripts/38829/BGM%20NSFW.user.js // @updateURL https://update.greasyfork.icu/scripts/38829/BGM%20NSFW.meta.js // ==/UserScript== GM_addStyle(` .btn-nsfw { color: #AAAAAA; border-radius: 4px; padding: 0 4px; margin-left: 4px; cursor: pointer; } .btn-nsfw-cancel { color: #FFFFFF; background: #F09199; border-radius: 4px; padding: 0 4px; margin-left: 4px; cursor: pointer; } .post-nsfw { display: none !important; } `); var nsfw_items = undefined; var topic_id = null; const DB_NAME = 'nsfw'; const DB_TOPIC_TABLE = 'topic'; var DB = { update: function() { this.action(function(objectStore) { objectStore.put(nsfw_items, topic_id); }); }, delete: function() { this.action(function(objectStore) { if (nsfw_items.length) { objectStore.put(nsfw_items, topic_id); } else { objectStore.delete(topic_id); } }); }, init: function () { this.action(function(objectStore) { var list = objectStore.get(topic_id); list.onsuccess = function(event) { if (list.result != undefined && list.result.length) { nsfw_items = list.result; item = $('#post_' + nsfw_items.join(', #post_')); addNSFW(item); item.children('div.re_info').append('NSFW'); }; addNSFWBtn(); } }); }, action: function(callback) { var connect = indexedDB.open(DB_NAME, 1); connect.onerror = function(event) { // 错误处理程序在这里。 }; connect.onupgradeneeded = function(event) { var objectStore = event.target.result.createObjectStore(DB_TOPIC_TABLE); }; connect.onsuccess = function(event) { var transaction = event.target.result.transaction([DB_TOPIC_TABLE], "readwrite"); var objectStore = transaction.objectStore(DB_TOPIC_TABLE); callback(objectStore); }; } }; (function() { topic_id = window.location.pathname.split('/')[3]; DB.init(); })(); function addNSFWBtn() { $('#comment_list').on('mouseenter', 'div[id*=post_]', function () { if (!$(this).children('div.re_info').children('small.btn-nsfw, small.btn-nsfw-cancel').length) { $(this).children('div.re_info').append('NSFW'); } }); $('#comment_list').on('mouseleave', 'div[id*=post_]', function () { $(this).children('div.re_info').children('small.btn-nsfw').remove(); }); // temp action $('#comment_list').on('click', 'small.btn-nsfw', function () { var item = $(this).parent().parent(); addNSFW(item); storeNSFWLocalDB(item.prop('id').split('_')[1]); $(this).addClass('btn-nsfw-cancel'); $(this).removeClass('btn-nsfw'); }); $('#comment_list').on('click', 'small.btn-nsfw-cancel', function () { var item = $(this).parent().parent(); removeNSFW(item); cancelNSFWLocalDB(item.prop('id').split('_')[1]); $(this).addClass('btn-nsfw'); $(this).removeClass('btn-nsfw-cancel'); }); } function addNSFW(item) { item.not('.row_reply').addClass('sub_reply_collapse'); item.children('div.inner').children('div.cmt_sub_content').addClass('post-nsfw'); item.children('div.inner').children('div.reply_content').children('div.message').addClass('post-nsfw'); } function removeNSFW(item) { item.filter('.sub_reply_collapse').removeClass('sub_reply_collapse'); item.children('div.inner').children('div.cmt_sub_content').removeClass('post-nsfw'); item.children('div.inner').children('div.reply_content').children('div.message').removeClass('post-nsfw'); } function storeNSFWLocalDB(post_id) { if (nsfw_items == undefined || nsfw_items == '') { nsfw_items = []; } if (nsfw_items.indexOf(post_id) == - 1) { // add to array nsfw_items.push(post_id); DB.update(); } } function cancelNSFWLocalDB(post_id) { if (nsfw_items == undefined || nsfw_items == '') { nsfw_items = []; } if (nsfw_items.indexOf(post_id) != - 1) { // remove from array nsfw_items.splice(nsfw_items.indexOf(post_id), 1); if (nsfw_items.length) { DB.update(); } else { DB.delete(); } } }