prism-rails 1.6.0.3 → 1.19.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (341) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +3 -0
  3. data/README.md +88 -44
  4. data/lib/prism-rails/version.rb +1 -1
  5. data/vendor/assets/javascripts/languages/index.js +82 -0
  6. data/vendor/assets/javascripts/{prism → languages}/prism-abap.js +2 -2
  7. data/vendor/assets/javascripts/languages/prism-abnf.js +54 -0
  8. data/vendor/assets/javascripts/{prism → languages}/prism-actionscript.js +3 -5
  9. data/vendor/assets/javascripts/{prism → languages}/prism-ada.js +2 -2
  10. data/vendor/assets/javascripts/languages/prism-antlr4.js +65 -0
  11. data/vendor/assets/javascripts/languages/prism-apacheconf.js +47 -0
  12. data/vendor/assets/javascripts/{prism → languages}/prism-apl.js +8 -5
  13. data/vendor/assets/javascripts/{prism → languages}/prism-applescript.js +3 -3
  14. data/vendor/assets/javascripts/languages/prism-aql.js +41 -0
  15. data/vendor/assets/javascripts/languages/prism-arduino.js +5 -0
  16. data/vendor/assets/javascripts/languages/prism-arff.js +10 -0
  17. data/vendor/assets/javascripts/{prism → languages}/prism-asciidoc.js +23 -60
  18. data/vendor/assets/javascripts/languages/prism-asm6502.js +28 -0
  19. data/vendor/assets/javascripts/{prism → languages}/prism-aspnet.js +22 -10
  20. data/vendor/assets/javascripts/languages/prism-autohotkey.js +27 -0
  21. data/vendor/assets/javascripts/{prism → languages}/prism-autoit.js +1 -0
  22. data/vendor/assets/javascripts/languages/prism-bash.js +197 -0
  23. data/vendor/assets/javascripts/{prism → languages}/prism-basic.js +5 -2
  24. data/vendor/assets/javascripts/{prism → languages}/prism-batch.js +0 -0
  25. data/vendor/assets/javascripts/languages/prism-bbcode.js +27 -0
  26. data/vendor/assets/javascripts/{prism → languages}/prism-bison.js +0 -0
  27. data/vendor/assets/javascripts/languages/prism-bnf.js +21 -0
  28. data/vendor/assets/javascripts/{prism → languages}/prism-brainfuck.js +0 -0
  29. data/vendor/assets/javascripts/languages/prism-brightscript.js +44 -0
  30. data/vendor/assets/javascripts/languages/prism-bro.js +48 -0
  31. data/vendor/assets/javascripts/languages/prism-c.js +41 -0
  32. data/vendor/assets/javascripts/languages/prism-cil.js +27 -0
  33. data/vendor/assets/javascripts/languages/prism-clike.js +30 -0
  34. data/vendor/assets/javascripts/languages/prism-clojure.js +16 -0
  35. data/vendor/assets/javascripts/languages/prism-cmake.js +29 -0
  36. data/vendor/assets/javascripts/{prism → languages}/prism-coffeescript.js +6 -5
  37. data/vendor/assets/javascripts/languages/prism-concurnas.js +48 -0
  38. data/vendor/assets/javascripts/languages/prism-core.js +627 -0
  39. data/vendor/assets/javascripts/languages/prism-cpp.js +21 -0
  40. data/vendor/assets/javascripts/{prism → languages}/prism-crystal.js +5 -7
  41. data/vendor/assets/javascripts/languages/prism-csharp.js +81 -0
  42. data/vendor/assets/javascripts/languages/prism-csp.js +25 -0
  43. data/vendor/assets/javascripts/languages/prism-css-extras.js +109 -0
  44. data/vendor/assets/javascripts/languages/prism-css.js +62 -0
  45. data/vendor/assets/javascripts/{prism → languages}/prism-d.js +49 -34
  46. data/vendor/assets/javascripts/{prism → languages}/prism-dart.js +8 -2
  47. data/vendor/assets/javascripts/languages/prism-diff.js +54 -0
  48. data/vendor/assets/javascripts/languages/prism-django.js +60 -0
  49. data/vendor/assets/javascripts/languages/prism-dns-zone-file.js +33 -0
  50. data/vendor/assets/javascripts/languages/prism-docker.js +11 -0
  51. data/vendor/assets/javascripts/languages/prism-ebnf.js +22 -0
  52. data/vendor/assets/javascripts/{prism → languages}/prism-eiffel.js +20 -7
  53. data/vendor/assets/javascripts/languages/prism-ejs.js +24 -0
  54. data/vendor/assets/javascripts/{prism → languages}/prism-elixir.js +14 -15
  55. data/vendor/assets/javascripts/languages/prism-elm.js +44 -0
  56. data/vendor/assets/javascripts/languages/prism-erb.js +20 -0
  57. data/vendor/assets/javascripts/{prism → languages}/prism-erlang.js +7 -4
  58. data/vendor/assets/javascripts/languages/prism-etlua.js +23 -0
  59. data/vendor/assets/javascripts/languages/prism-factor.js +403 -0
  60. data/vendor/assets/javascripts/languages/prism-firestore-security-rules.js +35 -0
  61. data/vendor/assets/javascripts/languages/prism-flow.js +35 -0
  62. data/vendor/assets/javascripts/{prism → languages}/prism-fortran.js +5 -2
  63. data/vendor/assets/javascripts/languages/prism-fsharp.js +67 -0
  64. data/vendor/assets/javascripts/languages/prism-ftl.js +97 -0
  65. data/vendor/assets/javascripts/languages/prism-gcode.js +15 -0
  66. data/vendor/assets/javascripts/languages/prism-gdscript.js +27 -0
  67. data/vendor/assets/javascripts/languages/prism-gedcom.js +28 -0
  68. data/vendor/assets/javascripts/languages/prism-gherkin.js +85 -0
  69. data/vendor/assets/javascripts/{prism → languages}/prism-git.js +2 -2
  70. data/vendor/assets/javascripts/{prism → languages}/prism-glsl.js +3 -3
  71. data/vendor/assets/javascripts/languages/prism-gml.js +7 -0
  72. data/vendor/assets/javascripts/languages/prism-go.js +12 -0
  73. data/vendor/assets/javascripts/languages/prism-graphql.js +31 -0
  74. data/vendor/assets/javascripts/{prism → languages}/prism-groovy.js +12 -10
  75. data/vendor/assets/javascripts/{prism → languages}/prism-haml.js +14 -26
  76. data/vendor/assets/javascripts/languages/prism-handlebars.js +37 -0
  77. data/vendor/assets/javascripts/languages/prism-haskell.js +38 -0
  78. data/vendor/assets/javascripts/{prism → languages}/prism-haxe.js +4 -2
  79. data/vendor/assets/javascripts/languages/prism-hcl.js +65 -0
  80. data/vendor/assets/javascripts/languages/prism-hpkp.js +20 -0
  81. data/vendor/assets/javascripts/languages/prism-hsts.js +20 -0
  82. data/vendor/assets/javascripts/languages/prism-http.js +77 -0
  83. data/vendor/assets/javascripts/languages/prism-ichigojam.js +15 -0
  84. data/vendor/assets/javascripts/{prism → languages}/prism-icon.js +4 -1
  85. data/vendor/assets/javascripts/{prism → languages}/prism-inform7.js +6 -3
  86. data/vendor/assets/javascripts/{prism → languages}/prism-ini.js +2 -2
  87. data/vendor/assets/javascripts/languages/prism-io.js +31 -0
  88. data/vendor/assets/javascripts/{prism → languages}/prism-j.js +5 -2
  89. data/vendor/assets/javascripts/{prism → languages}/prism-jade.js +0 -0
  90. data/vendor/assets/javascripts/languages/prism-java.js +63 -0
  91. data/vendor/assets/javascripts/languages/prism-javadoc.js +54 -0
  92. data/vendor/assets/javascripts/languages/prism-javadoclike.js +87 -0
  93. data/vendor/assets/javascripts/languages/prism-javascript.js +91 -0
  94. data/vendor/assets/javascripts/languages/prism-javastacktrace.js +93 -0
  95. data/vendor/assets/javascripts/{prism → languages}/prism-jolie.js +9 -10
  96. data/vendor/assets/javascripts/languages/prism-jq.js +67 -0
  97. data/vendor/assets/javascripts/languages/prism-js-extras.js +104 -0
  98. data/vendor/assets/javascripts/languages/prism-js-templates.js +346 -0
  99. data/vendor/assets/javascripts/languages/prism-jsdoc.js +73 -0
  100. data/vendor/assets/javascripts/languages/prism-json.js +19 -0
  101. data/vendor/assets/javascripts/languages/prism-json5.js +23 -0
  102. data/vendor/assets/javascripts/languages/prism-jsonp.js +7 -0
  103. data/vendor/assets/javascripts/languages/prism-jsx.js +126 -0
  104. data/vendor/assets/javascripts/languages/prism-julia.js +13 -0
  105. data/vendor/assets/javascripts/languages/prism-keyman.js +14 -0
  106. data/vendor/assets/javascripts/{prism → languages}/prism-kotlin.js +6 -6
  107. data/vendor/assets/javascripts/{prism → languages}/prism-latex.js +16 -13
  108. data/vendor/assets/javascripts/languages/prism-latte.js +69 -0
  109. data/vendor/assets/javascripts/{prism → languages}/prism-less.js +3 -9
  110. data/vendor/assets/javascripts/languages/prism-lilypond.js +69 -0
  111. data/vendor/assets/javascripts/languages/prism-liquid.js +12 -0
  112. data/vendor/assets/javascripts/languages/prism-lisp.js +197 -0
  113. data/vendor/assets/javascripts/{prism → languages}/prism-livescript.js +19 -18
  114. data/vendor/assets/javascripts/{prism → languages}/prism-lolcode.js +3 -2
  115. data/vendor/assets/javascripts/{prism → languages}/prism-lua.js +0 -0
  116. data/vendor/assets/javascripts/{prism → languages}/prism-makefile.js +5 -2
  117. data/vendor/assets/javascripts/languages/prism-markdown.js +344 -0
  118. data/vendor/assets/javascripts/languages/prism-markup-templating.js +123 -0
  119. data/vendor/assets/javascripts/languages/prism-markup.js +103 -0
  120. data/vendor/assets/javascripts/{prism → languages}/prism-matlab.js +5 -3
  121. data/vendor/assets/javascripts/{prism → languages}/prism-mel.js +7 -3
  122. data/vendor/assets/javascripts/{prism → languages}/prism-mizar.js +0 -0
  123. data/vendor/assets/javascripts/{prism → languages}/prism-monkey.js +9 -3
  124. data/vendor/assets/javascripts/languages/prism-moonscript.js +57 -0
  125. data/vendor/assets/javascripts/languages/prism-n1ql.js +18 -0
  126. data/vendor/assets/javascripts/languages/prism-n4js.js +14 -0
  127. data/vendor/assets/javascripts/languages/prism-nand2tetris-hdl.js +9 -0
  128. data/vendor/assets/javascripts/languages/prism-nasm.js +24 -0
  129. data/vendor/assets/javascripts/languages/prism-neon.js +41 -0
  130. data/vendor/assets/javascripts/languages/prism-nginx.js +11 -0
  131. data/vendor/assets/javascripts/{prism → languages}/prism-nim.js +4 -1
  132. data/vendor/assets/javascripts/{prism → languages}/prism-nix.js +2 -1
  133. data/vendor/assets/javascripts/languages/prism-nsis.js +29 -0
  134. data/vendor/assets/javascripts/languages/prism-objectivec.js +7 -0
  135. data/vendor/assets/javascripts/languages/prism-ocaml.js +41 -0
  136. data/vendor/assets/javascripts/languages/prism-opencl.js +54 -0
  137. data/vendor/assets/javascripts/{prism → languages}/prism-oz.js +6 -2
  138. data/vendor/assets/javascripts/{prism → languages}/prism-parigp.js +4 -1
  139. data/vendor/assets/javascripts/languages/prism-parser.js +73 -0
  140. data/vendor/assets/javascripts/{prism → languages}/prism-pascal.js +9 -4
  141. data/vendor/assets/javascripts/languages/prism-pascaligo.js +62 -0
  142. data/vendor/assets/javascripts/languages/prism-pcaxis.js +53 -0
  143. data/vendor/assets/javascripts/languages/prism-perl.js +191 -0
  144. data/vendor/assets/javascripts/{prism → languages}/prism-php-extras.js +3 -3
  145. data/vendor/assets/javascripts/languages/prism-php.js +130 -0
  146. data/vendor/assets/javascripts/languages/prism-phpdoc.js +27 -0
  147. data/vendor/assets/javascripts/languages/prism-plsql.js +26 -0
  148. data/vendor/assets/javascripts/languages/prism-powershell.js +60 -0
  149. data/vendor/assets/javascripts/{prism → languages}/prism-processing.js +2 -2
  150. data/vendor/assets/javascripts/{prism → languages}/prism-prolog.js +4 -1
  151. data/vendor/assets/javascripts/{prism → languages}/prism-properties.js +2 -2
  152. data/vendor/assets/javascripts/languages/prism-protobuf.js +36 -0
  153. data/vendor/assets/javascripts/languages/prism-pug.js +181 -0
  154. data/vendor/assets/javascripts/{prism → languages}/prism-puppet.js +7 -2
  155. data/vendor/assets/javascripts/{prism → languages}/prism-pure.js +19 -17
  156. data/vendor/assets/javascripts/languages/prism-python.js +64 -0
  157. data/vendor/assets/javascripts/{prism → languages}/prism-q.js +13 -6
  158. data/vendor/assets/javascripts/languages/prism-qml.js +58 -0
  159. data/vendor/assets/javascripts/{prism → languages}/prism-qore.js +7 -4
  160. data/vendor/assets/javascripts/{prism → languages}/prism-r.js +5 -2
  161. data/vendor/assets/javascripts/{prism → languages}/prism-reason.js +4 -8
  162. data/vendor/assets/javascripts/languages/prism-regex.js +97 -0
  163. data/vendor/assets/javascripts/languages/prism-renpy.js +29 -0
  164. data/vendor/assets/javascripts/{prism → languages}/prism-rest.js +4 -4
  165. data/vendor/assets/javascripts/{prism → languages}/prism-rip.js +7 -3
  166. data/vendor/assets/javascripts/{prism → languages}/prism-roboconf.js +0 -0
  167. data/vendor/assets/javascripts/languages/prism-robotframework.js +104 -0
  168. data/vendor/assets/javascripts/{prism → languages}/prism-ruby.js +49 -15
  169. data/vendor/assets/javascripts/languages/prism-rust.js +68 -0
  170. data/vendor/assets/javascripts/languages/prism-sas.js +302 -0
  171. data/vendor/assets/javascripts/{prism → languages}/prism-sass.js +1 -2
  172. data/vendor/assets/javascripts/{prism → languages}/prism-scala.js +10 -11
  173. data/vendor/assets/javascripts/languages/prism-scheme.js +33 -0
  174. data/vendor/assets/javascripts/{prism → languages}/prism-scss.js +18 -16
  175. data/vendor/assets/javascripts/languages/prism-shell-session.js +54 -0
  176. data/vendor/assets/javascripts/{prism → languages}/prism-smalltalk.js +9 -9
  177. data/vendor/assets/javascripts/languages/prism-smarty.js +87 -0
  178. data/vendor/assets/javascripts/languages/prism-solidity.js +20 -0
  179. data/vendor/assets/javascripts/languages/prism-solution-file.js +51 -0
  180. data/vendor/assets/javascripts/languages/prism-soy.js +96 -0
  181. data/vendor/assets/javascripts/languages/prism-sparql.js +18 -0
  182. data/vendor/assets/javascripts/languages/prism-splunk-spl.js +24 -0
  183. data/vendor/assets/javascripts/languages/prism-sqf.js +34 -0
  184. data/vendor/assets/javascripts/languages/prism-sql.js +24 -0
  185. data/vendor/assets/javascripts/{prism → languages}/prism-stylus.js +16 -7
  186. data/vendor/assets/javascripts/languages/prism-swift.js +25 -0
  187. data/vendor/assets/javascripts/languages/prism-t4-cs.js +1 -0
  188. data/vendor/assets/javascripts/languages/prism-t4-templating.js +49 -0
  189. data/vendor/assets/javascripts/languages/prism-t4-vb.js +1 -0
  190. data/vendor/assets/javascripts/languages/prism-tap.js +20 -0
  191. data/vendor/assets/javascripts/languages/prism-tcl.js +46 -0
  192. data/vendor/assets/javascripts/{prism → languages}/prism-textile.js +35 -32
  193. data/vendor/assets/javascripts/languages/prism-toml.js +43 -0
  194. data/vendor/assets/javascripts/languages/prism-tsx.js +2 -0
  195. data/vendor/assets/javascripts/languages/prism-tt2.js +53 -0
  196. data/vendor/assets/javascripts/languages/prism-turtle.js +54 -0
  197. data/vendor/assets/javascripts/{prism → languages}/prism-twig.js +8 -8
  198. data/vendor/assets/javascripts/languages/prism-typescript.js +7 -0
  199. data/vendor/assets/javascripts/languages/prism-vala.js +74 -0
  200. data/vendor/assets/javascripts/languages/prism-vbnet.js +15 -0
  201. data/vendor/assets/javascripts/languages/prism-velocity.js +72 -0
  202. data/vendor/assets/javascripts/languages/prism-verilog.js +20 -0
  203. data/vendor/assets/javascripts/{prism → languages}/prism-vhdl.js +2 -2
  204. data/vendor/assets/javascripts/{prism → languages}/prism-vim.js +1 -1
  205. data/vendor/assets/javascripts/languages/prism-visual-basic.js +34 -0
  206. data/vendor/assets/javascripts/languages/prism-wasm.js +31 -0
  207. data/vendor/assets/javascripts/{prism → languages}/prism-wiki.js +7 -6
  208. data/vendor/assets/javascripts/languages/prism-xeora.js +114 -0
  209. data/vendor/assets/javascripts/{prism → languages}/prism-xojo.js +1 -1
  210. data/vendor/assets/javascripts/languages/prism-xquery.js +162 -0
  211. data/vendor/assets/javascripts/languages/prism-yaml.js +76 -0
  212. data/vendor/assets/javascripts/languages/prism-zig.js +97 -0
  213. data/vendor/assets/javascripts/prism-plugin/prism-autolinker.js +13 -8
  214. data/vendor/assets/javascripts/prism-plugin/prism-autoloader.js +306 -95
  215. data/vendor/assets/javascripts/prism-plugin/prism-command-line.js +96 -38
  216. data/vendor/assets/javascripts/prism-plugin/prism-copy-to-clipboard.js +10 -10
  217. data/vendor/assets/javascripts/prism-plugin/prism-custom-class.js +89 -23
  218. data/vendor/assets/javascripts/prism-plugin/prism-data-uri-highlight.js +2 -2
  219. data/vendor/assets/javascripts/prism-plugin/prism-diff-highlight.js +83 -0
  220. data/vendor/assets/javascripts/prism-plugin/prism-download-button.js +19 -0
  221. data/vendor/assets/javascripts/prism-plugin/prism-file-highlight.js +53 -41
  222. data/vendor/assets/javascripts/prism-plugin/prism-filter-highlight-all.js +125 -0
  223. data/vendor/assets/javascripts/prism-plugin/prism-inline-color.js +88 -0
  224. data/vendor/assets/javascripts/prism-plugin/prism-jsonp-highlight.js +124 -69
  225. data/vendor/assets/javascripts/prism-plugin/prism-keep-markup.js +4 -2
  226. data/vendor/assets/javascripts/prism-plugin/prism-line-highlight.js +195 -115
  227. data/vendor/assets/javascripts/prism-plugin/prism-line-numbers.js +154 -43
  228. data/vendor/assets/javascripts/prism-plugin/prism-match-braces.js +184 -0
  229. data/vendor/assets/javascripts/prism-plugin/prism-normalize-whitespace.js +29 -11
  230. data/vendor/assets/javascripts/prism-plugin/prism-previewers.js +703 -0
  231. data/vendor/assets/javascripts/prism-plugin/prism-remove-initial-line-feed.js +2 -2
  232. data/vendor/assets/javascripts/prism-plugin/prism-show-invisibles.js +83 -18
  233. data/vendor/assets/javascripts/prism-plugin/prism-show-language.js +190 -19
  234. data/vendor/assets/javascripts/prism-plugin/prism-toolbar.js +53 -8
  235. data/vendor/assets/javascripts/prism-plugin/prism-unescaped-markup.js +11 -7
  236. data/vendor/assets/javascripts/prism-plugin/prism-wpd.js +12 -12
  237. data/vendor/assets/javascripts/prism.js +210 -127
  238. data/vendor/assets/stylesheets/prism-plugin/prism-diff-highlight.css +13 -0
  239. data/vendor/assets/stylesheets/prism-plugin/prism-inline-color.css +9 -0
  240. data/vendor/assets/stylesheets/prism-plugin/prism-line-highlight.css +5 -0
  241. data/vendor/assets/stylesheets/prism-plugin/prism-line-numbers.css +4 -3
  242. data/vendor/assets/stylesheets/prism-plugin/prism-match-braces.css +29 -0
  243. data/vendor/assets/stylesheets/prism-plugin/prism-previewers.css +242 -0
  244. data/vendor/assets/stylesheets/prism-plugin/prism-show-invisibles.css +7 -6
  245. data/vendor/assets/stylesheets/prism-plugin/prism-toolbar.css +21 -15
  246. data/vendor/assets/stylesheets/prism-plugin/prism-unescaped-markup.css +4 -4
  247. data/vendor/assets/stylesheets/prism-theme/prism-a11y-dark.css +161 -0
  248. data/vendor/assets/stylesheets/{prism-atom-dark.css → prism-theme/prism-atom-dark.css} +10 -13
  249. data/vendor/assets/stylesheets/prism-theme/prism-autolinker.css +3 -0
  250. data/vendor/assets/stylesheets/{prism-base16-ateliersulphurpool.light.css → prism-theme/prism-base16-ateliersulphurpool.light.css} +57 -53
  251. data/vendor/assets/stylesheets/{prism-cb.css → prism-theme/prism-cb.css} +27 -27
  252. data/vendor/assets/stylesheets/prism-theme/prism-command-line.css +33 -0
  253. data/vendor/assets/stylesheets/{prism-coy.css → prism-theme/prism-coy.css} +14 -9
  254. data/vendor/assets/stylesheets/prism-theme/prism-darcula.css +159 -0
  255. data/vendor/assets/stylesheets/{prism-dark.css → prism-theme/prism-dark.css} +2 -1
  256. data/vendor/assets/stylesheets/prism-theme/prism-dracula.css +122 -0
  257. data/vendor/assets/stylesheets/{prism-duotone-dark.css → prism-theme/prism-duotone-dark.css} +55 -51
  258. data/vendor/assets/stylesheets/{prism-duotone-earth.css → prism-theme/prism-duotone-earth.css} +55 -51
  259. data/vendor/assets/stylesheets/{prism-duotone-forest.css → prism-theme/prism-duotone-forest.css} +55 -51
  260. data/vendor/assets/stylesheets/{prism-duotone-light.css → prism-theme/prism-duotone-light.css} +55 -51
  261. data/vendor/assets/stylesheets/{prism-duotone-sea.css → prism-theme/prism-duotone-sea.css} +55 -51
  262. data/vendor/assets/stylesheets/{prism-duotone-space.css → prism-theme/prism-duotone-space.css} +55 -51
  263. data/vendor/assets/stylesheets/{prism-funky.css → prism-theme/prism-funky.css} +16 -2
  264. data/vendor/assets/stylesheets/{prism-ghcolors.css → prism-theme/prism-ghcolors.css} +47 -44
  265. data/vendor/assets/stylesheets/prism-theme/prism-hopscotch.css +132 -0
  266. data/vendor/assets/stylesheets/prism-theme/prism-line-highlight.css +49 -0
  267. data/vendor/assets/stylesheets/prism-theme/prism-line-numbers.css +41 -0
  268. data/vendor/assets/stylesheets/prism-theme/prism-material-dark.css +205 -0
  269. data/vendor/assets/stylesheets/prism-theme/prism-material-light.css +207 -0
  270. data/vendor/assets/stylesheets/prism-theme/prism-material-oceanic.css +210 -0
  271. data/vendor/assets/stylesheets/prism-theme/prism-nord.css +124 -0
  272. data/vendor/assets/stylesheets/{prism-okaidia.css → prism-theme/prism-okaidia.css} +4 -2
  273. data/vendor/assets/stylesheets/prism-theme/prism-pojoaque.css +151 -0
  274. data/vendor/assets/stylesheets/prism-theme/prism-previewers.css +242 -0
  275. data/vendor/assets/stylesheets/prism-theme/prism-shades-of-purple.css +200 -0
  276. data/vendor/assets/stylesheets/prism-theme/prism-show-invisibles.css +34 -0
  277. data/vendor/assets/stylesheets/{prism-show-language.css → prism-theme/prism-show-language.css} +0 -0
  278. data/vendor/assets/stylesheets/{prism-solarizedlight.css → prism-theme/prism-solarizedlight.css} +5 -3
  279. data/vendor/assets/stylesheets/prism-theme/prism-synthwave84.css +140 -0
  280. data/vendor/assets/stylesheets/{prism-tomorrow.css → prism-theme/prism-tomorrow.css} +1 -0
  281. data/vendor/assets/stylesheets/{prism-toolbar.css → prism-theme/prism-toolbar.css} +15 -15
  282. data/vendor/assets/stylesheets/{prism-twilight.css → prism-theme/prism-twilight.css} +2 -1
  283. data/vendor/assets/stylesheets/prism-theme/prism-unescaped-markup.css +10 -0
  284. data/vendor/assets/stylesheets/{prism-vs.css → prism-theme/prism-vs.css} +62 -55
  285. data/vendor/assets/stylesheets/prism-theme/prism-vsc-dark-plus.css +216 -0
  286. data/vendor/assets/stylesheets/prism-theme/prism-wpd.css +11 -0
  287. data/vendor/assets/stylesheets/prism-theme/prism-xonokai.css +189 -0
  288. data/vendor/assets/stylesheets/prism.css +5 -3
  289. metadata +262 -148
  290. data/vendor/assets/javascripts/prism/prism-apacheconf.js +0 -47
  291. data/vendor/assets/javascripts/prism/prism-autohotkey.js +0 -27
  292. data/vendor/assets/javascripts/prism/prism-bash.js +0 -80
  293. data/vendor/assets/javascripts/prism/prism-bro.js +0 -50
  294. data/vendor/assets/javascripts/prism/prism-c.js +0 -33
  295. data/vendor/assets/javascripts/prism/prism-clike.js +0 -29
  296. data/vendor/assets/javascripts/prism/prism-core.js +0 -511
  297. data/vendor/assets/javascripts/prism/prism-cpp.js +0 -12
  298. data/vendor/assets/javascripts/prism/prism-csharp.js +0 -32
  299. data/vendor/assets/javascripts/prism/prism-css-extras.js +0 -16
  300. data/vendor/assets/javascripts/prism/prism-css.js +0 -51
  301. data/vendor/assets/javascripts/prism/prism-diff.js +0 -20
  302. data/vendor/assets/javascripts/prism/prism-docker.js +0 -9
  303. data/vendor/assets/javascripts/prism/prism-fsharp.js +0 -33
  304. data/vendor/assets/javascripts/prism/prism-gherkin.js +0 -78
  305. data/vendor/assets/javascripts/prism/prism-go.js +0 -9
  306. data/vendor/assets/javascripts/prism/prism-graphql.js +0 -24
  307. data/vendor/assets/javascripts/prism/prism-handlebars.js +0 -83
  308. data/vendor/assets/javascripts/prism/prism-haskell.js +0 -35
  309. data/vendor/assets/javascripts/prism/prism-http.js +0 -50
  310. data/vendor/assets/javascripts/prism/prism-java.js +0 -16
  311. data/vendor/assets/javascripts/prism/prism-javascript.js +0 -48
  312. data/vendor/assets/javascripts/prism/prism-json.js +0 -11
  313. data/vendor/assets/javascripts/prism/prism-jsx.js +0 -27
  314. data/vendor/assets/javascripts/prism/prism-julia.js +0 -12
  315. data/vendor/assets/javascripts/prism/prism-keyman.js +0 -14
  316. data/vendor/assets/javascripts/prism/prism-markdown.js +0 -120
  317. data/vendor/assets/javascripts/prism/prism-markup.js +0 -46
  318. data/vendor/assets/javascripts/prism/prism-nasm.js +0 -24
  319. data/vendor/assets/javascripts/prism/prism-nginx.js +0 -11
  320. data/vendor/assets/javascripts/prism/prism-nsis.js +0 -26
  321. data/vendor/assets/javascripts/prism/prism-objectivec.js +0 -5
  322. data/vendor/assets/javascripts/prism/prism-ocaml.js +0 -21
  323. data/vendor/assets/javascripts/prism/prism-parser.js +0 -66
  324. data/vendor/assets/javascripts/prism/prism-perl.js +0 -140
  325. data/vendor/assets/javascripts/prism/prism-php.js +0 -111
  326. data/vendor/assets/javascripts/prism/prism-powershell.js +0 -52
  327. data/vendor/assets/javascripts/prism/prism-protobuf.js +0 -8
  328. data/vendor/assets/javascripts/prism/prism-python.js +0 -27
  329. data/vendor/assets/javascripts/prism/prism-rust.js +0 -53
  330. data/vendor/assets/javascripts/prism/prism-sas.js +0 -31
  331. data/vendor/assets/javascripts/prism/prism-scheme.js +0 -26
  332. data/vendor/assets/javascripts/prism/prism-smarty.js +0 -127
  333. data/vendor/assets/javascripts/prism/prism-sql.js +0 -17
  334. data/vendor/assets/javascripts/prism/prism-swift.js +0 -25
  335. data/vendor/assets/javascripts/prism/prism-tcl.js +0 -43
  336. data/vendor/assets/javascripts/prism/prism-typescript.js +0 -5
  337. data/vendor/assets/javascripts/prism/prism-verilog.js +0 -17
  338. data/vendor/assets/javascripts/prism/prism-yaml.js +0 -44
  339. data/vendor/assets/stylesheets/prism-hopscotch.css +0 -124
  340. data/vendor/assets/stylesheets/prism-pojoaque.css +0 -134
  341. data/vendor/assets/stylesheets/prism-xonokai.css +0 -164
