苍雪表情增强插件

苍雪论坛专用的扩展插件, 在发帖时快速输入自定义表情和论坛BBCODE

当前为 2014-09-21 提交的版本,查看 最新版本

您需要先安装一个扩展,例如 篡改猴Greasemonkey暴力猴,之后才能安装此脚本。

You will need to install an extension such as Tampermonkey to install this script.

您需要先安装一个扩展,例如 篡改猴暴力猴,之后才能安装此脚本。

您需要先安装一个扩展,例如 篡改猴Userscripts ,之后才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。

您需要先安装用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name       苍雪表情增强插件
// @namespace  http://blog.eclosionstudio.com
// @version    2.02 正式版
// @description  苍雪论坛专用的扩展插件, 在发帖时快速输入自定义表情和论坛BBCODE
// @match       http://*.9gal.com/read.php?*
// @match       http://9gal.com/read.php?*
// @match       http://9baka.com/read.php?*
// @match       http://*.9baka.com/read.php?*
// @match       http://*.9gal.com/post.php?*
// @match       http://9gal.com/post.php?*
// @match       http://9baka.com/post.php?*
// @match       http://*.9baka.com/post.php?*
// @copyright  2014, eddie32
// ==/UserScript==

/* 自定义内容*/

// 功能栏标题

var ItemTitleArray = Array ('苍雪','颜','LL小','LL大','水','AC娘','百合','百度','它');

// 链接ID, 对应, 100101开始的整数。

var loadTitleArray = Array('100101','100102','100103','100104','100105','100106','100107','100108','100109');



// 表情数组:
// 1:苍雪自带
var KFSmileURL = [];
var KFSmileTitle = [];
var KFSmileCode  = [];
for(var j = 0; j < 48; j++) {
    KFSmileURL[j] = 'http://bbs.9gal.com/images/post/smile/em/em' +
        ((j)>=9?(j+1):('0'+(j+1))) + '.gif';
    KFSmileTitle[j] = '';
    KFSmileCode[j] = '[s:'+(j+10)+']';
}

//附加gif:
var KFSmile2 = [];
var KFSmile2Title = [];
for(var j = 0; j < 25; j++) {
    KFSmile2[j] = 'http://smilell1.eclosionstudio.com/EmCol/penseris/penseries' +
        (j+1) + '.gif';
    KFSmile2Title[j] = '';
}

var KFSmile3 = [];
var KFSmile3Title = [];
for(var j = 0; j < 54; j++) {
    KFSmile3[j] = 'http://smilell1.eclosionstudio.com/EmCol/penseris/bannerpenseries' +
        (j+1) + '.gif';
    KFSmile3Title[j] = '';
}

