1
0
Fork 0
mirror of https://github.com/documize/community.git synced 2025-07-27 17:19:42 +02:00

Merge pull request #57 from documize/refactor-folder-routers

Refactor space routes
This commit is contained in:
Harvey Kandola 2016-11-07 10:30:34 -08:00 committed by GitHub
commit cc353fb53c
33 changed files with 710 additions and 778 deletions

View file

@ -8,7 +8,7 @@ The mission is to bring software dev inspired features (refactoring, testing, li
## Latest version ## Latest version
v0.29.0 v0.30.0
## OS Support ## OS Support

View file

@ -1,15 +0,0 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import Ember from 'ember';
export default Ember.Component.extend({
});

View file

@ -52,22 +52,6 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, {
this.destroyTooltips(); this.destroyTooltips();
}, },
// positionToc() {
// let s = $(".document-structure");
// let pos = s.position();
//
// $(window).scroll(_.throttle(function() {
// let windowpos = $(window).scrollTop();
// if (windowpos - 200 >= pos.top) {
// s.addClass("stuck-toc");
// s.css('width', s.parent().width());
// } else {
// s.removeClass("stuck-toc");
// s.css('width', 'auto');
// }
// }, 50));
// },
onDocumentPageAdded(pageId) { onDocumentPageAdded(pageId) {
this.send('onEntryClick', pageId); this.send('onEntryClick', pageId);
}, },

View file

