annotate modules/dashboard/dashboard.js @ 13:134d4b2e75f6

updated quicktabs and google analytics modules
author danieleb <danielebarchiesi@me.com>
date Tue, 29 Oct 2013 13:48:59 +0000
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 /**
danielebarchiesi@0 2 * @file
danielebarchiesi@0 3 * Attaches behaviors for the Dashboard module.
danielebarchiesi@0 4 */
danielebarchiesi@0 5
danielebarchiesi@0 6 (function ($) {
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * Implements Drupal.behaviors for the Dashboard module.
danielebarchiesi@0 10 */
danielebarchiesi@0 11 Drupal.behaviors.dashboard = {
danielebarchiesi@0 12 attach: function (context, settings) {
danielebarchiesi@0 13 $('#dashboard', context).once(function () {
danielebarchiesi@0 14 $(this).prepend('<div class="customize clearfix"><ul class="action-links"><li><a href="#">' + Drupal.t('Customize dashboard') + '</a></li></ul><div class="canvas"></div></div>');
danielebarchiesi@0 15 $('.customize .action-links a', this).click(Drupal.behaviors.dashboard.enterCustomizeMode);
danielebarchiesi@0 16 });
danielebarchiesi@0 17 Drupal.behaviors.dashboard.addPlaceholders();
danielebarchiesi@0 18 if (Drupal.settings.dashboard.launchCustomize) {
danielebarchiesi@0 19 Drupal.behaviors.dashboard.enterCustomizeMode();
danielebarchiesi@0 20 }
danielebarchiesi@0 21 },
danielebarchiesi@0 22
danielebarchiesi@0 23 addPlaceholders: function() {
danielebarchiesi@0 24 $('#dashboard .dashboard-region .region').each(function () {
danielebarchiesi@0 25 var empty_text = "";
danielebarchiesi@0 26 // If the region is empty
danielebarchiesi@0 27 if ($('.block', this).length == 0) {
danielebarchiesi@0 28 // Check if we are in customize mode and grab the correct empty text
danielebarchiesi@0 29 if ($('#dashboard').hasClass('customize-mode')) {
danielebarchiesi@0 30 empty_text = Drupal.settings.dashboard.emptyRegionTextActive;
danielebarchiesi@0 31 } else {
danielebarchiesi@0 32 empty_text = Drupal.settings.dashboard.emptyRegionTextInactive;
danielebarchiesi@0 33 }
danielebarchiesi@0 34 // We need a placeholder.
danielebarchiesi@0 35 if ($('.placeholder', this).length == 0) {
danielebarchiesi@0 36 $(this).append('<div class="placeholder"></div>');
danielebarchiesi@0 37 }
danielebarchiesi@0 38 $('.placeholder', this).html(empty_text);
danielebarchiesi@0 39 }
danielebarchiesi@0 40 else {
danielebarchiesi@0 41 $('.placeholder', this).remove();
danielebarchiesi@0 42 }
danielebarchiesi@0 43 });
danielebarchiesi@0 44 },
danielebarchiesi@0 45
danielebarchiesi@0 46 /**
danielebarchiesi@0 47 * Enters "customize" mode by displaying disabled blocks.
danielebarchiesi@0 48 */
danielebarchiesi@0 49 enterCustomizeMode: function () {
danielebarchiesi@0 50 $('#dashboard').addClass('customize-mode customize-inactive');
danielebarchiesi@0 51 Drupal.behaviors.dashboard.addPlaceholders();
danielebarchiesi@0 52 // Hide the customize link
danielebarchiesi@0 53 $('#dashboard .customize .action-links').hide();
danielebarchiesi@0 54 // Load up the disabled blocks
danielebarchiesi@0 55 $('div.customize .canvas').load(Drupal.settings.dashboard.drawer, Drupal.behaviors.dashboard.setupDrawer);
danielebarchiesi@0 56 },
danielebarchiesi@0 57
danielebarchiesi@0 58 /**
danielebarchiesi@0 59 * Exits "customize" mode by simply forcing a page refresh.
danielebarchiesi@0 60 */
danielebarchiesi@0 61 exitCustomizeMode: function () {
danielebarchiesi@0 62 $('#dashboard').removeClass('customize-mode customize-inactive');
danielebarchiesi@0 63 Drupal.behaviors.dashboard.addPlaceholders();
danielebarchiesi@0 64 location.href = Drupal.settings.dashboard.dashboard;
danielebarchiesi@0 65 },
danielebarchiesi@0 66
danielebarchiesi@0 67 /**
danielebarchiesi@0 68 * Sets up the drag-and-drop behavior and the 'close' button.
danielebarchiesi@0 69 */
danielebarchiesi@0 70 setupDrawer: function () {
danielebarchiesi@0 71 $('div.customize .canvas-content input').click(Drupal.behaviors.dashboard.exitCustomizeMode);
danielebarchiesi@0 72 $('div.customize .canvas-content').append('<a class="button" href="' + Drupal.settings.dashboard.dashboard + '">' + Drupal.t('Done') + '</a>');
danielebarchiesi@0 73
danielebarchiesi@0 74 // Initialize drag-and-drop.
danielebarchiesi@0 75 var regions = $('#dashboard div.region');
danielebarchiesi@0 76 regions.sortable({
danielebarchiesi@0 77 connectWith: regions,
danielebarchiesi@0 78 cursor: 'move',
danielebarchiesi@0 79 cursorAt: {top:0},
danielebarchiesi@0 80 dropOnEmpty: true,
danielebarchiesi@0 81 items: '> div.block, > div.disabled-block',
danielebarchiesi@0 82 placeholder: 'block-placeholder clearfix',
danielebarchiesi@0 83 tolerance: 'pointer',
danielebarchiesi@0 84 start: Drupal.behaviors.dashboard.start,
danielebarchiesi@0 85 over: Drupal.behaviors.dashboard.over,
danielebarchiesi@0 86 sort: Drupal.behaviors.dashboard.sort,
danielebarchiesi@0 87 update: Drupal.behaviors.dashboard.update
danielebarchiesi@0 88 });
danielebarchiesi@0 89 },
danielebarchiesi@0 90
danielebarchiesi@0 91 /**
danielebarchiesi@0 92 * Makes the block appear as a disabled block while dragging.
danielebarchiesi@0 93 *
danielebarchiesi@0 94 * This function is called on the jQuery UI Sortable "start" event.
danielebarchiesi@0 95 *
danielebarchiesi@0 96 * @param event
danielebarchiesi@0 97 * The event that triggered this callback.
danielebarchiesi@0 98 * @param ui
danielebarchiesi@0 99 * An object containing information about the item that is being dragged.
danielebarchiesi@0 100 */
danielebarchiesi@0 101 start: function (event, ui) {
danielebarchiesi@0 102 $('#dashboard').removeClass('customize-inactive');
danielebarchiesi@0 103 var item = $(ui.item);
danielebarchiesi@0 104
danielebarchiesi@0 105 // If the block is already in disabled state, don't do anything.
danielebarchiesi@0 106 if (!item.hasClass('disabled-block')) {
danielebarchiesi@0 107 item.css({height: 'auto'});
danielebarchiesi@0 108 }
danielebarchiesi@0 109 },
danielebarchiesi@0 110
danielebarchiesi@0 111 /**
danielebarchiesi@0 112 * Adapts block's width to the region it is moved into while dragging.
danielebarchiesi@0 113 *
danielebarchiesi@0 114 * This function is called on the jQuery UI Sortable "over" event.
danielebarchiesi@0 115 *
danielebarchiesi@0 116 * @param event
danielebarchiesi@0 117 * The event that triggered this callback.
danielebarchiesi@0 118 * @param ui
danielebarchiesi@0 119 * An object containing information about the item that is being dragged.
danielebarchiesi@0 120 */
danielebarchiesi@0 121 over: function (event, ui) {
danielebarchiesi@0 122 var item = $(ui.item);
danielebarchiesi@0 123
danielebarchiesi@0 124 // If the block is in disabled state, remove width.
danielebarchiesi@0 125 if ($(this).closest('#disabled-blocks').length) {
danielebarchiesi@0 126 item.css('width', '');
danielebarchiesi@0 127 }
danielebarchiesi@0 128 else {
danielebarchiesi@0 129 item.css('width', $(this).width());
danielebarchiesi@0 130 }
danielebarchiesi@0 131 },
danielebarchiesi@0 132
danielebarchiesi@0 133 /**
danielebarchiesi@0 134 * Adapts a block's position to stay connected with the mouse pointer.
danielebarchiesi@0 135 *
danielebarchiesi@0 136 * This function is called on the jQuery UI Sortable "sort" event.
danielebarchiesi@0 137 *
danielebarchiesi@0 138 * @param event
danielebarchiesi@0 139 * The event that triggered this callback.
danielebarchiesi@0 140 * @param ui
danielebarchiesi@0 141 * An object containing information about the item that is being dragged.
danielebarchiesi@0 142 */
danielebarchiesi@0 143 sort: function (event, ui) {
danielebarchiesi@0 144 var item = $(ui.item);
danielebarchiesi@0 145
danielebarchiesi@0 146 if (event.pageX > ui.offset.left + item.width()) {
danielebarchiesi@0 147 item.css('left', event.pageX);
danielebarchiesi@0 148 }
danielebarchiesi@0 149 },
danielebarchiesi@0 150
danielebarchiesi@0 151 /**
danielebarchiesi@0 152 * Sends block order to the server, and expand previously disabled blocks.
danielebarchiesi@0 153 *
danielebarchiesi@0 154 * This function is called on the jQuery UI Sortable "update" event.
danielebarchiesi@0 155 *
danielebarchiesi@0 156 * @param event
danielebarchiesi@0 157 * The event that triggered this callback.
danielebarchiesi@0 158 * @param ui
danielebarchiesi@0 159 * An object containing information about the item that was just dropped.
danielebarchiesi@0 160 */
danielebarchiesi@0 161 update: function (event, ui) {
danielebarchiesi@0 162 $('#dashboard').addClass('customize-inactive');
danielebarchiesi@0 163 var item = $(ui.item);
danielebarchiesi@0 164
danielebarchiesi@0 165 // If the user dragged a disabled block, load the block contents.
danielebarchiesi@0 166 if (item.hasClass('disabled-block')) {
danielebarchiesi@0 167 var module, delta, itemClass;
danielebarchiesi@0 168 itemClass = item.attr('class');
danielebarchiesi@0 169 // Determine the block module and delta.
danielebarchiesi@0 170 module = itemClass.match(/\bmodule-(\S+)\b/)[1];
danielebarchiesi@0 171 delta = itemClass.match(/\bdelta-(\S+)\b/)[1];
danielebarchiesi@0 172
danielebarchiesi@0 173 // Load the newly enabled block's content.
danielebarchiesi@0 174 $.get(Drupal.settings.dashboard.blockContent + '/' + module + '/' + delta, {},
danielebarchiesi@0 175 function (block) {
danielebarchiesi@0 176 if (block) {
danielebarchiesi@0 177 item.html(block);
danielebarchiesi@0 178 }
danielebarchiesi@0 179
danielebarchiesi@0 180 if (item.find('div.content').is(':empty')) {
danielebarchiesi@0 181 item.find('div.content').html(Drupal.settings.dashboard.emptyBlockText);
danielebarchiesi@0 182 }
danielebarchiesi@0 183
danielebarchiesi@0 184 Drupal.attachBehaviors(item);
danielebarchiesi@0 185 },
danielebarchiesi@0 186 'html'
danielebarchiesi@0 187 );
danielebarchiesi@0 188 // Remove the "disabled-block" class, so we don't reload its content the
danielebarchiesi@0 189 // next time it's dragged.
danielebarchiesi@0 190 item.removeClass("disabled-block");
danielebarchiesi@0 191 }
danielebarchiesi@0 192
danielebarchiesi@0 193 Drupal.behaviors.dashboard.addPlaceholders();
danielebarchiesi@0 194
danielebarchiesi@0 195 // Let the server know what the new block order is.
danielebarchiesi@0 196 $.post(Drupal.settings.dashboard.updatePath, {
danielebarchiesi@0 197 'form_token': Drupal.settings.dashboard.formToken,
danielebarchiesi@0 198 'regions': Drupal.behaviors.dashboard.getOrder
danielebarchiesi@0 199 }
danielebarchiesi@0 200 );
danielebarchiesi@0 201 },
danielebarchiesi@0 202
danielebarchiesi@0 203 /**
danielebarchiesi@0 204 * Returns the current order of the blocks in each of the sortable regions.
danielebarchiesi@0 205 *
danielebarchiesi@0 206 * @return
danielebarchiesi@0 207 * The current order of the blocks, in query string format.
danielebarchiesi@0 208 */
danielebarchiesi@0 209 getOrder: function () {
danielebarchiesi@0 210 var order = [];
danielebarchiesi@0 211 $('#dashboard div.region').each(function () {
danielebarchiesi@0 212 var region = $(this).parent().attr('id').replace(/-/g, '_');
danielebarchiesi@0 213 var blocks = $(this).sortable('toArray');
danielebarchiesi@0 214 $.each(blocks, function() {
danielebarchiesi@0 215 order.push(region + '[]=' + this);
danielebarchiesi@0 216 });
danielebarchiesi@0 217 });
danielebarchiesi@0 218 order = order.join('&');
danielebarchiesi@0 219 return order;
danielebarchiesi@0 220 }
danielebarchiesi@0 221 };
danielebarchiesi@0 222
danielebarchiesi@0 223 })(jQuery);