54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			54 lines
		
	
	
		
			1.0 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict'
 | |
| 
 | |
| /**
 | |
|  * Module dependencies.
 | |
|  */
 | |
| 
 | |
| var https = require('node:https');
 | |
| var path = require('node:path');
 | |
| var extname = path.extname;
 | |
| 
 | |
| /**
 | |
|  * Expose `GithubView`.
 | |
|  */
 | |
| 
 | |
| module.exports = GithubView;
 | |
| 
 | |
| /**
 | |
|  * Custom view that fetches and renders
 | |
|  * remove github templates. You could
 | |
|  * render templates from a database etc.
 | |
|  */
 | |
| 
 | |
| function GithubView(name, options){
 | |
|   this.name = name;
 | |
|   options = options || {};
 | |
|   this.engine = options.engines[extname(name)];
 | |
|   // "root" is the app.set('views') setting, however
 | |
|   // in your own implementation you could ignore this
 | |
|   this.path = '/' + options.root + '/master/' + name;
 | |
| }
 | |
| 
 | |
| /**
 | |
|  * Render the view.
 | |
|  */
 | |
| 
 | |
| GithubView.prototype.render = function(options, fn){
 | |
|   var self = this;
 | |
|   var opts = {
 | |
|     host: 'raw.githubusercontent.com',
 | |
|     port: 443,
 | |
|     path: this.path,
 | |
|     method: 'GET'
 | |
|   };
 | |
| 
 | |
|   https.request(opts, function(res) {
 | |
|     var buf = '';
 | |
|     res.setEncoding('utf8');
 | |
|     res.on('data', function(str){ buf += str });
 | |
|     res.on('end', function(){
 | |
|       self.engine(buf, options, fn);
 | |
|     });
 | |
|   }).end();
 | |
| };
 |