layout.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132
  1. define(function(require, exports, module) {
  2. "use strict";
  3. var dom = require("ace/lib/dom");
  4. var event = require("ace/lib/event");
  5. var EditSession = require("ace/edit_session").EditSession;
  6. var UndoManager = require("ace/undomanager").UndoManager;
  7. var Renderer = require("ace/virtual_renderer").VirtualRenderer;
  8. var Editor = require("ace/editor").Editor;
  9. var MultiSelect = require("ace/multi_select").MultiSelect;
  10. dom.importCssString("\
  11. splitter {\
  12. border: 1px solid #C6C6D2;\
  13. width: 0px;\
  14. cursor: ew-resize;\
  15. z-index:10}\
  16. splitter:hover {\
  17. margin-left: -2px;\
  18. width:3px;\
  19. border-color: #B5B4E0;\
  20. }\
  21. ", "splitEditor");
  22. exports.edit = function(el) {
  23. if (typeof(el) == "string")
  24. el = document.getElementById(el);
  25. var editor = new Editor(new Renderer(el, require("ace/theme/textmate")));
  26. editor.resize();
  27. event.addListener(window, "resize", function() {
  28. editor.resize();
  29. });
  30. return editor;
  31. };
  32. var SplitRoot = function(el, theme, position, getSize) {
  33. el.style.position = position || "relative";
  34. this.container = el;
  35. this.getSize = getSize || this.getSize;
  36. this.resize = this.$resize.bind(this);
  37. event.addListener(el.ownerDocument.defaultView, "resize", this.resize);
  38. this.editor = this.createEditor();
  39. };
  40. (function(){
  41. this.createEditor = function() {
  42. var el = document.createElement("div");
  43. el.className = this.$editorCSS;
  44. el.style.cssText = "position: absolute; top:0px; bottom:0px";
  45. this.$container.appendChild(el);
  46. var session = new EditSession("");
  47. var editor = new Editor(new Renderer(el, this.$theme));
  48. /*editor.on("focus", function() {
  49. this._emit("focus", editor);
  50. }.bind(this));*/
  51. this.$editors.push(editor);
  52. editor.setFontSize(this.$fontSize);
  53. return editor;
  54. };
  55. this.$resize = function() {
  56. var size = this.getSize(this.container);
  57. this.rect = {
  58. x: size.left,
  59. y: size.top,
  60. w: size.width,
  61. h: size.height
  62. };
  63. this.item.resize(this.rect);
  64. };
  65. this.getSize = function(el) {
  66. return el.getBoundingClientRect();
  67. };
  68. this.destroy = function() {
  69. var win = this.container.ownerDocument.defaultView;
  70. event.removeListener(win, "resize", this.resize);
  71. };
  72. }).call(SplitRoot.prototype);
  73. var Split = function(){
  74. };
  75. (function(){
  76. this.execute = function(options) {
  77. this.$u.execute(options);
  78. };
  79. }).call(Split.prototype);
  80. exports.singleLineEditor = function(el) {
  81. var renderer = new Renderer(el);
  82. el.style.overflow = "hidden";
  83. renderer.screenToTextCoordinates = function(x, y) {
  84. var pos = this.pixelToScreenCoordinates(x, y);
  85. return this.session.screenToDocumentPosition(
  86. Math.min(this.session.getScreenLength() - 1, Math.max(pos.row, 0)),
  87. Math.max(pos.column, 0)
  88. );
  89. };
  90. renderer.$maxLines = 4;
  91. renderer.setStyle("ace_one-line");
  92. var editor = new Editor(renderer);
  93. editor.session.setUndoManager(new UndoManager());
  94. editor.setShowPrintMargin(false);
  95. editor.renderer.setShowGutter(false);
  96. editor.renderer.setHighlightGutterLine(false);
  97. editor.$mouseHandler.$focusWaitTimout = 0;
  98. return editor;
  99. };
  100. });