prism-rails 1.5.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/lib/prism-rails.rb +8 -0
- data/lib/prism-rails/version.rb +3 -0
- data/vendor/assets/javascripts/prism-abap.min.js +1 -0
- data/vendor/assets/javascripts/prism-actionscript.min.js +1 -0
- data/vendor/assets/javascripts/prism-apacheconf.min.js +1 -0
- data/vendor/assets/javascripts/prism-apl.min.js +1 -0
- data/vendor/assets/javascripts/prism-applescript.min.js +1 -0
- data/vendor/assets/javascripts/prism-asciidoc.min.js +1 -0
- data/vendor/assets/javascripts/prism-aspnet.min.js +1 -0
- data/vendor/assets/javascripts/prism-autohotkey.min.js +1 -0
- data/vendor/assets/javascripts/prism-autoit.min.js +1 -0
- data/vendor/assets/javascripts/prism-autolinker.js +70 -0
- data/vendor/assets/javascripts/prism-autoloader.js +194 -0
- data/vendor/assets/javascripts/prism-bash.min.js +1 -0
- data/vendor/assets/javascripts/prism-basic.min.js +1 -0
- data/vendor/assets/javascripts/prism-batch.min.js +1 -0
- data/vendor/assets/javascripts/prism-bison.min.js +1 -0
- data/vendor/assets/javascripts/prism-brainfuck.min.js +1 -0
- data/vendor/assets/javascripts/prism-bro.min.js +1 -0
- data/vendor/assets/javascripts/prism-c.min.js +1 -0
- data/vendor/assets/javascripts/prism-clike.min.js +1 -0
- data/vendor/assets/javascripts/prism-coffeescript.min.js +1 -0
- data/vendor/assets/javascripts/prism-command-line.js +77 -0
- data/vendor/assets/javascripts/prism-core.min.js +1 -0
- data/vendor/assets/javascripts/prism-cpp.min.js +1 -0
- data/vendor/assets/javascripts/prism-crystal.min.js +1 -0
- data/vendor/assets/javascripts/prism-csharp.min.js +1 -0
- data/vendor/assets/javascripts/prism-css-extras.min.js +1 -0
- data/vendor/assets/javascripts/prism-css.min.js +1 -0
- data/vendor/assets/javascripts/prism-d.min.js +1 -0
- data/vendor/assets/javascripts/prism-dart.min.js +1 -0
- data/vendor/assets/javascripts/prism-diff.min.js +1 -0
- data/vendor/assets/javascripts/prism-docker.min.js +1 -0
- data/vendor/assets/javascripts/prism-eiffel.min.js +1 -0
- data/vendor/assets/javascripts/prism-elixir.min.js +1 -0
- data/vendor/assets/javascripts/prism-erlang.min.js +1 -0
- data/vendor/assets/javascripts/prism-file-highlight.js +77 -0
- data/vendor/assets/javascripts/prism-fortran.min.js +1 -0
- data/vendor/assets/javascripts/prism-fsharp.min.js +1 -0
- data/vendor/assets/javascripts/prism-gherkin.min.js +1 -0
- data/vendor/assets/javascripts/prism-git.min.js +1 -0
- data/vendor/assets/javascripts/prism-glsl.min.js +1 -0
- data/vendor/assets/javascripts/prism-go.min.js +1 -0
- data/vendor/assets/javascripts/prism-groovy.min.js +1 -0
- data/vendor/assets/javascripts/prism-haml.min.js +1 -0
- data/vendor/assets/javascripts/prism-handlebars.min.js +1 -0
- data/vendor/assets/javascripts/prism-haskell.min.js +1 -0
- data/vendor/assets/javascripts/prism-haxe.min.js +1 -0
- data/vendor/assets/javascripts/prism-highlight-keywords.js +17 -0
- data/vendor/assets/javascripts/prism-http.min.js +1 -0
- data/vendor/assets/javascripts/prism-icon.min.js +1 -0
- data/vendor/assets/javascripts/prism-ie8.js +42 -0
- data/vendor/assets/javascripts/prism-inform7.min.js +1 -0
- data/vendor/assets/javascripts/prism-ini.min.js +1 -0
- data/vendor/assets/javascripts/prism-j.min.js +1 -0
- data/vendor/assets/javascripts/prism-jade.min.js +1 -0
- data/vendor/assets/javascripts/prism-java.min.js +1 -0
- data/vendor/assets/javascripts/prism-javascript.min.js +1 -0
- data/vendor/assets/javascripts/prism-json.min.js +1 -0
- data/vendor/assets/javascripts/prism-jsonp-highlight.js +151 -0
- data/vendor/assets/javascripts/prism-jsx.min.js +1 -0
- data/vendor/assets/javascripts/prism-julia.min.js +1 -0
- data/vendor/assets/javascripts/prism-keep-markup.js +97 -0
- data/vendor/assets/javascripts/prism-keyman.min.js +1 -0
- data/vendor/assets/javascripts/prism-kotlin.min.js +1 -0
- data/vendor/assets/javascripts/prism-latex.min.js +1 -0
- data/vendor/assets/javascripts/prism-less.min.js +1 -0
- data/vendor/assets/javascripts/prism-line-highlight.js +132 -0
- data/vendor/assets/javascripts/prism-line-numbers.js +56 -0
- data/vendor/assets/javascripts/prism-lolcode.min.js +1 -0
- data/vendor/assets/javascripts/prism-lua.min.js +1 -0
- data/vendor/assets/javascripts/prism-makefile.min.js +1 -0
- data/vendor/assets/javascripts/prism-markdown.min.js +1 -0
- data/vendor/assets/javascripts/prism-markup.min.js +1 -0
- data/vendor/assets/javascripts/prism-matlab.min.js +1 -0
- data/vendor/assets/javascripts/prism-mel.min.js +1 -0
- data/vendor/assets/javascripts/prism-mizar.min.js +1 -0
- data/vendor/assets/javascripts/prism-monkey.min.js +1 -0
- data/vendor/assets/javascripts/prism-nasm.min.js +1 -0
- data/vendor/assets/javascripts/prism-nginx.min.js +1 -0
- data/vendor/assets/javascripts/prism-nim.min.js +1 -0
- data/vendor/assets/javascripts/prism-nix.min.js +1 -0
- data/vendor/assets/javascripts/prism-normalize-whitespace.js +170 -0
- data/vendor/assets/javascripts/prism-nsis.min.js +1 -0
- data/vendor/assets/javascripts/prism-objectivec.min.js +1 -0
- data/vendor/assets/javascripts/prism-ocaml.min.js +1 -0
- data/vendor/assets/javascripts/prism-oz.min.js +1 -0
- data/vendor/assets/javascripts/prism-parigp.min.js +1 -0
- data/vendor/assets/javascripts/prism-parser.min.js +1 -0
- data/vendor/assets/javascripts/prism-pascal.min.js +1 -0
- data/vendor/assets/javascripts/prism-perl.min.js +1 -0
- data/vendor/assets/javascripts/prism-php-extras.min.js +1 -0
- data/vendor/assets/javascripts/prism-php.min.js +1 -0
- data/vendor/assets/javascripts/prism-powershell.min.js +1 -0
- data/vendor/assets/javascripts/prism-previewer-angle.js +118 -0
- data/vendor/assets/javascripts/prism-previewer-base.js +201 -0
- data/vendor/assets/javascripts/prism-previewer-color.js +89 -0
- data/vendor/assets/javascripts/prism-previewer-easing.js +117 -0
- data/vendor/assets/javascripts/prism-previewer-gradient.js +216 -0
- data/vendor/assets/javascripts/prism-previewer-time.js +98 -0
- data/vendor/assets/javascripts/prism-processing.min.js +1 -0
- data/vendor/assets/javascripts/prism-prolog.min.js +1 -0
- data/vendor/assets/javascripts/prism-protobuf.min.js +1 -0
- data/vendor/assets/javascripts/prism-puppet.min.js +1 -0
- data/vendor/assets/javascripts/prism-pure.min.js +1 -0
- data/vendor/assets/javascripts/prism-python.min.js +1 -0
- data/vendor/assets/javascripts/prism-q.min.js +1 -0
- data/vendor/assets/javascripts/prism-qore.min.js +1 -0
- data/vendor/assets/javascripts/prism-r.min.js +1 -0
- data/vendor/assets/javascripts/prism-remove-initial-line-feed.js +21 -0
- data/vendor/assets/javascripts/prism-rest.min.js +1 -0
- data/vendor/assets/javascripts/prism-rip.min.js +1 -0
- data/vendor/assets/javascripts/prism-roboconf.min.js +1 -0
- data/vendor/assets/javascripts/prism-ruby.min.js +1 -0
- data/vendor/assets/javascripts/prism-rust.min.js +1 -0
- data/vendor/assets/javascripts/prism-sas.min.js +1 -0
- data/vendor/assets/javascripts/prism-sass.min.js +1 -0
- data/vendor/assets/javascripts/prism-scala.min.js +1 -0
- data/vendor/assets/javascripts/prism-scheme.min.js +1 -0
- data/vendor/assets/javascripts/prism-scss.min.js +1 -0
- data/vendor/assets/javascripts/prism-show-invisibles.js +19 -0
- data/vendor/assets/javascripts/prism-show-language.js +38 -0
- data/vendor/assets/javascripts/prism-smalltalk.min.js +1 -0
- data/vendor/assets/javascripts/prism-smarty.min.js +1 -0
- data/vendor/assets/javascripts/prism-sql.min.js +1 -0
- data/vendor/assets/javascripts/prism-stylus.min.js +1 -0
- data/vendor/assets/javascripts/prism-swift.min.js +1 -0
- data/vendor/assets/javascripts/prism-tcl.min.js +1 -0
- data/vendor/assets/javascripts/prism-textile.min.js +1 -0
- data/vendor/assets/javascripts/prism-twig.min.js +1 -0
- data/vendor/assets/javascripts/prism-typescript.min.js +1 -0
- data/vendor/assets/javascripts/prism-unescaped-markup.js +40 -0
- data/vendor/assets/javascripts/prism-verilog.min.js +1 -0
- data/vendor/assets/javascripts/prism-vhdl.min.js +1 -0
- data/vendor/assets/javascripts/prism-vim.min.js +1 -0
- data/vendor/assets/javascripts/prism-wiki.min.js +1 -0
- data/vendor/assets/javascripts/prism-wpd.js +166 -0
- data/vendor/assets/javascripts/prism-yaml.min.js +1 -0
- data/vendor/assets/javascripts/prism.js +776 -0
- data/vendor/assets/stylesheets/prism-atom-dark.css +146 -0
- data/vendor/assets/stylesheets/prism-autolinker.css +3 -0
- data/vendor/assets/stylesheets/prism-base16-ateliersulphurpool.light.css +152 -0
- data/vendor/assets/stylesheets/prism-cb.css +176 -0
- data/vendor/assets/stylesheets/prism-command-line.css +33 -0
- data/vendor/assets/stylesheets/prism-coy.css +235 -0
- data/vendor/assets/stylesheets/prism-dark.css +128 -0
- data/vendor/assets/stylesheets/prism-duotone-dark.css +149 -0
- data/vendor/assets/stylesheets/prism-duotone-earth.css +148 -0
- data/vendor/assets/stylesheets/prism-duotone-forest.css +148 -0
- data/vendor/assets/stylesheets/prism-duotone-light.css +148 -0
- data/vendor/assets/stylesheets/prism-duotone-sea.css +148 -0
- data/vendor/assets/stylesheets/prism-duotone-space.css +148 -0
- data/vendor/assets/stylesheets/prism-funky.css +116 -0
- data/vendor/assets/stylesheets/prism-ghcolors.css +119 -0
- data/vendor/assets/stylesheets/prism-hopscotch.css +124 -0
- data/vendor/assets/stylesheets/prism-ie8.css +3 -0
- data/vendor/assets/stylesheets/prism-line-highlight.css +47 -0
- data/vendor/assets/stylesheets/prism-line-numbers.css +40 -0
- data/vendor/assets/stylesheets/prism-okaidia.css +121 -0
- data/vendor/assets/stylesheets/prism-pojoaque.css +134 -0
- data/vendor/assets/stylesheets/prism-previewer-angle.css +32 -0
- data/vendor/assets/stylesheets/prism-previewer-base.css +76 -0
- data/vendor/assets/stylesheets/prism-previewer-color.css +9 -0
- data/vendor/assets/stylesheets/prism-previewer-easing.css +29 -0
- data/vendor/assets/stylesheets/prism-previewer-gradient.css +27 -0
- data/vendor/assets/stylesheets/prism-previewer-time.css +90 -0
- data/vendor/assets/stylesheets/prism-show-invisibles.css +33 -0
- data/vendor/assets/stylesheets/prism-show-language.css +29 -0
- data/vendor/assets/stylesheets/prism-solarizedlight.css +148 -0
- data/vendor/assets/stylesheets/prism-tomorrow.css +121 -0
- data/vendor/assets/stylesheets/prism-twilight.css +201 -0
- data/vendor/assets/stylesheets/prism-unescaped-markup.css +10 -0
- data/vendor/assets/stylesheets/prism-wpd.css +11 -0
- data/vendor/assets/stylesheets/prism-xonokai.css +164 -0
- data/vendor/assets/stylesheets/prism.css +137 -0
- 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
|
+
}());
|