// labels is a map of campaign statuses to // CSS classes var labels = { "In progress" : "label-primary", "Queued" : "label-info", "Completed" : "label-success", "Emails Sent" : "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() }, url: $("#url").val(), page: { name: $("#page").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(); page_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) } }) api.pages.get() .success(function(pages){ if (pages.length == 0){ modalError("No pages found!") return false } else { page_bh.add(pages) } }) } } $(document).ready(function(){ api.campaigns.get() .success(function(campaigns){ $("#loading").hide() if (campaigns.length > 0){ $("#campaignTable").show() campaignTable = $("#campaignTable").DataTable({ columnDefs: [ { orderable: false, targets: "no-sort" } ] }); $.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({ columnDefs: [ { orderable: false, targets: "no-sort" } ] }) 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) }) .bind('typeahead:autocomplete', 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) }) .bind('typeahead:autocomplete', function(ev, template){ $("#template").typeahead('val', template.name) }); // Create the landing page typeahead objects page_bh = new Bloodhound({ datumTokenizer: function(p) { return Bloodhound.tokenizers.whitespace(p.name) }, queryTokenizer: Bloodhound.tokenizers.whitespace, local: [] }) page_bh.initialize() $("#page.typeahead.form-control").typeahead({ hint: true, highlight: true, minLength: 1 }, { name: "pages", source: page_bh, templates: { empty: function(data) {return '
No pages matched that query
' }, suggestion: function(data){ return '
' + data.name + '
' } } }) .bind('typeahead:select', function(ev, page){ $("#page").typeahead('val', page.name) }) .bind('typeahead:autocomplete', function(ev, page){ $("#page").typeahead('val', page.name) }); })