tinymce-rails 4.6.2 → 4.6.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: a4b0b2b881d8e4fe41883127c1732512b902674c
4
- data.tar.gz: cd712d759ec1eb5f32369f2dfff1a4212716f4a6
3
+ metadata.gz: 93f9f956e1b77cb470a5d45af711fc2a52852b08
4
+ data.tar.gz: 181e78dff51dc4ee7b10311beca8ba0e8751f8d6
5
5
  SHA512:
6
- metadata.gz: 3bc2b6a6343308a6dd0c9c0e2835579eed5a3ed20a887fcbdbd57a4d65cfaa56377f47e7a7f37eda77ee454c98b71956dd7609a7c0e8b2613bf0411f51cea78b
7
- data.tar.gz: c9b00be91f1928ee114cab9c244ca962e5652fb78b000b7d421148a28922533ddf47429767988f00dcd3ce6cd478f6da3e2ac7fa3ec07a8cf7282e8f4d3b7562
6
+ metadata.gz: 52bcf8174f2c22c67f78a146b3fbdf82d90a2c17a156bebb4538ae09ed3ed1a302bc4ec22f63e2012b89e5a35133555f9dab6bcccb84b75e692c18a5e69817d3
7
+ data.tar.gz: 8b50bf67723ea5e42f4b289e0d40161ccc83f43e26cc7743e7ec6a24e736230279d83374062c214933d321ad6604dd3110765d67c7c2e1029a5d27fb2ac6cc97
@@ -1,4 +1,4 @@
1
- // 4.6.2 (2017-05-23)
1
+ // 4.6.3 (2017-05-30)
2
2
  (function () {
3
3
 
4
4
  var defs = {}; // id -> {dependencies, definition, instance (possibly undefined)}
@@ -82,7 +82,7 @@ var defineGlobal = function (id, ref) {
82
82
  define(id, [], function () { return ref; });
83
83
  };
84
84
  /*jsc
85
- ["tinymce.core.api.Main","tinymce.core.api.Tinymce","tinymce.core.Register","tinymce.core.geom.Rect","tinymce.core.util.Promise","tinymce.core.util.Delay","tinymce.core.Env","tinymce.core.dom.EventUtils","tinymce.core.dom.Sizzle","tinymce.core.util.Tools","tinymce.core.dom.DomQuery","tinymce.core.html.Styles","tinymce.core.dom.TreeWalker","tinymce.core.html.Entities","tinymce.core.dom.DOMUtils","tinymce.core.dom.ScriptLoader","tinymce.core.AddOnManager","tinymce.core.dom.RangeUtils","tinymce.core.html.Node","tinymce.core.html.Schema","tinymce.core.html.SaxParser","tinymce.core.html.DomParser","tinymce.core.html.Writer","tinymce.core.html.Serializer","tinymce.core.dom.Serializer","tinymce.core.util.VK","tinymce.core.dom.ControlSelection","tinymce.core.dom.BookmarkManager","tinymce.core.dom.Selection","tinymce.core.Formatter","tinymce.core.UndoManager","tinymce.core.EditorCommands","tinymce.core.util.URI","tinymce.core.util.Class","tinymce.core.util.EventDispatcher","tinymce.core.util.Observable","tinymce.core.WindowManager","tinymce.core.NotificationManager","tinymce.core.EditorObservable","tinymce.core.Shortcuts","tinymce.core.Editor","tinymce.core.util.I18n","tinymce.core.FocusManager","tinymce.core.EditorManager","tinymce.core.util.XHR","tinymce.core.util.JSON","tinymce.core.util.JSONRequest","tinymce.core.util.JSONP","tinymce.core.util.LocalStorage","tinymce.core.api.Compat","tinymce.core.util.Color","tinymce.core.ui.Api","tinymce.core.util.Arr","tinymce.core.dom.Range","tinymce.core.dom.StyleSheetLoader","tinymce.core.dom.NodeType","tinymce.core.caret.CaretContainer","tinymce.core.text.Zwsp","tinymce.core.caret.CaretBookmark","tinymce.core.caret.CaretPosition","tinymce.core.dom.ScrollIntoView","tinymce.core.dom.TridentSelection","tinymce.core.selection.FragmentReader","tinymce.core.dom.ElementUtils","tinymce.core.util.Fun","tinymce.core.fmt.Preview","tinymce.core.fmt.Hooks","tinymce.core.undo.Levels","tinymce.core.delete.DeleteCommands","tinymce.core.InsertContent","global!document","tinymce.core.ui.Window","tinymce.core.ui.MessageBox","tinymce.core.ui.Notification","tinymce.core.init.Render","tinymce.core.Mode","tinymce.core.ui.Sidebar","tinymce.core.util.Uuid","tinymce.core.ErrorReporter","tinymce.core.LegacyInput","tinymce.core.ui.Selector","tinymce.core.ui.Collection","tinymce.core.ui.ReflowQueue","tinymce.core.ui.Control","tinymce.core.ui.Factory","tinymce.core.ui.KeyboardNavigation","tinymce.core.ui.Container","tinymce.core.ui.DragHelper","tinymce.core.ui.Scrollable","tinymce.core.ui.Panel","tinymce.core.ui.Movable","tinymce.core.ui.Resizable","tinymce.core.ui.FloatPanel","tinymce.core.ui.Tooltip","tinymce.core.ui.Widget","tinymce.core.ui.Progress","tinymce.core.ui.Layout","tinymce.core.ui.AbsoluteLayout","tinymce.core.ui.Button","tinymce.core.ui.ButtonGroup","tinymce.core.ui.Checkbox","tinymce.core.ui.ComboBox","tinymce.core.ui.ColorBox","tinymce.core.ui.PanelButton","tinymce.core.ui.ColorButton","tinymce.core.ui.ColorPicker","tinymce.core.ui.Path","tinymce.core.ui.ElementPath","tinymce.core.ui.FormItem","tinymce.core.ui.Form","tinymce.core.ui.FieldSet","tinymce.core.ui.FilePicker","tinymce.core.ui.FitLayout","tinymce.core.ui.FlexLayout","tinymce.core.ui.FlowLayout","tinymce.core.ui.FormatControls","tinymce.core.ui.GridLayout","tinymce.core.ui.Iframe","tinymce.core.ui.InfoBox","tinymce.core.ui.Label","tinymce.core.ui.Toolbar","tinymce.core.ui.MenuBar","tinymce.core.ui.MenuButton","tinymce.core.ui.MenuItem","tinymce.core.ui.Throbber","tinymce.core.ui.Menu","tinymce.core.ui.ListBox","tinymce.core.ui.Radio","tinymce.core.ui.ResizeHandle","tinymce.core.ui.SelectBox","tinymce.core.ui.Slider","tinymce.core.ui.Spacer","tinymce.core.ui.SplitButton","tinymce.core.ui.StackLayout","tinymce.core.ui.TabPanel","tinymce.core.ui.TextBox","ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Future","ephox.katamari.api.Futures","ephox.katamari.api.Result","tinymce.core.caret.CaretCandidate","tinymce.core.geom.ClientRect","tinymce.core.text.ExtendingChar","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Replication","ephox.sugar.api.node.Element","ephox.sugar.api.node.Fragment","ephox.sugar.api.node.Node","tinymce.core.dom.ElementType","tinymce.core.dom.Parents","tinymce.core.selection.SelectionUtils","tinymce.core.undo.Fragments","tinymce.core.delete.BlockBoundaryDelete","tinymce.core.delete.BlockRangeDelete","tinymce.core.delete.CefDelete","tinymce.core.delete.InlineBoundaryDelete","tinymce.core.caret.CaretWalker","tinymce.core.dom.RangeNormalizer","tinymce.core.InsertList","tinymce.core.data.ObservableObject","tinymce.core.ui.DomUtils","tinymce.core.ui.BoxUtils","tinymce.core.ui.ClassList","global!window","tinymce.core.init.Init","tinymce.core.PluginManager","tinymce.core.ThemeManager","tinymce.core.content.LinkTargets","tinymce.core.fmt.FontInfo","ephox.katamari.api.Option","global!Array","global!Error","global!String","ephox.katamari.api.LazyValue","ephox.katamari.async.Bounce","ephox.katamari.async.AsyncValues","ephox.sugar.api.search.Traverse","ephox.sugar.api.properties.Attr","global!console","ephox.sugar.api.dom.InsertAll","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.NodeTypes","ephox.sugar.api.dom.Compare","ephox.katamari.api.Options","tinymce.core.undo.Diff","tinymce.core.delete.BlockBoundary","tinymce.core.delete.MergeBlocks","tinymce.core.delete.DeleteUtils","tinymce.core.caret.CaretUtils","tinymce.core.delete.CefDeleteAction","tinymce.core.delete.DeleteElement","tinymce.core.keyboard.BoundaryCaret","tinymce.core.keyboard.BoundaryLocation","tinymce.core.keyboard.BoundarySelection","tinymce.core.keyboard.InlineUtils","tinymce.core.caret.CaretFinder","tinymce.core.data.Binding","tinymce.core.init.InitContentBody","global!Object","global!setTimeout","ephox.katamari.api.Type","ephox.katamari.api.Struct","ephox.sugar.alien.Recurse","ephox.sand.api.Node","ephox.sand.api.PlatformDetection","ephox.sugar.api.search.Selectors","ephox.katamari.api.Obj","ephox.sugar.api.search.PredicateFind","tinymce.core.dom.Empty","ephox.katamari.api.Adt","tinymce.core.text.Bidi","tinymce.core.caret.CaretContainerInline","tinymce.core.caret.CaretContainerRemove","tinymce.core.util.LazyEvaluator","ephox.katamari.api.Cell","tinymce.core.caret.CaretContainerInput","tinymce.core.EditorUpload","tinymce.core.ForceBlocks","tinymce.core.keyboard.KeyboardOverrides","tinymce.core.NodeChange","tinymce.core.SelectionOverrides","tinymce.core.util.Quirks","ephox.katamari.data.Immutable","ephox.katamari.data.MixedBag","ephox.sand.util.Global","ephox.katamari.api.Thunk","ephox.sand.core.PlatformDetection","global!navigator","ephox.sugar.api.node.Body","ephox.sugar.impl.ClosestOrAncestor","ephox.sugar.api.search.SelectorExists","tinymce.core.file.Uploader","tinymce.core.file.ImageScanner","tinymce.core.file.BlobCache","tinymce.core.file.UploadStatus","tinymce.core.keyboard.ArrowKeys","tinymce.core.keyboard.DeleteBackspaceKeys","tinymce.core.keyboard.EnterKey","tinymce.core.keyboard.SpaceKey","tinymce.core.caret.FakeCaret","tinymce.core.caret.LineUtils","tinymce.core.DragDropOverrides","tinymce.core.keyboard.CefUtils","tinymce.core.dom.NodePath","ephox.katamari.util.BagUtils","ephox.katamari.api.Resolve","ephox.sand.core.Browser","ephox.sand.core.OperatingSystem","ephox.sand.detect.DeviceType","ephox.sand.detect.UaString","ephox.sand.info.PlatformInfo","ephox.sugar.api.search.SelectorFind","tinymce.core.file.Conversions","global!URL","tinymce.core.keyboard.CefNavigation","tinymce.core.keyboard.MatchKeys","tinymce.core.keyboard.InsertSpace","tinymce.core.dom.Dimensions","tinymce.core.dom.MousePosition","ephox.katamari.api.Global","ephox.sand.detect.Version","ephox.katamari.api.Strings","tinymce.core.caret.LineWalker","ephox.katamari.api.Merger","global!Number","ephox.katamari.str.StrAppend","ephox.katamari.str.StringParts"]
85
+ ["tinymce.core.api.Main","tinymce.core.api.Tinymce","tinymce.core.Register","tinymce.core.geom.Rect","tinymce.core.util.Promise","tinymce.core.util.Delay","tinymce.core.Env","tinymce.core.dom.EventUtils","tinymce.core.dom.Sizzle","tinymce.core.util.Tools","tinymce.core.dom.DomQuery","tinymce.core.html.Styles","tinymce.core.dom.TreeWalker","tinymce.core.html.Entities","tinymce.core.dom.DOMUtils","tinymce.core.dom.ScriptLoader","tinymce.core.AddOnManager","tinymce.core.dom.RangeUtils","tinymce.core.html.Node","tinymce.core.html.Schema","tinymce.core.html.SaxParser","tinymce.core.html.DomParser","tinymce.core.html.Writer","tinymce.core.html.Serializer","tinymce.core.dom.Serializer","tinymce.core.util.VK","tinymce.core.dom.ControlSelection","tinymce.core.dom.BookmarkManager","tinymce.core.dom.Selection","tinymce.core.Formatter","tinymce.core.UndoManager","tinymce.core.EditorCommands","tinymce.core.util.URI","tinymce.core.util.Class","tinymce.core.util.EventDispatcher","tinymce.core.util.Observable","tinymce.core.WindowManager","tinymce.core.NotificationManager","tinymce.core.EditorObservable","tinymce.core.Shortcuts","tinymce.core.Editor","tinymce.core.util.I18n","tinymce.core.FocusManager","tinymce.core.EditorManager","tinymce.core.util.XHR","tinymce.core.util.JSON","tinymce.core.util.JSONRequest","tinymce.core.util.JSONP","tinymce.core.util.LocalStorage","tinymce.core.api.Compat","tinymce.core.util.Color","tinymce.core.ui.Api","tinymce.core.util.Arr","tinymce.core.dom.Range","tinymce.core.dom.StyleSheetLoader","tinymce.core.dom.NodeType","tinymce.core.caret.CaretContainer","tinymce.core.text.Zwsp","tinymce.core.caret.CaretBookmark","tinymce.core.caret.CaretPosition","tinymce.core.dom.ScrollIntoView","tinymce.core.dom.TridentSelection","tinymce.core.selection.FragmentReader","tinymce.core.dom.ElementUtils","tinymce.core.util.Fun","tinymce.core.fmt.Preview","tinymce.core.fmt.Hooks","tinymce.core.undo.Levels","tinymce.core.delete.DeleteCommands","tinymce.core.InsertContent","global!document","tinymce.core.ui.Window","tinymce.core.ui.MessageBox","tinymce.core.ui.Notification","tinymce.core.init.Render","tinymce.core.Mode","tinymce.core.ui.Sidebar","tinymce.core.util.Uuid","tinymce.core.ErrorReporter","tinymce.core.LegacyInput","tinymce.core.ui.Selector","tinymce.core.ui.Collection","tinymce.core.ui.ReflowQueue","tinymce.core.ui.Control","tinymce.core.ui.Factory","tinymce.core.ui.KeyboardNavigation","tinymce.core.ui.Container","tinymce.core.ui.DragHelper","tinymce.core.ui.Scrollable","tinymce.core.ui.Panel","tinymce.core.ui.Movable","tinymce.core.ui.Resizable","tinymce.core.ui.FloatPanel","tinymce.core.ui.Tooltip","tinymce.core.ui.Widget","tinymce.core.ui.Progress","tinymce.core.ui.Layout","tinymce.core.ui.AbsoluteLayout","tinymce.core.ui.Button","tinymce.core.ui.ButtonGroup","tinymce.core.ui.Checkbox","tinymce.core.ui.ComboBox","tinymce.core.ui.ColorBox","tinymce.core.ui.PanelButton","tinymce.core.ui.ColorButton","tinymce.core.ui.ColorPicker","tinymce.core.ui.Path","tinymce.core.ui.ElementPath","tinymce.core.ui.FormItem","tinymce.core.ui.Form","tinymce.core.ui.FieldSet","tinymce.core.ui.FilePicker","tinymce.core.ui.FitLayout","tinymce.core.ui.FlexLayout","tinymce.core.ui.FlowLayout","tinymce.core.ui.FormatControls","tinymce.core.ui.GridLayout","tinymce.core.ui.Iframe","tinymce.core.ui.InfoBox","tinymce.core.ui.Label","tinymce.core.ui.Toolbar","tinymce.core.ui.MenuBar","tinymce.core.ui.MenuButton","tinymce.core.ui.MenuItem","tinymce.core.ui.Throbber","tinymce.core.ui.Menu","tinymce.core.ui.ListBox","tinymce.core.ui.Radio","tinymce.core.ui.ResizeHandle","tinymce.core.ui.SelectBox","tinymce.core.ui.Slider","tinymce.core.ui.Spacer","tinymce.core.ui.SplitButton","tinymce.core.ui.StackLayout","tinymce.core.ui.TabPanel","tinymce.core.ui.TextBox","ephox.katamari.api.Arr","ephox.katamari.api.Fun","ephox.katamari.api.Future","ephox.katamari.api.Futures","ephox.katamari.api.Result","tinymce.core.caret.CaretCandidate","tinymce.core.geom.ClientRect","tinymce.core.text.ExtendingChar","ephox.sugar.api.dom.Insert","ephox.sugar.api.dom.Replication","ephox.sugar.api.node.Element","ephox.sugar.api.node.Fragment","ephox.sugar.api.node.Node","tinymce.core.dom.ElementType","tinymce.core.dom.Parents","tinymce.core.selection.SelectionUtils","tinymce.core.undo.Fragments","tinymce.core.delete.BlockBoundaryDelete","tinymce.core.delete.BlockRangeDelete","tinymce.core.delete.CefDelete","tinymce.core.delete.InlineBoundaryDelete","tinymce.core.caret.CaretWalker","tinymce.core.dom.RangeNormalizer","tinymce.core.InsertList","tinymce.core.data.ObservableObject","tinymce.core.ui.DomUtils","tinymce.core.ui.BoxUtils","tinymce.core.ui.ClassList","global!window","tinymce.core.init.Init","tinymce.core.PluginManager","tinymce.core.ThemeManager","tinymce.core.content.LinkTargets","tinymce.core.fmt.FontInfo","ephox.katamari.api.Option","global!Array","global!Error","global!String","ephox.katamari.api.LazyValue","ephox.katamari.async.Bounce","ephox.katamari.async.AsyncValues","ephox.sugar.api.search.Traverse","ephox.sugar.api.properties.Attr","global!console","ephox.sugar.api.dom.InsertAll","ephox.sugar.api.dom.Remove","ephox.sugar.api.node.NodeTypes","ephox.sugar.api.dom.Compare","ephox.katamari.api.Options","tinymce.core.undo.Diff","tinymce.core.delete.BlockBoundary","tinymce.core.delete.MergeBlocks","tinymce.core.delete.DeleteUtils","tinymce.core.caret.CaretUtils","tinymce.core.delete.CefDeleteAction","tinymce.core.delete.DeleteElement","tinymce.core.caret.CaretFinder","tinymce.core.keyboard.BoundaryCaret","tinymce.core.keyboard.BoundaryLocation","tinymce.core.keyboard.BoundarySelection","tinymce.core.keyboard.InlineUtils","tinymce.core.data.Binding","tinymce.core.init.InitContentBody","global!Object","global!setTimeout","ephox.katamari.api.Type","ephox.katamari.api.Struct","ephox.sugar.alien.Recurse","ephox.sand.api.Node","ephox.sand.api.PlatformDetection","ephox.sugar.api.search.Selectors","ephox.katamari.api.Obj","ephox.sugar.api.search.PredicateFind","tinymce.core.dom.Empty","ephox.katamari.api.Adt","tinymce.core.text.Bidi","tinymce.core.caret.CaretContainerInline","tinymce.core.caret.CaretContainerRemove","tinymce.core.util.LazyEvaluator","ephox.katamari.api.Cell","tinymce.core.caret.CaretContainerInput","tinymce.core.EditorUpload","tinymce.core.ForceBlocks","tinymce.core.keyboard.KeyboardOverrides","tinymce.core.NodeChange","tinymce.core.SelectionOverrides","tinymce.core.util.Quirks","ephox.katamari.data.Immutable","ephox.katamari.data.MixedBag","ephox.sand.util.Global","ephox.katamari.api.Thunk","ephox.sand.core.PlatformDetection","global!navigator","ephox.sugar.api.node.Body","ephox.sugar.impl.ClosestOrAncestor","ephox.sugar.api.search.SelectorExists","tinymce.core.file.Uploader","tinymce.core.file.ImageScanner","tinymce.core.file.BlobCache","tinymce.core.file.UploadStatus","tinymce.core.keyboard.ArrowKeys","tinymce.core.keyboard.DeleteBackspaceKeys","tinymce.core.keyboard.EnterKey","tinymce.core.keyboard.SpaceKey","tinymce.core.caret.FakeCaret","tinymce.core.caret.LineUtils","tinymce.core.DragDropOverrides","tinymce.core.keyboard.CefUtils","tinymce.core.dom.NodePath","ephox.katamari.util.BagUtils","ephox.katamari.api.Resolve","ephox.sand.core.Browser","ephox.sand.core.OperatingSystem","ephox.sand.detect.DeviceType","ephox.sand.detect.UaString","ephox.sand.info.PlatformInfo","ephox.sugar.api.search.SelectorFind","tinymce.core.file.Conversions","global!URL","tinymce.core.keyboard.CefNavigation","tinymce.core.keyboard.MatchKeys","tinymce.core.keyboard.InsertSpace","tinymce.core.dom.Dimensions","tinymce.core.dom.MousePosition","ephox.katamari.api.Global","ephox.sand.detect.Version","ephox.katamari.api.Strings","tinymce.core.caret.LineWalker","ephox.katamari.api.Merger","global!Number","ephox.katamari.str.StrAppend","ephox.katamari.str.StringParts"]
86
86
  jsc*/
87
87
  /**
88
88
  * Rect.js
@@ -14873,31 +14873,28 @@ define(
14873
14873
 
14874
14874
  if (!settings.allow_unsafe_link_target) {
14875
14875
  self.addAttributeFilter('href', function (nodes) {
14876
- var i = nodes.length, node, rel;
14877
- var rules = 'noopener noreferrer';
14876
+ var i = nodes.length, node;
14878
14877
 
14879
- function addTargetRules(rel) {
14880
- rel = removeTargetRules(rel);
14881
- return rel ? [rel, rules].join(' ') : rules;
14882
- }
14878
+ var appendRel = function (rel) {
14879
+ var parts = rel.split(' ').filter(function (p) {
14880
+ return p.length > 0;
14881
+ });
14882
+ return parts.concat(['noopener']).join(' ');
14883
+ };
14883
14884
 
14884
- function removeTargetRules(rel) {
14885
- var regExp = new RegExp('(' + rules.replace(' ', '|') + ')', 'g');
14886
- if (rel) {
14887
- rel = Tools.trim(rel.replace(regExp, ''));
14885
+ var addNoOpener = function (rel) {
14886
+ var newRel = rel ? Tools.trim(rel) : '';
14887
+ if (!/\b(noopener)\b/g.test(newRel)) {
14888
+ return appendRel(newRel);
14889
+ } else {
14890
+ return newRel;
14888
14891
  }
14889
- return rel ? rel : null;
14890
- }
14891
-
14892
- function toggleTargetRules(rel, isUnsafe) {
14893
- return isUnsafe ? addTargetRules(rel) : removeTargetRules(rel);
14894
- }
14892
+ };
14895
14893
 
14896
14894
  while (i--) {
14897
14895
  node = nodes[i];
14898
- rel = node.attr('rel');
14899
- if (node.name === 'a') {
14900
- node.attr('rel', toggleTargetRules(rel, node.attr('target') == '_blank'));
14896
+ if (node.name === 'a' && node.attr('target') === '_blank') {
14897
+ node.attr('rel', addNoOpener(node.attr('rel')));
14901
14898
  }
14902
14899
  }
14903
14900
  });
@@ -20911,6 +20908,17 @@ define(
20911
20908
  var each = Tools.each, trim = Tools.trim;
20912
20909
  var isIE = Env.ie;
20913
20910
 
20911
+ var isValidRange = function (rng) {
20912
+ if (!rng) {
20913
+ return false;
20914
+ } else if (rng.select) { // Native IE range still produced by placeCaretAt
20915
+ return true;
20916
+ } else {
20917
+ var sc = rng.startContainer, ec = rng.endContainer;
20918
+ return !!(sc && sc.parentNode && ec && ec.parentNode);
20919
+ }
20920
+ };
20921
+
20914
20922
  /**
20915
20923
  * Constructs a new selection instance.
20916
20924
  *
@@ -21477,7 +21485,7 @@ define(
21477
21485
  setRng: function (rng, forward) {
21478
21486
  var self = this, sel, node, evt;
21479
21487
 
21480
- if (!rng) {
21488
+ if (!isValidRange(rng)) {
21481
21489
  return;
21482
21490
  }
21483
21491
 
@@ -25907,7 +25915,7 @@ define(
25907
25915
  function (Fun, TreeWalker, NodeType, CaretPosition, CaretContainer, CaretCandidate) {
25908
25916
  var isContentEditableTrue = NodeType.isContentEditableTrue,
25909
25917
  isContentEditableFalse = NodeType.isContentEditableFalse,
25910
- isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption'),
25918
+ isBlockLike = NodeType.matchStyleValues('display', 'block table table-cell table-caption list-item'),
25911
25919
  isCaretContainer = CaretContainer.isCaretContainer,
25912
25920
  isCaretContainerBlock = CaretContainer.isCaretContainerBlock,
25913
25921
  curry = Fun.curry,
@@ -26467,25 +26475,69 @@ define(
26467
26475
  'ephox.katamari.api.Option',
26468
26476
  'tinymce.core.caret.CaretCandidate',
26469
26477
  'tinymce.core.caret.CaretPosition',
26478
+ 'tinymce.core.caret.CaretUtils',
26470
26479
  'tinymce.core.caret.CaretWalker',
26471
26480
  'tinymce.core.dom.NodeType'
26472
26481
  ],
26473
- function (Fun, Option, CaretCandidate, CaretPosition, CaretWalker, NodeType) {
26474
- var fromPosition = function (forward, rootElement, position) {
26475
- var walker = new CaretWalker(rootElement);
26476
- return Option.from(forward ? walker.next(position) : walker.prev(position));
26477
- };
26478
-
26482
+ function (Fun, Option, CaretCandidate, CaretPosition, CaretUtils, CaretWalker, NodeType) {
26479
26483
  var walkToPositionIn = function (forward, rootNode, startNode) {
26480
- var caretWalker = new CaretWalker(rootNode);
26481
- var startPos = forward ? CaretPosition.before(startNode) : CaretPosition.after(startNode);
26482
- return Option.from(forward ? caretWalker.next(startPos) : caretWalker.prev(startPos));
26484
+ var position = forward ? CaretPosition.before(startNode) : CaretPosition.after(startNode);
26485
+ return fromPosition(forward, rootNode, position);
26483
26486
  };
26484
26487
 
26485
26488
  var afterElement = function (node) {
26486
26489
  return NodeType.isBr(node) ? CaretPosition.before(node) : CaretPosition.after(node);
26487
26490
  };
26488
26491
 
26492
+ var isBeforeOrStart = function (position) {
26493
+ if (CaretPosition.isTextPosition(position)) {
26494
+ return position.offset() === 0;
26495
+ } else {
26496
+ return CaretCandidate.isCaretCandidate(position.getNode());
26497
+ }
26498
+ };
26499
+
26500
+ var isAfterOrEnd = function (position) {
26501
+ if (CaretPosition.isTextPosition(position)) {
26502
+ return position.offset() === position.container().data.length;
26503
+ } else {
26504
+ return CaretCandidate.isCaretCandidate(position.getNode(true));
26505
+ }
26506
+ };
26507
+
26508
+ var isBeforeAfterSameElement = function (from, to) {
26509
+ return !CaretPosition.isTextPosition(from) && !CaretPosition.isTextPosition(to) && from.getNode() === to.getNode(true);
26510
+ };
26511
+
26512
+ var isAtBr = function (position) {
26513
+ return !CaretPosition.isTextPosition(position) && NodeType.isBr(position.getNode());
26514
+ };
26515
+
26516
+ var shouldSkipPosition = function (forward, from, to) {
26517
+ if (forward) {
26518
+ return !isBeforeAfterSameElement(from, to) && !isAtBr(from) && isAfterOrEnd(from) && isBeforeOrStart(to);
26519
+ } else {
26520
+ return !isBeforeAfterSameElement(to, from) && isBeforeOrStart(from) && isAfterOrEnd(to);
26521
+ }
26522
+ };
26523
+
26524
+ // Finds: <p>a|<b>b</b></p> -> <p>a<b>|b</b></p>
26525
+ var fromPosition = function (forward, rootNode, position) {
26526
+ var walker = new CaretWalker(rootNode);
26527
+ return Option.from(forward ? walker.next(position) : walker.prev(position));
26528
+ };
26529
+
26530
+ // Finds: <p>a|<b>b</b></p> -> <p>a<b>b|</b></p>
26531
+ var navigate = function (forward, rootNode, from) {
26532
+ return fromPosition(forward, rootNode, from).bind(function (to) {
26533
+ if (CaretUtils.isInSameBlock(from, to, rootNode) && shouldSkipPosition(forward, from, to)) {
26534
+ return fromPosition(forward, rootNode, to);
26535
+ } else {
26536
+ return Option.some(to);
26537
+ }
26538
+ });
26539
+ };
26540
+
26489
26541
  var positionIn = function (forward, element) {
26490
26542
  var startNode = forward ? element.firstChild : element.lastChild;
26491
26543
  if (NodeType.isText(startNode)) {
@@ -26503,6 +26555,7 @@ define(
26503
26555
 
26504
26556
  return {
26505
26557
  fromPosition: fromPosition,
26558
+ navigate: navigate,
26506
26559
  positionIn: positionIn
26507
26560
  };
26508
26561
  }
@@ -27276,6 +27329,7 @@ define(
27276
27329
  define(
27277
27330
  'tinymce.core.keyboard.InlineUtils',
27278
27331
  [
27332
+ 'ephox.katamari.api.Arr',
27279
27333
  'ephox.katamari.api.Fun',
27280
27334
  'ephox.katamari.api.Option',
27281
27335
  'ephox.katamari.api.Options',
@@ -27285,9 +27339,10 @@ define(
27285
27339
  'tinymce.core.caret.CaretUtils',
27286
27340
  'tinymce.core.caret.CaretWalker',
27287
27341
  'tinymce.core.dom.DOMUtils',
27342
+ 'tinymce.core.dom.NodeType',
27288
27343
  'tinymce.core.text.Bidi'
27289
27344
  ],
27290
- function (Fun, Option, Options, CaretContainer, CaretFinder, CaretPosition, CaretUtils, CaretWalker, DOMUtils, Bidi) {
27345
+ function (Arr, Fun, Option, Options, CaretContainer, CaretFinder, CaretPosition, CaretUtils, CaretWalker, DOMUtils, NodeType, Bidi) {
27291
27346
  var isInlineTarget = function (elm) {
27292
27347
  return DOMUtils.DOM.is(elm, 'a[href],code');
27293
27348
  };
@@ -27296,8 +27351,18 @@ define(
27296
27351
  return DOMUtils.DOM.getStyle(element, 'direction', true) === 'rtl' || Bidi.hasStrongRtl(element.textContent);
27297
27352
  };
27298
27353
 
27354
+ var findInlineParents = function (rootNode, pos) {
27355
+ return Arr.filter(DOMUtils.DOM.getParents(pos.container(), '*', rootNode), isInlineTarget);
27356
+ };
27357
+
27299
27358
  var findInline = function (rootNode, pos) {
27300
- return Option.from(DOMUtils.DOM.getParent(pos.container(), isInlineTarget, rootNode));
27359
+ var parents = findInlineParents(rootNode, pos);
27360
+ return Option.from(parents[0]);
27361
+ };
27362
+
27363
+ var findRootInline = function (rootNode, pos) {
27364
+ var parents = findInlineParents(rootNode, pos);
27365
+ return Option.from(parents[parents.length - 1]);
27301
27366
  };
27302
27367
 
27303
27368
  var hasSameParentBlock = function (rootNode, node1, node2) {
@@ -27307,11 +27372,11 @@ define(
27307
27372
  };
27308
27373
 
27309
27374
  var isInInline = function (rootNode, pos) {
27310
- return pos ? findInline(rootNode, pos).isSome() : false;
27375
+ return pos ? findRootInline(rootNode, pos).isSome() : false;
27311
27376
  };
27312
27377
 
27313
27378
  var isAtInlineEndPoint = function (rootNode, pos) {
27314
- return findInline(rootNode, pos).map(function (inline) {
27379
+ return findRootInline(rootNode, pos).map(function (inline) {
27315
27380
  return findCaretPosition(inline, false, pos).isNone() || findCaretPosition(inline, true, pos).isNone();
27316
27381
  }).getOr(false);
27317
27382
  };
@@ -27332,9 +27397,25 @@ define(
27332
27397
  var container = pos.container(), offset = pos.offset();
27333
27398
 
27334
27399
  if (forward) {
27335
- return CaretContainer.isBeforeInline(pos) ? new CaretPosition(container, offset + 1) : pos;
27400
+ if (CaretContainer.isCaretContainerInline(container)) {
27401
+ if (NodeType.isText(container.nextSibling)) {
27402
+ return new CaretPosition(container.nextSibling, 0);
27403
+ } else {
27404
+ return CaretPosition.after(container);
27405
+ }
27406
+ } else {
27407
+ return CaretContainer.isBeforeInline(pos) ? new CaretPosition(container, offset + 1) : pos;
27408
+ }
27336
27409
  } else {
27337
- return CaretContainer.isAfterInline(pos) ? new CaretPosition(container, offset - 1) : pos;
27410
+ if (CaretContainer.isCaretContainerInline(container)) {
27411
+ if (NodeType.isText(container.previousSibling)) {
27412
+ return new CaretPosition(container.previousSibling, container.previousSibling.data.length);
27413
+ } else {
27414
+ return CaretPosition.before(container);
27415
+ }
27416
+ } else {
27417
+ return CaretContainer.isAfterInline(pos) ? new CaretPosition(container, offset - 1) : pos;
27418
+ }
27338
27419
  }
27339
27420
  };
27340
27421
 
@@ -27344,6 +27425,7 @@ define(
27344
27425
  return {
27345
27426
  isInlineTarget: isInlineTarget,
27346
27427
  findInline: findInline,
27428
+ findRootInline: findRootInline,
27347
27429
  isInInline: isInInline,
27348
27430
  isRtl: isRtl,
27349
27431
  isAtInlineEndPoint: isAtInlineEndPoint,
@@ -27881,6 +27963,11 @@ define(
27881
27963
  }
27882
27964
  };
27883
27965
 
27966
+ var isPosCaretContainer = function (pos, caret) {
27967
+ var caretNode = caret.get();
27968
+ return caretNode && pos.container() === caretNode && CaretContainer.isCaretContainerInline(caretNode);
27969
+ };
27970
+
27884
27971
  var renderCaret = function (caret, location) {
27885
27972
  return location.fold(
27886
27973
  function (element) { // Before
@@ -27891,18 +27978,26 @@ define(
27891
27978
  },
27892
27979
  function (element) { // Start
27893
27980
  return InlineUtils.findCaretPositionIn(element, true).map(function (pos) {
27894
- CaretContainerRemove.remove(caret.get());
27895
- var text = insertInlinePos(pos, true);
27896
- caret.set(text);
27897
- return new CaretPosition(text, 1);
27981
+ if (!isPosCaretContainer(pos, caret)) {
27982
+ CaretContainerRemove.remove(caret.get());
27983
+ var text = insertInlinePos(pos, true);
27984
+ caret.set(text);
27985
+ return new CaretPosition(text, 1);
27986
+ } else {
27987
+ return new CaretPosition(caret.get(), 1);
27988
+ }
27898
27989
  });
27899
27990
  },
27900
27991
  function (element) { // End
27901
27992
  return InlineUtils.findCaretPositionIn(element, false).map(function (pos) {
27902
- CaretContainerRemove.remove(caret.get());
27903
- var text = insertInlinePos(pos, false);
27904
- caret.set(text);
27905
- return new CaretPosition(text, text.length - 1);
27993
+ if (!isPosCaretContainer(pos, caret)) {
27994
+ CaretContainerRemove.remove(caret.get());
27995
+ var text = insertInlinePos(pos, false);
27996
+ caret.set(text);
27997
+ return new CaretPosition(text, text.length - 1);
27998
+ } else {
27999
+ return new CaretPosition(caret.get(), caret.get().length - 1);
28000
+ }
27906
28001
  });
27907
28002
  },
27908
28003
  function (element) { // After
@@ -27991,10 +28086,10 @@ define(
27991
28086
  var before = function (rootNode, pos) {
27992
28087
  var nPos = InlineUtils.normalizeForwards(pos);
27993
28088
  var scope = rescope(rootNode, nPos.container());
27994
- return InlineUtils.findInline(scope, nPos).fold(
28089
+ return InlineUtils.findRootInline(scope, nPos).fold(
27995
28090
  function () {
27996
28091
  return InlineUtils.findCaretPosition(scope, true, nPos)
27997
- .bind(Fun.curry(InlineUtils.findInline, scope))
28092
+ .bind(Fun.curry(InlineUtils.findRootInline, scope))
27998
28093
  .map(function (inline) {
27999
28094
  return Location.before(inline);
28000
28095
  });
@@ -28005,7 +28100,7 @@ define(
28005
28100
 
28006
28101
  var start = function (rootNode, pos) {
28007
28102
  var nPos = InlineUtils.normalizeBackwards(pos);
28008
- return InlineUtils.findInline(rootNode, nPos).bind(function (inline) {
28103
+ return InlineUtils.findRootInline(rootNode, nPos).bind(function (inline) {
28009
28104
  var prevPos = InlineUtils.findCaretPosition(inline, false, nPos);
28010
28105
  return prevPos.isNone() ? Option.some(Location.start(inline)) : Option.none();
28011
28106
  });
@@ -28013,7 +28108,7 @@ define(
28013
28108
 
28014
28109
  var end = function (rootNode, pos) {
28015
28110
  var nPos = InlineUtils.normalizeForwards(pos);
28016
- return InlineUtils.findInline(rootNode, nPos).bind(function (inline) {
28111
+ return InlineUtils.findRootInline(rootNode, nPos).bind(function (inline) {
28017
28112
  var nextPos = InlineUtils.findCaretPosition(inline, true, nPos);
28018
28113
  return nextPos.isNone() ? Option.some(Location.end(inline)) : Option.none();
28019
28114
  });
@@ -28022,10 +28117,10 @@ define(
28022
28117
  var after = function (rootNode, pos) {
28023
28118
  var nPos = InlineUtils.normalizeBackwards(pos);
28024
28119
  var scope = rescope(rootNode, nPos.container());
28025
- return InlineUtils.findInline(scope, nPos).fold(
28120
+ return InlineUtils.findRootInline(scope, nPos).fold(
28026
28121
  function () {
28027
28122
  return InlineUtils.findCaretPosition(scope, false, nPos)
28028
- .bind(Fun.curry(InlineUtils.findInline, scope))
28123
+ .bind(Fun.curry(InlineUtils.findRootInline, scope))
28029
28124
  .map(function (inline) {
28030
28125
  return Location.after(inline);
28031
28126
  });
@@ -28091,8 +28186,8 @@ define(
28091
28186
 
28092
28187
  var betweenInlines = function (forward, rootNode, from, to, location) {
28093
28188
  return Options.liftN([
28094
- InlineUtils.findInline(rootNode, from),
28095
- InlineUtils.findInline(rootNode, to)
28189
+ InlineUtils.findRootInline(rootNode, from),
28190
+ InlineUtils.findRootInline(rootNode, to)
28096
28191
  ], function (fromInline, toInline) {
28097
28192
  if (fromInline !== toInline && InlineUtils.hasSameParentBlock(rootNode, fromInline, toInline)) {
28098
28193
  // Force after since some browsers normalize and lean left into the closest inline
@@ -28332,6 +28427,7 @@ define(
28332
28427
  'ephox.katamari.api.Options',
28333
28428
  'ephox.sugar.api.node.Element',
28334
28429
  'tinymce.core.caret.CaretContainer',
28430
+ 'tinymce.core.caret.CaretFinder',
28335
28431
  'tinymce.core.caret.CaretPosition',
28336
28432
  'tinymce.core.caret.CaretUtils',
28337
28433
  'tinymce.core.delete.DeleteElement',
@@ -28340,7 +28436,10 @@ define(
28340
28436
  'tinymce.core.keyboard.BoundarySelection',
28341
28437
  'tinymce.core.keyboard.InlineUtils'
28342
28438
  ],
28343
- function (Fun, Option, Options, Element, CaretContainer, CaretPosition, CaretUtils, DeleteElement, BoundaryCaret, BoundaryLocation, BoundarySelection, InlineUtils) {
28439
+ function (
28440
+ Fun, Option, Options, Element, CaretContainer, CaretFinder, CaretPosition, CaretUtils, DeleteElement, BoundaryCaret, BoundaryLocation, BoundarySelection,
28441
+ InlineUtils
28442
+ ) {
28344
28443
  var isFeatureEnabled = function (editor) {
28345
28444
  return editor.settings.inline_boundaries !== false;
28346
28445
  };
@@ -28354,6 +28453,21 @@ define(
28354
28453
  return range;
28355
28454
  };
28356
28455
 
28456
+ // Checks for delete at <code>|a</code> when there is only one item left except the zwsp caret container nodes
28457
+ var hasOnlyTwoOrLessPositionsLeft = function (elm) {
28458
+ return Options.liftN([
28459
+ InlineUtils.findCaretPositionIn(elm, true),
28460
+ InlineUtils.findCaretPositionIn(elm, false)
28461
+ ], function (firstPos, lastPos) {
28462
+ var normalizedFirstPos = InlineUtils.normalizePosition(true, firstPos);
28463
+ var normalizedLastPos = InlineUtils.normalizePosition(false, lastPos);
28464
+
28465
+ return InlineUtils.findCaretPosition(elm, true, normalizedFirstPos).map(function (pos) {
28466
+ return pos.isEqual(normalizedLastPos);
28467
+ }).getOr(true);
28468
+ }).getOr(true);
28469
+ };
28470
+
28357
28471
  var setCaretLocation = function (editor, caret) {
28358
28472
  return function (location) {
28359
28473
  return BoundaryCaret.renderCaret(caret, location).map(function (pos) {
@@ -28406,27 +28520,31 @@ define(
28406
28520
  })
28407
28521
  .map(setCaretLocation(editor, caret))
28408
28522
  .getOrThunk(function () {
28409
- var toPosition = InlineUtils.findCaretPosition(rootNode, forward, from);
28523
+ var toPosition = CaretFinder.navigate(forward, rootNode, from);
28410
28524
  var toLocation = toPosition.bind(function (pos) {
28411
28525
  return BoundaryLocation.readLocation(rootNode, pos);
28412
28526
  });
28413
28527
 
28414
28528
  if (fromLocation.isSome() && toLocation.isSome()) {
28415
- return InlineUtils.findInline(rootNode, from).map(function (elm) {
28416
- DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));
28417
- return true;
28529
+ return InlineUtils.findRootInline(rootNode, from).map(function (elm) {
28530
+ if (hasOnlyTwoOrLessPositionsLeft(elm)) {
28531
+ DeleteElement.deleteElement(editor, forward, Element.fromDom(elm));
28532
+ return true;
28533
+ } else {
28534
+ return false;
28535
+ }
28418
28536
  }).getOr(false);
28419
28537
  } else {
28420
- return toLocation.map(function (_) {
28421
- toPosition.map(function (to) {
28538
+ return toLocation.bind(function (_) {
28539
+ return toPosition.map(function (to) {
28422
28540
  if (forward) {
28423
28541
  deleteFromTo(editor, caret, from, to);
28424
28542
  } else {
28425
28543
  deleteFromTo(editor, caret, to, from);
28426
28544
  }
28427
- });
28428
28545
 
28429
- return true;
28546
+ return true;
28547
+ });
28430
28548
  }).getOr(false);
28431
28549
  }
28432
28550
  });
@@ -38264,7 +38382,7 @@ define(
38264
38382
  xhr.onload = function () {
38265
38383
  var json;
38266
38384
 
38267
- if (xhr.status != 200) {
38385
+ if (xhr.status < 200 || xhr.status >= 300) {
38268
38386
  failure("HTTP Error: " + xhr.status);
38269
38387
  return;
38270
38388
  }
@@ -40226,22 +40344,28 @@ define(
40226
40344
  'tinymce.core.util.VK'
40227
40345
  ],
40228
40346
  function (Arr, Cell, BoundarySelection, CefNavigation, MatchKeys, VK) {
40347
+ var executeKeydownOverride = function (editor, caret, evt) {
40348
+ var matches = MatchKeys.match([
40349
+ { keyCode: VK.RIGHT, action: CefNavigation.moveH(editor, true) },
40350
+ { keyCode: VK.LEFT, action: CefNavigation.moveH(editor, false) },
40351
+ { keyCode: VK.UP, action: CefNavigation.moveV(editor, false) },
40352
+ { keyCode: VK.DOWN, action: CefNavigation.moveV(editor, true) },
40353
+ { keyCode: VK.RIGHT, action: BoundarySelection.move(editor, caret, true) },
40354
+ { keyCode: VK.LEFT, action: BoundarySelection.move(editor, caret, false) }
40355
+ ], evt);
40356
+
40357
+ Arr.find(matches, function (pattern) {
40358
+ return pattern.action();
40359
+ }).each(function (_) {
40360
+ evt.preventDefault();
40361
+ });
40362
+ };
40363
+
40229
40364
  var setup = function (editor, caret) {
40230
40365
  editor.on('keydown', function (evt) {
40231
- var matches = MatchKeys.match([
40232
- { keyCode: VK.RIGHT, action: CefNavigation.moveH(editor, true) },
40233
- { keyCode: VK.LEFT, action: CefNavigation.moveH(editor, false) },
40234
- { keyCode: VK.UP, action: CefNavigation.moveV(editor, false) },
40235
- { keyCode: VK.DOWN, action: CefNavigation.moveV(editor, true) },
40236
- { keyCode: VK.RIGHT, action: BoundarySelection.move(editor, caret, true) },
40237
- { keyCode: VK.LEFT, action: BoundarySelection.move(editor, caret, false) }
40238
- ], evt);
40239
-
40240
- Arr.find(matches, function (pattern) {
40241
- return pattern.action();
40242
- }).each(function (_) {
40243
- evt.preventDefault();
40244
- });
40366
+ if (evt.isDefaultPrevented() === false) {
40367
+ executeKeydownOverride(editor, caret, evt);
40368
+ }
40245
40369
  });
40246
40370
  };
40247
40371
 
@@ -40273,43 +40397,48 @@ define(
40273
40397
  'tinymce.core.util.VK'
40274
40398
  ],
40275
40399
  function (Arr, BlockBoundaryDelete, BlockRangeDelete, CefDelete, InlineBoundaryDelete, MatchKeys, VK) {
40276
- var setupKeyDownHandler = function (editor, caret) {
40277
- editor.on('keydown', function (evt) {
40278
- var matches = MatchKeys.match([
40279
- { keyCode: VK.BACKSPACE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false) },
40280
- { keyCode: VK.DELETE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true) },
40281
- { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, false) },
40282
- { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, true) },
40283
- { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false) },
40284
- { keyCode: VK.DELETE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true) },
40285
- { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false) },
40286
- { keyCode: VK.DELETE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true) }
40287
- ], evt);
40288
-
40289
- Arr.find(matches, function (pattern) {
40290
- return pattern.action();
40291
- }).each(function (_) {
40292
- evt.preventDefault();
40293
- });
40400
+ var executeKeydownOverride = function (editor, caret, evt) {
40401
+ var matches = MatchKeys.match([
40402
+ { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, false) },
40403
+ { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.backspaceDelete, editor, true) },
40404
+ { keyCode: VK.BACKSPACE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, false) },
40405
+ { keyCode: VK.DELETE, action: MatchKeys.action(InlineBoundaryDelete.backspaceDelete, editor, caret, true) },
40406
+ { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, false) },
40407
+ { keyCode: VK.DELETE, action: MatchKeys.action(BlockRangeDelete.backspaceDelete, editor, true) },
40408
+ { keyCode: VK.BACKSPACE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, false) },
40409
+ { keyCode: VK.DELETE, action: MatchKeys.action(BlockBoundaryDelete.backspaceDelete, editor, true) }
40410
+ ], evt);
40411
+
40412
+ Arr.find(matches, function (pattern) {
40413
+ return pattern.action();
40414
+ }).each(function (_) {
40415
+ evt.preventDefault();
40294
40416
  });
40295
40417
  };
40296
40418
 
40297
- var setupKeyUpHandler = function (editor) {
40298
- editor.on('keyup', function (evt) {
40299
- var matches = MatchKeys.match([
40300
- { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) },
40301
- { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) }
40302
- ], evt);
40419
+ var executeKeyupOverride = function (editor, evt) {
40420
+ var matches = MatchKeys.match([
40421
+ { keyCode: VK.BACKSPACE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) },
40422
+ { keyCode: VK.DELETE, action: MatchKeys.action(CefDelete.paddEmptyElement, editor) }
40423
+ ], evt);
40303
40424
 
40304
- Arr.find(matches, function (pattern) {
40305
- return pattern.action();
40306
- });
40425
+ Arr.find(matches, function (pattern) {
40426
+ return pattern.action();
40307
40427
  });
40308
40428
  };
40309
40429
 
40310
40430
  var setup = function (editor, caret) {
40311
- setupKeyDownHandler(editor, caret);
40312
- setupKeyUpHandler(editor);
40431
+ editor.on('keydown', function (evt) {
40432
+ if (evt.isDefaultPrevented() === false) {
40433
+ executeKeydownOverride(editor, caret, evt);
40434
+ }
40435
+ });
40436
+
40437
+ editor.on('keyup', function (evt) {
40438
+ if (evt.isDefaultPrevented() === false) {
40439
+ executeKeyupOverride(editor, evt);
40440
+ }
40441
+ });
40313
40442
  };
40314
40443
 
40315
40444
  return {
@@ -41132,22 +41261,24 @@ define(
41132
41261
  'tinymce.core.util.VK'
41133
41262
  ],
41134
41263
  function (Arr, InsertSpace, MatchKeys, VK) {
41135
- var setupKeyDownHandler = function (editor, caret) {
41136
- editor.on('keydown', function (evt) {
41137
- var matches = MatchKeys.match([
41138
- { keyCode: VK.SPACEBAR, action: MatchKeys.action(InsertSpace.insertAtSelection, editor) }
41139
- ], evt);
41140
-
41141
- Arr.find(matches, function (pattern) {
41142
- return pattern.action();
41143
- }).each(function (_) {
41144
- evt.preventDefault();
41145
- });
41264
+ var executeKeydownOverride = function (editor, evt) {
41265
+ var matches = MatchKeys.match([
41266
+ { keyCode: VK.SPACEBAR, action: MatchKeys.action(InsertSpace.insertAtSelection, editor) }
41267
+ ], evt);
41268
+
41269
+ Arr.find(matches, function (pattern) {
41270
+ return pattern.action();
41271
+ }).each(function (_) {
41272
+ evt.preventDefault();
41146
41273
  });
41147
41274
  };
41148
41275
 
41149
41276
  var setup = function (editor) {
41150
- setupKeyDownHandler(editor);
41277
+ editor.on('keydown', function (evt) {
41278
+ if (evt.isDefaultPrevented() === false) {
41279
+ executeKeydownOverride(editor, evt);
41280
+ }
41281
+ });
41151
41282
  };
41152
41283
 
41153
41284
  return {
@@ -42142,14 +42273,6 @@ define(
42142
42273
  return block1 === block2;
42143
42274
  };
42144
42275
 
42145
- var isContentKey = function (e) {
42146
- if (e.keyCode >= 112 && e.keyCode <= 123) {
42147
- return false;
42148
- }
42149
-
42150
- return true;
42151
- };
42152
-
42153
42276
  // Checks if the target node is in a block and if that block has a caret position better than the
42154
42277
  // suggested caretNode this is to prevent the caret from being sucked in towards a cE=false block if
42155
42278
  // they are adjacent on the vertical axis
@@ -42195,14 +42318,14 @@ define(
42195
42318
  }
42196
42319
  });
42197
42320
 
42198
- editor.on('keydown', function (e) {
42321
+ editor.on('keypress', function (e) {
42199
42322
  if (VK.modifierPressed(e)) {
42200
42323
  return;
42201
42324
  }
42202
42325
 
42203
42326
  switch (e.keyCode) {
42204
42327
  default:
42205
- if (isContentEditableFalse(editor.selection.getNode()) && isContentKey(e)) {
42328
+ if (isContentEditableFalse(editor.selection.getNode())) {
42206
42329
  e.preventDefault();
42207
42330
  }
42208
42331
  break;
@@ -46715,7 +46838,7 @@ define(
46715
46838
  * @property minorVersion
46716
46839
  * @type String
46717
46840
  */
46718
- minorVersion: '6.2',
46841
+ minorVersion: '6.3',
46719
46842
 
46720
46843
  /**
46721
46844
  * Release date of TinyMCE build.
@@ -46723,7 +46846,7 @@ define(
46723
46846
  * @property releaseDate
46724
46847
  * @type String
46725
46848
  */
46726
- releaseDate: '2017-05-23',
46849
+ releaseDate: '2017-05-30',
46727
46850
 
46728
46851
  /**
46729
46852
  * Collection of editor instances.