Search field and cleanups
This commit is contained in:
1 parent
bff1486b8f
commit
adde4a3847
12 files changed
+226
-154
No files matched your search
@@ -14,15 +14,13 @@
|
||||
}
|
||||
/* Get each word from the text, split by spaces, end line, semicolon,
|
||||
quotes, commas, colons, parens and brackets. */
|
||||
var words = text.split(/[\s\n;"',;:()<>[\]\\]+/),
|
||||
emails = [],
|
||||
distinct_emails;
|
||||
var words = text.split(/[\s\n;"',;:()<>[\]\\]+/);
|
||||
|
||||
// Regex for identifying an email address.
|
||||
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
|
||||
// For each of the words, add to the array of emails if the word matches the email regex.
|
||||
emails = _.filter(words, function(word) {
|
||||
var emails = _.filter(words, function(word) {
|
||||
return word.match(re);
|
||||
});
|
||||
emails = _.map(emails, function(el) {
|
||||
@@ -34,7 +32,46 @@
|
||||
function renderAlert(msg, alertClass, iconClass) {
|
||||
return nunjucks.render('alert.html', {'msg': msg, 'alertClass': alertClass, 'iconClass': iconClass});
|
||||
}
|
||||
function filter_lists_with_members(term, pushState) {
|
||||
console.log(pushState);
|
||||
if(pushState) {
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, '/lists/?q=' + term);
|
||||
}
|
||||
|
||||
/* Filter lists */
|
||||
var re_term = new RegExp(term);
|
||||
$(".fwdlist").each(function() {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
var members = $(this).find('.member');
|
||||
var hits = _.filter(members, function(el) {
|
||||
return re_term.test($(el).text());
|
||||
});
|
||||
if(re_term.test(cur_name) || hits.length !== 0) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
// TODO combine with above
|
||||
function filter_lists(prefix, pushState) {
|
||||
if(pushState) {
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, '/lists/?q=^' + prefix);
|
||||
}
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function() {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var csrf_token = $('meta[name=x-csrf-token]').attr('content');
|
||||
@@ -43,14 +80,15 @@
|
||||
fwd_delete: '/api/forward/',
|
||||
fwd_create: '/api/forward/', // + forwarder
|
||||
ou_list: '/api/orgunits/',
|
||||
me: '/api/me/',
|
||||
me: '/api/me/'
|
||||
};
|
||||
var forwards_container = $(".forwards-container");
|
||||
nunjucks.configure({ autoescape: true });
|
||||
|
||||
/* Home view (lists) */
|
||||
/* Lists view (home) */
|
||||
if( $('body.home').length ) {
|
||||
$.getJSON(api_urls.ou_list, function(data) {
|
||||
/* orgunit list */
|
||||
/* Load orgunit list */
|
||||
var ou_html = nunjucks.render('orgunits.html', { orgunits: data });
|
||||
$(".orgunit-list").append(ou_html);
|
||||
var ous_html = nunjucks.render('orgunits_select.html', { orgunits: data });
|
||||
@@ -63,7 +101,7 @@
|
||||
});
|
||||
|
||||
$('.new-list').html(new_list_html);
|
||||
$('.new-list .js-new-list-name').on('keyup', function(e) {
|
||||
$('.new-list .js-new-list-name').on('keyup', function() {
|
||||
var new_list_name = $('.new-list .js-new-list-name').val();
|
||||
if(new_list_name === '') {
|
||||
new_list_name = 'Ny liste';
|
||||
@@ -80,7 +118,8 @@
|
||||
var prefix = $(this).parent().attr('data-value');
|
||||
$('.new-list .prefix-btn').html(prefix+' <span class="caret"></span>');
|
||||
});
|
||||
$('.new-list textarea').on('keyup', function(e) {
|
||||
// TODO put this in a function with selector as argument
|
||||
$('.new-list textarea').on('keyup', function() {
|
||||
var text = $(this).val();
|
||||
var emails = parseEmails(text);
|
||||
|
||||
@@ -114,22 +153,24 @@
|
||||
return {'dest': dest, 'forward': el};
|
||||
});
|
||||
|
||||
$.post(api_urls.fwd_create, new_list[dest], function() {
|
||||
$('.new-list-result').html(renderAlert('Lagt til ny liste: ' + dest, 'success'));
|
||||
$('.new-list textarea').val('');
|
||||
$('.new-list .js-new-list-name').val('');
|
||||
}, 'json'));
|
||||
var added_list_html = nunjucks.render('list.html', {
|
||||
lists: new_list,
|
||||
});
|
||||
$(".forwards-container").prepend(added_list_html);
|
||||
$.post(
|
||||
api_urls.fwd_create,
|
||||
new_list[dest],
|
||||
function() {
|
||||
$('.new-list-result').html(renderAlert('Lagt til ny liste: ' + dest, 'success'));
|
||||
$('.new-list textarea').val('');
|
||||
$('.new-list .js-new-list-name').val('');
|
||||
},
|
||||
'json'
|
||||
);
|
||||
var added_list_html = nunjucks.render('list.html', { lists: new_list });
|
||||
forwards_container.prepend(added_list_html);
|
||||
|
||||
});
|
||||
|
||||
/* Add list filter by orgunit */
|
||||
/* Filter lists by orgunit */
|
||||
$(".orgunit-list a").on('click', function(e) {
|
||||
var prefix = $(this).attr('data-prefix');
|
||||
var querystring = $(this).attr('href');
|
||||
e.preventDefault();
|
||||
|
||||
/* Toggle selection */
|
||||
@@ -137,52 +178,29 @@
|
||||
$(this).parent().toggleClass('active');
|
||||
$('.orgunits-select').val(prefix);
|
||||
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, querystring);
|
||||
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function(el) {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
filter_lists(prefix, true);
|
||||
$('.js-lists-filter-field').val('');
|
||||
});
|
||||
$(".orgunits-select").on('change', function(e) {
|
||||
$(".orgunits-select").on('change', function() {
|
||||
var prefix = $(this).val();
|
||||
var querystring = '/lists/?q='+prefix;
|
||||
|
||||
/* Toggle selection */
|
||||
$(".orgunit-list li").removeClass('active');
|
||||
$(".orgunit-list li a[data-prefix="+prefix+"]").parent().toggleClass('active');
|
||||
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, querystring);
|
||||
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function(el) {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
filter_lists(prefix, true);
|
||||
$('.js-lists-filter-field').val('');
|
||||
});
|
||||
});
|
||||
|
||||
/* Load forwards from API and write to container */
|
||||
/* Load forwards from API and put on page */
|
||||
$.getJSON(api_urls.fwd_list, function(data) {
|
||||
if( !data.cpanelresult ) {
|
||||
$(".forwards-container").html(renderAlert("No results.", 'info'));
|
||||
forwards_container.html(renderAlert("No results.", 'info'));
|
||||
return;
|
||||
}
|
||||
if( 'error' in data.cpanelresult ) {
|
||||
$(".forwards-container").html(renderAlert("Klarte ikke hente epostlister fra APIet: "+data.cpanelresult.error, 'danger'));
|
||||
forwards_container.html(renderAlert("Klarte ikke hente epostlister fra APIet: "+data.cpanelresult.error, 'danger'));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -193,11 +211,28 @@
|
||||
api_urls: api_urls
|
||||
});
|
||||
|
||||
$(".forwards-container").html(fw_html);
|
||||
forwards_container.html(fw_html);
|
||||
|
||||
/* Load filter from query string */
|
||||
var q_term = getParameterByName('q');
|
||||
if(q_term) {
|
||||
if(q_term[0] === '^') {
|
||||
filter_lists(q_term, false);
|
||||
} else {
|
||||
filter_lists_with_members(q_term, false);
|
||||
}
|
||||
}
|
||||
/* Filter by search query */
|
||||
$('.js-lists-filter-field').on('keyup', function() {
|
||||
var term = $(this).val();
|
||||
filter_lists_with_members(term, true);
|
||||
$(".orgunit-list li").removeClass('active');
|
||||
$(".orgunit-list li:first-child").toggleClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
/* Mark row red for deletion and show delete button if applicable */
|
||||
$(".forwards-container").on('click', '[name=fwd-delete]', function(e) {
|
||||
forwards_container.on('click', '[name=fwd-delete]', function() {
|
||||
$(this).parent().parent().parent().toggleClass('danger');
|
||||
var tbody = $(this).closest('tbody');
|
||||
var num_selected = tbody.find("[name=fwd-delete]:checked").length;
|
||||
@@ -208,8 +243,8 @@
|
||||
}
|
||||
});
|
||||
/* Delete selected */
|
||||
$(".forwards-container").on('click', '.js-del-selected', function(e) {
|
||||
$(this).attr('data-delete-list-name');
|
||||
forwards_container.on('click', '.js-del-selected', function() {
|
||||
var list_name = $(this).attr('data-delete-list-name');
|
||||
var checked = $('[data-list-name="'+list_name+'"] [name="fwd-delete"]:checked');
|
||||
var delete_these = _.map(checked, function(el) {
|
||||
return $(el).val();
|
||||
@@ -227,21 +262,25 @@
|
||||
// TODO remove list if no more rows
|
||||
});
|
||||
});
|
||||
|
||||
/* Toggles emails textarea */
|
||||
$(".forwards-container").on('click', '.js-toggle-email-textarea', function(e) {
|
||||
forwards_container.on('click', '.js-toggle-email-textarea', function(e) {
|
||||
e.preventDefault();
|
||||
var row = $(this).closest('tbody').find('.textarea-row');
|
||||
row.toggleClass('visible');
|
||||
});
|
||||
|
||||
/* Add emails to current list */
|
||||
$(".forwards-container").on('click', '.js-new-email', function(e) {
|
||||
forwards_container.on('click', '.js-new-email', function(e) {
|
||||
e.preventDefault();
|
||||
// TODO refactor logic from new list and add here
|
||||
});
|
||||
|
||||
/* New list toggle display */
|
||||
$('.new-list-btn').on('click', function() {
|
||||
$('.new-list').toggleClass('visible');
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
})();
|
||||
@@ -19,6 +19,9 @@ $icon-font-path: "../fonts/";
|
||||
display: block;
|
||||
}
|
||||
}
|
||||
.search-field {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
.orgunit-list {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
@@ -5,11 +5,11 @@
|
||||
<table class="table table-condensed">
|
||||
<tbody>
|
||||
{% for member in members %}
|
||||
<tr><td>{{ member.forward }}</td><td class="del-cell"><label class="del-label" for="{{ member.dest }}={{ member.forward }}"><input id="{{ member.dest }}={{ member.forward }}" type="checkbox" name='fwd-delete' value="{{ member.dest }}={{ member.forward }}"></label></td></tr>
|
||||
<tr><td class="member">{{ member.forward }}</td><td class="del-cell"><label class="del-label" for="{{ member.dest }}={{ member.forward }}"><input id="{{ member.dest }}={{ member.forward }}" type="checkbox" name='fwd-delete' value="{{ member.dest }}={{ member.forward }}"></label></td></tr>
|
||||
{% endfor %}
|
||||
<tr class="action-row">
|
||||
<td>
|
||||
<a href="#" class="link-add js-toggle-email-textarea"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Legg til</a></span>
|
||||
<a href="#" class="link-add js-toggle-email-textarea"><span class="glyphicon glyphicon-plus" aria-hidden="true"></span> Legg til</a>
|
||||
</td>
|
||||
<td>
|
||||
<a href="#" class="link-del js-del-selected" type="button" data-delete-list-name="{{ list }}"><span class="glyphicon glyphicon-remove" aria-hidden="true"></span> Slett</a>
|
||||
@@ -19,7 +19,7 @@
|
||||
<td colspan="2">
|
||||
<h4>Eposter <span class="badge email-counter"></span></h4>
|
||||
<textarea class="form-control js-add-list-textarea" data-list-name="{{ list }}" placeholder="asdf@studentersamfundet.no, qwerty@studentersamfundet.no f.eks. Klipp og lim så mye du orker" rows="4"></textarea>
|
||||
<button type="button" class="btn btn-primary btn-add-list js-new-email"><span class="glyphicon glyphicon-plus js-new-email" aria-hidden="true"></span> Opprett liste</button>
|
||||
<button type="button" class="btn btn-primary btn-add-list js-new-email"><span class="glyphicon glyphicon-plus js-new-email" aria-hidden="true"></span> Legg til</button>
|
||||
</td>
|
||||
</tr>
|
||||
</tbody>
|
||||
|
||||
@@ -1,3 +1,4 @@
|
||||
<li class="active"><a href="/lists/" data-prefix=".+">Alle</a></li>
|
||||
{% for ou in orgunits %}
|
||||
<li><a href="/lists/?q={{ou.prefix }}" data-prefix="{{ou.prefix }}">{{ ou.name }}</a></li>
|
||||
{% endfor %}
|
||||
+103
-78
@@ -14,15 +14,13 @@
|
||||
}
|
||||
/* Get each word from the text, split by spaces, end line, semicolon,
|
||||
quotes, commas, colons, parens and brackets. */
|
||||
var words = text.split(/[\s\n;"',;:()<>[\]\\]+/),
|
||||
emails = [],
|
||||
distinct_emails;
|
||||
var words = text.split(/[\s\n;"',;:()<>[\]\\]+/);
|
||||
|
||||
// Regex for identifying an email address.
|
||||
var re = /^(([^<>()[\]\\.,;:\s@\"]+(\.[^<>()[\]\\.,;:\s@\"]+)*)|(\".+\"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/;
|
||||
|
||||
// For each of the words, add to the array of emails if the word matches the email regex.
|
||||
emails = _.filter(words, function(word) {
|
||||
var emails = _.filter(words, function(word) {
|
||||
return word.match(re);
|
||||
});
|
||||
emails = _.map(emails, function(el) {
|
||||
@@ -34,7 +32,45 @@
|
||||
function renderAlert(msg, alertClass, iconClass) {
|
||||
return nunjucks.render('alert.html', {'msg': msg, 'alertClass': alertClass, 'iconClass': iconClass});
|
||||
}
|
||||
function filter_lists_with_members(term, pushState) {
|
||||
console.log(pushState);
|
||||
if(pushState) {
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, '/lists/?q=' + term);
|
||||
}
|
||||
|
||||
/* Filter lists */
|
||||
var re_term = new RegExp(term);
|
||||
$(".fwdlist").each(function() {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
var members = $(this).find('.member');
|
||||
var hits = _.filter(members, function(el) {
|
||||
return re_term.test($(el).text());
|
||||
});
|
||||
if(re_term.test(cur_name) || hits.length !== 0) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
function filter_lists(prefix, pushState) {
|
||||
if(pushState) {
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, '/lists/?q=^' + prefix);
|
||||
}
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function() {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
$(document).ready(function() {
|
||||
var csrf_token = $('meta[name=x-csrf-token]').attr('content');
|
||||
@@ -43,14 +79,15 @@
|
||||
fwd_delete: '/api/forward/',
|
||||
fwd_create: '/api/forward/', // + forwarder
|
||||
ou_list: '/api/orgunits/',
|
||||
me: '/api/me/',
|
||||
me: '/api/me/'
|
||||
};
|
||||
var forwards_container = $(".forwards-container");
|
||||
nunjucks.configure({ autoescape: true });
|
||||
|
||||
/* Home view (lists) */
|
||||
/* Lists view (home) */
|
||||
if( $('body.home').length ) {
|
||||
$.getJSON(api_urls.ou_list, function(data) {
|
||||
/* OrgUnit list */
|
||||
/* Load orgunit list */
|
||||
var ou_html = nunjucks.render('orgunits.html', { orgunits: data });
|
||||
$(".orgunit-list").append(ou_html);
|
||||
var ous_html = nunjucks.render('orgunits_select.html', { orgunits: data });
|
||||
@@ -63,7 +100,7 @@
|
||||
});
|
||||
|
||||
$('.new-list').html(new_list_html);
|
||||
$('.new-list .js-new-list-name').on('keyup', function(e) {
|
||||
$('.new-list .js-new-list-name').on('keyup', function() {
|
||||
var new_list_name = $('.new-list .js-new-list-name').val();
|
||||
if(new_list_name === '') {
|
||||
new_list_name = 'Ny liste';
|
||||
@@ -80,7 +117,8 @@
|
||||
var prefix = $(this).parent().attr('data-value');
|
||||
$('.new-list .prefix-btn').html(prefix+' <span class="caret"></span>');
|
||||
});
|
||||
$('.new-list textarea').on('keyup', function(e) {
|
||||
// TODO put this in a function with selector as argument
|
||||
$('.new-list textarea').on('keyup', function() {
|
||||
var text = $(this).val();
|
||||
var emails = parseEmails(text);
|
||||
|
||||
@@ -114,30 +152,24 @@
|
||||
return {'dest': dest, 'forward': el};
|
||||
});
|
||||
|
||||
var deferreds = [];
|
||||
$.each(new_list[dest], function(i, el) {
|
||||
el.csrfmiddlewaretoken = csrf_token;
|
||||
deferreds.push($.post(api_urls.fwd_create, el, function() {}, 'json'));
|
||||
});
|
||||
$.when.apply($, deferreds).then(function(){
|
||||
// Success
|
||||
$('.new-list-result').html(renderAlert('Lagt til ny liste: ' + dest, 'success'));
|
||||
$('.new-list textarea').val('');
|
||||
$('.new-list .js-new-list-name').val('');
|
||||
}).fail(function(err){
|
||||
$('.new-list-result').html(renderAlert('Kunne ikke opprette ny liste \'' + dest +'\': '+ err, 'danger'));
|
||||
});
|
||||
var added_list_html = nunjucks.render('list.html', {
|
||||
lists: new_list,
|
||||
});
|
||||
$(".forwards-container").prepend(added_list_html);
|
||||
$.post(
|
||||
api_urls.fwd_create,
|
||||
new_list[dest],
|
||||
function() {
|
||||
$('.new-list-result').html(renderAlert('Lagt til ny liste: ' + dest, 'success'));
|
||||
$('.new-list textarea').val('');
|
||||
$('.new-list .js-new-list-name').val('');
|
||||
},
|
||||
'json'
|
||||
);
|
||||
var added_list_html = nunjucks.render('list.html', { lists: new_list });
|
||||
forwards_container.prepend(added_list_html);
|
||||
|
||||
});
|
||||
|
||||
/* Add list filter by orgunit */
|
||||
/* Filter lists by orgunit */
|
||||
$(".orgunit-list a").on('click', function(e) {
|
||||
var prefix = $(this).attr('data-prefix');
|
||||
var querystring = $(this).attr('href');
|
||||
e.preventDefault();
|
||||
|
||||
/* Toggle selection */
|
||||
@@ -145,52 +177,29 @@
|
||||
$(this).parent().toggleClass('active');
|
||||
$('.orgunits-select').val(prefix);
|
||||
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, querystring);
|
||||
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function(el) {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
filter_lists(prefix, true);
|
||||
$('.js-lists-filter-field').val('');
|
||||
});
|
||||
$(".orgunits-select").on('change', function(e) {
|
||||
$(".orgunits-select").on('change', function() {
|
||||
var prefix = $(this).val();
|
||||
var querystring = '/lists/?q='+prefix;
|
||||
|
||||
/* Toggle selection */
|
||||
$(".orgunit-list li").removeClass('active');
|
||||
$(".orgunit-list li a[data-prefix="+prefix+"]").parent().toggleClass('active');
|
||||
|
||||
/* Update query string */
|
||||
window.history.pushState(null, null, querystring);
|
||||
|
||||
/* Filter lists */
|
||||
var re_prefix = new RegExp('^'+prefix);
|
||||
$(".fwdlist").each(function(el) {
|
||||
var cur_name = $(this).attr('data-list-name');
|
||||
if(re_prefix.test(cur_name)) {
|
||||
$(this).removeClass('hidden');
|
||||
} else {
|
||||
$(this).addClass('hidden');
|
||||
}
|
||||
});
|
||||
filter_lists(prefix, true);
|
||||
$('.js-lists-filter-field').val('');
|
||||
});
|
||||
});
|
||||
|
||||
/* Load forwards from API and write to container */
|
||||
/* Load forwards from API and put on page */
|
||||
$.getJSON(api_urls.fwd_list, function(data) {
|
||||
if( !data.cpanelresult ) {
|
||||
$(".forwards-container").html(renderAlert("No results.", 'info'));
|
||||
forwards_container.html(renderAlert("No results.", 'info'));
|
||||
return;
|
||||
}
|
||||
if( 'error' in data.cpanelresult ) {
|
||||
$(".forwards-container").html(renderAlert("Klarte ikke hente epostlister fra APIet: "+data.cpanelresult.error, 'danger'));
|
||||
forwards_container.html(renderAlert("Klarte ikke hente epostlister fra APIet: "+data.cpanelresult.error, 'danger'));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -201,11 +210,28 @@
|
||||
api_urls: api_urls
|
||||
});
|
||||
|
||||
$(".forwards-container").html(fw_html);
|
||||
forwards_container.html(fw_html);
|
||||
|
||||
/* Load filter from query string */
|
||||
var q_term = getParameterByName('q');
|
||||
if(q_term) {
|
||||
if(q_term[0] === '^') {
|
||||
filter_lists(q_term, false);
|
||||
} else {
|
||||
filter_lists_with_members(q_term, false);
|
||||
}
|
||||
}
|
||||
/* Filter by search query */
|
||||
$('.js-lists-filter-field').on('keyup', function() {
|
||||
var term = $(this).val();
|
||||
filter_lists_with_members(term, true);
|
||||
$(".orgunit-list li").removeClass('active');
|
||||
$(".orgunit-list li:first-child").toggleClass('active');
|
||||
});
|
||||
});
|
||||
|
||||
/* Mark row red for deletion and show delete button if applicable */
|
||||
$(".forwards-container").on('click', '[name=fwd-delete]', function(e) {
|
||||
forwards_container.on('click', '[name=fwd-delete]', function() {
|
||||
$(this).parent().parent().parent().toggleClass('danger');
|
||||
var tbody = $(this).closest('tbody');
|
||||
var num_selected = tbody.find("[name=fwd-delete]:checked").length;
|
||||
@@ -216,45 +242,44 @@
|
||||
}
|
||||
});
|
||||
/* Delete selected */
|
||||
$(".forwards-container").on('click', '.js-del-selected', function(e) {
|
||||
$(this).attr('data-delete-list-name');
|
||||
forwards_container.on('click', '.js-del-selected', function() {
|
||||
var list_name = $(this).attr('data-delete-list-name');
|
||||
var checked = $('[data-list-name="'+list_name+'"] [name="fwd-delete"]:checked');
|
||||
var delete_these = _.map(checked, function(el) {
|
||||
return $(el).val();
|
||||
});
|
||||
var deferreds = [];
|
||||
$.each(delete_these, function(i, el) {
|
||||
var data = {
|
||||
type: 'DELETE',
|
||||
headers: {'X-CSRFToken': csrf_token},
|
||||
url: api_urls.fwd_delete + el + '/',
|
||||
dataType: 'json'
|
||||
};
|
||||
deferreds.push($.ajax(data));
|
||||
});
|
||||
$.when.apply($, deferreds).then(function(){
|
||||
var data = {
|
||||
type: 'DELETE',
|
||||
headers: {'X-CSRFToken': csrf_token},
|
||||
url: api_urls.fwd_delete,
|
||||
data: delete_these,
|
||||
dataType: 'json'
|
||||
};
|
||||
$.ajax(data, function(){
|
||||
// Success
|
||||
checked.closest('tr').remove();
|
||||
// TODO remove list if no more rows
|
||||
}).fail(function(err){
|
||||
$('[data-list-name="'+list_name+'"] .result-alert').html(renderAlert('Kunne ikke fjerne epostaliaser', 'danger'));
|
||||
});
|
||||
});
|
||||
|
||||
/* Toggles emails textarea */
|
||||
$(".forwards-container").on('click', '.js-toggle-email-textarea', function(e) {
|
||||
forwards_container.on('click', '.js-toggle-email-textarea', function(e) {
|
||||
e.preventDefault();
|
||||
var row = $(this).closest('tbody').find('.textarea-row');
|
||||
row.toggleClass('visible');
|
||||
});
|
||||
|
||||
/* Add emails to current list */
|
||||
$(".forwards-container").on('click', '.js-new-email', function(e) {
|
||||
forwards_container.on('click', '.js-new-email', function(e) {
|
||||
e.preventDefault();
|
||||
// TODO refactor logic from new list and add here
|
||||
});
|
||||
|
||||
/* New list toggle display */
|
||||
$('.new-list-btn').on('click', function() {
|
||||
$('.new-list').toggleClass('visible');
|
||||
});
|
||||
}
|
||||
|
||||
});
|
||||
})();
|
||||
+7
-6
@@ -68,7 +68,7 @@ frame.set("loop.revindex0", t_7 - t_6 - 1);
|
||||
frame.set("loop.first", t_6 === 0);
|
||||
frame.set("loop.last", t_6 === t_7 - 1);
|
||||
frame.set("loop.length", t_7);
|
||||
output += "\n\t\t\t\t<tr><td>";
|
||||
output += "\n\t\t\t\t<tr><td class=\"member\">";
|
||||
output += runtime.suppressValue(runtime.memberLookup((t_9),"forward", env.autoesc), env.autoesc);
|
||||
output += "</td><td class=\"del-cell\"><label class=\"del-label\" for=\"";
|
||||
output += runtime.suppressValue(runtime.memberLookup((t_9),"dest", env.autoesc), env.autoesc);
|
||||
@@ -87,11 +87,11 @@ output += "\"></label></td></tr>\n\t\t\t";
|
||||
}
|
||||
}
|
||||
frame = frame.pop();
|
||||
output += "\n\t\t\t\t<tr class=\"action-row\">\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-add js-toggle-email-textarea\"><span class=\"glyphicon glyphicon-plus\" aria-hidden=\"true\"></span> Legg til</a></span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-del js-del-selected\" type=\"button\" data-delete-list-name=\"";
|
||||
output += "\n\t\t\t\t<tr class=\"action-row\">\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-add js-toggle-email-textarea\"><span class=\"glyphicon glyphicon-plus\" aria-hidden=\"true\"></span> Legg til</a>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-del js-del-selected\" type=\"button\" data-delete-list-name=\"";
|
||||
output += runtime.suppressValue(t_4, env.autoesc);
|
||||
output += "\"><span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span> Slett</a>\n\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class=\"textarea-row\">\n\t\t\t\t<td colspan=\"2\">\n\t\t\t\t\t<h4>Eposter <span class=\"badge email-counter\"></span></h4>\n \t\t\t\t<textarea class=\"form-control js-add-list-textarea\" data-list-name=\"";
|
||||
output += runtime.suppressValue(t_4, env.autoesc);
|
||||
output += "\" placeholder=\"asdf@studentersamfundet.no, qwerty@studentersamfundet.no f.eks. Klipp og lim så mye du orker\" rows=\"4\"></textarea>\n \t\t\t\t<button type=\"button\" class=\"btn btn-primary btn-add-list js-new-email\"><span class=\"glyphicon glyphicon-plus js-new-email\" aria-hidden=\"true\"></span> Opprett liste</button>\n \t\t\t</td>\n \t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div class=\"result-alert\"></div>\n\t</div>\n</div>\n";
|
||||
output += "\" placeholder=\"asdf@studentersamfundet.no, qwerty@studentersamfundet.no f.eks. Klipp og lim så mye du orker\" rows=\"4\"></textarea>\n \t\t\t\t<button type=\"button\" class=\"btn btn-primary btn-add-list js-new-email\"><span class=\"glyphicon glyphicon-plus js-new-email\" aria-hidden=\"true\"></span> Legg til</button>\n \t\t\t</td>\n \t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div class=\"result-alert\"></div>\n\t</div>\n</div>\n";
|
||||
;
|
||||
}
|
||||
} else {
|
||||
@@ -129,7 +129,7 @@ frame.set("loop.revindex0", t_13 - t_12 - 1);
|
||||
frame.set("loop.first", t_12 === 0);
|
||||
frame.set("loop.last", t_12 === t_13 - 1);
|
||||
frame.set("loop.length", t_13);
|
||||
output += "\n\t\t\t\t<tr><td>";
|
||||
output += "\n\t\t\t\t<tr><td class=\"member\">";
|
||||
output += runtime.suppressValue(runtime.memberLookup((t_15),"forward", env.autoesc), env.autoesc);
|
||||
output += "</td><td class=\"del-cell\"><label class=\"del-label\" for=\"";
|
||||
output += runtime.suppressValue(runtime.memberLookup((t_15),"dest", env.autoesc), env.autoesc);
|
||||
@@ -148,11 +148,11 @@ output += "\"></label></td></tr>\n\t\t\t";
|
||||
}
|
||||
}
|
||||
frame = frame.pop();
|
||||
output += "\n\t\t\t\t<tr class=\"action-row\">\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-add js-toggle-email-textarea\"><span class=\"glyphicon glyphicon-plus\" aria-hidden=\"true\"></span> Legg til</a></span>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-del js-del-selected\" type=\"button\" data-delete-list-name=\"";
|
||||
output += "\n\t\t\t\t<tr class=\"action-row\">\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-add js-toggle-email-textarea\"><span class=\"glyphicon glyphicon-plus\" aria-hidden=\"true\"></span> Legg til</a>\n\t\t\t\t</td>\n\t\t\t\t<td>\n\t\t\t\t\t<a href=\"#\" class=\"link-del js-del-selected\" type=\"button\" data-delete-list-name=\"";
|
||||
output += runtime.suppressValue(t_10, env.autoesc);
|
||||
output += "\"><span class=\"glyphicon glyphicon-remove\" aria-hidden=\"true\"></span> Slett</a>\n\t\t\t\t</td>\n\t\t\t\t</tr>\n\t\t\t\t<tr class=\"textarea-row\">\n\t\t\t\t<td colspan=\"2\">\n\t\t\t\t\t<h4>Eposter <span class=\"badge email-counter\"></span></h4>\n \t\t\t\t<textarea class=\"form-control js-add-list-textarea\" data-list-name=\"";
|
||||
output += runtime.suppressValue(t_10, env.autoesc);
|
||||
output += "\" placeholder=\"asdf@studentersamfundet.no, qwerty@studentersamfundet.no f.eks. Klipp og lim så mye du orker\" rows=\"4\"></textarea>\n \t\t\t\t<button type=\"button\" class=\"btn btn-primary btn-add-list js-new-email\"><span class=\"glyphicon glyphicon-plus js-new-email\" aria-hidden=\"true\"></span> Opprett liste</button>\n \t\t\t</td>\n \t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div class=\"result-alert\"></div>\n\t</div>\n</div>\n";
|
||||
output += "\" placeholder=\"asdf@studentersamfundet.no, qwerty@studentersamfundet.no f.eks. Klipp og lim så mye du orker\" rows=\"4\"></textarea>\n \t\t\t\t<button type=\"button\" class=\"btn btn-primary btn-add-list js-new-email\"><span class=\"glyphicon glyphicon-plus js-new-email\" aria-hidden=\"true\"></span> Legg til</button>\n \t\t\t</td>\n \t\t\t</tr>\n\t\t\t</tbody>\n\t\t</table>\n\t\t<div class=\"result-alert\"></div>\n\t</div>\n</div>\n";
|
||||
;
|
||||
}
|
||||
}
|
||||
@@ -223,6 +223,7 @@ var lineno = null;
|
||||
var colno = null;
|
||||
var output = "";
|
||||
try {
|
||||
output += "<li class=\"active\"><a href=\"/lists/\" data-prefix=\".+\">Alle</a></li>\n";
|
||||
frame = frame.push();
|
||||
var t_3 = runtime.contextOrFrameLookup(context, frame, "orgunits");
|
||||
if(t_3) {var t_2 = t_3.length;
|
||||
|
||||
+4
@@ -6560,6 +6560,10 @@ button.close {
|
||||
}
|
||||
}
|
||||
|
||||
.search-field {
|
||||
margin-bottom: 20px;
|
||||
}
|
||||
|
||||
.orgunit-list {
|
||||
margin-bottom: 40px;
|
||||
}
|
||||
|
||||
@@ -24,6 +24,7 @@
|
||||
<script type="text/javascript" src="{% static 'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/alert.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/dropdown.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'bower_components/bootstrap-sass-official/vendor/assets/javascripts/bootstrap/collapse.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'bower_components/list.js/dist/list.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'dist/scripts/templates.js' %}"></script>
|
||||
<script type="text/javascript" src="{% static 'dist/scripts/main.js' %}"></script>
|
||||
</body>
|
||||
|
||||
@@ -4,8 +4,9 @@
|
||||
<div class="container">
|
||||
<div class="row">
|
||||
<div class="col-sm-4 sidebar">
|
||||
<input type="search" class="form-control search-field js-lists-filter-field" placeholder="Søk i listene">
|
||||
<h4>Foreninger/Utvalg</h4>
|
||||
<ul class="nav nav-sidebar orgunit-list">
|
||||
<li class="active"><a href="/lists/" data-prefix=".+">Alle</a></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="col-sm-8">
|
||||
@@ -5,13 +5,10 @@
|
||||
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#lister-nav-collapse">
|
||||
<span class="sr-only">Toggle navigation</span><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span>
|
||||
</button>
|
||||
<a class="navbar-brand" href="{% url 'home' %}">lister.neuf.no</a>
|
||||
<a class="navbar-brand" href="{% url 'lists' %}">lister.neuf.no</a>
|
||||
</div>
|
||||
|
||||
<div class="collapse navbar-collapse" id="lister-nav-collapse">
|
||||
<ul class="nav navbar-nav">
|
||||
<li{% if 'lister' in request.path %} class="active"{% endif %}><a href="{% url 'home' %}">Hjem</a></li>
|
||||
</ul>
|
||||
{% if user.is_authenticated %}
|
||||
<ul class="nav navbar-nav navbar-right">
|
||||
<li><a href="#">{{ user.first_name }} {{ user.last_name }}</a></li>
|
||||
|
||||
+4
-4
@@ -21,10 +21,10 @@ def index(request):
|
||||
if form.is_valid():
|
||||
# Log the user in.
|
||||
login(request, form.get_user())
|
||||
return redirect('home')
|
||||
return redirect('lists')
|
||||
else:
|
||||
if request.user.is_authenticated():
|
||||
return redirect('home')
|
||||
return redirect('lists')
|
||||
else:
|
||||
form = AuthenticationForm(request)
|
||||
|
||||
@@ -32,8 +32,8 @@ def index(request):
|
||||
|
||||
|
||||
@login_required
|
||||
def home(request):
|
||||
return render(request, "home.html")
|
||||
def lists(request):
|
||||
return render(request, "lists.html")
|
||||
|
||||
|
||||
def logout(request):
|
||||
|
||||
@@ -5,7 +5,7 @@ from django.contrib.staticfiles.urls import staticfiles_urlpatterns
|
||||
urlpatterns = patterns(
|
||||
'',
|
||||
url(r'^$', 'mailadmin.views.index', name='index'),
|
||||
url(r'^lists/$', 'mailadmin.views.home', name='home'),
|
||||
url(r'^lists/$', 'mailadmin.views.lists', name='lists'),
|
||||
url(r'^api/', include('mailadmin.urls')),
|
||||
url(r'^admin/', include(admin.site.urls)),
|
||||
url(r'^api-auth/', include('rest_framework.urls', namespace='rest_framework')),
|
||||
|
||||
Reference in new issue
Block a user