diff options
author | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-20 19:27:01 +0100 |
---|---|---|
committer | Ctibor Brančík <ctibor@brancik.cz> | 2016-03-20 19:27:01 +0100 |
commit | 29a6913890a675ddf1a9239b4407f105e02dc95d (patch) | |
tree | dd9ba21b73e9e704952b49d5153616a9dfa9b98f /sites/all/modules/plupload/plupload.js | |
parent | 5ddacae6306ce071d4f7e4d438960d6d3a4c6bd8 (diff) | |
download | brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.gz brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.bz2 |
Added drupal modules for site
Diffstat (limited to 'sites/all/modules/plupload/plupload.js')
-rw-r--r-- | sites/all/modules/plupload/plupload.js | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/sites/all/modules/plupload/plupload.js b/sites/all/modules/plupload/plupload.js new file mode 100644 index 000000000..91a5c6b21 --- /dev/null +++ b/sites/all/modules/plupload/plupload.js @@ -0,0 +1,178 @@ +(function($) { + +Drupal.plupload = Drupal.plupload || {}; +// Add Plupload events for autoupload and autosubmit. +Drupal.plupload.filesAddedCallback = function (up, files) { + setTimeout(function(){up.start()}, 100); +}; +Drupal.plupload.uploadCompleteCallback = function(up, files) { + var $this = $("#"+up.settings.container); + // If there is submit_element trigger it. + var submit_element = window.Drupal.settings.plupload[$this.attr('id')].submit_element; + if (submit_element) { + $(submit_element).click(); + } + // Otherwise submit default form. + else { + var $form = $this.parents('form'); + $($form[0]).submit(); + } +}; +/** + * Attaches the Plupload behavior to each Plupload form element. + */ +Drupal.behaviors.plupload = { + attach: function (context, settings) { + $(".plupload-element", context).once('plupload-init', function () { + var $this = $(this); + + // Merge the default settings and the element settings to get a full + // settings object to pass to the Plupload library for this element. + var id = $this.attr('id'); + var defaultSettings = settings.plupload['_default'] ? settings.plupload['_default'] : {}; + var elementSettings = (id && settings.plupload[id]) ? settings.plupload[id] : {}; + var pluploadSettings = $.extend({}, defaultSettings, elementSettings); + + // Process Plupload events. + if (elementSettings['init'] || false) { + if (!pluploadSettings.init) { + pluploadSettings.init = {}; + } + for (var key in elementSettings['init']) { + var callback = elementSettings['init'][key].split('.'); + var fn = window; + for (var j = 0; j < callback.length; j++) { + fn = fn[callback[j]]; + } + if (typeof fn === 'function') { + pluploadSettings.init[key] = fn; + } + } + } + // Initialize Plupload for this element. + $this.pluploadQueue(pluploadSettings); + + }); + } +}; + + /** + * Attaches the Plupload behavior to each Plupload form element. + */ +Drupal.behaviors.pluploadform = { + attach: function(context, settings) { + $('form', context).once('plupload-form', function() { + if (0 < $(this).find('.plupload-element').length) { + var $form = $(this); + var originalFormAttributes = { + 'method': $form.attr('method'), + 'enctype': $form.attr('enctype'), + 'action': $form.attr('action'), + 'target': $form.attr('target') + }; + + $(this).submit(function(e) { + var completedPluploaders = 0; + var totalPluploaders = $(this).find('.plupload-element').length; + var errors = ''; + + $(this).find('.plupload-element').each( function(index){ + var uploader = $(this).pluploadQueue(); + + var id = $(this).attr('id'); + var defaultSettings = settings.plupload['_default'] ? settings.plupload['_default'] : {}; + var elementSettings = (id && settings.plupload[id]) ? settings.plupload[id] : {}; + var pluploadSettings = $.extend({}, defaultSettings, elementSettings); + + //Only allow the submit to proceed if there are files and they've all + //completed uploading. + //TODO: Implement a setting for whether the field is required, rather + //than assuming that all are. + if (uploader.state == plupload.STARTED) { + errors += Drupal.t("Please wait while your files are being uploaded."); + } + else if (uploader.files.length == 0 && !pluploadSettings.required) { + completedPluploaders++; + } + + else if (uploader.files.length == 0) { + errors += Drupal.t("@index: You must upload at least one file.\n",{'@index': (index + 1)}); + } + + else if (uploader.files.length > 0 && uploader.total.uploaded == uploader.files.length) { + completedPluploaders++; + } + + else { + var stateChangedHandler = function() { + if (uploader.total.uploaded == uploader.files.length) { + uploader.unbind('StateChanged', stateChangedHandler); + completedPluploaders++; + if (completedPluploaders == totalPluploaders ) { + //Plupload's html4 runtime has a bug where it changes the + //attributes of the form to handle the file upload, but then + //fails to change them back after the upload is finished. + for (var attr in originalFormAttributes) { + $form.attr(attr, originalFormAttributes[attr]); + } + // Click a specific element if one is specified. + if (settings.plupload[id].submit_element) { + $(settings.plupload[id].submit_element).click(); + } + else { + $form.submit(); + } + return true; + } + } + }; + uploader.bind('StateChanged', stateChangedHandler); + uploader.start(); + } + + }); + if (completedPluploaders == totalPluploaders) { + //Plupload's html4 runtime has a bug where it changes the + //attributes of the form to handle the file upload, but then + //fails to change them back after the upload is finished. + for (var attr in originalFormAttributes) { + $form.attr(attr, originalFormAttributes[attr]); + } + return true; + } + else if (0 < errors.length){ + alert(errors); + } + + return false; + }); + } + }); + } +}; + + +/** + * Helper function to compare version strings. + * + * Returns one of: + * - A negative integer if a < b. + * - A positive integer if a > b. + * - 0 if a == b. + */ +Drupal.plupload.compareVersions = function (a, b) { + a = a.split('.'); + b = b.split('.'); + // Return the most significant difference, if there is one. + for (var i=0; i < Math.min(a.length, b.length); i++) { + var compare = parseInt(a[i]) - parseInt(b[i]); + if (compare != 0) { + return compare; + } + } + // If the common parts of the two version strings are equal, the greater + // version number is the one with the most sections. + return a.length - b.length; +} + +})(jQuery); |