<br><br><div class="gmail_quote">On Tue, Jan 8, 2013 at 4:18 PM, Brian Granger <span dir="ltr">&lt;<a href="mailto:ellisonbg@gmail.com" target="_blank">ellisonbg@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div class="im">On Tue, Jan 8, 2013 at 2:09 PM, MinRK &lt;<a href="mailto:benjaminrk@gmail.com">benjaminrk@gmail.com</a>&gt; wrote:<br>
&gt;<br>
&gt;<br>
&gt; On Tue, Jan 8, 2013 at 2:04 PM, Brian Granger &lt;<a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; Using the JS Plugins branch, you can use the following model:<br>
&gt;&gt;<br>
&gt;&gt; * Write a JS plugin that has all of the javascript code you need - you<br>
&gt;&gt; can do whatever you want.<br>
&gt;&gt; * That Js plugin will declare a handler for a particular type of data.<br>
&gt;&gt; * You can then publish JSON data to that handler using appropriate Python<br>
&gt;&gt; calls.<br>
&gt;&gt;<br>
&gt;&gt; You shouldn&#39;t ever need to use the existing Javascript object to write<br>
&gt;&gt; your JS code.<br>
&gt;<br>
&gt;<br>
&gt; I don&#39;t think doing away with inline js is remotely feasible.<br>
&gt; For security reasons, we have to make decisions like:<br>
&gt;<br>
&gt; on load, do not run raw js, because it could do terrible things without the<br>
&gt; user being aware.<br>
&gt;<br>
&gt; But removing the general ability to run js without installing new files on<br>
&gt; the nb *server* cannot possibly be the long-term solution.<br>
<br>
</div>Originally, I (obviously) thought this way.  But, as I have learned<br>
more about the security vulnerabilities, I have become convinced that<br>
this is the long term solution.  However, I am open to other solutions<br>
that 1) completely remove the security risks and 2) don&#39;t involve<br>
significant new complexities, such as requiring multiple domains and<br>
iframes.  I should also note that I am open to the single user<br>
notebook preserving this capability - but I am a little hesitant to<br>
leave it enabled as it will encourage people to write Javascript code<br>
in this way.<br></blockquote><div><br></div><div>I do appreciate the concern, and we need a solution to the issue.</div><div>I just don&#39;t think we have a complete one yet.</div><div>Right now, we have a supremely flexible (and thus insecure) situation,</div>

<div>whereas jsplugins-only is secure, but not remotely flexible from a user&#39;s perspective.</div><div><br></div><div>This is an extremely serious incapacitation of the notebook.</div><div>The trouble is that jsplugins is a relatively tolerable substitue</div>

<div>for the single-user notebook, but where the problem is worst</div><div>is when users don&#39;t actually have access to the server</div><div>to install jsplugins.  So it&#39;s precisely the case where we</div><div>would not allow custom js that jsplugins fail most dramatically</div>

<div>as a substitute.</div><div><br></div><div>Is it really our intention to require *server* installation of a plugin</div><div>for a user to gain access to a new widget? That seems to eliminate a *huge* portion of exactly what makes the notebook interesting.</div>

