Show More
@@ -0,0 +1,70 | |||||
|
1 | // Copyright (c) IPython Development Team. | |||
|
2 | // Distributed under the terms of the Modified BSD License. | |||
|
3 | ||||
|
4 | define([ | |||
|
5 | 'base/js/namespace', | |||
|
6 | 'jquery', | |||
|
7 | 'base/js/utils', | |||
|
8 | 'bootstrap', | |||
|
9 | ], function(IPython, $, utils, bootstrap) { | |||
|
10 | "use strict"; | |||
|
11 | ||||
|
12 | var MenuBar = function (selector, options) { | |||
|
13 | // Constructor | |||
|
14 | // | |||
|
15 | // A MenuBar Class to generate the menubar of IPython notebook | |||
|
16 | // | |||
|
17 | // Parameters: | |||
|
18 | // selector: string | |||
|
19 | // options: dictionary | |||
|
20 | // Dictionary of keyword arguments. | |||
|
21 | // codemirror: CodeMirror instance | |||
|
22 | // contents: ContentManager instance | |||
|
23 | // events: $(Events) instance | |||
|
24 | // base_url : string | |||
|
25 | // file_path : string | |||
|
26 | options = options || {}; | |||
|
27 | this.base_url = options.base_url || utils.get_body_data("baseUrl"); | |||
|
28 | this.selector = selector; | |||
|
29 | this.codemirror = options.codemirror; | |||
|
30 | this.contents = options.contents; | |||
|
31 | this.events = options.events; | |||
|
32 | this.file_path = options.file_path; | |||
|
33 | ||||
|
34 | if (this.selector !== undefined) { | |||
|
35 | this.element = $(selector); | |||
|
36 | this.bind_events(); | |||
|
37 | } | |||
|
38 | }; | |||
|
39 | ||||
|
40 | MenuBar.prototype.bind_events = function () { | |||
|
41 | // File | |||
|
42 | var that = this; | |||
|
43 | this.element.find('#save_file').click(function () { | |||
|
44 | var ix = that.file_path.lastIndexOf("/"); | |||
|
45 | var dir_path, basename; | |||
|
46 | if (ix === -1) { | |||
|
47 | dir_path = ''; | |||
|
48 | basename = that.file_path; | |||
|
49 | } else { | |||
|
50 | dir_path = that.file_path.substring(0, ix); | |||
|
51 | basename = that.file_path.substring(ix+1); | |||
|
52 | } | |||
|
53 | var model = { | |||
|
54 | path: dir_path, | |||
|
55 | name: basename, | |||
|
56 | type: 'file', | |||
|
57 | format: 'text', | |||
|
58 | content: that.codemirror.getValue(), | |||
|
59 | }; | |||
|
60 | console.log(model); | |||
|
61 | that.contents.save(dir_path, basename, model, { | |||
|
62 | success: function() { | |||
|
63 | that.events.trigger("save_succeeded.TextEditor"); | |||
|
64 | } | |||
|
65 | }); | |||
|
66 | }); | |||
|
67 | }; | |||
|
68 | ||||
|
69 | return {'MenuBar': MenuBar}; | |||
|
70 | }); |
@@ -1,60 +1,72 | |||||
1 | // Copyright (c) IPython Development Team. |
|
1 | // Copyright (c) IPython Development Team. | |
2 | // Distributed under the terms of the Modified BSD License. |
|
2 | // Distributed under the terms of the Modified BSD License. | |
3 |
|
3 | |||
4 | require([ |
|
4 | require([ | |
5 | 'jquery', |
|
5 | 'jquery', | |
6 | 'base/js/utils', |
|
6 | 'base/js/utils', | |
7 | 'base/js/page', |
|
7 | 'base/js/page', | |
|
8 | 'base/js/events', | |||
8 | 'contents', |
|
9 | 'contents', | |
9 | 'codemirror/lib/codemirror', |
|
10 | 'codemirror/lib/codemirror', | |
|
11 | 'texteditor/js/menubar', | |||
10 | 'codemirror/mode/meta', |
|
12 | 'codemirror/mode/meta', | |
11 | 'custom/custom', |
|
13 | 'custom/custom', | |
12 | ], function( |
|
14 | ], function( | |
13 |
$, |
|
15 | $, | |
14 | utils, |
|
16 | utils, | |
15 | page, |
|
17 | page, | |
|
18 | events, | |||
16 | contents, |
|
19 | contents, | |
17 | CodeMirror |
|
20 | CodeMirror, | |
|
21 | menubar | |||
18 | ){ |
|
22 | ){ | |
19 | page = new page.Page(); |
|
23 | page = new page.Page(); | |
20 |
|
24 | |||
21 | var base_url = utils.get_body_data('baseUrl'); |
|
25 | var base_url = utils.get_body_data('baseUrl'); | |
22 | contents = new contents.Contents({base_url: base_url}); |
|
26 | contents = new contents.Contents({base_url: base_url}); | |
23 |
|
27 | |||
24 | var file_path = utils.get_body_data('filePath'); |
|
28 | var file_path = utils.get_body_data('filePath'); | |
25 | var ix = file_path.lastIndexOf("/"); |
|
29 | var ix = file_path.lastIndexOf("/"); | |
26 | var dir_path, basename; |
|
30 | var dir_path, basename; | |
27 | if (ix == -1) { |
|
31 | if (ix == -1) { | |
28 | dir_path = ''; |
|
32 | dir_path = ''; | |
29 | basename = file_path; |
|
33 | basename = file_path; | |
30 | } else { |
|
34 | } else { | |
31 | dir_path = file_path.substring(0, ix); |
|
35 | dir_path = file_path.substring(0, ix); | |
32 | basename = file_path.substring(ix); |
|
36 | basename = file_path.substring(ix+1); | |
33 | } |
|
37 | } | |
34 | contents.load(dir_path, basename, { |
|
38 | contents.load(dir_path, basename, { | |
35 | success: function(model) { |
|
39 | success: function(model) { | |
36 | page.show(); |
|
40 | page.show(); | |
37 | if (model.type === "file" && model.format === "text") { |
|
41 | if (model.type === "file" && model.format === "text") { | |
38 | console.log(modeinfo); |
|
42 | console.log(modeinfo); | |
39 | var cm = CodeMirror($('#texteditor-container')[0], { |
|
43 | var cm = CodeMirror($('#texteditor-container')[0], { | |
40 | value: model.content, |
|
44 | value: model.content, | |
41 | }); |
|
45 | }); | |
42 |
|
46 | |||
|
47 | var menus = new menubar.MenuBar('#menubar', { | |||
|
48 | base_url: base_url, | |||
|
49 | codemirror: cm, | |||
|
50 | contents: contents, | |||
|
51 | events: events, | |||
|
52 | file_path: file_path | |||
|
53 | }); | |||
|
54 | ||||
43 | // Find and load the highlighting mode |
|
55 | // Find and load the highlighting mode | |
44 | var modeinfo = CodeMirror.findModeByMIME(model.mimetype); |
|
56 | var modeinfo = CodeMirror.findModeByMIME(model.mimetype); | |
45 | if (modeinfo) { |
|
57 | if (modeinfo) { | |
46 | utils.requireCodeMirrorMode(modeinfo.mode, function() { |
|
58 | utils.requireCodeMirrorMode(modeinfo.mode, function() { | |
47 | cm.setOption('mode', modeinfo.mode); |
|
59 | cm.setOption('mode', modeinfo.mode); | |
48 | }); |
|
60 | }); | |
49 | } |
|
61 | } | |
50 |
|
62 | |||
51 | // Attach to document for debugging |
|
63 | // Attach to document for debugging | |
52 | document.cm_instance = cm; |
|
64 | document.cm_instance = cm; | |
53 | } else { |
|
65 | } else { | |
54 | $('#texteditor-container').append( |
|
66 | $('#texteditor-container').append( | |
55 | $('<p/>').text(dir_path + " is not a text file") |
|
67 | $('<p/>').text(dir_path + " is not a text file") | |
56 | ); |
|
68 | ); | |
57 | } |
|
69 | } | |
58 | } |
|
70 | } | |
59 | }); |
|
71 | }); | |
60 | }); |
|
72 | }); |
@@ -1,29 +1,60 | |||||
1 | {% extends "page.html" %} |
|
1 | {% extends "page.html" %} | |
2 |
|
2 | |||
3 | {% block title %}{{page_title}}{% endblock %} |
|
3 | {% block title %}{{page_title}}{% endblock %} | |
4 |
|
4 | |||
5 | {% block stylesheet %} |
|
5 | {% block stylesheet %} | |
6 | <link rel="stylesheet" href="{{ static_url('components/codemirror/lib/codemirror.css') }}"> |
|
6 | <link rel="stylesheet" href="{{ static_url('components/codemirror/lib/codemirror.css') }}"> | |
7 |
|
7 | |||
8 | {{super()}} |
|
8 | {{super()}} | |
9 | {% endblock %} |
|
9 | {% endblock %} | |
10 |
|
10 | |||
11 | {% block params %} |
|
11 | {% block params %} | |
12 |
|
12 | |||
13 | data-base-url="{{base_url}}" |
|
13 | data-base-url="{{base_url}}" | |
14 | data-file-path="{{file_path}}" |
|
14 | data-file-path="{{file_path}}" | |
15 |
|
15 | |||
16 | {% endblock %} |
|
16 | {% endblock %} | |
17 |
|
17 | |||
18 | {% block site %} |
|
18 | {% block site %} | |
19 |
|
19 | |||
|
20 | <div id="menubar-container" class="container"> | |||
|
21 | <div id="menubar"> | |||
|
22 | <div id="menus" class="navbar navbar-default" role="navigation"> | |||
|
23 | <div class="container-fluid"> | |||
|
24 | <button type="button" class="btn btn-default navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse"> | |||
|
25 | <i class="fa fa-bars"></i> | |||
|
26 | <span class="navbar-text">Menu</span> | |||
|
27 | </button> | |||
|
28 | <ul class="nav navbar-nav navbar-right"> | |||
|
29 | <li id="kernel_indicator"> | |||
|
30 | <i id="kernel_indicator_icon"></i> | |||
|
31 | </li> | |||
|
32 | <li id="modal_indicator"> | |||
|
33 | <i id="modal_indicator_icon"></i> | |||
|
34 | </li> | |||
|
35 | <li id="notification_area"></li> | |||
|
36 | </ul> | |||
|
37 | <div class="navbar-collapse collapse"> | |||
|
38 | <ul class="nav navbar-nav"> | |||
|
39 | <li class="dropdown"><a href="#" class="dropdown-toggle" data-toggle="dropdown">File</a> | |||
|
40 | <ul id="file_menu" class="dropdown-menu"> | |||
|
41 | <li id="save_file"><a href="#">Save</a></li> | |||
|
42 | </ul> | |||
|
43 | </li> | |||
|
44 | </ul> | |||
|
45 | </div> | |||
|
46 | </div> | |||
|
47 | </div> | |||
|
48 | </div> | |||
|
49 | </div> | |||
|
50 | ||||
20 | <div id="texteditor-container"></div> |
|
51 | <div id="texteditor-container"></div> | |
21 |
|
52 | |||
22 | {% endblock %} |
|
53 | {% endblock %} | |
23 |
|
54 | |||
24 | {% block script %} |
|
55 | {% block script %} | |
25 |
|
56 | |||
26 | {{super()}} |
|
57 | {{super()}} | |
27 |
|
58 | |||
28 | <script src="{{ static_url("texteditor/js/main.js") }}" type="text/javascript" charset="utf-8"></script> |
|
59 | <script src="{{ static_url("texteditor/js/main.js") }}" type="text/javascript" charset="utf-8"></script> | |
29 | {% endblock %} |
|
60 | {% endblock %} |
General Comments 0
You need to be logged in to leave comments.
Login now