Skip to content
This repository has been archived by the owner on Mar 20, 2024. It is now read-only.

Commit

Permalink
feat(theming): support for extending palettes
Browse files Browse the repository at this point in the history
* Adds an easy way to extend your own palettes (tested and confirmed)

Closes #21
  • Loading branch information
devversion committed Nov 3, 2016
1 parent 0f4a675 commit b6527ad
Show file tree
Hide file tree
Showing 2 changed files with 47 additions and 17 deletions.
16 changes: 13 additions & 3 deletions debug.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,21 @@ import {Logger} from './lib/common/Logger';

let tools = new MaterialTools({
destination: './tmp',
version: '1.1.0-rc.5',
modules: ['list', 'datepicker'],
version: '1.1.1',
modules: ['button', 'list', 'datepicker'],
theme: {
primaryPalette: 'indigo',
primaryPalette: 'darkerRed',
accentPalette: 'purple'
},
palettes: {
darkerRed: {
extends: 'red',
50: 'FBE9E7',
100: 'FFCCBC',
200: 'FFAB91',
300: 'FF8A65',
contrastDefaultColor: 'dark'
}
}
});

Expand Down
48 changes: 34 additions & 14 deletions lib/builders/ThemeBuilder.ts
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,16 @@ export class ThemeBuilder {

/** Registers a palette in the $mdTheming provider */
private _registerPalette(paletteName: string, palette: MdPalette) {

if (palette.extends) {
const basePalette = palette.extends;

// Sanitize the palette to fulfill the $mdTheming service requirements
this._sanitizePalette(palette);

palette = this._$mdThemingProvider.extendPalette(basePalette, palette);
}

this._$mdThemingProvider.definePalette(paletteName, palette);
}

Expand All @@ -105,12 +115,21 @@ export class ThemeBuilder {
}
}

/**
* Sanitizes the palette definition from unnecessary overflow, which can lead to errors in the
* $mdTheming service.
*/
private _sanitizePalette(palette: MdPalette) {
delete palette.extends;
}

}

/** Mocked interface of the $mdThemingProvider */
interface MdThemingProvider {
theme: (themeName, inheritFrom?) => MdThemeBuilder;
definePalette: (paletteName: string, palette: MdPalette) => void;
extendPalette: (paletteName: string, palette: MdPalette) => MdPalette;
}

/** Angular Material Theme Builder interface */
Expand Down Expand Up @@ -156,20 +175,21 @@ export interface MdPaletteDefinition {

/** Angular Material Palette map */
export interface MdPalette {
50: string;
100: string;
200: string;
300: string;
400: string;
500: string;
600: string;
700: string;
800: string;
900: string;
A100: string;
A200: string;
A400: string;
A700: string;
extends: string;
50?: string;
100?: string;
200?: string;
300?: string;
400?: string;
500?: string;
600?: string;
700?: string;
800?: string;
900?: string;
A100?: string;
A200?: string;
A400?: string;
A700?: string;
contrastDefaultColor?: string;
contrastDarkColors?: string[];
contrastLightColors?: string[];
Expand Down

0 comments on commit b6527ad

Please sign in to comment.