<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><meta http-equiv="content-type" content="text/html; charset=utf-8" />
<title>[36747] trunk/src/wp-includes/js: TinyMCE, inline link:</title>
</head>
<body>

<style type="text/css"><!--
#msg dl.meta { border: 1px #006 solid; background: #369; padding: 6px; color: #fff; }
#msg dl.meta dt { float: left; width: 6em; font-weight: bold; }
#msg dt:after { content:':';}
#msg dl, #msg dt, #msg ul, #msg li, #header, #footer, #logmsg { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt;  }
#msg dl a { font-weight: bold}
#msg dl a:link    { color:#fc3; }
#msg dl a:active  { color:#ff0; }
#msg dl a:visited { color:#cc6; }
h3 { font-family: verdana,arial,helvetica,sans-serif; font-size: 10pt; font-weight: bold; }
#msg pre { overflow: auto; background: #ffc; border: 1px #fa0 solid; padding: 6px; }
#logmsg { background: #ffc; border: 1px #fa0 solid; padding: 1em 1em 0 1em; }
#logmsg p, #logmsg pre, #logmsg blockquote { margin: 0 0 1em 0; }
#logmsg p, #logmsg li, #logmsg dt, #logmsg dd { line-height: 14pt; }
#logmsg h1, #logmsg h2, #logmsg h3, #logmsg h4, #logmsg h5, #logmsg h6 { margin: .5em 0; }
#logmsg h1:first-child, #logmsg h2:first-child, #logmsg h3:first-child, #logmsg h4:first-child, #logmsg h5:first-child, #logmsg h6:first-child { margin-top: 0; }
#logmsg ul, #logmsg ol { padding: 0; list-style-position: inside; margin: 0 0 0 1em; }
#logmsg ul { text-indent: -1em; padding-left: 1em; }#logmsg ol { text-indent: -1.5em; padding-left: 1.5em; }
#logmsg > ul, #logmsg > ol { margin: 0 0 1em 0; }
#logmsg pre { background: #eee; padding: 1em; }
#logmsg blockquote { border: 1px solid #fa0; border-left-width: 10px; padding: 1em 1em 0 1em; background: white;}
#logmsg dl { margin: 0; }
#logmsg dt { font-weight: bold; }
#logmsg dd { margin: 0; padding: 0 0 0.5em 0; }
#logmsg dd:before { content:'\00bb';}
#logmsg table { border-spacing: 0px; border-collapse: collapse; border-top: 4px solid #fa0; border-bottom: 1px solid #fa0; background: #fff; }
#logmsg table th { text-align: left; font-weight: normal; padding: 0.2em 0.5em; border-top: 1px dotted #fa0; }
#logmsg table td { text-align: right; border-top: 1px dotted #fa0; padding: 0.2em 0.5em; }
#logmsg table thead th { text-align: center; border-bottom: 1px solid #fa0; }
#logmsg table th.Corner { text-align: left; }
#logmsg hr { border: none 0; border-top: 2px dashed #fa0; height: 1px; }
#header, #footer { color: #fff; background: #636; border: 1px #300 solid; padding: 6px; }
#patch { width: 100%; }
#patch h4 {font-family: verdana,arial,helvetica,sans-serif;font-size:10pt;padding:8px;background:#369;color:#fff;margin:0;}
#patch .propset h4, #patch .binary h4 {margin:0;}
#patch pre {padding:0;line-height:1.2em;margin:0;}
#patch .diff {width:100%;background:#eee;padding: 0 0 10px 0;overflow:auto;}
#patch .propset .diff, #patch .binary .diff  {padding:10px 0;}
#patch span {display:block;padding:0 10px;}
#patch .modfile, #patch .addfile, #patch .delfile, #patch .propset, #patch .binary, #patch .copfile {border:1px solid #ccc;margin:10px 0;}
#patch ins {background:#dfd;text-decoration:none;display:block;padding:0 10px;}
#patch del {background:#fdd;text-decoration:none;display:block;padding:0 10px;}
#patch .lines, .info {color:#888;background:#fff;}
--></style>
<div id="msg">
<dl class="meta" style="font-size: 105%">
<dt style="float: left; width: 6em; font-weight: bold">Revision</dt> <dd><a style="font-weight: bold" href="https://core.trac.wordpress.org/changeset/36747">36747</a><script type="application/ld+json">{"@context":"http://schema.org","@type":"EmailMessage","description":"Review this Commit","action":{"@type":"ViewAction","url":"https://core.trac.wordpress.org/changeset/36747","name":"Review Commit"}}</script></dd>
<dt style="float: left; width: 6em; font-weight: bold">Author</dt> <dd>azaozz</dd>
<dt style="float: left; width: 6em; font-weight: bold">Date</dt> <dd>2016-02-27 21:32:02 +0000 (Sat, 27 Feb 2016)</dd>
</dl>

