prism-rails 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (177) hide show
  1. checksums.yaml +7 -0
  2. data/lib/prism-rails.rb +8 -0
  3. data/lib/prism-rails/version.rb +3 -0
  4. data/vendor/assets/javascripts/prism-abap.min.js +1 -0
  5. data/vendor/assets/javascripts/prism-actionscript.min.js +1 -0
  6. data/vendor/assets/javascripts/prism-apacheconf.min.js +1 -0
  7. data/vendor/assets/javascripts/prism-apl.min.js +1 -0
  8. data/vendor/assets/javascripts/prism-applescript.min.js +1 -0
  9. data/vendor/assets/javascripts/prism-asciidoc.min.js +1 -0
  10. data/vendor/assets/javascripts/prism-aspnet.min.js +1 -0
  11. data/vendor/assets/javascripts/prism-autohotkey.min.js +1 -0
  12. data/vendor/assets/javascripts/prism-autoit.min.js +1 -0
  13. data/vendor/assets/javascripts/prism-autolinker.js +70 -0
  14. data/vendor/assets/javascripts/prism-autoloader.js +194 -0
  15. data/vendor/assets/javascripts/prism-bash.min.js +1 -0
  16. data/vendor/assets/javascripts/prism-basic.min.js +1 -0
  17. data/vendor/assets/javascripts/prism-batch.min.js +1 -0
  18. data/vendor/assets/javascripts/prism-bison.min.js +1 -0
  19. data/vendor/assets/javascripts/prism-brainfuck.min.js +1 -0
  20. data/vendor/assets/javascripts/prism-bro.min.js +1 -0
  21. data/vendor/assets/javascripts/prism-c.min.js +1 -0
  22. data/vendor/assets/javascripts/prism-clike.min.js +1 -0
  23. data/vendor/assets/javascripts/prism-coffeescript.min.js +1 -0
  24. data/vendor/assets/javascripts/prism-command-line.js +77 -0
  25. data/vendor/assets/javascripts/prism-core.min.js +1 -0
  26. data/vendor/assets/javascripts/prism-cpp.min.js +1 -0
  27. data/vendor/assets/javascripts/prism-crystal.min.js +1 -0
  28. data/vendor/assets/javascripts/prism-csharp.min.js +1 -0
  29. data/vendor/assets/javascripts/prism-css-extras.min.js +1 -0
  30. data/vendor/assets/javascripts/prism-css.min.js +1 -0
  31. data/vendor/assets/javascripts/prism-d.min.js +1 -0
  32. data/vendor/assets/javascripts/prism-dart.min.js +1 -0
  33. data/vendor/assets/javascripts/prism-diff.min.js +1 -0
  34. data/vendor/assets/javascripts/prism-docker.min.js +1 -0
  35. data/vendor/assets/javascripts/prism-eiffel.min.js +1 -0
  36. data/vendor/assets/javascripts/prism-elixir.min.js +1 -0
  37. data/vendor/assets/javascripts/prism-erlang.min.js +1 -0
  38. data/vendor/assets/javascripts/prism-file-highlight.js +77 -0
  39. data/vendor/assets/javascripts/prism-fortran.min.js +1 -0
  40. data/vendor/assets/javascripts/prism-fsharp.min.js +1 -0
  41. data/vendor/assets/javascripts/prism-gherkin.min.js +1 -0
  42. data/vendor/assets/javascripts/prism-git.min.js +1 -0
  43. data/vendor/assets/javascripts/prism-glsl.min.js +1 -0
  44. data/vendor/assets/javascripts/prism-go.min.js +1 -0
  45. data/vendor/assets/javascripts/prism-groovy.min.js +1 -0
  46. data/vendor/assets/javascripts/prism-haml.min.js +1 -0
  47. data/vendor/assets/javascripts/prism-handlebars.min.js +1 -0
  48. data/vendor/assets/javascripts/prism-haskell.min.js +1 -0
  49. data/vendor/assets/javascripts/prism-haxe.min.js +1 -0
  50. data/vendor/assets/javascripts/prism-highlight-keywords.js +17 -0
  51. data/vendor/assets/javascripts/prism-http.min.js +1 -0
  52. data/vendor/assets/javascripts/prism-icon.min.js +1 -0
  53. data/vendor/assets/javascripts/prism-ie8.js +42 -0
  54. data/vendor/assets/javascripts/prism-inform7.min.js +1 -0
  55. data/vendor/assets/javascripts/prism-ini.min.js +1 -0
  56. data/vendor/assets/javascripts/prism-j.min.js +1 -0
  57. data/vendor/assets/javascripts/prism-jade.min.js +1 -0
  58. data/vendor/assets/javascripts/prism-java.min.js +1 -0
  59. data/vendor/assets/javascripts/prism-javascript.min.js +1 -0
  60. data/vendor/assets/javascripts/prism-json.min.js +1 -0
  61. data/vendor/assets/javascripts/prism-jsonp-highlight.js +151 -0
  62. data/vendor/assets/javascripts/prism-jsx.min.js +1 -0
  63. data/vendor/assets/javascripts/prism-julia.min.js +1 -0
  64. data/vendor/assets/javascripts/prism-keep-markup.js +97 -0
  65. data/vendor/assets/javascripts/prism-keyman.min.js +1 -0
  66. data/vendor/assets/javascripts/prism-kotlin.min.js +1 -0
  67. data/vendor/assets/javascripts/prism-latex.min.js +1 -0
  68. data/vendor/assets/javascripts/prism-less.min.js +1 -0
  69. data/vendor/assets/javascripts/prism-line-highlight.js +132 -0
  70. data/vendor/assets/javascripts/prism-line-numbers.js +56 -0
  71. data/vendor/assets/javascripts/prism-lolcode.min.js +1 -0
  72. data/vendor/assets/javascripts/prism-lua.min.js +1 -0
  73. data/vendor/assets/javascripts/prism-makefile.min.js +1 -0
  74. data/vendor/assets/javascripts/prism-markdown.min.js +1 -0
  75. data/vendor/assets/javascripts/prism-markup.min.js +1 -0
  76. data/vendor/assets/javascripts/prism-matlab.min.js +1 -0
  77. data/vendor/assets/javascripts/prism-mel.min.js +1 -0
  78. data/vendor/assets/javascripts/prism-mizar.min.js +1 -0
  79. data/vendor/assets/javascripts/prism-monkey.min.js +1 -0
  80. data/vendor/assets/javascripts/prism-nasm.min.js +1 -0
  81. data/vendor/assets/javascripts/prism-nginx.min.js +1 -0
  82. data/vendor/assets/javascripts/prism-nim.min.js +1 -0
  83. data/vendor/assets/javascripts/prism-nix.min.js +1 -0
  84. data/vendor/assets/javascripts/prism-normalize-whitespace.js +170 -0
  85. data/vendor/assets/javascripts/prism-nsis.min.js +1 -0
  86. data/vendor/assets/javascripts/prism-objectivec.min.js +1 -0
  87. data/vendor/assets/javascripts/prism-ocaml.min.js +1 -0
  88. data/vendor/assets/javascripts/prism-oz.min.js +1 -0
  89. data/vendor/assets/javascripts/prism-parigp.min.js +1 -0
  90. data/vendor/assets/javascripts/prism-parser.min.js +1 -0
  91. data/vendor/assets/javascripts/prism-pascal.min.js +1 -0
  92. data/vendor/assets/javascripts/prism-perl.min.js +1 -0
  93. data/vendor/assets/javascripts/prism-php-extras.min.js +1 -0
  94. data/vendor/assets/javascripts/prism-php.min.js +1 -0
  95. data/vendor/assets/javascripts/prism-powershell.min.js +1 -0
  96. data/vendor/assets/javascripts/prism-previewer-angle.js +118 -0
  97. data/vendor/assets/javascripts/prism-previewer-base.js +201 -0
  98. data/vendor/assets/javascripts/prism-previewer-color.js +89 -0
  99. data/vendor/assets/javascripts/prism-previewer-easing.js +117 -0
  100. data/vendor/assets/javascripts/prism-previewer-gradient.js +216 -0
  101. data/vendor/assets/javascripts/prism-previewer-time.js +98 -0
  102. data/vendor/assets/javascripts/prism-processing.min.js +1 -0
  103. data/vendor/assets/javascripts/prism-prolog.min.js +1 -0
  104. data/vendor/assets/javascripts/prism-protobuf.min.js +1 -0
  105. data/vendor/assets/javascripts/prism-puppet.min.js +1 -0
  106. data/vendor/assets/javascripts/prism-pure.min.js +1 -0
  107. data/vendor/assets/javascripts/prism-python.min.js +1 -0
  108. data/vendor/assets/javascripts/prism-q.min.js +1 -0
  109. data/vendor/assets/javascripts/prism-qore.min.js +1 -0
  110. data/vendor/assets/javascripts/prism-r.min.js +1 -0
  111. data/vendor/assets/javascripts/prism-remove-initial-line-feed.js +21 -0
  112. data/vendor/assets/javascripts/prism-rest.min.js +1 -0
  113. data/vendor/assets/javascripts/prism-rip.min.js +1 -0
  114. data/vendor/assets/javascripts/prism-roboconf.min.js +1 -0
  115. data/vendor/assets/javascripts/prism-ruby.min.js +1 -0
  116. data/vendor/assets/javascripts/prism-rust.min.js +1 -0
  117. data/vendor/assets/javascripts/prism-sas.min.js +1 -0
  118. data/vendor/assets/javascripts/prism-sass.min.js +1 -0
  119. data/vendor/assets/javascripts/prism-scala.min.js +1 -0
  120. data/vendor/assets/javascripts/prism-scheme.min.js +1 -0
  121. data/vendor/assets/javascripts/prism-scss.min.js +1 -0
  122. data/vendor/assets/javascripts/prism-show-invisibles.js +19 -0
  123. data/vendor/assets/javascripts/prism-show-language.js +38 -0
  124. data/vendor/assets/javascripts/prism-smalltalk.min.js +1 -0
  125. data/vendor/assets/javascripts/prism-smarty.min.js +1 -0
  126. data/vendor/assets/javascripts/prism-sql.min.js +1 -0
  127. data/vendor/assets/javascripts/prism-stylus.min.js +1 -0
  128. data/vendor/assets/javascripts/prism-swift.min.js +1 -0
  129. data/vendor/assets/javascripts/prism-tcl.min.js +1 -0
  130. data/vendor/assets/javascripts/prism-textile.min.js +1 -0
  131. data/vendor/assets/javascripts/prism-twig.min.js +1 -0
  132. data/vendor/assets/javascripts/prism-typescript.min.js +1 -0
  133. data/vendor/assets/javascripts/prism-unescaped-markup.js +40 -0
  134. data/vendor/assets/javascripts/prism-verilog.min.js +1 -0
  135. data/vendor/assets/javascripts/prism-vhdl.min.js +1 -0
  136. data/vendor/assets/javascripts/prism-vim.min.js +1 -0
  137. data/vendor/assets/javascripts/prism-wiki.min.js +1 -0
  138. data/vendor/assets/javascripts/prism-wpd.js +166 -0
  139. data/vendor/assets/javascripts/prism-yaml.min.js +1 -0
  140. data/vendor/assets/javascripts/prism.js +776 -0
  141. data/vendor/assets/stylesheets/prism-atom-dark.css +146 -0
  142. data/vendor/assets/stylesheets/prism-autolinker.css +3 -0
  143. data/vendor/assets/stylesheets/prism-base16-ateliersulphurpool.light.css +152 -0
  144. data/vendor/assets/stylesheets/prism-cb.css +176 -0
  145. data/vendor/assets/stylesheets/prism-command-line.css +33 -0
  146. data/vendor/assets/stylesheets/prism-coy.css +235 -0
  147. data/vendor/assets/stylesheets/prism-dark.css +128 -0
  148. data/vendor/assets/stylesheets/prism-duotone-dark.css +149 -0
  149. data/vendor/assets/stylesheets/prism-duotone-earth.css +148 -0
  150. data/vendor/assets/stylesheets/prism-duotone-forest.css +148 -0
  151. data/vendor/assets/stylesheets/prism-duotone-light.css +148 -0
  152. data/vendor/assets/stylesheets/prism-duotone-sea.css +148 -0
  153. data/vendor/assets/stylesheets/prism-duotone-space.css +148 -0
  154. data/vendor/assets/stylesheets/prism-funky.css +116 -0
  155. data/vendor/assets/stylesheets/prism-ghcolors.css +119 -0
  156. data/vendor/assets/stylesheets/prism-hopscotch.css +124 -0
  157. data/vendor/assets/stylesheets/prism-ie8.css +3 -0
  158. data/vendor/assets/stylesheets/prism-line-highlight.css +47 -0
  159. data/vendor/assets/stylesheets/prism-line-numbers.css +40 -0
  160. data/vendor/assets/stylesheets/prism-okaidia.css +121 -0
  161. data/vendor/assets/stylesheets/prism-pojoaque.css +134 -0
  162. data/vendor/assets/stylesheets/prism-previewer-angle.css +32 -0
  163. data/vendor/assets/stylesheets/prism-previewer-base.css +76 -0
  164. data/vendor/assets/stylesheets/prism-previewer-color.css +9 -0
  165. data/vendor/assets/stylesheets/prism-previewer-easing.css +29 -0
  166. data/vendor/assets/stylesheets/prism-previewer-gradient.css +27 -0
  167. data/vendor/assets/stylesheets/prism-previewer-time.css +90 -0
  168. data/vendor/assets/stylesheets/prism-show-invisibles.css +33 -0
  169. data/vendor/assets/stylesheets/prism-show-language.css +29 -0
  170. data/vendor/assets/stylesheets/prism-solarizedlight.css +148 -0
  171. data/vendor/assets/stylesheets/prism-tomorrow.css +121 -0
  172. data/vendor/assets/stylesheets/prism-twilight.css +201 -0
  173. data/vendor/assets/stylesheets/prism-unescaped-markup.css +10 -0
  174. data/vendor/assets/stylesheets/prism-wpd.css +11 -0
  175. data/vendor/assets/stylesheets/prism-xonokai.css +164 -0
  176. data/vendor/assets/stylesheets/prism.css +137 -0
  177. metadata +276 -0
