if (typeof(Alchemy) === 'undefined') { var Alchemy = {}; } Alchemy.Uploader = { HTML5uploadPossible: function() { function supportFileAPI() { var fi = document.createElement('INPUT'); fi.type = 'file'; return 'files' in fi; } function supportAjaxUploadProgressEvents() { var xhr = new XMLHttpRequest(); return !!(xhr && ('upload' in xhr) && ('onprogress' in xhr.upload)); } return typeof(window.FileReader) !== 'undefined' && supportFileAPI() && supportAjaxUploadProgressEvents(); //return false; }, init: function(settings) { var self = Alchemy.Uploader; function initHTML5Uploader() { $("#dropbox, #multiple").html5Uploader({ name: "Filedata", postUrl: settings.upload_url, postParams: settings.post_params, onSuccess: function(event, file, responseText, successfullyUploadedFiles) { eval(responseText); var progress = new Alchemy.FileProgress(file); $('#upload_info').text(self.t('success_notice').replace('x', successfullyUploadedFiles)); progress.setStatus(self.t('complete')); progress.setComplete(); }, onDragEnter: function(dropbox, event) { $(dropbox).addClass('dragover').text(self.t('drop_files_notice')); }, onDragLeave: function(dropbox, event) { $(dropbox).removeClass('dragover').text(self.t('drag_files_notice')); }, onDrop: function(dropbox, event) { $(dropbox).removeClass('dragover').text(self.t('drag_files_notice')); }, onQueueStart: function(files) { var $status = $("#upload_info"); if (Alchemy.locale === 'en') { $status.text(files + " file" + (files === 1 ? "" : "s") + " queued."); } else { $status.text(files + " Datei" + (files === 1 ? "" : "en") + " in der Warteschlange."); } $('#upload_info_container').show(); $('#dropbox').hide('fast'); $('#multiple').hide(); $('#cancelHTML5Queue').show(); }, onQueueComplete: function(files, status) { var $status = $("#upload_info"); if (Alchemy.locale === 'en') { $status.text(files + " file" + (files === 1 ? "" : "s") + " uploaded."); } else { $status.text(files + " Datei" + (files === 1 ? "" : "en") + " hochgeladen."); } $('#dropbox').show(); $('#multiple').show().parents('form').get(0).reset(); $('#cancelHTML5Queue').hide(); if (status === 200) { window.setTimeout(function() { Alchemy.closeCurrentWindow(); if (typeof(settings.onQueueComplete) !== 'undefined') { settings.onQueueComplete.call(); } }, 2000); } }, onClientLoadStart: function(event, file) { var progress = new Alchemy.FileProgress(file); progress.setStatus(self.t('pending')); }, onServerLoadStart: function(event, file) { var progress = new Alchemy.FileProgress(file); progress.setStatus(self.t('uploading')); progress.$fileProgressCancel.show().on('click', function(e) { e.preventDefault(); $().html5Uploader('cancel', file.id); progress.setStatus(self.t('cancelled')); progress.setCancelled(); return false; }); }, onServerProgress: function(event, file) { var progress = new Alchemy.FileProgress(file); var percentUploaded = (event.loaded / event.total) * 100; progress.setProgress(percentUploaded); progress.setStatus(self.t('uploading') + SWFUpload.speed.formatPercent(percentUploaded)); }, onServerError: function(e, file, errorMessage) { Alchemy.debug(e); var progress = new Alchemy.FileProgress(file); progress.setError(); progress.setStatus(errorMessage); }, onQueueCancelled: function(queuedFiles) { for (var i = queuedFiles.length - 1; i >= 0; i--) { var progress = new Alchemy.FileProgress(queuedFiles[i]); progress.setStatus(self.t('cancelled')); progress.setCancelled(); } $('#cancelHTML5Queue').hide(); } }); } function initFlashUploader() { try { var swfu = new SWFUpload({ flash_url: "/assets/swfupload/swfupload.swf", flash9_url: "/assets/swfupload/swfupload.swf", upload_url: settings.upload_url, post_params: settings.post_params, file_size_limit: settings.file_size_limit + ' MB', file_types: settings.file_types, file_types_description: settings.file_types_description, file_upload_limit: settings.file_upload_limit, file_queue_limit: 0, custom_settings: { language: Alchemy.locale }, debug: false, button_image_url: "/assets/alchemy/swfupload/browse_button.png", button_width: "120", button_height: "25", button_placeholder_id: "spanButtonPlaceHolder", button_text: "" + self.t('browse') + "", button_text_style: '.swfButtonText {font-size: 11px; font-family: "Lucida Grande", Arial, sans-serif; text-align: center; color: #333333; height: 25px; padding-left: 8px; padding-right: 8px; padding-bottom: 3px; padding-top: 5px}', button_text_left_padding: 0, button_text_top_padding: 4, swfupload_load_failed_handler: function() { $('#swf_upload_container').hide(); $('#choose_alternative_uploader').hide(); $('#switch_to_flash_uploader').hide(); $('#swfUploadFlashError').show(); $('#alternativeUpload').show(); }, file_queued_handler: Alchemy.SWFUpload.fileQueued, file_queue_error_handler: Alchemy.SWFUpload.fileQueueError, file_dialog_complete_handler: Alchemy.SWFUpload.fileDialogComplete, upload_start_handler: Alchemy.SWFUpload.uploadStart, upload_progress_handler: Alchemy.SWFUpload.uploadProgress, upload_error_handler: Alchemy.SWFUpload.uploadError, upload_success_handler: Alchemy.SWFUpload.uploadSuccess, queue_complete_handler: Alchemy.SWFUpload.queueComplete }); swfu.window_mode = "opaque"; } catch (err) { Alchemy.debug(err); $('#swf_upload_container').hide(); $('#choose_alternative_uploader').hide(); $('#alternativeUpload').show(); $('#flash_upload_error_explanation').show(); } } if (self.HTML5uploadPossible()) { $('#swf_upload_container').hide(); $('#explain_step3').hide(); $('#explain_drag_n_drop').show(); initHTML5Uploader(settings); $('#cancelHTML5Queue').on('click', function(e) { e.preventDefault(); $().html5Uploader('cancelQueue'); return false; }); } else { $('#multiple').hide(); $('#dropbox').hide(); $('#explain_step3').show(); $('#explain_drag_n_drop').hide(); initFlashUploader(settings); } }, translation: { 'browse': { 'de': 'durchsuchen', 'en': 'browse' }, 'pending': { 'de': 'Wartend...', 'en': 'Pending...' }, 'uploading': { 'de': 'Ladend...', 'en': 'Uploading...' }, 'remaining': { 'de': ' verbleibend.', 'en': ' remaining.' }, 'complete': { 'de': 'Abgeschlossen', 'en': "Complete" }, 'cancelled': { 'de': 'Abgebrochen', 'en': 'Cancelled' }, 'stopped': { 'de': 'Gestoppt', 'en': 'Stopped' }, 'upload_failed': { 'de': 'Fehlgeschlagen!', 'en': 'Upload Failed!' }, 'file_too_big': { 'de': 'Datei ist zu groß!', 'en': 'File is too big!' }, 'upload_limit_exceeded': { 'de': 'Maximales Dateilimit erreicht.', 'en': 'Upload limit exceeded.' }, 'validation_failed': { 'de': 'Validierung fehlgeschlagen. Ladevorgang angehalten.', 'en': "Failed Validation. Upload skipped." }, 'zero_byte_file': { 'de': 'Datei hat keinen Inhalt!', 'en': 'Cannot upload Zero Byte files!' }, 'invalid_file': { 'de': 'Ungültiger Dateityp!', 'en': 'Invalid File Type!' }, 'unknown_error': { 'de': 'Unbekannter Fehler!', 'en': 'Unhandled Error!' }, 'drag_files_notice': { 'de': 'Oder ziehen Sie die Dateien hier rauf', 'en': 'Or drag files over here' }, 'drop_files_notice': { 'de': 'Lassen Sie die Dateien nun los', 'en': 'Now drop the files' }, 'queued_files_notice': { 'de': 'x Dateien in der Warteschlange.', 'en': 'Queued x files.' }, 'success_notice': { 'de': 'x Dateien hochgeladen.', 'en': 'Uploaded x files.' } }, t: function(id) { try { var self = Alchemy.Uploader; var translation = self.translation[id]; if (translation) { return translation[Alchemy.locale]; } else { return id; } } catch (ex) { this.debug(ex); } } };