Skip to content

Commit d930cec

Browse files
committed
Newsletter widget - edit page
1 parent 0d609f8 commit d930cec

File tree

7 files changed

+154
-88
lines changed

7 files changed

+154
-88
lines changed

plugins/Common/Views/Widgets/Newsletter/Edit.cshtml

Lines changed: 14 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,7 @@
99

1010
if (string.IsNullOrEmpty(txtHeader)) { txtHeader = "<p>Like, really social. With 12 thousands followers and counting, the topics we cover and the ways readers can access our content are constantly growing.</p>"; }
1111
if (string.IsNullOrEmpty(txtThankyou)) { txtThankyou = "Thank you!"; }
12-
13-
var items = _db.Newsletters.All();
14-
}
12+
}
1513
<form method="post" action="~/widgets/api/newsletter/edit" asp-antiforgery="true">
1614
<div class="form-group">
1715
<label class="form-group-label">Newsletter Header</label>
@@ -28,48 +26,19 @@
2826
<input type="hidden" id="hdnTheme" name="hdnTheme" value="@Model.Theme" />
2927
</form>
3028

31-
@if (items != null && items.Any())
32-
{
33-
<ul class="list-group">
34-
@foreach (var item in items)
35-
{
36-
<li class="list-group-item d-flex justify-content-between align-items-center">
37-
@item.Email
38-
<a class="btn btn-sm btn-light btn-danger" href="" onclick="removeEmail('@item.Email')">Remove</a>
39-
</li>
40-
}
41-
</ul>
42-
<nav aria-label="...">
43-
<ul class="pagination">
44-
<li class="page-item disabled">
45-
<span class="page-link">Previous</span>
46-
</li>
47-
<li class="page-item active">
48-
<span class="page-link">
49-
2
50-
<span class="sr-only">(current)</span>
51-
</span>
52-
</li>
53-
<li class="page-item">
54-
<a class="page-link" href="#">Next</a>
55-
</li>
56-
</ul>
57-
</nav>
58-
}
29+
<ul class="list-group" id="lstEmails" name="lstEmails"></ul>
30+
<div class="modal-footer d-flex">
31+
<div id="email-pagination" class="file-pagination" role="group"></div>
32+
</div>
5933

60-
<script type="text/javascript">
61-
//<![CDATA[
62-
var removeEmail = function(email) {
63-
$.ajax({
64-
url: '/widgets/newsletter/unsubscribe',
65-
type: 'PUT',
66-
contentType: 'application/json',
67-
data: JSON.stringify(email),
68-
success: function (data) {
69-
//alert('done ' + data);
70-
//return false;
71-
}
72-
});
34+
<script src="~/admin/js/lib/jquery.min.js"></script>
35+
<script src="~/admin/js/lib/toastr.min.js"></script>
36+
<script src="~/admin/js/app/dataService.js"></script>
37+
<script src="~/widgets/newsletter/edit.js" asp-append-version="true"></script>
38+
<script>
39+
var webRoot = '@Url.Content("~/")';
40+
function getUrl(str) {
41+
return webRoot + str;
7342
}
74-
//]]>
43+
newsletter.load(1);
7544
</script>

plugins/Common/Views/Widgets/Newsletter/Index.cshtml

Lines changed: 1 addition & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,43 +8,4 @@
88
@Html.Raw(Model.ThankYou)
99
</div>
1010
</form>
11-
12-
<script type="text/javascript">
13-
//<![CDATA[
14-
var newsletter = function () {
15-
function subscribe() {
16-
var email = document.getElementById("txtSubscriberEmail");
17-
if (email.value.length === 0) {
18-
return false;
19-
}
20-
$.ajax({
21-
url: '/widgets/newsletter/subscribe',
22-
type: 'PUT',
23-
contentType: 'application/json',
24-
data: JSON.stringify(email.value),
25-
success: function (data) {
26-
var frm = document.getElementById("newsletter-form");
27-
var msg = document.getElementById("newsletter-msg");
28-
frm.style.display = "none";
29-
if (data.length > 0) {
30-
msg.innerHTML = data;
31-
}
32-
msg.style.display = "";
33-
return false;
34-
}
35-
});
36-
}
37-
return {
38-
subscribe: subscribe
39-
}
40-
}();
41-
document.getElementById('txtSubscriberEmail').onkeypress = function (e) {
42-
if (!e) e = window.event;
43-
var keyCode = e.keyCode || e.which;
44-
if (keyCode == '13') {
45-
newsletter.subscribe();
46-
return false;
47-
}
48-
}
49-
//]]>
50-
</script>
11+
<script src="~/widgets/newsletter/widget.js" asp-append-version="true"></script>

plugins/Common/Widgets/Newsletter.cs

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
1-
using Core.Services;
1+
using Core.Helpers;
2+
using Core.Services;
23
using Microsoft.AspNetCore.Mvc;
34
using System.Collections.Generic;
5+
using System.Threading.Tasks;
46

57
namespace Common.Widgets
68
{
@@ -41,6 +43,24 @@ public NewsletterController(IDataService db)
4143
_db = db;
4244
}
4345

46+
[Route("load")]
47+
public async Task<NewsletterModel> Load(int page = 1)
48+
{
49+
var pager = new Pager(page);
50+
IEnumerable<Core.Data.Newsletter> items;
51+
52+
items = await _db.Newsletters.GetList(e => e.Id > 0, pager);
53+
54+
if (page < 1 || page > pager.LastPage)
55+
return null;
56+
57+
return new NewsletterModel
58+
{
59+
Emails = items,
60+
Pager = pager
61+
};
62+
}
63+
4464
[HttpPut]
4565
[Route("subscribe")]
4666
public IActionResult Subscribe([FromBody]string email)
@@ -95,6 +115,7 @@ public class NewsletterModel
95115
{
96116
public string Header { get; set; }
97117
public string ThankYou { get; set; }
98-
public List<Core.Data.Newsletter> Emails { get; set; }
118+
public IEnumerable<Core.Data.Newsletter> Emails { get; set; }
119+
public Pager Pager { get; set; }
99120
}
100121
}

