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/media/js/plugins/media.views.js | |
parent | 5ddacae6306ce071d4f7e4d438960d6d3a4c6bd8 (diff) | |
download | brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.gz brdo-29a6913890a675ddf1a9239b4407f105e02dc95d.tar.bz2 |
Added drupal modules for site
Diffstat (limited to 'sites/all/modules/media/js/plugins/media.views.js')
-rw-r--r-- | sites/all/modules/media/js/plugins/media.views.js | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/sites/all/modules/media/js/plugins/media.views.js b/sites/all/modules/media/js/plugins/media.views.js new file mode 100644 index 000000000..455288d65 --- /dev/null +++ b/sites/all/modules/media/js/plugins/media.views.js @@ -0,0 +1,173 @@ +/** + * @file + * Handles the JS for the views file browser. + * + * Note that this does not currently support multiple file selection + */ + +(function ($) { + +namespace('Drupal.media.browser.views'); +Drupal.behaviors.mediaViews = { + attach: function (context, settings) { + + // Make sure when pressing enter on text inputs, the form isn't submitted + $('.ctools-auto-submit-full-form .views-exposed-form input:text, input:text.ctools-auto-submit', context) + .filter(':not(.ctools-auto-submit-exclude)') + .bind('keydown keyup', function (e) { + if(e.keyCode === 13) { + e.stopImmediatePropagation(); + e.preventDefault(); + } + }); + // Disable the links on media items list + $('.view-content ul.media-list-thumbnails a').click(function() { + return false; + }); + + // We loop through the views listed in Drupal.settings.media.browser.views + // and set them up individually. + var views_ids = []; + for(var key in Drupal.settings.media.browser.views){ + views_ids.push(key); + } + + for (var i = 0; i < views_ids.length; i++) { + var views_id = views_ids[i]; + for (var j= 0; j < Drupal.settings.media.browser.views[views_id].length; j++) { + var views_display_id = Drupal.settings.media.browser.views[views_id][j], + view = $('.view-id-' + views_id + '.view-display-id-' + views_display_id); + if (view.length) { + Drupal.media.browser.views.setup(view); + } + } + } + + // Reset the state on tab-changes- bind on the 'select' event on the tabset + $('#media-browser-tabset').bind('tabsselect', function(event, ui) { + var view = $('.view', ui.panel); + if (view.length) { + Drupal.media.browser.views.select(view); + } + }); + + } +} + +/** + * Event-function that is called with a view, when the tab containing that + * view is selected. + */ +Drupal.media.browser.views.select = function(view) { + // Reset the list of selected files + Drupal.media.browser.selectMedia([]); + + // Reset all 'selected'-status. + $('.view-content .media-item', view).removeClass('selected'); +} + +/** + * Setup function. Called once for every Media Browser view. + * + * Sets up event-handlers for selecting items in the view. + */ +Drupal.media.browser.views.setup = function(view) { + // Ensure we only setup each view once.. + if ($(view).hasClass('media-browser-views-processed')) { + return; + } + + // Reset the list of selected files + Drupal.media.browser.selectMedia([]); + + // Catch double click to submit a single item. + $('.view-content .media-item', view).bind('dblclick', function () { + var fid = $(this).closest('.media-item[data-fid]').data('fid'), + selectedFiles = new Array(); + + // Remove all currently selected files + $('.view-content .media-item', view).removeClass('selected'); + + // Mark it as selected + $(this).addClass('selected'); + + // Because the files are added using drupal_add_js() and due to the fact + // that drupal_get_js() runs a drupal_array_merge_deep() which re-numbers + // numeric key values, we have to search in Drupal.settings.media.files + // for the matching file ID rather than referencing it directly. + for (index in Drupal.settings.media.files) { + if (Drupal.settings.media.files[index].fid == fid) { + selectedFiles.push(Drupal.settings.media.files[index]); + + // If multiple tabs contains the same file, it will be present in the + // files-array multiple times, so we break out early so we don't have + // it in the selectedFiles array multiple times. + // This would interfer with multi-selection, so... + break; + } + } + Drupal.media.browser.selectMediaAndSubmit(selectedFiles); + }); + + + // Catch the click on a media item + $('.view-content .media-item', view).bind('click', function () { + var fid = $(this).closest('.media-item[data-fid]').data('fid'), + selectedFiles = new Array(); + + // Remove all currently selected files + $('.view-content .media-item', view).removeClass('selected'); + + // Mark it as selected + $(this).addClass('selected'); + + // Multiselect! + if (Drupal.settings.media.browser.params.multiselect) { + // Loop through the already selected files + for (index in Drupal.media.browser.selectedMedia) { + var currentFid = Drupal.media.browser.selectedMedia[index].fid; + + // If the current file exists in the list of already selected + // files, we deselect instead of selecting + if (currentFid == fid) { + $(this).removeClass('selected'); + // If we change the fid, the later matching won't + // add it back again because it can't find it. + fid = NaN; + + // The previously selected file wasn't clicked, so we retain it + // as an active file + } + else { + // Add to list of already selected files + selectedFiles.push(Drupal.media.browser.selectedMedia[index]); + + // Mark it as selected + $('.view-content *[data-fid=' + currentFid + '].media-item', view).addClass('selected'); + } + } + } + + // Because the files are added using drupal_add_js() and due to the fact + // that drupal_get_js() runs a drupal_array_merge_deep() which re-numbers + // numeric key values, we have to search in Drupal.settings.media.files + // for the matching file ID rather than referencing it directly. + for (index in Drupal.settings.media.files) { + if (Drupal.settings.media.files[index].fid == fid) { + selectedFiles.push(Drupal.settings.media.files[index]); + + // If multiple tabs contains the same file, it will be present in the + // files-array multiple times, so we break out early so we don't have + // it in the selectedFiles array multiple times. + // This would interfer with multi-selection, so... + break; + } + } + Drupal.media.browser.selectMedia(selectedFiles); + }); + + // Add the processed class, so we dont accidentally process the same element twice.. + $(view).addClass('media-browser-views-processed'); +} + +}(jQuery)); |