UNPKG

yy-form-making

Version:
1,705 lines (1,507 loc) 240 kB
define("ace/ext/rtl",["require","exports","module","ace/lib/dom","ace/lib/lang","ace/editor","ace/config"], function(require, exports, module) { "use strict"; var dom = require("ace/lib/dom"); var lang = require("ace/lib/lang"); var commands = [{ name: "leftToRight", bindKey: { win: "Ctrl-Alt-Shift-L", mac: "Command-Alt-Shift-L" }, exec: function(editor) { editor.session.$bidiHandler.setRtlDirection(editor, false); }, readOnly: true }, { name: "rightToLeft", bindKey: { win: "Ctrl-Alt-Shift-R", mac: "Command-Alt-Shift-R" }, exec: function(editor) { editor.session.$bidiHandler.setRtlDirection(editor, true); }, readOnly: true }]; var Editor = require("../editor").Editor; require("../config").defineOptions(Editor.prototype, "editor", { rtlText: { set: function(val) { if (val) { this.on("session", onChange); this.on("changeSelection", onChangeSelection); this.renderer.on("afterRender", updateLineDirection); this.commands.on("exec", onCommandEmitted); this.commands.addCommands(commands); } else { this.off("session", onChange); this.off("changeSelection", onChangeSelection); this.renderer.off("afterRender", updateLineDirection); this.commands.off("exec", onCommandEmitted); this.commands.removeCommands(commands); clearTextLayer(this.renderer); } this.renderer.updateFull(); } } }); function onChangeSelection(e, editor) { var lead = editor.getSelection().lead; if (editor.session.$bidiHandler.isRtlLine(lead.row)) { if (lead.column === 0) { if (editor.session.$bidiHandler.isMoveLeftOperation && lead.row > 0) { editor.getSelection().moveCursorTo(lead.row - 1, editor.session.getLine(lead.row - 1).length); } else { if (editor.getSelection().isEmpty()) lead.column += 1; else lead.setPosition(lead.row, lead.column + 1); } } } } function onCommandEmitted(commadEvent) { commadEvent.editor.session.$bidiHandler.isMoveLeftOperation = /gotoleft|selectleft|backspace|removewordleft/.test(commadEvent.command.name); } function onChange(delta, session) { session.$bidiHandler.currentRow = null; if (session.$bidiHandler.isRtlLine(delta.start.row) && delta.action === 'insert' && delta.lines.length > 1) { for (var row = delta.start.row; row < delta.end.row; row++) { if (session.getLine(row + 1).charAt(0) !== session.$bidiHandler.RLE) session.getDocument().$lines[row + 1] = session.$bidiHandler.RLE + session.getLine(row + 1); } } } function updateLineDirection(e, renderer) { var session = renderer.session; var $bidiHandler = session.$bidiHandler; var cells = renderer.$textLayer.$lines.cells; var width = renderer.layerConfig.width - renderer.layerConfig.padding + "px"; cells.forEach(function(cell) { var style = cell.element.style; if ($bidiHandler && $bidiHandler.isRtlLine(cell.row)) { style.direction = "rtl"; style.textAlign = "right"; style.width = width; } else { style.direction = ""; style.textAlign = ""; style.width = ""; } }); } function clearTextLayer(renderer) { var lines = renderer.$textLayer.$lines; lines.cells.forEach(clear); lines.cellCache.forEach(clear); function clear(cell) { var style = cell.element.style; style.direction = style.textAlign = style.width = ""; } } }); define("kitchen-sink/inline_editor",["require","exports","module","ace/line_widgets","ace/editor","ace/virtual_renderer","ace/lib/dom","ace/commands/default_commands"], function(require, exports, module) { "use strict"; var LineWidgets = require("ace/line_widgets").LineWidgets; var Editor = require("ace/editor").Editor; var Renderer = require("ace/virtual_renderer").VirtualRenderer; var dom = require("ace/lib/dom"); require("ace/commands/default_commands").commands.push({ name: "openInlineEditor", bindKey: "F3", exec: function(editor) { var split = window.env.split; var s = editor.session; var inlineEditor = new Editor(new Renderer()); var splitSession = split.$cloneSession(s); var row = editor.getCursorPosition().row; if (editor.session.lineWidgets && editor.session.lineWidgets[row]) { editor.session.lineWidgets[row].destroy(); return; } var rowCount = 10; var w = { row: row, fixedWidth: true, el: dom.createElement("div"), editor: inlineEditor }; var el = w.el; el.appendChild(inlineEditor.container); if (!editor.session.widgetManager) { editor.session.widgetManager = new LineWidgets(editor.session); editor.session.widgetManager.attach(editor); } var h = rowCount*editor.renderer.layerConfig.lineHeight; inlineEditor.container.style.height = h + "px"; el.style.position = "absolute"; el.style.zIndex = "4"; el.style.borderTop = "solid blue 2px"; el.style.borderBottom = "solid blue 2px"; inlineEditor.setSession(splitSession); editor.session.widgetManager.addLineWidget(w); var kb = { handleKeyboard:function(_,hashId, keyString) { if (hashId === 0 && keyString === "esc") { w.destroy(); return true; } } }; w.destroy = function() { editor.keyBinding.removeKeyboardHandler(kb); s.widgetManager.removeLineWidget(w); }; editor.keyBinding.addKeyboardHandler(kb); inlineEditor.keyBinding.addKeyboardHandler(kb); inlineEditor.setTheme("ace/theme/solarized_light"); } }); }); define("ace/test/asyncjs/assert",["require","exports","module","ace/lib/oop"], function(require, exports, module) { // // // // // var oop = require("ace/lib/oop"); var pSlice = Array.prototype.slice; var assert = exports; assert.AssertionError = function AssertionError(options) { this.name = 'AssertionError'; this.message = options.message; this.actual = options.actual; this.expected = options.expected; this.operator = options.operator; var stackStartFunction = options.stackStartFunction || fail; if (Error.captureStackTrace) { Error.captureStackTrace(this, stackStartFunction); } }; oop.inherits(assert.AssertionError, Error); toJSON = function(obj) { if (typeof JSON !== "undefined") return JSON.stringify(obj); else return obj.toString(); } assert.AssertionError.prototype.toString = function() { if (this.message) { return [this.name + ':', this.message].join(' '); } else { return [this.name + ':', toJSON(this.expected), this.operator, toJSON(this.actual)].join(' '); } }; assert.AssertionError.__proto__ = Error.prototype; function fail(actual, expected, message, operator, stackStartFunction) { throw new assert.AssertionError({ message: message, actual: actual, expected: expected, operator: operator, stackStartFunction: stackStartFunction }); } assert.fail = fail; assert.ok = function ok(value, message) { if (!!!value) fail(value, true, message, '==', assert.ok); }; assert.equal = function equal(actual, expected, message) { if (actual != expected) fail(actual, expected, message, '==', assert.equal); }; assert.notEqual = function notEqual(actual, expected, message) { if (actual == expected) { fail(actual, expected, message, '!=', assert.notEqual); } }; assert.deepEqual = function deepEqual(actual, expected, message) { if (!_deepEqual(actual, expected)) { fail(actual, expected, message, 'deepEqual', assert.deepEqual); } }; function _deepEqual(actual, expected) { if (actual === expected) { return true; } else if (typeof Buffer !== "undefined" && Buffer.isBuffer(actual) && Buffer.isBuffer(expected)) { if (actual.length != expected.length) return false; for (var i = 0; i < actual.length; i++) { if (actual[i] !== expected[i]) return false; } return true; } else if (actual instanceof Date && expected instanceof Date) { return actual.getTime() === expected.getTime(); } else if (typeof actual != 'object' && typeof expected != 'object') { return actual == expected; } else { return objEquiv(actual, expected); } } function isUndefinedOrNull(value) { return value === null || value === undefined; } function isArguments(object) { return Object.prototype.toString.call(object) == '[object Arguments]'; } function objEquiv(a, b) { if (isUndefinedOrNull(a) || isUndefinedOrNull(b)) return false; if (a.prototype !== b.prototype) return false; if (isArguments(a)) { if (!isArguments(b)) { return false; } a = pSlice.call(a); b = pSlice.call(b); return _deepEqual(a, b); } try { var ka = Object.keys(a), kb = Object.keys(b), key, i; } catch (e) {//happens when one is a string literal and the other isn't return false; } if (ka.length != kb.length) return false; ka.sort(); kb.sort(); for (i = ka.length - 1; i >= 0; i--) { if (ka[i] != kb[i]) return false; } for (i = ka.length - 1; i >= 0; i--) { key = ka[i]; if (!_deepEqual(a[key], b[key])) return false; } return true; } assert.notDeepEqual = function notDeepEqual(actual, expected, message) { if (_deepEqual(actual, expected)) { fail(actual, expected, message, 'notDeepEqual', assert.notDeepEqual); } }; assert.strictEqual = function strictEqual(actual, expected, message) { if (actual !== expected) { fail(actual, expected, message, '===', assert.strictEqual); } }; assert.notStrictEqual = function notStrictEqual(actual, expected, message) { if (actual === expected) { fail(actual, expected, message, '!==', assert.notStrictEqual); } }; function expectedException(actual, expected) { if (!actual || !expected) { return false; } if (expected instanceof RegExp) { return expected.test(actual); } else if (actual instanceof expected) { return true; } else if (expected.call({}, actual) === true) { return true; } return false; } function _throws(shouldThrow, block, expected, message) { var actual; if (typeof expected === 'string') { message = expected; expected = null; } try { block(); } catch (e) { actual = e; } message = (expected && expected.name ? ' (' + expected.name + ').' : '.') + (message ? ' ' + message : '.'); if (shouldThrow && !actual) { fail('Missing expected exception' + message); } if (!shouldThrow && expectedException(actual, expected)) { fail('Got unwanted exception' + message); } if ((shouldThrow && actual && expected && !expectedException(actual, expected)) || (!shouldThrow && actual)) { throw actual; } } assert.throws = function(block, /*optional*/error, /*optional*/message) { _throws.apply(this, [true].concat(pSlice.call(arguments))); }; assert.doesNotThrow = function(block, /*optional*/error, /*optional*/message) { _throws.apply(this, [false].concat(pSlice.call(arguments))); }; assert.ifError = function(err) { if (err) {throw err;}}; }); define("ace/test/asyncjs/async",["require","exports","module"], function(require, exports, module) { var STOP = exports.STOP = {} exports.Generator = function(source) { if (typeof source == "function") this.source = { next: source } else this.source = source } ;(function() { this.next = function(callback) { this.source.next(callback) } this.map = function(mapper) { if (!mapper) return this mapper = makeAsync(1, mapper) var source = this.source this.next = function(callback) { source.next(function(err, value) { if (err) callback(err) else { mapper(value, function(err, value) { if (err) callback(err) else callback(null, value) }) } }) } return new this.constructor(this) } this.filter = function(filter) { if (!filter) return this filter = makeAsync(1, filter) var source = this.source this.next = function(callback) { source.next(function handler(err, value) { if (err) callback(err) else { filter(value, function(err, takeIt) { if (err) callback(err) else if (takeIt) callback(null, value) else source.next(handler) }) } }) } return new this.constructor(this) } this.slice = function(begin, end) { var count = -1 if (!end || end < 0) var end = Infinity var source = this.source this.next = function(callback) { source.next(function handler(err, value) { count++ if (err) callback(err) else if (count >= begin && count < end) callback(null, value) else if (count >= end) callback(STOP) else source.next(handler) }) } return new this.constructor(this) } this.reduce = function(reduce, initialValue) { reduce = makeAsync(3, reduce) var index = 0 var done = false var previousValue = initialValue var source = this.source this.next = function(callback) { if (done) return callback(STOP) if (initialValue === undefined) { source.next(function(err, currentValue) { if (err) return callback(err, previousValue) previousValue = currentValue reduceAll() }) } else reduceAll() function reduceAll() { source.next(function handler(err, currentValue) { if (err) { done = true if (err == STOP) return callback(null, previousValue) else return(err) } reduce(previousValue, currentValue, index++, function(err, value) { previousValue = value source.next(handler) }) }) } } return new this.constructor(this) } this.forEach = this.each = function(fn) { fn = makeAsync(1, fn) var source = this.source this.next = function(callback) { source.next(function handler(err, value) { if (err) callback(err) else { fn(value, function(err) { callback(err, value) }) } }) } return new this.constructor(this) } this.some = function(condition) { condition = makeAsync(1, condition) var source = this.source var done = false this.next = function(callback) { if (done) return callback(STOP) source.next(function handler(err, value) { if (err) return callback(err) condition(value, function(err, result) { if (err) { done = true if (err == STOP) callback(null, false) else callback(err) } else if (result) { done = true callback(null, true) } else source.next(handler) }) }) } return new this.constructor(this) } this.every = function(condition) { condition = makeAsync(1, condition) var source = this.source var done = false this.next = function(callback) { if (done) return callback(STOP) source.next(function handler(err, value) { if (err) return callback(err) condition(value, function(err, result) { if (err) { done = true if (err == STOP) callback(null, true) else callback(err) } else if (!result) { done = true callback(null, false) } else source.next(handler) }) }) } return new this.constructor(this) } this.call = function(context) { var source = this.source return this.map(function(fn, next) { fn = makeAsync(0, fn, context) fn.call(context, function(err, value) { next(err, value) }) }) } this.concat = function(generator) { var generators = [this] generators.push.apply(generators, arguments) var index = 0 var source = generators[index++] return new this.constructor(function(callback) { source.next(function handler(err, value) { if (err) { if (err == STOP) { source = generators[index++] if (!source) return callback(STOP) else return source.next(handler) } else return callback(err) } else return callback(null, value) }) }) } this.zip = function(generator) { var generators = [this] generators.push.apply(generators, arguments) return new this.constructor(function(callback) { exports.list(generators) .map(function(gen, next) { gen.next(next) }) .toArray(callback) }) } this.expand = function(inserter, constructor) { if (!inserter) return this var inserter = makeAsync(1, inserter) var constructor = constructor || this.constructor var source = this.source; var spliced = null; return new constructor(function next(callback) { if (!spliced) { source.next(function(err, value) { if (err) return callback(err) inserter(value, function(err, toInsert) { if (err) return callback(err) spliced = toInsert next(callback) }) }) } else { spliced.next(function(err, value) { if (err == STOP) { spliced = null return next(callback) } else if (err) return callback(err) callback(err, value) }) } }) } this.sort = function(compare) { var self = this var arrGen this.next = function(callback) { if (arrGen) return arrGen.next(callback) self.toArray(function(err, arr) { if (err) callback(err) else { arrGen = exports.list(arr.sort(compare)) arrGen.next(callback) } }) } return new this.constructor(this) } this.join = function(separator) { return this.$arrayOp(Array.prototype.join, separator !== undefined ? [separator] : null) } this.reverse = function() { return this.$arrayOp(Array.prototype.reverse) } this.$arrayOp = function(arrayMethod, args) { var self = this var i = 0 this.next = function(callback) { if (i++ > 0) return callback(STOP) self.toArray(function(err, arr) { if (err) callback(err, "") else { if (args) callback(null, arrayMethod.apply(arr, args)) else callback(null, arrayMethod.call(arr)) } }) } return new this.constructor(this) } this.end = function(breakOnError, callback) { if (!callback) { callback = arguments[0] breakOnError = true } var source = this.source var last var lastError source.next(function handler(err, value) { if (err) { if (err == STOP) callback && callback(lastError, last) else if (!breakOnError) { lastError = err source.next(handler) } else callback && callback(err, value) } else { last = value source.next(handler) } }) } this.toArray = function(breakOnError, callback) { if (!callback) { callback = arguments[0] breakOnError = true } var values = [] var errors = [] var source = this.source source.next(function handler(err, value) { if (err) { if (err == STOP) { if (breakOnError) return callback(null, values) else { errors.length = values.length return callback(errors, values) } } else { if (breakOnError) return callback(err) else errors[values.length] = err } } values.push(value) source.next(handler) }) } }).call(exports.Generator.prototype) var makeAsync = exports.makeAsync = function(args, fn, context) { if (fn.length > args) return fn else { return function() { var value var next = arguments[args] try { value = fn.apply(context || this, arguments) } catch(e) { return next(e) } next(null, value) } } } exports.list = function(arr, construct) { var construct = construct || exports.Generator var i = 0 var len = arr.length return new construct(function(callback) { if (i < len) callback(null, arr[i++]) else callback(STOP) }) } exports.values = function(map, construct) { var values = [] for (var key in map) values.push(map[key]) return exports.list(values, construct) } exports.keys = function(map, construct) { var keys = [] for (var key in map) keys.push(key) return exports.list(keys, construct) } exports.range = function(start, stop, step, construct) { var construct = construct || exports.Generator start = start || 0 step = step || 1 if (stop === undefined || stop === null) stop = step > 0 ? Infinity : -Infinity var value = start return new construct(function(callback) { if (step > 0 && value >= stop || step < 0 && value <= stop) callback(STOP) else { var current = value value += step callback(null, current) } }) } exports.concat = function(first, varargs) { if (arguments.length > 1) return first.concat.apply(first, Array.prototype.slice.call(arguments, 1)) else return first } exports.zip = function(first, varargs) { if (arguments.length > 1) return first.zip.apply(first, Array.prototype.slice.call(arguments, 1)) else return first.map(function(item, next) { next(null, [item]) }) } exports.plugin = function(members, constructors) { if (members) { for (var key in members) { exports.Generator.prototype[key] = members[key] } } if (constructors) { for (var key in constructors) { exports[key] = constructors[key] } } } }) define("ace/test/mockrenderer",["require","exports","module"], function(require, exports, module) { "use strict"; var MockRenderer = exports.MockRenderer = function(visibleRowCount) { if (typeof document == "object") { this.container = document.createElement("div"); this.scroller = document.createElement("div"); } this.visibleRowCount = visibleRowCount || 20; this.layerConfig = { firstVisibleRow : 0, lastVisibleRow : this.visibleRowCount }; this.isMockRenderer = true; this.$gutter = {}; }; MockRenderer.prototype.getFirstVisibleRow = function() { return this.layerConfig.firstVisibleRow; }; MockRenderer.prototype.getLastVisibleRow = function() { return this.layerConfig.lastVisibleRow; }; MockRenderer.prototype.getFirstFullyVisibleRow = function() { return this.layerConfig.firstVisibleRow; }; MockRenderer.prototype.getLastFullyVisibleRow = function() { return this.layerConfig.lastVisibleRow; }; MockRenderer.prototype.getContainerElement = function() { return this.container; }; MockRenderer.prototype.getMouseEventTarget = function() { return this.container; }; MockRenderer.prototype.getTextAreaContainer = function() { return this.container; }; MockRenderer.prototype.addGutterDecoration = function() { }; MockRenderer.prototype.removeGutterDecoration = function() { }; MockRenderer.prototype.moveTextAreaToCursor = function() { }; MockRenderer.prototype.setSession = function(session) { this.session = session; }; MockRenderer.prototype.getSession = function(session) { return this.session; }; MockRenderer.prototype.setTokenizer = function() { }; MockRenderer.prototype.on = function() { }; MockRenderer.prototype.updateCursor = function() { }; MockRenderer.prototype.animateScrolling = function(fromValue, callback) { callback && callback(); }; MockRenderer.prototype.scrollToX = function(scrollTop) {}; MockRenderer.prototype.scrollToY = function(scrollLeft) {}; MockRenderer.prototype.scrollToLine = function(line, center) { var lineHeight = 16; var row = 0; for (var l = 1; l < line; l++) { row += this.session.getRowLength(l-1); } if (center) { row -= this.visibleRowCount / 2; } this.scrollToRow(row); }; MockRenderer.prototype.scrollSelectionIntoView = function() { }; MockRenderer.prototype.scrollCursorIntoView = function() { var cursor = this.session.getSelection().getCursor(); if (cursor.row < this.layerConfig.firstVisibleRow) { this.scrollToRow(cursor.row); } else if (cursor.row > this.layerConfig.lastVisibleRow) { this.scrollToRow(cursor.row); } }; MockRenderer.prototype.scrollToRow = function(row) { var row = Math.min(this.session.getLength() - this.visibleRowCount, Math.max(0, row)); this.layerConfig.firstVisibleRow = row; this.layerConfig.lastVisibleRow = row + this.visibleRowCount; }; MockRenderer.prototype.getScrollTopRow = function() { return this.layerConfig.firstVisibleRow; }; MockRenderer.prototype.draw = function() { }; MockRenderer.prototype.onChangeTabSize = function(startRow, endRow) { }; MockRenderer.prototype.updateLines = function(startRow, endRow) { }; MockRenderer.prototype.updateBackMarkers = function() { }; MockRenderer.prototype.updateFrontMarkers = function() { }; MockRenderer.prototype.updateBreakpoints = function() { }; MockRenderer.prototype.onResize = function() { }; MockRenderer.prototype.updateFull = function() { }; MockRenderer.prototype.updateText = function() { }; MockRenderer.prototype.showCursor = function() { }; MockRenderer.prototype.visualizeFocus = function() { }; MockRenderer.prototype.setAnnotations = function() { }; MockRenderer.prototype.setStyle = function() { }; MockRenderer.prototype.unsetStyle = function() { }; MockRenderer.prototype.textToScreenCoordinates = function() { return { pageX: 0, pageY: 0 }; }; MockRenderer.prototype.screenToTextCoordinates = function() { return { row: 0, column: 0 }; }; MockRenderer.prototype.adjustWrapLimit = function () { }; }); define("kitchen-sink/dev_util",["require","exports","module","ace/lib/dom","ace/lib/event","ace/range","ace/edit_session","ace/undomanager","ace/lib/oop","ace/lib/dom","ace/range","ace/editor","ace/test/asyncjs/assert","ace/test/asyncjs/async","ace/undomanager","ace/edit_session","ace/test/mockrenderer","ace/lib/event_emitter"], function(require, exports, module) { var dom = require("ace/lib/dom"); var event = require("ace/lib/event"); var Range = require("ace/range").Range; var EditSession = require("ace/edit_session").EditSession; var UndoManager = require("ace/undomanager").UndoManager; function warn() { var s = (new Error()).stack || ""; s = s.split("\n"); if (s[1] == "Error") s.shift(); // remove error description on chrome s.shift(); // remove warn s.shift(); // remove the getter s = s.join("\n"); if (!/at Object.InjectedScript.|@debugger eval|snippets:\/{3}|<anonymous>:\d+:\d+/.test(s)) { console.error("trying to access to global variable"); } } function def(o, key, get) { try { Object.defineProperty(o, key, { configurable: true, get: get, set: function(val) { delete o[key]; o[key] = val; } }); } catch(e) { console.error(e); } } def(window, "ace", function(){ warn(); return window.env.editor }); def(window, "editor", function(){ warn(); return window.env.editor == logEditor ? editor : window.env.editor }); def(window, "session", function(){ return window.editor.session }); def(window, "split", function(){ warn(); return window.env.split }); def(window, "devUtil", function(){ warn(); return exports }); exports.showTextArea = function(argument) { dom.importCssString("\ .ace_text-input {\ position: absolute;\ z-index: 10!important;\ width: 6em!important;\ height: 1em;\ opacity: 1!important;\ background: rgba(0, 92, 255, 0.11);\ border: none;\ font: inherit;\ padding: 0 1px;\ margin: 0 -1px;\ text-indent: 0em;\ }\ "); }; exports.addGlobals = function() { window.oop = require("ace/lib/oop"); window.dom = require("ace/lib/dom"); window.Range = require("ace/range").Range; window.Editor = require("ace/editor").Editor; window.assert = require("ace/test/asyncjs/assert"); window.asyncjs = require("ace/test/asyncjs/async"); window.UndoManager = require("ace/undomanager").UndoManager; window.EditSession = require("ace/edit_session").EditSession; window.MockRenderer = require("ace/test/mockrenderer").MockRenderer; window.EventEmitter = require("ace/lib/event_emitter").EventEmitter; window.getSelection = getSelection; window.setSelection = setSelection; window.testSelection = testSelection; window.setValue = setValue; window.testValue = testValue; }; function getSelection(editor) { var data = editor.multiSelect.toJSON(); if (!data.length) data = [data]; data = data.map(function(x) { var a, c; if (x.isBackwards) { a = x.end; c = x.start; } else { c = x.end; a = x.start; } return Range.comparePoints(a, c) ? [a.row, a.column, c.row, c.column] : [a.row, a.column]; }); return data.length > 1 ? data : data[0]; } function setSelection(editor, data) { if (typeof data[0] == "number") data = [data]; editor.selection.fromJSON(data.map(function(x) { var start = {row: x[0], column: x[1]}; var end = x.length == 2 ? start : {row: x[2], column: x[3]}; var isBackwards = Range.comparePoints(start, end) > 0; return isBackwards ? { start: end, end: start, isBackwards: true } : { start: start, end: end, isBackwards: true }; })); } function testSelection(editor, data) { assert.equal(getSelection(editor) + "", data + ""); } function setValue(editor, value) { editor.setValue(value, 1); } function testValue(editor, value) { assert.equal(editor.getValue(), value); } var editor; var logEditor; var logSession exports.openLogView = function() { exports.addGlobals(); var sp = window.env.split; sp.setSplits(1); sp.setSplits(2); sp.setOrientation(sp.BESIDE); editor = sp.$editors[0]; logEditor = sp.$editors[1]; if (!logSession) { logSession = new EditSession(localStorage.lastTestCase || "", "ace/mode/javascript"); logSession.setUndoManager(new UndoManager) } logEditor.setSession(logSession); logEditor.session.foldAll(); logEditor.on("input", save); } exports.record = function() { exports.addGlobals(); exports.openLogView(); logEditor.setValue("var Range = require(\"ace/range\").Range;\n" + getSelection + "\n" + testSelection + "\n" + setSelection + "\n" + testValue + "\n" + setValue + "\n" + "\n//-------------------------------------\n", 1); logEditor.session.foldAll(); addAction({ type: "setValue", data: editor.getValue() }); addAction({ type: "setSelection", data: getSelection(editor) }); editor.commands.on("afterExec", onAfterExec); editor.on("mouseup", onMouseUp); editor.selection.on("beforeEndOperation", onBeforeEndOperation); editor.session.on("change", reportChange); editor.selection.on("changeCursor", reportCursorChange); editor.selection.on("changeSelection", reportSelectionChange); } exports.stop = function() { save(); editor.commands.off("afterExec", onAfterExec); editor.off("mouseup", onMouseUp); editor.off("beforeEndOperation", onBeforeEndOperation); editor.session.off("change", reportChange); editor.selection.off("changeCursor", reportCursorChange); editor.selection.off("changeSelection", reportSelectionChange); logEditor.off("input", save); } exports.closeLogView = function() { exports.stop(); var sp = window.env.split; sp.setSplits(1); } exports.play = function() { exports.openLogView(); exports.stop(); var code = logEditor ? logEditor.getValue() : localStorage.lastTestCase; var fn = new Function("editor", "debugger;\n" + code); fn(editor); } var reportChange = reportEvent.bind(null, "change"); var reportCursorChange = reportEvent.bind(null, "CursorChange"); var reportSelectionChange = reportEvent.bind(null, "SelectionChange"); function save() { localStorage.lastTestCase = logEditor.getValue(); } function reportEvent(name) { addAction({ type: "event", source: name }); } function onSelection() { addAction({ type: "event", data: "change", source: "operationEnd" }); } function onBeforeEndOperation() { addAction({ type: "setSelection", data: getSelection(editor), source: "operationEnd" }); } function onMouseUp() { addAction({ type: "setSelection", data: getSelection(editor), source: "mouseup" }); } function onAfterExec(e) { addAction({ type: "exec", data: e }); addAction({ type: "value", data: editor.getValue() }); addAction({ type: "selection", data: getSelection(editor) }); } function addAction(a) { var str = toString(a); if (str) { logEditor.insert(str + "\n"); logEditor.renderer.scrollCursorIntoView(); } } var lastValue = ""; function toString(x) { var str = ""; var data = x.data; switch (x.type) { case "exec": str = 'editor.execCommand("' + data.command.name + (data.args ? '", ' + JSON.stringify(data.args) : '"') + ')'; break; case "setSelection": str = 'setSelection(editor, ' + JSON.stringify(data) + ')'; break; case "setValue": if (lastValue != data) { lastValue = data; str = 'editor.setValue(' + JSON.stringify(data) + ', -1)'; } else { return; } break; case "selection": str = 'testSelection(editor, ' + JSON.stringify(data) + ')'; break; case "value": if (lastValue != data) { lastValue = data; str = 'testValue(editor, ' + JSON.stringify(data) + ')'; } else { return; } break; } return str + (x.source ? " // " + x.source : ""); } exports.getUI = function(container) { return ["div", {}, " Test ", ["button", {onclick: exports.openLogView}, "O"], ["button", {onclick: exports.record}, "Record"], ["button", {onclick: exports.stop}, "Stop"], ["button", {onclick: exports.play}, "Play"], ["button", {onclick: exports.closeLogView}, "X"], ]; }; var ignoreEvents = false; exports.textInputDebugger = { position: 2000, onchange: function(value) { var sp = env.split; if (sp.getSplits() == 2) { sp.setSplits(1); } if (env.textarea) { if (env.textarea.detach) env.textarea.detach(); env.textarea.oldParent.appendChild(env.textarea); env.textarea.className = env.textarea.oldClassName; env.textarea = null; } if (value) { this.showConsole(); } }, showConsole: function() { var sp = env.split; sp.setSplits(2); sp.setOrientation(sp.BELOW); var editor = sp.$editors[0]; var text = editor.textInput.getElement(); text.oldParent = text.parentNode; text.oldClassName = text.className; text.className = "text-input-debug"; document.body.appendChild(text); env.textarea = text; var addToLog = function(e) { if (ignoreEvents) return; var data = { _: e.type, range: [text.selectionStart, text.selectionEnd], value: text.value, key: e.key && { code: e.code, key: e.key, keyCode: e.keyCode }, modifier: event.getModifierString(e) || undefined }; log.navigateFileEnd(); var str = JSON.stringify(data).replace(/"(\w+)":/g, " $1: "); log.insert(str + ",\n"); log.renderer.scrollCursorIntoView(); }; var events = ["select", "input", "keypress", "keydown", "keyup", "compositionstart", "compositionupdate", "compositionend", "cut", "copy", "paste" ]; events.forEach(function(name) { text.addEventListener(name, addToLog, true); }); function onMousedown(ev) { if (ev.domEvent.target == text) ev.$pos = editor.getCursorPosition(); } text.detach = function() { delete text.value; delete text.setSelectionRange; events.forEach(function(name) { text.removeEventListener(name, addToLog, true); }); editor.off("mousedown", onMousedown); }; editor.on("mousedown", onMousedown); text.__defineSetter__("value", function(v) { this.__proto__.__lookupSetter__("value").call(this, v); console.log(v); }); text.__defineGetter__("value", function(v) { var v = this.__proto__.__lookupGetter__("value").call(this); return v; }); text.setSelectionRange = function(start, end) { ignoreEvents = true; this.__proto__.setSelectionRange.call(this, start, end) ignoreEvents = false; } var log = sp.$editors[1]; if (!this.session) this.session = new EditSession(""); log.setSession(this.session); editor.focus(); }, getValue: function() { return !!env.textarea; } } }); define("ace/ext/modelist",["require","exports","module"], function(require, exports, module) { "use strict"; var modes = []; function getModeForPath(path) { var mode = modesByName.text; var fileName = path.split(/[\/\\]/).pop(); for (var i = 0; i < modes.length; i++) { if (modes[i].supportsFile(fileName)) { mode = modes[i]; break; } } return mode; } var Mode = function(name, caption, extensions) { this.name = name; this.caption = caption; this.mode = "ace/mode/" + name; this.extensions = extensions; var re; if (/\^/.test(extensions)) { re = extensions.replace(/\|(\^)?/g, function(a, b){ return "$|" + (b ? "^" : "^.*\\."); }) + "$"; } else { re = "^.*\\.(" + extensions + ")$"; } this.extRe = new RegExp(re, "gi"); }; Mode.prototype.supportsFile = function(filename) { return filename.match(this.extRe); }; var supportedModes = { ABAP: ["abap"], ABC: ["abc"], ActionScript:["as"], ADA: ["ada|adb"], Apache_Conf: ["^htaccess|^htgroups|^htpasswd|^conf|htaccess|htgroups|htpasswd"], AsciiDoc: ["asciidoc|adoc"], ASL: ["dsl|asl"], Assembly_x86:["asm|a"], AutoHotKey: ["ahk"], BatchFile: ["bat|cmd"], Bro: ["bro"], C_Cpp: ["cpp|c|cc|cxx|h|hh|hpp|ino"], C9Search: ["c9search_results"], Cirru: ["cirru|cr"], Clojure: ["clj|cljs"], Cobol: ["CBL|COB"], coffee: ["coffee|cf|cson|^Cakefile"], ColdFusion: ["cfm"], CSharp: ["cs"], Csound_Document: ["csd"], Csound_Orchestra: ["orc"], Csound_Score: ["sco"], CSS: ["css"], Curly: ["curly"], D: ["d|di"], Dart: ["dart"], Diff: ["diff|patch"], Dockerfile: ["^Dockerfile"], Dot: ["dot"], Drools: ["drl"], Edifact: ["edi"], Eiffel: ["e|ge"], EJS: ["ejs"], Elixir: ["ex|exs"], Elm: ["elm"], Erlang: ["erl|hrl"], Forth: ["frt|fs|ldr|fth|4th"], Fortran: ["f|f90"], FSharp: ["fsi|fs|ml|mli|fsx|fsscript"], FTL: ["ftl"], Gcode: ["gcode"], Gherkin: ["feature"], Gitignore: ["^.gitignore"], Glsl: ["glsl|frag|vert"], Gobstones: ["gbs"], golang: ["go"], GraphQLSchema: ["gql"], Groovy: ["groovy"], HAML: ["haml"], Handlebars: ["hbs|handlebars|tpl|mustache"], Haskell: ["hs"], Haskell_Cabal: ["cabal"], haXe: ["hx"], Hjson: ["hjson"], HTML: ["html|htm|xhtml|vue|we|wpy"], HTML_Elixir: ["eex|html.eex"], HTML_Ruby: ["erb|rhtml|html.erb"], INI: ["ini|conf|cfg|prefs"], Io: ["io"], Jack: ["jack"], Jade: ["jade|pug"], Java: ["java"], JavaScript: ["js|jsm|jsx"], JSON: ["json"], JSONiq: ["jq"], JSP: ["jsp"], JSSM: ["jssm|jssm_state"], JSX: ["jsx"], Julia: ["jl"], Kotlin: ["kt|kts"], LaTeX: ["tex|latex|ltx|bib"], LESS: ["less"], Liquid: ["liquid"], Lisp: ["lisp"], LiveScript: ["ls"], LogiQL: ["logic|lql"], LSL: ["lsl"], Lua: ["lua"], LuaPage: ["lp"], Lucene: ["lucene"], Makefile: ["^Makefile|^GNUmakefile|^makefile|^OCamlMakefile|make"], Markdown: ["md|markdown"], Mask: ["mask"], MATLAB: ["matlab"], Maze: ["mz"], MEL: ["mel"], MIXAL: ["mixal"], MUSHCode: ["mc|mush"], MySQL: ["mysql"], Nix: ["nix"], NSIS: ["nsi|nsh"], ObjectiveC: ["m|mm"], OCaml: ["ml|mli"], Pascal: ["pas|p"], Perl: ["pl|pm"], pgSQL: ["pgsql"], PHP_Laravel_blade: ["blade.php"], PHP: ["php|phtml|shtml|php3|php4|php5|phps|phpt|aw|ctp|module"], Puppet: ["epp|pp"], Pig: ["pig"], Powershell: ["ps1"], Praat: ["praat|praatscript|psc|proc"], Prolog: ["plg|prolog"], Properties: ["properties"], Protobuf: ["proto"], Python: ["py"], R: ["r"], Razor: ["cshtml|asp"], RDoc: ["Rd"], Red: ["red|reds"], RHTML: ["Rhtml"], RST: ["rst"], Ruby: ["rb|ru|gemspec|rake|^Guardfile|^Rakefile|^Gemfile"], Rust: ["rs"], SASS: ["sass"], SCAD: ["scad"], Scala: ["scala"], Scheme: ["scm|sm|rkt|oak|scheme"], SCSS: ["scss"], SH: ["sh|bash|^.bashrc"], SJS: ["sjs"], Slim: ["slim|skim"], Smarty: ["smarty|tpl"], snippets: ["snippets"], Soy_Template:["soy"], Space: ["space"], SQL: ["sql"], SQLServer: ["sqlserver"], Stylus: ["styl|stylus"], SVG: ["svg"], Swift: ["swift"], Tcl: ["tcl"], Terraform: ["tf", "tfvars", "terragrunt"], Tex: ["tex"], Text: ["txt"], Textile: ["textile"], Toml: ["toml"], TSX: ["tsx"], Twig: ["twig|swig"], Typescript: ["ts|typescript|str"], Vala: ["vala"], VBScript: ["vbs|vb"], Velocity: ["vm"], Verilog: ["v|vh|sv|svh"], VHDL: ["vhd|vhdl"], Wollok: ["wlk|wpgm|wtest"], XML: ["xml|rdf|rss|wsdl|xslt|atom|mathml|mml|xul|xbl|xaml"], XQuery: ["xq"], YAML: ["yaml|yml"], Django: ["html"] }; var nameOverrides = { ObjectiveC: "Objective-C", CSharp: "C#", golang: "Go", C_Cpp: "C and C++", Csound_Document: "Csound Document", Csound_Orchestra: "Csound", Csound_Score: "Csound Score", coffee: "CoffeeScript", HTML_Ruby: "HTML (Ruby)", HTML_Elixir: "HTML (Elixir)", FTL: "FreeMarker", PHP_Laravel_blade: "PHP (Blade Template)" }; var modesByName = {}; for (var name in supportedModes) { var data = supportedModes[name]; var displayName = (nameOverrides[name] || name).replace(/_/g, " "); var filename = name.toLowerCase(); var mode = new Mode(filename, displayName, data[0]); modesByName[filename] = mode; modes.push(mode); } module.exports = { getModeForPath: getModeForPath, modes: modes, modesByName: modesByName }; }); define("kitchen-sink/file_drop",["require","exports","module","ace/config","ace/lib/event","ace/ext/modelist","ace/editor"], function(require, exports, module) { var config = require("ace/config"); var event = require("ace/lib/event"); var modelist = require("ace/ext/modelist"); module.exports = function(editor) { event.addListener(editor.container, "dragover", function(e) {