tinymce-rails 4.2.3 → 4.2.4

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.
@@ -1,4 +1,4 @@
1
- // 4.2.3 (2015-07-30)
1
+ // 4.2.4 (2015-08-17)
2
2
 
3
3
  /**
4
4
  * Compiled inline version. (Library mode)
@@ -668,8 +668,7 @@ define("tinymce/dom/EventUtils", [], function() {
668
668
  */
669
669
 
670
670
  /*jshint bitwise:false, expr:true, noempty:false, sub:true, eqnull:true, latedef:false, maxlen:255 */
671
- /*eslint dot-notation:0, no-empty:0, no-cond-assign:0, no-unused-expressions:0, new-cap:0 */
672
- /*eslint no-nested-ternary:0, func-style:0, no-bitwise:0, max-len:0, brace-style:0, no-return-assign:0, no-multi-spaces:0 */
671
+ /*eslint-disable */
673
672
 
674
673
  /**
675
674
  * Sizzle CSS Selector Engine v@VERSION
@@ -2694,6 +2693,8 @@ if ( !assert(function( div ) {
2694
2693
  return Sizzle;
2695
2694
  });
2696
2695
 
2696
+ /*eslint-enable */
2697
+
2697
2698
  // Included from: js/tinymce/classes/Env.js
2698
2699
 
