[ Index ] |
PHP Cross Reference of Joomla 4.2.2 documentation |
[Summary view] [Print] [Text view]
1 // CodeMirror, copyright (c) by Marijn Haverbeke and others 2 // Distributed under an MIT license: https://codemirror.net/5/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 CodeMirror.defineExtension("addPanel", function (node, options) { 13 options = options || {}; 14 15 if (!this.state.panels) initPanels(this); 16 17 var info = this.state.panels; 18 var wrapper = info.wrapper; 19 var cmWrapper = this.getWrapperElement(); 20 var replace = options.replace instanceof Panel && !options.replace.cleared; 21 22 if (options.after instanceof Panel && !options.after.cleared) { 23 wrapper.insertBefore(node, options.before.node.nextSibling); 24 } else if (options.before instanceof Panel && !options.before.cleared) { 25 wrapper.insertBefore(node, options.before.node); 26 } else if (replace) { 27 wrapper.insertBefore(node, options.replace.node); 28 options.replace.clear(true); 29 } else if (options.position == "bottom") { 30 wrapper.appendChild(node); 31 } else if (options.position == "before-bottom") { 32 wrapper.insertBefore(node, cmWrapper.nextSibling); 33 } else if (options.position == "after-top") { 34 wrapper.insertBefore(node, cmWrapper); 35 } else { 36 wrapper.insertBefore(node, wrapper.firstChild); 37 } 38 39 var height = (options && options.height) || node.offsetHeight; 40 41 var panel = new Panel(this, node, options, height); 42 info.panels.push(panel); 43 44 this.setSize(); 45 if (options.stable && isAtTop(this, node)) 46 this.scrollTo(null, this.getScrollInfo().top + height); 47 48 return panel; 49 }); 50 51 function Panel(cm, node, options, height) { 52 this.cm = cm; 53 this.node = node; 54 this.options = options; 55 this.height = height; 56 this.cleared = false; 57 } 58 59 /* when skipRemove is true, clear() was called from addPanel(). 60 * Thus removePanels() should not be called (issue 5518) */ 61 Panel.prototype.clear = function (skipRemove) { 62 if (this.cleared) return; 63 this.cleared = true; 64 var info = this.cm.state.panels; 65 info.panels.splice(info.panels.indexOf(this), 1); 66 this.cm.setSize(); 67 if (this.options.stable && isAtTop(this.cm, this.node)) 68 this.cm.scrollTo(null, this.cm.getScrollInfo().top - this.height) 69 info.wrapper.removeChild(this.node); 70 if (info.panels.length == 0 && !skipRemove) removePanels(this.cm); 71 }; 72 73 Panel.prototype.changed = function () { 74 this.height = this.node.getBoundingClientRect().height; 75 this.cm.setSize(); 76 }; 77 78 function initPanels(cm) { 79 var wrap = cm.getWrapperElement() 80 var style = window.getComputedStyle ? window.getComputedStyle(wrap) : wrap.currentStyle; 81 var height = parseInt(style.height); 82 var info = cm.state.panels = { 83 setHeight: wrap.style.height, 84 panels: [], 85 wrapper: document.createElement("div") 86 }; 87 var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo() 88 wrap.parentNode.insertBefore(info.wrapper, wrap); 89 info.wrapper.appendChild(wrap); 90 cm.scrollTo(scrollPos.left, scrollPos.top) 91 if (hasFocus) cm.focus(); 92 93 cm._setSize = cm.setSize; 94 if (height != null) cm.setSize = function (width, newHeight) { 95 if (!newHeight) newHeight = info.wrapper.offsetHeight; 96 info.setHeight = newHeight; 97 if (typeof newHeight != "number") { 98 var px = /^(\d+\.?\d*)px$/.exec(newHeight); 99 if (px) { 100 newHeight = Number(px[1]); 101 } else { 102 info.wrapper.style.height = newHeight; 103 newHeight = info.wrapper.offsetHeight; 104 } 105 } 106 var editorheight = newHeight - info.panels 107 .map(function (p) { return p.node.getBoundingClientRect().height; }) 108 .reduce(function (a, b) { return a + b; }, 0); 109 cm._setSize(width, editorheight); 110 height = newHeight; 111 }; 112 } 113 114 function removePanels(cm) { 115 var info = cm.state.panels; 116 cm.state.panels = null; 117 118 var wrap = cm.getWrapperElement() 119 var hasFocus = cm.hasFocus(), scrollPos = cm.getScrollInfo() 120 info.wrapper.parentNode.replaceChild(wrap, info.wrapper); 121 cm.scrollTo(scrollPos.left, scrollPos.top) 122 if (hasFocus) cm.focus(); 123 wrap.style.height = info.setHeight; 124 cm.setSize = cm._setSize; 125 cm.setSize(); 126 } 127 128 function isAtTop(cm, dom) { 129 for (var sibling = dom.nextSibling; sibling; sibling = sibling.nextSibling) 130 if (sibling == cm.getWrapperElement()) return true 131 return false 132 } 133 });
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
Generated: Wed Sep 7 05:41:13 2022 | Chilli.vc Blog - For Webmaster,Blog-Writer,System Admin and Domainer |