Resolve conflicts

This commit is contained in:
kangax 2013-09-03 21:18:29 +02:00
commit 4559918688
8 changed files with 8152 additions and 11 deletions

View file

@ -1,5 +1,7 @@
{
"globals": {
"define": true,
"exports": true,
"fabric": true,
"Cufon": true,
"Event": true,

View file

@ -1,10 +1,10 @@
/*! Fabric.js Copyright 2008-2013, Printio (Juriy Zaytsev, Maxim Chernyak) */
var exports = exports || {};
var fabric = fabric || { version: "1.2.11" };
if (typeof exports !== 'undefined') {
exports.fabric = fabric;
}
// make sure exports.fabric is always defined when used as 'global' later scopes
exports.fabric = fabric;
if (typeof document !== 'undefined' && typeof window !== 'undefined') {
fabric.document = document;

View file

@ -84,6 +84,10 @@ Fabric.js started as a foundation for design editor on [printio.ru](http://print
# or Google Closure Compiler
$ node build.js modules=... minifier=closure
4. Enable AMD support via require.js (requires uglify)
$ node build.js requirejs modules=...
### Demos
- [Demos](http://fabricjs.com/demos/)
@ -114,6 +118,7 @@ These are the optional modules that could be specified for inclusion, when build
Additional flags for build script are:
- **requirejs** — Makes fabric requirejs AMD-compatible in `dist/all.js`. *Note:* an unminified, requirejs-compatible version is always created in `dist/all.require.js`
- **no-strict** — Strips "use strict" directives from source
- **no-svg-export** — Removes svg exporting functionality
- **no-es5-compat** - Removes ES5 compat methods (Array.prototype.*, String.prototype.*, Function.prototype.*)

View file

@ -17,6 +17,21 @@ var modulesToExclude = buildArgsAsObject.exclude ? buildArgsAsObject.exclude.spl
var minifier = buildArgsAsObject.minifier || 'uglifyjs';
var mininfierCmd;
var noStrict = 'no-strict' in buildArgsAsObject;
var noSVGExport = 'no-svg-export' in buildArgsAsObject;
var noES5Compat = 'no-es5-compat' in buildArgsAsObject;
var requirejs = 'requirejs' in buildArgsAsObject ? 'requirejs' : false;
// set amdLib var to encourage later support of other AMD systems
var amdLib = requirejs;
// if we want requirejs AMD support, use uglify
var amdUglifyFlags = " -r 'require,exports,window,fabric' -e window:window,undefined ";
if (amdLib === 'requirejs' && minifier !== 'uglifyjs') {
console.log('[notice]: require.js support requires uglifyjs as minifier; changed minifier to uglifyjs.');
minifier = 'uglifyjs';
}
if (minifier === 'yui') {
mininfierCmd = 'java -jar lib/yuicompressor-2.4.6.jar dist/all.js -o dist/all.min.js';
}
@ -24,13 +39,9 @@ else if (minifier === 'closure') {
mininfierCmd = 'java -jar lib/google_closure_compiler.jar --js dist/all.js --js_output_file dist/all.min.js';
}
else if (minifier === 'uglifyjs') {
mininfierCmd = 'uglifyjs --output dist/all.min.js dist/all.js';
mininfierCmd = 'uglifyjs ' + amdUglifyFlags + ' --output dist/all.min.js dist/all.js';
}
var noStrict = 'no-strict' in buildArgsAsObject;
var noSVGExport = 'no-svg-export' in buildArgsAsObject;
var noES5Compat = 'no-es5-compat' in buildArgsAsObject;
var buildSh = 'build-sh' in buildArgsAsObject;
var buildMinified = 'build-minified' in buildArgsAsObject;
@ -45,6 +56,7 @@ var distFileContents =
(noStrict ? ' no-strict' : '') +
(noSVGExport ? ' no-svg-export' : '') +
(noES5Compat ? ' no-es5-compat' : '') +
(requirejs ? ' requirejs' : '') +
'` */';
function appendFileContents(fileNames, callback) {
@ -101,6 +113,14 @@ function ifSpecifiedDependencyInclude(included, excluded, fileName) {
);
}
function ifSpecifiedAMDInclude(amdLib) {
var supportedLibraries = ['requirejs'];
if (supportedLibraries.indexOf(amdLib) > -1) {
return 'src/amd/' + amdLib + '.js';
}
return '';
}
var filesToInclude = [
'HEADER.js',
@ -195,14 +215,16 @@ var filesToInclude = [
ifSpecifiedInclude('text', 'src/shapes/text.class.js'),
ifSpecifiedInclude('cufon', 'src/shapes/text.cufon.js'),
ifSpecifiedInclude('node', 'src/node.js')
ifSpecifiedInclude('node', 'src/node.js'),
ifSpecifiedAMDInclude(amdLib)
];
if (buildMinified) {
for (var i = 0; i < filesToInclude.length; i++) {
if (!filesToInclude[i]) continue;
var fileNameWithoutSlashes = filesToInclude[i].replace(/\//g, '^');
exec('uglifyjs -nc ' + filesToInclude[i] + ' > tmp/' + fileNameWithoutSlashes);
exec('uglifyjs -nc ' + amdUglifyFlags + filesToInclude[i] + ' > tmp/' + fileNameWithoutSlashes);
}
}
else if (buildSh) {
@ -238,7 +260,16 @@ else {
throw err;
}
console.log('Built distribution to dist/all.js');
// add js wrapping in AMD closure for requirejs if necessary
if (amdLib !== false) {
exec('uglifyjs dist/all.js ' + amdUglifyFlags + ' -b --output dist/all.js');
}
if (amdLib !== false) {
console.log('Built distribution to dist/all.js (' + amdLib + '-compatible)');
} else {
console.log('Built distribution to dist/all.js');
}
exec(mininfierCmd, function (error, output) {
if (error) {
@ -251,6 +282,28 @@ else {
console.log('Gzipped to dist/all.min.js.gz');
});
});
// Always build requirejs AMD module in dist/all.require.js
// add necessary requirejs footer code to filesToInclude if we haven't before
if (amdLib === false) {
amdLib = "requirejs";
filesToInclude[filesToInclude.length] = ifSpecifiedAMDInclude(amdLib);
}
appendFileContents(filesToInclude, function() {
fs.writeFile('dist/all.require.js', distFileContents, function (err) {
if (err) {
console.log(err);
throw err;
}
exec('uglifyjs dist/all.require.js ' + amdUglifyFlags + ' -b --output dist/all.require.js');
console.log('Built distribution to dist/all.require.js (requirejs-compatible)');
});
});
});
});
}

8070
dist/all.require.js vendored Normal file

File diff suppressed because it is too large Load diff

7
src/amd/requirejs.js Normal file
View file

@ -0,0 +1,7 @@
/* Footer for requirejs AMD support */
window.fabric = fabric;
if ( typeof define === "function" && define.amd) {
define( "fabric", [], function () { return fabric; } );
}

View file

@ -5,6 +5,7 @@ testrunner.options.log.tests = false;
testrunner.options.log.assertions = false;
testrunner.run({
deps: "./test/fixtures/test_script.js",
code: "./dist/all.js",
tests: [
'./test/unit/rect.js',

View file

@ -1,4 +1,7 @@
(function(){
// set global variable
this.foo = 'bar';
this.window = undefined;
this.document = undefined;
})();