@ -37,6 +37,10 @@ export default Ember.Component.extend(TooltipMixin, NotifierMixin, {
init() { init() {
this._super(...arguments); this._super(...arguments);
if (this.get('noFolder')) {
return;
}
let _this = this; let _this = this;
this.get('templateService').getSavedTemplates().then(function(saved) { this.get('templateService').getSavedTemplates().then(function(saved) {
let emptyTemplate = { let emptyTemplate = {
@ -57,12 +61,20 @@ export default Ember.Component.extend(TooltipMixin, NotifierMixin, {
}, },
didRender() { didRender() {
if (this.get('noFolder')) {
return;
}
if (this.get('folderService').get('canEditCurrentFolder')) { if (this.get('folderService').get('canEditCurrentFolder')) {
this.addTooltip(document.getElementById("start-document-button")); this.addTooltip(document.getElementById("start-document-button"));
} }
}, },
didInsertElement() { didInsertElement() {
if (this.get('noFolder')) {
return;
}
this.eventBus.subscribe('resized', this, 'positionTool'); this.eventBus.subscribe('resized', this, 'positionTool');
this.eventBus.subscribe('scrolled', this, 'positionTool'); this.eventBus.subscribe('scrolled', this, 'positionTool');
}, },

View file

@ -24,13 +24,18 @@ export default Ember.Component.extend(NotifierMixin, {
this.setupImport(); this.setupImport();
}, },
setupImport() { willDestroyElement() {
// already done init?
if (is.not.null(this.get('drop'))) {
if (is.not.null(this.get('drop'))) { if (is.not.null(this.get('drop'))) {
this.get('drop').destroy(); this.get('drop').destroy();
this.set('drop', null); this.set('drop', null);
} }
},
setupImport() {
// already done init?
if (is.not.null(this.get('drop'))) {
this.get('drop').destroy();
this.set('drop', null);
} }
let self = this; let self = this;

View file

@ -1,14 +0,0 @@
// Copyright 2016 Documize Inc. <legal@documize.com>. All rights reserved.
//
// This software (Documize Community Edition) is licensed under
// GNU AGPL v3 http://www.gnu.org/licenses/agpl-3.0.en.html
//
// You can operate outside the AGPL restrictions by purchasing
// Documize Enterprise Edition and obtaining a commercial license
// by contacting <sales@documize.com>.
//
// https://documize.com
import Ember from 'ember';
export default Ember.Component.extend({});

View file

@ -38,7 +38,7 @@ export default Ember.Controller.extend({
this.get('session').authenticate('authenticator:documize', creds) this.get('session').authenticate('authenticator:documize', creds)
.then((response) => { .then((response) => {
this.get('audit').record("logged-in"); this.get('audit').record("logged-in");
this.transitionToRoute('folders.folder'); this.transitionToRoute('folders');
return response; return response;
}).catch(() => { }).catch(() => {
this.set('invalidCredentials', true); this.set('invalidCredentials', true);

View file

@ -24,7 +24,11 @@ export default Ember.Route.extend({
if (config.environment === 'test') { if (config.environment === 'test') {
this.transitionTo('auth.login'); this.transitionTo('auth.login');
} else { } else {
window.document.location = this.get("appMeta.allowAnonymousAccess") ? "/" : "/auth/login"; if (this.get("appMeta.allowAnonymousAccess")) {
this.transitionTo('folders');
} else {
this.transitionTo('auth.login');
}
} }
} }
}); });

View file

@ -11,4 +11,5 @@
import Ember from 'ember'; import Ember from 'ember';
export default Ember.Route.extend({}); export default Ember.Route.extend({
});

View file

@ -17,7 +17,7 @@ export default Ember.Route.extend({
model({ token }) { model({ token }) {
this.get("session").authenticate('authenticator:documize', decodeURIComponent(token)) this.get("session").authenticate('authenticator:documize', decodeURIComponent(token))
.then(() => { .then(() => {
this.transitionTo('folders.folder'); this.transitionTo('folders');
}, () => { }, () => {
this.transitionTo('auth.login'); this.transitionTo('auth.login');
console.log(">>>>> Documize SSO failure"); console.log(">>>>> Documize SSO failure");

View file

@ -17,7 +17,7 @@
{{#each folders as |folder|}} {{#each folders as |folder|}}
<tr> <tr>
<td class="bordered"> <td class="bordered">
{{#link-to 'folders.folder' folder.id folder.slug class="alt"}}{{folder.name}}{{/link-to}} {{#link-to 'folder' folder.id folder.slug class="alt"}}{{folder.name}}{{/link-to}}
</td> </td>
<td class="bordered"> <td class="bordered">
{{#each folder.sharedWith as |person|}} {{#each folder.sharedWith as |person|}}

View file

@ -239,7 +239,7 @@ export default Ember.Controller.extend(NotifierMixin, {
this.get('documentService').deleteDocument(this.get('model.id')).then(function () { this.get('documentService').deleteDocument(this.get('model.id')).then(function () {
self.audit.record("deleted-page"); self.audit.record("deleted-page");
self.send("showNotification", "Deleted"); self.send("showNotification", "Deleted");
self.transitionToRoute('folders.folder', self.get('folder.id'), self.get('folder.slug')); self.transitionToRoute('folder', self.get('folder.id'), self.get('folder.slug'));
}); });
} }
} }

View file

@ -10,7 +10,7 @@
// https://documize.com // https://documize.com
import Ember from 'ember'; import Ember from 'ember';
import NotifierMixin from '../../../mixins/notifier'; import NotifierMixin from '../../mixins/notifier';
export default Ember.Controller.extend(NotifierMixin, { export default Ember.Controller.extend(NotifierMixin, {
documentService: Ember.inject.service('document'), documentService: Ember.inject.service('document'),
@ -71,7 +71,7 @@ export default Ember.Controller.extend(NotifierMixin, {
this.get('folderService').add({ name: folder }).then(function (newFolder) { this.get('folderService').add({ name: folder }).then(function (newFolder) {
self.get('folderService').setCurrentFolder(newFolder); self.get('folderService').setCurrentFolder(newFolder);
self.transitionToRoute('folders.folder', newFolder.get('id'), newFolder.get('slug')); self.transitionToRoute('folder', newFolder.get('id'), newFolder.get('slug'));
}); });
} }
} }

View file

@ -10,5 +10,20 @@
// https://documize.com // https://documize.com
import Ember from 'ember'; import Ember from 'ember';
import NotifierMixin from '../../mixins/notifier';
export default Ember.Controller.extend({}); export default Ember.Controller.extend(NotifierMixin, {
folderService: Ember.inject.service('folder'),
actions: {
onFolderAdd(folder) {
let self = this;
this.showNotification("Added");
this.get('folderService').add({ name: folder }).then(function (newFolder) {
self.get('folderService').setCurrentFolder(newFolder);
self.transitionToRoute('folder', newFolder.get('id'), newFolder.get('slug'));
});
}
}
});

View file

@ -11,74 +11,11 @@
import Ember from 'ember'; import Ember from 'ember';
import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin'; import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-route-mixin';
import { isNotFoundError } from 'ember-ajax/errors';
const {
isPresent
} = Ember;
export default Ember.Route.extend(AuthenticatedRouteMixin, { export default Ember.Route.extend(AuthenticatedRouteMixin, {
folderService: Ember.inject.service('folder'), folderService: Ember.inject.service('folder'),
localStorage: Ember.inject.service(),
folder: {},
model: function () { model: function () {
return this.get('folderService').getAll(); return this.get('folderService').getAll();
},
afterModel: function (model) {
let params = this.paramsFor('folders.folder');
if (is.empty(params)) {
let lastFolder = this.get('localStorage').getSessionItem("folder");
let self = this;
//If folder lastFolder is defined
if (isPresent(lastFolder)) {
return this.get('folderService').getFolder(lastFolder).then((folder) => {
//if Response is null or undefined redirect to login else transitionTo dashboard
if (Ember.isNone(folder)) {
self.get('localStorage').clearSessionItem("folder");
this.transitionTo('application');
}
Ember.set(this, 'folder', folder);
this.transitionTo('folders.folder', folder.get('id'), folder.get('slug'));
}).catch(() => {
//if there was an error redirect to login
self.get('localStorage').clearSessionItem("folder");
this.transitionTo('application');
});
}
// If model has any folders redirect to dashboard
if (model.get('length') > 0) {
let folder = model[0];
Ember.set(this, 'folder', folder);
this.transitionTo('folders.folder', folder.get('id'), folder.get('slug'));
}
}
//If folder route has params
if (isPresent(params)) {
let self = this;
let folderId = this.paramsFor('folders.folder').folder_id;
return this.get('folderService').getFolder(folderId).then((folder) => {
Ember.set(this, 'folder', folder);
}).catch(function (error) {
if (isNotFoundError(error)) {
// handle 404 errors here
self.transitionTo('application');
}
});
}
this.browser.setMetaDescription();
},
setupController(controller, model) {
controller.set('model', model);
controller.set('folder', this.folder);
} }
}); });

View file

@ -1 +1,8 @@
{{outlet}} {{layout/zone-navigation}}
{{#layout/zone-sidebar}}
{{folder/folders-list folders=model noFolder=true onFolderAdd=(action 'onFolderAdd')}}
{{/layout/zone-sidebar}}
{{#layout/zone-content}}
{{/layout/zone-content}}

View file

@ -10,7 +10,7 @@
// https://documize.com // https://documize.com
import Ember from 'ember'; import Ember from 'ember';
import NotifierMixin from '../../../mixins/notifier'; import NotifierMixin from '../../mixins/notifier';
const { const {
inject: { service } inject: { service }
@ -119,7 +119,7 @@ export default Ember.Route.extend(NotifierMixin, {
this.get('folderService').getFolder(moveId).then((folder) => { this.get('folderService').getFolder(moveId).then((folder) => {
this.get('folderService').setCurrentFolder(folder); this.get('folderService').setCurrentFolder(folder);
this.transitionTo('folders.folder', folder.get('id'), folder.get('slug')); this.transitionTo('folder', folder.get('id'), folder.get('slug'));
}); });
}); });
}, },

View file

@ -2,9 +2,7 @@
{{#layout/zone-sidebar}} {{#layout/zone-sidebar}}
{{#layout/sidebar-intro message='Rename, delete, share and manage space permissions'}} {{#layout/sidebar-intro message='Rename, delete, share and manage space permissions'}}
{{#link-to 'folders.folder' model.id model.slug}} {{back-to-space folder=model}}
<i class="material-icons">arrow_back</i>&nbsp;{{model.name}}
{{/link-to}}
{{/layout/sidebar-intro}} {{/layout/sidebar-intro}}
<div class="sidebar-menu"> <div class="sidebar-menu">
<ul class="options"> <ul class="options">

View file

@ -19,14 +19,15 @@ var Router = Ember.Router.extend({
export default Router.map(function () { export default Router.map(function () {
this.route('folders', { this.route('folders', {
path: '/' path: '/'
}, function () { });
this.route('folder', { this.route('folder', {
path: 's/:folder_id/:folder_slug' path: 's/:folder_id/:folder_slug'
}); });
this.route('settings', { this.route('settings', {
path: 's/:folder_id/:folder_slug/settings' path: 's/:folder_id/:folder_slug/settings'
}); });
});
this.route('document', { this.route('document', {
path: 's/:folder_id/:folder_slug/d/:document_id/:document_slug' path: 's/:folder_id/:folder_slug/d/:document_id/:document_slug'

View file

@ -12,12 +12,13 @@
import Ember from 'ember'; import Ember from 'ember';
import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin'; import ApplicationRouteMixin from 'ember-simple-auth/mixins/application-route-mixin';
import netUtil from '../utils/net'; import netUtil from '../utils/net';
import TooltipMixin from '../mixins/tooltip';
const { const {
inject: { service } inject: { service }
} = Ember; } = Ember;
export default Ember.Route.extend(ApplicationRouteMixin, { export default Ember.Route.extend(ApplicationRouteMixin, TooltipMixin, {
appMeta: service(), appMeta: service(),
session: service(), session: service(),
@ -34,10 +35,13 @@ export default Ember.Route.extend(ApplicationRouteMixin, {
actions: { actions: {
willTransition: function( /*transition*/ ) { willTransition: function( /*transition*/ ) {
Mousetrap.reset(); Mousetrap.reset();
this.destroyTooltips();
}, },
error(error /*, transition*/ ) { error(error /*, transition*/ ) {
if (error) { if (error) {
console.log(error);
if (netUtil.isAjaxAccessError(error)) { if (netUtil.isAjaxAccessError(error)) {
localStorage.clear(); localStorage.clear();
return this.transitionTo('auth.login'); return this.transitionTo('auth.login');

View file

@ -1,5 +0,0 @@
{{#link-to 'application'}}
<div class="zone-sidebar-title">
<i class="material-icons">arrow_back</i>&nbsp;HOME
</div>
{{/link-to}}

View file

@ -1,4 +1,4 @@
{{#link-to 'folders.folder' folder.id folder.slug}} {{#link-to 'folder' folder.id folder.slug}}
<div class="zone-sidebar-title"> <div class="zone-sidebar-title">
<i class="material-icons">arrow_back</i>&nbsp;{{folder.name}} <i class="material-icons">arrow_back</i>&nbsp;{{folder.name}}
</div> </div>

View file

@ -29,13 +29,13 @@
{{/dropdown-dialog}} {{/dropdown-dialog}}
{{else}} {{else}}
{{#if isFolderOwner}} {{#if isFolderOwner}}
{{#link-to 'folders.settings' folder.id folder.slug (query-params tab="tabShare")}} {{#link-to 'settings' folder.id folder.slug (query-params tab="tabShare")}}
<div class="round-button-mono" id="folder-share-button" data-tooltip="Share" data-tooltip-position="top center"> <div class="round-button-mono" id="folder-share-button" data-tooltip="Share" data-tooltip-position="top center">
<i class="material-icons color-gray">share</i> <i class="material-icons color-gray">share</i>
</div> </div>
{{/link-to}} {{/link-to}}
<div class="button-gap"></div> <div class="button-gap"></div>
{{#link-to 'folders.settings' folder.id folder.slug}} {{#link-to 'settings' folder.id folder.slug}}
<div class="round-button-mono" id="folder-settings-button" data-tooltip="Settings" data-tooltip-position="top center"> <div class="round-button-mono" id="folder-settings-button" data-tooltip="Settings" data-tooltip-position="top center">
<i class="material-icons color-gray">settings</i> <i class="material-icons color-gray">settings</i>
</div> </div>

View file

@ -1,4 +1,5 @@
<div class="space-tools"> {{#unless noFolder}}
<div class="space-tools">
{{#if showingDocument}} {{#if showingDocument}}
{{layout/sidebar-intro title=folder.name message='Import files or start with a template'}} {{layout/sidebar-intro title=folder.name message='Import files or start with a template'}}
<div {{action 'showList'}} id="cancel-tool" class="round-button round-button-mono button-white doc-tool"> <div {{action 'showList'}} id="cancel-tool" class="round-button round-button-mono button-white doc-tool">
@ -24,7 +25,8 @@
</div> </div>
{{/if}} {{/if}}
{{/if}} {{/if}}
</div> </div>
{{/unless}}
<div class="folders-list"> <div class="folders-list">
{{#if showingList}} {{#if showingList}}
@ -52,7 +54,7 @@
{{/unless}} {{/unless}}
<ul class="list"> <ul class="list">
{{#each publicFolders as |folder|}} {{#each publicFolders as |folder|}}
{{#link-to 'folders.folder' folder.id folder.slug class="link" activeClass='selected' }} {{#link-to 'folder' folder.id folder.slug class="link" activeClass='selected' }}
<li class="item">{{ folder.name }}</li> <li class="item">{{ folder.name }}</li>
{{/link-to}} {{/link-to}}
{{/each}} {{/each}}
@ -67,7 +69,7 @@
{{/unless}} {{/unless}}
<ul class="list"> <ul class="list">
{{#each protectedFolders as |folder|}} {{#each protectedFolders as |folder|}}
{{#link-to 'folders.folder' folder.id folder.slug class="link" activeClass='selected' }} {{#link-to 'folder' folder.id folder.slug class="link" activeClass='selected' }}
<li class="item">{{ folder.name }}</li> <li class="item">{{ folder.name }}</li>
{{/link-to}} {{/link-to}}
{{/each}} {{/each}}
@ -81,7 +83,7 @@
{{/unless}} {{/unless}}
<ul class="list"> <ul class="list">
{{#each privateFolders as |folder|}} {{#each privateFolders as |folder|}}
{{#link-to 'folders.folder' folder.id folder.slug class="link" activeClass='selected' }} {{#link-to 'folder' folder.id folder.slug class="link" activeClass='selected' }}
<li class="item">{{ folder.name }}</li> <li class="item">{{ folder.name }}</li>
{{/link-to}} {{/link-to}}
{{/each}} {{/each}}

View file

@ -1,7 +0,0 @@
<div class="zone-container">
<div class="container-fluid">
<div class="row">
{{yield}}
</div>
</div>
</div>

View file

@ -8,7 +8,7 @@
</li> </li>
{{else}} {{else}}
<li> <li>
{{#link-to 'application' class='title'}} {{#link-to 'folders' class='title'}}
<div class="filled-tool" title={{appMeta.title}}> <div class="filled-tool" title={{appMeta.title}}>
<i class="material-icons">apps</i> <i class="material-icons">apps</i>
</div> </div>

View file

@ -32,8 +32,8 @@ module.exports = function (environment) {
}, },
'ember-simple-auth': { 'ember-simple-auth': {
authenticationRoute: 'auth.login', authenticationRoute: 'auth.login',
routeAfterAuthentication: 'folders.folder', routeAfterAuthentication: 'folders',
routeIfAlreadyAuthenticated: 'folders.folder' routeIfAlreadyAuthenticated: 'folders'
}, },
APP: { APP: {
// Allows to disable audit service in tests // Allows to disable audit service in tests
@ -45,6 +45,9 @@ module.exports = function (environment) {
if (environment === 'development') { if (environment === 'development') {
ENV.APP.LOG_TRANSITIONS = true; ENV.APP.LOG_TRANSITIONS = true;
ENV.APP.LOG_TRANSITIONS_INTERNAL = true; ENV.APP.LOG_TRANSITIONS_INTERNAL = true;
ENV.APP.LOG_RESOLVER = false;
ENV.APP.LOG_ACTIVE_GENERATION = false;
ENV.APP.LOG_VIEW_LOOKUPS = false;
ENV['ember-cli-mirage'] = { ENV['ember-cli-mirage'] = {
enabled: false enabled: false
}; };

View file

@ -1,6 +1,6 @@
{ {
"name": "documize", "name": "documize",
"version": "0.29.0", "version": "0.30.0",
"description": "The Documentation IDE", "description": "The Documentation IDE",
"private": true, "private": true,
"directories": { "directories": {

View file

@ -26,7 +26,7 @@ type ProdInfo struct {
// Product returns product edition details // Product returns product edition details
func Product() (p ProdInfo) { func Product() (p ProdInfo) {
p.Major = "0" p.Major = "0"
p.Minor = "29" p.Minor = "30"
p.Patch = "0" p.Patch = "0"
p.Version = fmt.Sprintf("%s.%s.%s", p.Major, p.Minor, p.Patch) p.Version = fmt.Sprintf("%s.%s.%s", p.Major, p.Minor, p.Patch)
p.Edition = "Community" p.Edition = "Community"

File diff suppressed because one or more lines are too long