Rich.Cms.Editor = (function() {
var edit_panel = "#rich_cms_bar .panel .edit",
content_class = "rich_cms_content",
mark_class = "marked",
editable_content = {},
content_items = "";
var register = function(hash) {
$.extend(editable_content, hash);
content_items = $.keys(editable_content).join(",");
};
var editHandler = function(event) {
edit($(this));
event.preventDefault();
};
var bind = function() {
$("#rich_cms_bar .menu a.mark" ).bind("click", mark );
$(edit_panel + " a.close" ).bind("click", function() { $(edit_panel).hide(); });
$("." + content_class + "." + mark_class).live("click", editHandler );
};
var bindSeatHolders = function() {
$(content_items + "." + mark_class + ".sh_hint").bind("focus", editHandler);
};
var mark = function(event) {
$(content_items).addClass(content_class).toggleClass(mark_class);
var markedContentItems = $(content_items + "." + mark_class);
if (markedContentItems.length) {
$.each(markedContentItems, function() {
var item = $(this);
if (item.parent().is("p") && item.parent().children().length == 1) {
item.addClass("block");
}
});
bindSeatHolders();
} else {
$(content_items + ".block").removeClass("block");
$(edit_panel).hide();
}
event.preventDefault();
};
var edit = function(content_item) {
var label = $("#rich_cms_bar .edit label");
var inputs = $("#rich_cms_bar .edit form fieldset.inputs");
var text = content_item.is("textarea") || content_item.hasClass("block");
var attrs = content_item.get(0).attributes;
var match = $.grep($.makeArray(editable_content), function(hash) {
return content_item.is($.keys(hash)[0]);
})[0];
var selector = $.keys(match)[0];
var specs = $.values(match)[0];
label.html($.map(specs.keys, function(key) { return content_item.attr(key); }).join(", "));
inputs.find(":input").remove();
inputs.append("");
$.each(attrs, function(index, attribute) {
var attr = attribute.name;
if (attr.match(/^data-/)) {
var name = "content_item[" + attr.replace(/^data-/, "") + "]";
var value = content_item.attr(attr);
if (attr == specs.value) {
if (text) {
inputs.append("");
} else {
inputs.append("");
}
} else {
inputs.append("");
}
}
});
if (specs.beforeEdit) {
var identifier = $.map(specs.keys, function(key) { return "[" + key + "=" + content_item.attr(key) + "]"; }).join("");
specs.beforeEdit.apply(null, [inputs, selector, specs, identifier]);
}
$(edit_panel).show();
};
var afterUpdate = function(form, response) {
var selector = response["__selector__"];
var specs = editable_content[selector];
var identifier = $.map(specs.keys, function(key) { return "[" + key + "=" + response["__identifier__"][key.replace(/^data-/, "")] + "]"; }).join("");
var defaultFunction = function(form, response, selector, specs, identifier) {
$(identifier).html(response[specs.value.replace(/^data-/, "")]);
if (typeof(SeatHolder) != "undefined") {
SeatHolder.rebind();
}
};
(specs.afterUpdate || defaultFunction).apply(null, [form, response, selector, specs, identifier]);
};
return {
init: function() {
bind();
$.registerAjaxFormHandler({
"rich_cms_content": afterUpdate
});
},
register: register
};
}());