@textbus/platform-browser 3.8.1 → 3.8.3

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.
@@ -73,7 +73,9 @@ export declare class MagicInput extends Input {
73
73
  destroy(): void;
74
74
  private init;
75
75
  private handleDefaultActions;
76
- private handlePaste;
76
+ copyHandler(ev: ClipboardEvent): void;
77
+ pasteHandler(ev: ClipboardEvent): void;
78
+ private paste;
77
79
  private handleShortcut;
78
80
  private handleInput;
79
81
  private createEditableFrame;
@@ -47,7 +47,9 @@ export declare class NativeInput extends Input {
47
47
  blur(): void;
48
48
  destroy(): void;
49
49
  private handleDefaultActions;
50
- private handlePaste;
50
+ copyHandler(ev: ClipboardEvent): void;
51
+ pasteHandler(ev: ClipboardEvent): void;
52
+ private paste;
51
53
  private handleShortcut;
52
54
  private handleInput;
53
55
  private handleMobileInput;
@@ -1736,60 +1736,67 @@ let MagicInput = class MagicInput extends Input {
1736
1736
  }
1737
1737
  handleDefaultActions(textarea) {
1738
1738
  this.subscription.add(fromEvent(isFirefox() ? textarea : document, 'copy').subscribe(ev => {
1739
- const selection = this.selection;
1740
- if (!selection.isSelected) {
1741
- return;
1742
- }
1743
- if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
1744
- const content = selection.startSlot.getContentAtIndex(selection.startOffset);
1745
- if (typeof content === 'object') {
1746
- const clipboardData = ev.clipboardData;
1747
- const nativeSelection = document.getSelection();
1748
- const range = nativeSelection.getRangeAt(0);
1749
- const div = document.createElement('div');
1750
- const fragment = range.cloneContents();
1751
- div.append(fragment);
1752
- clipboardData.setData('text/html', div.innerHTML);
1753
- clipboardData.setData('text', div.innerText);
1754
- ev.preventDefault();
1755
- }
1756
- }
1739
+ this.copyHandler(ev);
1757
1740
  }), fromEvent(textarea, 'paste').subscribe(ev => {
1758
- const text = ev.clipboardData.getData('Text');
1759
- const files = Array.from(ev.clipboardData.files);
1760
- if (files.length) {
1761
- Promise.all(files.filter(i => {
1762
- return /image/i.test(i.type);
1763
- }).map(item => {
1764
- const reader = new FileReader();
1765
- return new Promise(resolve => {
1766
- reader.onload = (event) => {
1767
- resolve(event.target.result);
1768
- };
1769
- reader.readAsDataURL(item);
1770
- });
1771
- })).then(urls => {
1772
- const html = urls.map(i => {
1773
- return `<img src=${i}>`;
1774
- }).join('');
1775
- this.handlePaste(html, text);
1776
- });
1741
+ this.pasteHandler(ev);
1742
+ }));
1743
+ }
1744
+ copyHandler(ev) {
1745
+ const selection = this.selection;
1746
+ if (!selection.isSelected) {
1747
+ return;
1748
+ }
1749
+ if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
1750
+ const content = selection.startSlot.getContentAtIndex(selection.startOffset);
1751
+ if (typeof content === 'object') {
1752
+ const clipboardData = ev.clipboardData;
1753
+ const nativeSelection = document.getSelection();
1754
+ const range = nativeSelection.getRangeAt(0);
1755
+ const div = document.createElement('div');
1756
+ const fragment = range.cloneContents();
1757
+ div.append(fragment);
1758
+ clipboardData.setData('text/html', div.innerHTML);
1759
+ clipboardData.setData('text', div.innerText);
1777
1760
  ev.preventDefault();
1778
- return;
1779
1761
  }
1780
- const div = this.doc.createElement('div');
1781
- div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
1782
- div.contentEditable = 'true';
1783
- this.doc.body.appendChild(div);
1784
- div.focus();
1785
- setTimeout(() => {
1786
- this.doc.body.removeChild(div);
1787
- div.style.cssText = '';
1788
- this.handlePaste(div, text);
1762
+ }
1763
+ }
1764
+ pasteHandler(ev) {
1765
+ const text = ev.clipboardData.getData('Text');
1766
+ const types = Array.from(ev.clipboardData.types || []);
1767
+ const files = Array.from(ev.clipboardData.files);
1768
+ if (types.every(type => type === 'Files') && files.length) {
1769
+ Promise.all(files.filter(i => {
1770
+ return /image/i.test(i.type);
1771
+ }).map(item => {
1772
+ const reader = new FileReader();
1773
+ return new Promise(resolve => {
1774
+ reader.onload = (event) => {
1775
+ resolve(event.target.result);
1776
+ };
1777
+ reader.readAsDataURL(item);
1778
+ });
1779
+ })).then(urls => {
1780
+ const html = urls.map(i => {
1781
+ return `<img src=${i}>`;
1782
+ }).join('');
1783
+ this.paste(html, text);
1789
1784
  });
1790
- }));
1785
+ ev.preventDefault();
1786
+ return;
1787
+ }
1788
+ const div = this.doc.createElement('div');
1789
+ div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
1790
+ div.contentEditable = 'true';
1791
+ this.doc.body.appendChild(div);
1792
+ div.focus();
1793
+ setTimeout(() => {
1794
+ this.doc.body.removeChild(div);
1795
+ div.style.cssText = '';
1796
+ this.paste(div, text);
1797
+ });
1791
1798
  }
