riot_js-rails 0.6.2 → 0.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Rakefile +9 -1
- data/lib/riot_js/rails/processors/processor.rb +91 -11
- data/lib/riot_js/rails/railtie.rb +8 -6
- data/lib/riot_js/rails/version.rb +1 -1
- data/vendor/assets/javascripts/compiler/brackets.js +7 -5
- data/vendor/assets/javascripts/compiler/compiler.js +129 -102
- data/vendor/assets/javascripts/compiler/parsers.js +129 -169
- data/vendor/assets/javascripts/compiler/parsers/_utils.js +47 -0
- data/vendor/assets/javascripts/compiler/parsers/buble.js +18 -0
- data/vendor/assets/javascripts/compiler/parsers/coffee.js +19 -0
- data/vendor/assets/javascripts/compiler/parsers/es6.js +18 -0
- data/vendor/assets/javascripts/compiler/parsers/jade.js +27 -0
- data/vendor/assets/javascripts/compiler/parsers/less.js +31 -0
- data/vendor/assets/javascripts/compiler/parsers/livescript.js +20 -0
- data/vendor/assets/javascripts/compiler/parsers/pug.js +23 -0
- data/vendor/assets/javascripts/compiler/parsers/sass.js +34 -0
- data/vendor/assets/javascripts/compiler/parsers/scss.js +25 -0
- data/vendor/assets/javascripts/compiler/parsers/stylus.js +26 -0
- data/vendor/assets/javascripts/compiler/parsers/typescript.js +9 -0
- data/vendor/assets/javascripts/compiler/safe-regex.js +19 -0
- data/vendor/assets/javascripts/riot.js +1870 -1876
- metadata +16 -5
- data/lib/riot_js/rails/processors/sprockets_processor_v2.rb +0 -26
- data/lib/riot_js/rails/processors/sprockets_processor_v3.rb +0 -39
@@ -2,205 +2,165 @@
|
|
2
2
|
* The compiler.parsers object holds the compiler's predefined parsers
|
3
3
|
* @module
|
4
4
|
*/
|
5
|
+
'use strict'
|
5
6
|
|
6
|
-
var
|
7
|
+
var REQPATH = './parsers/'
|
8
|
+
var TRUE = true
|
9
|
+
var NULL = null
|
7
10
|
|
8
|
-
//
|
9
|
-
function _none (src) {
|
11
|
+
// Passtrough for the internal `none` and `javascript` parsers
|
12
|
+
function _none (src) {
|
13
|
+
return src
|
14
|
+
}
|
10
15
|
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
16
|
+
// This is the main parsers object holding the html, js, and css keys
|
17
|
+
// initialized with the parsers that cannot be required.
|
18
|
+
//
|
19
|
+
var _parsers = {
|
20
|
+
html: {},
|
21
|
+
css: {},
|
22
|
+
js: { none: _none, javascript: _none }
|
15
23
|
}
|
16
24
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
* @static
|
23
|
-
*/
|
24
|
-
function _modname (name) {
|
25
|
-
switch (name) {
|
26
|
-
case 'es6':
|
27
|
-
return 'babel'
|
28
|
-
case 'babel':
|
29
|
-
return 'babel-core'
|
30
|
-
case 'javascript':
|
31
|
-
return 'none'
|
32
|
-
case 'coffee':
|
33
|
-
case 'coffeescript':
|
34
|
-
return 'coffee-script'
|
35
|
-
case 'scss':
|
36
|
-
case 'sass':
|
37
|
-
return 'node-sass'
|
38
|
-
case 'typescript':
|
39
|
-
return 'typescript-simple'
|
40
|
-
default:
|
41
|
-
return name
|
42
|
-
}
|
25
|
+
// Native riot parsers go here, having false if already required.
|
26
|
+
var _loaders = {
|
27
|
+
html: { jade: TRUE, pug: TRUE },
|
28
|
+
css: { sass: TRUE, scss: TRUE, less: TRUE, stylus: TRUE },
|
29
|
+
js: { es6: TRUE, buble: TRUE, coffee: TRUE, livescript: TRUE, typescript: TRUE }
|
43
30
|
}
|
44
31
|
|
32
|
+
_loaders.js.coffeescript = TRUE // 4 the nostalgics
|
33
|
+
|
45
34
|
/**
|
46
|
-
* Loads a
|
35
|
+
* Loads a "native" riot parser.
|
36
|
+
*
|
37
|
+
* It set the flag in the _loaders object to false for the required parser.
|
38
|
+
* Try to load the parser and save the module to the _parsers object.
|
39
|
+
* On error, throws a custom exception (adds 'riot' notice to the original).
|
40
|
+
* On success returns the loaded module.
|
47
41
|
*
|
48
|
-
* @param {string}
|
49
|
-
* @param {string}
|
50
|
-
* @returns {
|
42
|
+
* @param {string} branch - The branch name inside _parsers/loaders
|
43
|
+
* @param {string} parser - The parser's name
|
44
|
+
* @returns {Function} Loaded module.
|
51
45
|
*/
|
52
|
-
function
|
46
|
+
function _load (branch, parser) {
|
47
|
+
var req = REQPATH + (parser === 'coffeescript' ? 'coffee' : parser)
|
48
|
+
var mod
|
53
49
|
|
54
|
-
|
55
|
-
|
56
|
-
|
50
|
+
_loaders[branch][parser] = false // try once
|
51
|
+
_parsers[branch][parser] = null
|
52
|
+
try {
|
53
|
+
mod = _parsers[branch][parser] = require(req)
|
54
|
+
} catch (e) {
|
55
|
+
// istanbul ignore next
|
56
|
+
var err = 'Can\'t load the ' + branch + '.' + parser +
|
57
|
+
' riot parser: ' + ('' + e).replace(/^Error:\s/, '')
|
58
|
+
// istanbul ignore next
|
59
|
+
throw new Error(err)
|
57
60
|
}
|
58
|
-
|
59
|
-
var p = _mods[name] = fn(req || _modname(name))
|
60
|
-
|
61
|
-
// istanbul ignore next: babel-core v5.8.x is not loaded by CI
|
62
|
-
if (!p && name === 'es6') {
|
63
|
-
p = _mods[name] = fn('babel-core')
|
64
|
-
}
|
65
|
-
return p
|
61
|
+
return mod
|
66
62
|
}
|
67
63
|
|
68
64
|
/**
|
69
|
-
* Returns
|
70
|
-
*
|
65
|
+
* Returns the branch where the parser resides, or NULL if the parser not found.
|
66
|
+
* If the parameter 'branch' is empty, the precedence order is js, css, html.
|
71
67
|
*
|
72
|
-
* @param {string}
|
73
|
-
* @param {string}
|
74
|
-
* @returns {
|
75
|
-
* @static
|
68
|
+
* @param {string} branch - The name of the branch to search, can be empty
|
69
|
+
* @param {string} name - The parser's name
|
70
|
+
* @returns {string} Name of the parser branch.
|
76
71
|
*/
|
77
|
-
function
|
78
|
-
return
|
72
|
+
function _find (branch, name) {
|
73
|
+
return branch ? _parsers[branch][name] && branch
|
74
|
+
: _parsers.js[name] ? 'js'
|
75
|
+
: _parsers.css[name] ? 'css'
|
76
|
+
: _parsers.html[name] ? 'html' : NULL
|
79
77
|
}
|
80
78
|
|
81
79
|
/**
|
82
|
-
*
|
80
|
+
* Returns a parser instance by its name, requiring the module without generating error.
|
81
|
+
* Parsers name can include the branch (ej. 'js.es6').
|
82
|
+
* If branch is not included, the precedence order for searching is 'js', 'css', 'html'
|
83
83
|
*
|
84
|
-
*
|
85
|
-
*
|
86
|
-
* @
|
84
|
+
* Public through the `parsers._req` function.
|
85
|
+
*
|
86
|
+
* @param {string} name - The parser's name, as registered in the parsers object
|
87
|
+
* @param {boolean} [req] - true if required (throws on error)
|
88
|
+
* @returns {Function} The parser instance, null if the parser is not found.
|
87
89
|
*/
|
88
|
-
function
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
90
|
+
function _req (name, req) {
|
91
|
+
var
|
92
|
+
err,
|
93
|
+
mod,
|
94
|
+
branch,
|
95
|
+
parser = name.split('.')
|
96
|
+
|
97
|
+
if (parser.length > 1) {
|
98
|
+
branch = parser[0]
|
99
|
+
parser = parser[1]
|
100
|
+
} else {
|
101
|
+
branch = NULL
|
102
|
+
parser = name
|
103
|
+
}
|
104
|
+
|
105
|
+
// is the parser registered?
|
106
|
+
branch = _find(branch, parser)
|
107
|
+
if (!branch) {
|
108
|
+
if (req) {
|
109
|
+
err = 'Riot parser "' + name + '" is not registered.'
|
110
|
+
throw new Error(err)
|
111
|
+
}
|
112
|
+
return NULL
|
113
|
+
}
|
114
|
+
|
115
|
+
// parser registered, needs load?
|
116
|
+
if (_loaders[branch][parser]) {
|
117
|
+
if (req) {
|
118
|
+
mod = _load(branch, parser)
|
119
|
+
} else {
|
120
|
+
try {
|
121
|
+
mod = _load(branch, parser)
|
122
|
+
} catch (_) {
|
123
|
+
// istanbul ignore next
|
124
|
+
mod = NULL
|
94
125
|
}
|
95
126
|
}
|
127
|
+
} else {
|
128
|
+
mod = _parsers[branch][parser]
|
96
129
|
}
|
97
|
-
|
130
|
+
|
131
|
+
return mod
|
98
132
|
}
|
99
133
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
134
|
+
/**
|
135
|
+
* Fill the parsers object with loaders for each parser.
|
136
|
+
*
|
137
|
+
* @param {Object} _p - The `parsers` object
|
138
|
+
* @returns {Object} The received object.
|
139
|
+
* @private
|
140
|
+
*/
|
141
|
+
function _setLoaders (_p) {
|
142
|
+
|
143
|
+
// loads the module at first use and returns the parsed result
|
144
|
+
function mkloader (branch, parser) {
|
145
|
+
return function _loadParser (p1, p2, p3, p4) {
|
146
|
+
var fn = _load(branch, parser)
|
147
|
+
return fn(p1, p2, p3, p4)
|
113
148
|
}
|
114
|
-
}
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
sass: function (tag, css, opts, url) {
|
124
|
-
opts = extend({
|
125
|
-
data: css,
|
126
|
-
includePaths: [path.dirname(url)],
|
127
|
-
indentedSyntax: true,
|
128
|
-
omitSourceMapUrl: true,
|
129
|
-
outputStyle: 'compact'
|
130
|
-
}, opts)
|
131
|
-
return _req('sass').renderSync(opts).css + ''
|
132
|
-
},
|
133
|
-
scss: function (tag, css, opts, url) {
|
134
|
-
opts = extend({
|
135
|
-
data: css,
|
136
|
-
includePaths: [path.dirname(url)],
|
137
|
-
indentedSyntax: false,
|
138
|
-
omitSourceMapUrl: true,
|
139
|
-
outputStyle: 'compact'
|
140
|
-
}, opts)
|
141
|
-
return _req('scss').renderSync(opts).css + ''
|
142
|
-
},
|
143
|
-
less: function (tag, css, opts, url) {
|
144
|
-
var ret
|
145
|
-
|
146
|
-
opts = extend({
|
147
|
-
sync: true,
|
148
|
-
syncImport: true,
|
149
|
-
filename: url
|
150
|
-
}, opts)
|
151
|
-
_req('less').render(css, opts, function (err, result) {
|
152
|
-
/* istanbul ignore next */
|
153
|
-
if (err) throw err
|
154
|
-
ret = result.css
|
149
|
+
}
|
150
|
+
|
151
|
+
for (var branch in _loaders) {
|
152
|
+
// istanbul ignore else
|
153
|
+
if (_loaders.hasOwnProperty(branch)) {
|
154
|
+
var names = Object.keys(_loaders[branch])
|
155
|
+
|
156
|
+
names.forEach(function (name) {
|
157
|
+
_p[branch][name] = mkloader(branch, name)
|
155
158
|
})
|
156
|
-
return ret
|
157
|
-
},
|
158
|
-
stylus: function (tag, css, opts, url) {
|
159
|
-
var
|
160
|
-
stylus = _req('stylus'),
|
161
|
-
nib = _req('nib') // optional nib support
|
162
|
-
|
163
|
-
opts = extend({ filename: url }, opts)
|
164
|
-
/* istanbul ignore next: can't run both */
|
165
|
-
return nib
|
166
|
-
? stylus(css, opts).use(nib()).import('nib').render() : stylus.render(css, opts)
|
167
159
|
}
|
168
|
-
}
|
169
|
-
|
170
|
-
* The JavaScript parsers.
|
171
|
-
* @prop {function} es6 - https://babeljs.io - babel or babel-core up to v5.8
|
172
|
-
* @prop {function} babel - https://babeljs.io - for v6.x or later
|
173
|
-
* @prop {function} coffee - http://coffeescript.org
|
174
|
-
* @prop {function} livescript - http://livescript.net
|
175
|
-
* @prop {function} typescript - http://www.typescriptlang.org
|
176
|
-
*/
|
177
|
-
js: {
|
178
|
-
es6: function (js, opts) {
|
179
|
-
opts = extend({
|
180
|
-
blacklist: ['useStrict', 'strict', 'react'],
|
181
|
-
sourceMaps: false,
|
182
|
-
comments: false
|
183
|
-
}, opts)
|
184
|
-
return _req('es6').transform(js, opts).code
|
185
|
-
},
|
186
|
-
babel: function (js, opts, url) {
|
187
|
-
return _req('babel').transform(js, extend({ filename: url }, opts)).code
|
188
|
-
},
|
189
|
-
coffee: function (js, opts) {
|
190
|
-
return _req('coffee').compile(js, extend({ bare: true }, opts))
|
191
|
-
},
|
192
|
-
livescript: function (js, opts) {
|
193
|
-
return _req('livescript').compile(js, extend({ bare: true, header: false }, opts))
|
194
|
-
},
|
195
|
-
typescript: function (js, opts) {
|
196
|
-
return _req('typescript')(js, opts)
|
197
|
-
},
|
198
|
-
none: _none, javascript: _none
|
199
|
-
},
|
200
|
-
_modname: _modname,
|
201
|
-
_req: _req
|
160
|
+
}
|
161
|
+
return _p
|
202
162
|
}
|
203
163
|
|
204
|
-
|
205
|
-
exports.js.coffeescript = exports.js.coffee // 4 the nostalgics
|
164
|
+
_setLoaders(_parsers)._req = _req
|
206
165
|
|
166
|
+
module.exports = _parsers
|
@@ -0,0 +1,47 @@
|
|
1
|
+
/*
|
2
|
+
Utility functions
|
3
|
+
*/
|
4
|
+
var hasOwnProp = Object.prototype.hasOwnProperty
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Returns an new object with all of the properties from each received object.
|
8
|
+
* When there are identical properties, the right-most property takes precedence.
|
9
|
+
*
|
10
|
+
* @returns {object} A new object containing all the properties.
|
11
|
+
*/
|
12
|
+
function _mixobj () {
|
13
|
+
var target = {}
|
14
|
+
|
15
|
+
for (var i = 0; i < arguments.length; i++) {
|
16
|
+
var source = arguments[i]
|
17
|
+
|
18
|
+
if (source) {
|
19
|
+
for (var key in source) {
|
20
|
+
// istanbul ignore else
|
21
|
+
if (hasOwnProp.call(source, key)) {
|
22
|
+
target[key] = source[key]
|
23
|
+
}
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
return target
|
28
|
+
}
|
29
|
+
|
30
|
+
/**
|
31
|
+
* Loads and returns a module instance without generating error.
|
32
|
+
*
|
33
|
+
* @param {string} name - The name of the module to require
|
34
|
+
* @returns {Function} Module instance, or null if error.
|
35
|
+
*/
|
36
|
+
function _tryreq (name) {
|
37
|
+
var mod = null
|
38
|
+
|
39
|
+
try { mod = require(name) } catch (e) {/**/}
|
40
|
+
|
41
|
+
return mod
|
42
|
+
}
|
43
|
+
|
44
|
+
module.exports = {
|
45
|
+
mixobj: _mixobj,
|
46
|
+
tryreq: _tryreq
|
47
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/*
|
2
|
+
bublé 0.13.x JS plugin.
|
3
|
+
Part of the riot-compiler, license MIT
|
4
|
+
|
5
|
+
History
|
6
|
+
-------
|
7
|
+
2016-08-26: Initital release
|
8
|
+
*/
|
9
|
+
var
|
10
|
+
mixobj = require('./_utils').mixobj,
|
11
|
+
parser = require('buble')
|
12
|
+
|
13
|
+
module.exports = function _buble (js, opts, url) {
|
14
|
+
|
15
|
+
opts = mixobj({ source: url, modules: false }, opts)
|
16
|
+
|
17
|
+
return parser.transform(js, opts).code
|
18
|
+
}
|
@@ -0,0 +1,19 @@
|
|
1
|
+
/*
|
2
|
+
CoffeeScript JS plugin.
|
3
|
+
Part of the riot-compiler, license MIT
|
4
|
+
|
5
|
+
History
|
6
|
+
-------
|
7
|
+
2016-03-09: Initital release
|
8
|
+
*/
|
9
|
+
var
|
10
|
+
mixobj = require('./_utils').mixobj,
|
11
|
+
parser = require('coffee-script')
|
12
|
+
|
13
|
+
var defopts = {
|
14
|
+
bare: true
|
15
|
+
}
|
16
|
+
|
17
|
+
module.exports = function _coffee (js, opts) {
|
18
|
+
return parser.compile(js, mixobj(defopts, opts))
|
19
|
+
}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
/*
|
2
|
+
babel-core 6.x JS plugin.
|
3
|
+
Part of the riot-compiler, license MIT
|
4
|
+
|
5
|
+
History
|
6
|
+
-------
|
7
|
+
2016-03-09: Initital release
|
8
|
+
*/
|
9
|
+
var
|
10
|
+
mixobj = require('./_utils').mixobj,
|
11
|
+
parser = require('babel-core')
|
12
|
+
|
13
|
+
module.exports = function _babel (js, opts, url) {
|
14
|
+
|
15
|
+
opts = mixobj({ filename: url }, opts)
|
16
|
+
|
17
|
+
return parser.transform(js, opts).code
|
18
|
+
}
|
@@ -0,0 +1,27 @@
|
|
1
|
+
/*
|
2
|
+
Jade HTML plugin.
|
3
|
+
Part of the riot-compiler, license MIT
|
4
|
+
|
5
|
+
History
|
6
|
+
-------
|
7
|
+
2016-03-09: Initital release
|
8
|
+
*/
|
9
|
+
var
|
10
|
+
mixobj = require('./_utils').mixobj,
|
11
|
+
parser = require('jade')
|
12
|
+
|
13
|
+
var defopts = {
|
14
|
+
pretty: true,
|
15
|
+
doctype: 'html'
|
16
|
+
}
|
17
|
+
|
18
|
+
/* eslint-disable */
|
19
|
+
console.log('DEPRECATION WARNING: jade was renamed "pug" - the jade parser will be removed in riot@3.0.0!')
|
20
|
+
/* eslint-enable */
|
21
|
+
|
22
|
+
module.exports = function _jade (html, opts, url) {
|
23
|
+
|
24
|
+
opts = mixobj(defopts, { filename: url }, opts)
|
25
|
+
|
26
|
+
return parser.render(html, opts)
|
27
|
+
}
|