Quando si carica un'immagine, CKEditor sostituisce un widget di caricamento (che contiene un'immagine con dati Base64 nell'origine) con l'HTML finale. L'immagine caricata ha le stesse dimensioni di quella caricata per evitare di lampeggiare durante questa sostituzione. Here are the lines che effettua questa sostituzione.
Se lampeggia quando viene caricato l'immagine non è un problema per voi, allora si può semplice sovrascrivere questo metodo:
editor.on('instanceReady', function() {
editor.widgets.registered.uploadimage.onUploaded = function (upload) {
this.replaceWith('<img src="' + upload.url + '">');
}
});
Ora, dove possiamo ottenere le dimensioni delle immagini da?
Un'opzione è caricare l'immagine (upload.url
) e leggere le sue dimensioni nel browser. Tuttavia, si tratta di un'operazione asincrona, quindi potrebbe influire sul gestore di annullamento e non lo consiglierei.
Pertanto, se si conoscono le nuove dimensioni che è possibile inviare, quindi nella risposta del server. Se li metti nella tua risposta JSON in questo modo:
{
"uploaded": 1,
"fileName": "foo.jpg",
"url": "/files/foo.jpg",
"width:" 300,
"height:" 200
}
È necessario gestirli nella risposta (vedremo molto probabilmente semplificare questo bit presto):
editor.on('fileUploadResponse', function(evt) {
var fileLoader = evt.data.fileLoader,
xhr = fileLoader.xhr,
data = evt.data;
try {
var response = JSON.parse(xhr.responseText);
// Error message does not need to mean that upload finished unsuccessfully.
// It could mean that ex. file name was changes during upload due to naming collision.
if (response.error && response.error.message) {
data.message = response.error.message;
}
// But !uploaded means error.
if (!response.uploaded) {
evt.cancel();
} else {
data.fileName = response.fileName;
data.url = response.url;
data.width = response.width;
data.height = response.height;
// Do not call the default listener.
evt.stop();
}
} catch (err) {
// Response parsing error.
data.message = fileLoader.lang.filetools.responseError;
window.console && window.console.log(xhr.responseText);
evt.cancel();
}
});
Per saperne di più controllare la editor#fileUploadResponse
evento e la guida Uploading Dropped or Pasted Files.
Poi li si può usare nel widget di upload:
editor.on('instanceReady', function() {
editor.widgets.registered.uploadimage.onUploaded = function(upload) {
this.replaceWith('<img src="' + upload.url + '" ' +
'width="' + upload.width + '" ' +
'height="' + upload.height + '">');
}
});
PS. Stavamo considerando di includere una funzionalità di questo tipo nel core, ma poiché l'uscita era enorme, abbiamo dovuto limitarla ad un certo punto per portarla finalmente in vita. C'è una grande possibilità che tale funzionalità sarà presto inclusa nel core e sarà necessaria solo la configurazione.
evento meglio, se si vuole fare questo comportamento come predefinito, è possibile invece di fare editor.on. .., cambia la funzione onUploaded in uploadimage/plugin.js. – Alexey
@alexs non è raccomandato, in quanto si dovrebbe potenzialmente ri-implementarlo ogni volta che si aggiorna CKEditor a una nuova versione. – Klaus
Ho dovuto modificare questo codice per farlo funzionare. Ad esempio, 'editor.on ('instanceReady', function() {', dovevo fornire un param e usarlo internamente, come' .on ('instanceReady', function (E) { E.editor.widgets. ... –