// 2: 颜文字
var emotionArray = Array("(●・ 8 ・●)", "╰(๑◕ ▽ ◕๑)╯", "(﹡ˆˆ﹡)","〜♪♪",
                         "|∀゚", "(´゚Д゚`)", "(;´Д`)", "(`・ω・)", "(=゚ω゚)=", "| ω・´)", "|-` )", "|д` )", "|ー` )", "|∀` )", "(つд⊂)", "(゚Д゚≡゚Д゚)", "(^o^)ノ", "(|||゚Д゚)", "( ゚∀゚)", "( ´∀`)", "(*´∀`)", "(*゚∇゚)", "(*゚ー゚)", "( ゚ 3゚)", "( ´ー`)", "( ・_ゝ・)", "( ´_ゝ`)", "(*´д`)", "(・ー・)", "(・∀・)", "(ゝ∀・)", "(〃∀〃)", "(*゚∀゚*)", "( ゚∀。)", "( `д´)", "(`ε´ )", "(`ヮ´ )", "σ`∀´)", " ゚∀゚)σ", "゚ ∀゚)ノ", "(╬゚д゚)", "(|||゚д゚)", "( ゚д゚)", "Σ( ゚д゚)", "( ;゚д゚)", "( ;´д`)", "( д ) ゚ ゚", "( ☉д⊙)", "((( ゚д゚)))", "( ` ・´)", "( ´д`)", "( -д-)", "(>д<)", "・゚( ノд`゚)", "( TдT)", "( ̄∇ ̄)", "( ̄3 ̄)", "( ̄ー ̄)", "( ̄ .  ̄)", "( ̄皿 ̄)", "( ̄艸 ̄)", "( ̄︿ ̄)", "( ̄︶ ̄)", "ヾ(´ω゚`)", "(*´ω`*)", "(・ω・)", "( ´・ω)", "(`・ω)", "(´・ω・`)", "(`・ω・´)", "( `_っ´)", "( `ー´)", "( ´_っ`)", "( ´ρ`)", "( ゚ω゚)", "(o゚ω゚o)", "( ^ω^)", "(。◕∀◕。)", "/( ◕‿‿◕ )\\", "ヾ(´ε`ヾ)", "(ノ゚∀゚)ノ", "(σ゚д゚)σ", "(σ゚∀゚)σ", "|д゚ )", "┃電柱┃", "゚(つд`゚)", "゚Å゚ ) ", "⊂彡☆))д`)", "⊂彡☆))д´)", "⊂彡☆))∀`)", "(´∀((☆ミつ",
                         "( ◜◒◝ )","(●´3`)~♪", "_(:з」∠)_","хорошо!");
// 3. lovelive专用小
var LoveliveSmalltargetURL = [];
var LoveliveSmalltargetTitle = [];
for(var j = 0; j < 40; j++) {
    LoveliveSmalltargetURL[j] = 'http://smilell2.eclosionstudio.com/Small/Lovelive2nd' +
        (j+1) + '.png';
    LoveliveSmalltargetTitle[j] = j+1;
}

for(var j = 0; j < 40; j++) {
    LoveliveSmalltargetURL[j+40] = 'http://smilell1.eclosionstudio.com/Small/Lovelive' +
        (j+1) + '.png';
     LoveliveSmalltargetTitle[j+40] = j+1;
}

// 4. lovelive专用大
var LoveliveBigtargetURL = [];
var LoveliveBigtargetTitle = [];
for(var j = 0; j < 40; j++) {
    LoveliveBigtargetURL[j] = 'http://smilell2.eclosionstudio.com/Big/Lovelive2nd' +
        (j+1) + '.png';
    LoveliveBigtargetTitle[j] = j+1;
}

for(var j = 0; j < 40; j++) {
    LoveliveBigtargetURL[j+40] = 'http://smilell1.eclosionstudio.com/Big/Lovelive' +
        (j+1) + '.png';
    LoveliveBigtargetTitle[j] = j+1;
}

// 5. 快捷输入功能
var functionEmotion = Array("[sell=1][/sell]","[quote][/quote]","[hide=1][/hide]","[code][/code]","[strike][/strike]",
                             "[fly][/fly]","[color=#00FF00][/color]","[b][/b]","[u][/u]","[i][/i]","[hr]", "[bgcolor=][/bgcolor]");
var functionDescription = Array("出售贴sell=售价","引用", "隐藏hide=神秘等级","插入代码","删除线","跑马灯","文字颜色","粗体","下划线","斜体","水平线","背景色");

// 6. AC娘

var ACSmile3 = [];
var ACSmile3Title = [];
for(var j = 0; j < 50; j++) {
    ACSmile3[j] = 'http://smilell1.eclosionstudio.com/EmCol/ACFUN/' +
        (j+1) + '.png';
    ACSmile3Title[j] = '';
}
var ACSmile2 = [];
var ACSmile2Title = [];
for(var j = 0; j < 10; j++) {
    ACSmile2[j] = 'http://smilell1.eclosionstudio.com/EmCol/ACFUN/' +
        (j+51) + '.jpg';
    ACSmile2Title[j] = '';
}

