JAL-1807
[jalview.git] / site / t.js
diff --git a/site/t.js b/site/t.js
new file mode 100644 (file)
index 0000000..9704c61
--- /dev/null
+++ b/site/t.js
@@ -0,0 +1,643 @@
+Clazz.declarePackage ("jalview.commands");
+Clazz.load (["jalview.commands.CommandI", "java.lang.Enum", "java.util.ArrayList"], "jalview.commands.EditCommand", ["jalview.analysis.AlignSeq", "jalview.datamodel.AlignmentAnnotation", "$.Annotation", "$.Sequence", "$.SequenceFeature", "jalview.schemes.ResidueProperties", "jalview.util.Comparison", "$.ReverseListIterator", "$.StringUtils", "java.lang.StringBuffer", "java.util.HashMap", "$.Hashtable"], function () {
+c$ = Clazz.decorateAsClass (function () {
+this.edits = null;
+this.description = null;
+if (!Clazz.isClassDefined ("jalview.commands.EditCommand.Edit")) {
+jalview.commands.EditCommand.$EditCommand$Edit$ ();
+}
+Clazz.instantialize (this, arguments);
+}, jalview.commands, "EditCommand", null, jalview.commands.CommandI);
+Clazz.prepareFields (c$, function () {
+this.edits =  new java.util.ArrayList ();
+});
+Clazz.makeConstructor (c$, 
+function () {
+});
+Clazz.makeConstructor (c$, 
+function (description) {
+this.description = description;
+}, "~S");
+Clazz.makeConstructor (c$, 
+function (description, command, seqs, position, number, al) {
+this.description = description;
+if (command === jalview.commands.EditCommand.Action.CUT || command === jalview.commands.EditCommand.Action.PASTE) {
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al));
+}this.performEdit (0, null);
+}, "~S,jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$, 
+function (description, command, replace, seqs, position, number, al) {
+this.description = description;
+if (command === jalview.commands.EditCommand.Action.REPLACE) {
+this.setEdit (Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al, replace));
+}this.performEdit (0, null);
+}, "~S,jalview.commands.EditCommand.Action,~S,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.defineMethod (c$, "setEdit", 
+function (e) {
+this.edits.clear ();
+this.edits.add (e);
+}, "jalview.commands.EditCommand.Edit");
+Clazz.defineMethod (c$, "addEdit", 
+function (e) {
+if (!jalview.commands.EditCommand.expandEdit (this.edits, e)) {
+this.edits.add (e);
+}}, "jalview.commands.EditCommand.Edit");
+c$.expandEdit = Clazz.defineMethod (c$, "expandEdit", 
+function (edits, e) {
+if (edits == null || edits.isEmpty ()) {
+return false;
+}var lastEdit = edits.get (edits.size () - 1);
+var action = e.command;
+if (lastEdit.command !== action) {
+return false;
+}if (lastEdit.seqs.length != e.seqs.length) {
+return false;
+}for (var i = 0; i < e.seqs.length; i++) {
+if (lastEdit.seqs[i].getDatasetSequence () !== e.seqs[i].getDatasetSequence ()) {
+return false;
+}}
+var contiguous = (action === jalview.commands.EditCommand.Action.INSERT_GAP && e.position == lastEdit.position + lastEdit.number) || (action === jalview.commands.EditCommand.Action.DELETE_GAP && e.position + e.number == lastEdit.position);
+if (contiguous) {
+lastEdit.number += e.number;
+lastEdit.seqs = e.seqs;
+if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+lastEdit.position--;
+}return true;
+}return false;
+}, "java.util.List,jalview.commands.EditCommand.Edit");
+Clazz.defineMethod (c$, "clearEdits", 
+function () {
+this.edits.clear ();
+});
+Clazz.defineMethod (c$, "getEdit", 
+function (i) {
+if (i >= 0 && i < this.edits.size ()) {
+return this.edits.get (i);
+}return null;
+}, "~N");
+Clazz.overrideMethod (c$, "getDescription", 
+function () {
+return this.description;
+});
+Clazz.overrideMethod (c$, "getSize", 
+function () {
+return this.edits.size ();
+});
+Clazz.defineMethod (c$, "getAlignment", 
+function () {
+return (this.edits.isEmpty () ? null : this.edits.get (0).al);
+});
+Clazz.defineMethod (c$, "appendEdit", 
+function (command, seqs, position, number, al, performEdit) {
+this.appendEdit (command, seqs, position, number, al, performEdit, null);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B");
+Clazz.defineMethod (c$, "appendEdit", 
+function (command, seqs, position, number, al, performEdit, views) {
+var edit = Clazz.innerTypeInstance (jalview.commands.EditCommand.Edit, this, null, command, seqs, position, number, al.getGapCharacter ());
+if (al.getHeight () == seqs.length) {
+edit.al = al;
+edit.fullAlignmentHeight = true;
+}this.addEdit (edit);
+if (performEdit) {
+jalview.commands.EditCommand.performEdit (edit, views);
+}}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~B,~A");
+Clazz.defineMethod (c$, "appendEdit", 
+function (edit, al, performEdit, views) {
+if (al.getHeight () == edit.seqs.length) {
+edit.al = al;
+edit.fullAlignmentHeight = true;
+}this.addEdit (edit);
+if (performEdit) {
+jalview.commands.EditCommand.performEdit (edit, views);
+}}, "jalview.commands.EditCommand.Edit,jalview.datamodel.AlignmentI,~B,~A");
+Clazz.defineMethod (c$, "performEdit", 
+function (commandIndex, views) {
+var iterator = this.edits.listIterator (commandIndex);
+while (iterator.hasNext ()) {
+var edit = iterator.next ();
+jalview.commands.EditCommand.performEdit (edit, views);
+}
+}, "~N,~A");
+c$.performEdit = Clazz.defineMethod (c$, "performEdit", 
+function (edit, views) {
+switch (edit.command) {
+case jalview.commands.EditCommand.Action.INSERT_GAP:
+jalview.commands.EditCommand.insertGap (edit);
+break;
+case jalview.commands.EditCommand.Action.DELETE_GAP:
+jalview.commands.EditCommand.deleteGap (edit);
+break;
+case jalview.commands.EditCommand.Action.CUT:
+jalview.commands.EditCommand.cut (edit, views);
+break;
+case jalview.commands.EditCommand.Action.PASTE:
+jalview.commands.EditCommand.paste (edit, views);
+break;
+case jalview.commands.EditCommand.Action.REPLACE:
+jalview.commands.EditCommand.replace (edit);
+break;
+case jalview.commands.EditCommand.Action.INSERT_NUC:
+break;
+default:
+break;
+}
+}, "jalview.commands.EditCommand.Edit,~A");
+Clazz.overrideMethod (c$, "doCommand", 
+function (views) {
+this.performEdit (0, views);
+}, "~A");
+Clazz.overrideMethod (c$, "undoCommand", 
+function (views) {
+var iterator = this.edits.listIterator (this.edits.size ());
+while (iterator.hasPrevious ()) {
+var e = iterator.previous ();
+switch (e.command) {
+case jalview.commands.EditCommand.Action.INSERT_GAP:
+jalview.commands.EditCommand.deleteGap (e);
+break;
+case jalview.commands.EditCommand.Action.DELETE_GAP:
+jalview.commands.EditCommand.insertGap (e);
+break;
+case jalview.commands.EditCommand.Action.CUT:
+jalview.commands.EditCommand.paste (e, views);
+break;
+case jalview.commands.EditCommand.Action.PASTE:
+jalview.commands.EditCommand.cut (e, views);
+break;
+case jalview.commands.EditCommand.Action.REPLACE:
+jalview.commands.EditCommand.replace (e);
+break;
+case jalview.commands.EditCommand.Action.INSERT_NUC:
+break;
+default:
+break;
+}
+}
+}, "~A");
+c$.insertGap = Clazz.defineMethod (c$, "insertGap", 
+ function (command) {
+for (var s = 0; s < command.seqs.length; s++) {
+command.seqs[s].insertCharAt (command.position, command.number, command.gapChar);
+}
+jalview.commands.EditCommand.adjustAnnotations (command, true, false, null);
+}, "jalview.commands.EditCommand.Edit");
+c$.deleteGap = Clazz.defineMethod (c$, "deleteGap", 
+ function (command) {
+for (var s = 0; s < command.seqs.length; s++) {
+command.seqs[s].deleteChars (command.position, command.position + command.number);
+}
+jalview.commands.EditCommand.adjustAnnotations (command, false, false, null);
+}, "jalview.commands.EditCommand.Edit");
+c$.cut = Clazz.defineMethod (c$, "cut", 
+function (command, views) {
+var seqDeleted = false;
+command.string =  Clazz.newCharArray (command.seqs.length, '\0');
+for (var i = 0; i < command.seqs.length; i++) {
+var sequence = command.seqs[i];
+if (sequence.getLength () > command.position) {
+command.string[i] = sequence.getSequence (command.position, command.position + command.number);
+var oldds = sequence.getDatasetSequence ();
+if (command.oldds != null && command.oldds[i] != null) {
+sequence.setDatasetSequence (null);
+}sequence.deleteChars (command.position, command.position + command.number);
+if (command.oldds != null && command.oldds[i] != null) {
+sequence.setDatasetSequence (command.oldds[i]);
+command.oldds[i] = oldds;
+} else {
+if (oldds !== sequence.getDatasetSequence () || sequence.getSequenceFeatures () != null) {
+if (command.oldds == null) {
+command.oldds =  new Array (command.seqs.length);
+}command.oldds[i] = oldds;
+jalview.commands.EditCommand.adjustFeatures (command, i, sequence.findPosition (command.position), sequence.findPosition (command.position + command.number), false);
+}}}if (sequence.getLength () < 1) {
+command.al.deleteSequence (sequence);
+seqDeleted = true;
+}}
+jalview.commands.EditCommand.adjustAnnotations (command, false, seqDeleted, views);
+}, "jalview.commands.EditCommand.Edit,~A");
+c$.paste = Clazz.defineMethod (c$, "paste", 
+function (command, views) {
+var tmp;
+var newDSNeeded;
+var newDSWasNeeded;
+var newstart;
+var newend;
+var seqWasDeleted = false;
+var start = 0;
+var end = 0;
+for (var i = 0; i < command.seqs.length; i++) {
+newDSNeeded = false;
+newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
+if (command.seqs[i].getLength () < 1) {
+if (command.alIndex[i] < command.al.getHeight ()) {
+var sequences;
+{
+if (!(command.alIndex[i] < 0)) {
+sequences.add (command.alIndex[i], command.seqs[i]);
+}}} else {
+command.al.addSequence (command.seqs[i]);
+}seqWasDeleted = true;
+}newstart = command.seqs[i].getStart ();
+newend = command.seqs[i].getEnd ();
+tmp =  new StringBuffer ();
+tmp.append (command.seqs[i].getSequence ());
+if (command.string != null && command.string[i] != null) {
+if (command.position >= tmp.length ()) {
+var length = command.position - tmp.length ();
+while (length > 0) {
+tmp.append (command.gapChar);
+length--;
+}
+}tmp.insert (command.position, command.string[i]);
+for (var s = 0; s < command.string[i].length; s++) {
+if (jalview.schemes.ResidueProperties.aaIndex[command.string[i][s].charCodeAt (0)] != 23) {
+if (!newDSNeeded) {
+newDSNeeded = true;
+start = command.seqs[i].findPosition (command.position);
+end = command.seqs[i].findPosition (command.position + command.number);
+}if (command.seqs[i].getStart () == start) {
+newstart--;
+} else {
+newend++;
+}}}
+command.string[i] = null;
+}command.seqs[i].setSequence (tmp.toString ());
+command.seqs[i].setStart (newstart);
+command.seqs[i].setEnd (newend);
+if (newDSNeeded) {
+if (command.seqs[i].getDatasetSequence () != null) {
+var ds;
+if (newDSWasNeeded) {
+ds = command.oldds[i];
+} else {
+ds =  new jalview.datamodel.Sequence (command.seqs[i].getName (), jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars, command.seqs[i].getSequenceAsString ()), command.seqs[i].getStart (), command.seqs[i].getEnd ());
+ds.setDescription (command.seqs[i].getDescription ());
+}if (command.oldds == null) {
+command.oldds =  new Array (command.seqs.length);
+}command.oldds[i] = command.seqs[i].getDatasetSequence ();
+command.seqs[i].setDatasetSequence (ds);
+}jalview.commands.EditCommand.adjustFeatures (command, i, start, end, true);
+}}
+jalview.commands.EditCommand.adjustAnnotations (command, true, seqWasDeleted, views);
+command.string = null;
+}, "jalview.commands.EditCommand.Edit,~A");
+c$.replace = Clazz.defineMethod (c$, "replace", 
+function (command) {
+var tmp;
+var oldstring;
+var start = command.position;
+var end = command.number;
+command.number = start + command.string[0].length;
+for (var i = 0; i < command.seqs.length; i++) {
+var newDSWasNeeded = command.oldds != null && command.oldds[i] != null;
+oldstring = command.seqs[i].getSequenceAsString ();
+tmp =  new StringBuffer (oldstring.substring (0, start));
+tmp.append (command.string[i]);
+var nogaprep = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars,  String.instantialize (command.string[i]));
+var ipos = command.seqs[i].findPosition (start) - command.seqs[i].getStart ();
+tmp.append (oldstring.substring (end));
+command.seqs[i].setSequence (tmp.toString ());
+command.string[i] = oldstring.substring (start, end).toCharArray ();
+var nogapold = jalview.analysis.AlignSeq.extractGaps (jalview.util.Comparison.GapChars,  String.instantialize (command.string[i]));
+if (!nogaprep.toLowerCase ().equals (nogapold.toLowerCase ())) {
+if (newDSWasNeeded) {
+var oldds = command.seqs[i].getDatasetSequence ();
+command.seqs[i].setDatasetSequence (command.oldds[i]);
+command.oldds[i] = oldds;
+} else {
+if (command.oldds == null) {
+command.oldds =  new Array (command.seqs.length);
+}command.oldds[i] = command.seqs[i].getDatasetSequence ();
+var newds =  new jalview.datamodel.Sequence (command.seqs[i].getDatasetSequence ());
+var fullseq;
+var osp = newds.getSequenceAsString ();
+fullseq = osp.substring (0, ipos) + nogaprep + osp.substring (ipos + nogaprep.length);
+newds.setSequence (fullseq.toUpperCase ());
+command.seqs[i].setDatasetSequence (newds);
+}}tmp = null;
+oldstring = null;
+}
+}, "jalview.commands.EditCommand.Edit");
+c$.adjustAnnotations = Clazz.defineMethod (c$, "adjustAnnotations", 
+function (command, insert, modifyVisibility, views) {
+var annotations = null;
+if (modifyVisibility && !insert) {
+command.deletedAnnotationRows =  new java.util.Hashtable ();
+}if (command.fullAlignmentHeight) {
+annotations = command.al.getAlignmentAnnotation ();
+} else {
+var aSize = 0;
+var tmp;
+for (var s = 0; s < command.seqs.length; s++) {
+if (modifyVisibility) {
+if (!insert) {
+tmp = command.seqs[s].getAnnotation ();
+if (tmp != null) {
+var alen = tmp.length;
+for (var aa = 0; aa < tmp.length; aa++) {
+if (!command.al.deleteAnnotation (tmp[aa])) {
+tmp[aa] = null;
+alen--;
+}}
+command.seqs[s].setAlignmentAnnotation (null);
+if (alen != tmp.length) {
+var saved =  new Array (alen);
+for (var aa = 0, aapos = 0; aa < tmp.length; aa++) {
+if (tmp[aa] != null) {
+saved[aapos++] = tmp[aa];
+tmp[aa] = null;
+}}
+tmp = saved;
+command.deletedAnnotationRows.put (command.seqs[s], saved);
+for (var alview = 0; views != null && alview < views.length; alview++) {
+if (views[alview] !== command.al) {
+var toremove = views[alview].getAlignmentAnnotation ();
+if (toremove == null || toremove.length == 0) {
+continue;
+}for (var aa = 0; aa < toremove.length; aa++) {
+if (toremove[aa].sequenceRef === command.seqs[s]) {
+views[alview].deleteAnnotation (toremove[aa]);
+}}
+}}
+} else {
+command.deletedAnnotationRows.put (command.seqs[s], tmp);
+}}} else {
+if (command.deletedAnnotationRows != null && command.deletedAnnotationRows.containsKey (command.seqs[s])) {
+var revealed = command.deletedAnnotationRows.get (command.seqs[s]);
+command.seqs[s].setAlignmentAnnotation (revealed);
+if (revealed != null) {
+for (var aa = 0; aa < revealed.length; aa++) {
+command.al.addAnnotation (revealed[aa]);
+}
+for (var aa = 0; aa < revealed.length; aa++) {
+command.al.setAnnotationIndex (revealed[aa], aa);
+}
+for (var vnum = 0; views != null && vnum < views.length; vnum++) {
+if (views[vnum] !== command.al) {
+var avwidth = views[vnum].getWidth () + 1;
+for (var a = 0; a < revealed.length; a++) {
+var newann =  new jalview.datamodel.AlignmentAnnotation (revealed[a]);
+command.seqs[s].addAlignmentAnnotation (newann);
+newann.padAnnotation (avwidth);
+views[vnum].addAnnotation (newann);
+views[vnum].setAnnotationIndex (newann, a);
+}
+}}
+}}}continue;
+}if (command.seqs[s].getAnnotation () == null) {
+continue;
+}if (aSize == 0) {
+annotations = command.seqs[s].getAnnotation ();
+} else {
+tmp =  new Array (aSize + command.seqs[s].getAnnotation ().length);
+System.arraycopy (annotations, 0, tmp, 0, aSize);
+System.arraycopy (command.seqs[s].getAnnotation (), 0, tmp, aSize, command.seqs[s].getAnnotation ().length);
+annotations = tmp;
+}aSize = annotations.length;
+}
+}if (annotations == null) {
+return;
+}if (!insert) {
+command.deletedAnnotations =  new java.util.Hashtable ();
+}var aSize;
+var temp;
+for (var a = 0; a < annotations.length; a++) {
+if (annotations[a].autoCalculated || annotations[a].annotations == null) {
+continue;
+}var tSize = 0;
+aSize = annotations[a].annotations.length;
+if (insert) {
+temp =  new Array (aSize + command.number);
+if (annotations[a].padGaps) {
+for (var aa = 0; aa < temp.length; aa++) {
+temp[aa] =  new jalview.datamodel.Annotation (command.gapChar + "", null, ' ', 0);
+}
+}} else {
+if (command.position < aSize) {
+if (command.position + command.number >= aSize) {
+tSize = aSize;
+} else {
+tSize = aSize - command.number;
+}} else {
+tSize = aSize;
+}if (tSize < 0) {
+tSize = aSize;
+}temp =  new Array (tSize);
+}if (insert) {
+if (command.position < annotations[a].annotations.length) {
+System.arraycopy (annotations[a].annotations, 0, temp, 0, command.position);
+if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
+var restore = command.deletedAnnotations.get (annotations[a].annotationId);
+System.arraycopy (restore, 0, temp, command.position, command.number);
+}System.arraycopy (annotations[a].annotations, command.position, temp, command.position + command.number, aSize - command.position);
+} else {
+if (command.deletedAnnotations != null && command.deletedAnnotations.containsKey (annotations[a].annotationId)) {
+var restore = command.deletedAnnotations.get (annotations[a].annotationId);
+temp =  new Array (annotations[a].annotations.length + restore.length);
+System.arraycopy (annotations[a].annotations, 0, temp, 0, annotations[a].annotations.length);
+System.arraycopy (restore, 0, temp, annotations[a].annotations.length, restore.length);
+} else {
+temp = annotations[a].annotations;
+}}} else {
+if (tSize != aSize || command.position < 2) {
+var copylen = Math.min (command.position, annotations[a].annotations.length);
+if (copylen > 0) {
+System.arraycopy (annotations[a].annotations, 0, temp, 0, copylen);
+}var deleted =  new Array (command.number);
+if (copylen >= command.position) {
+copylen = Math.min (command.number, annotations[a].annotations.length - command.position);
+if (copylen > 0) {
+System.arraycopy (annotations[a].annotations, command.position, deleted, 0, copylen);
+}}command.deletedAnnotations.put (annotations[a].annotationId, deleted);
+if (annotations[a].annotations.length > command.position + command.number) {
+System.arraycopy (annotations[a].annotations, command.position + command.number, temp, command.position, annotations[a].annotations.length - command.position - command.number);
+}} else {
+var dSize = aSize - command.position;
+if (dSize > 0) {
+var deleted =  new Array (command.number);
+System.arraycopy (annotations[a].annotations, command.position, deleted, 0, dSize);
+command.deletedAnnotations.put (annotations[a].annotationId, deleted);
+tSize = Math.min (annotations[a].annotations.length, command.position);
+temp =  new Array (tSize);
+System.arraycopy (annotations[a].annotations, 0, temp, 0, tSize);
+} else {
+temp = annotations[a].annotations;
+}}}annotations[a].annotations = temp;
+}
+}, "jalview.commands.EditCommand.Edit,~B,~B,~A");
+c$.adjustFeatures = Clazz.defineMethod (c$, "adjustFeatures", 
+function (command, index, i, j, insert) {
+var seq = command.seqs[index];
+var sequence = seq.getDatasetSequence ();
+if (sequence == null) {
+sequence = seq;
+}if (insert) {
+if (command.editedFeatures != null && command.editedFeatures.containsKey (seq)) {
+sequence.setSequenceFeatures (command.editedFeatures.get (seq));
+}return;
+}var sf = sequence.getSequenceFeatures ();
+if (sf == null) {
+return;
+}var oldsf =  new Array (sf.length);
+var cSize = j - i;
+for (var s = 0; s < sf.length; s++) {
+var copy =  new jalview.datamodel.SequenceFeature (sf[s]);
+oldsf[s] = copy;
+if (sf[s].getEnd () < i) {
+continue;
+}if (sf[s].getBegin () > j) {
+sf[s].setBegin (copy.getBegin () - cSize);
+sf[s].setEnd (copy.getEnd () - cSize);
+continue;
+}if (sf[s].getBegin () >= i) {
+sf[s].setBegin (i);
+}if (sf[s].getEnd () < j) {
+sf[s].setEnd (j - 1);
+}sf[s].setEnd (sf[s].getEnd () - (cSize));
+if (sf[s].getBegin () > sf[s].getEnd ()) {
+sequence.deleteFeature (sf[s]);
+}}
+if (command.editedFeatures == null) {
+command.editedFeatures =  new java.util.Hashtable ();
+}command.editedFeatures.put (seq, oldsf);
+}, "jalview.commands.EditCommand.Edit,~N,~N,~N,~B");
+Clazz.defineMethod (c$, "getEdits", 
+function () {
+return this.edits;
+});
+Clazz.defineMethod (c$, "priorState", 
+function (forUndo) {
+var result =  new java.util.HashMap ();
+if (this.getEdits () == null) {
+return result;
+}if (forUndo) {
+for (var e, $e = this.getEdits ().iterator (); $e.hasNext () && ((e = $e.next ()) || true);) {
+for (var seq, $seq = 0, $$seq = e.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+var preEdit = result.get (ds);
+if (preEdit == null) {
+preEdit =  new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
+preEdit.setDatasetSequence (ds);
+result.put (ds, preEdit);
+}}
+}
+return result;
+}var edits =  new jalview.util.ReverseListIterator (this.getEdits ());
+while (edits.hasNext ()) {
+var oldEdit = edits.next ();
+var action = oldEdit.getAction ();
+var position = oldEdit.getPosition ();
+var number = oldEdit.getNumber ();
+var gap = oldEdit.getGapCharacter ();
+for (var seq, $seq = 0, $$seq = oldEdit.getSequences (); $seq < $$seq.length && ((seq = $$seq[$seq]) || true); $seq++) {
+var ds = seq.getDatasetSequence ();
+var preEdit = result.get (ds);
+if (preEdit == null) {
+preEdit =  new jalview.datamodel.Sequence ("", seq.getSequenceAsString ());
+preEdit.setDatasetSequence (ds);
+result.put (ds, preEdit);
+}if (ds != null) {
+if (action === jalview.commands.EditCommand.Action.DELETE_GAP) {
+preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.insertCharAt (preEdit.getSequence (), position, number, gap)));
+} else if (action === jalview.commands.EditCommand.Action.INSERT_GAP) {
+preEdit.setSequence ( String.instantialize (jalview.util.StringUtils.deleteChars (preEdit.getSequence (), position, position + number)));
+} else {
+System.err.println ("Can't undo edit action " + action);
+}}}
+}
+return result;
+}, "~B");
+Clazz.defineMethod (c$, "getEditIterator", 
+function (forwards) {
+if (forwards) {
+return this.getEdits ().iterator ();
+} else {
+return  new jalview.util.ReverseListIterator (this.getEdits ());
+}}, "~B");
+c$.$EditCommand$Edit$ = function () {
+Clazz.pu$h(self.c$);
+c$ = Clazz.decorateAsClass (function () {
+Clazz.prepareCallback (this, arguments);
+this.oldds = null;
+this.fullAlignmentHeight = false;
+this.deletedAnnotationRows = null;
+this.deletedAnnotations = null;
+this.editedFeatures = null;
+this.al = null;
+this.command = null;
+this.string = null;
+this.seqs = null;
+this.alIndex = null;
+this.position = 0;
+this.number = 0;
+this.gapChar = '\0';
+Clazz.instantialize (this, arguments);
+}, jalview.commands.EditCommand, "Edit");
+Clazz.makeConstructor (c$, 
+function (a, b, c, d, e) {
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.gapChar = e;
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,~S");
+Clazz.makeConstructor (c$, 
+function (a, b, c, d, e) {
+this.gapChar = e.getGapCharacter ();
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.al = e;
+this.alIndex =  Clazz.newIntArray (b.length, 0);
+for (var f = 0; f < b.length; f++) {
+this.alIndex[f] = e.findIndex (b[f]);
+}
+this.fullAlignmentHeight = (e.getHeight () == b.length);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI");
+Clazz.makeConstructor (c$, 
+function (a, b, c, d, e, f) {
+this.command = a;
+this.seqs = b;
+this.position = c;
+this.number = d;
+this.al = e;
+this.gapChar = e.getGapCharacter ();
+this.string =  Clazz.newCharArray (b.length, '\0');
+for (var g = 0; g < b.length; g++) {
+this.string[g] = f.toCharArray ();
+}
+this.fullAlignmentHeight = (e.getHeight () == b.length);
+}, "jalview.commands.EditCommand.Action,~A,~N,~N,jalview.datamodel.AlignmentI,~S");
+Clazz.defineMethod (c$, "getSequences", 
+function () {
+return this.seqs;
+});
+Clazz.defineMethod (c$, "getPosition", 
+function () {
+return this.position;
+});
+Clazz.defineMethod (c$, "getAction", 
+function () {
+return this.command;
+});
+Clazz.defineMethod (c$, "getNumber", 
+function () {
+return this.number;
+});
+Clazz.defineMethod (c$, "getGapCharacter", 
+function () {
+return this.gapChar;
+});
+c$ = Clazz.p0p ();
+};
+Clazz.pu$h(self.c$);
+c$ = Clazz.declareType (jalview.commands.EditCommand, "Action", Enum);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$1") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$1$ ())Clazz.defineEnumConstant (c$, "INSERT_GAP", 0, [], jalview.commands.EditCommand.Action);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$2") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$2$ ())Clazz.defineEnumConstant (c$, "DELETE_GAP", 1, [], jalview.commands.EditCommand.Action);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$3") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$3$ ())Clazz.defineEnumConstant (c$, "CUT", 2, [], jalview.commands.EditCommand.Action);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$4") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$4$ ())Clazz.defineEnumConstant (c$, "PASTE", 3, [], jalview.commands.EditCommand.Action);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$5") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$5$ ())Clazz.defineEnumConstant (c$, "REPLACE", 4, [], jalview.commands.EditCommand.Action);
+(Clazz.isClassDefined ("jalview.commands.EditCommand$Action$6") ? 0 : jalview.commands.EditCommand.$EditCommand$Action$6$ ())Clazz.defineEnumConstant (c$, "INSERT_NUC", 5, [], jalview.commands.EditCommand.Action);
+c$ = Clazz.p0p ();
+});