dygraphs
Version:
dygraphs is a fast, flexible open source JavaScript charting library.
203 lines (172 loc) • 5.72 kB
JavaScript
/*jshint loopfunc:true */
/*global Dygraph,$,TextArea,jQuery */
var Gallery = {};
Gallery.entries = {};
Gallery.entryOrder = [];
Gallery.runningDemo = null;
/*
* Shortcut for creating HTML associated with a parent.
*/
Gallery.create = function(type, parent, className) {
var elem = document.createElement(type);
parent.appendChild(elem);
if (className) {
elem.className = className;
}
return elem;
};
Gallery.start = function() {
Gallery.toc = document.getElementById("toc");
Gallery.workarea = document.getElementById("workarea");
Gallery.subtitle = Gallery.create("div", Gallery.workarea);
Gallery.subtitle.id = "subtitle";
Gallery.workareaChild = Gallery.create("div", Gallery.workarea);
Gallery.demotitle = document.getElementById("demotitle");
Gallery.textarea = new TextArea();
Gallery.textarea.cancel.style.display = "none";
Gallery.textarea.width = 600;
Gallery.textarea.height = 400;
for (var idx in Gallery.entryOrder) {
var id = Gallery.entryOrder[idx];
var demo = Gallery.entries[id];
var div = Gallery.create("div", Gallery.toc, "entry");
div.id = id + "-toc";
var innerDiv = Gallery.create("div", div, "");
// Storing extra data in the demo object.
demo.div = div;
demo.innerDiv = innerDiv;
innerDiv.textContent = demo.name;
div.onclick = function(demo, id) { return function() {
if (Gallery.runningDemo !== null) {
Gallery.runningDemo.innerDiv.className = "";
if (Gallery.runningDemo.clean) {
Gallery.runningDemo.clean(Gallery.workareaChild);
}
}
Gallery.subtitle.innerHTML = "";
Gallery.workareaChild.id = id;
location.hash = "g/" + id;
Gallery.workareaChild.innerHTML='';
if (demo.setup) {
demo.setup(Gallery.workareaChild);
}
Gallery.demotitle.textContent = demo.title ? demo.title : "";
demo.innerDiv.className = "selected";
var codeSpan = Gallery.create("span", Gallery.subtitle);
codeSpan.id = "code";
var htmlLink = Gallery.create("a", codeSpan);
htmlLink.textContent = "HTML";
Gallery.create("span", codeSpan).textContent = " | ";
var javascriptLink = Gallery.create("a", codeSpan);
javascriptLink.textContent = "Javascript";
var css = getCss(id);
var cssLink;
if (css) {
Gallery.create("span", codeSpan).textContent = " | ";
cssLink = Gallery.create("a", codeSpan);
cssLink.textContent = "CSS";
}
var jsFiddleForm = Gallery.create("form", codeSpan);
var jsfs = $(jsFiddleForm);
jsFiddleForm.method = "post";
jsFiddleForm.action = "http://jsfiddle.net/api/post/jquery/1.4/";
jsFiddleForm.target = "_blank";
jsfs.html("<input type='submit' value='Edit in jsFiddle' />\n" +
"<span style='display:none'>\n" +
"<textarea name='resources'>https://dygraphs.com/dist/dygraph.css," +
"https://dygraphs.com/gallery/data.js," +
"https://dygraphs.com/dist/dygraph.js</textarea>\n" +
"<input type='text' name='dtd' value='html 5' /></span>\n");
var javascript = demo.run.toString();
var html = Gallery.workareaChild.innerHTML;
// tweak for use in jsfiddle
javascript = " $(document).ready(" + javascript + "\n);";
jQuery('<textarea></textarea>', { name: 'html' })
.val(html)
.hide()
.appendTo(jsfs);
jQuery('<textarea></textarea>', { name: 'js' })
.val(javascript)
.hide()
.appendTo(jsfs);
if (css) {
jQuery('<textarea></textarea>', { name: 'css' })
.val(css)
.hide()
.appendTo(jsfs);
}
jQuery('<input />', {
type: 'text',
name: 'title',
value: 'title tbd'
})
.hide()
.appendTo(jsfs);
jQuery('<input />', {
type: 'text',
name: 'description',
value: 'desc tbd'
})
.hide()
.appendTo(jsfs);
htmlLink.onclick = function() {
Gallery.textarea.show("HTML", html);
};
javascriptLink.onclick = function() {
Gallery.textarea.show("Javascript", javascript);
};
if (css) {
cssLink.onclick = function() {
Gallery.textarea.show("CSS", css);
};
}
demo.run(Gallery.workareaChild);
Gallery.runningDemo = demo;
}; }(demo, id);
}
Gallery.hashChange();
window.onhashchange = Gallery.setHash;
};
var getCss = function(id) {
for (var i = 0; i < document.styleSheets.length; i++) {
var ss = document.styleSheets[i];
if (ss.title == "gallery") {
try {
var rules = ss.rules || ss.cssRules;
if (rules) {
var arry = [];
for (var j = 0; j < rules.length; j++) {
var rule = rules[j];
var cssText = rule.cssText;
var key = "#workarea #" + id + " ";
if (cssText.indexOf(key) === 0) {
arry.push(cssText.substr(key.length));
}
}
return arry.join("\n\n");
}
} catch(e) { // security error
console.log(e);
}
}
}
return "not found";
};
Gallery.register = function(id, demo) {
if (Gallery.entries[id]) {
throw id + " already registered";
}
Gallery.entries[id] = demo;
Gallery.entryOrder.push(id);
};
Gallery.hashChange = function(event) {
if (location.hash) {
if (location.hash.indexOf("#g/") === 0) {
var id = location.hash.substring(3) + "-toc";
var elem = document.getElementById(id);
elem.onclick();
return;
}
}
Gallery.workareaChild.innerHTML = "<h3>Select a demo from the gallery on the left</h3>";
};