diff --git a/app/app/models/attachment.js b/app/app/models/attachment.js new file mode 100644 index 00000000..f1cfa8d8 --- /dev/null +++ b/app/app/models/attachment.js @@ -0,0 +1,14 @@ +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + documentId: attr('string'), + extension: attr('string'), + fileId: attr('string'), + filename: attr('string'), + job: attr('string'), + orgId: attr('string'), + created: attr(), + revised: attr(), +}); diff --git a/app/app/models/document.js b/app/app/models/document.js new file mode 100644 index 00000000..5f7cad5f --- /dev/null +++ b/app/app/models/document.js @@ -0,0 +1,23 @@ +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import Ember from 'ember'; +import stringUtil from '../utils/string'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + name: attr('string'), + excerpt: attr('string'), + job: attr('string'), + location: attr('string'), + orgId: attr('string'), + folderId: attr('string'), + userId: attr('string'), + tags: attr('string'), + template: attr('string'), + + // client-side property + selected: attr('boolean', { defaultValue: false }), + slug: Ember.computed('name', function () { + return stringUtil.makeSlug(this.get('name')); + }) +}); diff --git a/app/app/models/folder.js b/app/app/models/folder.js new file mode 100644 index 00000000..1246b0de --- /dev/null +++ b/app/app/models/folder.js @@ -0,0 +1,7 @@ +import Model from 'ember-data/model'; +// import attr from 'ember-data/attr'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + +}); diff --git a/app/app/models/organization.js b/app/app/models/organization.js new file mode 100644 index 00000000..1246b0de --- /dev/null +++ b/app/app/models/organization.js @@ -0,0 +1,7 @@ +import Model from 'ember-data/model'; +// import attr from 'ember-data/attr'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + +}); diff --git a/app/app/models/page-meta.js b/app/app/models/page-meta.js new file mode 100644 index 00000000..01534514 --- /dev/null +++ b/app/app/models/page-meta.js @@ -0,0 +1,14 @@ +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + pageId: attr('string'), + documentId: attr('string'), + orgId: attr('string'), + rawBody: attr('string'), + config: attr(), + externalSource: attr('boolean', { defaultValue: false }), + created: attr(), + revised: attr(), +}); diff --git a/app/app/models/page.js b/app/app/models/page.js new file mode 100644 index 00000000..48d6fb57 --- /dev/null +++ b/app/app/models/page.js @@ -0,0 +1,32 @@ +import Model from 'ember-data/model'; +import attr from 'ember-data/attr'; +import Ember from 'ember'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + documentId: attr('string'), + orgId: attr('string'), + contentType: attr('string'), + level: attr('number', { defaultValue: 1 }), + sequence: attr('number', { defaultValue: 0 }), + revisions: attr('number', { defaultValue: 0 }), + title: attr('string'), + body: attr('string'), + rawBody: attr('string'), + meta: attr(), + created: attr(), + revised: attr(), + + tagName: Ember.computed('level', function () { + return "h" + this.get('level'); + }), + + tocIndent: Ember.computed('level', function () { + return (this.get('level') - 1) * 20; + }), + + tocIndentCss: Ember.computed('tocIndent', function () { + let tocIndent = this.get('tocIndent'); + return `margin-left-${tocIndent}`; + }) +}); diff --git a/app/app/models/template.js b/app/app/models/template.js new file mode 100644 index 00000000..1246b0de --- /dev/null +++ b/app/app/models/template.js @@ -0,0 +1,7 @@ +import Model from 'ember-data/model'; +// import attr from 'ember-data/attr'; +// import { belongsTo, hasMany } from 'ember-data/relationships'; + +export default Model.extend({ + +}); diff --git a/app/app/serializers/user.js b/app/app/serializers/application.js similarity index 100% rename from app/app/serializers/user.js rename to app/app/serializers/application.js diff --git a/app/app/services/document.js b/app/app/services/document.js index 1108e158..96d0e9c8 100644 --- a/app/app/services/document.js +++ b/app/app/services/document.js @@ -10,18 +10,23 @@ // https://documize.com import Ember from 'ember'; -import models from '../utils/model'; + +const { + inject: { service } +} = Ember; export default Ember.Service.extend({ - sessionService: Ember.inject.service('session'), - ajax: Ember.inject.service(), + sessionService: service('session'), + ajax: service(), + store: service(), // Returns document model for specified document id. getDocument(documentId) { return this.get('ajax').request(`documents/${documentId}`, { method: "GET" }).then((response) => { - return models.DocumentModel.create(response); + let doc = this.get('store').normalize('document', response); + return this.get('store').push({ data: doc }); }); }, @@ -34,8 +39,9 @@ export default Ember.Service.extend({ content: Ember.A([]) }); - _.each(response, function (doc) { - let documentModel = models.DocumentModel.create(doc); + _.each(response, (doc) => { + let data = this.get('store').normalize('document', doc); + let documentModel = this.get('store').push({ data: data }); documents.pushObject(documentModel); }); @@ -53,7 +59,8 @@ export default Ember.Service.extend({ }); _.each(response, function (doc) { - let documentModel = models.DocumentModel.create(doc); + let data = this.get('store').normalize('document', doc); + let documentModel = this.get('store').push({ data: data }); documents.pushObject(documentModel); }); @@ -192,8 +199,10 @@ export default Ember.Service.extend({ method: 'GET' }).then((response) => { let data = []; - _.each(response, function (obj) { - data.pushObject(models.PageModel.create(obj)); + _.each(response, (obj) => { + let data = this.get('store').normalize('page', obj); + let tableOfContents = this.get('store').push({ data: data }); + data.pushObject(tableOfContents); }); return data; @@ -208,8 +217,10 @@ export default Ember.Service.extend({ }).then((response) => { let pages = []; - _.each(response, function (page) { - pages.pushObject(models.PageModel.create(page)); + _.each(response, (page) => { + let data = this.get('store').normalize('page', page); + let pageData = this.get('store').push({ data: data }); + pages.pushObject(pageData); }); return pages; @@ -222,8 +233,8 @@ export default Ember.Service.extend({ return this.get('ajax').request(`documents/${documentId}/pages/${pageId}`, { method: 'GET' }).then((response) => { - let page = models.PageModel.create(response); - return page; + let data = this.get('store').normalize('page', response); + return this.get('store').push({ data: data }); }); }, @@ -233,8 +244,8 @@ export default Ember.Service.extend({ return this.get('ajax').request(`documents/${documentId}/pages/${pageId}/meta`, { method: 'GET' }).then((response) => { - let meta = models.PageMetaModel.create(response); - return meta; + let data = this.get('store').normalize('page-meta', response); + return this.get('store').push({ data: data }); }); }, @@ -246,7 +257,9 @@ export default Ember.Service.extend({ }).then((response) => { let data = []; _.each(response, function (obj) { - data.pushObject(models.AttachmentModel.create(obj)); + let data = this.get('store').normalize('attachment', obj); + let attachments = this.get('store').push({ data: data }); + data.pushObject(attachments); }); return data; }); diff --git a/app/app/services/folder.js b/app/app/services/folder.js index b8ac6f65..c8f5cfad 100644 --- a/app/app/services/folder.js +++ b/app/app/services/folder.js @@ -14,13 +14,15 @@ import models from '../utils/model'; import BaseService from '../services/base'; const { - get + get, + inject: { service } } = Ember; export default BaseService.extend({ - sessionService: Ember.inject.service('session'), - ajax: Ember.inject.service(), - localStorage: Ember.inject.service(), + sessionService: service('session'), + ajax: service(), + localStorage: service(), + store: service(), // selected folder currentFolder: null, @@ -203,4 +205,4 @@ export default BaseService.extend({ }); }); }, -}); \ No newline at end of file +});