summaryrefslogtreecommitdiff
path: root/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base
diff options
context:
space:
mode:
Diffstat (limited to 'gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base')
-rw-r--r--gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base559
1 files changed, 559 insertions, 0 deletions
diff --git a/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base
new file mode 100644
index 00000000..cf58706b
--- /dev/null
+++ b/gstudio/static/gstudio/js/Gnowmacs/src/js/.svn/text-base/ymacs.js.svn-base
@@ -0,0 +1,559 @@
+//> This file is part of Ymacs, an Emacs-like editor for the Web
+//> http://www.ymacs.org/
+//>
+//> Copyright (c) 2009-2010, Mihai Bazon, Dynarch.com. 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 Dynarch.com 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 HOLDER “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 THE COPYRIGHT HOLDER 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.
+
+DEFINE_CLASS("Ymacs", DlLayout, function(D, P, DOM){
+
+ D.DEFAULT_EVENTS = [
+ "onBufferSwitch",
+ "onCreateBuffer",
+ "onDeleteBuffer"
+ ];
+
+ D.DEFAULT_ARGS = {
+ buffers : [ "buffers" , null ],
+ frames : [ "frames" , null ],
+
+ // default options
+ cf_lineNumbers: [ "lineNumbers", false ],
+
+ // override in DlWidget
+ _focusable : [ "focusable" , true ]
+ };
+
+ D.FIXARGS = function(args) {
+ if (!args.buffers)
+ args.buffers = [];
+ if (!args.frames)
+ args.frames = [];
+ };
+
+ D.CONSTRUCT = function() {
+ this.buffers.foreach(function(b){
+ b.ymacs = this;
+ }, this);
+
+ /* -----[ variables ]----- */
+ this.killRing = [];
+ this.killMasterOfRings = [];
+ this.progress = {};
+
+ /* -----[ minibuffer ]----- */
+ this.minibuffer = this.createBuffer({ hidden: true, isMinibuffer: true });
+ this.minibuffer.cmd("minibuffer_mode");
+ this.minibuffer_frame = this.createFrame({
+ isMinibuffer : true,
+ buffer : this.minibuffer,
+ hidden : true,
+ highlightCurrentLine : false,
+ className : "Ymacs_Minibuffer"
+ });
+
+ /* -----[ main content ]----- */
+ if (this.buffers.length == 0)
+ this.createBuffer();
+
+ var frame = this.createFrame({ buffer: this.buffers[0] });
+
+ this.packWidget(this.minibuffer_frame, { pos: "bottom" });
+ this.packWidget(frame, { pos: "top", fill: "*" });
+
+ // this.__activeFrameEvents = {
+ // // onPointChange: this._on_activeFramePointChange.$(this)
+ // };
+
+ this.setActiveFrame(frame);
+ frame._redrawCaret();
+ };
+
+ P.pushToKillRing = function(text, prepend) {
+ prepend ? this.killRing.unshift(text)
+ : this.killRing.push(text);
+ };
+
+ P.killRingToMaster = function() {
+ if (this.killRing.length && (this.killMasterOfRings.length == 0 ||
+ this.killMasterOfRings.peek().join("") != this.killRing.join("")))
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = [];
+ };
+
+ P.killRingText = function() {
+ return this.killRing.join("");
+ };
+
+ P.rotateKillRing = function(push) {
+ if (push) {
+ this.killMasterOfRings.push(this.killRing);
+ this.killRing = this.killMasterOfRings.shift();
+ } else {
+ this.killMasterOfRings.unshift(this.killRing);
+ this.killRing = this.killMasterOfRings.pop();
+ }
+ };
+
+ P.getBuffer = function(buf) {
+ if (!(buf instanceof Ymacs_Buffer)) {
+ buf = this.buffers.grep_first(function(b){
+ return b.name == buf;
+ });
+ }
+ return buf;
+ };
+
+ P.killBuffer = function(buf) {
+ buf = this.getBuffer(buf);
+ this.callHooks("onDeleteBuffer", buf);
+ if (this.buffers.length > 1) {
+ if (this.getActiveBuffer() === buf)
+ this.switchToNextBuffer();
+ } else {
+ // make a brand new buffer
+ this.switchToBuffer(this.createBuffer());
+ }
+ this.buffers.remove(buf);
+ buf.destroy();
+ };
+
+ P.renameBuffer = function(buf, name) {
+ buf = this.getBuffer(buf);
+ buf.name = name;
+ buf.callHooks("onProgressChange");
+ };
+
+ P._do_switchToBuffer = function(buf) {
+ this.getActiveFrame().setBuffer(buf);
+ this.callHooks("onBufferSwitch", buf);
+ };
+
+ P.switchToBuffer = function(maybeName) {
+ var buf = this.getBuffer(maybeName), a = this.buffers;
+ if (!buf) {
+ // create new buffer
+ buf = this.createBuffer({ name: maybeName });
+ }
+ a.remove(buf);
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ return buf;
+ };
+
+ P.switchToNextBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.shift();
+ a.push(buf);
+ this._do_switchToBuffer(a[0]);
+ }
+ };
+
+ P.switchToPreviousBuffer = function(n) {
+ var a = this.buffers;
+ if (a.length > 1) {
+ var buf = a.pop();
+ a.unshift(buf);
+ this._do_switchToBuffer(buf);
+ }
+ };
+
+ P.getNextBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) + n)];
+ };
+
+ P.getPrevBuffer = function(buf, n) {
+ if (n == null) n = 1;
+ var a = this.buffers;
+ return a[a.rotateIndex(a.find(buf) - n)];
+ };
+
+ P.getBufferFrames = function(buf) {
+ buf = this.getBuffer(buf);
+ return this.frames.grep(function(f){
+ return f.buffer === buf;
+ });
+ };
+
+ P.createBuffer = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var buf = new Ymacs_Buffer(args);
+ if (!args.hidden)
+ this.buffers.push(buf);
+ //
+ // XXX: although this seems the right way to do it,
+ // instead of doing it in killBuffer, for some
+ // reason we never get this event. Should
+ // investigate.
+ //
+ // buf.addEventListener("onDestroy", function(buf){
+ // console.log("got here, %s, %s", this.getActiveBuffer().name, buf.name);
+ // if (this.getActiveBuffer() === buf)
+ // this.switchToPreviousBuffer();
+ // this.buffers.remove(buf);
+ // }.$(this, buf));
+ //
+
+ this.callHooks("onCreateBuffer", buf);
+
+ return buf;
+ };
+
+ P.createFrame = function(args) {
+ if (!args) args = {};
+ Object.merge(args, { ymacs: this });
+ var frame = new Ymacs_Frame(args);
+ if (!args.hidden)
+ this.frames.unshift(frame);
+ frame.addEventListener("onDestroy", function(frame) {
+ this.frames.remove(frame);
+ }.$(this, frame));
+ return frame;
+ };
+
+ P.keepOnlyFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent;
+ while (p.parent != this)
+ p = p.parent;
+ this.replaceWidget(p, frame);
+ p.destroy();
+ this.setActiveFrame(frame);
+ this.doLayout();
+ }
+ };
+
+ P.deleteFrame = function(frame) {
+ if (this.frames.length > 1) {
+ var p = frame.parent, other = p.children().grep_first(function(f){
+ return f instanceof DlLayout || f instanceof Ymacs_Frame && f !== frame;
+ });
+ p.parent.replaceWidget(p, other);
+ p.destroy();
+ try {
+ DOM.walk(other.getElement(), function(el){
+ el = DlWidget.getFromElement(el);
+ if (el && el instanceof Ymacs_Frame)
+ throw el;
+ });
+ } catch(ex) {
+ if (!(ex instanceof Ymacs_Frame))
+ throw ex;
+ other = ex;
+ }
+ this.setActiveFrame(other);
+ this.doLayout();
+ }
+ };
+
+ P.focusOtherFrame = function() {
+ this.setActiveFrame(this.frames[0]);
+ };
+
+ P.focus = function() {
+ D.BASE.focus.apply(this, arguments);
+ this.frames.peek().focus();
+ };
+
+ P.setActiveFrame = function(frame, nofocus) {
+ if (!frame.isMinibuffer) {
+ var old = this.getActiveFrame();
+ if (old) {
+ old.delClass("Ymacs_Frame-active");
+ }
+ this.frames.remove(frame);
+ this.frames.push(frame);
+ }
+ if (!nofocus)
+ frame.focus();
+ };
+
+ P.getActiveFrame = function() {
+ return this.frames.peek();
+ };
+
+ P.getActiveBuffer = function() {
+ var frame = this.getActiveFrame();
+ return frame ? frame.buffer : this.buffers.peek();
+ };
+
+ P.setColorTheme = function(themeId) {
+ this.delClass(/Ymacs-Theme-[^\s]*/g);
+ if (!(themeId instanceof Array))
+ themeId = [ themeId ];
+ themeId.foreach(function(themeId){
+ this.addClass("Ymacs-Theme-" + themeId);
+ }, this);
+ };
+
+ P.getFrameInDirection = function(dir, pos, frame) {
+ if (!frame)
+ frame = this.getActiveFrame();
+ var caret = frame.getCaretElement();
+ if (!pos)
+ pos = DOM.getPos(caret);
+ if (!pos.sz)
+ pos.sz = DOM.getOuterSize(caret);
+ var byx = this.frames.mergeSort(function(a, b){ return a.getPos().x - b.getPos().x });
+ var byy = this.frames.mergeSort(function(a, b){ return a.getPos().y - b.getPos().y });
+ return this["_get_frameInDir_" + dir](byx, byy, pos, frame);
+
+ };
+
+ function selectClosestFrameX(byx, pos) {
+
+ if (byx.length > 0) {
+ var x = byx.peek().getPos().x, a = [ byx.pop() ];
+ while (byx.length > 0 && byx.peek().getPos().x == x)
+ a.push(byx.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.y - f.getPos().y - f.getSize().y/2);
+
+ });
+ }
+ };
+
+ function selectClosestFrameY(byy, pos) {
+ if (byy.length > 0) {
+ var y = byy.peek().getPos().y, a = [ byy.pop() ];
+ while (byy.length > 0 && byy.peek().getPos().y == y)
+ a.push(byy.pop());
+ return a.minElement(function(f){
+ return Math.abs(pos.x - f.getPos().x - f.getSize().x/2);
+
+ });
+
+}
+ };
+
+ P._get_frameInDir_left = function(byx, byy, pos, frame) {
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ ymacs.getActiveBuffer().cmd("backward_delete_char");
+ return (f !== frame) && (p.x < pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_right = function(byx, byy, pos, frame) {
+ byx.reverse();
+ byx = byx.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var temp = "*";
+ ymacs.getActiveBuffer().cmd("insert",temp);
+ return (f !== frame) && (p.x > pos.x) && (p.y - pos.sz.y <= pos.y) && (p.y + s.y > pos.y);
+ });
+ return selectClosestFrameX(byx, pos);
+ };
+
+ P._get_frameInDir_up = function(byx, byy, pos, frame) {
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+ var prefix1,prefix2,pretemp1,pretemp2;
+ var temp1; var p1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); p1= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ {
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p1);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ }
+ }
+ }
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y < pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ P._get_frameInDir_down = function(byx, byy, pos, frame) {
+ byy.reverse();
+ byy = byy.grep(function(f){
+ var p = f.getPos(), s = f.getSize();
+
+ var p2;
+ var temp1;
+ var temp2;
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp1 = ymacs.getActiveBuffer().matchData[0];
+ // ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char");
+ p2= ymacs.getActiveBuffer().point();
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[*]+/g))
+ {
+ temp2 = ymacs.getActiveBuffer().matchData[0];
+ if (temp1.length > temp2.length)
+ {
+ alert("Cannot move past superior level or buffer limit");
+ }
+ else {
+ /* ymacs.getActiveBuffer().cmd("backward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_char"); */
+ ymacs.getActiveBuffer().cmd("forward_line");
+ if (ymacs.getActiveBuffer().cmd("looking_at", /[^*]+/g))
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+ else
+ { ymacs.getActiveBuffer().cmd("backward_line");
+ ymacs.getActiveBuffer().cmd("transpose_para");
+ ymacs.getActiveBuffer()._repositionCaret(p2);
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+} }}
+ else if (ymacs.getActiveBuffer().cmd("looking_at", /([0-9]+)(\.\s+)([a-z]+)+/g))
+ {
+
+ ymacs.getActiveBuffer().cmd("forward_paragraph");
+ ymacs.getActiveBuffer().cmd("forward_line");
+ // ymacs.getActiveBuffer().cmd("beginning_of_line");
+ ymacs.getActiveBuffer().cmd("transpose_text");
+
+ }
+
+
+ else
+ {
+ ymacs.getActiveBuffer().cmd("forward_line");
+ ymacs.getActiveBuffer().cmd("transpose_lines");
+ ymacs.getActiveBuffer().cmd("beginning_of_line");
+ }
+
+ return (f !== frame) && (p.y > pos.y) && (p.x - pos.sz.x <= pos.x) && (p.x + s.x > pos.x);
+ });
+ return selectClosestFrameY(byy, pos);
+ };
+
+ /* -----[ local storage ]----- */
+
+ function ensureLocalStorage() {
+ if (!(window.localStorage && window.localStorage.getItem))
+ throw new Ymacs_Exception("Local storage facility not available in this browser");
+ };
+
+ P.ls_get = function() {
+ ensureLocalStorage();
+ return DlJSON.decode(localStorage.getItem(".ymacs") || "{}", true);
+ };
+
+ P.ls_set = function(src) {
+ ensureLocalStorage();
+ localStorage.setItem(".ymacs", DlJSON.encode(src));
+ };
+
+ P.ls_getFileContents = function(name, nothrow) {
+ var info = this.ls_getFileDirectory(name), other = info.other, code;
+ if (other.length == 1) {
+ code = info.dir[other[0]];
+ }
+ if (code == null && !nothrow) {
+ throw new Ymacs_Exception("File not found");
+ }
+ return code;
+ };
+
+ P.ls_getFileDirectory = function(name, create) {
+ var store, dir = store = this.ls_get();
+ name = name.replace(/^[~\x2f]+/, "").split(/\x2f+/);
+ var path = [], other = [];
+ while (name.length > 0) {
+ var part = name.shift();
+ if (dir.hasOwnProperty(part) && (typeof dir[part] != "string")) {
+ dir = dir[part];
+ path.push(part);
+ }
+ else {
+ other.push(part);
+ }
+ };
+ if (create) {
+ var n = create == "file" ? 1 : 0;
+ while (other.length > n) {
+ dir = dir[other.shift()] = {};
+ }
+ this.ls_set(store);
+ }
+ return { store: store, dir: dir, path: path, other: other };
+ };
+
+});