summaryrefslogtreecommitdiffstats
path: root/wp-includes/js/tinymce/plugins/wpemoji
diff options
context:
space:
mode:
authorDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
committerDaniel Baumann <daniel.baumann@progress-linux.org>2024-04-17 07:56:49 +0000
commita415c29efee45520ae252d2aa28f1083a521cd7b (patch)
treef4ade4b6668ecc0765de7e1424f7c1427ad433ff /wp-includes/js/tinymce/plugins/wpemoji
parentInitial commit. (diff)
downloadwordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.tar.xz
wordpress-a415c29efee45520ae252d2aa28f1083a521cd7b.zip
Adding upstream version 6.4.3+dfsg1.upstream/6.4.3+dfsg1
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to 'wp-includes/js/tinymce/plugins/wpemoji')
-rw-r--r--wp-includes/js/tinymce/plugins/wpemoji/plugin.js134
-rw-r--r--wp-includes/js/tinymce/plugins/wpemoji/plugin.min.js1
2 files changed, 135 insertions, 0 deletions
diff --git a/wp-includes/js/tinymce/plugins/wpemoji/plugin.js b/wp-includes/js/tinymce/plugins/wpemoji/plugin.js
new file mode 100644
index 0000000..84de774
--- /dev/null
+++ b/wp-includes/js/tinymce/plugins/wpemoji/plugin.js
@@ -0,0 +1,134 @@
+( function( tinymce ) {
+ tinymce.PluginManager.add( 'wpemoji', function( editor ) {
+ var typing,
+ wp = window.wp,
+ settings = window._wpemojiSettings,
+ env = tinymce.Env,
+ ua = window.navigator.userAgent,
+ isWin = ua.indexOf( 'Windows' ) > -1,
+ isWin8 = ( function() {
+ var match = ua.match( /Windows NT 6\.(\d)/ );
+
+ if ( match && match[1] > 1 ) {
+ return true;
+ }
+
+ return false;
+ }());
+
+ if ( ! wp || ! wp.emoji || settings.supports.everything ) {
+ return;
+ }
+
+ function setImgAttr( image ) {
+ image.className = 'emoji';
+ image.setAttribute( 'data-mce-resize', 'false' );
+ image.setAttribute( 'data-mce-placeholder', '1' );
+ image.setAttribute( 'data-wp-emoji', '1' );
+ }
+
+ function replaceEmoji( node ) {
+ var imgAttr = {
+ 'data-mce-resize': 'false',
+ 'data-mce-placeholder': '1',
+ 'data-wp-emoji': '1'
+ };
+
+ wp.emoji.parse( node, { imgAttr: imgAttr } );
+ }
+
+ // Test if the node text contains emoji char(s) and replace.
+ function parseNode( node ) {
+ var selection, bookmark;
+
+ if ( node && window.twemoji && window.twemoji.test( node.textContent || node.innerText ) ) {
+ if ( env.webkit ) {
+ selection = editor.selection;
+ bookmark = selection.getBookmark();
+ }
+
+ replaceEmoji( node );
+
+ if ( env.webkit ) {
+ selection.moveToBookmark( bookmark );
+ }
+ }
+ }
+
+ if ( isWin8 ) {
+ /*
+ * Windows 8+ emoji can be "typed" with the onscreen keyboard.
+ * That triggers the normal keyboard events, but not the 'input' event.
+ * Thankfully it sets keyCode 231 when the onscreen keyboard inserts any emoji.
+ */
+ editor.on( 'keyup', function( event ) {
+ if ( event.keyCode === 231 ) {
+ parseNode( editor.selection.getNode() );
+ }
+ } );
+ } else if ( ! isWin ) {
+ /*
+ * In MacOS inserting emoji doesn't trigger the stanradr keyboard events.
+ * Thankfully it triggers the 'input' event.
+ * This works in Android and iOS as well.
+ */
+ editor.on( 'keydown keyup', function( event ) {
+ typing = ( event.type === 'keydown' );
+ } );
+
+ editor.on( 'input', function() {
+ if ( typing ) {
+ return;
+ }
+
+ parseNode( editor.selection.getNode() );
+ });
+ }
+
+ editor.on( 'setcontent', function( event ) {
+ var selection = editor.selection,
+ node = selection.getNode();
+
+ if ( window.twemoji && window.twemoji.test( node.textContent || node.innerText ) ) {
+ replaceEmoji( node );
+
+ // In IE all content in the editor is left selected after wp.emoji.parse()...
+ // Collapse the selection to the beginning.
+ if ( env.ie && env.ie < 9 && event.load && node && node.nodeName === 'BODY' ) {
+ selection.collapse( true );
+ }
+ }
+ } );
+
+ // Convert Twemoji compatible pasted emoji replacement images into our format.
+ editor.on( 'PastePostProcess', function( event ) {
+ if ( window.twemoji ) {
+ tinymce.each( editor.dom.$( 'img.emoji', event.node ), function( image ) {
+ if ( image.alt && window.twemoji.test( image.alt ) ) {
+ setImgAttr( image );
+ }
+ });
+ }
+ });
+
+ editor.on( 'postprocess', function( event ) {
+ if ( event.content ) {
+ event.content = event.content.replace( /<img[^>]+data-wp-emoji="[^>]+>/g, function( img ) {
+ var alt = img.match( /alt="([^"]+)"/ );
+
+ if ( alt && alt[1] ) {
+ return alt[1];
+ }
+
+ return img;
+ });
+ }
+ } );
+
+ editor.on( 'resolvename', function( event ) {
+ if ( event.target.nodeName === 'IMG' && editor.dom.getAttrib( event.target, 'data-wp-emoji' ) ) {
+ event.preventDefault();
+ }
+ } );
+ } );
+} )( window.tinymce );
diff --git a/wp-includes/js/tinymce/plugins/wpemoji/plugin.min.js b/wp-includes/js/tinymce/plugins/wpemoji/plugin.min.js
new file mode 100644
index 0000000..2fa94f7
--- /dev/null
+++ b/wp-includes/js/tinymce/plugins/wpemoji/plugin.min.js
@@ -0,0 +1 @@
+!function(m){m.PluginManager.add("wpemoji",function(n){var t,o=window.wp,e=window._wpemojiSettings,i=m.Env,a=window.navigator.userAgent,w=-1<a.indexOf("Windows"),a=!!((a=a.match(/Windows NT 6\.(\d)/))&&1<a[1]);function d(e){o.emoji.parse(e,{imgAttr:{"data-mce-resize":"false","data-mce-placeholder":"1","data-wp-emoji":"1"}})}function c(e){var t,o;e&&window.twemoji&&window.twemoji.test(e.textContent||e.innerText)&&(i.webkit&&(o=(t=n.selection).getBookmark()),d(e),i.webkit)&&t.moveToBookmark(o)}o&&o.emoji&&!e.supports.everything&&(a?n.on("keyup",function(e){231===e.keyCode&&c(n.selection.getNode())}):w||(n.on("keydown keyup",function(e){t="keydown"===e.type}),n.on("input",function(){t||c(n.selection.getNode())})),n.on("setcontent",function(e){var t=n.selection,o=t.getNode();window.twemoji&&window.twemoji.test(o.textContent||o.innerText)&&(d(o),i.ie)&&i.ie<9&&e.load&&o&&"BODY"===o.nodeName&&t.collapse(!0)}),n.on("PastePostProcess",function(e){window.twemoji&&m.each(n.dom.$("img.emoji",e.node),function(e){e.alt&&window.twemoji.test(e.alt)&&((e=e).className="emoji",e.setAttribute("data-mce-resize","false"),e.setAttribute("data-mce-placeholder","1"),e.setAttribute("data-wp-emoji","1"))})}),n.on("postprocess",function(e){e.content&&(e.content=e.content.replace(/<img[^>]+data-wp-emoji="[^>]+>/g,function(e){var t=e.match(/alt="([^"]+)"/);return t&&t[1]?t[1]:e}))}),n.on("resolvename",function(e){"IMG"===e.target.nodeName&&n.dom.getAttrib(e.target,"data-wp-emoji")&&e.preventDefault()}))})}(window.tinymce); \ No newline at end of file