derby-jade
Advanced tools
Comparing version 0.6.12 to 0.6.13
75
index.js
var jade = require('jade'); | ||
var coffee = require('./coffee'); | ||
var crypto = require('crypto'); | ||
var path = require('path'); | ||
var fs = require('fs'); | ||
var os = require('os'); | ||
//process.env.DEBUG = 'derby-jade'; | ||
@@ -39,3 +43,3 @@ var debug = require('debug')('derby-jade'); | ||
} | ||
return indentation + '__derby-statement(type=\"' + type + '\"' + | ||
return indentation + '__derby-statement(type=\"' + type + '\"' + | ||
(expression ? ' value=\"' + escape(expression) + '\"' : '') + ')'; | ||
@@ -78,3 +82,3 @@ }) | ||
function compiler(file, fileName) { | ||
function compiler(file, fileName, preprocessOnly) { | ||
var out = []; | ||
@@ -102,5 +106,2 @@ var lines = file.replace(/\r\n/g, newLine).split(newLine); | ||
.replace(/\n/g, newLine) | ||
// Remove underscores | ||
.replace(/<_derby_/g, '<') | ||
.replace(/<\/_derby_/g, '<\/') | ||
// Add colons | ||
@@ -110,5 +111,17 @@ //.replace(/^\s*(<([\w-:]+))((?:\b[^>]+)?>)\n?([\s\S]*?)\n?<\/\2>$/, function (template, left, name, right, content) { | ||
//}) | ||
.replace(r('^\\s*(<([\\w-:]+))((?:\\b[^>]+)?>)(?:' + regNewLine + ')?([\\s\\S]*?)(?:' + regNewLine + ')?<\\/\\2>$'), function (template, left, name, right, content) { | ||
return left + ':' + right + (content ? newLine + content : ''); | ||
.replace(r('\\s*(<([\\w-:]+))((?:\\b[^>]+)?>)(?:' + regNewLine + ')?([\\s\\S]*?)(?:' + regNewLine + ')?<\\/\\2>', 'g'), function (template, left, name, right, content, offset, string) { | ||
// console.log('-----------> HAS'); | ||
// console.log(template); | ||
// console.log('-------> LEFT'); | ||
// console.log(left); | ||
// console.log('-------> RIGHT'); | ||
// console.log(right); | ||
// console.log('-------> CONTENT'); | ||
// console.log(content); | ||
return left + ':' + right + (content ? newLine + content : '') | ||
+ ((offset + template.length === string.length) ? '' : newLine); | ||
}) | ||
// Remove underscores | ||
.replace(/<_derby_/g, '<') | ||
.replace(/<\/_derby_/g, '<\/') | ||
// Add scripts | ||
@@ -124,2 +137,11 @@ .replace(/<script(\d*)><\/script\1>/g, function(statement, index) { | ||
function renderPreprocessBlock() { | ||
if (block.length) { | ||
debugString += ', block end'; | ||
var source = preprocess(block.join(newLine)); | ||
block = []; | ||
out.push(source); | ||
} | ||
} | ||
function closeScript() { | ||
@@ -143,2 +165,3 @@ if (script.length) { | ||
var line = lines[i]; | ||
var extendMatch, extendFileName, extendFile, extendTempFileName; | ||
@@ -198,2 +221,28 @@ var res = /^(\s*)(.*?)$/g.exec(line); | ||
// Jade's "extends" and "include" | ||
// We have to compile the source file into a temporary one | ||
if ((indent === 0) && ( | ||
extendMatch = statement.match(/^(extends|include) (\S+)/))) { | ||
extendFileName = path.resolve(path.dirname(fileName), extendMatch[2]); | ||
extendFileName = extendFileName.replace(/\.jade\s*$/, '') + '.jade'; | ||
extendFile = fs.readFileSync(extendFileName, { encoding: 'utf8' }); | ||
extendFile = compiler(extendFile, extendFileName, true); | ||
extendTempFileName = path.join( os.tmpdir(), | ||
crypto.createHash('md5').update(extendFileName).digest('hex')+ '.jade'); | ||
fs.writeFileSync(extendTempFileName, extendFile); | ||
block.push( extendMatch[1] + ' ' | ||
+ path.relative(fileName, extendTempFileName) ); | ||
debug(debugString + ', jade extends'); | ||
continue; | ||
} | ||
// Other Jade reserved keywords | ||
// Simply pass any preprocessing of them | ||
if (indent === 0 && | ||
/^(\+|mixin|block|prepend|append)/.test(statement)) { | ||
block.push(line); | ||
debug(debugString + ', jade reserved'); | ||
continue; | ||
} | ||
if (indent === 0) { | ||
@@ -203,3 +252,7 @@ // Derby tag | ||
// so we should render last one first | ||
renderBlock(); | ||
if (preprocessOnly) { | ||
renderPreprocessBlock(); | ||
} else { | ||
renderBlock(); | ||
} | ||
// Remove colons after Derby tags | ||
@@ -224,5 +277,9 @@ // it makes colons optional | ||
closeScript(); | ||
renderBlock(); | ||
if (preprocessOnly) { | ||
renderPreprocessBlock(); | ||
} else { | ||
renderBlock(); | ||
} | ||
return out.join(newLine); | ||
} |
{ | ||
"name": "derby-jade", | ||
"description": "Jade for Derby.js", | ||
"version": "0.6.12", | ||
"version": "0.6.13", | ||
"author": { | ||
@@ -6,0 +6,0 @@ "name": "Vladimir Makhaev", |
@@ -9,18 +9,63 @@ var assert = require("assert"); | ||
describe("test", function() { | ||
it("jade + js", function() { | ||
describe("Jade compiler", function() { | ||
it("should compile Derby.js stuff", function() { | ||
dJade(app); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname + "/views/js.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname + "/views/result.html", "utf8"); | ||
assert.equal(compiler(jade), html); | ||
var jade = fs.readFileSync(__dirname + "/basic/js.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname + "/basic/result.html", "utf8"); | ||
assert.equal(compiler(jade, __dirname + "/basic/js.jade"), html); | ||
}); | ||
it("jade + coffee", function() { | ||
it("should compile coffee in <script> when 'coffee' option is on", function() { | ||
dJade(app, {coffee: true}); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname + "/views/coffee.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname + "/views/result.html", "utf8"); | ||
assert.equal(compiler(jade), html); | ||
var jade = fs.readFileSync(__dirname + "/basic/coffee.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname + "/basic/result.html", "utf8"); | ||
assert.equal(compiler(jade, __dirname + "/basic/coffee.jade"), html); | ||
}); | ||
it("should do basic extend of a file", function() { | ||
dJade(app); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/basicExtends/index.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/basicExtends/result.html", "utf8"); | ||
assert.equal(compiler(jade, | ||
__dirname + "/jadeFeatures/basicExtends/index.jade"), html); | ||
}); | ||
it("should support 'block' when extends", function() { | ||
dJade(app); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/block/index.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/block/result.html", "utf8"); | ||
assert.equal(compiler(jade, | ||
__dirname + "/jadeFeatures/block/index.jade"), html); | ||
}); | ||
it("should pass tricky case", function() { | ||
dJade(app); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/advanced/index.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/advanced/result.html", "utf8"); | ||
assert.equal(compiler(jade, | ||
__dirname + "/jadeFeatures/advanced/index.jade"), html); | ||
}); | ||
it.skip("should extend file with <script> in it", function() { | ||
dJade(app); | ||
var compiler = app.compilers[".jade"]; | ||
var jade = fs.readFileSync(__dirname | ||
+ "/jadeFeatures/scriptExtends/index.jade", "utf8"); | ||
var html = fs.readFileSync(__dirname | ||
+ "/basic/result.html", "utf8"); | ||
assert.equal(compiler(jade, | ||
__dirname + "/jadeFeatures/scriptExtends/index.jade"), html); | ||
}); | ||
}); |
Sorry, the diff of this file is not supported yet
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Filesystem access
Supply chain riskAccesses the file system, and could potentially read sensitive data.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
25489
19
358
2