HEX
Server: nginx/1.28.3
System: Linux ip-172-31-12-242 6.17.0-1007-aws #7~24.04.1-Ubuntu SMP Thu Jan 22 21:04:49 UTC 2026 x86_64
User: root (0)
PHP: 7.4.33
Disabled: passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv
Upload Files
File: /www/server/panel/BTPanel/static/editor/ext-elastic_tabstops_lite.js
ace.define(
	'ace/ext/elastic_tabstops_lite',
	['require', 'exports', 'module', 'ace/editor', 'ace/config'],
	function (e, t, n) {
		'use strict'
		var r = function (e) {
			this.$editor = e
			var t = this,
				n = [],
				r = !1
			;(this.onAfterExec = function () {
				;(r = !1), t.processRows(n), (n = [])
			}),
				(this.onExec = function () {
					r = !0
				}),
				(this.onChange = function (e) {
					r &&
						(n.indexOf(e.start.row) == -1 && n.push(e.start.row),
						e.end.row != e.start.row && n.push(e.end.row))
				})
		}
		;(function () {
			;(this.processRows = function (e) {
				this.$inChange = !0
				var t = []
				for (var n = 0, r = e.length; n < r; n++) {
					var i = e[n]
					if (t.indexOf(i) > -1) continue
					var s = this.$findCellWidthsForBlock(i),
						o = this.$setBlockCellWidthsToMax(s.cellWidths),
						u = s.firstRow
					for (var a = 0, f = o.length; a < f; a++) {
						var l = o[a]
						t.push(u), this.$adjustRow(u, l), u++
					}
				}
				this.$inChange = !1
			}),
				(this.$findCellWidthsForBlock = function (e) {
					var t = [],
						n,
						r = e
					while (r >= 0) {
						n = this.$cellWidthsForRow(r)
						if (n.length == 0) break
						t.unshift(n), r--
					}
					var i = r + 1
					r = e
					var s = this.$editor.session.getLength()
					while (r < s - 1) {
						r++, (n = this.$cellWidthsForRow(r))
						if (n.length == 0) break
						t.push(n)
					}
					return { cellWidths: t, firstRow: i }
				}),
				(this.$cellWidthsForRow = function (e) {
					var t = this.$selectionColumnsForRow(e),
						n = [-1].concat(this.$tabsForRow(e)),
						r = n
							.map(function (e) {
								return 0
							})
							.slice(1),
						i = this.$editor.session.getLine(e)
					for (var s = 0, o = n.length - 1; s < o; s++) {
						var u = n[s] + 1,
							a = n[s + 1],
							f = this.$rightmostSelectionInCell(t, a),
							l = i.substring(u, a)
						r[s] = Math.max(l.replace(/\s+$/g, '').length, f - u)
					}
					return r
				}),
				(this.$selectionColumnsForRow = function (e) {
					var t = [],
						n = this.$editor.getCursorPosition()
					return this.$editor.session.getSelection().isEmpty() && e == n.row && t.push(n.column), t
				}),
				(this.$setBlockCellWidthsToMax = function (e) {
					var t = !0,
						n,
						r,
						i,
						s = this.$izip_longest(e)
					for (var o = 0, u = s.length; o < u; o++) {
						var a = s[o]
						if (!a.push) {
							console.error(a)
							continue
						}
						a.push(NaN)
						for (var f = 0, l = a.length; f < l; f++) {
							var c = a[f]
							t && ((n = f), (i = 0), (t = !1))
							if (isNaN(c)) {
								r = f
								for (var h = n; h < r; h++) e[h][o] = i
								t = !0
							}
							i = Math.max(i, c)
						}
					}
					return e
				}),
				(this.$rightmostSelectionInCell = function (e, t) {
					var n = 0
					if (e.length) {
						var r = []
						for (var i = 0, s = e.length; i < s; i++) e[i] <= t ? r.push(i) : r.push(0)
						n = Math.max.apply(Math, r)
					}
					return n
				}),
				(this.$tabsForRow = function (e) {
					var t = [],
						n = this.$editor.session.getLine(e),
						r = /\t/g,
						i
					while ((i = r.exec(n)) != null) t.push(i.index)
					return t
				}),
				(this.$adjustRow = function (e, t) {
					var n = this.$tabsForRow(e)
					if (n.length == 0) return
					var r = 0,
						i = -1,
						s = this.$izip(t, n)
					for (var o = 0, u = s.length; o < u; o++) {
						var a = s[o][0],
							f = s[o][1]
						;(i += 1 + a), (f += r)
						var l = i - f
						if (l == 0) continue
						var c = this.$editor.session.getLine(e).substr(0, f),
							h = c.replace(/\s*$/g, ''),
							p = c.length - h.length
						l > 0 &&
							(this.$editor.session
								.getDocument()
								.insertInLine({ row: e, column: f + 1 }, Array(l + 1).join(' ') + '	'),
							this.$editor.session.getDocument().removeInLine(e, f, f + 1),
							(r += l)),
							l < 0 &&
								p >= -l &&
								(this.$editor.session.getDocument().removeInLine(e, f + l, f), (r += l))
					}
				}),
				(this.$izip_longest = function (e) {
					if (!e[0]) return []
					var t = e[0].length,
						n = e.length
					for (var r = 1; r < n; r++) {
						var i = e[r].length
						i > t && (t = i)
					}
					var s = []
					for (var o = 0; o < t; o++) {
						var u = []
						for (var r = 0; r < n; r++) e[r][o] === '' ? u.push(NaN) : u.push(e[r][o])
						s.push(u)
					}
					return s
				}),
				(this.$izip = function (e, t) {
					var n = e.length >= t.length ? t.length : e.length,
						r = []
					for (var i = 0; i < n; i++) {
						var s = [e[i], t[i]]
						r.push(s)
					}
					return r
				})
		}).call(r.prototype),
			(t.ElasticTabstopsLite = r)
		var i = e('../editor').Editor
		e('../config').defineOptions(i.prototype, 'editor', {
			useElasticTabstops: {
				set: function (e) {
					e
						? (this.elasticTabstops || (this.elasticTabstops = new r(this)),
						  this.commands.on('afterExec', this.elasticTabstops.onAfterExec),
						  this.commands.on('exec', this.elasticTabstops.onExec),
						  this.on('change', this.elasticTabstops.onChange))
						: this.elasticTabstops &&
						  (this.commands.removeListener('afterExec', this.elasticTabstops.onAfterExec),
						  this.commands.removeListener('exec', this.elasticTabstops.onExec),
						  this.removeListener('change', this.elasticTabstops.onChange))
				},
			},
		})
	}
)
;(function () {
	ace.require(['ace/ext/elastic_tabstops_lite'], function (m) {
		if (typeof module == 'object' && typeof exports == 'object' && module) {
			module.exports = m
		}
	})
})()