emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
* ox-html HOWTO? exporting #+RESULTS inside div
@ 2015-10-21 23:12 Cook, Malcolm
  2015-10-22  2:18 ` Charles C. Berry
  0 siblings, 1 reply; 7+ messages in thread
From: Cook, Malcolm @ 2015-10-21 23:12 UTC (permalink / raw)
  To: emacs-orgmode@gnu.org

Hi,

I would like to contrive for the contents of results blocks to be embedded in a new div with a common class of org-results-container.

Can this be accomplished through configuring ox-html somehow?  Or must I contrive to modify ox-html.el source? Or is this "Just A Bad Idea" (tm).

My use case is to be able to be able to hide all (or selected) results blocks using javascript in service of an html presentation used as a tutorial where RESULTS are revealed when clicking on, say, the previous source code block.

Thanks,

Malcolm Cook

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-10-21 23:12 ox-html HOWTO? exporting #+RESULTS inside div Cook, Malcolm
@ 2015-10-22  2:18 ` Charles C. Berry
  2015-10-22  6:13   ` Cook, Malcolm
  0 siblings, 1 reply; 7+ messages in thread
From: Charles C. Berry @ 2015-10-22  2:18 UTC (permalink / raw)
  To: Cook, Malcolm; +Cc: emacs-orgmode@gnu.org

On Wed, 21 Oct 2015, Cook, Malcolm wrote:

> Hi,
>
> I would like to contrive for the contents of results blocks to be 
> embedded in a new div with a common class of org-results-container.

Try this:

--8<---------------cut here---------------start------------->8---
#+BEGIN_SRC shell :exports both :wrap org-results-container
echo "org results here"
#+END_SRC
--8<---------------cut here---------------end--------------->8---

which html export renders as

--8<---------------cut here---------------start------------->8---
<div class="org-results-container">
<p>
org results here
</p>

</div>
--8<---------------cut here---------------end--------------->8---

You can add a special-block filter if the <p> ... </p> is unwanted.

HTH,

Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-10-22  2:18 ` Charles C. Berry
@ 2015-10-22  6:13   ` Cook, Malcolm
  2015-11-05  0:02     ` Cook, Malcolm
  0 siblings, 1 reply; 7+ messages in thread
From: Cook, Malcolm @ 2015-10-22  6:13 UTC (permalink / raw)
  To: Charles C. Berry; +Cc: emacs-orgmode@gnu.org

Charles, 

Excellent - that is precisely what I needed.

Additionally, I can avoid having to include the :wrap keyword on every header by specifying a single  buffer-wide  header arguments, such as

    #+PROPERTY: header-args :wrap org-results-container

Thanks,

~ malcolm_cook@stowers.org

________________________________________
From: Charles C. Berry <ccberry@ucsd.edu>
Sent: Wednesday, October 21, 2015 9:18 PM
To: Cook, Malcolm
Cc: emacs-orgmode@gnu.org
Subject: Re: ox-html HOWTO? exporting #+RESULTS inside div

On Wed, 21 Oct 2015, Cook, Malcolm wrote:

> Hi,
>
> I would like to contrive for the contents of results blocks to be
> embedded in a new div with a common class of org-results-container.

Try this:

--8<---------------cut here---------------start------------->8---
#+BEGIN_SRC shell :exports both :wrap org-results-container
echo "org results here"
#+END_SRC
--8<---------------cut here---------------end--------------->8---

which html export renders as

--8<---------------cut here---------------start------------->8---
<div class="org-results-container">
<p>
org results here
</p>

</div>
--8<---------------cut here---------------end--------------->8---

You can add a special-block filter if the <p> ... </p> is unwanted.

HTH,

Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-10-22  6:13   ` Cook, Malcolm
@ 2015-11-05  0:02     ` Cook, Malcolm
  2015-11-05  4:08       ` Charles C. Berry
  0 siblings, 1 reply; 7+ messages in thread
From: Cook, Malcolm @ 2015-11-05  0:02 UTC (permalink / raw)
  To: Charles C. Berry; +Cc: emacs-orgmode@gnu.org

Charles,

Thanks again for you suggestion.

Alas, using 'header-args :wrap org-results-container' has the unforeseen (by me) side effect of masking my use of `#+ATTR_HTML :class dataTable` on selected exported tables (which I use to allow for search/sortable/scrollable tables).  

