aboutsummaryrefslogtreecommitdiff
path: root/js/lib/ui.widgets.js
diff options
context:
space:
mode:
Diffstat (limited to 'js/lib/ui.widgets.js')
-rw-r--r--js/lib/ui.widgets.js88
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);