373 lines
8.5 KiB
JavaScript
373 lines
8.5 KiB
JavaScript
CKEDITOR.dialog.add( 'syntaxhighlightDialog', function( editor ) {
|
|
var a=function(f) {
|
|
f=f.replace(/<br>/g,"\n");
|
|
f=f.replace(/&/g,"&");
|
|
f=f.replace(/</g,"<");
|
|
f=f.replace(/>/g,">");
|
|
f=f.replace(/"/g,'"');
|
|
return f
|
|
};
|
|
var e=function(f) {
|
|
var f=new Object();
|
|
f.hideGutter=false;
|
|
f.hideControls=false;
|
|
f.collapse=false;
|
|
f.showColumns=false;
|
|
f.noWrap=false;
|
|
f.firstLineChecked=false;
|
|
f.firstLine=0;
|
|
f.highlightChecked=false;
|
|
f.highlight=null;
|
|
f.lang=null;
|
|
f.code='';
|
|
return f
|
|
};
|
|
var b=function(i) {
|
|
var h=e();
|
|
if(i) {
|
|
if(i.indexOf('brush')>-1) {
|
|
var g=/brush:[ ]{0,1}(\w*)/.exec(i);
|
|
if(g!=null&&g.length>0) {
|
|
h.lang=g[1].replace(/^\s+|\s+$/g,'')
|
|
}
|
|
}
|
|
if(i.indexOf('gutter')>-1) {
|
|
h.hideGutter=true
|
|
}
|
|
if(i.indexOf('toolbar')>-1) {
|
|
h.hideControls=true
|
|
}
|
|
if(i.indexOf('collapse')>-1) {
|
|
h.collapse=true
|
|
}
|
|
if(i.indexOf('first-line')>-1) {
|
|
var g=/first-line:[ ]{0,1}([0-9]{1,4})/.exec(i);
|
|
if(g!=null&&g.length>0&&g[1]>1) {
|
|
h.firstLineChecked=true;
|
|
h.firstLine=g[1]
|
|
}
|
|
}
|
|
if(i.indexOf('highlight')>-1) {
|
|
if(i.match(/highlight:[ ]{0,1}\[[0-9]+(,[0-9]+)*\]/)) {
|
|
var f=/highlight:[ ]{0,1}\[(.*)\]/.exec(i);
|
|
if(f!=null&&f.length>0) {
|
|
h.highlightChecked=true;
|
|
h.highlight=f[1]
|
|
}
|
|
}
|
|
}
|
|
if(i.indexOf('ruler')>-1) {
|
|
h.showColumns=true
|
|
}
|
|
if(i.indexOf('wrap-lines')>-1) {
|
|
h.noWrap=true
|
|
}
|
|
}
|
|
return h
|
|
};
|
|
var d=function(g) {
|
|
var f='brush:'+g.lang+';';
|
|
if(g.hideGutter) {
|
|
f+='gutter:false;'
|
|
}
|
|
if(g.hideControls) {
|
|
f+='toolbar:false;'
|
|
}
|
|
if(g.collapse) {
|
|
f+='collapse:true;'
|
|
}
|
|
if(g.showColumns) {
|
|
f+='ruler:true;'
|
|
}
|
|
if(g.noWrap) {
|
|
f+='wrap-lines:false;'
|
|
}
|
|
if(g.firstLineChecked&&g.firstLine>1) {
|
|
f+='first-line:'+g.firstLine+';'
|
|
}
|
|
if(g.highlightChecked&&g.highlight!='') {
|
|
f+='highlight: ['+g.highlight.replace(/\s/gi,'')+'];'
|
|
}
|
|
return f
|
|
};
|
|
return {
|
|
title : editor.lang.syntaxhighlight.title,
|
|
minWidth : 500,
|
|
minHeight : 400,
|
|
contents : [
|
|
{
|
|
id : 'source',
|
|
label : editor.lang.syntaxhighlight.sourceTab,
|
|
accessKey : 'S',
|
|
elements : [
|
|
{
|
|
type : 'vbox',
|
|
children : [
|
|
{
|
|
id : 'cmbLang',
|
|
type : 'select',
|
|
labelLayout : 'horizontal',
|
|
label : editor.lang.syntaxhighlight.langLbl,
|
|
'default' : 'java',
|
|
widths : ['25%','75%'],
|
|
items : [
|
|
//['Bash (Shell)','bash'],
|
|
//['C#','csharp'],
|
|
//['C++','cpp'],
|
|
['CSS','css'],
|
|
//['Delphi','delphi'],
|
|
['Diff','diff'],
|
|
//['Groovy','groovy'],
|
|
['Javascript','jscript'],
|
|
//['Java','java'],
|
|
//['Java FX','javafx'],
|
|
//['Perl','perl'],
|
|
['PHP','php'],
|
|
['Plain (Text)','plain'],
|
|
//['Python','python'],
|
|
//['Ruby','ruby'],
|
|
//['Scala','scala'],
|
|
['SQL','sql'],
|
|
//['VB','vb'],
|
|
['XML/XHTML','xml']
|
|
],
|
|
setup : function(f) {
|
|
if(f.lang) {
|
|
this.setValue(f.lang)
|
|
}
|
|
},
|
|
commit : function(f) {
|
|
f.lang=this.getValue()
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
type : 'textarea',
|
|
id : 'hl_code',
|
|
rows : 22,
|
|
style : 'width:100%',
|
|
validate: CKEDITOR.dialog.validate.notEmpty( editor.lang.syntaxhighlight.sourceTextareaEmptyError ),
|
|
setup : function(f) {
|
|
if(f.code) {
|
|
this.setValue(f.code)
|
|
}
|
|
},
|
|
commit : function(f) {
|
|
f.code=this.getValue()
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
id : 'advanced',
|
|
label : editor.lang.syntaxhighlight.advancedTab,
|
|
accessKey : 'A',
|
|
elements : [
|
|
{
|
|
type : 'vbox',
|
|
children : [
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.hideGutter+'</strong>'
|
|
},
|
|
{
|
|
type : 'checkbox',
|
|
id : 'hide_gutter',
|
|
label : editor.lang.syntaxhighlight.hideGutterLbl,
|
|
setup : function(f) {
|
|
this.setValue(f.hideGutter)
|
|
},
|
|
commit : function(f) {
|
|
f.hideGutter=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.hideControls+'</strong>'
|
|
},
|
|
{
|
|
type : 'checkbox',
|
|
id : 'hide_controls',
|
|
label : editor.lang.syntaxhighlight.hideControlsLbl,
|
|
setup : function(f) {
|
|
this.setValue(f.hideControls)
|
|
},
|
|
commit : function(f) {
|
|
f.hideControls=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.collapse+'</strong>'
|
|
},
|
|
{
|
|
type : 'checkbox',
|
|
id : 'collapse',
|
|
label : editor.lang.syntaxhighlight.collapseLbl,
|
|
setup : function(f) {
|
|
this.setValue(f.collapse)
|
|
},
|
|
commit : function(f) {
|
|
f.collapse=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.showColumns+'</strong>'
|
|
},
|
|
{
|
|
type : 'checkbox',
|
|
id : 'show_columns',
|
|
label : editor.lang.syntaxhighlight.showColumnsLbl,
|
|
setup : function(f) {
|
|
this.setValue(f.showColumns)
|
|
},
|
|
commit : function(f) {
|
|
f.showColumns=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.lineWrap+'</strong>'
|
|
},
|
|
{
|
|
type : 'checkbox',
|
|
id : 'line_wrap',
|
|
label : editor.lang.syntaxhighlight.lineWrapLbl,
|
|
setup : function(f) {
|
|
this.setValue(f.noWrap)
|
|
},
|
|
commit : function(f) {
|
|
f.noWrap=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.lineCount+'</strong>'
|
|
},
|
|
{
|
|
type : 'hbox',
|
|
widths : ['5%','95%'],
|
|
children : [
|
|
{
|
|
type : 'checkbox',
|
|
id : 'lc_toggle',
|
|
label : '',
|
|
setup : function(f) {
|
|
this.setValue(f.firstLineChecked)
|
|
},
|
|
commit : function(f) {
|
|
f.firstLineChecked=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'text',
|
|
id : 'default_lc',
|
|
style : 'width:15%;',
|
|
label : '',
|
|
setup : function(f) {
|
|
if(f.firstLine>1) {
|
|
this.setValue(f.firstLine)
|
|
}
|
|
},
|
|
commit : function(f) {
|
|
if(this.getValue()&&this.getValue()!='') {
|
|
f.firstLine=this.getValue()
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<strong>'+editor.lang.syntaxhighlight.highlight+'</strong>'
|
|
},
|
|
{
|
|
type : 'hbox',
|
|
widths : ['5%','95%'],
|
|
children : [
|
|
{
|
|
type : 'checkbox',
|
|
id : 'hl_toggle',
|
|
label : '',
|
|
setup : function(f) {
|
|
this.setValue(f.highlightChecked)
|
|
},
|
|
commit : function(f) {
|
|
f.highlightChecked=this.getValue()
|
|
}
|
|
},
|
|
{
|
|
type : 'text',
|
|
id : 'default_hl',
|
|
style : 'width:40%;',
|
|
label : '',
|
|
setup : function(f) {
|
|
if(f.highlight!=null) {
|
|
this.setValue(f.highlight)
|
|
}
|
|
},
|
|
commit : function(f) {
|
|
if(this.getValue()&&this.getValue()!='') {
|
|
f.highlight=this.getValue()
|
|
}
|
|
}
|
|
}
|
|
]
|
|
},
|
|
{
|
|
type : 'hbox',
|
|
widths : ['5%','95%'],
|
|
children : [
|
|
{
|
|
type : 'html',
|
|
html : ''
|
|
},
|
|
{
|
|
type : 'html',
|
|
html : '<i>'+editor.lang.syntaxhighlight.highlightLbl+'</i>'
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
]
|
|
}
|
|
],
|
|
onShow : function() {
|
|
var i=this.getParentEditor();
|
|
var h=i.getSelection();
|
|
var g=h.getStartElement();
|
|
var k=g&&g.getAscendant('pre',true);
|
|
var j='';
|
|
var f=null;
|
|
if(k) {
|
|
code=a(k.getHtml());
|
|
f=b(k.getAttribute('class'));
|
|
f.code=code
|
|
} else {
|
|
f=e()
|
|
}
|
|
this.setupContent(f)
|
|
},
|
|
onOk : function() {
|
|
var h=this.getParentEditor();
|
|
var g=h.getSelection();
|
|
var f=g.getStartElement();
|
|
var k=f&&f.getAscendant('pre',true);
|
|
var i=e();
|
|
this.commitContent(i);
|
|
var j=d(i);
|
|
if(k) {
|
|
k.setAttribute('class',j);
|
|
k.setText(i.code)
|
|
} else {
|
|
var l=new CKEDITOR.dom.element('pre');
|
|
l.setAttribute('class',j);
|
|
l.setText(i.code);
|
|
h.insertElement(l)
|
|
}
|
|
}
|
|
}
|
|
}) |