Chrome 58 cannot select image

This commit is contained in:
lealife
2017-05-19 11:50:50 +08:00
parent f9b4ead6be
commit 6dc334ca51
11 changed files with 250 additions and 30 deletions

@ -600,6 +600,7 @@ define("tinymce/dom/Selection", [
}
if (!self.tridentSel) {
/*
sel = self.getSel();
if (sel) {
@ -621,6 +622,59 @@ define("tinymce/dom/Selection", [
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
*/
// https://github.com/tinymce/tinymce/blob/518a3bff9a5b5922e647db7b0b2d000d4d4c752f/js/tinymce/classes/dom/Selection.js
sel = self.getSel();
var evt = self.editor.fire('SetSelectionRange', {range: rng});
rng = evt.range;
if (sel) {
self.explicitRange = rng;
try {
sel.removeAllRanges();
sel.addRange(rng);
} catch (ex) {
// IE might throw errors here if the editor is within a hidden container and selection is changed
}
// Forward is set to false and we have an extend function
if (forward === false && sel.extend) {
sel.collapse(rng.endContainer, rng.endOffset);
sel.extend(rng.startContainer, rng.startOffset);
}
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
// WebKit egde case selecting images works better using setBaseAndExtent when the image is floated
if (!rng.collapsed && rng.startContainer == rng.endContainer && sel.setBaseAndExtent && !Env.ie) {
if (rng.endOffset - rng.startOffset < 2) {
if (rng.startContainer.hasChildNodes()) {
var node = rng.startContainer.childNodes[rng.startOffset];
if (node && node.tagName == 'IMG') {
sel.setBaseAndExtent(
rng.startContainer,
rng.startOffset,
rng.endContainer,
rng.endOffset
);
// Since the setBaseAndExtent is fixed in more recent Blink versions we
// need to detect if it's doing the wrong thing and falling back to the
// crazy incorrect behavior api call since that seems to be the only way
// to get it to work on Safari WebKit as of 2017-02-23
if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {
sel.setBaseAndExtent(node, 0, node, 1);
}
}
}
}
}
self.editor.fire('AfterSetSelectionRange', {range: rng});
} else {
// Is W3C Range fake range on IE
if (rng.cloneRange) {

@ -776,7 +776,8 @@ define("tinymce/util/Quirks", [
// Needs to be the setBaseAndExtend or it will fail to select floated images
if (/^(IMG|HR)$/.test(target.nodeName)) {
e.preventDefault();
selection.getSel().setBaseAndExtent(target, 0, target, 1);
// selection.getSel().setBaseAndExtent(target, 0, target, 1);
selection.select(target);
editor.nodeChanged();
}

@ -117,4 +117,4 @@
writeScripts();
})(this);
// $hash: e14184f419f8dc1fe827b5de879b07be
// $hash: 75083770f38396c70840f96857825cd8

@ -220,4 +220,4 @@
writeScripts();
})(this);
// $hash: d30fb130dd4d0e6c1d718e0219c3bee4
// $hash: 2cdc2f46f7abcdac7680091d5bb95656

@ -15390,6 +15390,7 @@ define("tinymce/dom/Selection", [
}
if (!self.tridentSel) {
/*
sel = self.getSel();
if (sel) {
@ -15411,6 +15412,59 @@ define("tinymce/dom/Selection", [
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
*/
// https://github.com/tinymce/tinymce/blob/518a3bff9a5b5922e647db7b0b2d000d4d4c752f/js/tinymce/classes/dom/Selection.js
sel = self.getSel();
var evt = self.editor.fire('SetSelectionRange', {range: rng});
rng = evt.range;
if (sel) {
self.explicitRange = rng;
try {
sel.removeAllRanges();
sel.addRange(rng);
} catch (ex) {
// IE might throw errors here if the editor is within a hidden container and selection is changed
}
// Forward is set to false and we have an extend function
if (forward === false && sel.extend) {
sel.collapse(rng.endContainer, rng.endOffset);
sel.extend(rng.startContainer, rng.startOffset);
}
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
// WebKit egde case selecting images works better using setBaseAndExtent when the image is floated
if (!rng.collapsed && rng.startContainer == rng.endContainer && sel.setBaseAndExtent && !Env.ie) {
if (rng.endOffset - rng.startOffset < 2) {
if (rng.startContainer.hasChildNodes()) {
var node = rng.startContainer.childNodes[rng.startOffset];
if (node && node.tagName == 'IMG') {
sel.setBaseAndExtent(
rng.startContainer,
rng.startOffset,
rng.endContainer,
rng.endOffset
);
// Since the setBaseAndExtent is fixed in more recent Blink versions we
// need to detect if it's doing the wrong thing and falling back to the
// crazy incorrect behavior api call since that seems to be the only way
// to get it to work on Safari WebKit as of 2017-02-23
if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {
sel.setBaseAndExtent(node, 0, node, 1);
}
}
}
}
}
self.editor.fire('AfterSetSelectionRange', {range: rng});
} else {
// Is W3C Range fake range on IE
if (rng.cloneRange) {
@ -27696,7 +27750,8 @@ define("tinymce/util/Quirks", [
// Needs to be the setBaseAndExtend or it will fail to select floated images
if (/^(IMG|HR)$/.test(target.nodeName)) {
e.preventDefault();
selection.getSel().setBaseAndExtent(target, 0, target, 1);
// selection.getSel().setBaseAndExtent(target, 0, target, 1);
selection.select(target);
editor.nodeChanged();
}

File diff suppressed because one or more lines are too long

@ -220,4 +220,4 @@
writeScripts();
})(this);
// $hash: 799d7f86d6ebd61d7a5fc860b40a34f9
// $hash: eabdc6a2088c313dc5540a41f4402051

@ -13375,6 +13375,7 @@ define("tinymce/dom/Selection", [
}
if (!self.tridentSel) {
/*
sel = self.getSel();
if (sel) {
@ -13396,6 +13397,59 @@ define("tinymce/dom/Selection", [
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
*/
// https://github.com/tinymce/tinymce/blob/518a3bff9a5b5922e647db7b0b2d000d4d4c752f/js/tinymce/classes/dom/Selection.js
sel = self.getSel();
var evt = self.editor.fire('SetSelectionRange', {range: rng});
rng = evt.range;
if (sel) {
self.explicitRange = rng;
try {
sel.removeAllRanges();
sel.addRange(rng);
} catch (ex) {
// IE might throw errors here if the editor is within a hidden container and selection is changed
}
// Forward is set to false and we have an extend function
if (forward === false && sel.extend) {
sel.collapse(rng.endContainer, rng.endOffset);
sel.extend(rng.startContainer, rng.startOffset);
}
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
// WebKit egde case selecting images works better using setBaseAndExtent when the image is floated
if (!rng.collapsed && rng.startContainer == rng.endContainer && sel.setBaseAndExtent && !Env.ie) {
if (rng.endOffset - rng.startOffset < 2) {
if (rng.startContainer.hasChildNodes()) {
var node = rng.startContainer.childNodes[rng.startOffset];
if (node && node.tagName == 'IMG') {
sel.setBaseAndExtent(
rng.startContainer,
rng.startOffset,
rng.endContainer,
rng.endOffset
);
// Since the setBaseAndExtent is fixed in more recent Blink versions we
// need to detect if it's doing the wrong thing and falling back to the
// crazy incorrect behavior api call since that seems to be the only way
// to get it to work on Safari WebKit as of 2017-02-23
if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {
sel.setBaseAndExtent(node, 0, node, 1);
}
}
}
}
}
self.editor.fire('AfterSetSelectionRange', {range: rng});
} else {
// Is W3C Range fake range on IE
if (rng.cloneRange) {
@ -25681,7 +25735,8 @@ define("tinymce/util/Quirks", [
// Needs to be the setBaseAndExtend or it will fail to select floated images
if (/^(IMG|HR)$/.test(target.nodeName)) {
e.preventDefault();
selection.getSel().setBaseAndExtent(target, 0, target, 1);
// selection.getSel().setBaseAndExtent(target, 0, target, 1);
selection.select(target);
editor.nodeChanged();
}

File diff suppressed because one or more lines are too long

@ -15390,6 +15390,7 @@ define("tinymce/dom/Selection", [
}
if (!self.tridentSel) {
/*
sel = self.getSel();
if (sel) {
@ -15411,6 +15412,59 @@ define("tinymce/dom/Selection", [
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
*/
// https://github.com/tinymce/tinymce/blob/518a3bff9a5b5922e647db7b0b2d000d4d4c752f/js/tinymce/classes/dom/Selection.js
sel = self.getSel();
var evt = self.editor.fire('SetSelectionRange', {range: rng});
rng = evt.range;
if (sel) {
self.explicitRange = rng;
try {
sel.removeAllRanges();
sel.addRange(rng);
} catch (ex) {
// IE might throw errors here if the editor is within a hidden container and selection is changed
}
// Forward is set to false and we have an extend function
if (forward === false && sel.extend) {
sel.collapse(rng.endContainer, rng.endOffset);
sel.extend(rng.startContainer, rng.startOffset);
}
// adding range isn't always successful so we need to check range count otherwise an exception can occur
self.selectedRange = sel.rangeCount > 0 ? sel.getRangeAt(0) : null;
}
// WebKit egde case selecting images works better using setBaseAndExtent when the image is floated
if (!rng.collapsed && rng.startContainer == rng.endContainer && sel.setBaseAndExtent && !Env.ie) {
if (rng.endOffset - rng.startOffset < 2) {
if (rng.startContainer.hasChildNodes()) {
var node = rng.startContainer.childNodes[rng.startOffset];
if (node && node.tagName == 'IMG') {
sel.setBaseAndExtent(
rng.startContainer,
rng.startOffset,
rng.endContainer,
rng.endOffset
);
// Since the setBaseAndExtent is fixed in more recent Blink versions we
// need to detect if it's doing the wrong thing and falling back to the
// crazy incorrect behavior api call since that seems to be the only way
// to get it to work on Safari WebKit as of 2017-02-23
if (sel.anchorNode !== rng.startContainer || sel.focusNode !== rng.endContainer) {
sel.setBaseAndExtent(node, 0, node, 1);
}
}
}
}
}
self.editor.fire('AfterSetSelectionRange', {range: rng});
} else {
// Is W3C Range fake range on IE
if (rng.cloneRange) {
@ -27696,7 +27750,8 @@ define("tinymce/util/Quirks", [
// Needs to be the setBaseAndExtend or it will fail to select floated images
if (/^(IMG|HR)$/.test(target.nodeName)) {
e.preventDefault();
selection.getSel().setBaseAndExtent(target, 0, target, 1);
// selection.getSel().setBaseAndExtent(target, 0, target, 1);
selection.select(target);
editor.nodeChanged();
}

File diff suppressed because one or more lines are too long