(op)
| 3145 | } |
| 3146 | |
| 3147 | function endOperation_finish(op) { |
| 3148 | var cm = op.cm, display = cm.display, doc = cm.doc; |
| 3149 | |
| 3150 | if (op.updatedDisplay) postUpdateDisplay(cm, op.update); |
| 3151 | |
| 3152 | // Abort mouse wheel delta measurement, when scrolling explicitly |
| 3153 | if (display.wheelStartX != null && (op.scrollTop != null || op.scrollLeft != null || op.scrollToPos)) |
| 3154 | display.wheelStartX = display.wheelStartY = null; |
| 3155 | |
| 3156 | // Propagate the scroll position to the actual DOM scroller |
| 3157 | if (op.scrollTop != null && (display.scroller.scrollTop != op.scrollTop || op.forceScroll)) { |
| 3158 | doc.scrollTop = Math.max(0, Math.min(display.scroller.scrollHeight - display.scroller.clientHeight, op.scrollTop)); |
| 3159 | display.scrollbars.setScrollTop(doc.scrollTop); |
| 3160 | display.scroller.scrollTop = doc.scrollTop; |
| 3161 | } |
| 3162 | if (op.scrollLeft != null && (display.scroller.scrollLeft != op.scrollLeft || op.forceScroll)) { |
| 3163 | doc.scrollLeft = Math.max(0, Math.min(display.scroller.scrollWidth - display.scroller.clientWidth, op.scrollLeft)); |
| 3164 | display.scrollbars.setScrollLeft(doc.scrollLeft); |
| 3165 | display.scroller.scrollLeft = doc.scrollLeft; |
| 3166 | alignHorizontally(cm); |
| 3167 | } |
| 3168 | // If we need to scroll a specific position into view, do so. |
| 3169 | if (op.scrollToPos) { |
| 3170 | var coords = scrollPosIntoView(cm, clipPos(doc, op.scrollToPos.from), |
| 3171 | clipPos(doc, op.scrollToPos.to), op.scrollToPos.margin); |
| 3172 | if (op.scrollToPos.isCursor && cm.state.focused) maybeScrollWindow(cm, coords); |
| 3173 | } |
| 3174 | |
| 3175 | // Fire events for markers that are hidden/unidden by editing or |
| 3176 | // undoing |
| 3177 | var hidden = op.maybeHiddenMarkers, unhidden = op.maybeUnhiddenMarkers; |
| 3178 | if (hidden) for (var i = 0; i < hidden.length; ++i) |
| 3179 | if (!hidden[i].lines.length) signal(hidden[i], "hide"); |
| 3180 | if (unhidden) for (var i = 0; i < unhidden.length; ++i) |
| 3181 | if (unhidden[i].lines.length) signal(unhidden[i], "unhide"); |
| 3182 | |
| 3183 | if (display.wrapper.offsetHeight) |
| 3184 | doc.scrollTop = cm.display.scroller.scrollTop; |
| 3185 | |
| 3186 | // Fire change events, and delayed event handlers |
| 3187 | if (op.changeObjs) |
| 3188 | signal(cm, "changes", cm, op.changeObjs); |
| 3189 | if (op.update) |
| 3190 | op.update.finish(); |
| 3191 | } |
| 3192 | |
| 3193 | // Run the given function in an operation |
| 3194 | function runInOp(cm, f) { |
no test coverage detected