Example #1
0
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();
Example #2
0
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();
Example #3
0
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},
Example #4
0
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
    },
});