Switched build process to use grunt

This commit is contained in:
MoyuScript 2012-11-25 20:59:31 +02:00
parent 6675a219f3
commit c5d82acdf6
12 changed files with 2250 additions and 2262 deletions

61
grunt.js Normal file
View File

@ -0,0 +1,61 @@
/*global module:false*/
module.exports = function(grunt) {
// Project configuration.
grunt.initConfig({
pkg: '<json:package.json>',
meta: {
banner: '/*\n <%= pkg.title || pkg.name %> <%= pkg.version %>' +
'<%= pkg.homepage ? " <" + pkg.homepage + ">\n" : "" %>' +
' Copyright (c) <%= grunt.template.today("yyyy") %> <%= pkg.author.name %>' +
'\n\n Released under <%= _.pluck(pkg.licenses, "type").join(", ") %> License\n*/',
pre: '(function(window, document, undefined){',
post: '})(window,document);'
},
lint: {
files: ['grunt.js', 'build/<%= pkg.name %>.js']
},
qunit: {
files: ['tests/qunit/index.html']
},
concat: {
dist: {
src: ['<banner:meta.banner>', '<banner:meta.pre>','src/*.js', 'src/renderers/Canvas.js', '<banner:meta.post>'],
dest: 'build/<%= pkg.name %>.js'
}
},
min: {
dist: {
src: ['<banner:meta.banner>', '<config:concat.dist.dest>'],
dest: 'build/<%= pkg.name %>.min.js'
}
},
watch: {
files: '<config:lint.files>',
tasks: 'lint qunit'
},
jshint: {
options: {
curly: true,
eqeqeq: true,
immed: true,
latedef: true,
newcap: true,
noarg: true,
sub: true,
undef: true,
boss: true,
eqnull: true,
browser: true
},
globals: {
jQuery: true
}
},
uglify: {}
});
// Default task.
grunt.registerTask('default', 'concat lint qunit min');
};

12
package.json Normal file
View File

@ -0,0 +1,12 @@
{
"title": "html2canvas",
"name": "html2canvas",
"description": "File archive management library in JavaScript",
"version": "0.4.0",
"author": {
"name":"Niklas von Hertzen (@niklasvh)"
},
"homepage": "http://html2canvas.hertzen.com",
"licenses": [{"type": "MIT"}]
}

View File

@ -1,10 +1,3 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
"use strict"; "use strict";
var _html2canvas = {}, var _html2canvas = {},

View File

