(cm, updateNumbersFrom, dims)
| 210 | // that are not there yet, and updating the ones that are out of |
| 211 | // date. |
| 212 | function patchDisplay(cm, updateNumbersFrom, dims) { |
| 213 | let display = cm.display, lineNumbers = cm.options.lineNumbers |
| 214 | let container = display.lineDiv, cur = container.firstChild |
| 215 | |
| 216 | function rm(node) { |
| 217 | let next = node.nextSibling |
| 218 | // Works around a throw-scroll bug in OS X Webkit |
| 219 | if (webkit && mac && cm.display.currentWheelTarget == node) |
| 220 | node.style.display = "none" |
| 221 | else |
| 222 | node.parentNode.removeChild(node) |
| 223 | return next |
| 224 | } |
| 225 | |
| 226 | let view = display.view, lineN = display.viewFrom |
| 227 | // Loop over the elements in the view, syncing cur (the DOM nodes |
| 228 | // in display.lineDiv) with the view as we go. |
| 229 | for (let i = 0; i < view.length; i++) { |
| 230 | let lineView = view[i] |
| 231 | if (lineView.hidden) { |
| 232 | } else if (!lineView.node || lineView.node.parentNode != container) { // Not drawn yet |
| 233 | let node = buildLineElement(cm, lineView, lineN, dims) |
| 234 | container.insertBefore(node, cur) |
| 235 | } else { // Already drawn |
| 236 | while (cur != lineView.node) cur = rm(cur) |
| 237 | let updateNumber = lineNumbers && updateNumbersFrom != null && |
| 238 | updateNumbersFrom <= lineN && lineView.lineNumber |
| 239 | if (lineView.changes) { |
| 240 | if (indexOf(lineView.changes, "gutter") > -1) updateNumber = false |
| 241 | updateLineForChanges(cm, lineView, lineN, dims) |
| 242 | } |
| 243 | if (updateNumber) { |
| 244 | removeChildren(lineView.lineNumber) |
| 245 | lineView.lineNumber.appendChild(document.createTextNode(lineNumberFor(cm.options, lineN))) |
| 246 | } |
| 247 | cur = lineView.node.nextSibling |
| 248 | } |
| 249 | lineN += lineView.size |
| 250 | } |
| 251 | while (cur) cur = rm(cur) |
| 252 | } |
| 253 | |
| 254 | export function updateGutterSpace(display) { |
| 255 | let width = display.gutters.offsetWidth |
no test coverage detected