Now, the ':class dataTable' attribute is placed on the new <div> instead of the <table> with undesired outcome.

Do you have any thoughts on how to accomplish both my goals (apply :class table to selected results, and making ALL results be addressable using javascript.  FYI - My application is to hide all source blocks on html open.  Clicking on a source block caption shows the source.  This provides an HTML view that hides the source until desired.  My recipients of such analysis write-ups really like this.

Thanks,
Malcolm

PS: as an Example of the issue, the following exports the table with :class of dataTable.  However, when I uncomment the :wrap directive, and re-eval the block, and export, then :class is now on the div...


#+HTML_HEAD: <script src="http://code.jquery.com/jquery-1.11.2.min.js"></script>
#+HTML_HEAD: <link rel="stylesheet" type="text/css" href="http://cdn.datatables.net/1.10.9/css/jquery.dataTables.min.css">
#+HTML_HEAD: <script src="http://cdn.datatables.net/1.10.9/js/jquery.dataTables.js"></script>
#
# #+PROPERTY: header-args :wrap org-results-container
#
#+CAPTION: Contrive to display mtcars
#+BEGIN_SRC R :exports both :results value :colnames yes 
mtcars
#+END_SRC
#+ATTR_HTML: :class dataTable 
#+RESULTS:
|  mpg | cyl |  disp |  hp | drat |    wt |  qsec | vs | am | gear | carb |
|------+-----+-------+-----+------+-------+-------+----+----+------+------|
|   21 |   6 |   160 | 110 |  3.9 |  2.62 | 16.46 |  0 |  1 |    4 |    4 |
|   21 |   6 |   160 | 110 |  3.9 | 2.875 | 17.02 |  0 |  1 |    4 |    4 |
| 22.8 |   4 |   108 |  93 | 3.85 |  2.32 | 18.61 |  1 |  1 |    4 |    1 |
| 21.4 |   6 |   258 | 110 | 3.08 | 3.215 | 19.44 |  1 |  0 |    3 |    1 |
| 18.7 |   8 |   360 | 175 | 3.15 |  3.44 | 17.02 |  0 |  0 |    3 |    2 |
| 18.1 |   6 |   225 | 105 | 2.76 |  3.46 | 20.22 |  1 |  0 |    3 |    1 |
| 14.3 |   8 |   360 | 245 | 3.21 |  3.57 | 15.84 |  0 |  0 |    3 |    4 |
| 24.4 |   4 | 146.7 |  62 | 3.69 |  3.19 |    20 |  1 |  0 |    4 |    2 |
| 22.8 |   4 | 140.8 |  95 | 3.92 |  3.15 |  22.9 |  1 |  0 |    4 |    2 |
| 19.2 |   6 | 167.6 | 123 | 3.92 |  3.44 |  18.3 |  1 |  0 |    4 |    4 |
| 17.8 |   6 | 167.6 | 123 | 3.92 |  3.44 |  18.9 |  1 |  0 |    4 |    4 |
| 16.4 |   8 | 275.8 | 180 | 3.07 |  4.07 |  17.4 |  0 |  0 |    3 |    3 |
| 17.3 |   8 | 275.8 | 180 | 3.07 |  3.73 |  17.6 |  0 |  0 |    3 |    3 |
| 15.2 |   8 | 275.8 | 180 | 3.07 |  3.78 |    18 |  0 |  0 |    3 |    3 |
| 10.4 |   8 |   472 | 205 | 2.93 |  5.25 | 17.98 |  0 |  0 |    3 |    4 |
| 10.4 |   8 |   460 | 215 |    3 | 5.424 | 17.82 |  0 |  0 |    3 |    4 |
| 14.7 |   8 |   440 | 230 | 3.23 | 5.345 | 17.42 |  0 |  0 |    3 |    4 |
| 32.4 |   4 |  78.7 |  66 | 4.08 |   2.2 | 19.47 |  1 |  1 |    4 |    1 |
| 30.4 |   4 |  75.7 |  52 | 4.93 | 1.615 | 18.52 |  1 |  1 |    4 |    2 |
| 33.9 |   4 |  71.1 |  65 | 4.22 | 1.835 |  19.9 |  1 |  1 |    4 |    1 |
| 21.5 |   4 | 120.1 |  97 |  3.7 | 2.465 | 20.01 |  1 |  0 |    3 |    1 |
| 15.5 |   8 |   318 | 150 | 2.76 |  3.52 | 16.87 |  0 |  0 |    3 |    2 |
| 15.2 |   8 |   304 | 150 | 3.15 | 3.435 |  17.3 |  0 |  0 |    3 |    2 |
| 13.3 |   8 |   350 | 245 | 3.73 |  3.84 | 15.41 |  0 |  0 |    3 |    4 |
| 19.2 |   8 |   400 | 175 | 3.08 | 3.845 | 17.05 |  0 |  0 |    3 |    2 |
| 27.3 |   4 |    79 |  66 | 4.08 | 1.935 |  18.9 |  1 |  1 |    4 |    1 |
|   26 |   4 | 120.3 |  91 | 4.43 |  2.14 |  16.7 |  0 |  1 |    5 |    2 |
| 30.4 |   4 |  95.1 | 113 | 3.77 | 1.513 |  16.9 |  1 |  1 |    5 |    2 |
| 15.8 |   8 |   351 | 264 | 4.22 |  3.17 |  14.5 |  0 |  1 |    5 |    4 |
| 19.7 |   6 |   145 | 175 | 3.62 |  2.77 |  15.5 |  0 |  1 |    5 |    6 |
|   15 |   8 |   301 | 335 | 3.54 |  3.57 |  14.6 |  0 |  1 |    5 |    8 |
| 21.4 |   4 |   121 | 109 | 4.11 |  2.78 |  18.6 |  1 |  1 |    4 |    2 |



 > -----Original Message-----
 > From: emacs-orgmode-bounces+mec=stowers.org@gnu.org [mailto:emacs-
 > orgmode-bounces+mec=stowers.org@gnu.org] On Behalf Of Cook, Malcolm
 > Sent: Thursday, October 22, 2015 1:14 AM
 > To: Charles C. Berry <ccberry@ucsd.edu>
 > Cc: emacs-orgmode@gnu.org
 > Subject: Re: [O] ox-html HOWTO? exporting #+RESULTS inside div
 > 
 > Charles,
 > 
 > Excellent - that is precisely what I needed.
 > 
 > Additionally, I can avoid having to include the :wrap keyword on every header
 > by specifying a single  buffer-wide  header arguments, such as
 > 
 >     #+PROPERTY: header-args :wrap org-results-container
 > 
 > Thanks,
 > 
 > ~ malcolm_cook@stowers.org
 > 
 > ________________________________________
 > From: Charles C. Berry <ccberry@ucsd.edu>
 > Sent: Wednesday, October 21, 2015 9:18 PM
 > To: Cook, Malcolm
 > Cc: emacs-orgmode@gnu.org
 > Subject: Re: ox-html HOWTO? exporting #+RESULTS inside div
 > 
 > On Wed, 21 Oct 2015, Cook, Malcolm wrote:
 > 
 > > Hi,
 > >
 > > I would like to contrive for the contents of results blocks to be
 > > embedded in a new div with a common class of org-results-container.
 > 
 > Try this:
 > 
 > --8<---------------cut here---------------start------------->8---
 > #+BEGIN_SRC shell :exports both :wrap org-results-container
 > echo "org results here"
 > #+END_SRC
 > --8<---------------cut here---------------end--------------->8---
 > 
 > which html export renders as
 > 
 > --8<---------------cut here---------------start------------->8---
 > <div class="org-results-container">
 > <p>
 > org results here
 > </p>
 > 
 > </div>
 > --8<---------------cut here---------------end--------------->8---
 > 
 > You can add a special-block filter if the <p> ... </p> is unwanted.
 > 
 > HTH,
 > 
 > Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-11-05  0:02     ` Cook, Malcolm
@ 2015-11-05  4:08       ` Charles C. Berry
  2015-11-06 19:45         ` Cook, Malcolm
  0 siblings, 1 reply; 7+ messages in thread
From: Charles C. Berry @ 2015-11-05  4:08 UTC (permalink / raw)
  To: Cook, Malcolm; +Cc: emacs-orgmode@gnu.org

On Wed, 4 Nov 2015, Cook, Malcolm wrote:

> Charles, Thanks again for you suggestion.  Alas, using 'header-args
>:wrap org-results-container' has the unforeseen (by me) side effect
>of masking my use of `#+ATTR_HTML :class dataTable` on selected
>exported tables (which I use to allow for search/sortable/scrollable
>tables).  Now, the ':class dataTable' attribute is placed on the new
><div> instead of the <table> with undesired outcome.

> Do you have any thoughts on how to accomplish both my goals (apply
> :class table to selected results, and making ALL results be
> addressable using javascript.  FYI - My application is to hide all
> source blocks on html open.  Clicking on a source block caption
> shows the source.  This provides an HTML view that hides the source
> until desired.  My recipients of such analysis write-ups really like
> this.

[snip]

> # #+PROPERTY: header-args :wrap org-results-container
> #

This creates a special block and attributes on the results will apply
to it - not its contents.

What you want can be obtained by creating a different special block
and then applying a filter. So, wrap like this

#+PROPERTY: header-args :wrap org-results-container-to-filter

and add a filter to `org-export-filter-special-block-functions' that 
strips the 'to-filter' and adds the `dataTable' where it is needed.

HTH,

Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-11-05  4:08       ` Charles C. Berry
@ 2015-11-06 19:45         ` Cook, Malcolm
  2015-11-06 21:01           ` Charles C. Berry
  0 siblings, 1 reply; 7+ messages in thread
From: Cook, Malcolm @ 2015-11-06 19:45 UTC (permalink / raw)
  To: 'Charles C. Berry'; +Cc: emacs-orgmode@gnu.org

> > Charles, Thanks again for you suggestion.  Alas, using 'header-args
 > >:wrap org-results-container' has the unforeseen (by me) side effect
 > >of masking my use of `#+ATTR_HTML :class dataTable` on selected
 > >exported tables (which I use to allow for search/sortable/scrollable
 > >tables).  Now, the ':class dataTable' attribute is placed on the new
 > ><div> instead of the <table> with undesired outcome.
 > 
 > > Do you have any thoughts on how to accomplish both my goals (apply
 > > :class table to selected results, and making ALL results be
 > > addressable using javascript.  FYI - My application is to hide all
 > > source blocks on html open.  Clicking on a source block caption
 > > shows the source.  This provides an HTML view that hides the source
 > > until desired.  My recipients of such analysis write-ups really like
 > > this.
 > 
 > [snip]
 > 
 > > # #+PROPERTY: header-args :wrap org-results-container
 > > #
 > 
 > This creates a special block and attributes on the results will apply
 > to it - not its contents.
 > 
 > What you want can be obtained by creating a different special block
 > and then applying a filter. So, wrap like this
 > 
 > #+PROPERTY: header-args :wrap org-results-container-to-filter
 > 
 > and add a filter to `org-export-filter-special-block-functions' that
 > strips the 'to-filter' and adds the `dataTable' where it is needed.

Hi Charles - ok - you've got me looking at ox aspects I've not yet explored.... good!

If I understand your suggestion, the filter you propose would need to somehow "know" which tables I desire to be adorned with `class :dataTable`.

How do you reckon I might declare that?

Upon reflection, I wonder if following source block header syntax might rather be considered "in the spirit of things" and worthy of implementation:
	
	#+begin_src R :exports value table :prefix '#+attr_html :class dataTable'

which would be interpreted by ob-sbe (somehow) to emit and
	#+attr_html :class dataTable
Immediately prior to the #+results, all of which might be further :wrapped.

Or am I putting the cart before the horse?

Reminder (in part to self): my goal is two-fold 
 (a) declare to the ox-html exporter a :class (i.e. dataTable) to adorn selected exported results tables
 (b) have a means of addressing the exported html results of a code block allowing to conditionally hide or expose it (i.e. toggle exposure when user click on the export source code.  This is what "> #+PROPERTY: header-args :wrap org-results-container" provided for me, except that the introduction of the new <div> was blocking my means of doing (a)

Cheers,

Malcolm

 > 
 > HTH,
 > 
 > Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: ox-html HOWTO? exporting #+RESULTS inside div
  2015-11-06 19:45         ` Cook, Malcolm
@ 2015-11-06 21:01           ` Charles C. Berry
  0 siblings, 0 replies; 7+ messages in thread
From: Charles C. Berry @ 2015-11-06 21:01 UTC (permalink / raw)
  To: Cook, Malcolm; +Cc: emacs-orgmode@gnu.org

On Fri, 6 Nov 2015, Cook, Malcolm wrote:

>>> Charles, Thanks again for you suggestion.  Alas, using 'header-args
> > >:wrap org-results-container' has the unforeseen (by me) side effect
> > >of masking my use of `#+ATTR_HTML :class dataTable` on selected
> > >exported tables (which I use to allow for search/sortable/scrollable
> > >tables).  Now, the ':class dataTable' attribute is placed on the new
> > ><div> instead of the <table> with undesired outcome.
> >
> > > Do you have any thoughts on how to accomplish both my goals (apply
> > > :class table to selected results, and making ALL results be
> > > addressable using javascript.  FYI - My application is to hide all
> > > source blocks on html open.  Clicking on a source block caption
> > > shows the source.  This provides an HTML view that hides the source
> > > until desired.  My recipients of such analysis write-ups really like
> > > this.
> >
> > [snip]
> >
> > > # #+PROPERTY: header-args :wrap org-results-container
> > > #
> >
> > This creates a special block and attributes on the results will apply
> > to it - not its contents.
> >
> > What you want can be obtained by creating a different special block
> > and then applying a filter. So, wrap like this
> >
> > #+PROPERTY: header-args :wrap org-results-container-to-filter
> >
> > and add a filter to `org-export-filter-special-block-functions' that
> > strips the 'to-filter' and adds the `dataTable' where it is needed.
>
> Hi Charles - ok - you've got me looking at ox aspects I've not yet explored.... good!
>
> If I understand your suggestion, the filter you propose would need to 
> somehow "know" which tables I desire to be adorned with `class 
> :dataTable`.
>

Make a really dumb filter that just wraps a special block with something 
like

`special-block>>>' ... `<<<special-block'

and export a document that has :wrap as above. Take a look at what you 
got. With luck you can fashion args for replace-regex-in-string and call 
it once or twice to convert whatever was between those markers to what you 
want. Then turn those calls into a filter.


> How do you reckon I might declare that?
>
> Upon reflection, I wonder if following source block header syntax might 
> rather be considered "in the spirit of things" and worthy of 
> implementation:
>
> 	#+begin_src R :exports value table :prefix '#+attr_html :class dataTable'
>
> which would be interpreted by ob-sbe (somehow) to emit and
> 	#+attr_html :class dataTable
> Immediately prior to the #+results, all of which might be further :wrapped.

The trouble is it will not be wrapped in the right place, and you are back 
to where you were when you started this thread.

>
> Or am I putting the cart before the horse?
>

I'd say so.


> Reminder (in part to self): my goal is two-fold (a) declare to the 
> ox-html exporter a :class (i.e. dataTable) to adorn selected exported 
> results tables

Of course there are other ways to solve this. You could create a derived 
backend and define a new kind of export block for it and a suitable 
transcoder. But that might seems like overkill to me.

> (b) have a means of addressing the exported html results of a code block 
> allowing to conditionally hide or expose it (i.e. toggle exposure when 
> user click on the export source code.  This is what "> #+PROPERTY: 
> header-args :wrap org-results-container" provided for me, except that 
> the introduction of the new <div> was blocking my means of doing (a)

Right. So you use replace-regex-in-string to fix that.

HTH,

Chuck

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-11-06 21:01 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-10-21 23:12 ox-html HOWTO? exporting #+RESULTS inside div Cook, Malcolm
2015-10-22  2:18 ` Charles C. Berry
2015-10-22  6:13   ` Cook, Malcolm
2015-11-05  0:02     ` Cook, Malcolm
2015-11-05  4:08       ` Charles C. Berry
2015-11-06 19:45         ` Cook, Malcolm
2015-11-06 21:01           ` Charles C. Berry

Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).