github.com/jancarloviray/community@v0.41.1-0.20170124221257-33a66c87cf2f/app/public/codemirror/addon/display/autorefresh.js (about)

     1  // CodeMirror, copyright (c) by Marijn Haverbeke and others
     2  // Distributed under an MIT license: http://codemirror.net/LICENSE
     3  
     4  (function(mod) {
     5    if (typeof exports == "object" && typeof module == "object") // CommonJS
     6      mod(require("../../lib/codemirror"))
     7    else if (typeof define == "function" && define.amd) // AMD
     8      define(["../../lib/codemirror"], mod)
     9    else // Plain browser env
    10      mod(CodeMirror)
    11  })(function(CodeMirror) {
    12    "use strict"
    13  
    14    CodeMirror.defineOption("autoRefresh", false, function(cm, val) {
    15      if (cm.state.autoRefresh) {
    16        stopListening(cm, cm.state.autoRefresh)
    17        cm.state.autoRefresh = null
    18      }
    19      if (val && cm.display.wrapper.offsetHeight == 0)
    20        startListening(cm, cm.state.autoRefresh = {delay: val.delay || 250})
    21    })
    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  
    42    function stopListening(_cm, state) {
    43      clearTimeout(state.timeout)
    44      CodeMirror.off(window, "mouseup", state.hurry)
    45      CodeMirror.off(window, "keyup", state.hurry)
    46    }
    47  });