diff --git a/Gruntfile.js b/Gruntfile.js index 95efb3b1da..bb677f518b 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -425,6 +425,9 @@ var path = require('path'), }, test: { src: ['content/data/ghost-test.db'] + }, + tmp: { + src: ['.tmp/**'] } }, diff --git a/core/client/controllers/application.js b/core/client/controllers/application.js index 74a5a52bce..2e0578effb 100644 --- a/core/client/controllers/application.js +++ b/core/client/controllers/application.js @@ -1,5 +1,5 @@ var ApplicationController = Ember.Controller.extend({ - isLogin: Ember.computed.equal('currentPath', 'login') + isLoggedOut: Ember.computed.match('currentPath', /(signin|signup|forgotten|reset)/) }); export default ApplicationController; \ No newline at end of file diff --git a/core/client/fixtures/posts.js b/core/client/fixtures/posts.js index f378605a29..93cf6bfe77 100644 --- a/core/client/fixtures/posts.js +++ b/core/client/fixtures/posts.js @@ -1,9 +1,135 @@ var posts = [ { - "id": 2, + "id": 4, "uuid": "4dc16b9e-bf90-44c9-97c5-40a0a81e8297", - "title": "Ghost Ember Demo Post", - "slug": "ghost-ember-demo-post", + "title": "This post is featured", + "slug": "this-post-is-featured", + "markdown": "Lorem **ipsum** dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.", + "html": "
Lorem ipsum<\/strong> dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.<\/p>",
+ "image": null,
+ "featured": 1,
+ "page": 0,
+ "status": "published",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "author_id": 1,
+ "created_at": "2014-02-15T23:27:08.000Z",
+ "created_by": 1,
+ "updated_at": "2014-02-15T23:27:08.000Z",
+ "updated_by": 1,
+ "published_at": "2014-02-15T23:27:08.000Z",
+ "published_by": 1,
+ "author": {
+ "id": 1,
+ "uuid": "ba9c67e4-8046-4b8c-9349-0eed3cca7529",
+ "name": "Bill Murray",
+ "slug": "manuel_mitasch",
+ "email": "manuel@cms.mine.nu",
+ "image": null,
+ "cover": null,
+ "bio": null,
+ "website": null,
+ "location": null,
+ "accessibility": null,
+ "status": "active",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "created_at": "2014-02-15T20:02:25.000Z",
+ "updated_at": "2014-02-15T20:02:25.000Z"
+ },
+ "user": {
+ "id": 1,
+ "uuid": "ba9c67e4-8046-4b8c-9349-0eed3cca7529",
+ "name": "manuel_mitasch",
+ "slug": "manuel_mitasch",
+ "email": "manuel@cms.mine.nu",
+ "image": null,
+ "cover": null,
+ "bio": null,
+ "website": null,
+ "location": null,
+ "accessibility": null,
+ "status": "active",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "created_at": "2014-02-15T20:02:25.000Z",
+ "updated_at": "2014-02-15T20:02:25.000Z"
+ },
+ "tags": [
+
+ ]
+ },
+ {
+ "id": 3,
+ "uuid": "4dc16b9e-bf90-44c9-97c5-40a0a81e8297",
+ "title": "Example page entry",
+ "slug": "example-page-entry",
+ "markdown": "Lorem **ipsum** dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.",
+ "html": " Lorem ipsum<\/strong> dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.<\/p>",
+ "image": null,
+ "featured": 0,
+ "page": 1,
+ "status": "published",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "author_id": 1,
+ "created_at": "2014-02-15T23:27:08.000Z",
+ "created_by": 1,
+ "updated_at": "2014-02-15T23:27:08.000Z",
+ "updated_by": 1,
+ "published_at": null,
+ "published_by": null,
+ "author": {
+ "id": 1,
+ "uuid": "ba9c67e4-8046-4b8c-9349-0eed3cca7529",
+ "name": "Slimer",
+ "slug": "manuel_mitasch",
+ "email": "manuel@cms.mine.nu",
+ "image": null,
+ "cover": null,
+ "bio": null,
+ "website": null,
+ "location": null,
+ "accessibility": null,
+ "status": "active",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "created_at": "2014-02-15T20:02:25.000Z",
+ "updated_at": "2014-02-15T20:02:25.000Z"
+ },
+ "user": {
+ "id": 1,
+ "uuid": "ba9c67e4-8046-4b8c-9349-0eed3cca7529",
+ "name": "manuel_mitasch",
+ "slug": "manuel_mitasch",
+ "email": "manuel@cms.mine.nu",
+ "image": null,
+ "cover": null,
+ "bio": null,
+ "website": null,
+ "location": null,
+ "accessibility": null,
+ "status": "active",
+ "language": "en_US",
+ "meta_title": null,
+ "meta_description": null,
+ "created_at": "2014-02-15T20:02:25.000Z",
+ "updated_at": "2014-02-15T20:02:25.000Z"
+ },
+ "tags": [
+
+ ]
+ },
+ {
+ "id": 2,
+ "uuid": "4dc1cb9e-bf90-44c9-97c5-40a8381e8297",
+ "title": "Dummy draft post",
+ "slug": "dummy-draft-post",
"markdown": "Lorem **ipsum** dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.",
"html": " Lorem ipsum<\/strong> dolor sit amet, consectetur adipiscing elit. Fusce id felis nec est suscipit scelerisque vitae eu arcu. Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Aliquam erat volutpat. Sed pellentesque metus vel velit tincidunt aliquet. Nunc condimentum tempus convallis. Sed tincidunt, leo et congue blandit, lorem tortor imperdiet sapien, et porttitor turpis nisl sed tellus. In ultrices urna sit amet mauris suscipit adipiscing.<\/p>",
"image": null,
diff --git a/core/client/helpers/count-words.js b/core/client/helpers/count-words.js
index 4b024c45f3..92fda464f7 100644
--- a/core/client/helpers/count-words.js
+++ b/core/client/helpers/count-words.js
@@ -1,7 +1,7 @@
import count from 'ghost/utils/word-count';
var countWords = Ember.Handlebars.makeBoundHelper(function (markdown) {
- return count(markdown);
+ return count(markdown || '');
});
export default countWords;
\ No newline at end of file
diff --git a/core/client/helpers/format-markdown.js b/core/client/helpers/format-markdown.js
index da4f3964e5..4093c58ff4 100644
--- a/core/client/helpers/format-markdown.js
+++ b/core/client/helpers/format-markdown.js
@@ -2,7 +2,7 @@
var showdown = new Showdown.converter();
var formatMarkdown = Ember.Handlebars.makeBoundHelper(function (markdown) {
- return new Handlebars.SafeString(showdown.makeHtml(markdown));
+ return new Handlebars.SafeString(showdown.makeHtml(markdown || ''));
});
export default formatMarkdown;
\ No newline at end of file
diff --git a/core/client/router.js b/core/client/router.js
index c972622c72..fbddf20f09 100755
--- a/core/client/router.js
+++ b/core/client/router.js
@@ -9,12 +9,21 @@ Router.reopen({
});
Router.map(function () {
- this.route('login', { path: '/signin' });
+ this.route('signin');
+ this.route('signup');
+ this.route('forgotten');
+ this.route('reset');
this.resource('posts', { path: '/' }, function () {
this.route('post', { path: ':post_id' });
});
this.resource('editor', { path: '/editor/:post_id' });
this.route('new', { path: '/editor' });
+ this.resource('settings', function () {
+ this.route('general');
+ this.route('user');
+ this.route('debug');
+ this.route('apps');
+ });
});
export default Router;
diff --git a/core/client/routes/authenticated.js b/core/client/routes/authenticated.js
index 4ab3ba3fbc..40e2287a58 100644
--- a/core/client/routes/authenticated.js
+++ b/core/client/routes/authenticated.js
@@ -2,7 +2,7 @@ var AuthenticatedRoute = Ember.Route.extend({
actions: {
error: function (error) {
if (error.jqXHR.status === 401) {
- this.transitionTo('login');
+ this.transitionTo('signin');
}
}
}
diff --git a/core/client/routes/forgotten.js b/core/client/routes/forgotten.js
new file mode 100644
index 0000000000..77f63825cd
--- /dev/null
+++ b/core/client/routes/forgotten.js
@@ -0,0 +1,7 @@
+import styleBody from 'ghost/mixins/style-body';
+
+var ForgottenRoute = Ember.Route.extend(styleBody, {
+ classNames: ['ghost-forgotten']
+});
+
+export default ForgottenRoute;
diff --git a/core/client/routes/new.js b/core/client/routes/new.js
new file mode 100644
index 0000000000..eaebfd91af
--- /dev/null
+++ b/core/client/routes/new.js
@@ -0,0 +1,12 @@
+import styleBody from 'ghost/mixins/style-body';
+import AuthenticatedRoute from 'ghost/routes/authenticated';
+
+var NewRoute = AuthenticatedRoute.extend(styleBody, {
+ classNames: ['editor'],
+
+ renderTemplate: function () {
+ this.render('editor');
+ }
+});
+
+export default NewRoute;
\ No newline at end of file
diff --git a/core/client/routes/reset.js b/core/client/routes/reset.js
new file mode 100644
index 0000000000..8f7b919c08
--- /dev/null
+++ b/core/client/routes/reset.js
@@ -0,0 +1,7 @@
+import styleBody from 'ghost/mixins/style-body';
+
+var ResetRoute = Ember.Route.extend(styleBody, {
+ classNames: ['ghost-reset']
+});
+
+export default ResetRoute;
diff --git a/core/client/routes/settings.js b/core/client/routes/settings.js
new file mode 100644
index 0000000000..df7e782f1e
--- /dev/null
+++ b/core/client/routes/settings.js
@@ -0,0 +1,8 @@
+import styleBody from 'ghost/mixins/style-body';
+import AuthenticatedRoute from 'ghost/routes/authenticated';
+
+var SettingsRoute = AuthenticatedRoute.extend(styleBody, {
+ classNames: ['settings']
+});
+
+export default SettingsRoute;
\ No newline at end of file
diff --git a/core/client/routes/settings/index.js b/core/client/routes/settings/index.js
new file mode 100644
index 0000000000..7d20725dfb
--- /dev/null
+++ b/core/client/routes/settings/index.js
@@ -0,0 +1,8 @@
+var SettingsIndexRoute = Ember.Route.extend({
+ // redirect to general tab
+ redirect: function () {
+ this.transitionTo('settings.general');
+ }
+});
+
+export default SettingsIndexRoute;
\ No newline at end of file
diff --git a/core/client/routes/login.js b/core/client/routes/signin.js
similarity index 92%
rename from core/client/routes/login.js
rename to core/client/routes/signin.js
index fae8160857..ed4da83e91 100644
--- a/core/client/routes/login.js
+++ b/core/client/routes/signin.js
@@ -3,7 +3,7 @@ import styleBody from 'ghost/mixins/style-body';
var isEmpty = Ember.isEmpty;
-var LoginRoute = Ember.Route.extend(styleBody, {
+var SigninRoute = Ember.Route.extend(styleBody, {
classNames: ['ghost-login'],
actions: {
@@ -29,4 +29,4 @@ var LoginRoute = Ember.Route.extend(styleBody, {
}
});
-export default LoginRoute;
\ No newline at end of file
+export default SigninRoute;
diff --git a/core/client/routes/signup.js b/core/client/routes/signup.js
new file mode 100644
index 0000000000..0e4f00bdcb
--- /dev/null
+++ b/core/client/routes/signup.js
@@ -0,0 +1,7 @@
+import styleBody from 'ghost/mixins/style-body';
+
+var SignupRoute = Ember.Route.extend(styleBody, {
+ classNames: ['ghost-signup']
+});
+
+export default SignupRoute;
diff --git a/core/client/templates/-floating-header.hbs b/core/client/templates/-floating-header.hbs
index 974b7555f8..b5b25209e0 100644
--- a/core/client/templates/-floating-header.hbs
+++ b/core/client/templates/-floating-header.hbs
@@ -1,12 +1,14 @@