BroniesNL Emotipons

Voegt vele emoticons toe op Bronies.nl, die te vinden zijn onder de quick-reply en volledige reply.

// ==UserScript==
// @name        BroniesNL Emotipons
// @namespace   Ossie/BroniesNL/Emotipons
// @description Voegt vele emoticons toe op Bronies.nl, die te vinden zijn onder de quick-reply en volledige reply.
// @include     http://www.bronies.nl/e107_plugins/forum/*
// @include     https://www.bronies.nl/e107_plugins/forum/*
// @include     http://bronies.nl/e107_plugins/forum/*
// @include     https://bronies.nl/e107_plugins/forum/*
// @require     http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js
// @version     6
// @grant       none
// ==/UserScript==

//Associative array for all emoticons
var emos = {
'applelie':'http://www.bronies.de/images/smilies/applelie.png',
'ajbemused':'http://www.fimfiction-static.net/images/emoticons/ajbemused.png',
'ajsmug':'http://www.fimfiction-static.net/images/emoticons/ajsmug.png',
'ajsleepy':'http://www.fimfiction-static.net/images/emoticons/ajsleepy.png',
'applejackconfused':'http://www.fimfiction-static.net/images/emoticons/applejackconfused.png',
'applejackunsure':'http://www.fimfiction-static.net/images/emoticons/applejackunsure.png',
'asmug':'http://cdn.broni.es/images/emotes/mlp-asmug.png',
'aawkward':'http://cdn.broni.es/images/emotes/mlp-aawkward.png',
'aglaring':'http://cdn.broni.es/images/emotes/mlp-aglaring.png',
'ablush':'http://cdn.broni.es/images/emotes/mlp-ablush.png',
'ashrug':'http://cdn.broni.es/images/emotes/mlp-ashrug.png',

'flutterrage':'http://www.fimfiction-static.net/images/emoticons/flutterrage.png',
'fluttercry':'http://www.fimfiction-static.net/images/emoticons/fluttercry.png',
'fluttershbad':'http://www.fimfiction-static.net/images/emoticons/fluttershbad.png',
'fluttershyouch':'http://www.fimfiction-static.net/images/emoticons/fluttershyouch.png',
'fluttershysad':'http://www.fimfiction-static.net/images/emoticons/fluttershysad.png',
'fluttershyyay':'http://www.fimfiction-static.net/images/emoticons/yay.png',
'fsmug':'http://cdn.broni.es/images/emotes/mlp-fsmug2.png',
'fstern':'http://cdn.broni.es/images/emotes/mlp-fstern.png',
'fpanic':'http://cdn.broni.es/images/emotes/mlp-fpanic.png',
'ffrown':'http://cdn.broni.es/images/emotes/mlp-ffrown.png',
'fpleaseno':'http://cdn.broni.es/images/emotes/mlp-fpleaseno.png',
'fbat':'http://i.imgur.com/o98UzQu.png',

'pinkiecrazy':'http://www.fimfiction-static.net/images/emoticons/pinkiecrazy.png',
'pinkiegasp':'http://www.fimfiction-static.net/images/emoticons/pinkiegasp.png',
'pinkiehappy':'http://www.fimfiction-static.net/images/emoticons/pinkiehappy.png',
'pinkiesad2':'http://www.fimfiction-static.net/images/emoticons/pinkiesad2.png',
'pinkiesick':'http://www.fimfiction-static.net/images/emoticons/pinkiesick.png',
'pinkiesmile':'http://www.fimfiction-static.net/images/emoticons/pinkiesmile.png',
'pido':'http://cdn.broni.es/images/emotes/mlp-pido.png',
'pparty':'http://cdn.broni.es/images/emotes/ppartytime.png',
'pgasp':'http://cdn.broni.es/images/emotes/mlp-pgasp.png',
'pjoy':'http://cdn.broni.es/images/emotes/mlp-pjoy.png',
'pscared':'http://cdn.broni.es/images/emotes/mlp-pscared.png',
'pplotting':'http://cdn.broni.es/images/emotes/mlp-pplotting.png',
'ppunamused':'http://i.imgur.com/XH3faPN.png',

'rainbowderp':'http://www.fimfiction-static.net/images/emoticons/rainbowderp.png',
'rainbowdetermined2':'http://www.fimfiction-static.net/images/emoticons/rainbowdetermined2.png',
'rainbowhuh':'http://www.fimfiction-static.net/images/emoticons/rainbowhuh.png',
'rainbowkiss':'http://www.fimfiction-static.net/images/emoticons/rainbowkiss.png',
'rainbowlaugh':'http://www.fimfiction-static.net/images/emoticons/rainbowlaugh.png',
'rainbowwild':'http://www.fimfiction-static.net/images/emoticons/rainbowwild.png',
'rdlaugh':'http://www.bronies.de/images/smilies/rdlaugh.png',
'rddealwithit':'http://www.bronies.de/images/smilies/dealwithit.png',
'rdwink':'http://i.imgur.com/HL1k4Uy.png',
'rdsexy':'http://cdn.broni.es/images/emotes/mlp-dsexy.png',
'rdsalute':'http://cdn.broni.es/images/emotes/mlp-dsalute.png',
'rdlulz':'http://cdn.broni.es/images/emotes/mlp-dlulz.png',
'rdstare':'http://cdn.broni.es/images/emotes/mlp-dstare.png',
'rdblush':'http://cdn.broni.es/images/emotes/mlp-dblush.png',
'rdflut':'http://cdn.broni.es/images/emotes/mlp-nsiwh.png',
'rdderp':'http://i.imgur.com/ii0O4Mw.png',
'rdsad':'http://i.imgur.com/38UHWxB.png',
'rdstache':'http://i.imgur.com/VsRloiY.png',
'rdsmile':'http://i.imgur.com/NB1Jxdz.png',

'raritycry':'http://www.fimfiction-static.net/images/emoticons/raritycry.png',
'raritydespair':'http://www.fimfiction-static.net/images/emoticons/raritydespair.png',
'raritystarry':'http://www.fimfiction-static.net/images/emoticons/raritystarry.png',
'raritywink':'http://www.fimfiction-static.net/images/emoticons/raritywink.png',
'rarityduck':'http://www.fimfiction-static.net/images/emoticons/duck.png',
'ryell':'http://cdn.broni.es/images/emotes/mlp-ryell.png',
'rsrs':'http://cdn.broni.es/images/emotes/mlp-rseriously.png',
'rwink':'http://cdn.broni.es/images/emotes/mlp-rwink.png',
'rpissed':'http://cdn.broni.es/images/emotes/mlp-rpissed.png',
'rsexy':'http://cdn.broni.es/images/emotes/mlp-rsexy.png',
'rteehee':'http://cdn.broni.es/images/emotes/mlp-rteehee.png',
'rclap':'http://cdn.broni.es/images/emotes/mlp-rclap.png',

'twilightangry2':'http://www.fimfiction-static.net/images/emoticons/twilightangry2.png',
'twilightblush':'http://www.fimfiction-static.net/images/emoticons/twilightblush.png',
'twilightoops':'http://www.fimfiction-static.net/images/emoticons/twilightoops.png',
'twilightsmile':'http://www.fimfiction-static.net/images/emoticons/twilightsmile.png',
'twilightfh':'http://www.fimfiction-static.net/images/emoticons/facehoof.png',
'tannoy':'http://cdn.broni.es/images/emotes/mlp-tannoy.png',
'tsupersad':'http://cdn.broni.es/images/emotes/mlp-tsupersad.png',
'tgrin':'http://cdn.broni.es/images/emotes/mlp-tgrin.png',
'tohdamn':'http://cdn.broni.es/images/emotes/mlp-tohdamn.png',
'tyay':'http://cdn.broni.es/images/emotes/mlp-tyell.png',
'twut':'http://cdn.broni.es/images/emotes/mlp-twut.png',
'tsmug':'http://cdn.broni.es/images/emotes/mlp-tssmug.png',
'twiface':'http://i.imgur.com/L9WqHHQ.png',
'twicane':'http://i.imgur.com/YpSKebb.png',

'applebloomcry':'http://www.fimfiction-static.net/images/emoticons/applecry.png',
'abdoc':'http://cdn.broni.es/images/emotes/mlp-ablupus.png',
'abhap':'http://cdn.broni.es/images/emotes/mlp-abhappy.png',

'coolphoto':'http://www.fimfiction-static.net/images/emoticons/coolphoto.png',
'pfpleased':'http://cdn.broni.es/images/emotes/mlp-pfpleased.png',

'scootangel':'http://www.fimfiction-static.net/images/emoticons/scootangel.png',
'schappy':'http://cdn.broni.es/images/emotes/mlp-schappy.png',
'scgotthis':'http://i.imgur.com/lOTf8qu.png',

'trixieshiftleft':'http://www.fimfiction-static.net/images/emoticons/trixieshiftleft.png',
'trixieshiftright':'http://www.fimfiction-static.net/images/emoticons/trixieshiftright.png',
'trixietest':'http://cdn.broni.es/images/emotes/mlp-trsmug2.png',

'derpy':'http://img854.imageshack.us/img854/7462/derppk.png',
'derpyderp1':'http://www.fimfiction-static.net/images/emoticons/derpyderp1.png',
'derpytongue2':'http://www.fimfiction-static.net/images/emoticons/derpytongue2.png',
'derpysg':'http://cdn.broni.es/images/emotes/mlp-dedealwith2.png',
'derpyhappy':'http://cdn.broni.es/images/emotes/mlp-dehappy.png',

'twistnerd':'http://www.fimfiction-static.net/images/emoticons/twistnerd.png',

'unsuresweetie':'http://www.fimfiction-static.net/images/emoticons/unsuresweetie.png',
'swshock':'http://cdn.broni.es/images/emotes/mlp-swshock.png',
'swlove':'http://cdn.broni.es/images/emotes/mlp-swlove.png',

'cheerilee':'http://www.bronies.de/images/smilies/cheerilee.png',
'chesmile':'http://i.imgur.com/Jkki3Ud.png',
'chsmug':'http://i.imgur.com/odkhzgd.png',

'trollestia':'http://www.bronies.de/images/smilies/trollestia.png',
'trollestia2':'http://www.fimfiction-static.net/images/emoticons/trollestia.png',
'celesyay':'http://cdn.broni.es/images/emotes/mlp-ceyay.png',

'lustare':'http://cdn.broni.es/images/emotes/mlp-lstare.png',
'luhappy':'http://cdn.broni.es/images/emotes/mlp-luhappy.png',
'lufun':'http://cdn.broni.es/images/emotes/mlp-lfun.png',
'lunatic':'http://i.imgur.com/IEV05oY.png',

'pcrolleye':'http://cdn.broni.es/images/emotes/mlp-pcrolleye.png',
'pchappy':'http://cdn.broni.es/images/emotes/mlp-pchappy.png',

'saface':'http://cdn.broni.es/images/emotes/mlp-sacontent.png',

'discord':'http://cdn.broni.es/images/emotes/mlp-discnotamused.png',

'qc':'http://cdn.broni.es/images/emotes/mlp-chrysexy.png',

'som':'http://cdn.broni.es/images/emotes/mlp-somcontent.png',

'moustache':'http://www.fimfiction-static.net/images/emoticons/moustache.png',
'uberspike':'http://cdn.broni.es/images/emotes/mlp-ssmug.png',
'spikesg':'http://cdn.broni.es/images/emotes/mlp-sdealwith.png',
'spikesrs':'http://cdn.broni.es/images/emotes/mlp-spsrsly.png',

'eeyup':'http://www.fimfiction-static.net/images/emoticons/eeyup.png',
'bmgrin':'http://cdn.broni.es/images/emotes/mlp-bmgrin.png',

'lyrawat':'http://bronies.de/images/smilies/lyra.png',
'lyrabon':'http://cdn.broni.es/images/emotes/mlp-lbbhug.png',

'octavia':'http://www.bronies.de/images/smilies/octaviaangry.png',
'octsup':'http://cdn.broni.es/images/emotes/mlp-osurprise.png',
'octhappy':'http://cdn.broni.es/images/emotes/mlp-ohappy.png',
'octhug':'http://i.imgur.com/y4hm0bd.png',
'octmad':'http://i.imgur.com/nlNfR64.png',
'octclap':'http://cdn.broni.es/images/emotes/mlp-oclap.png',

'bssmug':'http://cdn.broni.es/images/emotes/mlp-bssmug.png',
'bshappy':'http://cdn.broni.es/images/emotes/mlp-bshappy.png',

'zecgrin':'http://cdn.broni.es/images/emotes/mlp-zgrin.png',

'vsgrin':'http://cdn.broni.es/images/emotes/mlp-scratch.png',
'vssmug':'http://cdn.broni.es/images/emotes/mlp-vssmug.png',
'vshappy':'http://i.imgur.com/XGPW5t1.png',

'afoops':'http://cdn.broni.es/images/emotes/mlp-afoops.png',

'fluffle':'http://i.imgur.com/TejaU6g.png',

'bmmeh':'http://i.imgur.com/ff1KxNK.png',
'bmno':'http://i.imgur.com/cZYtY2H.gif',
'bmhappy':'http://i.imgur.com/IgrqU4e.png',

'brohoof':'http://www.bronies.de/images/smilies/brohoof.png',

'scemo':'http://i.imgur.com/67AHG4x.png',
'ttemo':'http://i.imgur.com/X0y9Gg7.png',

'heart':'http://images2.wikia.nocookie.net/callofduty4s/images/7/71/Spike_and_rarity_s_heart_shaped_fire_ruby_by_edwardten-d4jbvk5.png',
'heart2':'http://www.fimfiction-static.net/images/emoticons/heart.png',

':\')':'http://i.imgur.com/iLRw3RS.gif',

};

