|
|
|
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]'; |
|
|
|
|
|
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); |
|
}; |
|
|
|
|
|
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; |
|
|
|
|
|
codecell.CodeCell.options_default.cm_config.rulers = rulers; |
|
|
|
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 () { |
|
|
|
|
|
var conf_sect; |
|
if (Jupyter.notebook) { |
|
|
|
conf_sect = Jupyter.notebook.config; |
|
} |
|
else if (Jupyter.editor) { |
|
|
|
conf_sect = Jupyter.editor.config; |
|
} |
|
else { |
|
|
|
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; |
|
}); |
|
|