-
Notifications
You must be signed in to change notification settings - Fork 1
/
main.js
136 lines (118 loc) · 4.93 KB
/
main.js
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright (c) Jupyter-Contrib Team.
// Distributed under the terms of the Modified BSD License.
// Author: Jean-François Bercher
define(function(require, exports, module) {
'use strict';
var $ = require('jquery');
var Jupyter = require('base/js/namespace');
var keyboard = require('base/js/keyboard');
var utils = require('base/js/utils');
var configmod = require('services/config');
var Cell = require('notebook/js/cell').Cell;
var CodeCell = require('notebook/js/codecell').CodeCell;
var nbt = require('nbextensions/nbTranslate/nbTranslate');
var mutils = require('nbextensions/nbTranslate/mutils');
var sourceLang;
var targetLang;
var displayLangs;
var useGoogleTranslate;
var add_edit_shortcuts = {};
var log_prefix = '[' + module.id + '] ';
// default config (updated on nbextension load)
var conf = {
hotkey: 'alt-t',
sourceLang: 'en',
targetLang: 'fr',
displayLangs: ['*'],
langInMainMenu: true,
useGoogleTranslate: true
}
function initialize(conf) {
// create config object to load parameters
var base_url = utils.get_body_data("baseUrl");
var config = new configmod.ConfigSection('notebook', { base_url: base_url });
config.load();
config.loaded.then(function config_loaded_callback() {
// config may be specified at system level or at document level.
// first, update defaults with config loaded from server
conf = $.extend(false, {}, conf, config.data.nbTranslate)
// then update cfg with any found in current notebook metadata
// and save in nb metadata (then can be modified per document)
conf = Jupyter.notebook.metadata.nbTranslate = $.extend(false, {}, conf,
Jupyter.notebook.metadata.nbTranslate);
//conf.displayLangs = Jupyter.notebook.metadata.nbTranslate.displayLangs = $.makeArray($.extend(true, {}, conf.displayLangs, Jupyter.notebook.metadata.nbTranslate.displayLangs));
// other initializations
sourceLang = conf.sourceLang;
targetLang = conf.targetLang;
displayLangs = conf.displayLangs;
useGoogleTranslate = conf.useGoogleTranslate;
// then
translateHotkey(conf);
showToolbar();
main_function(conf);
buildTranslateToolbar();
})
return conf
}
function showToolbar() {
if ($('#showToolbar').length == 0) {
Jupyter.toolbar.add_buttons_group([{
'label': 'Translate current cell',
'icon': 'fa-language',
'callback': translateCurrentCell,
'id': 'showToolbar'
},
{
'label': 'nbTranslate: Configuration (toggle toolbar)',
'icon': 'fa-wrench',
'callback': translateToolbarToggle //translateToolbar
}]);
}
}
function translateHotkey(conf) {
add_edit_shortcuts[conf['hotkey']] = {
help: "Translate current cell",
help_index: 'yf',
handler: translateCurrentCell
};
Jupyter.keyboard_manager.edit_shortcuts.add_shortcuts(add_edit_shortcuts);
Jupyter.keyboard_manager.command_shortcuts.add_shortcuts(add_edit_shortcuts);
}
function main_function(conf) {
//alert(log_prefix+" main_function output")
show_mdcells(conf.displayLangs);
// add the targetLang to the list of langs, if not already present
if (listOfLangsInNotebook.indexOf(conf.targetLang) == -1) {
listOfLangsInNotebook.push(targetLang);
}
// add the sourceLang to the list of langs, if not already present
if (listOfLangsInNotebook.indexOf(conf.sourceLang) == -1) {
listOfLangsInNotebook.push(sourceLang);
}
// Display only the langs present in notebook
if (conf.displayLangs.indexOf('*') == -1) {
conf.displayLangs = $.makeArray($(listOfLangsInNotebook).filter(conf.displayLangs));
}
else {
conf.displayLangs = ['*'];
}
// console.log(log_prefix, "Displaying langs ", conf.displayLangs);
}
function load_notebook_extension() {
// Wait for the notebook to be fully loaded
if (Jupyter.notebook._fully_loaded) {
// this tests if the notebook is fully loaded
console.log(log_prefix + "Notebook fully loaded -- nbTranslate initialized ")
conf = initialize(conf);
} else {
console.log(log_prefix + "Waiting for notebook availability")
$([Jupyter.events]).on("notebook_loaded.Notebook", function() {
console.log(log_prefix + "nbTranslate initialized (via notebook_loaded)")
conf = initialize(conf);
})
}
}
return {
load_ipython_extension: load_notebook_extension
};
});