// 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();
$.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()
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)
});
})