var keystone = require('twreporter-keystone'); var transform = require('model-transform'); var Types = keystone.Field.Types; var Contact = new keystone.List('Contact'); Contact.add({ name: { label: '作者姓名', type: String, required: true, index: true }, email: { type: Types.Email, initial: true, index: true }, image: { label: '照片', type: Types.ImageRelationship, ref: 'Image' }, homepage: { label: '個人首頁', type: Types.Url, index: false }, facebook: { type: Types.Url, index: false }, twitter: { type: Types.Url, index: false }, instantgram: { type: Types.Url, index: true }, address: { type: Types.Location, collapse: true }, bio: { label: '簡介', type: Types.Markdown, collapse: true }, }); Contact.relationship({ ref: 'Post', refPath: 'writters' }); transform.toJSON(Contact); Contact.defaultColumns = 'name, email, favouriteFlavour, birthday, homepage'; Contact.register();
var keystone = require('twreporter-keystone'); var transform = require('model-transform'); var Tag = new keystone.List('Tag', { autokey: { from: 'name', path: 'key', unique: true }, }); Tag.add({ name: { type: String, required: true }, }); Tag.relationship({ ref: 'Post', refPath: 'tags' }); transform.toJSON(Tag); Tag.register();
var keystone = require('twreporter-keystone'); var transform = require('model-transform'); var Types = keystone.Field.Types; var Post = new keystone.List('Post', { autokey: { path: 'slug', from: 'name', unique: true }, }); Post.add({ name: { type: String, required: true }, title: { type: String, require: true, default: 'untitled' }, subtitle: { type: String, require: false }, state: { type: Types.Select, options: 'draft, published, archived', default: 'draft', index: true }, publishedDate: { type: Date, index: true, dependsOn: { state: 'published' }, default: Date.now }, writters: { type: Types.Relationship, ref: 'Contact', many: true }, photographers: { type: Types.Relationship, ref: 'Contact', many: true }, designers: { type: Types.Relationship, ref: 'Contact', many: true }, engineers: { type: Types.Relationship, ref: 'Contact', many: true }, heroImage: { type: Types.ImageRelationship, ref: 'Image' }, heroImageSize: { type: Types.Select, options: 'extend, normal, small', default: 'normal', dependsOn: { heroImage: {'$regex': '.+/i'}}}, content: { brief: { type: Types.Html, wysiwyg: true, height: 150 }, extended: { type: Types.Html, wysiwyg: true, height: 400 } }, categories: { type: Types.Relationship, ref: 'PostCategory', many: true }, copyright: { type: Types.Select, options: 'Creative-Commons, Copyrighted', default: 'Copyrighted', index: true }, tags: { type: Types.Relationship, ref: 'Tag', many: true }, style: { type: Types.Select, options: 'article, topic, review', default: 'article', index: true }, topic: { type: Types.Relationship, ref: 'Post', many: false, filters: { style: 'topic' }, dependsOn: { style: 'article' } }, relateds: {type: Types.Relationship, ref: 'Post', many: true }, og_title: { type: String, require: false},
var config = require('../config'); var keystone = require('twreporter-keystone'); var transform = require('model-transform'); var Types = keystone.Field.Types; var Audio = new keystone.List('Audio', { map: { name: 'title' } }); var bucket = config['options']['gcs config']['bucket'] Audio.add({ title: { type: String, required: true, initial: true }, description: { type: Types.Html, wysiwyg: true, height: 150 }, audio: { type: Types.GcsFile, initial: true, autoCleanup: true, datePrefix: 'YYYYMMDDHHmmss', bucket: bucket, destination: 'audios/', publicRead: true, }, coverPhoto: { type: Types.ImageRelationship, ref: 'Image' }, tags: { type: Types.Relationship, ref: 'Tag', many: true }, });