├── example ├── public │ ├── .gitkeep │ ├── robots.txt │ └── crossdomain.xml ├── vendor │ └── .gitkeep ├── app │ ├── helpers │ │ └── .gitkeep │ ├── models │ │ └── .gitkeep │ ├── routes │ │ ├── .gitkeep │ │ ├── index.js │ │ ├── missing.js │ │ ├── redirect.js │ │ └── dynamic.js │ ├── styles │ │ ├── .gitkeep │ │ └── app.css │ ├── views │ │ └── .gitkeep │ ├── components │ │ └── .gitkeep │ ├── controllers │ │ ├── .gitkeep │ │ ├── missing.js │ │ ├── dynamic.js │ │ ├── redirect.js │ │ └── crash.js │ ├── templates │ │ ├── .gitkeep │ │ ├── components │ │ │ └── .gitkeep │ │ ├── application.hbs │ │ ├── missing.hbs │ │ ├── crash.hbs │ │ ├── dynamic.hbs │ │ ├── redirect.hbs │ │ └── index.hbs │ ├── router.js │ ├── app.js │ ├── initializers │ │ ├── meta.js │ │ └── ember-prerender.js │ ├── mixins │ │ ├── ember-prerender.js │ │ └── meta.js │ └── index.html ├── tests │ ├── unit │ │ └── .gitkeep │ ├── helpers │ │ ├── resolver.js │ │ └── start-app.js │ ├── test-helper.js │ ├── index.html │ └── .jshintrc ├── .bowerrc ├── testem.json ├── .travis.yml ├── ember-prerender-config.js ├── .ember-cli ├── .gitignore ├── bower.json ├── .editorconfig ├── .jshintrc ├── Brocfile.js ├── package.json ├── config │ └── environment.js └── README.md ├── index.js ├── .gitignore ├── lib ├── index.js ├── plugins │ ├── prettyPrintHtml.js │ ├── removeScriptTags.js │ ├── transparent.js │ ├── inMemoryHtmlCache.js │ ├── minifyHtml.js │ ├── prepareEmail.js │ ├── httpHeaders.js │ ├── s3HtmlCache.js │ └── mongoHtmlCache.js ├── logger.js ├── engines │ ├── webdriver.js │ ├── phantom.js │ └── jsdom.js ├── server.js └── renderer.js ├── bin └── ember-prerender ├── LICENSE ├── server.js ├── package.json └── README.md /example/public/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/vendor/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/helpers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/models/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/routes/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/styles/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/views/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/tests/unit/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/controllers/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/templates/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /example/app/templates/components/.gitkeep: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | module.exports = require('./lib'); 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | node_modules/ 3 | .DS_Store 4 | .idea/ 5 | -------------------------------------------------------------------------------- /example/public/robots.txt: -------------------------------------------------------------------------------- 1 | # robotstxt.org/ 2 | 3 | User-agent: * 4 | -------------------------------------------------------------------------------- /example/.bowerrc: -------------------------------------------------------------------------------- 1 | { 2 | "directory": "bower_components", 3 | "analytics": false 4 | } 5 | -------------------------------------------------------------------------------- /example/app/templates/application.hbs: -------------------------------------------------------------------------------- 1 |
No documents matched the specified URL
4 | -------------------------------------------------------------------------------- /lib/index.js: -------------------------------------------------------------------------------- 1 | var PrerenderServer = require('./server'); 2 | 3 | exports = module.exports = function(config) { 4 | return new PrerenderServer(config); 5 | }; 6 | -------------------------------------------------------------------------------- /example/app/templates/crash.hbs: -------------------------------------------------------------------------------- 1 |4 | This page will cause a fatal Javascript error, which should 5 | cause ember-prerender to restart its rendering engine. 6 |
7 | -------------------------------------------------------------------------------- /example/app/routes/index.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import Meta from '../mixins/meta'; 3 | import EmberPrerender from '../mixins/ember-prerender'; 4 | 5 | export default Ember.Route.extend(Meta, EmberPrerender, {}); 6 | -------------------------------------------------------------------------------- /example/app/routes/missing.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import Meta from '../mixins/meta'; 3 | import EmberPrerender from '../mixins/ember-prerender'; 4 | 5 | export default Ember.Route.extend(Meta, EmberPrerender, {}); 6 | -------------------------------------------------------------------------------- /example/testem.json: -------------------------------------------------------------------------------- 1 | { 2 | "framework": "qunit", 3 | "test_page": "tests/index.html", 4 | "launch_in_ci": [ 5 | "PhantomJS" 6 | ], 7 | "launch_in_dev": [ 8 | "PhantomJS", 9 | "Chrome" 10 | ] 11 | } 12 | -------------------------------------------------------------------------------- /example/app/controllers/missing.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | metaFields: function() { 5 | return { 6 | title: "Missing", 7 | statusCode: 404 8 | }; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /example/.travis.yml: -------------------------------------------------------------------------------- 1 | --- 2 | language: node_js 3 | 4 | sudo: false 5 | 6 | cache: 7 | directories: 8 | - node_modules 9 | 10 | install: 11 | - npm install -g bower 12 | - npm install 13 | - bower install 14 | 15 | script: 16 | - npm test 17 | -------------------------------------------------------------------------------- /example/ember-prerender-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | engine: 'phantom', 3 | //engine: 'jsdom', 4 | //engine: 'webdriver', 5 | appUrl: 'http://localhost:4200/', 6 | plugins: [ 7 | 'removeScriptTags', 8 | 'httpHeaders' 9 | ] 10 | }; 11 | -------------------------------------------------------------------------------- /example/app/templates/dynamic.hbs: -------------------------------------------------------------------------------- 1 | 6 | -------------------------------------------------------------------------------- /lib/plugins/prettyPrintHtml.js: -------------------------------------------------------------------------------- 1 | var pretty = require('pretty'); 2 | 3 | module.exports = { 4 | beforeSend: function(req, res, page, next) { 5 | if (!page.html) { 6 | return next(); 7 | } 8 | page.html = pretty(page.html); 9 | next(); 10 | } 11 | }; 12 | -------------------------------------------------------------------------------- /example/app/controllers/dynamic.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | metaFields: function() { 5 | return { 6 | title: "Flickr Feed", 7 | description: "Page generated using Ember.js and ember-prerender" 8 | }; 9 | } 10 | }); 11 | -------------------------------------------------------------------------------- /example/app/controllers/redirect.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | metaFields: function() { 5 | return { 6 | title: "Redirecting...", 7 | statusCode: 301, 8 | header: "Location: http://github.com/" 9 | }; 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /example/app/controllers/crash.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | 3 | export default Ember.Controller.extend({ 4 | init: function() { 5 | console.log("Throwing error in 1 second..."); 6 | 7 | Ember.run.later(function() { 8 | throw new Error("An error occurred"); 9 | }, 1000); 10 | } 11 | }); 12 | -------------------------------------------------------------------------------- /example/tests/helpers/resolver.js: -------------------------------------------------------------------------------- 1 | import Resolver from 'ember/resolver'; 2 | import config from '../../config/environment'; 3 | 4 | var resolver = Resolver.create(); 5 | 6 | resolver.namespace = { 7 | modulePrefix: config.modulePrefix, 8 | podModulePrefix: config.podModulePrefix 9 | }; 10 | 11 | export default resolver; 12 | -------------------------------------------------------------------------------- /example/.ember-cli: -------------------------------------------------------------------------------- 1 | { 2 | /** 3 | Ember CLI sends analytics information by default. The data is completely 4 | anonymous, but there are times when you might want to disable this behavior. 5 | 6 | Setting `disableAnalytics` to true will prevent any data from being sent. 7 | */ 8 | "disableAnalytics": false 9 | } 10 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | # See http://help.github.com/ignore-files/ for more about ignoring files. 2 | 3 | # compiled output 4 | /dist 5 | /tmp 6 | 7 | # dependencies 8 | /node_modules 9 | /bower_components/* 10 | 11 | # misc 12 | /.sass-cache 13 | /connect.lock 14 | /coverage/* 15 | /libpeerconnection.log 16 | npm-debug.log 17 | testem.log 18 | -------------------------------------------------------------------------------- /example/app/router.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import config from './config/environment'; 3 | 4 | var Router = Ember.Router.extend({ 5 | location: config.locationType 6 | }); 7 | 8 | Router.map(function() { 9 | this.resource('dynamic'); 10 | this.route('crash'); 11 | this.route('redirect'); 12 | this.route('missing', { path: '/*path' }); 13 | }); 14 | 15 | export default Router; 16 | -------------------------------------------------------------------------------- /example/app/templates/redirect.hbs: -------------------------------------------------------------------------------- 1 |4 | When using ember-prerender, this page should redirect you 5 | to Github.com using a 301 redirect. 6 |
7 | 8 |9 | In addition to setting the prerender-specific meta tag for 10 | redirects, you can use Javascript or a meta refresh tag to forward 11 | desktop browsers to the desired URL. 12 |
13 | -------------------------------------------------------------------------------- /example/app/routes/redirect.js: -------------------------------------------------------------------------------- 1 | import Ember from 'ember'; 2 | import Meta from '../mixins/meta'; 3 | import EmberPrerender from '../mixins/ember-prerender'; 4 | 5 | export default Ember.Route.extend(Meta, EmberPrerender, { 6 | enter: function() { 7 | if (!window.isPrerender) { 8 | setTimeout(function() { 9 | window.location.replace("http://github.com/"); 10 | }, 5000); 11 | } 12 | } 13 | }); 14 | -------------------------------------------------------------------------------- /example/app/styles/app.css: -------------------------------------------------------------------------------- 1 | html, body { 2 | margin: 20px; 3 | font-family: sans-serif; 4 | } 5 | 6 | .clear:before, 7 | .clear:after { 8 | content: " "; 9 | display: table; 10 | } 11 | .clear:after { 12 | clear: both; 13 | } 14 | 15 | .clear > .floated { 16 | float: left; 17 | height: 240px; 18 | width: 240px; 19 | background-repeat: no-repeat; 20 | background-size: cover; 21 | background-position: center center; 22 | display: block; 23 | } 24 | -------------------------------------------------------------------------------- /example/app/templates/index.hbs: -------------------------------------------------------------------------------- 1 |{{#link-to 'dynamic'}}Flickr feed{{/link-to}}
4 | 5 |{{#link-to 'crash'}}Crash example{{/link-to}}
8 | 9 |{{#link-to 'redirect'}}Redirect to Github{{/link-to}}
12 | 13 |