Automatically add file extensions
This commit is contained in:
parent
344d1fec7b
commit
9378f2b2e4
1
TODO.md
1
TODO.md
@ -1,2 +1 @@
|
|||||||
* Add file extensions ourselves to push state
|
|
||||||
* add feedback for errors to UI - esp. too long
|
* add feedback for errors to UI - esp. too long
|
||||||
|
@ -120,6 +120,9 @@ haste.prototype.newDocument = function(hideHistory) {
|
|||||||
};
|
};
|
||||||
|
|
||||||
// Map of common extensions
|
// Map of common extensions
|
||||||
|
// Note: this list does not need to include anything that IS its extension,
|
||||||
|
// due to the behavior of lookupTypeByExtension and lookupExtensionByType
|
||||||
|
// Note: optimized for lookupTypeByExtension
|
||||||
haste.extensionMap = {
|
haste.extensionMap = {
|
||||||
rb: 'ruby', py: 'python', pl: 'perl', php: 'php', scala: 'scala', go: 'go',
|
rb: 'ruby', py: 'python', pl: 'perl', php: 'php', scala: 'scala', go: 'go',
|
||||||
xml: 'xml', html: 'xml', htm: 'xml', css: 'css', js: 'javascript', vbs: 'vbscript',
|
xml: 'xml', html: 'xml', htm: 'xml', css: 'css', js: 'javascript', vbs: 'vbscript',
|
||||||
@ -129,10 +132,19 @@ haste.extensionMap = {
|
|||||||
md: 'markdown'
|
md: 'markdown'
|
||||||
};
|
};
|
||||||
|
|
||||||
// Map an extension to a language
|
// Look up the extension preferred for a type
|
||||||
haste.prototype.lookupExtension = function(ext) {
|
// If not found, return the type itself - which we'll place as the extension
|
||||||
var match = haste.extensionMap[ext];
|
haste.prototype.lookupExtensionByType = function(type) {
|
||||||
return match; // if not found, will auto-detect
|
for (var key in haste.extensionMap) {
|
||||||
|
if (haste.extensionMap[key] === type) return key;
|
||||||
|
}
|
||||||
|
return type;
|
||||||
|
};
|
||||||
|
|
||||||
|
// Look up the type for a given extension
|
||||||
|
// If not found, return the extension - which we'll attempt to use as the type
|
||||||
|
haste.prototype.lookupTypeByExtension = function(ext) {
|
||||||
|
return haste.extensionMap[ext] || ext;
|
||||||
};
|
};
|
||||||
|
|
||||||
// Load a document and show it
|
// Load a document and show it
|
||||||
@ -145,11 +157,14 @@ haste.prototype.loadDocument = function(key) {
|
|||||||
_this.doc.load(parts[0], function(ret) {
|
_this.doc.load(parts[0], function(ret) {
|
||||||
if (ret) {
|
if (ret) {
|
||||||
_this.$code.html(ret.value);
|
_this.$code.html(ret.value);
|
||||||
var title = ret.key;
|
_this.setTitle(ret.key);
|
||||||
|
var file = '/' + ret.key;
|
||||||
if (ret.language) {
|
if (ret.language) {
|
||||||
title += ' - ' + ret.language;
|
file += '.' + _this.lookupExtensionByType(ret.language);
|
||||||
|
}
|
||||||
|
if (window.location.path != file) {
|
||||||
|
window.history.pushState(null, _this.appName + '-' + ret.key, file);
|
||||||
}
|
}
|
||||||
_this.setTitle(title);
|
|
||||||
_this.fullKey();
|
_this.fullKey();
|
||||||
_this.$textarea.val('').hide();
|
_this.$textarea.val('').hide();
|
||||||
_this.$box.show().focus();
|
_this.$box.show().focus();
|
||||||
@ -157,7 +172,7 @@ haste.prototype.loadDocument = function(key) {
|
|||||||
else {
|
else {
|
||||||
_this.newDocument();
|
_this.newDocument();
|
||||||
}
|
}
|
||||||
}, this.lookupExtension(parts[1]));
|
}, this.lookupTypeByExtension(parts[1]));
|
||||||
};
|
};
|
||||||
|
|
||||||
// Duplicate the current document - only if locked
|
// Duplicate the current document - only if locked
|
||||||
@ -175,12 +190,12 @@ haste.prototype.lockDocument = function() {
|
|||||||
this.doc.save(this.$textarea.val(), function(ret) {
|
this.doc.save(this.$textarea.val(), function(ret) {
|
||||||
if (ret) {
|
if (ret) {
|
||||||
_this.$code.html(ret.value);
|
_this.$code.html(ret.value);
|
||||||
var title = ret.key;
|
_this.setTitle(ret.key);
|
||||||
|
var file = '/' + ret.key;
|
||||||
if (ret.language) {
|
if (ret.language) {
|
||||||
title += ' - ' + ret.language;
|
file += '.' + _this.lookupExtensionByType(ret.language);
|
||||||
}
|
}
|
||||||
_this.setTitle(title);
|
window.history.pushState(null, _this.appName + '-' + ret.key, file);
|
||||||
window.history.pushState(null, _this.appName + '-' + ret.key, '/' + ret.key);
|
|
||||||
_this.fullKey();
|
_this.fullKey();
|
||||||
_this.$textarea.val('').hide();
|
_this.$textarea.val('').hide();
|
||||||
_this.$box.show().focus();
|
_this.$box.show().focus();
|
||||||
|
2
static/application.min.js
vendored
2
static/application.min.js
vendored
File diff suppressed because one or more lines are too long
Loading…
Reference in New Issue
Block a user