//7. Akari 摇曳百合
var ACSmile1 = [];
var ACSmile1Title = [];
for(var j = 0; j < 20; j++) {
    ACSmile1[j] = 'http://smilell1.eclosionstudio.com/EmCol/Dynamic/akari' +
        (j+1) + '.gif';
    ACSmile1Title[j] = '';
}

var AkariSmile1 = [];
var AkariSmile1Title = [];
for(var j = 0; j < 71; j++) {
    AkariSmile1[j] = 'http://smilell1.eclosionstudio.com/EmCol/akari/akari' +
        (j+1) + '.png';
    AkariSmile1Title[j] = '';
}
// 8.百度
var BaiduSmile1 = [];
var BaiduSmile1Title = [];
for(var j = 0; j < 50; j++) {
    BaiduSmile1[j] = 'http://smilell1.eclosionstudio.com/EmCol/baidu/defaultx' +
        (j+1) + '.png';
    BaiduSmile1Title[j] = '';
}

// ACFUN new
var ACSmile4 = [];
var ACSmile4Title = [];
for(var j = 0; j < 50; j++) {
    ACSmile4[j] = 'http://smilell1.eclosionstudio.com/EmCol/ACFUN/New/' +
        (j+1) + '.png';
    ACSmile4Title[j] = '';
}
var ACSmile5 = [];
var ACSmile5Title = [];
for(var j = 0; j < 40; j++) {
    ACSmile5[j] = 'http://smilell1.eclosionstudio.com/EmCol/ACFUN/Niming/' +
        ((j)>=9?(j+1):('0'+(j+1))) + '.gif';
    ACSmile5Title[j] = '';
}

// 
// X(X=上面的数字+1). 小仓朝日
var AsahiURL = [];
var AsahiURLTitle = [];

for(var j = 0; j < 28; j++) {
   AsahiURL[j] = 'http://aruruu.net/ADDimages/asahi/' +
        (j+1) + '.png';   // 缩略图和实际图像地址用一个就行。
   AsahiURLTitle[j] = ''; // 这个数组是鼠标滑过的提示数组
}





function loadingHandler(loadindex, target){
    
    switch (loadindex) {
        case 1: // 1:苍雪自带
            userInputImg(target, KFSmileURL,KFSmileCode, KFSmileTitle, returnPlainText, 30, 30);
            userInputImg(target, KFSmile2, KFSmile2, KFSmile2Title, returnImg, 80, 30);
            userInputImg(target, KFSmile3, KFSmile3, KFSmile3Title, returnImg, 120, 20);
            break;
        case 2:   // 2: 颜文字
            userInputPlainText(target,emotionArray, emotionArray, returnPlainText);
            break;
        case 3: // Lovelive大法好Small
            userInputImg(target, LoveliveSmalltargetURL, LoveliveSmalltargetURL, LoveliveSmalltargetTitle, returnImg, 70, 70);
            break;
        case 4: // Lovelive大法好Big
            userInputImg(target, LoveliveSmalltargetURL, LoveliveBigtargetURL, LoveliveBigtargetTitle, returnImg, 70, 70);
            break;
        case 5:
            newElementEx = document.createElement('p');
            newElementEx.innerHTML = "<b>快速输入出售帖, 神秘限制贴, 引用等等</b><br />";
            target.appendChild(newElementEx);
            userInputPlainText(target,  functionEmotion, functionDescription,returnPlainText);
        case 6:
//            userInputImg(target, ACSmile3, ACSmile3, ACSmile3Title, returnImg, 60, 60);
            userInputImg(target, ACSmile4, ACSmile4, ACSmile4Title, returnImg, 60, 60);
            userInputImg(target, ACSmile5, ACSmile5, ACSmile5Title, returnImg, 60, 60);
            break;
        case 7:
            userInputImg(target, ACSmile2, ACSmile2, ACSmile2Title, returnImg, 50, 50);
            userInputImg(target, ACSmile1, ACSmile1, ACSmile1Title, returnImg, 50, 50);
            userInputImg(target, AkariSmile1, AkariSmile1, AkariSmile1Title, returnImg, 50, 50);
            break;
        case 8:
            userInputImg(target, BaiduSmile1, BaiduSmile1, BaiduSmile1Title, returnImg, 30, 30);
            break;
        case 9:
            userInputImg(target, AsahiURL, AsahiURL, AsahiURLTitle, returnImg, 80, 80); 
     // 这个函数直接用就好了, 第1个参数不变, 第二第三个参数是地址的数组名, 第四个是Title的数组名, 后面3个是方法, 大小
            break;
   // case: 编号     
/*
         case xx:
            在这里添加 
            break;
*/            
//    
        default:
            emptyContainer.innerHTML = '<b style="color:orange">空白表情容器</b>';
            return;
    }
    
}
/* 自定义内容到此结束 */
/*------------------------------------*/


