author | Dan |
Tue, 30 Mar 2010 11:37:00 -0400 | |
changeset 1231 | 4797a4a88533 |
parent 1039 | 4226cedb3bc4 |
child 1274 | 673a1b6712fa |
permissions | -rw-r--r-- |
var sbedit_load = function() { if ( !window.jQuery ) { load_component(['jquery', 'jquery-ui']); // this seems to be the only way to make the sortables init properly // FIXME find out what we're waiting for here, and wait on it the right way window.setTimeout(sbedit_load, 200); return true; } $('.sbedit-column').sortable({ handle: '.sbedit-handle', connectWith: '.sbedit-column', stop: function() { ajaxUpdateSidebarOrder(); } }); }; addOnloadHook(sbedit_load); function serialize_sidebar() { var columns = {}; var i = 0; try { $('.sbedit-column').each(function(i, e) { // console.debug(e, ' TOARRAY: ', $(e).sortable('toArray')); var arr = $(e).sortable('toArray'); if ( !arr ) { console.error('Retrieving order failed!'); throw new Exception(); } for ( var j = 0; j < arr.length; j++ ) arr[j] = parseInt(arr[j].replace(/^block:/, '')); i++; columns[i] = arr; }); } catch ( e ) { return false; } return toJSONString(columns); } function sbedit_open_editor(a) { if ( auth_level < USER_LEVEL_ADMIN ) { load_component('login'); ajaxDynamicReauth(function(sid) { sbedit_open_editor(a); }, USER_LEVEL_ADMIN); return false; } load_component(['fadefilter', 'l10n']); var shade = darken(true, 50, 'sbedit-shade'); $(shade).css('z-index', 0); var parent = sbedit_get_parent(a); var offset = $(parent).offset(); var top = (( getHeight() ) / 2) - 200 + getScrollOffset(); var box = $(parent) .clone() .empty() .attr('id', 'sb_blockedit') .addClass('sbedit-float') .css('height', $(parent).height()) .css('top', offset.top) .css('left', offset.left) .appendTo('body'); var item_id = parseInt($(parent).attr('id').replace(/^block:/, '')); $(box) .animate({ width: 500, height: 400, top: top, left: (getWidth() / 2) - 250 }, 400, function() { var whitey = whiteOutElement(this); $(this).append('<textarea style="width: 98%; height: 360px; margin: 0 auto; display: block;" rows="20" cols="80"></textarea>'); $(this).append('<p style="text-align: center;"><a href="#" onclick="sbedit_edit_save(this); return false;">' + $lang.get('etc_save_changes') + '</a> | <a href="#" onclick="sbedit_edit_cancel(this); return false;">' + $lang.get('etc_cancel') + '</a></p>'); $.get(makeUrlNS('Special', 'EditSidebar', 'action=getsource&noheaders&id=' + item_id), {}, function(response, statustext) { $('textarea', box).val(response); $(whitey).remove(); $(box).attr('enano:item_id', item_id); }, 'html'); }) .get(0); } function sbedit_edit_save(a) { var box = a.parentNode.parentNode; var parent = document.getElementById('block:' + $(box).attr('enano:item_id')); var whitey = whiteOutElement(box); $.post(makeUrlNS('Special', 'EditSidebar', 'noheaders&action=save&id=' + $(box).attr('enano:item_id')), { content: $('textarea', box).attr('value') }, function(response, statustext) { whiteOutReportSuccess(whitey); setTimeout(function() { sbedit_close_editor(parent, box); }, 1250); }, 'html'); } function sbedit_edit_cancel(a) { var box = a.parentNode.parentNode; var parent = document.getElementById('block:' + $(box).attr('enano:item_id')); sbedit_close_editor(parent, box); } function sbedit_close_editor(parent, box) { if ( !parent ) { console.warn('Failed to get DOM object for parent, skipping transition effect'); } if ( jQuery.fx.off || !parent ) { enlighten(true, 'sbedit-shade'); $('body').get(0).removeChild(box); return true; } var offset = $(parent).offset(); $(box).empty().animate( { width: $(parent).width(), height: $(parent).height(), top: offset.top, left: offset.left, }, 400, function() { $(this).css('background-color', '#f70').fadeOut(1000, function() { $(this).remove(); }); enlighten(true, 'sbedit-shade'); }); } function sbedit_delete_block(a) { var parent = sbedit_get_parent(a); load_component(['messagebox', 'fadefilter', 'flyin', 'l10n']); var mp = miniPromptMessage({ title: $lang.get('sbedit_msg_delete_confirm_title'), message: $lang.get('sbedit_msg_delete_confirm_body'), buttons: [ { text: $lang.get('sbedit_btn_delete_confirm'), color: 'red', onclick: function() { var mp = miniPromptGetParent(this); sbedit_delete_block_s2(mp.target_block); miniPromptDestroy(this); return false; }, style: { fontWeight: 'bold' } }, { text: $lang.get('etc_cancel'), onclick: function() { miniPromptDestroy(this); return false; } } ] }); mp.target_block = parent; } function sbedit_delete_block_s2(box) { var parent = box; var id = parseInt($(parent).attr('id').replace(/^block:/, '')); var whitey = whiteOutElement(parent); $.get(makeUrlNS('Special', 'EditSidebar', 'action=delete&ajax=true&noheaders&id=' + id), function(response, statustext) { if ( response == 'GOOD' ) { whiteOutReportSuccess(whitey); setTimeout(function() { $(parent) .hide('blind', { duration: 500 }, function() { $(this).remove(); ajaxUpdateSidebarOrder(); }); }, 1250); } else { whiteOutReportFailure(whitey); alert(response); } }, 'html'); } function sbedit_rename_block(a) { var parent = sbedit_get_parent(a); $('div.sbedit-handle > span', parent).hide(); var input = $('div.sbedit-handle > input', parent).show().focus().select().keyup(function(e) { switch(e.keyCode) { case 13: // enter var whitey = whiteOutElement(this.parentNode); var me = this; var id = parseInt($(parent).attr('id').replace(/^block:/, '')); $.post(makeUrlNS('Special', 'EditSidebar', 'ajax&noheaders&action=rename&id='+id), { newname: $(this).attr('value') }, function(response, statustext) { if ( response == 'GOOD' ) { whiteOutReportSuccess(whitey); setTimeout(function() { $(me).hide(); $('span', me.parentNode).show().text(me.value); }, 1250); } else { alert(response); whiteOutReportFailure(whitey); } }, 'html'); break; case 27: // escape this.value = this.origvalue; $(this).hide(); $('span', this.parentNode).show(); break; } }).get(0); input.origvalue = input.value; } function sbedit_disenable_block(a) { var parent = sbedit_get_parent(a); var whitey = whiteOutElement(parent); $.get(makeUrlNS('Special', 'EditSidebar', 'action=disenable&ajax=true&noheaders&id=' + parseInt($(parent).attr('id').replace(/^block:/, ''))), {}, function(response, statustext) { if ( response == 'GOOD' ) { whiteOutReportSuccess(whitey); $(parent).toggleClass('disabled'); } else { whiteOutReportFailure(whitey); alert(response); } }, 'html'); } function sbedit_get_parent(a) { var o = a.parentNode; while ( !$(o).hasClass('sbedit-block') ) o = o.parentNode; return o; } function ajaxUpdateSidebarOrder() { setAjaxLoading(); var ser = serialize_sidebar(); if ( !ser ) { var msg = document.createElement('div'); $(msg) .addClass('error-box-mini') .text('jQuery failure: returned invalid serialized sidebar data') .css('position', 'fixed') .css('bottom', 1) .appendTo('body') .css('left', ( getWidth() / 2 ) - ( $(msg).width() / 2 )); setTimeout(function() { $(msg).fadeOut(500, function() { $(this).remove(); }); }, 1000); unsetAjaxLoading(); return false; } $.post(makeUrlNS('Special', 'EditSidebar', 'update_order'), { order: ser }, function(response, statustext) { var msg = document.createElement('div'); $(msg) .addClass('info-box-mini') .text($lang.get('sbedit_msg_order_saved')) .css('position', 'fixed') .css('bottom', 1) .appendTo('body') .css('left', ( getWidth() / 2 ) - ( $(msg).width() / 2 )); setTimeout(function() { $(msg).fadeOut(500, function() { $(this).remove(); }); }, 1000); unsetAjaxLoading(); }, 'json'); }