@@ -0,0 +1,201 @@
1
+ (function() {
2
+
3
+ if (typeof self === 'undefined' || !self.Prism || !self.document || !Function.prototype.bind) {
4
+ return;
5
+ }
6
+
7
+ /**
8
+ * Returns the absolute X, Y offsets for an element
9
+ * @param {HTMLElement} element
10
+ * @returns {{top: number, right: number, bottom: number, left: number}}
11
+ */
12
+ var getOffset = function (element) {
13
+ var left = 0, top = 0, el = element;
14
+
15
+ if (el.parentNode) {
16
+ do {
17
+ left += el.offsetLeft;
18
+ top += el.offsetTop;
19
+ } while ((el = el.offsetParent) && el.nodeType < 9);
20
+
21
+ el = element;
22
+
23
+ do {
24
+ left -= el.scrollLeft;
25
+ top -= el.scrollTop;
26
+ } while ((el = el.parentNode) && !/body/i.test(el.nodeName));
27
+ }
28
+
29
+ return {
30
+ top: top,
31
+ right: innerWidth - left - element.offsetWidth,
32
+ bottom: innerHeight - top - element.offsetHeight,
33
+ left: left
34
+ };
35
+ };
36
+
37
+ var tokenRegexp = /(?:^|\s)token(?=$|\s)/;
38
+ var activeRegexp = /(?:^|\s)active(?=$|\s)/g;
39
+ var flippedRegexp = /(?:^|\s)flipped(?=$|\s)/g;
40
+
41
+ /**
42
+ * Previewer constructor
43
+ * @param {string} type Unique previewer type
44
+ * @param {function} updater Function that will be called on mouseover.
45
+ * @param {string[]|string=} supportedLanguages Aliases of the languages this previewer must be enabled for. Defaults to "*", all languages.
46
+ * @constructor
47
+ */
48
+ var Previewer = function (type, updater, supportedLanguages, initializer) {
49
+ this._elt = null;
50
+ this._type = type;
51
+ this._clsRegexp = RegExp('(?:^|\\s)' + type + '(?=$|\\s)');
52
+ this._token = null;
53
+ this.updater = updater;
54
+ this._mouseout = this.mouseout.bind(this);
55
+ this.initializer = initializer;
56
+
57
+ var self = this;
58
+
59
+ if (!supportedLanguages) {
60
+ supportedLanguages = ['*'];
61
+ }
62
+ if (Prism.util.type(supportedLanguages) !== 'Array') {
63
+ supportedLanguages = [supportedLanguages];
64
+ }
65
+ supportedLanguages.forEach(function (lang) {
66
+ if (typeof lang !== 'string') {
67
+ lang = lang.lang;
68
+ }
69
+ if (!Previewer.byLanguages[lang]) {
70
+ Previewer.byLanguages[lang] = [];
71
+ }
72
+ if (Previewer.byLanguages[lang].indexOf(self) < 0) {
73
+ Previewer.byLanguages[lang].push(self);
74
+ }
75
+ });
76
+ Previewer.byType[type] = this;
77
+ };
78
+
79
+ /**
80
+ * Creates the HTML element for the previewer.
81
+ */
82
+ Previewer.prototype.init = function () {
83
+ if (this._elt) {
84
+ return;
85
+ }
86
+ this._elt = document.createElement('div');
87
+ this._elt.className = 'prism-previewer prism-previewer-' + this._type;
88
+ document.body.appendChild(this._elt);
89
+ if(this.initializer) {
90
+ this.initializer();
91
+ }
92
+ };
93
+
94
+ /**
95
+ * Checks the class name of each hovered element
96
+ * @param token
97
+ */
98
+ Previewer.prototype.check = function (token) {
99
+ do {
100
+ if (tokenRegexp.test(token.className) && this._clsRegexp.test(token.className)) {
101
+ break;
102
+ }
103
+ } while(token = token.parentNode);
104
+
105
+ if (token && token !== this._token) {
106
+ this._token = token;
107
+ this.show();
108
+ }
109
+ };
110
+
111
+ /**
112
+ * Called on mouseout
113
+ */
114
+ Previewer.prototype.mouseout = function() {
115
+ this._token.removeEventListener('mouseout', this._mouseout, false);
116
+ this._token = null;
117
+ this.hide();
118
+ };
119
+
120
+ /**
121
+ * Shows the previewer positioned properly for the current token.
122
+ */
123
+ Previewer.prototype.show = function () {
124
+ if (!this._elt) {
125
+ this.init();
126
+ }
127
+ if (!this._token) {
128
+ return;
129
+ }
130
+
131
+ if (this.updater.call(this._elt, this._token.textContent)) {
132
+ this._token.addEventListener('mouseout', this._mouseout, false);
133
+
134
+ var offset = getOffset(this._token);
135
+ this._elt.className += ' active';
136
+
137
+ if (offset.top - this._elt.offsetHeight > 0) {
138
+ this._elt.className = this._elt.className.replace(flippedRegexp, '');
139
+ this._elt.style.top = offset.top + 'px';
140
+ this._elt.style.bottom = '';
141
+ } else {
142
+ this._elt.className += ' flipped';
143
+ this._elt.style.bottom = offset.bottom + 'px';
144
+ this._elt.style.top = '';
145
+ }
146
+
147
+ this._elt.style.left = offset.left + Math.min(200, this._token.offsetWidth / 2) + 'px';
148
+ } else {
149
+ this.hide();
150
+ }
151
+ };
152
+
153
+ /**
154
+ * Hides the previewer.
155
+ */
156
+ Previewer.prototype.hide = function () {
157
+ this._elt.className = this._elt.className.replace(activeRegexp, '');
158
+ };
159
+
160
+ /**
161
+ * Map of all registered previewers by language
162
+ * @type {{}}
163
+ */
164
+ Previewer.byLanguages = {};
165
+
166
+ /**
167
+ * Map of all registered previewers by type
168
+ * @type {{}}
169
+ */
170
+ Previewer.byType = {};
171
+
172
+ /**
173
+ * Initializes the mouseover event on the code block.
174
+ * @param {HTMLElement} elt The code block (env.element)
175
+ * @param {string} lang The language (env.language)
176
+ */
177
+ Previewer.initEvents = function (elt, lang) {
178
+ var previewers = [];
179
+ if (Previewer.byLanguages[lang]) {
180
+ previewers = previewers.concat(Previewer.byLanguages[lang]);
181
+ }
182
+ if (Previewer.byLanguages['*']) {
183
+ previewers = previewers.concat(Previewer.byLanguages['*']);
184
+ }
185
+ elt.addEventListener('mouseover', function (e) {
186
+ var target = e.target;
187
+ previewers.forEach(function (previewer) {
188
+ previewer.check(target);
189
+ });
190
+ }, false);
191
+ };
192
+ Prism.plugins.Previewer = Previewer;
193
+
194
+ // Initialize the previewers only when needed
195
+ Prism.hooks.add('after-highlight', function (env) {
196
+ if(Previewer.byLanguages['*'] || Previewer.byLanguages[env.language]) {
197
+ Previewer.initEvents(env.element, env.language);
198
+ }
199
+ });
200
+
201
+ }());
@@ -0,0 +1,89 @@
1
+ (function() {
2
+
3
+ if (
4
+ typeof self !== 'undefined' && !self.Prism ||
5
+ typeof global !== 'undefined' && !global.Prism
6
+ ) {
7
+ return;
8
+ }
9
+
10
+ var languages = {
11
+ 'css': true,
12
+ 'less': true,
13
+ 'markup': {
14
+ lang: 'markup',
15
+ before: 'punctuation',
16
+ inside: 'inside',
17
+ root: Prism.languages.markup && Prism.languages.markup['tag'].inside['attr-value']
18
+ },
19
+ 'sass': [
20
+ {
21
+ lang: 'sass',
22
+ before: 'punctuation',
23
+ inside: 'inside',
24
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
25
+ },
26
+ {
27
+ lang: 'sass',
28
+ inside: 'inside',
29
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
30
+ }
31
+ ],
32
+ 'scss': true,
33
+ 'stylus': [
34
+ {
35
+ lang: 'stylus',
36
+ before: 'hexcode',
37
+ inside: 'rest',
38
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
39
+ },
40
+ {
41
+ lang: 'stylus',
42
+ before: 'hexcode',
43
+ inside: 'rest',
44
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
45
+ }
46
+ ]
47
+ };
48
+
49
+ Prism.hooks.add('before-highlight', function (env) {
50
+ if (env.language && languages[env.language] && !languages[env.language].initialized) {
51
+ var lang = languages[env.language];
52
+ if (Prism.util.type(lang) !== 'Array') {
53
+ lang = [lang];
54
+ }
55
+ lang.forEach(function(lang) {
56
+ var before, inside, root, skip;
57
+ if (lang === true) {
58
+ before = 'important';
59
+ inside = env.language;
60
+ lang = env.language;
61
+ } else {
62
+ before = lang.before || 'important';
63
+ inside = lang.inside || lang.lang;
64
+ root = lang.root || Prism.languages;
65
+ skip = lang.skip;
66
+ lang = env.language;
67
+ }
68
+
69
+ if (!skip && Prism.languages[lang]) {
70
+ Prism.languages.insertBefore(inside, before, {
71
+ 'color': /\B#(?:[0-9a-f]{3}){1,2}\b|\b(?:rgb|hsl)\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*\)\B|\b(?:rgb|hsl)a\(\s*\d{1,3}\s*,\s*\d{1,3}%?\s*,\s*\d{1,3}%?\s*,\s*(?:0|0?\.\d+|1)\s*\)\B|\b(?:AliceBlue|AntiqueWhite|Aqua|Aquamarine|Azure|Beige|Bisque|Black|BlanchedAlmond|Blue|BlueViolet|Brown|BurlyWood|CadetBlue|Chartreuse|Chocolate|Coral|CornflowerBlue|Cornsilk|Crimson|Cyan|DarkBlue|DarkCyan|DarkGoldenRod|DarkGray|DarkGreen|DarkKhaki|DarkMagenta|DarkOliveGreen|DarkOrange|DarkOrchid|DarkRed|DarkSalmon|DarkSeaGreen|DarkSlateBlue|DarkSlateGray|DarkTurquoise|DarkViolet|DeepPink|DeepSkyBlue|DimGray|DodgerBlue|FireBrick|FloralWhite|ForestGreen|Fuchsia|Gainsboro|GhostWhite|Gold|GoldenRod|Gray|Green|GreenYellow|HoneyDew|HotPink|IndianRed|Indigo|Ivory|Khaki|Lavender|LavenderBlush|LawnGreen|LemonChiffon|LightBlue|LightCoral|LightCyan|LightGoldenRodYellow|LightGray|LightGreen|LightPink|LightSalmon|LightSeaGreen|LightSkyBlue|LightSlateGray|LightSteelBlue|LightYellow|Lime|LimeGreen|Linen|Magenta|Maroon|MediumAquaMarine|MediumBlue|MediumOrchid|MediumPurple|MediumSeaGreen|MediumSlateBlue|MediumSpringGreen|MediumTurquoise|MediumVioletRed|MidnightBlue|MintCream|MistyRose|Moccasin|NavajoWhite|Navy|OldLace|Olive|OliveDrab|Orange|OrangeRed|Orchid|PaleGoldenRod|PaleGreen|PaleTurquoise|PaleVioletRed|PapayaWhip|PeachPuff|Peru|Pink|Plum|PowderBlue|Purple|Red|RosyBrown|RoyalBlue|SaddleBrown|Salmon|SandyBrown|SeaGreen|SeaShell|Sienna|Silver|SkyBlue|SlateBlue|SlateGray|Snow|SpringGreen|SteelBlue|Tan|Teal|Thistle|Tomato|Turquoise|Violet|Wheat|White|WhiteSmoke|Yellow|YellowGreen)\b/i
72
+ }, root);
73
+ env.grammar = Prism.languages[lang];
74
+
75
+ languages[env.language] = {initialized: true};
76
+ }
77
+ });
78
+ }
79
+ });
80
+
81
+ if (Prism.plugins.Previewer) {
82
+ new Prism.plugins.Previewer('color', function(value) {
83
+ this.style.backgroundColor = '';
84
+ this.style.backgroundColor = value;
85
+ return !!this.style.backgroundColor;
86
+ });
87
+ }
88
+
89
+ }());
@@ -0,0 +1,117 @@
1
+ (function() {
2
+
3
+ if (
4
+ typeof self !== 'undefined' && !self.Prism ||
5
+ typeof global !== 'undefined' && !global.Prism
6
+ ) {
7
+ return;
8
+ }
9
+
10
+ var languages = {
11
+ 'css': true,
12
+ 'less': true,
13
+ 'sass': [
14
+ {
15
+ lang: 'sass',
16
+ inside: 'inside',
17
+ before: 'punctuation',
18
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
19
+ },
20
+ {
21
+ lang: 'sass',
22
+ inside: 'inside',
23
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
24
+ }
25
+ ],
26
+ 'scss': true,
27
+ 'stylus': [
28
+ {
29
+ lang: 'stylus',
30
+ before: 'hexcode',
31
+ inside: 'rest',
32
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
33
+ },
34
+ {
35
+ lang: 'stylus',
36
+ before: 'hexcode',
37
+ inside: 'rest',
38
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
39
+ }
40
+ ]
41
+ };
42
+
43
+ Prism.hooks.add('before-highlight', function (env) {
44
+ if (env.language && languages[env.language] && !languages[env.language].initialized) {
45
+ var lang = languages[env.language];
46
+ if (Prism.util.type(lang) !== 'Array') {
47
+ lang = [lang];
48
+ }
49
+ lang.forEach(function(lang) {
50
+ var before, inside, root, skip;
51
+ if (lang === true) {
52
+ before = 'important';
53
+ inside = env.language;
54
+ lang = env.language;
55
+ } else {
56
+ before = lang.before || 'important';
57
+ inside = lang.inside || lang.lang;
58
+ root = lang.root || Prism.languages;
59
+ skip = lang.skip;
60
+ lang = env.language;
61
+ }
62
+
63
+ if (!skip && Prism.languages[lang]) {
64
+ Prism.languages.insertBefore(inside, before, {
65
+ 'easing': /\bcubic-bezier\((?:-?\d*\.?\d+,\s*){3}-?\d*\.?\d+\)\B|\b(?:linear|ease(?:-in)?(?:-out)?)(?=\s|[;}]|$)/i
66
+ }, root);
67
+ env.grammar = Prism.languages[lang];
68
+
69
+ languages[env.language] = {initialized: true};
70
+ }
71
+ });
72
+ }
73
+ });
74
+
75
+ if (Prism.plugins.Previewer) {
76
+ new Prism.plugins.Previewer('easing', function (value) {
77
+
78
+ value = {
79
+ 'linear': '0,0,1,1',
80
+ 'ease': '.25,.1,.25,1',
81
+ 'ease-in': '.42,0,1,1',
82
+ 'ease-out': '0,0,.58,1',
83
+ 'ease-in-out':'.42,0,.58,1'
84
+ }[value] || value;
85
+
86
+ var p = value.match(/-?\d*\.?\d+/g);
87
+
88
+ if(p.length === 4) {
89
+ p = p.map(function(p, i) { return (i % 2? 1 - p : p) * 100; });
90
+
91
+ this.querySelector('path').setAttribute('d', 'M0,100 C' + p[0] + ',' + p[1] + ', ' + p[2] + ',' + p[3] + ', 100,0');
92
+
93
+ var lines = this.querySelectorAll('line');
94
+ lines[0].setAttribute('x2', p[0]);
95
+ lines[0].setAttribute('y2', p[1]);
96
+ lines[1].setAttribute('x2', p[2]);
97
+ lines[1].setAttribute('y2', p[3]);
98
+
99
+ return true;
100
+ }
101
+
102
+ return false;
103
+ }, '*', function () {
104
+ this._elt.innerHTML = '<svg viewBox="-20 -20 140 140" width="100" height="100">' +
105
+ '<defs>' +
106
+ '<marker id="prism-previewer-easing-marker" viewBox="0 0 4 4" refX="2" refY="2" markerUnits="strokeWidth">' +
107
+ '<circle cx="2" cy="2" r="1.5" />' +
108
+ '</marker>' +
109
+ '</defs>' +
110
+ '<path d="M0,100 C20,50, 40,30, 100,0" />' +
111
+ '<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)" />' +
112
+ '<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)" />' +
113
+ '</svg>';
114
+ });
115
+ }
116
+
117
+ }());
@@ -0,0 +1,216 @@
1
+ (function() {
2
+
3
+ if (
4
+ typeof self !== 'undefined' && !self.Prism ||
5
+ typeof global !== 'undefined' && !global.Prism
6
+ ) {
7
+ return;
8
+ }
9
+
10
+ var languages = {
11
+ 'css': true,
12
+ 'less': true,
13
+ 'sass': [
14
+ {
15
+ lang: 'sass',
16
+ before: 'punctuation',
17
+ inside: 'inside',
18
+ root: Prism.languages.sass && Prism.languages.sass['variable-line']
19
+ },
20
+ {
21
+ lang: 'sass',
22
+ before: 'punctuation',
23
+ inside: 'inside',
24
+ root: Prism.languages.sass && Prism.languages.sass['property-line']
25
+ }
26
+ ],
27
+ 'scss': true,
28
+ 'stylus': [
29
+ {
30
+ lang: 'stylus',
31
+ before: 'func',
32
+ inside: 'rest',
33
+ root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
34
+ },
35
+ {
36
+ lang: 'stylus',
37
+ before: 'func',
38
+ inside: 'rest',
39
+ root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
40
+ }
41
+ ]
42
+ };
43
+
44
+ Prism.hooks.add('before-highlight', function (env) {
45
+ if (env.language && languages[env.language] && !languages[env.language].initialized) {
46
+ var lang = languages[env.language];
47
+ if (Prism.util.type(lang) !== 'Array') {
48
+ lang = [lang];
49
+ }
50
+ lang.forEach(function(lang) {
51
+ var before, inside, root, skip;
52
+ if (lang === true) {
53
+ // Insert before color previewer if it exists
54
+ before = Prism.plugins.Previewer && Prism.plugins.Previewer.byType['color'] ? 'color' : 'important';
55
+ inside = env.language;
56
+ lang = env.language;
57
+ } else {
58
+ before = lang.before || 'important';
59
+ inside = lang.inside || lang.lang;
60
+ root = lang.root || Prism.languages;
61
+ skip = lang.skip;
62
+ lang = env.language;
63
+ }
64
+
65
+ if (!skip && Prism.languages[lang]) {
66
+ Prism.languages.insertBefore(inside, before, {
67
+ 'gradient': {
68
+ pattern: /(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\((?:(?:rgb|hsl)a?\(.+?\)|[^\)])+\)/gi,
69
+ inside: {
70
+ 'function': /[\w-]+(?=\()/,
71
+ 'punctuation': /[(),]/
72
+ }
73
+ }
74
+ }, root);
75
+ env.grammar = Prism.languages[lang];
76
+
77
+ languages[env.language] = {initialized: true};
78
+ }
79
+ });
80
+ }
81
+ });
82
+
83
+ // Stores already processed gradients so that we don't
84
+ // make the conversion every time the previewer is shown
85
+ var cache = {};
86
+
87
+ /**
88
+ * Returns a W3C-valid linear gradient
89
+ * @param {string} prefix Vendor prefix if any ("-moz-", "-webkit-", etc.)
90
+ * @param {string} func Gradient function name ("linear-gradient")
91
+ * @param {string[]} values Array of the gradient function parameters (["0deg", "red 0%", "blue 100%"])
92
+ */
93
+ var convertToW3CLinearGradient = function(prefix, func, values) {
94
+ // Default value for angle
95
+ var angle = '180deg';
96
+
97
+ if (/^(?:-?\d*\.?\d+(?:deg|rad)|to\b|top|right|bottom|left)/.test(values[0])) {
98
+ angle = values.shift();
99
+ if (angle.indexOf('to ') < 0) {
100
+ // Angle uses old keywords
101
+ // W3C syntax uses "to" + opposite keywords
102
+ if (angle.indexOf('top') >= 0) {
103
+ if (angle.indexOf('left') >= 0) {
104
+ angle = 'to bottom right';
105
+ } else if (angle.indexOf('right') >= 0) {
106
+ angle = 'to bottom left';
107
+ } else {
108
+ angle = 'to bottom';
109
+ }
110
+ } else if (angle.indexOf('bottom') >= 0) {
111
+ if (angle.indexOf('left') >= 0) {
112
+ angle = 'to top right';
113
+ } else if (angle.indexOf('right') >= 0) {
114
+ angle = 'to top left';
115
+ } else {
116
+ angle = 'to top';
117
+ }
118
+ } else if (angle.indexOf('left') >= 0) {
119
+ angle = 'to right';
120
+ } else if (angle.indexOf('right') >= 0) {
121
+ angle = 'to left';
122
+ } else if (prefix) {
123
+ // Angle is shifted by 90deg in prefixed gradients
124
+ if (angle.indexOf('deg') >= 0) {
125
+ angle = (90 - parseFloat(angle)) + 'deg';
126
+ } else if (angle.indexOf('rad') >= 0) {
127
+ angle = (Math.PI / 2 - parseFloat(angle)) + 'rad';
128
+ }
129
+ }
130
+ }
131
+ }
132
+
133
+ return func + '(' + angle + ',' + values.join(',') + ')';
134
+ };
135
+
136
+ /**
137
+ * Returns a W3C-valid radial gradient
138
+ * @param {string} prefix Vendor prefix if any ("-moz-", "-webkit-", etc.)
139
+ * @param {string} func Gradient function name ("linear-gradient")
140
+ * @param {string[]} values Array of the gradient function parameters (["0deg", "red 0%", "blue 100%"])
141
+ */
142
+ var convertToW3CRadialGradient = function(prefix, func, values) {
143
+ if (values[0].indexOf('at') < 0) {
144
+ // Looks like old syntax
145
+
146
+ // Default values
147
+ var position = 'center';
148
+ var shape = 'ellipse';
149
+ var size = 'farthest-corner';
150
+
151
+ if (/\bcenter|top|right|bottom|left\b|^\d+/.test(values[0])) {
152
+ // Found a position
153
+ // Remove angle value, if any
154
+ position = values.shift().replace(/\s*-?\d+(?:rad|deg)\s*/, '');
155
+ }
156
+ if (/\bcircle|ellipse|closest|farthest|contain|cover\b/.test(values[0])) {
157
+ // Found a shape and/or size
158
+ var shapeSizeParts = values.shift().split(/\s+/);
159
+ if (shapeSizeParts[0] && (shapeSizeParts[0] === 'circle' || shapeSizeParts[0] === 'ellipse')) {
160
+ shape = shapeSizeParts.shift();
161
+ }
162
+ if (shapeSizeParts[0]) {
163
+ size = shapeSizeParts.shift();
164
+ }
165
+
166
+ // Old keywords are converted to their synonyms
167
+ if (size === 'cover') {
168
+ size = 'farthest-corner';
169
+ } else if (size === 'contain') {
170
+ size = 'clothest-side';
171
+ }
172
+ }
173
+
174
+ return func + '(' + shape + ' ' + size + ' at ' + position + ',' + values.join(',') + ')';
175
+ }
176
+ return func + '(' + values.join(',') + ')';
177
+ };
178
+
179
+ /**
180
+ * Converts a gradient to a W3C-valid one
181
+ * Does not support old webkit syntax (-webkit-gradient(linear...) and -webkit-gradient(radial...))
182
+ * @param {string} gradient The CSS gradient
183
+ */
184
+ var convertToW3CGradient = function(gradient) {
185
+ if (cache[gradient]) {
186
+ return cache[gradient];
187
+ }
188
+ var parts = gradient.match(/^(\b|\B-[a-z]{1,10}-)((?:repeating-)?(?:linear|radial)-gradient)/);
189
+ // "", "-moz-", etc.
190
+ var prefix = parts && parts[1];
191
+ // "linear-gradient", "radial-gradient", etc.
192
+ var func = parts && parts[2];
193
+
194
+ var values = gradient.replace(/^(?:\b|\B-[a-z]{1,10}-)(?:repeating-)?(?:linear|radial)-gradient\(|\)$/g, '').split(/\s*,\s*/);
195
+
196
+ if (func.indexOf('linear') >= 0) {
197
+ return cache[gradient] = convertToW3CLinearGradient(prefix, func, values);
198
+ } else if (func.indexOf('radial') >= 0) {
199
+ return cache[gradient] = convertToW3CRadialGradient(prefix, func, values);
200
+ }
201
+ return cache[gradient] = func + '(' + values.join(',') + ')';
202
+ };
203
+
204
+
205
+
206
+ if (Prism.plugins.Previewer) {
207
+ new Prism.plugins.Previewer('gradient', function(value) {
208
+ this.firstChild.style.backgroundImage = '';
209
+ this.firstChild.style.backgroundImage = convertToW3CGradient(value);
210
+ return !!this.firstChild.style.backgroundImage;
211
+ }, '*', function () {
212
+ this._elt.innerHTML = '<div></div>';
213
+ });
214
+ }
215
+
216
+ }());