Loading lib/document_handler.js +2 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,6 @@ DocumentHandler.prototype.handlePost = function(request, response) { }); }; // TODO block modifying module.exports = DocumentHandler; lib/static_handler.js +6 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ StaticHandler.contentTypeFor = function(ext) { // Handle a request, and serve back the asset if it exists StaticHandler.prototype.handle = function(incPath, response) { var filePath = this.basePath + (incPath == '/' ? this.defaultPath : incPath); var _this = this; path.exists(filePath, function(exists) { if (exists) { fs.readFile(filePath, function(error, content) { Loading @@ -41,9 +42,11 @@ StaticHandler.prototype.handle = function(incPath, response) { }); } else { winston.warn('file not found', { path: filePath }); response.writeHead(404, { 'content-type': 'application/json' }); response.end(JSON.stringify({ message: 'file not found' })); // TODO 404 if not match regex //winston.warn('file not found', { path: filePath }); //response.writeHead(404, { 'content-type': 'application/json' }); //response.end(JSON.stringify({ message: 'file not found' })); _this.handle('/', response); } }); }; Loading static/application.js +37 −5 Original line number Diff line number Diff line Loading @@ -6,6 +6,28 @@ var heist_document = function() { }; heist_document.prototype.load = function(key, callback) { var _this = this; $.ajax('/documents/' + key, { type: 'get', dataType: 'json', success: function(res) { _this.locked = true; _this.data = res.data; var high = hljs.highlightAuto(res.data); callback({ value: high.value, uuid: key, language: high.language }); } }); }; heist_document.prototype.save = function(data, callback) { if (this.locked) { Loading Loading @@ -60,10 +82,23 @@ heist.prototype.newDocument = function(ext) { this.doc = new heist_document(); this.$box.hide(); this.setTitle(); window.history.pushState(null, this.appName, '/'); this.$textarea.val('').show().focus(); } // Load a document and show it heist.prototype.loadDocument = function(key) { var _this = this; _this.doc = new heist_document(); _this.doc.load(key, function(ret) { if (ret) { _this.$code.html(ret.value); _this.setTitle(ret.language ? ret.language : 'unknown'); _this.$textarea.val('').hide(); _this.$box.show(); } }); }; // Duplicate the current document - only if locked heist.prototype.duplicateDocument = function() { if (this.doc.locked) { Loading @@ -79,7 +114,7 @@ heist.prototype.lockDocument = function() { this.doc.save(this.$textarea.val(), function(ret) { if (ret) { _this.$code.html(ret.value); _this.setTitle(ret.language + '-' + ret.uuid); _this.setTitle(ret.language ? ret.language : 'unknown'); window.history.pushState(null, _this.appName + '-' + ret.uuid, '/' + ret.uuid); _this.$textarea.val('').hide(); _this.$box.show(); Loading Loading @@ -112,11 +147,8 @@ heist.prototype.configureShortcuts = function() { // TODO handle not found gracefully // TODO refuse to lock empty documents // TODO support for browsers without pushstate // TODO support for push state navigation ///// Tab behavior in the textarea - 2 spaces per tab $(function() { $('textarea').keydown(function(evt) { Loading static/index.html +11 −1 Original line number Diff line number Diff line Loading @@ -39,9 +39,19 @@ <script type="text/javascript"> $(function() { // Set up var app = new heist('heist'); app.newDocument(); $('textarea').focus(); // Handle pops window.onpopstate = function(evt) { var path = evt.target.location.pathname; if (path === '/') { app.newDocument(); } else { app.loadDocument(path.substring(1, path.length)); } }; }); </script> Loading Loading
lib/document_handler.js +2 −0 Original line number Diff line number Diff line Loading @@ -41,4 +41,6 @@ DocumentHandler.prototype.handlePost = function(request, response) { }); }; // TODO block modifying module.exports = DocumentHandler;
lib/static_handler.js +6 −3 Original line number Diff line number Diff line Loading @@ -25,6 +25,7 @@ StaticHandler.contentTypeFor = function(ext) { // Handle a request, and serve back the asset if it exists StaticHandler.prototype.handle = function(incPath, response) { var filePath = this.basePath + (incPath == '/' ? this.defaultPath : incPath); var _this = this; path.exists(filePath, function(exists) { if (exists) { fs.readFile(filePath, function(error, content) { Loading @@ -41,9 +42,11 @@ StaticHandler.prototype.handle = function(incPath, response) { }); } else { winston.warn('file not found', { path: filePath }); response.writeHead(404, { 'content-type': 'application/json' }); response.end(JSON.stringify({ message: 'file not found' })); // TODO 404 if not match regex //winston.warn('file not found', { path: filePath }); //response.writeHead(404, { 'content-type': 'application/json' }); //response.end(JSON.stringify({ message: 'file not found' })); _this.handle('/', response); } }); }; Loading
static/application.js +37 −5 Original line number Diff line number Diff line Loading @@ -6,6 +6,28 @@ var heist_document = function() { }; heist_document.prototype.load = function(key, callback) { var _this = this; $.ajax('/documents/' + key, { type: 'get', dataType: 'json', success: function(res) { _this.locked = true; _this.data = res.data; var high = hljs.highlightAuto(res.data); callback({ value: high.value, uuid: key, language: high.language }); } }); }; heist_document.prototype.save = function(data, callback) { if (this.locked) { Loading Loading @@ -60,10 +82,23 @@ heist.prototype.newDocument = function(ext) { this.doc = new heist_document(); this.$box.hide(); this.setTitle(); window.history.pushState(null, this.appName, '/'); this.$textarea.val('').show().focus(); } // Load a document and show it heist.prototype.loadDocument = function(key) { var _this = this; _this.doc = new heist_document(); _this.doc.load(key, function(ret) { if (ret) { _this.$code.html(ret.value); _this.setTitle(ret.language ? ret.language : 'unknown'); _this.$textarea.val('').hide(); _this.$box.show(); } }); }; // Duplicate the current document - only if locked heist.prototype.duplicateDocument = function() { if (this.doc.locked) { Loading @@ -79,7 +114,7 @@ heist.prototype.lockDocument = function() { this.doc.save(this.$textarea.val(), function(ret) { if (ret) { _this.$code.html(ret.value); _this.setTitle(ret.language + '-' + ret.uuid); _this.setTitle(ret.language ? ret.language : 'unknown'); window.history.pushState(null, _this.appName + '-' + ret.uuid, '/' + ret.uuid); _this.$textarea.val('').hide(); _this.$box.show(); Loading Loading @@ -112,11 +147,8 @@ heist.prototype.configureShortcuts = function() { // TODO handle not found gracefully // TODO refuse to lock empty documents // TODO support for browsers without pushstate // TODO support for push state navigation ///// Tab behavior in the textarea - 2 spaces per tab $(function() { $('textarea').keydown(function(evt) { Loading
static/index.html +11 −1 Original line number Diff line number Diff line Loading @@ -39,9 +39,19 @@ <script type="text/javascript"> $(function() { // Set up var app = new heist('heist'); app.newDocument(); $('textarea').focus(); // Handle pops window.onpopstate = function(evt) { var path = evt.target.location.pathname; if (path === '/') { app.newDocument(); } else { app.loadDocument(path.substring(1, path.length)); } }; }); </script> Loading