tinymce-rails 4.3.13 → 4.4.0
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 +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
|
|