1792
- handlePaste(dom, text) {
1799
+ paste(dom, text) {
1793
1800
  const slot = this.parser.parse(dom, new Slot([
1794
1801
  ContentType.BlockComponent,
1795
1802
  ContentType.InlineComponent,
@@ -2121,60 +2128,67 @@ let NativeInput = class NativeInput extends Input {
2121
2128
  }
2122
2129
  handleDefaultActions(textarea) {
2123
2130
  this.subscription.add(fromEvent(isFirefox() ? textarea : document, 'copy').subscribe(ev => {
2124
- const selection = this.selection;
2125
- if (!selection.isSelected) {
2126
- return;
2127
- }
2128
- if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
2129
- const content = selection.startSlot.getContentAtIndex(selection.startOffset);
2130
- if (typeof content === 'object') {
2131
- const clipboardData = ev.clipboardData;
2132
- const nativeSelection = document.getSelection();
2133
- const range = nativeSelection.getRangeAt(0);
2134
- const div = document.createElement('div');
2135
- const fragment = range.cloneContents();
2136
- div.append(fragment);
2137
- clipboardData.setData('text/html', div.innerHTML);
2138
- clipboardData.setData('text', div.innerText);
2139
- ev.preventDefault();
2140
- }
2141
- }
2131
+ this.copyHandler(ev);
2142
2132
  }), fromEvent(textarea, 'paste').subscribe(ev => {
2143
- const text = ev.clipboardData.getData('Text');
2144
- const files = Array.from(ev.clipboardData.files);
2145
- if (files.length) {
2146
- Promise.all(files.filter(i => {
2147
- return /image/i.test(i.type);
2148
- }).map(item => {
2149
- const reader = new FileReader();
2150
- return new Promise(resolve => {
2151
- reader.onload = (event) => {
2152
- resolve(event.target.result);
2153
- };
2154
- reader.readAsDataURL(item);
2155
- });
2156
- })).then(urls => {
2157
- const html = urls.map(i => {
2158
- return `<img src=${i}>`;
2159
- }).join('');
2160
- this.handlePaste(html, text);
2161
- });
2133
+ this.pasteHandler(ev);
2134
+ }));
2135
+ }
2136
+ copyHandler(ev) {
2137
+ const selection = this.selection;
2138
+ if (!selection.isSelected) {
2139
+ return;
2140
+ }
2141
+ if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
2142
+ const content = selection.startSlot.getContentAtIndex(selection.startOffset);
2143
+ if (typeof content === 'object') {
2144
+ const clipboardData = ev.clipboardData;
2145
+ const nativeSelection = document.getSelection();
2146
+ const range = nativeSelection.getRangeAt(0);
2147
+ const div = document.createElement('div');
2148
+ const fragment = range.cloneContents();
2149
+ div.append(fragment);
2150
+ clipboardData.setData('text/html', div.innerHTML);
2151
+ clipboardData.setData('text', div.innerText);
2162
2152
  ev.preventDefault();
2163
- return;
2164
2153
  }
2165
- const div = document.createElement('div');
2166
- div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
2167
- div.contentEditable = 'true';
2168
- document.body.appendChild(div);
2169
- div.focus();
2170
- setTimeout(() => {
2171
- document.body.removeChild(div);
2172
- div.style.cssText = '';
2173
- this.handlePaste(div, text);
2154
+ }
2155
+ }
2156
+ pasteHandler(ev) {
2157
+ const text = ev.clipboardData.getData('Text');
2158
+ const types = Array.from(ev.clipboardData.types || []);
2159
+ const files = Array.from(ev.clipboardData.files);
2160
+ if (types.every(type => type === 'Files') && files.length) {
2161
+ Promise.all(files.filter(i => {
2162
+ return /image/i.test(i.type);
2163
+ }).map(item => {
2164
+ const reader = new FileReader();
2165
+ return new Promise(resolve => {
2166
+ reader.onload = (event) => {
2167
+ resolve(event.target.result);
2168
+ };
2169
+ reader.readAsDataURL(item);
2170
+ });
2171
+ })).then(urls => {
2172
+ const html = urls.map(i => {
2173
+ return `<img src=${i}>`;
2174
+ }).join('');
2175
+ this.paste(html, text);
2174
2176
  });
2175
- }));
2177
+ ev.preventDefault();
2178
+ return;
2179
+ }
2180
+ const div = document.createElement('div');
2181
+ div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
2182
+ div.contentEditable = 'true';
2183
+ document.body.appendChild(div);
2184
+ div.focus();
2185
+ setTimeout(() => {
2186
+ document.body.removeChild(div);
2187
+ div.style.cssText = '';
2188
+ this.paste(div, text);
2189
+ });
2176
2190
  }
2177
- handlePaste(dom, text) {
2191
+ paste(dom, text) {
2178
2192
  const slot = this.parser.parse(dom, new Slot([
2179
2193
  ContentType.BlockComponent,
2180
2194
  ContentType.InlineComponent,
package/bundles/index.js CHANGED
@@ -1738,60 +1738,67 @@ exports.MagicInput = class MagicInput extends Input {
1738
1738
  }
1739
1739
  handleDefaultActions(textarea) {
1740
1740
  this.subscription.add(stream.fromEvent(isFirefox() ? textarea : document, 'copy').subscribe(ev => {
1741
- const selection = this.selection;
1742
- if (!selection.isSelected) {
1743
- return;
1744
- }
1745
- if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
1746
- const content = selection.startSlot.getContentAtIndex(selection.startOffset);
1747
- if (typeof content === 'object') {
1748
- const clipboardData = ev.clipboardData;
1749
- const nativeSelection = document.getSelection();
1750
- const range = nativeSelection.getRangeAt(0);
1751
- const div = document.createElement('div');
1752
- const fragment = range.cloneContents();
1753
- div.append(fragment);
1754
- clipboardData.setData('text/html', div.innerHTML);
1755
- clipboardData.setData('text', div.innerText);
1756
- ev.preventDefault();
1757
- }
1758
- }
1741
+ this.copyHandler(ev);
1759
1742
  }), stream.fromEvent(textarea, 'paste').subscribe(ev => {
1760
- const text = ev.clipboardData.getData('Text');
1761
- const files = Array.from(ev.clipboardData.files);
1762
- if (files.length) {
1763
- Promise.all(files.filter(i => {
1764
- return /image/i.test(i.type);
1765
- }).map(item => {
1766
- const reader = new FileReader();
1767
- return new Promise(resolve => {
1768
- reader.onload = (event) => {
1769
- resolve(event.target.result);
1770
- };
1771
- reader.readAsDataURL(item);
1772
- });
1773
- })).then(urls => {
1774
- const html = urls.map(i => {
1775
- return `<img src=${i}>`;
1776
- }).join('');
1777
- this.handlePaste(html, text);
1778
- });
1743
+ this.pasteHandler(ev);
1744
+ }));
1745
+ }
1746
+ copyHandler(ev) {
1747
+ const selection = this.selection;
1748
+ if (!selection.isSelected) {
1749
+ return;
1750
+ }
1751
+ if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
1752
+ const content = selection.startSlot.getContentAtIndex(selection.startOffset);
1753
+ if (typeof content === 'object') {
1754
+ const clipboardData = ev.clipboardData;
1755
+ const nativeSelection = document.getSelection();
1756
+ const range = nativeSelection.getRangeAt(0);
1757
+ const div = document.createElement('div');
1758
+ const fragment = range.cloneContents();
1759
+ div.append(fragment);
1760
+ clipboardData.setData('text/html', div.innerHTML);
1761
+ clipboardData.setData('text', div.innerText);
1779
1762
  ev.preventDefault();
1780
- return;
1781
1763
  }
1782
- const div = this.doc.createElement('div');
1783
- div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
1784
- div.contentEditable = 'true';
1785
- this.doc.body.appendChild(div);
1786
- div.focus();
1787
- setTimeout(() => {
1788
- this.doc.body.removeChild(div);
1789
- div.style.cssText = '';
1790
- this.handlePaste(div, text);
1764
+ }
1765
+ }
1766
+ pasteHandler(ev) {
1767
+ const text = ev.clipboardData.getData('Text');
1768
+ const types = Array.from(ev.clipboardData.types || []);
1769
+ const files = Array.from(ev.clipboardData.files);
1770
+ if (types.every(type => type === 'Files') && files.length) {
1771
+ Promise.all(files.filter(i => {
1772
+ return /image/i.test(i.type);
1773
+ }).map(item => {
1774
+ const reader = new FileReader();
1775
+ return new Promise(resolve => {
1776
+ reader.onload = (event) => {
1777
+ resolve(event.target.result);
1778
+ };
1779
+ reader.readAsDataURL(item);
1780
+ });
1781
+ })).then(urls => {
1782
+ const html = urls.map(i => {
1783
+ return `<img src=${i}>`;
1784
+ }).join('');
1785
+ this.paste(html, text);
1791
1786
  });
1792
- }));
1787
+ ev.preventDefault();
1788
+ return;
1789
+ }
1790
+ const div = this.doc.createElement('div');
1791
+ div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
1792
+ div.contentEditable = 'true';
1793
+ this.doc.body.appendChild(div);
1794
+ div.focus();
1795
+ setTimeout(() => {
1796
+ this.doc.body.removeChild(div);
1797
+ div.style.cssText = '';
1798
+ this.paste(div, text);
1799
+ });
1793
1800
  }
1794
- handlePaste(dom, text) {
1801
+ paste(dom, text) {
1795
1802
  const slot = this.parser.parse(dom, new core.Slot([
1796
1803
  core.ContentType.BlockComponent,
1797
1804
  core.ContentType.InlineComponent,
@@ -2123,60 +2130,67 @@ exports.NativeInput = class NativeInput extends Input {
2123
2130
  }
2124
2131
  handleDefaultActions(textarea) {
2125
2132
  this.subscription.add(stream.fromEvent(isFirefox() ? textarea : document, 'copy').subscribe(ev => {
2126
- const selection = this.selection;
2127
- if (!selection.isSelected) {
2128
- return;
2129
- }
2130
- if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
2131
- const content = selection.startSlot.getContentAtIndex(selection.startOffset);
2132
- if (typeof content === 'object') {
2133
- const clipboardData = ev.clipboardData;
2134
- const nativeSelection = document.getSelection();
2135
- const range = nativeSelection.getRangeAt(0);
2136
- const div = document.createElement('div');
2137
- const fragment = range.cloneContents();
2138
- div.append(fragment);
2139
- clipboardData.setData('text/html', div.innerHTML);
2140
- clipboardData.setData('text', div.innerText);
2141
- ev.preventDefault();
2142
- }
2143
- }
2133
+ this.copyHandler(ev);
2144
2134
  }), stream.fromEvent(textarea, 'paste').subscribe(ev => {
2145
- const text = ev.clipboardData.getData('Text');
2146
- const files = Array.from(ev.clipboardData.files);
2147
- if (files.length) {
2148
- Promise.all(files.filter(i => {
2149
- return /image/i.test(i.type);
2150
- }).map(item => {
2151
- const reader = new FileReader();
2152
- return new Promise(resolve => {
2153
- reader.onload = (event) => {
2154
- resolve(event.target.result);
2155
- };
2156
- reader.readAsDataURL(item);
2157
- });
2158
- })).then(urls => {
2159
- const html = urls.map(i => {
2160
- return `<img src=${i}>`;
2161
- }).join('');
2162
- this.handlePaste(html, text);
2163
- });
2135
+ this.pasteHandler(ev);
2136
+ }));
2137
+ }
2138
+ copyHandler(ev) {
2139
+ const selection = this.selection;
2140
+ if (!selection.isSelected) {
2141
+ return;
2142
+ }
2143
+ if (selection.startSlot === selection.endSlot && selection.endOffset - selection.startOffset === 1) {
2144
+ const content = selection.startSlot.getContentAtIndex(selection.startOffset);
2145
+ if (typeof content === 'object') {
2146
+ const clipboardData = ev.clipboardData;
2147
+ const nativeSelection = document.getSelection();
2148
+ const range = nativeSelection.getRangeAt(0);
2149
+ const div = document.createElement('div');
2150
+ const fragment = range.cloneContents();
2151
+ div.append(fragment);
2152
+ clipboardData.setData('text/html', div.innerHTML);
2153
+ clipboardData.setData('text', div.innerText);
2164
2154
  ev.preventDefault();
2165
- return;
2166
2155
  }
2167
- const div = document.createElement('div');
2168
- div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
2169
- div.contentEditable = 'true';
2170
- document.body.appendChild(div);
2171
- div.focus();
2172
- setTimeout(() => {
2173
- document.body.removeChild(div);
2174
- div.style.cssText = '';
2175
- this.handlePaste(div, text);
2156
+ }
2157
+ }
2158
+ pasteHandler(ev) {
2159
+ const text = ev.clipboardData.getData('Text');
2160
+ const types = Array.from(ev.clipboardData.types || []);
2161
+ const files = Array.from(ev.clipboardData.files);
2162
+ if (types.every(type => type === 'Files') && files.length) {
2163
+ Promise.all(files.filter(i => {
2164
+ return /image/i.test(i.type);
2165
+ }).map(item => {
2166
+ const reader = new FileReader();
2167
+ return new Promise(resolve => {
2168
+ reader.onload = (event) => {
2169
+ resolve(event.target.result);
2170
+ };
2171
+ reader.readAsDataURL(item);
2172
+ });
2173
+ })).then(urls => {
2174
+ const html = urls.map(i => {
2175
+ return `<img src=${i}>`;
2176
+ }).join('');
2177
+ this.paste(html, text);
2176
2178
  });
2177
- }));
2179
+ ev.preventDefault();
2180
+ return;
2181
+ }
2182
+ const div = document.createElement('div');
2183
+ div.style.cssText = 'width:1px; height:10px; overflow: hidden; position: fixed; left: 50%; top: 50%; opacity:0';
2184
+ div.contentEditable = 'true';
2185
+ document.body.appendChild(div);
2186
+ div.focus();
2187
+ setTimeout(() => {
2188
+ document.body.removeChild(div);
2189
+ div.style.cssText = '';
2190
+ this.paste(div, text);
2191
+ });
2178
2192
  }
2179
- handlePaste(dom, text) {
2193
+ paste(dom, text) {
2180
2194
  const slot = this.parser.parse(dom, new core.Slot([
2181
2195
  core.ContentType.BlockComponent,
2182
2196
  core.ContentType.InlineComponent,
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@textbus/platform-browser",
3
- "version": "3.8.1",
3
+ "version": "3.8.3",
4
4
  "description": "Textbus is a rich text editor and framework that is highly customizable and extensible to achieve rich wysiwyg effects.",
5
5
  "main": "./bundles/index.js",
6
6
  "module": "./bundles/index.esm.js",
@@ -48,5 +48,5 @@
48
48
  "bugs": {
49
49
  "url": "https://github.com/textbus/textbus.git/issues"
50
50
  },
51
- "gitHead": "cf4fd289b73bc777124a32fe42bb58eba05a34f1"
51
+ "gitHead": "bac004b8d0a7acd5c090385c5c2e2aeb41577773"
52
52
  }