Merge pull request #119 from tiwilliam/dash-in-keys

Allow keys with dashes in web UI
This commit is contained in:
Jack Pearkes 2014-05-04 17:37:17 -04:00
commit 34d5c94e5f
5 changed files with 21 additions and 43 deletions

View File

@ -101,7 +101,7 @@
{{#each item in model }} {{#each item in model }}
{{#link-to item.linkToRoute item.urlSafeKey href=false tagName="div" class="panel panel-link panel-short"}} {{#link-to item.linkToRoute item.Key href=false tagName="div" class="panel panel-link panel-short"}}
<div {{bind-attr class=":panel-bar item.isFolder:bg-gray:bg-light-gray" }}></div> <div {{bind-attr class=":panel-bar item.isFolder:bg-gray:bg-light-gray" }}></div>
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"> <h3 class="panel-title">
@ -172,7 +172,7 @@
<div class="col-md-5"> <div class="col-md-5">
<div class="row"> <div class="row">
{{#each item in siblings }} {{#each item in siblings }}
{{#link-to item.linkToRoute item.urlSafeKey href=false tagName="div" class="panel panel-link panel-short"}} {{#link-to item.linkToRoute item.Key href=false tagName="div" class="panel panel-link panel-short"}}
<div {{bind-attr class=":panel-bar item.isFolder:bg-gray:bg-light-gray" }}></div> <div {{bind-attr class=":panel-bar item.isFolder:bg-gray:bg-light-gray" }}></div>
<div class="panel-heading"> <div class="panel-heading">
<h3 class="panel-title"> <h3 class="panel-title">

View File

@ -100,9 +100,9 @@ App.KvShowController.reopen({
}).then(function(response) { }).then(function(response) {
// transition to the right place // transition to the right place
if (newKey.get('isFolder') == true) { if (newKey.get('isFolder') == true) {
controller.transitionToRoute('kv.show', newKey.get('urlSafeKey')); controller.transitionToRoute('kv.show', newKey.get('Key'));
} else { } else {
controller.transitionToRoute('kv.edit', newKey.get('urlSafeKey')); controller.transitionToRoute('kv.edit', newKey.get('Key'));
} }
controller.set('isLoading', false) controller.set('isLoading', false)
}).fail(function(response) { }).fail(function(response) {
@ -151,7 +151,7 @@ App.KvEditController = Ember.Controller.extend({
// Get the parent for the transition back up a level // Get the parent for the transition back up a level
// after the delete // after the delete
var parent = key.get('urlSafeParentKey'); var parent = key.get('parentKey');
// Delete the key // Delete the key
Ember.$.ajax({ Ember.$.ajax({

View File

@ -124,26 +124,13 @@ App.Key = Ember.Object.extend(Ember.Validations.Mixin, {
if (this.get('Key') === undefined) { if (this.get('Key') === undefined) {
return false; return false;
}; };
return (this.get('Key').slice(-1) == "/") return (this.get('Key').slice(-1) === '/')
}.property('Key'),
// The dasherized URL safe version of the key for routing
urlSafeKey: function() {
return this.get('Key').replace(/\//g, "-")
}.property('Key'),
// The dasherized URL safe version of the parent key for routing
urlSafeParentKey: function() {
return this.get('parentKey').replace(/\//g, "-")
}.property('Key'), }.property('Key'),
// Determines what route to link to. If it's a folder, // Determines what route to link to. If it's a folder,
// it will link to kv.show. Otherwise, kv.edit // it will link to kv.show. Otherwise, kv.edit
linkToRoute: function() { linkToRoute: function() {
var key = this.get('urlSafeKey') if (this.get('Key').slice(-1) === '/') {
// If the key ends in - it's a folder
if (key.slice(-1) === "-") {
return 'kv.show' return 'kv.show'
} else { } else {
return 'kv.edit' return 'kv.edit'

View File

@ -19,12 +19,11 @@ App.Router.map(function() {
}); });
// Key/Value // Key/Value
this.resource("kv", { path: "/kv" }, function(){ this.resource("kv", { path: "/kv" }, function(){
// This route just redirects to /-
this.route("index", { path: "/" }); this.route("index", { path: "/" });
// List keys. This is more like an index // List keys. This is more like an index
this.route("show", { path: "/:key" }); this.route("show", { path: "/*key" });
// Edit a specific key // Edit a specific key
this.route("edit", { path: "/:key/edit" }); this.route("edit", { path: "/*key/edit" });
}) })
}); });

View File

@ -2,22 +2,19 @@
// Superclass to be used by all of the main routes below. // Superclass to be used by all of the main routes below.
// //
App.BaseRoute = Ember.Route.extend({ App.BaseRoute = Ember.Route.extend({
rootKey: '',
getParentAndGrandparent: function(key) { getParentAndGrandparent: function(key) {
var parentKey, grandParentKey, isFolder; var parentKey = this.rootKey,
grandParentKey = this.rootKey,
parts = key.split('/');
parts = key.split('/'); if (parts.length > 0) {
// If we are the root, set the parent and grandparent to the
// root.
if (key == "/") {
parentKey = "/";
grandParentKey ="/"
} else {
// Go one level up
parts.pop(); parts.pop();
parentKey = parts.join("/") + "/"; parentKey = parts.join("/") + "/";
}
// Go two levels up if (parts.length > 1) {
parts.pop(); parts.pop();
grandParentKey = parts.join("/") + "/"; grandParentKey = parts.join("/") + "/";
} }
@ -41,9 +38,7 @@ App.BaseRoute = Ember.Route.extend({
// Used to link to keys that are not objects, // Used to link to keys that are not objects,
// like parents and grandParents // like parents and grandParents
linkToKey: function(key) { linkToKey: function(key) {
key = key.replace(/\//g, "-") if (key.slice(-1) === '/' || key === this.rootKey) {
if (key.slice(-1) === "-") {
this.transitionTo('kv.show', key) this.transitionTo('kv.show', key)
} else { } else {
this.transitionTo('kv.edit', key) this.transitionTo('kv.edit', key)
@ -103,18 +98,15 @@ App.DcRoute = App.BaseRoute.extend({
}, },
}); });
App.KvIndexRoute = App.BaseRoute.extend({ App.KvIndexRoute = App.BaseRoute.extend({
// If they hit /kv we want to just move them to /kv/-
beforeModel: function() { beforeModel: function() {
this.transitionTo('kv.show', '-') this.transitionTo('kv.show', this.rootKey)
} }
}); });
App.KvShowRoute = App.BaseRoute.extend({ App.KvShowRoute = App.BaseRoute.extend({
model: function(params) { model: function(params) {
// Convert the key back to the format consul understands var key = params.key;
var key = params.key.replace(/-/g, "/")
var dc = this.modelFor('dc').dc; var dc = this.modelFor('dc').dc;
// Return a promise has with the ?keys for that namespace // Return a promise has with the ?keys for that namespace
@ -145,7 +137,7 @@ App.KvShowRoute = App.BaseRoute.extend({
App.KvEditRoute = App.BaseRoute.extend({ App.KvEditRoute = App.BaseRoute.extend({
model: function(params) { model: function(params) {
var key = params.key.replace(/-/g, "/"); var key = params.key;
var dc = this.modelFor('dc').dc; var dc = this.modelFor('dc').dc;
var parentKeys = this.getParentAndGrandparent(key) var parentKeys = this.getParentAndGrandparent(key)