kopia lustrzana https://github.com/c9/core
154 wiersze
4.9 KiB
JavaScript
154 wiersze
4.9 KiB
JavaScript
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Distributed under the BSD license:
|
|
*
|
|
* Copyright (c) 2010, Ajax.org B.V.
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
* * Redistributions of source code must retain the above copyright
|
|
* notice, this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright
|
|
* notice, this list of conditions and the following disclaimer in the
|
|
* documentation and/or other materials provided with the distribution.
|
|
* * Neither the name of Ajax.org B.V. nor the
|
|
* names of its contributors may be used to endorse or promote products
|
|
* derived from this software without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
|
|
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
|
|
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
|
|
* DISCLAIMED. IN NO EVENT SHALL AJAX.ORG B.V. BE LIABLE FOR ANY
|
|
* DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
|
|
* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
|
|
* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
|
|
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
|
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
|
|
define(function(require, exports, module) {
|
|
"use strict";
|
|
|
|
var Anchor = require("ace/anchor").Anchor;
|
|
var Range = require("ace/range").Range;
|
|
var comparePoints = Range.comparePoints;
|
|
var lang = require("ace/lib/lang");
|
|
|
|
|
|
var ReplCell = function(options, session) {
|
|
this.session = session;
|
|
this.type = options.type;
|
|
};
|
|
|
|
(function() {
|
|
this.insert = function(pos, text) {
|
|
if (typeof pos == "string") {
|
|
text = pos;
|
|
pos = this.getRange().end;
|
|
}
|
|
this.session.insert(pos, text);
|
|
};
|
|
this.setPlaceholder = function(str) {
|
|
this.placeholder = str;
|
|
|
|
};
|
|
this.setMode = function() {
|
|
|
|
};
|
|
this.setWaiting = function(val) {
|
|
this.waiting = val;
|
|
this.session.repl.$updateSession();
|
|
};
|
|
this.prompt = "";
|
|
this.promptType = null;
|
|
this.setPrompt = function(str, type) {
|
|
if (this.prompt == str)
|
|
return;
|
|
this.promptType = type;
|
|
this.prompt = (str || "") + " ";
|
|
this.session.maxPromptLength = Math.max(this.session.maxPromptLength || 0, this.prompt.length);
|
|
};
|
|
|
|
this.setValue = function(val, selection) {
|
|
if (!this.session)
|
|
return;
|
|
if (val == null)
|
|
return this.remove();
|
|
if (this.lineWidget && val.trim())
|
|
this.removeWidget();
|
|
this.$updateRange();
|
|
var pos = this.session.doc.replace(this.range, val);
|
|
this.range.setEnd(pos);
|
|
if (selection == 1)
|
|
this.session.selection.setRange({ start: this.range.end, end: this.range.end });
|
|
else if (selection == -1)
|
|
this.session.selection.setRange({ start: this.range.start, end: this.range.start });
|
|
};
|
|
this.getValue = function() {
|
|
if (!this.session)
|
|
return "";
|
|
return this.session.doc.getTextRange(this.range);
|
|
};
|
|
this.getRange = function() {
|
|
this.$updateRange();
|
|
return this.range;
|
|
};
|
|
this.$updateRange = function(row) {
|
|
var cells = this.session.replCells;
|
|
if (row == null)
|
|
row = cells.indexOf(this);
|
|
|
|
for (i = row; i > 0; i--) {
|
|
if (cells[i])
|
|
break;
|
|
}
|
|
var cell = cells[i];
|
|
if (!cell)
|
|
return;
|
|
cell.row = i;
|
|
for (var i = row + 1; i < this.session.getLength(); i++) {
|
|
if (cells[i])
|
|
break;
|
|
}
|
|
cell.endRow = i - 1;
|
|
cell.range = new Range(cell.row, 0, cell.endRow, Number.MAX_VALUE);
|
|
|
|
return this.range;
|
|
};
|
|
|
|
this.removeWidget = function() {
|
|
if (this.lineWidget) {
|
|
var w = this.lineWidget;
|
|
this.lineWidget = null;
|
|
this.session.repl.removeLineWidget(w);
|
|
}
|
|
};
|
|
|
|
this.addWidget = function(options) {
|
|
if (this.lineWidget)
|
|
this.removeWidget();
|
|
|
|
this.setValue("");
|
|
options.row = this.range.end.row;
|
|
this.lineWidget = options;
|
|
this.session.repl.addLineWidget(this.lineWidget);
|
|
};
|
|
|
|
this.destroy = function() {
|
|
this.removeWidget();
|
|
this.session = null;
|
|
};
|
|
|
|
this.remove = function() {
|
|
if (this.session)
|
|
this.session.repl.removeCell(this);
|
|
};
|
|
|
|
}).call(ReplCell.prototype);
|
|
|
|
exports.ReplCell = ReplCell;
|
|
|
|
}); |