[docs] migrate more sections, demos and install
This commit is contained in:
parent
b4d098d1e8
commit
dc6ae93742
4
dist/frappe-charts.esm.js
vendored
4
dist/frappe-charts.esm.js
vendored
@ -301,6 +301,10 @@ class SvgTip {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the value of a number upto 2 decimal places.
|
||||||
|
* @param {Number} d Any number
|
||||||
|
*/
|
||||||
function floatTwo(d) {
|
function floatTwo(d) {
|
||||||
return parseFloat(d.toFixed(2));
|
return parseFloat(d.toFixed(2));
|
||||||
}
|
}
|
||||||
|
|||||||
2
dist/frappe-charts.min.cjs.js.map
vendored
2
dist/frappe-charts.min.cjs.js.map
vendored
File diff suppressed because one or more lines are too long
2
dist/frappe-charts.min.esm.js.map
vendored
2
dist/frappe-charts.min.esm.js.map
vendored
File diff suppressed because one or more lines are too long
@ -51,8 +51,11 @@ section figure {
|
|||||||
border-radius: 3px;
|
border-radius: 3px;
|
||||||
overflow: auto;
|
overflow: auto;
|
||||||
}
|
}
|
||||||
section code {
|
.btn, .btn-group {
|
||||||
margin-top: 1rem; /* SAME 2 */
|
margin-bottom: 1rem;
|
||||||
|
}
|
||||||
|
.btn-group {
|
||||||
|
margin-right: 0.5rem;
|
||||||
}
|
}
|
||||||
h1 {
|
h1 {
|
||||||
font-size: 3.5rem;
|
font-size: 3.5rem;
|
||||||
|
|||||||
@ -1,4 +1,4 @@
|
|||||||
import { lineCompositeData, barCompositeData, trendsData, heatmapData } from './data';
|
import { lineCompositeData, barCompositeData, typeData, trendsData, heatmapData } from './data';
|
||||||
import { HEATMAP_COLORS_YELLOW, HEATMAP_COLORS_BLUE } from '../../../src/js/utils/constants';
|
import { HEATMAP_COLORS_YELLOW, HEATMAP_COLORS_BLUE } from '../../../src/js/utils/constants';
|
||||||
|
|
||||||
export default {
|
export default {
|
||||||
@ -35,12 +35,8 @@ export default {
|
|||||||
},
|
},
|
||||||
|
|
||||||
demoMain: {
|
demoMain: {
|
||||||
title: "Creating a Chart",
|
title: "Create a Chart",
|
||||||
contentBlocks: [
|
contentBlocks: [
|
||||||
{
|
|
||||||
type: "text",
|
|
||||||
content: `Booga wooga wooga Booga Booga wooga`,
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
type: "code",
|
type: "code",
|
||||||
lang: "html",
|
lang: "html",
|
||||||
@ -94,7 +90,7 @@ export default {
|
|||||||
type: "demo",
|
type: "demo",
|
||||||
config: {
|
config: {
|
||||||
title: "My Awesome Chart",
|
title: "My Awesome Chart",
|
||||||
data: "typeData",
|
data: typeData,
|
||||||
type: "axis-mixed",
|
type: "axis-mixed",
|
||||||
height: 300,
|
height: 300,
|
||||||
colors: ["purple", "magenta", "light-blue"],
|
colors: ["purple", "magenta", "light-blue"],
|
||||||
@ -105,20 +101,19 @@ export default {
|
|||||||
formatTooltipY: d => d + ' pts',
|
formatTooltipY: d => d + ' pts',
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sideContent: {},
|
|
||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
name: "lineOptions",
|
name: "type",
|
||||||
path: ["lineOptions"],
|
path: ["type"],
|
||||||
type: "map",
|
type: "string",
|
||||||
mapKeys: ['hideLine', 'hideDots', 'heatline', 'regionFill'],
|
|
||||||
states: {
|
states: {
|
||||||
"Line": [0, 1, 0, 0],
|
"Mixed": 'axis-mixed',
|
||||||
"Dots": [1, 0, 0, 0],
|
"Line": 'line',
|
||||||
"HeatLine": [0, 1, 1, 0],
|
"Bar": 'bar',
|
||||||
"Region": [0, 1, 0, 1]
|
"Pie Chart": 'pie',
|
||||||
|
"Percentage Chart": 'percentage',
|
||||||
},
|
},
|
||||||
activeState: "HeatLine"
|
activeState: "Mixed"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
actions: [{ name: "Export ...", fn: "export", args: [] }],
|
actions: [{ name: "Export ...", fn: "export", args: [] }],
|
||||||
@ -224,5 +219,126 @@ export default {
|
|||||||
});`,
|
});`,
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
},
|
||||||
|
codePenDemo: {
|
||||||
|
title: "Demo",
|
||||||
|
contentBlocks: [
|
||||||
|
{
|
||||||
|
type: "custom",
|
||||||
|
html: `<p data-height="299" data-theme-id="light" data-slug-hash="wjKBoq" data-default-tab="js,result"
|
||||||
|
data-user="pratu16x7" data-embed-version="2" data-pen-title="Frappe Charts Demo" class="codepen">
|
||||||
|
See the Pen <a href="https://codepen.io/pratu16x7/pen/wjKBoq/">Frappe Charts Demo</a>
|
||||||
|
by Prateeksha Singh (<a href="https://codepen.io/pratu16x7">@pratu16x7</a>) on
|
||||||
|
<a href="https://codepen.io">CodePen</a>.
|
||||||
|
</p>`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
optionsList: {
|
||||||
|
title: "Available Options",
|
||||||
|
contentBlocks: [
|
||||||
|
{
|
||||||
|
type: "code",
|
||||||
|
lang: "javascript",
|
||||||
|
content: `
|
||||||
|
...
|
||||||
|
{
|
||||||
|
data: {
|
||||||
|
labels: [],
|
||||||
|
datasets: [],
|
||||||
|
yRegions: [],
|
||||||
|
yMarkers: []
|
||||||
|
}
|
||||||
|
title: '',
|
||||||
|
colors: [],
|
||||||
|
height: 200,
|
||||||
|
|
||||||
|
tooltipOptions: {
|
||||||
|
formatTooltipX: d => (d + '').toUpperCase(),
|
||||||
|
formatTooltipY: d => d + ' pts',
|
||||||
|
}
|
||||||
|
|
||||||
|
// Axis charts
|
||||||
|
isNavigable: 1, // default: 0
|
||||||
|
valuesOverPoints: 1, // default: 0
|
||||||
|
barOptions: {
|
||||||
|
spaceRatio: 1 // default: 0.5
|
||||||
|
stacked: 1 // default: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
lineOptions: {
|
||||||
|
dotSize: 6, // default: 4
|
||||||
|
hideLine: 0, // default: 0
|
||||||
|
hideDots: 1, // default: 0
|
||||||
|
heatline: 1, // default: 0
|
||||||
|
regionFill: 1 // default: 0
|
||||||
|
}
|
||||||
|
|
||||||
|
axisOptions: {
|
||||||
|
yAxisMode: 'span', // Axis lines, default
|
||||||
|
xAxisMode: 'tick', // No axis lines, only short ticks
|
||||||
|
xIsSeries: 1 // Allow skipping x values for space
|
||||||
|
// default: 0
|
||||||
|
},
|
||||||
|
|
||||||
|
// Pie/Percentage charts
|
||||||
|
maxLegendPoints: 6, // default: 20
|
||||||
|
maxSlices: 10, // default: 20
|
||||||
|
|
||||||
|
// Percentage chart
|
||||||
|
barOptions: {
|
||||||
|
height: 15 // default: 20
|
||||||
|
depth: 5 // default: 2
|
||||||
|
}
|
||||||
|
|
||||||
|
// Heatmap
|
||||||
|
discreteDomains: 1, // default: 1
|
||||||
|
}
|
||||||
|
...
|
||||||
|
|
||||||
|
// Updating values
|
||||||
|
chart.update(data);
|
||||||
|
|
||||||
|
// Axis charts:
|
||||||
|
chart.addDataPoint(label, valueFromEachDataset, index)
|
||||||
|
chart.removeDataPoint(index)
|
||||||
|
chart.updateDataset(datasetValues, index)
|
||||||
|
|
||||||
|
// Exporting
|
||||||
|
chart.export();
|
||||||
|
|
||||||
|
// Unbind window-resize events
|
||||||
|
chart.unbindWindowEvents();
|
||||||
|
|
||||||
|
`
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
|
||||||
|
installation: {
|
||||||
|
title: "Install",
|
||||||
|
contentBlocks: [
|
||||||
|
{ type: "text", content: 'Install via npm' },
|
||||||
|
{ type: "code", lang: "console", content: ` npm install frappe-charts` },
|
||||||
|
|
||||||
|
{ type: "text", content: 'And include it in your project' },
|
||||||
|
{ type: "code", lang: "javascript", content: ` import { Chart } from "frappe-charts` },
|
||||||
|
|
||||||
|
{ type: "text", content: 'Use as:' },
|
||||||
|
{
|
||||||
|
type: "code",
|
||||||
|
lang: "javascript",
|
||||||
|
content: ` new Chart(); // ES6 module
|
||||||
|
// or
|
||||||
|
new frappe.Chart(); // Browser`,
|
||||||
|
},
|
||||||
|
|
||||||
|
{ type: "text", content: '... or include it directly in your HTML' },
|
||||||
|
{
|
||||||
|
type: "code",
|
||||||
|
lang: "html",
|
||||||
|
content: ` <script src="https://unpkg.com/frappe-charts@1.1.0"></script>`,
|
||||||
|
},
|
||||||
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,4 +1,5 @@
|
|||||||
import { $ } from '../../../src/js/utils/dom';
|
import { $ } from '../../../src/js/utils/dom';
|
||||||
|
import { toTitleCase } from '../../../src/js/utils/helpers';
|
||||||
|
|
||||||
export class docSectionBuilder {
|
export class docSectionBuilder {
|
||||||
constructor(LIB_OBJ) {
|
constructor(LIB_OBJ) {
|
||||||
@ -26,26 +27,31 @@ export class docSectionBuilder {
|
|||||||
}
|
}
|
||||||
|
|
||||||
getBlock(blockConf) {
|
getBlock(blockConf) {
|
||||||
let block;
|
let fnName = 'get' + toTitleCase(blockConf.type);
|
||||||
let type = blockConf.type;
|
if(this[fnName]) {
|
||||||
|
return this[fnName](blockConf);
|
||||||
if(type === "text") {
|
|
||||||
block = this.getText(blockConf);
|
|
||||||
} else if(type === "code") {
|
|
||||||
block = this.getCode(blockConf);
|
|
||||||
} else {
|
} else {
|
||||||
block = this.getDemo(blockConf);
|
throw new Error(`Unknown section block type '${blockConf.type}'.`);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
getText(blockConf) {}
|
getText(blockConf) {
|
||||||
getCode(blockConf) {
|
return $.create('p', {
|
||||||
let pre = $.create('pre', { inside: this.section });
|
inside: this.section,
|
||||||
let code = $.create('code', {
|
|
||||||
inside: pre,
|
|
||||||
className: `hljs ${blockConf.lang}`,
|
|
||||||
innerHTML: blockConf.content
|
innerHTML: blockConf.content
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
getCode(blockConf) {
|
||||||
|
let pre = $.create('pre', { inside: this.section });
|
||||||
|
let lang = blockConf.lang || 'javascript';
|
||||||
|
let code = $.create('code', {
|
||||||
|
inside: pre,
|
||||||
|
className: `hljs ${lang}`,
|
||||||
|
innerHTML: blockConf.content
|
||||||
|
});
|
||||||
|
}
|
||||||
|
getCustom(blockConf) {
|
||||||
|
this.section.innerHTML += blockConf.html;
|
||||||
|
}
|
||||||
getDemo(blockConf) {
|
getDemo(blockConf) {
|
||||||
let args = blockConf.config;
|
let args = blockConf.config;
|
||||||
let figure = $.create('figure', { inside: this.section });
|
let figure = $.create('figure', { inside: this.section });
|
||||||
@ -81,7 +87,7 @@ export class docSectionBuilder {
|
|||||||
args[o.path[0]][attr] = state[i];
|
args[o.path[0]][attr] = state[i];
|
||||||
})
|
})
|
||||||
} else {
|
} else {
|
||||||
// boolean, number, object
|
// boolean, string, number, object
|
||||||
args[o.path[0]] = state;
|
args[o.path[0]] = state;
|
||||||
}
|
}
|
||||||
this.libObj = new this.LIB_OBJ(figure, args);
|
this.libObj = new this.LIB_OBJ(figure, args);
|
||||||
|
|||||||
@ -18,62 +18,10 @@ lineComposite.parent.addEventListener('data-select', (e) => {
|
|||||||
]);
|
]);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ================================================================================
|
let section = document.querySelector('.demo-main');
|
||||||
|
dcb.setParent(section);
|
||||||
let customColors = ['purple', 'magenta', 'light-blue'];
|
dcb.setSys(dc.demoMain);
|
||||||
let typeChartArgs = {
|
dcb.make();
|
||||||
title: "My Awesome Chart",
|
|
||||||
data: typeData,
|
|
||||||
type: 'axis-mixed',
|
|
||||||
height: 300,
|
|
||||||
colors: customColors,
|
|
||||||
valuesOverPoints: 1,
|
|
||||||
|
|
||||||
// maxLegendPoints: 6,
|
|
||||||
maxSlices: 10,
|
|
||||||
|
|
||||||
tooltipOptions: {
|
|
||||||
formatTooltipX: d => (d + '').toUpperCase(),
|
|
||||||
formatTooltipY: d => d + ' pts',
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let aggrChart = new Chart("#chart-aggr", typeChartArgs);
|
|
||||||
|
|
||||||
Array.prototype.slice.call(
|
|
||||||
document.querySelectorAll('.aggr-type-buttons button')
|
|
||||||
).map(el => {
|
|
||||||
el.addEventListener('click', (e) => {
|
|
||||||
let btn = e.target;
|
|
||||||
let type = btn.getAttribute('data-type');
|
|
||||||
typeChartArgs.type = type;
|
|
||||||
if(type !== 'axis-mixed') {
|
|
||||||
typeChartArgs.colors = undefined;
|
|
||||||
} else {
|
|
||||||
typeChartArgs.colors = customColors;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(type !== 'percentage') {
|
|
||||||
typeChartArgs.height = 300;
|
|
||||||
} else {
|
|
||||||
typeChartArgs.height = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
let newChart = new Chart("#chart-aggr", typeChartArgs);
|
|
||||||
if(newChart){
|
|
||||||
aggrChart = newChart;
|
|
||||||
}
|
|
||||||
Array.prototype.slice.call(
|
|
||||||
btn.parentNode.querySelectorAll('button')).map(el => {
|
|
||||||
el.classList.remove('active');
|
|
||||||
});
|
|
||||||
btn.classList.add('active');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelector('.export-aggr').addEventListener('click', () => {
|
|
||||||
aggrChart.export();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update values chart
|
// Update values chart
|
||||||
// ================================================================================
|
// ================================================================================
|
||||||
@ -171,7 +119,7 @@ document.querySelector('.export-update').addEventListener('click', () => {
|
|||||||
// Trends Chart
|
// Trends Chart
|
||||||
// ================================================================================
|
// ================================================================================
|
||||||
|
|
||||||
let section = document.querySelector('.trends-plot');
|
section = document.querySelector('.trends-plot');
|
||||||
dcb.setParent(section);
|
dcb.setParent(section);
|
||||||
dcb.setSys(dc.trendsPlot);
|
dcb.setSys(dc.trendsPlot);
|
||||||
dcb.make();
|
dcb.make();
|
||||||
@ -214,3 +162,18 @@ section = document.querySelector('.heatmap');
|
|||||||
dcb.setParent(section);
|
dcb.setParent(section);
|
||||||
dcb.setSys(dc.heatmap);
|
dcb.setSys(dc.heatmap);
|
||||||
dcb.make();
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.codepen');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.codePenDemo);
|
||||||
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.options');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.optionsList);
|
||||||
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.installation');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.installation);
|
||||||
|
dcb.make();
|
||||||
|
|||||||
169
docs/assets/js/index.min.js
vendored
169
docs/assets/js/index.min.js
vendored
@ -265,6 +265,14 @@ function getRandomBias(min, max, bias, influence) {
|
|||||||
return rnd * (1 - mix) + biasValue * mix; // mix full range and bias
|
return rnd * (1 - mix) + biasValue * mix; // mix full range and bias
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
function toTitleCase(str) {
|
||||||
|
return str.replace(/\w*/g, function (txt) {
|
||||||
|
return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
// Playing around with dates
|
// Playing around with dates
|
||||||
|
|
||||||
|
|
||||||
@ -492,11 +500,8 @@ var dc = {
|
|||||||
},
|
},
|
||||||
|
|
||||||
demoMain: {
|
demoMain: {
|
||||||
title: "Creating a Chart",
|
title: "Create a Chart",
|
||||||
contentBlocks: [{
|
contentBlocks: [{
|
||||||
type: "text",
|
|
||||||
content: 'Booga wooga wooga Booga Booga wooga'
|
|
||||||
}, {
|
|
||||||
type: "code",
|
type: "code",
|
||||||
lang: "html",
|
lang: "html",
|
||||||
content: ' <!--HTML-->\n <figure id="frost-chart"></figure>'
|
content: ' <!--HTML-->\n <figure id="frost-chart"></figure>'
|
||||||
@ -508,7 +513,7 @@ var dc = {
|
|||||||
type: "demo",
|
type: "demo",
|
||||||
config: {
|
config: {
|
||||||
title: "My Awesome Chart",
|
title: "My Awesome Chart",
|
||||||
data: "typeData",
|
data: typeData,
|
||||||
type: "axis-mixed",
|
type: "axis-mixed",
|
||||||
height: 300,
|
height: 300,
|
||||||
colors: ["purple", "magenta", "light-blue"],
|
colors: ["purple", "magenta", "light-blue"],
|
||||||
@ -523,19 +528,18 @@ var dc = {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
sideContent: {},
|
|
||||||
options: [{
|
options: [{
|
||||||
name: "lineOptions",
|
name: "type",
|
||||||
path: ["lineOptions"],
|
path: ["type"],
|
||||||
type: "map",
|
type: "string",
|
||||||
mapKeys: ['hideLine', 'hideDots', 'heatline', 'regionFill'],
|
|
||||||
states: {
|
states: {
|
||||||
"Line": [0, 1, 0, 0],
|
"Mixed": 'axis-mixed',
|
||||||
"Dots": [1, 0, 0, 0],
|
"Line": 'line',
|
||||||
"HeatLine": [0, 1, 1, 0],
|
"Bar": 'bar',
|
||||||
"Region": [0, 1, 0, 1]
|
"Pie Chart": 'pie',
|
||||||
|
"Percentage Chart": 'percentage'
|
||||||
},
|
},
|
||||||
activeState: "HeatLine"
|
activeState: "Mixed"
|
||||||
}],
|
}],
|
||||||
actions: [{ name: "Export ...", fn: "export", args: [] }]
|
actions: [{ name: "Export ...", fn: "export", args: [] }]
|
||||||
}]
|
}]
|
||||||
@ -614,6 +618,34 @@ var dc = {
|
|||||||
lang: "javascript",
|
lang: "javascript",
|
||||||
content: ' let heatmap = new frappe.Chart("#heatmap", {\n type: \'heatmap\',\n title: "Monthly Distribution",\n data: {\n dataPoints: {\'1524064033\': 8, /* ... */},\n // object with timestamp-value pairs\n start: startDate\n end: endDate // Date objects\n },\n countLabel: \'Level\',\n discreteDomains: 0 // default: 1\n colors: [\'#ebedf0\', \'#c0ddf9\', \'#73b3f3\', \'#3886e1\', \'#17459e\'],\n // Set of five incremental colors,\n // preferably with a low-saturation color for zero data;\n // def: [\'#ebedf0\', \'#c6e48b\', \'#7bc96f\', \'#239a3b\', \'#196127\']\n });'
|
content: ' let heatmap = new frappe.Chart("#heatmap", {\n type: \'heatmap\',\n title: "Monthly Distribution",\n data: {\n dataPoints: {\'1524064033\': 8, /* ... */},\n // object with timestamp-value pairs\n start: startDate\n end: endDate // Date objects\n },\n countLabel: \'Level\',\n discreteDomains: 0 // default: 1\n colors: [\'#ebedf0\', \'#c0ddf9\', \'#73b3f3\', \'#3886e1\', \'#17459e\'],\n // Set of five incremental colors,\n // preferably with a low-saturation color for zero data;\n // def: [\'#ebedf0\', \'#c6e48b\', \'#7bc96f\', \'#239a3b\', \'#196127\']\n });'
|
||||||
}]
|
}]
|
||||||
|
},
|
||||||
|
codePenDemo: {
|
||||||
|
title: "Demo",
|
||||||
|
contentBlocks: [{
|
||||||
|
type: "custom",
|
||||||
|
html: '<p data-height="299" data-theme-id="light" data-slug-hash="wjKBoq" data-default-tab="js,result"\n data-user="pratu16x7" data-embed-version="2" data-pen-title="Frappe Charts Demo" class="codepen">\n See the Pen <a href="https://codepen.io/pratu16x7/pen/wjKBoq/">Frappe Charts Demo</a>\n by Prateeksha Singh (<a href="https://codepen.io/pratu16x7">@pratu16x7</a>) on\n <a href="https://codepen.io">CodePen</a>.\n </p>'
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
optionsList: {
|
||||||
|
title: "Available Options",
|
||||||
|
contentBlocks: [{
|
||||||
|
type: "code",
|
||||||
|
lang: "javascript",
|
||||||
|
content: '\n ...\n {\n data: {\n labels: [],\n datasets: [],\n yRegions: [],\n yMarkers: []\n }\n title: \'\',\n colors: [],\n height: 200,\n\n tooltipOptions: {\n formatTooltipX: d => (d + \'\').toUpperCase(),\n formatTooltipY: d => d + \' pts\',\n }\n\n // Axis charts\n isNavigable: 1, // default: 0\n valuesOverPoints: 1, // default: 0\n barOptions: {\n spaceRatio: 1 // default: 0.5\n stacked: 1 // default: 0\n }\n\n lineOptions: {\n dotSize: 6, // default: 4\n hideLine: 0, // default: 0\n hideDots: 1, // default: 0\n heatline: 1, // default: 0\n regionFill: 1 // default: 0\n }\n\n axisOptions: {\n yAxisMode: \'span\', // Axis lines, default\n xAxisMode: \'tick\', // No axis lines, only short ticks\n xIsSeries: 1 // Allow skipping x values for space\n // default: 0\n },\n\n // Pie/Percentage charts\n maxLegendPoints: 6, // default: 20\n maxSlices: 10, // default: 20\n\n // Percentage chart\n barOptions: {\n height: 15 // default: 20\n depth: 5 // default: 2\n }\n\n // Heatmap\n discreteDomains: 1, // default: 1\n }\n ...\n\n // Updating values\n chart.update(data);\n\n // Axis charts:\n chart.addDataPoint(label, valueFromEachDataset, index)\n chart.removeDataPoint(index)\n chart.updateDataset(datasetValues, index)\n\n // Exporting\n chart.export();\n\n // Unbind window-resize events\n chart.unbindWindowEvents();\n\n '
|
||||||
|
}]
|
||||||
|
},
|
||||||
|
|
||||||
|
installation: {
|
||||||
|
title: "Install",
|
||||||
|
contentBlocks: [{ type: "text", content: 'Install via npm' }, { type: "code", lang: "console", content: ' npm install frappe-charts' }, { type: "text", content: 'And include it in your project' }, { type: "code", lang: "javascript", content: ' import { Chart } from "frappe-charts' }, { type: "text", content: 'Use as:' }, {
|
||||||
|
type: "code",
|
||||||
|
lang: "javascript",
|
||||||
|
content: ' new Chart(); // ES6 module\n // or\n new frappe.Chart(); // Browser'
|
||||||
|
}, { type: "text", content: '... or include it directly in your HTML' }, {
|
||||||
|
type: "code",
|
||||||
|
lang: "html",
|
||||||
|
content: ' <script src="https://unpkg.com/frappe-charts@1.1.0"></script>'
|
||||||
|
}]
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -658,30 +690,37 @@ var docSectionBuilder = function () {
|
|||||||
}, {
|
}, {
|
||||||
key: 'getBlock',
|
key: 'getBlock',
|
||||||
value: function getBlock(blockConf) {
|
value: function getBlock(blockConf) {
|
||||||
var block = void 0;
|
var fnName = 'get' + toTitleCase(blockConf.type);
|
||||||
var type = blockConf.type;
|
if (this[fnName]) {
|
||||||
|
return this[fnName](blockConf);
|
||||||
if (type === "text") {
|
|
||||||
block = this.getText(blockConf);
|
|
||||||
} else if (type === "code") {
|
|
||||||
block = this.getCode(blockConf);
|
|
||||||
} else {
|
} else {
|
||||||
block = this.getDemo(blockConf);
|
throw new Error('Unknown section block type \'' + blockConf.type + '\'.');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'getText',
|
key: 'getText',
|
||||||
value: function getText(blockConf) {}
|
value: function getText(blockConf) {
|
||||||
|
return $.create('p', {
|
||||||
|
inside: this.section,
|
||||||
|
innerHTML: blockConf.content
|
||||||
|
});
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'getCode',
|
key: 'getCode',
|
||||||
value: function getCode(blockConf) {
|
value: function getCode(blockConf) {
|
||||||
var pre = $.create('pre', { inside: this.section });
|
var pre = $.create('pre', { inside: this.section });
|
||||||
|
var lang = blockConf.lang || 'javascript';
|
||||||
var code = $.create('code', {
|
var code = $.create('code', {
|
||||||
inside: pre,
|
inside: pre,
|
||||||
className: 'hljs ' + blockConf.lang,
|
className: 'hljs ' + lang,
|
||||||
innerHTML: blockConf.content
|
innerHTML: blockConf.content
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
}, {
|
||||||
|
key: 'getCustom',
|
||||||
|
value: function getCustom(blockConf) {
|
||||||
|
this.section.innerHTML += blockConf.html;
|
||||||
|
}
|
||||||
}, {
|
}, {
|
||||||
key: 'getDemo',
|
key: 'getDemo',
|
||||||
value: function getDemo(blockConf) {
|
value: function getDemo(blockConf) {
|
||||||
@ -723,7 +762,7 @@ var docSectionBuilder = function () {
|
|||||||
args[o.path[0]][attr] = state[i];
|
args[o.path[0]][attr] = state[i];
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
// boolean, number, object
|
// boolean, string, number, object
|
||||||
args[o.path[0]] = state;
|
args[o.path[0]] = state;
|
||||||
}
|
}
|
||||||
_this2.libObj = new _this2.LIB_OBJ(figure, args);
|
_this2.libObj = new _this2.LIB_OBJ(figure, args);
|
||||||
@ -770,63 +809,10 @@ lineComposite.parent.addEventListener('data-select', function (e) {
|
|||||||
barComposite.updateDatasets([fireballOver25[i], fireball_5_25[i], fireball_2_5[i]]);
|
barComposite.updateDatasets([fireballOver25[i], fireball_5_25[i], fireball_2_5[i]]);
|
||||||
});
|
});
|
||||||
|
|
||||||
// ================================================================================
|
var section = document.querySelector('.demo-main');
|
||||||
|
dcb.setParent(section);
|
||||||
var customColors = ['purple', 'magenta', 'light-blue'];
|
dcb.setSys(dc.demoMain);
|
||||||
var typeChartArgs = {
|
dcb.make();
|
||||||
title: "My Awesome Chart",
|
|
||||||
data: typeData,
|
|
||||||
type: 'axis-mixed',
|
|
||||||
height: 300,
|
|
||||||
colors: customColors,
|
|
||||||
valuesOverPoints: 1,
|
|
||||||
|
|
||||||
// maxLegendPoints: 6,
|
|
||||||
maxSlices: 10,
|
|
||||||
|
|
||||||
tooltipOptions: {
|
|
||||||
formatTooltipX: function formatTooltipX(d) {
|
|
||||||
return (d + '').toUpperCase();
|
|
||||||
},
|
|
||||||
formatTooltipY: function formatTooltipY(d) {
|
|
||||||
return d + ' pts';
|
|
||||||
}
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
var aggrChart = new Chart("#chart-aggr", typeChartArgs);
|
|
||||||
|
|
||||||
Array.prototype.slice.call(document.querySelectorAll('.aggr-type-buttons button')).map(function (el) {
|
|
||||||
el.addEventListener('click', function (e) {
|
|
||||||
var btn = e.target;
|
|
||||||
var type = btn.getAttribute('data-type');
|
|
||||||
typeChartArgs.type = type;
|
|
||||||
if (type !== 'axis-mixed') {
|
|
||||||
typeChartArgs.colors = undefined;
|
|
||||||
} else {
|
|
||||||
typeChartArgs.colors = customColors;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (type !== 'percentage') {
|
|
||||||
typeChartArgs.height = 300;
|
|
||||||
} else {
|
|
||||||
typeChartArgs.height = undefined;
|
|
||||||
}
|
|
||||||
|
|
||||||
var newChart = new Chart("#chart-aggr", typeChartArgs);
|
|
||||||
if (newChart) {
|
|
||||||
aggrChart = newChart;
|
|
||||||
}
|
|
||||||
Array.prototype.slice.call(btn.parentNode.querySelectorAll('button')).map(function (el) {
|
|
||||||
el.classList.remove('active');
|
|
||||||
});
|
|
||||||
btn.classList.add('active');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
document.querySelector('.export-aggr').addEventListener('click', function () {
|
|
||||||
aggrChart.export();
|
|
||||||
});
|
|
||||||
|
|
||||||
// Update values chart
|
// Update values chart
|
||||||
// ================================================================================
|
// ================================================================================
|
||||||
@ -920,7 +906,7 @@ document.querySelector('.export-update').addEventListener('click', function () {
|
|||||||
// Trends Chart
|
// Trends Chart
|
||||||
// ================================================================================
|
// ================================================================================
|
||||||
|
|
||||||
var section = document.querySelector('.trends-plot');
|
section = document.querySelector('.trends-plot');
|
||||||
dcb.setParent(section);
|
dcb.setParent(section);
|
||||||
dcb.setSys(dc.trendsPlot);
|
dcb.setSys(dc.trendsPlot);
|
||||||
dcb.make();
|
dcb.make();
|
||||||
@ -963,4 +949,19 @@ dcb.setParent(section);
|
|||||||
dcb.setSys(dc.heatmap);
|
dcb.setSys(dc.heatmap);
|
||||||
dcb.make();
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.codepen');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.codePenDemo);
|
||||||
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.options');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.optionsList);
|
||||||
|
dcb.make();
|
||||||
|
|
||||||
|
section = document.querySelector('.installation');
|
||||||
|
dcb.setParent(section);
|
||||||
|
dcb.setSys(dc.installation);
|
||||||
|
dcb.make();
|
||||||
|
|
||||||
}());
|
}());
|
||||||
|
|||||||
159
docs/index.html
159
docs/index.html
@ -32,61 +32,7 @@
|
|||||||
<figure id="bar-composite-1" class="border"></figure>
|
<figure id="bar-composite-1" class="border"></figure>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
<section>
|
<section class="demo-main"></section>
|
||||||
<h6>Create a chart</h6>
|
|
||||||
<p>Click or use arrow keys to navigate data points</p>
|
|
||||||
<pre><code class="hljs html"> <!--HTML-->
|
|
||||||
<figure id="frost-chart"></figure></code></pre>
|
|
||||||
<pre><code class="hljs javascript"> // Javascript
|
|
||||||
let chart = new frappe.Chart( "#frost-chart", { // or DOM element
|
|
||||||
data: {
|
|
||||||
labels: ["12am-3am", "3am-6am", "6am-9am", "9am-12pm",
|
|
||||||
"12pm-3pm", "3pm-6pm", "6pm-9pm", "9pm-12am"],
|
|
||||||
|
|
||||||
datasets: [
|
|
||||||
{
|
|
||||||
name: "Some Data", chartType: 'bar',
|
|
||||||
values: [25, 40, 30, 35, 8, 52, 17, -4]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Another Set", chartType: 'bar',
|
|
||||||
values: [25, 50, -10, 15, 18, 32, 27, 14]
|
|
||||||
},
|
|
||||||
{
|
|
||||||
name: "Yet Another", chartType: 'line',
|
|
||||||
values: [15, 20, -3, -15, 58, 12, -17, 37]
|
|
||||||
}
|
|
||||||
],
|
|
||||||
|
|
||||||
yMarkers: [{ label: "Marker", value: 70,
|
|
||||||
options: { labelPos: 'left' }}],
|
|
||||||
yRegions: [{ label: "Region", start: -10, end: 50,
|
|
||||||
options: { labelPos: 'right' }}]
|
|
||||||
},
|
|
||||||
|
|
||||||
title: "My Awesome Chart",
|
|
||||||
type: 'axis-mixed', // or 'bar', 'line', 'pie', 'percentage'
|
|
||||||
height: 300,
|
|
||||||
colors: ['purple', '#ffa3ef', 'light-blue'],
|
|
||||||
|
|
||||||
tooltipOptions: {
|
|
||||||
formatTooltipX: d => (d + '').toUpperCase(),
|
|
||||||
formatTooltipY: d => d + ' pts',
|
|
||||||
}
|
|
||||||
});
|
|
||||||
|
|
||||||
chart.export();
|
|
||||||
</code></pre>
|
|
||||||
|
|
||||||
<div id="chart-aggr" class="border"></div>
|
|
||||||
<div class="btn-group aggr-type-buttons mt1 mx-auto" role="group">
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary active" data-type='axis-mixed'>Mixed</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary" data-type='pie'>Pie Chart</button>
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary" data-type='percentage'>Percentage Chart</button>
|
|
||||||
</div>
|
|
||||||
<button type="button" class="btn btn-sm btn-secondary export-aggr mt1">Export ...</button>
|
|
||||||
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h6>Update Values</h6>
|
<h6>Update Values</h6>
|
||||||
@ -131,105 +77,9 @@
|
|||||||
|
|
||||||
<section class="heatmap"></section>
|
<section class="heatmap"></section>
|
||||||
|
|
||||||
<section>
|
<section class="codepen"></section>
|
||||||
<h6>Demo</h6>
|
<section class="options"></section>
|
||||||
<p data-height="299" data-theme-id="light" data-slug-hash="wjKBoq" data-default-tab="js,result"
|
<section class="installation"></section>
|
||||||
data-user="pratu16x7" data-embed-version="2" data-pen-title="Frappe Charts Demo" class="codepen">
|
|
||||||
See the Pen <a href="https://codepen.io/pratu16x7/pen/wjKBoq/">Frappe Charts Demo</a>
|
|
||||||
by Prateeksha Singh (<a href="https://codepen.io/pratu16x7">@pratu16x7</a>) on
|
|
||||||
<a href="https://codepen.io">CodePen</a>.
|
|
||||||
</p>
|
|
||||||
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h6>Available options</h6>
|
|
||||||
<pre><code class="hljs javascript">
|
|
||||||
...
|
|
||||||
{
|
|
||||||
data: {
|
|
||||||
labels: [],
|
|
||||||
datasets: [],
|
|
||||||
yRegions: [],
|
|
||||||
yMarkers: []
|
|
||||||
}
|
|
||||||
title: '',
|
|
||||||
colors: [],
|
|
||||||
height: 200,
|
|
||||||
|
|
||||||
tooltipOptions: {
|
|
||||||
formatTooltipX: d => (d + '').toUpperCase(),
|
|
||||||
formatTooltipY: d => d + ' pts',
|
|
||||||
}
|
|
||||||
|
|
||||||
// Axis charts
|
|
||||||
isNavigable: 1, // default: 0
|
|
||||||
valuesOverPoints: 1, // default: 0
|
|
||||||
barOptions: {
|
|
||||||
spaceRatio: 1 // default: 0.5
|
|
||||||
stacked: 1 // default: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
lineOptions: {
|
|
||||||
dotSize: 6, // default: 4
|
|
||||||
hideLine: 0, // default: 0
|
|
||||||
hideDots: 1, // default: 0
|
|
||||||
heatline: 1, // default: 0
|
|
||||||
regionFill: 1 // default: 0
|
|
||||||
}
|
|
||||||
|
|
||||||
axisOptions: {
|
|
||||||
yAxisMode: 'span', // Axis lines, default
|
|
||||||
xAxisMode: 'tick', // No axis lines, only short ticks
|
|
||||||
xIsSeries: 1 // Allow skipping x values for space
|
|
||||||
// default: 0
|
|
||||||
},
|
|
||||||
|
|
||||||
// Pie/Percentage charts
|
|
||||||
maxLegendPoints: 6, // default: 20
|
|
||||||
maxSlices: 10, // default: 20
|
|
||||||
|
|
||||||
// Percentage chart
|
|
||||||
barOptions: {
|
|
||||||
height: 15 // default: 20
|
|
||||||
depth: 5 // default: 2
|
|
||||||
}
|
|
||||||
|
|
||||||
// Heatmap
|
|
||||||
discreteDomains: 1, // default: 1
|
|
||||||
}
|
|
||||||
...
|
|
||||||
|
|
||||||
// Updating values
|
|
||||||
chart.update(data);
|
|
||||||
|
|
||||||
// Axis charts:
|
|
||||||
chart.addDataPoint(label, valueFromEachDataset, index)
|
|
||||||
chart.removeDataPoint(index)
|
|
||||||
chart.updateDataset(datasetValues, index)
|
|
||||||
|
|
||||||
// Exporting
|
|
||||||
chart.export();
|
|
||||||
|
|
||||||
// Unbind window-resize events
|
|
||||||
chart.unbindWindowEvents();
|
|
||||||
|
|
||||||
</code></pre>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section>
|
|
||||||
<h6>Install</h6>
|
|
||||||
<p>Install via npm</p>
|
|
||||||
<pre><code class="hljs console"> npm install frappe-charts</code></pre>
|
|
||||||
<p>And include it in your project</p>
|
|
||||||
<pre><code class="hljs javascript"> import { Chart } from "frappe-charts"</code></pre>
|
|
||||||
<p>... or include it directly in your HTML</p>
|
|
||||||
<pre><code class="hljs html"> <script src="https://unpkg.com/frappe-charts@1.1.0"></script></code></pre>
|
|
||||||
<p>Use as:</p>
|
|
||||||
<pre><code class="hljs javascript"> new Chart(); // ES6 module
|
|
||||||
// or
|
|
||||||
new frappe.Chart(); // Browser</code></pre>
|
|
||||||
</section>
|
|
||||||
|
|
||||||
<section class="text-center">
|
<section class="text-center">
|
||||||
<!-- Closing -->
|
<!-- Closing -->
|
||||||
@ -266,6 +116,7 @@
|
|||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
<script async src="https://static.codepen.io/assets/embed/ei.js"></script>
|
||||||
<script src="assets/js/frappe-charts.min.js"></script>
|
<script src="assets/js/frappe-charts.min.js"></script>
|
||||||
<script src="assets/js/index.min.js"></script>
|
<script src="assets/js/index.min.js"></script>
|
||||||
</body>
|
</body>
|
||||||
|
|||||||
@ -92,3 +92,7 @@ export function getPositionByAngle(angle, radius) {
|
|||||||
y: Math.cos(angle * ANGLE_RATIO) * radius,
|
y: Math.cos(angle * ANGLE_RATIO) * radius,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function toTitleCase(str) {
|
||||||
|
return str.replace(/\w*/g, function(txt){return txt.charAt(0).toUpperCase() + txt.substr(1).toLowerCase();});
|
||||||
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user