* @return void\r
*/\r
elgg.ui.widgets.init = function() {\r
+\r
+ // widget layout?\r
+ if ($(".widget_column").length == 0) {\r
+ return;\r
+ }\r
+\r
$(".widget_column").sortable({\r
items: 'div.widget',\r
connectWith: '.widget_column',\r
handle: 'div.drag_handle',\r
forcePlaceholderSize: true,\r
placeholder: 'widget_placeholder',\r
- //containment: '.widget_layout',\r
opacity: 0.8,\r
revert: 500,\r
- stop: function(event, ui) {\r
- elgg.action('widgets/move', {\r
- data: {\r
- // widget_<guid>\r
- guid: ui.item.attr('id').substring(7),\r
- // widget_col_<column>\r
- column: ui.item.parent().attr('id').substring(11),\r
- position: ui.item.index()\r
- }\r
- });\r
- }\r
+ stop: elgg.ui.widgets.move\r
});\r
\r
$('#widget_add_button a').bind('click', function(event) {\r
event.preventDefault();\r
});\r
\r
- $('.widgets_add_panel li.widget_available').bind('click', function(event) {\r
- elgg.action('widgets/add', {\r
- data: {\r
- handler: $(this).attr('id'),\r
- user_guid: elgg.get_loggedin_userid(),\r
- context: $("input[name='widget_context']").val()\r
- },\r
- success: function(json) {\r
- elgg.ui.widgets.insert(json.output);\r
- }\r
- });\r
- event.preventDefault();\r
- });\r
+ $('.widgets_add_panel li.widget_available').click(elgg.ui.widgets.add);\r
+ $('a.widget_delete_button').click(elgg.ui.widgets.remove);\r
+ $('a.widget_edit_button').click(elgg.ui.widgets.editToggle);\r
+ $('.widget_edit > form ').submit(elgg.ui.widgets.saveSettings);\r
\r
- $('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);\r
- $('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);\r
- $('.widget_edit > form ').bind('submit', elgg.ui.widgets.saveSettings);\r
elgg.ui.widgets.equalHeight(".widget_column");\r
};\r
\r
/**\r
- * Insert a new widget into the layout\r
+ * Adds a new widget\r
+ *\r
+ * Makes Ajax call to persist new widget and inserts the widget html\r
+ *\r
+ * @param {Object} event\r
+ * @return void\r
+ */\r
+elgg.ui.widgets.add = function(event) {\r
+ // widget_type_<type>\r
+ var type = $(this).attr('id');\r
+ type = type.substr(type.indexOf('widget_type_') + "widget_type_".length);\r
+\r
+ // if multiple instances not allow, disable this widget type add button\r
+ var multiple = $(this).attr('class').indexOf('widget_multiple') != -1;\r
+ if (multiple == false) {\r
+ $(this).addClass('widget_unavailable');\r
+ $(this).removeClass('widget_available');\r
+ $(this).unbind('click', elgg.ui.widgets.add);\r
+ }\r
+\r
+ elgg.action('widgets/add', {\r
+ data: {\r
+ handler: type,\r
+ user_guid: elgg.get_loggedin_userid(),\r
+ context: $("input[name='widget_context']").val()\r
+ },\r
+ success: function(json) {\r
+ $('#widget_col_1').prepend(json.output);\r
+ $('#widget_col_1').children(":first").find('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);\r
+ $('#widget_col_1').children(":first").find('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);\r
+ }\r
+ });\r
+ event.preventDefault();\r
+}\r
+\r
+/**\r
+ * Persist the widget's new position\r
*\r
- * This always inserts the widget at the top of the first column.\r
+ * @param {Object} event\r
+ * @param {Object} ui\r
*\r
- * @param {String} html The HTML of the widget\r
* @return void\r
*/\r
-elgg.ui.widgets.insert = function(html) {\r
- $('#widget_col_1').prepend(html);\r
- $('#widget_col_1').children(":first").find('a.widget_delete_button').bind('click', elgg.ui.widgets.remove);\r
- $('#widget_col_1').children(":first").find('a.widget_edit_button').bind('click', elgg.ui.widgets.editToggle);\r
+elgg.ui.widgets.move = function(event, ui) {\r
+\r
+ // widget_<guid>\r
+ var guidString = ui.item.attr('id');\r
+ guidString = guidString.substr(guidString.indexOf('widget_') + "widget_".length);\r
+\r
+ // widget_col_<column>\r
+ var col = ui.item.parent().attr('id');\r
+ col = col.substr(col.indexOf('widget_col_') + "widget_col_".length);\r
+\r
+ elgg.action('widgets/move', {\r
+ data: {\r
+ guid: guidString,\r
+ column: col,\r
+ position: ui.item.index()\r
+ }\r
+ });\r
}\r
\r
/**\r
* @return void\r
*/\r
elgg.ui.widgets.remove = function(event) {\r
- $(this).parent().parent().parent().parent().remove();\r
+ var $widget = $(this).parent().parent().parent().parent();\r
+\r
+ // if widget type is single instance type, enable the add buton\r
+ var type = $widget.attr('class');\r
+ // widget_instance_<type>\r
+ type = type.substr(type.indexOf('widget_instance_') + "widget_instance_".length);\r
+ $button = $('#widget_type_' + type);\r
+ var multiple = $button.attr('class').indexOf('widget_multiple') != -1;\r
+ if (multiple == false) {\r
+ $button.addClass('widget_available');\r
+ $button.removeClass('widget_unavailable');\r
+ $button.unbind('click', elgg.ui.widgets.add); // make sure we don't bind twice\r
+ $button.click(elgg.ui.widgets.add);\r
+ }\r
+\r
+ $widget.remove();\r
+\r
+ // widget_delete_button_<guid>\r
+ var id = $(this).attr('id');\r
+ id = id.substr(id.indexOf('widget_delete_button_') + "widget_delete_button_".length);\r
+\r
elgg.action('widgets/delete', {\r
data: {\r
- // widget_delete_button_<guid>\r
- guid: $(this).attr('id').substring(21)\r
+ guid: id\r
}\r
});\r
event.preventDefault();\r
elgg.ui.widgets.saveSettings = function(event) {\r
$(this).parent().slideToggle('medium');\r
var $widgetContent = $(this).parent().parent().children('.widget_content');\r
+ // @todo - change to ajax loader\r
$widgetContent.html('loading');\r
elgg.action('widgets/save', {\r
data: $(this).serialize(),\r