UNPKG

ical-generator

Version:

ical-generator is a small piece of code which generates ical calendar files

93 lines (80 loc) 1.99 kB
'use strict'; import { escape } from './tools.ts'; export interface ICalCategoryData { name: string; } export type ICalCategoryInternalData = ICalCategoryJSONData; export interface ICalCategoryJSONData { name: string; } /** * Usually you get an {@link ICalCategory} object like this: * * ```javascript * import ical from 'ical-generator'; * const calendar = ical(); * const event = calendar.createEvent(); * const category = event.createCategory(); * ``` * * You can also use the {@link ICalCategory} object directly: * * ```javascript * import ical, {ICalCategory} from 'ical-generator'; * const category = new ICalCategory(); * event.categories([category]); * ``` */ export default class ICalCategory { private readonly data: ICalCategoryInternalData; /** * Constructor of {@link ICalCategory}. * @param data Category Data */ constructor(data: ICalCategoryData) { this.data = { name: '', }; if (!data.name) { throw new Error('No value for `name` in ICalCategory given!'); } this.name(data.name); } /** * Get the category name * @since 0.3.0 */ name(): string; /** * Set the category name * @since 0.3.0 */ name(name: string): this; name(name?: string): string | this { if (name === undefined) { return this.data.name; } this.data.name = name; return this; } /** * Return a shallow copy of the category's options for JSON stringification. * Can be used for persistence. * * @since 0.2.4 */ toJSON(): ICalCategoryInternalData { return Object.assign({}, this.data); } /** * Return generated category name as a string. * * ```javascript * console.log(category.toString()); * ``` */ toString(): string { // CN / Name return escape(this.data.name, false); } }