diff options
Diffstat (limited to 'js/lib/ui.widgets.js')
| -rw-r--r-- | js/lib/ui.widgets.js | 88 |
1 files changed, 50 insertions, 38 deletions
diff --git a/js/lib/ui.widgets.js b/js/lib/ui.widgets.js index bcace608f..26020bb4b 100644 --- a/js/lib/ui.widgets.js +++ b/js/lib/ui.widgets.js @@ -13,9 +13,9 @@ elgg.ui.widgets.init = function() { } $(".elgg-widgets").sortable({ - items: 'div.elgg-widget', + items: 'div.elgg-module-widget.elgg-state-draggable', connectWith: '.elgg-widgets', - handle: 'div.drag-handle', + handle: '.elgg-widget-handle', forcePlaceholderSize: true, placeholder: 'elgg-widget-placeholder', opacity: 0.8, @@ -23,13 +23,13 @@ elgg.ui.widgets.init = function() { stop: elgg.ui.widgets.move }); - $('.elgg-widgets-add-panel li.elgg-widget-available').click(elgg.ui.widgets.add); + $('.elgg-widgets-add-panel li.elgg-state-available').click(elgg.ui.widgets.add); $('a.elgg-widget-delete-button').live('click', elgg.ui.widgets.remove); $('.elgg-widget-edit > form ').live('submit', elgg.ui.widgets.saveSettings); $('a.elgg-widget-collapse-button').live('click', elgg.ui.widgets.collapseToggle); - elgg.ui.widgets.equalHeight(".elgg-widgets"); + elgg.ui.widgets.setMinHeight(".elgg-widgets"); }; /** @@ -48,24 +48,25 @@ elgg.ui.widgets.add = function(event) { // if multiple instances not allow, disable this widget type add button var multiple = $(this).attr('class').indexOf('elgg-widget-multiple') != -1; if (multiple == false) { - $(this).addClass('elgg-widget-unavailable'); - $(this).removeClass('elgg-widget-available'); + $(this).addClass('elgg-state-unavailable'); + $(this).removeClass('elgg-state-available'); $(this).unbind('click', elgg.ui.widgets.add); } elgg.action('widgets/add', { data: { handler: type, - user_guid: elgg.get_loggedin_userid(), - context: $("input[name='widget_context']").val() + owner_guid: elgg.get_page_owner_guid(), + context: $("input[name='widget_context']").val(), + show_access: $("input[name='show_access']").val(), + default_widgets: $("input[name='default_widgets']").val() || 0 }, success: function(json) { $('#elgg-widget-col-1').prepend(json.output); - var $widget = $('#elgg-widget-col-1').children(":first"); } }); event.preventDefault(); -} +}; /** * Persist the widget's new position @@ -87,7 +88,7 @@ elgg.ui.widgets.move = function(event, ui) { elgg.action('widgets/move', { data: { - guid: guidString, + widget_guid: guidString, column: col, position: ui.item.index() } @@ -96,7 +97,7 @@ elgg.ui.widgets.move = function(event, ui) { // @hack fixes jquery-ui/opera bug where draggable elements jump ui.item.css('top', 0); ui.item.css('left', 0); -} +}; /** * Removes a widget from the layout @@ -107,7 +108,12 @@ elgg.ui.widgets.move = function(event, ui) { * @return void */ elgg.ui.widgets.remove = function(event) { - var $widget = $(this).parent().parent(); + if (confirm(elgg.echo('deleteconfirm')) == false) { + event.preventDefault(); + return; + } + + var $widget = $(this).closest('.elgg-module-widget'); // if widget type is single instance type, enable the add buton var type = $widget.attr('class'); @@ -116,25 +122,19 @@ elgg.ui.widgets.remove = function(event) { $button = $('#elgg-widget-type-' + type); var multiple = $button.attr('class').indexOf('elgg-widget-multiple') != -1; if (multiple == false) { - $button.addClass('elgg-widget-available'); - $button.removeClass('elgg-widget-unavailable'); + $button.addClass('elgg-state-available'); + $button.removeClass('elgg-state-unavailable'); $button.unbind('click', elgg.ui.widgets.add); // make sure we don't bind twice $button.click(elgg.ui.widgets.add); } $widget.remove(); - // elgg-widget-delete-button-<guid> - var id = $(this).attr('id'); - id = id.substr(id.indexOf('elgg-widget-delete-button-') + "elgg-widget-delete-button-".length); + // delete the widget through ajax + elgg.action($(this).attr('href')); - elgg.action('widgets/delete', { - data: { - guid: id - } - }); event.preventDefault(); -} +}; /** * Toggle the collapse state of the widget @@ -144,9 +144,9 @@ elgg.ui.widgets.remove = function(event) { */ elgg.ui.widgets.collapseToggle = function(event) { $(this).toggleClass('elgg-widget-collapsed'); - $(this).parent().parent().find('.elgg-widget-container').slideToggle('medium'); + $(this).parent().parent().find('.elgg-body').slideToggle('medium'); event.preventDefault(); -} +}; /** * Save a widget's settings @@ -159,13 +159,18 @@ elgg.ui.widgets.collapseToggle = function(event) { elgg.ui.widgets.saveSettings = function(event) { $(this).parent().slideToggle('medium'); var $widgetContent = $(this).parent().parent().children('.elgg-widget-content'); - - // stick the ajaxk loader in there + + // stick the ajax loader in there var $loader = $('#elgg-widget-loader').clone(); $loader.attr('id', '#elgg-widget-active-loader'); $loader.removeClass('hidden'); $widgetContent.html($loader); + var default_widgets = $("input[name='default_widgets']").val() || 0; + if (default_widgets) { + $(this).append('<input type="hidden" name="default_widgets" value="1">'); + } + elgg.action('widgets/save', { data: $(this).serialize(), success: function(json) { @@ -173,25 +178,32 @@ elgg.ui.widgets.saveSettings = function(event) { } }); event.preventDefault(); -} +}; /** - * Make all elements have the same min-height + * Set the min-height so that all widget column bottoms are the same * * This addresses the issue of trying to drag a widget into a column that does - * not have any widgets. + * not have any widgets or many fewer widgets than other columns. * * @param {String} selector * @return void */ -elgg.ui.widgets.equalHeight = function(selector) { - var maxHeight = 0; +elgg.ui.widgets.setMinHeight = function(selector) { + var maxBottom = 0; $(selector).each(function() { - if ($(this).height() > maxHeight) { - maxHeight = $(this).height(); + var bottom = parseInt($(this).offset().top + $(this).height()); + if (bottom > maxBottom) { + maxBottom = bottom; } }) - $(selector).css('min-height', maxHeight); -} + $(selector).each(function() { + var bottom = parseInt($(this).offset().top + $(this).height()); + if (bottom < maxBottom) { + var newMinHeight = parseInt($(this).height() + (maxBottom - bottom)); + $(this).css('min-height', newMinHeight + 'px'); + } + }) +}; -elgg.register_event_handler('init', 'system', elgg.ui.widgets.init); +elgg.register_hook_handler('init', 'system', elgg.ui.widgets.init); |
