diff options
| author | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-05-24 01:00:37 +0200 |
|---|---|---|
| committer | Maks Jopek <maksymilian.jopek@prym-soft.pl> | 2021-05-24 01:00:37 +0200 |
| commit | b896880f0a1d08f1e46f69676bab95af6ec44b50 (patch) | |
| tree | 09a19e3f1c05845e6e88f17f5b824b8656ca1828 /dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js | |
| download | IRC-b896880f0a1d08f1e46f69676bab95af6ec44b50.tar.gz IRC-b896880f0a1d08f1e46f69676bab95af6ec44b50.tar.zst IRC-b896880f0a1d08f1e46f69676bab95af6ec44b50.zip | |
Initial commit
Diffstat (limited to 'dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js')
| -rw-r--r-- | dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js | 134 |
1 files changed, 134 insertions, 0 deletions
diff --git a/dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js b/dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js new file mode 100644 index 0000000..39437fe --- /dev/null +++ b/dist/static/jquery/emoticons-jquery/jquery.cssemoticons.js @@ -0,0 +1,134 @@ +/* + * jQuery CSSEmoticons plugin 0.2.9 + * + * Copyright (c) 2010 Steve Schwartz (JangoSteve) + * + * Dual licensed under the MIT and GPL licenses: + * http://www.opensource.org/licenses/mit-license.php + * http://www.gnu.org/licenses/gpl.html + * + * Date: Sun Oct 22 1:00:00 2010 -0500 + */ +(function($) { + $.fn.emoticonize = function(options) { + + var opts = $.extend({}, $.fn.emoticonize.defaults, options); + + var escapeCharacters = [ ")", "(", "*", "[", "]", "{", "}", "|", "^", "<", ">", "\\", "?", "+", "=", "." ]; + + var threeCharacterEmoticons = [ + // really weird bug if you have :{ and then have :{) in the same container anywhere *after* :{ then :{ doesn't get matched, e.g. :] :{ :) :{) :) :-) will match everything except :{ + // But if you take out the :{) or even just move :{ to the right of :{) then everything works fine. This has something to do with the preMatch string below I think, because + // it'll work again if you set preMatch equal to '()' + // So for now, we'll just remove :{) from the emoticons, because who actually uses this mustache man anyway? + // ":{)", + ":-)", ":o)", ":c)", ":^)", ":-D", ":-(", ":-9", ";-)", ":-P", ":-p", ":-Þ", ":-b", ":-O", ":-/", ":-X", ":-#", ":'(", "B-)", "8-)", ";*(", ":-*", ":-\\", + "?-)", // <== This is my own invention, it's a smiling pirate (with an eye-patch)! + // and the twoCharacterEmoticons from below, but with a space inserted + ": )", ": ]", "= ]", "= )", "8 )", ": }", ": D", "8 D", "X D", "x D", "= D", ": (", ": [", ": {", "= (", "; )", "; ]", "; D", ": P", ": p", "= P", "= p", ": b", ": Þ", ": O", "8 O", ": /", "= /", ": S", ": #", ": X", "B )", ": |", ": \\", "= \\", ": *", ": >", ": <"//, "* )" + ]; + + var twoCharacterEmoticons = [ // separate these out so that we can add a letter-spacing between the characters for better proportions + ":)", ":]", "=]", "=)", "8)", ":}", ":D", ":(", ":[", ":{", "=(", ";)", ";]", ";D", ":P", ":p", "=P", "=p", ":b", ":Þ", ":O", ":/", "=/", ":S", ":#", ":X", "B)", ":|", ":\\", "=\\", ":*", ":>", ":<"//, "*)" + ]; + + var specialEmoticons = { // emoticons to be treated with a special class, hash specifies the additional class to add, along with standard css-emoticon class + ">:)": { cssClass: "red-emoticon small-emoticon spaced-emoticon" }, + ">;)": { cssClass: "red-emoticon small-emoticon spaced-emoticon"}, + ">:(": { cssClass: "red-emoticon small-emoticon spaced-emoticon" }, + ">: )": { cssClass: "red-emoticon small-emoticon" }, + ">; )": { cssClass: "red-emoticon small-emoticon"}, + ">: (": { cssClass: "red-emoticon small-emoticon" }, + ";(": { cssClass: "red-emoticon spaced-emoticon" }, + "<3": { cssClass: "pink-emoticon counter-rotated" }, + "O_O": { cssClass: "no-rotate" }, + "o_o": { cssClass: "no-rotate" }, + "0_o": { cssClass: "no-rotate" }, + "O_o": { cssClass: "no-rotate" }, + "T_T": { cssClass: "no-rotate" }, + "^_^": { cssClass: "no-rotate" }, + "O:)": { cssClass: "small-emoticon spaced-emoticon" }, + "O: )": { cssClass: "small-emoticon" }, + "8D": { cssClass: "small-emoticon spaced-emoticon" }, + "XD": { cssClass: "small-emoticon spaced-emoticon" }, + "xD": { cssClass: "small-emoticon spaced-emoticon" }, + "=D": { cssClass: "small-emoticon spaced-emoticon" }, + "8O": { cssClass: "small-emoticon spaced-emoticon" }, + "[+=..]": { cssClass: "no-rotate nintendo-controller" } + //"OwO": { cssClass: "no-rotate" }, // these emoticons overflow and look weird even if they're made even smaller, could probably fix this with some more css trickery + //"O-O": { cssClass: "no-rotate" }, + //"O=)": { cssClass: "small-emoticon" } + } + + var specialRegex = new RegExp( '(\\' + escapeCharacters.join('|\\') + ')', 'g' ); + // One of these characters must be present before the matched emoticon, or the matched emoticon must be the first character in the container HTML + // This is to ensure that the characters in the middle of HTML properties or URLs are not matched as emoticons + // Below matches ^ (first character in container HTML), \s (whitespace like space or tab), or \0 (NULL character) + // (<\\S+.*>) matches <\\S+.*> (matches an HTML tag like <span> or <div>), but haven't quite gotten it working yet, need to push this fix now + var preMatch = '(^|[\\s\\0])'; + + for ( var i=threeCharacterEmoticons.length-1; i>=0; --i ){ + threeCharacterEmoticons[i] = threeCharacterEmoticons[i].replace(specialRegex,'\\$1'); + threeCharacterEmoticons[i] = new RegExp( preMatch+'(' + threeCharacterEmoticons[i] + ')', 'g' ); + } + + for ( var i=twoCharacterEmoticons.length-1; i>=0; --i ){ + twoCharacterEmoticons[i] = twoCharacterEmoticons[i].replace(specialRegex,'\\$1'); + twoCharacterEmoticons[i] = new RegExp( preMatch+'(' + twoCharacterEmoticons[i] + ')', 'g' ); + } + + for ( var emoticon in specialEmoticons ){ + specialEmoticons[emoticon].regexp = emoticon.replace(specialRegex,'\\$1'); + specialEmoticons[emoticon].regexp = new RegExp( preMatch+'(' + specialEmoticons[emoticon].regexp + ')', 'g' ); + } + + var exclude = 'span.css-emoticon'; + if(opts.exclude){ exclude += ','+opts.exclude; } + var excludeArray = exclude.split(',') + + return this.not(exclude).each(function() { + var container = $(this); + var cssClass = 'css-emoticon' + if(opts.animate){ cssClass += ' un-transformed-emoticon animated-emoticon'; } + + for( var emoticon in specialEmoticons ){ + specialCssClass = cssClass + " " + specialEmoticons[emoticon].cssClass; + container.html(container.html().replace(specialEmoticons[emoticon].regexp,"$1<span class='" + specialCssClass + "'>$2</span>")); + } + $(threeCharacterEmoticons).each(function(){ + container.html(container.html().replace(this,"$1<span class='" + cssClass + "'>$2</span>")); + }); + $(twoCharacterEmoticons).each(function(){ + container.html(container.html().replace(this,"$1<span class='" + cssClass + " spaced-emoticon'>$2</span>")); + }); + // fix emoticons that got matched more then once (where one emoticon is a subset of another emoticon), and thus got nested spans + $.each(excludeArray,function(index,item){ + container.find($.trim(item)+" span.css-emoticon").each(function(){ + $(this).replaceWith($(this).text()); + }); + }); + if(opts.animate){ + setTimeout(function(){$('.un-transformed-emoticon').removeClass('un-transformed-emoticon');}, opts.delay); + } + }); + } + + $.fn.unemoticonize = function(options) { + var opts = $.extend({}, $.fn.emoticonize.defaults, options); + return this.each(function() { + var container = $(this); + container.find('span.css-emoticon').each(function(){ + // add delay equal to animate speed if animate is not false + var span = $(this); + if(opts.animate){ + span.addClass('un-transformed-emoticon'); + setTimeout(function(){span.replaceWith(span.text());}, opts.delay); + }else{ + span.replaceWith(span.text()); + } + }); + }); + } + + $.fn.emoticonize.defaults = {animate: true, delay: 500, exclude: 'pre,code,.no-emoticons'} +})(jQuery);
\ No newline at end of file |