/*------------------------------------*/
var totalNum = ItemTitleArray.length; // 功能栏数量

var textareas, textarea;

var emptyContainer;

var startPos, endPos; // 当前光标位置定位

textareas = document.getElementsByTagName('textarea');
if (!textareas.length) { return; }



// 用户操作函数
function userInputPlainText(target, textBox,titleBox, func){
   var textlength = textBox.length;
    for (var j=0;j<textlength; j++){
        var newElementEx = document.createElement('a'); 
        var imgaa = document.createElement('img');
        imgaa.style.margin = "4px";
        newElementEx.onclick = func;
        newElementEx._target = textarea;
        newElementEx.style.cursor = 'pointer';
        imgaa.alt = titleBox[j];
        imgaa.useMap = textBox[j];
        target.appendChild(newElementEx);
        newElementEx.appendChild(imgaa);
   }
   target.parentNode.insertAfter(document.createElement('br'));
}

function userInputImg(target,thumbURL, targetURL, targetTitle, func, ImgWidth, ImgHeight){
    var emotionlength = targetURL.length;
    for (var i = 0; i<emotionlength; i++)
    {
        target.appendChild(
                    createButton(
                        textarea,     //对象
                        func,   //方法
                        targetTitle[i],   //提示文字
                        ImgWidth, // 缩略图宽
                        ImgHeight, //缩略图高
                        targetURL[i],thumbURL[i])); // 贴图地址和缩略图地址
    }

}


// 返回纯文本

function insertText(selector, text) {
    var target = document.querySelector(selector);
    var startPos = target.selectionStart;
    //var endPos = target.selectionEnd;
    var value = target.value;
    target.value = value.slice(0, startPos) + text + value.slice(startPos);
}


function returnPlainText(event) {
    var link, textarea, s, selectedTarget;
    link = event.currentTarget;
    textarea = link._target;
    selectedTarget = event.target;
    insertText("textarea", selectedTarget.useMap);
    // 定位光标
//    alert(startPos);
//    if(typeof textarea.selectionStart === 'number' && typeof textarea.selectionEnd === 'number'){
//        textarea.value = textarea.value.substring(0,startPos) + selectedTarget.innerHTML + textarea.value.substring(endPos, textarea.value.length);
//    }else{
//        textarea.value +=selectedTarget.useMap;
//    }
    event.preventDefault();
}

// 返回Wincode代码
function returnImg(event) {
    var link, textarea, s, selectedTarget;
    link = event.currentTarget;
    textarea = link._target;
    selectedTarget = event.target;
//    textarea.value += '[img]'+selectedTarget.useMap+'[/img]';
    var inserttext = '[img]'+selectedTarget.useMap+'[/img]';
    insertText("textarea", inserttext);
    event.preventDefault();
}

