// ==UserScript==
// @name 过早客 Sina Emoticon
// @version 0.3
// @description 让过早客支持新浪表情
// @author mrzhv,LawSiki、huage2580
// @namespace https://github.com/zhouzhili/ggk_emoticon
// @match https://www.guozaoke.com/t/*
// @match https://guozaoke.com/t/*
// @exclude https://guozaoke.com/t/create/*
// @exclude https://www.guozaoke.com/t/create/*
// @icon https://cdn.guozaoke.com//static/avatar/79/s_default.png
// @license MIT
// ==/UserScript==
(function () {
'use strict';
var css = ' #emoticon_wrapper { background-color: white; border: 1px solid rgb(233 233 233); border-radius: 5px; min-height: 6.25rem; height: 300px; box-shadow: 0 0.125rem 0.25rem 0 rgba(0, 0, 0, 0.1); position: absolute; top:25px;z-index: 999; } .emoticon_facebox { height: 266px; width: 410px; margin: 12px 2px 12px 12px; padding: 0 10px 0 0; overflow-x: hidden; overflow-y: auto; text-align: left; } .woo-box-item-inlineBlock { display: inline-block; } .hover_effect :hover { background-color: rgb(247 98 42 / 60%); border-radius: 100%; } .u-col-12 [class*="box-item"], .u-col-12 [data-type="w-box-item"] { width: 8.333%; } .emoticon_tab .wbpro-iconbed { width: 38px; height: 38px; } .wbpro-iconbed { position: relative; width: 34px; height: 34px; cursor: pointer; line-height: 0; } .woo-box-justifyCenter { -webkit-box-pack: center; -ms-flex-pack: center; justify-content: center; } .woo-box-alignCenter { align-items: center; -webkit-box-align: center; -ms-flex-align: center; } .woo-box-flex { display: -webkit-box; display: -ms-flexbox; display: flex; } .emoticon_img { width: 24px; height: 24px; } img.emoticon_img_text { width: 20px; height: 20px; padding: 0px 2px;}';
document.$emoticonObj = {};
// 将数据挂载到document上,方便后面获取
document.$emoticonObj.map = { "2021": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a8/2021_newyear_org.png", "春游家族": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b6/2021_YoungFamily_org.png", "生而为赢": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f7/2021_BorntoWin_org.png", "调休": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/2021_tiaoxiu_org.png", "放假": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6b/2021_fangjia_org.png", "迷雾剧场": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2021_lighton_org.png", "玉兔": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/2021_yutu_org.png", "航天员": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/53/2021_yuhangyuan_org.png", "开学季": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/72/2021_kaixueji_org.png", "赢牛奶": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9c/2021_yingniunai_org.png", "抱一抱": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/af/2020_hug_org.png", "小红花": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fe/2020_redflower_org.png", "微笑": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e3/2018new_weixioa02_org.png", "可爱": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/09/2018new_keai_org.png", "太开心": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1e/2018new_taikaixin_org.png", "鼓掌": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_guzhang_org.png", "嘻嘻": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/33/2018new_xixi_org.png", "哈哈": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8f/2018new_haha_org.png", "笑cry": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2018new_xiaoku_thumb.png", "挤眼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_jiyan_org.png", "馋嘴": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fa/2018new_chanzui_org.png", "黑线": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a3/2018new_heixian_org.png", "汗": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/28/2018new_han_org.png", "挖鼻": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9a/2018new_wabi_thumb.png", "哼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7c/2018new_heng_org.png", "怒": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_nu_org.png", "委屈": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a5/2018new_weiqu_org.png", "可怜": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2018new_kelian_org.png", "失望": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_shiwang_org.png", "悲伤": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ee/2018new_beishang_org.png", "泪": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6e/2018new_leimu_org.png", "允悲": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/83/2018new_kuxiao_org.png", "害羞": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_haixiu_org.png", "污": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/10/2018new_wu_org.png", "爱你": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/f6/2018new_aini_org.png", "亲亲": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2c/2018new_qinqin_org.png", "色": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9d/2018new_huaxin_org.png", "憧憬": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c9/2018new_chongjing_org.png", "舔屏": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3e/2018new_tianping_org.png", "坏笑": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4d/2018new_huaixiao_org.png", "阴险": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/9e/2018new_yinxian_org.png", "笑而不语": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2d/2018new_xiaoerbuyu_org.png", "偷笑": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/71/2018new_touxiao_org.png", "酷": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c4/2018new_ku_org.png", "并不简单": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/2018new_bingbujiandan_org.png", "思考": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/2018new_sikao_org.png", "疑问": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b8/2018new_ningwen_org.png", "费解": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/2a/2018new_wenhao_org.png", "晕": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/07/2018new_yun_org.png", "衰": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_shuai_org.png", "骷髅": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_kulou_org.png", "嘘": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b0/2018new_xu_org.png", "闭嘴": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_bizui_org.png", "傻眼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/dd/2018new_shayan_org.png", "吃惊": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/49/2018new_chijing_org.png", "吐": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/08/2018new_tu_org.png", "感冒": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/40/2018new_kouzhao_org.png", "生病": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3b/2018new_shengbing_org.png", "拜拜": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/fd/2018new_baibai_org.png", "鄙视": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2018new_bishi_org.png", "白眼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ef/2018new_landelini_org.png", "左哼哼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/43/2018new_zuohengheng_org.png", "右哼哼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/c1/2018new_youhengheng_org.png", "抓狂": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/17/2018new_zhuakuang_org.png", "怒骂": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/87/2018new_zhouma_org.png", "打脸": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/cb/2018new_dalian_org.png", "顶": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/ae/2018new_ding_org.png", "互粉": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/86/2018new_hufen02_org.png", "钱": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a2/2018new_qian_org.png", "哈欠": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/55/2018new_dahaqian_org.png", "困": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/3c/2018new_kun_org.png", "睡": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e2/2018new_shuijiao_thumb.png", "求饶": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/aa/moren_qiurao02_org.png", "吃瓜": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/01/2018new_chigua_org.png", "打call": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/39/moren_dacall02_org.png", "awsl": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/14/moren_awsl02_org.png", "苦涩": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7e/2021_bitter_org.png", "裂开": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/1b/202011_liekai_org.png", "牛年大吉": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4a/2021_niuniandaji_org.png", "牛大发": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/4b/2021_niudafa_org.png", "牛哞哞": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/30/2021_cattle_org.png", "doge": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/a1/2018new_doge02_org.png", "二哈": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/22/2018new_erha_org.png", "喵喵": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/7b/2018new_miaomiao_org.png", "酸": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/b3/hot_wosuanle_org.png", "中国赞": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6d/2018new_zhongguozan_org.png", "抱抱": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/42/2018new_baobao_org.png", "摊手": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/62/2018new_tanshou_org.png", "跪了": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/75/2018new_gui_org.png", "鲜花": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/d4/2018new_xianhua_org.png", "红灯笼": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/e8/2021_lantern_org.png", "烟花": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/96/2021_fireworks_org.png", "雪花": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/13/yunying2020_snowflakes_org.png", "迎福运": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/db/2021_fuzizheng_org.png", "福到了": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/5f/2021_fudaole_org.png", "丘比特": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/45/2021_qiubite_org.png", "单身狗": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/20/2021_alongdog_org.png", "小丑": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/6f/2021_xiaochou_org.png", "杰瑞": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/da/2021_jerry_org.png", "汤姆": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/31/2021_tom_org.png", "奶瓶": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/8c/2021_naiping_org.png", "暖一下": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/bb/2021_nuanyixia_org.png", "牛轰轰拥抱": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/74/2021_niuhongbao_org.png", "牛牛哒": "https://face.t.sinajs.cn/t4/appstyle/expression/ext/normal/97/2021_niuniuda_org.png" }
// 插入CSS
var style = document.createElement('style');
style.appendChild(document.createTextNode(css));
document.body.appendChild(style);
//
var reply_content = document.getElementById('inputor')
// 创建单个表情元素
function createEmoticon(alt, src, is_content) {
var inline_block = document.createElement('div');
var img_div = document.createElement('div');
if (is_content) {
inline_block.setAttribute('class', 'woo-box-item-inlineBlock');
} else {
inline_block.setAttribute('class', 'woo-box-item-inlineBlock hover_effect');
}
img_div.setAttribute('class', 'wbpro-iconbed woo-box-flex woo-box-alignCenter woo-box-justifyCenter');
img_div.setAttribute('alt', alt);
img_div.addEventListener('click', function (event) {
reply_content.value = reply_content.value + "[" + this.getAttribute('alt') + "]"
});
var img = document.createElement('img');
img.setAttribute('class', 'emoticon_img');
img.setAttribute('alt', alt);
img.setAttribute('src', src);
img_div.appendChild(img);
inline_block.appendChild(img_div);
return inline_block;
}
// 生成回复框的表情区域
var upload_btn = document.querySelector('div.topic-reply-create.container-box.mt10 > div.ui-header > .title');
if (upload_btn != null) {
var wrapper = document.createElement('div');
wrapper.id = 'emoticon_wrapper';
var emoticon_facebox = document.createElement('div');
emoticon_facebox.setAttribute('class', 'emoticon_facebox');
wrapper.appendChild(emoticon_facebox);
wrapper.style.display = "none";
var emoticon_a = document.createElement('a');
emoticon_a.href = 'javascript:void(0);';
emoticon_a.appendChild(document.createTextNode(" 表情 "));
emoticon_a.addEventListener('click', function (event) {
if (wrapper.style.display == '') {
wrapper.style.display = 'none';
} else {
wrapper.style.display = '';
}
})
upload_btn.innerHTML = `<div style="display: flex;justify-content: space-between;position:relative"><div class="left">创建新的回复</div><div class="right"><a href="/"><strong>←</strong> 过早客</a><a href="#"><strong>↑</strong> 回到顶部</a></div></div>`
var rightEl = upload_btn.childNodes[0].childNodes[1]
rightEl.insertBefore(emoticon_a, rightEl.childNodes[0])
rightEl.insertBefore(wrapper, rightEl.childNodes[0])
for (let key in document.$emoticonObj.map) {
emoticon_facebox.appendChild(createEmoticon(key, document.$emoticonObj.map[key]));
}
}
// 隐藏原来的提交按钮
var submitBtn = document.getElementById('checkall')
if (submitBtn) {
submitBtn.style.display = 'none'
}
//添加一个转换按钮
var form = document.querySelector('div.topic-reply-create.container-box.mt10 > div.ui-content > form >.mt10')
var submit2 = document.createElement('input');
submit2.value = "立即回复";
submit2.setAttribute("class", "btn btn-primary mr10");
submit2.type = "button";
form.insertBefore(submit2, form.childNodes[0]);
submit2.href = 'javascript:void(0);';
submit2.addEventListener('click', function (event) {
//输入框转换表情
console.log('回复转换...');
var sourceInput = reply_content.value;
var it = sourceInput.matchAll(/\[(.+?)\]/g);
let match;
while (!(match = it.next()).done) {
let text = match.value[0]
let alt = match.value[1];
console.log(text);
let src = document.$emoticonObj.map[alt.replace(' ', '')];
if (src == null) continue;
sourceInput = sourceInput.replace(text, src + ' ');
}
reply_content.value = sourceInput;
//转换完成提交回复
if (submitBtn) {
submitBtn.click()
}
});
//渲染其他回复
document.$emoticonObj.render = function () {
var contents = document.querySelectorAll('.reply-item .content,.topic-detail .ui-content')
contents.forEach(content => {
let html = content.innerHTML;
var it = html.matchAll(/\[(.+?)\]/g);
let match;
while (!(match = it.next()).done) {
let text = match.value[0]
let alt = match.value[1];
console.log(text);
let src = document.$emoticonObj.map[alt.replace(' ', '')];
if (src == null) continue;
let tempEle = document.createElement('div');
let img = document.createElement('img');
img.setAttribute('class', 'emoticon_img_text');
img.setAttribute('alt', alt);
img.setAttribute('title', alt);
img.setAttribute('src', src);
tempEle.appendChild(img);
content.innerHTML = content.innerHTML.replace(text, tempEle.innerHTML);
tempEle = null;
}
})
}
document.$emoticonObj.render();
// 发布页面,点击预览后,预览区域内重新渲染表情
const main = document.getElementById('Main');
if (main) {
main.addEventListener('DOMNodeInserted', function (e) {
if (e.relatedNode.id == 'topic_preview') {
document.$emoticonObj.render();
}
}, false);
}
})();