Typesetter-Original-gtbu/addons/--Syntax_Highlighting/syntaxhighlight/dialogs/syntaxhighlight.js

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(/&amp;/g,"&");
f=f.replace(/&lt;/g,"<");
f=f.replace(/&gt;/g,">");
f=f.replace(/&quot;/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)
}
}
}
})