| Index: lib/src/prism/plugins/previewer-easing/prism-previewer-easing.js
|
| diff --git a/lib/src/prism/plugins/previewer-easing/prism-previewer-easing.js b/lib/src/prism/plugins/previewer-easing/prism-previewer-easing.js
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..ad01dc330a75b2101b8a7e620079438b4f73183c
|
| --- /dev/null
|
| +++ b/lib/src/prism/plugins/previewer-easing/prism-previewer-easing.js
|
| @@ -0,0 +1,117 @@
|
| +(function() {
|
| +
|
| + if (
|
| + typeof self !== 'undefined' && !self.Prism ||
|
| + typeof global !== 'undefined' && !global.Prism
|
| + ) {
|
| + return;
|
| + }
|
| +
|
| + var languages = {
|
| + 'css': true,
|
| + 'less': true,
|
| + 'sass': [
|
| + {
|
| + lang: 'sass',
|
| + inside: 'inside',
|
| + before: 'punctuation',
|
| + root: Prism.languages.sass && Prism.languages.sass['variable-line']
|
| + },
|
| + {
|
| + lang: 'sass',
|
| + inside: 'inside',
|
| + root: Prism.languages.sass && Prism.languages.sass['property-line']
|
| + }
|
| + ],
|
| + 'scss': true,
|
| + 'stylus': [
|
| + {
|
| + lang: 'stylus',
|
| + before: 'hexcode',
|
| + inside: 'rest',
|
| + root: Prism.languages.stylus && Prism.languages.stylus['property-declaration'].inside
|
| + },
|
| + {
|
| + lang: 'stylus',
|
| + before: 'hexcode',
|
| + inside: 'rest',
|
| + root: Prism.languages.stylus && Prism.languages.stylus['variable-declaration'].inside
|
| + }
|
| + ]
|
| + };
|
| +
|
| + Prism.hooks.add('before-highlight', function (env) {
|
| + if (env.language && languages[env.language] && !languages[env.language].initialized) {
|
| + var lang = languages[env.language];
|
| + if (Prism.util.type(lang) !== 'Array') {
|
| + lang = [lang];
|
| + }
|
| + lang.forEach(function(lang) {
|
| + var before, inside, root, skip;
|
| + if (lang === true) {
|
| + before = 'important';
|
| + inside = env.language;
|
| + lang = env.language;
|
| + } else {
|
| + before = lang.before || 'important';
|
| + inside = lang.inside || lang.lang;
|
| + root = lang.root || Prism.languages;
|
| + skip = lang.skip;
|
| + lang = env.language;
|
| + }
|
| +
|
| + if (!skip && Prism.languages[lang]) {
|
| + Prism.languages.insertBefore(inside, before, {
|
| + 'easing': /\bcubic-bezier\((?:-?\d*\.?\d+,\s*){3}-?\d*\.?\d+\)\B|\b(?:linear|ease(?:-in)?(?:-out)?)(?=\s|[;}]|$)/i
|
| + }, root);
|
| + env.grammar = Prism.languages[lang];
|
| +
|
| + languages[env.language] = {initialized: true};
|
| + }
|
| + });
|
| + }
|
| + });
|
| +
|
| + if (Prism.plugins.Previewer) {
|
| + new Prism.plugins.Previewer('easing', function (value) {
|
| +
|
| + value = {
|
| + 'linear': '0,0,1,1',
|
| + 'ease': '.25,.1,.25,1',
|
| + 'ease-in': '.42,0,1,1',
|
| + 'ease-out': '0,0,.58,1',
|
| + 'ease-in-out':'.42,0,.58,1'
|
| + }[value] || value;
|
| +
|
| + var p = value.match(/-?\d*\.?\d+/g);
|
| +
|
| + if(p.length === 4) {
|
| + p = p.map(function(p, i) { return (i % 2? 1 - p : p) * 100; });
|
| +
|
| + this.querySelector('path').setAttribute('d', 'M0,100 C' + p[0] + ',' + p[1] + ', ' + p[2] + ',' + p[3] + ', 100,0');
|
| +
|
| + var lines = this.querySelectorAll('line');
|
| + lines[0].setAttribute('x2', p[0]);
|
| + lines[0].setAttribute('y2', p[1]);
|
| + lines[1].setAttribute('x2', p[2]);
|
| + lines[1].setAttribute('y2', p[3]);
|
| +
|
| + return true;
|
| + }
|
| +
|
| + return false;
|
| + }, '*', function () {
|
| + this._elt.innerHTML = '<svg viewBox="-20 -20 140 140" width="100" height="100">' +
|
| + '<defs>' +
|
| + '<marker id="prism-previewer-easing-marker" viewBox="0 0 4 4" refX="2" refY="2" markerUnits="strokeWidth">' +
|
| + '<circle cx="2" cy="2" r="1.5" />' +
|
| + '</marker>' +
|
| + '</defs>' +
|
| + '<path d="M0,100 C20,50, 40,30, 100,0" />' +
|
| + '<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)" />' +
|
| + '<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)" />' +
|
| + '</svg>';
|
| + });
|
| + }
|
| +
|
| +}());
|
|
|