File: /home/lindsay/xeolabs/xeogl-next/xeogl/examples/js/stories/story.js
/**
A **Story** defines a panel of text generated from markdown.
Story is the base class for:
* {{#crossLink "AnnotationStory"}}{{/crossLink}} - a list of
{{#crossLink "Annotation"}}Annotations{{/crossLink}} accompanied by a panel of text containing links
that activate them.
@class Story
@module xeogl
@submodule stories
@constructor
@param [scene] {Scene} Parent {{#crossLink "Scene"}}Scene{{/crossLink}} - creates this Story in the default
{{#crossLink "Scene"}}Scene{{/crossLink}} when omitted.
@param [cfg] {*} Configs
@param [cfg.id] {String} Optional ID, unique among all components in the parent {{#crossLink "Scene"}}Scene{{/crossLink}},
generated automatically when omitted.
@param [cfg.meta] {String:Object} Optional map of user-defined metadata to attach to this Story.
@param [cfg.text=""] {String} Story text in markdown format.
@extends Component
*/
{
var converter = new showdown.Converter();
function idToString(id) {
return xeogl._isNumeric(id) ? id : ("'" + id + "'");
}
xeogl.Story = class xeoglStory extends xeogl.Component {
init(cfg) {
this._container = document.createElement("div");
this._container.className = "xeogl-story";
document.body.appendChild(this._container);
this._actions = cfg.actions || {};
this.text = cfg.text;
}
set text(value) {
this._text = value || [];
this._updateText();
}
get text() {
return this._text;
}
_updateText() {
var text = this._text.join("\n");
for (var action in this._actions) {
if (this._actions.hasOwnProperty(action)) {
text = text.split(action + "(").join("javascript:xeogl.scenes[" +
idToString(this.scene.id) + "].components[" + idToString(this.id) + "]._actions." + action + ".call(xeogl.scenes[" +
idToString(this.scene.id) + "].components[" + idToString(this.id) + "],");
}
}
this._container.innerHTML = converter.makeHtml(text);
}
_clear() {
this._text = [];
this._container.innerHTML = "";
}
_getJSON() {
return {
text: this._text.slice()
};
}
destroy() {
super.destroy();
this._container.parentNode.removeChild(this._container);
}
}
}