Po przesłaniu obrazu CKEditor zastępuje widżet przesyłania (który zawiera obraz z danymi Base64 w źródle) z ostatecznym kodem HTML. Przesłany obraz ma te same wymiary, co przesyłany, aby zapobiec migotaniu podczas wymiany. Here are the lines, które wykonują ten zamiennik.
Jeśli miga, gdy obraz jest przesyłany nie jest to problem dla ciebie, to można zastąpić tę metodę proste:
editor.on('instanceReady', function() {
editor.widgets.registered.uploadimage.onUploaded = function (upload) {
this.replaceWith('<img src="' + upload.url + '">');
}
});
Teraz, gdzie możemy uzyskać wymiary obrazu z?
Jedną opcją jest załadowanie obrazu (upload.url
) i odczytanie jego wymiarów w przeglądarce. Jest to jednak operacja asynchroniczna, więc może wpłynąć na menedżera cofania i nie poleciłbym tego.
Dlatego, jeśli znasz nowe wymiary, możesz je wysłać w odpowiedzi serwera. Jeśli umieścisz je w swojej odpowiedzi JSON jak poniżej:
{
"uploaded": 1,
"fileName": "foo.jpg",
"url": "/files/foo.jpg",
"width:" 300,
"height:" 200
}
Trzeba obchodzić się z nimi w odpowiedzi (będziemy najprawdopodobniej uprościć ten kawałek wkrótce):
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();
}
});
Aby dowiedzieć się więcej sprawdź editor#fileUploadResponse
wydarzenie i przewodnik Uploading Dropped or Pasted Files.
Następnie można z nich korzystać w widgecie Dodano:
editor.on('instanceReady', function() {
editor.widgets.registered.uploadimage.onUploaded = function(upload) {
this.replaceWith('<img src="' + upload.url + '" ' +
'width="' + upload.width + '" ' +
'height="' + upload.height + '">');
}
});
PS. Zastanawialiśmy się nad włączeniem takiej funkcji do jądra, ale ponieważ wydawnictwo było ogromne, musieliśmy go w pewnym momencie ograniczyć, by ożywić. Istnieje duża szansa, że taka funkcja zostanie wkrótce dołączona do rdzenia i będzie potrzebna tylko konfiguracja.
wydarzenie lepiej, jeśli chcesz, aby to zachowanie jako domyślne, można zamiast robić editor.on. .., zmień funkcję onUploaded w uploadimage/plugin.js. – Alexey
Polecenie @alexs nie jest zalecane, ponieważ w przypadku uaktualnienia CKEditor do nowej wersji konieczne będzie ponowne jego wdrożenie. – Klaus
Musiałem zmodyfikować ten kod, aby działał. Np., Redaktor.on ('instanceReady', function() {', musiałem podać parametr i użyć go wewnętrznie, np.' .on ('instanceReady', function (E) { E.editor.widgets.' ... –