// ImgButton
function createButton(target, func, title, width, height, src, smallsrc) {
    // target: 控制对象
    // func:     方法
    // title:   提示文字
    // width,height  外观
    // src:  路径
    var img, button;
    img = document.createElement('img');
    img.width = width;
    img.height = height;
    img.style.borderTop = img.style.borderLeft = "1px solid #ccc";
    img.style.borderRight = img.style.borderBottom = "1px solid #888";
    img.style.marginRight = "2px";
    img.src = smallsrc;
    img.useMap = src;
    button = document.createElement('a');
    button._target = target;
    button.title = title;
    button.href = '#';
    button.onclick = func;
    button.style.cursor="pointer";
    button.appendChild(img);
    button.style.borderBottom = '1px solid';
    return button;       
}



// 清空容器用函数
function closeHandler(event){
    var deletTarget = document.getElementById('emotioncontainer9999');
    deletTarget.parentNode.removeChild(deletTarget);
    emptyContainer = document.createElement('div');
    emptyContainer.id = 'emotioncontainer9999';
    textarea.parentNode.insertBefore(emptyContainer, textarea);
}

//展开动作
function extendHandler(event){
    var newElement2,link,selectedTarget;
    
    /*清空当前容器*/
    closeHandler();
    
    newElement2 = document.createElement('div');
    newElement2.style.border = '1px solid #9999FF';
    //newElement2.innerHTML = '&nbsp;&nbsp;';
    newElement2.style.background = '#FCFCFC';
    newElement2.style.paddingLeft = '4px';
    newElement2.style.height = '120px';
    newElement2.style.width = textarea.style.width;
    newElement2.style.overflow = 'auto';
    emptyContainer.appendChild(newElement2);
    
    
    /*表情载入*/
    selectedTarget = event.target;
    var loadIndex = selectedTarget.id - '100100';
    //    alert(loadIndex);
    loadingHandler(loadIndex,newElement2);
    
    event.preventDefault();
}

//生成栏目
function createMenuItem(target,func,title, loadTitle){
    var newElement;
    newElement = document.createElement('a');
    newElement.style.height = '20px';
    newElement.style.width = '100px';
    newElement.innerHTML = '  [' +title+ ']'+'&nbsp;';
    newElement.onclick = func;
    newElement.style.cursor = 'pointer';
    newElement.id = loadTitle;
    target.appendChild(newElement);    
}
// 生成项目
function createMenuElement(target, listNumber){
    var newElement;
    newElement = document.createElement('div');
    newElement.style.border = '1px solid #9999FF';
    
    newElement.align = 'left';
    newElement.style.paddingLeft = '4px';
    newElement.innerHTML = ' <b style="color:orange">⑨_⑨ </b> ';
    newElement.style.background = '#FCFCFC';
    newElement.style.height = '22px';
    newElement.style.width = textarea.style.width;
    target.parentNode.insertBefore(newElement, target);
    
    for (var i = 0; i < listNumber; i++) {
        createMenuItem(newElement,extendHandler,ItemTitleArray[i],loadTitleArray[i]);
    }
   

    
    
    var additionalInfo = document.createElement('a');
    additionalInfo.innerHTML = ' <b style="color:orange"> [隐藏表情] </b> ';
    additionalInfo.onclick = closeHandler;
    additionalInfo.style.cursor = 'pointer';
    newElement.appendChild(additionalInfo);
    
    var additionalInfo2 = document.createElement('b');
    additionalInfo2.innerHTML = ' <b style="color:silver"> &nbsp;&nbsp;by eddie32 </b> ';
    newElement.appendChild(additionalInfo2);
    
    
   
}



//主函数
for (var i = 0; i < textareas.length; i++) {
    textarea = textareas[i];
    emptyContainer = document.createElement('div');
    emptyContainer.id = 'emotioncontainer9999';
    createMenuElement(textarea, totalNum);
    textarea.parentNode.insertBefore(emptyContainer, textarea);
    
}