<HTML><HEAD><!-- Template generated by Exclaimer Mail Disclaimers on 09:12:25 Friday, 16 May 2014 -->
<STYLE type=text/css>P.201e626c-5042-423d-8e8a-8d9d2d43aff8 {
        MARGIN: 0cm 0cm 0pt
}
LI.201e626c-5042-423d-8e8a-8d9d2d43aff8 {
        MARGIN: 0cm 0cm 0pt
}
DIV.201e626c-5042-423d-8e8a-8d9d2d43aff8 {
        MARGIN: 0cm 0cm 0pt
}
TABLE.201e626c-5042-423d-8e8a-8d9d2d43aff8Table {
        MARGIN: 0cm 0cm 0pt
}
DIV.Section1 {
        page: Section1
}
</STYLE>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /></HEAD>
<BODY style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;">
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8><div><br /></div><div>I give a +1 for native support of base64 encoding/decoding in ES</div><div><br /></div><div>I actually did a basic polyfill like module to add support of the standard W3C atob() / btoa() API over browsers (they don't all support it) and servers (mainly tested on Wakanda and Node.js)</div><div><br /></div><div>My main concerns were, as already mentioned in this thread:</div><div>- limitation to ISO strings</div><div>- explicit exclusion of binary support by the current specification (must throw an error)</div><div><br /></div><div>I think there is 3 approaches for such API:</div><div>- 2 raw global methods as atob() and btoa(), potentially base64Encode() and base64Decode() or whatever</div><div>- 2 methods of a dedicated namespace as JSON.stringify() / JSON.parse(), potentially Base64.stringify() / Base64.parse()</div><div>- Dedicated prototype methods (base64Decode/base64Encode or fromBase64/toBase64) to each concerned constructors like:</div><div><span class="Apple-tab-span" style=white-space:pre>        </span>-> String.prototype </div><div><span class="Apple-tab-span" style=white-space:pre>     </span>-> Typed Array prototypes</div><div><br /></div><div>I'm not fan of the first option (2 raw global methods)</div><div>I'll use the second option in a below but think the third one may be easier to extend binary format supports</div><div><br /></div><div>In a perfect world I'd love to see something simple similar to (use the namespace approach in this sample):</div><div><br /></div><div>Base64.stringify( any ) -> return a string</div><div>Base64.parse( string, format ) -> return expected instance object</div><div><br /></div>where format could be either depending of this working group choice:<div>- a string specifying the expected returned format (ex: "Uint8Array", "Uint16Array"...)</div><div>- a reference to the constructor of the expected format (ex: Uint8Array)</div><div><br /><div>my personal choice would be for the constructor reference for 2 reasons:</div><div>- while coding, the developer would have native autocompletion to fill this parameter value</div><div>- at runtime, an exception would be natively throw if the constructor is not supported by the environment (and then obviously by the parse() method)</div><div><br /></div><div>As said, I care about extensibility of "binary format supports"</div><div>Fact the Typed Array will be native in ES6 is awesome to have some formats available by default</div><div><div>Still note that nowadays we also have:</div><div>- Blob, File, data URL (formated in base64), ImageData (canvas) from HTML5 standards</div></div><div>- Buffer in node.js, wakanda</div><div>- ByteString & ByteArray supported by some CommonJS platforms and by CommonNode</div><div><br /></div><div>A registerFormatHandler( encoder, decoder) method could then be a plus</div><div><br /></div><div><br /><div><div>On 5 mai 2014, at 21:24, Florian Bösch <<a href="mailto:pyalot@gmail.com">pyalot@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline" /><blockquote type="cite"><div dir="ltr">I'd like highlight the fact that binary data handling in JS these days is mainly done via ArrayBuffers and TypedArrayViews. To that end, I've written a base64 to Uint8Array decoder like so: <a href="https://gist.github.com/pyalot/4530137">https://gist.github.com/pyalot/4530137</a><div>
<br /></div><div>I don't quite see how atob/btoa without a usable binary type (indexable by byte, get the byte values out) should work.</div></div><div class="gmail_extra"><br /><br /><div class="gmail_quote">On Mon, May 5, 2014 at 8:22 PM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br />
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">@john I don't really care about the namespace/module as long as this matter moves from W3C spec to ES one.<div>
<br /></div><div>@mathias didn't mean to change atob and btoa rather add two extra methods such encode/decode for strings (could land without problems in the String.prototype, IMO) with "less silly names" whatever definition of silly we have ^_^</div>

<div><br /></div><div>Also interesting the @claude info on ISO strings ... yes, any UTF-8 compatible support is what I meant, doing in JS land unescape(encodeURIComponent(str)) feels very hacky, and it's slow, indeed</div>

<div><br /></div><div>take care</div></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br /><br /><div class="gmail_quote">On Mon, May 5, 2014 at 8:16 AM, John Barton <span dir="ltr"><<a href="mailto:johnjbarton@google.com" target="_blank">johnjbarton@google.com</a>></span> wrote:<br />

<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><br /><div class="gmail_extra"><br /><br /><div class="gmail_quote"><div>On Sun, May 4, 2014 at 3:00 PM, Andrea Giammarchi <span dir="ltr"><<a href="mailto:andrea.giammarchi@gmail.com" target="_blank">andrea.giammarchi@gmail.com</a>></span> wrote:<br />


<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">+1 and as generic global utility it would be also nice to make it compatible with all strings.</div></blockquote>


<div><br /></div></div><div>A language with modules does not need nor should it rely on stuff more favorite features onto global.  We need standard modules for all new features.</div><div>jjb</div></div></div></div>
</blockquote></div><br /></div>
</div></div><br /></blockquote></div></div></blockquote></div></div></div></P>
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8>
<P></P>
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8>
<TABLE style="WIDTH: 600px; BORDER-COLLAPSE: collapse" class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table border=0 cellSpacing=0 cellPadding=0 cols=2>
  <TBODY>
  <TR style="FONT-SIZE: 7pt">
    <TD style="WIDTH: 50px; VERTICAL-ALIGN: top; PADDING-TOP: 7px"><img border=0 width=52 height=71 src='cid:a672ec.png@baf5850d.4983f3e1' /></TD>
    <TD style="PADDING-LEFT: 10px; WIDTH: 219px; FONT-FAMILY: Verdana; COLOR: #274370; FONT-SIZE: 7pt; PADDING-TOP: 10px; LEFT: 10px" vAlign=top width=270><FONT style="FONT-SIZE: 7pt" color=#cecece face=Verdana></FONT><FONT style="FONT-SIZE: 7pt" color=#a1a1a1 face=Verdana><table style="font-size: 7pt; font-family: Verdana; color: #A0A0A0" cellPadding=0 cellSpacing=0 width=250px class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table><tr><td><span style='font-family:Verdana; color: #274370; font-weight: bold; '> Alexandre Morgaut</span></td></tr><tr><td><span style='color: #666666; '>Wakanda Community Manager</span></td></tr></table></FONT><FONT style="FONT-SIZE: 7pt" color=#a1a1a1 face=Verdana></FONT><table style="font-size: 7pt; font-family: Verdana; color: #A0A0A0" cellPadding=0 cellSpacing=0 width=240px class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table><tr><td width=55px><span style='color: #666666; '>Email :</span></td><td><span style='color: #666666; '><a href='mailto:Alexandre.Morgaut@4d.com' title='Click to send email to Alexandre Morgaut' target=''>Alexandre.Morgaut@4d.com</a></span></td></tr><tr><td width=55px><span style='color: #666666; '>Web :</span></td><td><span style='color: #666666; '><a href='http://www.4D.com' title='' target=''>www.4D.com</a></span></td></tr></table></TD>
    <TD style="WIDTH: 1px" width=0px></TD>
    <TD style="PADDING-BOTTOM: 10px; WIDTH: 293px; PADDING-TOP: 10px; LEFT: auto" vAlign=top><span style='font-family:Verdana; color: #CECECE; '><table style="font-size: 7pt; color: #666666; border-left-style: solid; border-left-width: 1px; border-left-color: #274370; padding-left: 10px" cellPadding=0 cellSpacing=0 width=220px class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table><tr style><td width=150px><span style='font-family:Verdana; color: #274370; font-weight: bold; '>4D SAS</span></td></tr><tr style><td><span style='font-family:Verdana; color: #666666; font-weight: normal; '>60, rue d'Alsace</span></td></tr><tr style><td><span style='font-family:Verdana; color: #666666; '>92110 Clichy - France</span></td></tr></table></span><span style='font-family:Verdana; color: #CECECE; '><table style="font-size: 7pt; color: #666666; border-left-style: solid; border-left-width: 1px; border-left-color: #274370; padding-left: 10px" cellPadding=0 cellSpacing=0 width=250px class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table><tr style><td style width=53px><span style='font-family:Verdana; color: #666666; font-weight: normal; '>Standard :</span></td><td><span style='font-family:verdana; color: #0A2C2A; '>+33 1 40 87 92 00</span></td></tr></table></span></TD></TR></TBODY></TABLE></P><FONT color=#ff6600><!-- This is the environment stuff -->
<P style="FONT-SIZE: 7pt" class=201e626c-5042-423d-8e8a-8d9d2d43aff8>
<TABLE style="PADDING-LEFT: 25px; WIDTH: 300px; BORDER-COLLAPSE: collapse; HEIGHT: 86px" class=201e626c-5042-423d-8e8a-8d9d2d43aff8Table border=0 cellSpacing=0 cellPadding=0 cols=1>
  <TBODY></TBODY></TABLE></P><!-- This is the start of the disclaimer  -->
<P style="FONT-SIZE: 7pt" class=201e626c-5042-423d-8e8a-8d9d2d43aff8><BR />
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8><FONT face=Verdana></FONT></P></FONT>
<P></P>
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8 align=left><div><div><div><blockquote type="cite"><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">_______________________________________________<br />
es-discuss mailing list<br />
<a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br />
<a href="https://mail.mozilla.org/listinfo/es-discuss" target="_blank">https://mail.mozilla.org/listinfo/es-discuss</a><br />
<br /></blockquote></div><br /></div>
_______________________________________________<br />es-discuss mailing list<br /><a href="mailto:es-discuss@mozilla.org">es-discuss@mozilla.org</a><br />https://mail.mozilla.org/listinfo/es-discuss<br /></blockquote></div><br /></div></div> </P>
<P class=201e626c-5042-423d-8e8a-8d9d2d43aff8></P>
<P align=left>  </FONT></P></FONT>
<P></P></FONT>
<P></P>
<P></P></FONT>
<P></P></P></FONT></P></BODY></HTML>