Seditio Source
Root |
./othercms/ips_4.3.4/applications/core/interface/ckeditor/ckeditor/plugins/ipsemoticon/plugin.js
CKEDITOR.plugins.add("ipsemoticon",{icons:"ipsemoticon",hidpi:!0,init:function(d){d.widgets.add("ipsemoji",{editables:{},upcast:function(a){if("span"==a.name&&a.hasClass("ipsEmoji"))return!0}});ips.getSetting("emoji_shortcodes")&&new CKEDITOR.plugins.ipsemoji(d);d.addCommand("ipsEmoticon",{allowedContent:"",exec:function(a){var b=$("."+a.id).find(".cke_button__ipsemoticon");$("#"+b.attr("id")+"_menu").length||($("body").append(ips.templates.render("core.editor.emoticons",{id:b.attr("id"),editor:a.name})),
$(document).trigger("contentChange",[$("#"+b.attr("id")+"_menu")]),b.ipsMenu({alignCenter:!0,closeOnClick:!1}))}});d.ui.addButton("ipsEmoticon",{label:ips.getString("emoji"),command:"ipsEmoticon",toolbar:"insert"})}});
CKEDITOR.plugins.ipsemoji=function(d){this.currentEmoji=this.listenWithinEmoji=this.listenForColonSymbolEvent=null;this.callsWithNoResults=0;this.emoji={};this.listenForColonSymbol=function(){this.listenForColonSymbolEvent=d.on("change",function(a){CKEDITOR.tools.setTimeout(function(){var a=d.getSelection();if(a.getType()==CKEDITOR.SELECTION_TEXT)for(var a=a.getRanges(!0),c=0;c<a.length;c++)a[c].collapsed&&a[c].startOffset&&(a[c].setStart(a[c].startContainer,0),":"==a[c].cloneContents().$.textContent.substr(-1)&&
this.respondToColonSymbol(a[c]))},0,this)},this)};this.respondToColonSymbol=function(a){var b=a.cloneContents().$.textContent;if(!(1<b.length)||b.substr(-2,1).match(/\s/)){this.listenForColonSymbolEvent.removeListener();this.currentEmoji=new CKEDITOR.dom.element("span");this.currentEmoji.setText(":");if(a.endContainer instanceof CKEDITOR.dom.element){for(var c,e=a.endContainer.getChildren(),b=e.count();0<=b;b--){var h=e.getItem(b);if(h instanceof CKEDITOR.dom.text&&":"==h.getText()){c=h;break}}if(!c)return}else c=
a.endContainer.split(a.endOffset-1);c.split(1);this.currentEmoji.replace(c);c=d.createRange();c.moveToPosition(this.currentEmoji,CKEDITOR.POSITION_BEFORE_END);d.getSelection().selectRanges([c]);this.callsWithNoResults=0;this.results=$('\x3cul class\x3d"ipsMenu ipsMenu_auto cEmojiMenu" data-emojiMenu\x3e\x3c/ul\x3e').hide();this.results.append('\x3cli class\x3d"ipsLoading ipsLoading_small" style\x3d"height: 40px"\x3e\x26nbsp;\x3c/li\x3e');$("body").append(this.results);this.positionResults(a);this.listenWithinEmoji=
d.on("key",this.listenWithinEmojiEvent,this)}};this.positionResults=function(a){a&&a.getNextEditableNode()&&a.getNextEditableNode().getSize("height");var b={trigger:$(this.currentEmoji.$),target:this.results,center:!0,above:!1,stemOffset:{left:25,top:0}};a=$(d.container.$);var b=ips.utils.position.positionElem(b),c=ips.utils.position.getElemPosition(a);this.results.css({position:b.fixed?"fixed":"absolute",top:b.top+"px",left:c.absPos.left+"px",width:a.width()-30+"px"})};this.listenWithinEmojiEvent=
function(a){if(27==a.data.keyCode)this.cancelEmoji(),this.closeResults();else if(40==a.data.keyCode||38==a.data.keyCode||39==a.data.keyCode||37==a.data.keyCode){var b=this.results.children("[data-selected]");b.length?(b.removeAttr("data-selected"),40==a.data.keyCode||39==a.data.keyCode?b.next().attr("data-selected",!0):b.prev().attr("data-selected",!0)):40==a.data.keyCode||37==a.data.keyCode?this.results.children(":first-child").attr("data-selected",!0):this.results.children(":last-child").attr("data-selected",
!0);a.cancel()}else 13==a.data.keyCode||9==a.data.keyCode?(b=this.results.children("[data-selected]"),b.length?(b.click(),a.cancel()):13==a.data.keyCode&&this.closeResults()):(8==a.data.keyCode&&(this.callsWithNoResults=0),CKEDITOR.tools.setTimeout(function(){if(!this.currentEmoji.getText().trim().length)this.closeResults();else if(":"==this.currentEmoji.getText().substr(-1))this.closeResults();else if(!(3>this.currentEmoji.getText().trim().length)){for(var a=d.getSelection().getRanges(),b=0;b<a.length;b++)if(!a[b].getCommonAncestor(!0,
!0).equals(this.currentEmoji)){this.cancelEmoji();this.closeResults();return}var h=this.currentEmoji.getText();this.results.show();this.positionResults();ips.utils.emoji.getEmoji(function(a){this.results.removeClass("ipsLoading").html("");var b=h.substr(1).replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g,"\\$\x26"),c=[],d=new RegExp(b,"i"),e=0,f;for(f in a)for(var g=0;g<a[f].length;g++)for(var k=0;k<a[f][g].shortNames.length;k++)a[f][g].shortNames[k].match(d)&&c.push({shortName:a[f][g].shortNames[k],
emoji:a[f][g]});a=_.sortBy(c,function(a){return a.shortName.indexOf(b)});for(c=0;c<a.length;c++)d=a[c].emoji.code,a[c].emoji.skinTone&&ips.utils.cookie.get("emojiSkinTone")&&(d=ips.utils.emoji.tonedCode(d,ips.utils.cookie.get("emojiSkinTone"))),this.results.append(ips.templates.render("core.editor.emojiResult",{code:d,emoji:ips.utils.emoji.preview(d),name:ips.haveString("emoji-"+a[c].emoji.name)?ips.getString("emoji-"+a[c].emoji.name):a[c].emoji.name,short_code:":"+a[c].shortName+":"})),e++;e?this.results.children().click($.proxy(this.selectEmoji,
this)):(this.results.hide(),this.callsWithNoResults++,3<=this.callsWithNoResults&&(this.cancelEmoji(),this.closeResults()))}.bind(this))}},50,this))};this.selectEmoji=function(a){a.preventDefault();a=$(a.currentTarget);var b=ips.utils.emoji.editorElement(a.attr("data-emoji"));if("img"==b.getName()&&75<=$("\x3cdiv\x3e"+d.getData()+"\x3c/div\x3e").find("img[data-emoticon]").length){var b=CKEDITOR.dom.element.createFromHtml("\x3cspan\x3e"+a.find("[data-role\x3d'shortCode']").text()+"\x3c/span\x3e"),
c=$("."+d.id).closest("[data-ipsEditor]").find('[data-role\x3d"emoticonMessage"]');c.slideDown();setTimeout(function(){instance.once("key",function(){c.slideUp()});instance.once("setData",function(){c.slideUp()})},2500)}b.replace(this.currentEmoji);"span"==b.getName()&&b.hasClass("ipsEmoji")&&d.widgets.initOn(b,"ipsemoji");d.focus();var e=d.createRange();e.moveToElementEditEnd(b);d.getSelection().selectRanges([e]);this.closeResults();ips.utils.emoji.logUse(a.attr("data-emoji"))};this.cancelEmoji=
function(){this.currentEmoji.remove(!0)};this.closeResults=function(){this.currentEmoji=null;this.results.remove();this.listenWithinEmoji.removeListener();this.listenForColonSymbol()};document.createElement("canvas").getContext&&("function"==typeof document.createElement("canvas").getContext("2d").fillText&&ips.utils.emoji.getEmoji(function(a){this.emoji=a}.bind(this)),this.listenForColonSymbol())};