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? >> >>> 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 >>>>> >>>>> }) >>>>> >>> >
