(function ($) {
$.fn.kalturaEditableName = function (opts) {
// support multiple elements
if (this.length > 1) {
this.each(function () {
$(this).kalturaEditableName(opts)
});
return this;
}
// private vars;
var _currentContent;
var _$inputBox;
var _$wait;
var self = this, $self = jQuery(this);
// private function;
var _onNameClick = function (args) {
jQuery(self).unbind('click');
_$wait = jQuery('Saving...');
_$wait.hide();
_$inputBox = jQuery('');
_$inputBox.attr('name', options.name);
_$inputBox.blur(_onInputBlur);
_$inputBox.keypress(_onInputKeyPress);
_currentContent = jQuery.trim(jQuery(this).text());
_$inputBox.val(_currentContent);
jQuery(self).empty().append(_$inputBox).append(_$wait);
_$inputBox.focus();
}
var _onInputBlur = function (args) {
_save();
}
var _onInputKeyPress = function (args) {
if (args.keyCode == 13) {
_save();
return false;
}
if (args.keyCode == 27) {
_finishEditing();
return false;
}
}
var _save = function () {
if (_currentContent != _$inputBox.val()) // if changed
{
var params = {};
params[options.namePostParam] = _$inputBox.val();
params[options.idPostParam] = self.attr('id').replace(options.idPrefix, '');
_$inputBox.hide();
_$wait.show();
jQuery.ajax({
url : options.url,
data : params,
type : 'POST',
success: _onSaveHandler,
error : _onErrorHandler
});
}
else {
_finishEditing();
}
}
var _onSaveHandler = function (data) {
if (data != 'ok')
return _onErrorHandler();
_currentContent = _$inputBox.val();
_finishEditing();
}
function _onErrorHandler() {
_finishEditing();
}
var _finishEditing = function () {
jQuery(self).click(_onNameClick).empty().append(_currentContent);
}
// options
var defaultOptions = { name: 'name' };
var options = $.extend({}, defaultOptions, opts);
this.intialize = function () {
this.click(_onNameClick);
return $self;
};
return this.intialize();
}
})(jQuery);