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 :)

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

Reply via email to