(function () {
var
_ = Flotr._,
DOT = '.',
CN_EXAMPLE = 'flotr-example',
CN_LABEL = 'flotr-example-label',
CN_TITLE = 'flotr-example-title',
CN_MARKUP = 'flotr-example-description',
CN_EDITOR = 'flotr-example-editor',
ID_GRAPH = 'flotr-example-graph',
TEMPLATE = '' +
'
',
Example = function (o) {
this.options = o;
this.example = null;
this._initNodes();
};
Example.prototype = {
setExample : function (example) {
var
source = this.getSource(example),
editorNode = this._editorNode;
this.example = example;
Math.seedrandom(example.key);
this._exampleNode.css({ display: 'block' });
this._titleNode.html(example.name || '');
this._markupNode.html(example.description || '');
if (!this._editor) {
this._editor = new Flotr.Examples.Editor(editorNode, {
args : example.args,
example : source,
teardown : function () {
// Unbind event listeners from previous examples
Flotr.EventAdapter.stopObserving($(editorNode).find('.render')[0]);
$(editorNode).find('canvas').each(function (index, canvas) {
Flotr.EventAdapter.stopObserving(canvas);
});
}
});
} else {
this._editor.setExample(source, example.args);
}
},
getSource : function (example) {
var
source = example.callback.toString();
// Hack for FF code style
if (navigator.userAgent.search(/firefox/i) !== -1)
source = js_beautify(source);
return source;
},
executeCallback : function (example, node) {
if (!_.isElement(node)) node = node[0];
var args = (example.args ? [node].concat(example.args) : [node]);
Math.seedrandom(example.key);
return example.callback.apply(this, args);
},
_initNodes : function () {
var
node = this.options.node,
example = $(TEMPLATE);
this._titleNode = example.find(DOT + CN_TITLE);
this._markupNode = example.find(DOT + CN_MARKUP);
this._editorNode = example.find(DOT + CN_EDITOR);
this._exampleNode = example;
node.append(example);
}
};
Flotr.Examples.Example = Example;
})();