Version 1
[yaffs-website] / node_modules / phantomjs-prebuilt / lib / phantom / examples / responsive-screenshot.js
diff --git a/node_modules/phantomjs-prebuilt/lib/phantom/examples/responsive-screenshot.js b/node_modules/phantomjs-prebuilt/lib/phantom/examples/responsive-screenshot.js
new file mode 100644 (file)
index 0000000..35aac60
--- /dev/null
@@ -0,0 +1,181 @@
+/**
+ * Captures the full height document even if it's not showing on the screen or captures with the provided range of screen sizes.
+ *
+ * A basic example for taking a screen shot using phantomjs which is sampled for https://nodejs-dersleri.github.io/
+ *
+ * usage : phantomjs responsive-screenshot.js {url} [output format] [doClipping]
+ *
+ * examples >
+ *      phantomjs responsive-screenshot.js https://nodejs-dersleri.github.io/
+ *      phantomjs responsive-screenshot.js https://nodejs-dersleri.github.io/ pdf
+ *      phantomjs responsive-screenshot.js https://nodejs-dersleri.github.io/ true
+ *      phantomjs responsive-screenshot.js https://nodejs-dersleri.github.io/ png true
+ *
+ * @author Salih sagdilek <salihsagdilek@gmail.com>
+ */
+
+/**
+ * http://phantomjs.org/api/system/property/args.html
+ *
+ * Queries and returns a list of the command-line arguments.
+ * The first one is always the script name, which is then followed by the subsequent arguments.
+ */
+var args = require('system').args;
+/**
+ * http://phantomjs.org/api/fs/
+ *
+ * file system api
+ */
+var fs = require('fs');
+
+/**
+ * http://phantomjs.org/api/webpage/
+ *
+ * Web page api
+ */
+var page = new WebPage();
+
+/**
+ * if url address does not exist, exit phantom
+ */
+if ( 1 === args.length ) {
+    console.log('Url address is required');
+    phantom.exit();
+}
+
+/**
+ *  setup url address (second argument);
+ */
+var urlAddress = args[1].toLowerCase();
+
+
+/**
+ * set output extension format
+ * @type {*}
+ */
+var ext = getFileExtension();
+
+/**
+ * set if clipping ?
+ * @type {boolean}
+ */
+var clipping = getClipping();
+
+/**
+ * setup viewports
+ */
+var viewports = [
+    {
+        width : 1200,
+        height : 800
+    },
+    {
+        width : 1024,
+        height : 768
+    },
+    {
+        width : 768,
+        height : 1024
+    },
+    {
+        width : 480,
+        height : 640
+    },
+    {
+        width : 320,
+        height : 480
+    }
+];
+
+page.open(urlAddress, function (status) {
+    if ( 'success' !== status ) {
+        console.log('Unable to load the url address!');
+    } else {
+        var folder = urlToDir(urlAddress);
+        var output, key;
+
+        function render(n) {
+            if ( !!n ) {
+                key = n - 1;
+                page.viewportSize = viewports[key];
+                if ( clipping ) {
+                    page.clipRect = viewports[key];
+                }
+                output = folder + "/" + getFileName(viewports[key]);
+                console.log('Saving ' + output);
+                page.render(output);
+                render(key);
+            }
+        }
+
+        render(viewports.length);
+    }
+    phantom.exit();
+});
+
+/**
+ * filename generator helper
+ * @param viewport
+ * @returns {string}
+ */
+function getFileName(viewport) {
+    var d = new Date();
+    var date = [
+        d.getUTCFullYear(),
+        d.getUTCMonth() + 1,
+        d.getUTCDate()
+    ];
+    var time = [
+        d.getHours() <= 9 ? '0' + d.getHours() : d.getHours(),
+        d.getMinutes() <= 9 ? '0' + d.getMinutes() : d.getMinutes(),
+        d.getSeconds() <= 9 ? '0' + d.getSeconds() : d.getSeconds(),
+        d.getMilliseconds()
+    ];
+    var resolution = viewport.width + (clipping ? "x" + viewport.height : '');
+
+    return date.join('-') + '_' + time.join('-') + "_" + resolution + ext;
+}
+
+/**
+ * output extension format helper
+ *
+ * @returns {*}
+ */
+function getFileExtension() {
+    if ( 'true' != args[2] && !!args[2] ) {
+        return '.' + args[2];
+    }
+    return '.png';
+}
+
+/**
+ * check if clipping
+ *
+ * @returns {boolean}
+ */
+function getClipping() {
+    if ( 'true' == args[3] ) {
+        return !!args[3];
+    } else if ( 'true' == args[2] ) {
+        return !!args[2];
+    }
+    return false;
+}
+
+/**
+ * url to directory helper
+ *
+ * @param url
+ * @returns {string}
+ */
+function urlToDir(url) {
+    var dir = url
+        .replace(/^(http|https):\/\//, '')
+        .replace(/\/$/, '');
+
+    if ( !fs.makeTree(dir) ) {
+        console.log('"' + dir + '" is NOT created.');
+        phantom.exit();
+    }
+    return dir;
+}