Normalize line endings.

This commit is contained in:
XhmikosR 2016-04-14 14:18:39 +03:00
parent 285f3ec285
commit 719a961fb5
6 changed files with 344 additions and 345 deletions

3
.gitattributes vendored
View File

@ -1,2 +1 @@
# Automatically normalize line endings for all text-based files
* text=crlf
* text=auto

View File

@ -1,5 +1,5 @@
Tim Branyen (http://tbranyen.com)
Tyler Kellen (http://goingslowly.com/)
Chris Talkington (http://christalkington.com/)
Larry Davis (http://lazd.net/)
Tim Branyen (http://tbranyen.com)
Tyler Kellen (http://goingslowly.com/)
Chris Talkington (http://christalkington.com/)
Larry Davis (http://lazd.net/)
Adrien Antoine (http://adriantoine.com/)

View File

@ -1,163 +1,163 @@
/*
* grunt-contrib-jst
* http://gruntjs.com/
*
* Copyright (c) 2016 Tim Branyen, contributors
* Licensed under the MIT license.
*/
'use strict';
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
jshint: {
all: [
'Gruntfile.js',
'tasks/*.js',
'<%= nodeunit.tests %>'
],
options: {
jshintrc: '.jshintrc'
}
},
// Before generating any new files, remove any previously-created files.
clean: {
test: ['tmp']
},
// Configuration to be run (and then tested).
jst: {
compile: {
options: {
templateSettings: {
variable: 'obj'
}
},
files: {
'tmp/jst.js': ['test/fixtures/template.html']
}
},
pretty_amd: {
options: {
templateSettings: {
variable: 'obj'
},
prettify: true,
amd: true
},
files: {
'tmp/pretty_amd.js': ['test/fixtures/template.html']
}
},
prettify: {
options: {
templateSettings: {
variable: 'obj'
},
prettify: true
},
files: {
'tmp/pretty.js': ['test/fixtures/template.html']
}
},
amd_wrapper: {
options: {
templateSettings: {
variable: 'obj'
},
amd:true
},
files: {
'tmp/amd_wrapper.js': ['test/fixtures/template.html']
}
},
amd_wrapper_no_ns: {
options: {
templateSettings: {
variable: 'obj'
},
amd: true,
namespace: false
},
files: {
'tmp/amd_wrapper_no_ns.js': ['test/fixtures/template.html']
}
},
uglyfile: {
options: {
templateSettings: {
variable: 'obj'
}
},
files: {
'tmp/uglyfile.js': ['test/fixtures/*bad-filename*']
}
},
ns_nested: {
options: {
templateSettings: {
variable: 'obj'
},
namespace: 'MyApp.JST.Main'
},
files: {
'tmp/ns_nested.js': ['test/fixtures/template.html']
}
},
ns_nested_this: {
options: {
templateSettings: {
variable: 'obj'
},
namespace: 'this.MyApp.JST.Main'
},
files: {
'tmp/ns_nested_this.js': ['test/fixtures/template.html']
}
},
process_content: {
options: {
templateSettings: {
variable: 'obj'
},
processContent: function (src) {
return src.replace(/(^\s+|\s+$)/gm, '');
}
},
files: {
'tmp/process_content.js': ['test/fixtures/indent_template.html']
}
},
local_scope: {
files: {
'tmp/local_scope.js': ['test/fixtures/template_local_scope.html']
}
}
},
// Unit tests.
nodeunit: {
tests: ['test/*_test.js']
}
});
// Actually load this plugin's task(s).
grunt.loadTasks('tasks');
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.loadNpmTasks('grunt-contrib-internal');
grunt.loadNpmTasks('grunt-contrib-clean');
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
// plugin's task(s), then test the result.
grunt.registerTask('test', ['clean', 'jst', 'nodeunit']);
// By default, lint and run all tests.
grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
};
/*
* grunt-contrib-jst
* http://gruntjs.com/
*
* Copyright (c) 2016 Tim Branyen, contributors
* Licensed under the MIT license.
*/
'use strict';
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
jshint: {
all: [
'Gruntfile.js',
'tasks/*.js',
'<%= nodeunit.tests %>'
],
options: {
jshintrc: '.jshintrc'
}
},
// Before generating any new files, remove any previously-created files.
clean: {
test: ['tmp']
},
// Configuration to be run (and then tested).
jst: {
compile: {
options: {
templateSettings: {
variable: 'obj'
}
},
files: {
'tmp/jst.js': ['test/fixtures/template.html']
}
},
pretty_amd: {
options: {
templateSettings: {
variable: 'obj'
},
prettify: true,
amd: true
},
files: {
'tmp/pretty_amd.js': ['test/fixtures/template.html']
}
},
prettify: {
options: {
templateSettings: {
variable: 'obj'
},
prettify: true
},
files: {
'tmp/pretty.js': ['test/fixtures/template.html']
}
},
amd_wrapper: {
options: {
templateSettings: {
variable: 'obj'
},
amd:true
},
files: {
'tmp/amd_wrapper.js': ['test/fixtures/template.html']
}
},
amd_wrapper_no_ns: {
options: {
templateSettings: {
variable: 'obj'
},
amd: true,
namespace: false
},
files: {
'tmp/amd_wrapper_no_ns.js': ['test/fixtures/template.html']
}
},
uglyfile: {
options: {
templateSettings: {
variable: 'obj'
}
},
files: {
'tmp/uglyfile.js': ['test/fixtures/*bad-filename*']
}
},
ns_nested: {
options: {
templateSettings: {
variable: 'obj'
},
namespace: 'MyApp.JST.Main'
},
files: {
'tmp/ns_nested.js': ['test/fixtures/template.html']
}
},
ns_nested_this: {
options: {
templateSettings: {
variable: 'obj'
},
namespace: 'this.MyApp.JST.Main'
},
files: {
'tmp/ns_nested_this.js': ['test/fixtures/template.html']
}
},
process_content: {
options: {
templateSettings: {
variable: 'obj'
},
processContent: function (src) {
return src.replace(/(^\s+|\s+$)/gm, '');
}
},
files: {
'tmp/process_content.js': ['test/fixtures/indent_template.html']
}
},
local_scope: {
files: {
'tmp/local_scope.js': ['test/fixtures/template_local_scope.html']
}
}
},
// Unit tests.
nodeunit: {
tests: ['test/*_test.js']
}
});
// Actually load this plugin's task(s).
grunt.loadTasks('tasks');
// These plugins provide necessary tasks.
grunt.loadNpmTasks('grunt-contrib-jshint');
grunt.loadNpmTasks('grunt-contrib-nodeunit');
grunt.loadNpmTasks('grunt-contrib-internal');
grunt.loadNpmTasks('grunt-contrib-clean');
// Whenever the "test" task is run, first clean the "tmp" dir, then run this
// plugin's task(s), then test the result.
grunt.registerTask('test', ['clean', 'jst', 'nodeunit']);
// By default, lint and run all tests.
grunt.registerTask('default', ['jshint', 'test', 'build-contrib']);
};

View File

@ -1,22 +1,22 @@
Copyright (c) 2016 Tim Branyen, contributors
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
Permission is hereby granted, free of charge, to any person
obtaining a copy of this software and associated documentation
files (the "Software"), to deal in the Software without
restriction, including without limitation the rights to use,
copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the
Software is furnished to do so, subject to the following
conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
OTHER DEALINGS IN THE SOFTWARE.

View File

@ -1,94 +1,94 @@
/*
* grunt-contrib-jst
* http://gruntjs.com/
*
* Copyright (c) 2016 Tim Branyen, contributors
* Licensed under the MIT license.
*/
'use strict';
var _ = require('lodash');
var chalk = require('chalk');
module.exports = function(grunt) {
// filename conversion for templates
var defaultProcessName = function(name) { return name; };
grunt.registerMultiTask('jst', 'Compile underscore templates to JST file', function() {
var lf = grunt.util.linefeed;
var lib = require('./lib/jst');
var options = this.options({
namespace: 'JST',
templateSettings: {},
processContent: function (src) { return src; },
separator: lf + lf
});
// assign filename transformation functions
var processName = options.processName || defaultProcessName;
var nsInfo;
if (options.namespace !== false) {
nsInfo = lib.getNamespaceDeclaration(options.namespace);
}
this.files.forEach(function(f) {
var output = f.src.filter(function(filepath) {
// Warn on and remove invalid source files (if nonull was set).
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file ' + chalk.cyan(filepath) + ' not found.');
return false;
} else {
return true;
}
})
.map(function(filepath) {
var src = options.processContent(grunt.file.read(filepath));
var compiled, filename;
try {
compiled = _.template(src, false, options.templateSettings).source;
} catch (e) {
grunt.log.error(e);
grunt.fail.warn('JST ' + chalk.cyan(filepath) + ' failed to compile.');
}
if (options.prettify) {
compiled = compiled.replace(/\n/g, '');
}
filename = processName(filepath);
if (options.amd && options.namespace === false) {
return 'return ' + compiled;
}
return nsInfo.namespace+'['+JSON.stringify(filename)+'] = '+compiled+';';
});
if (output.length < 1) {
grunt.log.warn('Destination not written because compiled files were empty.');
} else {
if (options.namespace !== false) {
output.unshift(nsInfo.declaration);
}
if (options.amd) {
if (options.prettify) {
output.forEach(function(line, index) {
output[index] = ' ' + line;
});
}
output.unshift('define(function(){');
if (options.namespace !== false) {
// Namespace has not been explicitly set to false; the AMD
// wrapper will return the object containing the template.
output.push(' return ' + nsInfo.namespace + ';');
}
output.push('});');
}
grunt.file.write(f.dest, output.join(grunt.util.normalizelf(options.separator)));
grunt.log.writeln('File ' + chalk.cyan(f.dest) + ' created.');
}
});
});
};
/*
* grunt-contrib-jst
* http://gruntjs.com/
*
* Copyright (c) 2016 Tim Branyen, contributors
* Licensed under the MIT license.
*/
'use strict';
var _ = require('lodash');
var chalk = require('chalk');
module.exports = function(grunt) {
// filename conversion for templates
var defaultProcessName = function(name) { return name; };
grunt.registerMultiTask('jst', 'Compile underscore templates to JST file', function() {
var lf = grunt.util.linefeed;
var lib = require('./lib/jst');
var options = this.options({
namespace: 'JST',
templateSettings: {},
processContent: function (src) { return src; },
separator: lf + lf
});
// assign filename transformation functions
var processName = options.processName || defaultProcessName;
var nsInfo;
if (options.namespace !== false) {
nsInfo = lib.getNamespaceDeclaration(options.namespace);
}
this.files.forEach(function(f) {
var output = f.src.filter(function(filepath) {
// Warn on and remove invalid source files (if nonull was set).
if (!grunt.file.exists(filepath)) {
grunt.log.warn('Source file ' + chalk.cyan(filepath) + ' not found.');
return false;
} else {
return true;
}
})
.map(function(filepath) {
var src = options.processContent(grunt.file.read(filepath));
var compiled, filename;
try {
compiled = _.template(src, false, options.templateSettings).source;
} catch (e) {
grunt.log.error(e);
grunt.fail.warn('JST ' + chalk.cyan(filepath) + ' failed to compile.');
}
if (options.prettify) {
compiled = compiled.replace(/\n/g, '');
}
filename = processName(filepath);
if (options.amd && options.namespace === false) {
return 'return ' + compiled;
}
return nsInfo.namespace+'['+JSON.stringify(filename)+'] = '+compiled+';';
});
if (output.length < 1) {
grunt.log.warn('Destination not written because compiled files were empty.');
} else {
if (options.namespace !== false) {
output.unshift(nsInfo.declaration);
}
if (options.amd) {
if (options.prettify) {
output.forEach(function(line, index) {
output[index] = ' ' + line;
});
}
output.unshift('define(function(){');
if (options.namespace !== false) {
// Namespace has not been explicitly set to false; the AMD
// wrapper will return the object containing the template.
output.push(' return ' + nsInfo.namespace + ';');
}
output.push('});');
}
grunt.file.write(f.dest, output.join(grunt.util.normalizelf(options.separator)));
grunt.log.writeln('File ' + chalk.cyan(f.dest) + ' created.');
}
});
});
};

View File

@ -1,62 +1,62 @@
'use strict';
var grunt = require('grunt');
function readFile(file) {
var contents = grunt.file.read(file);
if (process.platform === 'win32') {
contents = contents.replace(/\r\n/g, '\n');
}
return contents;
}
exports.jst = {
main: function(test) {
var expect, result;
test.expect(10);
expect = readFile('test/expected/jst.js');
result = readFile('tmp/jst.js');
test.equal(expect, result, 'should compile underscore templates into JST');
expect = readFile('test/expected/uglyfile.js');
result = readFile('tmp/uglyfile.js');
test.equal(expect, result, 'should escape single quotes in filenames');
expect = readFile('test/expected/ns_nested.js');
result = readFile('tmp/ns_nested.js');
test.equal(expect, result, 'should define parts of nested namespaces');
expect = readFile('test/expected/ns_nested.js'); // same as previous test
result = readFile('tmp/ns_nested_this.js');
test.equal(expect, result, 'should define parts of nested namespaces, ignoring this.');
expect = readFile('test/expected/pretty.js');
result = readFile('tmp/pretty.js');
test.equal(expect, result, 'should make the output be 1 line per template, making the output less ugly');
expect = readFile('test/expected/amd_wrapper.js');
result = readFile('tmp/amd_wrapper.js');
test.equal(expect, result, 'should wrap the template with define for AMD pattern');
expect = readFile('test/expected/amd_wrapper_no_ns.js');
result = readFile('tmp/amd_wrapper_no_ns.js');
test.equal(expect, result, 'should wrap the template with define for AMD pattern and return the function itself with no namespace');
expect = readFile('test/expected/pretty_amd.js');
result = readFile('tmp/pretty_amd.js');
test.equal(expect, result, 'should make the AMD wrapper output pretty');
expect = readFile('test/expected/process_content.js');
result = readFile('tmp/process_content.js');
test.equal(expect, result, 'should convert file content');
expect = readFile('test/expected/local_scope.js');
result = readFile('tmp/local_scope.js');
test.equal(expect, result, 'should add `with` block when templateSettings.variable is undefined');
test.done();
}
};
'use strict';
var grunt = require('grunt');
function readFile(file) {
var contents = grunt.file.read(file);
if (process.platform === 'win32') {
contents = contents.replace(/\r\n/g, '\n');
}
return contents;
}
exports.jst = {
main: function(test) {
var expect, result;
test.expect(10);
expect = readFile('test/expected/jst.js');
result = readFile('tmp/jst.js');
test.equal(expect, result, 'should compile underscore templates into JST');
expect = readFile('test/expected/uglyfile.js');
result = readFile('tmp/uglyfile.js');
test.equal(expect, result, 'should escape single quotes in filenames');
expect = readFile('test/expected/ns_nested.js');
result = readFile('tmp/ns_nested.js');
test.equal(expect, result, 'should define parts of nested namespaces');
expect = readFile('test/expected/ns_nested.js'); // same as previous test
result = readFile('tmp/ns_nested_this.js');
test.equal(expect, result, 'should define parts of nested namespaces, ignoring this.');
expect = readFile('test/expected/pretty.js');
result = readFile('tmp/pretty.js');
test.equal(expect, result, 'should make the output be 1 line per template, making the output less ugly');
expect = readFile('test/expected/amd_wrapper.js');
result = readFile('tmp/amd_wrapper.js');
test.equal(expect, result, 'should wrap the template with define for AMD pattern');
expect = readFile('test/expected/amd_wrapper_no_ns.js');
result = readFile('tmp/amd_wrapper_no_ns.js');
test.equal(expect, result, 'should wrap the template with define for AMD pattern and return the function itself with no namespace');
expect = readFile('test/expected/pretty_amd.js');
result = readFile('tmp/pretty_amd.js');
test.equal(expect, result, 'should make the AMD wrapper output pretty');
expect = readFile('test/expected/process_content.js');
result = readFile('tmp/process_content.js');
test.equal(expect, result, 'should convert file content');
expect = readFile('test/expected/local_scope.js');
result = readFile('tmp/local_scope.js');
test.equal(expect, result, 'should add `with` block when templateSettings.variable is undefined');
test.done();
}
};