aboutsummaryrefslogtreecommitdiff
path: root/js/controllers/code-editor-controller.js
blob: 23bd9279eb4a3ba3e91f24557d2e71f97ca9114f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* <copyright>
This file contains proprietary software owned by Motorola Mobility, Inc.<br/>
No rights, expressed or implied, whatsoever to this software are provided by Motorola Mobility, Inc. hereunder.<br/>
(c) Copyright 2011 Motorola Mobility, Inc.  All Rights Reserved.
</copyright> */

////////////////////////////////////////////////////////////////////////
//
var Montage = 		require("montage/core/core").Montage,
    Component = 	require("montage/ui/component").Component;

var CodeEditorController = exports.CodeEditorController = Montage.create(Component, {
    hasTemplate: {
        value: false
    },

    _codeEditor : {
        value:null
    },

    codeEditor:{
        get: function(){return this._codeEditor;},
        set: function(value){this._codeEditor = value;}
    },

    deserializedFromTemplate: {
        value: function() {
            //TODO:add logic to check some configuration file to load the right code editor
            this.codeEditor = CodeMirror;
        }
    },

    createEditor : {
        value:function(doc, type){
            var self = this;
            var editor = self.codeEditor.fromTextArea(doc.textArea, {
                               lineNumbers: true,
                               matchBrackets:true,
                               mode: type,
                               onChange: function(){
                                   var historySize = doc.editor.historySize();
                                   if(historySize.undo>0){
                                        doc.needsSave = true;
                                   }else if(historySize.undo===0 && historySize.redo>0){
                                       doc.needsSave = false;
                                   }
                               },
                               onCursorActivity: function() {
                                   doc.editor.matchHighlight("CodeMirror-matchhighlight");
                                   doc.editor.setLineClass(doc.editor.hline, null, null);
                                   doc.editor.hline = doc.editor.setLineClass(doc.editor.getCursor().line, null, "activeline");
                               },
                               //extraKeys: {"Ctrl-Space": function(cm) {CodeMirror.simpleHint(cm, CodeMirror.javascriptHint);}}
                               onKeyEvent: function(cm, keyEvent) {
                                    if((keyEvent.type === "keyup")//need seperate keycode set per mode
                                        && ((keyEvent.keyCode > 47 && keyEvent.keyCode < 57)//numbers
                                            || (keyEvent.keyCode > 64 && keyEvent.keyCode <91)//letters
                                            || (keyEvent.keyCode === 190)//period
                                            || (keyEvent.keyCode === 189)//underscore, dash
                                           )
                                        && !( (keyEvent.keyCode === 219)//open bracket [
                                                || (keyEvent.keyCode === 221)//close bracket ]
                                                || (keyEvent.shiftKey && keyEvent.keyCode === 219)//open bracket {
                                                || (keyEvent.shiftKey && keyEvent.keyCode === 221)//close bracket }
                                                || (keyEvent.shiftKey && keyEvent.keyCode === 57)//open bracket (
                                                || (keyEvent.shiftKey && keyEvent.keyCode === 48)//close bracket )
                                           )
                                    ){

                                        self.codeEditor.simpleHint(cm, self.codeEditor.javascriptHint);
                                    }
                               }
                       });

            return editor;
        }
    }

});