diff --git a/static/application.js b/static/application.js index 5f99ada..370bc74 100644 --- a/static/application.js +++ b/static/application.js @@ -2,8 +2,9 @@ ///// represents a single document -var haste_document = function() { +var haste_document = function(app) { this.locked = false; + this.app = app; }; // Escapes HTML tag characters @@ -18,7 +19,7 @@ haste_document.prototype.htmlEscape = function(s) { // Get this document from the server and lock it here haste_document.prototype.load = function(key, callback, lang) { var _this = this; - $.ajax('/documents/' + key, { + $.ajax(_this.app.baseUrl + 'documents/' + key, { type: 'get', dataType: 'json', success: function(res) { @@ -60,7 +61,7 @@ haste_document.prototype.save = function(data, callback) { } this.data = data; var _this = this; - $.ajax('/documents', { + $.ajax(_this.app.baseUrl + 'documents', { type: 'post', data: data, dataType: 'json', @@ -101,7 +102,8 @@ var haste = function(appName, options) { // If twitter is disabled, hide the button if (!options.twitter) { $('#box2 .twitter').hide(); - } + }; + this.baseUrl = options.baseUrl || '/'; }; // Set the page title - include the appName @@ -148,9 +150,9 @@ haste.prototype.configureKey = function(enable) { // and set up for a new one haste.prototype.newDocument = function(hideHistory) { this.$box.hide(); - this.doc = new haste_document(); + this.doc = new haste_document(this); if (!hideHistory) { - window.history.pushState(null, this.appName, '/'); + window.history.pushState(null, this.appName, this.baseUrl); } this.setTitle(); this.lightKey(); @@ -209,7 +211,7 @@ haste.prototype.loadDocument = function(key) { var parts = key.split('.', 2); // Ask for what we want var _this = this; - _this.doc = new haste_document(); + _this.doc = new haste_document(this); _this.doc.load(parts[0], function(ret) { if (ret) { _this.$code.html(ret.value); @@ -244,7 +246,7 @@ haste.prototype.lockDocument = function() { else if (ret) { _this.$code.html(ret.value); _this.setTitle(ret.key); - var file = '/' + ret.key; + var file = _this.baseUrl + ret.key; if (ret.language) { file += '.' + _this.lookupExtensionByType(ret.language); } @@ -303,7 +305,7 @@ haste.prototype.configureButtons = function() { }, shortcutDescription: 'control + shift + r', action: function() { - window.location.href = '/raw/' + _this.doc.key; + window.location.href = _this.baseUrl + 'raw/' + _this.doc.key; } }, { diff --git a/static/index.html b/static/index.html index 34adb3d..840fb6b 100644 --- a/static/index.html +++ b/static/index.html @@ -17,9 +17,9 @@ var app = null; // Handle pops var handlePop = function(evt) { - var path = evt.target.location.pathname; - if (path === '/') { app.newDocument(true); } - else { app.loadDocument(path.substring(1, path.length)); } + var path = evt.target.location.href; + if (path === app.baseUrl) { app.newDocument(true); } + else { app.loadDocument(path.split('/').slice(-1)[0]); } }; // Set up the pop state to handle loads, skipping the first load // to make chrome behave like others: @@ -31,7 +31,9 @@ }, 1000); // Construct app and load initial path $(function() { - app = new haste('hastebin', { twitter: true }); + var baseUrl = window.location.href.split('/'); + baseUrl = baseUrl.slice(0, baseUrl.length - 1).join('/') + '/'; + app = new haste('hastebin', { twitter: true, baseUrl: baseUrl }); handlePop({ target: window }); }); @@ -44,7 +46,7 @@