From 49673a3b495d532c475c41a2dca23129edeec4cc Mon Sep 17 00:00:00 2001
From: MoyuScript <i@moyu.moe>
Date: Sat, 4 Feb 2012 15:07:24 +0100
Subject: [PATCH 1/3] draft for a bookmarklet to screenshot any page

primarily intended to do debugging/testing
---
 bookmarklet.html           | 53 +++++++++++++++++++++++++++
 src/plugins/bookmarklet.js | 73 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 126 insertions(+)
 create mode 100644 bookmarklet.html
 create mode 100644 src/plugins/bookmarklet.js

diff --git a/bookmarklet.html b/bookmarklet.html
new file mode 100644
index 0000000..07db7bc
--- /dev/null
+++ b/bookmarklet.html
@@ -0,0 +1,53 @@
+<!doctype html>
+<html>
+	<head>
+		<title>html2canvas Bookmarklet</title>
+		<script type="text/javascript" src="external/jquery-1.6.2.min.js"></script>
+		<script type="text/javascript">
+			var isDebug = false, origBookmarklet = '';
+			function patchLinks() {
+				var bookmarklet = origBookmarklet;
+				if (isDebug) {
+					bookmarklet = bookmarklet.replace('//DEBUG: ', '');
+				}
+				bookmarklet = bookmarklet.replace(/\s\/\/.*/g, ''); // remove single line comments
+				bookmarklet = bookmarklet.replace(/[\u000A\u000D]+/g, ''); // remove all linebreaks
+				bookmarklet = bookmarklet.replace(/\/\*.*?\*\//g, ''); // remove multi line comments
+				bookmarklet = bookmarklet.replace(/\s\s+/g, ' '); // reduce multiple spaces to single spaces
+				bookmarklet = bookmarklet.replace(/\s+=\s+/g, '=');
+				$('a.bookmarklet').each(function(_, el) {
+					el.href = $(el).attr('data-href') + bookmarklet;
+				});
+			}
+			$(function() {
+				$('input[type=checkbox]').bind('change', function() {
+					isDebug = $(this).is(':checked');
+					patchLinks();
+				}).change();
+				$.ajax('src/plugins/bookmarklet.js', {
+					datatype: 'text',
+					success: function(data, status, xhr) {
+						origBookmarklet = data;
+						patchLinks();
+					}
+				});
+			});
+		</script>
+	</head>
+	<body>
+		<h1>html2canvas Bookmarklet</h1>
+		<p>
+			If you use a normal browser: drag the normal <a class="bookmarklet" data-href="javascript:">html2canvas</a> bookmarklet to your bookmarks toolbar.<br />
+			If not use the following link: <a class="bookmarklet" data-href="#_remove_this_javascript:">bookmarklet for those special mobile devices</a>
+			click / tap that link and then bookmark the page, edit the bookmark and remove the start up until including <code>#_remove_this_</code>
+			part at the beginning of the URL, it must start with: <code>javascript:</code> to be correct.
+		</p>
+		<h2>For Developers:</h2>
+		<p>
+			If you are a developer and want to debug locally (you need the source tree of your html2canvas at:
+			<code>http(s)://localhost/html2canvas/</code>)
+			check the following box to get the bookmarklet patched automatically ;)<br />
+			<label>Debug bookmarklet: <input type="checkbox" /></label>
+		</p>
+	</body>
+</html>
diff --git a/src/plugins/bookmarklet.js b/src/plugins/bookmarklet.js
new file mode 100644
index 0000000..fe0a256
--- /dev/null
+++ b/src/plugins/bookmarklet.js
@@ -0,0 +1,73 @@
+(function() {
+    /* options, customize to your needs */
+    var server = '//html2canvas.hertzen.com/build',
+    proxy = '//html2canvas.appspot.com',
+    debug = false,
+    profile = false;
+    //DEBUG: server = 'http://localhost/html2canvas'; debug = true;
+    var debugFiles = [
+        'external/jquery-1.6.2.min',
+        'src/Core',
+        'src/Generate',
+        'src/Parse',
+        'src/Preload',
+        'src/Queue',
+        'src/Renderer',
+        'src/plugins/jquery.plugin.html2canvas'
+    ],
+    relFiles = [
+	'//code.jquery.com/jquery-1.6.4.js',
+        'html2canvas',
+        'jquery.plugin.html2canvas'
+    ],
+    i = 0, el = null;
+    var loader = {
+        index: 0,
+        head: document.getElementsByTagName('head')[0],
+        statusline: document.createElement('div'),
+        files: (debug ? debugFiles : relFiles),
+        onload: function () {
+            var _ = this;
+            if (_.index < _.files.length) {
+                var el = document.createElement('script');
+                el.type = 'text/javascript';
+                el.onload = function() {
+                    _.onload();
+                };
+                el.onerror = function() {
+                    _.statusline.style.color = 'red';
+                    _.statusline.innerHTML = _.statusline.innerHTML + ' failed';
+		    _.statusline.onclick = function() {
+                        _.statusline.parentNode.removeChild(_.statusline);
+                    };
+                };
+		if (_.files[_.index].substr(0, 2) === '//') {
+		    el.src = _.files[_.index];
+                }
+                else {
+                    el.src = server + '/' + _.files[_.index] + '.js';
+                }
+                _.head.appendChild(el);
+                ++_.index;
+                _.statusline.innerHTML = 'html2canvas: loading "' + el.src + '" ' + _.index + ' / ' + _.files.length + '...';
+            }
+            else {
+                _.statusline.parentNode.removeChild(_.statusline);
+                delete _.statusline;
+                $(document.documentElement).html2canvas({
+                    logging: debug,
+                    profile: profile
+                });
+            }
+        }
+    }, statusline = loader.statusline;
+    statusline.style.position = 'fixed';
+    statusline.style.bottom = '0px';
+    statusline.style.right = '20px';
+    statusline.style.backgroundColor = 'white';
+    statusline.style.border = '1px solid black';
+    statusline.style.borderBottomWidth = '0px';
+    statusline.style.padding = '2px 5px';
+    document.body.appendChild(statusline);
+    loader.onload();
+}());

From ef9dc46bb4ce21aba6f0f5766b2daaf0a3e50a6f Mon Sep 17 00:00:00 2001
From: MoyuScript <i@moyu.moe>
Date: Wed, 15 Feb 2012 18:47:21 +0100
Subject: [PATCH 2/3] fix typo

---
 bookmarklet.html | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/bookmarklet.html b/bookmarklet.html
index 07db7bc..8959736 100644
--- a/bookmarklet.html
+++ b/bookmarklet.html
@@ -25,7 +25,7 @@
 					patchLinks();
 				}).change();
 				$.ajax('src/plugins/bookmarklet.js', {
-					datatype: 'text',
+					dataType: 'text',
 					success: function(data, status, xhr) {
 						origBookmarklet = data;
 						patchLinks();

From 8c801d25c0858beb06e9202d958d6c075c7b1719 Mon Sep 17 00:00:00 2001
From: MoyuScript <i@moyu.moe>
Date: Sat, 18 Feb 2012 22:50:11 +0100
Subject: [PATCH 3/3] add a note about NoScript's ABE, small fix

---
 bookmarklet.html           | 4 ++++
 src/plugins/bookmarklet.js | 1 +
 2 files changed, 5 insertions(+)

diff --git a/bookmarklet.html b/bookmarklet.html
index 8959736..cb759c5 100644
--- a/bookmarklet.html
+++ b/bookmarklet.html
@@ -42,6 +42,10 @@
 			click / tap that link and then bookmark the page, edit the bookmark and remove the start up until including <code>#_remove_this_</code>
 			part at the beginning of the URL, it must start with: <code>javascript:</code> to be correct.
 		</p>
+		<p>
+			If you are using Firefox and the NoScript Addon: disable the ABE part of it,
+			took me quite some time to figure out that the reason for an unreliable bookmarklet was in NoScript...
+		</p>
 		<h2>For Developers:</h2>
 		<p>
 			If you are a developer and want to debug locally (you need the source tree of your html2canvas at:
diff --git a/src/plugins/bookmarklet.js b/src/plugins/bookmarklet.js
index fe0a256..61c8b57 100644
--- a/src/plugins/bookmarklet.js
+++ b/src/plugins/bookmarklet.js
@@ -68,6 +68,7 @@
     statusline.style.border = '1px solid black';
     statusline.style.borderBottomWidth = '0px';
     statusline.style.padding = '2px 5px';
+    statusline.style.zIndex = 9999999;
     document.body.appendChild(statusline);
     loader.onload();
 }());