tinymce.full.js
function addBrAfterLastLinks() {
        function fixLinks() {
          each(dom.select('a'), function (node) {
            var parentNode = node.parentNode, root = dom.getRoot();

            if (parentNode.lastChild === node) {
              while (parentNode && !dom.isBlock(parentNode)) {
                if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {
                  return;
                }

                parentNode = parentNode.parentNode;
              }

              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });
            }
          });
        }

        editor.on('SetContent ExecCommand', function (e) {
          if (e.type == "setcontent" || e.command === 'mceInsertLink') {
            fixLinks();
          }
        });
      }
function addBrAfterLastLinks() {
        function fixLinks() {
          each(dom.select('a'), function (node) {
            var parentNode = node.parentNode, root = dom.getRoot();

            if (parentNode.lastChild === node) {
              while (parentNode && !dom.isBlock(parentNode)) {
                if (parentNode.parentNode.lastChild !== parentNode || parentNode === root) {
                  return;
                }

                parentNode = parentNode.parentNode;
              }

              dom.add(parentNode, 'br', { 'data-mce-bogus': 1 });
            }
          });
        }

        editor.on('SetContent ExecCommand', function (e) {
          if (e.type == "setcontent" || e.command === 'mceInsertLink') {
            fixLinks();
          }
        });
      }
function addBrAfterLastLinks ( ) { function fixLinks ( ) { each ( dom . select ( 'a' ) , function ( node ) { var parentNode = node . parentNode , root = dom . getRoot ( ) ; if ( parentNode . lastChild === node ) { while ( parentNode && ! dom . isBlock ( parentNode ) ) { if ( parentNode . parentNode . lastChild !== parentNode || parentNode === root ) { return ; } parentNode = parentNode . parentNode ; } dom . add ( parentNode , 'br' , { 'data-mce-bogus' : 1 } ) ; } } ) ; } editor . on ( 'SetContent ExecCommand' , function ( e ) { if ( e . type == "setcontent" || e . command === 'mceInsertLink' ) { fixLinks ( ) ; } } ) ; }
Fixes a gecko link bug, when a link is placed at the end of block elements there is
no way to move the caret behind the link. This fix adds a bogus br element after the link.

For example this:
<p><b><a href="#">x</a></b></p>

Becomes this:
<p><b><a href="#">x</a></b><br></p>
Fixes a gecko link bug when a link is placed at the end of block elements there is no way to move the caret behind the link . This fix adds a bogus br element after the link .