wysihtml-rails 0.5.4 → 0.5.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.
- checksums.yaml +7 -0
- data/lib/wysihtml/rails/version.rb +1 -1
- data/vendor/assets/javascripts/wysihtml-toolbar.js +120 -36
- data/vendor/assets/javascripts/wysihtml.js +120 -36
- metadata +56 -81
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 767ee6f57c497bdcc844ec3780f726188f304ed5
|
4
|
+
data.tar.gz: 3ec2d50e7b2ae296217c56ae4ca6013115dba8ca
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: def6f68afb2e233ebffae7b07a6148220fb3880104806b7fe9910fd9c57b7a9be24eb7c9759d449f79024847db7994ec5f75dd1592b699b3a0664963476c5c45
|
7
|
+
data.tar.gz: aebbfabd08964159b007f4a1d0cc30790e3c0084571d38ce171c5efd8fb79ebcc2bbdb87ecc443a6d737d4a1a297408c1daa501f8b5b64172b904ebc742ea28f
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license wysihtml v0.5.
|
2
|
+
* @license wysihtml v0.5.5
|
3
3
|
* https://github.com/Voog/wysihtml
|
4
4
|
*
|
5
5
|
* Author: Christopher Blum (https://github.com/tiff)
|
@@ -10,7 +10,7 @@
|
|
10
10
|
*
|
11
11
|
*/
|
12
12
|
var wysihtml5 = {
|
13
|
-
version: "0.5.
|
13
|
+
version: "0.5.5",
|
14
14
|
|
15
15
|
// namespaces
|
16
16
|
commands: {},
|
@@ -7119,6 +7119,10 @@ wysihtml5.browser = (function() {
|
|
7119
7119
|
return ("styleFloat" in document.createElement("div").style) ? "styleFloat" : "cssFloat";
|
7120
7120
|
}
|
7121
7121
|
return key;
|
7122
|
+
},
|
7123
|
+
|
7124
|
+
usesControlRanges: function() {
|
7125
|
+
return document.body && "createControlRange" in document.body;
|
7122
7126
|
}
|
7123
7127
|
};
|
7124
7128
|
})();
|
@@ -8136,8 +8140,8 @@ wysihtml5.dom.copyAttributes = function(attributesToCopy) {
|
|
8136
8140
|
|
8137
8141
|
transferContentTo: function(targetNode, removeOldWrapper) {
|
8138
8142
|
if (node.nodeType === 1) {
|
8139
|
-
if (wysihtml5.dom.domNode(targetNode).is.voidElement()) {
|
8140
|
-
while (node.
|
8143
|
+
if (wysihtml5.dom.domNode(targetNode).is.voidElement() || targetNode.nodeType === 3) {
|
8144
|
+
while (node.lastChild) {
|
8141
8145
|
targetNode.parentNode.insertBefore(node.lastChild, targetNode.nextSibling);
|
8142
8146
|
}
|
8143
8147
|
} else {
|
@@ -11736,6 +11740,14 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
11736
11740
|
return ret;
|
11737
11741
|
}
|
11738
11742
|
|
11743
|
+
function getRangeNode(node, offset) {
|
11744
|
+
if (node.nodeType === 3) {
|
11745
|
+
return node;
|
11746
|
+
} else {
|
11747
|
+
return node.childNodes[offset] || node;
|
11748
|
+
}
|
11749
|
+
}
|
11750
|
+
|
11739
11751
|
function getWebkitSelectionFixNode(container) {
|
11740
11752
|
var blankNode = document.createElement('span');
|
11741
11753
|
|
@@ -11806,7 +11818,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
11806
11818
|
/** @scope wysihtml5.Selection.prototype */ {
|
11807
11819
|
constructor: function(editor, contain, unselectableClass) {
|
11808
11820
|
// Make sure that our external range library is initialized
|
11809
|
-
|
11821
|
+
rangy.init();
|
11810
11822
|
|
11811
11823
|
this.editor = editor;
|
11812
11824
|
this.composer = editor.composer;
|
@@ -12133,11 +12145,16 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
12133
12145
|
range.deleteContents();
|
12134
12146
|
},
|
12135
12147
|
|
12148
|
+
getCaretNode: function () {
|
12149
|
+
var selection = this.getSelection();
|
12150
|
+
return (selection && selection.anchorNode) ? getRangeNode(selection.anchorNode, selection.anchorOffset) : null;
|
12151
|
+
},
|
12152
|
+
|
12136
12153
|
getPreviousNode: function(node, ignoreEmpty) {
|
12137
12154
|
var displayStyle;
|
12138
12155
|
if (!node) {
|
12139
12156
|
var selection = this.getSelection();
|
12140
|
-
node = selection.anchorNode;
|
12157
|
+
node = (selection && selection.anchorNode) ? getRangeNode(selection.anchorNode, selection.anchorOffset) : null;
|
12141
12158
|
}
|
12142
12159
|
|
12143
12160
|
if (node === this.contain) {
|
@@ -12257,15 +12274,24 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
12257
12274
|
return (/^\s*$/).test(endtxt);
|
12258
12275
|
},
|
12259
12276
|
|
12260
|
-
caretIsFirstInSelection: function() {
|
12277
|
+
caretIsFirstInSelection: function(includeLineBreaks) {
|
12261
12278
|
var r = rangy.createRange(this.doc),
|
12262
12279
|
s = this.getSelection(),
|
12263
12280
|
range = this.getRange(),
|
12264
|
-
startNode = range.startContainer;
|
12281
|
+
startNode = getRangeNode(range.startContainer, range.startOffset);
|
12265
12282
|
|
12266
12283
|
if (startNode) {
|
12267
12284
|
if (startNode.nodeType === wysihtml5.TEXT_NODE) {
|
12268
|
-
|
12285
|
+
if (!startNode.parentNode) {
|
12286
|
+
return false;
|
12287
|
+
}
|
12288
|
+
if (!this.isCollapsed() || (startNode.parentNode.firstChild !== startNode && !wysihtml5.dom.domNode(startNode.previousSibling).is.block())) {
|
12289
|
+
return false;
|
12290
|
+
}
|
12291
|
+
var ws = this.win.getComputedStyle(startNode.parentNode).whiteSpace;
|
12292
|
+
return (ws === "pre" || ws === "pre-wrap") ? range.startOffset === 0 : (/^\s*$/).test(startNode.data.substr(0,range.startOffset));
|
12293
|
+
} else if (includeLineBreaks && wysihtml5.dom.domNode(startNode).is.lineBreak()) {
|
12294
|
+
return true;
|
12269
12295
|
} else {
|
12270
12296
|
r.selectNodeContents(this.getRange().commonAncestorContainer);
|
12271
12297
|
r.collapse(true);
|
@@ -17526,31 +17552,36 @@ wysihtml5.views.View = Base.extend(
|
|
17526
17552
|
var selection = composer.selection,
|
17527
17553
|
prevNode = selection.getPreviousNode();
|
17528
17554
|
|
17529
|
-
if (selection.caretIsFirstInSelection() &&
|
17530
|
-
|
17531
|
-
|
17532
|
-
|
17533
|
-
|
17534
|
-
|
17535
|
-
|
17536
|
-
|
17537
|
-
|
17538
|
-
|
17539
|
-
|
17540
|
-
|
17541
|
-
|
17542
|
-
|
17543
|
-
|
17544
|
-
|
17545
|
-
|
17546
|
-
|
17547
|
-
|
17548
|
-
|
17549
|
-
|
17550
|
-
|
17551
|
-
|
17552
|
-
|
17553
|
-
|
17555
|
+
if (selection.caretIsFirstInSelection(wysihtml5.browser.usesControlRanges()) && prevNode) {
|
17556
|
+
if (prevNode.nodeType === 1 &&
|
17557
|
+
wysihtml5.dom.domNode(prevNode).is.block() &&
|
17558
|
+
!domNode(prevNode).test({
|
17559
|
+
query: "ol, ul, table, tr, dl"
|
17560
|
+
})
|
17561
|
+
) {
|
17562
|
+
if ((/^\s*$/).test(prevNode.textContent || prevNode.innerText)) {
|
17563
|
+
// If heading is empty remove the heading node
|
17564
|
+
prevNode.parentNode.removeChild(prevNode);
|
17565
|
+
return true;
|
17566
|
+
} else {
|
17567
|
+
if (prevNode.lastChild) {
|
17568
|
+
var selNode = prevNode.lastChild,
|
17569
|
+
selectedNode = selection.getSelectedNode(),
|
17570
|
+
commonAncestorNode = domNode(prevNode).commonAncestor(selectedNode, composer.element),
|
17571
|
+
curNode = wysihtml5.dom.getParentElement(selectedNode, {
|
17572
|
+
query: "h1, h2, h3, h4, h5, h6, p, pre, div, blockquote"
|
17573
|
+
}, false, commonAncestorNode || composer.element);
|
17574
|
+
|
17575
|
+
if (curNode) {
|
17576
|
+
domNode(curNode).transferContentTo(prevNode, true);
|
17577
|
+
selection.setAfter(selNode);
|
17578
|
+
return true;
|
17579
|
+
} else if (wysihtml5.browser.usesControlRanges()) {
|
17580
|
+
selectedNode = selection.getCaretNode();
|
17581
|
+
domNode(selectedNode).transferContentTo(prevNode, true);
|
17582
|
+
selection.setAfter(selNode);
|
17583
|
+
return true;
|
17584
|
+
}
|
17554
17585
|
}
|
17555
17586
|
}
|
17556
17587
|
}
|
@@ -17601,6 +17632,26 @@ wysihtml5.views.View = Base.extend(
|
|
17601
17632
|
return false;
|
17602
17633
|
},
|
17603
17634
|
|
17635
|
+
fixDeleteInTheBeginningOfControlSelection: function(composer) {
|
17636
|
+
var selection = composer.selection,
|
17637
|
+
prevNode = selection.getPreviousNode(),
|
17638
|
+
selectedNode = selection.getSelectedNode(),
|
17639
|
+
afterCaretNode;
|
17640
|
+
|
17641
|
+
if (selection.caretIsFirstInSelection()) {
|
17642
|
+
if (selectedNode.nodeType === 3) {
|
17643
|
+
selectedNode = selectedNode.parentNode;
|
17644
|
+
}
|
17645
|
+
afterCaretNode = selectedNode.firstChild;
|
17646
|
+
domNode(selectedNode).transferContentTo(prevNode, true);
|
17647
|
+
if (afterCaretNode) {
|
17648
|
+
composer.selection.setBefore(afterCaretNode);
|
17649
|
+
}
|
17650
|
+
return true;
|
17651
|
+
}
|
17652
|
+
return false;
|
17653
|
+
},
|
17654
|
+
|
17604
17655
|
// Table management
|
17605
17656
|
// If present enableObjectResizing and enableInlineTableEditing command should be called with false to prevent native table handlers
|
17606
17657
|
initTableHandling: function() {
|
@@ -17713,6 +17764,12 @@ wysihtml5.views.View = Base.extend(
|
|
17713
17764
|
event.preventDefault();
|
17714
17765
|
return;
|
17715
17766
|
}
|
17767
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
17768
|
+
if (actions.fixDeleteInTheBeginningOfControlSelection(composer)) {
|
17769
|
+
event.preventDefault();
|
17770
|
+
return;
|
17771
|
+
}
|
17772
|
+
}
|
17716
17773
|
} else {
|
17717
17774
|
if (selection.containsUneditable()) {
|
17718
17775
|
event.preventDefault();
|
@@ -17829,6 +17886,30 @@ wysihtml5.views.View = Base.extend(
|
|
17829
17886
|
this.selection.selectNode(target);
|
17830
17887
|
}
|
17831
17888
|
}
|
17889
|
+
|
17890
|
+
// Saves mousedown position for IE controlSelect fix
|
17891
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
17892
|
+
this.selection.lastMouseDownPos = {x: event.clientX, y: event.clientY};
|
17893
|
+
setTimeout(function() {
|
17894
|
+
delete this.selection.lastMouseDownPos;
|
17895
|
+
}.bind(this), 0);
|
17896
|
+
}
|
17897
|
+
};
|
17898
|
+
|
17899
|
+
// IE has this madness of control selects of overflowed and some other elements (weird box around element on selection and second click selects text)
|
17900
|
+
// This fix handles the second click problem by adding cursor to the right position under cursor inside when controlSelection is made
|
17901
|
+
var handleIEControlSelect = function(event) {
|
17902
|
+
var target = event.target,
|
17903
|
+
pos = this.selection.lastMouseDownPos;
|
17904
|
+
if (pos) {
|
17905
|
+
var caretPosition = document.body.createTextRange();
|
17906
|
+
setTimeout(function() {
|
17907
|
+
try {
|
17908
|
+
caretPosition.moveToPoint(pos.x, pos.y);
|
17909
|
+
caretPosition.select();
|
17910
|
+
} catch (e) {}
|
17911
|
+
}.bind(this), 0);
|
17912
|
+
}
|
17832
17913
|
};
|
17833
17914
|
|
17834
17915
|
var handleClick = function(event) {
|
@@ -17916,8 +17997,6 @@ wysihtml5.views.View = Base.extend(
|
|
17916
17997
|
this.selection.getSelection().removeAllRanges();
|
17917
17998
|
}).bind(this), 0);
|
17918
17999
|
};
|
17919
|
-
|
17920
|
-
|
17921
18000
|
|
17922
18001
|
// Testing requires actions to be accessible from out of scope
|
17923
18002
|
wysihtml5.views.Composer.prototype.observeActions = actions;
|
@@ -17961,6 +18040,11 @@ wysihtml5.views.View = Base.extend(
|
|
17961
18040
|
this.element.addEventListener("keyup", handleKeyUp.bind(this), false);
|
17962
18041
|
this.element.addEventListener("keydown", handleKeyDown.bind(this), false);
|
17963
18042
|
|
18043
|
+
// IE controlselect madness fix
|
18044
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
18045
|
+
this.element.addEventListener('mscontrolselect', handleIEControlSelect.bind(this), false);
|
18046
|
+
}
|
18047
|
+
|
17964
18048
|
this.element.addEventListener("dragenter", (function() {
|
17965
18049
|
this.parent.fire("unset_placeholder");
|
17966
18050
|
}).bind(this), false);
|
@@ -1,5 +1,5 @@
|
|
1
1
|
/**
|
2
|
-
* @license wysihtml v0.5.
|
2
|
+
* @license wysihtml v0.5.5
|
3
3
|
* https://github.com/Voog/wysihtml
|
4
4
|
*
|
5
5
|
* Author: Christopher Blum (https://github.com/tiff)
|
@@ -10,7 +10,7 @@
|
|
10
10
|
*
|
11
11
|
*/
|
12
12
|
var wysihtml5 = {
|
13
|
-
version: "0.5.
|
13
|
+
version: "0.5.5",
|
14
14
|
|
15
15
|
// namespaces
|
16
16
|
commands: {},
|
@@ -7119,6 +7119,10 @@ wysihtml5.browser = (function() {
|
|
7119
7119
|
return ("styleFloat" in document.createElement("div").style) ? "styleFloat" : "cssFloat";
|
7120
7120
|
}
|
7121
7121
|
return key;
|
7122
|
+
},
|
7123
|
+
|
7124
|
+
usesControlRanges: function() {
|
7125
|
+
return document.body && "createControlRange" in document.body;
|
7122
7126
|
}
|
7123
7127
|
};
|
7124
7128
|
})();
|
@@ -8136,8 +8140,8 @@ wysihtml5.dom.copyAttributes = function(attributesToCopy) {
|
|
8136
8140
|
|
8137
8141
|
transferContentTo: function(targetNode, removeOldWrapper) {
|
8138
8142
|
if (node.nodeType === 1) {
|
8139
|
-
if (wysihtml5.dom.domNode(targetNode).is.voidElement()) {
|
8140
|
-
while (node.
|
8143
|
+
if (wysihtml5.dom.domNode(targetNode).is.voidElement() || targetNode.nodeType === 3) {
|
8144
|
+
while (node.lastChild) {
|
8141
8145
|
targetNode.parentNode.insertBefore(node.lastChild, targetNode.nextSibling);
|
8142
8146
|
}
|
8143
8147
|
} else {
|
@@ -11736,6 +11740,14 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
11736
11740
|
return ret;
|
11737
11741
|
}
|
11738
11742
|
|
11743
|
+
function getRangeNode(node, offset) {
|
11744
|
+
if (node.nodeType === 3) {
|
11745
|
+
return node;
|
11746
|
+
} else {
|
11747
|
+
return node.childNodes[offset] || node;
|
11748
|
+
}
|
11749
|
+
}
|
11750
|
+
|
11739
11751
|
function getWebkitSelectionFixNode(container) {
|
11740
11752
|
var blankNode = document.createElement('span');
|
11741
11753
|
|
@@ -11806,7 +11818,7 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
11806
11818
|
/** @scope wysihtml5.Selection.prototype */ {
|
11807
11819
|
constructor: function(editor, contain, unselectableClass) {
|
11808
11820
|
// Make sure that our external range library is initialized
|
11809
|
-
|
11821
|
+
rangy.init();
|
11810
11822
|
|
11811
11823
|
this.editor = editor;
|
11812
11824
|
this.composer = editor.composer;
|
@@ -12133,11 +12145,16 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
12133
12145
|
range.deleteContents();
|
12134
12146
|
},
|
12135
12147
|
|
12148
|
+
getCaretNode: function () {
|
12149
|
+
var selection = this.getSelection();
|
12150
|
+
return (selection && selection.anchorNode) ? getRangeNode(selection.anchorNode, selection.anchorOffset) : null;
|
12151
|
+
},
|
12152
|
+
|
12136
12153
|
getPreviousNode: function(node, ignoreEmpty) {
|
12137
12154
|
var displayStyle;
|
12138
12155
|
if (!node) {
|
12139
12156
|
var selection = this.getSelection();
|
12140
|
-
node = selection.anchorNode;
|
12157
|
+
node = (selection && selection.anchorNode) ? getRangeNode(selection.anchorNode, selection.anchorOffset) : null;
|
12141
12158
|
}
|
12142
12159
|
|
12143
12160
|
if (node === this.contain) {
|
@@ -12257,15 +12274,24 @@ wysihtml5.quirks.ensureProperClearing = (function() {
|
|
12257
12274
|
return (/^\s*$/).test(endtxt);
|
12258
12275
|
},
|
12259
12276
|
|
12260
|
-
caretIsFirstInSelection: function() {
|
12277
|
+
caretIsFirstInSelection: function(includeLineBreaks) {
|
12261
12278
|
var r = rangy.createRange(this.doc),
|
12262
12279
|
s = this.getSelection(),
|
12263
12280
|
range = this.getRange(),
|
12264
|
-
startNode = range.startContainer;
|
12281
|
+
startNode = getRangeNode(range.startContainer, range.startOffset);
|
12265
12282
|
|
12266
12283
|
if (startNode) {
|
12267
12284
|
if (startNode.nodeType === wysihtml5.TEXT_NODE) {
|
12268
|
-
|
12285
|
+
if (!startNode.parentNode) {
|
12286
|
+
return false;
|
12287
|
+
}
|
12288
|
+
if (!this.isCollapsed() || (startNode.parentNode.firstChild !== startNode && !wysihtml5.dom.domNode(startNode.previousSibling).is.block())) {
|
12289
|
+
return false;
|
12290
|
+
}
|
12291
|
+
var ws = this.win.getComputedStyle(startNode.parentNode).whiteSpace;
|
12292
|
+
return (ws === "pre" || ws === "pre-wrap") ? range.startOffset === 0 : (/^\s*$/).test(startNode.data.substr(0,range.startOffset));
|
12293
|
+
} else if (includeLineBreaks && wysihtml5.dom.domNode(startNode).is.lineBreak()) {
|
12294
|
+
return true;
|
12269
12295
|
} else {
|
12270
12296
|
r.selectNodeContents(this.getRange().commonAncestorContainer);
|
12271
12297
|
r.collapse(true);
|
@@ -17526,31 +17552,36 @@ wysihtml5.views.View = Base.extend(
|
|
17526
17552
|
var selection = composer.selection,
|
17527
17553
|
prevNode = selection.getPreviousNode();
|
17528
17554
|
|
17529
|
-
if (selection.caretIsFirstInSelection() &&
|
17530
|
-
|
17531
|
-
|
17532
|
-
|
17533
|
-
|
17534
|
-
|
17535
|
-
|
17536
|
-
|
17537
|
-
|
17538
|
-
|
17539
|
-
|
17540
|
-
|
17541
|
-
|
17542
|
-
|
17543
|
-
|
17544
|
-
|
17545
|
-
|
17546
|
-
|
17547
|
-
|
17548
|
-
|
17549
|
-
|
17550
|
-
|
17551
|
-
|
17552
|
-
|
17553
|
-
|
17555
|
+
if (selection.caretIsFirstInSelection(wysihtml5.browser.usesControlRanges()) && prevNode) {
|
17556
|
+
if (prevNode.nodeType === 1 &&
|
17557
|
+
wysihtml5.dom.domNode(prevNode).is.block() &&
|
17558
|
+
!domNode(prevNode).test({
|
17559
|
+
query: "ol, ul, table, tr, dl"
|
17560
|
+
})
|
17561
|
+
) {
|
17562
|
+
if ((/^\s*$/).test(prevNode.textContent || prevNode.innerText)) {
|
17563
|
+
// If heading is empty remove the heading node
|
17564
|
+
prevNode.parentNode.removeChild(prevNode);
|
17565
|
+
return true;
|
17566
|
+
} else {
|
17567
|
+
if (prevNode.lastChild) {
|
17568
|
+
var selNode = prevNode.lastChild,
|
17569
|
+
selectedNode = selection.getSelectedNode(),
|
17570
|
+
commonAncestorNode = domNode(prevNode).commonAncestor(selectedNode, composer.element),
|
17571
|
+
curNode = wysihtml5.dom.getParentElement(selectedNode, {
|
17572
|
+
query: "h1, h2, h3, h4, h5, h6, p, pre, div, blockquote"
|
17573
|
+
}, false, commonAncestorNode || composer.element);
|
17574
|
+
|
17575
|
+
if (curNode) {
|
17576
|
+
domNode(curNode).transferContentTo(prevNode, true);
|
17577
|
+
selection.setAfter(selNode);
|
17578
|
+
return true;
|
17579
|
+
} else if (wysihtml5.browser.usesControlRanges()) {
|
17580
|
+
selectedNode = selection.getCaretNode();
|
17581
|
+
domNode(selectedNode).transferContentTo(prevNode, true);
|
17582
|
+
selection.setAfter(selNode);
|
17583
|
+
return true;
|
17584
|
+
}
|
17554
17585
|
}
|
17555
17586
|
}
|
17556
17587
|
}
|
@@ -17601,6 +17632,26 @@ wysihtml5.views.View = Base.extend(
|
|
17601
17632
|
return false;
|
17602
17633
|
},
|
17603
17634
|
|
17635
|
+
fixDeleteInTheBeginningOfControlSelection: function(composer) {
|
17636
|
+
var selection = composer.selection,
|
17637
|
+
prevNode = selection.getPreviousNode(),
|
17638
|
+
selectedNode = selection.getSelectedNode(),
|
17639
|
+
afterCaretNode;
|
17640
|
+
|
17641
|
+
if (selection.caretIsFirstInSelection()) {
|
17642
|
+
if (selectedNode.nodeType === 3) {
|
17643
|
+
selectedNode = selectedNode.parentNode;
|
17644
|
+
}
|
17645
|
+
afterCaretNode = selectedNode.firstChild;
|
17646
|
+
domNode(selectedNode).transferContentTo(prevNode, true);
|
17647
|
+
if (afterCaretNode) {
|
17648
|
+
composer.selection.setBefore(afterCaretNode);
|
17649
|
+
}
|
17650
|
+
return true;
|
17651
|
+
}
|
17652
|
+
return false;
|
17653
|
+
},
|
17654
|
+
|
17604
17655
|
// Table management
|
17605
17656
|
// If present enableObjectResizing and enableInlineTableEditing command should be called with false to prevent native table handlers
|
17606
17657
|
initTableHandling: function() {
|
@@ -17713,6 +17764,12 @@ wysihtml5.views.View = Base.extend(
|
|
17713
17764
|
event.preventDefault();
|
17714
17765
|
return;
|
17715
17766
|
}
|
17767
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
17768
|
+
if (actions.fixDeleteInTheBeginningOfControlSelection(composer)) {
|
17769
|
+
event.preventDefault();
|
17770
|
+
return;
|
17771
|
+
}
|
17772
|
+
}
|
17716
17773
|
} else {
|
17717
17774
|
if (selection.containsUneditable()) {
|
17718
17775
|
event.preventDefault();
|
@@ -17829,6 +17886,30 @@ wysihtml5.views.View = Base.extend(
|
|
17829
17886
|
this.selection.selectNode(target);
|
17830
17887
|
}
|
17831
17888
|
}
|
17889
|
+
|
17890
|
+
// Saves mousedown position for IE controlSelect fix
|
17891
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
17892
|
+
this.selection.lastMouseDownPos = {x: event.clientX, y: event.clientY};
|
17893
|
+
setTimeout(function() {
|
17894
|
+
delete this.selection.lastMouseDownPos;
|
17895
|
+
}.bind(this), 0);
|
17896
|
+
}
|
17897
|
+
};
|
17898
|
+
|
17899
|
+
// IE has this madness of control selects of overflowed and some other elements (weird box around element on selection and second click selects text)
|
17900
|
+
// This fix handles the second click problem by adding cursor to the right position under cursor inside when controlSelection is made
|
17901
|
+
var handleIEControlSelect = function(event) {
|
17902
|
+
var target = event.target,
|
17903
|
+
pos = this.selection.lastMouseDownPos;
|
17904
|
+
if (pos) {
|
17905
|
+
var caretPosition = document.body.createTextRange();
|
17906
|
+
setTimeout(function() {
|
17907
|
+
try {
|
17908
|
+
caretPosition.moveToPoint(pos.x, pos.y);
|
17909
|
+
caretPosition.select();
|
17910
|
+
} catch (e) {}
|
17911
|
+
}.bind(this), 0);
|
17912
|
+
}
|
17832
17913
|
};
|
17833
17914
|
|
17834
17915
|
var handleClick = function(event) {
|
@@ -17916,8 +17997,6 @@ wysihtml5.views.View = Base.extend(
|
|
17916
17997
|
this.selection.getSelection().removeAllRanges();
|
17917
17998
|
}).bind(this), 0);
|
17918
17999
|
};
|
17919
|
-
|
17920
|
-
|
17921
18000
|
|
17922
18001
|
// Testing requires actions to be accessible from out of scope
|
17923
18002
|
wysihtml5.views.Composer.prototype.observeActions = actions;
|
@@ -17961,6 +18040,11 @@ wysihtml5.views.View = Base.extend(
|
|
17961
18040
|
this.element.addEventListener("keyup", handleKeyUp.bind(this), false);
|
17962
18041
|
this.element.addEventListener("keydown", handleKeyDown.bind(this), false);
|
17963
18042
|
|
18043
|
+
// IE controlselect madness fix
|
18044
|
+
if (wysihtml5.browser.usesControlRanges()) {
|
18045
|
+
this.element.addEventListener('mscontrolselect', handleIEControlSelect.bind(this), false);
|
18046
|
+
}
|
18047
|
+
|
17964
18048
|
this.element.addEventListener("dragenter", (function() {
|
17965
18049
|
this.parent.fire("unset_placeholder");
|
17966
18050
|
}).bind(this), false);
|
metadata
CHANGED
@@ -1,79 +1,65 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: wysihtml-rails
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 5
|
9
|
-
- 4
|
10
|
-
version: 0.5.4
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.5.5
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Tanel Jakobsoo
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
dependencies:
|
21
|
-
- !ruby/object:Gem::Dependency
|
11
|
+
date: 2016-01-06 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
22
14
|
name: railties
|
23
|
-
|
24
|
-
|
25
|
-
none: false
|
26
|
-
requirements:
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
27
17
|
- - ">="
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
hash: 3
|
30
|
-
segments:
|
31
|
-
- 3
|
32
|
-
- 1
|
33
|
-
- 0
|
18
|
+
- !ruby/object:Gem::Version
|
34
19
|
version: 3.1.0
|
35
20
|
type: :runtime
|
36
|
-
version_requirements: *id001
|
37
|
-
- !ruby/object:Gem::Dependency
|
38
|
-
name: bundler
|
39
21
|
prerelease: false
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - ">="
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.0
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.3'
|
50
34
|
type: :development
|
51
|
-
version_requirements: *id002
|
52
|
-
- !ruby/object:Gem::Dependency
|
53
|
-
name: rake
|
54
35
|
prerelease: false
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.3'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
64
48
|
type: :development
|
65
|
-
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
66
55
|
description: A wysiwyg text editor for Rails assets pipeline
|
67
|
-
email:
|
56
|
+
email:
|
68
57
|
- tanel@fraktal.ee
|
69
58
|
executables: []
|
70
|
-
|
71
59
|
extensions: []
|
72
|
-
|
73
60
|
extra_rdoc_files: []
|
74
|
-
|
75
|
-
|
76
|
-
- .gitignore
|
61
|
+
files:
|
62
|
+
- ".gitignore"
|
77
63
|
- Gemfile
|
78
64
|
- LICENSE.txt
|
79
65
|
- README.md
|
@@ -88,39 +74,28 @@ files:
|
|
88
74
|
- vendor/assets/javascripts/wysihtml.js
|
89
75
|
- vendor/assets/stylesheets/wysihtml.css
|
90
76
|
- wysihtml-rails.gemspec
|
91
|
-
has_rdoc: true
|
92
77
|
homepage: https://github.com/Voog/wysihtml-rails
|
93
|
-
licenses:
|
78
|
+
licenses:
|
94
79
|
- MIT
|
80
|
+
metadata: {}
|
95
81
|
post_install_message:
|
96
82
|
rdoc_options: []
|
97
|
-
|
98
|
-
require_paths:
|
83
|
+
require_paths:
|
99
84
|
- lib
|
100
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
-
|
102
|
-
requirements:
|
85
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
103
87
|
- - ">="
|
104
|
-
- !ruby/object:Gem::Version
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
version: "0"
|
109
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
110
|
-
none: false
|
111
|
-
requirements:
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
91
|
+
requirements:
|
112
92
|
- - ">="
|
113
|
-
- !ruby/object:Gem::Version
|
114
|
-
|
115
|
-
segments:
|
116
|
-
- 0
|
117
|
-
version: "0"
|
93
|
+
- !ruby/object:Gem::Version
|
94
|
+
version: '0'
|
118
95
|
requirements: []
|
119
|
-
|
120
96
|
rubyforge_project:
|
121
|
-
rubygems_version:
|
97
|
+
rubygems_version: 2.2.2
|
122
98
|
signing_key:
|
123
|
-
specification_version:
|
99
|
+
specification_version: 4
|
124
100
|
summary: Wysihtml (http://wysihtml.com) text editor for Rails assets pipeline.
|
125
101
|
test_files: []
|
126
|
-
|