wysihtml5x-rails 0.4.4 → 0.4.5
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.
@@ -17,8 +17,15 @@ if (Object.defineProperty && Object.getOwnPropertyDescriptor && Object.getOwnPro
|
|
17
17
|
}
|
18
18
|
);
|
19
19
|
})();
|
20
|
+
}
|
21
|
+
|
22
|
+
// isArray polyfill for ie8
|
23
|
+
if(!Array.isArray) {
|
24
|
+
Array.isArray = function(arg) {
|
25
|
+
return Object.prototype.toString.call(arg) === '[object Array]';
|
26
|
+
};
|
20
27
|
};/**
|
21
|
-
* @license wysihtml5x v0.4.
|
28
|
+
* @license wysihtml5x v0.4.5
|
22
29
|
* https://github.com/Edicy/wysihtml5
|
23
30
|
*
|
24
31
|
* Author: Christopher Blum (https://github.com/tiff)
|
@@ -29,7 +36,7 @@ if (Object.defineProperty && Object.getOwnPropertyDescriptor && Object.getOwnPro
|
|
29
36
|
*
|
30
37
|
*/
|
31
38
|
var wysihtml5 = {
|
32
|
-
version: "0.4.
|
39
|
+
version: "0.4.5",
|
33
40
|
|
34
41
|
// namespaces
|
35
42
|
commands: {},
|
@@ -4535,9 +4542,20 @@ wysihtml5.browser = (function() {
|
|
4535
4542
|
* @example
|
4536
4543
|
* wysihtml5.lang.array([1, 2]).contains(1);
|
4537
4544
|
* // => true
|
4545
|
+
*
|
4546
|
+
* Can be used to match array with array. If intersection is found true is returned
|
4538
4547
|
*/
|
4539
4548
|
contains: function(needle) {
|
4549
|
+
if (Array.isArray(needle)) {
|
4550
|
+
for (var i = needle.length; i--;) {
|
4551
|
+
if (wysihtml5.lang.array(arr).indexOf(needle[i]) !== -1) {
|
4552
|
+
return true;
|
4553
|
+
}
|
4554
|
+
}
|
4555
|
+
return false;
|
4556
|
+
} else {
|
4540
4557
|
return wysihtml5.lang.array(arr).indexOf(needle) !== -1;
|
4558
|
+
}
|
4541
4559
|
},
|
4542
4560
|
|
4543
4561
|
/**
|
@@ -4618,7 +4636,28 @@ wysihtml5.browser = (function() {
|
|
4618
4636
|
}
|
4619
4637
|
return A;
|
4620
4638
|
}
|
4639
|
+
},
|
4640
|
+
|
4641
|
+
/* ReturnS new array without duplicate entries
|
4642
|
+
*
|
4643
|
+
* @example
|
4644
|
+
* var uniq = wysihtml5.lang.array([1,2,3,2,1,4]).unique();
|
4645
|
+
* // => [1,2,3,4]
|
4646
|
+
*/
|
4647
|
+
unique: function() {
|
4648
|
+
var vals = [],
|
4649
|
+
max = arr.length,
|
4650
|
+
idx = 0;
|
4651
|
+
|
4652
|
+
while (idx < max) {
|
4653
|
+
if (!wysihtml5.lang.array(vals).contains(arr[idx])) {
|
4654
|
+
vals.push(arr[idx]);
|
4655
|
+
}
|
4656
|
+
idx++;
|
4657
|
+
}
|
4658
|
+
return vals;
|
4621
4659
|
}
|
4660
|
+
|
4622
4661
|
};
|
4623
4662
|
};
|
4624
4663
|
;wysihtml5.lang.Dispatcher = Base.extend(
|
@@ -4801,8 +4840,8 @@ wysihtml5.browser = (function() {
|
|
4801
4840
|
MAX_DISPLAY_LENGTH = 100,
|
4802
4841
|
BRACKETS = { ")": "(", "]": "[", "}": "{" };
|
4803
4842
|
|
4804
|
-
function autoLink(element) {
|
4805
|
-
if (_hasParentThatShouldBeIgnored(element)) {
|
4843
|
+
function autoLink(element, ignoreInClasses) {
|
4844
|
+
if (_hasParentThatShouldBeIgnored(element, ignoreInClasses)) {
|
4806
4845
|
return element;
|
4807
4846
|
}
|
4808
4847
|
|
@@ -4810,7 +4849,7 @@ wysihtml5.browser = (function() {
|
|
4810
4849
|
element = element.ownerDocument.body;
|
4811
4850
|
}
|
4812
4851
|
|
4813
|
-
return _parseNode(element);
|
4852
|
+
return _parseNode(element, ignoreInClasses);
|
4814
4853
|
}
|
4815
4854
|
|
4816
4855
|
/**
|
@@ -4873,11 +4912,14 @@ wysihtml5.browser = (function() {
|
|
4873
4912
|
parentNode.removeChild(textNode);
|
4874
4913
|
}
|
4875
4914
|
|
4876
|
-
function _hasParentThatShouldBeIgnored(node) {
|
4915
|
+
function _hasParentThatShouldBeIgnored(node, ignoreInClasses) {
|
4877
4916
|
var nodeName;
|
4878
4917
|
while (node.parentNode) {
|
4879
4918
|
node = node.parentNode;
|
4880
4919
|
nodeName = node.nodeName;
|
4920
|
+
if (node.className && wysihtml5.lang.array(node.className.split(' ')).contains(ignoreInClasses)) {
|
4921
|
+
return true;
|
4922
|
+
}
|
4881
4923
|
if (IGNORE_URLS_IN.contains(nodeName)) {
|
4882
4924
|
return true;
|
4883
4925
|
} else if (nodeName === "body") {
|
@@ -4887,12 +4929,17 @@ wysihtml5.browser = (function() {
|
|
4887
4929
|
return false;
|
4888
4930
|
}
|
4889
4931
|
|
4890
|
-
function _parseNode(element) {
|
4932
|
+
function _parseNode(element, ignoreInClasses) {
|
4891
4933
|
if (IGNORE_URLS_IN.contains(element.nodeName)) {
|
4892
4934
|
return;
|
4893
4935
|
}
|
4894
4936
|
|
4937
|
+
if (element.className && wysihtml5.lang.array(element.className.split(' ')).contains(ignoreInClasses)) {
|
4938
|
+
return;
|
4939
|
+
}
|
4940
|
+
|
4895
4941
|
if (element.nodeType === wysihtml5.TEXT_NODE && element.data.match(URL_REG_EXP)) {
|
4942
|
+
console.log(element);
|
4896
4943
|
_wrapMatchesInNode(element);
|
4897
4944
|
return;
|
4898
4945
|
}
|
@@ -4902,7 +4949,7 @@ wysihtml5.browser = (function() {
|
|
4902
4949
|
i = 0;
|
4903
4950
|
|
4904
4951
|
for (; i<childNodesLength; i++) {
|
4905
|
-
_parseNode(childNodes[i]);
|
4952
|
+
_parseNode(childNodes[i], ignoreInClasses);
|
4906
4953
|
}
|
4907
4954
|
|
4908
4955
|
return element;
|
@@ -5812,7 +5859,7 @@ wysihtml5.dom.parse = (function() {
|
|
5812
5859
|
if (cleanUp &&
|
5813
5860
|
newNode.nodeName.toLowerCase() === DEFAULT_NODE_NAME &&
|
5814
5861
|
(!newNode.childNodes.length ||
|
5815
|
-
((/^\s*$/gi).test(newNode.innerHTML) && oldNode.className !== "_wysihtml5-temp-placeholder") ||
|
5862
|
+
((/^\s*$/gi).test(newNode.innerHTML) && oldNode.className !== "_wysihtml5-temp-placeholder" && oldNode.className !== "rangySelectionBoundary") ||
|
5816
5863
|
!newNode.attributes.length)
|
5817
5864
|
) {
|
5818
5865
|
fragment = newNode.ownerDocument.createDocumentFragment();
|
@@ -5881,13 +5928,6 @@ wysihtml5.dom.parse = (function() {
|
|
5881
5928
|
} else if (rule.unwrap) {
|
5882
5929
|
return false;
|
5883
5930
|
}
|
5884
|
-
|
5885
|
-
// tests if type condition is met or node should be removed/unwrapped
|
5886
|
-
|
5887
|
-
if (rule.one_of_type && !_testTypes(oldNode, currentRules, rule.one_of_type)) {
|
5888
|
-
return (rule.remove_action && rule.remove_action == "unwrap") ? false : null;
|
5889
|
-
}
|
5890
|
-
|
5891
5931
|
rule = typeof(rule) === "string" ? { rename_tag: rule } : rule;
|
5892
5932
|
} else if (oldNode.firstChild) {
|
5893
5933
|
rule = { rename_tag: DEFAULT_NODE_NAME };
|
@@ -5895,9 +5935,15 @@ wysihtml5.dom.parse = (function() {
|
|
5895
5935
|
// Remove empty unknown elements
|
5896
5936
|
return null;
|
5897
5937
|
}
|
5938
|
+
|
5898
5939
|
newNode = oldNode.ownerDocument.createElement(rule.rename_tag || nodeName);
|
5899
5940
|
_handleAttributes(oldNode, newNode, rule);
|
5900
5941
|
_handleStyles(oldNode, newNode, rule);
|
5942
|
+
// tests if type condition is met or node should be removed/unwrapped
|
5943
|
+
if (rule.one_of_type && !_testTypes(newNode, currentRules, rule.one_of_type)) {
|
5944
|
+
return (rule.remove_action && rule.remove_action == "unwrap") ? false : null;
|
5945
|
+
}
|
5946
|
+
|
5901
5947
|
oldNode = null;
|
5902
5948
|
|
5903
5949
|
if (newNode.normalize) { newNode.normalize(); }
|
@@ -5908,7 +5954,7 @@ wysihtml5.dom.parse = (function() {
|
|
5908
5954
|
var definition, type;
|
5909
5955
|
|
5910
5956
|
// do not interfere with placeholder span or pasting caret position is not maintained
|
5911
|
-
if (oldNode.nodeName === "SPAN" && oldNode.className === "_wysihtml5-temp-placeholder") {
|
5957
|
+
if (oldNode.nodeName === "SPAN" && (oldNode.className === "_wysihtml5-temp-placeholder" || oldNode.className === "rangySelectionBoundary")) {
|
5912
5958
|
return true;
|
5913
5959
|
}
|
5914
5960
|
|
@@ -5960,7 +6006,7 @@ wysihtml5.dom.parse = (function() {
|
|
5960
6006
|
styleProp = nodeStyles[sp].split(':');
|
5961
6007
|
|
5962
6008
|
if (styleProp[0].replace(/\s/g, '').toLowerCase() === s) {
|
5963
|
-
if (definition.styles[s] === true || styleProp[1].replace(/\s/g, '').toLowerCase()
|
6009
|
+
if (definition.styles[s] === true || definition.styles[s] === 1 || wysihtml5.lang.array(definition.styles[s]).contains(styleProp[1].replace(/\s/g, '').toLowerCase()) ) {
|
5964
6010
|
return true;
|
5965
6011
|
}
|
5966
6012
|
}
|
@@ -6010,13 +6056,14 @@ wysihtml5.dom.parse = (function() {
|
|
6010
6056
|
var attributes = {}, // fresh new set of attributes to set on newNode
|
6011
6057
|
setClass = rule.set_class, // classes to set
|
6012
6058
|
addClass = rule.add_class, // add classes based on existing attributes
|
6059
|
+
addStyle = rule.add_style, // add styles based on existing attributes
|
6013
6060
|
setAttributes = rule.set_attributes, // attributes to set on the current node
|
6014
6061
|
checkAttributes = rule.check_attributes, // check/convert values of attributes
|
6015
6062
|
allowedClasses = currentRules.classes,
|
6016
6063
|
i = 0,
|
6017
6064
|
classes = [],
|
6065
|
+
styles = [],
|
6018
6066
|
newClasses = [],
|
6019
|
-
newUniqueClasses = [],
|
6020
6067
|
oldClasses = [],
|
6021
6068
|
classesLength,
|
6022
6069
|
newClassesLength,
|
@@ -6063,33 +6110,48 @@ wysihtml5.dom.parse = (function() {
|
|
6063
6110
|
}
|
6064
6111
|
}
|
6065
6112
|
|
6066
|
-
|
6067
|
-
|
6113
|
+
if (addStyle) {
|
6114
|
+
for (attributeName in addStyle) {
|
6115
|
+
method = addStyleMethods[addStyle[attributeName]];
|
6116
|
+
if (!method) {
|
6117
|
+
continue;
|
6118
|
+
}
|
6068
6119
|
|
6069
|
-
|
6070
|
-
|
6071
|
-
|
6072
|
-
|
6073
|
-
}
|
6074
|
-
classesLength = classes.length;
|
6075
|
-
for (; i<classesLength; i++) {
|
6076
|
-
currentClass = classes[i];
|
6077
|
-
if (allowedClasses[currentClass]) {
|
6078
|
-
newClasses.push(currentClass);
|
6120
|
+
newStyle = method(_getAttribute(oldNode, attributeName));
|
6121
|
+
if (typeof(newStyle) === "string") {
|
6122
|
+
styles.push(newStyle);
|
6123
|
+
}
|
6079
6124
|
}
|
6080
6125
|
}
|
6081
6126
|
|
6082
|
-
|
6083
|
-
|
6084
|
-
|
6085
|
-
|
6086
|
-
|
6087
|
-
|
6127
|
+
|
6128
|
+
if (typeof(allowedClasses) === "string" && allowedClasses === "any" && oldNode.getAttribute("class")) {
|
6129
|
+
attributes["class"] = oldNode.getAttribute("class");
|
6130
|
+
} else {
|
6131
|
+
// make sure that wysihtml5 temp class doesn't get stripped out
|
6132
|
+
allowedClasses["_wysihtml5-temp-placeholder"] = 1;
|
6133
|
+
allowedClasses["_rangySelectionBoundary"] = 1;
|
6134
|
+
|
6135
|
+
// add old classes last
|
6136
|
+
oldClasses = oldNode.getAttribute("class");
|
6137
|
+
if (oldClasses) {
|
6138
|
+
classes = classes.concat(oldClasses.split(WHITE_SPACE_REG_EXP));
|
6139
|
+
}
|
6140
|
+
classesLength = classes.length;
|
6141
|
+
for (; i<classesLength; i++) {
|
6142
|
+
currentClass = classes[i];
|
6143
|
+
if (allowedClasses[currentClass]) {
|
6144
|
+
newClasses.push(currentClass);
|
6145
|
+
}
|
6146
|
+
}
|
6147
|
+
|
6148
|
+
if (newClasses.length) {
|
6149
|
+
attributes["class"] = wysihtml5.lang.array(newClasses).unique().join(" ");
|
6088
6150
|
}
|
6089
6151
|
}
|
6090
6152
|
|
6091
|
-
if (
|
6092
|
-
attributes["
|
6153
|
+
if (styles.length) {
|
6154
|
+
attributes["style"] = wysihtml5.lang.array(styles).unique().join(" ");
|
6093
6155
|
}
|
6094
6156
|
|
6095
6157
|
// set attributes on newNode
|
@@ -6234,6 +6296,20 @@ wysihtml5.dom.parse = (function() {
|
|
6234
6296
|
})()
|
6235
6297
|
};
|
6236
6298
|
|
6299
|
+
// ------------ style converter (converts an html attribute to a style) ------------ \\
|
6300
|
+
var addStyleMethods = {
|
6301
|
+
align_text: (function() {
|
6302
|
+
var mapping = {
|
6303
|
+
left: "text-align: left;",
|
6304
|
+
right: "text-align: right;",
|
6305
|
+
center: "text-align: center;"
|
6306
|
+
};
|
6307
|
+
return function(attributeValue) {
|
6308
|
+
return mapping[String(attributeValue).toLowerCase()];
|
6309
|
+
};
|
6310
|
+
})(),
|
6311
|
+
};
|
6312
|
+
|
6237
6313
|
// ------------ class converter (converts an html attribute to a class name) ------------ \\
|
6238
6314
|
var addClassMethods = {
|
6239
6315
|
align_img: (function() {
|
@@ -8233,6 +8309,40 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
8233
8309
|
return top;
|
8234
8310
|
}
|
8235
8311
|
|
8312
|
+
// Provides the depth of ``descendant`` relative to ``ancestor``
|
8313
|
+
function getDepth(ancestor, descendant) {
|
8314
|
+
var ret = 0;
|
8315
|
+
while (descendant !== ancestor) {
|
8316
|
+
ret++;
|
8317
|
+
descendant = descendant.parentNode;
|
8318
|
+
if (!descendant)
|
8319
|
+
throw new Error("not a descendant of ancestor!");
|
8320
|
+
}
|
8321
|
+
return ret;
|
8322
|
+
}
|
8323
|
+
|
8324
|
+
// Should fix the obtained ranges that cannot surrond contents normally to apply changes upon
|
8325
|
+
// Being considerate to firefox that sets range start start out of span and end inside on doubleclick initiated selection
|
8326
|
+
function expandRangeToSurround(range) {
|
8327
|
+
if (range.canSurroundContents()) return;
|
8328
|
+
|
8329
|
+
var common = range.commonAncestorContainer,
|
8330
|
+
start_depth = getDepth(common, range.startContainer),
|
8331
|
+
end_depth = getDepth(common, range.endContainer);
|
8332
|
+
|
8333
|
+
while(!range.canSurroundContents()) {
|
8334
|
+
// In the following branches, we cannot just decrement the depth variables because the setStartBefore/setEndAfter may move the start or end of the range more than one level relative to ``common``. So we need to recompute the depth.
|
8335
|
+
if (start_depth > end_depth) {
|
8336
|
+
range.setStartBefore(range.startContainer);
|
8337
|
+
start_depth = getDepth(common, range.startContainer);
|
8338
|
+
}
|
8339
|
+
else {
|
8340
|
+
range.setEndAfter(range.endContainer);
|
8341
|
+
end_depth = getDepth(common, range.endContainer);
|
8342
|
+
}
|
8343
|
+
}
|
8344
|
+
}
|
8345
|
+
|
8236
8346
|
wysihtml5.Selection = Base.extend(
|
8237
8347
|
/** @scope wysihtml5.Selection.prototype */ {
|
8238
8348
|
constructor: function(editor, contain, unselectableClass) {
|
@@ -8253,6 +8363,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
8253
8363
|
*/
|
8254
8364
|
getBookmark: function() {
|
8255
8365
|
var range = this.getRange();
|
8366
|
+
if (range) expandRangeToSurround(range);
|
8256
8367
|
return range && range.cloneRange();
|
8257
8368
|
},
|
8258
8369
|
|
@@ -8982,10 +9093,9 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
8982
9093
|
function addStyle(el, cssStyle, regExp) {
|
8983
9094
|
if (el.getAttribute('style')) {
|
8984
9095
|
removeStyle(el, regExp);
|
8985
|
-
if (el.getAttribute('style') && !(
|
9096
|
+
if (el.getAttribute('style') && !(/^\s*$/).test(el.getAttribute('style'))) {
|
8986
9097
|
el.setAttribute('style', cssStyle + ";" + el.getAttribute('style'));
|
8987
9098
|
} else {
|
8988
|
-
|
8989
9099
|
el.setAttribute('style', cssStyle);
|
8990
9100
|
}
|
8991
9101
|
} else {
|
@@ -9014,7 +9124,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9014
9124
|
if (el.getAttribute('style')) {
|
9015
9125
|
s = el.getAttribute('style').split(';');
|
9016
9126
|
for (var i = s.length; i--;) {
|
9017
|
-
if (!s[i].match(regExp) && !(
|
9127
|
+
if (!s[i].match(regExp) && !(/^\s*$/).test(s[i])) {
|
9018
9128
|
s2.push(s[i]);
|
9019
9129
|
}
|
9020
9130
|
}
|
@@ -9033,11 +9143,11 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9033
9143
|
|
9034
9144
|
if (elStyle) {
|
9035
9145
|
elStyle = elStyle.replace(/\s/gi, '').toLowerCase();
|
9036
|
-
regexes.push(new RegExp("(^|\\s|;)" + style.replace(/\s/gi, '').replace(/([\(\)])/gi, "\\$1").toLowerCase().replace(";", ";?"), "gi"));
|
9146
|
+
regexes.push(new RegExp("(^|\\s|;)" + style.replace(/\s/gi, '').replace(/([\(\)])/gi, "\\$1").toLowerCase().replace(";", ";?").replace(/rgb\\\((\d+),(\d+),(\d+)\\\)/gi, "\\s?rgb\\($1,\\s?$2,\\s?$3\\)"), "gi"));
|
9037
9147
|
|
9038
9148
|
for (var i = sSplit.length; i-- > 0;) {
|
9039
9149
|
if (!(/^\s*$/).test(sSplit[i])) {
|
9040
|
-
regexes.push(new RegExp("(^|\\s|;)" + sSplit[i].replace(/\s/gi, '').replace(/([\(\)])/gi, "\\$1").toLowerCase().replace(";", ";?"), "gi"));
|
9150
|
+
regexes.push(new RegExp("(^|\\s|;)" + sSplit[i].replace(/\s/gi, '').replace(/([\(\)])/gi, "\\$1").toLowerCase().replace(";", ";?").replace(/rgb\\\((\d+),(\d+),(\d+)\\\)/gi, "\\s?rgb\\($1,\\s?$2,\\s?$3\\)"), "gi"));
|
9041
9151
|
}
|
9042
9152
|
}
|
9043
9153
|
for (var j = 0, jmax = regexes.length; j < jmax; j++) {
|
@@ -9048,15 +9158,11 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9048
9158
|
}
|
9049
9159
|
|
9050
9160
|
return false;
|
9051
|
-
}
|
9161
|
+
}
|
9052
9162
|
|
9053
9163
|
function removeOrChangeStyle(el, style, regExp) {
|
9054
9164
|
|
9055
9165
|
var exactRegex = getMatchingStyleRegexp(el, style);
|
9056
|
-
|
9057
|
-
/*new RegExp("(^|\\s|;)" + style.replace(/\s/gi, '').replace(/([\(\)])/gi, "\\$1").toLowerCase().replace(";", ";?"), "gi"),
|
9058
|
-
elStyle = el.getAttribute('style');*/
|
9059
|
-
|
9060
9166
|
if (exactRegex) {
|
9061
9167
|
// adding same style value on property again removes style
|
9062
9168
|
removeStyle(el, exactRegex);
|
@@ -9066,7 +9172,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9066
9172
|
addStyle(el, style, regExp);
|
9067
9173
|
return "change";
|
9068
9174
|
}
|
9069
|
-
}
|
9175
|
+
}
|
9070
9176
|
|
9071
9177
|
function hasSameClasses(el1, el2) {
|
9072
9178
|
return el1.className.replace(REG_EXP_WHITE_SPACE, " ") == el2.className.replace(REG_EXP_WHITE_SPACE, " ");
|
@@ -9117,7 +9223,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9117
9223
|
return offset > 0 && offset < node.childNodes.length;
|
9118
9224
|
}
|
9119
9225
|
|
9120
|
-
function splitNodeAt(node, descendantNode, descendantOffset) {
|
9226
|
+
function splitNodeAt(node, descendantNode, descendantOffset, container) {
|
9121
9227
|
var newNode;
|
9122
9228
|
if (rangy.dom.isCharacterDataNode(descendantNode)) {
|
9123
9229
|
if (descendantOffset == 0) {
|
@@ -9131,17 +9237,21 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9131
9237
|
}
|
9132
9238
|
}
|
9133
9239
|
if (!newNode) {
|
9134
|
-
|
9135
|
-
|
9136
|
-
newNode.
|
9137
|
-
|
9138
|
-
|
9139
|
-
|
9140
|
-
|
9240
|
+
if (!container || descendantNode !== container) {
|
9241
|
+
|
9242
|
+
newNode = descendantNode.cloneNode(false);
|
9243
|
+
if (newNode.id) {
|
9244
|
+
newNode.removeAttribute("id");
|
9245
|
+
}
|
9246
|
+
var child;
|
9247
|
+
while ((child = descendantNode.childNodes[descendantOffset])) {
|
9248
|
+
newNode.appendChild(child);
|
9249
|
+
}
|
9250
|
+
rangy.dom.insertAfter(newNode, descendantNode);
|
9251
|
+
|
9141
9252
|
}
|
9142
|
-
rangy.dom.insertAfter(newNode, descendantNode);
|
9143
9253
|
}
|
9144
|
-
return (descendantNode == node) ? newNode :
|
9254
|
+
return (descendantNode == node) ? newNode : splitNodeAt(node, newNode.parentNode, rangy.dom.getNodeIndex(newNode), container);
|
9145
9255
|
}
|
9146
9256
|
|
9147
9257
|
function Merge(firstNode) {
|
@@ -9185,7 +9295,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9185
9295
|
}
|
9186
9296
|
};
|
9187
9297
|
|
9188
|
-
function HTMLApplier(tagNames, cssClass, similarClassRegExp, normalize, cssStyle, similarStyleRegExp) {
|
9298
|
+
function HTMLApplier(tagNames, cssClass, similarClassRegExp, normalize, cssStyle, similarStyleRegExp, container) {
|
9189
9299
|
this.tagNames = tagNames || [defaultTagName];
|
9190
9300
|
this.cssClass = cssClass || ((cssClass === false) ? false : "");
|
9191
9301
|
this.similarClassRegExp = similarClassRegExp;
|
@@ -9193,6 +9303,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9193
9303
|
this.similarStyleRegExp = similarStyleRegExp;
|
9194
9304
|
this.normalize = normalize;
|
9195
9305
|
this.applyToAnyTagName = false;
|
9306
|
+
this.container = container;
|
9196
9307
|
}
|
9197
9308
|
|
9198
9309
|
HTMLApplier.prototype = {
|
@@ -9325,6 +9436,9 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9325
9436
|
if (this.cssClass) {
|
9326
9437
|
addClass(parent, this.cssClass, this.similarClassRegExp);
|
9327
9438
|
}
|
9439
|
+
if (this.cssStyle) {
|
9440
|
+
addStyle(parent, this.cssStyle, this.similarStyleRegExp);
|
9441
|
+
}
|
9328
9442
|
} else {
|
9329
9443
|
var el = this.createContainer(rangy.dom.getDocument(textNode));
|
9330
9444
|
textNode.parentNode.insertBefore(el, textNode);
|
@@ -9333,7 +9447,12 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9333
9447
|
},
|
9334
9448
|
|
9335
9449
|
isRemovable: function(el) {
|
9336
|
-
return rangy.dom.arrayContains(this.tagNames, el.tagName.toLowerCase()) &&
|
9450
|
+
return rangy.dom.arrayContains(this.tagNames, el.tagName.toLowerCase()) &&
|
9451
|
+
wysihtml5.lang.string(el.className).trim() === "" &&
|
9452
|
+
(
|
9453
|
+
!el.getAttribute('style') ||
|
9454
|
+
wysihtml5.lang.string(el.getAttribute('style')).trim() === ""
|
9455
|
+
);
|
9337
9456
|
},
|
9338
9457
|
|
9339
9458
|
undoToTextNode: function(textNode, range, ancestorWithClass, ancestorWithStyle) {
|
@@ -9346,11 +9465,11 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9346
9465
|
ancestorRange.selectNode(ancestor);
|
9347
9466
|
|
9348
9467
|
if (ancestorRange.isPointInRange(range.endContainer, range.endOffset) && isSplitPoint(range.endContainer, range.endOffset)) {
|
9349
|
-
splitNodeAt(ancestor, range.endContainer, range.endOffset);
|
9468
|
+
splitNodeAt(ancestor, range.endContainer, range.endOffset, this.container);
|
9350
9469
|
range.setEndAfter(ancestor);
|
9351
9470
|
}
|
9352
9471
|
if (ancestorRange.isPointInRange(range.startContainer, range.startOffset) && isSplitPoint(range.startContainer, range.startOffset)) {
|
9353
|
-
ancestor = splitNodeAt(ancestor, range.startContainer, range.startOffset);
|
9472
|
+
ancestor = splitNodeAt(ancestor, range.startContainer, range.startOffset, this.container);
|
9354
9473
|
}
|
9355
9474
|
}
|
9356
9475
|
|
@@ -9361,7 +9480,6 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9361
9480
|
if (styleMode && this.similarStyleRegExp) {
|
9362
9481
|
styleChanged = (removeOrChangeStyle(ancestor, this.cssStyle, this.similarStyleRegExp) === "change");
|
9363
9482
|
}
|
9364
|
-
|
9365
9483
|
if (this.isRemovable(ancestor) && !styleChanged) {
|
9366
9484
|
replaceWithOwnChildren(ancestor);
|
9367
9485
|
}
|
@@ -9391,6 +9509,9 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
9391
9509
|
if (!this.getAncestorWithClass(textNode)) {
|
9392
9510
|
this.applyToTextNode(textNode);
|
9393
9511
|
}
|
9512
|
+
if (!this.getAncestorWithStyle(textNode)) {
|
9513
|
+
this.applyToTextNode(textNode);
|
9514
|
+
}
|
9394
9515
|
}
|
9395
9516
|
|
9396
9517
|
range[ri].setStart(textNodes[0], 0);
|
@@ -10339,13 +10460,13 @@ wysihtml5.commands.formatCode = {
|
|
10339
10460
|
return alias ? [tagName.toLowerCase(), alias.toLowerCase()] : [tagName.toLowerCase()];
|
10340
10461
|
}
|
10341
10462
|
|
10342
|
-
function _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp) {
|
10463
|
+
function _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, container) {
|
10343
10464
|
var identifier = tagName + ":" + className;
|
10344
10465
|
if (cssStyle) {
|
10345
10466
|
identifier += ":" + cssStyle;
|
10346
10467
|
}
|
10347
10468
|
if (!htmlApplier[identifier]) {
|
10348
|
-
htmlApplier[identifier] = new wysihtml5.selection.HTMLApplier(_getTagNames(tagName), className, classRegExp, true, cssStyle, styleRegExp);
|
10469
|
+
htmlApplier[identifier] = new wysihtml5.selection.HTMLApplier(_getTagNames(tagName), className, classRegExp, true, cssStyle, styleRegExp, container);
|
10349
10470
|
}
|
10350
10471
|
return htmlApplier[identifier];
|
10351
10472
|
}
|
@@ -10359,7 +10480,8 @@ wysihtml5.commands.formatCode = {
|
|
10359
10480
|
return false;
|
10360
10481
|
}
|
10361
10482
|
composer.selection.getSelection().removeAllRanges();
|
10362
|
-
|
10483
|
+
|
10484
|
+
_getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, composer.element).toggleRange(ownRanges);
|
10363
10485
|
|
10364
10486
|
if (!dontRestoreSelect) {
|
10365
10487
|
range.setStart(ownRanges[0].startContainer, ownRanges[0].startOffset);
|
@@ -10428,7 +10550,7 @@ wysihtml5.commands.formatCode = {
|
|
10428
10550
|
return false;
|
10429
10551
|
}
|
10430
10552
|
|
10431
|
-
return _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp).isAppliedToRange(ownRanges);
|
10553
|
+
return _getApplier(tagName, className, classRegExp, cssStyle, styleRegExp, composer.element).isAppliedToRange(ownRanges);
|
10432
10554
|
}
|
10433
10555
|
};
|
10434
10556
|
})(wysihtml5);
|
@@ -11488,13 +11610,22 @@ wysihtml5.views.View = Base.extend(
|
|
11488
11610
|
this.parent.on("newword:composer", function() {
|
11489
11611
|
if (dom.getTextContent(that.element).match(dom.autoLink.URL_REG_EXP)) {
|
11490
11612
|
that.selection.executeAndRestore(function(startContainer, endContainer) {
|
11491
|
-
|
11613
|
+
var uneditables = that.element.querySelectorAll("." + that.config.uneditableContainerClassname),
|
11614
|
+
isInUneditable = false;
|
11615
|
+
|
11616
|
+
for (var i = uneditables.length; i--;) {
|
11617
|
+
if (wysihtml5.dom.contains(uneditables[i], endContainer)) {
|
11618
|
+
isInUneditable = true;
|
11619
|
+
}
|
11620
|
+
}
|
11621
|
+
|
11622
|
+
if (!isInUneditable) dom.autoLink(endContainer.parentNode, [that.config.uneditableContainerClassname]);
|
11492
11623
|
});
|
11493
11624
|
}
|
11494
11625
|
});
|
11495
11626
|
|
11496
11627
|
dom.observe(this.element, "blur", function() {
|
11497
|
-
dom.autoLink(that.element);
|
11628
|
+
dom.autoLink(that.element, [that.config.uneditableContainerClassname]);
|
11498
11629
|
});
|
11499
11630
|
}
|
11500
11631
|
|
@@ -11928,7 +12059,7 @@ wysihtml5.views.View = Base.extend(
|
|
11928
12059
|
}
|
11929
12060
|
};
|
11930
12061
|
|
11931
|
-
var handleDeleteKeyPress = function(selection, element) {
|
12062
|
+
var handleDeleteKeyPress = function(event, selection, element) {
|
11932
12063
|
if (selection.isCollapsed()) {
|
11933
12064
|
if (selection.caretIsInTheBeginnig()) {
|
11934
12065
|
event.preventDefault();
|
@@ -12129,7 +12260,7 @@ wysihtml5.views.View = Base.extend(
|
|
12129
12260
|
}
|
12130
12261
|
if (keyCode === 8) {
|
12131
12262
|
// delete key
|
12132
|
-
handleDeleteKeyPress(that.selection, element);
|
12263
|
+
handleDeleteKeyPress(event, that.selection, element);
|
12133
12264
|
} else if (keyCode === 9) {
|
12134
12265
|
event.preventDefault();
|
12135
12266
|
handleTabKeyDown(that, element);
|