/*
Copyright (c) 2003-2009, CKSource - Frederico Knabben. All rights reserved.
For licensing, see LICENSE.html or http://ckeditor.com/license
*/
(function() {
// Load image preview.
var IMAGE = 1,
CLEANUP = 8;
var imageDialog = function(editor) {
var onImgLoadEvent = function() {
// Image is ready.
var original = this.originalElement;
original.setCustomData('isReady', 'true');
original.removeListener('load', onImgLoadEvent);
original.removeListener('error', onImgLoadErrorEvent);
original.removeListener('abort', onImgLoadErrorEvent);
};
var onImgLoadErrorEvent = function() {
// Error. Image is not loaded.
var original = this.originalElement;
original.removeListener('load', onImgLoadEvent);
original.removeListener('error', onImgLoadErrorEvent);
original.removeListener('abort', onImgLoadErrorEvent);
// Set Error image.
var noimage = CKEDITOR.getUrl(editor.skinPath + 'images/noimage.png');
};
return {
title: editor.lang.image.title,
minWidth: 420,
minHeight: 310,
onShow: function() {
this.imageElement = false;
this.imageEditMode = false;
var editor = this.getParentEditor(),
sel = this.getParentEditor().getSelection(),
element = sel.getSelectedElement();
// Copy of the image
this.originalElement = editor.document.createElement('img');
this.originalElement.setAttribute('rel', '');
this.originalElement.setCustomData('isReady', 'false');
if (element && element.getName() == 'img' && ! element.getAttribute('_cke_protected_html')) this.imageEditMode = 'img';
if (this.imageEditMode || this.imageElement) {
if (!this.imageElement) this.imageElement = element;
// Fill out all fields.
this.setupContent(IMAGE, this.imageElement);
}
},
onOk: function() {
// Create a new image
if (!this.imageEditMode) {
// Image dialog -> create IMG element.
this.imageElement = editor.document.createElement('img');
this.imageElement.setAttribute('rel', '');
}
// Set attributes.
this.commitContent(IMAGE, this.imageElement);
// Insert a new Image.
if (!this.imageEditMode) {
editor.insertElement(this.imageElement);
}
},
onLoad: function() {
var doc = this._.element.getDocument();
},
onHide: function() {
if (this.originalElement) {
this.originalElement.removeListener('load', onImgLoadEvent);
this.originalElement.removeListener('error', onImgLoadErrorEvent);
this.originalElement.removeListener('abort', onImgLoadErrorEvent);
this.originalElement.remove();
this.originalElement = false; // Dialog is closed.
}
},
contents: [{
id: 'info',
label: editor.lang.image.infoTab,
accessKey: 'I',
elements: [{
type: 'vbox',
padding: 0,
children: [
{
type: 'hbox',
widths: ['280px', '110px'],
align: 'right',
children: [{
id: 'txtUrl',
type: 'text',
label : editor.lang.common.url,
onChange: function() {
var dialog = this.getDialog(),
newUrl = this.getValue();
//Update original image
if (newUrl.length > 0) //Prevent from load before onShow
{
dialog = this.getDialog();
var original = dialog.originalElement;
original.setCustomData('isReady', 'false');
original.on('load', onImgLoadEvent, dialog);
original.on('error', onImgLoadErrorEvent, dialog);
original.on('abort', onImgLoadErrorEvent, dialog);
original.setAttribute('src', newUrl);
}
},
setup: function(type, element) {
if (type == IMAGE) {
var url = element.data('cke-saved-src') || element.getAttribute('src');
var field = this;
// In IE7 the dialog is being rendered improperly when loading
// an image with a long URL. So we need to delay it a bit. (#4122)
setTimeout(function() {
field.setValue(url); // And call this.onChange()
field.focus();
},
0);
}
},
commit: function(type, element) {
if (type == IMAGE && (this.getValue() || this.isChanged())) {
element.data('cke-saved-src', decodeURI(this.getValue()));
element.setAttribute('src', decodeURI(this.getValue()));
element.removeAttribute('width');
element.removeAttribute('height');
}
else if (type == CLEANUP) {
element.setAttribute('src', ''); // If removeAttribute doesn't work.
element.removeAttribute('src');
}
}
},
{
type: 'button',
id: 'browse',
align: 'center',
label: editor.lang.common.browseServer,
hidden: true,
filebrowser: 'info:txtUrl'
}]
}]
},
{
id: 'txtRel',
type: 'text',
label: "Relação (rel)",
accessKey: 'R',
'default': '',
onChange: function() {},
setup: function(type, element) {
if (type == IMAGE) this.setValue(element.getAttribute('rel'));
},
commit: function(type, element) {
if (type == IMAGE) {
if (this.getValue() || this.isChanged()) element.setAttribute('rel', this.getValue());
}
else if (type == CLEANUP) {
element.removeAttribute('rel');
}
}
},
{
id: 'txtAlt',
type: 'text',
label: editor.lang.image.alt,
accessKey: 'A',
'default': '',
onChange: function() {},
setup: function(type, element) {
if (type == IMAGE) this.setValue(element.getAttribute('alt'));
},
commit: function(type, element) {
if (type == IMAGE) {
if (this.getValue() || this.isChanged()) element.setAttribute('alt', this.getValue());
}
else if (type == CLEANUP) {
element.removeAttribute('alt');
}
}
}]
}]
};
};
CKEDITOR.dialog.add('image', function(editor) {
return imageDialog(editor);
});
})();