Hackage Haddock Restyler

Switches all Haddock docs on Hackage to an updated, Retina-friendly edition of the old ocean.css for superior information density.

Fra 08.11.2021. Se den seneste versjonen.

  1. // ==UserScript==
  2. // @name Hackage Haddock Restyler
  3. // @description Switches all Haddock docs on Hackage to an updated, Retina-friendly edition of the old ocean.css for superior information density.
  4. // @version 1.1
  5. // @grant none
  6. // @match https://hackage.haskell.org/*
  7. // @namespace https://greatest.deepsurf.us/users/833386
  8. // ==/UserScript==
  9.  
  10. [...document.head.querySelectorAll('link[rel="stylesheet"][title]')].forEach(s => {
  11. // ocean.css comes from the Hackage package <https://github.com/haskell/hackage>, which is under a BSD 2-clause license and (c) Simon Marlow & contributors.
  12. s.href = 'data:text/css;charset=UTF-8,' + encodeURIComponent(`
  13. :root {
  14. --img-plus: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAAAAABzpdGLAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/vCI/CkAAAAkSURBVBjTY2jCAAxYhf6hAPxCTEzUEWKCA3xC1LSRGD8SEV4Ar2ngCfYXGRoAAAAASUVORK5CYII=');
  15. --img-minus: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABIAAAASCAAAAABzpdGLAAAABGdBTUEAALGPC/xhBQAAACBjSFJNAAB6JgAAgIQAAPoAAACA6AAAdTAAAOpgAAA6mAAAF3CculE8AAAAAmJLR0QA/vCI/CkAAAAeSURBVBjTY2jCAAxYhf6hAPoIMcEBPiF6u4uI8AIANU7vyXuMqdQAAAAASUVORK5CYII=');
  16. --img-hslogo: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAC0AAAAgCAYAAACGhPFEAAABhGlDQ1BJQ0MgcHJvZmlsZQAAKJF9kT1Iw1AUhU9TpUUrDnYQcchQnSwUFXHUKhShQqgVWnUweekfNDEkKS6OgmvBwZ/FqoOLs64OroIg+APi5uak6CIl3pcUWsT44PE+znvncN+9gNCoMs3qSgCabpuZVFLM5VfE0Ct6EQYQREJmljErSWn4rq97BPh5F+dZ/u/+XH1qwWJAQCSeYYZpE68TT23aBud94igryyrxOfGYSQUSP3Jd8fiNc8llgWdGzWxmjjhKLJY6WOlgVjY14knimKrplC/kPFY5b3HWqjXWqpP/MFLQl5e4TnsYKSxgERJEKKihgipsxOnUSbGQofukj3/I9UvkUshVASPHPDagQXb94DP43VurODHuJUWSQPeL43yMAKFdoFl3nO9jx2me0MCegSu97d9oANOfpNfbWuwI6N8GLq7bmrIHXO4Ag0+GbMquFKQtFIvA+xmNKQ8M3AI9q17fWvc4fQCy1Kv0DXBwCIyWKHvN59/hzr79+6bVvx8bYnKEhh9QxwAAAAZiS0dEAAAAAAAA+UO7fwAAAAlwSFlzAAAN1wAADdcBQiibeAAAAAd0SU1FB+ULCAAMBeTmguwAAANuSURBVFjDzZhNaBNBFMfbJJZai0hVvJdaingQS6mCKF7Eq6D0IoheLFRR8eBFwYOgIIgfZ0GqFfTgB5qv5nMTSWISPJlEvEiiIU0T06pJSDYf6//BBkrIzjTNbpqFOc2b2f+8+c3Me6+vWq2+kCSpJrX+VtF/Np/P6ywWy3mfz1cOh8NSq+b1elfNZvORvm58lUrlYL1e/6ogWkLfZ9hMGI3GIbvd/i4YDLYUHQqFJIfD4YXdds1FFwoFfa1Wuwh9fxR0V9H/pFwuD5tMpglBEH4peTsQCFStVustCNdpLhyCRiDsOQOTDDCZyWazhMmc3+8XGZhksbhD3cJkioOJbw0mHziYCLDbobnoYrFImMxC318F3RX0Py6VStvgyf3AJNlLmCxwMDmTSqW4mHg8HsJkuluYTAOFKAOTT7AZlzExEg4MTJxduU2AiQHevgR9/xR0i+h/gF0hTA7Aoyklb2MnKsDkRmNujDNg/ECnTQmTnfDoSyVM0JcGJqcTiQRhcpXEMTDJYHGTuVyuH2OOY/hTtPlOGg+TbxxMxrD9w8DEysHERnawH8U4Qerw42FyBTZ5Bib3cZsMkSfh0TQHk+uRSEQPb5+C8CVNRNMniuJu/OAVOVbB20skIhqN6kkUB5M0LY4WSYulRWsiWsbkMMR9Z2Ai0LbT9gODRQ4mizImYxjn1Uy0jMk12BYYmNyDB7fKmCyzMKGDG4/Hddihkxj3DOIX2m3rugaByR4Yf2R4OwkRJ3AgdfQS4kWsKQnHS5qiqxKBmg4LHdxI67powgR2JnqcaG7E6nrVRauJxxpMRGByWX4TRjH+oap4qHUQW2CSpMCLAjAKxCgg67krr7lRaAtM3hMmFPJiLn9PPS4cTOYymQzdJjOYc7kj0Wo9443Dx8FkH6VzlNatBxPNAyakX79dLldUSbiMyVssfpBCXsz9qO2ASYvQlEoLJF7JjkoTWPxsLBbrh+gtbYemKicBDkoCKO2C+NuUhjEw+UmYbCjdontQxXRrqjE3hI84nU4fB5M3hMlmJrY3mxNbYHIUmKxwMLnQUyUEGZM7nNgkDqeM91SxRsYkwMCkbrPZXsNuQM2yWMf1DmByjAqWDExKcM45FhaT3S5AypjcZWHidrt/wEl7W06wWaVeCN8FTL4wYhPCZB52huax/wHTGtaZ0Db8KgAAAABJRU5ErkJggg==');
  17. --img-synopsis: url('data:image/png;base64,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PSJodHRwOi8vaXB0Yy5vcmcvc3RkL0lwdGM0eG1wRXh0LzIwMDgtMDItMjkvIgogICAgeG1sbnM6eG1wTU09Imh0dHA6Ly9ucy5hZG9iZS5jb20veGFwLzEuMC9tbS8iCiAgICB4bWxuczpzdEV2dD0iaHR0cDovL25zLmFkb2JlLmNvbS94YXAvMS4wL3NUeXBlL1Jlc291cmNlRXZlbnQjIgogICAgeG1sbnM6cGx1cz0iaHR0cDovL25zLnVzZXBsdXMub3JnL2xkZi94bXAvMS4wLyIKICAgIHhtbG5zOkdJTVA9Imh0dHA6Ly93d3cuZ2ltcC5vcmcveG1wLyIKICAgIHhtbG5zOmRjPSJodHRwOi8vcHVybC5vcmcvZGMvZWxlbWVudHMvMS4xLyIKICAgIHhtbG5zOnRpZmY9Imh0dHA6Ly9ucy5hZG9iZS5jb20vdGlmZi8xLjAvIgogICAgeG1sbnM6eG1wPSJodHRwOi8vbnMuYWRvYmUuY29tL3hhcC8xLjAvIgogICB4bXBNTTpEb2N1bWVudElEPSJnaW1wOmRvY2lkOmdpbXA6MDNhMjU5YjctMGU0YS00ODU0LTlmZTgtNTEzOGEyYzM4ZmJjIgogICB4bXBNTTpJbnN0YW5jZUlEPSJ4bXAuaWlkOjcxMDlhMDU2LTU4NjctNGFkNC05ZWE5LTIxOTE2OTdjODI3YSIKICAgeG1wTU06T3JpZ2luYWxEb2N1bWVudElEPSJ4bXAuZGlkOjBhMzU4MGJmLTk1YmItNDdhMC05MTFjLTJiY2YzNzIzM2FhZCIKICAgR0lNUDpBUEk9IjIuMCIKICAgR0lNUDpQbGF0Zm9ybT0iTWFjIE9TIgogICBHSU1QOlRpbWVTdGFtcD0iMTYzNjMzNTUzNzEzOTc3MyIKICAgR0lNUDpWZXJzaW9uPSIyLjEwLjIyIgogICBkYzpGb3JtYXQ9ImltYWdlL3BuZyIKICAgdGlmZjpPcmllbnRhdGlvbj0iMSIKICAgeG1wOkNyZWF0b3JUb29sPSJHSU1QIDIuMTAiPgogICA8aXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvbkNyZWF0ZWQ+CiAgIDxpcHRjRXh0OkxvY2F0aW9uU2hvd24+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpMb2NhdGlvblNob3duPgogICA8aXB0Y0V4dDpBcnR3b3JrT3JPYmplY3Q+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpBcnR3b3JrT3JPYmplY3Q+CiAgIDxpcHRjRXh0OlJlZ2lzdHJ5SWQ+CiAgICA8cmRmOkJhZy8+CiAgIDwvaXB0Y0V4dDpSZWdpc3RyeUlkPgogICA8eG1wTU06SGlzdG9yeT4KICAgIDxyZGY6U2VxPgogICAgIDxyZGY6bGkKICAgICAgc3RFdnQ6YWN0aW9uPSJzYXZlZCIKICAgICAgc3RFdnQ6Y2hhbmdlZD0iLyIKICAgICAgc3RFdnQ6aW5zdGFuY2VJRD0ieG1wLmlpZDowMDQ5NDE5Yi1iYTUxLTRiMDQtOWYzMi05NmY4M2MzYjJmMGQiCiAgICAgIHN0RXZ0OnNvZnR3YXJlQWdlbnQ9IkdpbXAgMi4xMCAoTWFjIE9TKSIKICAgICAgc3RFdnQ6d2hlbj0iMjAyMS0xMS0wN1QxNzozODo1Ny0wODowMCIvPgogICAgPC9yZGY6U2VxPgogICA8L3htcE1NOkhpc3Rvcnk+CiAgIDxwbHVzOkltYWdlU3VwcGxpZXI+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZVN1cHBsaWVyPgogICA8cGx1czpJbWFnZUNyZWF0b3I+CiAgICA8cmRmOlNlcS8+CiAgIDwvcGx1czpJbWFnZUNyZWF0b3I+CiAgIDxwbHVzOkNvcHlyaWdodE93bmVyPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6Q29weXJpZ2h0T3duZXI+CiAgIDxwbHVzOkxpY2Vuc29yPgogICAgPHJkZjpTZXEvPgogICA8L3BsdXM6TGljZW5zb3I+CiAgPC9yZGY6RGVzY3JpcHRpb24+CiA8L3JkZjpSREY+CjwveDp4bXBtZXRhPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAg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');
  18. }
  19.  
  20. /* @group Fundamentals */
  21.  
  22. * { margin: 0; padding: 0 }
  23.  
  24. /* Is this portable? */
  25. html {
  26. background-color: white;
  27. width: 100%;
  28. height: 100%;
  29. }
  30.  
  31. body {
  32. background: white;
  33. color: black;
  34. text-align: left;
  35. min-height: 100%;
  36. position: relative;
  37. }
  38.  
  39. p {
  40. margin: 0.8em 0;
  41. }
  42.  
  43. ul, ol {
  44. margin: 0.8em 0 0.8em 2em;
  45. }
  46.  
  47. dl {
  48. margin: 0.8em 0;
  49. }
  50.  
  51. dt {
  52. font-weight: bold;
  53. }
  54. dd {
  55. margin-left: 2em;
  56. }
  57.  
  58. a { text-decoration: none; }
  59. a[href]:link { color: rgb(196,69,29); }
  60. a[href]:visited { color: rgb(171,105,84); }
  61. a[href]:hover { text-decoration:underline; }
  62.  
  63. a[href].def:link, a[href].def:visited { color: black; }
  64. a[href].def:hover { color: rgb(78, 98, 114); }
  65.  
  66. /* @end */
  67.  
  68. /* @group Show and hide with JS */
  69.  
  70. body.js-enabled .hide-when-js-enabled {
  71. display: none;
  72. }
  73.  
  74. /* @end */
  75.  
  76. /* @group Fonts & Sizes */
  77.  
  78. /* Basic technique & IE workarounds from YUI 3
  79. For reasons, see:
  80. http://yui.yahooapis.com/3.1.1/build/cssfonts/fonts.css
  81. */
  82.  
  83. body {
  84. font:13px/1.4 sans-serif;
  85. *font-size:small; /* for IE */
  86. *font:x-small; /* for IE in quirks mode */
  87. }
  88.  
  89. h1 { font-size: 146.5%; /* 19pt */ }
  90. h2 { font-size: 131%; /* 17pt */ }
  91. h3 { font-size: 116%; /* 15pt */ }
  92. h4 { font-size: 100%; /* 13pt */ }
  93. h5 { font-size: 100%; /* 13pt */ }
  94.  
  95. select, input, button, textarea {
  96. font:99% sans-serif;
  97. }
  98.  
  99. table {
  100. font-size:inherit;
  101. font:100%;
  102. }
  103.  
  104. pre, code, kbd, samp, tt, .src {
  105. font-family:monospace;
  106. *font-size:108%;
  107. line-height: 124%;
  108. }
  109.  
  110. .links, .link {
  111. font-size: 85%; /* 11pt */
  112. }
  113.  
  114. #module-header .caption {
  115. font-size: 182%; /* 24pt */
  116. }
  117.  
  118. #module-header .caption sup {
  119. font-size: 70%;
  120. font-weight: normal;
  121. }
  122.  
  123. .info {
  124. font-size: 85%; /* 11pt */
  125. }
  126.  
  127. #table-of-contents, #synopsis {
  128. /* font-size: 85%; /* 11pt */
  129. }
  130.  
  131.  
  132. /* @end */
  133.  
  134. /* @group Common */
  135.  
  136. .caption, h1, h2, h3, h4, h5, h6, summary {
  137. font-weight: bold;
  138. color: rgb(78,98,114);
  139. margin: 0.8em 0 0.4em;
  140. }
  141.  
  142. * + h1, * + h2, * + h3, * + h4, * + h5, * + h6 {
  143. margin-top: 2em;
  144. }
  145.  
  146. h1 + h2, h2 + h3, h3 + h4, h4 + h5, h5 + h6 {
  147. margin-top: inherit;
  148. }
  149.  
  150. ul.links {
  151. list-style: none;
  152. text-align: left;
  153. float: right;
  154. display: inline-table;
  155. margin: 0 0 0 1em;
  156. }
  157.  
  158. ul.links li {
  159. display: inline;
  160. border-left: 1px solid #d5d5d5;
  161. white-space: nowrap;
  162. padding: 0;
  163. }
  164.  
  165. ul.links li a {
  166. padding: 0.2em 0.5em;
  167. }
  168.  
  169. .hide { display: none; }
  170. .show { display: inherit; }
  171. .clear { clear: both; }
  172.  
  173. .collapser {
  174. background-image: var(--img-minus);
  175. }
  176. .expander {
  177. background-image: var(--img-plus);
  178.  
  179. }
  180. .collapser, .expander {
  181. padding-left: 14px;
  182. margin-left: -14px;
  183. cursor: pointer;
  184. background-repeat: no-repeat;
  185. background-size: 9px 9px;
  186. background-position: left center;
  187. }
  188. p.caption.collapser,
  189. p.caption.expander {
  190. background-position: 0 0.4em;
  191. }
  192.  
  193. .instance.collapser, .instance.expander {
  194. margin-left: 0px;
  195. min-width: 9px;
  196. min-height: 9px;
  197. }
  198.  
  199. summary {
  200. cursor: pointer;
  201. outline: none;
  202. list-style-image: var(--img-plus);
  203. list-style-position: outside;
  204. }
  205.  
  206. details[open] > summary {
  207. list-style-image: var(--img-minus);
  208. }
  209.  
  210. pre {
  211. padding: 0.25em;
  212. margin: 0.8em 0;
  213. background: rgb(229,237,244);
  214. overflow: auto;
  215. border-bottom: 0.25em solid white;
  216. /* white border adds some space below the box to compensate
  217. for visual extra space that paragraphs have between baseline
  218. and the bounding box */
  219. }
  220.  
  221. .src {
  222. background: #f0f0f0;
  223. padding: 0.2em 0.5em;
  224. }
  225.  
  226. .keyword { font-weight: normal; }
  227. .def { font-weight: bold; }
  228.  
  229. @media print {
  230. #footer { display: none; }
  231. }
  232.  
  233. /* @end */
  234.  
  235. /* @group Page Structure */
  236.  
  237. #content {
  238. margin: 0 auto;
  239. padding: 0 2em 6em;
  240. }
  241.  
  242. #package-header {
  243. background: rgb(41,56,69);
  244. border-top: 5px solid rgb(78,98,114);
  245. color: #ddd;
  246. padding: 0.2em;
  247. position: relative;
  248. text-align: left;
  249. }
  250.  
  251. #package-header .caption {
  252. background-image: var(--img-hslogo);
  253. background-repeat: no-repeat;
  254. background-size: 22.5px 16px;
  255. background-position: 0em;
  256. color: white;
  257. margin: 0 2em;
  258. font-weight: normal;
  259. font-style: normal;
  260. padding-left: 2em;
  261. }
  262.  
  263. #package-header a:link, #package-header a:visited { color: white; }
  264. #package-header a:hover { background: rgb(78,98,114); }
  265.  
  266. #module-header .caption {
  267. color: rgb(78,98,114);
  268. font-weight: bold;
  269. border-bottom: 1px solid #ddd;
  270. }
  271.  
  272. table.info {
  273. float: right;
  274. padding: 0.5em 1em;
  275. border: 1px solid #ddd;
  276. color: rgb(78,98,114);
  277. background-color: #fff;
  278. max-width: 40%;
  279. border-spacing: 0;
  280. position: relative;
  281. top: -0.5em;
  282. margin: 0 0 0 2em;
  283. }
  284.  
  285. .info th {
  286. padding: 0 1em 0 0;
  287. }
  288.  
  289. div#style-menu-holder {
  290. position: relative;
  291. z-index: 2;
  292. display: inline;
  293. }
  294.  
  295. #style-menu {
  296. position: absolute;
  297. z-index: 1;
  298. overflow: visible;
  299. background: #374c5e;
  300. margin: 0;
  301. text-align: center;
  302. right: 0;
  303. padding: 0;
  304. top: 1.25em;
  305. }
  306.  
  307. #style-menu li {
  308. display: list-item;
  309. border-style: none;
  310. margin: 0;
  311. padding: 0;
  312. color: #000;
  313. list-style-type: none;
  314. }
  315.  
  316. #style-menu li + li {
  317. border-top: 1px solid #919191;
  318. }
  319.  
  320. #style-menu a {
  321. width: 6em;
  322. padding: 3px;
  323. display: block;
  324. }
  325.  
  326. #footer {
  327. background: #ddd;
  328. border-top: 1px solid #aaa;
  329. padding: 0.5em 0;
  330. color: #666;
  331. text-align: center;
  332. position: absolute;
  333. bottom: 0;
  334. width: 100%;
  335. height: 3em;
  336. }
  337.  
  338. /* @end */
  339.  
  340. /* @group Front Matter */
  341.  
  342. #table-of-contents {
  343. float: right;
  344. clear: right;
  345. background: #faf9dc;
  346. border: 1px solid #d8d7ad;
  347. padding: 0.5em 1em;
  348. max-width: 20em;
  349. margin: 0.5em 0 1em 1em;
  350. }
  351.  
  352. #table-of-contents .caption {
  353. text-align: center;
  354. margin: 0;
  355. }
  356.  
  357. #table-of-contents ul {
  358. list-style: none;
  359. margin: 0;
  360. }
  361.  
  362. #table-of-contents ul ul {
  363. margin-left: 2em;
  364. }
  365.  
  366. #description .caption {
  367. display: none;
  368. }
  369.  
  370. #synopsis {
  371. display: block;
  372. position: fixed;
  373. right: 0;
  374. height: 80%;
  375. top: 10%;
  376. padding: 0;
  377. max-width: 75%;
  378. /* Ensure that synopsis covers everything (including MathJAX markup) */
  379. z-index: 1;
  380. }
  381.  
  382. #synopsis summary {
  383. display: block;
  384. float: left;
  385. width: 29px;
  386. color: rgba(255,255,255,0);
  387. height: 110px;
  388. margin: 0;
  389. font-size: 1px;
  390. padding: 0;
  391. background: var(--img-synopsis) no-repeat 0px -8px;
  392. background-size: 128px 104px;
  393. }
  394.  
  395. #synopsis details[open] > summary {
  396. background: var(--img-synopsis) no-repeat -64px -8px;
  397. background-size: 128px 104px;
  398. }
  399.  
  400. #synopsis ul {
  401. height: 100%;
  402. overflow: auto;
  403. padding: 0.5em;
  404. margin: 0;
  405. }
  406.  
  407. #synopsis ul ul {
  408. overflow: hidden;
  409. }
  410.  
  411. #synopsis ul,
  412. #synopsis ul li.src {
  413. background-color: #faf9dc;
  414. white-space: nowrap;
  415. list-style: none;
  416. margin-left: 0;
  417. }
  418.  
  419. /* @end */
  420.  
  421. /* @group Main Content */
  422.  
  423. #interface div.top { margin: 2em 0; }
  424. #interface h1 + div.top,
  425. #interface h2 + div.top,
  426. #interface h3 + div.top,
  427. #interface h4 + div.top,
  428. #interface h5 + div.top {
  429. margin-top: 1em;
  430. }
  431. #interface .src .selflink,
  432. #interface .src .link {
  433. float: right;
  434. color: #919191;
  435. background: #f0f0f0;
  436. padding: 0 0.5em 0.2em;
  437. margin: 0 -0.5em 0 0;
  438. -moz-user-select: none;
  439. }
  440. #interface .src .selflink {
  441. border-left: 1px solid #919191;
  442. margin: 0 -0.5em 0 0.5em;
  443. }
  444.  
  445. #interface span.fixity {
  446. color: #919191;
  447. border-left: 1px solid #919191;
  448. padding: 0.2em 0.5em 0.2em 0.5em;
  449. margin: 0 -1em 0 1em;
  450. }
  451.  
  452. #interface span.rightedge {
  453. border-left: 1px solid #919191;
  454. padding: 0.2em 0 0.2em 0;
  455. margin: 0 0 0 1em;
  456. }
  457.  
  458. #interface table { border-spacing: 2px; }
  459. #interface td {
  460. vertical-align: top;
  461. padding-left: 0.5em;
  462. }
  463.  
  464. #interface td.doc p {
  465. margin: 0;
  466. }
  467. #interface td.doc p + p {
  468. margin-top: 0.8em;
  469. }
  470.  
  471. .doc table {
  472. border-collapse: collapse;
  473. border-spacing: 0px;
  474. }
  475.  
  476. .doc th,
  477. .doc td {
  478. padding: 5px;
  479. border: 1px solid #ddd;
  480. }
  481.  
  482. .doc th {
  483. background-color: #f0f0f0;
  484. }
  485.  
  486. .clearfix:after {
  487. clear: both;
  488. content: " ";
  489. display: block;
  490. height: 0;
  491. visibility: hidden;
  492. }
  493.  
  494. .subs.fields ul {
  495. list-style: none;
  496. display: table;
  497. margin: 0;
  498. }
  499.  
  500. .subs.fields ul li {
  501. display: table-row;
  502. }
  503.  
  504. .subs ul li dfn {
  505. display: table-cell;
  506. font-style: normal;
  507. font-weight: bold;
  508. margin: 1px 0;
  509. white-space: nowrap;
  510. }
  511.  
  512. .subs ul li > .doc {
  513. display: table-cell;
  514. padding-left: 0.5em;
  515. margin-bottom: 0.5em;
  516. }
  517.  
  518. .subs ul li > .doc p {
  519. margin: 0;
  520. }
  521.  
  522. /* Render short-style data instances */
  523. .inst ul {
  524. height: 100%;
  525. padding: 0.5em;
  526. margin: 0;
  527. }
  528.  
  529. .inst, .inst li {
  530. list-style: none;
  531. margin-left: 1em;
  532. }
  533.  
  534. /* Workaround for bug in Firefox (issue #384) */
  535. .inst-left {
  536. float: left;
  537. }
  538.  
  539. .top p.src {
  540. border-top: 1px solid #ccc;
  541. }
  542.  
  543. .subs, .doc {
  544. /* use this selector for one level of indent */
  545. padding-left: 2em;
  546. }
  547.  
  548. .warning {
  549. color: red;
  550. }
  551.  
  552. .arguments {
  553. margin-top: -0.4em;
  554. }
  555. .arguments .caption {
  556. display: none;
  557. }
  558.  
  559. .fields { padding-left: 1em; }
  560.  
  561. .fields .caption { display: none; }
  562.  
  563. .fields p { margin: 0 0; }
  564.  
  565. /* this seems bulky to me
  566. .methods, .constructors {
  567. background: #f8f8f8;
  568. border: 1px solid #eee;
  569. }
  570. */
  571.  
  572. /* @end */
  573.  
  574. /* @group Auxillary Pages */
  575.  
  576.  
  577. .extension-list {
  578. list-style-type: none;
  579. margin-left: 0;
  580. }
  581.  
  582. #mini {
  583. margin: 0 auto;
  584. padding: 0 1em 1em;
  585. }
  586.  
  587. #mini > * {
  588. font-size: 93%; /* 12pt */
  589. }
  590.  
  591. #mini #module-list .caption,
  592. #mini #module-header .caption {
  593. font-size: 125%; /* 15pt */
  594. }
  595.  
  596. #mini #interface h1,
  597. #mini #interface h2,
  598. #mini #interface h3,
  599. #mini #interface h4 {
  600. font-size: 109%; /* 13pt */
  601. margin: 1em 0 0;
  602. }
  603.  
  604. #mini #interface .top,
  605. #mini #interface .src {
  606. margin: 0;
  607. }
  608.  
  609. #mini #module-list ul {
  610. list-style: none;
  611. margin: 0;
  612. }
  613.  
  614. #alphabet ul {
  615. list-style: none;
  616. padding: 0;
  617. margin: 0.5em 0 0;
  618. text-align: center;
  619. }
  620.  
  621. #alphabet li {
  622. display: inline;
  623. margin: 0 0.25em;
  624. }
  625.  
  626. #alphabet a {
  627. font-weight: bold;
  628. }
  629.  
  630. #index .caption,
  631. #module-list .caption { font-size: 131%; /* 17pt */ }
  632.  
  633. #index table {
  634. margin-left: 2em;
  635. }
  636.  
  637. #index .src {
  638. font-weight: bold;
  639. }
  640. #index .alt {
  641. font-size: 77%; /* 10pt */
  642. font-style: italic;
  643. padding-left: 2em;
  644. }
  645.  
  646. #index td + td {
  647. padding-left: 1em;
  648. }
  649.  
  650. #module-list ul {
  651. list-style: none;
  652. margin: 0 0 0 2em;
  653. }
  654.  
  655. #module-list li {
  656. clear: right;
  657. }
  658.  
  659. #module-list span.collapser,
  660. #module-list span.expander {
  661. background-position: 0 0.3em;
  662. }
  663.  
  664. #module-list .package {
  665. float: right;
  666. }
  667.  
  668. :target {
  669. background-color: #ffff00;
  670. }
  671.  
  672. /* @end */
  673.  
  674. `);
  675. });
  676.