Merge pull request #5393 from vinothkannans/clip-master

FEATURE: Paste plain text table as Markdown table
This commit is contained in:
Vinoth Kannan 2017-12-04 22:45:07 +05:30 committed by GitHub
commit e14281bdf6
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 42 additions and 11 deletions

View File

@ -396,10 +396,10 @@ export default Ember.Component.extend({
});
$element.on('fileuploadpaste', (e) => {
let {types} = clipboardData(e);
const clipboard = clipboardData(e);
this._pasted = true;
if (types.some(t => t === "text/plain")) {
if (clipboard.types.some(t => t === "text/plain")) {
e.preventDefault();
}
});

View File

@ -616,10 +616,43 @@ export default Ember.Component.extend({
Ember.run.scheduleOnce("afterRender", () => $textarea.focus());
},
paste(e) {
let {types} = clipboardData(e);
_detectTable(text) {
if (text.endsWith("\n")) {
text = text.substring(0, text.length - 1);
let rows = text.split("\r").join("").split("\n");
if (types.some(t => t === "Files") && !types.some(t => t === "text/plain")) {
if (rows.length > 1) {
const columns = rows.map(r => r.split("\t").length);
const isTable = columns.reduce((a, b) => a && columns[0] === b && b > 1);
if (isTable) {
const splitterRow = [...Array(columns[0])].map(c => "---").join("\t");
rows.splice(1, 0, splitterRow);
return "|" + rows.map(r => r.split("\t").join("|")).join("|\n|") + "|\n";
}
}
}
return null;
},
paste(e) {
const clipboard = clipboardData(e);
const types = clipboard.types;
let preventDefault = false;
if (types.some(t => t === "text/plain")) {
const text = clipboard.getData("text/plain");
const table = this._detectTable(text);
if (table) {
this._addText(this._getSelected(), table);
preventDefault = true;
}
} else if (types.some(t => t === "Files")) {
preventDefault = true;
}
if (preventDefault) {
e.preventDefault();
}
},

View File

@ -422,12 +422,10 @@ export function isAppleDevice() {
}
export function clipboardData(e) {
let data = e.clipboardData ||
e.originalEvent.clipboardData ||
e.delegatedEvent.originalEvent.clipboardData ||
event.clipboardData;
return { items: data.items, types: data.types };
return e.clipboardData ||
e.originalEvent.clipboardData ||
e.delegatedEvent.originalEvent.clipboardData ||
event.clipboardData;
}
// This prevents a mini racer crash