//Demotify when writing a reply
try{
	if($('#post').length != 0) {
		demotify();
	}
} catch(err) {}

//Show normal reply emoticon tools
if($('#post').length != 0) {
	$('.button').click(emotify);
	$('#dataform').append(allEmoticons);
	$('.emotipon').click(insertEmoticon);
}

//Show quick reply emoticon tools
if(document.location.href.indexOf('/forum_viewtopic.php') != -1) {
	if($('.forumheader3 form p .tbox').length != 0) {
		$('.forumheader3 form p .tbox').parent().append(toggleBox);
		$('.toggleemoticons').click(showToggleBox);
		$('.qemotipon').click(insertEmoticonQuick);
		$('.button').click(quickEmotify);
	}
}

//Replace emoticons after normal reply
function emotify() {
	var text = $('#post').val();
	for(emo in emos) {
		var search = "[" + emo + "]";
		//var replace = "[img height=27]" + emos[emo] + "[/img]";
		//New replace technique for resizing
		var replace = "[img style=max-height:27px]" + emos[emo] + "[/img]";
		text = replaceAll(search, replace, text);
	}
	$('#post').val(text);
}

//Replace emoticons after quick reply
function quickEmotify() {
	var text = $('.forumheader3 form p .tbox').val();
	for(emo in emos) {
		var search = "[" + emo + "]";
		//var replace = "[img height=27]" + emos[emo] + "[/img]";
		//New replace technique for resizing
		var replace = "[img style=max-height:27px]" + emos[emo] + "[/img]";
		text = replaceAll(search, replace, text);
	}
	$('.forumheader3 form p .tbox').val(text);
}