@ -1,41 +1,31 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Contributor(s):
Niklas von Hertzen <http://www.twitter.com/niklasvh>
André Fiedler <http://www.twitter.com/sonnenkiste>
Released under MIT License
*/
(function(){ (function(){
_html2canvas.Generate = {}; _html2canvas.Generate = {};
var reGradients = [ var reGradients = [
/^(-webkit-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/, /^(-webkit-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,
/^(-o-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/, /^(-o-linear-gradient)\(([a-z\s]+)([\w\d\.\s,%\(\)]+)\)$/,
/^(-webkit-gradient)\((linear|radial),\s((?:\d{1,3}%?)\s(?:\d{1,3}%?),\s(?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)-]+)\)$/, /^(-webkit-gradient)\((linear|radial),\s((?:\d{1,3}%?)\s(?:\d{1,3}%?),\s(?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)\-]+)\)$/,
/^(-moz-linear-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)]+)\)$/, /^(-moz-linear-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?))([\w\d\.\s,%\(\)]+)\)$/,
/^(-webkit-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z-]+)([\w\d\.\s,%\(\)]+)\)$/, /^(-webkit-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/,
/^(-moz-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s?([a-z-]*)([\w\d\.\s,%\(\)]+)\)$/, /^(-moz-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s?([a-z\-]*)([\w\d\.\s,%\(\)]+)\)$/,
/^(-o-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z-]+)([\w\d\.\s,%\(\)]+)\)$/ /^(-o-radial-gradient)\(((?:\d{1,3}%?)\s(?:\d{1,3}%?)),\s(\w+)\s([a-z\-]+)([\w\d\.\s,%\(\)]+)\)$/
]; ];
/* /*
* TODO: Add IE10 vendor prefix (-ms) support * TODO: Add IE10 vendor prefix (-ms) support
* TODO: Add W3C gradient (linear-gradient) support * TODO: Add W3C gradient (linear-gradient) support
* TODO: Add old Webkit -webkit-gradient(radial, ...) support * TODO: Add old Webkit -webkit-gradient(radial, ...) support
* TODO: Maybe some RegExp optimizations are possible ;o) * TODO: Maybe some RegExp optimizations are possible ;o)
*/ */
_html2canvas.Generate.parseGradient = function(css, bounds) { _html2canvas.Generate.parseGradient = function(css, bounds) {
var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3; var gradient, i, len = reGradients.length, m1, stop, m2, m2Len, step, m3, tl,tr,br,bl;
for(i = 0; i < len; i+=1){ for(i = 0; i < len; i+=1){
m1 = css.match(reGradients[i]); m1 = css.match(reGradients[i]);
if(m1) break; if(m1) {
break;
}
} }
if(m1) { if(m1) {
@ -139,8 +129,12 @@ _html2canvas.Generate.parseGradient = function(css, bounds) {
for(i = 0; i < m2Len; i+=1){ for(i = 0; i < m2Len; i+=1){
m3 = m2[i].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\)/); m3 = m2[i].match(/(from|to|color-stop)\(([0-9\.]+)?(?:,\s)?((?:rgb|rgba)\(\d{1,3},\s\d{1,3},\s\d{1,3}(?:,\s[0-9\.]+)?\))\)/);
stop = parseFloat(m3[2]); stop = parseFloat(m3[2]);
if(m3[1] === 'from') stop = 0.0; if(m3[1] === 'from') {
if(m3[1] === 'to') stop = 1.0; stop = 0.0;
}
if(m3[1] === 'to') {
stop = 1.0;
}
gradient.colorStops.push({ gradient.colorStops.push({
color: m3[3], color: m3[3],
stop: stop stop: stop
@ -227,23 +221,23 @@ _html2canvas.Generate.parseGradient = function(css, bounds) {
// size // size
m2 = m1[3].match(/\w+/); m2 = m1[3].match(/\w+/);
m3 = m1[4].match(/[a-z-]*/); m3 = m1[4].match(/[a-z\-]*/);
if(m2 && m3){ if(m2 && m3){
switch(m3[0]){ switch(m3[0]){
case 'farthest-corner': case 'farthest-corner':
case 'cover': // is equivalent to farthest-corner case 'cover': // is equivalent to farthest-corner
case '': // mozilla removes "cover" from definition :( case '': // mozilla removes "cover" from definition :(
var tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2)); tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2));
var tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2)); tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));
var br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2)); br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));
var bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2)); bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2));
gradient.rx = gradient.ry = Math.max(tl, tr, br, bl); gradient.rx = gradient.ry = Math.max(tl, tr, br, bl);
break; break;
case 'closest-corner': case 'closest-corner':
var tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2)); tl = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.cy, 2));
var tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2)); tr = Math.sqrt(Math.pow(gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));
var br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2)); br = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.y1 - gradient.cy, 2));
var bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2)); bl = Math.sqrt(Math.pow(gradient.x1 - gradient.cx, 2) + Math.pow(gradient.cy, 2));
gradient.rx = gradient.ry = Math.min(tl, tr, br, bl); gradient.rx = gradient.ry = Math.min(tl, tr, br, bl);
break; break;
case 'farthest-side': case 'farthest-side':
@ -324,9 +318,9 @@ _html2canvas.Generate.parseGradient = function(css, bounds) {
} }
return gradient; return gradient;
}; };
_html2canvas.Generate.Gradient = function(src, bounds) { _html2canvas.Generate.Gradient = function(src, bounds) {
var canvas = document.createElement('canvas'), var canvas = document.createElement('canvas'),
ctx = canvas.getContext('2d'), ctx = canvas.getContext('2d'),
gradient, grad, i, len, img; gradient, grad, i, len, img;
@ -408,15 +402,15 @@ _html2canvas.Generate.Gradient = function(src, bounds) {
img.src = canvas.toDataURL(); img.src = canvas.toDataURL();
} };
imgRadial.src = canvasRadial.toDataURL(); imgRadial.src = canvasRadial.toDataURL();
} }
} }
return img; return img;
}; };
_html2canvas.Generate.ListAlpha = function(number) { _html2canvas.Generate.ListAlpha = function(number) {
var tmp = "", var tmp = "",
modulus; modulus;
@ -427,9 +421,9 @@ _html2canvas.Generate.ListAlpha = function(number) {
}while((number*26) > 26); }while((number*26) > 26);
return tmp; return tmp;
}; };
_html2canvas.Generate.ListRoman = function(number) { _html2canvas.Generate.ListRoman = function(number) {
var romanArray = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"], var romanArray = ["M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"],
decimal = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1], decimal = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1],
roman = "", roman = "",
@ -449,6 +443,6 @@ _html2canvas.Generate.ListRoman = function(number) {
return roman; return roman;
}; };
})(); })();

