import $ from 'jquery'; import AuthenticatedRoute from 'ghost-admin/routes/authenticated'; import ShortcutsRoute from 'ghost-admin/mixins/shortcuts-route'; import PaginationMixin from 'ghost-admin/mixins/pagination'; export default AuthenticatedRoute.extend(ShortcutsRoute, PaginationMixin, { titleToken: 'Content', paginationModel: 'post', paginationSettings: { status: 'all', staticPages: 'all' }, model() { let paginationSettings = this.get('paginationSettings'); return this.get('session.user').then((user) => { if (user.get('isAuthor')) { paginationSettings.filter = paginationSettings.filter ? `${paginationSettings.filter}+author:${user.get('slug')}` : `author:${user.get('slug')}`; } return this.loadFirstPage().then(() => { // using `.filter` allows the template to auto-update when new models are pulled in from the server. // we just need to 'return true' to allow all models by default. return this.store.filter('post', (post) => { if (user.get('isAuthor')) { return post.isAuthoredByUser(user); } return true; }); }); }); }, stepThroughPosts(step) { let currentPost = this.get('controller.currentPost'); let posts = this.get('controller.sortedPosts'); let length = posts.get('length'); let newPosition = posts.indexOf(currentPost) + step; // if we are on the first or last item // just do nothing (desired behavior is to not // loop around) if (newPosition >= length) { return; } else if (newPosition < 0) { return; } this.transitionTo('posts.post', posts.objectAt(newPosition)); }, scrollContent(amount) { let content = $('.js-content-preview'); let scrolled = content.scrollTop(); content.scrollTop(scrolled + 50 * amount); }, shortcuts: { 'up, k': 'moveUp', 'down, j': 'moveDown', left: 'focusList', right: 'focusContent', c: 'newPost' }, actions: { focusList() { this.controller.set('keyboardFocus', 'postList'); }, focusContent() { this.controller.set('keyboardFocus', 'postContent'); }, newPost() { this.transitionTo('editor.new'); }, moveUp() { if (this.controller.get('postContentFocused')) { this.scrollContent(-1); } else { this.stepThroughPosts(-1); } }, moveDown() { if (this.controller.get('postContentFocused')) { this.scrollContent(1); } else { this.stepThroughPosts(1); } } } });