| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173 |
- setTimeout(function()
- {
- $.getLib(config.webRoot + 'js/monaco-editor/min/vs/loader.js', {root: false}, function()
- {
- createMonaco(id, action, options, diffContent, onMouseDown, onMouseMove, vsPath, clientLang);
- resize(id);
- });
- }, 200);
- function createMonaco(id, action, options, diffContent, onMouseDown, onMouseMove, vsPath, clientLang)
- {
- if(!options.minimap) options.minimap = {enabled: false};
- require.config({
- paths: {vs: vsPath},
- 'vs/nls': {
- availableLanguages: {
- '*': clientLang
- }
- }
- });
- let decorations = [];
- let programmaticSelectionRange = null;
- require(['vs/editor/editor.main'], function ()
- {
- if(!lineMap && action == 'diff' && diffContent && diffContent.line) lineMap = diffContent.line.new;
- if(lineMap) options.lineNumbers = (line) => {return lineMap[line - 1];};
- $.extend(options, {
- // 关键配置项
- automaticLayout: true, // 自动调整布局
- scrollBeyondLastLine: false, // 禁用底部滚动区域
- minimap: {enabled: false}, // 可选:禁用缩略图以节省空间
- // 编辑器尺寸配置
- fontSize: 14,
- lineHeight: 24,
- lineNumbersMinChars: 2,
- glyphMargin: true, // 启用装饰器边距
- // 内边距设置
- padding: {top: 8, bottom: 8}
- });
- if(action == 'diff')
- {
- options.renderSideBySide = $.cookie.get('renderSideBySide') == 'true';
- modifiedEditor = monaco.editor.createDiffEditor(document.getElementById(id), options);
- window.modifiedEditor = modifiedEditor;
- modifiedEditor.setModel({
- original: monaco.editor.createModel(diffContent.code.old, options.lang),
- modified: monaco.editor.createModel(diffContent.code.new, options.lang),
- });
- editor = modifiedEditor.getModifiedEditor();
- const getOriginalEditor = modifiedEditor.getOriginalEditor();
- getOriginalEditor.updateOptions({
- lineNumbers: function(number)
- {
- var oldlc = diffContent.line.old;
- return oldlc[number - 1];
- }
- });
- if(onMouseDown) getOriginalEditor.onMouseDown(function(obj){eval(onMouseDown + '(obj)')})
- if(onMouseMove) getOriginalEditor.onMouseMove(function(obj){eval(onMouseMove + '(obj)')})
- }
- else
- {
- editor = monaco.editor.create(document.getElementById(id), options);
- }
- if(onMouseDown) editor.onMouseDown(function(obj){eval(onMouseDown + '(obj)')})
- if(onMouseMove) editor.onMouseMove(function(obj){eval(onMouseMove + '(obj)')})
- let range = null;
- if(selectedLines)
- {
- const lines = selectedLines.split(',');
- let startLine = parseInt(lines[0]);
- let endLine = parseInt(lines[1] || startLine + 1);
- let startCol = 1;
- let endCol = 0;
- if(lines.length == 4)
- {
- startCol = parseInt(lines[2]);
- endCol = parseInt(lines[3]);
- }
- if(endCol == 0) endLine += 1;
- if(lineMap)
- {
- lineMap.forEach((line, index) =>
- {
- if(line == startLine) startLine = index + 1;
- if(line == endLine) endLine = index + 1;
- });
- }
- range = new monaco.Range(startLine, startCol, endLine, endCol);
- programmaticSelectionRange = range;
- editor.setSelection(range);
- editor.revealRangeInCenter(range);
- updateDecorations();
- }
- editor.onMouseDown(function(e)
- {
- if(range)
- {
- programmaticSelectionRange = range;
- updateDecorations();
- }
- });
- function updateDecorations()
- {
- editor.deltaDecorations(decorations, []);
- decorations = [];
- if(programmaticSelectionRange)
- {
- decorations.push({
- range: programmaticSelectionRange,
- options: {
- className: selectedClass,
- isWholeLine: false
- }
- });
- }
- decorations = editor.deltaDecorations([], decorations);
- }
- editor.onDidChangeCursorSelection(function(e)
- {
- if(!programmaticSelectionRange) return; // 只有当没有程序化选择时才更新装饰器
- if(e.selection.startLineNumber == programmaticSelectionRange.startLineNumber || e.selection.endLineNumber == programmaticSelectionRange.endLineNumber)
- {
- programmaticSelectionRange = null;
- updateDecorations();
- }
- });
- });
- }
- function resize(id)
- {
- var $ = window.$ == undefined ? parent.$ : window.$;
- var windowHeight = $(window).height();
- var headerHeight = parseInt($('#header').height());
- var mainNavbar = parseInt($('#mainNavbar').height());
- var mainMenuHeight = parseInt($('#mainMenu').css('padding-top')) + parseInt($('#mainMenu').css('padding-bottom'));
- var appTabsHeight = parseInt($('#appTabs').height());
- var appsBarHeight = parseInt($('#appsBar').height());
- var tabsHeight = parseInt($('#fileTabs .tabs-navbar').height());
- headerHeight = headerHeight ? headerHeight : 0;
- appsBarHeight = appsBarHeight ? appsBarHeight : 0;
- tabsHeight = tabsHeight ? tabsHeight : 0;
- appTabsHeight = appTabsHeight ? appTabsHeight : 0;
- mainMenuHeight = mainMenuHeight ? mainMenuHeight : 0;
- mainNavbar = mainNavbar ? mainNavbar : 0;
- var codeHeight = windowHeight - headerHeight - appsBarHeight - tabsHeight - appTabsHeight - mainMenuHeight - mainNavbar;
- if(codeHeight > 0) $.cookie.set(id + 'Height', codeHeight);
- $('#' + id).css('height', $.cookie.get(id + 'Height'));
- }
|