tinymce-rails 4.2.3 → 4.2.4

Sign up to get free protection for your applications and to get access to all the features.
@@ -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.