Skip to content

Instantly share code, notes, and snippets.

@davinmsu
Created March 16, 2014 06:10
Show Gist options
  • Save davinmsu/9579273 to your computer and use it in GitHub Desktop.
Save davinmsu/9579273 to your computer and use it in GitHub Desktop.
$('[data-modal]').click(function(e){
e.preventDefault();
$($(this).data('modal')).modal().open({
onOpen: function(el){
$('.like').click(function(e){
e.preventDefault();
if ($(this).hasClass('u_like')) {
$.ajax({
url: $(this).attr('href'),
type: "DELETE"
});
}
else {
$.ajax({
url: $(this).attr('href'),
type: "POST"
});
}
});
var opened = true;
var cocoon_element_counter = 0;
var create_new_id = function() {
return (new Date().getTime() + cocoon_element_counter++);
}
var newcontent_braced = function(id) {
return '[' + id + ']$1';
}
var newcontent_underscord = function(id) {
return '_' + id + '_$1';
}
$('.add_fields').click( function(e) {
e.preventDefault();
var $this = $(this),
assoc = $this.data('association'),
assocs = $this.data('associations'),
content = $this.data('association-insertion-template'),
insertionMethod = $this.data('association-insertion-method') || $this.data('association-insertion-position') || 'before',
insertionNode = $this.data('association-insertion-node'),
insertionTraversal = $this.data('association-insertion-traversal'),
count = parseInt($this.data('count'), 10),
regexp_braced = new RegExp('\\[new_' + assoc + '\\](.*?\\s)', 'g'),
regexp_underscord = new RegExp('_new_' + assoc + '_(\\w*)', 'g'),
new_id = create_new_id(),
new_content = content.replace(regexp_braced, newcontent_braced(new_id)),
new_contents = [];
if (new_content == content) {
regexp_braced = new RegExp('\\[new_' + assocs + '\\](.*?\\s)', 'g');
regexp_underscord = new RegExp('_new_' + assocs + '_(\\w*)', 'g');
new_content = content.replace(regexp_braced, newcontent_braced(new_id));
}
new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));
new_contents = [new_content];
count = (isNaN(count) ? 1 : Math.max(count, 1));
count -= 1;
while (count) {
new_id = create_new_id();
new_content = content.replace(regexp_braced, newcontent_braced(new_id));
new_content = new_content.replace(regexp_underscord, newcontent_underscord(new_id));
new_contents.push(new_content);
count -= 1;
}
if (insertionNode){
if (insertionTraversal){
insertionNode = $this[insertionTraversal](insertionNode);
} else {
insertionNode = insertionNode == "this" ? $this : $(insertionNode);
}
} else {
insertionNode = $this.parent();
}
for (var i in new_contents) {
var contentNode = $(new_contents[i]);
insertionNode.trigger('cocoon:before-insert', [contentNode]);
// allow any of the jquery dom manipulation methods (after, before, append, prepend, etc)
// to be called on the node. allows the insertion node to be the parent of the inserted
// code and doesn't force it to be a sibling like after/before does. default: 'before'
var addedContent = insertionNode[insertionMethod](contentNode);
insertionNode.trigger('cocoon:after-insert', [contentNode]);
}
});
$('.remove_fields.dynamic, .remove_fields.existing').click( function(e) {
alert(1);
var $this = $(this),
wrapper_class = $this.data('wrapper-class') || 'nested-fields',
node_to_delete = $this.closest('.' + wrapper_class),
trigger_node = node_to_delete.parent();
e.preventDefault();
trigger_node.trigger('cocoon:before-remove', [node_to_delete]);
var timeout = trigger_node.data('remove-timeout') || 0;
setTimeout(function() {
if ($this.hasClass('dynamic')) {
node_to_delete.remove();
} else {
$this.prev("input[type=hidden]").val("1");
node_to_delete.hide();
}
trigger_node.trigger('cocoon:after-remove', [node_to_delete]);
}, timeout);
});
$('.remove_fields.existing.destroyed').each(function(i, obj) {
var $this = $(this),
wrapper_class = $this.data('wrapper-class') || 'nested-fields';
$this.closest('.' + wrapper_class).hide();
});
}
});
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment