You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ponymail.apache.org by se...@apache.org on 2017/02/23 17:18:06 UTC
incubator-ponymail git commit: Synchronise comments/layout between
listview threaded/tree
Repository: incubator-ponymail
Updated Branches:
refs/heads/master 9b1ffd08e -> 59d9fa4ed
Synchronise comments/layout between listview threaded/tree
Project: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/commit/59d9fa4e
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/tree/59d9fa4e
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/diff/59d9fa4e
Branch: refs/heads/master
Commit: 59d9fa4ed2e19bba3225ebe06921ccc9f4c8529e
Parents: 9b1ffd0
Author: Sebb <se...@apache.org>
Authored: Thu Feb 23 17:18:02 2017 +0000
Committer: Sebb <se...@apache.org>
Committed: Thu Feb 23 17:18:02 2017 +0000
----------------------------------------------------------------------
site/js/dev/ponymail_listview_threaded.js | 25 +++++----
site/js/dev/ponymail_listview_tree.js | 45 +++++++++++++++--
site/js/ponymail.js | 70 +++++++++++++++++++-------
3 files changed, 104 insertions(+), 36 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/59d9fa4e/site/js/dev/ponymail_listview_threaded.js
----------------------------------------------------------------------
diff --git a/site/js/dev/ponymail_listview_threaded.js b/site/js/dev/ponymail_listview_threaded.js
index 6c4ab3f..8a88b53 100644
--- a/site/js/dev/ponymail_listview_threaded.js
+++ b/site/js/dev/ponymail_listview_threaded.js
@@ -24,7 +24,7 @@ function loadList_threaded(mjson, limit, start, deep) {
prefs.theme = th
}
}
-
+
// Set displayed posts per page to 10 if social/compact theme, or auto-scale
if (prefs.theme && (prefs.theme == "social" || prefs.theme == "compact")) {
d_ppp = 10
@@ -46,10 +46,10 @@ function loadList_threaded(mjson, limit, start, deep) {
}
// reset open email counter hash
open_emails = []
-
+
// set display limit to default ppp if not set by call
limit = limit ? limit : d_ppp;
-
+
// If no flat JSON is supplied (as with next/prev page clicks), fall back to the previous JSON,
// otherwise, sort it descending by epoch
var fjson = mjson ? ('emails' in mjson && isArray(mjson.emails) ? mjson.emails.sort(function(a, b) {
@@ -64,15 +64,15 @@ function loadList_threaded(mjson, limit, start, deep) {
// get $now
var now = new Date().getTime() / 1000
-
+
// start = start or 0 (first email)
if (!start) {
start = 0
}
-
+
// start nesting HTML
nest = '<ul class="list-group">'
-
+
c_page = start
// for each email from start to finish (or page limit), do...
for (var i = start; i < json.length; i++) {
@@ -85,12 +85,12 @@ function loadList_threaded(mjson, limit, start, deep) {
if (eml && eml.subject.length == 0) {
eml.subject = '(no subject)'
}
-
+
// truncate subject (do we need this?)
if (eml && eml.subject.length > 90) {
eml.subject = eml.subject.substr(0, 90) + "..."
}
-
+
// do some counting
var subs = countSubs(json[i])
var people = countParts(json[i])
@@ -142,8 +142,8 @@ function loadList_threaded(mjson, limit, start, deep) {
estyle = "font-weight: bold;"
}
}
-
-
+
+
var people_label = "<label style='visibility:" + pds + "; float: right; margin-right: 8px; ' id='people_"+i+"' class='listview_label label label-" + lp + "'> <span class='glyphicon glyphicon-user'> </span> " + people + " <span class='hidden-xs hidden-sm'>people</span></label>"
var subs_label = "<label id='subs_" + i + "' style='float: right; margin-right: 8px;' class='label label-" + ls + "'> <span class='glyphicon glyphicon-envelope'> </span> <span style='display: inline-block; width: 16px; text-align: right;'>" + subs + "</span> <span style='display: inline-block; width: 40px; text-align: left;' class='hidden-xs hidden-sm'>" + (subs != 1 ? "replies" : "reply") + "</span></label>"
@@ -245,14 +245,13 @@ function loadList_threaded(mjson, limit, start, deep) {
// subscribe button
var sublist = xlist.replace(/@/, "-subscribe@")
var innerbuttons = '<a href="mailto:' + sublist + '" title="Click to subscribe to this list" style="margin: 0 auto" class="btn btn-primary">Subscribe</a>'
-
+
var unsublist = xlist.replace(/@/, "-unsubscribe@")
innerbuttons += ' <a href="mailto:' + unsublist + '" title="Click to unsubscribe from this list" style="margin: 0 auto" class="btn btn-primary">Unsubscribe</a>'
if (login && login.credentials) {
innerbuttons += ' <a href="javascript:void(0);" style="margin: 0 auto" class="btn btn-danger" onclick="compose(null, \'' + xlist + '\');">Start a new thread</a>'
}
-
// Favorite or forget
if (login && login.credentials && xlist) {
var found = false
@@ -270,7 +269,7 @@ function loadList_threaded(mjson, limit, start, deep) {
}
innerbuttons += '</span>'
}
-
+
bulk.innerHTML += '<div style="width: 33%; float: left;">' + innerbuttons + '</div>'
http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/59d9fa4e/site/js/dev/ponymail_listview_tree.js
----------------------------------------------------------------------
diff --git a/site/js/dev/ponymail_listview_tree.js b/site/js/dev/ponymail_listview_tree.js
index 5c76ba0..42cc013 100644
--- a/site/js/dev/ponymail_listview_tree.js
+++ b/site/js/dev/ponymail_listview_tree.js
@@ -24,6 +24,7 @@ function loadList_treeview(mjson, limit, start, deep) {
prefs.theme = th
}
}
+
// Set displayed posts per page to 10 if social/compact theme, or auto-scale
if (prefs.theme && (prefs.theme == "social" || prefs.theme == "compact")) {
d_ppp = 10
@@ -43,38 +44,59 @@ function loadList_treeview(mjson, limit, start, deep) {
}
}
}
+ // reset open email counter hash
open_emails = []
+
+ // set display limit to default ppp if not set by call
limit = limit ? limit : d_ppp;
+
+ // If no flat JSON is supplied (as with next/prev page clicks), fall back to the previous JSON,
+ // otherwise, sort it descending by epoch
var fjson = mjson ? ('emails' in mjson && isArray(mjson.emails) ? mjson.emails.sort(function(a, b) {
return b.epoch - a.epoch
}) : []) : current_flat_json
+ // sync JSON
current_flat_json = fjson
+ // same with threaded JSON
var json = mjson ? sortIt(mjson.thread_struct) : current_thread_json
current_thread_json = json
+ // get $now
var now = new Date().getTime() / 1000
- nest = '<ul class="list-group">'
+
+ // start = start or 0 (first email)
if (!start) {
start = 0
}
+
+ // start nesting HTML
+ nest = '<ul class="list-group">'
+
c_page = start
+ // for each email from start to finish (or page limit), do...
for (var i = start; i < json.length; i++) {
if (i >= (start + limit)) {
break
}
+ // Get the email
var eml = findEml(json[i].tid)
// allow for empty subject
if (eml && eml.subject.length == 0) {
eml.subject = '(no subject)'
}
+
+ // truncate subject (do we need this?)
if (eml && eml.subject.length > 90) {
eml.subject = eml.subject.substr(0, 90) + "..."
}
+
+ // do some counting
var subs = countSubs(json[i])
var people = countParts(json[i])
var latest = countNewest(json[i])
+ // coloring for labels
var ls = 'default'
if (subs > 0) {
ls = 'primary'
@@ -85,25 +107,30 @@ function loadList_treeview(mjson, limit, start, deep) {
}
var ld = 'default'
var ti = ''
+ // orange label for new timestamps
if (latest > (now - 86400)) {
ld = 'warning'
ti = "Has activity in the past 24 hours"
}
var d = ''
var estyle = ""
+ // if deep search (multi-list), show the list name label as well
var qdeep = document.getElementById('checkall') ? document.getElementById('checkall').checked : false
if ((qdeep || deep || global_deep) && current_query.length > 0) {
eml.list = eml.list ? eml.list : eml.list_raw // Sometimes, .list isn't available
var elist = eml.list.replace(/[<>]/g, "").replace(/^([^.]+)\./, "$1@")
var elist2 = elist
+ // shortlist? show dev@ instead of dev@foo.bar then
if (pm_config.shortLists) {
elist = elist.replace(/\.[^.]+\.[^.]+$/, "")
}
d = "<a href='list.html?" + elist2 + "'><label class='label label-warning' style='width: 150px;'>" + elist + "</label></a> "
+ // truncate subject even more if list labels are there
if (eml.subject.length > 75) {
eml.subject = eml.subject.substr(0, 75) + "..."
}
}
+ // escape subject
var subject = eml.subject.replace(/</mg, "<")
var mdate = formatEpochUTC(latest)
@@ -115,9 +142,12 @@ function loadList_treeview(mjson, limit, start, deep) {
estyle = "font-weight: bold;"
}
}
+
+
var people_label = "<label style='visibility:" + pds + "; float: right; margin-right: 8px; ' id='people_"+i+"' class='listview_label label label-" + lp + "'> <span class='glyphicon glyphicon-user'> </span> " + people + " <span class='hidden-xs hidden-sm'>people</span></label>"
var subs_label = "<label id='subs_" + i + "' style='float: right; margin-right: 8px;' class='label label-" + ls + "'> <span class='glyphicon glyphicon-envelope'> </span> <span style='display: inline-block; width: 16px; text-align: right;'>" + subs + "</span> <span style='display: inline-block; width: 40px; text-align: left;' class='hidden-xs hidden-sm'>" + (subs != 1 ? "replies" : "reply") + "</span></label>"
+ // social theme display
if (prefs.theme && prefs.theme == "social") {
var from = eml.from.replace(/<.*>/, "").length > 0 ? eml.from.replace(/<.*>/, "") : eml.from.replace(/[<>]+/g, "")
from = "<span class='from_name'>" + from.replace(/\"/g, "") + "</span>"
@@ -129,7 +159,7 @@ function loadList_treeview(mjson, limit, start, deep) {
subject +
"</a> <label style='float: right; width: 110px;' class='label label-" + ld + "' title='" + ti + "'>" +
mdate +
- "</label>" + subs_label + people_label +
+ "</label> " + subs_label + people_label +
"<br/>By " + from + "</div>"
@@ -144,7 +174,9 @@ function loadList_treeview(mjson, limit, start, deep) {
"</div>" +
"</div>" +
"</div><div id='thread_treeview_" + i + "' style='display:none';></div></li>"
- } else if (prefs.theme && prefs.theme == "compact") {
+ }
+ // compact theme display
+ else if (prefs.theme && prefs.theme == "compact") {
var from = eml.from.replace(/<.*>/, "").length > 0 ? eml.from.replace(/<.*>/, "") : eml.from.replace(/[<>]+/g, "")
from = "<span class='from_name'>" + from.replace(/\"/g, "") + "</span>"
var sbody = (eml.body||json[i].body).replace(/</g, "<") + " "
@@ -161,7 +193,9 @@ function loadList_treeview(mjson, limit, start, deep) {
subs_label + people_label + " " +
"</div><div style='width: calc(100% - 270px); color: #999; white-space:nowrap; text-overflow: ellipsis; overflow: hidden;'>" + sbody +
"</div></div>" + "<div id='thread_treeview_" + i + "' style='display:none';></div></li>"
- } else {
+ }
+ // default theme display
+ else {
nest += "<li class='list-group-item'>" +
"<div style='width: calc(100% - 220px); white-space:nowrap; overflow: hidden;'>" +
d + "<a style='overflow:hidden;" + estyle + "' href='thread.html/" + (pm_config.shortLinks ? shortenID(eml.id) : eml.id) + "' onclick='this.style=\"\"; latestEmailInThread = " + latest+ "; toggleEmails_treeview(" + i + "); latestEmailInThread = 0; return false;'>" + subject +
@@ -208,7 +242,7 @@ function loadList_treeview(mjson, limit, start, deep) {
bulk.innerHTML += '<div style="width: 33%; float: left;"> </div>'
}
-
+ // subscribe button
var sublist = xlist.replace(/@/, "-subscribe@")
var innerbuttons = '<a href="mailto:' + sublist + '" title="Click to subscribe to this list" style="margin: 0 auto" class="btn btn-primary">Subscribe</a>'
@@ -235,6 +269,7 @@ function loadList_treeview(mjson, limit, start, deep) {
}
innerbuttons += '</span>'
}
+
bulk.innerHTML += '<div style="width: 33%; float: left;">' + innerbuttons + '</div>'
http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/59d9fa4e/site/js/ponymail.js
----------------------------------------------------------------------
diff --git a/site/js/ponymail.js b/site/js/ponymail.js
index 13232be..df90a12 100644
--- a/site/js/ponymail.js
+++ b/site/js/ponymail.js
@@ -2586,7 +2586,7 @@ function loadList_threaded(mjson, limit, start, deep) {
prefs.theme = th
}
}
-
+
// Set displayed posts per page to 10 if social/compact theme, or auto-scale
if (prefs.theme && (prefs.theme == "social" || prefs.theme == "compact")) {
d_ppp = 10
@@ -2608,10 +2608,10 @@ function loadList_threaded(mjson, limit, start, deep) {
}
// reset open email counter hash
open_emails = []
-
+
// set display limit to default ppp if not set by call
limit = limit ? limit : d_ppp;
-
+
// If no flat JSON is supplied (as with next/prev page clicks), fall back to the previous JSON,
// otherwise, sort it descending by epoch
var fjson = mjson ? ('emails' in mjson && isArray(mjson.emails) ? mjson.emails.sort(function(a, b) {
@@ -2626,15 +2626,15 @@ function loadList_threaded(mjson, limit, start, deep) {
// get $now
var now = new Date().getTime() / 1000
-
+
// start = start or 0 (first email)
if (!start) {
start = 0
}
-
+
// start nesting HTML
nest = '<ul class="list-group">'
-
+
c_page = start
// for each email from start to finish (or page limit), do...
for (var i = start; i < json.length; i++) {
@@ -2647,12 +2647,12 @@ function loadList_threaded(mjson, limit, start, deep) {
if (eml && eml.subject.length == 0) {
eml.subject = '(no subject)'
}
-
+
// truncate subject (do we need this?)
if (eml && eml.subject.length > 90) {
eml.subject = eml.subject.substr(0, 90) + "..."
}
-
+
// do some counting
var subs = countSubs(json[i])
var people = countParts(json[i])
@@ -2704,8 +2704,8 @@ function loadList_threaded(mjson, limit, start, deep) {
estyle = "font-weight: bold;"
}
}
-
-
+
+
var people_label = "<label style='visibility:" + pds + "; float: right; margin-right: 8px; ' id='people_"+i+"' class='listview_label label label-" + lp + "'> <span class='glyphicon glyphicon-user'> </span> " + people + " <span class='hidden-xs hidden-sm'>people</span></label>"
var subs_label = "<label id='subs_" + i + "' style='float: right; margin-right: 8px;' class='label label-" + ls + "'> <span class='glyphicon glyphicon-envelope'> </span> <span style='display: inline-block; width: 16px; text-align: right;'>" + subs + "</span> <span style='display: inline-block; width: 40px; text-align: left;' class='hidden-xs hidden-sm'>" + (subs != 1 ? "replies" : "reply") + "</span></label>"
@@ -2807,14 +2807,13 @@ function loadList_threaded(mjson, limit, start, deep) {
// subscribe button
var sublist = xlist.replace(/@/, "-subscribe@")
var innerbuttons = '<a href="mailto:' + sublist + '" title="Click to subscribe to this list" style="margin: 0 auto" class="btn btn-primary">Subscribe</a>'
-
+
var unsublist = xlist.replace(/@/, "-unsubscribe@")
innerbuttons += ' <a href="mailto:' + unsublist + '" title="Click to unsubscribe from this list" style="margin: 0 auto" class="btn btn-primary">Unsubscribe</a>'
if (login && login.credentials) {
innerbuttons += ' <a href="javascript:void(0);" style="margin: 0 auto" class="btn btn-danger" onclick="compose(null, \'' + xlist + '\');">Start a new thread</a>'
}
-
// Favorite or forget
if (login && login.credentials && xlist) {
var found = false
@@ -2832,7 +2831,7 @@ function loadList_threaded(mjson, limit, start, deep) {
}
innerbuttons += '</span>'
}
-
+
bulk.innerHTML += '<div style="width: 33%; float: left;">' + innerbuttons + '</div>'
@@ -2870,6 +2869,7 @@ function loadList_treeview(mjson, limit, start, deep) {
prefs.theme = th
}
}
+
// Set displayed posts per page to 10 if social/compact theme, or auto-scale
if (prefs.theme && (prefs.theme == "social" || prefs.theme == "compact")) {
d_ppp = 10
@@ -2889,38 +2889,59 @@ function loadList_treeview(mjson, limit, start, deep) {
}
}
}
+ // reset open email counter hash
open_emails = []
+
+ // set display limit to default ppp if not set by call
limit = limit ? limit : d_ppp;
+
+ // If no flat JSON is supplied (as with next/prev page clicks), fall back to the previous JSON,
+ // otherwise, sort it descending by epoch
var fjson = mjson ? ('emails' in mjson && isArray(mjson.emails) ? mjson.emails.sort(function(a, b) {
return b.epoch - a.epoch
}) : []) : current_flat_json
+ // sync JSON
current_flat_json = fjson
+ // same with threaded JSON
var json = mjson ? sortIt(mjson.thread_struct) : current_thread_json
current_thread_json = json
+ // get $now
var now = new Date().getTime() / 1000
- nest = '<ul class="list-group">'
+
+ // start = start or 0 (first email)
if (!start) {
start = 0
}
+
+ // start nesting HTML
+ nest = '<ul class="list-group">'
+
c_page = start
+ // for each email from start to finish (or page limit), do...
for (var i = start; i < json.length; i++) {
if (i >= (start + limit)) {
break
}
+ // Get the email
var eml = findEml(json[i].tid)
// allow for empty subject
if (eml && eml.subject.length == 0) {
eml.subject = '(no subject)'
}
+
+ // truncate subject (do we need this?)
if (eml && eml.subject.length > 90) {
eml.subject = eml.subject.substr(0, 90) + "..."
}
+
+ // do some counting
var subs = countSubs(json[i])
var people = countParts(json[i])
var latest = countNewest(json[i])
+ // coloring for labels
var ls = 'default'
if (subs > 0) {
ls = 'primary'
@@ -2931,25 +2952,30 @@ function loadList_treeview(mjson, limit, start, deep) {
}
var ld = 'default'
var ti = ''
+ // orange label for new timestamps
if (latest > (now - 86400)) {
ld = 'warning'
ti = "Has activity in the past 24 hours"
}
var d = ''
var estyle = ""
+ // if deep search (multi-list), show the list name label as well
var qdeep = document.getElementById('checkall') ? document.getElementById('checkall').checked : false
if ((qdeep || deep || global_deep) && current_query.length > 0) {
eml.list = eml.list ? eml.list : eml.list_raw // Sometimes, .list isn't available
var elist = eml.list.replace(/[<>]/g, "").replace(/^([^.]+)\./, "$1@")
var elist2 = elist
+ // shortlist? show dev@ instead of dev@foo.bar then
if (pm_config.shortLists) {
elist = elist.replace(/\.[^.]+\.[^.]+$/, "")
}
d = "<a href='list.html?" + elist2 + "'><label class='label label-warning' style='width: 150px;'>" + elist + "</label></a> "
+ // truncate subject even more if list labels are there
if (eml.subject.length > 75) {
eml.subject = eml.subject.substr(0, 75) + "..."
}
}
+ // escape subject
var subject = eml.subject.replace(/</mg, "<")
var mdate = formatEpochUTC(latest)
@@ -2961,9 +2987,12 @@ function loadList_treeview(mjson, limit, start, deep) {
estyle = "font-weight: bold;"
}
}
+
+
var people_label = "<label style='visibility:" + pds + "; float: right; margin-right: 8px; ' id='people_"+i+"' class='listview_label label label-" + lp + "'> <span class='glyphicon glyphicon-user'> </span> " + people + " <span class='hidden-xs hidden-sm'>people</span></label>"
var subs_label = "<label id='subs_" + i + "' style='float: right; margin-right: 8px;' class='label label-" + ls + "'> <span class='glyphicon glyphicon-envelope'> </span> <span style='display: inline-block; width: 16px; text-align: right;'>" + subs + "</span> <span style='display: inline-block; width: 40px; text-align: left;' class='hidden-xs hidden-sm'>" + (subs != 1 ? "replies" : "reply") + "</span></label>"
+ // social theme display
if (prefs.theme && prefs.theme == "social") {
var from = eml.from.replace(/<.*>/, "").length > 0 ? eml.from.replace(/<.*>/, "") : eml.from.replace(/[<>]+/g, "")
from = "<span class='from_name'>" + from.replace(/\"/g, "") + "</span>"
@@ -2975,7 +3004,7 @@ function loadList_treeview(mjson, limit, start, deep) {
subject +
"</a> <label style='float: right; width: 110px;' class='label label-" + ld + "' title='" + ti + "'>" +
mdate +
- "</label>" + subs_label + people_label +
+ "</label> " + subs_label + people_label +
"<br/>By " + from + "</div>"
@@ -2990,7 +3019,9 @@ function loadList_treeview(mjson, limit, start, deep) {
"</div>" +
"</div>" +
"</div><div id='thread_treeview_" + i + "' style='display:none';></div></li>"
- } else if (prefs.theme && prefs.theme == "compact") {
+ }
+ // compact theme display
+ else if (prefs.theme && prefs.theme == "compact") {
var from = eml.from.replace(/<.*>/, "").length > 0 ? eml.from.replace(/<.*>/, "") : eml.from.replace(/[<>]+/g, "")
from = "<span class='from_name'>" + from.replace(/\"/g, "") + "</span>"
var sbody = (eml.body||json[i].body).replace(/</g, "<") + " "
@@ -3007,7 +3038,9 @@ function loadList_treeview(mjson, limit, start, deep) {
subs_label + people_label + " " +
"</div><div style='width: calc(100% - 270px); color: #999; white-space:nowrap; text-overflow: ellipsis; overflow: hidden;'>" + sbody +
"</div></div>" + "<div id='thread_treeview_" + i + "' style='display:none';></div></li>"
- } else {
+ }
+ // default theme display
+ else {
nest += "<li class='list-group-item'>" +
"<div style='width: calc(100% - 220px); white-space:nowrap; overflow: hidden;'>" +
d + "<a style='overflow:hidden;" + estyle + "' href='thread.html/" + (pm_config.shortLinks ? shortenID(eml.id) : eml.id) + "' onclick='this.style=\"\"; latestEmailInThread = " + latest+ "; toggleEmails_treeview(" + i + "); latestEmailInThread = 0; return false;'>" + subject +
@@ -3054,7 +3087,7 @@ function loadList_treeview(mjson, limit, start, deep) {
bulk.innerHTML += '<div style="width: 33%; float: left;"> </div>'
}
-
+ // subscribe button
var sublist = xlist.replace(/@/, "-subscribe@")
var innerbuttons = '<a href="mailto:' + sublist + '" title="Click to subscribe to this list" style="margin: 0 auto" class="btn btn-primary">Subscribe</a>'
@@ -3081,6 +3114,7 @@ function loadList_treeview(mjson, limit, start, deep) {
}
innerbuttons += '</span>'
}
+
bulk.innerHTML += '<div style="width: 33%; float: left;">' + innerbuttons + '</div>'