From 228262bf7053984cbb2cd33cdac444baa72eb8bf Mon Sep 17 00:00:00 2001 From: Dario Milicic Date: Mon, 11 Aug 2014 11:19:47 +0200 Subject: [PATCH] Fixed a few bugs regarding sending empty responses. If no file is selected for upload an alert will appeart to notify the user. --- .../plugins/fileupload/dialogs/fileupload.js | 22 +++++++++++------- .../ckeditor/plugins/image2/dialogs/image2.js | 13 ++++++++++- scripts/load-ckeditor.js | 4 ++-- .../UserInterfaceState.xcuserstate | Bin 34689 -> 34587 bytes 4 files changed, 28 insertions(+), 11 deletions(-) diff --git a/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js b/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js index 2ff1f086..80e5c5f5 100644 --- a/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js +++ b/scripts/ckeditor/plugins/fileupload/dialogs/fileupload.js @@ -9,9 +9,7 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { var lang = editor.lang.image2; - console.log(editor.lang); - console.log(lang.btnUpload); - +4 return { // Basic properties of the dialog window: title, minimum size. @@ -46,6 +44,13 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { // grab the file(s) from the file input tag and upload it using AJAX var dialog = this.getDialog(); var files = dialog.getContentElement("Upload", "upload").getInputElement().$.files; + + // no files were selected + if(files.length == 0) { + alert("Please select a file!"); + return false; + } + var formData = new FormData(); formData.append('drop-count', files.length); // number of files being uploaded formData.append('acmd', "Upload"); // Command for the server to recognize this as an ajax upload @@ -70,7 +75,7 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { if (evt.lengthComputable) { var percentComplete = evt.loaded / evt.total; //Do something with upload progress - // console.log(percentComplete); + console.log(percentComplete); } }, false); @@ -82,7 +87,11 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { url: URL, data: formData, success: function(data) { - dialog.getContentElement( 'Upload', 'src' ).setValue( data.attachments[0].fullName ); + if(data.attachments[0]) { // check if we have the correct response + dialog.getContentElement( 'Upload', 'src' ).setValue( data.attachments[0].fullName ); + } else { + console.log("Data returned is not json..."); + } }, fail: function() { console.log("error"); @@ -119,9 +128,6 @@ CKEDITOR.dialog.add( 'fileuploadDialog', function( editor ) { onOk: function() { var dialog = this; - console.log(dialog.getValueOf( 'Upload', 'src' )); - console.log(dialog.getValueOf( 'Upload', 'name' )); - var file = editor.document.createElement( 'a' ); file.setAttribute( 'href', dialog.getValueOf( 'Upload', 'src' ) ); file.setText( dialog.getValueOf( 'Upload', 'name' ) ); diff --git a/scripts/ckeditor/plugins/image2/dialogs/image2.js b/scripts/ckeditor/plugins/image2/dialogs/image2.js index be1c7037..03efb92c 100755 --- a/scripts/ckeditor/plugins/image2/dialogs/image2.js +++ b/scripts/ckeditor/plugins/image2/dialogs/image2.js @@ -545,6 +545,13 @@ CKEDITOR.dialog.add( 'image2', function( editor ) { // grab the file(s) from the file input tag and upload it using AJAX var dialog = this.getDialog(); var files = dialog.getContentElement("Upload", "upload").getInputElement().$.files; + + // no files were selected + if(files.length == 0) { + alert("Please select a file!"); + return false; + } + var formData = new FormData(); formData.append('drop-count', files.length); // number of files being uploaded for (var i = 0; i < files.length; i++) { @@ -578,7 +585,11 @@ CKEDITOR.dialog.add( 'image2', function( editor ) { url: URL, data: formData, success: function(data) { - dialog.getContentElement( 'info', 'src' ).setValue( data.attachments[0].fullName ); + if(data.attachments) { // check if we have the correct response + dialog.getContentElement( 'info', 'src' ).setValue( data.attachments[0].fullName ); + } else { + console.log("Data returned is not json..."); + } }, fail: function() { console.log("error"); diff --git a/scripts/load-ckeditor.js b/scripts/load-ckeditor.js index bb4bd323..f9e19df8 100755 --- a/scripts/load-ckeditor.js +++ b/scripts/load-ckeditor.js @@ -30,8 +30,8 @@ $(document).ready(function() { var dialogDefinition = ev.data.definition; // Check if the definition is from the dialog we're - // interested in (the 'image2' and 'fileupload' dialog). - if ( dialogName == 'image2' || dialogName == 'fileupload') { + // interested in (the 'image2' and 'fileuploadDialog' dialog). + if ( dialogName == 'image2' || dialogName == 'fileuploadDialog') { var dialogObj = dialogDefinition.dialog; dialogObj.on("show", function() { diff --git a/xcode/elogd.xcodeproj/project.xcworkspace/xcuserdata/dmilicic.xcuserdatad/UserInterfaceState.xcuserstate b/xcode/elogd.xcodeproj/project.xcworkspace/xcuserdata/dmilicic.xcuserdatad/UserInterfaceState.xcuserstate index 2fb5c5ce23a546f842d34fd51a99c05aae59ce1f..d8eab8fb8eb86d19cd8d1f930c05bf5d2369777f 100644 GIT binary patch delta 15304 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