View File

@ -343,7 +343,7 @@ _html2canvas.Parse = function ( images, options ) {
range.setStart(textNode, textOffset); range.setStart(textNode, textOffset);
range.setEnd(textNode, textOffset + textValue.length); range.setEnd(textNode, textOffset + textValue.length);
}else{ } else {
// TODO add IE support // TODO add IE support
range = body.createTextRange(); range = body.createTextRange();
} }
@ -363,10 +363,7 @@ _html2canvas.Parse = function ( images, options ) {
continue; continue;
} }
if (i < listLen-1) newTextNode = (i < listLen-1) ? oldTextNode.splitText(renderList[c].length) : null;
newTextNode = oldTextNode.splitText(renderList[c].length);
else
newTextNode = null;
parent = oldTextNode.parentNode; parent = oldTextNode.parentNode;
wrapElement = doc.createElement('wrapper'); wrapElement = doc.createElement('wrapper');
@ -1324,8 +1321,7 @@ _html2canvas.Parse = function ( images, options ) {
elm = children[ i ]; elm = children[ i ];
if ( elm.nodeType === 3 ) { if ( elm.nodeType === 3 ) {
// Text node // Text node
html += elm.nodeValue.replace(/</g,"&lt;").replace(/>/g,"&gt;");
html += elm.nodeValue.replace(/\</g,"&lt;").replace(/\>/g,"&gt;");
} else if ( elm.nodeType === 1 ) { } else if ( elm.nodeType === 1 ) {
// Element // Element
if ( !/^(script|meta|title)$/.test(elm.nodeName.toLowerCase()) ) { if ( !/^(script|meta|title)$/.test(elm.nodeName.toLowerCase()) ) {

View File

@ -1,11 +1,3 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
_html2canvas.Preload = function( options ) { _html2canvas.Preload = function( options ) {
var images = { var images = {
@ -31,11 +23,6 @@ _html2canvas.Preload = function( options ) {
link.href = window.location.href; link.href = window.location.href;
pageOrigin = link.protocol + link.host; pageOrigin = link.protocol + link.host;
function isSameOrigin(url){ function isSameOrigin(url){
link.href = url; link.href = url;
link.href = link.href; // YES, BELIEVE IT OR NOT, that is required for IE9 - http://jsfiddle.net/niklasvh/2e48b/ link.href = link.href; // YES, BELIEVE IT OR NOT, that is required for IE9 - http://jsfiddle.net/niklasvh/2e48b/
@ -104,11 +91,6 @@ _html2canvas.Preload = function( options ) {
function getImages (el) { function getImages (el) {
// if (!this.ignoreRe.test(el.nodeName)){
//
var contents = _html2canvas.Util.Children(el), var contents = _html2canvas.Util.Children(el),
i, i,
background_image, background_image,
@ -120,16 +102,11 @@ _html2canvas.Preload = function( options ) {
try { try {
var contentsLen = contents.length; var contentsLen = contents.length;
for (i = 0; i < contentsLen; i+=1 ){ for (i = 0; i < contentsLen; i+=1 ){
// var ignRe = new RegExp("("+this.ignoreElements+")");
// if (!ignRe.test(element.nodeName)){
getImages(contents[i]); getImages(contents[i]);
// }
} }
} }
catch( e ) {} catch( e ) {}
// }
try { try {
elNodeType = el.nodeType; elNodeType = el.nodeType;
} catch (ex) { } catch (ex) {
@ -169,11 +146,6 @@ _html2canvas.Preload = function( options ) {
methods.loadImage(src); methods.loadImage(src);
} }
/*
if (background_image && background_image !== "1" && background_image !== "none" && background_image.substring(0,7) !== "-webkit" && background_image.substring(0,3)!== "-o-" && background_image.substring(0,4) !== "-moz"){
// TODO add multi image background support
src = _html2canvas.Util.backgroundImage(background_image.split(",")[0]);
methods.loadImage(src); */
} }
} }
} }
@ -355,6 +327,3 @@ _html2canvas.Preload = function( options ) {
return methods; return methods;
}; };

View File

@ -1,10 +1,3 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
function h2cRenderContext(width, height) { function h2cRenderContext(width, height) {
var storage = []; var storage = [];
return { return {

View File

@ -1,13 +1,4 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
_html2canvas.Renderer = function(parseQueue, options){ _html2canvas.Renderer = function(parseQueue, options){
var queue = []; var queue = [];
function sortZ(zStack){ function sortZ(zStack){

View File

@ -1,12 +1,3 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
html2canvas = function( elements, opts ) { html2canvas = function( elements, opts ) {
var queue, var queue,

View File

@ -1,2 +0,0 @@
window.html2canvas = html2canvas;
}(window, document));

View File

@ -1 +0,0 @@
(function(window, document, undefined){

View File

@ -1,12 +1,3 @@
/*
html2canvas @VERSION@ <http://html2canvas.hertzen.com>
Copyright (c) 2011 Niklas von Hertzen. All rights reserved.
http://www.twitter.com/niklasvh
Released under MIT License
*/
_html2canvas.Renderer.Canvas = function( options ) { _html2canvas.Renderer.Canvas = function( options ) {
options = options || {}; options = options || {};
@ -107,6 +98,18 @@ _html2canvas.Renderer.Canvas = function( options ) {
ctx.fillRect(0, 0, canvas.width, canvas.height); ctx.fillRect(0, 0, canvas.width, canvas.height);
ctx.fillStyle = fstyle; ctx.fillStyle = fstyle;
var drawShape = function(args) {
var i, len = args.length;
ctx.beginPath();
for ( i = 0; i < len; i++ ) {
ctx[ args[ i ].name ].apply( ctx, args[ i ]['arguments'] );
}
ctx.closePath();
ctx.fill();
};
if ( options.svgRendering && zStack.svgRender !== undefined ) { if ( options.svgRendering && zStack.svgRender !== undefined ) {
// TODO: enable async rendering to support this // TODO: enable async rendering to support this
ctx.drawImage( zStack.svgRender, 0, 0 ); ctx.drawImage( zStack.svgRender, 0, 0 );
@ -143,23 +146,11 @@ _html2canvas.Renderer.Canvas = function( options ) {
break; break;
case "function": case "function":
if (renderItem.name === "fillRect") { if (renderItem.name === "fillRect") {
if (!usingFlashcanvas || renderItem['arguments'][0] + renderItem['arguments'][2] < flashMaxSize && renderItem['arguments'][1] + renderItem['arguments'][3] < flashMaxSize) { if (!usingFlashcanvas || renderItem['arguments'][0] + renderItem['arguments'][2] < flashMaxSize && renderItem['arguments'][1] + renderItem['arguments'][3] < flashMaxSize) {
ctx.fillRect.apply( ctx, renderItem['arguments'] ); ctx.fillRect.apply( ctx, renderItem['arguments'] );
} }
} else if (renderItem.name === "drawShape") { } else if (renderItem.name === "drawShape") {
drawShape(renderItem['arguments']);
( function( args ) {
var i, len = args.length;
ctx.beginPath();
for ( i = 0; i < len; i++ ) {
ctx[ args[ i ].name ].apply( ctx, args[ i ]['arguments'] );
}
ctx.closePath();
ctx.fill();
})( renderItem['arguments'] );
} else if (renderItem.name === "fillText") { } else if (renderItem.name === "fillText") {
if (!usingFlashcanvas || renderItem['arguments'][1] < flashMaxSize && renderItem['arguments'][2] < flashMaxSize) { if (!usingFlashcanvas || renderItem['arguments'][1] < flashMaxSize && renderItem['arguments'][2] < flashMaxSize) {
ctx.fillText.apply( ctx, renderItem['arguments'] ); ctx.fillText.apply( ctx, renderItem['arguments'] );