Файл: js/xenforo/full/discussion_list.js
Строк: 253
<?php
/** @param {jQuery} $ jQuery Object */
!function($, window, document, _undefined)
{
/**
* Initializes various controls for discussion listings
*
* @param jQuery $('form.DiscussionList')
*/
XenForo.DiscussionList = function($form) { this.__construct($form); };
XenForo.DiscussionList.prototype =
{
__construct: function($form)
{
this.$form = $form;
$('a.EditControl', this.$form).live('click', $.context(this, 'editControlClick'));
this.$editor = null;
this.loaderXhr = null;
},
/**
* Handles clicks on the 'Edit' control
*
* @param event e
*
* @return boolean
*/
editControlClick: function(e)
{
if (this.loaderXhr)
{
return false;
}
var $editControl = $(e.target),
$discussionListItem = $editControl.closest('.discussionListItem');
if (this.$editor)
{
if (this.$editor.is(':animated'))
{
return false;
}
this.$editor.xfRemove('xfSlideUp');
}
$discussionListItem.addClass('AjaxProgress');
var href = $editControl.data('href');
if (!href || href.match(/^javascript:/))
{
href = $editControl.attr('href');
}
this.loaderXhr = XenForo.ajax(
href,
'',
$.context(this, 'editorLoaded')
);
return false;
},
/**
* Runs when the ajax editor loader returns its data, initializes the new editor
*
* @param object ajaxData
* @param string textStatus
*/
editorLoaded: function(ajaxData, textStatus)
{
this.loaderXhr = null;
var $discussionListItem = $('#thread-' + ajaxData.threadId + '.discussionListItem');
if (XenForo.hasResponseError(ajaxData))
{
$discussionListItem.removeClass('AjaxProgress');
return false;
}
new XenForo.ExtLoader(ajaxData, $.context(function()
{
this.$editor = $(ajaxData.templateHtml)
.data('discussionlistitemid', $discussionListItem.attr('id'))
.xfInsert('insertAfter', $discussionListItem, 'xfSlideDown', XenForo.speed.fast, $.context(function()
{
$discussionListItem.removeClass('AjaxProgress');
$(document).trigger('TitlePrefixRecalc');
}, this));
}, this));
}
};
// *********************************************************************
/**
* Handler for the inline thread editor on thread lists
*
* @param jQuery .discussionListItemEdit
*/
XenForo.DiscussionListItemEditor = function($editor) { this.__construct($editor); };
XenForo.DiscussionListItemEditor.prototype =
{
__construct: function($editor)
{
this.$editor = $editor;
this.$saveButton = $('input:submit', this.$editor).click($.context(this, 'save'));
this.$cancelButton = $('input:reset', this.$editor).click($.context(this, 'cancel'));
},
/**
* Saves the changes made to the inline editor
*
* @param event e
*
* @return boolean
*/
save: function(e)
{
if (!this.saverXhr)
{
var ajaxData = this.$editor.closest('form').serializeArray();
ajaxData = XenForo.ajaxDataPush(ajaxData, '_returnDiscussionListItem', 1);
this.$editor.addClass('InProgress');
this.saverXhr = XenForo.ajax(
this.$saveButton.data('submiturl'),
ajaxData,
$.context(this, 'saveSuccess')
);
}
return false;
},
/**
* Cancels an edit, removes the editor
*
* @param event e
*
* @return boolean false
*/
cancel: function(e)
{
this.removeEditor();
return false;
},
/**
* Handles the save method's returned ajax data
*
* @param object ajaxData
* @param string textStatus
*/
saveSuccess: function(ajaxData, textStatus)
{
this.saverXhr = null;
this.$editor.removeClass('InProgress');
if (XenForo.hasResponseError(ajaxData))
{
return false;
}
this.removeEditor();
var $oldDiscussionListItem = $('#thread-' + ajaxData.threadId);
$oldDiscussionListItem.fadeOut(XenForo.speed.normal, function()
{
$(ajaxData.templateHtml).xfInsert('insertBefore', $oldDiscussionListItem, 'xfFadeIn', XenForo.speed.normal);
$oldDiscussionListItem.remove();
});
},
/**
* Removes the editor from the DOM
*/
removeEditor: function()
{
// TODO: why doesn't this use xfRemove() ?
this.$editor.parent().xfSlideUp(
{
duration: XenForo.speed.slow,
easing: 'easeOutBounce',
complete: function()
{
$(this).remove();
}
});
this.$editor = null;
}
};
// *********************************************************************
/**
* Pops open the thread list control panel
*
* @param jQuery .DiscussionListOptionsHandle a
*/
XenForo.DiscussionListOptions = function($handle) { this.__construct($handle); };
XenForo.DiscussionListOptions.prototype =
{
__construct: function($handle)
{
this.$handle = $handle.click($.context(this, 'toggleOptions'));
this.$options = $('form.DiscussionListOptions').hide();
this.$submit = $('input:submit', this.$options).click($.context(this, 'hideOptions'));
this.$reset = $('input:reset', this.$options).click($.context(this, 'hideOptions'));
},
/**
* Shows or hides the options panel
*
* @param event e
*
* @return boolean false
*/
toggleOptions: function(e)
{
if (this.$options.is(':animated'))
{
return false;
}
if (this.$options.is(':hidden'))
{
this.showOptions();
}
else
{
this.hideOptions();
}
return false;
},
/**
* Shows the options panel
*/
showOptions: function()
{
this.$options.xfFadeDown(XenForo.speed.normal, function()
{
$(this).find('input, select, textarea, button').get(0).focus();
});
},
/**
* Hides the options panel
*/
hideOptions: function()
{
this.$options.xfFadeUp(XenForo.speed.normal);
}
};
// *********************************************************************
XenForo.register('form.DiscussionList', 'XenForo.DiscussionList');
XenForo.register('.discussionListItemEdit', 'XenForo.DiscussionListItemEditor');
XenForo.register('#DiscussionListOptionsHandle a', 'XenForo.DiscussionListOptions');
}
(jQuery, this, document);
?>