Guest User

Untitled

a guest
Jun 24th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.56 KB | None | 0 0
  1. // @flow
  2. /* global document */
  3.  
  4. export default ({
  5. onCommit,
  6. maxLength = -1,
  7. state = {}
  8. }: {
  9. state?: {
  10. originalValue?: string
  11. },
  12. maxLength: number,
  13. onCommit: (value: string) => void
  14. }) => ({
  15. suppressContentEditableWarning: true,
  16. contentEditable: 'plaintext-only',
  17.  
  18. onFocus: (e: Object) => {
  19. state.originalValue = e.target.innerText;
  20. },
  21.  
  22. onKeyDown: (e: Object) => {
  23. if (e.keyCode === 13) {
  24. e.preventDefault();
  25. return e.target.blur();
  26. }
  27. if (e.keyCode === 27) {
  28. e.target.innerText = state.originalValue;
  29. e.preventDefault();
  30. return e.target.blur();
  31. }
  32. },
  33.  
  34. onBlur: (e: Object) => {
  35. if (e.target.innerText) {
  36. if (onCommit && e.target.innerText !== state.originalValue) {
  37. onCommit(e.target.innerText);
  38. }
  39. } else {
  40. e.target.innerText = state.originalValue;
  41. }
  42. },
  43.  
  44. onKeyPress: (e: Object) => {
  45. if (maxLength > -1 && (e.target.innerText || '').length >= maxLength) {
  46. return e.preventDefault();
  47. }
  48. },
  49.  
  50. onPaste: (e: Object) => {
  51. e.preventDefault();
  52. const clipboard = e.clipboardData.getData('text');
  53. const text = clipboard && clipboard.replace(/\n/g, '');
  54. if (text) {
  55. const pasteLen = Math.max(0, maxLength - (e.target.innerText || '').length);
  56. const pasteText = maxLength > -1 ? pasteLen > 0 && text.substr(0, pasteLen) : text;
  57. if (pasteText) {
  58. document.execCommand('insertText', false, pasteText);
  59. }
  60. }
  61. }
  62. });
  63.  
  64. // <div {...editable({ maxLength: 10, onCommit: value => console.log('new value', value)}>content to edit</div>
Add Comment
Please, Sign In to add comment