// ==UserScript==
// @name NGA论坛自定义表情包(无期迷途版)
// @namespace https://github.com/HanaHye
// @version 0.0.5
// @description NGA论坛自定义表情包扩展(无期迷途版)
// @author biuuu
// @match *://bbs.ngacn.cc/*.php*
// @match *://ngabbs.com/*.php*
// @match *://nga.178.com/*.php*
// @match *://bbs.nga.cn/*.php*
// @grant none
// @downloadURL https://update.greasyfork.icu/scripts/474894/NGA%E8%AE%BA%E5%9D%9B%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A1%A8%E6%83%85%E5%8C%85%EF%BC%88%E6%97%A0%E6%9C%9F%E8%BF%B7%E9%80%94%E7%89%88%EF%BC%89.user.js
// @updateURL https://update.greasyfork.icu/scripts/474894/NGA%E8%AE%BA%E5%9D%9B%E8%87%AA%E5%AE%9A%E4%B9%89%E8%A1%A8%E6%83%85%E5%8C%85%EF%BC%88%E6%97%A0%E6%9C%9F%E8%BF%B7%E9%80%94%E7%89%88%EF%BC%89.meta.js
// ==/UserScript==
(async function () {
'use strict';
const addStyle = (css) => {
const style = document.createElement('style')
style.innerText = css
document.head.appendChild(style)
}
const loadScript = async () => {
const script = document.createElement('script')
script.src = 'https://cdn.jsdelivr.net/npm/lodash@4.17.21/lodash.min.js'
document.head.appendChild(script)
return new Promise((rev, rej) => {
script.onload = rev
script.onerror = rej
})
}
await loadScript()
const randomNum = Math.floor(Math.random() * 1e5)
addStyle(`
.single_ttip2 .div3 > div {
padding: 4px 4px 0 4px;
}
.single_ttip2 .div3 > div:empty {
display: inline-block;
padding: 0;
}
.sticker-${randomNum} img {
max-height: 70px;
cursor: pointer;
}
.sticker-${randomNum} {
margin: 0.2em;
}
.single_ttip2 .block_txt_big {
padding: 0 0.5em;
cursor: pointer;
outline: 0;
margin-left: -0.2em;
margin-right: 0.6em;
}
.single_ttip2 .block_txt_big:hover {
filter: brightness(0.95);
}
.single_ttip2 .block_txt_big:active {
filter: brightness(0.9);
}
.sticker-toolbar-${randomNum} {
position: absolute;
right: 53px;
top: 0;
}
.sticker-import-${randomNum} {
opacity: 0;
position: absolute;
left: 0;
top: 0;
width: 100%;
height: 100%;
}
`)
let boxId = null
const sleep = function (time) {
return new Promise(rev => {
setTimeout(rev, time)
})
}
let stickerMap = new Map([
['无期迷途', [
'./mon_202309/09/axsiQ2s-4w4cKfT8S2s-2s.png', './mon_202309/09/axsiQ2s-chorKhT8S2s-2s.png', './mon_202309/09/axsiQ2s-kysbKgT8S2p-2s.png', './mon_202309/09/axsiQ2s-722cKiToS2i-2s.png', './mon_202309/09/axsiQ2s-1fmnKeT8S2l-2s.png', './mon_202309/09/axsiQ2s-92mjKkToS2s-2s.png', './mon_202309/09/axsiQ2s-hozuKlToS2s-2s.png', './mon_202309/09/axsiQ2s-fcejKeT8S25-2s.png', './mon_202309/09/axsiQ2s-1ry1KgT8S27-2s.png', './mon_202309/09/axsiQ2s-amnkKfT8S2b-2s.png', './mon_202309/09/axsiQ2s-igceKhT8S2p-2s.png', './mon_202309/09/axsiQ2s-5j16KfT8S2o-2s.png', './mon_202309/09/axsiQ2s-d62rKeT8S2b-2s.png', './mon_202309/09/axsiQ2s-kxsoKkToS2s-2s.png', './mon_202309/09/axsiQ2s-a7u2KiToS2s-2s.png', './mon_202309/09/axsiQ2s-itx4KiToS2s-2s.png', './mon_202309/09/axsiQ2s-544cKkToS2s-2s.png', './mon_202309/09/axsiQ2s-d3y3KhT8S2o-2s.png', './mon_202309/09/axsiQ2s-71rKjToS2t-2s.png', './mon_202309/09/axsiQ2s-8mzlKjToS2s-2s.png'
]],
['无期迷途KFC', [
'./mon_202309/09/axsiQ2s-3wgjKnToS2t-2s.png', './mon_202309/09/axsiQ2s-btknKpToS2u-2s.png', './mon_202309/09/axsiQ2s-khxkKoToS2x-2s.png', './mon_202309/09/axsiQ2s-6xuiKmToS2r-2s.png', './mon_202309/09/axsiQ2s-erfwKnToS2u-2s.png', './mon_202309/09/axsiQ2s-13peKmToS2u-2s.png', './mon_202309/09/axsiQ2s-92jlKlToS2u-2s.png', './mon_202309/09/axsiQ2s-gwlxKmToS2s-2s.png', './mon_202309/09/axsiQ2s-38ulKnToS2u-2s.png', './mon_202309/09/axsiQ2s-buz9KpToS2r-2s.png', './mon_202309/09/axsiQ2s-kl7hKoToS2t-2s.png', './mon_202309/09/axsiQ2s-6worKqToS2v-2s.png'
]]
])
let recentStickers = []
try {
let arr = JSON.parse(localStorage.getItem('custom-sticker'))
if (Array.isArray(arr)) {
stickerMap = new Map(arr)
}
} catch (e) { }
try {
recentStickers = JSON.parse(localStorage.getItem('recent-sticker'))
if (!Array.isArray(recentStickers)) {
recentStickers = []
}
} catch (e) { }
const saveCustomSticker = (map = stickerMap) => {
localStorage.setItem('custom-sticker', JSON.stringify([...map]))
}
window.saveRecentSticker = (sticker) => {
if (recentStickers.includes(sticker)) return
recentStickers.push(sticker)
recentStickers = recentStickers.slice(-10)
localStorage.setItem('recent-sticker', JSON.stringify(recentStickers))
}
const urlPrefix = 'https://img.nga.178.com/attachments'
const resolveUrl = (src) => {
let url = src
if (/^https?\:\/\//.test(src)) {
} else if (/^\.\//.test(src)) {
url = `${urlPrefix}${src.replace(/^\./, '')}`
} else if (/^[^\/]/.test(src)) {
url = `${urlPrefix}/${src}`
}
return _.escape(url)
}
const insertStickers = async (stickerBox, list) => {
let html = ''
if (recentStickers.length) {
recentStickers.forEach(sticker => {
const src = resolveUrl(sticker)
const safeSticker = _.escape(sticker)
html += `
`
})
html = `