123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181 |
- /**
- * 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;
- }
|