autorefresh.ext.js 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. /**
  2. * extends codemirror/addon/display/autorefresh
  3. *
  4. * @author Yuki Takei <yuki@weseek.co.jp>
  5. * @see https://codemirror.net/addon/display/autorefresh.js
  6. * @see https://github.com/scniro/react-codemirror2/issues/83#issuecomment-398825212
  7. */
  8. /* eslint-disable */
  9. // CodeMirror, copyright (c) by Marijn Haverbeke and others
  10. // Distributed under an MIT license: http://codemirror.net/LICENSE
  11. (function(mod) {
  12. mod(require("codemirror"));
  13. })(function(CodeMirror) {
  14. "use strict"
  15. CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
  16. if (cm.state.autoRefresh) {
  17. stopListening(cm, cm.state.autoRefresh)
  18. cm.state.autoRefresh = null
  19. }
  20. if (val && (val.force || cm.display.wrapper.offsetHeight == 0))
  21. startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
  22. })
  23. function startListening(cm, state) {
  24. function check() {
  25. if (cm.display.wrapper.offsetHeight) {
  26. stopListening(cm, state)
  27. if (cm.display.lastWrapHeight != cm.display.wrapper.clientHeight)
  28. cm.refresh()
  29. } else {
  30. state.timeout = setTimeout(check, state.delay)
  31. }
  32. }
  33. state.timeout = setTimeout(check, state.delay)
  34. state.hurry = function() {
  35. clearTimeout(state.timeout)
  36. state.timeout = setTimeout(check, 50)
  37. }
  38. CodeMirror.on(window, "mouseup", state.hurry)
  39. CodeMirror.on(window, "keyup", state.hurry)
  40. }
  41. function stopListening(_cm, state) {
  42. clearTimeout(state.timeout)
  43. CodeMirror.off(window, "mouseup", state.hurry)
  44. CodeMirror.off(window, "keyup", state.hurry)
  45. }
  46. });