aboutsummaryrefslogtreecommitdiff
path: root/js/controllers/code-editor-controller.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/controllers/code-editor-controller.js')
-rw-r--r--js/controllers/code-editor-controller.js83
1 files changed, 31 insertions, 52 deletions
diff --git a/js/controllers/code-editor-controller.js b/js/controllers/code-editor-controller.js
index d292f838..f3c19b92 100644
--- a/js/controllers/code-editor-controller.js
+++ b/js/controllers/code-editor-controller.js
@@ -32,6 +32,7 @@ exports.CodeEditorController = Montage.create(Component, {
32 if(!value) { 32 if(!value) {
33 33
34 } else if(this._currentDocument.currentView === "code") { 34 } else if(this._currentDocument.currentView === "code") {
35 this.autocomplete = !this.codeCompletionSupport[this._currentDocument.model.file.extension];
35 this._currentDocument.model.views.code.editor.focus(); 36 this._currentDocument.model.views.code.editor.focus();
36 this.applySettings(); 37 this.applySettings();
37 } 38 }
@@ -51,13 +52,23 @@ exports.CodeEditorController = Montage.create(Component, {
51 value: {"js": true} 52 value: {"js": true}
52 }, 53 },
53 54
55 autocomplete: {
56 value: false
57 },
58
54 _automaticCodeComplete: { 59 _automaticCodeComplete: {
55 value:false 60 value:false
56 }, 61 },
57 62
58 automaticCodeComplete:{ 63 automaticCodeComplete:{
59 get: function(){return this._automaticCodeComplete;}, 64 get: function(){
60 set: function(value){this._automaticCodeComplete = value;} 65 return this._automaticCodeComplete;
66 },
67 set: function(value) {
68 if(this._automaticCodeComplete !== value) {
69 this._automaticCodeComplete = value;
70 }
71 }
61 }, 72 },
62 73
63 _editorTheme: { 74 _editorTheme: {
@@ -65,17 +76,23 @@ exports.CodeEditorController = Montage.create(Component, {
65 }, 76 },
66 77
67 editorTheme:{ 78 editorTheme:{
68 get: function(){return this._editorTheme;}, 79 get: function(){
69 set: function(value){this._editorTheme = value;} 80 return this._editorTheme;
81 },
82 set: function(value){
83 this._editorTheme = value;
84 }
70 }, 85 },
71 86
72 _zoomFactor:{ 87 _zoomFactor: {
73 value:100 88 value:100
74 }, 89 },
75 90
76 zoomFactor:{ 91 zoomFactor:{
77 get: function(){return this._zoomFactor;}, 92 get: function() {
78 set: function(value){ 93 return this._zoomFactor;
94 },
95 set: function(value) {
79 this.handleZoom(value); 96 this.handleZoom(value);
80 } 97 }
81 }, 98 },
@@ -115,13 +132,15 @@ exports.CodeEditorController = Montage.create(Component, {
115 }; 132 };
116 133
117 //configure auto code completion if it is supported for that document type 134 //configure auto code completion if it is supported for that document type
118 if(this.codeCompletionSupport[documentType] === true){ 135 if(this.autocomplete) {
119 editorOptions.onKeyEvent = function(cm, keyEvent){self._codeCompletionKeyEventHandler.call(self, cm, keyEvent, documentType)};
120 }
121 136
122 var editor = self.codeEditor.fromTextArea(codeDocumentView.textArea, editorOptions); 137 editorOptions.onKeyEvent = function(cm, keyEvent){
138 self._codeCompletionKeyEventHandler.call(self, cm, keyEvent, documentType)
139 };
123 140
124 return editor; 141 }
142
143 return self.codeEditor.fromTextArea(codeDocumentView.textArea, editorOptions);
125 } 144 }
126 }, 145 },
127 146
@@ -198,50 +217,12 @@ exports.CodeEditorController = Montage.create(Component, {
198 } 217 }
199 }, 218 },
200 219
201 handleCodeCompletionSupport:{
202 value:function(fileType){
203 var autoCodeCompleteElem = document.getElementsByClassName("autoCodeComplete")[0], elems=null, i=0;
204 if(autoCodeCompleteElem){
205 elems = autoCodeCompleteElem.getElementsByTagName("*");
206 }
207
208 if(elems && (this.codeCompletionSupport[fileType] === true)){
209 //enable elements
210 for(i=0;i<elems.length;i++){
211 if(elems[i].hasAttribute("disabled")){
212 elems[i].removeAttribute("disabled");
213 }
214 if(elems[i].classList.contains("disabled")){
215 elems[i].classList.remove("disabled");
216 }
217 }
218 }else if(elems && !this.codeCompletionSupport[fileType]){
219 //disable elements
220 for(i=0;i<elems.length;i++){
221 if(!elems[i].hasAttribute("disabled")){
222 elems[i].setAttribute("disabled", "disabled");
223 }
224 if(!elems[i].classList.contains("disabled")){
225 elems[i].classList.add("disabled");
226 }
227 }
228 }
229 }
230 },
231
232 getSelectedRange:{ 220 getSelectedRange:{
233 value:function(editor){ 221 value:function(editor){
234 return { from: editor.getCursor(true), to: editor.getCursor(false) }; 222 return { from: editor.getCursor(true), to: editor.getCursor(false) };
235 } 223 }
236 }, 224 },
237 225
238 autoFormatSelection:{
239 value: function(){
240 var range = this.getSelectedRange(this.currentDocument.model.views.code.editor);
241 this.currentDocument.model.views.code.editor.autoFormatRange(range.from, range.to);
242 }
243 },
244
245 commentSelection:{ 226 commentSelection:{
246 value: function(isComment){ 227 value: function(isComment){
247 var range = this.getSelectedRange(this.currentDocument.model.views.code.editor); 228 var range = this.getSelectedRange(this.currentDocument.model.views.code.editor);
@@ -271,8 +252,6 @@ exports.CodeEditorController = Montage.create(Component, {
271 value:function(){ 252 value:function(){
272 //set theme 253 //set theme
273 this.handleThemeSelection(); 254 this.handleThemeSelection();
274 //check autocomplete support
275 this.handleCodeCompletionSupport(this.currentDocument.model.file.extension);
276 //set zoom 255 //set zoom
277 this.handleZoom(this._zoomFactor); 256 this.handleZoom(this._zoomFactor);
278 } 257 }