metamaps--metamaps/frontend/src/Metamaps/PasteInput.js

90 lines
2.6 KiB
JavaScript
Raw Normal View History

/* global $ */
import Import from './Import'
2016-09-22 18:31:56 +08:00
import Util from './Util'
import Visualize from './Visualize'
2017-04-11 08:07:21 -07:00
import URL_REGEX from '../patched/regex-weburl'
const PasteInput = {
2016-11-07 15:25:08 -05:00
init: function() {
var self = PasteInput
// intercept dragged files
// see http://stackoverflow.com/questions/6756583
2016-11-07 15:25:08 -05:00
window.addEventListener('dragover', function(e) {
e = e || window.event
e.preventDefault()
}, false)
window.addEventListener('drop', function(e) {
e = e || window.event
Into master: two finger pan/zoom, map and topic follows (for internal testing) on the UI, map activity emails (#1084) * fix topic spec * fix synapse/mapping spec * brakeman csrf warning suppressed :| * follows for maps in the ui for internal testing only still (#1072) * follows for maps in the ui for testers * require user for these actions * match how map follow works * include ability to unfollow from email * fixup templates * add unfollow_from_email to the policies * Update _cheatsheet.html.erb Clean up text, clarify, and bring in line with current functionality * topicsRegex and synapsesRegex should allow commas (#1073) * even better import csv regexes * prevent double prompt on file drop import * topic card in react (#1031) * its coming along * links bar * scssify a bunch * metacode image working a bit better * metacode selector in react topic card * riek editing for name field on topic card * riek submit on enter * factor out Title and Links from Topic Card component, but not the listeners * create working Desc editor * styling is much better now * textarea min height for desc * disallow images in topic card markdown * shift enter is linebreak, enter is save * attachments split out, but it's pretty buggy * move listeners into Links.js * slightly wider metacodeTitle * fix positioning on metacode selector * fix metacode selection * move metacode and permissions into subcomponents * fixes * prevent editing on desc/title if not authorized to edit * fix topic card draggability * fix embedly * fix md test * remove the removed link card manually with jquery * fix test syntax * eslint * more eslin * reuse authorizedToEdit * convert metacode sets to a json object for react * add the html in react whoop * fix metacode styling * sort wasn't working * finishing metacode select * readd the above link input border * fix syntax * multiline title editable textarea * more portable metacode selector component * factor out #metacodeOptions into one react component with a callback :D:D:D * render metacodeOptions in right click menu with react * render metacodeOptions in right click menu with react * fix up right click menu's metacode editing * fix topic card title character counter * ignore metamaps secret bundle in ag * simplify Attachments props * factor out embedly card into its own component; it seems to help * link resetter * fix edit icon on title in topic card * move mapCount and synapseCount hover/click logic to react * fix up the showMore control * metacode selection tweaks * tweak links bar spacing in topic card * rubocop * remove TODOs * more badass permissions selector * close permission selector when you click outside * fix overeager metacode selector * more modular attachments component * fix bug in Desc.js * fix right click styling * permission changes are different than edit rights * bad module ref * ensure maxLength on topic titles * hellz yeah (#1074) * fix drop from two touches to one * don't commit activity service * ability to select/unselect all metacodes in custom set with keyboard shortcut (fix #390) (#1078) * ability to select/unselect all metacodes in custom set with keyboard shortcut * select all button * nicer all/none buttons * set up react testing (#1080) * install mocha-webpack. also switch hark to npm version instead of github version * well, mocha-webpack runs * add jsdom for tests * upgrade to webpack 2 * fix npm run test errors * ImportDialogBox component tests * Fixes bug where pressing delete key while editing text will suggest... (#1083) * Fixes bug where pressing delete key while editing text will suggest the deletion of selected map entities * Changed the DEL key to remove entities instead of delete them * temporarily disable code climate duplication engine * add topic following for internal testing * daily map activity emails (#1081) * data prepared, task setup * add the basics of the email template * cover granular permissions * unfollow this map * break out permissions tests better * rename so test runs
2017-03-06 22:49:46 -05:00
// prevent conflict with react-dropzone file uploader
if (event.target.id !== 'infovis-canvas') return
2016-11-07 15:25:08 -05:00
e.preventDefault()
var coords = Util.pixelsToCoords(Visualize.mGraph, { x: e.clientX, y: e.clientY })
if (e.dataTransfer.files.length > 0) {
self.handleFile(e.dataTransfer.files[0], coords)
}
// OMG import bookmarks 😍 (Or just text :P)
2016-11-08 15:51:39 -05:00
if (e.dataTransfer.items && e.dataTransfer.items.length > 0) {
2016-09-21 10:48:47 +08:00
e.dataTransfer.items[0].getAsString(function(text) {
self.handle(text,coords)
2016-09-21 10:48:47 +08:00
})
}
2016-11-07 15:25:08 -05:00
}, false)
// allow pasting onto canvas (but don't break existing inputs/textareas)
2016-11-07 15:25:08 -05:00
$('body').bind('paste', function(e) {
if (e.target.tagName === 'INPUT') return
if (e.target.tagName === 'TEXTAREA') return
var text = e.originalEvent.clipboardData.getData('text/plain').trim()
self.handle(text)
})
},
handleFile: (file, coords = null) => {
var self = PasteInput
2016-10-08 00:31:32 +08:00
var fileReader = new window.FileReader()
fileReader.readAsText(file)
fileReader.onload = function(e) {
var text = e.currentTarget.result
2016-11-07 15:25:08 -05:00
if (text.substring(0, 5) === '<?xml') {
// assume this is a macOS .webloc link
text = text.replace(/[\s\S]*<string>(.*)<\/string>[\s\S]*/m, '$1')
}
self.handle(text, coords)
}
},
2016-11-01 16:01:34 +08:00
handle: function(text, coords = {}) {
var self = PasteInput
2017-04-11 08:07:21 -07:00
if (text.match(URL_REGEX)) {
2016-10-01 12:57:19 +08:00
Import.handleURL(text, coords)
} else if (text[0] === '{') {
Import.handleJSON(text)
} else if (text.match(/[Tt]opics\t/) || text.match(/[Ss]ynapses\t/)) {
Import.handleTSV(text)
2016-10-01 11:21:42 +08:00
} else {
//Handle as plain text
let textItems = text.split("\n")
if (textItems.length === 1){
if(textItems[0].trim() !== ""){
Import.handleTEXT(textItems[0].trim(),coords)
}
}
else if (window.confirm('Are you sure you want to create ' + textItems.length + ' new topics?')) {
textItems.forEach(item => {
if(item.trim() !== ""){
self.handle(item.trim(),coords)
}
})
}
}
2016-10-01 13:47:16 +08:00
}
}
export default PasteInput