Newer
Older
* @module package/quiqqer/ckeditor4/bin/Editor
* @require require
* @require controls/editors/Editor
* @require Locale
* @require Ajax
* @require qui/utils/Math
* @require css!package/quiqqer/ckeditor4/bin/Editor.css
define('package/quiqqer/ckeditor4/bin/Editor', [
'Ajax',
'qui/utils/Math',
'css!package/quiqqer/ckeditor4/bin/Editor.css'
], function(require, Editor, Locale, Ajax, QUIMath, QUIElements)
{
"use strict";
return new Class({
Extends : Editor,
Type : 'package/quiqqer/ckeditor4/bin/Editor',
'$onDestroy',
'$onDraw',
'$onSetContent',
'$onGetContent',
],
initialize : function(Manager, options)
{
this.parent( Manager, options );
this.addEvents({
onDestroy : this.$onDestroy,
onDraw : this.$onDraw,
onSetContent : this.$onSetContent,
onGetContent : this.$onGetContent,
onDrop : this.$onDrop,
onAddCSS : this.$onAddCSS
});
},
/**
* Load the CKEditor Instance into an Textarea or DOMNode Element
*
* @param {HTMLElement} Container
* @param {Object} Editor - controls/editors/Editor
if ( typeof window.CKEDITOR === 'undefined' ) {
if ( !Container.getElement( 'textarea' ) )
{
Instance = new Element('textarea', {
id : this.getId(),
styles : {
height : size.y,
width : size.x - 20
}
}).inject( Container );
if ( Instance.nodeName != 'TEXTAREA' ) {
Instance = Instance.getElement( 'textarea' );
}
var instance = Instance.get( 'id' );
if ( window.CKEDITOR.instances[ instance ] ) {
window.CKEDITOR.instances[ instance ].destroy( true );
}
Editor.setAttribute( 'instancename', instance );
// http://docs.ckeditor.com/#!/guide/dev_howtos_dialog_windows
window.CKEDITOR.on( 'dialogDefinition', function( ev )
{
{
// parse the buttons for the ckeditor
var b, g, i, len, blen, glen, group, items,
buttonEntry, lineEntry, groupEntry;
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
toolbar = [];
for ( i = 0, len = lines.length; i < len; i++ )
{
items = [];
lineEntry = lines[ i ];
// groups
for ( g = 0, glen = lineEntry.length; g < glen; g++ )
{
group = [];
groupEntry = lineEntry[ g ];
// buttons
for ( b = 0, blen = groupEntry.length; b < blen; b++ )
{
buttonEntry = groupEntry[ b ];
if ( buttonEntry.type == 'seperator' )
{
group.push( '-' );
continue;
}
group.push( buttonEntry.button );
}
toolbar.push( group );
}
toolbar.push( '/' );
}
var height = Instance.getSize().y - 140,
width = Instance.getSize().x + 20;
if ( self.getAttribute( 'width' ) ) {
width = self.getAttribute( 'width' );
}
if ( self.getAttribute( 'height' ) ) {
height = self.getAttribute( 'height' ) - 140;
}
var zIndex = QUIElements.getComputedZIndex( Container );
language : Locale.getCurrent(),
baseHref : URL_DIR,
basePath : URL_DIR,
toolbar : toolbar,
allowedContent : true,
extraAllowedContent : 'div(*)[*]{*}, iframe(*)[*]{*}',
contentsCss : Object.keys( self.$cssFiles ),
bodyClass : self.getAttribute( 'bodyClass' ),
// plugins : CKEDITOR_NEXGAM_PLUGINS,
// templates_files : [URL_OPT_DIR +'base/bin/pcsgEditorPlugins/templates.php'],
});
},
/**
* Editor onDestroy Event
*
*/
$onDestroy : function(Editor)
{
var Instance = Editor.getInstance();
if ( window.CKEDITOR.instances[ Instance.name ] )
{
try
{
window.CKEDITOR.instances[ Instance.name ].destroy( true );
} catch ( e ) {
}
window.CKEDITOR.instances[ Instance.name ] = null;
delete window.CKEDITOR.instances[ Instance.name ];
window.CKEDITOR.removeListener( 'instanceReady', this.$onInstanceReadyListener );
}
},
/**
* Editor onDraw Event
* if the editor is to be drawn
*
* @param {HTMLElement} Container
* @param {Object} Editor - controls/editors/Editor
require([ URL_OPT_DIR +'bin/package-ckeditor4/ckeditor.js' ], function()
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
/*
CKEDITOR.editorConfig = function( config ) {
config.language = 'fr';
config.uiColor = '#AADC6E';
};
*/
// CKEditor aufbauen
// CKEDITOR_BASEPATH = URL_DIR;
/*
CKEDITOR_NEXGAM_TOOLBAR = [
{ name: 'clipboard', items : [ 'Source', ,'Maximize', '-','pcsg_short', 'Templates','-', 'Paste','PasteText','PasteFromWord','-','Undo','Redo' ] },
{ name: 'basicstyles', items : [ 'Bold','Italic', 'Underline', 'Strike','-','Subscript','Superscript','-','RemoveFormat' ] },
{ name: 'paragraph', items : [ 'JustifyLeft','JustifyCenter','JustifyRight','JustifyBlock','-','NumberedList','BulletedList' ] },
{ name: 'pcsg', items : [ 'pcsg_image','-', 'pcsg_link', 'pcsg_unlink' ] },
{ name: 'blocks', items : [ 'Format', 'pcsg_youtube' ] }
];
CKEDITOR_NEXGAM_PLUGINS = '' +
'basicstyles,blockquote,button,clipboard,contextmenu,div,elementspath,enterkey,entities,find,' +
'font,format,indent,justify,keystrokes,list,liststyle,maximize,pastefromword,' +
'pastetext,removeformat,showblocks,showborders,sourcearea,stylescombo,' +
'table,tabletools,specialchar,tab,templates,toolbar,undo,wysiwygarea,wsc,pcsg_image,pcsg_link,pcsg_short,pcsg_youtube';
CKEDITOR_NEXGAM_CSS = [
URL_USR_DIR +"bin/nexgam3/css/reset.css",
URL_USR_DIR +"bin/nexgam3/css/style.css",
URL_USR_DIR +"bin/nexgam3/css/wysiwyg.css",
URL_USR_DIR +"bin/nexgam3/css/images.css",
URL_USR_DIR +"bin/nexgam3/css/review.css"
];
CKEDITOR_NEXGAM_BODY_CLASS = 'content left content-inner-container wysiwyg';
*/
window.CKEDITOR.on('instanceReady', self.$onInstanceReadyListener );
Editor.loadInstance( Container, Editor );
});
},
/**
* event : instance ready
* @param instance
*/
$onInstanceReadyListener : function(instance)
{
if ( typeof instance.editor === 'undefined' ||
typeof instance.editor.name === 'undefined' ||
instance.editor.name !== this.getAttribute( 'instancename' ) )
{
return;
}
this.setInstance( instance.editor );
this.fireEvent( 'loaded', [ this, instance.editor ] );
instance.editor.focus();
},
/**
* Editor onSetContent Event
*
* @param {String} content
*/
$onSetContent : function(content, Editor)
{
if ( Editor.getInstance() ) {
Editor.getInstance().setData( content );
}
},
/**
* Editor onGetContent Event
*
*/
$onGetContent : function(Editor)
{
if ( Editor.getInstance() ) {
Editor.setAttribute( 'content', Editor.getInstance().getData() );
}
},
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
/**
* Set the focus to the editor
*/
focus : function()
{
if ( this.getInstance() ) {
this.getInstance().focus();
}
},
/**
* Switch to source mode
*/
switchToSource : function()
{
if ( this.getInstance() ) {
this.getInstance().setMode( 'source' );
}
},
/**
* Switch to wysiwyg editor
*/
switchToWYSIWYG : function()
{
if ( this.getInstance() ) {
this.getInstance().setMode( 'wysiwyg' );
}
},
/**
* Hide the toolbar
*/
hideToolbar : function()
{
var Toolbar = this.getElm().getElement( '.cke_top' );
if ( Toolbar ) {
Toolbar.setStyle( 'display', 'none' );
}
},
/**
* show the toolbar
*/
showToolbar : function()
{
var Toolbar = this.getElm().getElement( '.cke_top' );
if ( Toolbar ) {
Toolbar.setStyle( 'display', null );
}
},
/**
* Set the height of the instance
*
*/
setHeight : function(height)
{
if ( this.getInstance() ) {
this.getInstance().resize( false, height );
}
this.setAttribute( 'height', height );
},
/**
* Set the height of the instance
*
* @param {Number} width
*/
setWidth : function(width)
{
if ( this.getInstance() ) {
this.getInstance().resize( width, false );
}
this.setAttribute( 'width', width );
/**
* event : on add css
*
* @param {String} file - path to the css file
*/
$onAddCSS : function(file, Editor)
{

Henning Leutz
committed
var Instance = this.getInstance();
this.$cssFiles[ file ] = true;
if ( Instance )
{
var Doc = Editor.getDocument(),
Link = Doc.createElement('link');
Link.href = file;
Link.rel = "stylesheet";
Link.type = "text/css";
Doc.head.appendChild( Link );
}
},
* @param {Object} params
*/
$onDrop : function(params)
{
var Instance = this.getInstance();
for ( var i = 0, len = params.length; i < len; i++ ) {
Instance.insertHtml( "<img src="+ params[ i ].url +" />" );
}
},
/**
* edit the image dialog
*
* @param {DOMEvent} ev - CKEvent
* @return {DOMEvent} ev (CKEvent)
*/
$imageDialog : function(ev)
{
// Take the dialog name and its definition from the event data.
var self = this,
dialogName = ev.data.name,
dialogDefinition = ev.data.definition;
/**
* Image dialog
*/
if ( dialogName != 'image' ) {
return ev;
}
// Get a reference to the "Link Info" tab.
dialogDefinition.onShow = function()
{
// image button
var UrlGroup = this.getContentElement('info', 'txtUrl' )
.getElement()
.$;
var UrlInput = UrlGroup.getElement( 'input[type="text"]' );
var HeightInput = this.getContentElement('info', 'txtHeight' )
.getElement().$
.getElement( 'input[type="text"]' );
var WidthInput = this.getContentElement('info', 'txtWidth' )
.getElement().$
.getElement( 'input[type="text"]' );
if ( !UrlGroup.getElement( '.qui-button' ) )
{
'class' : 'qui-button',
html : '<span class="icon-picture"></span>',
events :
{
click : function()
{
self.openMedia({
events :
{
onSubmit : function(Win, data)
{
UrlInput.value = data.url;
Ajax.get('ajax_media_details', function(fileData)
{
if ( fileData.image_height > 500 ||
fileData.image_width > 500 )
{
var result = QUIMath.resizeVar(
fileData.image_height,
fileData.image_width,
500
);
HeightInput.value = result.var1;
WidthInput.value = result.var2;
} else
{
HeightInput.value = fileData.image_height;
WidthInput.value = fileData.image_width;
}
}, {
project : data.project,
fileid : data.id
});
}
}
});
}
}
}).inject( UrlGroup );
Button.getPrevious().setStyles({
'float' : 'left'
});
}
// link button
var LinkGroup = this.getContentElement('Link', 'txtUrl' )
.getElement()
.$;
if ( LinkGroup.getElement( '.qui-button' ) ) {
return;
}
var LinkInput = LinkGroup.getElement( 'input[type="text"]' );
'class' : 'qui-button',
html : '<span class="icon-home"></span>',
events :
{
click : function()
{
self.openProject({
events :
{
onSubmit : function(Win, data) {
LinkInput.value = data.urls[ 0 ];
}
}
});
}
}
}).inject( LinkGroup );
var Prev = Button.getPrevious();
Prev.setStyles({
'float' : 'left',
width : Prev.getSize().x - 100
});
return ev;
},
/**
* edit the link dialog
*
* @param {DOMEvent} ev - CKEvent
* @return {DOMEvent} ev - CKEvent
*/
$linkDialog : function(ev)
{
// Take the dialog name and its definition from the event data.
*/
if ( dialogName != 'link' ) {
return ev;
}
//dialogDefinition.getContents( 'info' ).remove( 'protocol');
var dialogDefinition = ev.data.definition,
Url = dialogDefinition.getContents( 'info' ).get( 'url' ),
orgCommit = Url.commit;
Url.commit = function( data )
{
orgCommit.call( this, data );
Protokoll = dialogDefinition.dialog
.getContentElement('info', 'protocol' )
.getElement()
.$
.getElement('select');
var self = this,
oldOnShow = dialogDefinition.onShow;
// Get a reference to the "Link Info" tab.
dialogDefinition.onShow = function()
{
var UrlGroup = this.getContentElement('info', 'url' )
.getElement()
.$;
if ( UrlGroup.getElement( '.qui-button' ) ) {
return;
}
var UrlInput = UrlGroup.getElement( 'input[type="text"]' );
Protokoll = this.getContentElement('info', 'protocol' )
.getElement()
.$
UrlInput.setStyles({
'float' : 'left',
{
click : function()
{
self.openProject({
events :
{
onSubmit : function(Win, data)
{
UrlInput.value = data.urls[ 0 ];
Protokoll.value = '';
}
}
});
}
}
}).inject( UrlInput, 'after' );
// image button
new Element('button', {
'class' : 'qui-button',
html : '<span class="icon-picture"></span>',
events :
{
click : function()
{
self.openMedia({
events :
{
onSubmit : function(Win, data)
{
UrlInput.value = data.url;
Protokoll.value = '';
}
}
});
}
}
}).inject( Links, 'after' );
};