summaryrefslogtreecommitdiff
path: root/sites/all/modules/plupload/plupload.js
diff options
context:
space:
mode:
authorCtibor Brančík <ctibor@brancik.cz>2016-03-20 19:27:01 +0100
committerCtibor Brančík <ctibor@brancik.cz>2016-03-20 19:27:01 +0100
commit29a6913890a675ddf1a9239b4407f105e02dc95d (patch)
treedd9ba21b73e9e704952b49d5153616a9dfa9b98f /sites/all/modules/plupload/plupload.js
parent5ddacae6306ce071d4f7e4d438960d6d3a4c6bd8 (diff)
downloadbrdo-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.js178
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);