//Convert emoticons to tags when editing posts
function demotify() {
	var text = $('#post').val();
	for(emo in emos) {
		//Use both search techniques for backwards compatability
		var search  = "[img height=27]" + emos[emo] + "[/img]";
		var search2 = "[img style=max-height:27px]" + emos[emo] + "[/img]";
		var replace = "[" + emo + "]";
		text = replaceAll(search, replace, text);
		text = replaceAll(search2, replace, text);
	}
	$('#post').val(text);
}

//Show all emoticons
function allEmoticons() {
	var html = '';
	for(emo in emos) {
	html += '<img class="emotipon" src="'+emos[emo]+'" alt="'+emo+'" style="max-height:27px;"/>';
	}
	return html;
}

//Show/hide emoticon box
function showToggleBox(event) {
	if($('.emoticonbox').is(":visible")) {
		$('.emoticonbox').hide();
	} else {
		$('.emoticonbox').show();
	}
}

//HTML code for emoticon toggle box
function toggleBox() {
	var html = '<img src="http://www.fimfiction-static.net/images/emoticons/yay.png" alt="Show/Hide Emotipons" class="toggleemoticons" style="max-height:27px;"></img><BR><div class="emoticonbox" style="color:#FFF;text-align:left;display:none;background:rgba(50,50,50,0.6);border:1px solid rgba(150,150,150,0.5);">';
	for(emo in emos) {
		html += '<img class="qemotipon" src="'+emos[emo]+'" alt="'+emo+'" style="max-height:27px;"/>';
	}
	html += '</div>'
	return html;
	
}

