medium-editor-rails 0.12.0 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/CHANGELOG.md +4 -0
- data/README.md +1 -1
- data/lib/medium-editor-rails/version.rb +2 -2
- data/vendor/assets/javascripts/medium-editor.js +77 -62
- data/vendor/assets/stylesheets/medium-editor/medium-editor.css +0 -16
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 188188505037fdee5c1e46704ea790ebafbcb4bc
|
4
|
+
data.tar.gz: c5b6e9ea9d4f8887b8ca9b2aadcd19ca93c0af6d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a98514788486bbd56270b777592373c754984c65a2e318d1ffabc17a66b10de6b34a059854ffa37eb2077e574b87a4e05ef21170883b3a615f484ad44df602d6
|
7
|
+
data.tar.gz: 12af5954c85d0320b6c1737ce954ce2b7dba19bd707b96d2dcd87a212d6153eaa76ff14ee35756b9d0f8fe71b72bee5458e22c94f1e63839052ef4e1b3494f1e
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,9 @@
|
|
1
1
|
|
2
2
|
#### [Current]
|
3
|
+
* [fdb732b](../../commit/fdb732b) - __(Ahmet Sezgin Duran)__ Update Medium Editor files
|
4
|
+
|
5
|
+
#### 0.12.0
|
6
|
+
* [ca8041a](../../commit/ca8041a) - __(Ahmet Sezgin Duran)__ Bump versions 0.12.0 and 1.9.8
|
3
7
|
* [3e8148f](../../commit/3e8148f) - __(Ahmet Sezgin Duran)__ Update Medium Editor files
|
4
8
|
|
5
9
|
#### 0.11.0
|
data/README.md
CHANGED
@@ -8,7 +8,7 @@ This gem integrates [Medium Editor](https://github.com/daviferreira/medium-edito
|
|
8
8
|
|
9
9
|
## Version
|
10
10
|
|
11
|
-
The latest version of Medium Editor bundled by this gem is [1.9.
|
11
|
+
The latest version of Medium Editor bundled by this gem is [1.9.10](https://github.com/daviferreira/medium-editor/releases)
|
12
12
|
|
13
13
|
## Installation
|
14
14
|
|
@@ -6,6 +6,13 @@ function MediumEditor(elements, options) {
|
|
6
6
|
if (typeof module === 'object') {
|
7
7
|
module.exports = MediumEditor;
|
8
8
|
}
|
9
|
+
// AMD support
|
10
|
+
else if (typeof define === 'function' && define.amd) {
|
11
|
+
define(function () {
|
12
|
+
'use strict';
|
13
|
+
return MediumEditor;
|
14
|
+
});
|
15
|
+
}
|
9
16
|
|
10
17
|
(function (window, document) {
|
11
18
|
'use strict';
|
@@ -40,7 +47,7 @@ if (typeof module === 'object') {
|
|
40
47
|
var i,
|
41
48
|
len,
|
42
49
|
ranges,
|
43
|
-
sel =
|
50
|
+
sel = this.options.contentWindow.getSelection();
|
44
51
|
if (sel.getRangeAt && sel.rangeCount) {
|
45
52
|
ranges = [];
|
46
53
|
for (i = 0, len = sel.rangeCount; i < len; i += 1) {
|
@@ -54,7 +61,7 @@ if (typeof module === 'object') {
|
|
54
61
|
function restoreSelection(savedSel) {
|
55
62
|
var i,
|
56
63
|
len,
|
57
|
-
sel =
|
64
|
+
sel = this.options.contentWindow.getSelection();
|
58
65
|
if (savedSel) {
|
59
66
|
sel.removeAllRanges();
|
60
67
|
for (i = 0, len = savedSel.length; i < len; i += 1) {
|
@@ -66,7 +73,7 @@ if (typeof module === 'object') {
|
|
66
73
|
// http://stackoverflow.com/questions/1197401/how-can-i-get-the-element-the-caret-is-in-with-javascript-when-using-contentedi
|
67
74
|
// by You
|
68
75
|
function getSelectionStart() {
|
69
|
-
var node =
|
76
|
+
var node = this.options.ownerDocument.getSelection().anchorNode,
|
70
77
|
startNode = (node && node.nodeType === 3 ? node.parentNode : node);
|
71
78
|
return startNode;
|
72
79
|
}
|
@@ -79,18 +86,18 @@ if (typeof module === 'object') {
|
|
79
86
|
sel,
|
80
87
|
len,
|
81
88
|
container;
|
82
|
-
if (
|
83
|
-
sel =
|
89
|
+
if (this.options.contentWindow.getSelection !== undefined) {
|
90
|
+
sel = this.options.contentWindow.getSelection();
|
84
91
|
if (sel.rangeCount) {
|
85
|
-
container =
|
92
|
+
container = this.options.ownerDocument.createElement('div');
|
86
93
|
for (i = 0, len = sel.rangeCount; i < len; i += 1) {
|
87
94
|
container.appendChild(sel.getRangeAt(i).cloneContents());
|
88
95
|
}
|
89
96
|
html = container.innerHTML;
|
90
97
|
}
|
91
|
-
} else if (
|
92
|
-
if (
|
93
|
-
html =
|
98
|
+
} else if (this.options.ownerDocument.selection !== undefined) {
|
99
|
+
if (this.options.ownerDocument.selection.type === 'Text') {
|
100
|
+
html = this.options.ownerDocument.selection.createRange().htmlText;
|
94
101
|
}
|
95
102
|
}
|
96
103
|
return html;
|
@@ -118,6 +125,8 @@ if (typeof module === 'object') {
|
|
118
125
|
disableToolbar: false,
|
119
126
|
disableEditing: false,
|
120
127
|
elementsContainer: false,
|
128
|
+
contentWindow: window,
|
129
|
+
ownerDocument: document,
|
121
130
|
firstHeader: 'h3',
|
122
131
|
forcePlainText: true,
|
123
132
|
placeholder: 'Type your text',
|
@@ -137,13 +146,13 @@ if (typeof module === 'object') {
|
|
137
146
|
isIE: ((navigator.appName === 'Microsoft Internet Explorer') || ((navigator.appName === 'Netscape') && (new RegExp('Trident/.*rv:([0-9]{1,}[.0-9]{0,})').exec(navigator.userAgent) !== null))),
|
138
147
|
|
139
148
|
init: function (elements, options) {
|
149
|
+
this.options = extend(options, this.defaults);
|
140
150
|
this.setElementSelection(elements);
|
141
151
|
if (this.elements.length === 0) {
|
142
152
|
return;
|
143
153
|
}
|
144
154
|
this.parentElements = ['p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6', 'blockquote', 'pre'];
|
145
155
|
this.id = document.querySelectorAll('.medium-editor-toolbar').length + 1;
|
146
|
-
this.options = extend(options, this.defaults);
|
147
156
|
return this.setup();
|
148
157
|
},
|
149
158
|
|
@@ -193,7 +202,7 @@ if (typeof module === 'object') {
|
|
193
202
|
},
|
194
203
|
|
195
204
|
updateElementList: function () {
|
196
|
-
this.elements = typeof this.elementSelection === 'string' ?
|
205
|
+
this.elements = typeof this.elementSelection === 'string' ? this.options.ownerDocument.querySelectorAll(this.elementSelection) : this.elementSelection;
|
197
206
|
if (this.elements.nodeType === 1) {
|
198
207
|
this.elements = [this.elements];
|
199
208
|
}
|
@@ -264,7 +273,7 @@ if (typeof module === 'object') {
|
|
264
273
|
bindParagraphCreation: function (index) {
|
265
274
|
var self = this;
|
266
275
|
this.elements[index].addEventListener('keypress', function (e) {
|
267
|
-
var node = getSelectionStart(),
|
276
|
+
var node = getSelectionStart.call(self),
|
268
277
|
tagName;
|
269
278
|
if (e.which === 32) {
|
270
279
|
tagName = node.tagName.toLowerCase();
|
@@ -275,15 +284,15 @@ if (typeof module === 'object') {
|
|
275
284
|
});
|
276
285
|
|
277
286
|
this.elements[index].addEventListener('keyup', function (e) {
|
278
|
-
var node = getSelectionStart(),
|
287
|
+
var node = getSelectionStart.call(self),
|
279
288
|
tagName,
|
280
289
|
editorElement;
|
281
|
-
|
290
|
+
|
282
291
|
if (node && node.getAttribute('data-medium-element') && node.children.length === 0 && !(self.options.disableReturn || node.getAttribute('data-disable-return'))) {
|
283
292
|
document.execCommand('formatBlock', false, 'p');
|
284
293
|
}
|
285
294
|
if (e.which === 13) {
|
286
|
-
node = getSelectionStart();
|
295
|
+
node = getSelectionStart.call(self);
|
287
296
|
tagName = node.tagName.toLowerCase();
|
288
297
|
editorElement = self.getSelectionElement();
|
289
298
|
|
@@ -325,7 +334,7 @@ if (typeof module === 'object') {
|
|
325
334
|
if (self.options.disableReturn || this.getAttribute('data-disable-return')) {
|
326
335
|
e.preventDefault();
|
327
336
|
} else if (self.options.disableDoubleReturn || this.getAttribute('data-disable-double-return')) {
|
328
|
-
var node = getSelectionStart();
|
337
|
+
var node = getSelectionStart.call(self);
|
329
338
|
if (node && node.innerText === '\n') {
|
330
339
|
e.preventDefault();
|
331
340
|
}
|
@@ -336,10 +345,11 @@ if (typeof module === 'object') {
|
|
336
345
|
},
|
337
346
|
|
338
347
|
bindTab: function (index) {
|
348
|
+
var self = this;
|
339
349
|
this.elements[index].addEventListener('keydown', function (e) {
|
340
350
|
if (e.which === 9) {
|
341
351
|
// Override tab only for pre nodes
|
342
|
-
var tag = getSelectionStart().tagName.toLowerCase();
|
352
|
+
var tag = getSelectionStart.call(self).tagName.toLowerCase();
|
343
353
|
if (tag === 'pre') {
|
344
354
|
e.preventDefault();
|
345
355
|
document.execCommand('insertHtml', null, ' ');
|
@@ -591,7 +601,7 @@ if (typeof module === 'object') {
|
|
591
601
|
|
592
602
|
if (this.keepToolbarAlive !== true && !this.options.disableToolbar) {
|
593
603
|
|
594
|
-
newSelection =
|
604
|
+
newSelection = this.options.contentWindow.getSelection();
|
595
605
|
if (newSelection.toString().trim() === '' ||
|
596
606
|
(this.options.allowMultiParagraphSelection === false && this.hasMultiParagraphs()) ||
|
597
607
|
this.selectionInContentEditableFalse()) {
|
@@ -619,7 +629,7 @@ if (typeof module === 'object') {
|
|
619
629
|
},
|
620
630
|
|
621
631
|
hasMultiParagraphs: function () {
|
622
|
-
var selectionHtml = getSelectionHtml().replace(/<[\S]+><\/[\S]+>/gim, ''),
|
632
|
+
var selectionHtml = getSelectionHtml.call(this).replace(/<[\S]+><\/[\S]+>/gim, ''),
|
623
633
|
hasMultiParagraphs = selectionHtml.match(/<(p|h[0-6]|blockquote)>([\s\S]*?)<\/(p|h[0-6]|blockquote)>/g);
|
624
634
|
|
625
635
|
return (hasMultiParagraphs ? hasMultiParagraphs.length : 0);
|
@@ -641,7 +651,7 @@ if (typeof module === 'object') {
|
|
641
651
|
},
|
642
652
|
|
643
653
|
findMatchingSelectionParent: function(testElementFunction) {
|
644
|
-
var selection =
|
654
|
+
var selection = this.options.contentWindow.getSelection(), range, current;
|
645
655
|
|
646
656
|
if (selection.rangeCount === 0) {
|
647
657
|
return false;
|
@@ -682,7 +692,7 @@ if (typeof module === 'object') {
|
|
682
692
|
|
683
693
|
setToolbarPosition: function () {
|
684
694
|
var buttonHeight = 50,
|
685
|
-
selection =
|
695
|
+
selection = this.options.contentWindow.getSelection(),
|
686
696
|
range = selection.getRangeAt(0),
|
687
697
|
boundary = range.getBoundingClientRect(),
|
688
698
|
defaultLeft = (this.options.diffLeft) - (this.toolbar.offsetWidth / 2),
|
@@ -691,16 +701,16 @@ if (typeof module === 'object') {
|
|
691
701
|
if (boundary.top < buttonHeight) {
|
692
702
|
this.toolbar.classList.add('medium-toolbar-arrow-over');
|
693
703
|
this.toolbar.classList.remove('medium-toolbar-arrow-under');
|
694
|
-
this.toolbar.style.top = buttonHeight + boundary.bottom - this.options.diffTop +
|
704
|
+
this.toolbar.style.top = buttonHeight + boundary.bottom - this.options.diffTop + this.options.contentWindow.pageYOffset - this.toolbar.offsetHeight + 'px';
|
695
705
|
} else {
|
696
706
|
this.toolbar.classList.add('medium-toolbar-arrow-under');
|
697
707
|
this.toolbar.classList.remove('medium-toolbar-arrow-over');
|
698
|
-
this.toolbar.style.top = boundary.top + this.options.diffTop +
|
708
|
+
this.toolbar.style.top = boundary.top + this.options.diffTop + this.options.contentWindow.pageYOffset - this.toolbar.offsetHeight + 'px';
|
699
709
|
}
|
700
710
|
if (middleBoundary < halfOffsetWidth) {
|
701
711
|
this.toolbar.style.left = defaultLeft + halfOffsetWidth + 'px';
|
702
|
-
} else if ((
|
703
|
-
this.toolbar.style.left =
|
712
|
+
} else if ((this.options.contentWindow.innerWidth - middleBoundary) < halfOffsetWidth) {
|
713
|
+
this.toolbar.style.left = this.options.contentWindow.innerWidth + defaultLeft - halfOffsetWidth + 'px';
|
704
714
|
} else {
|
705
715
|
this.toolbar.style.left = defaultLeft + middleBoundary + 'px';
|
706
716
|
}
|
@@ -784,9 +794,9 @@ if (typeof module === 'object') {
|
|
784
794
|
} else if (action === 'anchor') {
|
785
795
|
this.triggerAnchorAction(e);
|
786
796
|
} else if (action === 'image') {
|
787
|
-
|
797
|
+
this.options.ownerDocument.execCommand('insertImage', false, this.options.contentWindow.getSelection());
|
788
798
|
} else {
|
789
|
-
|
799
|
+
this.options.ownerDocument.execCommand(action, false, null);
|
790
800
|
this.setToolbarPosition();
|
791
801
|
}
|
792
802
|
},
|
@@ -816,7 +826,7 @@ if (typeof module === 'object') {
|
|
816
826
|
var selectedParentElement = this.getSelectedParentElement();
|
817
827
|
if (selectedParentElement.tagName &&
|
818
828
|
selectedParentElement.tagName.toLowerCase() === 'a') {
|
819
|
-
|
829
|
+
this.options.ownerDocument.execCommand('unlink', false, null);
|
820
830
|
} else {
|
821
831
|
if (this.anchorForm.style.display === 'block') {
|
822
832
|
this.showToolbarActions();
|
@@ -834,7 +844,7 @@ if (typeof module === 'object') {
|
|
834
844
|
// https://developer.mozilla.org/en-US/docs/Rich-Text_Editing_in_Mozilla
|
835
845
|
if (el === 'blockquote' && selectionData.el &&
|
836
846
|
selectionData.el.parentNode.tagName.toLowerCase() === 'blockquote') {
|
837
|
-
return
|
847
|
+
return this.options.ownerDocument.execCommand('outdent', false, null);
|
838
848
|
}
|
839
849
|
if (selectionData.tagName === el) {
|
840
850
|
el = 'p';
|
@@ -845,11 +855,11 @@ if (typeof module === 'object') {
|
|
845
855
|
// http://stackoverflow.com/questions/1816223/rich-text-editor-with-blockquote-function/1821777#1821777
|
846
856
|
if (this.isIE) {
|
847
857
|
if (el === 'blockquote') {
|
848
|
-
return
|
858
|
+
return this.options.ownerDocument.execCommand('indent', false, el);
|
849
859
|
}
|
850
860
|
el = '<' + el + '>';
|
851
861
|
}
|
852
|
-
return
|
862
|
+
return this.options.ownerDocument.execCommand('formatBlock', false, el);
|
853
863
|
},
|
854
864
|
|
855
865
|
getSelectionData: function (el) {
|
@@ -902,11 +912,11 @@ if (typeof module === 'object') {
|
|
902
912
|
},
|
903
913
|
|
904
914
|
saveSelection: function() {
|
905
|
-
this.savedSelection = saveSelection();
|
915
|
+
this.savedSelection = saveSelection.call(this);
|
906
916
|
},
|
907
917
|
|
908
918
|
restoreSelection: function() {
|
909
|
-
restoreSelection(this.savedSelection);
|
919
|
+
restoreSelection.call(this, this.savedSelection);
|
910
920
|
},
|
911
921
|
|
912
922
|
showAnchorForm: function (link_value) {
|
@@ -975,13 +985,13 @@ if (typeof module === 'object') {
|
|
975
985
|
});
|
976
986
|
|
977
987
|
// Hide the anchor form when focusing outside of it.
|
978
|
-
|
988
|
+
this.options.ownerDocument.body.addEventListener('click', function (e) {
|
979
989
|
if (e.target !== self.anchorForm && !isDescendant(self.anchorForm, e.target) && !isDescendant(self.toolbarActions, e.target)) {
|
980
990
|
self.keepToolbarAlive = false;
|
981
991
|
self.checkSelection();
|
982
992
|
}
|
983
993
|
}, true);
|
984
|
-
|
994
|
+
this.options.ownerDocument.body.addEventListener('focus', function (e) {
|
985
995
|
if (e.target !== self.anchorForm && !isDescendant(self.anchorForm, e.target) && !isDescendant(self.toolbarActions, e.target)) {
|
986
996
|
self.keepToolbarAlive = false;
|
987
997
|
self.checkSelection();
|
@@ -991,7 +1001,7 @@ if (typeof module === 'object') {
|
|
991
1001
|
linkCancel.addEventListener('click', function (e) {
|
992
1002
|
e.preventDefault();
|
993
1003
|
self.showToolbarActions();
|
994
|
-
restoreSelection(self.savedSelection);
|
1004
|
+
restoreSelection.call(self, self.savedSelection);
|
995
1005
|
});
|
996
1006
|
return this;
|
997
1007
|
},
|
@@ -1031,11 +1041,11 @@ if (typeof module === 'object') {
|
|
1031
1041
|
|
1032
1042
|
self.anchorPreview.classList.add('medium-toolbar-arrow-over');
|
1033
1043
|
self.anchorPreview.classList.remove('medium-toolbar-arrow-under');
|
1034
|
-
self.anchorPreview.style.top = Math.round(buttonHeight + boundary.bottom - self.options.diffTop +
|
1044
|
+
self.anchorPreview.style.top = Math.round(buttonHeight + boundary.bottom - self.options.diffTop + this.options.contentWindow.pageYOffset - self.anchorPreview.offsetHeight) + 'px';
|
1035
1045
|
if (middleBoundary < halfOffsetWidth) {
|
1036
1046
|
self.anchorPreview.style.left = defaultLeft + halfOffsetWidth + 'px';
|
1037
|
-
} else if ((
|
1038
|
-
self.anchorPreview.style.left =
|
1047
|
+
} else if ((this.options.contentWindow.innerWidth - middleBoundary) < halfOffsetWidth) {
|
1048
|
+
self.anchorPreview.style.left = this.options.contentWindow.innerWidth + defaultLeft - halfOffsetWidth + 'px';
|
1039
1049
|
} else {
|
1040
1050
|
self.anchorPreview.style.left = defaultLeft + middleBoundary + 'px';
|
1041
1051
|
}
|
@@ -1084,7 +1094,7 @@ if (typeof module === 'object') {
|
|
1084
1094
|
|
1085
1095
|
createAnchorPreview: function () {
|
1086
1096
|
var self = this,
|
1087
|
-
anchorPreview =
|
1097
|
+
anchorPreview = this.options.ownerDocument.createElement('div');
|
1088
1098
|
|
1089
1099
|
anchorPreview.id = 'medium-editor-anchor-preview-' + this.id;
|
1090
1100
|
anchorPreview.className = 'medium-editor-anchor-preview';
|
@@ -1108,8 +1118,8 @@ if (typeof module === 'object') {
|
|
1108
1118
|
if (this.activeAnchor) {
|
1109
1119
|
|
1110
1120
|
var self = this,
|
1111
|
-
range =
|
1112
|
-
sel =
|
1121
|
+
range = this.options.ownerDocument.createRange(),
|
1122
|
+
sel = this.options.contentWindow.getSelection();
|
1113
1123
|
|
1114
1124
|
range.selectNodeContents(self.activeAnchor);
|
1115
1125
|
sel.removeAllRanges();
|
@@ -1179,9 +1189,9 @@ if (typeof module === 'object') {
|
|
1179
1189
|
return (re.test(value) ? '' : 'http://') + value;
|
1180
1190
|
},
|
1181
1191
|
|
1182
|
-
setTargetBlank: function () {
|
1183
|
-
var
|
1184
|
-
|
1192
|
+
setTargetBlank: function (el) {
|
1193
|
+
var i;
|
1194
|
+
el = el || getSelectionStart.call(this);
|
1185
1195
|
if (el.tagName.toLowerCase() === 'a') {
|
1186
1196
|
el.target = '_blank';
|
1187
1197
|
} else {
|
@@ -1193,7 +1203,7 @@ if (typeof module === 'object') {
|
|
1193
1203
|
},
|
1194
1204
|
|
1195
1205
|
setButtonClass: function (buttonClass) {
|
1196
|
-
var el = getSelectionStart(),
|
1206
|
+
var el = getSelectionStart.call(this),
|
1197
1207
|
classes = buttonClass.split(' '),
|
1198
1208
|
i, j;
|
1199
1209
|
if (el.tagName.toLowerCase() === 'a') {
|
@@ -1218,13 +1228,13 @@ if (typeof module === 'object') {
|
|
1218
1228
|
return;
|
1219
1229
|
}
|
1220
1230
|
|
1221
|
-
restoreSelection(this.savedSelection);
|
1231
|
+
restoreSelection.call(this, this.savedSelection);
|
1222
1232
|
|
1223
1233
|
if (this.options.checkLinkFormat) {
|
1224
1234
|
input.value = this.checkLinkFormat(input.value);
|
1225
1235
|
}
|
1226
1236
|
|
1227
|
-
|
1237
|
+
this.options.ownerDocument.execCommand('createLink', false, input.value);
|
1228
1238
|
|
1229
1239
|
if (this.options.targetBlank || target === "_blank") {
|
1230
1240
|
this.setTargetBlank();
|
@@ -1235,8 +1245,8 @@ if (typeof module === 'object') {
|
|
1235
1245
|
}
|
1236
1246
|
|
1237
1247
|
if (this.options.targetBlank || target === "_blank" || buttonClass) {
|
1238
|
-
event =
|
1239
|
-
event.initEvent("input", true, true,
|
1248
|
+
event = this.options.ownerDocument.createEvent("HTMLEvents");
|
1249
|
+
event.initEvent("input", true, true, this.options.contentWindow);
|
1240
1250
|
for (i = 0; i < this.elements.length; i += 1) {
|
1241
1251
|
this.elements[i].dispatchEvent(event);
|
1242
1252
|
}
|
@@ -1258,7 +1268,7 @@ if (typeof module === 'object') {
|
|
1258
1268
|
}
|
1259
1269
|
}, 100);
|
1260
1270
|
};
|
1261
|
-
|
1271
|
+
this.options.contentWindow.addEventListener('resize', this.windowResizeHandler);
|
1262
1272
|
return this;
|
1263
1273
|
},
|
1264
1274
|
|
@@ -1285,8 +1295,8 @@ if (typeof module === 'object') {
|
|
1285
1295
|
delete this.anchorPreview;
|
1286
1296
|
}
|
1287
1297
|
|
1288
|
-
|
1289
|
-
|
1298
|
+
this.options.ownerDocument.documentElement.removeEventListener('mouseup', this.checkSelectionWrapper);
|
1299
|
+
this.options.contentWindow.removeEventListener('resize', this.windowResizeHandler);
|
1290
1300
|
|
1291
1301
|
for (i = 0; i < this.elements.length; i += 1) {
|
1292
1302
|
this.elements[i].removeEventListener('mouseover', this.editorAnchorObserverWrapper);
|
@@ -1334,10 +1344,10 @@ if (typeof module === 'object') {
|
|
1334
1344
|
}
|
1335
1345
|
}
|
1336
1346
|
}
|
1337
|
-
|
1347
|
+
self.options.ownerDocument.execCommand('insertHTML', false, html);
|
1338
1348
|
} else {
|
1339
1349
|
html = self.htmlEntities(e.clipboardData.getData('text/plain'));
|
1340
|
-
|
1350
|
+
self.options.ownerDocument.execCommand('insertHTML', false, html);
|
1341
1351
|
}
|
1342
1352
|
}
|
1343
1353
|
};
|
@@ -1420,15 +1430,20 @@ if (typeof module === 'object') {
|
|
1420
1430
|
elList = text.split('<br><br>');
|
1421
1431
|
|
1422
1432
|
this.pasteHTML('<p>' + elList.join('</p><p>') + '</p>');
|
1423
|
-
|
1433
|
+
this.options.ownerDocument.execCommand('insertText', false, "\n");
|
1424
1434
|
|
1425
1435
|
// block element cleanup
|
1426
|
-
elList = el.querySelectorAll('p,div,br');
|
1436
|
+
elList = el.querySelectorAll('a,p,div,br');
|
1427
1437
|
for (i = 0; i < elList.length; i += 1) {
|
1428
1438
|
|
1429
1439
|
workEl = elList[i];
|
1430
1440
|
|
1431
1441
|
switch (workEl.tagName.toLowerCase()) {
|
1442
|
+
case 'a':
|
1443
|
+
if (this.options.targetBlank){
|
1444
|
+
this.setTargetBlank(workEl);
|
1445
|
+
}
|
1446
|
+
break;
|
1432
1447
|
case 'p':
|
1433
1448
|
case 'div':
|
1434
1449
|
this.filterCommonBlocks(workEl);
|
@@ -1450,9 +1465,9 @@ if (typeof module === 'object') {
|
|
1450
1465
|
},
|
1451
1466
|
|
1452
1467
|
pasteHTML: function (html) {
|
1453
|
-
var elList, workEl, i, fragmentBody, pasteBlock =
|
1468
|
+
var elList, workEl, i, fragmentBody, pasteBlock = this.options.ownerDocument.createDocumentFragment();
|
1454
1469
|
|
1455
|
-
pasteBlock.appendChild(
|
1470
|
+
pasteBlock.appendChild(this.options.ownerDocument.createElement('body'));
|
1456
1471
|
|
1457
1472
|
fragmentBody = pasteBlock.querySelector('body');
|
1458
1473
|
fragmentBody.innerHTML = html;
|
@@ -1474,7 +1489,7 @@ if (typeof module === 'object') {
|
|
1474
1489
|
}
|
1475
1490
|
|
1476
1491
|
}
|
1477
|
-
|
1492
|
+
this.options.ownerDocument.execCommand('insertHTML', false, fragmentBody.innerHTML.replace(/ /g, ' '));
|
1478
1493
|
},
|
1479
1494
|
isCommonBlock: function (el) {
|
1480
1495
|
return (el && (el.tagName.toLowerCase() === 'p' || el.tagName.toLowerCase() === 'div'));
|
@@ -1525,7 +1540,7 @@ if (typeof module === 'object') {
|
|
1525
1540
|
for (i = 0; i < spans.length; i += 1) {
|
1526
1541
|
|
1527
1542
|
el = spans[i];
|
1528
|
-
new_el =
|
1543
|
+
new_el = this.options.ownerDocument.createElement(el.classList.contains('bold') ? 'b' : 'i');
|
1529
1544
|
|
1530
1545
|
if (el.classList.contains('bold') && el.classList.contains('italic')) {
|
1531
1546
|
|
@@ -1550,7 +1565,7 @@ if (typeof module === 'object') {
|
|
1550
1565
|
if (/^\s*$/.test()) {
|
1551
1566
|
el.parentNode.removeChild(el);
|
1552
1567
|
} else {
|
1553
|
-
el.parentNode.replaceChild(
|
1568
|
+
el.parentNode.replaceChild(this.options.ownerDocument.createTextNode(el.innerText), el);
|
1554
1569
|
}
|
1555
1570
|
|
1556
1571
|
}
|
@@ -58,22 +58,6 @@
|
|
58
58
|
transform: matrix(1, 0, 0, 1, 0, 0);
|
59
59
|
opacity: 1; } }
|
60
60
|
|
61
|
-
.btn {
|
62
|
-
display: inline-block;
|
63
|
-
margin-bottom: 0;
|
64
|
-
font-weight: normal;
|
65
|
-
text-align: center;
|
66
|
-
vertical-align: middle;
|
67
|
-
background: #efefef;
|
68
|
-
border: 1px solid #ccc;
|
69
|
-
white-space: nowrap;
|
70
|
-
padding: 6px 12px;
|
71
|
-
border-radius: 4px;
|
72
|
-
color: #333;
|
73
|
-
text-decoration: none; }
|
74
|
-
.btn:hover {
|
75
|
-
text-decoration: underline; }
|
76
|
-
|
77
61
|
.medium-toolbar-arrow-under:after, .medium-toolbar-arrow-over:before {
|
78
62
|
position: absolute;
|
79
63
|
left: 50%;
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: medium-editor-rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ahmet Sezgin Duran
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-11-19 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: railties
|
@@ -83,9 +83,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
83
83
|
version: '0'
|
84
84
|
requirements: []
|
85
85
|
rubyforge_project:
|
86
|
-
rubygems_version: 2.
|
86
|
+
rubygems_version: 2.4.2
|
87
87
|
signing_key:
|
88
88
|
specification_version: 4
|
89
89
|
summary: Medium Editor integrated in Rails asset pipeline
|
90
90
|
test_files: []
|
91
|
-
has_rdoc:
|