1 | 'use strict';
|
2 |
|
3 | var transformers = require('transformers');
|
4 | var jstransformer = require('jstransformer');
|
5 | var uglify = require('uglify-js');
|
6 | var CleanCSS = require('clean-css');
|
7 |
|
8 | var warned = {};
|
9 | var alternatives = {
|
10 | uglifyJS: 'uglify-js',
|
11 | uglify: 'uglify-js',
|
12 | uglifyCSS: 'clean-css',
|
13 | 'uglify-css': 'clean-css' ,
|
14 | uglifyJSON: 'json',
|
15 | 'uglify-json': 'json',
|
16 | live: 'livescript',
|
17 | LiveScript: 'livescript',
|
18 | ls: 'livescript',
|
19 |
|
20 | coffeekup: 'coffeecup',
|
21 |
|
22 | styl: 'stylus',
|
23 | coffee: 'coffee-script',
|
24 | coffeescript: 'coffee-script',
|
25 | coffeeScript: 'coffee-script',
|
26 |
|
27 | css: 'verbatim',
|
28 | js: 'verbatim',
|
29 | };
|
30 | var deprecated = ['jqtpl', 'jazz'];
|
31 | function getMarkdownImplementation() {
|
32 | var implementations = ['marked', 'supermarked', 'markdown-js', 'markdown'];
|
33 | while (implementations.length) {
|
34 | try {
|
35 | require(implementations[0]);
|
36 | return implementations[0];
|
37 | } catch (ex) {
|
38 | implementations.shift();
|
39 | }
|
40 | }
|
41 | return 'markdown-it';
|
42 | }
|
43 |
|
44 | module.exports = filter;
|
45 | function filter(name, str, options) {
|
46 | if (typeof filter[name] === 'function') {
|
47 | return filter[name](str, options);
|
48 | } else {
|
49 | var tr;
|
50 | try {
|
51 | tr = jstransformer(require('jstransformer-' + name));
|
52 | } catch (ex) {}
|
53 | if (tr) {
|
54 |
|
55 | var result = tr.render(str, options, options).body;
|
56 | if (options && options.minify) {
|
57 | try {
|
58 | switch (tr.outputFormat) {
|
59 | case 'js':
|
60 | result = uglify.minify(result, {fromString: true}).code;
|
61 | break;
|
62 | case 'css':
|
63 | result = new CleanCSS().minify(result).styles;
|
64 | break;
|
65 | }
|
66 | } catch (ex) {
|
67 |
|
68 | }
|
69 | }
|
70 | return result;
|
71 | } else if (transformers[name]) {
|
72 | if (!warned[name]) {
|
73 | warned[name] = true;
|
74 | if (name === 'md' || name === 'markdown') {
|
75 | var implementation = getMarkdownImplementation();
|
76 | console.log('Transformers.' + name + ' is deprecated, you must replace the :' +
|
77 | name + ' jade filter, with :' +
|
78 | implementation + ' and install jstransformer-' +
|
79 | implementation + ' before you update to jade@2.0.0.');
|
80 | } else if (alternatives[name]) {
|
81 | console.log('Transformers.' + name + ' is deprecated, you must replace the :' +
|
82 | name + ' jade filter, with :' +
|
83 | alternatives[name] + ' and install jstransformer-' +
|
84 | alternatives[name] + ' before you update to jade@2.0.0.');
|
85 | } else {
|
86 | console.log('Transformers.' + name + ' is deprecated, to continue using the :' +
|
87 | name + ' jade filter after jade@2.0.0, you will need to install jstransformer-' +
|
88 | name.toLowerCase() + '.');
|
89 | }
|
90 | }
|
91 | return transformers[name].renderSync(str, options);
|
92 | } else {
|
93 | throw new Error('unknown filter ":' + name + '"');
|
94 | }
|
95 | }
|
96 | }
|