//Insert emoticon event (from normal reply)
function insertEmoticon(event) {
	$('#post').insertAtCaret('['+$(this).attr("alt")+']')
}

//Insert emoticon event (from quick reply)
function insertEmoticonQuick(event) {
	$('.forumheader3 form p .tbox').insertAtCaret('['+$(this).attr("alt")+']')
}

//Replace all occurences in text
function replaceAll(str1, str2, text, ignore)
{
   return text.replace(new RegExp(str1.replace(/([\,\!\\\^\$\{\}\[\]\(\)\.\*\+\?\|\<\>\-\&])/g, function(c){return "\\" + c;}), "g"+(ignore?"i":"")), str2);
};

jQuery.fn.extend({
insertAtCaret: function(myValue){
  return this.each(function(i) {
    if (this.selectionStart || this.selectionStart == '0') {
      var startPos = this.selectionStart;
      var endPos = this.selectionEnd;
      var scrollTop = this.scrollTop;
      this.value = this.value.substring(0, startPos)+myValue+this.value.substring(endPos,this.value.length);
      this.focus();
      this.selectionStart = startPos + myValue.length;
      this.selectionEnd = startPos + myValue.length;
      this.scrollTop = scrollTop;
    } else {
      this.value += myValue;
      this.focus();
    }
  })
}
});