tinymce-rails 4.2.4 → 4.2.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/assets/source/tinymce/tinymce.jquery.js +500 -323
- data/app/assets/source/tinymce/tinymce.js +500 -323
- data/lib/tinymce/rails/version.rb +2 -2
- data/vendor/assets/javascripts/tinymce/plugins/charmap/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/image/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/imagetools/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/legacyoutput/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/link/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/media/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/pagebreak/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/paste/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/spellchecker/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/plugins/table/plugin.js +1 -1
- data/vendor/assets/javascripts/tinymce/skins/lightgray/skin.min.css +1 -1
- data/vendor/assets/javascripts/tinymce/themes/modern/theme.js +1 -1
- data/vendor/assets/javascripts/tinymce/tinymce.jquery.js +11 -11
- data/vendor/assets/javascripts/tinymce/tinymce.js +12 -12
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3858cb936d4e85659b5facc333f2cc0fa4675043
|
4
|
+
data.tar.gz: a081a6dc4f51d3e344f323e3741622005151c0c2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2d660acc652e20e046697d1a54ca580f988827d07090ca502dd2c1aafa427d569b536eeac446fecb9718db4b02f1be9799f2ec4fb95603bdd0253e7b2a234a57
|
7
|
+
data.tar.gz: 570e2829d350c7fa44164b0299667dbf76d1ef8e04665cc59f1532f9eaba8a5180164b3be7a1eb6e58462cd6c2482f93b5c361d316c5370d1591850a919d4e40
|
@@ -1,4 +1,4 @@
|
|
1
|
-
// 4.2.
|
1
|
+
// 4.2.5 (2015-08-31)
|
2
2
|
|
3
3
|
/**
|
4
4
|
* Compiled inline version. (Library mode)
|
@@ -65,10 +65,12 @@
|
|
65
65
|
}
|
66
66
|
|
67
67
|
function expose(ids) {
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
68
|
+
var i, target, id, fragments, privateModules;
|
69
|
+
|
70
|
+
for (i = 0; i < ids.length; i++) {
|
71
|
+
target = exports;
|
72
|
+
id = ids[i];
|
73
|
+
fragments = id.split(/[.\/]/);
|
72
74
|
|
73
75
|
for (var fi = 0; fi < fragments.length - 1; ++fi) {
|
74
76
|
if (target[fragments[fi]] === undefined) {
|
@@ -80,6 +82,21 @@
|
|
80
82
|
|
81
83
|
target[fragments[fragments.length - 1]] = modules[id];
|
82
84
|
}
|
85
|
+
|
86
|
+
// Expose private modules for unit tests
|
87
|
+
if (exports.AMDLC_TESTS) {
|
88
|
+
privateModules = exports.privateModules || {};
|
89
|
+
|
90
|
+
for (id in modules) {
|
91
|
+
privateModules[id] = modules[id];
|
92
|
+
}
|
93
|
+
|
94
|
+
for (i = 0; i < ids.length; i++) {
|
95
|
+
delete privateModules[ids[i]];
|
96
|
+
}
|
97
|
+
|
98
|
+
exports.privateModules = privateModules;
|
99
|
+
}
|
83
100
|
}
|
84
101
|
|
85
102
|
// Included from: js/tinymce/classes/dom/EventUtils.js
|
@@ -841,6 +858,134 @@ define("tinymce/Env", [], function() {
|
|
841
858
|
};
|
842
859
|
});
|
843
860
|
|
861
|
+
// Included from: js/tinymce/classes/util/Arr.js
|
862
|
+
|
863
|
+
/**
|
864
|
+
* Arr.js
|
865
|
+
*
|
866
|
+
* Released under LGPL License.
|
867
|
+
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
|
868
|
+
*
|
869
|
+
* License: http://www.tinymce.com/license
|
870
|
+
* Contributing: http://www.tinymce.com/contributing
|
871
|
+
*/
|
872
|
+
|
873
|
+
/**
|
874
|
+
* Array utility class.
|
875
|
+
*
|
876
|
+
* @private
|
877
|
+
* @class tinymce.util.Arr
|
878
|
+
*/
|
879
|
+
define("tinymce/util/Arr", [], function() {
|
880
|
+
var isArray = Array.isArray || function(obj) {
|
881
|
+
return Object.prototype.toString.call(obj) === "[object Array]";
|
882
|
+
};
|
883
|
+
|
884
|
+
function toArray(obj) {
|
885
|
+
var array = obj, i, l;
|
886
|
+
|
887
|
+
if (!isArray(obj)) {
|
888
|
+
array = [];
|
889
|
+
for (i = 0, l = obj.length; i < l; i++) {
|
890
|
+
array[i] = obj[i];
|
891
|
+
}
|
892
|
+
}
|
893
|
+
|
894
|
+
return array;
|
895
|
+
}
|
896
|
+
|
897
|
+
function each(o, cb, s) {
|
898
|
+
var n, l;
|
899
|
+
|
900
|
+
if (!o) {
|
901
|
+
return 0;
|
902
|
+
}
|
903
|
+
|
904
|
+
s = s || o;
|
905
|
+
|
906
|
+
if (o.length !== undefined) {
|
907
|
+
// Indexed arrays, needed for Safari
|
908
|
+
for (n = 0, l = o.length; n < l; n++) {
|
909
|
+
if (cb.call(s, o[n], n, o) === false) {
|
910
|
+
return 0;
|
911
|
+
}
|
912
|
+
}
|
913
|
+
} else {
|
914
|
+
// Hashtables
|
915
|
+
for (n in o) {
|
916
|
+
if (o.hasOwnProperty(n)) {
|
917
|
+
if (cb.call(s, o[n], n, o) === false) {
|
918
|
+
return 0;
|
919
|
+
}
|
920
|
+
}
|
921
|
+
}
|
922
|
+
}
|
923
|
+
|
924
|
+
return 1;
|
925
|
+
}
|
926
|
+
|
927
|
+
function map(array, callback) {
|
928
|
+
var out = [];
|
929
|
+
|
930
|
+
each(array, function(item, index) {
|
931
|
+
out.push(callback(item, index, array));
|
932
|
+
});
|
933
|
+
|
934
|
+
return out;
|
935
|
+
}
|
936
|
+
|
937
|
+
function filter(a, f) {
|
938
|
+
var o = [];
|
939
|
+
|
940
|
+
each(a, function(v) {
|
941
|
+
if (!f || f(v)) {
|
942
|
+
o.push(v);
|
943
|
+
}
|
944
|
+
});
|
945
|
+
|
946
|
+
return o;
|
947
|
+
}
|
948
|
+
|
949
|
+
function indexOf(a, v) {
|
950
|
+
var i, l;
|
951
|
+
|
952
|
+
if (a) {
|
953
|
+
for (i = 0, l = a.length; i < l; i++) {
|
954
|
+
if (a[i] === v) {
|
955
|
+
return i;
|
956
|
+
}
|
957
|
+
}
|
958
|
+
}
|
959
|
+
|
960
|
+
return -1;
|
961
|
+
}
|
962
|
+
|
963
|
+
function reduce(collection, iteratee, accumulator, thisArg) {
|
964
|
+
var i = 0;
|
965
|
+
|
966
|
+
if (arguments.length < 3) {
|
967
|
+
accumulator = collection[0];
|
968
|
+
i = 1;
|
969
|
+
}
|
970
|
+
|
971
|
+
for (; i < collection.length; i++) {
|
972
|
+
accumulator = iteratee.call(thisArg, accumulator, collection[i], i);
|
973
|
+
}
|
974
|
+
|
975
|
+
return accumulator;
|
976
|
+
}
|
977
|
+
|
978
|
+
return {
|
979
|
+
isArray: isArray,
|
980
|
+
toArray: toArray,
|
981
|
+
each: each,
|
982
|
+
map: map,
|
983
|
+
filter: filter,
|
984
|
+
indexOf: indexOf,
|
985
|
+
reduce: reduce
|
986
|
+
};
|
987
|
+
});
|
988
|
+
|
844
989
|
// Included from: js/tinymce/classes/util/Tools.js
|
845
990
|
|
846
991
|
/**
|
@@ -860,8 +1005,9 @@ define("tinymce/Env", [], function() {
|
|
860
1005
|
* @class tinymce.util.Tools
|
861
1006
|
*/
|
862
1007
|
define("tinymce/util/Tools", [
|
863
|
-
"tinymce/Env"
|
864
|
-
|
1008
|
+
"tinymce/Env",
|
1009
|
+
"tinymce/util/Arr"
|
1010
|
+
], function(Env, Arr) {
|
865
1011
|
/**
|
866
1012
|
* Removes whitespace from the beginning and end of a string.
|
867
1013
|
*
|
@@ -875,17 +1021,6 @@ define("tinymce/util/Tools", [
|
|
875
1021
|
return (str === null || str === undefined) ? '' : ("" + str).replace(whiteSpaceRegExp, '');
|
876
1022
|
}
|
877
1023
|
|
878
|
-
/**
|
879
|
-
* Returns true/false if the object is an array or not.
|
880
|
-
*
|
881
|
-
* @method isArray
|
882
|
-
* @param {Object} obj Object to check.
|
883
|
-
* @return {boolean} true/false state if the object is an array or not.
|
884
|
-
*/
|
885
|
-
var isArray = Array.isArray || function(obj) {
|
886
|
-
return Object.prototype.toString.call(obj) === "[object Array]";
|
887
|
-
};
|
888
|
-
|
889
1024
|
/**
|
890
1025
|
* Checks if a object is of a specific type for example an array.
|
891
1026
|
*
|
@@ -899,33 +1034,13 @@ define("tinymce/util/Tools", [
|
|
899
1034
|
return obj !== undefined;
|
900
1035
|
}
|
901
1036
|
|
902
|
-
if (type == 'array' && isArray(obj)) {
|
1037
|
+
if (type == 'array' && Arr.isArray(obj)) {
|
903
1038
|
return true;
|
904
1039
|
}
|
905
1040
|
|
906
1041
|
return typeof obj == type;
|
907
1042
|
}
|
908
1043
|
|
909
|
-
/**
|
910
|
-
* Converts the specified object into a real JavaScript array.
|
911
|
-
*
|
912
|
-
* @method toArray
|
913
|
-
* @param {Object} obj Object to convert into array.
|
914
|
-
* @return {Array} Array object based in input.
|
915
|
-
*/
|
916
|
-
function toArray(obj) {
|
917
|
-
var array = obj, i, l;
|
918
|
-
|
919
|
-
if (!isArray(obj)) {
|
920
|
-
array = [];
|
921
|
-
for (i = 0, l = obj.length; i < l; i++) {
|
922
|
-
array[i] = obj[i];
|
923
|
-
}
|
924
|
-
}
|
925
|
-
|
926
|
-
return array;
|
927
|
-
}
|
928
|
-
|
929
1044
|
/**
|
930
1045
|
* Makes a name/object map out of an array with names.
|
931
1046
|
*
|
@@ -955,99 +1070,6 @@ define("tinymce/util/Tools", [
|
|
955
1070
|
return map;
|
956
1071
|
}
|
957
1072
|
|
958
|
-
/**
|
959
|
-
* Performs an iteration of all items in a collection such as an object or array. This method will execure the
|
960
|
-
* callback function for each item in the collection, if the callback returns false the iteration will terminate.
|
961
|
-
* The callback has the following format: cb(value, key_or_index).
|
962
|
-
*
|
963
|
-
* @method each
|
964
|
-
* @param {Object} o Collection to iterate.
|
965
|
-
* @param {function} cb Callback function to execute for each item.
|
966
|
-
* @param {Object} s Optional scope to execute the callback in.
|
967
|
-
* @example
|
968
|
-
* // Iterate an array
|
969
|
-
* tinymce.each([1,2,3], function(v, i) {
|
970
|
-
* console.debug("Value: " + v + ", Index: " + i);
|
971
|
-
* });
|
972
|
-
*
|
973
|
-
* // Iterate an object
|
974
|
-
* tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
|
975
|
-
* console.debug("Value: " + v + ", Key: " + k);
|
976
|
-
* });
|
977
|
-
*/
|
978
|
-
function each(o, cb, s) {
|
979
|
-
var n, l;
|
980
|
-
|
981
|
-
if (!o) {
|
982
|
-
return 0;
|
983
|
-
}
|
984
|
-
|
985
|
-
s = s || o;
|
986
|
-
|
987
|
-
if (o.length !== undefined) {
|
988
|
-
// Indexed arrays, needed for Safari
|
989
|
-
for (n = 0, l = o.length; n < l; n++) {
|
990
|
-
if (cb.call(s, o[n], n, o) === false) {
|
991
|
-
return 0;
|
992
|
-
}
|
993
|
-
}
|
994
|
-
} else {
|
995
|
-
// Hashtables
|
996
|
-
for (n in o) {
|
997
|
-
if (o.hasOwnProperty(n)) {
|
998
|
-
if (cb.call(s, o[n], n, o) === false) {
|
999
|
-
return 0;
|
1000
|
-
}
|
1001
|
-
}
|
1002
|
-
}
|
1003
|
-
}
|
1004
|
-
|
1005
|
-
return 1;
|
1006
|
-
}
|
1007
|
-
|
1008
|
-
/**
|
1009
|
-
* Creates a new array by the return value of each iteration function call. This enables you to convert
|
1010
|
-
* one array list into another.
|
1011
|
-
*
|
1012
|
-
* @method map
|
1013
|
-
* @param {Array} array Array of items to iterate.
|
1014
|
-
* @param {function} callback Function to call for each item. It's return value will be the new value.
|
1015
|
-
* @return {Array} Array with new values based on function return values.
|
1016
|
-
*/
|
1017
|
-
function map(array, callback) {
|
1018
|
-
var out = [];
|
1019
|
-
|
1020
|
-
each(array, function(item) {
|
1021
|
-
out.push(callback(item));
|
1022
|
-
});
|
1023
|
-
|
1024
|
-
return out;
|
1025
|
-
}
|
1026
|
-
|
1027
|
-
/**
|
1028
|
-
* Filters out items from the input array by calling the specified function for each item.
|
1029
|
-
* If the function returns false the item will be excluded if it returns true it will be included.
|
1030
|
-
*
|
1031
|
-
* @method grep
|
1032
|
-
* @param {Array} a Array of items to loop though.
|
1033
|
-
* @param {function} f Function to call for each item. Include/exclude depends on it's return value.
|
1034
|
-
* @return {Array} New array with values imported and filtered based in input.
|
1035
|
-
* @example
|
1036
|
-
* // Filter out some items, this will return an array with 4 and 5
|
1037
|
-
* var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
|
1038
|
-
*/
|
1039
|
-
function grep(a, f) {
|
1040
|
-
var o = [];
|
1041
|
-
|
1042
|
-
each(a, function(v) {
|
1043
|
-
if (!f || f(v)) {
|
1044
|
-
o.push(v);
|
1045
|
-
}
|
1046
|
-
});
|
1047
|
-
|
1048
|
-
return o;
|
1049
|
-
}
|
1050
|
-
|
1051
1073
|
/**
|
1052
1074
|
* Creates a class, subclass or static singleton.
|
1053
1075
|
* More details on this method can be found in the Wiki.
|
@@ -1180,31 +1202,6 @@ define("tinymce/util/Tools", [
|
|
1180
1202
|
});
|
1181
1203
|
}
|
1182
1204
|
|
1183
|
-
/**
|
1184
|
-
* Returns the index of a value in an array, this method will return -1 if the item wasn't found.
|
1185
|
-
*
|
1186
|
-
* @method inArray
|
1187
|
-
* @param {Array} a Array/Object to search for value in.
|
1188
|
-
* @param {Object} v Value to check for inside the array.
|
1189
|
-
* @return {Number/String} Index of item inside the array inside an object. Or -1 if it wasn't found.
|
1190
|
-
* @example
|
1191
|
-
* // Get index of value in array this will alert 1 since 2 is at that index
|
1192
|
-
* alert(tinymce.inArray([1,2,3], 2));
|
1193
|
-
*/
|
1194
|
-
function inArray(a, v) {
|
1195
|
-
var i, l;
|
1196
|
-
|
1197
|
-
if (a) {
|
1198
|
-
for (i = 0, l = a.length; i < l; i++) {
|
1199
|
-
if (a[i] === v) {
|
1200
|
-
return i;
|
1201
|
-
}
|
1202
|
-
}
|
1203
|
-
}
|
1204
|
-
|
1205
|
-
return -1;
|
1206
|
-
}
|
1207
|
-
|
1208
1205
|
function extend(obj, ext) {
|
1209
1206
|
var i, l, name, args = arguments, value;
|
1210
1207
|
|
@@ -1241,7 +1238,7 @@ define("tinymce/util/Tools", [
|
|
1241
1238
|
o = o[n];
|
1242
1239
|
}
|
1243
1240
|
|
1244
|
-
each(o, function(o, i) {
|
1241
|
+
Arr.each(o, function(o, i) {
|
1245
1242
|
if (f.call(s, o, i, n) === false) {
|
1246
1243
|
return false;
|
1247
1244
|
}
|
@@ -1331,28 +1328,7 @@ define("tinymce/util/Tools", [
|
|
1331
1328
|
return s;
|
1332
1329
|
}
|
1333
1330
|
|
1334
|
-
return map(s.split(d || ','), trim);
|
1335
|
-
}
|
1336
|
-
|
1337
|
-
function constant(value) {
|
1338
|
-
return function() {
|
1339
|
-
return value;
|
1340
|
-
};
|
1341
|
-
}
|
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;
|
1331
|
+
return Arr.map(s.split(d || ','), trim);
|
1356
1332
|
}
|
1357
1333
|
|
1358
1334
|
function _addCacheSuffix(url) {
|
@@ -1367,23 +1343,90 @@ define("tinymce/util/Tools", [
|
|
1367
1343
|
|
1368
1344
|
return {
|
1369
1345
|
trim: trim,
|
1370
|
-
|
1346
|
+
|
1347
|
+
/**
|
1348
|
+
* Returns true/false if the object is an array or not.
|
1349
|
+
*
|
1350
|
+
* @method isArray
|
1351
|
+
* @param {Object} obj Object to check.
|
1352
|
+
* @return {boolean} true/false state if the object is an array or not.
|
1353
|
+
*/
|
1354
|
+
isArray: Arr.isArray,
|
1355
|
+
|
1371
1356
|
is: is,
|
1372
|
-
|
1357
|
+
|
1358
|
+
/**
|
1359
|
+
* Converts the specified object into a real JavaScript array.
|
1360
|
+
*
|
1361
|
+
* @method toArray
|
1362
|
+
* @param {Object} obj Object to convert into array.
|
1363
|
+
* @return {Array} Array object based in input.
|
1364
|
+
*/
|
1365
|
+
toArray: Arr.toArray,
|
1373
1366
|
makeMap: makeMap,
|
1374
|
-
|
1375
|
-
|
1376
|
-
|
1377
|
-
|
1378
|
-
|
1367
|
+
|
1368
|
+
/**
|
1369
|
+
* Performs an iteration of all items in a collection such as an object or array. This method will execure the
|
1370
|
+
* callback function for each item in the collection, if the callback returns false the iteration will terminate.
|
1371
|
+
* The callback has the following format: cb(value, key_or_index).
|
1372
|
+
*
|
1373
|
+
* @method each
|
1374
|
+
* @param {Object} o Collection to iterate.
|
1375
|
+
* @param {function} cb Callback function to execute for each item.
|
1376
|
+
* @param {Object} s Optional scope to execute the callback in.
|
1377
|
+
* @example
|
1378
|
+
* // Iterate an array
|
1379
|
+
* tinymce.each([1,2,3], function(v, i) {
|
1380
|
+
* console.debug("Value: " + v + ", Index: " + i);
|
1381
|
+
* });
|
1382
|
+
*
|
1383
|
+
* // Iterate an object
|
1384
|
+
* tinymce.each({a: 1, b: 2, c: 3], function(v, k) {
|
1385
|
+
* console.debug("Value: " + v + ", Key: " + k);
|
1386
|
+
* });
|
1387
|
+
*/
|
1388
|
+
each: Arr.each,
|
1389
|
+
|
1390
|
+
/**
|
1391
|
+
* Creates a new array by the return value of each iteration function call. This enables you to convert
|
1392
|
+
* one array list into another.
|
1393
|
+
*
|
1394
|
+
* @method map
|
1395
|
+
* @param {Array} array Array of items to iterate.
|
1396
|
+
* @param {function} callback Function to call for each item. It's return value will be the new value.
|
1397
|
+
* @return {Array} Array with new values based on function return values.
|
1398
|
+
*/
|
1399
|
+
map: Arr.map,
|
1400
|
+
|
1401
|
+
/**
|
1402
|
+
* Filters out items from the input array by calling the specified function for each item.
|
1403
|
+
* If the function returns false the item will be excluded if it returns true it will be included.
|
1404
|
+
*
|
1405
|
+
* @method grep
|
1406
|
+
* @param {Array} a Array of items to loop though.
|
1407
|
+
* @param {function} f Function to call for each item. Include/exclude depends on it's return value.
|
1408
|
+
* @return {Array} New array with values imported and filtered based in input.
|
1409
|
+
* @example
|
1410
|
+
* // Filter out some items, this will return an array with 4 and 5
|
1411
|
+
* var items = tinymce.grep([1,2,3,4,5], function(v) {return v > 3;});
|
1412
|
+
*/
|
1413
|
+
grep: Arr.filter,
|
1414
|
+
|
1415
|
+
/**
|
1416
|
+
* Returns true/false if the object is an array or not.
|
1417
|
+
*
|
1418
|
+
* @method isArray
|
1419
|
+
* @param {Object} obj Object to check.
|
1420
|
+
* @return {boolean} true/false state if the object is an array or not.
|
1421
|
+
*/
|
1422
|
+
inArray: Arr.indexOf,
|
1423
|
+
|
1379
1424
|
extend: extend,
|
1380
1425
|
create: create,
|
1381
1426
|
walk: walk,
|
1382
1427
|
createNS: createNS,
|
1383
1428
|
resolve: resolve,
|
1384
1429
|
explode: explode,
|
1385
|
-
constant: constant,
|
1386
|
-
reduce: reduce,
|
1387
1430
|
_addCacheSuffix: _addCacheSuffix
|
1388
1431
|
};
|
1389
1432
|
});
|
@@ -3433,6 +3476,12 @@ define("tinymce/dom/TreeWalker", [], function() {
|
|
3433
3476
|
* Contributing: http://www.tinymce.com/contributing
|
3434
3477
|
*/
|
3435
3478
|
|
3479
|
+
/**
|
3480
|
+
* Old IE Range.
|
3481
|
+
*
|
3482
|
+
* @private
|
3483
|
+
* @class tinymce.dom.Range
|
3484
|
+
*/
|
3436
3485
|
define("tinymce/dom/Range", [
|
3437
3486
|
"tinymce/util/Tools"
|
3438
3487
|
], function(Tools) {
|
@@ -7585,7 +7634,7 @@ define("tinymce/dom/RangeUtils", [
|
|
7585
7634
|
*/
|
7586
7635
|
|
7587
7636
|
/**
|
7588
|
-
* This class handles the nodechange event dispatching both manual and
|
7637
|
+
* This class handles the nodechange event dispatching both manual and through selection change events.
|
7589
7638
|
*
|
7590
7639
|
* @class tinymce.NodeChange
|
7591
7640
|
* @private
|
@@ -7687,7 +7736,7 @@ define("tinymce/NodeChange", [
|
|
7687
7736
|
});
|
7688
7737
|
|
7689
7738
|
/**
|
7690
|
-
*
|
7739
|
+
* Dispatches out a onNodeChange event to all observers. This method should be called when you
|
7691
7740
|
* need to update the UI states or element path etc.
|
7692
7741
|
*
|
7693
7742
|
* @method nodeChanged
|
@@ -11318,6 +11367,7 @@ define("tinymce/dom/Serializer", [
|
|
11318
11367
|
* Selection class for old explorer versions. This one fakes the
|
11319
11368
|
* native selection object available on modern browsers.
|
11320
11369
|
*
|
11370
|
+
* @private
|
11321
11371
|
* @class tinymce.dom.TridentSelection
|
11322
11372
|
*/
|
11323
11373
|
define("tinymce/dom/TridentSelection", [], function() {
|
@@ -13289,7 +13339,7 @@ define("tinymce/dom/Selection", [
|
|
13289
13339
|
* Collapse the selection to start or end of range.
|
13290
13340
|
*
|
13291
13341
|
* @method collapse
|
13292
|
-
* @param {Boolean} toStart Optional boolean state if to collapse to end or not. Defaults to
|
13342
|
+
* @param {Boolean} toStart Optional boolean state if to collapse to end or not. Defaults to false.
|
13293
13343
|
*/
|
13294
13344
|
collapse: function(toStart) {
|
13295
13345
|
var self = this, rng = self.getRng(), node;
|
@@ -13870,6 +13920,7 @@ define("tinymce/dom/Selection", [
|
|
13870
13920
|
* Utility class for various element specific functions.
|
13871
13921
|
*
|
13872
13922
|
* @private
|
13923
|
+
* @class tinymce.dom.ElementUtils
|
13873
13924
|
*/
|
13874
13925
|
define("tinymce/dom/ElementUtils", [
|
13875
13926
|
"tinymce/dom/BookmarkManager",
|
@@ -13992,8 +14043,8 @@ define("tinymce/dom/ElementUtils", [
|
|
13992
14043
|
* Example:
|
13993
14044
|
* Preview.getCssText(editor, 'bold');
|
13994
14045
|
*
|
13995
|
-
* @class tinymce.fmt.Preview
|
13996
14046
|
* @private
|
14047
|
+
* @class tinymce.fmt.Preview
|
13997
14048
|
*/
|
13998
14049
|
define("tinymce/fmt/Preview", [
|
13999
14050
|
"tinymce/util/Tools"
|
@@ -14142,8 +14193,8 @@ define("tinymce/fmt/Preview", [
|
|
14142
14193
|
|
14143
14194
|
/**
|
14144
14195
|
* Text formatter engine class. This class is used to apply formats like bold, italic, font size
|
14145
|
-
* etc to the current selection or specific nodes. This engine was
|
14146
|
-
* default formatting logic for execCommand due to
|
14196
|
+
* etc to the current selection or specific nodes. This engine was built to replace the browser's
|
14197
|
+
* default formatting logic for execCommand due to its inconsistent and buggy behavior.
|
14147
14198
|
*
|
14148
14199
|
* @class tinymce.Formatter
|
14149
14200
|
* @example
|
@@ -16485,7 +16536,7 @@ define("tinymce/Formatter", [
|
|
16485
16536
|
*/
|
16486
16537
|
|
16487
16538
|
/**
|
16488
|
-
* This class handles the undo/redo history levels for the editor. Since the
|
16539
|
+
* This class handles the undo/redo history levels for the editor. Since the built-in undo/redo has major drawbacks a custom one was needed.
|
16489
16540
|
*
|
16490
16541
|
* @class tinymce.UndoManager
|
16491
16542
|
*/
|
@@ -16868,6 +16919,9 @@ define("tinymce/UndoManager", [
|
|
16868
16919
|
|
16869
16920
|
/**
|
16870
16921
|
* Contains logic for handling the enter key to split/generate block elements.
|
16922
|
+
*
|
16923
|
+
* @private
|
16924
|
+
* @class tinymce.EnterKey
|
16871
16925
|
*/
|
16872
16926
|
define("tinymce/EnterKey", [
|
16873
16927
|
"tinymce/dom/TreeWalker",
|
@@ -17518,6 +17572,12 @@ define("tinymce/EnterKey", [
|
|
17518
17572
|
* Contributing: http://www.tinymce.com/contributing
|
17519
17573
|
*/
|
17520
17574
|
|
17575
|
+
/**
|
17576
|
+
* Makes sure that everything gets wrapped in paragraphs.
|
17577
|
+
*
|
17578
|
+
* @private
|
17579
|
+
* @class tinymce.ForceBlocks
|
17580
|
+
*/
|
17521
17581
|
define("tinymce/ForceBlocks", [], function() {
|
17522
17582
|
return function(editor) {
|
17523
17583
|
var settings = editor.settings, dom = editor.dom, selection = editor.selection;
|
@@ -19545,6 +19605,7 @@ define("tinymce/util/EventDispatcher", [
|
|
19545
19605
|
* This class gets dynamically extended to provide a binding between two models. This makes it possible to
|
19546
19606
|
* sync the state of two properties in two models by a layer of abstraction.
|
19547
19607
|
*
|
19608
|
+
* @private
|
19548
19609
|
* @class tinymce.data.Binding
|
19549
19610
|
*/
|
19550
19611
|
define("tinymce/data/Binding", [], function() {
|
@@ -19757,6 +19818,7 @@ define("tinymce/util/Observable", [
|
|
19757
19818
|
/**
|
19758
19819
|
* This class is a object that is observable when properties changes a change event gets emitted.
|
19759
19820
|
*
|
19821
|
+
* @private
|
19760
19822
|
* @class tinymce.data.ObservableObject
|
19761
19823
|
*/
|
19762
19824
|
define("tinymce/data/ObservableObject", [
|
@@ -19765,6 +19827,11 @@ define("tinymce/data/ObservableObject", [
|
|
19765
19827
|
"tinymce/util/Class",
|
19766
19828
|
"tinymce/util/Tools"
|
19767
19829
|
], function(Binding, Observable, Class, Tools) {
|
19830
|
+
function isNode(node) {
|
19831
|
+
return node.nodeType > 0;
|
19832
|
+
}
|
19833
|
+
|
19834
|
+
// Todo: Maybe this should be shallow compare since it might be huge object references
|
19768
19835
|
function isEqual(a, b) {
|
19769
19836
|
var k, checked;
|
19770
19837
|
|
@@ -19797,6 +19864,11 @@ define("tinymce/data/ObservableObject", [
|
|
19797
19864
|
}
|
19798
19865
|
}
|
19799
19866
|
|
19867
|
+
// Shallow compare nodes
|
19868
|
+
if (isNode(a) || isNode(b)) {
|
19869
|
+
return a === b;
|
19870
|
+
}
|
19871
|
+
|
19800
19872
|
// Compare objects
|
19801
19873
|
checked = {};
|
19802
19874
|
for (k in b) {
|
@@ -20753,6 +20825,12 @@ define("tinymce/ui/Collection", [
|
|
20753
20825
|
* Contributing: http://www.tinymce.com/contributing
|
20754
20826
|
*/
|
20755
20827
|
|
20828
|
+
/**
|
20829
|
+
* Private UI DomUtils proxy.
|
20830
|
+
*
|
20831
|
+
* @private
|
20832
|
+
* @class tinymce.ui.DomUtils
|
20833
|
+
*/
|
20756
20834
|
define("tinymce/ui/DomUtils", [
|
20757
20835
|
"tinymce/util/Tools",
|
20758
20836
|
"tinymce/dom/DOMUtils"
|
@@ -20860,6 +20938,7 @@ define("tinymce/ui/DomUtils", [
|
|
20860
20938
|
/**
|
20861
20939
|
* Utility class for box parsing and measuing.
|
20862
20940
|
*
|
20941
|
+
* @private
|
20863
20942
|
* @class tinymce.ui.BoxUtils
|
20864
20943
|
*/
|
20865
20944
|
define("tinymce/ui/BoxUtils", [
|
@@ -20960,6 +21039,7 @@ define("tinymce/ui/BoxUtils", [
|
|
20960
21039
|
/**
|
20961
21040
|
* Handles adding and removal of classes.
|
20962
21041
|
*
|
21042
|
+
* @private
|
20963
21043
|
* @class tinymce.ui.ClassList
|
20964
21044
|
*/
|
20965
21045
|
define("tinymce/ui/ClassList", [
|
@@ -25495,6 +25575,7 @@ define("tinymce/WindowManager", [
|
|
25495
25575
|
/**
|
25496
25576
|
* This file includes fixes for various browser quirks it's made to make it easy to add/remove browser specific fixes.
|
25497
25577
|
*
|
25578
|
+
* @private
|
25498
25579
|
* @class tinymce.util.Quirks
|
25499
25580
|
*/
|
25500
25581
|
define("tinymce/util/Quirks", [
|
@@ -27659,6 +27740,36 @@ define("tinymce/util/Promise", [], function() {
|
|
27659
27740
|
/* jshint ignore:end */
|
27660
27741
|
/* eslint-enable */
|
27661
27742
|
|
27743
|
+
// Included from: js/tinymce/classes/util/Fun.js
|
27744
|
+
|
27745
|
+
/**
|
27746
|
+
* Fun.js
|
27747
|
+
*
|
27748
|
+
* Released under LGPL License.
|
27749
|
+
* Copyright (c) 1999-2015 Ephox Corp. All rights reserved
|
27750
|
+
*
|
27751
|
+
* License: http://www.tinymce.com/license
|
27752
|
+
* Contributing: http://www.tinymce.com/contributing
|
27753
|
+
*/
|
27754
|
+
|
27755
|
+
/**
|
27756
|
+
* Functional utility class.
|
27757
|
+
*
|
27758
|
+
* @private
|
27759
|
+
* @class tinymce.util.Fun
|
27760
|
+
*/
|
27761
|
+
define("tinymce/util/Fun", [], function() {
|
27762
|
+
function constant(value) {
|
27763
|
+
return function() {
|
27764
|
+
return value;
|
27765
|
+
};
|
27766
|
+
}
|
27767
|
+
|
27768
|
+
return {
|
27769
|
+
constant: constant
|
27770
|
+
};
|
27771
|
+
});
|
27772
|
+
|
27662
27773
|
// Included from: js/tinymce/classes/file/Uploader.js
|
27663
27774
|
|
27664
27775
|
/**
|
@@ -27692,9 +27803,12 @@ define("tinymce/util/Promise", [], function() {
|
|
27692
27803
|
*/
|
27693
27804
|
define("tinymce/file/Uploader", [
|
27694
27805
|
"tinymce/util/Promise",
|
27695
|
-
"tinymce/util/Tools"
|
27696
|
-
|
27806
|
+
"tinymce/util/Tools",
|
27807
|
+
"tinymce/util/Fun"
|
27808
|
+
], function(Promise, Tools, Fun) {
|
27697
27809
|
return function(settings) {
|
27810
|
+
var cachedPromises = {};
|
27811
|
+
|
27698
27812
|
function fileName(blobInfo) {
|
27699
27813
|
var ext, extensions;
|
27700
27814
|
|
@@ -27723,7 +27837,7 @@ define("tinymce/file/Uploader", [
|
|
27723
27837
|
id: blobInfo.id,
|
27724
27838
|
blob: blobInfo.blob,
|
27725
27839
|
base64: blobInfo.base64,
|
27726
|
-
filename:
|
27840
|
+
filename: Fun.constant(fileName(blobInfo))
|
27727
27841
|
};
|
27728
27842
|
}
|
27729
27843
|
|
@@ -27731,8 +27845,8 @@ define("tinymce/file/Uploader", [
|
|
27731
27845
|
var xhr, formData;
|
27732
27846
|
|
27733
27847
|
xhr = new XMLHttpRequest();
|
27734
|
-
xhr.withCredentials = settings.credentials;
|
27735
27848
|
xhr.open('POST', settings.url);
|
27849
|
+
xhr.withCredentials = settings.credentials;
|
27736
27850
|
|
27737
27851
|
xhr.onload = function() {
|
27738
27852
|
var json;
|
@@ -27759,53 +27873,57 @@ define("tinymce/file/Uploader", [
|
|
27759
27873
|
}
|
27760
27874
|
|
27761
27875
|
function upload(blobInfos) {
|
27762
|
-
|
27763
|
-
var handler = settings.handler, queue, index = 0, uploadedIdMap = {};
|
27876
|
+
var promises;
|
27764
27877
|
|
27765
|
-
|
27766
|
-
|
27878
|
+
// If no url is configured then resolve
|
27879
|
+
if (!settings.url && settings.handler === defaultHandler) {
|
27880
|
+
return new Promise(function(resolve) {
|
27767
27881
|
resolve([]);
|
27768
|
-
return;
|
27769
|
-
}
|
27770
|
-
|
27771
|
-
queue = Tools.map(blobInfos, function(blobInfo) {
|
27772
|
-
return {
|
27773
|
-
status: false,
|
27774
|
-
blobInfo: blobInfo,
|
27775
|
-
url: ''
|
27776
|
-
};
|
27777
27882
|
});
|
27883
|
+
}
|
27778
27884
|
|
27779
|
-
|
27780
|
-
|
27781
|
-
|
27782
|
-
if (!queueItem) {
|
27783
|
-
resolve(queue);
|
27784
|
-
return;
|
27785
|
-
}
|
27786
|
-
|
27787
|
-
// Only upload unique blob once
|
27788
|
-
previousResult = uploadedIdMap[queueItem.blobInfo.id()];
|
27789
|
-
if (previousResult) {
|
27790
|
-
queueItem.url = previousResult;
|
27791
|
-
queueItem.status = true;
|
27792
|
-
uploadNext();
|
27793
|
-
return;
|
27794
|
-
}
|
27885
|
+
function uploadBlobInfo(blobInfo) {
|
27886
|
+
return new Promise(function(resolve) {
|
27887
|
+
var handler = settings.handler;
|
27795
27888
|
|
27796
|
-
handler(blobInfoToData(
|
27797
|
-
|
27798
|
-
|
27799
|
-
|
27800
|
-
|
27889
|
+
handler(blobInfoToData(blobInfo), function(url) {
|
27890
|
+
resolve({
|
27891
|
+
url: url,
|
27892
|
+
blobInfo: blobInfo,
|
27893
|
+
status: true
|
27894
|
+
});
|
27801
27895
|
}, function(failure) {
|
27802
|
-
|
27803
|
-
|
27896
|
+
resolve({
|
27897
|
+
url: '',
|
27898
|
+
blobInfo: blobInfo,
|
27899
|
+
status: false,
|
27900
|
+
error: failure
|
27901
|
+
});
|
27804
27902
|
});
|
27903
|
+
});
|
27904
|
+
}
|
27905
|
+
|
27906
|
+
promises = Tools.map(blobInfos, function(blobInfo) {
|
27907
|
+
var newPromise, id = blobInfo.id();
|
27908
|
+
|
27909
|
+
if (cachedPromises[id]) {
|
27910
|
+
return cachedPromises[id];
|
27805
27911
|
}
|
27806
27912
|
|
27807
|
-
|
27913
|
+
newPromise = uploadBlobInfo(blobInfo).then(function(result) {
|
27914
|
+
delete cachedPromises[id];
|
27915
|
+
return result;
|
27916
|
+
})['catch'](function(error) {
|
27917
|
+
delete cachedPromises[id];
|
27918
|
+
return error;
|
27919
|
+
});
|
27920
|
+
|
27921
|
+
cachedPromises[id] = newPromise;
|
27922
|
+
|
27923
|
+
return newPromise;
|
27808
27924
|
});
|
27925
|
+
|
27926
|
+
return Promise.all(promises);
|
27809
27927
|
}
|
27810
27928
|
|
27811
27929
|
settings = Tools.extend({
|
@@ -27833,6 +27951,9 @@ define("tinymce/file/Uploader", [
|
|
27833
27951
|
|
27834
27952
|
/**
|
27835
27953
|
* Converts blob/uris back and forth.
|
27954
|
+
*
|
27955
|
+
* @private
|
27956
|
+
* @class tinymce.file.Conversions
|
27836
27957
|
*/
|
27837
27958
|
define("tinymce/file/Conversions", [
|
27838
27959
|
"tinymce/util/Promise"
|
@@ -27945,39 +28066,20 @@ define("tinymce/file/Conversions", [
|
|
27945
28066
|
*/
|
27946
28067
|
define("tinymce/file/ImageScanner", [
|
27947
28068
|
"tinymce/util/Promise",
|
27948
|
-
"tinymce/util/
|
27949
|
-
"tinymce/file/Conversions"
|
27950
|
-
|
28069
|
+
"tinymce/util/Arr",
|
28070
|
+
"tinymce/file/Conversions",
|
28071
|
+
"tinymce/Env"
|
28072
|
+
], function(Promise, Arr, Conversions, Env) {
|
27951
28073
|
var count = 0;
|
27952
28074
|
|
27953
|
-
function
|
27954
|
-
|
27955
|
-
var result = [];
|
27956
|
-
|
27957
|
-
function next(index) {
|
27958
|
-
fn(array[index], function(value) {
|
27959
|
-
result.push(value);
|
28075
|
+
return function(blobCache) {
|
28076
|
+
var cachedPromises = {};
|
27960
28077
|
|
27961
|
-
|
27962
|
-
|
27963
|
-
} else {
|
27964
|
-
resolve(result);
|
27965
|
-
}
|
27966
|
-
});
|
27967
|
-
}
|
27968
|
-
|
27969
|
-
if (array.length === 0) {
|
27970
|
-
resolve(result);
|
27971
|
-
} else {
|
27972
|
-
next(0);
|
27973
|
-
}
|
27974
|
-
});
|
27975
|
-
}
|
28078
|
+
function findAll(elm) {
|
28079
|
+
var images, promises;
|
27976
28080
|
|
27977
|
-
return {
|
27978
|
-
findAll: function(elm, blobCache) {
|
27979
28081
|
function imageToBlobInfo(img, resolve) {
|
27980
|
-
var base64, blobInfo
|
28082
|
+
var base64, blobInfo;
|
27981
28083
|
|
27982
28084
|
if (img.src.indexOf('blob:') === 0) {
|
27983
28085
|
blobInfo = blobCache.getByUri(img.src);
|
@@ -27992,7 +28094,6 @@ define("tinymce/file/ImageScanner", [
|
|
27992
28094
|
return;
|
27993
28095
|
}
|
27994
28096
|
|
27995
|
-
blobInfoId = 'blobid' + (count++);
|
27996
28097
|
base64 = Conversions.parseDataUri(img.src).data;
|
27997
28098
|
blobInfo = blobCache.findFirst(function(cachedBlobInfo) {
|
27998
28099
|
return cachedBlobInfo.base64() === base64;
|
@@ -28005,7 +28106,8 @@ define("tinymce/file/ImageScanner", [
|
|
28005
28106
|
});
|
28006
28107
|
} else {
|
28007
28108
|
Conversions.uriToBlob(img.src).then(function(blob) {
|
28008
|
-
var
|
28109
|
+
var blobInfoId = 'blobid' + (count++),
|
28110
|
+
blobInfo = blobCache.create(blobInfoId, blob, base64);
|
28009
28111
|
|
28010
28112
|
blobCache.add(blobInfo);
|
28011
28113
|
|
@@ -28017,10 +28119,65 @@ define("tinymce/file/ImageScanner", [
|
|
28017
28119
|
}
|
28018
28120
|
}
|
28019
28121
|
|
28020
|
-
|
28021
|
-
|
28022
|
-
|
28122
|
+
images = Arr.filter(elm.getElementsByTagName('img'), function(img) {
|
28123
|
+
var src = img.src;
|
28124
|
+
|
28125
|
+
if (!Env.fileApi) {
|
28126
|
+
return false;
|
28127
|
+
}
|
28128
|
+
|
28129
|
+
if (img.hasAttribute('data-mce-bogus')) {
|
28130
|
+
return false;
|
28131
|
+
}
|
28132
|
+
|
28133
|
+
if (img.hasAttribute('data-mce-placeholder')) {
|
28134
|
+
return false;
|
28135
|
+
}
|
28136
|
+
|
28137
|
+
if (!src || src == Env.transparentSrc) {
|
28138
|
+
return false;
|
28139
|
+
}
|
28140
|
+
|
28141
|
+
return src.indexOf('data:') === 0 || src.indexOf('blob:') === 0;
|
28142
|
+
});
|
28143
|
+
|
28144
|
+
promises = Arr.map(images, function(img) {
|
28145
|
+
var newPromise;
|
28146
|
+
|
28147
|
+
if (cachedPromises[img.src]) {
|
28148
|
+
// Since the cached promise will return the cached image
|
28149
|
+
// We need to wrap it and resolve with the actual image
|
28150
|
+
return new Promise(function(resolve) {
|
28151
|
+
cachedPromises[img.src].then(function(imageInfo) {
|
28152
|
+
resolve({
|
28153
|
+
image: img,
|
28154
|
+
blobInfo: imageInfo.blobInfo
|
28155
|
+
});
|
28156
|
+
});
|
28157
|
+
});
|
28158
|
+
}
|
28159
|
+
|
28160
|
+
newPromise = new Promise(function(resolve) {
|
28161
|
+
imageToBlobInfo(img, resolve);
|
28162
|
+
}).then(function(result) {
|
28163
|
+
delete cachedPromises[result.image.src];
|
28164
|
+
return result;
|
28165
|
+
})['catch'](function(error) {
|
28166
|
+
delete cachedPromises[img.src];
|
28167
|
+
return error;
|
28168
|
+
});
|
28169
|
+
|
28170
|
+
cachedPromises[img.src] = newPromise;
|
28171
|
+
|
28172
|
+
return newPromise;
|
28173
|
+
});
|
28174
|
+
|
28175
|
+
return Promise.all(promises);
|
28023
28176
|
}
|
28177
|
+
|
28178
|
+
return {
|
28179
|
+
findAll: findAll
|
28180
|
+
};
|
28024
28181
|
};
|
28025
28182
|
});
|
28026
28183
|
|
@@ -28043,10 +28200,11 @@ define("tinymce/file/ImageScanner", [
|
|
28043
28200
|
* @class tinymce.file.BlobCache
|
28044
28201
|
*/
|
28045
28202
|
define("tinymce/file/BlobCache", [
|
28046
|
-
"tinymce/util/
|
28047
|
-
|
28203
|
+
"tinymce/util/Arr",
|
28204
|
+
"tinymce/util/Fun"
|
28205
|
+
], function(Arr, Fun) {
|
28048
28206
|
return function() {
|
28049
|
-
var cache = [], constant =
|
28207
|
+
var cache = [], constant = Fun.constant;
|
28050
28208
|
|
28051
28209
|
function create(id, blob, base64) {
|
28052
28210
|
return {
|
@@ -28070,7 +28228,7 @@ define("tinymce/file/BlobCache", [
|
|
28070
28228
|
}
|
28071
28229
|
|
28072
28230
|
function findFirst(predicate) {
|
28073
|
-
return
|
28231
|
+
return Arr.filter(cache, predicate)[0];
|
28074
28232
|
}
|
28075
28233
|
|
28076
28234
|
function getByUri(blobUri) {
|
@@ -28080,7 +28238,7 @@ define("tinymce/file/BlobCache", [
|
|
28080
28238
|
}
|
28081
28239
|
|
28082
28240
|
function destroy() {
|
28083
|
-
|
28241
|
+
Arr.each(cache, function(cachedBlobInfo) {
|
28084
28242
|
URL.revokeObjectURL(cachedBlobInfo.blobUri());
|
28085
28243
|
});
|
28086
28244
|
|
@@ -28117,13 +28275,13 @@ define("tinymce/file/BlobCache", [
|
|
28117
28275
|
* @class tinymce.EditorUpload
|
28118
28276
|
*/
|
28119
28277
|
define("tinymce/EditorUpload", [
|
28120
|
-
"tinymce/util/
|
28278
|
+
"tinymce/util/Arr",
|
28121
28279
|
"tinymce/file/Uploader",
|
28122
28280
|
"tinymce/file/ImageScanner",
|
28123
28281
|
"tinymce/file/BlobCache"
|
28124
|
-
], function(
|
28282
|
+
], function(Arr, Uploader, ImageScanner, BlobCache) {
|
28125
28283
|
return function(editor) {
|
28126
|
-
var blobCache = new BlobCache();
|
28284
|
+
var blobCache = new BlobCache(), uploader, imageScanner;
|
28127
28285
|
|
28128
28286
|
// Replaces strings without regexps to avoid FF regexp to big issue
|
28129
28287
|
function replaceString(content, search, replace) {
|
@@ -28149,60 +28307,61 @@ define("tinymce/EditorUpload", [
|
|
28149
28307
|
}
|
28150
28308
|
|
28151
28309
|
function replaceUrlInUndoStack(targetUrl, replacementUrl) {
|
28152
|
-
|
28310
|
+
Arr.each(editor.undoManager.data, function(level) {
|
28153
28311
|
level.content = replaceImageUrl(level.content, targetUrl, replacementUrl);
|
28154
28312
|
});
|
28155
28313
|
}
|
28156
28314
|
|
28157
28315
|
function uploadImages(callback) {
|
28158
|
-
|
28159
|
-
|
28160
|
-
|
28161
|
-
|
28162
|
-
|
28163
|
-
|
28164
|
-
|
28165
|
-
function imageInfosToBlobInfos(imageInfos) {
|
28166
|
-
return Tools.map(imageInfos, function(imageInfo) {
|
28167
|
-
return imageInfo.blobInfo;
|
28316
|
+
if (!uploader) {
|
28317
|
+
uploader = new Uploader({
|
28318
|
+
url: editor.settings.images_upload_url,
|
28319
|
+
basePath: editor.settings.images_upload_base_path,
|
28320
|
+
credentials: editor.settings.images_upload_credentials,
|
28321
|
+
handler: editor.settings.images_upload_handler
|
28168
28322
|
});
|
28169
28323
|
}
|
28170
28324
|
|
28171
|
-
return scanForImages().then(
|
28172
|
-
|
28173
|
-
var image;
|
28325
|
+
return scanForImages().then(function(imageInfos) {
|
28326
|
+
var blobInfos;
|
28174
28327
|
|
28175
|
-
|
28328
|
+
blobInfos = Arr.map(imageInfos, function(imageInfo) {
|
28329
|
+
return imageInfo.blobInfo;
|
28330
|
+
});
|
28331
|
+
|
28332
|
+
return uploader.upload(blobInfos).then(function(result) {
|
28333
|
+
result = Arr.map(result, function(uploadInfo, index) {
|
28334
|
+
var image = imageInfos[index].image;
|
28176
28335
|
|
28177
|
-
if (image) {
|
28178
28336
|
replaceUrlInUndoStack(image.src, uploadInfo.url);
|
28179
28337
|
|
28180
28338
|
editor.$(image).attr({
|
28181
28339
|
src: uploadInfo.url,
|
28182
28340
|
'data-mce-src': editor.convertURL(uploadInfo.url, 'src')
|
28183
28341
|
});
|
28184
|
-
}
|
28185
28342
|
|
28186
|
-
|
28187
|
-
|
28188
|
-
|
28189
|
-
|
28190
|
-
|
28343
|
+
return {
|
28344
|
+
element: image,
|
28345
|
+
status: uploadInfo.status
|
28346
|
+
};
|
28347
|
+
});
|
28191
28348
|
|
28192
|
-
|
28193
|
-
|
28194
|
-
|
28349
|
+
if (callback) {
|
28350
|
+
callback(result);
|
28351
|
+
}
|
28195
28352
|
|
28196
|
-
|
28197
|
-
|
28198
|
-
// Silent
|
28199
|
-
// TODO: Maybe execute some failure callback here?
|
28353
|
+
return result;
|
28354
|
+
});
|
28200
28355
|
});
|
28201
28356
|
}
|
28202
28357
|
|
28203
28358
|
function scanForImages() {
|
28204
|
-
|
28205
|
-
|
28359
|
+
if (!imageScanner) {
|
28360
|
+
imageScanner = new ImageScanner(blobCache);
|
28361
|
+
}
|
28362
|
+
|
28363
|
+
return imageScanner.findAll(editor.getBody()).then(function(result) {
|
28364
|
+
Arr.each(result, function(resultItem) {
|
28206
28365
|
replaceUrlInUndoStack(resultItem.image.src, resultItem.blobInfo.blobUri());
|
28207
28366
|
resultItem.image.src = resultItem.blobInfo.blobUri();
|
28208
28367
|
});
|
@@ -28213,6 +28372,7 @@ define("tinymce/EditorUpload", [
|
|
28213
28372
|
|
28214
28373
|
function destroy() {
|
28215
28374
|
blobCache.destroy();
|
28375
|
+
imageScanner = uploader = null;
|
28216
28376
|
}
|
28217
28377
|
|
28218
28378
|
function replaceBlobWithBase64(content) {
|
@@ -28220,7 +28380,7 @@ define("tinymce/EditorUpload", [
|
|
28220
28380
|
var blobInfo = blobCache.getByUri(blobUri);
|
28221
28381
|
|
28222
28382
|
if (!blobInfo) {
|
28223
|
-
blobInfo =
|
28383
|
+
blobInfo = Arr.reduce(editor.editorManager.editors, function(result, editor) {
|
28224
28384
|
return result || editor.editorUpload.blobCache.getByUri(blobUri);
|
28225
28385
|
}, null);
|
28226
28386
|
}
|
@@ -28979,8 +29139,8 @@ define("tinymce/Editor", [
|
|
28979
29139
|
},
|
28980
29140
|
|
28981
29141
|
/**
|
28982
|
-
* This method get called by the init method
|
28983
|
-
* It will fill the iframe with contents,
|
29142
|
+
* This method get called by the init method once the iframe is loaded.
|
29143
|
+
* It will fill the iframe with contents, sets up DOM and selection objects for the iframe.
|
28984
29144
|
*
|
28985
29145
|
* @method initContentBody
|
28986
29146
|
* @private
|
@@ -29038,7 +29198,7 @@ define("tinymce/Editor", [
|
|
29038
29198
|
self.editorUpload = new EditorUpload(self);
|
29039
29199
|
|
29040
29200
|
/**
|
29041
|
-
* Schema instance, enables you to validate elements and
|
29201
|
+
* Schema instance, enables you to validate elements and its children.
|
29042
29202
|
*
|
29043
29203
|
* @property schema
|
29044
29204
|
* @type tinymce.html.Schema
|
@@ -29470,7 +29630,7 @@ define("tinymce/Editor", [
|
|
29470
29630
|
},
|
29471
29631
|
|
29472
29632
|
/**
|
29473
|
-
*
|
29633
|
+
* Dispatches out a onNodeChange event to all observers. This method should be called when you
|
29474
29634
|
* need to update the UI states or element path etc.
|
29475
29635
|
*
|
29476
29636
|
* @method nodeChanged
|
@@ -29625,7 +29785,7 @@ define("tinymce/Editor", [
|
|
29625
29785
|
*
|
29626
29786
|
* @method addQueryStateHandler
|
29627
29787
|
* @param {String} name Command name to add/override.
|
29628
|
-
* @param {addQueryStateHandlerCallback} callback Function to execute when the command state
|
29788
|
+
* @param {addQueryStateHandlerCallback} callback Function to execute when the command state retrieval occurs.
|
29629
29789
|
* @param {Object} scope Optional scope to execute the function in.
|
29630
29790
|
*/
|
29631
29791
|
addQueryStateHandler: function(name, callback, scope) {
|
@@ -29644,7 +29804,7 @@ define("tinymce/Editor", [
|
|
29644
29804
|
*
|
29645
29805
|
* @method addQueryValueHandler
|
29646
29806
|
* @param {String} name Command name to add/override.
|
29647
|
-
* @param {addQueryValueHandlerCallback} callback Function to execute when the command value
|
29807
|
+
* @param {addQueryValueHandlerCallback} callback Function to execute when the command value retrieval occurs.
|
29648
29808
|
* @param {Object} scope Optional scope to execute the function in.
|
29649
29809
|
*/
|
29650
29810
|
addQueryValueHandler: function(name, callback, scope) {
|
@@ -29789,7 +29949,7 @@ define("tinymce/Editor", [
|
|
29789
29949
|
|
29790
29950
|
/**
|
29791
29951
|
* Sets the progress state, this will display a throbber/progess for the editor.
|
29792
|
-
* This is ideal for
|
29952
|
+
* This is ideal for asynchronous operations like an AJAX save call.
|
29793
29953
|
*
|
29794
29954
|
* @method setProgressState
|
29795
29955
|
* @param {Boolean} state Boolean state if the progress should be shown or hidden.
|
@@ -30889,7 +31049,7 @@ define("tinymce/EditorManager", [
|
|
30889
31049
|
* @property minorVersion
|
30890
31050
|
* @type String
|
30891
31051
|
*/
|
30892
|
-
minorVersion: '2.
|
31052
|
+
minorVersion: '2.5',
|
30893
31053
|
|
30894
31054
|
/**
|
30895
31055
|
* Release date of TinyMCE build.
|
@@ -30897,7 +31057,7 @@ define("tinymce/EditorManager", [
|
|
30897
31057
|
* @property releaseDate
|
30898
31058
|
* @type String
|
30899
31059
|
*/
|
30900
|
-
releaseDate: '2015-08-
|
31060
|
+
releaseDate: '2015-08-31',
|
30901
31061
|
|
30902
31062
|
/**
|
30903
31063
|
* Collection of editor instances.
|
@@ -30960,8 +31120,9 @@ define("tinymce/EditorManager", [
|
|
30960
31120
|
// tinymce.js tinymce.min.js tinymce.dev.js
|
30961
31121
|
// tinymce.jquery.js tinymce.jquery.min.js tinymce.jquery.dev.js
|
30962
31122
|
// tinymce.full.js tinymce.full.min.js tinymce.full.dev.js
|
31123
|
+
var srcScript = src.substring(src.lastIndexOf('/'));
|
30963
31124
|
if (/tinymce(\.full|\.jquery|)(\.min|\.dev|)\.js/.test(src)) {
|
30964
|
-
if (
|
31125
|
+
if (srcScript.indexOf('.min') != -1) {
|
30965
31126
|
suffix = '.min';
|
30966
31127
|
}
|
30967
31128
|
|
@@ -31464,6 +31625,12 @@ define("tinymce/EditorManager", [
|
|
31464
31625
|
* Contributing: http://www.tinymce.com/contributing
|
31465
31626
|
*/
|
31466
31627
|
|
31628
|
+
/**
|
31629
|
+
* Converts legacy input to modern HTML.
|
31630
|
+
*
|
31631
|
+
* @class tinymce.LegacyInput
|
31632
|
+
* @private
|
31633
|
+
*/
|
31467
31634
|
define("tinymce/LegacyInput", [
|
31468
31635
|
"tinymce/EditorManager",
|
31469
31636
|
"tinymce/util/Tools"
|
@@ -32205,6 +32372,12 @@ define("tinymce/Compat", [
|
|
32205
32372
|
* @namespace tinymce.util
|
32206
32373
|
*/
|
32207
32374
|
|
32375
|
+
/**
|
32376
|
+
* Contains modules to handle data binding.
|
32377
|
+
*
|
32378
|
+
* @namespace tinymce.data
|
32379
|
+
*/
|
32380
|
+
|
32208
32381
|
// Included from: js/tinymce/classes/ui/Layout.js
|
32209
32382
|
|
32210
32383
|
/**
|
@@ -32723,9 +32896,13 @@ define("tinymce/ui/Button", [
|
|
32723
32896
|
* @method repaint
|
32724
32897
|
*/
|
32725
32898
|
repaint: function() {
|
32726
|
-
var
|
32899
|
+
var btnElm = this.getEl().firstChild,
|
32900
|
+
btnStyle;
|
32727
32901
|
|
32728
|
-
|
32902
|
+
if (btnElm) {
|
32903
|
+
btnStyle = btnElm.style;
|
32904
|
+
btnStyle.width = btnStyle.height = "100%";
|
32905
|
+
}
|
32729
32906
|
|
32730
32907
|
this._super();
|
32731
32908
|
},
|
@@ -38174,5 +38351,5 @@ define("tinymce/ui/Throbber", [
|
|
38174
38351
|
};
|
38175
38352
|
});
|
38176
38353
|
|
38177
|
-
expose(["tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/Env","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/
|
38354
|
+
expose(["tinymce/dom/EventUtils","tinymce/dom/Sizzle","tinymce/Env","tinymce/util/Tools","tinymce/dom/DomQuery","tinymce/html/Styles","tinymce/dom/TreeWalker","tinymce/html/Entities","tinymce/dom/DOMUtils","tinymce/dom/ScriptLoader","tinymce/AddOnManager","tinymce/dom/RangeUtils","tinymce/html/Node","tinymce/html/Schema","tinymce/html/SaxParser","tinymce/html/DomParser","tinymce/html/Writer","tinymce/html/Serializer","tinymce/dom/Serializer","tinymce/util/VK","tinymce/dom/ControlSelection","tinymce/dom/BookmarkManager","tinymce/dom/Selection","tinymce/Formatter","tinymce/UndoManager","tinymce/EditorCommands","tinymce/util/URI","tinymce/util/Class","tinymce/util/EventDispatcher","tinymce/util/Observable","tinymce/ui/Selector","tinymce/ui/Collection","tinymce/ui/ReflowQueue","tinymce/ui/Control","tinymce/ui/Factory","tinymce/ui/KeyboardNavigation","tinymce/ui/Container","tinymce/ui/DragHelper","tinymce/ui/Scrollable","tinymce/ui/Panel","tinymce/ui/Movable","tinymce/ui/Resizable","tinymce/ui/FloatPanel","tinymce/ui/Window","tinymce/ui/MessageBox","tinymce/WindowManager","tinymce/EditorObservable","tinymce/Shortcuts","tinymce/util/Promise","tinymce/Editor","tinymce/util/I18n","tinymce/FocusManager","tinymce/EditorManager","tinymce/util/XHR","tinymce/util/JSON","tinymce/util/JSONRequest","tinymce/util/JSONP","tinymce/util/LocalStorage","tinymce/Compat","tinymce/ui/Layout","tinymce/ui/AbsoluteLayout","tinymce/ui/Tooltip","tinymce/ui/Widget","tinymce/ui/Button","tinymce/ui/ButtonGroup","tinymce/ui/Checkbox","tinymce/ui/ComboBox","tinymce/ui/ColorBox","tinymce/ui/PanelButton","tinymce/ui/ColorButton","tinymce/util/Color","tinymce/ui/ColorPicker","tinymce/ui/Path","tinymce/ui/ElementPath","tinymce/ui/FormItem","tinymce/ui/Form","tinymce/ui/FieldSet","tinymce/ui/FilePicker","tinymce/ui/FitLayout","tinymce/ui/FlexLayout","tinymce/ui/FlowLayout","tinymce/ui/FormatControls","tinymce/ui/GridLayout","tinymce/ui/Iframe","tinymce/ui/Label","tinymce/ui/Toolbar","tinymce/ui/MenuBar","tinymce/ui/MenuButton","tinymce/ui/MenuItem","tinymce/ui/Menu","tinymce/ui/ListBox","tinymce/ui/Radio","tinymce/ui/Rect","tinymce/ui/ResizeHandle","tinymce/ui/Slider","tinymce/ui/Spacer","tinymce/ui/SplitButton","tinymce/ui/StackLayout","tinymce/ui/TabPanel","tinymce/ui/TextBox","tinymce/ui/Throbber"]);
|
38178
38355
|
})(this);
|