2699
2700
  /**
@@ -2724,7 +2725,7 @@ define("tinymce/Env", [], function() {
2724
2725
  ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName);
2725
2726
  ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
2726
2727
  ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false;
2727
- ie12 = (document.msElementsFromPoint && !ie && !ie11) ? 12 : false;
2728
+ ie12 = (userAgent.indexOf('Edge/') != -1 && !ie && !ie11) ? 12 : false;
2728
2729
  ie = ie || ie11 || ie12;
2729
2730
  gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
2730
2731
  mac = userAgent.indexOf('Mac') != -1;
@@ -3355,6 +3356,21 @@ define("tinymce/util/Tools", [
3355
3356
  };
3356
3357
  }
3357
3358
 
3359
+ function reduce(collection, iteratee, accumulator, thisArg) {
3360
+ var i = 0;
3361
+
3362
+ if (arguments.length < 3) {
3363
+ accumulator = collection[0];
3364
+ i = 1;
3365
+ }
3366
+
3367
+ for (; i < collection.length; i++) {
3368
+ accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
3369
+ }
3370
+
3371
+ return accumulator;
3372
+ }
3373
+
3358
3374
  function _addCacheSuffix(url) {
3359
3375
  var cacheSuffix = Env.cacheSuffix;
3360
3376
 
@@ -3383,6 +3399,7 @@ define("tinymce/util/Tools", [
3383
3399
  resolve: resolve,
3384
3400
  explode: explode,
3385
3401
  constant: constant,
3402
+ reduce: reduce,
3386
3403
  _addCacheSuffix: _addCacheSuffix
3387
3404
  };
3388
3405
  });
@@ -3662,9 +3679,9 @@ define("tinymce/dom/DomQuery", [
3662
3679
  } else {
3663
3680
  if (context) {
3664
3681
  return DomQuery(selector).attr(context);
3665
- } else {
3666
- self.context = context = document;
3667
3682
  }
3683
+
3684
+ self.context = context = document;
3668
3685
  }
3669
3686
 
3670
3687
  if (isString(selector)) {
@@ -6458,9 +6475,9 @@ define("tinymce/html/Entities", [
6458
6475
  numeric -= 0x10000;
6459
6476
 
6460
6477
  return String.fromCharCode(0xD800 + (numeric >> 10), 0xDC00 + (numeric & 0x3FF));
6461
- } else {
6462
- return asciiMap[numeric] || String.fromCharCode(numeric);
6463
6478
  }
6479
+
6480
+ return asciiMap[numeric] || String.fromCharCode(numeric);
6464
6481
  }
6465
6482
 
6466
6483
  return reverseEntities[all] || namedEntities[all] || nativeDecode(all);
@@ -6649,10 +6666,10 @@ define("tinymce/dom/StyleSheetLoader", [
6649
6666
  waitForGeckoLinkLoaded();
6650
6667
  appendToHead(style);
6651
6668
  return;
6652
- } else {
6653
- // Use the id owner on older webkits
6654
- waitForWebKitLinkLoaded();
6655
6669
  }
6670
+
6671
+ // Use the id owner on older webkits
6672
+ waitForWebKitLinkLoaded();
6656
6673
  }
6657
6674
 
6658
6675
  appendToHead(link);
@@ -7333,7 +7350,7 @@ define("tinymce/dom/DOMUtils", [
7333
7350
  });
7334
7351
 
7335
7352
  if (name == 'float') {
7336
- name = isIE ? 'styleFloat' : 'cssFloat';
7353
+ name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';
7337
7354
  }
7338
7355
 
7339
7356
  return elm[0] && elm[0].style ? elm[0].style[name] : undefined;
@@ -8801,9 +8818,9 @@ define("tinymce/AddOnManager", [
8801
8818
  get: function(name) {
8802
8819
  if (this.lookup[name]) {
8803
8820
  return this.lookup[name].instance;
8804
- } else {
8805
- return undefined;
8806
8821
  }
8822
+
8823
+ return undefined;
8807
8824
  },
8808
8825
 
8809
8826
  dependencies: function(name) {
@@ -8878,9 +8895,9 @@ define("tinymce/AddOnManager", [
8878
8895
  createUrl: function(baseUrl, dep) {
8879
8896
  if (typeof dep === "object") {
8880
8897
  return dep;
8881
- } else {
8882
- return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};
8883
8898
  }
8899
+
8900
+ return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};
8884
8901
  },
8885
8902
 
8886
8903
  /**
@@ -9889,9 +9906,9 @@ define("tinymce/html/Node", [], function() {
9889
9906
  attrs.map[name] = value;
9890
9907
 
9891
9908
  return self;
9892
- } else {
9893
- return attrs.map[name];
9894
9909
  }
9910
+
9911
+ return attrs.map[name];
9895
9912
  }
9896
9913
  },
9897
9914
 
@@ -10363,8 +10380,8 @@ define("tinymce/html/Schema", [
10363
10380
  globalAttributes.push.apply(globalAttributes, split("contenteditable contextmenu draggable dropzone " +
10364
10381
  "hidden spellcheck translate"));
10365
10382
  blockContent.push.apply(blockContent, split("article aside details dialog figure header footer hgroup section nav"));
10366
- phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output progress time wbr " +
10367
- "video ruby bdi keygen"));
10383
+ phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output picture " +
10384
+ "progress time wbr video ruby bdi keygen"));
10368
10385
  }
10369
10386
 
10370
10387
  // Add HTML4 elements unless it's html5-strict
@@ -10853,6 +10870,9 @@ define("tinymce/html/Schema", [
10853
10870
  function addValidChildren(validChildren) {
10854
10871
  var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
10855
10872
 
10873
+ // Invalidate the schema cache if the schema is mutated
10874
+ mapCache[settings.schema] = null;
10875
+
10856
10876
  if (validChildren) {
10857
10877
  each(split(validChildren, ','), function(rule) {
10858
10878
  var matches = childRuleRegExp.exec(rule), parent, prefix;
@@ -10871,10 +10891,6 @@ define("tinymce/html/Schema", [
10871
10891
 
10872
10892
  each(split(matches[3], '|'), function(child) {
10873
10893
  if (prefix === '-') {
10874
- // Clone the element before we delete
10875
- // things in it to not mess up default schemas
10876
- children[matches[2]] = parent = extend({}, children[matches[2]]);
10877
-
10878
10894
  delete parent[child];
10879
10895
  } else {
10880
10896
  parent[child] = {};
@@ -11761,11 +11777,12 @@ define("tinymce/html/DomParser", [
11761
11777
 
11762
11778
  function fixInvalidChildren(nodes) {
11763
11779
  var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;
11764
- var nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode;
11780
+ var nonEmptyElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
11765
11781
 
11766
11782
  nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table');
11767
11783
  nonEmptyElements = schema.getNonEmptyElements();
11768
11784
  textBlockElements = schema.getTextBlockElements();
11785
+ specialElements = schema.getSpecialElements();
11769
11786
 
11770
11787
  for (ni = 0; ni < nodes.length; ni++) {
11771
11788
  node = nodes[ni];
@@ -11866,7 +11883,7 @@ define("tinymce/html/DomParser", [
11866
11883
  node.wrap(self.filterNode(new Node('div', 1)));
11867
11884
  } else {
11868
11885
  // We failed wrapping it, then remove or unwrap it
11869
- if (node.name === 'style' || node.name === 'script') {
11886
+ if (specialElements[node.name]) {
11870
11887
  node.empty().remove();
11871
11888
  } else {
11872
11889
  node.unwrap();
@@ -13770,10 +13787,10 @@ define("tinymce/dom/TridentSelection", [], function() {
13770
13787
  sibling.innerHTML = '';
13771
13788
  }
13772
13789
  return;
13773
- } else {
13774
- startOffset = dom.nodeIndex(startContainer);
13775
- startContainer = startContainer.parentNode;
13776
13790
  }
13791
+
13792
+ startOffset = dom.nodeIndex(startContainer);
13793
+ startContainer = startContainer.parentNode;
13777
13794
  }
13778
13795
 
13779
13796
  if (startOffset == endOffset - 1) {
@@ -14378,14 +14395,20 @@ define("tinymce/dom/ControlSelection", [
14378
14395
  } else {
14379
14396
  disableGeckoResize();
14380
14397
 
14398
+ // Sniff sniff, hard to feature detect this stuff
14381
14399
  if (Env.ie >= 11) {
14382
- // TODO: Drag/drop doesn't work
14383
- editor.on('mouseup', function(e) {
14400
+ // Needs to be mousedown for drag/drop to work on IE 11
14401
+ // Needs to be click on Edge to properly select images
14402
+ editor.on('mousedown click', function(e) {
14384
14403
  var nodeName = e.target.nodeName;
14385
14404
 
14386
14405
  if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName)) {
14387
14406
  editor.selection.select(e.target, nodeName == 'TABLE');
14388
- editor.nodeChanged();
14407
+
14408
+ // Only fire once since nodeChange is expensive
14409
+ if (e.type == 'mousedown') {
14410
+ editor.nodeChanged();
14411
+ }
14389
14412
  }
14390
14413
  });
14391
14414
 
@@ -14405,7 +14428,7 @@ define("tinymce/dom/ControlSelection", [
14405
14428
  }
14406
14429
  }
14407
14430
 
14408
- editor.on('nodechange ResizeEditor ResizeWindow', function(e) {
14431
+ editor.on('nodechange ResizeEditor ResizeWindow drop', function(e) {
14409
14432
  if (window.requestAnimationFrame) {
14410
14433
  window.requestAnimationFrame(function() {
14411
14434
  updateResizeRect(e);
@@ -15116,21 +15139,21 @@ define("tinymce/dom/Selection", [
15116
15139
  }
15117
15140
 
15118
15141
  return startElement;
15119
- } else {
15120
- startElement = rng.startContainer;
15142
+ }
15121
15143
 
15122
- if (startElement.nodeType == 1 && startElement.hasChildNodes()) {
15123
- if (!real || !rng.collapsed) {
15124
- startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
15125
- }
15126
- }
15144
+ startElement = rng.startContainer;
15127
15145
 
15128
- if (startElement && startElement.nodeType == 3) {
15129
- return startElement.parentNode;
15146
+ if (startElement.nodeType == 1 && startElement.hasChildNodes()) {
15147
+ if (!real || !rng.collapsed) {
15148
+ startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
15130
15149
  }
15150
+ }
15131
15151
 
15132
- return startElement;
15152
+ if (startElement && startElement.nodeType == 3) {
15153
+ return startElement.parentNode;
15133
15154
  }
15155
+
15156
+ return startElement;
15134
15157
  },
15135
15158
 
15136
15159
  /**
@@ -15161,22 +15184,22 @@ define("tinymce/dom/Selection", [
15161
15184
  }
15162
15185
 
15163
15186
  return endElement;
15164
- } else {
15165
- endElement = rng.endContainer;
15166
- endOffset = rng.endOffset;
15187
+ }
15167
15188
 
15168
- if (endElement.nodeType == 1 && endElement.hasChildNodes()) {
15169
- if (!real || !rng.collapsed) {
15170
- endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
15171
- }
15172
- }
15189
+ endElement = rng.endContainer;
15190
+ endOffset = rng.endOffset;
15173
15191
 
15174
- if (endElement && endElement.nodeType == 3) {
15175
- return endElement.parentNode;
15192
+ if (endElement.nodeType == 1 && endElement.hasChildNodes()) {
15193
+ if (!real || !rng.collapsed) {
15194
+ endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
15176
15195
  }
15196
+ }
15177
15197
 
15178
- return endElement;
15198
+ if (endElement && endElement.nodeType == 3) {
15199
+ return endElement.parentNode;
15179
15200
  }
15201
+
15202
+ return endElement;
15180
15203
  },
15181
15204
 
15182
15205
  /**
@@ -15376,7 +15399,7 @@ define("tinymce/dom/Selection", [
15376
15399
  // IE will sometimes throw an exception here
15377
15400
  ieRng = doc.selection.createRange();
15378
15401
  } catch (ex) {
15379
-
15402
+ // Ignore
15380
15403
  }
15381
15404
 
15382
15405
  if (ieRng && ieRng.item) {
@@ -16944,19 +16967,19 @@ define("tinymce/Formatter", [
16944
16967
  splitToFormatRoot(startContainer);
16945
16968
  startContainer = unwrap(TRUE);
16946
16969
  return;
16947
- } else {
16948
- // Wrap start/end nodes in span element since these might be cloned/moved
16949
- startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'});
16950
- endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'});
16970
+ }
16951
16971
 
16952
- // Split start/end
16953
- splitToFormatRoot(startContainer);
16954
- splitToFormatRoot(endContainer);
16972
+ // Wrap start/end nodes in span element since these might be cloned/moved
16973
+ startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'});
16974
+ endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'});
16955
16975
 
16956
- // Unwrap start/end to get real elements again
16957
- startContainer = unwrap(TRUE);
16958
- endContainer = unwrap();
16959
- }
16976
+ // Split start/end
16977
+ splitToFormatRoot(startContainer);
16978
+ splitToFormatRoot(endContainer);
16979
+
16980
+ // Unwrap start/end to get real elements again
16981
+ startContainer = unwrap(TRUE);
16982
+ endContainer = unwrap();
16960
16983
  } else {
16961
16984
  startContainer = endContainer = splitToFormatRoot(startContainer);
16962
16985
  }
@@ -19324,6 +19347,25 @@ define("tinymce/EnterKey", [
19324
19347
  }
19325
19348
  }
19326
19349
 
19350
+ function insertNewBlockAfter() {
19351
+ // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup
19352
+ if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') {
19353
+ newBlock = createNewBlock(newBlockName);
19354
+ } else {
19355
+ newBlock = createNewBlock();
19356
+ }
19357
+
19358
+ // Split the current container block element if enter is pressed inside an empty inner block element
19359
+ if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) {
19360
+ // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P
19361
+ newBlock = dom.split(containerBlock, parentBlock);
19362
+ } else {
19363
+ dom.insertAfter(newBlock, parentBlock);
19364
+ }
19365
+
19366
+ moveToCaretPosition(newBlock);
19367
+ }
19368
+
19327
19369
  rng = selection.getRng(true);
19328
19370
 
19329
19371
  // Event is blocked by some other handler for example the lists plugin
@@ -19436,22 +19478,7 @@ define("tinymce/EnterKey", [
19436
19478
 
19437
19479
  // Insert new block before/after the parent block depending on caret location
19438
19480
  if (isCaretAtStartOrEndOfBlock()) {
19439
- // If the caret is at the end of a header we produce a P tag after it similar to Word unless we are in a hgroup
19440
- if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') {
19441
- newBlock = createNewBlock(newBlockName);
19442
- } else {
19443
- newBlock = createNewBlock();
19444
- }
19445
-
19446
- // Split the current container block element if enter is pressed inside an empty inner block element
19447
- if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) {
19448
- // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P
19449
- newBlock = dom.split(containerBlock, parentBlock);
19450
- } else {
19451
- dom.insertAfter(newBlock, parentBlock);
19452
- }
19453
-
19454
- moveToCaretPosition(newBlock);
19481
+ insertNewBlockAfter();
19455
19482
  } else if (isCaretAtStartOrEndOfBlock(true)) {
19456
19483
  // Insert new block before
19457
19484
  newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
@@ -19467,7 +19494,14 @@ define("tinymce/EnterKey", [
19467
19494
  dom.insertAfter(fragment, parentBlock);
19468
19495
  trimInlineElementsOnLeftSideOfBlock(newBlock);
19469
19496
  addBrToBlockIfNeeded(parentBlock);
19470
- moveToCaretPosition(newBlock);
19497
+
19498
+ // New block might become empty if it's <p><b>a |</b></p>
19499
+ if (dom.isEmpty(newBlock)) {
19500
+ dom.remove(newBlock);
19501
+ insertNewBlockAfter();
19502
+ } else {
19503
+ moveToCaretPosition(newBlock);
19504
+ }
19471
19505
  }
19472
19506
 
19473
19507
  dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique
@@ -22074,14 +22108,14 @@ define("tinymce/ui/Selector", [
22074
22108
  item[name] ? item[name]() :
22075
22109
  false;
22076
22110
  };
22077
- } else {
22078
- // Compile not expression
22079
- notSelectors = parseChunks(name[1], []);
22080
-
22081
- return function(item) {
22082
- return !match(item, notSelectors);
22083
- };
22084
22111
  }
22112
+
22113
+ // Compile not expression
22114
+ notSelectors = parseChunks(name[1], []);
22115
+
22116
+ return function(item) {
22117
+ return !match(item, notSelectors);
22118
+ };
22085
22119
  }
22086
22120
  }
22087
22121
 
@@ -23868,10 +23902,10 @@ define("tinymce/ui/Control", [
23868
23902
 
23869
23903
  if (typeof value === "undefined") {
23870
23904
  return self._aria[name];
23871
- } else {
23872
- self._aria[name] = value;
23873
23905
  }
23874
23906
 
23907
+ self._aria[name] = value;
23908
+
23875
23909
  if (self.state.get('rendered')) {
23876
23910
  elm.setAttribute(name == 'role' ? name : 'aria-' + name, value);
23877
23911
  }
@@ -27536,7 +27570,7 @@ define("tinymce/util/Quirks", [
27536
27570
  * @param {DragEvent} e Event object
27537
27571
  */