src/App/app.db

0 Bytes
Binary file not shown.
Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,54 @@
1+
var newsletter = function (dataService) {
2+
function unsubscribe(email) {
3+
$.ajax({
4+
url: '/widgets/newsletter/unsubscribe',
5+
type: 'PUT',
6+
contentType: 'application/json',
7+
data: JSON.stringify(email),
8+
success: function (data) {
9+
load(1);
10+
toastr.success('Removed');
11+
}
12+
});
13+
return false;
14+
}
15+
function load(page) {
16+
dataService.get('widgets/newsletter/load?page=' + page, loadCallback, fail);
17+
return false;
18+
}
19+
function loadCallback(data) {
20+
$('#lstEmails').empty();
21+
var emails = data.emails;
22+
$.each(emails, function (index) {
23+
var email = emails[index].email;
24+
var tag = '<li class="list-group-item d-flex justify-content-between align-items-center">' + email +
25+
'<a class="btn btn-sm btn-light btn-danger" href="" onclick="return newsletter.unsubscribe(\'' + email + '\')">' +
26+
'Remove</a></li>';
27+
$("#lstEmails").append(tag);
28+
});
29+
loadPager(data.pager);
30+
}
31+
function loadPager(pg) {
32+
$('#email-pagination').empty();
33+
34+
var last = pg.currentPage * pg.itemsPerPage;
35+
var first = pg.currentPage === 1 ? 1 : ((pg.currentPage - 1) * pg.itemsPerPage) + 1;
36+
if (last > pg.total) { last = pg.total; }
37+
38+
var pager = "";
39+
40+
if (pg.showOlder === true) {
41+
pager += '<button type="button" class="btn btn-sm btn-link" onclick="return newsletter.load(' + pg.older + ')"><i class="fa fa-chevron-left"></i></button>';
42+
}
43+
pager += '<span class="bf-filemanager-pagination">' + first + '-' + last + ' out of ' + pg.total + '</span>';
44+
if (pg.showNewer === true) {
45+
pager += '<button type="button" class="btn btn-sm btn-link" onclick="return newsletter.load(' + pg.newer + ')"><i class="fa fa-chevron-right"></i></button>';
46+
}
47+
$('#email-pagination').append(pager);
48+
}
49+
function fail(data) { }
50+
return {
51+
unsubscribe: unsubscribe,
52+
load: load
53+
};
54+
}(DataService);
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
var newsletter = function () {
2+
function subscribe() {
3+
var email = document.getElementById("txtSubscriberEmail");
4+
if (email.value.length === 0) {
5+
return false;
6+
}
7+
$.ajax({
8+
url: '/widgets/newsletter/subscribe',
9+
type: 'PUT',
10+
contentType: 'application/json',
11+
data: JSON.stringify(email.value),
12+
success: function (data) {
13+
var frm = document.getElementById("newsletter-form");
14+
var msg = document.getElementById("newsletter-msg");
15+
frm.style.display = "none";
16+
if (data.length > 0) {
17+
msg.innerHTML = data;
18+
}
19+
msg.style.display = "";
20+
return false;
21+
}
22+
});
23+
}
24+
return {
25+
subscribe: subscribe
26+
};
27+
}();
28+
29+
document.addEventListener("DOMContentLoaded", function (event) {
30+
document.getElementById('txtSubscriberEmail').onkeypress = function (e) {
31+
if (!e) e = window.event;
32+
var keyCode = e.keyCode || e.which;
33+
if (keyCode === 13) {
34+
newsletter.subscribe();
35+
return false;
36+
}
37+
};
38+
});

src/Core/Data/Repositories/NewsletterRepository.cs

Lines changed: 24 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,15 @@
1-
namespace Core.Data
1+
using Core.Helpers;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Linq;
5+
using System.Linq.Expressions;
6+
using System.Threading.Tasks;
7+
8+
namespace Core.Data
29
{
310
public interface INewsletterRepository : IRepository<Newsletter>
411
{
12+
Task<IEnumerable<Newsletter>> GetList(Expression<Func<Newsletter, bool>> predicate, Pager pager);
513
}
614

715
public class NewsletterRepository : Repository<Newsletter>, INewsletterRepository
@@ -12,5 +20,20 @@ public NewsletterRepository(AppDbContext db) : base(db)
1220
{
1321
_db = db;
1422
}
23+
24+
public async Task<IEnumerable<Newsletter>> GetList(Expression<Func<Newsletter, bool>> predicate, Pager pager)
25+
{
26+
var take = pager.ItemsPerPage == 0 ? 10 : pager.ItemsPerPage;
27+
var skip = pager.CurrentPage * take - take;
28+
29+
var emails = _db.Newsletters.Where(predicate)
30+
.OrderByDescending(e => e.Id).ToList();
31+
32+
pager.Configure(emails.Count);
33+
34+
var list = emails.Skip(skip).Take(take).ToList();
35+
36+
return await Task.FromResult(list);
37+
}
1538
}
1639
}

0 commit comments

Comments
 (0)