6
6
* @description
7
7
* Theming
8
8
*/
9
- angular . module ( 'material.core.theming' , [ 'material.core.theming.palette' ] )
9
+ angular . module ( 'material.core.theming' , [ 'material.core.theming.palette' , 'material.core.meta' ] )
10
10
. directive ( 'mdTheme' , ThemingDirective )
11
11
. directive ( 'mdThemable' , ThemableDirective )
12
12
. directive ( 'mdThemesDisabled' , disableThemesDirective )
@@ -93,6 +93,29 @@ function detectDisabledThemes($mdThemingProvider) {
93
93
* $mdThemingProvider.registerStyles(require('../styles/my-component.theme.css'));
94
94
* });
95
95
* </hljs>
96
+ *
97
+ * ### Browser color
98
+ *
99
+ * Enables browser header coloring
100
+ * for more info please visit:
101
+ * https://developers.google.com/web/fundamentals/design-and-ui/browser-customization/theme-color
102
+ *
103
+ * Options parameter: <br/>
104
+ * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme. <br/>
105
+ * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',
106
+ * 'accent', 'background' and 'warn'. Default is `primary`. <br/>
107
+ * `hue` - The hue from the selected palette. Default is `800`<br/>
108
+ *
109
+ * <hljs lang="js">
110
+ * myAppModule.config(function($mdThemingProvider) {
111
+ * // Enable browser color
112
+ * $mdThemingProvider.enableBrowserColor({
113
+ * theme: 'myTheme', // Default is 'default'
114
+ * palette: 'accent', // Default is 'primary', any basic material palette and extended palettes are available
115
+ * hue: '200' // Default is '800'
116
+ * });
117
+ * });
118
+ * </hljs>
96
119
*/
97
120
98
121
/**
@@ -120,6 +143,17 @@ function detectDisabledThemes($mdThemingProvider) {
120
143
* classes when they change. Default is `false`. Enabling can reduce performance.
121
144
*/
122
145
146
+ /**
147
+ * @ngdoc method
148
+ * @name $mdThemingProvider#enableBrowserColor
149
+ * @param {Object= } options Options object for the browser color<br/>
150
+ * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme. <br/>
151
+ * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',
152
+ * 'accent', 'background' and 'warn'. Default is `primary`. <br/>
153
+ * `hue` - The hue from the selected palette. Default is `800`<br/>
154
+ * @returns {Function } remove function of the browser color
155
+ */
156
+
123
157
/* Some Example Valid Theming Expressions
124
158
* =======================================
125
159
*
@@ -228,7 +262,7 @@ var themeConfig = {
228
262
/**
229
263
*
230
264
*/
231
- function ThemingProvider ( $mdColorPalette ) {
265
+ function ThemingProvider ( $mdColorPalette , $$mdMetaProvider ) {
232
266
PALETTES = { } ;
233
267
var THEMES = { } ;
234
268
@@ -242,6 +276,53 @@ function ThemingProvider($mdColorPalette) {
242
276
243
277
// Default theme defined in core.js
244
278
279
+ /**
280
+ * Adds `theme-color` and `msapplication-navbutton-color` meta tags with the color parameter
281
+ * @param {string } color Hex value of the wanted browser color
282
+ * @returns {Function } Remove function of the meta tags
283
+ */
284
+ var setBrowserColor = function ( color ) {
285
+ // Chrome, Firefox OS and Opera
286
+ var removeChrome = $$mdMetaProvider . setMeta ( 'theme-color' , color ) ;
287
+ // Windows Phone
288
+ var removeWindows = $$mdMetaProvider . setMeta ( 'msapplication-navbutton-color' , color ) ;
289
+
290
+ return function ( ) {
291
+ removeChrome ( ) ;
292
+ removeWindows ( ) ;
293
+ }
294
+ } ;
295
+
296
+ /**
297
+ * Enables browser header coloring
298
+ * for more info please visit:
299
+ * https://developers.google.com/web/fundamentals/design-and-ui/browser-customization/theme-color
300
+ *
301
+ * The default color is `800` from `primary` palette of the `default` theme
302
+ *
303
+ * options are:
304
+ * `theme` - A defined theme via `$mdThemeProvider` to use the palettes from. Default is `default` theme
305
+ * `palette` - Can be any one of the basic material design palettes, extended defined palettes and 'primary',
306
+ * 'accent', 'background' and 'warn'. Default is `primary`
307
+ * `hue` - The hue from the selected palette. Default is `800`
308
+ *
309
+ * @param {Object= } options Options object for the browser color
310
+ * @returns {Function } remove function of the browser color
311
+ */
312
+ var enableBrowserColor = function ( options ) {
313
+ options = angular . isObject ( options ) ? options : { } ;
314
+
315
+ var theme = options . theme || 'default' ;
316
+ var hue = options . hue || '800' ;
317
+
318
+ var palette = PALETTES [ options . palette ] ||
319
+ PALETTES [ THEMES [ theme ] . colors [ options . palette || 'primary' ] . name ] ;
320
+
321
+ var color = angular . isObject ( palette [ hue ] ) ? palette [ hue ] . hex : palette [ hue ] ;
322
+
323
+ return setBrowserColor ( color ) ;
324
+ } ;
325
+
245
326
return themingProvider = {
246
327
definePalette : definePalette ,
247
328
extendPalette : extendPalette ,
@@ -282,6 +363,8 @@ function ThemingProvider($mdColorPalette) {
282
363
alwaysWatchTheme = alwaysWatch ;
283
364
} ,
284
365
366
+ enableBrowserColor : enableBrowserColor ,
367
+
285
368
$get : ThemingService ,
286
369
_LIGHT_DEFAULT_HUES : LIGHT_DEFAULT_HUES ,
287
370
_DARK_DEFAULT_HUES : DARK_DEFAULT_HUES ,
@@ -464,6 +547,7 @@ function ThemingProvider($mdColorPalette) {
464
547
applyTheme . registered = registered ;
465
548
applyTheme . defaultTheme = function ( ) { return defaultTheme ; } ;
466
549
applyTheme . generateTheme = function ( name ) { generateTheme ( THEMES [ name ] , name , themeConfig . nonce ) ; } ;
550
+ applyTheme . setBrowserColor = enableBrowserColor ;
467
551
468
552
return applyTheme ;
469
553
@@ -769,6 +853,7 @@ function generateAllThemes($injector, $mdTheming) {
769
853
}
770
854
771
855
palette [ hueName ] = {
856
+ hex : palette [ hueName ] ,
772
857
value : rgbValue ,
773
858
contrast : getContrastColor ( )
774
859
} ;
0 commit comments