(function (mod){ if (typeof exports == "object" && typeof module == "object") mod(require("../../lib/codemirror")); else if (typeof define == "function" && define.amd) define(["../../lib/codemirror"] , mod); else mod(CodeMirror); } )(function (CodeMirror){ CodeMirror.defineExtension("addPanel", function (node, options){ options = options || { } ; if (!this.state.panels) initPanels(this); var info = this.state.panels; var wrapper = info.wrapper; var cmWrapper = this.getWrapperElement(); if (options.after instanceof Panel && !options.after.cleared) { wrapper.insertBefore(node, options.before.node.nextSibling); } else if (options.before instanceof Panel && !options.before.cleared) { wrapper.insertBefore(node, options.before.node); } else if (options.replace instanceof Panel && !options.replace.cleared) { wrapper.insertBefore(node, options.replace.node); _AN_Call_clear("clear", options.replace); } else if (options.position == "bottom") { _AN_Call_appendchild("appendChild", wrapper, node); } else if (options.position == "before-bottom") { wrapper.insertBefore(node, cmWrapper.nextSibling); } else if (options.position == "after-top") { wrapper.insertBefore(node, cmWrapper); } else { wrapper.insertBefore(node, wrapper.firstChild); } var height = (options && options.height) || node.offsetHeight; this._setSize(null , info.heightLeft -= height); info.panels++ ; return new Panel(this, node, options, height); } ); function Panel(cm, node, options, height){ this.cm = cm; this.node = node; this.options = options; this.height = height; this.cleared = false ; } Panel.prototype.clear = function (){ if (this.cleared) return ; this.cleared = true ; var info = this.cm.state.panels; this.cm._setSize(null , info.heightLeft += this.height); info.wrapper.removeChild(this.node); if (--info.panels == 0) removePanels(this.cm); } ; Panel.prototype.changed = function (height){ var newHeight = height == null ? this.node.offsetHeight: height; var info = this.cm.state.panels; this.cm._setSize(null , info.height += (newHeight - this.height)); this.height = newHeight; } ; function initPanels(cm){ var wrap = cm.getWrapperElement(); var style = window.getComputedStyle? window.getComputedStyle(wrap): wrap.currentStyle; var height = parseInt(style.height); var info = cm.state.panels = { setHeight: wrap.style.height, heightLeft: height, panels: 0, wrapper: _AN_Call_createelement("createElement", document, "div")} ; wrap.parentNode.insertBefore(info.wrapper, wrap); var hasFocus = cm.hasFocus(); _AN_Call_appendchild("appendChild", info.wrapper, wrap); if (hasFocus) cm.focus(); cm._setSize = cm.setSize; if (height != null ) cm.setSize = function (width, newHeight){ if (newHeight == null ) return this._setSize(width, newHeight); info.setHeight = newHeight; if (typeof newHeight != "number") { var px = /^(\d+\.?\d*)px$/.exec(newHeight); if (px) { newHeight = Number(px[1]); } else { info.wrapper.style.height = newHeight; newHeight = info.wrapper.offsetHeight; info.wrapper.style.height = ""; } } cm._setSize(width, info.heightLeft += (newHeight - height)); height = newHeight; } ; } function removePanels(cm){ var info = cm.state.panels; cm.state.panels = null ; var wrap = cm.getWrapperElement(); info.wrapper.parentNode.replaceChild(wrap, info.wrapper); wrap.style.height = info.setHeight; cm.setSize = cm._setSize; cm.setSize(); } } );