[IPython-dev] Unique cell render div ids

Brian Granger ellisonbg at gmail.com
Mon Oct 29 17:17:54 EDT 2012


Aron,

I don't think this is necessary. You should be able to get the unique
element using:

`this.element.get(0);`

The `element` attribute is the jquery object for the cell and `get(0)`
returns the actual underlying DOM element for it.

Cheers,

Brian

On Mon, Oct 29, 2012 at 1:59 PM, Aron Ahmadia <aron at ahmadia.net> wrote:

> Hi Developers,
>
> While fixing the code for MathJax rendering that I broke earlier this
> week, I came across the need to address a specific element in the DOM:
>
> http://docs.mathjax.org/en/latest/typeset.html
>
> I know there has been some work attaching unique ids to cells in the code
> in the past, but there didn't seem to be any obvious functionality
> currently implemented in Cells for this.  You'll notice that the pull
> request I just updated here: https://github.com/ipython/ipython/pull/2517adds the following code to textcell.js:
>
>  .. ...**
>
> @@ -39,9 +39,11 @@ var IPython = (function (IPython) {
>
> 39 39**
>
>              extraKeys: {"Tab": "indentMore","Shift-Tab" : "indentLess"},
>
>  40 40**
>
>              onKeyEvent: $.proxy(this.handle_codemirror_keyevent,this)
>
> 41 41**
>
>          });
>
>   42**
>
> +        this.cell_id = IPython.utils.uuid();
>
> 42 43**
>
>          // The tabindex=-1 makes this div focusable.
>
>   44**
>
> +        // id is a unique cell_id necessary for updating MathJax intelligently
>
> 43 45**
>
>          var render_area = $('<div/>').addClass('text_cell_render border-box-sizing').
>
>  44  **
>
> -            addClass('rendered_html').attr('tabindex','-1');
>
>    46**
>
> +            addClass('rendered_html').attr('tabindex','-1').attr('id',this.cell_id);
>
>  45 47**
>
>          cell.append(input_area).append(render_area);
>
> 46 48**
>
>          this.element = cell;
>
> 47 49**
>
>      };
>
>
> What I'm doing here is first calling into IPython.utils.uuid() to generate
> a cell_id (The one from the Cell prototype appears to be broken/unused?),
> then adding that as an id to the
> rendered html div.
>
> Then later, I can grab this id when I need to update the math:
>
>
>   82**
>
> +    TextCell.prototype.typeset = function () {
>
>   83**
>
> +        if (window.MathJax){
>
>   84**
>
> +            var cell_math = document.getElementById(this.cell_id);
>
>   85**
>
> +            MathJax.Hub.Queue(["Typeset",MathJax.Hub,cell_math]);
>
>   86**
>
> +        }
>
>   87**
>
> +    };
>
>   88**
>
> +
>
>
> This really speeds up MathJax rendering considerably, so I think it's
> worth doing, but I feel like I'm really nosing into code I don't understand
> well, so it would be good to hear feedback if there are opinions on this.
>
> A
>
> _______________________________________________
> IPython-dev mailing list
> IPython-dev at scipy.org
> http://mail.scipy.org/mailman/listinfo/ipython-dev
>
>


-- 
Brian E. Granger
Cal Poly State University, San Luis Obispo
bgranger at calpoly.edu and ellisonbg at gmail.com
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/ipython-dev/attachments/20121029/9d36675f/attachment.html>


More information about the IPython-dev mailing list