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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 707da6d71e7ab64409eeacc8b5a31bb69595641a
4
- data.tar.gz: 932c7d3bb93e728f5e4818a3025d12738423a230
3
+ metadata.gz: 4260a97f4c21578d77fc5a3bbfc82ed5f269ecf2
4
+ data.tar.gz: 787019224469d4c2d04465060cd78bc1e4578b85
5
5
  SHA512:
6
- metadata.gz: 1401bddb5f1fcdb32348d71827db3130053298cceecdf64160ba17dafba7c7e42df3936d26ab5741c0de9305ef6a42ff5d704ad7b720e6be68ace71d9bf640ef
7
- data.tar.gz: 3f0499f90bfc3c55fb6b0f7ee690724ba7386bc46e05efd93b6222b2adca563ac397859d171cb3a46a3b20923525c95ce6899a7a700812a1600098b5b411c92f
6
+ metadata.gz: ff2b622fd5825439cb1f1baa20d72e8a24e48626934b00a6ca68b01bfb1b441dc9c6233cb51e31528f8b25d045d2d481f5cff5f9a63da365c0bca1bd2f8f2d0a
7
+ data.tar.gz: 21c11ff376e84604acaca6c002d56982b996871023bf35329e40a4226cf142e5b9d70c2297bdfbc9f110369ab7ba06dddd325df96fbd23369a94771694907e63
@@ -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)
@@ -709,7 +709,7 @@ define("tinymce/Env", [], function() {
709
709
  ie = !webkit && !opera && (/MSIE/gi).test(userAgent) && (/Explorer/gi).test(nav.appName);
710
710
  ie = ie && /MSIE (\w+)\./.exec(userAgent)[1];
711
711
  ie11 = userAgent.indexOf('Trident/') != -1 && (userAgent.indexOf('rv:') != -1 || nav.appName.indexOf('Netscape') != -1) ? 11 : false;
712
- ie12 = (document.msElementsFromPoint && !ie && !ie11) ? 12 : false;
712
+ ie12 = (userAgent.indexOf('Edge/') != -1 && !ie && !ie11) ? 12 : false;
713
713
  ie = ie || ie11 || ie12;
714
714
  gecko = !webkit && !ie11 && /Gecko/.test(userAgent);
715
715
  mac = userAgent.indexOf('Mac') != -1;
@@ -1340,6 +1340,21 @@ define("tinymce/util/Tools", [
1340
1340
  };
1341
1341
  }
1342
1342
 
1343
+ function reduce(collection, iteratee, accumulator, thisArg) {
1344
+ var i = 0;
1345
+
1346
+ if (arguments.length < 3) {
1347
+ accumulator = collection[0];
1348
+ i = 1;
1349
+ }
1350
+
1351
+ for (; i < collection.length; i++) {
1352
+ accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
1353
+ }
1354
+
1355
+ return accumulator;
1356
+ }
1357
+
1343
1358
  function _addCacheSuffix(url) {
1344
1359
  var cacheSuffix = Env.cacheSuffix;
1345
1360
 
@@ -1368,6 +1383,7 @@ define("tinymce/util/Tools", [
1368
1383
  resolve: resolve,
1369
1384
  explode: explode,
1370
1385
  constant: constant,
1386
+ reduce: reduce,
1371
1387
  _addCacheSuffix: _addCacheSuffix
1372
1388
  };
1373
1389
  });
@@ -1647,9 +1663,9 @@ define("tinymce/dom/DomQuery", [
1647
1663
  } else {
1648
1664
  if (context) {
1649
1665
  return DomQuery(selector).attr(context);
1650
- } else {
1651
- self.context = context = document;
1652
1666
  }
1667
+
1668
+ self.context = context = document;
1653
1669
  }
1654
1670
 
1655
1671
  if (isString(selector)) {
@@ -4443,9 +4459,9 @@ define("tinymce/html/Entities", [
4443
4459
  numeric -= 0x10000;
4444
4460
 
4445
4461
  return String.fromCharCode(0xD800 + (numeric >> 10), 0xDC00 + (numeric & 0x3FF));
4446
- } else {
4447
- return asciiMap[numeric] || String.fromCharCode(numeric);
4448
4462
  }
4463
+
4464
+ return asciiMap[numeric] || String.fromCharCode(numeric);
4449
4465
  }
4450
4466
 
4451
4467
  return reverseEntities[all] || namedEntities[all] || nativeDecode(all);
@@ -4634,10 +4650,10 @@ define("tinymce/dom/StyleSheetLoader", [
4634
4650
  waitForGeckoLinkLoaded();
4635
4651
  appendToHead(style);
4636
4652
  return;
4637
- } else {
4638
- // Use the id owner on older webkits
4639
- waitForWebKitLinkLoaded();
4640
4653
  }
4654
+
4655
+ // Use the id owner on older webkits
4656
+ waitForWebKitLinkLoaded();
4641
4657
  }
4642
4658
 
4643
4659
  appendToHead(link);
@@ -5318,7 +5334,7 @@ define("tinymce/dom/DOMUtils", [
5318
5334
  });
5319
5335
 
5320
5336
  if (name == 'float') {
5321
- name = isIE ? 'styleFloat' : 'cssFloat';
5337
+ name = Env.ie && Env.ie < 12 ? 'styleFloat' : 'cssFloat';
5322
5338
  }
5323
5339
 
5324
5340
  return elm[0] && elm[0].style ? elm[0].style[name] : undefined;
@@ -6786,9 +6802,9 @@ define("tinymce/AddOnManager", [
6786
6802
  get: function(name) {
6787
6803
  if (this.lookup[name]) {
6788
6804
  return this.lookup[name].instance;
6789
- } else {
6790
- return undefined;
6791
6805
  }
6806
+
6807
+ return undefined;
6792
6808
  },
6793
6809
 
6794
6810
  dependencies: function(name) {
@@ -6863,9 +6879,9 @@ define("tinymce/AddOnManager", [
6863
6879
  createUrl: function(baseUrl, dep) {
6864
6880
  if (typeof dep === "object") {
6865
6881
  return dep;
6866
- } else {
6867
- return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};
6868
6882
  }
6883
+
6884
+ return {prefix: baseUrl.prefix, resource: dep, suffix: baseUrl.suffix};
6869
6885
  },
6870
6886
 
6871
6887
  /**
@@ -7874,9 +7890,9 @@ define("tinymce/html/Node", [], function() {
7874
7890
  attrs.map[name] = value;
7875
7891
 
7876
7892
  return self;
7877
- } else {
7878
- return attrs.map[name];
7879
7893
  }
7894
+
7895
+ return attrs.map[name];
7880
7896
  }
7881
7897
  },
7882
7898
 
@@ -8348,8 +8364,8 @@ define("tinymce/html/Schema", [
8348
8364
  globalAttributes.push.apply(globalAttributes, split("contenteditable contextmenu draggable dropzone " +
8349
8365
  "hidden spellcheck translate"));
8350
8366
  blockContent.push.apply(blockContent, split("article aside details dialog figure header footer hgroup section nav"));
8351
- phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output progress time wbr " +
8352
- "video ruby bdi keygen"));
8367
+ phrasingContent.push.apply(phrasingContent, split("audio canvas command datalist mark meter output picture " +
8368
+ "progress time wbr video ruby bdi keygen"));
8353
8369
  }
8354
8370
 
8355
8371
  // Add HTML4 elements unless it's html5-strict
@@ -8838,6 +8854,9 @@ define("tinymce/html/Schema", [
8838
8854
  function addValidChildren(validChildren) {
8839
8855
  var childRuleRegExp = /^([+\-]?)(\w+)\[([^\]]+)\]$/;
8840
8856
 
8857
+ // Invalidate the schema cache if the schema is mutated
8858
+ mapCache[settings.schema] = null;
8859
+
8841
8860
  if (validChildren) {
8842
8861
  each(split(validChildren, ','), function(rule) {
8843
8862
  var matches = childRuleRegExp.exec(rule), parent, prefix;
@@ -8856,10 +8875,6 @@ define("tinymce/html/Schema", [
8856
8875
 
8857
8876
  each(split(matches[3], '|'), function(child) {
8858
8877
  if (prefix === '-') {
8859
- // Clone the element before we delete
8860
- // things in it to not mess up default schemas
8861
- children[matches[2]] = parent = extend({}, children[matches[2]]);
8862
-
8863
8878
  delete parent[child];
8864
8879
  } else {
8865
8880
  parent[child] = {};
@@ -9746,11 +9761,12 @@ define("tinymce/html/DomParser", [
9746
9761
 
9747
9762
  function fixInvalidChildren(nodes) {
9748
9763
  var ni, node, parent, parents, newParent, currentNode, tempNode, childNode, i;
9749
- var nonEmptyElements, nonSplitableElements, textBlockElements, sibling, nextNode;
9764
+ var nonEmptyElements, nonSplitableElements, textBlockElements, specialElements, sibling, nextNode;
9750
9765
 
9751
9766
  nonSplitableElements = makeMap('tr,td,th,tbody,thead,tfoot,table');
9752
9767
  nonEmptyElements = schema.getNonEmptyElements();
9753
9768
  textBlockElements = schema.getTextBlockElements();
9769
+ specialElements = schema.getSpecialElements();
9754
9770
 
9755
9771
  for (ni = 0; ni < nodes.length; ni++) {
9756
9772
  node = nodes[ni];
@@ -9851,7 +9867,7 @@ define("tinymce/html/DomParser", [
9851
9867
  node.wrap(self.filterNode(new Node('div', 1)));
9852
9868
  } else {
9853
9869
  // We failed wrapping it, then remove or unwrap it
9854
- if (node.name === 'style' || node.name === 'script') {
9870
+ if (specialElements[node.name]) {
9855
9871
  node.empty().remove();
9856
9872
  } else {
9857
9873
  node.unwrap();
@@ -11755,10 +11771,10 @@ define("tinymce/dom/TridentSelection", [], function() {
11755
11771
  sibling.innerHTML = '';
11756
11772
  }
11757
11773
  return;
11758
- } else {
11759
- startOffset = dom.nodeIndex(startContainer);
11760
- startContainer = startContainer.parentNode;
11761
11774
  }
11775
+
11776
+ startOffset = dom.nodeIndex(startContainer);
11777
+ startContainer = startContainer.parentNode;
11762
11778
  }
11763
11779
 
11764
11780
  if (startOffset == endOffset - 1) {
@@ -12363,14 +12379,20 @@ define("tinymce/dom/ControlSelection", [
12363
12379
  } else {
12364
12380
  disableGeckoResize();
12365
12381
 
12382
+ // Sniff sniff, hard to feature detect this stuff
12366
12383
  if (Env.ie >= 11) {
12367
- // TODO: Drag/drop doesn't work
12368
- editor.on('mouseup', function(e) {
12384
+ // Needs to be mousedown for drag/drop to work on IE 11
12385
+ // Needs to be click on Edge to properly select images
12386
+ editor.on('mousedown click', function(e) {
12369
12387
  var nodeName = e.target.nodeName;
12370
12388
 
12371
12389
  if (!resizeStarted && /^(TABLE|IMG|HR)$/.test(nodeName)) {
12372
12390
  editor.selection.select(e.target, nodeName == 'TABLE');
12373
- editor.nodeChanged();
12391
+
12392
+ // Only fire once since nodeChange is expensive
12393
+ if (e.type == 'mousedown') {
12394
+ editor.nodeChanged();
12395
+ }
12374
12396
  }
12375
12397
  });
12376
12398
 
@@ -12390,7 +12412,7 @@ define("tinymce/dom/ControlSelection", [
12390
12412
  }
12391
12413
  }
12392
12414
 
12393
- editor.on('nodechange ResizeEditor ResizeWindow', function(e) {
12415
+ editor.on('nodechange ResizeEditor ResizeWindow drop', function(e) {
12394
12416
  if (window.requestAnimationFrame) {
12395
12417
  window.requestAnimationFrame(function() {
12396
12418
  updateResizeRect(e);
@@ -13101,21 +13123,21 @@ define("tinymce/dom/Selection", [
13101
13123
  }
13102
13124
 
13103
13125
  return startElement;
13104
- } else {
13105
- startElement = rng.startContainer;
13126
+ }
13106
13127
 
13107
- if (startElement.nodeType == 1 && startElement.hasChildNodes()) {
13108
- if (!real || !rng.collapsed) {
13109
- startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
13110
- }
13111
- }
13128
+ startElement = rng.startContainer;
13112
13129
 
13113
- if (startElement && startElement.nodeType == 3) {
13114
- return startElement.parentNode;
13130
+ if (startElement.nodeType == 1 && startElement.hasChildNodes()) {
13131
+ if (!real || !rng.collapsed) {
13132
+ startElement = startElement.childNodes[Math.min(startElement.childNodes.length - 1, rng.startOffset)];
13115
13133
  }
13134
+ }
13116
13135
 
13117
- return startElement;
13136
+ if (startElement && startElement.nodeType == 3) {
13137
+ return startElement.parentNode;
13118
13138
  }
13139
+
13140
+ return startElement;
13119
13141
  },
13120
13142
 
13121
13143
  /**
@@ -13146,22 +13168,22 @@ define("tinymce/dom/Selection", [
13146
13168
  }
13147
13169
 
13148
13170
  return endElement;
13149
- } else {
13150
- endElement = rng.endContainer;
13151
- endOffset = rng.endOffset;
13171
+ }
13152
13172
 
13153
- if (endElement.nodeType == 1 && endElement.hasChildNodes()) {
13154
- if (!real || !rng.collapsed) {
13155
- endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
13156
- }
13157
- }
13173
+ endElement = rng.endContainer;
13174
+ endOffset = rng.endOffset;
13158
13175
 
13159
- if (endElement && endElement.nodeType == 3) {
13160
- return endElement.parentNode;
13176
+ if (endElement.nodeType == 1 && endElement.hasChildNodes()) {
13177
+ if (!real || !rng.collapsed) {
13178
+ endElement = endElement.childNodes[endOffset > 0 ? endOffset - 1 : endOffset];
13161
13179
  }
13180
+ }
13162
13181
 
13163
- return endElement;
13182
+ if (endElement && endElement.nodeType == 3) {
13183
+ return endElement.parentNode;
13164
13184
  }
13185
+
13186
+ return endElement;
13165
13187
  },
13166
13188
 
13167
13189
  /**
@@ -13361,7 +13383,7 @@ define("tinymce/dom/Selection", [
13361
13383
  // IE will sometimes throw an exception here
13362
13384
  ieRng = doc.selection.createRange();
13363
13385
  } catch (ex) {
13364
-
13386
+ // Ignore
13365
13387
  }
13366
13388
 
13367
13389
  if (ieRng && ieRng.item) {
@@ -14929,19 +14951,19 @@ define("tinymce/Formatter", [
14929
14951
  splitToFormatRoot(startContainer);
14930
14952
  startContainer = unwrap(TRUE);
14931
14953
  return;
14932
- } else {
14933
- // Wrap start/end nodes in span element since these might be cloned/moved
14934
- startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'});
14935
- endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'});
14954
+ }
14936
14955
 
14937
- // Split start/end
14938
- splitToFormatRoot(startContainer);
14939
- splitToFormatRoot(endContainer);
14956
+ // Wrap start/end nodes in span element since these might be cloned/moved
14957
+ startContainer = wrap(startContainer, 'span', {id: '_start', 'data-mce-type': 'bookmark'});
14958
+ endContainer = wrap(endContainer, 'span', {id: '_end', 'data-mce-type': 'bookmark'});
14940
14959
 
14941
- // Unwrap start/end to get real elements again
14942
- startContainer = unwrap(TRUE);
14943
- endContainer = unwrap();
14944
- }
14960
+ // Split start/end
14961
+ splitToFormatRoot(startContainer);
14962
+ splitToFormatRoot(endContainer);
14963
+
14964
+ // Unwrap start/end to get real elements again
14965
+ startContainer = unwrap(TRUE);
14966
+ endContainer = unwrap();
14945
14967
  } else {
14946
14968
  startContainer = endContainer = splitToFormatRoot(startContainer);
14947
14969
  }
@@ -17309,6 +17331,25 @@ define("tinymce/EnterKey", [
17309
17331
  }
17310
17332
  }
17311
17333
 
17334
+ function insertNewBlockAfter() {
17335
+ // 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
17336
+ if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') {
17337
+ newBlock = createNewBlock(newBlockName);
17338
+ } else {
17339
+ newBlock = createNewBlock();
17340
+ }
17341
+
17342
+ // Split the current container block element if enter is pressed inside an empty inner block element
17343
+ if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) {
17344
+ // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P
17345
+ newBlock = dom.split(containerBlock, parentBlock);
17346
+ } else {
17347
+ dom.insertAfter(newBlock, parentBlock);
17348
+ }
17349
+
17350
+ moveToCaretPosition(newBlock);
17351
+ }
17352
+
17312
17353
  rng = selection.getRng(true);
17313
17354
 
17314
17355
  // Event is blocked by some other handler for example the lists plugin
@@ -17421,22 +17462,7 @@ define("tinymce/EnterKey", [
17421
17462
 
17422
17463
  // Insert new block before/after the parent block depending on caret location
17423
17464
  if (isCaretAtStartOrEndOfBlock()) {
17424
- // 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
17425
- if (/^(H[1-6]|PRE|FIGURE)$/.test(parentBlockName) && containerBlockName != 'HGROUP') {
17426
- newBlock = createNewBlock(newBlockName);
17427
- } else {
17428
- newBlock = createNewBlock();
17429
- }
17430
-
17431
- // Split the current container block element if enter is pressed inside an empty inner block element
17432
- if (settings.end_container_on_empty_block && canSplitBlock(containerBlock) && dom.isEmpty(parentBlock)) {
17433
- // Split container block for example a BLOCKQUOTE at the current blockParent location for example a P
17434
- newBlock = dom.split(containerBlock, parentBlock);
17435
- } else {
17436
- dom.insertAfter(newBlock, parentBlock);
17437
- }
17438
-
17439
- moveToCaretPosition(newBlock);
17465
+ insertNewBlockAfter();
17440
17466
  } else if (isCaretAtStartOrEndOfBlock(true)) {
17441
17467
  // Insert new block before
17442
17468
  newBlock = parentBlock.parentNode.insertBefore(createNewBlock(), parentBlock);
@@ -17452,7 +17478,14 @@ define("tinymce/EnterKey", [
17452
17478
  dom.insertAfter(fragment, parentBlock);
17453
17479
  trimInlineElementsOnLeftSideOfBlock(newBlock);
17454
17480
  addBrToBlockIfNeeded(parentBlock);
17455
- moveToCaretPosition(newBlock);
17481
+
17482
+ // New block might become empty if it's <p><b>a |</b></p>
17483
+ if (dom.isEmpty(newBlock)) {
17484
+ dom.remove(newBlock);
17485
+ insertNewBlockAfter();
17486
+ } else {
17487
+ moveToCaretPosition(newBlock);
17488
+ }
17456
17489
  }
17457
17490
 
17458
17491
  dom.setAttrib(newBlock, 'id', ''); // Remove ID since it needs to be document unique
@@ -20059,14 +20092,14 @@ define("tinymce/ui/Selector", [
20059
20092
  item[name] ? item[name]() :
20060
20093
  false;
20061
20094
  };
20062
- } else {
20063
- // Compile not expression
20064
- notSelectors = parseChunks(name[1], []);
20065
-
20066
- return function(item) {
20067
- return !match(item, notSelectors);
20068
- };
20069
20095
  }
20096
+
20097
+ // Compile not expression
20098
+ notSelectors = parseChunks(name[1], []);
20099
+
20100
+ return function(item) {
20101
+ return !match(item, notSelectors);
20102
+ };
20070
20103
  }
20071
20104
  }
20072
20105
 
@@ -21853,10 +21886,10 @@ define("tinymce/ui/Control", [
21853
21886
 
21854
21887
  if (typeof value === "undefined") {
21855
21888
  return self._aria[name];
21856
- } else {
21857
- self._aria[name] = value;
21858
21889
  }
21859
21890
 
21891
+ self._aria[name] = value;
21892
+
21860
21893
  if (self.state.get('rendered')) {
21861
21894
  elm.setAttribute(name == 'role' ? name : 'aria-' + name, value);
21862
21895
  }
@@ -25521,7 +25554,7 @@ define("tinymce/util/Quirks", [
25521
25554
  * @param {DragEvent} e Event object
25522
25555
  */
25523
25556
  function setMceInteralContent(e) {
25524
- var selectionHtml;
25557
+ var selectionHtml, internalContent;
25525
25558
 
25526
25559
  if (e.dataTransfer) {
25527
25560
  if (editor.selection.isCollapsed() && e.target.tagName == 'IMG') {
@@ -25532,7 +25565,8 @@ define("tinymce/util/Quirks", [
25532
25565
 
25533
25566
  // Safari/IE doesn't support custom dataTransfer items so we can only use URL and Text
25534
25567
  if (selectionHtml.length > 0) {
25535
- e.dataTransfer.setData(mceInternalDataType, mceInternalUrlPrefix + escape(selectionHtml));
25568
+ internalContent = mceInternalUrlPrefix + escape(editor.id) + ',' + escape(selectionHtml);
25569
+ e.dataTransfer.setData(mceInternalDataType, internalContent);
25536
25570
  }
25537
25571
  }
25538
25572
  }
@@ -25547,17 +25581,22 @@ define("tinymce/util/Quirks", [
25547
25581
  * @returns {String} mce-internal content
25548
25582
  */
25549
25583
  function getMceInternalContent(e) {
25550
- var internalContent, content;
25584
+ var internalContent;
25551
25585
 
25552
25586
  if (e.dataTransfer) {
25553
25587
  internalContent = e.dataTransfer.getData(mceInternalDataType);
25554
25588
 
25555
25589
  if (internalContent && internalContent.indexOf(mceInternalUrlPrefix) >= 0) {
25556
- content = unescape(internalContent.substr(mceInternalUrlPrefix.length));
25590
+ internalContent = internalContent.substr(mceInternalUrlPrefix.length).split(',');
25591
+
25592
+ return {
25593
+ id: unescape(internalContent[0]),
25594
+ html: unescape(internalContent[1])
25595
+ };
25557
25596
  }
25558
25597
  }
25559
25598
 
25560
- return content;
25599
+ return null;
25561
25600
  }
25562
25601
 
25563
25602
  /**
@@ -26025,6 +26064,7 @@ define("tinymce/util/Quirks", [
26025
26064
  editor.on('drop', function(e) {
26026
26065
  if (!isDefaultPrevented(e)) {
26027
26066
  var internalContent = getMceInternalContent(e);
26067
+
26028
26068
  if (internalContent) {
26029
26069
  e.preventDefault();
26030
26070
 
@@ -26042,7 +26082,7 @@ define("tinymce/util/Quirks", [
26042
26082
 
26043
26083
  customDelete();
26044
26084
  selection.setRng(pointRng);
26045
- insertClipboardContents(internalContent);
26085
+ insertClipboardContents(internalContent.html);
26046
26086
  }, 0);
26047
26087
  }
26048
26088
  }
@@ -26957,12 +26997,13 @@ define("tinymce/util/Quirks", [
26957
26997
  editor.on('drop', function(e) {
26958
26998
  if (!isDefaultPrevented(e)) {
26959
26999
  var internalContent = getMceInternalContent(e);
26960
- if (internalContent) {
27000
+
27001
+ if (internalContent && internalContent.id != editor.id) {
26961
27002
  e.preventDefault();
26962
27003
 
26963
27004
  var rng = RangeUtils.getCaretRangeFromPoint(e.x, e.y, editor.getDoc());
26964
27005
  selection.setRng(rng);
26965
- insertClipboardContents(internalContent);
27006
+ insertClipboardContents(internalContent.html);
26966
27007
  }
26967
27008
  }
26968
27009
  });
@@ -28178,7 +28219,17 @@ define("tinymce/EditorUpload", [
28178
28219
  return content.replace(/src="(blob:[^"]+)"/g, function(match, blobUri) {
28179
28220
  var blobInfo = blobCache.getByUri(blobUri);
28180
28221
 
28181
- return 'src="data:' + blobInfo.blob().type + ';base64,' + blobInfo.base64() + '"';
28222
+ if (!blobInfo) {
28223
+ blobInfo = Tools.reduce(editor.editorManager.editors, function(result, editor) {
28224
+ return result || editor.editorUpload.blobCache.getByUri(blobUri);
28225
+ }, null);
28226
+ }
28227
+
28228
+ if (blobInfo) {
28229
+ return 'src="data:' + blobInfo.blob().type + ';base64,' + blobInfo.base64() + '"';
28230
+ }
28231
+
28232
+ return match[0];
28182
28233
  });
28183
28234
  }
28184
28235
 
@@ -30838,7 +30889,7 @@ define("tinymce/EditorManager", [
30838
30889
  * @property minorVersion
30839
30890
  * @type String
30840
30891
  */
30841
- minorVersion: '2.3',
30892
+ minorVersion: '2.4',
30842
30893
 
30843
30894
  /**
30844
30895
  * Release date of TinyMCE build.
@@ -30846,7 +30897,7 @@ define("tinymce/EditorManager", [
30846
30897
  * @property releaseDate
30847
30898
  * @type String
30848
30899
  */
30849
- releaseDate: '2015-07-30',
30900
+ releaseDate: '2015-08-17',
30850
30901
 
30851
30902
  /**
30852
30903
  * Collection of editor instances.