Commit b577f579 by Dean Mao

major refactor

parent abfa1271
......@@ -52,7 +52,7 @@ The API for using node-sass has changed, so that now there is only one variable
[Important: currently the argument `outputStyle` has some problem which may cause the output css becomes nothing because of the libsass, so you should not use it now!]
#### sourceComments
`sourceComments` is a `String` to determine what debug information is included in the output file. Its value should be one of `'none', 'normal'`. The default is `'none'`.
`sourceComments` is a `String` to determine what debug information is included in the output file. Its value should be one of `'none', 'normal', 'map'`. The default is `'none'`.
[Important: `souceComments` is only supported when using the `file` option, and does nothing when using `data` flag.]
### Examples
......@@ -92,18 +92,13 @@ var server = connect.createServer(
, dest: __dirname + '/public'
, debug: true
, outputStyle: 'compressed'
, prefix: '/prefix'
}),
connect.static('/prefix', __dirname + '/public')
connect.static(__dirname + '/public')
);
```
Heavily inspired by <https://github.com/LearnBoost/stylus>
## DocPad Plugin
[@jking90](https://github.com/jking90) wrote a [DocPad](http://docpad.org/) plugin that compiles `.scss` files using node-sass: <https://github.com/jking90/docpad-plugin-nodesass>
## Grunt extension
[@sindresorhus](https://github.com/sindresorhus/) has created a set of grunt tasks based on node-sass: <https://github.com/sindresorhus/grunt-sass>
......@@ -120,10 +115,10 @@ Check out the project:
git clone https://github.com/andrew/node-sass.git
cd node-sass
git submodule init
git submodule update
npm install
npm install -g node-gyp
git submodule init
git submodule update
node-gyp rebuild
Replace the prebuild binary with your newly generated one
......@@ -146,14 +141,6 @@ Output will be saved with the same name as input SASS file into the current work
--include-path Path to look for @import-ed files [default: cwd]
--help, -h Print usage info
## Post-install Build
Install runs a series of Mocha tests to see if your machine can use the pre-built `libsass` which will save some time during install. If any tests fail it will build from source.
If you know the pre-built version will work and do not want to wait for the tests to run you can skip the tests by setting the environment variable `SKIP_NODE_SASS_TESTS` to true.
SKIP_NODE_SASS_TESTS=true npm install
## Contributors
Special thanks to the following people for submitting patches:
......@@ -161,7 +148,6 @@ Dean Mao
Brett Wilkins
litek
gonghao
Dylan Greene
### Note on Patches/Pull Requests
......
......@@ -6,7 +6,6 @@
'binding.cpp',
'sass_context_wrapper.cpp',
'libsass/ast.cpp',
'libsass/base64vlq.cpp',
'libsass/bind.cpp',
'libsass/constants.cpp',
'libsass/context.cpp',
......@@ -25,17 +24,13 @@
'libsass/prelexer.cpp',
'libsass/sass.cpp',
'libsass/sass_interface.cpp',
'libsass/source_map.cpp',
'libsass/to_c.cpp',
'libsass/to_string.cpp',
'libsass/source_map.cpp',
'libsass/units.cpp'
],
'include_dirs': [
'<!(node -e "require(\'nan\')")'
],
'cflags!' : [ '-fno-exceptions' ],
'cflags_cc!': [ '-fno-exceptions' ],
'cflags_cc' : [ '-fexceptions', '-frtti' ],
'conditions': [
['OS=="mac"', {
'xcode_settings': {
......@@ -43,6 +38,12 @@
'GCC_ENABLE_CPP_RTTI': 'YES',
'MACOSX_DEPLOYMENT_TARGET': '10.7'
}
}],
['OS=="linux"', {
'cflags_cc': [
'-fexceptions',
'-frtti'
]
}]
]
}
......
......@@ -2,7 +2,7 @@
"author": "Andrew Nesbitt <andrewnez@gmail.com> (http://andrew.github.com)",
"name": "node-sass",
"description": "wrapper around libsass",
"version": "0.7.0",
"version": "0.5.4",
"homepage": "https://github.com/andrew/node-sass",
"keywords": [
"sass",
......@@ -24,9 +24,8 @@
"url": "git://github.com/andrew/node-sass.git"
},
"scripts": {
"install": "node build.js",
"test": "mocha test",
"prepublish": "bash scripts/prepublish.sh"
"install": "node rebuild.js",
"test": "mocha test"
},
"bin": {
"node-sass": "bin/node-sass"
......@@ -37,10 +36,10 @@
},
"dependencies": {
"mkdirp": "0.3.x",
"optimist": "0.6.x",
"node-watch": "0.3.x",
"mocha": "1.13.x",
"chalk": "~0.3.0",
"nan": "~0.6.0"
"colors": "0.6.0-1",
"optimist": "0.4.x"
},
"devDependencies": {
"mocha": "1.7.x"
}
}
var binding;
var fs = require('fs');
var path = require('path');
var v8 = 'v8-' + /[0-9]+\.[0-9]+/.exec(process.versions.v8)[0];
var modPath = path.join(__dirname, 'bin', process.platform + '-' + process.arch + '-' + v8, 'binding');
try {
if (fs.realpathSync(__dirname + '/build')) {
// use the build version if it exists
binding = require(__dirname + '/build/Release/binding');
}
} catch (e) {
try {
fs.realpathSync(modPath + '.node');
binding = require(modPath);
} catch (ex) {
// No binary!
throw new Error('`'+ modPath + '.node` is missing. Try reinstalling `node-sass`?');
}
// default to a precompiled binary if no build exists
var platform_full = process.platform+'-'+process.arch;
binding = require(__dirname + '/precompiled/'+platform_full+'/binding');
}
if (binding === null) {
throw new Error('Cannot find appropriate binary library for node-sass');
}
var SASS_OUTPUT_STYLE = {
......@@ -34,11 +29,11 @@ var SASS_SOURCE_COMMENTS = {
};
var prepareOptions = function(options) {
var paths, style;
var options = typeof options !== 'object' ? {} : options;
var paths = options.include_paths || options.includePaths || [];
var style = SASS_OUTPUT_STYLE[options.output_style || options.outputStyle] || 0;
var comments = SASS_SOURCE_COMMENTS[options.source_comments || options.sourceComments] || 0;
var paths, style, comments;
options = typeof options !== 'object' ? {} : options;
paths = options.include_paths || options.includePaths || [];
style = SASS_OUTPUT_STYLE[options.output_style || options.outputStyle] || 0;
comments = SASS_SOURCE_COMMENTS[options.source_comments || options.sourceComments] || 0;
return {
paths: paths,
......@@ -49,7 +44,13 @@ var prepareOptions = function(options) {
var deprecatedRender = function(css, callback, options) {
options = prepareOptions(options);
return binding.oldRender(css, callback, options.paths.join(':'), options.style, options.comments);
var errCallback = function(err) {
callback(err);
};
var oldCallback = function(css, err) {
callback(null, css);
};
return binding.render(css, oldCallback, errCallback, options.paths.join(':'), options.style, options.comments);
};
var deprecatedRenderSync = function(css, options) {
......@@ -68,11 +69,11 @@ exports.render = function(options) {
options.error = options.error || function(){};
if (options.file !== undefined && options.file !== null) {
return binding.renderFile(options.file, options.success, options.error, newOptions.paths.join(path.delimiter), newOptions.style, newOptions.comments);
return binding.renderFile(options.file, options.success, options.error, newOptions.paths.join(':'), newOptions.style, newOptions.comments);
}
//Assume data is present if file is not. binding/libsass will tell the user otherwise!
return binding.render(options.data, options.success, options.error, newOptions.paths.join(path.delimiter), newOptions.style);
return binding.render(options.data, options.success, options.error, newOptions.paths.join(":"), newOptions.style);
};
exports.renderSync = function(options) {
......@@ -85,11 +86,11 @@ exports.renderSync = function(options) {
newOptions = prepareOptions(options);
if (options.file !== undefined && options.file !== null) {
return binding.renderFileSync(options.file, newOptions.paths.join(path.delimiter), newOptions.style, newOptions.comments);
return binding.renderFileSync(options.file, newOptions.paths.join(':'), newOptions.style, newOptions.comments);
}
//Assume data is present if file is not. binding/libsass will tell the user otherwise!
return binding.renderSync(options.data, newOptions.paths.join(path.delimiter), newOptions.style);
return binding.renderSync(options.data, newOptions.paths.join(":"), newOptions.style);
};
exports.middleware = require('./lib/middleware');
......@@ -12,24 +12,7 @@ extern "C" {
void sass_free_context_wrapper(sass_context_wrapper* ctx_w)
{
if (ctx_w->ctx) sass_free_context(ctx_w->ctx);
delete ctx_w->callback;
delete ctx_w->errorCallback;
free(ctx_w);
}
sass_file_context_wrapper* sass_new_file_context_wrapper()
{
return (sass_file_context_wrapper*) calloc(1, sizeof(sass_file_context_wrapper));
}
void sass_free_file_context_wrapper(sass_file_context_wrapper* ctx_w)
{
if (ctx_w->ctx) sass_free_file_context(ctx_w->ctx);
delete ctx_w->callback;
delete ctx_w->errorCallback;
if (ctx_w->fctx) sass_free_file_context(ctx_w->fctx);
free(ctx_w);
}
......
#include "libsass/sass_interface.h"
#include <nan.h>
#include <node.h>
#ifdef __cplusplus
extern "C" {
......@@ -7,24 +7,15 @@ extern "C" {
struct sass_context_wrapper {
sass_context* ctx;
sass_file_context* fctx;
uv_work_t request;
NanCallback* callback;
NanCallback* errorCallback;
v8::Persistent<v8::Function> callback;
v8::Persistent<v8::Function> errorCallback;
};
struct sass_context_wrapper* sass_new_context_wrapper(void);
void sass_free_context_wrapper(struct sass_context_wrapper* ctx);
struct sass_file_context_wrapper {
sass_file_context* ctx;
uv_work_t request;
NanCallback* callback;
NanCallback* errorCallback;
};
struct sass_file_context_wrapper* sass_new_file_context_wrapper(void);
void sass_free_file_context_wrapper(struct sass_file_context_wrapper* ctx);
#ifdef __cplusplus
}
#endif
......@@ -10,7 +10,20 @@ var scssStr = '#navbar {\
a {\
font-weight: bold; }}';
sass.render(scssStr, function(err, css){
console.log(css)
})
//sass.render(scssStr, function(err, css){
//console.log(css)
//})
//console.log(sass.renderSync(scssStr));
console.log(sass.renderSync(scssStr));
//console.log(sass.renderSync({
//file: './test/sample.scss'
//}));
sass.render({
file: './test/sample.scss'
}, function(output) {
console.log(output);
});
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment