On 13 September 2016 at 10:13, Daniel Gruno <[email protected]> wrote: > On 09/13/2016 11:07 AM, sebb wrote: >> On 13 September 2016 at 09:53, Daniel Gruno <[email protected]> wrote: >>> On 09/13/2016 10:50 AM, sebb wrote: >>>> 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. >>> >>> It's not an impressive compression, no, but it's still slightly shorter :) >> >> It's one character shorter. >> >> I don't see the point. >> >> If the original mid really is unique without the '@list' part, why not >> just use that instead? > > Because it's too long for some people's taste? > 56+ chars vs 21 chars.
If it's true that the original mid is unique without the '@list' part, then just drop the '@list' part to shorten the mid to 24 chars. So it's 24 chars versus 23 chars (remember the leading PZ). > Ideally, we'd probably change the ID generator to use base36 (or 48) or > so instead, and avoid using a JS shortener altogether. But it's a moot > point whether cutting off 3 bytes matter or not. It's a matter of taste. > This shortens links for the current generators, while still retaining a > 1 in 10^33 chance of not colliding. > >> >>>> >>>>> 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 >>>>>>> >>>>>>> }) >>>>>>> >>>>> >>> >
