From 1ce5faf4266b65ebb9256a54f89890a63847b9aa Mon Sep 17 00:00:00 2001 From: "vit.jonas@gmail.com" Date: Tue, 10 Jan 2012 14:16:39 +0000 Subject: [PATCH] * upgraded plupload to 1.5.2 git-svn-id: http://redmine-dmsf.googlecode.com/svn/trunk/redmine_dmsf@278 5e329b0b-a2ee-ea63-e329-299493fc886d --- assets/javascripts/plupload/i18n/de.js | 43 +- assets/javascripts/plupload/i18n/fr.js | 2 +- assets/javascripts/plupload/i18n/hr.js | 25 + assets/javascripts/plupload/i18n/hu.js | 33 ++ assets/javascripts/plupload/i18n/it.js | 43 +- assets/javascripts/plupload/i18n/ro.js | 24 + assets/javascripts/plupload/i18n/sr.js | 14 + .../jquery.ui.plupload/jquery.ui.plupload.js | 104 +++-- assets/javascripts/plupload/plupload.flash.js | 13 +- .../javascripts/plupload/plupload.flash.swf | Bin 18752 -> 18823 bytes assets/javascripts/plupload/plupload.html4.js | 15 +- assets/javascripts/plupload/plupload.html5.js | 61 ++- assets/javascripts/plupload/plupload.js | 70 ++- .../plupload/plupload.silverlight.js | 440 ------------------ .../plupload/plupload.silverlight.xap | Bin 43675 -> 0 bytes 15 files changed, 326 insertions(+), 561 deletions(-) create mode 100644 assets/javascripts/plupload/i18n/hr.js create mode 100644 assets/javascripts/plupload/i18n/hu.js create mode 100644 assets/javascripts/plupload/i18n/ro.js create mode 100644 assets/javascripts/plupload/i18n/sr.js delete mode 100644 assets/javascripts/plupload/plupload.silverlight.js delete mode 100644 assets/javascripts/plupload/plupload.silverlight.xap diff --git a/assets/javascripts/plupload/i18n/de.js b/assets/javascripts/plupload/i18n/de.js index 96429d31..4c4de07a 100644 --- a/assets/javascripts/plupload/i18n/de.js +++ b/assets/javascripts/plupload/i18n/de.js @@ -1,25 +1,24 @@ // German plupload.addI18n({ - 'Select files' : 'Wählen Sie die Dateien:', - 'Add files to the upload queue and click the start button.' : 'Dateien hinzufügen und danach auf \'Starten des Uploads\' klicken und die Datei hochzuladen.', - 'Filename' : 'Dateiname', - 'Status' : 'Status', - 'Size' : 'Größe', - 'Add files' : 'Hinzufügen von Dateien', - 'Stop current upload' : 'Stop aktuellen Upload', - 'Start uploading queue' : 'Starte Upload', - 'Uploaded %d/%d files': '%d/%d Dateien sind Hochgeladen', - 'N/A' : 'Nicht verfügbar', - 'Drag files here.' : 'Ziehen Sie die Dateien hier hin', - 'File extension error.': 'Dateiendungs Fehler.', - 'File size error.': 'Dateigrößen Fehler.', - 'Init error.': 'Initialisierungs Fehler.', - 'HTTP Error.': 'HTTP Fehler.', - 'Security error.': 'Sicherheits Fehler.', - 'Generic error.': 'Generic Fehler.', - 'IO error.': 'Ein/Ausgabe Fehler.', - 'Stop Upload': 'Stoppen des Uploads.', - 'Add Files': 'Dateien hinzufügen', - 'Start Upload': 'Starten des Uploads.', - '%d files queued': '%d Dateien in der Warteschlange.' + 'Select files' : 'Dateien hochladen', + 'Add files to the upload queue and click the start button.' : 'Dateien hinzufügen und auf \'Hochladen\' klicken.', + 'Filename' : 'Dateiname', + 'Status' : 'Status', + 'Size' : 'Größe', + 'Add files' : 'Dateien', // hinzufügen', + 'Stop current upload' : 'Aktuelles Hochladen stoppen', + 'Start uploading queue' : 'Hochladen starten', + 'Uploaded %d/%d files': '%d/%d Dateien sind hochgeladen', + 'N/A' : 'Nicht verfügbar', + 'Drag files here.' : 'Ziehen Sie die Dateien hier hin', + 'File extension error.': 'Fehler bei Dateiendung', + 'File size error.': 'Fehler bei Dateigröße', + 'Init error.': 'Initialisierungsfehler', + 'HTTP Error.': 'HTTP-Fehler', + 'Security error.': 'Sicherheitsfehler', + 'Generic error.': 'Typischer Fehler', + 'IO error.': 'Ein/Ausgabe-Fehler', + 'Stop Upload': 'Hochladen stoppen', + 'Start upload': 'Hochladen', + '%d files queued': '%d Dateien in der Warteschlange' }); \ No newline at end of file diff --git a/assets/javascripts/plupload/i18n/fr.js b/assets/javascripts/plupload/i18n/fr.js index c534ec4e..53dbe289 100644 --- a/assets/javascripts/plupload/i18n/fr.js +++ b/assets/javascripts/plupload/i18n/fr.js @@ -1,4 +1,4 @@ -// .po file like language pack +// French plupload.addI18n({ 'Select files' : 'Sélectionnez les fichiers', 'Add files to the upload queue and click the start button.' : 'Ajoutez des fichiers à la file et appuyez sur le bouton démarrer.', diff --git a/assets/javascripts/plupload/i18n/hr.js b/assets/javascripts/plupload/i18n/hr.js new file mode 100644 index 00000000..084be51c --- /dev/null +++ b/assets/javascripts/plupload/i18n/hr.js @@ -0,0 +1,25 @@ +// Croatian +plupload.addI18n({ + 'Select files': 'Izaberite datoteke:', + 'Add files to the upload queue and click the start button.': 'Dodajte datoteke u listu i kliknite Upload.', + 'Filename': 'Ime datoteke', + 'Status': 'Status', + 'Size': 'Veličina', + 'Add files': 'Dodajte datoteke', + 'Stop current upload': 'Zaustavi trenutan upload', + 'Start uploading queue': 'Pokreni Upload', + 'Uploaded %d/%d files': 'Uploadano %d/%d datoteka', + 'N/A': 'N/A', + 'Drag files here.': 'Dovucite datoteke ovdje', + 'File extension error.': 'Greška ekstenzije datoteke.', + 'File size error.': 'Greška veličine datoteke.', + 'Init error.': 'Greška inicijalizacije.', + 'HTTP Error.': 'HTTP greška.', + 'Security error.': 'Sigurnosna greška.', + 'Generic error.': 'Generička greška.', + 'IO error.': 'I/O greška.', + 'Stop Upload': 'Zaustavi upload.', + 'Add Files': 'Dodaj datoteke', + 'Start Upload': 'Pokreni upload.', + '%d files queued': '%d datoteka na čekanju.' +}); \ No newline at end of file diff --git a/assets/javascripts/plupload/i18n/hu.js b/assets/javascripts/plupload/i18n/hu.js new file mode 100644 index 00000000..87070bae --- /dev/null +++ b/assets/javascripts/plupload/i18n/hu.js @@ -0,0 +1,33 @@ +// Hungarian +plupload.addI18n({ + 'Select files' : 'Fájlok kiválasztása', + 'Add files to the upload queue and click the start button.' : 'Válaszd ki a fájlokat, majd kattints az Indítás gombra.', + 'Filename' : 'Fájlnév', + 'Status' : 'Állapot', + 'Size' : 'Méret', + 'Add files' : 'Hozzáadás', + 'Stop current upload' : 'Jelenlegi feltöltés megszakítása', + 'Start uploading queue' : 'Várakozási sor feltöltésének indítása', + 'Uploaded %d/%d files': 'Feltöltött fájlok: %d/%d', + 'N/A': 'Nem elérhető', + 'Drag files here.' : 'Húzd ide a fájlokat.', + 'Stop upload': 'Feltöltés megszakítása', + 'Start upload': 'Indítás', + '%d files queued': '%d fájl sorbaállítva', + 'File: %s': 'Fájl: %s', + 'Close': 'Bezárás', + 'Using runtime: ': 'Használt runtime: ', + 'File: %f, size: %s, max file size: %m': 'Fájl: %f, méret: %s, maximális fájlméret: %m', + 'Upload element accepts only %d file(s) at a time. Extra files were stripped.': 'A feltöltés egyszerre csak %d fájlt fogad el, a többi fájl nem lesz feltöltve.', + 'Upload URL might be wrong or doesn\'t exist': 'A megadott URL hibás vagy nem létezik', + 'Error: File too large: ': 'Hiba: A fájl túl nagy: ', + 'Error: Invalid file extension: ': 'Hiba: Érvénytelen fájlkiterjesztés: ', + 'File extension error.': 'Hibás fájlkiterjesztés.', + 'File size error.': 'Hibás fájlméret.', + 'File count error.': 'A fájlok számával kapcsolatos hiba.', + 'Init error.': 'Init hiba.', + 'HTTP Error.': 'HTTP hiba.', + 'Security error.': 'Biztonsági hiba.', + 'Generic error.': 'Általános hiba.', + 'IO error.': 'I/O hiba.' +}); diff --git a/assets/javascripts/plupload/i18n/it.js b/assets/javascripts/plupload/i18n/it.js index 7946578a..891e4fb0 100644 --- a/assets/javascripts/plupload/i18n/it.js +++ b/assets/javascripts/plupload/i18n/it.js @@ -1,21 +1,24 @@ -// .po file like language pack -plupload.addI18n({ - 'Select files' : 'Seleziona i files', - 'Add files to the upload queue and click the start button.' : 'Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.', - 'Filename' : 'Nome file', - 'Status' : 'Stato', - 'Size' : 'Dimensione', - 'Add files' : 'Aggiungi file', - 'Stop current upload' : 'Interrompi il caricamento', - 'Start uploading queue' : 'Avvia il caricamento', - 'Uploaded %d/%d files': 'Caricati %d/%d file', - 'N/A' : 'N/D', - 'Drag files here.' : 'Trascina i file qui.', - 'File extension error.': 'Errore estensione file.', - 'File size error.': 'Errore dimensione file.', - 'Init error.': 'Errore inizializzazione.', - 'HTTP Error.': 'Errore HTTP.', - 'Security error.': 'Errore sicurezza.', - 'Generic error.': 'Errore generico.', - 'IO error.': 'Errore IO.' +// Italian +plupload.addI18n({ + 'Select files' : 'Seleziona i files', + 'Add files to the upload queue and click the start button.' : 'Aggiungi i file alla coda di caricamento e clicca il pulsante di avvio.', + 'Filename' : 'Nome file', + 'Status' : 'Stato', + 'Size' : 'Dimensione', + 'Add Files' : 'Aggiungi file', + 'Stop current upload' : 'Interrompi il caricamento', + 'Start uploading queue' : 'Avvia il caricamento', + 'Uploaded %d/%d files': 'Caricati %d/%d file', + 'N/A' : 'N/D', + 'Drag files here.' : 'Trascina i file qui.', + 'File extension error.': 'Errore estensione file.', + 'File size error.': 'Errore dimensione file.', + 'Init error.': 'Errore inizializzazione.', + 'HTTP Error.': 'Errore HTTP.', + 'Security error.': 'Errore sicurezza.', + 'Generic error.': 'Errore generico.', + 'IO error.': 'Errore IO.', + 'Stop Upload': 'Ferma Upload', + 'Start Upload': 'Inizia Upload', + '%d files queued': '%d file in lista' }); \ No newline at end of file diff --git a/assets/javascripts/plupload/i18n/ro.js b/assets/javascripts/plupload/i18n/ro.js new file mode 100644 index 00000000..fd198f0a --- /dev/null +++ b/assets/javascripts/plupload/i18n/ro.js @@ -0,0 +1,24 @@ +// Romanian +plupload.addI18n({ + 'Select files' : 'Selectare fişiere', + 'Add files to the upload queue and click the start button.' : 'Adaugă fişiere în lista apoi apasă butonul \'Începe încărcare\'.', + 'Filename' : 'Nume fişier', + 'Status' : 'Stare', + 'Size' : 'Mărime', + 'Add files' : 'Adăugare fişiere', + 'Stop current upload' : 'Întrerupe încărcarea curentă', + 'Start uploading queue' : 'Începe incărcarea', + 'Uploaded %d/%d files': 'Fişiere încărcate %d/%d', + 'N/A' : 'N/A', + 'Drag files here.' : 'Trage aici fişierele', + 'File extension error.': 'Extensie fişier eronată', + 'File size error.': 'Eroare dimensiune fişier', + 'Init error.': 'Eroare iniţializare', + 'HTTP Error.': 'Eroare HTTP', + 'Security error.': 'Eroare securitate', + 'Generic error.': 'Eroare generică', + 'IO error.': 'Eroare Intrare/Ieşire', + 'Stop Upload': 'Oprire încărcare', + 'Start upload': 'Începe încărcare', + '%d files queued': '%d fişiere listate' +}); \ No newline at end of file diff --git a/assets/javascripts/plupload/i18n/sr.js b/assets/javascripts/plupload/i18n/sr.js new file mode 100644 index 00000000..59dc0a97 --- /dev/null +++ b/assets/javascripts/plupload/i18n/sr.js @@ -0,0 +1,14 @@ +// Serbian +plupload.addI18n({ + 'Select files' : 'Izaberite fajlove', + 'Add files to the upload queue and click the start button.' : 'Dodajte fajlove u listu i kliknite na dugme Start.', + 'Filename' : 'Naziv fajla', + 'Status' : 'Status', + 'Size' : 'Veličina', + 'Add Files' : 'Dodaj fajlove', + 'Stop current upload' : 'Zaustavi upload', + 'Start uploading queue' : 'Počni upload', + 'Drag files here.' : 'Prevucite fajlove ovde.', + 'Start Upload': 'Počni upload', + 'Uploaded %d/%d files': 'Snimljeno %d/%d fajlova' +}); \ No newline at end of file diff --git a/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.js b/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.js index 680ffec8..5ed1a499 100644 --- a/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.js +++ b/assets/javascripts/plupload/jquery.ui.plupload/jquery.ui.plupload.js @@ -159,20 +159,6 @@ $.widget("ui.plupload", { }); } - // all buttons are optional, so they can be disabled and hidden - if (!this.options.buttons.browse) { - this.browse_button.button('disable').hide(); - $('#' + id + self.runtime + '_container').hide(); - } - - if (!this.options.buttons.start) { - this.start_button.button('disable').hide(); - } - - if (!this.options.buttons.stop) { - this.stop_button.button('disable').hide(); - } - // progressbar this.progressbar = $('.plupload_progress_container', this.container); @@ -186,15 +172,35 @@ $.widget("ui.plupload", { id: id + '_count', name: id + '_count' }); - + // initialize uploader instance uploader = this.uploader = uploaders[id] = new plupload.Uploader($.extend({ container: id , browse_button: id + '_browse' }, this.options)); + // do not show UI if no runtime can be initialized + uploader.bind('Error', function(up, err) { + if (err.code === plupload.INIT_ERROR) { + self.destroy(); + } + }); - uploader.bind('Init', function(up, res) { + uploader.bind('Init', function(up, res) { + // all buttons are optional, so they can be disabled and hidden + if (!self.options.buttons.browse) { + self.browse_button.button('disable').hide(); + up.disableBrowse(true); + } + + if (!self.options.buttons.start) { + self.start_button.button('disable').hide(); + } + + if (!self.options.buttons.stop) { + self.stop_button.button('disable').hide(); + } + if (!self.options.unique_names && self.options.rename) { self._enableRenaming(); } @@ -213,7 +219,7 @@ $.widget("ui.plupload", { }); self.stop_button.click(function(e) { - uploader.stop(); + self.stop(); e.preventDefault(); }); }); @@ -244,7 +250,10 @@ $.widget("ui.plupload", { self._trigger('selected', null, { up: up, files: files } ); if (self.options.autostart) { - self.start(); + // set a little delay to make sure that QueueChanged triggered by the core has time to complete + setTimeout(function() { + self.start(); + }, 10); } }); @@ -272,7 +281,12 @@ $.widget("ui.plupload", { uploader.bind('UploadProgress', function(up, file) { // Set file specific progress - $('#' + file.id + ' .plupload_file_status', self.element).html(file.percent + '%'); + $('#' + file.id) + .find('.plupload_file_status') + .html(file.percent + '%') + .end() + .find('.plupload_file_size') + .html(plupload.formatSize(file.size)); self._handleFileStatus(file); self._updateTotalProgress(); @@ -354,10 +368,10 @@ $.widget("ui.plupload", { if (!value.browse) { self.browse_button.button('disable').hide(); - $('#' + self.id + self.runtime + '_container').hide(); + up.disableBrowse(true); } else { self.browse_button.button('enable').show(); - $('#' + self.id + self.runtime + '_container').show(); + up.disableBrowse(false); } if (!value.start) { @@ -419,9 +433,9 @@ $.widget("ui.plupload", { _handleState: function() { - var self = this, uploader = this.uploader; + var self = this, up = this.uploader; - if (uploader.state === plupload.STARTED) { + if (up.state === plupload.STARTED) { $(self.start_button).button('disable'); @@ -431,7 +445,7 @@ $.widget("ui.plupload", { .removeClass('plupload_hidden'); $('.plupload_upload_status', self.element).text( - _('Uploaded %d/%d files').replace('%d/%d', uploader.total.uploaded+'/'+uploader.files.length) + _('Uploaded %d/%d files').replace('%d/%d', up.total.uploaded+'/'+up.files.length) ); $('.plupload_header_content', self.element).addClass('plupload_header_content_bw'); @@ -456,6 +470,11 @@ $.widget("ui.plupload", { _handleFileStatus: function(file) { var actionClass, iconClass; + + // since this method might be called asynchronously, file row might not yet be rendered + if (!$('#' + file.id).length) { + return; + } switch (file.status) { case plupload.DONE: @@ -498,20 +517,24 @@ $.widget("ui.plupload", { _updateTotalProgress: function() { - var uploader = this.uploader; + var up = this.uploader; - this.progressbar.progressbar('value', uploader.total.percent); + this.progressbar.progressbar('value', up.total.percent); - $('.plupload_total_status', this.element).html(uploader.total.percent + '%'); - - $('.plupload_upload_status', this.element).text( - _('Uploaded %d/%d files').replace('%d/%d', uploader.total.uploaded+'/'+uploader.files.length) - ); + this.element + .find('.plupload_total_status') + .html(up.total.percent + '%') + .end() + .find('.plupload_total_file_size') + .html(plupload.formatSize(up.total.size)) + .end() + .find('.plupload_upload_status') + .text(_('Uploaded %d/%d files').replace('%d/%d', up.total.uploaded+'/'+up.files.length)); }, _updateFileList: function() { - var self = this, uploader = this.uploader, filelist = this.filelist, + var self = this, up = this.uploader, filelist = this.filelist, count = 0, id, prefix = this.id + '_', fields; @@ -523,7 +546,7 @@ $.widget("ui.plupload", { filelist.empty(); - $.each(uploader.files, function(i, file) { + $.each(up.files, function(i, file) { fields = ''; id = prefix + count; @@ -552,25 +575,22 @@ $.widget("ui.plupload", { $('#' + file.id + '.plupload_delete .ui-icon, #' + file.id + '.plupload_done .ui-icon') .click(function(e) { $('#' + file.id).remove(); - uploader.removeFile(file); + up.removeFile(file); e.preventDefault(); }); self._trigger('updatelist', null, filelist); }); - - $('.plupload_total_file_size', self.element).html(plupload.formatSize(uploader.total.size)); - - if (uploader.total.queued === 0) { + if (up.total.queued === 0) { $('.ui-button-text', self.browse_button).text(_('Add Files')); } else { - $('.ui-button-text', self.browse_button).text(_('%d files queued').replace('%d', uploader.total.queued)); + $('.ui-button-text', self.browse_button).text(_('%d files queued').replace('%d', up.total.queued)); } - if (uploader.files.length === (uploader.total.uploaded + uploader.total.failed)) { + if (up.files.length === (up.total.uploaded + up.total.failed)) { self.start_button.button('disable'); } else { self.start_button.button('enable'); @@ -582,7 +602,7 @@ $.widget("ui.plupload", { self._updateTotalProgress(); - if (!uploader.files.length && uploader.features.dragdrop && uploader.settings.dragdrop) { + if (!up.files.length && up.features.dragdrop && up.settings.dragdrop) { // Re-add drag message if there are no files $('#' + id + '_filelist').append('' + _("Drag files here.") + ''); } else { @@ -597,7 +617,7 @@ $.widget("ui.plupload", { _enableRenaming: function() { var self = this; - $('.plupload_file_name span', this.filelist).live('click', function(e) { + $('.plupload_delete .plupload_file_name span', this.filelist).live('click', function(e) { var targetSpan = $(e.target), file, parts, name, ext = ""; // Get file name and split out name and extension diff --git a/assets/javascripts/plupload/plupload.flash.js b/assets/javascripts/plupload/plupload.flash.js index a5d08b10..9af96127 100644 --- a/assets/javascripts/plupload/plupload.flash.js +++ b/assets/javascripts/plupload/plupload.flash.js @@ -133,7 +133,7 @@ html = 'hl& zR(5rEC#Iuz^rUDq8J}KWzGB6SDJu?|660OFRo%(p%Chdn z{*z`12Gx;7xThnY?1*)jP(2um^(K#=G|A-J7S1w__x5xOmTlqkNN1!g(w$6{Pn|Lq zjM~D}^;l0=FgYU_k9T&2gT$_UWmzH`3!k_mxI9v(cLo#DqsoT~sZX*a*%_Hp*%k{$ zN@_bJD@zV8sT}Svs0|V#ZW|VKM$R;Y)O$)e)>R(wiM92HA(IYPqH}H+ViE5Rb#^48 zk)9d7-6wX(Rv1GJV~Hl*6A30`BPlXCYVQnoxAz9yBQt6ih_-B9$QVpUX4D6}OAhsy zOskkW&5(kSN0slQY!id^n;}(uK9G-+s`${*(D4o#3v2}_?710|_?htJA$J~(1s`-^ znl16p-gsv$*w(VpEJ%-xdU%Z_fk4uGf?biRl1G|?|G-UEhi3Ne`{t1R(vbY&dHlKy z`074>%A|TIr-Q(XEtx?d9CTj^vp9WTi;FXH!w5g zS$f2sPro(undJ{(Gq(JpnXcuJ-(7S0laKtf`f9EDpdB*}?r+T0LiJkuFR#puuNdrp zAa&==8J9)$tNY%Yc|>{h4R8JKrI~9jlCnJ3(PnK(_H=Z&yTqoQ5?M|=-BLqY-ol<( zdru^h5H(j_pr)rM)*~tf4UuqfPe*dqFlrRmYf9J3jwu~o*dZpP{F;>=`odsOB4Q9Z z>Znl^?bX3#(BMoxGb`qDOin-QkGb(Veu__I8J92RaR+-egB-!ajRdG9ow#nT<2r8B3Tl zkD1+(>m6C9|{h#ftRRj_6DxwRn<^+t+vRWm))Xb;0|oLGs2 zYM&ol-Vv$l?1(#cWA5`h5=rj}JrKr1tqDhUhfqeaXO+F9tt!^ros9H2v5=rkQXk&Y zCitL?mPB4xZ)dV2F6xnl%N#*yPBkm`7N~=!+op7McO*ws($GPZ8X!1hG7-GBlJyOY%S(Y9WA&Luu73&m%VAxJfq}j zF-FAv(Jp#5^>jMT;=*7uYH#W4=!!J1ibv#@jyAjCwg869(vs*nIpSy$r-e3=qs7p6 zuqT-(s0c}v_LeYB6H2ujCDq6h4kK>>AA3tYmPjtgL9?|)Bf&PBWD6#pM6ZM`Gp0gA zS`FC>Ab3+E($LX`^)(dcO5{}B!M5czwKk)=@19Qg^x@O2gkxoIG~ijKBqRE73C+M`KZ%SpY#PS{7ag{BWF z<{6o>-uCROTN2@5XC$wsJ(3h$>%hw!>mIf(i?EujoKWzsRM$}uCm4>zbWUB^yIC^&uz8xp#=6H3j}x>|Y8!Uh#>L~I9FV=QY& zqJCk`oIDb_wmM++cH%Vl1jETjFtGxGylhX#b^6a5*Adi(dmx)If?`jMl$Q1mU7pi{ zvx+U>Da@^_B}oPs$BIl(ODNmRFry-ksZUqb=MMZY1+tKo-3N zd->!@)uJkaa(B?Z(H-nGXdNr)rV=}DZ_DjwY?u>NH%Y&WH9HQ~N z%aGGLCXsAwX$!Y>_I6?C!5Fo4_fSJ(^llB{+Z#!YHSytSPi&Vid+njg=p;r7{@f_R zpBW|i^P>d!G>Y~3j`rh&?bhR}t6JtZs!fYUZauEjtcu)*U?9>S>sh5@a}q=AaYEy0 zH*&o#8R~2~&SvCIi`5Vo7BP&-yCW+^j;nxIH_68VngENdo7}XBb9;5YE7;u_>LgPV z?@dOAF=Cag%)t$}DxXlt_6D(?Xy}BxXwK|u$2BdsBlHNvDXea?>(y0_g2FDg09HC- zmLP>uS`zDNGfI^U7gpFrsruMP1Jw|y&7d%M6V;G$B&X+^HeOe!Hq^|SU$dZ5nSESi zjiq63U{RwoFR);arGZjwL*t@4(@G8-3D^Q>OIWyFG>QD2GF_YAT;ovJ-4OgM)3zf(wPoY=iZd0wm?@mpsD>_?P3}HTISWwuWKybVTrf}lO zft_G#Vpt264F?&T2=&6p?dTpgB37AhL=)ObWVMkSAr);)jE75RB$1dWF0+p15rc5t zFEH6VH;A0Rt0PubxuB|Mp0%N7UQJb_qk*(k+1b(FZEFlHY?)V6+h_?=)h${Y$S;}? z6KGoi6;@TwtFb4tsLYjN4@KHLy5XjG+UV}4fQqeTt1QA7vl_0L8tJC6q0V>9i45C`7tyY!ReyFym>7F>>`^{YHGAp&8w?A#xXz8 z)PQ3UShB!o6q^=0YGdJEBS^N@2CAAGTIv?qjRN{Pi9J>{6bzqege1rIMtUPk9qfv$ zN<D+>FW9E|5ZLI8-Z>)>tC~WwI_nr2}klq#OpS4=;(y0bK(i%3mIMnwYg1)-8_zkIsSVFXIr=^FlSLs zLxZg@&?0P(yP>A4X;EF{aYl7i#&+adjXWdli-;I5p>$I`67Nk!6^c$oeA*%c6*?VO zxC-sbsMAo4=)fXQ^Wvc@>u@$?Bgg4V5)O}JIKZ=rhcsR~#SzI^*#z^;N0v^pcj0m- z>V!2U;!1M}G4;$72$d5>bqMO(gPnmmwm${Uf<%t2oSIkJ)80!Df*H&-3Wn)e7H6WK zDF!FFJ?-t0p1cuf#Jk&xD&F%!v>KtM9rmSLD2~FbM8uvA6IC-ZyK-Y^`NYU7OfPts6O;chd>R;B=75sx-x{v#2$IG~lwae33MT~K~oQ)4YTMMf-6(iww` z5KtHeJ5dP|HdE~&S0tdbi58mc(FKMRj}t}{L5SU*R40o5N85}%akSgigBeid=+nTA zD#K4^e}-bc-EHu46pSBHVRRZX1zuLh^Bk@!BZerWAYz~FdXL|KX>kc(@Pv#2Qo1x_kBHv6Ob%3cCw7Q zI*e^hi)_mXWNX8zBT&LUoqAqYc(_y{dn0UtVWY#QHJ0I_d(Dt(UiO-`lY+$fMNrJK zbj0+INLv+7bV5AbESpj~eR`hZrc@b^7iLGb#tp1S;P*N5uZ7d9lCBT zxHB1Rio-)ohA#Lad`(L0g4FL%C}V#tUP@U-E*ObU2K$#)MIWF!N$73}IvvB+%1=If$io z2uHagj%&(8`;qn{nsKoQJ6*WQVu{`!fmCbF$fOQYLOc>_TND%~z}pbT)gI{)xWyE0 z;Y) zl>}lfS5r4ONk<4wBW-Gv@d=Guxg2*#d!(o;LfTy-Je)|IiB%fnv7~)IZF?%I3xlMV zZsa`_!dL=HxM8;H;HpmQ=B(}PfU}zj)0t@Og(9)7T(!7*N>*T3gVbHs8S8CZm8n`V zv9^dW)4xRT?9KEqnOt3R2;z&9vXaB5R#Y5w08y2!AYG0mTTpWFp+t7b!9+EwDi-V9 z6WNlIgN_i~4nBnF_Fu9G63|Q&GzT3WiHOWQ;gzl`5k5po7dGY5|Cz-9^Wz`!U-!=RJYe^^{|tli zd!h{XCS#(tc!UI5^wd40e_<+R|DzrmYVU%WDWYzE3bg--{z%Fqt7u*5qg47#n3&D@ zAJF`Qh|~Z3?tAX~vkSE+j!pmfU4LON$NsNz&F=P}U%)+asr#>Y$j@=A`LA})&vD7C zq>d5uzQ~^+?1p=gt-C}k40ia$NU}gw4AT}eu9HzF{RpHjW0dUkkR!y6Bfg6D;8N*G zIu{73$lyh+3+Pd+Q)!6lNo6kR-MCOo64_fPe=cZq>TH1fL4Q||exriEf z4Q{TI&djyLmbjNhauI5%H$-l`!-z!4nYD=M$SMNt7S)KbTUXf2NH(|e2318s^A z4#-tWSbB)s8j2wf?_xpLW*7Y+PlVj!P72>G!f$YdWARnO5lUDMC(0t;6nN}J8BU>6 zxp3iBd!nPgo2DC4$O)0_s;US-&51$_BGlTtc{NJi!p15KQ6H4IFd9q7646+^UR`73yc)Asl=H#$^z1Xf zHR6v77nWYx&sg_}J_D*cR2((bVsZY+iyyOxb!&!}bW zHONL^&&J-u#@=mU-e6-_TabUi3fKgYA>)j#OPosjj0{*9_G)Q+3T!U6rb9w(6=TXosO{#mb>RzI{m#XgLR92y~<5l)6mCaJw zuT|EpvSli3QP~WY1yvSOy^X53No8#+i>Rz!E$mQ7ov5--m365_F?IAw>gXPIbV41S zR7dx!qnE3;73%1fDqE$plhxwisKviki+-n$`GZ=xnyKs*rtYqrP?ep5>`cH}fU|)<2XHRnJiz%(9e*KH_g${;dl8Bkqj(A6Qov;(zZ`G{;E$+Z z3AhS_T+P&yKEP77rEvRp0_8S;ewOi2+JOiEq zuWbX|2DlydI{J{0;DTz-xfl zA@7@jw*YSg-T}M|cn|PCQ%e(SX;Lly5T%a*&}Zq#0O+>#6Ht7L{4>DkfG+@F0=@!# z4fqD|EolA$_zv&`;9r0r0YkLdI7Fuc)&WijoB=qKtNWhA)dSDts&)ZaCjtByakcCc zv|R?c9B>8Tk6fK{74mBUeSnR89MT&BH*wW=Gx9Bfttj7u{8qp=z-@rr0e=GA0k{)z z7vOHdJ%D=w_W|zbDt`d^gMfzs4+9iBg zRlwf>f9Gn2U#)lzO>dz1CQxq!-a+|2!25s?Q2&UlmXEpp6VC0Q0R{kHa^SxLJkRY_ zTs`7j6#oJE4)8s?{eT(%3-E8ikHEbS_z5rsSS^o})v0H4`#M>+pC-#{#p!@E0A~Wu z0-Oy?c8;uC&IOzYSdaRJfDM3)&`xj(;8MV4fXe|_0R9NL5`Ytb6|$>AehuWQTbowaTfbW++u%Dw%9wYc8qMt z$SV7*3^elR!RiIs4zr_LQ}Q@ft$a>aEBgT;tpsW104QEWeFtC=uv50fQrKZB?64Ge zSPCpNXt0izFfx^=f#z?r{qHjHuc1u%lkG9vI6FqP+uxAw_TSmmsc*~U9QK!RX-s`j zw!cgH`?CEV?y!F-JM13;J^{Q1_zdtl;0vPpO17WMY%1$lR5k#3QBmjY01N_l0$u{{ zWxy+dR{?(m{2lNb;B~+oifVro`CE!=dz;#1b+l8PW$U9 ze~I$dG~(CFIG4)4L7#7F3_8`wzXN;^_yO=w#lDrXae4MTS)Tn4mWQ*h*zaP@uDMnA zZ$-8K2%?_=L&`YZkEd8vw#H&#&8*`*_KTVKA^H}l#2A;v7djb}B^z_OGG!zRB^FAo zl&IOnMv0vg2PIC4Qx9%-6D1dzIh``&JP-U`IRg=J=5|qvMlojQhZ|tf=2Mw_GChb9 zbLC~EwT~1|F-dr42vbViNXau&8njeo#Dx(T1~K`tB%B+v$igWn8Oe_I+i7ti4QV{SwFYvO9OS}BYG&jk{9rzhB_age9u-EGWE*6>>7P_;0FLy7nLK?KN(Cam})2_1ak%mz< zFH@CSVR7MZ{XmqDW-R*8aNusYJF}0xBN$p)5h!WxE%|PDK9L#3IEp5Z{z zpBX|a(2Bx}sgp>syP#w&Bj?4%yU1KfZo{Ni`k%8k%V>(aj;;Tq@Pkv8$)#7)s{RMw(B_0!jj0+Iu0F#xInmeU9bQ zzKfVNp@B*JH8N@cCMF%Qm`T%?FzHa6Y|odD;7f_^aTBEJ4!hkW%~XyjmcOFp*IYWf znM*TN*$-!9Or5w3;y~d8Mk=`rP`$T%bNFQLd zln)w`&;{z1<%dPfBO-lNq>p8%xL!>0LNUb+Y&+76*yBhqW=|l!gguG$Qub%0m$9di zUe2CIdIft1=^xp%NUvmnL3$N?4(ZkGuSl<9&m-+)FCg8>Qb;$kG}6tir_eqb6SiT$ zT+jM}x`7QKy^+0$^d`0g>CJ2q=@zyV=~ng<(p%VR(C7hBi1%fhko1a3UllX`n=!?| zi#_w2G40pIHhM#}zlk~CjzES%lW!xv6Tu9FCf`MRHv$?4O}>xxUiJaf``Cv_p-J`; z^U5%nhg&{oR>r?)>=S0?{GSZbjaBCVX6!R&RrpVgea@^FzM8Y6*cU{(hO*DKQ#ebd^dFhNhU=$te}%r52PdYQC)7`nf+Z=v1YOqgls*N_jM{0)%c&M9lTyw5 z*Y7U{_ag?ar*r)b9z2ta%2`}Ln+MO~spfs__mzVCr1X9CbGas!2F~L=Tk);7;WuzT zSAf!_;04^s*Hey`;DwpO2D4M(A}*mcF?cZ-*(JRBQYr;5#XR(VS})`J<)~K(aYglt zk<~w0KC?>eaa2m57TCx|`RJ5>P^LUHr5}u{i_|0$D~)h0WglhXPo-s(JkwR5of2>&x!<$gWjf0n29&D{U1w0$yM8{r!A4<+V3(-o%Zrw%xnF_&@Awx1#I5Bf9P|ySAtG zWf?NZ?qq{|Aam|cw$mgFruC&6GS}|%zGRZU@E_#ObD-)x7~gd}TT(h$5s}heEFyKXRz<&&&$41MMa`n$#Am6QnpMA<&$4A|s{SRLWgo76 z#b!A&HJknko8`>Z?D`fy%ay4)^e@<~Jle!t1ws!{8eGd;Z^0A{jQ@3`X`%mDB0m;; zMUx=-tsHxbZ9@p)l=4-J!}SVFRfrj|lGW}mPTBrla)eFpvP2k7ip_GbF6dGsY_Vhz zr1brWB&AO-__ZWOm?rghSv>F_?Ge_gv^6{ZZ}C*=PF*W~G^`ASl%Qr)Y;qrLkA54v zcUoYe>Ycoj9YB@!y%BaGjn!!}DD>NT(H%oWo`Z?^FY+rjxTJLameS0GLG!;$gBa^< z`4c88OSd5UgV(_&d4K5+E-3}logC4DnG{!er3_lm9cxw*Bz;I;R0 z-j~yUKd--=%QPFpJW9%usRR*OQkzYD-P^pDgW0z!m({0g{3uTMlu^-vW{nAi?IFF@ar2sK-3XAOv zDg6V120Cw}7_4dmQThsm^uF39(%eZ1K#GXv=q!(tLb^>+K4C3C03C~|qsQoI6&(YM zD0msofp-FLUV=c4;j)2B2PdWagOh>U%OZAu;{)^)HK&91cn z6j^_k*SpyA!L0ag(fqrwWf6&*N+rNxAl20oFaiB zi`n`@4uTAEYbpmpwzxGd5SW@zwOXwwHuv*+{aiYrSrHs3O(N22k<=@e)yiP=0PhbB zaMtV)R(KMw`dM@fCX!@AnB6Gd!az3$PlC8UHb!8)78rl8}1=r{l;aDZ&EG?8O^x z8JXS49D>4STDX2;;SEN!G&DQO_>j@?pHJ%-oJVyycy%IY!TJbm-ofj4aLF7FW^5i^ zKh))Q+6qBh^{`^JtO;8@Q-q-mK|TA3fjeFP3*^Ev!d4LjmqAJ;qx&?A;{D6e5GfL) zy~yid#AwDOJC)W!uJ7c*muNν9y?q9wQt^oA%Gi~Y)(P{u5up#}_N>=hKnz077! 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 diff --git a/assets/javascripts/plupload/plupload.html4.js b/assets/javascripts/plupload/plupload.html4.js index 087002c1..6ffdec9c 100644 --- a/assets/javascripts/plupload/plupload.html4.js +++ b/assets/javascripts/plupload/plupload.html4.js @@ -68,7 +68,7 @@ type = plupload.mimeTypes[ext[y]]; - if (type) { + if (type && plupload.inArray(type, mimes) === -1) { mimes.push(type); } } @@ -106,7 +106,9 @@ // Route click event to input element programmatically, if possible if (up.features.triggerDialog && browseButton) { plupload.addEvent(getById(up.settings.browse_button), 'click', function(e) { - input.click(); + if (!input.disabled) { + input.click(); + } e.preventDefault(); }, up.id); } @@ -116,7 +118,7 @@ width : '100%', height : '100%', opacity : 0, - fontSize: '999px' // force input element to be bigger then needed to occupy whole space + fontSize: '99px' // force input element to be bigger then needed to occupy whole space }); plupload.extend(form.style, { @@ -374,6 +376,13 @@ } }); + uploader.bind("DisableBrowse", function(up, disabled) { + var input = document.getElementById('input_' + currentFileId); + if (input) { + input.disabled = disabled; + } + }); + // Completely destroy the runtime uploader.bind("Destroy", function(up) { diff --git a/assets/javascripts/plupload/plupload.html5.js b/assets/javascripts/plupload/plupload.html5.js index 3e5ecfc5..0f9e2a7b 100644 --- a/assets/javascripts/plupload/plupload.html5.js +++ b/assets/javascripts/plupload/plupload.html5.js @@ -210,7 +210,7 @@ * @param {function} callback Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. */ init : function(uploader, callback) { - var features; + var features, xhr; function addSelectedFiles(native_files) { var file, i, files = [], id, fileNames = {}; @@ -289,7 +289,7 @@ type = plupload.mimeTypes[ext[y]]; - if (type) { + if (type && plupload.inArray(type, mimes) === -1) { mimes.push(type); } } @@ -357,7 +357,10 @@ // Route click event to the input[type=file] element for supporting browsers if (up.features.triggerDialog) { plupload.addEvent(browseButton, 'click', function(e) { - document.getElementById(up.id + '_html5').click(); + var input = document.getElementById(up.id + '_html5'); + if (input && !input.disabled) { // for some reason FF (up to 8.0.1 so far) lets to click disabled input[type=file] + input.click(); + } e.preventDefault(); }, up.id); } @@ -474,7 +477,20 @@ plupload.extend(inputContainer.style, { zIndex : zIndex - 1 }); - } + } + } + }); + + uploader.bind("DisableBrowse", function(up, disabled) { + var input = document.getElementById(up.id + '_html5'); + if (input) { + input.disabled = disabled; + } + }); + + uploader.bind("CancelUpload", function() { + if (xhr.abort) { + xhr.abort(); } }); @@ -511,13 +527,13 @@ function prepareAndSend(bin) { var multipartDeltaSize = 0, - xhr = new XMLHttpRequest, - upload = xhr.upload, - boundary = '----pluploadboundary' + plupload.guid(), formData, dashdash = '--', crlf = '\r\n', multipartBlob = '' + boundary = '----pluploadboundary' + plupload.guid(), formData, dashdash = '--', crlf = '\r\n', multipartBlob = ''; + xhr = new XMLHttpRequest; + // Do we have upload progress support - if (upload) { - upload.onprogress = function(e) { + if (xhr.upload) { + xhr.upload.onprogress = function(e) { file.loaded = Math.min(file.size, loaded + e.loaded - multipartDeltaSize); // Loaded can be larger than file size due to multipart encoding up.trigger('UploadProgress', file); }; @@ -525,8 +541,8 @@ xhr.onreadystatechange = function() { var httpStatus, chunkArgs; - - if (xhr.readyState == 4) { + + if (xhr.readyState == 4 && up.state !== plupload.STOPPED) { // Getting the HTTP status might fail on some Gecko versions try { httpStatus = xhr.status; @@ -582,10 +598,7 @@ // Still chunks left uploadNextChunk(); } - } - - xhr = null; - + } } }; @@ -708,7 +721,7 @@ } // workaround Gecko 2,5,6 FormData+Blob bug: https://bugzilla.mozilla.org/show_bug.cgi?id=649150 - if (typeof(chunkBlob) !== 'string' && fr && features.cantSendBlobInFormData && features.chunks && up.settings.chunk_size) {// Gecko 2,5,6 + if (up.settings.multipart && features.multipart && typeof(chunkBlob) !== 'string' && fr && features.cantSendBlobInFormData && features.chunks && up.settings.chunk_size) { // Gecko 2,5,6 fr.onload = function() { prepareAndSend(fr.result); } @@ -733,8 +746,10 @@ if (res.success) { file.size = res.data.length; sendBinaryBlob(res.data); - } else { + } else if (features.chunks) { sendBinaryBlob(nativeFile); + } else { + readFileAsBinary(nativeFile, sendBinaryBlob); // for browsers not supporting File.slice (e.g. FF3.6) } }); // if there's no way to slice file without preloading it in memory, preload it @@ -1360,13 +1375,11 @@ Exif = extractTags(offsets.exifIFD, tags.exif); // Fix formatting of some tags - if (Exif.ExifVersion) { - Exif.ExifVersion = String.fromCharCode( - Exif.ExifVersion[0], - Exif.ExifVersion[1], - Exif.ExifVersion[2], - Exif.ExifVersion[3] - ); + if (Exif.ExifVersion && plupload.typeOf(Exif.ExifVersion) === 'array') { + for (var i = 0, exifVersion = ''; i < Exif.ExifVersion.length; i++) { + exifVersion += String.fromCharCode(Exif.ExifVersion[i]); + } + Exif.ExifVersion = exifVersion; } return Exif; diff --git a/assets/javascripts/plupload/plupload.js b/assets/javascripts/plupload/plupload.js index 2e903916..15bdf6d3 100644 --- a/assets/javascripts/plupload/plupload.js +++ b/assets/javascripts/plupload/plupload.js @@ -51,7 +51,14 @@ "application/vnd.ms-powerpoint,ppt pps pot," + "application/zip,zip," + "application/x-shockwave-flash,swf swfl," + - "application/vnd.openxmlformats,docx pptx xlsx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.document,docx," + + "application/vnd.openxmlformats-officedocument.wordprocessingml.template,dotx," + + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet,xlsx," + + "application/vnd.openxmlformats-officedocument.presentationml.presentation,pptx," + + "application/vnd.openxmlformats-officedocument.presentationml.template,potx," + + "application/vnd.openxmlformats-officedocument.presentationml.slideshow,ppsx," + + "application/x-javascript,js," + + "application/json,json," + "audio/mpeg,mpga mpega mp2 mp3," + "audio/x-wav,wav," + "audio/mp4,m4a," + @@ -62,7 +69,10 @@ "image/png,png," + "image/svg+xml,svg svgz," + "image/tiff,tiff tif," + + "text/plain,asc txt text diff log," + "text/html,htm html xhtml," + + "text/css,css," + + "text/csv,csv," + "text/rtf,rtf," + "video/mpeg,mpeg mpg mpe," + "video/quicktime,qt mov," + @@ -73,8 +83,7 @@ "video/avi,avi," + "video/webm,webm," + "video/vnd.rn-realvideo,rv," + - "text/csv,csv," + - "text/plain,asc txt text diff log," + + "application/vnd.oasis.opendocument.formula-template,otf," + "application/octet-stream,exe" ); @@ -256,6 +265,17 @@ opera: !!opera }; }()), + + /** + * Gets the true type of the built-in object (better version of typeof). + * @credits Angus Croll (http://javascriptweblog.wordpress.com/) + * + * @param {Object} o Object to check. + * @return {String} Object [[Class]] + */ + typeOf: function(o) { + return ({}).toString.call(o).match(/\s([a-z|A-Z]+)/)[1].toLowerCase(); + }, /** * Extends the specified object with another object. @@ -565,6 +585,29 @@ return arr; }, + + /** + * Find an element in array and return it's index if present, otherwise return -1. + * + * @method inArray + * @param {mixed} needle Element to find + * @param {Array} array + * @return {Int} Index of the element, or -1 if not found + */ + inArray : function(needle, array) { + if (array) { + if (Array.prototype.indexOf) { + return Array.prototype.indexOf.call(array, needle); + } + + for (var i = 0, length = array.length; i < length; i++) { + if (array[i] === needle) { + return i; + } + } + } + return -1; + }, /** * Extends the language pack object with new items. @@ -848,7 +891,7 @@ * @param {Object} settings Initialization settings, to be used by the uploader instance and runtimes. */ plupload.Uploader = function(settings) { - var events = {}, total, files = [], startTime; + var events = {}, total, files = [], startTime, disabled = false; // Inital total state total = new plupload.QueueProgress(); @@ -1100,7 +1143,7 @@ // Get start time to calculate bps startTime = (+new Date()); - } else if (up.state == plupload.STOPPED) { + } else if (up.state == plupload.STOPPED) { // Reset currently uploading files for (i = up.files.length - 1; i >= 0; i--) { if (up.files[i].status == plupload.UPLOADING) { @@ -1240,10 +1283,22 @@ */ stop : function() { if (this.state != plupload.STOPPED) { - this.state = plupload.STOPPED; + this.state = plupload.STOPPED; + this.trigger("CancelUpload"); this.trigger("StateChanged"); } }, + + /** + * Disables/enables browse button on request. + * + * @method disableBrowse + * @param {Boolean} disable Whether to disable or enable (default: true) + */ + disableBrowse : function() { + disabled = arguments[0] !== undef ? arguments[0] : true; + this.trigger("DisableBrowse", disabled); + }, /** * Returns the specified file object by id. @@ -1404,7 +1459,8 @@ * * @method destroy */ - destroy : function() { + destroy : function() { + this.stop(); this.trigger('Destroy'); // Clean-up after uploader itself diff --git a/assets/javascripts/plupload/plupload.silverlight.js b/assets/javascripts/plupload/plupload.silverlight.js deleted file mode 100644 index 6d285f7b..00000000 --- a/assets/javascripts/plupload/plupload.silverlight.js +++ /dev/null @@ -1,440 +0,0 @@ -/** - * plupload.silverlight.js - * - * Copyright 2009, Moxiecode Systems AB - * Released under GPL License. - * - * License: http://www.plupload.com/license - * Contributing: http://www.plupload.com/contributing - */ - -// JSLint defined globals -/*global window:false, document:false, plupload:false, ActiveXObject:false */ - -(function(window, document, plupload, undef) { - var uploadInstances = {}, initialized = {}; - - function jsonSerialize(obj) { - var value, type = typeof obj, isArray, i, key; - - // Treat undefined as null - if (obj === undef || obj === null) { - return 'null'; - } - - // Encode strings - if (type === 'string') { - value = '\bb\tt\nn\ff\rr\""\'\'\\\\'; - - return '"' + obj.replace(/([\u0080-\uFFFF\x00-\x1f\"])/g, function(a, b) { - var idx = value.indexOf(b); - - if (idx + 1) { - return '\\' + value.charAt(idx + 1); - } - - a = b.charCodeAt().toString(16); - - return '\\u' + '0000'.substring(a.length) + a; - }) + '"'; - } - - // Loop objects/arrays - if (type == 'object') { - isArray = obj.length !== undef; - value = ''; - - if (isArray) { - for (i = 0; i < obj.length; i++) { - if (value) { - value += ','; - } - - value += jsonSerialize(obj[i]); - } - - value = '[' + value + ']'; - } else { - for (key in obj) { - if (obj.hasOwnProperty(key)) { - if (value) { - value += ','; - } - - value += jsonSerialize(key) + ':' + jsonSerialize(obj[key]); - } - } - - value = '{' + value + '}'; - } - - return value; - } - - // Convert all other types to string - return '' + obj; - } - - function isInstalled(version) { - var isVersionSupported = false, container = null, control = null, actualVer, - actualVerArray, reqVerArray, requiredVersionPart, actualVersionPart, index = 0; - - try { - try { - control = new ActiveXObject('AgControl.AgControl'); - - if (control.IsVersionSupported(version)) { - isVersionSupported = true; - } - - control = null; - } catch (e) { - var plugin = navigator.plugins["Silverlight Plug-In"]; - - if (plugin) { - actualVer = plugin.description; - - if (actualVer === "1.0.30226.2") { - actualVer = "2.0.30226.2"; - } - - actualVerArray = actualVer.split("."); - - while (actualVerArray.length > 3) { - actualVerArray.pop(); - } - - while ( actualVerArray.length < 4) { - actualVerArray.push(0); - } - - reqVerArray = version.split("."); - - while (reqVerArray.length > 4) { - reqVerArray.pop(); - } - - do { - requiredVersionPart = parseInt(reqVerArray[index], 10); - actualVersionPart = parseInt(actualVerArray[index], 10); - index++; - } while (index < reqVerArray.length && requiredVersionPart === actualVersionPart); - - if (requiredVersionPart <= actualVersionPart && !isNaN(requiredVersionPart)) { - isVersionSupported = true; - } - } - } - } catch (e2) { - isVersionSupported = false; - } - - return isVersionSupported; - } - - plupload.silverlight = { - trigger : function(id, name) { - var uploader = uploadInstances[id], i, args; - - if (uploader) { - args = plupload.toArray(arguments).slice(1); - args[0] = 'Silverlight:' + name; - - // Detach the call so that error handling in the browser is presented correctly - setTimeout(function() { - uploader.trigger.apply(uploader, args); - }, 0); - } - } - }; - - /** - * Silverlight implementation. This runtime supports these features: jpgresize, pngresize, chunks. - * - * @static - * @class plupload.runtimes.Silverlight - * @extends plupload.Runtime - */ - plupload.runtimes.Silverlight = plupload.addRuntime("silverlight", { - /** - * Returns a list of supported features for the runtime. - * - * @return {Object} Name/value object with supported features. - */ - getFeatures : function() { - return { - jpgresize: true, - pngresize: true, - chunks: true, - progress: true, - multipart: true, - multi_selection: true - }; - }, - - /** - * Initializes the upload runtime. This runtime supports these features: jpgresize, pngresize, chunks. - * - * @method init - * @param {plupload.Uploader} uploader Uploader instance that needs to be initialized. - * @param {function} callback Callback to execute when the runtime initializes or fails to initialize. If it succeeds an object with a parameter name success will be set to true. - */ - init : function(uploader, callback) { - var silverlightContainer, filter = '', filters = uploader.settings.filters, i, container = document.body; - - // Check if Silverlight is installed, Silverlight windowless parameter doesn't work correctly on Opera so we disable it for now - if (!isInstalled('2.0.31005.0') || (window.opera && window.opera.buildNumber)) { - callback({success : false}); - return; - } - - initialized[uploader.id] = false; - uploadInstances[uploader.id] = uploader; - - // Create silverlight container and insert it at an absolute position within the browse button - silverlightContainer = document.createElement('div'); - silverlightContainer.id = uploader.id + '_silverlight_container'; - - plupload.extend(silverlightContainer.style, { - position : 'absolute', - top : '0px', - background : uploader.settings.shim_bgcolor || 'transparent', - zIndex : 99999, - width : '100px', - height : '100px', - overflow : 'hidden', - opacity : uploader.settings.shim_bgcolor || document.documentMode > 8 ? '' : 0.01 // Force transparent if bgcolor is undefined - }); - - silverlightContainer.className = 'plupload silverlight'; - - if (uploader.settings.container) { - container = document.getElementById(uploader.settings.container); - if (plupload.getStyle(container, 'position') === 'static') { - container.style.position = 'relative'; - } - } - - container.appendChild(silverlightContainer); - - for (i = 0; i < filters.length; i++) { - filter += (filter != '' ? '|' : '') + filters[i].title + " | *." + filters[i].extensions.replace(/,/g, ';*.'); - } - - // Insert the Silverlight object inide the Silverlight container - silverlightContainer.innerHTML = '' + - '' + - '' + - '' + - '' + - '' + - ''; - - function getSilverlightObj() { - return document.getElementById(uploader.id + '_silverlight').content.Upload; - } - - uploader.bind("Silverlight:Init", function() { - var selectedFiles, lookup = {}; - - // Prevent eventual reinitialization of the instance - if (initialized[uploader.id]) { - return; - } - - initialized[uploader.id] = true; - - uploader.bind("Silverlight:StartSelectFiles", function(up) { - selectedFiles = []; - }); - - uploader.bind("Silverlight:SelectFile", function(up, sl_id, name, size) { - var id; - - // Store away silverlight ids - id = plupload.guid(); - lookup[id] = sl_id; - lookup[sl_id] = id; - - // Expose id, name and size - selectedFiles.push(new plupload.File(id, name, size)); - }); - - uploader.bind("Silverlight:SelectSuccessful", function() { - // Trigger FilesAdded event if we added any - if (selectedFiles.length) { - uploader.trigger("FilesAdded", selectedFiles); - } - }); - - uploader.bind("Silverlight:UploadChunkError", function(up, file_id, chunk, chunks, message) { - uploader.trigger("Error", { - code : plupload.IO_ERROR, - message : 'IO Error.', - details : message, - file : up.getFile(lookup[file_id]) - }); - }); - - uploader.bind("Silverlight:UploadFileProgress", function(up, sl_id, loaded, total) { - var file = up.getFile(lookup[sl_id]); - - if (file.status != plupload.FAILED) { - file.size = total; - file.loaded = loaded; - - up.trigger('UploadProgress', file); - } - }); - - uploader.bind("Refresh", function(up) { - var browseButton, browsePos, browseSize; - - browseButton = document.getElementById(up.settings.browse_button); - if (browseButton) { - browsePos = plupload.getPos(browseButton, document.getElementById(up.settings.container)); - browseSize = plupload.getSize(browseButton); - - plupload.extend(document.getElementById(up.id + '_silverlight_container').style, { - top : browsePos.y + 'px', - left : browsePos.x + 'px', - width : browseSize.w + 'px', - height : browseSize.h + 'px' - }); - } - }); - - uploader.bind("Silverlight:UploadChunkSuccessful", function(up, sl_id, chunk, chunks, text) { - var chunkArgs, file = up.getFile(lookup[sl_id]); - - chunkArgs = { - chunk : chunk, - chunks : chunks, - response : text - }; - - up.trigger('ChunkUploaded', file, chunkArgs); - - // Stop upload if file is maked as failed - if (file.status != plupload.FAILED) { - getSilverlightObj().UploadNextChunk(); - } - - // Last chunk then dispatch FileUploaded event - if (chunk == chunks - 1) { - file.status = plupload.DONE; - - up.trigger('FileUploaded', file, { - response : text - }); - } - }); - - uploader.bind("Silverlight:UploadSuccessful", function(up, sl_id, response) { - var file = up.getFile(lookup[sl_id]); - - file.status = plupload.DONE; - - up.trigger('FileUploaded', file, { - response : response - }); - }); - - uploader.bind("FilesRemoved", function(up, files) { - var i; - - for (i = 0; i < files.length; i++) { - getSilverlightObj().RemoveFile(lookup[files[i].id]); - } - }); - - uploader.bind("UploadFile", function(up, file) { - var settings = up.settings, resize = settings.resize || {}; - - getSilverlightObj().UploadFile( - lookup[file.id], - up.settings.url, - jsonSerialize({ - name : file.target_name || file.name, - mime : plupload.mimeTypes[file.name.replace(/^.+\.([^.]+)/, '$1').toLowerCase()] || 'application/octet-stream', - chunk_size : settings.chunk_size, - image_width : resize.width, - image_height : resize.height, - image_quality : resize.quality || 90, - multipart : !!settings.multipart, - multipart_params : settings.multipart_params || {}, - file_data_name : settings.file_data_name, - headers : settings.headers - }) - ); - }); - - - uploader.bind('Silverlight:MouseEnter', function(up) { - var browseButton, hoverClass; - - browseButton = document.getElementById(uploader.settings.browse_button); - hoverClass = up.settings.browse_button_hover; - - if (browseButton && hoverClass) { - plupload.addClass(browseButton, hoverClass); - } - }); - - uploader.bind('Silverlight:MouseLeave', function(up) { - var browseButton, hoverClass; - - browseButton = document.getElementById(uploader.settings.browse_button); - hoverClass = up.settings.browse_button_hover; - - if (browseButton && hoverClass) { - plupload.removeClass(browseButton, hoverClass); - } - }); - - uploader.bind('Silverlight:MouseLeftButtonDown', function(up) { - var browseButton, activeClass; - - browseButton = document.getElementById(uploader.settings.browse_button); - activeClass = up.settings.browse_button_active; - - if (browseButton && activeClass) { - plupload.addClass(browseButton, activeClass); - - // Make sure that browse_button has active state removed from it - plupload.addEvent(document.body, 'mouseup', function() { - plupload.removeClass(browseButton, activeClass); - }); - } - }); - - uploader.bind('Sliverlight:StartSelectFiles', function(up) { - var browseButton, activeClass; - - browseButton = document.getElementById(uploader.settings.browse_button); - activeClass = up.settings.browse_button_active; - - if (browseButton && activeClass) { - plupload.removeClass(browseButton, activeClass); - } - }); - - uploader.bind("Destroy", function(up) { - var silverlightContainer; - - plupload.removeAllEvents(document.body, up.id); - - delete initialized[up.id]; - delete uploadInstances[up.id]; - - silverlightContainer = document.getElementById(up.id + '_silverlight_container'); - if (silverlightContainer) { - container.removeChild(silverlightContainer); - } - }); - - callback({success : true}); - }); - } - }); -})(window, document, plupload); diff --git a/assets/javascripts/plupload/plupload.silverlight.xap b/assets/javascripts/plupload/plupload.silverlight.xap deleted file mode 100644 index 1a5cbb5681717d0799a209aeb909be2a50471a42..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 43675 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