@@ -0,0 +1,184 @@
1
+ (function () {
2
+
3
+ if (typeof self === 'undefined' || !self.Prism || !self.document) {
4
+ return;
5
+ }
6
+
7
+ var MATCH_ALL_CLASS = /(?:^|\s)match-braces(?:\s|$)/;
8
+
9
+ var BRACE_HOVER_CLASS = /(?:^|\s)brace-hover(?:\s|$)/;
10
+ var BRACE_SELECTED_CLASS = /(?:^|\s)brace-selected(?:\s|$)/;
11
+
12
+ var NO_BRACE_HOVER_CLASS = /(?:^|\s)no-brace-hover(?:\s|$)/;
13
+ var NO_BRACE_SELECT_CLASS = /(?:^|\s)no-brace-select(?:\s|$)/;
14
+
15
+ var PARTNER = {
16
+ '(': ')',
17
+ '[': ']',
18
+ '{': '}',
19
+ };
20
+
21
+ var NAMES = {
22
+ '(': 'brace-round',
23
+ '[': 'brace-square',
24
+ '{': 'brace-curly',
25
+ };
26
+
27
+ var LEVEL_WARP = 12;
28
+
29
+ var pairIdCounter = 0;
30
+
31
+ var BRACE_ID_PATTERN = /^(pair-\d+-)(open|close)$/;
32
+
33
+ /**
34
+ * Returns the brace partner given one brace of a brace pair.
35
+ *
36
+ * @param {HTMLElement} brace
37
+ * @returns {HTMLElement}
38
+ */
39
+ function getPartnerBrace(brace) {
40
+ var match = BRACE_ID_PATTERN.exec(brace.id);
41
+ return document.querySelector('#' + match[1] + (match[2] == 'open' ? 'close' : 'open'));
42
+ }
43
+
44
+ /**
45
+ * @this {HTMLElement}
46
+ */
47
+ function hoverBrace() {
48
+ for (var parent = this.parentElement; parent; parent = parent.parentElement) {
49
+ if (NO_BRACE_HOVER_CLASS.test(parent.className)) {
50
+ return;
51
+ }
52
+ }
53
+
54
+ [this, getPartnerBrace(this)].forEach(function (ele) {
55
+ ele.className = (ele.className.replace(BRACE_HOVER_CLASS, ' ') + ' brace-hover').replace(/\s+/g, ' ');
56
+ });
57
+ }
58
+ /**
59
+ * @this {HTMLElement}
60
+ */
61
+ function leaveBrace() {
62
+ [this, getPartnerBrace(this)].forEach(function (ele) {
63
+ ele.className = ele.className.replace(BRACE_HOVER_CLASS, ' ');
64
+ });
65
+ }
66
+ /**
67
+ * @this {HTMLElement}
68
+ */
69
+ function clickBrace() {
70
+ for (var parent = this.parentElement; parent; parent = parent.parentElement) {
71
+ if (NO_BRACE_SELECT_CLASS.test(parent.className)) {
72
+ return;
73
+ }
74
+ }
75
+
76
+ [this, getPartnerBrace(this)].forEach(function (ele) {
77
+ ele.className = (ele.className.replace(BRACE_SELECTED_CLASS, ' ') + ' brace-selected').replace(/\s+/g, ' ');
78
+ });
79
+ }
80
+
81
+ Prism.hooks.add('complete', function (env) {
82
+
83
+ /** @type {HTMLElement} */
84
+ var code = env.element;
85
+ var pre = code.parentElement;
86
+
87
+ if (!pre || pre.tagName != 'PRE') {
88
+ return;
89
+ }
90
+
91
+ // find the braces to match
92
+ /** @type {string[]} */
93
+ var toMatch = [];
94
+ for (var ele = code; ele; ele = ele.parentElement) {
95
+ if (MATCH_ALL_CLASS.test(ele.className)) {
96
+ toMatch.push('(', '[', '{');
97
+ break;
98
+ }
99
+ }
100
+
101
+ if (toMatch.length == 0) {
102
+ // nothing to match
103
+ return;
104
+ }
105
+
106
+ if (!pre.__listenerAdded) {
107
+ // code blocks might be highlighted more than once
108
+ pre.addEventListener('mousedown', function removeBraceSelected() {
109
+ // the code element might have been replaced
110
+ var code = pre.querySelector('code');
111
+ Array.prototype.slice.call(code.querySelectorAll('.brace-selected')).forEach(function (element) {
112
+ element.className = element.className.replace(BRACE_SELECTED_CLASS, ' ');
113
+ });
114
+ });
115
+ Object.defineProperty(pre, '__listenerAdded', { value: true });
116
+ }
117
+
118
+ /** @type {HTMLSpanElement[]} */
119
+ var punctuation = Array.prototype.slice.call(code.querySelectorAll('span.token.punctuation'));
120
+
121
+ /** @type {{ index: number, open: boolean, element: HTMLElement }[]} */
122
+ var allBraces = [];
123
+
124
+ toMatch.forEach(function (open) {
125
+ var close = PARTNER[open];
126
+ var name = NAMES[open];
127
+
128
+ /** @type {[number, number][]} */
129
+ var pairs = [];
130
+ /** @type {number[]} */
131
+ var openStack = [];
132
+
133
+ for (var i = 0; i < punctuation.length; i++) {
134
+ var element = punctuation[i];
135
+ if (element.childElementCount == 0) {
136
+ var text = element.textContent;
137
+ if (text === open) {
138
+ allBraces.push({ index: i, open: true, element: element });
139
+ element.className += ' ' + name;
140
+ element.className += ' brace-open';
141
+ openStack.push(i);
142
+ } else if (text === close) {
143
+ allBraces.push({ index: i, open: false, element: element });
144
+ element.className += ' ' + name;
145
+ element.className += ' brace-close';
146
+ if (openStack.length) {
147
+ pairs.push([i, openStack.pop()]);
148
+ }
149
+ }
150
+ }
151
+ }
152
+
153
+ pairs.forEach(function (pair) {
154
+ var pairId = 'pair-' + (pairIdCounter++) + '-';
155
+
156
+ var openEle = punctuation[pair[0]];
157
+ var closeEle = punctuation[pair[1]];
158
+
159
+ openEle.id = pairId + 'open';
160
+ closeEle.id = pairId + 'close';
161
+
162
+ [openEle, closeEle].forEach(function (ele) {
163
+ ele.addEventListener('mouseenter', hoverBrace);
164
+ ele.addEventListener('mouseleave', leaveBrace);
165
+ ele.addEventListener('click', clickBrace);
166
+ });
167
+ });
168
+ });
169
+
170
+ var level = 0;
171
+ allBraces.sort(function (a, b) { return a.index - b.index; });
172
+ allBraces.forEach(function (brace) {
173
+ if (brace.open) {
174
+ brace.element.className += ' brace-level-' + (level % LEVEL_WARP + 1);
175
+ level++;
176
+ } else {
177
+ level = Math.max(0, level - 1);
178
+ brace.element.className += ' brace-level-' + (level % LEVEL_WARP + 1);
179
+ }
180
+ });
181
+
182
+ });
183
+
184
+ }());
@@ -1,9 +1,5 @@
1
1
  (function() {
2
2
 
3
- if (typeof self === 'undefined' || !self.Prism || !self.document) {
4
- return;
5
- }
6
-
7
3
  var assign = Object.assign || function (obj1, obj2) {
8
4
  for (var name in obj2) {
9
5
  if (obj2.hasOwnProperty(name))
@@ -64,7 +60,7 @@ NormalizeWhitespace.prototype = {
64
60
  },
65
61
  spacesToTabs: function (input, spaces) {
66
62
  spaces = spaces|0 || 4;
67
- return input.replace(new RegExp(' {' + spaces + '}', 'g'), '\t');
63
+ return input.replace(RegExp(' {' + spaces + '}', 'g'), '\t');
68
64
  },
69
65
  removeTrailing: function (input) {
70
66
  return input.replace(/\s*?$/gm, '');
@@ -84,7 +80,7 @@ NormalizeWhitespace.prototype = {
84
80
  if (!indents[0].length)
85
81
  return input;
86
82
 
87
- return input.replace(new RegExp('^' + indents[0], 'gm'), '');
83
+ return input.replace(RegExp('^' + indents[0], 'gm'), '');
88
84
  },
89
85
  indent: function (input, tabs) {
90
86
  return input.replace(/^[^\S\n\r]*(?=\S)/gm, new Array(++tabs).join('\t') + '$&');
@@ -114,6 +110,16 @@ NormalizeWhitespace.prototype = {
114
110
  }
115
111
  };
116
112
 
113
+ // Support node modules
114
+ if (typeof module !== 'undefined' && module.exports) {
115
+ module.exports = NormalizeWhitespace;
116
+ }
117
+
118
+ // Exit if prism is not loaded
119
+ if (typeof Prism === 'undefined') {
120
+ return;
121
+ }
122
+
117
123
  Prism.plugins.NormalizeWhitespace = new NormalizeWhitespace({
118
124
  'remove-trailing': true,
119
125
  'remove-indent': true,
@@ -127,18 +133,30 @@ Prism.plugins.NormalizeWhitespace = new NormalizeWhitespace({
127
133
  });
128
134
 
129
135
  Prism.hooks.add('before-sanity-check', function (env) {
136
+ var Normalizer = Prism.plugins.NormalizeWhitespace;
137
+
138
+ // Check settings
139
+ if (env.settings && env.settings['whitespace-normalization'] === false) {
140
+ return;
141
+ }
142
+
143
+ // Simple mode if there is no env.element
144
+ if ((!env.element || !env.element.parentNode) && env.code) {
145
+ env.code = Normalizer.normalize(env.code, env.settings);
146
+ return;
147
+ }
148
+
149
+ // Normal mode
130
150
  var pre = env.element.parentNode;
131
- var clsReg = /\bno-whitespace-normalization\b/;
151
+ var clsReg = /(?:^|\s)no-whitespace-normalization(?:\s|$)/;
132
152
  if (!env.code || !pre || pre.nodeName.toLowerCase() !== 'pre' ||
133
- (env.settings && env.settings['whitespace-normalization'] === false) ||
134
153
  clsReg.test(pre.className) || clsReg.test(env.element.className))
135
154
  return;
136
155
 
137
156
  var children = pre.childNodes,
138
157
  before = '',
139
158
  after = '',
140
- codeFound = false,
141
- Normalizer = Prism.plugins.NormalizeWhitespace;
159
+ codeFound = false;
142
160
 
143
161
  // Move surrounding whitespace from the <pre> tag into the <code> tag
144
162
  for (var i = 0; i < children.length; ++i) {
@@ -169,4 +187,4 @@ Prism.hooks.add('before-sanity-check', function (env) {
169
187
  }
170
188
  });
171
189
 
172
- }());
190
+ }());
@@ -0,0 +1,703 @@
1
+ (function() {
2
+
3
+ if (
4
+ typeof self !== 'undefined' && !self.Prism ||
5
+ !self.document || !Function.prototype.bind
6
+ ) {
7
+ return;
8
+ }
9
+
10
+ var previewers = {
11
+ // gradient must be defined before color and angle
12
+ 'gradient': {
13
+ create: (function () {
14
+
15
+ // Stores already processed gradients so that we don't
16
+ // make the conversion every time the previewer is shown
17
+ var cache = {};
18
+
19
+ /**
20
+ * Returns a W3C-valid linear gradient
21
+ * @param {string} prefix Vendor prefix if any ("-moz-", "-webkit-", etc.)
22
+ * @param {string} func Gradient function name ("linear-gradient")
23
+ * @param {string[]} values Array of the gradient function parameters (["0deg", "red 0%", "blue 100%"])
24
+ */
25
+ var convertToW3CLinearGradient = function(prefix, func, values) {
26
+ // Default value for angle
27
+ var angle = '180deg';
28
+
29
+ if (/^(?:-?\d*\.?\d+(?:deg|rad)|to\b|top|right|bottom|left)/.test(values[0])) {
30
+ angle = values.shift();
31
+ if (angle.indexOf('to ') < 0) {
32
+ // Angle uses old keywords
33
+ // W3C syntax uses "to" + opposite keywords
34
+ if (angle.indexOf('top') >= 0) {
35
+ if (angle.indexOf('left') >= 0) {
36
+ angle = 'to bottom right';
37
+ } else if (angle.indexOf('right') >= 0) {
38
+ angle = 'to bottom left';
39
+ } else {
40
+ angle = 'to bottom';
41
+ }
42
+ } else if (angle.indexOf('bottom') >= 0) {
43
+ if (angle.indexOf('left') >= 0) {
44
+ angle = 'to top right';
45
+ } else if (angle.indexOf('right') >= 0) {
46
+ angle = 'to top left';
47
+ } else {
48
+ angle = 'to top';
49
+ }
50
+ } else if (angle.indexOf('left') >= 0) {
51
+ angle = 'to right';
52
+ } else if (angle.indexOf('right') >= 0) {
53
+ angle = 'to left';
54
+ } else if (prefix) {
55
+ // Angle is shifted by 90deg in prefixed gradients
56
+ if (angle.indexOf('deg') >= 0) {
57
+ angle = (90 - parseFloat(angle)) + 'deg';
58
+ } else if (angle.indexOf('rad') >= 0) {
59
+ angle = (Math.PI / 2 - parseFloat(angle)) + 'rad';
60
+ }
61
+ }
62
+ }
63
+ }
64
+
65
+ return func + '(' + angle + ',' + values.join(',') + ')';
66
+ };
67
+
68
+ /**
69
+ * Returns a W3C-valid radial gradient
70
+ * @param {string} prefix Vendor prefix if any ("-moz-", "-webkit-", etc.)
71
+ * @param {string} func Gradient function name ("linear-gradient")
72
+ * @param {string[]} values Array of the gradient function parameters (["0deg", "red 0%", "blue 100%"])
73
+ */
74
+ var convertToW3CRadialGradient = function(prefix, func, values) {
75
+ if (values[0].indexOf('at') < 0) {
76
+ // Looks like old syntax
77
+
78
+ // Default values
79
+ var position = 'center';
80
+ var shape = 'ellipse';
81
+ var size = 'farthest-corner';
82
+
83
+ if (/\bcenter|top|right|bottom|left\b|^\d+/.test(values[0])) {
84
+ // Found a position
85
+ // Remove angle value, if any
86
+ position = values.shift().replace(/\s*-?\d+(?:rad|deg)\s*/, '');
87
+ }
88
+ if (/\bcircle|ellipse|closest|farthest|contain|cover\b/.test(values[0])) {
89
+ // Found a shape and/or size
90
+ var shapeSizeParts = values.shift().split(/\s+/);
91
+ if (shapeSizeParts[0] && (shapeSizeParts[0] === 'circle' || shapeSizeParts[0] === 'ellipse')) {
92
+ shape = shapeSizeParts.shift();
93
+ }
94
+ if (shapeSizeParts[0]) {
95
+ size = shapeSizeParts.shift();
96
+ }
97
+
98
+ // Old keywords are converted to their synonyms
99
+ if (size === 'cover') {
100
+ size = 'farthest-corner';
101
+ } else if (size === 'contain') {
102
+ size = 'clothest-side';
103
+ }
104
+ }
105
+
106
+ return func + '(' + shape + ' ' + size + ' at ' + position + ',' + values.join(',') + ')';
107
+ }
108
+ return func + '(' + values.join(',') + ')';
109
+ };
110
+
111
+ /**
112
+ * Converts a gradient to a W3C-valid one
113
+ * Does not support old webkit syntax (-webkit-gradient(linear...) and -webkit-gradient(radial...))
114
+ * @param {string} gradient The CSS gradient
115
+ */
116
+ var convertToW3CGradient = function(gradient) {
117
+ if (cache[gradient]) {
118
+ return cache[gradient];
119
+ }
120
+ var parts = gradient.match(/^(\b|\B-[a-z]{1,10}-)((?:repeating-)?(?:linear|radial)-gradient)/);
121
+ // "", "-moz-", etc.
122
+ var prefix = parts && parts[1];
123
+ // "linear-gradient", "radial-gradient", etc.
124
+ var func = parts && parts[2];
125
+
126
+ var values = gradient.replace(/^(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\(|\)$/g, '').split(/\s*,\s*/);
127
+
128
+ if (func.indexOf('linear') >= 0) {
129
+ return cache[gradient] = convertToW3CLinearGradient(prefix, func, values);
130
+ } else if (func.indexOf('radial') >= 0) {
131
+ return cache[gradient] = convertToW3CRadialGradient(prefix, func, values);
132
+ }
133
+ return cache[gradient] = func + '(' + values.join(',') + ')';
134
+ };
135
+
136
+ return function () {
137
+ new Prism.plugins.Previewer('gradient', function(value) {
138
+ this.firstChild.style.backgroundImage = '';
139
+ this.firstChild.style.backgroundImage = convertToW3CGradient(value);
140
+ return !!this.firstChild.style.backgroundImage;
141
+ }, '*', function () {
142
+ this._elt.innerHTML = '<div></div>';
143
+ });
144
+ };
145
+ }()),
146
+ tokens: {
147
+ 'gradient': {
148
+ pattern: /(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\((?:(?:rgb|hsl)a?\(.+?\)|[^\)])+\)/gi,
149
+ inside: {
150
+ 'function': /[\w-]+(?=\()/,
151
+ 'punctuation': /[(),]/
152
+ }
153
+ }
154
+ },
155
+ languages: {
156
+ 'css': true,
157
+ 'less': true,
158
+ 'sass': [
159
+ {
160
+ lang: 'sass',
161
+ before: 'punctuation',
162
+ inside: 'inside',
163
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
164
+ },
165
+ {
166
+ lang: 'sass',
167
+ before: 'punctuation',
168
+ inside: 'inside',
169
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
170
+ }
171
+ ],
172
+ 'scss': true,
173
+ 'stylus': [
174
+ {
175
+ lang: 'stylus',
176
+ before: 'func',
177
+ inside: 'rest',
178
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
179
+ },
180
+ {
181
+ lang: 'stylus',
182
+ before: 'func',
183
+ inside: 'rest',
184
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
185
+ }
186
+ ]
187
+ }
188
+ },
189
+ 'angle': {
190
+ create: function () {
191
+ new Prism.plugins.Previewer('angle', function(value) {
192
+ var num = parseFloat(value);
193
+ var unit = value.match(/[a-z]+$/i);
194
+ var max, percentage;
195
+ if (!num || !unit) {
196
+ return false;
197
+ }
198
+ unit = unit[0];
199
+
200
+ switch(unit) {
201
+ case 'deg':
202
+ max = 360;
203
+ break;
204
+ case 'grad':
205
+ max = 400;
206
+ break;
207
+ case 'rad':
208
+ max = 2 * Math.PI;
209
+ break;
210
+ case 'turn':
211
+ max = 1;
212
+ }
213
+
214
+ percentage = 100 * num/max;
215
+ percentage %= 100;
216
+
217
+ this[(num < 0? 'set' : 'remove') + 'Attribute']('data-negative', '');
218
+ this.querySelector('circle').style.strokeDasharray = Math.abs(percentage) + ',500';
219
+ return true;
220
+ }, '*', function () {
221
+ this._elt.innerHTML = '<svg viewBox="0 0 64 64">' +
222
+ '<circle r="16" cy="32" cx="32"></circle>' +
223
+ '</svg>';
224
+ });
225
+ },
226
+ tokens: {
227
+ 'angle': /(?:\b|\B-|(?=\B\.))\d*\.?\d+(?:deg|g?rad|turn)\b/i
228
+ },
229
+ languages: {
230
+ 'css': true,
231
+ 'less': true,
232
+ 'markup': {
233
+ lang: 'markup',
234
+ before: 'punctuation',
235
+ inside: 'inside',
236
+ root: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']
237
+ },
238
+ 'sass': [
239
+ {
240
+ lang: 'sass',
241
+ inside: 'inside',
242
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
243
+ },
244
+ {
245
+ lang: 'sass',
246
+ before: 'operator',
247
+ inside: 'inside',
248
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
249
+ }
250
+ ],
251
+ 'scss': true,
252
+ 'stylus': [
253
+ {
254
+ lang: 'stylus',
255
+ before: 'func',
256
+ inside: 'rest',
257
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
258
+ },
259
+ {
260
+ lang: 'stylus',
261
+ before: 'func',
262
+ inside: 'rest',
263
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
264
+ }
265
+ ]
266
+ }
267
+ },
268
+ 'color': {
269
+ create: function () {
270
+ new Prism.plugins.Previewer('color', function(value) {
271
+ this.style.backgroundColor = '';
272
+ this.style.backgroundColor = value;
273
+ return !!this.style.backgroundColor;
274
+ });
275
+ },
276
+ tokens: {
277
+ 'color': [Prism.languages.css['hexcode']].concat(Prism.languages.css['color'])
278
+ },
279
+ languages: {
280
+ // CSS extras is required, so css and scss are not necessary
281
+ 'css': false,
282
+ 'less': true,
283
+ 'markup': {
284
+ lang: 'markup',
285
+ before: 'punctuation',
286
+ inside: 'inside',
287
+ root: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']
288
+ },
289
+ 'sass': [
290
+ {
291
+ lang: 'sass',
292
+ before: 'punctuation',
293
+ inside: 'inside',
294
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
295
+ },
296
+ {
297
+ lang: 'sass',
298
+ inside: 'inside',
299
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
300
+ }
301
+ ],
302
+ 'scss': false,
303
+ 'stylus': [
304
+ {
305
+ lang: 'stylus',
306
+ before: 'hexcode',
307
+ inside: 'rest',
308
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
309
+ },
310
+ {
311
+ lang: 'stylus',
312
+ before: 'hexcode',
313
+ inside: 'rest',
314
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
315
+ }
316
+ ]
317
+ }
318
+ },
319
+ 'easing': {
320
+ create: function () {
321
+ new Prism.plugins.Previewer('easing', function (value) {
322
+
323
+ value = {
324
+ 'linear': '0,0,1,1',
325
+ 'ease': '.25,.1,.25,1',
326
+ 'ease-in': '.42,0,1,1',
327
+ 'ease-out': '0,0,.58,1',
328
+ 'ease-in-out':'.42,0,.58,1'
329
+ }[value] || value;
330
+
331
+ var p = value.match(/-?\d*\.?\d+/g);
332
+
333
+ if(p.length === 4) {
334
+ p = p.map(function(p, i) { return (i % 2? 1 - p : p) * 100; });
335
+
336
+ this.querySelector('path').setAttribute('d', 'M0,100 C' + p[0] + ',' + p[1] + ', ' + p[2] + ',' + p[3] + ', 100,0');
337
+
338
+ var lines = this.querySelectorAll('line');
339
+ lines[0].setAttribute('x2', p[0]);
340
+ lines[0].setAttribute('y2', p[1]);
341
+ lines[1].setAttribute('x2', p[2]);
342
+ lines[1].setAttribute('y2', p[3]);
343
+
344
+ return true;
345
+ }
346
+
347
+ return false;
348
+ }, '*', function () {
349
+ this._elt.innerHTML = '<svg viewBox="-20 -20 140 140" width="100" height="100">' +
350
+ '<defs>' +
351
+ '<marker id="prism-previewer-easing-marker" viewBox="0 0 4 4" refX="2" refY="2" markerUnits="strokeWidth">' +
352
+ '<circle cx="2" cy="2" r="1.5" />' +
353
+ '</marker>' +
354
+ '</defs>' +
355
+ '<path d="M0,100 C20,50, 40,30, 100,0" />' +
356
+ '<line x1="0" y1="100" x2="20" y2="50" marker-start="url(' + location.href + '#prism-previewer-easing-marker)" marker-end="url(' + location.href + '#prism-previewer-easing-marker)" />' +
357
+ '<line x1="100" y1="0" x2="40" y2="30" marker-start="url(' + location.href + '#prism-previewer-easing-marker)" marker-end="url(' + location.href + '#prism-previewer-easing-marker)" />' +
358
+ '</svg>';
359
+ });
360
+ },
361
+ tokens: {
362
+ 'easing': {
363
+ pattern: /\bcubic-bezier\((?:-?\d*\.?\d+,\s*){3}-?\d*\.?\d+\)\B|\b(?:linear|ease(?:-in)?(?:-out)?)(?=\s|[;}]|$)/i,
364
+ inside: {
365
+ 'function': /[\w-]+(?=\()/,
366
+ 'punctuation': /[(),]/
367
+ }
368
+ }
369
+ },
370
+ languages: {
371
+ 'css': true,
372
+ 'less': true,
373
+ 'sass': [
374
+ {
375
+ lang: 'sass',
376
+ inside: 'inside',
377
+ before: 'punctuation',
378
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
379
+ },
380
+ {
381
+ lang: 'sass',
382
+ inside: 'inside',
383
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
384
+ }
385
+ ],
386
+ 'scss': true,
387
+ 'stylus': [
388
+ {
389
+ lang: 'stylus',
390
+ before: 'hexcode',
391
+ inside: 'rest',
392
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
393
+ },
394
+ {
395
+ lang: 'stylus',
396
+ before: 'hexcode',
397
+ inside: 'rest',
398
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
399
+ }
400
+ ]
401
+ }
402
+ },
403
+
404
+ 'time': {
405
+ create: function () {
406
+ new Prism.plugins.Previewer('time', function(value) {
407
+ var num = parseFloat(value);
408
+ var unit = value.match(/[a-z]+$/i);
409
+ if (!num || !unit) {
410
+ return false;
411
+ }
412
+ unit = unit[0];
413
+ this.querySelector('circle').style.animationDuration = 2 * num + unit;
414
+ return true;
415
+ }, '*', function () {
416
+ this._elt.innerHTML = '<svg viewBox="0 0 64 64">' +
417
+ '<circle r="16" cy="32" cx="32"></circle>' +
418
+ '</svg>';
419
+ });
420
+ },
421
+ tokens: {
422
+ 'time': /(?:\b|\B-|(?=\B\.))\d*\.?\d+m?s\b/i
423
+ },
424
+ languages: {
425
+ 'css': true,
426
+ 'less': true,
427
+ 'markup': {
428
+ lang: 'markup',
429
+ before: 'punctuation',
430
+ inside: 'inside',
431
+ root: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']
432
+ },
433
+ 'sass': [
434
+ {
435
+ lang: 'sass',
436
+ inside: 'inside',
437
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
438
+ },
439
+ {
440
+ lang: 'sass',
441
+ before: 'operator',
442
+ inside: 'inside',
443
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
444
+ }
445
+ ],
446
+ 'scss': true,
447
+ 'stylus': [
448
+ {
449
+ lang: 'stylus',
450
+ before: 'hexcode',
451
+ inside: 'rest',
452
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
453
+ },
454
+ {
455
+ lang: 'stylus',
456
+ before: 'hexcode',
457
+ inside: 'rest',
458
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
459
+ }
460
+ ]
461
+ }
462
+ }
463
+ };
464
+
465
+ /**
466
+ * Returns the absolute X, Y offsets for an element
467
+ * @param {HTMLElement} element
468
+ * @returns {{top: number, right: number, bottom: number, left: number, width: number, height: number}}
469
+ */
470
+ var getOffset = function (element) {
471
+ var elementBounds = element.getBoundingClientRect();
472
+ var left = elementBounds.left;
473
+ var top = elementBounds.top;
474
+ var documentBounds = document.documentElement.getBoundingClientRect();
475
+ left -= documentBounds.left;
476
+ top -= documentBounds.top;
477
+
478
+ return {
479
+ top: top,
480
+ right: innerWidth - left - elementBounds.width,
481
+ bottom: innerHeight - top - elementBounds.height,
482
+ left: left,
483
+ width: elementBounds.width,
484
+ height: elementBounds.height
485
+ };
486
+ };
487
+
488
+ var tokenRegexp = /(?:^|\s)token(?=$|\s)/;
489
+ var activeRegexp = /(?:^|\s)active(?=$|\s)/g;
490
+ var flippedRegexp = /(?:^|\s)flipped(?=$|\s)/g;
491
+
492
+ /**
493
+ * Previewer constructor
494
+ * @param {string} type Unique previewer type
495
+ * @param {function} updater Function that will be called on mouseover.
496
+ * @param {string[]|string=} supportedLanguages Aliases of the languages this previewer must be enabled for. Defaults to "*", all languages.
497
+ * @param {function=} initializer Function that will be called on initialization.
498
+ * @constructor
499
+ */
500
+ var Previewer = function (type, updater, supportedLanguages, initializer) {
501
+ this._elt = null;
502
+ this._type = type;
503
+ this._clsRegexp = RegExp('(?:^|\\s)' + type + '(?=$|\\s)');
504
+ this._token = null;
505
+ this.updater = updater;
506
+ this._mouseout = this.mouseout.bind(this);
507
+ this.initializer = initializer;
508
+
509
+ var self = this;
510
+
511
+ if (!supportedLanguages) {
512
+ supportedLanguages = ['*'];
513
+ }
514
+ if (!Array.isArray(supportedLanguages)) {
515
+ supportedLanguages = [supportedLanguages];
516
+ }
517
+ supportedLanguages.forEach(function (lang) {
518
+ if (typeof lang !== 'string') {
519
+ lang = lang.lang;
520
+ }
521
+ if (!Previewer.byLanguages[lang]) {
522
+ Previewer.byLanguages[lang] = [];
523
+ }
524
+ if (Previewer.byLanguages[lang].indexOf(self) < 0) {
525
+ Previewer.byLanguages[lang].push(self);
526
+ }
527
+ });
528
+ Previewer.byType[type] = this;
529
+ };
530
+
531
+ /**
532
+ * Creates the HTML element for the previewer.
533
+ */
534
+ Previewer.prototype.init = function () {
535
+ if (this._elt) {
536
+ return;
537
+ }
538
+ this._elt = document.createElement('div');
539
+ this._elt.className = 'prism-previewer prism-previewer-' + this._type;
540
+ document.body.appendChild(this._elt);
541
+ if(this.initializer) {
542
+ this.initializer();
543
+ }
544
+ };
545
+
546
+ Previewer.prototype.isDisabled = function (token) {
547
+ do {
548
+ if (token.hasAttribute && token.hasAttribute('data-previewers')) {
549
+ var previewers = token.getAttribute('data-previewers');
550
+ return (previewers || '').split(/\s+/).indexOf(this._type) === -1;
551
+ }
552
+ } while(token = token.parentNode);
553
+ return false;
554
+ };
555
+
556
+ /**
557
+ * Checks the class name of each hovered element
558
+ * @param token
559
+ */
560
+ Previewer.prototype.check = function (token) {
561
+ if (tokenRegexp.test(token.className) && this.isDisabled(token)) {
562
+ return;
563
+ }
564
+ do {
565
+ if (tokenRegexp.test(token.className) && this._clsRegexp.test(token.className)) {
566
+ break;
567
+ }
568
+ } while(token = token.parentNode);
569
+
570
+ if (token && token !== this._token) {
571
+ this._token = token;
572
+ this.show();
573
+ }
574
+ };
575
+
576
+ /**
577
+ * Called on mouseout
578
+ */
579
+ Previewer.prototype.mouseout = function() {
580
+ this._token.removeEventListener('mouseout', this._mouseout, false);
581
+ this._token = null;
582
+ this.hide();
583
+ };
584
+
585
+ /**
586
+ * Shows the previewer positioned properly for the current token.
587
+ */
588
+ Previewer.prototype.show = function () {
589
+ if (!this._elt) {
590
+ this.init();
591
+ }
592
+ if (!this._token) {
593
+ return;
594
+ }
595
+
596
+ if (this.updater.call(this._elt, this._token.textContent)) {
597
+ this._token.addEventListener('mouseout', this._mouseout, false);
598
+
599
+ var offset = getOffset(this._token);
600
+ this._elt.className += ' active';
601
+
602
+ if (offset.top - this._elt.offsetHeight > 0) {
603
+ this._elt.className = this._elt.className.replace(flippedRegexp, '');
604
+ this._elt.style.top = offset.top + 'px';
605
+ this._elt.style.bottom = '';
606
+ } else {
607
+ this._elt.className += ' flipped';
608
+ this._elt.style.bottom = offset.bottom + 'px';
609
+ this._elt.style.top = '';
610
+ }
611
+
612
+ this._elt.style.left = offset.left + Math.min(200, offset.width / 2) + 'px';
613
+ } else {
614
+ this.hide();
615
+ }
616
+ };
617
+
618
+ /**
619
+ * Hides the previewer.
620
+ */
621
+ Previewer.prototype.hide = function () {
622
+ this._elt.className = this._elt.className.replace(activeRegexp, '');
623
+ };
624
+
625
+ /**
626
+ * Map of all registered previewers by language
627
+ * @type {{}}
628
+ */
629
+ Previewer.byLanguages = {};
630
+
631
+ /**
632
+ * Map of all registered previewers by type
633
+ * @type {{}}
634
+ */
635
+ Previewer.byType = {};
636
+
637
+ /**
638
+ * Initializes the mouseover event on the code block.
639
+ * @param {HTMLElement} elt The code block (env.element)
640
+ * @param {string} lang The language (env.language)
641
+ */
642
+ Previewer.initEvents = function (elt, lang) {
643
+ var previewers = [];
644
+ if (Previewer.byLanguages[lang]) {
645
+ previewers = previewers.concat(Previewer.byLanguages[lang]);
646
+ }
647
+ if (Previewer.byLanguages['*']) {
648
+ previewers = previewers.concat(Previewer.byLanguages['*']);
649
+ }
650
+ elt.addEventListener('mouseover', function (e) {
651
+ var target = e.target;
652
+ previewers.forEach(function (previewer) {
653
+ previewer.check(target);
654
+ });
655
+ }, false);
656
+ };
657
+ Prism.plugins.Previewer = Previewer;
658
+
659
+ Prism.hooks.add('before-highlight', function (env) {
660
+ for (var previewer in previewers) {
661
+ var languages = previewers[previewer].languages;
662
+ if (env.language && languages[env.language] && !languages[env.language].initialized) {
663
+ var lang = languages[env.language];
664
+ if (!Array.isArray(lang)) {
665
+ lang = [lang];
666
+ }
667
+ lang.forEach(function (lang) {
668
+ var before, inside, root, skip;
669
+ if (lang === true) {
670
+ before = 'important';
671
+ inside = env.language;
672
+ lang = env.language;
673
+ } else {
674
+ before = lang.before || 'important';
675
+ inside = lang.inside || lang.lang;
676
+ root = lang.root || Prism.languages;
677
+ skip = lang.skip;
678
+ lang = env.language;
679
+ }
680
+
681
+ if (!skip && Prism.languages[lang]) {
682
+ Prism.languages.insertBefore(inside, before, previewers[previewer].tokens, root);
683
+ env.grammar = Prism.languages[lang];
684
+
685
+ languages[env.language] = {initialized: true};
686
+ }
687
+ });
688
+ }
689
+ }
690
+ });
691
+
692
+ // Initialize the previewers only when needed
693
+ Prism.hooks.add('after-highlight', function (env) {
694
+ if(Previewer.byLanguages['*'] || Previewer.byLanguages[env.language]) {
695
+ Previewer.initEvents(env.element, env.language);
696
+ }
697
+ });
698
+
699
+ for (var previewer in previewers) {
700
+ previewers[previewer].create();
701
+ }
702
+
703
+ }());