// labels is a map of campaign statuses to // CSS classes var labels = { "In progress" : "label-primary", "Queued" : "label-info", "Completed" : "label-success", "Error" : "label-danger" } // Save attempts to POST to /campaigns/ function save(){ groups = [] $.each($("#groupTable").DataTable().rows().data(), function(i, group){ groups.push({name: group[0]}) }) console.log(groups) var campaign = { name: $("#name").val(), template:{ name: $("#template").val() }, smtp: { from_address: $("input[name=from]").val(), host: $("input[name=host]").val(), username: $("input[name=username]").val(), password: $("input[name=password]").val(), }, groups: groups } // Submit the campaign api.campaigns.post(campaign) .success(function(data){ successFlash("Campaign successfully launched!") window.location = "/campaigns/" + campaign.id.toString() }) .error(function(data){ $("#modal\\.flashes").empty().append("
\ " + data.responseJSON.message + "
") }) } function dismiss(){ $("#modal\\.flashes").empty() $("#modal").modal('hide') $("#groupTable").dataTable().DataTable().clear().draw() } function edit(campaign){ // Clear the bloodhound instance group_bh.clear(); template_bh.clear(); if (campaign == "new") { api.groups.get() .success(function(groups){ if (groups.length == 0){ modalError("No groups found!") return false; } else { group_bh.add(groups) } }) api.templates.get() .success(function(templates){ if (templates.length == 0){ modalError("No templates found!") return false } else { template_bh.add(templates) } }) } } $(document).ready(function(){ api.campaigns.get() .success(function(campaigns){ $("#loading").hide() if (campaigns.length > 0){ $("#campaignTable").show() campaignTable = $("#campaignTable").DataTable(); $.each(campaigns, function(i, campaign){ label = labels[campaign.status] || "label-default"; campaignTable.row.add([ campaign.name, moment(campaign.created_date).format('MMMM Do YYYY, h:mm:ss a'), "" + campaign.status + "", "
\ \ \
" ]).draw() }) } else { $("#emptyMessage").show() } }) .error(function(){ $("#loading").hide() errorFlash("Error fetching campaigns") }) $("#groupForm").submit(function(){ groupTable.row.add([ $("#groupSelect").val(), '' ]).draw() $("#groupTable").on("click", "span>i.fa-trash-o", function(){ groupTable.row( $(this).parents('tr') ) .remove() .draw(); }) return false; }) // Create the group typeahead objects groupTable = $("#groupTable").DataTable() suggestion_template = Hogan.compile('
{{name}}
') group_bh = new Bloodhound({ datumTokenizer: function(g) { return Bloodhound.tokenizers.whitespace(g.name) }, queryTokenizer: Bloodhound.tokenizers.whitespace, local: [] }) group_bh.initialize() $("#groupSelect.typeahead.form-control").typeahead({ hint: true, highlight: true, minLength: 1 }, { name: "groups", source: group_bh, templates: { empty: function(data) {return '
No groups matched that query
' }, suggestion: function(data){ return '
' + data.name + '
' } } }) .bind('typeahead:select', function(ev, group){ $("#groupSelect").typeahead('val', group.name) }); // Create the template typeahead objects template_bh = new Bloodhound({ datumTokenizer: function(t) { return Bloodhound.tokenizers.whitespace(t.name) }, queryTokenizer: Bloodhound.tokenizers.whitespace, local: [] }) template_bh.initialize() $("#template.typeahead.form-control").typeahead({ hint: true, highlight: true, minLength: 1 }, { name: "templates", source: template_bh, templates: { empty: function(data) {return '
No templates matched that query
' }, suggestion: function(data){ return '
' + data.name + '
' } } }) .bind('typeahead:select', function(ev, template){ $("#template").typeahead('val', template.name) }) })