add information to nicolive comment area
目前為
// ==UserScript==
// @name Nicolive Comment Adapter
// @version 0.3
// @grant none
// @run-at document-start
// @match https://live2.nicovideo.jp/watch/lv*
// @description add information to nicolive comment area
// @namespace https://greasyfork.org/users/715401
// ==/UserScript==
(function () {
// Style fix
var styleNode = document.createElement ('style');
styleNode.textContent = `
span.___table-cell___3E0rV {
width: 99% !important;
}
span.___comment-time___1sDyW {
display: initial;
}
span.___comment-author-name___2RYbs {
display: initial;
width: 12em;
margin-right: 1em;\
overflow-x: hidden;
}
`
var styleParent = document.getElementsByTagName ('head')[0] || document.body || document.documentElement;
styleParent.appendChild(styleNode);
// comment adapter
var user_id_hash = {}
setInterval( function() {
var noTexts = document.getElementsByClassName("___comment-number___2Qws3")
var i, len, tNode, orgHTML, re
for (i = 0, len = noTexts.length|0 ; i < len; i = i+1|0) {
tNode = noTexts[i]
var noText = tNode.innerText
if ( noText && user_id_hash[noText] && user_id_hash[noText] != tNode.nextSibling.innerText) {
tNode.nextSibling.innerHTML = '<a target="_blank" href="//nicovideo.jp/user/' +
user_id_hash[noText] + '">' + user_id_hash[noText] + '</a>';
}
}
var commentTexts = document.getElementsByClassName("___comment-text___2cPL0")
for (i = 0, len = commentTexts.length|0 ; i < len; i = i+1|0) {
tNode = commentTexts[i]
orgHTML = tNode.innerHTML
re = /(sm\d+)/
if ( ! orgHTML.includes("<a ") ) {
var newText1 = orgHTML.replace( re, '<a target="_blank" href="https://nicovideo.jp/watch/$1">$1</a>')
tNode.innerHTML = newText1
}
}
}, 700)
// WebSocket interseptor
var _before_send = function (data, ws) {
// console.log("Sending message to " + ws.url + " : " + data);
}
var _before_message = function (e, ws) {
if (typeof e.data === "string") {
}
}
var _after_message = function (e, ws) {
if (typeof e.data === "string") {
// console.log("Received message from " + ws.url + " : " + e.data);
try {
var js = JSON.parse( e.data)
if (js.chat && js.chat.no) {
user_id_hash["" + js.chat.no] = js.chat.user_id
}
}
catch (er) {
console.log(er.message)
}
}
else {
// console.log("Received message from " + ws.url + " : [nostring]");
}
}
var _send = window.WebSocket.prototype.send
window.WebSocket.prototype.send = function() {
_before_send(arguments[0], this)
return _send.apply( this, [].slice.call(arguments))
}
var _addEventListener = window.WebSocket.prototype.addEventListener
window.WebSocket.prototype.addEventListener = function() {
var eventThis = this
// if eventName is 'message'
if (arguments[0] === 'message') {
arguments[1] = (function (userFunc) {
return function() {
_before_message(arguments[0], eventThis)
userFunc.apply(eventThis, [].slice.call(arguments))
_after_message(arguments[0], eventThis)
}
})(arguments[1])
}
return _addEventListener.apply(this, [].slice.call(arguments))
}
Object.defineProperty(window.WebSocket.prototype, 'onmessage', {
'set': function () {
var eventThis = this
var userFunc = arguments[0]
var onMessageHandler = function () {
_before_message(arguments[0], eventThis)
userFunc.apply(eventThis, [].slice.call(arguments))
_after_message(arguments[0], eventThis)
}
return _addEventListener.apply(this, ['message', onMessageHandler, false])
}
})
})()