27538
27572
  function setMceInteralContent(e) {
27539
- var selectionHtml;
27573
+ var selectionHtml, internalContent;
27540
27574
 
27541
27575
  if (e.dataTransfer) {
27542
27576
  if (editor.selection.isCollapsed() && e.target.tagName == 'IMG') {
@@ -27547,7 +27581,8 @@ define("tinymce/util/Quirks", [
27547
27581
 
27548
27582
  // Safari/IE doesn't support custom dataTransfer items so we can only use URL and Text
27549
27583
  if (selectionHtml.length > 0) {
27550
- e.dataTransfer.setData(mceInternalDataType, mceInternalUrlPrefix + escape(selectionHtml));
27584
+ internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);
27585
+ e.dataTransfer.setData(mceInternalDataType, internalContent);
27551
27586
  }
27552
27587
  }
27553
27588
  }
@@ -27562,17 +27597,22 @@ define("tinymce/util/Quirks", [
27562
27597
  * @returns {String} mce-internal content
27563
27598
  */
27564
27599
  function getMceInternalContent(e) {
27565
- var internalContent, content;
27600
+ var internalContent;
27566
27601
 
27567
27602
  if (e.dataTransfer) {
27568
27603
  internalContent = e.dataTransfer.getData(mceInternalDataType);
27569
27604
 
27570
27605
  if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {
27571
- content = unescape(internalContent.substr(mceInternalUrlPrefix.length));
27606
+ internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');
27607
+
27608
+ return {
27609
+ id: unescape(internalContent[0]),
27610
+ html: unescape(internalContent[1])
27611
+ };
27572
27612
  }
27573
27613
  }
27574
27614
 
27575
- return content;
27615
+ return null;
27576
27616
  }
27577
27617
 
27578
27618
  /**
@@ -28040,6 +28080,7 @@ define("tinymce/util/Quirks", [
28040
28080
  editor.on('drop', function(e) {
28041
28081
  if (!isDefaultPrevented(e)) {
28042
28082
  var internalContent = getMceInternalContent(e);
28083
+
28043
28084
  if (internalContent) {
28044
28085
  e.preventDefault();
28045
28086
 
@@ -28057,7 +28098,7 @@ define("tinymce/util/Quirks", [
28057
28098
 
28058
28099
  customDelete();
28059
28100
  selection.setRng(pointRng);
28060
- insertClipboardContents(internalContent);
28101
+ insertClipboardContents(internalContent.html);
28061
28102
  }, 0);
28062
28103
  }
28063
28104
  }
@@ -28972,12 +29013,13 @@ define("tinymce/util/Quirks", [
28972
29013
  editor.on('drop', function(e) {
28973
29014
  if (!isDefaultPrevented(e)) {
28974
29015
  var internalContent = getMceInternalContent(e);
28975
- if (internalContent) {
29016
+
29017
+ if (internalContent && internalContent.id != editor.id) {
28976
29018
  e.preventDefault();
28977
29019
 
28978
29020
  var rng = RangeUtils.getCaretRangeFromPoint(e.x, e.y, editor.getDoc());
28979
29021
  selection.setRng(rng);
28980
- insertClipboardContents(internalContent);
29022
+ insertClipboardContents(internalContent.html);
28981
29023
  }
28982
29024
  }
28983
29025
  });
@@ -30193,7 +30235,17 @@ define("tinymce/EditorUpload", [
30193
30235
  return content.replace(/src="(blob:[^"]+)"/g, function(match, blobUri) {
30194
30236
  var blobInfo = blobCache.getByUri(blobUri);
30195
30237
 
30196
- return 'src="data:' + blobInfo.blob().type + ';base64,' + blobInfo.base64() + '"';
30238
+ if (!blobInfo) {
30239
+ blobInfo = Tools.reduce(editor.editorManager.editors, function(result, editor) {
30240
+ return result || editor.editorUpload.blobCache.getByUri(blobUri);
30241
+ }, null);
30242
+ }
30243
+
30244
+ if (blobInfo) {
30245
+ return 'src="data:' + blobInfo.blob().type + ';base64,' + blobInfo.base64() + '"';
30246
+ }
30247
+
30248
+ return match[0];
30197
30249
  });
30198
30250
  }
30199
30251
 
@@ -32853,7 +32905,7 @@ define("tinymce/EditorManager", [
32853
32905
  * @property minorVersion
32854
32906
  * @type String
32855
32907
  */
32856
- minorVersion: '2.3',
32908
+ minorVersion: '2.4',
32857
32909
 
32858
32910
  /**
32859
32911
  * Release date of TinyMCE build.
@@ -32861,7 +32913,7 @@ define("tinymce/EditorManager", [
32861
32913
  * @property releaseDate
32862
32914
  * @type String
32863
32915
  */
32864
- releaseDate: '2015-07-30',
32916
+ releaseDate: '2015-08-17',
32865
32917
 
32866
32918
  /**
32867
32919
  * Collection of editor instances.