<pre style='padding-left: 1em; margin: 2em 0; border-left: 2px solid #ccc; line-height: 1.25; font-size: 105%; font-family: sans-serif'>TinyMCE, inline link:
- Fix in IE (again). Remove setting/getting placeholders, pass the link node instead.
- In the inline dialog: when the selected text looks like URL or email, pre-fill the URL field with it (same as in the modal).
- Fix setting the name of the main button in the modal: Add Link or Update.
- In the modal when clicking Update remove the link if the URL field is empty. That matches the inline dialog behaviour. Otherwise the modal remains open, nothing happens when clicking the Update button there.

See <a href="https://core.trac.wordpress.org/ticket/33301">#33301</a>.</pre>

<h3>Modified Paths</h3>
<ul>
<li><a href="#trunksrcwpincludesjstinymcepluginswplinkpluginjs">trunk/src/wp-includes/js/tinymce/plugins/wplink/plugin.js</a></li>
<li><a href="#trunksrcwpincludesjswplinkjs">trunk/src/wp-includes/js/wplink.js</a></li>
</ul>

</div>
<div id="patch">
<h3>Diff</h3>
<a id="trunksrcwpincludesjstinymcepluginswplinkpluginjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/tinymce/plugins/wplink/plugin.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/tinymce/plugins/wplink/plugin.js 2016-02-27 21:21:12 UTC (rev 36746)
+++ trunk/src/wp-includes/js/tinymce/plugins/wplink/plugin.js   2016-02-27 21:32:02 UTC (rev 36747)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -78,6 +78,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px">                reset: function() {
</span><span class="cx" style="display: block; padding: 0 10px">                        var urlInput = this.getEl().firstChild;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+
</ins><span class="cx" style="display: block; padding: 0 10px">                         urlInput.value = '';
</span><span class="cx" style="display: block; padding: 0 10px">                        urlInput.nextSibling.value = '';
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -88,6 +89,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                var editToolbar;
</span><span class="cx" style="display: block; padding: 0 10px">                var previewInstance;
</span><span class="cx" style="display: block; padding: 0 10px">                var inputInstance;
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                var linkNode;
</ins><span class="cx" style="display: block; padding: 0 10px">                 var $ = window.jQuery;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                function getSelectedLink() {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -107,7 +109,6 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ( link ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                editor.selection.select( link );
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                editor.nodeChanged();
</del><span class="cx" style="display: block; padding: 0 10px">                                         }
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -152,9 +153,14 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                editToolbar.on( 'show', function() {
</span><span class="cx" style="display: block; padding: 0 10px">                                        if ( ! tinymce.$( document.body ).hasClass( 'modal-open' ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                                window.setTimeout( function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                                        var element = editToolbar.$el.find( 'input.ui-autocomplete-input' )[0];
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                 var element = editToolbar.$el.find( 'input.ui-autocomplete-input' )[0],
+                                                               selection = linkNode && ( linkNode.textContent || linkNode.innerText );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                                        if ( element ) {
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                                                if ( ! element.value && selection && typeof window.wpLink !== 'undefined' ) {
+                                                                       element.value = window.wpLink.getUrlFromSelection( selection );
+                                                               }
+
</ins><span class="cx" style="display: block; padding: 0 10px">                                                                 element.focus();
</span><span class="cx" style="display: block; padding: 0 10px">                                                                element.select();
</span><span class="cx" style="display: block; padding: 0 10px">                                                        }
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -171,8 +177,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                editor.addCommand( 'WP_Link', function() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var link = getSelectedLink();
-
</del><span class="cx" style="display: block; padding: 0 10px">                         if ( tinymce.Env.ie && tinymce.Env.ie < 10 ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                if ( typeof window.wpLink !== 'undefined' ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        window.wpLink.open( editor.id );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -181,18 +185,16 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        linkNode = getSelectedLink();
</ins><span class="cx" style="display: block; padding: 0 10px">                         editToolbar.tempHide = false;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( link ) {
-                               editor.dom.setAttribs( link, { 'data-wplink-edit': true } );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( linkNode ) {
+                               editor.dom.setAttribs( linkNode, { 'data-wplink-edit': true } );
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                removePlaceholders();
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.execCommand( 'mceInsertLink', false, { href: '_wp_link_placeholder' } );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( tinymce.Env.ie ) {
-                                       editor.windowManager.wplinkBookmark = editor.selection.getBookmark();
-                               }
-
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         linkNode = editor.$( 'a[href="_wp_link_placeholder"]' )[0];
</ins><span class="cx" style="display: block; padding: 0 10px">                                 editor.nodeChanged();
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                } );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -202,19 +204,13 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        var href, text,
-                               linkNode = getSelectedLink();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 var href, text;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( linkNode ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                href = inputInstance.getURL();
</span><span class="cx" style="display: block; padding: 0 10px">                                text = inputInstance.getLinkText();
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.focus();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( tinymce.isIE ) {
-                                       editor.selection.moveToBookmark( editor.windowManager.wplinkBookmark );
-                                       editor.windowManager.wplinkBookmark = null;
-                               }
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 if ( ! href ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.dom.remove( linkNode, true );
</span><span class="cx" style="display: block; padding: 0 10px">                                        return;
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -240,12 +236,6 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                inputInstance.reset();
</span><span class="cx" style="display: block; padding: 0 10px">                                removePlaceholders();
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.focus();
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                               if ( tinymce.isIE ) {
-                                       editor.selection.moveToBookmark( editor.windowManager.wplinkBookmark );
-                                       editor.windowManager.wplinkBookmark = null;
-                               }
-
</del><span class="cx" style="display: block; padding: 0 10px">                                 editToolbar.tempHide = false;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                } );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -456,7 +446,7 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                                text = inputInstance.getLinkText() || null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        editor.focus(); // Needed for IE
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                        window.wpLink.open( editor.id, url, text );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 window.wpLink.open( editor.id, url, text, linkNode );
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                        editToolbar.tempHide = true;
</span><span class="cx" style="display: block; padding: 0 10px">                                        inputInstance.reset();
</span></span></pre></div>
<a id="trunksrcwpincludesjswplinkjs"></a>
<div class="modfile"><h4 style="background-color: #eee; color: inherit; margin: 1em 0; padding: 1.3em; font-size: 115%">Modified: trunk/src/wp-includes/js/wplink.js</h4>
<pre class="diff"><span>
<span class="info" style="display: block; padding: 0 10px; color: #888">--- trunk/src/wp-includes/js/wplink.js        2016-02-27 21:21:12 UTC (rev 36746)
+++ trunk/src/wp-includes/js/wplink.js  2016-02-27 21:32:02 UTC (rev 36747)
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -2,12 +2,12 @@
</span><span class="cx" style="display: block; padding: 0 10px"> var wpLink;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px"> ( function( $ ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-        var editor, correctedURL,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+ var editor, correctedURL, linkNode,
</ins><span class="cx" style="display: block; padding: 0 10px">                 inputs = {},
</span><span class="cx" style="display: block; padding: 0 10px">                isTouch = ( 'ontouchend' in document );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        function getLink() {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                return editor.dom.getParent( editor.selection.getNode(), 'a' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         return linkNode || editor.dom.getParent( editor.selection.getNode(), 'a[href]' );
</ins><span class="cx" style="display: block; padding: 0 10px">         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">        wpLink = {
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -125,11 +125,12 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                open: function( editorId, url, text ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         open: function( editorId, url, text, node ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         var ed,
</span><span class="cx" style="display: block; padding: 0 10px">                                $body = $( document.body );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        $body.addClass( 'modal-open' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        linkNode = node;
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        wpLink.range = null;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -258,20 +259,20 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                                url = url || editor.dom.getAttrib( linkNode, 'href' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( url === '_wp_link_placeholder' ) {
-                                       url = '';
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         if ( url !== '_wp_link_placeholder' ) {
+                                       inputs.url.val( url );
+                                       inputs.openInNewTab.prop( 'checked', '_blank' === editor.dom.getAttrib( linkNode, 'target' ) );
+                                       inputs.submit.val( wpLinkL10n.update );
+                               } else {
+                                       this.setDefaultValues( linkText );
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-
-                               inputs.url.val( url );
-                               inputs.openInNewTab.prop( 'checked', '_blank' === editor.dom.getAttrib( linkNode, 'target' ) );
-                               inputs.submit.val( wpLinkL10n.update );
</del><span class="cx" style="display: block; padding: 0 10px">                         } else {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                text = editor.selection.getContent({ format: 'text' }) || text;
-                               this.setDefaultValues();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         linkText = editor.selection.getContent({ format: 'text' }) || text || '';
+                               this.setDefaultValues( linkText );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( onlyText ) {
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                inputs.text.val( linkText || '' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         inputs.text.val( linkText );
</ins><span class="cx" style="display: block; padding: 0 10px">                                 inputs.wrap.addClass( 'has-text-field' );
</span><span class="cx" style="display: block; padding: 0 10px">                        } else {
</span><span class="cx" style="display: block; padding: 0 10px">                                inputs.text.val( '' );
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -279,22 +280,24 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                close: function() {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         close: function( reset ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                         $( document.body ).removeClass( 'modal-open' );
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( ! wpLink.isMCE() ) {
-                               wpLink.textarea.focus();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( reset !== 'noReset' ) {
+                               if ( ! wpLink.isMCE() ) {
+                                       wpLink.textarea.focus();
</ins><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                if ( wpLink.range ) {
-                                       wpLink.range.moveToBookmark( wpLink.range.getBookmark() );
-                                       wpLink.range.select();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                 if ( wpLink.range ) {
+                                               wpLink.range.moveToBookmark( wpLink.range.getBookmark() );
+                                               wpLink.range.select();
+                                       }
+                               } else {
+                                       if ( editor.plugins.wplink ) {
+                                               editor.plugins.wplink.close();
+                                       }
+
+                                       editor.focus();
</ins><span class="cx" style="display: block; padding: 0 10px">                                 }
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        } else {
-                               if ( editor.plugins.wplink ) {
-                                       editor.plugins.wplink.close();
-                               }
-
-                               editor.focus();
</del><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        inputs.backdrop.hide();
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -394,13 +397,14 @@
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        editor.focus();
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( tinymce.isIE ) {
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( tinymce.isIE && editor.windowManager.wplinkBookmark ) {
</ins><span class="cx" style="display: block; padding: 0 10px">                                 editor.selection.moveToBookmark( editor.windowManager.wplinkBookmark );
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.windowManager.wplinkBookmark = null;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="cx" style="display: block; padding: 0 10px">                        if ( ! attrs.href ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                editor.execCommand( 'unlink' );
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                                wpLink.close();
</ins><span class="cx" style="display: block; padding: 0 10px">                                 return;
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -428,7 +432,8 @@
</span><span class="cx" style="display: block; padding: 0 10px">                                }
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        wpLink.close();
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 wpLink.close( 'noReset' );
+                       editor.focus();
</ins><span class="cx" style="display: block; padding: 0 10px">                         editor.nodeChanged();
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><span class="lines" style="display: block; padding: 0 10px; color: #888">@@ -455,30 +460,37 @@
</span><span class="cx" style="display: block; padding: 0 10px">                        }
</span><span class="cx" style="display: block; padding: 0 10px">                },
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                setDefaultValues: function() {
-                       var selection,
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+         getUrlFromSelection: function( selection ) {
+                       var url,
</ins><span class="cx" style="display: block; padding: 0 10px">                                 emailRegexp = /^[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}$/i,
</span><span class="cx" style="display: block; padding: 0 10px">                                urlRegexp = /^(https?|ftp):\/\/[A-Z0-9.-]+\.[A-Z]{2,4}[^ "]*$/i;
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                        if ( this.isMCE() ) {
-                               selection = editor.selection.getContent();
-                       } else if ( document.selection && wpLink.range ) {
-                               selection = wpLink.range.text;
-                       } else if ( typeof this.textarea.selectionStart !== 'undefined' ) {
-                               selection = this.textarea.value.substring( this.textarea.selectionStart, this.textarea.selectionEnd );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                 if ( ! selection ) {
+                               if ( this.isMCE() ) {
+                                       selection = editor.selection.getContent({ format: 'text' });
+                               } else if ( document.selection && wpLink.range ) {
+                                       selection = wpLink.range.text;
+                               } else if ( typeof this.textarea.selectionStart !== 'undefined' ) {
+                                       selection = this.textarea.value.substring( this.textarea.selectionStart, this.textarea.selectionEnd );
+                               }
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        selection = tinymce.trim( selection );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         if ( selection && emailRegexp.test( selection ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // Selection is email address
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                inputs.url.val( 'mailto:' + selection );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         return 'mailto:' + selection;
</ins><span class="cx" style="display: block; padding: 0 10px">                         } else if ( selection && urlRegexp.test( selection ) ) {
</span><span class="cx" style="display: block; padding: 0 10px">                                // Selection is URL
</span><del style="background-color: #fdd; text-decoration:none; display:block; padding: 0 10px">-                                inputs.url.val( selection.replace( /&amp;|&#0?38;/gi, '&' ) );
-                       } else {
-                               // Set URL to default.
-                               inputs.url.val( '' );
</del><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                         return selection.replace( /&amp;|&#0?38;/gi, '&' );
</ins><span class="cx" style="display: block; padding: 0 10px">                         }
</span><span class="cx" style="display: block; padding: 0 10px"> 
</span><ins style="background-color: #dfd; text-decoration:none; display:block; padding: 0 10px">+                        return '';
+               },
+
+               setDefaultValues: function( selection ) {
+                       inputs.url.val( this.getUrlFromSelection( selection ) );
+
</ins><span class="cx" style="display: block; padding: 0 10px">                         // Update save prompt.
</span><span class="cx" style="display: block; padding: 0 10px">                        inputs.submit.val( wpLinkL10n.save );
</span><span class="cx" style="display: block; padding: 0 10px">                }
</span></span></pre>
</div>
</div>

</body>
</html>