123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273 |
- <!DOCTYPE html>
- <html>
- <head>
- <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
- <title>The source code</title>
- <link href="../resources/prettify/prettify.css" type="text/css" rel="stylesheet" />
- <script type="text/javascript" src="../resources/prettify/prettify.js"></script>
- <style type="text/css">
- .highlight { display: block; background-color: #ddd; }
- </style>
- <script type="text/javascript">
- function highlight() {
- document.getElementById(location.hash.replace(/#/, "")).className = "highlight";
- }
- </script>
- </head>
- <body onload="prettyPrint(); highlight();">
- <pre class="prettyprint lang-js"><span id='Ext-chart-theme-Theme'>/**
- </span> * @class Ext.chart.theme.Theme
- *
- * Provides chart theming.
- *
- * Used as mixins by Ext.chart.Chart.
- */
- Ext.define('Ext.chart.theme.Theme', {
- /* Begin Definitions */
- requires: ['Ext.draw.Color'],
- /* End Definitions */
- theme: 'Base',
- themeAttrs: false,
-
- initTheme: function(theme) {
- var me = this,
- themes = Ext.chart.theme,
- key, gradients;
- if (theme) {
- theme = theme.split(':');
- for (key in themes) {
- if (key == theme[0]) {
- gradients = theme[1] == 'gradients';
- me.themeAttrs = new themes[key]({
- useGradients: gradients
- });
- if (gradients) {
- me.gradients = me.themeAttrs.gradients;
- }
- if (me.themeAttrs.background) {
- me.background = me.themeAttrs.background;
- }
- return;
- }
- }
- //<debug>
- Ext.Error.raise('No theme found named "' + theme + '"');
- //</debug>
- }
- }
- },
- // This callback is executed right after when the class is created. This scope refers to the newly created class itself
- function() {
- /* Theme constructor: takes either a complex object with styles like:
-
- {
- axis: {
- fill: '#000',
- 'stroke-width': 1
- },
- axisLabelTop: {
- fill: '#000',
- font: '11px Arial'
- },
- axisLabelLeft: {
- fill: '#000',
- font: '11px Arial'
- },
- axisLabelRight: {
- fill: '#000',
- font: '11px Arial'
- },
- axisLabelBottom: {
- fill: '#000',
- font: '11px Arial'
- },
- axisTitleTop: {
- fill: '#000',
- font: '11px Arial'
- },
- axisTitleLeft: {
- fill: '#000',
- font: '11px Arial'
- },
- axisTitleRight: {
- fill: '#000',
- font: '11px Arial'
- },
- axisTitleBottom: {
- fill: '#000',
- font: '11px Arial'
- },
- series: {
- 'stroke-width': 1
- },
- seriesLabel: {
- font: '12px Arial',
- fill: '#333'
- },
- marker: {
- stroke: '#555',
- fill: '#000',
- radius: 3,
- size: 3
- },
- seriesThemes: [{
- fill: '#C6DBEF'
- }, {
- fill: '#9ECAE1'
- }, {
- fill: '#6BAED6'
- }, {
- fill: '#4292C6'
- }, {
- fill: '#2171B5'
- }, {
- fill: '#084594'
- }],
- markerThemes: [{
- fill: '#084594',
- type: 'circle'
- }, {
- fill: '#2171B5',
- type: 'cross'
- }, {
- fill: '#4292C6',
- type: 'plus'
- }]
- }
-
- ...or also takes just an array of colors and creates the complex object:
-
- {
- colors: ['#aaa', '#bcd', '#eee']
- }
-
- ...or takes just a base color and makes a theme from it
-
- {
- baseColor: '#bce'
- }
-
- To create a new theme you may add it to the Themes object:
-
- Ext.chart.theme.MyNewTheme = Ext.extend(Object, {
- constructor: function(config) {
- Ext.chart.theme.call(this, config, {
- baseColor: '#mybasecolor'
- });
- }
- });
-
- //Proposal:
- Ext.chart.theme.MyNewTheme = Ext.chart.createTheme('#basecolor');
-
- ...and then to use it provide the name of the theme (as a lower case string) in the chart config.
-
- {
- theme: 'mynewtheme'
- }
- */
- (function() {
- Ext.chart.theme = function(config, base) {
- config = config || {};
- var i = 0, d = +new Date(), l, colors, color,
- seriesThemes, markerThemes,
- seriesTheme, markerTheme,
- key, gradients = [],
- midColor, midL;
-
- if (config.baseColor) {
- midColor = Ext.draw.Color.fromString(config.baseColor);
- midL = midColor.getHSL()[2];
- if (midL < 0.15) {
- midColor = midColor.getLighter(0.3);
- } else if (midL < 0.3) {
- midColor = midColor.getLighter(0.15);
- } else if (midL > 0.85) {
- midColor = midColor.getDarker(0.3);
- } else if (midL > 0.7) {
- midColor = midColor.getDarker(0.15);
- }
- config.colors = [ midColor.getDarker(0.3).toString(),
- midColor.getDarker(0.15).toString(),
- midColor.toString(),
- midColor.getLighter(0.15).toString(),
- midColor.getLighter(0.3).toString()];
- delete config.baseColor;
- }
- if (config.colors) {
- colors = config.colors.slice();
- markerThemes = base.markerThemes;
- seriesThemes = base.seriesThemes;
- l = colors.length;
- base.colors = colors;
- for (; i < l; i++) {
- color = colors[i];
- markerTheme = markerThemes[i] || {};
- seriesTheme = seriesThemes[i] || {};
- markerTheme.fill = seriesTheme.fill = markerTheme.stroke = seriesTheme.stroke = color;
- markerThemes[i] = markerTheme;
- seriesThemes[i] = seriesTheme;
- }
- base.markerThemes = markerThemes.slice(0, l);
- base.seriesThemes = seriesThemes.slice(0, l);
- //the user is configuring something in particular (either markers, series or pie slices)
- }
- for (key in base) {
- if (key in config) {
- if (Ext.isObject(config[key]) && Ext.isObject(base[key])) {
- Ext.apply(base[key], config[key]);
- } else {
- base[key] = config[key];
- }
- }
- }
- if (config.useGradients) {
- colors = base.colors || (function () {
- var ans = [];
- for (i = 0, seriesThemes = base.seriesThemes, l = seriesThemes.length; i < l; i++) {
- ans.push(seriesThemes[i].fill || seriesThemes[i].stroke);
- }
- return ans;
- }());
- for (i = 0, l = colors.length; i < l; i++) {
- midColor = Ext.draw.Color.fromString(colors[i]);
- if (midColor) {
- color = midColor.getDarker(0.1).toString();
- midColor = midColor.toString();
- key = 'theme-' + midColor.substr(1) + '-' + color.substr(1) + '-' + d;
- gradients.push({
- id: key,
- angle: 45,
- stops: {
- 0: {
- color: midColor.toString()
- },
- 100: {
- color: color.toString()
- }
- }
- });
- colors[i] = 'url(#' + key + ')';
- }
- }
- base.gradients = gradients;
- base.colors = colors;
- }
- /*
- base.axis = Ext.apply(base.axis || {}, config.axis || {});
- base.axisLabel = Ext.apply(base.axisLabel || {}, config.axisLabel || {});
- base.axisTitle = Ext.apply(base.axisTitle || {}, config.axisTitle || {});
- */
- Ext.apply(this, base);
- };
- }());
- });
- </pre>
- </body>
- </html>
|