diff -r d6c7b310295d -r a86a69394a95 includes/clientside/sbedit.js --- a/includes/clientside/sbedit.js Sun Mar 22 00:46:44 2009 -0400 +++ b/includes/clientside/sbedit.js Sun Mar 22 00:55:06 2009 -0400 @@ -1,193 +1,266 @@ -var disenable_currentBlock; -function ajaxDisenableBlock(id) -{ - disenable_currentBlock = document.getElementById('disabled_'+id); - ajaxGet(makeUrlNS('Special', 'EditSidebar', 'action=disenable&ajax=true&noheaders&id='+id), function() - { - if ( ajax.readyState == 4 && ajax.status == 200 ) +addOnloadHook(function() + { + load_component(['jquery', 'jquery-ui']); + $('.sbedit-column').sortable({ + handle: '.sbedit-handle', + connectWith: '.sbedit-column', + stop: function() { - if(ajax.responseText == 'GOOD') - { - if(disenable_currentBlock.style.display == 'none') - { - disenable_currentBlock.style.display = 'inline'; - } - else - { - disenable_currentBlock.style.display = 'none'; - } - } - else - { - document.getElementById('ajaxEditContainer').innerHTML = ajax.responseText; - } + ajaxUpdateSidebarOrder(); } }); + }); + +function serialize_sidebar() +{ + var columns = {}; + var i = 0; + $('.sbedit-column').each(function(i, e) + { + var arr = $(e).sortable('toArray'); + for ( var j = 0; j < arr.length; j++ ) + arr[j] = parseInt(arr[j].replace(/^block:/, '')); + + i++; + columns[i] = arr; + }); + return toJSONString(columns); } -var delete_currentBlock; -function ajaxDeleteBlock(id, oElm) +function sbedit_open_editor(a) { - delete_currentBlock = { 0 : id, 1 : oElm }; - ajaxGet(makeUrlNS('Special', 'EditSidebar', 'action=delete&ajax=true&noheaders&id='+id), function() - { - if ( ajax.readyState == 4 && ajax.status == 200 ) + if ( auth_level < USER_LEVEL_ADMIN ) + { + load_component('login'); + ajaxDynamicReauth(function(sid) { - if(ajax.responseText == 'GOOD') - { - e = delete_currentBlock[1]; - e = e.parentNode.parentNode; - e.parentNode.removeChild(e); - } - else - { - document.getElementById('ajaxEditContainer').innerHTML = ajax.responseText; - } - } - }); + 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') + .animate({ width: 500, height: 400, top: top, left: (getWidth() / 2) - 250 }, 400, function() + { + var whitey = whiteOutElement(this); + $(this).append(''); + $(this).append('

' + $lang.get('etc_save_changes') + ' | ' + $lang.get('etc_cancel') + '

'); + $.get(makeUrlNS('Special', 'EditSidebar', 'action=getsource&noheaders&id=' + this.item_id), {}, function(response, statustext) + { + $('textarea', box).attr('value', response); + $(whitey).remove(); + }, 'html'); + }) + .get(0); + box.parentdiv = parent; + box.item_id = parseInt($(parent).attr('id').replace(/^block:/, '')); } -var blockEdit_current; -function ajaxEditBlock(id, oElm) +function sbedit_edit_save(a) { - blockEdit_current = { 0 : id, 1 : oElm }; - ajaxGet(makeUrlNS('Special', 'EditSidebar', 'action=getsource&noheaders&id='+id), function() + var box = a.parentNode.parentNode; + var parent = box.parentdiv; + var whitey = whiteOutElement(box); + $.post(makeUrlNS('Special', 'EditSidebar', 'noheaders&action=save&id=' + box.item_id), { content: $('textarea', box).attr('value') }, function(response, statustext) { - if ( ajax.readyState == 4 && ajax.status == 200 ) - { - id = blockEdit_current[0]; - oElm = blockEdit_current[1]; - var thediv = document.createElement('div'); - //if(!oElm.id) oElm.id = 'autoEditButton_'+Math.floor(Math.random() * 100000); - oElm = oElm.parentNode; - var magic = $(oElm).Top() + $(oElm).Height(); - var top = String(magic); - top = top + 'px'; - left = $(oElm).Left() + 'px'; - thediv.style.top = top; - thediv.style.left = left; - thediv.style.position = 'absolute'; - thediv.className = 'mdg-comment'; - thediv.style.margin = '0'; - if(ajax.responseText == 'HOUSTON_WE_HAVE_A_PLUGIN') + whiteOutReportSuccess(whitey); + setTimeout(function() { - thediv.innerHTML = '

' + $lang.get('sbedit_msg_cant_edit_plugin_title') + '

' + $lang.get('sbedit_msg_cant_edit_plugin_body', { close_link: 'a href="#" onclick="this.parentNode.parentNode.parentNode.removeChild(this.parentNode.parentNode); return false;"' }) + '

'; - } - else - { - ta = document.createElement('textarea'); - ta.rows = '15'; - ta.cols = '50'; - ta.innerHTML = ajax.responseText; - thediv.appendChild(ta); - b = document.createElement('br'); - thediv.appendChild(b); - thediv.innerHTML += '' + $lang.get('sbedit_btn_edit_save') + ' | ' + $lang.get('sbedit_btn_edit_cancel') + ''; - } - body = document.getElementsByTagName('body'); - body = body[0]; - body.appendChild(thediv); - } + sbedit_close_editor(parent, box); + }, 1250); + }, 'html'); +} + +function sbedit_edit_cancel(a) +{ + var box = a.parentNode.parentNode; + var parent = box.parentdiv; + + sbedit_close_editor(parent, box); +} + +function sbedit_close_editor(parent, box) +{ + 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'); }); } -var blockSave_current; -function ajaxSaveBlock(oElm, id) +function sbedit_delete_block(a) { - taContent = escape(oElm.previousSibling.previousSibling.value); - taContent = taContent.replace(unescape('%0A'), '%0A'); - taContent = taContent.replace('+', '%2B'); - blockSave_current = { 0 : id, 1 : oElm }; - ajaxPost(makeUrlNS('Special', 'EditSidebar', 'noheaders&action=save&id='+id), 'content='+taContent, function() + 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 ( ajax.readyState == 4 && ajax.status == 200 ) + if ( response == 'GOOD' ) { - id = blockSave_current[0]; - oElm = blockSave_current[1]; - eval(ajax.responseText); - if(status == 'GOOD') - { - var _id = 'disabled_' + String(id); - var parent = document.getElementById(_id).parentNode.parentNode; - oElm.parentNode.parentNode.removeChild(oElm.parentNode); - content = content.replace('%a', unescape('%0A')); - var obj = ( IE ) ? parent.firstChild.nextSibling.nextSibling : parent.firstChild.nextSibling.nextSibling.nextSibling; - if ( obj ) - obj.innerHTML = content; // $content is set in ajax.responseText - } - else - { - alert(status); - } + whiteOutReportSuccess(whitey); + setTimeout(function() + { + $(parent) + .hide('blind', { duration: 500 }, function() + { + $(this).remove(); + ajaxUpdateSidebarOrder(); + }); + }, 1250); } - }); + else + { + whiteOutReportFailure(whitey); + alert(response); + } + }, 'html'); } -function ajaxRenameSidebarStage1(parent, id) +function sbedit_rename_block(a) { - var oldname = parent.firstChild.nodeValue; - parent.removeChild(parent.firstChild); - parent.ondblclick = function() {}; - parent._idcache = id; - var input = document.createElement('input'); - input.type = 'text'; - input.sbedit_id = id; - input.oldvalue = oldname; - input.onkeyup = function(e) - { - if ( typeof(e) != 'object' ) - return false; - if ( !e.keyCode ) - return false; - if ( e.keyCode == 13 ) + 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) { - ajaxRenameSidebarStage2(this); - } - if ( e.keyCode == 27 ) - { - ajaxRenameSidebarCancel(this); - } - }; - input.onblur = function() - { - ajaxRenameSidebarCancel(this); - }; - input.value = oldname; - input.style.fontSize = '7pt'; - parent.appendChild(input); - input.focus(); + 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 ajaxRenameSidebarStage2(input) +function sbedit_disenable_block(a) { - var newname = input.value; - var id = input.sbedit_id; - var parent = input.parentNode; - parent.removeChild(input); - parent.appendChild(document.createTextNode(( newname == '' ? '' : newname ))); - parent.ondblclick = function() { ajaxRenameSidebarStage1(this, this._idcache); return false; }; - var img = document.createElement('img'); - img.src = scriptPath + '/images/loading.gif'; - parent.appendChild(img); - newname = ajaxEscape(newname); - ajaxPost(makeUrlNS('Special', 'EditSidebar', 'ajax&noheaders&action=rename&id='+id), 'newname=' +newname, function() + 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 ( ajax.readyState == 4 && ajax.status == 200 ) + if ( response == 'GOOD' ) { - parent.removeChild(img); - if ( ajax.responseText != 'GOOD' ) - new messagebox(MB_OK|MB_ICONSTOP, 'Error renaming block', ajax.responseText); + whiteOutReportSuccess(whitey); + $(parent).toggleClass('disabled'); } - }); + else + { + whiteOutReportFailure(whitey); + alert(response); + } + }, 'html'); } -function ajaxRenameSidebarCancel(input) +function sbedit_get_parent(a) { - var newname = input.oldvalue; - var id = input.sbedit_id; - var parent = input.parentNode; - parent.removeChild(input); - parent.appendChild(document.createTextNode(newname)); - parent.ondblclick = function() { ajaxRenameSidebarStage1(this, this._idcache); return false; }; + var o = a.parentNode; + while ( !$(o).hasClass('sbedit-block') ) + o = o.parentNode; + + return o; } +function ajaxUpdateSidebarOrder() +{ + setAjaxLoading(); + var ser = serialize_sidebar(); + $.post(makeUrlNS('Special', 'EditSidebar', 'update_order'), { order: ser }, function(response, statustext) + { + var msg = document.createElement('div'); + $(msg) + .addClass('info-box-mini') + .text('Sidebar 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'); +} +