<div><br></div><div>If we have a way that js plugins can be loaded at runtime by the user without access to the server (presumably with a &#39;do you trust this guy?&#39; confirmation),</div><div>then that would go a long way toward preventing the total castration of the notebook.</div>

<div> </div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
A separate issue is that actually writing Javascript code using the<br>
old Javascript object is horrifically painful.  Errors get completely<br>
swallowed and it is nearly impossible to figure out what is going on.<br>
I think this is why very few people have actually done anything<br>
significant with the Javascript object we currently have - it just<br>
doesn&#39;t work very well.  On the other hand, developing the JS plugins,<br>
gives the usual mostly pleasant development experience.<br></blockquote><div><br></div><div>This isn&#39;t entirely accurate, as errors in js do show up in the notebook. Just try</div><div><br></div><div>%%javascript</div>

<div>a = doesnt_exist</div><div><br></div><div>But I do appreciate the pain - I&#39;ve taken to writing new inline js code in .js files locally,</div><div>just so my editor can help me out, which is similar in practice to jsplugins and definitely an improvement over typing js in Python strings.</div>

<div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
Cheers,<br>
<br>
Brian<br>
<div class="HOEnZb"><div class="h5"><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; Cheers,<br>
&gt;&gt;<br>
&gt;&gt; Brian<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Tue, Jan 8, 2013 at 1:11 PM, lecast &lt;<a href="mailto:martin.zmk@gmail.com">martin.zmk@gmail.com</a>&gt; wrote:<br>
&gt;&gt; &gt; Thx. I will have a look at both the repository and the pull.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Returning Javascript() or HTML() is not exactly what I need. In general<br>
&gt;&gt; &gt; I<br>
&gt;&gt; &gt; always need  to publish both html and javascript within a function so<br>
&gt;&gt; &gt; that<br>
&gt;&gt; &gt; function that would correspond to make_table() from ipy_table creates<br>
&gt;&gt; &gt; both<br>
&gt;&gt; &gt; the element and the script that populates that element. But this is mute<br>
&gt;&gt; &gt; here, since I couldn&#39;t find a way to copy final elements from the window<br>
&gt;&gt; &gt; and<br>
&gt;&gt; &gt; saving them in the notebook for good, the only thing that actually is<br>
&gt;&gt; &gt; saved<br>
&gt;&gt; &gt; is the final html object.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; I don&#39;t use inline JS anywhere there. But, if you prevent inline JS in<br>
&gt;&gt; &gt; output then you will also prevent a lot of interactivity on final output<br>
&gt;&gt; &gt; that e.g. d3 generates. I mean you need to be able to have things like<br>
&gt;&gt; &gt; onClick etc. But if you mean that you will prohibit me from saving<br>
&gt;&gt; &gt; javascript in any form in the notebook, then I will probably have to<br>
&gt;&gt; &gt; stop<br>
&gt;&gt; &gt; pulling the new versions... Right now I spend all my time in Notebook,<br>
&gt;&gt; &gt; i.e.<br>
&gt;&gt; &gt; I wrote a script that converts notebooks to latex and I just write my<br>
&gt;&gt; &gt; papers<br>
&gt;&gt; &gt; in Notebook. It is nice since I see my math instantly, but I need to be<br>
&gt;&gt; &gt; able<br>
&gt;&gt; &gt; to embed some javascript that appears only in those notebooks that are<br>
&gt;&gt; &gt; really papers, e.g. to replace references or make highlights (<br>
&gt;&gt; &gt; <a href="http://i46.tinypic.com/163qyg.png" target="_blank">http://i46.tinypic.com/163qyg.png</a> ).<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Customjs is ok unless you send the notebook to someone and don&#39;t tell<br>
&gt;&gt; &gt; them<br>
&gt;&gt; &gt; they need to have it as well. I wanted something that produces output<br>
&gt;&gt; &gt; that<br>
&gt;&gt; &gt; is easily replicable.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Z wyrazami szacunku,<br>
&gt;&gt; &gt; Marcin Zamojski<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; On Tue, Jan 8, 2013 at 8:56 PM, Matthias Bussonnier [via Python]<br>
&gt;&gt; &gt; &lt;[hidden<br>
&gt;&gt; &gt; email]&gt; wrote:<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Hi !<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; It look really great :<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; A few comment :<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Obstacle 1<br>
&gt;&gt; &gt;&gt; def x():<br>
&gt;&gt; &gt;&gt;         from IPython.core.display import Javascript<br>
&gt;&gt; &gt;&gt;         Javascript(&#39;alert(&quot;a&quot;)&#39;)<br>
&gt;&gt; &gt;&gt; x()<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; you probably want to `return Javascript(&#39;alert(&quot;a&quot;)&#39;)`<br>
&gt;&gt; &gt;&gt; Am I wrong ?<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Obstacle 2:<br>
&gt;&gt; &gt;&gt;  same : `return HTML()` I guess...<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Please, please, please don&#39;t inline script.<br>
&gt;&gt; &gt;&gt; We will in anyway prevent script in output so this will become useless<br>
&gt;&gt; &gt;&gt; anyway.<br>
&gt;&gt; &gt;&gt; Which will deprecate _js_repr_ (at least make it useless) but Brian<br>
&gt;&gt; &gt;&gt; Json-handler branch<br>
&gt;&gt; &gt;&gt; ill work much better to do what you want.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Obstacle 3/Obstacle 4<br>
&gt;&gt; &gt;&gt; Will be solve with brian Json Handler branch.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; You probably want to inject your own library in the notebook,<br>
&gt;&gt; &gt;&gt; which can be done via custom.js<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; draft doc :<br>
&gt;&gt; &gt;&gt; <a href="http://elacave.lmdb.eu/~carreau/yui/classes/IPython.customjs.html" target="_blank">http://elacave.lmdb.eu/~carreau/yui/classes/IPython.customjs.html</a><br>
&gt;&gt; &gt;&gt; use $.getScript(url)<br>
&gt;&gt; &gt;&gt; for example :<br>
&gt;&gt; &gt;&gt; $.getScript(&#39;d3.min.js&#39;) in you have d3.min.js in<br>
&gt;&gt; &gt;&gt; .ipython/profile_xxx/static/js/d3.min.js<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; You might be interesting in<br>
&gt;&gt; &gt;&gt; <a href="http://epmoyer.github.com/ipy_table/" target="_blank">http://epmoyer.github.com/ipy_table/</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; To join effort.<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Thanks.<br>
&gt;&gt; &gt;&gt; --<br>
&gt;&gt; &gt;&gt; Matthias<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; Le 8 janv. 2013 à 17:26, lecast a écrit :<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; &gt; This is a new thread but it is born out and related to a  previous<br>
&gt;&gt; &gt;&gt; &gt; discussion<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; &lt;<a href="http://python.6.n6.nabble.com/experiment-remote-execution-of-jquery-and-d3-code-into-the-browser-via-ipython-td4633053.html#a4955237" target="_blank">http://python.6.n6.nabble.com/experiment-remote-execution-of-jquery-and-d3-code-into-the-browser-via-ipython-td4633053.html#a4955237</a>&gt;<br>


&gt;&gt; &gt;&gt; &gt; . The goal there was to live update figures created with d3js in<br>
&gt;&gt; &gt;&gt; &gt; IPython<br>
&gt;&gt; &gt;&gt; &gt; Notebook. It was suggested that a solution would be to use widgets,<br>
&gt;&gt; &gt;&gt; &gt; which I<br>
&gt;&gt; &gt;&gt; &gt; have to admit I did not have time to understand so instead I decided<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; create something that produces the end product I was aiming at, i.e.<br>
&gt;&gt; &gt;&gt; &gt; take<br>
&gt;&gt; &gt;&gt; &gt; output from Python, use d3js to create a table/figure, use some<br>
&gt;&gt; &gt;&gt; &gt; blackbox,<br>
&gt;&gt; &gt;&gt; &gt; have the output visible in the notebook (or be able to save it<br>
&gt;&gt; &gt;&gt; &gt; elsewhere<br>
&gt;&gt; &gt;&gt; &gt; as<br>
&gt;&gt; &gt;&gt; &gt; svg/html/png/etc).<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; You can find an example notebook with a lot of custom tables and some<br>
&gt;&gt; &gt;&gt; &gt; figures  here &lt;<a href="http://nbviewer.ipython.org/4484816/ipyD3sample.ipynb" target="_blank">http://nbviewer.ipython.org/4484816/ipyD3sample.ipynb</a>&gt;<br>
&gt;&gt; &gt;&gt; &gt; .<br>
&gt;&gt; &gt;&gt; &gt; They are all created based on data from Python, rendered in PhantomJs<br>
&gt;&gt; &gt;&gt; &gt; (in<br>
&gt;&gt; &gt;&gt; &gt; that case I just copy the html, but PhantomJs allows for conversion<br>
&gt;&gt; &gt;&gt; &gt; to<br>
&gt;&gt; &gt;&gt; &gt; other<br>
&gt;&gt; &gt;&gt; &gt; formats), and then published in the notebook.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; I created it for myself, so there is hardly any commenting in the<br>
&gt;&gt; &gt;&gt; &gt; file<br>
&gt;&gt; &gt;&gt; &gt; (I<br>
&gt;&gt; &gt;&gt; &gt; know, bad), but I have been using it for a few months now and it<br>
&gt;&gt; &gt;&gt; &gt; works<br>
&gt;&gt; &gt;&gt; &gt; really well. D3js has some great modern visualizations coded in and<br>
&gt;&gt; &gt;&gt; &gt; it<br>
&gt;&gt; &gt;&gt; &gt; takes<br>
&gt;&gt; &gt;&gt; &gt; only a few days to learn the syntax by doing.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; Personally I think it would be really nice to make it into an<br>
&gt;&gt; &gt;&gt; &gt; extension/package, but I lack experience/time to do that.<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt;<br>
&gt;&gt; &gt;&gt; &gt; --<br>
&gt;&gt; &gt;&gt; &gt; View this message in context:<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://python.6.n6.nabble.com/D3js-and-IPython-tp5001661.html" target="_blank">http://python.6.n6.nabble.com/D3js-and-IPython-tp5001661.html</a><br>
&gt;&gt; &gt;&gt; &gt; Sent from the IPython - Development mailing list archive at<br>
&gt;&gt; &gt;&gt; &gt; Nabble.com.<br>
&gt;&gt; &gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; &gt; IPython-dev mailing list<br>
&gt;&gt; &gt;&gt; &gt; [hidden email]<br>
&gt;&gt; &gt;&gt; &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; _______________________________________________<br>
&gt;&gt; &gt;&gt; IPython-dev mailing list<br>
&gt;&gt; &gt;&gt; [hidden email]<br>
&gt;&gt; &gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt;<br>
&gt;&gt; &gt;&gt; ________________________________<br>
&gt;&gt; &gt;&gt; If you reply to this email, your message will be added to the<br>
&gt;&gt; &gt;&gt; discussion<br>
&gt;&gt; &gt;&gt; below:<br>
&gt;&gt; &gt;&gt; <a href="http://python.6.n6.nabble.com/D3js-and-IPython-tp5001661p5001692.html" target="_blank">http://python.6.n6.nabble.com/D3js-and-IPython-tp5001661p5001692.html</a><br>
&gt;&gt; &gt;&gt; To unsubscribe from D3js and IPython, click here.<br>
&gt;&gt; &gt;&gt; NAML<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; ________________________________<br>
&gt;&gt; &gt; View this message in context: Re: D3js and IPython<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; Sent from the IPython - Development mailing list archive at Nabble.com.<br>
&gt;&gt; &gt;<br>
&gt;&gt; &gt; _______________________________________________<br>
&gt;&gt; &gt; IPython-dev mailing list<br>
&gt;&gt; &gt; <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
&gt;&gt; &gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;&gt; &gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; --<br>
&gt;&gt; Brian E. Granger<br>
&gt;&gt; Cal Poly State University, San Luis Obispo<br>
&gt;&gt; <a href="mailto:bgranger@calpoly.edu">bgranger@calpoly.edu</a> and <a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a><br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; IPython-dev mailing list<br>
&gt;&gt; <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
&gt;&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; IPython-dev mailing list<br>
&gt; <a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
&gt; <a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
&gt;<br>
<br>
<br>
<br>
--<br>
Brian E. Granger<br>
Cal Poly State University, San Luis Obispo<br>
<a href="mailto:bgranger@calpoly.edu">bgranger@calpoly.edu</a> and <a href="mailto:ellisonbg@gmail.com">ellisonbg@gmail.com</a><br>
_______________________________________________<br>
IPython-dev mailing list<br>
<a href="mailto:IPython-dev@scipy.org">IPython-dev@scipy.org</a><br>
<a href="http://mail.scipy.org/mailman/listinfo/ipython-dev" target="_blank">http://mail.scipy.org/mailman/listinfo/ipython-dev</a><br>
</div></div></blockquote></div><br>