render.js 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475
  1. (function() {
  2. 'use strict';
  3. var page = require('webpage').create();
  4. var args = require('system').args;
  5. var params = {};
  6. var regexp = /^([^=]+)=([^$]+)/;
  7. args.forEach(function(arg) {
  8. var parts = arg.match(regexp);
  9. if (!parts) { return; }
  10. params[parts[1]] = parts[2];
  11. });
  12. var usage = "url=<url> png=<filename> width=<width> height=<height> cookiename=<cookiename> sessionid=<sessionid> domain=<domain>";
  13. if (!params.url || !params.png || !params.cookiename || ! params.sessionid || !params.domain) {
  14. console.log(usage);
  15. phantom.exit();
  16. }
  17. phantom.addCookie({
  18. 'name': params.cookiename,
  19. 'value': params.sessionid,
  20. 'domain': params.domain
  21. });
  22. page.viewportSize = {
  23. width: params.width || '800',
  24. height: params.height || '400'
  25. };
  26. var tries = 0;
  27. page.open(params.url, function (status) {
  28. // console.log('Loading a web page: ' + params.url + ' status: ' + status);
  29. function checkIsReady() {
  30. var canvas = page.evaluate(function() {
  31. if (!window.angular) { return false; }
  32. var body = window.angular.element(document.body);
  33. if (!body.injector) { return false; }
  34. if (!body.injector()) { return false; }
  35. var rootScope = body.injector().get('$rootScope');
  36. if (!rootScope) {return false;}
  37. if (!rootScope.performance) { return false; }
  38. var panelsToLoad = window.angular.element('div.panel').length;
  39. return rootScope.performance.panelsRendered >= panelsToLoad;
  40. });
  41. if (canvas || tries === 1000) {
  42. var bb = page.evaluate(function () {
  43. return document.getElementsByClassName("main-view")[0].getBoundingClientRect();
  44. });
  45. page.clipRect = {
  46. top: bb.top,
  47. left: bb.left,
  48. width: bb.width,
  49. height: bb.height
  50. };
  51. page.render(params.png);
  52. phantom.exit();
  53. }
  54. else {
  55. tries++;
  56. setTimeout(checkIsReady, 10);
  57. }
  58. }
  59. setTimeout(checkIsReady, 200);
  60. });
  61. })();