HEX
Server: Apache
System: Linux webd004.cluster130.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64
User: frenchy (106757)
PHP: 7.4.33
Disabled: _dyuweyrj4,_dyuweyrj4r,dl
Upload Files
File: /home/frenchy/www/french-american.org/current/node_modules/@frctl/fractal/src/api/docs/doc.js
'use strict';

const Path = require('path');
const Promise = require('bluebird');
const matter = require('gray-matter');
const _ = require('lodash');
const utils = require('../../core/utils');
const Entity = require('../../core/entities/entity');

module.exports = class Doc extends Entity {

    constructor(config, content, parent) {
        super(config.name, config, parent);
        this.isDoc = true;
        this.lang = config.lang;
        this.filePath = config.filePath;
        this.viewPath = this.filePath;
        this.relViewPath = Path.relative(this.source.fullPath, Path.resolve(this.filePath));
        this.content = content;
        this.file = config.file;
    }

    get isIndex() {
        return this.name === 'index';
    }

    _label(config) {
        return config.label || (this.isIndex ? this.source.get('indexLabel') : utils.titlize(config.name));
    }

    _handle(config) {
        if (config.handle) {
            return utils.slugify(config.handle).toLowerCase();
        }
        const ref = this.isIndex ? (this.parent.isSource ? 'index' : this.parent.name) : config.name;
        return utils.slugify(this.parent.getProp('prefix') ? `${this.parent.getProp('prefix')}-${ref}` : ref).toLowerCase();
    }

    _title(config) {
        return config.title || this.label;
    }

    getContent() {
        return Promise.resolve(this.content);
    }

    getContentSync() {
        return this.content;
    }

    render(context, env, opts) {
        return this.source.render(this, context, env, opts);
    }

    /*
     * Deprecated, do not use!
     */
    renderWithGlobals(context, globals) {
        return this.source.render(this, context, {
            request: globals._request || {},
            server: globals._env.server,
            builder: globals._env.builder,
        });
    }

    toc(maxDepth) {
        return this.source.toc(this, maxDepth);
    }

    static create(config, content, parent) {
        parent.source.emit('doc:beforeCreate', config, content, parent);
        const parsed = matter(content);
        config = _.defaults(parsed.data || {}, config);
        const doc = new Doc(config, parsed.content, parent);
        parent.source.emit('doc:created', doc);
        return Promise.resolve(doc);
    }

    toJSON() {
        const self = super.toJSON();
        self.isDoc = true;
        self.isIndex = this.isIndex;
        self.path = this.path;
        self.status = this.status;
        self.tags = this.tags;
        self.meta = this.meta;
        self.content = this.getContentSync();
        self.lang = this.lang;
        self.file = this.file.toJSON();
        self.context = this.context;
        return self;
    }

};