// ==UserScript==
// @name tiebaCustomFace
// @description 贴吧自定义表情
// @icon http://tb.himg.baidu.com/sys/portrait/item/c339b7e2d3a1b5c4c3a8d726
// @include http://tieba.baidu.com/*
// @version 2014.3.23
// @namespace https://greasyfork.org/users/25324
// ==/UserScript==
var _window = typeof unsafeWindow == 'undefined' ? window : unsafeWindow;
var $ = _window.$;
var faces = []; //全部表情
var selector; //判断选中的是回复框还是楼中楼
var recentlyFaceNum = 45; //最近使用表情数量
var LZLCss = '.insertsmiley_holder';
//读取表情列表
var splitor = " "; //GM变量分隔符
var tabNum = 0;
var baiduFace1 = [];
//度娘自带表情
function defaultFace(num, name) {
this.num = num;
this.name = name;
}
var face = GM_getValue('FACES', '{"tabName":"","faceSrc":[""],"colCount":"8","rowCount":1,"faceWidth_Height":60,"position":0}');
if (face == "")
face = '{"tabName":"","faceSrc":[""],"colCount":"8","rowCount":1,"faceWidth_Height":60,"position":0}';
face = face.split(splitor); //分割成数组
for (var i = 0; i < face.length; i++) {
faces.push(JSON.parse(face[i]));
if (!faces[i].position)
faces[i].position = 0;
}
//创建表情构造函数
function Face(tabName, srcArray, colCount, position) {
this.tabName = tabName;
this.faceSrc = srcArray;
this.colCount = colCount;
this.rowCount = Math.round(srcArray.length / colCount) + 1;
this.faceWidth_Height = 500 / colCount - 2;
this.position = position || 0;
}
//响应监听函数
var tbodyHtml = []; //存储表情tbody内的html
var addFaces = function() {
//获得百度自带表情json,隐藏用
$('.s_tab_btn').each(function() {
baiduFace1.push(new defaultFace($(this).attr('data-index'), $(this).find('span').html()));
});
faces[0].tabName = "最近";
addSettingElement(); //添加编辑删除等元素
addEventOnce(); //添加只需添加一次的事件
if (faces.length === 0) //保证faces中至少有一个元素
faces[0] = new Face("", [""], 8);
for (var index = 0; index < faces.length; index++) {
var face = faces[index];
if (face.position == 0)
selector.find('li.s_tab_btn[data-index="' + (parseInt(face.position) + 1) + '"]').before('<li id="smilyTab' + index + '" class="s_tab_btn customSmily"><span class="s_tab_btnbg" data-index="' + face.tabName + '">' + face.tabName + '</span></li>');
else
selector.find('li.s_tab_btn[data-index="' + (parseInt(face.position)) + '"]').after('<li id="smilyTab' + index + '" class="s_tab_btn customSmily"><span class="s_tab_btnbg" data-index="' + face.tabName + '">' + face.tabName + '</span></li>');
tabOnClick(index);
}
//隐藏元素
var hidef = GM_getValue('hideFace', '');
if (hidef) {
hidef = hidef.split(',');
for (var i = 0; i < hidef.length; i++) {
$(css + ' li.s_tab_btn[data-index="' + hidef[i] + '"]').hide();
$(css + ' li.s_tab_btn span[data-index="' + hidef[i] + '"]').parent().hide();
}
} //
var sf = document.querySelector(css + " #showFace");
sf.addEventListener("click", blacklistManage, false);
normalTabClick(); //添加自带表情组点击事件
setTimeout(ImgOnClickAddMostUsedFace, 200); //添加最近表情点击事件
tabNum = GM_getValue('tabNum', '0');
//初始化默认表情组
//if(tabNum!=-1)
//tabNum = 0; //默认上次标签页
//tabNum=0;
if (tabNum == 0 || tabNum > faces.length) {
hidemenu();
}
if (faces.length > tabNum) {
selector.find('.selected').removeClass('selected');
refreshFaces(tabNum);
selector.find("#smilyTab" + tabNum + " span").addClass('selected');
} else
fetchTbodyHtml();
}
//黑名单管理
var blacklistManage = function(dataindex) {
addBlacklistDiv();
}
//添加表情黑名单管理div
var addBlacklistDiv = function() {
var blist = GM_getValue('hideFace', "").split(',');
var html = '<div id="blist"><div id="blistdiv">';
var content;
for (var i = 0; i < baiduFace1.length; i++)
html = html + '<span class="blistElement" index="' + baiduFace1[i].num + '">' + baiduFace1[i].name + '</span>';
html += '<br>';
for (var i = 0; i < faces.length; i++)
html = html + '<span class="blistElement" index="' + faces[i].tabName + '">' + faces[i].tabName + '</span>';
html += '</div><span id="blistConfig">确认</span></div>';
selector.find('DIV.s_layer_tab.j_tab').after(html);
GM_addStyle(blistcss);
//点击显示/隐藏
function hasClass(node, className) //是否具有某个类名
{
var names = node.className.split(/\s+/);
for (var i = 0; i < names.length; i++) {
if (names[i] == className) return true;
}
return false;
}
var t = GM_getValue('hideFace', '').split(',');
for (var i = 0; i < t.length; i++) {
if (t[i])
$('#blist span.blistElement[index="' + t[i] + '"]').addClass('blisthide');
}
var allElement = document.querySelectorAll('#blistdiv span.blistElement');
[].forEach.call(allElement, function(e) {
function Eclick() {
var l = e.getAttribute('index');
if (hasClass(e, 'blisthide')) {
e.className = e.className.replace("blisthide", '');
$('li.s_tab_btn[data-index="' + l + '"]').show();
if (l == '最近') //默认标签页
{
tabNum = 0;
GM_setValue('tabNum', 0)
}
$(css + ' li.s_tab_btn span[data-index="' + l + '"]').parent().show();
var s = GM_getValue('hideFace', '').split(',');
s.splice(s.indexOf(l), 1);
GM_setValue('hideFace', s.join(','));
} else {
if (l == '最近') {
tabNum = 1000;
GM_setValue('tabNum', tabNum);
}
e.className = e.className + " " + 'blisthide';
var listTemp = GM_getValue('hideFace', '');
$('li.s_tab_btn[data-index="' + l + '"]').hide();
$(css + ' li.s_tab_btn span[data-index="' + l + '"]').parent().hide();
GM_setValue('hideFace', listTemp + "," + l);
}
}
e.addEventListener('click', Eclick, false);
});
var cf = document.querySelector('#blistConfig');
cf.addEventListener('click', function() {
$('#blist').remove();
});
}
//标签点击事件(标签元素背景相关)
//添加设置元素
var addSettingElement = function() {
selector.find('DIV.s_layer_tab.j_tab').after('<div id="setting">' + '<div id="aditFaceMenu">编辑</div>' //增加编辑按钮
+ '<div id="addFaceMenu">增加</div>' //增加按钮
+ '<div id="deleteFaceMenu">删除</div>' //删除按钮
+ '<div id="tab_MoveLeft">左移</div>' + '<div id="tab_MoveRight">右移</div>' + '<div id="getProfile">导出</div>' + '<div id="loadProfile">导入</div>' + '<div id="showFace">隐藏</div>' + '</div>');
//+'<div id="settingmenu">显示/隐藏菜单</div>');
}
//添加只需添加一次的事件
var m, n, s, l, r, cc; //事件
var addEventOnce = function() {
m = document.querySelector(css + " #aditFaceMenu");
m.addEventListener("click", aditFace, false);
n = document.querySelector(css + " #addFaceMenu");
n.addEventListener("click", addNewFace, false);
s = document.querySelector(css + " #deleteFaceMenu");
s.addEventListener("click", deleteFace, false);
l = document.querySelector(css + " #tab_MoveLeft");
l.addEventListener("click", tab_MoveLeft, false);
r = document.querySelector(css + " #tab_MoveRight");
r.addEventListener("click", tab_MoveRight, false);
var gp = document.querySelector(css + " #getProfile"); //导出配置
gp.addEventListener("click", function() {
if (confirm("转到纯文本模式复制文本保存配置"))
$('body').html(GM_getValue('FACES'));
}, false);
var lp = document.querySelector(css + " #loadProfile"); //导入配置
lp.addEventListener("click", function() {
var a = prompt("要导入的数据(覆盖原有数据)");
if (a) {
GM_setValue("FACES", a);
if (confirm("是否确认要导入(将会刷新)"))
window.location.reload();
} else
alert("不能为空");
}, false);
}
var tabOnClick = function(index) //添加自定义表情标签事件,index为id后缀
{
function clickIdTab() {
$('.edui-container li.s_tab_btn[data-index="1"]').click();
$('.tbui_scroll_bar.j_scroll_bar').show();
selector.find('TABLE.s_layer_table tbody').html(tbodyHtml[index]);
if (tabNum != 0)
GM_setValue('tabNum', index); //记录下标以便下次打开默认为该组
selector.find('#aditFaceMenu').show(); //显示设置栏
selector.find('#deleteFaceMenu').show();
selector.find('#tab_MoveRight').show();
selector.find('#tab_MoveLeft').show();
selector.find('.selected').removeClass('selected');
$(this).find('span').addClass("selected");
if (index == 0) {
hidemenu();
}
}
cc = document.querySelector(css + ' #smilyTab' + index);
cc.addEventListener("click", clickIdTab, false);
}
//普通表情tab点击事件
var normalTabClick = function() {
var dd = document.querySelectorAll(css + ' LI.s_tab_btn');
[].forEach.call(dd, function(e) {
function clickNormalTab() {
setTimeout(ImgOnClickAddMostUsedFace, 400); //添加表情点击事件
if (!$(this).attr('id')) {
selector.find('.customSmily span').removeClass('selected'); //移除选中状态
hidemenu();
if (tabNum != 0)
GM_setValue('tabNum', 10000);
}
}
e.addEventListener("click", clickNormalTab, false);
});
}
var hidemenu = function() {
selector.find('#aditFaceMenu').hide(); //隐藏设置选项
selector.find('#deleteFaceMenu').hide();
selector.find('#tab_MoveRight').hide();
selector.find('#tab_MoveLeft').hide();
}
//修改后更新表情框
var refreshFaces = function(index) {
tbodyHtml = fetchTbodyHtml();
selector.find('TABLE.s_layer_table tbody').html(tbodyHtml[index]);
}
//添加表情点击函数,作为常用表情功能
var ImgOnClickAddMostUsedFace = function() {
var customId = selector.find('.selected').parent().attr('id');
var reg = /http:\/\/static\.tieba\.baidu\.com\/tb\/editor\/images\/[0-9][0-9]\.gif/;
var f = document.querySelectorAll('.s_face.j_emotion');
f && [].forEach.call(f, function(e) {
var url = e.getAttribute('data-surl');
e.addEventListener('click', function() {
var ind = faces[0].faceSrc.indexOf(url);
if (ind != -1) {
faces[0].faceSrc.splice(ind, 1);
}
if (faces[0].faceSrc.length > recentlyFaceNum)
faces[0].faceSrc.pop();
if (!reg.test(url)) {
faces[0].faceSrc.unshift(url);
saveFaces();
}
if (customId) {
var cindex = parseInt(customId.replace("smilyTab", ""));
if (cindex > 0) {
var ind = faces[cindex].faceSrc.indexOf(url);
faces[cindex].faceSrc.splice(ind, 1);
faces[cindex].faceSrc.unshift(url);
saveFaces();
}
}
});
});
}
//针对某些非百度内部和宽度大于100的表情,点击改变BDE_SMILY为BDE_IMAGE,否则会未知错误
unsafeWindow.onClickImg = function(src) {
/*获取原始图片大小*/
var theImage = new Image();
theImage.src = src;
var myReg = /imgsrc\.baidu\.com|static\.tieba\.baidu\.com/;
var imageWidth = theImage.width;
var imageHeight = theImage.height;
if (!(myReg.test(src) && imageWidth <= 100)) {
setTimeout(function() {
var i = $('#ueditor_replace img[src="' + src + '"][class="BDE_Smiley"]')
i.attr('class', 'BDE_Image');
//i.attr('width',imageWidth);
//i.attr('height',imageHeight);
}, 40);
}
}
//获取tbodyHtml(表情的HTML表示)
var fetchTbodyHtml = function() {
var tbody = new Array();
for (var index = 0; index < faces.length; index++) {
var face = faces[index];
tbody[index] = '';
//face.rowCount += 2;
var row = 360 / face.faceWidth_Height > face.rowCount ? (360 / face.faceWidth_Height) : face.rowCount;
for (var i = 0; i < row; i++) {
tbody[index] += '<tr height=' + face.faceWidth_Height + '>';
for (var j = 0; j < face.colCount; j++) {
var data_postflag = (j >= face.colCount / 2) ? 1 : 0; //控制悬浮预览图像的方位,1为右侧
var cindex = i * face.colCount + j;
var currentFaceSrc = face.faceSrc[cindex]; //当前表情链接
var lzlImgReg = /http:\/\/static\.tieba\.baidu\.com\/tb.*/;
if (css == '.insertsmiley_holder' && !lzlImgReg.test(currentFaceSrc)) //楼中楼不添加百度内部图片
currentFaceSrc = undefined;
if (currentFaceSrc) {
currentFaceSrc = currentFaceSrc.replace(/\s|click=[0-9]*/g, ''); //去链接空格
tbody[index] += '<td class="s_face j_emotion" index="' + cindex + '" border="1" data-surl="' + currentFaceSrc + '" data-postflag="' + data_postflag + '" style="border-collapse:collapse;"';
tbody[index] = tbody[index] + ' align="center" bgcolor="#FFFFFF" width="' + face.faceWidth_Height + '" max-height="' + face.faceWidth_Height + '">';
tbody[index] += '<a class="img imgclasses" onclick="onClickImg(\'' + currentFaceSrc + '\')" style="background:none;"><img class="faceImg" src="' + currentFaceSrc + '" style="max-height:' + face.faceWidth_Height + 'px;max-width:' + face.faceWidth_Height + 'px;"></img></a>';
tbody[index] += '</td>';
}
}
tbody[index] += '</tr>';
}
}
return tbody;
}
//删除表情
var deleteFace = function() {
var cindex = selector.find('.selected').parent().attr('id').replace("smilyTab", "");
cindex = parseInt(cindex);
if (confirm("是否要删除 " + faces[cindex].tabName + " 表情组")) {
faces.splice(cindex, 1);
selector.find('.selected').parent().remove();
saveFaces();
//动态改变id(faces长度减1了)
for (var i = cindex; i < faces.length; i++) {
selector.find("#smilyTab" + (i + 1)).attr('id', 'smilyTab' + i);
//添加点击函数
tabOnClick(i);
}
if (faces.length > cindex) {
refreshFaces(cindex);
selector.find("#smilyTab" + (cindex) + " span").addClass('selected');
} else if (faces.length > 1) {
refreshFaces(cindex - 1);
selector.find("#smilyTab" + (cindex - 1) + " span").addClass('selected');
} else {
selector.find('#aditFaceMenu').hide();
selector.find('#deleteFaceMenu').hide();
}
}
}
//添加设置框
var addSettingFloat = function() {
if (!document.querySelector(css + " #Face_float"))
selector.find('div').eq(0).after(floatdiv);
GM_addStyle(ccss);
}
//添加表情函数
var addNewFace = function() {
addSettingFloat();
//selector.find('#Face_float').show();
selector.find('#Face_floatedit').val("");
selector.find('#tabName').val("未命名");
selector.find('#colCount').val(8);
var config_1 = function() {
var cindex = faces.length;
selector.find('li.s_tab_btn[data-index="1"]').before('<li id="smilyTab' + cindex + '" class="s_tab_btn customSmily"><span class="s_tab_btnbg">' + selector.find('#tabName').val() + '</span></li>');
selector.find('.selected').removeClass('selected');
selector.find("#smilyTab" + cindex).find('span').addClass("selected");
faces.push(new Face(selector.find('#tabName').val(),
selector.find('#Face_floatedit').val().split('\n'),
selector.find('#colCount').val()));
refreshFaces(cindex);
tabOnClick(cindex);
saveFaces();
selector.find('#maxwindow').remove();
d.removeEventListener("click", config_1, false); //移除监听
selector.find('#aditFaceMenu').show();
selector.find('#deleteFaceMenu').show();
}
var d = document.querySelector(css + " #Face_yesc");
d.addEventListener("click", config_1, false);
cancle();
}
//设置栏
//悬浮层
var floatdiv = '<div id="maxwindow"><div id="Face_float">' + '<textarea id="Face_floatedit">' + '</textarea></div>' + '<div id="tabSetting"><span id="d_tabName">标签名:<input id="tabName" type="text" onkeydown="if(event.keyCode==13) return false;">' + '</span><span id="d_colCount">每行表情:<input id="colCount" type="text" onkeydown="if(event.keyCode==13) return false;"></span></div>' + '<div id="config"><span id="Face_yesc" class="fff">保存</span><span id="Face_noc" class="fff" >取消</span></div></div>';
//编辑表情
var aditFace = function() {
//selector.find('#Face_float').show();
if (selector.find('.selected').parent().attr('id')) {
addSettingFloat();
var findex = selector.find('.selected').parent().attr('id').replace("smilyTab", "");
findex = parseInt(findex);
initFaceEditor(findex);
config();
cancle();
}
}
//初始化编辑框
var initFaceEditor = function(e) {
var vals = "";
for (var i = 0; i < faces[e].faceSrc.length; i++) {
if (i != faces[e].faceSrc.length - 1)
vals = vals + faces[e].faceSrc[i] + "\n";
else
vals = vals + faces[e].faceSrc[i];
}
selector.find('#Face_floatedit').val(vals);
selector.find('#tabName').val(faces[e].tabName);
selector.find('#colCount').val(faces[e].colCount);
}
//保存按钮
var config = function() {
var Face_yesc = function() {
var findex = selector.find('.selected').parent().attr('id').replace("smilyTab", "");
findex = parseInt(findex);
var tabname = selector.find('#tabName').val();
var colcount = selector.find('#colCount').val();
var tempsrc = selector.find('#Face_floatedit').val().split('\n');
faces[findex] = new Face(tabname, tempsrc, colcount);
saveFaces();
selector.find('.selected').html(tabname);
refreshFaces(findex);
selector.find('#maxwindow').remove();
c.removeEventListener("click", Face_yesc, false);
}
//使用jquery的click事件会使GM_的API无效
var c = document.querySelector(css + " #Face_yesc");
c.addEventListener("click", Face_yesc, false);
}
//取消按钮
var cancle = function() {
selector.find('#Face_noc').click(function() {
selector.find('#maxwindow').remove();
});
}
//保存表情
var saveFaces = function() {
var facesTmp = "";
for (var i = 0; i < faces.length; i++) {
faces[i].faceSrc = uniQueue(faces[i].faceSrc);
if (i != faces.length - 1)
facesTmp = facesTmp + JSON.stringify(faces[i]) + splitor;
else
facesTmp += JSON.stringify(faces[i]);
}
GM_setValue('FACES', facesTmp);
tbodyHtml = fetchTbodyHtml();
}
//数组去重复
function uniQueue(array) {
var arr = [];
var m;
while (array.length > 0) {
m = array[0];
arr.push(m);
array = $.grep(array, function(n, i) {
return n == m;
}, true);
}
return arr;
}
//表情标签页滚动
var nextTab = function() {
if ((-TabWidthOffset) < tabWidthCount * tabWidth)
selector.find('.s_tab_content').attr('style', 'margin-left:' + (TabWidthOffset -= tabWidth) + 'px;');
}
var prevtTab = function() {
if (-TabWidthOffset > 0)
selector.find('.s_tab_content').attr('style', 'margin-left:' + (TabWidthOffset += tabWidth) + 'px;');
}
///////////////////////////////////////////
////////自定义表情组位置/////////////////////
////////////////////////////////////////////
//表情组右移动
var tab_MoveRight = function(index) {
var cindex = selector.find('.selected').parent().attr('id').replace("smilyTab", "");
cindex = parseInt(cindex);
//console.log(0);
if ($(css + ' #smilyTab' + cindex).next().length != 0 && cindex > 0) {
var t = $(css + ' #smilyTab' + cindex).next();
if (t && t.attr('id')) {
var anotherIndex = t.attr('id').replace("smilyTab", "");
var temp = faces[cindex];
faces[cindex] = faces[anotherIndex];
faces[anotherIndex] = temp;
$(css + ' #smilyTab' + cindex).insertAfter(t);
if (tabNum != 0)
GM_setValue('tabNum', anotherIndex);
$(css + ' #smilyTab' + cindex).attr('id', t.attr('id'));
t.attr('id', 'smilyTab' + (cindex));
tabOnClick(cindex);
tabOnClick(anotherIndex);
saveFaces();
} else {
faces[cindex].position = parseInt(t.attr('data-index')) + 0.1;
$(css + ' #smilyTab' + cindex).insertAfter(t);
saveFaces();
}
}
}
//表情组左移
var tab_MoveLeft = function() {
var cindex = selector.find('.selected').parent().attr('id').replace("smilyTab", "");
cindex = parseInt(cindex);
//console.log(1);
if ($(css + ' #smilyTab' + cindex).prev().length != 0 && cindex > 0 && $(css + ' #smilyTab' + cindex).prev().attr('id') != "smilyTab0") {
var t = $(css + ' #smilyTab' + cindex).prev();
if (t && t.attr('id')) {
var anotherIndex = t.attr('id').replace("smilyTab", "");
var temp = faces[cindex];
faces[cindex] = faces[anotherIndex];
faces[anotherIndex] = temp;
$(css + ' #smilyTab' + cindex).insertBefore(t);
if (tabNum != 0)
GM_setValue('tabNum', anotherIndex);
$(css + ' #smilyTab' + cindex).attr('id', t.attr('id'));
t.attr('id', 'smilyTab' + (cindex));
tabOnClick(cindex);
tabOnClick(anotherIndex);
saveFaces();
} else {
faces[cindex].position = t.attr('data-index') == 0 ? 0 : (t.attr('data-index')) - 0.9;
$(css + ' #smilyTab' + cindex).insertBefore(t);
saveFaces();
}
}
}
var addBDESrc; //鼠标悬浮获得的图片链接
//修改分享按钮为加入表情到表情组
var addImgToCustomFace = function() {
(function c() {
var b = document.querySelector('.share.j_shareImg');
if (b) {
b.addEventListener('mouseover', function() {
$('.share.j_shareImg').unbind('click'); //取消分享按钮默认的点击事件
setShareDiv(); //重构分享框
//addAddImgEvents();
}, false);
} else
setTimeout(c, 20); //检查悬浮框是否弹出
})();
function setSrc(g) //悬浮在图片上时获取图片src
{
[].forEach.call(g, function(e) {
e.addEventListener('mouseover', function() {
var s = e.getAttribute('src');
if (s.match(/http:\/\/imgsrc\.baidu\.com\/forum/)) {
s = s.replace(/http:\/\/imgsrc\.baidu\.com\/forum\/.*sign=.*\//mg, ''); //获得点击后的原图
addBDESrc = 'http://imgsrc.baidu.com/forum/pic/item/' + s;
} else
addBDESrc = s;
//console.log(addBDESrc);
}, false);
});
}
setTimeout(function() //setTimeout兼容贴吧大图还原脚本用,因为那边重构了每个图片
{
var a = document.querySelectorAll('cc .BDE_Image'); //普通图片
var b = document.querySelectorAll('.j_user_sign'); //签名图
setSrc(a);
setSrc(b);
}, 500);
}
var setShareDiv = function() {
(function c() {
if (document.querySelector('.bdimgshare-p-icon.bdshare-i-mshare')) {
var content = "";
for (var i = 1; i < faces.length; i++)
content = content + '<a class="bdimgshare-p-icon bdshare-i-mshare ccccc" onclick="return false;" href="#" data-btype="' + i + '">' + faces[i].tabName + '</a>';
var html = '<h6>添加到</h6>' + '<div class="bdimgshare-layer-list">' + content + '</div>';
$('.bdimgshare-layer-pnl').html(html);
//添加事件
var b = document.querySelectorAll('.ccccc');
[].forEach.call(b, function(e) {
var cindex = e.getAttribute('data-btype'); //表情组下标
e.addEventListener('click', function() //点击表情组后隐藏弹框
{
$('.bdimgshare-layer-pnl').parent().parent().hide();
if (addBDESrc && faces[cindex].faceSrc.indexOf(addBDESrc) == -1) //判断是否已有相同图片
{
faces[cindex].faceSrc.unshift(addBDESrc);
saveFaces();
}
}, false)
});
} else
setTimeout(c, 50);
})();
}
//弹出添加表情框
var showAddFaceDiv = function() {
if (!document.querySelector('#addFaceDiv')) {
var cdiv = '<div id="addFaceDiv">';
for (var i = 1; i < faces.length; i++) {
cdiv = cdiv + '<a class="addface" onclick="return false;" href="#" data-btype="' + i + '">' + faces[i].tabName + '</a>';
}
cdiv += '<br><br><img width="80px" height="80px" src="' + addBDESrc + '">';
cdiv += '</div>';
$('body').append(cdiv);
var ev = document.querySelectorAll('.addface');
[].forEach.call(ev, function(e) {
var cindex = e.getAttribute('data-btype'); //表情组下标
e.addEventListener('click', function() //点击表情组后隐藏弹框
{
$('#addFaceDiv').remove();
if (addBDESrc && faces[cindex].faceSrc.indexOf(addBDESrc) == -1) //判断是否已有相同图片
{
faces[cindex].faceSrc.unshift(addBDESrc);
saveFaces();
}
}, false)
});
GM_addStyle('\
#addFaceDiv\
{\
z-index:99999999;\
position:fixed;\
top:10%;\
border:solid #DFDFDF 5px;\
line-height:50px;\
width:700px;\
height:300px;\
background:#F9EED0;\
padding:5px;\
text-align:center;\
}\
.addface\
{\
font-size:20px;\
margin-right:10px;\
}');
} else {
$('#addFaceDiv').remove();
showAddFaceDiv();
}
}
//ctrl+鼠标左键弹出showAddFaceDiv
setTimeout(function() {
var imgs = document.querySelectorAll('img');
[].forEach.call(imgs, function(dd) {
dd.onclick = function(e) {
//e.preventDefault();
if (e.altKey) {
var s = dd.getAttribute('src');
if (s.match(/http:\/\/imgsrc\.baidu\.com\/forum/)) {
e.preventDefault();
s = s.replace(/http:\/\/imgsrc\.baidu\.com\/forum\/.*sign=.*\//mg, ''); //获得点击后的原图
addBDESrc = 'http://imgsrc.baidu.com/forum/pic/item/' + s;
} else
addBDESrc = s;
showAddFaceDiv();
}
}
});
}, 100);
//点击增加表情框外删除div
document.onclick = function(e) {
var e = window.event ? window.event : e,
target = e.srcElement || e.target;
while (target.nodeName.toLowerCase() != "html") {
if (target.id == "addFaceDiv" || target.tagName == 'IMG') {
break;
}
target = target.parentNode;
}
if (target.nodeName.toLowerCase() == "html")
$('#addFaceDiv').remove();
}
//去除表情组中重复表情
GM_registerMenuCommand("tiebaCustomFace--去除表情组中重复表情", function() {
});
//prev、next表情滚动条点击事件
var tabScroll = function() {}
//样式
var imgCss = 'IMG.faceImg\
{\
height:101% !important;\
padding:0px 2px 0px 2px !important;\
position:relative;\
bottom:-2px !important;\
}';
GM_addStyle(imgCss);
var aditmenu = '#aditFaceMenu,#addFaceMenu,#deleteFaceMenu,#tab_MoveLeft,#tab_MoveRight,#getProfile,#loadProfile,#showFace\
{\
width:50px !important;\
height:20px!important;\
position:absolute !important;\
left:-48px !important;\
bottom:10px !important;\
font-size:20px;\
color:#99C871;\
border-radius:5px 0px 0px 5px;\
background:#FAFAFA;\
cursor:pointer;\
}\
#getProfile\
{\
bottom:30px !important;\
}\
#loadProfile\
{\
bottom:50px !important;\
}\
#aditFaceMenu\
{\
bottom:70px !important;\
}\
#deleteFaceMenu\
{\
bottom:90px !important;\
}\
#tab_MoveLeft\
{\
bottom:110px !important;\
}\
#tab_MoveRight\
{\
bottom:130px !important;\
}\
#showFace\
{\
bottom:170px !important;\
}\
#settingmenu\
{\
position:fixed !important;\
bottom:280px !important;\
}\
.s_tab_btnbg{\
padding:0px 1px !important;\
}\
.faceImg\
{\
height: auto !important;\
}\
IMG.faceImg:hover\
{\
cursor:pointer !important;\
}\
.customSmily\
{\
}\
';
GM_addStyle(aditmenu);
//添加删除编辑框样式
var ccss = '\
#Face_float\
{\
margin:auto;\
width:801px;\
height:360px;\
background:#F9EED0;\
border:solid #DFDFDF 10px;\
}\
#Face_floatedit\
{\
margin:auto;\
border:none !important;\
overflow:auto; \
width: 800px;\
resize: none;\
height: 360px;\
font-size:15px;\
color:black;\
}\
#maxwindow\
{\
text-align:center;\
position: fixed;\
bottom: 0%;\
left: 0%;\
width: 100%;\
height: 100%;\
z-index: 65535 !important;\
background:white !important;\
opacity:.9;\
}\
.search_main_fixed\
{\
z-index:1 !important;\
}\
#config\
{\
margin:auto;\
height:50px;\
display:block;\
cursor:pointer;\
}\
#config span\
{\
position:relative;\
top:20px;\
margin-right:10px;\
font-size:30px;\
border:1px solid grey;\
width:50px;\
height:50px;\
}\
#tabSetting span\
{\
font-size:20px;\
border:0px solid grey;\
width:50px;\
height:50px;\
margin-right:15px;\
}\
#tabSetting input\
{\
color:green;\
}';
//黑名单样式
var blistcss = '\
#blist\
{\
position:fixed;\
left:0px;\
top:0px;\
width:100%;\
height:100%;\
background:none;\
z-index:55555;\
text-align:center;\
}\
#blistdiv\
{\
margin: auto;\
border:solid #DFDFDF 5px;\
line-height:50px;\
width:600px;\
height:300px;\
background:#F9EED0;\
padding:5px;\
text-align:center;\
}\
.blistElement\
{\
padding:0px 0px 4px 10px;\
cursor:pointer;\
width:50px;\
height:20px;\
font-size:20px;\
}\
.blisthide\
{\
color:#CEDECA;\
}\
#blistConfig\
{\
background:#CFDCC9;\
padding:0px;\
cursor:pointer;\
border:white solid 2px;\
width:50px;\
height:20px;\
font-size:20px;\
}\
';
//小脸数据导入支持(页面右下角)
function xiaolianLoad() {
var xiaolian = function() {
var a = prompt('输入小脸数据');
if (a) {
a = eval(a);
for (var i = 0; i < a.length; i++)
faces.push(new Face(a[i]['name'], a[i]['collection'], 8));
saveFaces();
}
}
$('#tab_forumname').after('<span id="xiaolian" width="40" height="40" style="position:fixed;right:0px;bottom:0px;cursor:pointer;">小脸导入</span>');
var x = document.querySelector('#xiaolian');
x.addEventListener('click', xiaolian, false);
}
//开始监听
//LZL表情按钮监听
var css;
//发帖框表情监听
function normal_Listener() {
var a = document.querySelector('.edui-btn.edui-btn-emotion');
if (a) {
function m() {
css = '.edui-container';
if (document.querySelector('.edui-container li.s_tab_btn[data-index="1"]') && (!document.querySelector('.edui-container #smilyTab0'))) {
$('.edui-container li.s_tab_btn[data-index="1"]').click();
selector = $(css).find('.edui-dropdown-menu');
addFaces();
//a.removeEventListener("click",m,false);
} else {
setTimeout(m, 20);
}
}
a.addEventListener("click", m, false);
} else
setTimeout(normal_Listener, 100);
}
//重写LZL表情监听,使用jquery似乎会因为GM API不允许unsafewindow导致setvalue和getvalue失效
var LZL_Listener = function(s) {
var lzlAll = document.querySelectorAll(s);
[].forEach.call(lzlAll, function(e) {
function c1() {
var c = document.querySelector('.insertsmiley_holder');
if (c) {
c.addEventListener('click', function() {
css = '.insertsmiley_holder';
(function c2() {
if (document.querySelector('.insertsmiley_holder .s_layer_table') && (!document.querySelector('.insertsmiley_holder #smilyTab0'))) {
selector = $(css).find('.layer_content');
addFaces();
} else
setTimeout(c2, 60);
})();
});
} else
setTimeout(c1, 60);
}
e.addEventListener('click', c1, false);
});
}
////开始监听
normal_Listener();
//LZL_Listener('DIV.j_lzl_r.p_reply');
//LZL_Listener('.j_lzl_p');
//LZL_Listener('.lzl_s_r');
addImgToCustomFace();
//xiaolianLoad(); //小脸导入函数,需要的自己取消注释,改完后刷新在页面右下角