tinymce-rails 4.3.13 → 4.4.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +1 -2
- data/app/assets/source/tinymce/tinymce.js +224 -51
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/advlist/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/imagetools/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/lists/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +2 -2
- data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.ie7.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/atomic.js +5 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-atomic.js +1491 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-browser.js +1491 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-demo.js +1491 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/bootstrap-prod.js +1491 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/browser.js +10 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/demo.js +8 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/bolt/prod.js +5 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/config/dent/depend.js +21 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/compile/bootstrap.js +1526 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/compile/theme.js +1589 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.js +1674 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/scratch/inline/theme.raw.js +1674 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/css/demo.css +25 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/html/demo.html +42 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/demo/js/tinymce/inlite/Demo.js +28 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/Theme.js +143 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Arr.js +22 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Bookmark.js +130 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Unlink.js +84 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/alien/Uuid.js +34 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Actions.js +106 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Convert.js +37 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/ElementMatcher.js +47 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Layout.js +95 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Matcher.js +39 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/Measure.js +70 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/PredicateId.js +32 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SelectionMatcher.js +55 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/SkinLoader.js +45 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/core/UrlType.js +22 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Conversions.js +31 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/file/Picker.js +40 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Buttons.js +80 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Forms.js +102 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Panel.js +216 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/main/js/tinymce/inlite/ui/Toolbar.js +126 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/alien/ArrTest.js +9 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/alien/UuidTest.js +10 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/ConvertTest.js +12 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/MatcherTest.js +51 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/atomic/core/UrlTypeTest.js +25 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/ThemeTest.js +202 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/alien/BookmarkTest.js +65 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/alien/UnlinkTest.js +38 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/ActionsTest.js +177 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/ElementMatcher.js +69 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/LayoutTest.js +118 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/MeasureTest.js +62 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/PredicateIdTest.js +26 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/core/SelectionMatcherTest.js +76 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/file/ConversionsTest.js +41 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/src/test/js/browser/file/SelectionMatcher.js +55 -0
- data/vendor/assets/javascripts/tinymce/themes/inlite/theme.js +1 -0
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.js +13 -13
- metadata +57 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6a8559dab02e833fcb6b1f1b2f3871e569e99226
|
4
|
+
data.tar.gz: 1e686674aa5cb62e24cf16a395bb9364eb51d5f9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22152b8637f40acb23356ee7ba614cd837c4e2cd675bdcf5736f696ee3046572c6fa9440ef1e5ac6aec1c44813c413a1e71b7eac28560649faf95a60715f58c1
|
7
|
+
data.tar.gz: 30cb48329bf2691978cce1be4336f8bb63f4e0bc11d6b68209adb50fc645d6eef2858a44def0f19004a0ea1c655fcb4cd46bdc3987afa874fe2122dcb5c89608
|
data/Rakefile
CHANGED
@@ -28,12 +28,11 @@ task :extract do
|
|
28
28
|
`mkdir -p vendor/assets/javascripts/tinymce`
|
29
29
|
`mv tmp/tinymce/js/tinymce/* vendor/assets/javascripts/tinymce/`
|
30
30
|
end
|
31
|
-
|
31
|
+
|
32
32
|
step "Extracting jQuery & unminified source files" do
|
33
33
|
`rm -rf tmp/tinymce`
|
34
34
|
`unzip -u tmp/tinymce.dev.zip -d tmp`
|
35
35
|
`mv tmp/tinymce/js/tinymce/jquery.tinymce.min.js vendor/assets/javascripts/tinymce/jquery.tinymce.js`
|
36
|
-
`mv tmp/tinymce/js/tinymce/tinymce.jquery.min.js vendor/assets/javascripts/tinymce/tinymce.jquery.js`
|
37
36
|
`mkdir -p app/assets/source/tinymce`
|
38
37
|
`mv tmp/tinymce/js/tinymce/tinymce.js app/assets/source/tinymce/tinymce.js`
|
39
38
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.
|
1
|
+
// 4.4.0 (2016-06-30)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -10580,6 +10580,11 @@ define("tinymce/dom/RangeUtils", [
|
|
10580
10580
|
container = container.childNodes[offset];
|
10581
10581
|
offset = 0;
|
10582
10582
|
|
10583
|
+
// Don't normalize non collapsed selections like <p>[a</p><table></table>]
|
10584
|
+
if (!collapsed && container === body.lastChild && container.nodeName === 'TABLE') {
|
10585
|
+
return;
|
10586
|
+
}
|
10587
|
+
|
10583
10588
|
if (hasContentEditableFalseParent(container) || isCaretContainer(container)) {
|
10584
10589
|
return;
|
10585
10590
|
}
|
@@ -17356,8 +17361,9 @@ define("tinymce/dom/Selection", [
|
|
17356
17361
|
"tinymce/dom/BookmarkManager",
|
17357
17362
|
"tinymce/dom/NodeType",
|
17358
17363
|
"tinymce/Env",
|
17359
|
-
"tinymce/util/Tools"
|
17360
|
-
|
17364
|
+
"tinymce/util/Tools",
|
17365
|
+
"tinymce/caret/CaretPosition"
|
17366
|
+
], function(TreeWalker, TridentSelection, ControlSelection, RangeUtils, BookmarkManager, NodeType, Env, Tools, CaretPosition) {
|
17361
17367
|
var each = Tools.each, trim = Tools.trim;
|
17362
17368
|
var isIE = Env.ie;
|
17363
17369
|
|
@@ -18333,6 +18339,11 @@ define("tinymce/dom/Selection", [
|
|
18333
18339
|
}
|
18334
18340
|
},
|
18335
18341
|
|
18342
|
+
getBoundingClientRect: function() {
|
18343
|
+
var rng = this.getRng();
|
18344
|
+
return rng.collapsed ? CaretPosition.fromRangeStart(rng).getClientRects()[0] : rng.getBoundingClientRect();
|
18345
|
+
},
|
18346
|
+
|
18336
18347
|
destroy: function() {
|
18337
18348
|
this.win = null;
|
18338
18349
|
this.controlSelection.destroy();
|
@@ -21420,6 +21431,7 @@ define("tinymce/UndoManager", [
|
|
21420
21431
|
data = [];
|
21421
21432
|
index = 0;
|
21422
21433
|
self.typing = false;
|
21434
|
+
self.data = data;
|
21423
21435
|
editor.fire('ClearUndos');
|
21424
21436
|
},
|
21425
21437
|
|
@@ -21445,13 +21457,14 @@ define("tinymce/UndoManager", [
|
|
21445
21457
|
},
|
21446
21458
|
|
21447
21459
|
/**
|
21448
|
-
* Executes the specified function
|
21460
|
+
* Executes the specified mutator function as an undo transaction. The selection
|
21449
21461
|
* before the modification will be stored to the undo stack and if the DOM changes
|
21450
21462
|
* it will add a new undo level. Any methods within the translation that adds undo levels will
|
21451
21463
|
* be ignored. So a translation can include calls to execCommand or editor.insertContent.
|
21452
21464
|
*
|
21453
21465
|
* @method transact
|
21454
|
-
* @param {function} callback Function
|
21466
|
+
* @param {function} callback Function that gets executed and has dom manipulation logic in it.
|
21467
|
+
* @return {Object} Undo level that got added or null it a level wasn't needed.
|
21455
21468
|
*/
|
21456
21469
|
transact: function(callback) {
|
21457
21470
|
self.beforeChange();
|
@@ -21463,7 +21476,31 @@ define("tinymce/UndoManager", [
|
|
21463
21476
|
locks--;
|
21464
21477
|
}
|
21465
21478
|
|
21466
|
-
self.add();
|
21479
|
+
return self.add();
|
21480
|
+
},
|
21481
|
+
|
21482
|
+
/**
|
21483
|
+
* Adds an extra "hidden" undo level by first applying the first mutation and store that to the undo stack
|
21484
|
+
* then roll back that change and do the second mutation on top of the stack. This will produce an extra
|
21485
|
+
* undo level that the user doesn't see until they undo.
|
21486
|
+
*
|
21487
|
+
* @method extra
|
21488
|
+
* @param {function} callback1 Function that does mutation but gets stored as a "hidden" extra undo level.
|
21489
|
+
* @param {function} callback2 Function that does mutation but gets displayed to the user.
|
21490
|
+
*/
|
21491
|
+
extra: function (callback1, callback2) {
|
21492
|
+
var lastLevel, bookmark;
|
21493
|
+
|
21494
|
+
if (self.transact(callback1)) {
|
21495
|
+
bookmark = data[index].bookmark;
|
21496
|
+
lastLevel = data[index - 1];
|
21497
|
+
editor.setContent(lastLevel.content, {format: 'raw'});
|
21498
|
+
editor.selection.moveToBookmark(lastLevel.beforeBookmark);
|
21499
|
+
|
21500
|
+
if (self.transact(callback2)) {
|
21501
|
+
data[index - 1].beforeBookmark = bookmark;
|
21502
|
+
}
|
21503
|
+
}
|
21467
21504
|
}
|
21468
21505
|
};
|
21469
21506
|
|
@@ -23050,9 +23087,9 @@ define("tinymce/InsertContent", [
|
|
23050
23087
|
], function(Env, Tools, Serializer, CaretWalker, CaretPosition, ElementUtils, NodeType, InsertList) {
|
23051
23088
|
var isTableCell = NodeType.matchNodeNames('td th');
|
23052
23089
|
|
23053
|
-
var
|
23090
|
+
var insertHtmlAtCaret = function(editor, value, details) {
|
23054
23091
|
var parser, serializer, parentNode, rootNode, fragment, args;
|
23055
|
-
var marker, rng, node, node2, bookmarkHtml, merge
|
23092
|
+
var marker, rng, node, node2, bookmarkHtml, merge;
|
23056
23093
|
var textInlineElements = editor.schema.getTextInlineElements();
|
23057
23094
|
var selection = editor.selection, dom = editor.dom;
|
23058
23095
|
|
@@ -23109,25 +23146,13 @@ define("tinymce/InsertContent", [
|
|
23109
23146
|
}
|
23110
23147
|
}
|
23111
23148
|
|
23112
|
-
function markInlineFormatElements(fragment) {
|
23113
|
-
if (merge) {
|
23114
|
-
for (node = fragment.firstChild; node; node = node.walk(true)) {
|
23115
|
-
if (textInlineElements[node.name]) {
|
23116
|
-
node.attr('data-mce-new', "true");
|
23117
|
-
}
|
23118
|
-
}
|
23119
|
-
}
|
23120
|
-
}
|
23121
|
-
|
23122
23149
|
function reduceInlineTextElements() {
|
23123
23150
|
if (merge) {
|
23124
23151
|
var root = editor.getBody(), elementUtils = new ElementUtils(dom);
|
23125
23152
|
|
23126
|
-
Tools.each(dom.select('*[data-mce-
|
23127
|
-
node.removeAttribute('data-mce-new');
|
23128
|
-
|
23153
|
+
Tools.each(dom.select('*[data-mce-fragment]'), function(node) {
|
23129
23154
|
for (var testNode = node.parentNode; testNode && testNode != root; testNode = testNode.parentNode) {
|
23130
|
-
if (elementUtils.compare(testNode, node)) {
|
23155
|
+
if (textInlineElements[node.nodeName.toLowerCase()] && elementUtils.compare(testNode, node)) {
|
23131
23156
|
dom.remove(node, true);
|
23132
23157
|
}
|
23133
23158
|
}
|
@@ -23241,12 +23266,6 @@ define("tinymce/InsertContent", [
|
|
23241
23266
|
selection.setRng(rng);
|
23242
23267
|
}
|
23243
23268
|
|
23244
|
-
if (typeof value != 'string') {
|
23245
|
-
merge = value.merge;
|
23246
|
-
data = value.data;
|
23247
|
-
value = value.content;
|
23248
|
-
}
|
23249
|
-
|
23250
23269
|
// Check for whitespace before/after value
|
23251
23270
|
if (/^ | $/.test(value)) {
|
23252
23271
|
value = trimOrPaddLeftRight(value);
|
@@ -23254,6 +23273,8 @@ define("tinymce/InsertContent", [
|
|
23254
23273
|
|
23255
23274
|
// Setup parser and serializer
|
23256
23275
|
parser = editor.parser;
|
23276
|
+
merge = details.merge;
|
23277
|
+
|
23257
23278
|
serializer = new Serializer({
|
23258
23279
|
validate: editor.settings.validate
|
23259
23280
|
}, editor.schema);
|
@@ -23297,7 +23318,7 @@ define("tinymce/InsertContent", [
|
|
23297
23318
|
parentNode = selection.getNode();
|
23298
23319
|
|
23299
23320
|
// Parse the fragment within the context of the parent node
|
23300
|
-
var parserArgs = {context: parentNode.nodeName.toLowerCase(), data: data};
|
23321
|
+
var parserArgs = {context: parentNode.nodeName.toLowerCase(), data: details.data};
|
23301
23322
|
fragment = parser.parse(value, parserArgs);
|
23302
23323
|
|
23303
23324
|
// Custom handling of lists
|
@@ -23309,7 +23330,6 @@ define("tinymce/InsertContent", [
|
|
23309
23330
|
}
|
23310
23331
|
|
23311
23332
|
markFragmentElements(fragment);
|
23312
|
-
markInlineFormatElements(fragment);
|
23313
23333
|
|
23314
23334
|
// Move the caret to a more suitable location
|
23315
23335
|
node = fragment.lastChild;
|
@@ -23388,6 +23408,34 @@ define("tinymce/InsertContent", [
|
|
23388
23408
|
editor.addVisual();
|
23389
23409
|
};
|
23390
23410
|
|
23411
|
+
var processValue = function (value) {
|
23412
|
+
var details;
|
23413
|
+
|
23414
|
+
if (typeof value !== 'string') {
|
23415
|
+
details = Tools.extend({
|
23416
|
+
paste: value.paste,
|
23417
|
+
data: {
|
23418
|
+
paste: value.paste
|
23419
|
+
}
|
23420
|
+
}, value);
|
23421
|
+
|
23422
|
+
return {
|
23423
|
+
content: value.content,
|
23424
|
+
details: details
|
23425
|
+
};
|
23426
|
+
}
|
23427
|
+
|
23428
|
+
return {
|
23429
|
+
content: value,
|
23430
|
+
details: {}
|
23431
|
+
};
|
23432
|
+
};
|
23433
|
+
|
23434
|
+
var insertAtCaret = function (editor, value) {
|
23435
|
+
var result = processValue(value);
|
23436
|
+
insertHtmlAtCaret(editor, result.content, result.details);
|
23437
|
+
};
|
23438
|
+
|
23391
23439
|
return {
|
23392
23440
|
insertAtCaret: insertAtCaret
|
23393
23441
|
};
|
@@ -31802,8 +31850,10 @@ define("tinymce/util/Quirks", [
|
|
31802
31850
|
"tinymce/Env",
|
31803
31851
|
"tinymce/util/Tools",
|
31804
31852
|
"tinymce/util/Delay",
|
31805
|
-
"tinymce/caret/CaretContainer"
|
31806
|
-
|
31853
|
+
"tinymce/caret/CaretContainer",
|
31854
|
+
"tinymce/caret/CaretPosition",
|
31855
|
+
"tinymce/caret/CaretWalker"
|
31856
|
+
], function(VK, RangeUtils, TreeWalker, NodePath, Node, Entities, Env, Tools, Delay, CaretContainer, CaretPosition, CaretWalker) {
|
31807
31857
|
return function(editor) {
|
31808
31858
|
var each = Tools.each, $ = editor.$;
|
31809
31859
|
var BACKSPACE = VK.BACKSPACE, DELETE = VK.DELETE, dom = editor.dom, selection = editor.selection,
|
@@ -33435,6 +33485,46 @@ define("tinymce/util/Quirks", [
|
|
33435
33485
|
return (!sel || !sel.rangeCount || sel.rangeCount === 0);
|
33436
33486
|
}
|
33437
33487
|
|
33488
|
+
/**
|
33489
|
+
* Properly empties the editor if all contents is selected and deleted this to
|
33490
|
+
* prevent empty paragraphs from being produced at beginning/end of contents.
|
33491
|
+
*/
|
33492
|
+
function emptyEditorOnDeleteEverything() {
|
33493
|
+
function isEverythingSelected(editor) {
|
33494
|
+
var caretWalker = new CaretWalker(editor.getBody());
|
33495
|
+
var rng = editor.selection.getRng();
|
33496
|
+
var startCaretPos = CaretPosition.fromRangeStart(rng);
|
33497
|
+
var endCaretPos = CaretPosition.fromRangeEnd(rng);
|
33498
|
+
|
33499
|
+
return !editor.selection.isCollapsed() && !caretWalker.prev(startCaretPos) && !caretWalker.next(endCaretPos);
|
33500
|
+
}
|
33501
|
+
|
33502
|
+
// Type over case delete and insert this won't cover typeover with a IME but at least it covers the common case
|
33503
|
+
editor.on('keypress', function (e) {
|
33504
|
+
if (!isDefaultPrevented(e) && !selection.isCollapsed() && e.charCode > 31 && !VK.metaKeyPressed(e)) {
|
33505
|
+
if (isEverythingSelected(editor)) {
|
33506
|
+
e.preventDefault();
|
33507
|
+
editor.setContent(String.fromCharCode(e.charCode));
|
33508
|
+
editor.selection.select(editor.getBody(), true);
|
33509
|
+
editor.selection.collapse(false);
|
33510
|
+
editor.nodeChanged();
|
33511
|
+
}
|
33512
|
+
}
|
33513
|
+
});
|
33514
|
+
|
33515
|
+
editor.on('keydown', function (e) {
|
33516
|
+
var keyCode = e.keyCode;
|
33517
|
+
|
33518
|
+
if (!isDefaultPrevented(e) && (keyCode == DELETE || keyCode == BACKSPACE)) {
|
33519
|
+
if (isEverythingSelected(editor)) {
|
33520
|
+
e.preventDefault();
|
33521
|
+
editor.setContent('');
|
33522
|
+
editor.nodeChanged();
|
33523
|
+
}
|
33524
|
+
}
|
33525
|
+
});
|
33526
|
+
}
|
33527
|
+
|
33438
33528
|
// All browsers
|
33439
33529
|
removeBlockQuoteOnBackSpace();
|
33440
33530
|
emptyEditorWhenDeleting();
|
@@ -33447,6 +33537,7 @@ define("tinymce/util/Quirks", [
|
|
33447
33537
|
|
33448
33538
|
// WebKit
|
33449
33539
|
if (isWebKit) {
|
33540
|
+
emptyEditorOnDeleteEverything();
|
33450
33541
|
cleanupStylesWhenDeleting();
|
33451
33542
|
inputMethodFocus();
|
33452
33543
|
selectControlElements();
|
@@ -33454,6 +33545,7 @@ define("tinymce/util/Quirks", [
|
|
33454
33545
|
blockFormSubmitInsideEditor();
|
33455
33546
|
disableBackspaceIntoATable();
|
33456
33547
|
removeAppleInterchangeBrs();
|
33548
|
+
|
33457
33549
|
//touchClickEvent();
|
33458
33550
|
|
33459
33551
|
// iOS
|
@@ -33491,6 +33583,7 @@ define("tinymce/util/Quirks", [
|
|
33491
33583
|
|
33492
33584
|
// Gecko
|
33493
33585
|
if (isGecko) {
|
33586
|
+
emptyEditorOnDeleteEverything();
|
33494
33587
|
removeHrOnBackspace();
|
33495
33588
|
focusBody();
|
33496
33589
|
removeStylesWhenDeletingAcrossBlockElements();
|
@@ -35584,6 +35677,7 @@ define("tinymce/DragDropOverrides", [
|
|
35584
35677
|
}
|
35585
35678
|
|
35586
35679
|
if (state.dragging) {
|
35680
|
+
editor._selectionOverrides.hideFakeCaret();
|
35587
35681
|
editor.selection.placeCaretAt(e.clientX, e.clientY);
|
35588
35682
|
|
35589
35683
|
clientX = state.clientX + deltaX - state.relX;
|
@@ -35612,8 +35706,8 @@ define("tinymce/DragDropOverrides", [
|
|
35612
35706
|
}
|
35613
35707
|
}
|
35614
35708
|
|
35615
|
-
function drop() {
|
35616
|
-
var
|
35709
|
+
function drop(evt) {
|
35710
|
+
var dropEvt;
|
35617
35711
|
|
35618
35712
|
if (state.dragging) {
|
35619
35713
|
// Hack for IE since it doesn't sync W3C Range with IE Specific range
|
@@ -35622,12 +35716,18 @@ define("tinymce/DragDropOverrides", [
|
|
35622
35716
|
if (isValidDropTarget(editor.selection.getNode())) {
|
35623
35717
|
var targetClone = state.element;
|
35624
35718
|
|
35625
|
-
|
35626
|
-
|
35719
|
+
// Pass along clientX, clientY if we have them
|
35720
|
+
dropEvt = editor.fire('drop', {
|
35721
|
+
targetClone: targetClone,
|
35722
|
+
clientX: evt.clientX,
|
35723
|
+
clientY: evt.clientY
|
35724
|
+
});
|
35725
|
+
|
35726
|
+
if (dropEvt.isDefaultPrevented()) {
|
35627
35727
|
return;
|
35628
35728
|
}
|
35629
35729
|
|
35630
|
-
targetClone =
|
35730
|
+
targetClone = dropEvt.targetClone;
|
35631
35731
|
|
35632
35732
|
editor.undoManager.transact(function() {
|
35633
35733
|
editor.insertContent(dom.getOuterHTML(targetClone));
|
@@ -35693,7 +35793,8 @@ define("tinymce/DragDropOverrides", [
|
|
35693
35793
|
|
35694
35794
|
// Blocks drop inside cE=false on IE
|
35695
35795
|
editor.on('drop', function(e) {
|
35696
|
-
|
35796
|
+
// FF doesn't pass out clientX/clientY for drop since this is for IE we just use null instead
|
35797
|
+
var realTarget = typeof e.clientX !== 'undefined' ? editor.getDoc().elementFromPoint(e.clientX, e.clientY) : null;
|
35697
35798
|
|
35698
35799
|
if (isContentEditableFalse(realTarget) || isContentEditableFalse(editor.dom.getContentEditableParent(realTarget))) {
|
35699
35800
|
e.preventDefault();
|
@@ -36169,8 +36270,8 @@ define("tinymce/SelectionOverrides", [
|
|
36169
36270
|
return toCaretPosition.toRange();
|
36170
36271
|
}
|
36171
36272
|
|
36172
|
-
function backspaceDelete(direction, beforeFn, range) {
|
36173
|
-
var node, caretPosition, peekCaretPosition;
|
36273
|
+
function backspaceDelete(direction, beforeFn, afterFn, range) {
|
36274
|
+
var node, caretPosition, peekCaretPosition, newCaretPosition;
|
36174
36275
|
|
36175
36276
|
if (!range.collapsed) {
|
36176
36277
|
node = getSelectedNode(range);
|
@@ -36181,6 +36282,11 @@ define("tinymce/SelectionOverrides", [
|
|
36181
36282
|
|
36182
36283
|
caretPosition = getNormalizedRangeEndPoint(direction, range);
|
36183
36284
|
|
36285
|
+
if (afterFn(caretPosition) && CaretContainer.isCaretContainerBlock(range.startContainer)) {
|
36286
|
+
newCaretPosition = direction == -1 ? caretWalker.prev(caretPosition) : caretWalker.next(caretPosition);
|
36287
|
+
return newCaretPosition ? renderRangeCaret(newCaretPosition.toRange()) : range;
|
36288
|
+
}
|
36289
|
+
|
36184
36290
|
if (beforeFn(caretPosition)) {
|
36185
36291
|
return renderRangeCaret(deleteContentEditableNode(caretPosition.getNode(direction == -1)));
|
36186
36292
|
}
|
@@ -36198,8 +36304,8 @@ define("tinymce/SelectionOverrides", [
|
|
36198
36304
|
function registerEvents() {
|
36199
36305
|
var right = curry(moveH, 1, getNextVisualCaretPosition, isBeforeContentEditableFalse);
|
36200
36306
|
var left = curry(moveH, -1, getPrevVisualCaretPosition, isAfterContentEditableFalse);
|
36201
|
-
var deleteForward = curry(backspaceDelete, 1, isBeforeContentEditableFalse);
|
36202
|
-
var backspace = curry(backspaceDelete, -1, isAfterContentEditableFalse);
|
36307
|
+
var deleteForward = curry(backspaceDelete, 1, isBeforeContentEditableFalse, isAfterContentEditableFalse);
|
36308
|
+
var backspace = curry(backspaceDelete, -1, isAfterContentEditableFalse, isBeforeContentEditableFalse);
|
36203
36309
|
var up = curry(moveV, -1, LineWalker.upUntil);
|
36204
36310
|
var down = curry(moveV, 1, LineWalker.downUntil);
|
36205
36311
|
|
@@ -36562,7 +36668,6 @@ define("tinymce/SelectionOverrides", [
|
|
36562
36668
|
top: dom.getPos(node, editor.getBody()).y
|
36563
36669
|
});
|
36564
36670
|
|
36565
|
-
editor.getBody().focus();
|
36566
36671
|
$realSelectionContainer[0].focus();
|
36567
36672
|
sel = editor.selection.getSel();
|
36568
36673
|
sel.removeAllRanges();
|
@@ -36588,6 +36693,10 @@ define("tinymce/SelectionOverrides", [
|
|
36588
36693
|
selectedContentEditableNode = null;
|
36589
36694
|
}
|
36590
36695
|
|
36696
|
+
function hideFakeCaret() {
|
36697
|
+
fakeCaret.hide();
|
36698
|
+
}
|
36699
|
+
|
36591
36700
|
if (Env.ceFalse) {
|
36592
36701
|
registerEvents();
|
36593
36702
|
addCss();
|
@@ -36595,6 +36704,7 @@ define("tinymce/SelectionOverrides", [
|
|
36595
36704
|
|
36596
36705
|
return {
|
36597
36706
|
showBlockCaretContainer: showBlockCaretContainer,
|
36707
|
+
hideFakeCaret: hideFakeCaret,
|
36598
36708
|
destroy: destroy
|
36599
36709
|
};
|
36600
36710
|
}
|
@@ -36602,6 +36712,45 @@ define("tinymce/SelectionOverrides", [
|
|
36602
36712
|
return SelectionOverrides;
|
36603
36713
|
});
|
36604
36714
|
|
36715
|
+
// Included from: js/tinymce/classes/util/Uuid.js
|
36716
|
+
|
36717
|
+
/**
|
36718
|
+
* Uuid.js
|
36719
|
+
*
|
36720
|
+
* Released under LGPL License.
|
36721
|
+
* Copyright (c) 1999-2016 Ephox Corp. All rights reserved
|
36722
|
+
*
|
36723
|
+
* License: http://www.tinymce.com/license
|
36724
|
+
* Contributing: http://www.tinymce.com/contributing
|
36725
|
+
*/
|
36726
|
+
|
36727
|
+
/**
|
36728
|
+
* Generates unique ids.
|
36729
|
+
*
|
36730
|
+
* @class tinymce.util.Uuid
|
36731
|
+
* @private
|
36732
|
+
*/
|
36733
|
+
define("tinymce/util/Uuid", [
|
36734
|
+
], function() {
|
36735
|
+
var count = 0;
|
36736
|
+
|
36737
|
+
var seed = function () {
|
36738
|
+
var rnd = function () {
|
36739
|
+
return Math.round(Math.random() * 0xFFFFFFFF).toString(36);
|
36740
|
+
};
|
36741
|
+
|
36742
|
+
return 's' + Date.now().toString(36) + rnd() + rnd() + rnd();
|
36743
|
+
};
|
36744
|
+
|
36745
|
+
var uuid = function (prefix) {
|
36746
|
+
return prefix + (count++) + seed();
|
36747
|
+
};
|
36748
|
+
|
36749
|
+
return {
|
36750
|
+
uuid: uuid
|
36751
|
+
};
|
36752
|
+
});
|
36753
|
+
|
36605
36754
|
// Included from: js/tinymce/classes/Editor.js
|
36606
36755
|
|
36607
36756
|
/**
|
@@ -36675,13 +36824,14 @@ define("tinymce/Editor", [
|
|
36675
36824
|
"tinymce/Mode",
|
36676
36825
|
"tinymce/Shortcuts",
|
36677
36826
|
"tinymce/EditorUpload",
|
36678
|
-
"tinymce/SelectionOverrides"
|
36827
|
+
"tinymce/SelectionOverrides",
|
36828
|
+
"tinymce/util/Uuid"
|
36679
36829
|
], function(
|
36680
36830
|
DOMUtils, DomQuery, AddOnManager, NodeChange, Node, DomSerializer, Serializer,
|
36681
36831
|
Selection, Formatter, UndoManager, EnterKey, ForceBlocks, EditorCommands,
|
36682
36832
|
URI, ScriptLoader, EventUtils, WindowManager, NotificationManager,
|
36683
36833
|
Schema, DomParser, Quirks, Env, Tools, Delay, EditorObservable, Mode, Shortcuts, EditorUpload,
|
36684
|
-
SelectionOverrides
|
36834
|
+
SelectionOverrides, Uuid
|
36685
36835
|
) {
|
36686
36836
|
// Shorten these names
|
36687
36837
|
var DOM = DOMUtils.DOM, ThemeManager = AddOnManager.ThemeManager, PluginManager = AddOnManager.PluginManager;
|
@@ -36857,6 +37007,7 @@ define("tinymce/Editor", [
|
|
36857
37007
|
self.suffix = editorManager.suffix;
|
36858
37008
|
self.editorManager = editorManager;
|
36859
37009
|
self.inline = settings.inline;
|
37010
|
+
self.settings.content_editable = self.inline;
|
36860
37011
|
|
36861
37012
|
if (settings.cache_suffix) {
|
36862
37013
|
Env.cacheSuffix = settings.cache_suffix.replace(/^[\?\&]+/, '');
|
@@ -37974,6 +38125,7 @@ define("tinymce/Editor", [
|
|
37974
38125
|
}
|
37975
38126
|
|
37976
38127
|
self.contextToolbars.push({
|
38128
|
+
id: Uuid.uuid('mcet'),
|
37977
38129
|
predicate: predicate,
|
37978
38130
|
items: items
|
37979
38131
|
});
|
@@ -39149,9 +39301,9 @@ define("tinymce/FocusManager", [
|
|
39149
39301
|
// Gecko doesn't have the "selectionchange" event we need to do this. Fixes: #6843
|
39150
39302
|
if (editor.inline && !documentMouseUpHandler) {
|
39151
39303
|
documentMouseUpHandler = function(e) {
|
39152
|
-
var activeEditor = editorManager.activeEditor;
|
39304
|
+
var activeEditor = editorManager.activeEditor, dom = activeEditor.dom;
|
39153
39305
|
|
39154
|
-
if (activeEditor.inline && !
|
39306
|
+
if (activeEditor.inline && dom && !dom.isChildOf(e.target, activeEditor.getBody())) {
|
39155
39307
|
var rng = activeEditor.selection.getRng();
|
39156
39308
|
|
39157
39309
|
if (!rng.collapsed) {
|
@@ -39318,7 +39470,7 @@ define("tinymce/EditorManager", [
|
|
39318
39470
|
* @property minorVersion
|
39319
39471
|
* @type String
|
39320
39472
|
*/
|
39321
|
-
minorVersion: '
|
39473
|
+
minorVersion: '4.0',
|
39322
39474
|
|
39323
39475
|
/**
|
39324
39476
|
* Release date of TinyMCE build.
|
@@ -39326,7 +39478,7 @@ define("tinymce/EditorManager", [
|
|
39326
39478
|
* @property releaseDate
|
39327
39479
|
* @type String
|
39328
39480
|
*/
|
39329
|
-
releaseDate: '2016-06-
|
39481
|
+
releaseDate: '2016-06-30',
|
39330
39482
|
|
39331
39483
|
/**
|
39332
39484
|
* Collection of editor instances.
|
@@ -39491,7 +39643,24 @@ define("tinymce/EditorManager", [
|
|
39491
39643
|
* });
|
39492
39644
|
*/
|
39493
39645
|
init: function(settings) {
|
39494
|
-
var self = this, result;
|
39646
|
+
var self = this, result, invalidInlineTargets;
|
39647
|
+
|
39648
|
+
invalidInlineTargets = Tools.makeMap(
|
39649
|
+
'area base basefont br col frame hr img input isindex link meta param embed source wbr track ' +
|
39650
|
+
'colgroup option tbody tfoot thead tr script noscript style textarea video audio iframe object menu',
|
39651
|
+
' '
|
39652
|
+
);
|
39653
|
+
|
39654
|
+
function isInvalidInlineTarget(settings, elm) {
|
39655
|
+
return settings.inline && elm.tagName.toLowerCase() in invalidInlineTargets;
|
39656
|
+
}
|
39657
|
+
|
39658
|
+
function report(msg, elm) {
|
39659
|
+
// Log in a non test environment
|
39660
|
+
if (window.console && !window.test) {
|
39661
|
+
window.console.log(msg, elm);
|
39662
|
+
}
|
39663
|
+
}
|
39495
39664
|
|
39496
39665
|
function createId(elm) {
|
39497
39666
|
var id = elm.id;
|
@@ -39637,7 +39806,11 @@ define("tinymce/EditorManager", [
|
|
39637
39806
|
});
|
39638
39807
|
|
39639
39808
|
each(targets, function(elm) {
|
39640
|
-
|
39809
|
+
if (isInvalidInlineTarget(settings, elm)) {
|
39810
|
+
report('Could not initialize inline editor on invalid inline target element', elm);
|
39811
|
+
} else {
|
39812
|
+
createEditor(createId(elm), settings, elm);
|
39813
|
+
}
|
39641
39814
|
});
|
39642
39815
|
}
|
39643
39816
|
|