On 13 September 2016 at 09:01, Daniel Gruno <[email protected]> wrote: > On 09/12/2016 12:48 PM, sebb wrote: >> On 8 September 2016 at 07:03, <[email protected]> wrote: >>> Repository: incubator-ponymail >>> Updated Branches: >>> refs/heads/coffee-and-cake d15294548 -> ae791c1a6 >>> >>> >>> add URL shortening >>> >>> this is a bit longer than the old format, and only shortens >>> if the generator is medium or full, to avoid duplicates. >>> >>> >>> Project: http://git-wip-us.apache.org/repos/asf/incubator-ponymail/repo >>> Commit: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/commit/ae791c1a >>> Tree: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/tree/ae791c1a >>> Diff: >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/diff/ae791c1a >>> >>> Branch: refs/heads/coffee-and-cake >>> Commit: ae791c1a619fc965cca72f1f62edb87b07a088b9 >>> Parents: d152945 >>> Author: Daniel Gruno <[email protected]> >>> Authored: Thu Sep 8 08:02:50 2016 +0200 >>> Committer: Daniel Gruno <[email protected]> >>> Committed: Thu Sep 8 08:02:50 2016 +0200 >>> >>> ---------------------------------------------------------------------- >>> site/api/thread.lua | 6 +++++ >>> site/js/coffee/email_display_basic.coffee | 3 ++- >>> site/js/coffee/listview_basic.coffee | 3 ++- >>> site/js/coffee/listview_single_email.coffee | 4 ++- >>> site/js/coffee/misc.coffee | 31 ++++++++++++++++++++++++ >>> site/js/coffee/scaffolding.coffee | 2 +- >>> 6 files changed, 45 insertions(+), 4 deletions(-) >>> ---------------------------------------------------------------------- >>> >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/api/thread.lua >>> ---------------------------------------------------------------------- >>> diff --git a/site/api/thread.lua b/site/api/thread.lua >>> index aaaa9da..46e93c1 100644 >>> --- a/site/api/thread.lua >>> +++ b/site/api/thread.lua >>> @@ -126,6 +126,12 @@ function handle(r) >>> if #docs == 1 then >>> doc = docs[1] >>> end >>> + -- New shortening for medium/full generators >>> + if #docs == 0 and #eid == 24 then >>> + docs = elastic.find("mid:" .. r:escape(eid) .. "*", 1, "mbox") >>> + >>> + end >>> + -- old shortening format, bleh >>> if #docs == 0 and #eid == 18 then >>> docs = elastic.find("mid:" .. r:escape(eid) .. "*", 1, "mbox") >>> end >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/email_display_basic.coffee >>> ---------------------------------------------------------------------- >>> diff --git a/site/js/coffee/email_display_basic.coffee >>> b/site/js/coffee/email_display_basic.coffee >>> index 708c373..73a60f6 100644 >>> --- a/site/js/coffee/email_display_basic.coffee >>> +++ b/site/js/coffee/email_display_basic.coffee >>> @@ -149,7 +149,8 @@ class BasicEmailDisplay >>> ### Action buttons ### >>> >>> ### Permalink ### >>> - pbutton = new HTML('a', { class: "label_yellow", href: >>> "thread.html/#{json.mid}"}, "Permalink") >>> + shortID = shortenURL(json.mid) >>> + pbutton = new HTML('a', { class: "label_yellow", href: >>> "thread.html/#{shortID}"}, "Permalink") >>> >>> ### Source ### >>> sbutton = new HTML('a', { class: "label_red", href: >>> "api/source.lua/#{json.mid}"}, "View source") >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/listview_basic.coffee >>> ---------------------------------------------------------------------- >>> diff --git a/site/js/coffee/listview_basic.coffee >>> b/site/js/coffee/listview_basic.coffee >>> index f9bfe47..bd97dbf 100644 >>> --- a/site/js/coffee/listview_basic.coffee >>> +++ b/site/js/coffee/listview_basic.coffee >>> @@ -234,8 +234,9 @@ class BasicListView >>> >>> >>> ### Subject, PLUS a bit of the body with a break before ### >>> + sid = shortenURL(thread.tid) >>> subject = new HTML('div', {}, [ >>> - new HTML('a', { style: {fontWeight: readStyle}, href: >>> "thread.html/#{thread.tid}", onclick: >>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = >>> 'normal'; return false;"}, original.subject), >>> + new HTML('a', { style: {fontWeight: readStyle}, href: >>> "thread.html/#sid}", onclick: >>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = >>> 'normal'; return false;"}, original.subject), >>> new HTML('br'), >>> new HTML('span', {class: "listview_item_body"}, >>> thread.body) >>> ]) >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/listview_single_email.coffee >>> ---------------------------------------------------------------------- >>> diff --git a/site/js/coffee/listview_single_email.coffee >>> b/site/js/coffee/listview_single_email.coffee >>> index 5aa3e07..b3baff8 100644 >>> --- a/site/js/coffee/listview_single_email.coffee >>> +++ b/site/js/coffee/listview_single_email.coffee >>> @@ -102,9 +102,11 @@ class SingleListView extends BasicListView >>> if hasRead(original.id) >>> readStyle = "normal" >>> >>> + >>> ### Subject, PLUS a bit of the body with a break before ### >>> + sid = shortenURL(original.id) >>> subject = new HTML('div', {}, [ >>> - new HTML('a', { style: {fontWeight: readStyle}, href: >>> "thread.html/#{original.id}", onclick: >>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = >>> 'normal'; return false;"}, original.subject), >>> + new HTML('a', { style: {fontWeight: readStyle}, href: >>> "thread.html/#{sid}", onclick: >>> "readEmail(this.parentNode.parentNode.parentNode); this.style.fontWeight = >>> 'normal'; return false;"}, original.subject), >>> ]) >>> >>> >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/misc.coffee >>> ---------------------------------------------------------------------- >>> diff --git a/site/js/coffee/misc.coffee b/site/js/coffee/misc.coffee >>> index 131748a..2ac684c 100644 >>> --- a/site/js/coffee/misc.coffee >>> +++ b/site/js/coffee/misc.coffee >>> @@ -93,3 +93,34 @@ ponymail_url_regex = new RegExp( >>> ponymail_quote_regex = new RegExp( >>> "((?:\r?\n)((on .+ wrote:[\r\n]+)|(sent from my .+)|(>+[ >>> \t]*[^\r\n]*\r?\n[^\n]*\n*)+)+)+", "mi" >>> ) >>> + >>> +shortBits = 3 >>> + >>> +shortenURL = (mid) -> >>> + arr = mid.split("@") >> >> This function throws away the list id. >> >> However AFAIK the list id is essential to disambiguate messages which >> are sent to multiple lists. > > When there are only 2 arr bits (iow one @), then the List ID is already > hashed inside the initial first arr bit, and thus one does not need the > list ID. This is a compromise and a change from the old shortening > procedure where IDs were shortened regardless of which generator was > used. The new shortener only shortens IF it can get away with it > relatively painlessly, IOW if the list ID is part of the initial sha224 > blob. This merely needs some documentation, which I will get around to > now that I'm not on vacation :)
In which case it's only necessary to drop the '@list' part. There is no need to encode/decode as base36. The net effect of using shortenURL and unshortenURL does just that. The relevant change is the change to thread.lua which allows for wild-card search if the mid length is 24. > With regards, > Daniel. > >> >>> + if arr.length == 2 and (pm_config and pm_config.shortenLinks) >>> + out = "" >>> + for i in [0..shortBits-1] >>> + a = arr[0].substr(i*8,8) >>> + num = parseInt(a, 16) >>> + res = num.toString(36) >>> + while res.length < 7 >>> + res = '0' + res >>> + out += res >>> + return "PZ" + out >>> + >>> + return mid >>> + >>> +unshortenURL = (mid) -> >>> + if mid.substr(0,2) == 'PZ' >>> + out = "" >>> + for i in [0..shortBits-1] >>> + num = parseInt(mid.substr(2+(i*7), 7), 36) >>> + res = num.toString(16) >>> + while res.length < 8 >>> + res = '0' + res >>> + out += res >>> + return out >>> + else >>> + return mid >>> + >> >> The functions need some documentation. >> >>> >>> http://git-wip-us.apache.org/repos/asf/incubator-ponymail/blob/ae791c1a/site/js/coffee/scaffolding.coffee >>> ---------------------------------------------------------------------- >>> diff --git a/site/js/coffee/scaffolding.coffee >>> b/site/js/coffee/scaffolding.coffee >>> index ec58fee..379b463 100644 >>> --- a/site/js/coffee/scaffolding.coffee >>> +++ b/site/js/coffee/scaffolding.coffee >>> @@ -118,7 +118,7 @@ threadScaffolding = () -> >>> >>> ### Make an API call to the preferences script, have it call back to >>> listView once done ### >>> mid = location.href.match(/thread\.html\/(.+)/)[1] >>> - r = new HTTPRequest("api/thread.lua?id=" + mid, { >>> + r = new HTTPRequest("api/thread.lua?id=" + unshortenURL(mid), { >>> callback: scaffoldingEmailCallback >>> >>> }) >>> >
