Drag text to search

Highlight, drag, then release text to search in Google

  1. // ==UserScript==
  2. // @name Drag text to search
  3. // @version 1.1
  4. // @description Highlight, drag, then release text to search in Google
  5. // @author Ryan Buening
  6. // @license MIT
  7. // @namespace https://github.com/ryanbuening/userscripts
  8. // @run-at document-start
  9. // @include *
  10. // ==/UserScript==
  11.  
  12. (function() {
  13. const isTextArea = element => ['email', 'number', 'password', 'search', 'tel', 'text', 'url', 'textarea'].includes(element.type) && !element.disabled;
  14.  
  15. const handleDragOver = event => {
  16. if (event.dataTransfer.types.includes('text/uri-list')) {
  17. event.dataTransfer.dropEffect = 'link';
  18. event.preventDefault();
  19. } else if (event.dataTransfer.types.includes('text/plain') && !isTextArea(event.target)) {
  20. event.dataTransfer.dropEffect = 'link';
  21. event.preventDefault();
  22. }
  23. };
  24.  
  25. const handleDrop = event => {
  26. if (event.dataTransfer.types.includes('text/uri-list')) {
  27. const url = event.dataTransfer.getData('URL');
  28. //console.log("url: " + url);
  29. if (!url.includes("about:")) {
  30. // window.open(url, '_blank');
  31. // event.preventDefault();
  32. }
  33. } else if (event.dataTransfer.types.includes('text/plain') && !isTextArea(event.target)) {
  34. const keyword = event.dataTransfer.getData('text/plain');
  35. const url = 'https://www.google.com/search?q=%s'.replace(/%s/gi, encodeURIComponent(keyword));
  36. window.open(url, '_blank');
  37. event.preventDefault();
  38. }
  39. };
  40.  
  41. document.addEventListener('dragover', handleDragOver, false);
  42. document.addEventListener('drop', handleDrop, false);
  43. })();