You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
125 lines
3.7 KiB
125 lines
3.7 KiB
// Add rulers to codecells
|
|
define([
|
|
'base/js/namespace',
|
|
'base/js/events',
|
|
'services/config',
|
|
'notebook/js/codecell',
|
|
'codemirror/lib/codemirror',
|
|
'codemirror/addon/display/rulers'
|
|
], function (Jupyter, events, configmod, codecell, codemirror) {
|
|
"use strict";
|
|
|
|
var log_prefix = '[ruler]';
|
|
|
|
// define default config parameter values
|
|
var params = {
|
|
ruler_column: [78],
|
|
ruler_color: ["#ff0000"],
|
|
ruler_linestyle: ["dashed"],
|
|
ruler_do_css_patch: false
|
|
};
|
|
|
|
|
|
var rulers = [];
|
|
|
|
var isNumber = function (n) {
|
|
return !isNaN(parseFloat(n)) && isFinite(n);
|
|
};
|
|
|
|
// updates default params with any specified in the provided config data
|
|
var update_params = function (config_data) {
|
|
for (var key in params) {
|
|
if (config_data.hasOwnProperty(key)) {
|
|
params[key] = config_data[key];
|
|
}
|
|
}
|
|
};
|
|
|
|
var on_config_loaded = function () {
|
|
|
|
if (Jupyter.notebook !== undefined) {
|
|
var i, config = Jupyter.notebook.config;
|
|
} else {
|
|
var i, config = Jupyter.editor.config;
|
|
}
|
|
|
|
if (config.data.hasOwnProperty('ruler_color') && config.data.ruler_color.length > 0) {
|
|
params.ruler_color = config.data.ruler_color;
|
|
}
|
|
|
|
if (config.data.hasOwnProperty('ruler_column')) {
|
|
var new_columns = [];
|
|
for (i in config.data.ruler_column) {
|
|
if (isNumber(config.data.ruler_column[i])) {
|
|
new_columns.push(config.data.ruler_column[i]);
|
|
}
|
|
}
|
|
if (new_columns.length > 0) {
|
|
params.ruler_column = new_columns;
|
|
}
|
|
}
|
|
|
|
if (config.data.hasOwnProperty('ruler_linestyle') && config.data.ruler_linestyle.length > 0) {
|
|
params.ruler_linestyle = config.data.ruler_linestyle;
|
|
}
|
|
|
|
for (i in params.ruler_column) {
|
|
rulers.push({
|
|
color: params.ruler_color[i % params.ruler_color.length],
|
|
column: params.ruler_column[i],
|
|
lineStyle: params.ruler_linestyle[i % params.ruler_linestyle.length]
|
|
});
|
|
}
|
|
console.debug(log_prefix, 'ruler specs:', rulers);
|
|
|
|
if (Jupyter.notebook !== undefined) {
|
|
var i, config = Jupyter.notebook.config;
|
|
|
|
// Change default for new cells
|
|
codecell.CodeCell.options_default.cm_config.rulers = rulers;
|
|
// Apply to any already-existing cells
|
|
var cells = Jupyter.notebook.get_cells().forEach(function (cell) {
|
|
if (cell instanceof codecell.CodeCell) {
|
|
cell.code_mirror.setOption('rulers', rulers);
|
|
}
|
|
});
|
|
|
|
}
|
|
else {
|
|
Jupyter.editor.codemirror.setOption('rulers', rulers);
|
|
}
|
|
};
|
|
|
|
var load_extension = function () {
|
|
|
|
// first, check which view we're in, in order to decide whether to load
|
|
var conf_sect;
|
|
if (Jupyter.notebook) {
|
|
// we're in notebook view
|
|
conf_sect = Jupyter.notebook.config;
|
|
}
|
|
else if (Jupyter.editor) {
|
|
// we're in file-editor view
|
|
conf_sect = Jupyter.editor.config;
|
|
}
|
|
else {
|
|
// we're some other view like dashboard, terminal, etc, so bail now
|
|
return;
|
|
}
|
|
|
|
conf_sect.loaded
|
|
.then(function () {
|
|
update_params(conf_sect.data);
|
|
})
|
|
.then(on_config_loaded)
|
|
.catch(function on_error(reason) {
|
|
console.warn(log_prefix, 'error:', reason);
|
|
});
|
|
};
|
|
|
|
var extension = {
|
|
load_ipython_extension: load_extension
|
|
};
|
|
return extension;
|
|
});
|