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>'; |
+ }); |
+ } |
+ |
+}()); |