From e7c4b2f40b33e329ab7bb400e7bfac98730b42dc Mon Sep 17 00:00:00 2001 From: Harvey Kandola Date: Fri, 11 Nov 2016 17:42:49 -0800 Subject: [PATCH] re-vamped links to work with tabs --- app/app/components/document/document-view.js | 6 +-- app/app/pods/document/edit/route.js | 10 ++--- app/app/pods/document/index/route.js | 30 +++++++++----- app/app/pods/document/index/template.hbs | 2 +- app/app/pods/document/wizard/controller.js | 39 ------------------- app/app/services/link.js | 22 ++++++++--- .../components/document/edit-tools.hbs | 2 - core/api/endpoint/document_endpoint.go | 34 ++++++++++++++++ core/api/endpoint/link_endpoint.go | 2 +- core/api/endpoint/router.go | 1 + core/api/entity/objects.go | 6 +-- core/api/request/document.go | 7 ---- core/api/request/link.go | 4 +- 13 files changed, 86 insertions(+), 79 deletions(-) diff --git a/app/app/components/document/document-view.js b/app/app/components/document/document-view.js index ec51e068..27e3592f 100644 --- a/app/app/components/document/document-view.js +++ b/app/app/components/document/document-view.js @@ -41,11 +41,11 @@ export default Ember.Component.extend(NotifierMixin, TooltipMixin, { let self = this; $("a[data-documize='true']").off('click').on('click', function (e) { - let link = links.getLinkObject(self.get('meta.outboundLinks'), this); + let link = links.getLinkObject(self.get('links'), this); // local link? exists? - if (link.linkType === "section" && link.documentId === doc.get('id')) { - let exists = self.get('pages').findBy('id', link.targetId); + if ((link.linkType === "section" || link.linkType === "tab") && link.documentId === doc.get('id')) { + let exists = self.get('allPages').findBy('id', link.targetId); if (_.isUndefined(exists)) { link.orphan = true; diff --git a/app/app/pods/document/edit/route.js b/app/app/pods/document/edit/route.js index cd92ad2a..2eb31dde 100644 --- a/app/app/pods/document/edit/route.js +++ b/app/app/pods/document/edit/route.js @@ -1,11 +1,11 @@ // Copyright 2016 Documize Inc. . All rights reserved. // -// This software (Documize Community Edition) is licensed under +// 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 . +// by contacting . // // https://documize.com @@ -22,10 +22,10 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { this.audit.record("edited-page"); return Ember.RSVP.hash({ - folder: self.get('folderService').getFolder(self.paramsFor('document').folder_id), - document: self.modelFor('document'), + folder: self.modelFor('document').folder, + document: self.modelFor('document').document, page: self.get('documentService').getPage(self.paramsFor('document').document_id, params.page_id), meta: self.get('documentService').getPageMeta(self.paramsFor('document').document_id, params.page_id) }); } -}); \ No newline at end of file +}); diff --git a/app/app/pods/document/index/route.js b/app/app/pods/document/index/route.js index 4f2b418e..1bb91b2f 100644 --- a/app/app/pods/document/index/route.js +++ b/app/app/pods/document/index/route.js @@ -14,6 +14,7 @@ import AuthenticatedRouteMixin from 'ember-simple-auth/mixins/authenticated-rout export default Ember.Route.extend(AuthenticatedRouteMixin, { documentService: Ember.inject.service('document'), + linkService: Ember.inject.service('link'), folderService: Ember.inject.service('folder'), userService: Ember.inject.service('user'), queryParams: { @@ -34,23 +35,32 @@ export default Ember.Route.extend(AuthenticatedRouteMixin, { this.set('document', document); this.set('folders', folders); this.set('folder', folder); + + return new Ember.RSVP.Promise((resolve) => { + this.get('documentService').getPages(this.get('documentId')).then((pages) => { + this.set('allPages', pages); + this.set('pages', pages.filterBy('pageType', 'section')); + this.set('tabs', pages.filterBy('pageType', 'tab')); + resolve(); + }); + }); + }, model() { this.browser.setTitle(this.get('document.name')); this.browser.setMetaDescription(this.get('document.excerpt')); - let self = this; - return Ember.RSVP.hash({ - folders: self.get('folders'), - folder: self.get('folder'), - document: self.get('document'), - page: self.get('pageId'), - isEditor: self.get('folderService').get('canEditCurrentFolder'), - pages: self.get('documentService').getPages(self.get('documentId')).then(function (pages) { - return pages.filterBy('pageType', 'section'); - }) + folders: this.get('folders'), + folder: this.get('folder'), + document: this.get('document'), + page: this.get('pageId'), + isEditor: this.get('folderService').get('canEditCurrentFolder'), + allPages: this.get('allPages'), + pages: this.get('pages'), + tabs: this.get('tabs'), + links: this.get('linkService').getDocumentLinks(this.get('documentId')) }); } }); diff --git a/app/app/pods/document/index/template.hbs b/app/app/pods/document/index/template.hbs index 25684a14..36019b5a 100644 --- a/app/app/pods/document/index/template.hbs +++ b/app/app/pods/document/index/template.hbs @@ -1,2 +1,2 @@ -{{document/document-view document=model.document meta=meta pages=model.pages folder=model.folder folders=model.folders isEditor=model.isEditor +{{document/document-view document=model.document links=model.links allPages=model.allPages tabs=model.tabs pages=model.pages folder=model.folder folders=model.folders isEditor=model.isEditor gotoPage=(action 'gotoPage') onDeletePage=(action 'onPageDeleted')}} diff --git a/app/app/pods/document/wizard/controller.js b/app/app/pods/document/wizard/controller.js index 6b11bc76..7028393e 100644 --- a/app/app/pods/document/wizard/controller.js +++ b/app/app/pods/document/wizard/controller.js @@ -9,7 +9,6 @@ export default Ember.Controller.extend(NotifierMixin, { this.transitionToRoute('document'); }, - onAddSection(section) { this.audit.record("added-section-" + section.get('contentType')); @@ -50,43 +49,5 @@ export default Ember.Controller.extend(NotifierMixin, { }); }); } - - // - // zonAddSection(section) { - // this.audit.record("added-section-" + section.get('contentType')); - // - // let page = { - // documentId: this.get('model.document.id'), - // title: `${section.get('title')}`, - // level: 1, - // sequence: 0, - // body: "", - // contentType: section.get('contentType'), - // pageType: section.get('pageType') - // }; - // - // let data = this.get('store').normalize('page', page); - // let pageData = this.get('store').push(data); - // - // let meta = { - // documentId: this.get('model.document.id'), - // rawBody: "", - // config: "" - // }; - // - // let pageMeta = this.get('store').normalize('page-meta', meta); - // let pageMetaData = this.get('store').push(pageMeta); - // - // let model = { - // page: pageData, - // meta: pageMetaData - // }; - // - // this.get('documentService').addPage(this.get('model.document.id'), model).then((newPage) => { - // let options = {}; - // options['mode'] = 'edit'; - // this.transitionToRoute('document.section', newPage.id, { queryParams: options }); - // }); - // } } }); diff --git a/app/app/services/link.js b/app/app/services/link.js index e12496c7..12caf78b 100644 --- a/app/app/services/link.js +++ b/app/app/services/link.js @@ -21,11 +21,19 @@ export default Ember.Service.extend({ appMeta: service(), store: service(), + // Returns links within specified document + getDocumentLinks(documentId) { + return this.get('ajax').request(`documents/${documentId}/links`, { + method: "GET" + }); + }, + // Returns candidate links using provided parameters getCandidates(folderId, documentId, pageId) { return this.get('ajax').request(`links/${folderId}/${documentId}/${pageId}`, { method: 'GET' }).then((response) => { + console.log(response); return response; }); }, @@ -56,7 +64,7 @@ export default Ember.Service.extend({ let endpoint = this.get('appMeta').get('endpoint'); let orgId = this.get('appMeta').get('orgId'); - if (link.linkType === "section" || link.linkType === "document") { + if (link.linkType === "section" || link.linkType === "tab" || link.linkType === "document") { href = `/link/${link.linkType}/${link.id}`; result = `${link.title}`; } @@ -112,6 +120,14 @@ export default Ember.Service.extend({ return; } + // handle tab link + if (link.linkType === "tab") { + let options = {}; + options['mode'] = 'view'; + router.transitionTo('document.section', link.targetId, { queryParams: options }); + return; + } + // handle document link if (link.linkType === "document") { router.transitionTo('document', link.folderId, folderSlug, link.documentId, documentSlug); @@ -125,7 +141,3 @@ export default Ember.Service.extend({ } } }); - -/* - doc meta to show inbound and outbound links. -*/ diff --git a/app/app/templates/components/document/edit-tools.hbs b/app/app/templates/components/document/edit-tools.hbs index 4a22d387..86b977a5 100644 --- a/app/app/templates/components/document/edit-tools.hbs +++ b/app/app/templates/components/document/edit-tools.hbs @@ -1,5 +1,4 @@
-
  • @@ -80,5 +79,4 @@
    {{/dropdown-dialog}} -
diff --git a/core/api/endpoint/document_endpoint.go b/core/api/endpoint/document_endpoint.go index 8438ef80..3302dacb 100644 --- a/core/api/endpoint/document_endpoint.go +++ b/core/api/endpoint/document_endpoint.go @@ -142,6 +142,40 @@ func GetDocumentMeta(w http.ResponseWriter, r *http.Request) { writeSuccessBytes(w, json) } +// GetDocumentLinks is an endpoint returning the links for a document. +func GetDocumentLinks(w http.ResponseWriter, r *http.Request) { + method := "GetDocumentLinks" + p := request.GetPersister(r) + + params := mux.Vars(r) + id := params["documentID"] + + if len(id) == 0 { + writeMissingDataError(w, method, "documentID") + return + } + + oLinks, err := p.GetDocumentOutboundLinks(id) + + if len(oLinks) == 0 { + oLinks = []entity.Link{} + } + + if err != nil && err != sql.ErrNoRows { + writeGeneralSQLError(w, method, err) + return + } + + json, err := json.Marshal(oLinks) + + if err != nil { + writeJSONMarshalError(w, method, "link", err) + return + } + + writeSuccessBytes(w, json) +} + // GetDocumentsByFolder is an endpoint that returns the documents in a given folder. func GetDocumentsByFolder(w http.ResponseWriter, r *http.Request) { method := "GetDocumentsByFolder" diff --git a/core/api/endpoint/link_endpoint.go b/core/api/endpoint/link_endpoint.go index 7ff5d9ee..ba99260c 100644 --- a/core/api/endpoint/link_endpoint.go +++ b/core/api/endpoint/link_endpoint.go @@ -74,7 +74,7 @@ func GetLinkCandidates(w http.ResponseWriter, r *http.Request) { FolderID: folderID, DocumentID: documentID, TargetID: p.RefID, - LinkType: "section", + LinkType: p.PageType, Title: p.Title, } pc = append(pc, c) diff --git a/core/api/endpoint/router.go b/core/api/endpoint/router.go index ddbfa9a3..ba4f5ecf 100644 --- a/core/api/endpoint/router.go +++ b/core/api/endpoint/router.go @@ -215,6 +215,7 @@ func init() { // Links log.IfErr(Add(RoutePrefixPrivate, "links/{folderID}/{documentID}/{pageID}", []string{"GET", "OPTIONS"}, nil, GetLinkCandidates)) log.IfErr(Add(RoutePrefixPrivate, "links", []string{"GET", "OPTIONS"}, nil, SearchLinkCandidates)) + log.IfErr(Add(RoutePrefixPrivate, "documents/{documentID}/links", []string{"GET", "OPTIONS"}, nil, GetDocumentLinks)) // Global installation-wide config log.IfErr(Add(RoutePrefixPrivate, "global", []string{"GET", "OPTIONS"}, nil, GetGlobalConfig)) diff --git a/core/api/entity/objects.go b/core/api/entity/objects.go index a2853989..2c1e7e35 100644 --- a/core/api/entity/objects.go +++ b/core/api/entity/objects.go @@ -237,10 +237,8 @@ func (p *PageMeta) SetDefaults() { // DocumentMeta details who viewed the document. type DocumentMeta struct { - Viewers []DocumentMetaViewer `json:"viewers"` - Editors []DocumentMetaEditor `json:"editors"` - InboundLinks []Link `json:"inboundLinks"` - OutboundLinks []Link `json:"outboundLinks"` + Viewers []DocumentMetaViewer `json:"viewers"` + Editors []DocumentMetaEditor `json:"editors"` } // DocumentMetaViewer contains the "view" metatdata content. diff --git a/core/api/request/document.go b/core/api/request/document.go index 6a4bf2f2..b75ef733 100644 --- a/core/api/request/document.go +++ b/core/api/request/document.go @@ -107,13 +107,6 @@ func (p *Persister) GetDocumentMeta(id string) (meta entity.DocumentMeta, err er return } - meta.OutboundLinks, err = p.GetDocumentOutboundLinks(id) - - if err != nil { - log.Error(fmt.Sprintf("Unable to execute GetDocumentOutboundLinks for document %s", id), err) - return - } - return } diff --git a/core/api/request/link.go b/core/api/request/link.go index e9be55ea..2430c100 100644 --- a/core/api/request/link.go +++ b/core/api/request/link.go @@ -94,7 +94,7 @@ func (p *Persister) SearchLinkCandidates(keywords string) (docs []entity.LinkCan temp = []entity.LinkCandidate{} err = Db.Select(&temp, - `SELECT p.refid as targetid, p.documentid as documentid, p.title as title, d.title as context, d.labelid as folderid from page p + `SELECT p.refid as targetid, p.documentid as documentid, p.title as title, p.pagetype as linktype, d.title as context, d.labelid as folderid from page p LEFT JOIN document d ON d.refid=p.documentid WHERE p.orgid=? AND `+likeQuery+` AND d.labelid IN (SELECT refid from label WHERE orgid=? AND type=2 AND userid=? UNION ALL SELECT refid FROM label a where orgid=? AND type=1 AND refid IN (SELECT labelid from labelrole WHERE orgid=? AND userid='' AND (canedit=1 OR canview=1)) @@ -120,7 +120,7 @@ func (p *Persister) SearchLinkCandidates(keywords string) (docs []entity.LinkCan FolderID: r.FolderID, DocumentID: r.DocumentID, TargetID: r.TargetID, - LinkType: "section", + LinkType: r.LinkType, Title: r.Title, Context: r.Context, }